2019-10-09 17:04:39 +00:00
|
|
|
;license:MIT
|
2021-10-18 01:12:04 +00:00
|
|
|
;(c) 2018-2021 by 4am
|
2019-10-09 17:04:39 +00:00
|
|
|
;
|
|
|
|
; hi-res font drawing routines
|
|
|
|
;
|
|
|
|
; /!\ These live in LC RAM 2 and rely on the font data which is also in LC RAM 2. /!\
|
2019-10-09 17:05:08 +00:00
|
|
|
; Code in LC RAM 1 (which is most program code) should call the functions in ui.font
|
2019-10-09 17:04:39 +00:00
|
|
|
; which handle bank switching for you.
|
|
|
|
;
|
|
|
|
|
|
|
|
Draw40CharsInternal
|
|
|
|
; A/Y contains address of character buffer
|
|
|
|
; carry bit clear -> draw on page 1
|
2021-10-18 05:08:30 +00:00
|
|
|
; carry bit set -> draw on page 2
|
2019-10-09 17:04:39 +00:00
|
|
|
; $25 contains textpage line (0..23) (this is the standard VTAB address)
|
|
|
|
; drawing starts at HTAB 0
|
2021-10-18 04:33:34 +00:00
|
|
|
; increments VTAB on exit
|
2019-10-09 17:04:39 +00:00
|
|
|
; sets HTAB to 0 on exit
|
2021-10-18 05:04:55 +00:00
|
|
|
; Z=1 on exit
|
2019-10-09 17:04:39 +00:00
|
|
|
; clobbers A/X/Y
|
|
|
|
jsr +
|
|
|
|
ldx #40
|
|
|
|
jsr DrawBufferInternal
|
|
|
|
+ ldx #0
|
|
|
|
stx HTAB
|
|
|
|
rts
|
|
|
|
|
|
|
|
DrawCenteredStringInternal
|
2021-10-18 05:04:55 +00:00
|
|
|
; PTR contains address of length-prefixed string
|
2019-10-09 17:04:39 +00:00
|
|
|
; 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
|
2020-01-28 19:19:10 +00:00
|
|
|
php
|
2021-10-18 05:04:55 +00:00
|
|
|
ldy #0
|
2019-10-09 17:04:39 +00:00
|
|
|
lda #40
|
|
|
|
sec
|
2020-01-28 19:19:10 +00:00
|
|
|
sbc (PTR),y
|
2019-10-09 17:04:39 +00:00
|
|
|
lsr
|
|
|
|
sta HTAB
|
|
|
|
plp
|
2021-10-18 05:04:55 +00:00
|
|
|
; /!\ execution falls through here to DrawStringInternal
|
2019-10-09 17:04:39 +00:00
|
|
|
|
|
|
|
DrawStringInternal
|
2021-10-18 05:04:55 +00:00
|
|
|
; PTR contains address of length-prefixed string
|
2021-10-18 04:33:34 +00:00
|
|
|
; length can be 0
|
2019-10-09 17:04:39 +00:00
|
|
|
; 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
|
2021-10-18 04:33:34 +00:00
|
|
|
lda (PTR),y
|
2019-10-09 17:04:39 +00:00
|
|
|
inc PTR
|
|
|
|
bne +
|
|
|
|
inc PTR+1
|
2021-10-18 04:33:34 +00:00
|
|
|
+ tax
|
|
|
|
bpl +
|
|
|
|
rts
|
2019-10-09 17:04:39 +00:00
|
|
|
+
|
2020-03-24 20:30:14 +00:00
|
|
|
+LD16 PTR
|
2019-10-09 17:04:39 +00:00
|
|
|
; /!\ execution falls through here to DrawBufferInternal
|
|
|
|
|
|
|
|
DrawBufferInternal
|
|
|
|
; A/Y contains address of character buffer
|
2021-10-18 01:12:04 +00:00
|
|
|
; X contains buffer length (0..40)
|
2019-10-09 17:04:39 +00:00
|
|
|
; 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
|
2021-10-18 04:33:34 +00:00
|
|
|
; clobbers X,Y
|
|
|
|
; increments VTAB on exit
|
|
|
|
; A=buffer length on exit
|
2021-10-18 05:04:55 +00:00
|
|
|
; N=0,Z=0 on exit
|
2020-03-24 20:30:14 +00:00
|
|
|
+ST16 DBISrc+1
|
2021-10-18 03:57:24 +00:00
|
|
|
php
|
2019-10-09 17:04:39 +00:00
|
|
|
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
|
2020-01-28 19:19:10 +00:00
|
|
|
plp
|
|
|
|
bcc +
|
|
|
|
eor #$60
|
2019-10-09 17:04:39 +00:00
|
|
|
clc
|
2020-01-28 19:19:10 +00:00
|
|
|
+
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow0+2
|
2019-10-09 17:04:39 +00:00
|
|
|
adc #$04
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow1+2
|
2019-10-09 17:04:39 +00:00
|
|
|
adc #$04
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow2+2
|
2019-10-09 17:04:39 +00:00
|
|
|
adc #$04
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow3+2
|
2019-10-09 17:04:39 +00:00
|
|
|
adc #$04
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow4+2
|
2019-10-09 17:04:39 +00:00
|
|
|
adc #$04
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow5+2
|
2019-10-09 17:04:39 +00:00
|
|
|
adc #$04
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow6+2
|
2019-10-09 17:04:39 +00:00
|
|
|
adc #$04
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow7+2
|
2019-10-09 17:04:39 +00:00
|
|
|
@hgrlo lda #$FD
|
|
|
|
adc HTAB
|
2020-03-08 02:06:49 +00:00
|
|
|
sta DBIRow0+1
|
|
|
|
sta DBIRow1+1
|
|
|
|
sta DBIRow2+1
|
|
|
|
sta DBIRow3+1
|
|
|
|
sta DBIRow4+1
|
|
|
|
sta DBIRow5+1
|
|
|
|
sta DBIRow6+1
|
|
|
|
sta DBIRow7+1
|
2021-10-18 04:33:34 +00:00
|
|
|
txa
|
|
|
|
pha
|
|
|
|
bpl + ; always branches because X is 0..40
|
2020-03-08 02:06:49 +00:00
|
|
|
DBILoop
|
|
|
|
DBISrc ldy $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow0,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow0 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow1,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow1 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow2,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow2 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow3,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow3 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow4,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow4 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow5,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow5 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow6,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow6 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
lda FontDataRow7,y
|
2020-03-08 02:06:49 +00:00
|
|
|
DBIRow7 sta $FDFD,x
|
2019-10-09 17:04:39 +00:00
|
|
|
inc HTAB
|
2021-10-18 04:33:34 +00:00
|
|
|
+ dex
|
2020-03-08 02:06:49 +00:00
|
|
|
bpl DBILoop
|
2021-10-18 04:33:34 +00:00
|
|
|
pla ; A = buffer length (passed in in X)
|
|
|
|
inc VTAB
|
2019-10-09 17:04:39 +00:00
|
|
|
rts
|