@@ -1378,140 +1378,128 @@ TrivialAccept:
1378
1378
_Line_NoClip:
1379
1379
; Draws an unclipped arbitrary line
1380
1380
; Arguments:
1381
- ; arg0 : X0 coordinate (hl)
1382
- ; arg1 : Y0 coordinate (b)
1383
- ; arg2 : X1 coordinate (de)
1384
- ; arg3 : Y1 coordinate (c)
1381
+ ; arg0 : X1 coordinate (hl)
1382
+ ; arg1 : Y1 coordinate (b)
1383
+ ; arg2 : X2 coordinate (de)
1384
+ ; arg3 : Y2 coordinate (c)
1385
1385
; Returns:
1386
1386
; None
1387
1387
ld iy , 0
1388
1388
add iy , sp
1389
- ld de , (iy + 3 )
1390
- ld hl , (iy + 9 )
1389
+ ld hl , (iy + 3 )
1390
+ ld de , (iy + 9 )
1391
1391
ld b , (iy + 6 )
1392
- ld c , (iy + 12 )
1393
- _Line_NoClip_ASM:
1394
- ld a , c
1395
- ld (y1) , a \.r
1396
- ld (nde) , hl \.r
1397
- push de
1398
- push bc
1392
+ ld c , (iy + 12 ) ; line from hl,b to de,c
1399
1393
or a , a
1400
1394
sbc hl , de
1401
- ld a , $ 03
1402
- jr nc ,+ _
1403
- ld a , $ 0B
1404
- _: ld (xStep) , a \.r
1405
- ld (xStep2) , a \.r
1395
+ add hl , de
1396
+ jr c ,+ _ ; draw left to right
1406
1397
ex de , hl
1407
- or a , a
1408
- sbc hl , hl
1409
- sbc hl , de
1410
- jp p ,+ _ \.r
1398
+ ld a , b
1399
+ ld b , c
1400
+ ld c , a
1401
+ _: push bc
1402
+ pop iy
1403
+ push hl
1404
+ ld hl , (currDrawBuffer)
1405
+ ld c , 160
1406
+ mlt bc
1407
+ add hl , bc
1408
+ add hl , bc ; y0 * screenwidth
1409
+ pop bc
1410
+ add hl , bc ; y0 * screenwidth + x0
1411
+ push hl ; save buffer
1411
1412
ex de , hl
1412
- _: ld ( dx ) , hl \.r
1413
+ or a , a
1414
+ sbc hl , bc ; xe - xs
1413
1415
push hl
1414
- add hl , hl
1415
- ld (dx1) , hl \.r
1416
- ld (dx12) , hl \.r
1416
+ pop bc ; bc = dx
1417
+ ld a , iyh
1417
1418
or a , a
1418
1419
sbc hl , hl
1420
+ ld l , a ; y1
1419
1421
ex de , hl
1422
+ ld a , iyl
1420
1423
sbc hl , hl
1421
- ld e , b
1422
- ld l , c
1424
+ ld l , a ; y0
1423
1425
sbc hl , de
1424
- ld a , 30
1425
- adc a , a
1426
- ld (yStep) , a \.r
1427
- ld (yStep2) , a \.r
1426
+ jr nc , $ + 9
1428
1427
ex de , hl
1429
- or a , a
1430
1428
sbc hl , hl
1429
+ ccf
1431
1430
sbc hl , de
1432
- jp p ,+ _ \.r
1431
+ inc hl ; abs(dy)
1432
+ ld a , iyl
1433
+ sub a , iyh
1434
+ ld iy ,- 320
1435
+ jr c , $ + 7
1436
+ ld iy , 320
1437
+ or a , a
1438
+ sbc hl , bc
1439
+ add hl , bc ; hl = dy
1440
+ jr nc , dl_vertical
1441
+ dl_horizontal:
1442
+ ld a , l
1443
+ or a , h
1444
+ ld a , $ 38
1445
+ jr nz , $ + 4
1446
+ xor a , $ 20
1447
+ ld (_smc_dl_jr_0 + 0 ) , a \.r ; write smc
1448
+ ld (_smc_dl_width_1 + 1 ) , iy \.r ; write smc
1433
1449
ex de , hl
1434
- _: ld (dy) , hl \.r
1435
- add hl , hl
1436
- ld (dy1) , hl \.r
1437
- ld (dy12) , hl \.r
1438
- pop de
1439
- pop af
1440
- srl h
1441
- rr l
1450
+ sbc hl , hl
1451
+ ccf
1442
1452
sbc hl , de
1453
+ inc hl
1454
+ ex de , hl ; de = -dy
1455
+ pop hl ; restore buffer
1456
+ ld (_smc_dl_dx_1 + 1 ) , bc \.r ; write smc
1457
+ ld (_smc_dl_dy_1 + 1 ) , de \.r ; write smc
1458
+ push bc
1459
+ srl b
1460
+ rr c
1461
+ push bc
1462
+ pop iy ; iy = dx / 2
1443
1463
pop bc
1444
- ld hl , 0
1445
- jr nc , changeYLoop
1446
- changeXLoop:
1447
- push hl
1448
- ld l , a
1449
- ld h , lcdWidth/ 2
1450
- mlt hl
1451
- add hl , hl
1452
- add hl , bc
1453
- ld de , (currDrawBuffer)
1454
- add hl , de
1464
+ inc bc
1455
1465
Color_SMC_4 =$ + 1
1456
- ld (hl) , 0
1457
- sbc hl , hl
1458
- ld h , b
1459
- ld l , c
1460
- or a , a
1461
- nde =$ + 1
1462
- ld de , 0
1463
- sbc hl , de
1466
+ ld a , $ 00
1467
+ dl_hloop:
1468
+ ld (hl) , a ; write pixel
1469
+ cpi
1470
+ ret po
1471
+ add iy , de ; dy
1472
+ _smc_dl_jr_0:
1473
+ jr c , dl_hloop
1474
+ _smc_dl_width_1:
1475
+ ld de , $ 000000
1476
+ add hl , de ; y inc
1477
+ _smc_dl_dx_1:
1478
+ ld de , $ 000000 ; dx
1479
+ add iy , de
1480
+ _smc_dl_dy_1:
1481
+ ld de , $ 000000 ; dy
1482
+ jr dl_hloop
1483
+ dl_vertical:
1484
+ lea de , iy
1485
+ ld b , c
1486
+ ld a , l
1487
+ ld iyl , a
1488
+ ld c , a
1489
+ srl a ; a = dy / 2
1490
+ inc c
1464
1491
pop hl
1465
- ret z
1466
- xStep nop
1467
- dy1 =$ + 1
1468
- ld de , 0
1469
- or a , a
1470
- adc hl , de
1471
- jp m , changeXLoop \.r
1472
- dx =$ + 1
1473
- ld de , 0
1474
- or a , a
1475
- sbc hl , de
1476
- add hl , de
1477
- jr c , changeXLoop
1478
- yStep nop
1479
- dx1 =$ + 1
1480
- ld de , 0
1481
- sbc hl , de
1482
- jr changeXLoop
1483
- changeYLoop:
1484
- push hl
1485
- ld l , a
1486
- ld h , lcdWidth/ 2
1487
- mlt hl
1488
- add hl , hl
1489
- add hl , bc
1490
- ld de , (currDrawBuffer)
1491
- add hl , de
1492
+ dl_vloop:
1492
1493
Color_SMC_5 =$ + 1
1493
- ld (hl) , 0
1494
- pop hl
1495
- y1 =$ + 1
1496
- cp a , 0
1494
+ ld (hl) , $ 00 ; write pixel
1495
+ dec c
1497
1496
ret z
1498
- yStep2 nop
1499
- dx12 =$ + 1
1500
- ld de , 0
1501
- or a , a
1502
- adc hl , de
1503
- jp m , changeYLoop \.r
1504
- dy =$ + 1
1505
- ld de , 0
1506
- or a , a
1507
- sbc hl , de
1508
- add hl , de
1509
- jr c , changeYLoop
1510
- xStep2 nop
1511
- dy12 =$ + 1
1512
- ld de , 0
1513
- sbc hl , de
1514
- jr changeYLoop
1497
+ add hl , de ; y inc
1498
+ sub a , b ; dx
1499
+ jr nc , dl_vloop
1500
+ inc hl
1501
+ add a , iyl ; dy
1502
+ jr dl_vloop
1515
1503
1516
1504
;-------------------------------------------------------------------------------
1517
1505
_Blit:
0 commit comments