Font demo program comparing my transposed font character generator to standard type character generators
This commit is contained in:
parent
651cc2c7f1
commit
ef52e61be3
13
Makefile
13
Makefile
|
@ -26,16 +26,19 @@ colortest.dsk: asmgen.py colortest.s bwsprite.s
|
||||||
atasm -ocolortest.xex colortest.s -Lcolortest.var -gcolortest.lst
|
atasm -ocolortest.xex colortest.s -Lcolortest.var -gcolortest.lst
|
||||||
atrcopy colortest.dsk boot -b colortest.xex --brun 6000 -f
|
atrcopy colortest.dsk boot -b colortest.xex --brun 6000 -f
|
||||||
|
|
||||||
cpbg-sprite-driver.s: asmgen.py $(BWSPRITE)
|
cpbg-asmgen-driver.s: asmgen.py $(BWSPRITE)
|
||||||
python asmgen.py -a mac65 -p 6502 -s hgrbw -m -k -d -g -f fatfont128.dat -o cpbg $(BWSPRITE) $(COLORSPRITE)
|
python asmgen.py -a mac65 -p 6502 -s hgrbw -m -k -d -g -f fatfont128.dat -o cpbg $(BWSPRITE) $(COLORSPRITE)
|
||||||
|
|
||||||
cpbg.xex: cpbg.s cpbg-sprite-driver.s
|
cpbg.xex: cpbg.s cpbg-asmgen-driver.s
|
||||||
atasm -mae -ocpbg.xex cpbg.s -Lcpbg.var -gcpbg.lst
|
atasm -mae -ocpbg.xex cpbg.s -Lcpbg.var -gcpbg.lst
|
||||||
|
|
||||||
cpbg.dsk: asmgen.py cpbg.xex
|
cpbg.dsk: asmgen.py cpbg.xex
|
||||||
atrcopy cpbg.dsk boot -b cpbg.xex --brun 6000 -f
|
atrcopy cpbg.dsk boot -b cpbg.xex --brun 6000 -f
|
||||||
|
|
||||||
fonttest.dsk: fonttest.s fatfont.s
|
fonttest-asmgen-driver.s: asmgen.py fatfont128.dat
|
||||||
|
python asmgen.py -a mac65 -p 6502 -s hgrbw -f fatfont128.dat -r -o fonttest
|
||||||
|
|
||||||
|
fonttest.dsk: fonttest.s fatfont.s fonttest-asmgen-driver.s slowfont.s
|
||||||
atasm -ofonttest.xex fonttest.s -Lfonttest.var -gfonttest.lst
|
atasm -ofonttest.xex fonttest.s -Lfonttest.var -gfonttest.lst
|
||||||
atrcopy fonttest.dsk boot -b fonttest.xex --brun 6000 -f
|
atrcopy fonttest.dsk boot -b fonttest.xex --brun 6000 -f
|
||||||
|
|
||||||
|
@ -43,5 +46,5 @@ clean:
|
||||||
rm -f rowlookup.s collookupbw.s collookupcolor.s
|
rm -f rowlookup.s collookupbw.s collookupcolor.s
|
||||||
rm -f bwtest.dsk bwtest.xex bwtest.var bwtest.lst
|
rm -f bwtest.dsk bwtest.xex bwtest.var bwtest.lst
|
||||||
rm -f colortest.dsk colortest.xex colortest.var colortest.lst
|
rm -f colortest.dsk colortest.xex colortest.var colortest.lst
|
||||||
rm -f cpbg.dsk cpbg.xex cpbg.var cpbg.lst cpbg-sprite-driver.s cpbg-bwsprite.s cpbg-hgrcols-7x1.s cpbg-hgrrows.s
|
rm -f cpbg.dsk cpbg.xex cpbg.var cpbg.lst cpbg-asmgen-driver.s cpbg-bwsprite.s cpbg-hgrcols-7x1.s cpbg-hgrrows.s
|
||||||
rm -f fonttest.dsk fonttest.xex fonttest.var fonttest.lst
|
rm -f fonttest.dsk fonttest.xex fonttest-asmgen-driver.s fonttest.var fonttest.lst
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
DrawHexByte
|
||||||
|
PHA ; save low nibble
|
||||||
|
ROR ; shift high nibble
|
||||||
|
ROR ; to low nibble
|
||||||
|
ROR ;
|
||||||
|
ROR ;
|
||||||
|
JSR DrawHexNib ; print high nib in hex
|
||||||
|
PLA ; pritn low nib in hex
|
||||||
|
DrawHexNib
|
||||||
|
AND #$F ; base 16
|
||||||
|
TAX ;
|
||||||
|
LDA NIB2HEX,X ; nibble to ASCII
|
||||||
|
; ORG $0310 ; Listing 5
|
||||||
|
DrawChar
|
||||||
|
JMP DrawCharCol
|
||||||
|
; ORG $0313 ; Listing 9
|
||||||
|
SetCursorRow
|
||||||
|
LDA TEXTROW_L,X ; TEXTROW_L[ row ]
|
||||||
|
STA hgrptr
|
||||||
|
LDA TEXTROW_H,X ; TEXTROW_H[ row ]
|
||||||
|
ORA HgrHi
|
||||||
|
STA hgrptr+1
|
||||||
|
RTS
|
||||||
|
; ORG $0321 ; Listing 11
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SetCursorColRow
|
||||||
|
STX hgrptr
|
||||||
|
LDA TEXTROW_L,Y ; TEXTROW_L[ row ]
|
||||||
|
CLC
|
||||||
|
ADC hgrptr ; add column
|
||||||
|
STA hgrptr
|
||||||
|
LDA TEXTROW_H,Y ; TEXTROW_H[ row ]
|
||||||
|
ORA HgrHi
|
||||||
|
STA hgrptr+1
|
||||||
|
RTS
|
||||||
|
NOP ; pad
|
||||||
|
; ORG $0335 ; Listing 6
|
||||||
|
DrawCharColRow
|
||||||
|
PHA
|
||||||
|
JSR SetCursorRow
|
||||||
|
PLA
|
||||||
|
; ORG $033A ; Listing 7
|
||||||
|
DrawCharCol ; A=%PQRstuvw
|
||||||
|
ROL ; C=P A=%QRstuvw?
|
||||||
|
ROL ; C=Q A=%Rstuvw?P
|
||||||
|
ROL ; C=R A=%stuvw?PQ
|
||||||
|
TAX ; X=%stuvw?PQ push glyph
|
||||||
|
AND #$F8 ; A=%stuvw000
|
||||||
|
STA _LoadFont+1; AddressLo = (c*8)
|
||||||
|
TXA ; A=%stuvw?PQ pop glyph
|
||||||
|
AND #3 ; Optimization: s=0 implicit CLC !
|
||||||
|
ROL ; C=s A=%00000PQR and 1 last ROL to get R
|
||||||
|
ADC #>FatFont ; += FontHi; Carry=0 since s=0 from above
|
||||||
|
STA _LoadFont+2; AddressHi = FontHi + (c/32)
|
||||||
|
; ORG $034C ; Listing 4a
|
||||||
|
_DrawChar1
|
||||||
|
LDX hgrptr+1
|
||||||
|
STX scratch_0
|
||||||
|
; ORG $0350 ; Listing 1
|
||||||
|
_DrawChar
|
||||||
|
LDX #7
|
||||||
|
_LoadFont ; A = font[ offset ]
|
||||||
|
LDA FatFont,X
|
||||||
|
STA (hgrptr),Y ; screen[col] = A
|
||||||
|
CLC
|
||||||
|
LDA hgrptr+1 ;
|
||||||
|
ADC #4 ; screen += 0x400
|
||||||
|
STA hgrptr+1
|
||||||
|
DEX
|
||||||
|
BPL _LoadFont
|
||||||
|
; ORG $0363 ; Listing 4a
|
||||||
|
IncCursorCol
|
||||||
|
INY
|
||||||
|
LDX scratch_0 ; Move cursor back to top of scanline
|
||||||
|
STX hgrptr+1
|
||||||
|
RTS
|
||||||
|
; ORG $0369 ; Listing 10
|
||||||
|
SetCursorColRowYX
|
||||||
|
JSR SetCursorRow
|
||||||
|
CLC
|
||||||
|
TYA
|
||||||
|
ADC hgrptr
|
||||||
|
STA hgrptr
|
||||||
|
RTS
|
||||||
|
; ORG $037E ; Listing 12
|
||||||
|
DrawString
|
||||||
|
STY tempaddr+0
|
||||||
|
STX tempaddr+1
|
||||||
|
LDY #0
|
||||||
|
_ds1 LDA (tempaddr),Y
|
||||||
|
BEQ _ds2 ; null byte? Done
|
||||||
|
SEC
|
||||||
|
SBC #$20
|
||||||
|
JSR DrawChar ; or DrawCharCol for speed
|
||||||
|
CPY #40 ; col < 40?
|
||||||
|
BCC _ds1
|
||||||
|
_ds2 RTS
|
||||||
|
|
||||||
|
; ORG $0390 ; Listing 8
|
||||||
|
NIB2HEX
|
||||||
|
.byte "0123456789ABCDEF"
|
||||||
|
; ORG $03A0 ; Listing 9a
|
||||||
|
TEXTROW_L
|
||||||
|
.byte $00,$80,$00,$80,$00,$80,$00,$80
|
||||||
|
.byte $28,$A8,$28,$A8,$28,$A8,$28,$A8
|
||||||
|
.byte $50,$D0,$50,$D0,$50,$D0,$50,$D0
|
||||||
|
TEXTROW_H
|
||||||
|
.byte $00,$00,$01,$01,$02,$02,$03,$03
|
||||||
|
.byte $00,$00,$01,$01,$02,$02,$03,$03
|
||||||
|
.byte $00,$00,$01,$01,$02,$02,$03,$03
|
|
@ -0,0 +1,105 @@
|
||||||
|
; os memory map
|
||||||
|
CLRTEXT = $c050
|
||||||
|
SETTEXT = $c051
|
||||||
|
CLRMIXED = $c052
|
||||||
|
SETMIXED = $c053
|
||||||
|
TXTPAGE1 = $c054
|
||||||
|
TXTPAGE2 = $c055
|
||||||
|
CLRHIRES = $c056
|
||||||
|
SETHIRES = $c057
|
||||||
|
|
||||||
|
; Zero page locations we use (unused by Monitor, Applesoft, or ProDOS)
|
||||||
|
hgr_ptr = $06
|
||||||
|
font_ptr = $08
|
||||||
|
temp_row = $19
|
||||||
|
temp_col = $1a
|
||||||
|
text_ptr = $1b
|
||||||
|
counter = $ce
|
||||||
|
scratch_0 = $d7
|
||||||
|
start_char = $fc
|
||||||
|
|
||||||
|
*= $6000
|
||||||
|
|
||||||
|
start
|
||||||
|
lda #0
|
||||||
|
sta start_char
|
||||||
|
jsr filltext
|
||||||
|
|
||||||
|
loop
|
||||||
|
; copy the normal way
|
||||||
|
lda #<slowfont
|
||||||
|
sta copytexthgr_dest_smc+1
|
||||||
|
lda #>slowfont
|
||||||
|
sta copytexthgr_dest_smc+2
|
||||||
|
jsr copytexthgr
|
||||||
|
|
||||||
|
; copy using the fast font traspose
|
||||||
|
lda #<FASTFONT_H1
|
||||||
|
sta copytexthgr_dest_smc+1
|
||||||
|
lda #>FASTFONT_H1
|
||||||
|
sta copytexthgr_dest_smc+2
|
||||||
|
jsr copytexthgr
|
||||||
|
|
||||||
|
jmp loop
|
||||||
|
|
||||||
|
|
||||||
|
copytexthgr
|
||||||
|
ldy #0 ; y is rows
|
||||||
|
copytexthgr_outer
|
||||||
|
lda textrow_h,y
|
||||||
|
ora #4
|
||||||
|
sta copytexthgr_src_smc+2
|
||||||
|
lda textrow_l,y
|
||||||
|
sta copytexthgr_src_smc+1
|
||||||
|
ldx #0 ; x is columns
|
||||||
|
copytexthgr_src_smc
|
||||||
|
lda $ffff,x
|
||||||
|
copytexthgr_dest_smc
|
||||||
|
jsr $ffff
|
||||||
|
inx
|
||||||
|
cpx #32
|
||||||
|
bcc copytexthgr_src_smc
|
||||||
|
iny
|
||||||
|
cpy #24
|
||||||
|
bcc copytexthgr_outer
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
filltext
|
||||||
|
ldy #0 ; Loop a bit
|
||||||
|
sty counter
|
||||||
|
ib_outer
|
||||||
|
lda textrow_h,y
|
||||||
|
sta text_ptr+1
|
||||||
|
lda textrow_l,y
|
||||||
|
sta text_ptr
|
||||||
|
ldx start_char
|
||||||
|
ldy #0
|
||||||
|
ib_inner
|
||||||
|
txa
|
||||||
|
adc #32
|
||||||
|
sta (text_ptr),y
|
||||||
|
inx
|
||||||
|
iny
|
||||||
|
cpy #40
|
||||||
|
bcc ib_inner
|
||||||
|
ldy counter
|
||||||
|
iny
|
||||||
|
sty counter
|
||||||
|
cpy #24
|
||||||
|
bcc ib_outer
|
||||||
|
inc start_char ; change starting char for next time
|
||||||
|
rts
|
||||||
|
|
||||||
|
textrow_l
|
||||||
|
.byte $00,$80,$00,$80,$00,$80,$00,$80
|
||||||
|
.byte $28,$A8,$28,$A8,$28,$A8,$28,$A8
|
||||||
|
.byte $50,$D0,$50,$D0,$50,$D0,$50,$D0
|
||||||
|
textrow_h
|
||||||
|
.byte $04,$04,$05,$05,$06,$06,$07,$07
|
||||||
|
.byte $04,$04,$05,$05,$06,$06,$07,$07
|
||||||
|
.byte $04,$04,$05,$05,$06,$06,$07,$07
|
||||||
|
|
||||||
|
.include fatfont.s
|
||||||
|
.include slowfont.s
|
||||||
|
.include fonttest-asmgen-driver.s
|
|
@ -0,0 +1,57 @@
|
||||||
|
; traditional font renderer using normal font tables
|
||||||
|
|
||||||
|
slowfont ; A = character, X = column, Y = row; A is clobbered, X&Y are not
|
||||||
|
stx temp_col ; save col to be returned to caller
|
||||||
|
sty temp_row ; save row to be returned to caller
|
||||||
|
|
||||||
|
; find address of glyph
|
||||||
|
sta font_ptr
|
||||||
|
lda #0
|
||||||
|
sta font_ptr + 1
|
||||||
|
asl font_ptr ; multiply by 8
|
||||||
|
rol font_ptr + 1
|
||||||
|
asl font_ptr
|
||||||
|
rol font_ptr + 1
|
||||||
|
asl font_ptr
|
||||||
|
rol font_ptr + 1
|
||||||
|
|
||||||
|
clc ; add font table address to get pointer inside font table
|
||||||
|
lda #<fatfont ; would be slightly faster if page aligned because you
|
||||||
|
adc font_ptr ; could just store the low byte
|
||||||
|
sta slowfont_loop_smc+1
|
||||||
|
lda #>fatfont
|
||||||
|
adc font_ptr+1
|
||||||
|
sta slowfont_loop_smc+2
|
||||||
|
|
||||||
|
lda hgrtextrow_l,y ; load address of first line of hgr text
|
||||||
|
sta hgr_ptr
|
||||||
|
lda hgrtextrow_h,y
|
||||||
|
sta hgr_ptr+1
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
ldy temp_col ; col goes in y
|
||||||
|
slowfont_loop
|
||||||
|
slowfont_loop_smc
|
||||||
|
lda $ffff,x
|
||||||
|
sta (hgr_ptr),y
|
||||||
|
clc
|
||||||
|
lda #4
|
||||||
|
adc hgr_ptr+1
|
||||||
|
sta hgr_ptr+1
|
||||||
|
inx
|
||||||
|
cpx #8
|
||||||
|
bcc slowfont_loop
|
||||||
|
|
||||||
|
ldx temp_col
|
||||||
|
ldy temp_row
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
hgrtextrow_l
|
||||||
|
.byte $00,$80,$00,$80,$00,$80,$00,$80
|
||||||
|
.byte $28,$A8,$28,$A8,$28,$A8,$28,$A8
|
||||||
|
.byte $50,$D0,$50,$D0,$50,$D0,$50,$D0
|
||||||
|
hgrtextrow_h
|
||||||
|
.byte $20,$20,$21,$21,$22,$22,$23,$23
|
||||||
|
.byte $20,$20,$21,$21,$22,$22,$23,$23
|
||||||
|
.byte $20,$20,$21,$21,$22,$22,$23,$23
|
Loading…
Reference in New Issue