diff --git a/src/4cade.a b/src/4cade.a index 28c114a2f..f42e3cac3 100644 --- a/src/4cade.a +++ b/src/4cade.a @@ -132,6 +132,8 @@ gGlobalPrefsStore ; which is apparently one of the acceptable values) gGamesListStore !word $FDFD ; SMC +StoreAYAndSwitchToBank2 + +ST16 PTR SwitchToBank2 +READ_RAM2_WRITE_RAM2 rts diff --git a/src/constants.a b/src/constants.a index 098db09fe..49ebfbdde 100644 --- a/src/constants.a +++ b/src/constants.a @@ -7,7 +7,7 @@ ; ; LC RAM BANK 1 ; D000..E789 - persistent data structures (gGlobalPrefsStore, gGamesListStore) -; E97B..FFF1 - main program code +; E979..FFF1 - main program code ; FFF2..FFF9 - API functions and global constants available for main program ; code, prelaunchers, transition effects, &c. ; (Wait/UnwaitForVBL, MockingboardStuff, MachineStatus) @@ -17,7 +17,7 @@ ; D000..D3FF - ProRWTS data ; D400..D66F - ProRWTS code ; D670..DB91 - HGR font code & ProRWTS glue code -; DB5C..DB6B - backup of stack (during gameplay and self-running demos) +; DB4D..DB5C - backup of stack (during gameplay and self-running demos) ; ...unused... ; DBB4..DBFF - (de)acceleration function ; DC00..DFFF - HGR font data diff --git a/src/ui.font.a b/src/ui.font.a index c517f28c6..7d902cdd1 100644 --- a/src/ui.font.a +++ b/src/ui.font.a @@ -14,12 +14,12 @@ ; DrawString - jsr SwitchToBank2 + jsr StoreAYAndSwitchToBank2 jsr DrawStringInternal - bmi JmpSwitch ; always + bne JmpSwitch ; always DrawPage - jsr SwitchToBank2 + jsr StoreAYAndSwitchToBank2 jsr DrawPageInternal JmpSwitch @@ -31,6 +31,6 @@ Draw40Chars beq JmpSwitch ; always DrawCenteredString - jsr SwitchToBank2 + jsr StoreAYAndSwitchToBank2 jsr DrawCenteredStringInternal - bmi JmpSwitch ; always + bne JmpSwitch ; always diff --git a/src/ui.font.lc2.a b/src/ui.font.lc2.a index b30954fd7..ede85004c 100644 --- a/src/ui.font.lc2.a +++ b/src/ui.font.lc2.a @@ -9,7 +9,7 @@ ; DrawPageInternal -; A/Y contains address of array of length-prefixed strings +; PTR contains address of array of length-prefixed strings ; length #$FF terminates ; X contains 0-indexed left margin (HTAB) ; carry bit clear -> draw on page 1 @@ -17,18 +17,17 @@ DrawPageInternal ; drawing starts at VTAB 0 ; each line starts at column X which was passed in (0-indexed) ; clobbers PTR -; clobbers $FE/$FF +; clobbers $FF ; clobbers A/X/Y ; preserves C, other flags clobbered stx $FF ldx #0 stx VTAB - +ST16 PTR php ; save C, but Z=1 because of ldx #0 @drawLine lda $FF sta HTAB - jsr DrawStringInternal_PTR_is_already_set + jsr DrawStringInternal bmi @donePage clc adc PTR @@ -50,6 +49,7 @@ Draw40CharsInternal ; drawing starts at HTAB 0 ; increments VTAB on exit ; sets HTAB to 0 on exit +; Z=1 on exit ; clobbers A/X/Y jsr + ldx #40 @@ -59,36 +59,30 @@ Draw40CharsInternal rts DrawCenteredStringInternal -; A/Y contains address of length-prefixed string +; PTR contains address of length-prefixed string ; carry bit clear -> draw on page 1 ; carry bit set -> draw on page 2 ; $25 contains textpage line (0..23) (this is the standard VTAB address) ; clobbers A/X/Y -; clobbers PTR/PTR+1 - +ST16 PTR - ldy #0 php + ldy #0 lda #40 sec sbc (PTR),y lsr sta HTAB plp - beq DrawStringInternal_PTR_and_Y_are_already_set + ; /!\ execution falls through here to DrawStringInternal DrawStringInternal -; A/Y contains address of length-prefixed string +; PTR contains address of length-prefixed string ; length can be 0 ; carry bit clear -> draw on page 1 ; carry bit set -> draw on page 2 ; $24 contains starting column (0..39) (this is the standard HTAB address) ; $25 contains textpage line (0..23) (this is the standard VTAB address) ; clobbers A/X/Y -; clobbers PTR/PTR+1 - +ST16 PTR -DrawStringInternal_PTR_is_already_set ldy #0 -DrawStringInternal_PTR_and_Y_are_already_set lda (PTR),y inc PTR bne + @@ -114,7 +108,7 @@ DrawBufferInternal ; clobbers X,Y ; increments VTAB on exit ; A=buffer length on exit -; N=0 on exit +; N=0,Z=0 on exit +ST16 DBISrc+1 php lda VTAB