From 78245db5fcc78848076dfa31acf49293f7fa422d Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Tue, 3 Jan 2023 19:53:12 -0500 Subject: [PATCH] Fixes to SHRLINELO. (SHRLINEHI still doesn't work) --- applecorn.po | Bin 819200 -> 819200 bytes mainmem.shr.s | 81 +++++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 67 insertions(+), 14 deletions(-) diff --git a/applecorn.po b/applecorn.po index 09681afefaef095915e5465d7bace3ccff3f9584..90860100310c79b75ebdd2afd2d2e78c3b331a19 100644 GIT binary patch delta 5359 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 delta 5085 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 Ls?!;z4%Gc0)v<-b diff --git a/mainmem.shr.s b/mainmem.shr.s index ecfddb2..67c669f 100644 --- a/mainmem.shr.s +++ b/mainmem.shr.s @@ -422,14 +422,9 @@ SHRLINE LDA A2L ; y1 :X1 JSR SHRLINESWAP ; Swap parms JMP SHRLINELO -:YDOM SEP #$30 ; 8 bit M & X - MX %11 ; Tell Merlin - LDA SHRYPIXEL ; y0 +:YDOM LDA SHRYPIXEL ; y0 CMP A2L ; y1 BCS :Y1 ; y0 >= y1 - REP #$30 ; 16 bit M & X - MX %00 ; Tell Merlin - JMP SHRLINEHI ; y0 < y1 :Y1 JSR SHRLINESWAP ; Swap parms JMP SHRLINEHI @@ -459,15 +454,10 @@ SHRLINELO LDA A1L ; x1 SEC SBC SHRXPIXEL ; Subtract x0 STA :DX - SEP #$30 ; 8 bit M & X - MX %11 ; Tell Merlin LDA A2L ; y1 SEC SBC SHRYPIXEL ; Subtract y0 - STA :DY+0 - STZ :DY+1 - REP #$30 ; 16 bit M & X - MX %00 ; Tell Merlin + STA :DY LDA #$0001 STA :YI ; yi = 1 LDA :DY @@ -532,13 +522,76 @@ SHRLINELO LDA A1L ; x1 * Plot y-dominant line (steep gradient) * Called in 16 bit 65816 native mode. Returns in emulation mode. -SHRLINEHI -* TODO: Write me! +SHRLINEHI LDA A1L ; x1 + SEC + SBC SHRXPIXEL ; Subtract x0 + STA :DX + LDA A2L ; y1 + STA :LIM+0 ; We re-use A1L/H later + SEC + SBC SHRYPIXEL ; Subtract y0 + STA :DY + LDA #$0001 + STA :XI ; xi = 1 + LDA :DX + BPL :S1 ; Skip if dx = 0 + EOR #$FFFF ; Negate dx + INC A + STA :DX ; dx = -dx + LDA #$FFFF + STA :XI ; xi = -1 +:S1 LDA :DX ; dx + ASL ; 2 * dx + SEC + SBC :DY ; (2 * dx) - dy + STA :D ; D = (2 * dx) - dy + LDA SHRXPIXEL ; x0 + STA A1L ; x = x0 (re-using A1L/H) + LDA :DX + SEC + SBC :DY + ASL + STA :DY ; DY now (2 * (dx - dy) + LDA :DX + ASL + STA :DX ; DX now (2 * dx) + LDX SHRYPIXEL ; y = y0 +:L1 STX A2L ; Store y-coord for SHRPOINT + PHX + SEP #$30 ; 8 bit M & X + MX %11 ; Tell Merlin + JSR SHRPOINT ; x in A1L/H, y in A2L + REP #$30 ; 16 bit M & X + MX %00 ; Tell Merlin + PLX + LDA :D + BMI :S2 ; D < 0 + CLC + ADC :DY + STA :D ; D = D + (2 * (dx - dy)) + LDA A1L ; x + CLC + ADC :XI + STA A1L ; x = x + xi + BRA :S3 +:S2 CLC + ADC :DX + STA :D ; D = D + 2 * dx +:S3 INX + CPX :LIM ; Compare with y1 + BNE :L1 + SEC ; 65816 emulation mode XCE MX %11 ; Tell Merlin PLP ; Resume normal service RTS +:DX DW $0000 ; dx initially, then (2 * dx) +:DY DW $0000 ; dy initially, then (2 * (dy - dx))) +:XI DW $0000 ; +1 or -1 +:D DW $0000 ; D +:LIM DW $0000 ; x1 gets stashed here + * Convert high-resolution screen coordinates