From 5d96b7d115bbbe5a67bc56c8534e23765735acb9 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Wed, 4 Jan 2023 19:28:21 -0500 Subject: [PATCH] SHR code: move local temp vars to ZP --- applecorn.po | Bin 819200 -> 819200 bytes applecorn.s | 2 ++ mainmem.shr.s | 44 ++++++++++++++++++++++++-------------------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/applecorn.po b/applecorn.po index 21f0e4a5d5a4641e031f430b3eab8b03e8223814..dfb12d8aa18dd26e662e2854bf417e8b3e9607b2 100644 GIT binary patch delta 5476 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 diff --git a/applecorn.s b/applecorn.s index 74c004a..39fb96d 100644 --- a/applecorn.s +++ b/applecorn.s @@ -36,6 +36,8 @@ A4H EQU $43 * Other ZP locations ISRL EQU $02 ; Used for ISR only ISRH EQU $03 ; Used for ISR only +SHRZP EQU $56 ; 25 bytes, persistent, SHR code only +TMPZP EQU $56+25 ; Temp scratch space for routines * Used by XFER STRTL EQU $3ED diff --git a/mainmem.shr.s b/mainmem.shr.s index fccccf4..74739e5 100644 --- a/mainmem.shr.s +++ b/mainmem.shr.s @@ -15,6 +15,8 @@ SHRFONTXPLD EQU $A000 ; Explode SHR font to $E1:A000 ****************************************************************************** +* 25 bytes of persistent storage +* TODO: Move to SHRZP SHRPIXELS DB $00 ; Main memory copy of VDUPIXELS SHRVDUQ DS 16 ; Main memory copy of VDUQ SHRGFXFGMASK DB $00 ; Foreground colour mask @@ -23,8 +25,6 @@ SHRGFXBGMASK DB $00 ; Background colour mask SHRGFXACTION DB $00 ; GCOL action for point plotting SHRXPIXEL DW $0000 ; Previous point in screen coords SHRYPIXEL DW $0000 ; Previous point in screen coords -SHRTMPWRD DW $0000 ; Temp scratch space - * Explode font to generate SHRFONTXPLD table @@ -422,14 +422,15 @@ SHRPLOTCLR EOR #$FF ; Invert bits * x1 in A1L,A1H * y1 in A2L * Called in emulation mode. +* Uses TMPZP+0,+1 SHRLINE LDA A2L ; y1 SEC SBC SHRYPIXEL ; Subtract y0 BPL :S1 ; Skip if +ve EOR #$FF ; Negate if -ve INC A -:S1 STA SHRTMPWRD+0 ; abs(y1 - y0) - STZ SHRTMPWRD+1 ; Pad to 16 bit +:S1 STA TMPZP+0 ; abs(y1 - y0) + STZ TMPZP+1 ; Pad to 16 bit PHP ; Disable interrupts SEI CLC ; 65816 native mode @@ -442,7 +443,7 @@ SHRLINE LDA A2L ; y1 BPL :S2 ; Skip if +ve EOR #$FFFF ; Negate if -ve INC A -:S2 CMP SHRTMPWRD ; Cmp abs(x1 - x0) w/ abs(y1 - y0) +:S2 CMP TMPZP ; Cmp abs(x1 - x0) w/ abs(y1 - y0) BCC :YDOM ; abs(x1 - x0) < abs(y1 - y0) :XDOM LDA SHRXPIXEL ; x0 @@ -462,17 +463,18 @@ SHRLINE LDA A2L ; y1 * Swap (x0, y0) and (x1, y1) * Called in 16 bit 65816 native mode +* Uses TMPZP+0,+1 SHRLINESWAP LDA SHRXPIXEL ; x0 - STA SHRTMPWRD + STA TMPZP LDA A1L ; x1 STA SHRXPIXEL - LDA SHRTMPWRD + LDA TMPZP STA A1L LDA SHRYPIXEL ; y0 - STA SHRTMPWRD + STA TMPZP LDA A2L ; y1 STA SHRYPIXEL - LDA SHRTMPWRD + LDA TMPZP STA A2L RTS @@ -544,11 +546,12 @@ SHRLINELO MX %00 ; Tell merlin 16 bit M & X MX %11 ; Tell Merlin PLP ; Resume normal service RTS -:DX DW $0000 ; dx initially, then (2 * (dy - dx)) -:DY DW $0000 ; dy initially, then (2 * dy) -:YI DW $0000 ; +1 or -1 -:D DW $0000 ; D -:LIM DW $0000 ; x1 gets stashed here +* Zero page +:DX EQU TMPZP+0 ; dx initially, then (2 * (dy - dx)) +:DY EQU TMPZP+2 ; dy initially, then (2 * dy) +:YI EQU TMPZP+4 ; +1 or -1 +:D EQU TMPZP+6 ; D +:LIM EQU TMPZP+8 ; x1 gets stashed here * Plot y-dominant line (steep gradient) @@ -620,12 +623,13 @@ SHRLINEHI MX %00 ; Tell Merlin 16 bit M & X MX %11 ; Tell Merlin PLP ; Resume normal service RTS -:X DW $0000 -: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 +* Zero page +:X EQU TMPZP+0 +:DX EQU TMPZP+2 ; dx initially, then (2 * dx) +:DY EQU TMPZP+4 ; dy initially, then (2 * (dy - dx))) +:XI EQU TMPZP+6 ; +1 or -1 +:D EQU TMPZP+8 ; D +:LIM EQU TMPZP+10 ; x1 gets stashed here * Convert high-resolution screen coordinates