Skip to content

Commit 72e6cb2

Browse files
Update line routine
1 parent 497520e commit 72e6cb2

File tree

1 file changed

+97
-109
lines changed

1 file changed

+97
-109
lines changed

src/graphx/graphx.asm

Lines changed: 97 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1378,140 +1378,128 @@ TrivialAccept:
13781378
_Line_NoClip:
13791379
; Draws an unclipped arbitrary line
13801380
; 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)
13851385
; Returns:
13861386
; None
13871387
ld iy,0
13881388
add iy,sp
1389-
ld de,(iy+3)
1390-
ld hl,(iy+9)
1389+
ld hl,(iy+3)
1390+
ld de,(iy+9)
13911391
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
13991393
or a,a
14001394
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
14061397
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
14111412
ex de,hl
1412-
_: ld (dx),hl \.r
1413+
or a,a
1414+
sbc hl,bc ; xe - xs
14131415
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
14171418
or a,a
14181419
sbc hl,hl
1420+
ld l,a ; y1
14191421
ex de,hl
1422+
ld a,iyl
14201423
sbc hl,hl
1421-
ld e,b
1422-
ld l,c
1424+
ld l,a ; y0
14231425
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
14281427
ex de,hl
1429-
or a,a
14301428
sbc hl,hl
1429+
ccf
14311430
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
14331449
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
14421452
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
14431463
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
14551465
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
14641491
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:
14921493
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
14971496
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
15151503

15161504
;-------------------------------------------------------------------------------
15171505
_Blit:

0 commit comments

Comments
 (0)