mirror of https://github.com/a2-4am/4cade.git
move font code out of LC2
This commit is contained in:
parent
d361a5fb8f
commit
9a7edbc42f
|
@ -133,8 +133,6 @@ gGlobalPrefsStore
|
||||||
; which is apparently one of the acceptable values)
|
; which is apparently one of the acceptable values)
|
||||||
gGamesListStore
|
gGamesListStore
|
||||||
!word $FDFD ; SMC
|
!word $FDFD ; SMC
|
||||||
StoreAYAndSwitchToBank2
|
|
||||||
+ST16 PTR
|
|
||||||
SwitchToBank2
|
SwitchToBank2
|
||||||
+READ_RAM2_WRITE_RAM2
|
+READ_RAM2_WRITE_RAM2
|
||||||
rts
|
rts
|
||||||
|
@ -175,7 +173,6 @@ COPYSRC = *
|
||||||
!pseudopc hdddataend {
|
!pseudopc hdddataend {
|
||||||
COPYDST = *
|
COPYDST = *
|
||||||
!source "src/prodos.impl.lc2.a"
|
!source "src/prodos.impl.lc2.a"
|
||||||
!source "src/ui.font.lc2.a"
|
|
||||||
!source "src/glue.prorwts2.lc2.a"
|
!source "src/glue.prorwts2.lc2.a"
|
||||||
!source "src/glue.launch.lc2.a"
|
!source "src/glue.launch.lc2.a"
|
||||||
!source "src/hw.accel.lc2.a"
|
!source "src/hw.accel.lc2.a"
|
||||||
|
@ -189,7 +186,7 @@ COPYSRC = *
|
||||||
EvenLasterMover
|
EvenLasterMover
|
||||||
FONTSRC = *
|
FONTSRC = *
|
||||||
!pseudopc FONTDST {
|
!pseudopc FONTDST {
|
||||||
!source "src/ui.font.data.lc2.a"
|
!source "src/ui.font.data.a"
|
||||||
}
|
}
|
||||||
!if RELBASE = $2000 {
|
!if RELBASE = $2000 {
|
||||||
!ifdef PASS2 {
|
!ifdef PASS2 {
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
; ...unused...
|
; ...unused...
|
||||||
; E000..E3FF - HGR font data
|
; E000..E3FF - HGR font data
|
||||||
; ...unused...
|
; ...unused...
|
||||||
; EA23..FFEE - main program code
|
; E962..FFEE - main program code
|
||||||
; FFEF..FFF9 - API functions and global constants available for main program
|
; FFEF..FFF9 - API functions and global constants available for main program
|
||||||
; code, prelaunchers, transition effects, &c.
|
; code, prelaunchers, transition effects, &c.
|
||||||
; (LoadFileDirect, Wait/UnwaitForVBL, MockingboardStuff, MachineStatus)
|
; (LoadFileDirect, Wait/UnwaitForVBL, MockingboardStuff, MachineStatus)
|
||||||
|
@ -19,8 +19,8 @@
|
||||||
; LC RAM BANK 2
|
; LC RAM BANK 2
|
||||||
; D000..D3FF - ProRWTS data
|
; D000..D3FF - ProRWTS data
|
||||||
; D400..D6C3 - ProRWTS code
|
; D400..D6C3 - ProRWTS code
|
||||||
; D6C4..DB91 - HGR font code & ProRWTS glue code
|
; D6C4..DAB8 - ProRWTS glue code
|
||||||
; DB92..DB98 - backup of stack (during gameplay and self-running demos)
|
; DAB9..DABF - backup of stack (during gameplay and self-running demos)
|
||||||
; ...unused...
|
; ...unused...
|
||||||
; DBB4..DBFF - (de)acceleration function
|
; DBB4..DBFF - (de)acceleration function
|
||||||
; DC00..DFFF - unused
|
; DC00..DFFF - unused
|
||||||
|
|
|
@ -70,7 +70,7 @@ Credits
|
||||||
ror ; draw on offscreen page
|
ror ; draw on offscreen page
|
||||||
+LDADDR $800
|
+LDADDR $800
|
||||||
+ST16 PTR
|
+ST16 PTR
|
||||||
;DrawPageInternal inlined here
|
;DrawPage inlined here
|
||||||
;
|
;
|
||||||
; PTR contains address of array of length-prefixed strings
|
; PTR contains address of array of length-prefixed strings
|
||||||
; length #$FF terminates
|
; length #$FF terminates
|
||||||
|
@ -86,11 +86,10 @@ Credits
|
||||||
ldx #0
|
ldx #0
|
||||||
stx VTAB
|
stx VTAB
|
||||||
php ; save C, but Z=1 because of ldx #0
|
php ; save C, but Z=1 because of ldx #0
|
||||||
jsr SwitchToBank2
|
|
||||||
@drawLine
|
@drawLine
|
||||||
lda $FF
|
lda $FF
|
||||||
sta HTAB
|
sta HTAB
|
||||||
jsr DrawStringInternal
|
jsr DrawString_PTR_is_already_set
|
||||||
bmi @donePage
|
bmi @donePage
|
||||||
clc
|
clc
|
||||||
adc PTR
|
adc PTR
|
||||||
|
@ -101,7 +100,6 @@ Credits
|
||||||
php
|
php
|
||||||
beq @drawLine ; always branches
|
beq @drawLine ; always branches
|
||||||
@donePage
|
@donePage
|
||||||
jsr SwitchToBank1
|
|
||||||
plp
|
plp
|
||||||
;end inline
|
;end inline
|
||||||
jsr ShowOtherPage ; show credits
|
jsr ShowOtherPage ; show credits
|
||||||
|
|
167
src/ui.font.a
167
src/ui.font.a
|
@ -3,29 +3,162 @@
|
||||||
;
|
;
|
||||||
; hi-res font drawing routines
|
; hi-res font drawing routines
|
||||||
;
|
;
|
||||||
; Glue functions that handle bank switching and calling the real font drawing routines
|
|
||||||
; that live in LC RAM 2 now.
|
|
||||||
;
|
|
||||||
; Public functions
|
; Public functions
|
||||||
; - Draw40Chars
|
; - Draw40Chars
|
||||||
; - DrawCenteredString
|
; - DrawCenteredString
|
||||||
; - DrawString
|
; - DrawString
|
||||||
;
|
;
|
||||||
|
|
||||||
DrawString
|
|
||||||
jsr StoreAYAndSwitchToBank2
|
|
||||||
jsr DrawStringInternal
|
|
||||||
; /!\ execution falls through here to JmpSwitch
|
|
||||||
|
|
||||||
JmpSwitch
|
|
||||||
jmp SwitchToBank1
|
|
||||||
|
|
||||||
Draw40Chars
|
Draw40Chars
|
||||||
jsr SwitchToBank2
|
; A/Y contains address of character buffer
|
||||||
jsr Draw40CharsInternal
|
; carry bit clear -> draw on page 1
|
||||||
beq JmpSwitch ; always
|
; carry bit set -> draw on page 2
|
||||||
|
; $25 contains textpage line (0..23) (this is the standard VTAB address)
|
||||||
|
; 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
|
||||||
|
jsr .DrawBufferInternal
|
||||||
|
+ ldx #0
|
||||||
|
stx HTAB
|
||||||
|
rts
|
||||||
|
|
||||||
DrawCenteredString
|
DrawCenteredString
|
||||||
jsr StoreAYAndSwitchToBank2
|
; A/Y contains address of length-prefixed string
|
||||||
jsr DrawCenteredStringInternal
|
; carry bit clear -> draw on page 1
|
||||||
bne JmpSwitch ; always
|
; carry bit set -> draw on page 2
|
||||||
|
; $25 contains textpage line (0..23) (this is the standard VTAB address)
|
||||||
|
; clobbers A/X/Y
|
||||||
|
+ST16 PTR
|
||||||
|
php
|
||||||
|
ldy #0
|
||||||
|
lda #40
|
||||||
|
sec
|
||||||
|
sbc (PTR),y
|
||||||
|
lsr
|
||||||
|
sta HTAB
|
||||||
|
plp
|
||||||
|
jmp DrawString_PTR_is_already_set
|
||||||
|
|
||||||
|
DrawString
|
||||||
|
; A/Y 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
|
||||||
|
+ST16 PTR
|
||||||
|
DrawString_PTR_is_already_set
|
||||||
|
ldy #0
|
||||||
|
lda (PTR),y
|
||||||
|
inc PTR
|
||||||
|
bne +
|
||||||
|
inc PTR+1
|
||||||
|
+ tax
|
||||||
|
bpl +
|
||||||
|
rts
|
||||||
|
+
|
||||||
|
+LD16 PTR
|
||||||
|
; /!\ execution falls through here to .DrawBufferInternal
|
||||||
|
|
||||||
|
.DrawBufferInternal
|
||||||
|
; [private]
|
||||||
|
; A/Y contains address of character buffer
|
||||||
|
; X contains buffer length (0..40)
|
||||||
|
; carry bit clear -> draw on page 1
|
||||||
|
; carry bit set -> draw on page 2
|
||||||
|
; characters MUST have high bit off (0x00..0x7F)
|
||||||
|
; special characters (0x00..0x1F) will be drawn
|
||||||
|
; $24 contains starting column (0..39) (this is the standard HTAB address)
|
||||||
|
; $25 contains textpage line (0..23) (this is the standard VTAB address)
|
||||||
|
; all characters are drawn on the same line
|
||||||
|
; HTAB is incremented for each character
|
||||||
|
; clobbers X,Y
|
||||||
|
; increments VTAB on exit
|
||||||
|
; A=buffer length on exit
|
||||||
|
; N=0,Z=0 on exit
|
||||||
|
+ST16 DBISrc+1
|
||||||
|
php
|
||||||
|
lda VTAB
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
; routine to calculate memory address within HGR page
|
||||||
|
; and self-modify addresses within draw loop that follows
|
||||||
|
; (routine clobbers A and Y but preserves X)
|
||||||
|
asl
|
||||||
|
tay
|
||||||
|
and #$F0
|
||||||
|
bpl @calc1
|
||||||
|
ora #$05
|
||||||
|
@calc1 bcc @calc2
|
||||||
|
ora #$0A
|
||||||
|
@calc2 asl
|
||||||
|
asl
|
||||||
|
sta @hgrlo+1
|
||||||
|
tya
|
||||||
|
and #$0E
|
||||||
|
adc #$10
|
||||||
|
asl @hgrlo+1
|
||||||
|
rol
|
||||||
|
plp
|
||||||
|
bcc +
|
||||||
|
eor #$60
|
||||||
|
clc
|
||||||
|
+
|
||||||
|
sta DBIRow0+2
|
||||||
|
adc #$04
|
||||||
|
sta DBIRow1+2
|
||||||
|
adc #$04
|
||||||
|
sta DBIRow2+2
|
||||||
|
adc #$04
|
||||||
|
sta DBIRow3+2
|
||||||
|
adc #$04
|
||||||
|
sta DBIRow4+2
|
||||||
|
adc #$04
|
||||||
|
sta DBIRow5+2
|
||||||
|
adc #$04
|
||||||
|
sta DBIRow6+2
|
||||||
|
adc #$04
|
||||||
|
sta DBIRow7+2
|
||||||
|
@hgrlo lda #$FD
|
||||||
|
adc HTAB
|
||||||
|
sta DBIRow0+1
|
||||||
|
sta DBIRow1+1
|
||||||
|
sta DBIRow2+1
|
||||||
|
sta DBIRow3+1
|
||||||
|
sta DBIRow4+1
|
||||||
|
sta DBIRow5+1
|
||||||
|
sta DBIRow6+1
|
||||||
|
sta DBIRow7+1
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
bpl + ; always branches because X is 0..40
|
||||||
|
DBILoop
|
||||||
|
DBISrc ldy $FDFD,x
|
||||||
|
lda FontDataRow0,y
|
||||||
|
DBIRow0 sta $FDFD,x
|
||||||
|
lda FontDataRow1,y
|
||||||
|
DBIRow1 sta $FDFD,x
|
||||||
|
lda FontDataRow2,y
|
||||||
|
DBIRow2 sta $FDFD,x
|
||||||
|
lda FontDataRow3,y
|
||||||
|
DBIRow3 sta $FDFD,x
|
||||||
|
lda FontDataRow4,y
|
||||||
|
DBIRow4 sta $FDFD,x
|
||||||
|
lda FontDataRow5,y
|
||||||
|
DBIRow5 sta $FDFD,x
|
||||||
|
lda FontDataRow6,y
|
||||||
|
DBIRow6 sta $FDFD,x
|
||||||
|
lda FontDataRow7,y
|
||||||
|
DBIRow7 sta $FDFD,x
|
||||||
|
inc HTAB
|
||||||
|
+ dex
|
||||||
|
bpl DBILoop
|
||||||
|
pla ; A = buffer length (passed in in X)
|
||||||
|
inc VTAB
|
||||||
|
rts
|
||||||
|
|
|
@ -1,159 +0,0 @@
|
||||||
;license:MIT
|
|
||||||
;(c) 2018-2021 by 4am
|
|
||||||
;
|
|
||||||
; hi-res font drawing routines
|
|
||||||
;
|
|
||||||
; /!\ These live in LC RAM 2 and rely on the font data which is also in LC RAM 2. /!\
|
|
||||||
; Code in LC RAM 1 (which is most program code) should call the functions in ui.font
|
|
||||||
; which handle bank switching for you.
|
|
||||||
;
|
|
||||||
|
|
||||||
Draw40CharsInternal
|
|
||||||
; A/Y contains address of character buffer
|
|
||||||
; 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)
|
|
||||||
; 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
|
|
||||||
jsr DrawBufferInternal
|
|
||||||
+ ldx #0
|
|
||||||
stx HTAB
|
|
||||||
rts
|
|
||||||
|
|
||||||
DrawCenteredStringInternal
|
|
||||||
; 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
|
|
||||||
php
|
|
||||||
ldy #0
|
|
||||||
lda #40
|
|
||||||
sec
|
|
||||||
sbc (PTR),y
|
|
||||||
lsr
|
|
||||||
sta HTAB
|
|
||||||
plp
|
|
||||||
; /!\ execution falls through here to DrawStringInternal
|
|
||||||
|
|
||||||
DrawStringInternal
|
|
||||||
; 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
|
|
||||||
ldy #0
|
|
||||||
lda (PTR),y
|
|
||||||
inc PTR
|
|
||||||
bne +
|
|
||||||
inc PTR+1
|
|
||||||
+ tax
|
|
||||||
bpl +
|
|
||||||
rts
|
|
||||||
+
|
|
||||||
+LD16 PTR
|
|
||||||
; /!\ execution falls through here to DrawBufferInternal
|
|
||||||
|
|
||||||
DrawBufferInternal
|
|
||||||
; A/Y contains address of character buffer
|
|
||||||
; X contains buffer length (0..40)
|
|
||||||
; carry bit clear -> draw on page 1
|
|
||||||
; carry bit set -> draw on page 2
|
|
||||||
; characters MUST have high bit off (0x00..0x7F)
|
|
||||||
; special characters (0x00..0x1F) will be drawn
|
|
||||||
; $24 contains starting column (0..39) (this is the standard HTAB address)
|
|
||||||
; $25 contains textpage line (0..23) (this is the standard VTAB address)
|
|
||||||
; all characters are drawn on the same line
|
|
||||||
; HTAB is incremented for each character
|
|
||||||
; clobbers X,Y
|
|
||||||
; increments VTAB on exit
|
|
||||||
; A=buffer length on exit
|
|
||||||
; N=0,Z=0 on exit
|
|
||||||
+ST16 DBISrc+1
|
|
||||||
php
|
|
||||||
lda VTAB
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
; routine to calculate memory address within HGR page
|
|
||||||
; and self-modify addresses within draw loop that follows
|
|
||||||
; (routine clobbers A and Y but preserves X)
|
|
||||||
asl
|
|
||||||
tay
|
|
||||||
and #$F0
|
|
||||||
bpl @calc1
|
|
||||||
ora #$05
|
|
||||||
@calc1 bcc @calc2
|
|
||||||
ora #$0A
|
|
||||||
@calc2 asl
|
|
||||||
asl
|
|
||||||
sta @hgrlo+1
|
|
||||||
tya
|
|
||||||
and #$0E
|
|
||||||
adc #$10
|
|
||||||
asl @hgrlo+1
|
|
||||||
rol
|
|
||||||
plp
|
|
||||||
bcc +
|
|
||||||
eor #$60
|
|
||||||
clc
|
|
||||||
+
|
|
||||||
sta DBIRow0+2
|
|
||||||
adc #$04
|
|
||||||
sta DBIRow1+2
|
|
||||||
adc #$04
|
|
||||||
sta DBIRow2+2
|
|
||||||
adc #$04
|
|
||||||
sta DBIRow3+2
|
|
||||||
adc #$04
|
|
||||||
sta DBIRow4+2
|
|
||||||
adc #$04
|
|
||||||
sta DBIRow5+2
|
|
||||||
adc #$04
|
|
||||||
sta DBIRow6+2
|
|
||||||
adc #$04
|
|
||||||
sta DBIRow7+2
|
|
||||||
@hgrlo lda #$FD
|
|
||||||
adc HTAB
|
|
||||||
sta DBIRow0+1
|
|
||||||
sta DBIRow1+1
|
|
||||||
sta DBIRow2+1
|
|
||||||
sta DBIRow3+1
|
|
||||||
sta DBIRow4+1
|
|
||||||
sta DBIRow5+1
|
|
||||||
sta DBIRow6+1
|
|
||||||
sta DBIRow7+1
|
|
||||||
txa
|
|
||||||
pha
|
|
||||||
bpl + ; always branches because X is 0..40
|
|
||||||
DBILoop
|
|
||||||
DBISrc ldy $FDFD,x
|
|
||||||
lda FontDataRow0,y
|
|
||||||
DBIRow0 sta $FDFD,x
|
|
||||||
lda FontDataRow1,y
|
|
||||||
DBIRow1 sta $FDFD,x
|
|
||||||
lda FontDataRow2,y
|
|
||||||
DBIRow2 sta $FDFD,x
|
|
||||||
lda FontDataRow3,y
|
|
||||||
DBIRow3 sta $FDFD,x
|
|
||||||
lda FontDataRow4,y
|
|
||||||
DBIRow4 sta $FDFD,x
|
|
||||||
lda FontDataRow5,y
|
|
||||||
DBIRow5 sta $FDFD,x
|
|
||||||
lda FontDataRow6,y
|
|
||||||
DBIRow6 sta $FDFD,x
|
|
||||||
lda FontDataRow7,y
|
|
||||||
DBIRow7 sta $FDFD,x
|
|
||||||
inc HTAB
|
|
||||||
+ dex
|
|
||||||
bpl DBILoop
|
|
||||||
pla ; A = buffer length (passed in in X)
|
|
||||||
inc VTAB
|
|
||||||
rts
|
|
Loading…
Reference in New Issue