mirror of
https://github.com/blondie7575/GSCats.git
synced 2024-11-24 19:32:33 +00:00
688 lines
12 KiB
ArmAsm
688 lines
12 KiB
ArmAsm
;****************************************
|
|
;* FONT ENGINE (v3?) *
|
|
;* *
|
|
;* Dagen Brock <dagenbrock@gmail.com> *
|
|
;* 2013-07-20 *
|
|
;* Converted to ca65 by Quinn Dunki *
|
|
;* 2017-08-13 *
|
|
;****************************************
|
|
;* A= ptr to string preceded by length *
|
|
;* X= screen location *
|
|
;* Preserves all registers *
|
|
;* Trashes zero page locations 6,7 *
|
|
;****************************************
|
|
; each char:
|
|
; draw char at loc
|
|
; update loc
|
|
; see if length hit - no? back to draw char
|
|
|
|
F_Length: .word 0 ;length of string (only one byte currently used)
|
|
F_CharIdx: .word 0 ;index of current character
|
|
F_CurrentPos: .word 0 ;current top left char position
|
|
F_StrPtr = $06 ;pointer to string (including length byte) / DP
|
|
|
|
|
|
DrawString:
|
|
pha
|
|
phx
|
|
phy
|
|
sta F_StrPtr ;store at dp 0 ($00) for indirect loads
|
|
stx F_CurrentPos
|
|
stz F_CharIdx
|
|
lda (F_StrPtr)
|
|
and #$00ff ;strip off first char (len is only one byte)
|
|
sta F_Length ;get our length byte
|
|
|
|
NextChar: lda F_CharIdx
|
|
cmp F_Length
|
|
bne notDone
|
|
ply
|
|
plx
|
|
pla
|
|
rts ;DONE! Return to caller
|
|
|
|
notDone: inc F_CharIdx
|
|
ldy F_CharIdx
|
|
lda (F_StrPtr),y ;get next char!
|
|
and #$00FF ;mask high byte
|
|
sec
|
|
sbc #' ' ;our table starts with space ' '
|
|
asl ;*2
|
|
tay
|
|
ldx F_CurrentPos
|
|
jsr drawChar
|
|
inc F_CurrentPos ;compare to addition time (?)
|
|
inc F_CurrentPos
|
|
inc F_CurrentPos
|
|
inc F_CurrentPos ;update screen pos (2 words=8 pixels)
|
|
bra NextChar
|
|
|
|
;x = TopLeft screen pos
|
|
;y = char table offset
|
|
drawChar: lda FontTable,y ;get real address of char data
|
|
sec
|
|
sbc #FontData ;pivot offset - now a is offset of fontdata
|
|
tay ;so we'll index with that
|
|
|
|
lda FontData,y
|
|
sta $012000,x
|
|
lda FontData+2,y
|
|
sta $012000+2,x
|
|
|
|
lda FontData+4,y
|
|
sta $012000+160,x
|
|
lda FontData+6,y
|
|
sta $012000+160+2,x
|
|
|
|
lda FontData+8,y
|
|
sta $012000+160*2,x
|
|
lda FontData+10,y
|
|
sta $012000+160*2+2,x
|
|
lda FontData+12,y
|
|
sta $012000+160*3,x
|
|
lda FontData+14,y
|
|
sta $012000+160*3+2,x
|
|
lda FontData+16,y
|
|
sta $012000+160*4,x
|
|
lda FontData+18,y
|
|
sta $012000+160*4+2,x
|
|
lda FontData+20,y
|
|
sta $012000+160*5,x
|
|
lda FontData+22,y
|
|
sta $012000+160*5+2,x
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
FontTable:
|
|
.addr s_Space
|
|
.addr s_Exclaim
|
|
.addr s_Quote
|
|
.addr s_Number
|
|
.addr s_Dollar
|
|
.addr s_Percent
|
|
.addr s_Amper
|
|
.addr s_Single
|
|
.addr s_OpenParen
|
|
.addr s_CloseParen
|
|
.addr s_Asterix
|
|
.addr s_Plus
|
|
.addr s_Comma
|
|
.addr s_Minus
|
|
.addr s_Period
|
|
.addr s_Slash
|
|
.addr s_N0
|
|
.addr s_N1
|
|
.addr s_N2
|
|
.addr s_N3
|
|
.addr s_N4
|
|
.addr s_N5
|
|
.addr s_N6
|
|
.addr s_N7
|
|
.addr s_N8
|
|
.addr s_N9
|
|
.addr s_Colon
|
|
.addr s_Semi
|
|
.addr s_LAngle
|
|
.addr s_Equal
|
|
.addr s_RAngle
|
|
.addr s_Question
|
|
.addr s_At
|
|
.addr s_A
|
|
.addr s_B
|
|
.addr s_C
|
|
.addr s_D
|
|
.addr s_E
|
|
.addr s_F
|
|
.addr s_G
|
|
.addr s_H
|
|
.addr s_I
|
|
.addr s_J
|
|
.addr s_K
|
|
.addr s_L
|
|
.addr s_M
|
|
.addr s_N
|
|
.addr s_O
|
|
.addr s_P
|
|
.addr s_Q
|
|
.addr s_R
|
|
.addr s_S
|
|
.addr s_T
|
|
.addr s_U
|
|
.addr s_V
|
|
.addr s_W
|
|
.addr s_X
|
|
.addr s_Y
|
|
.addr s_Z
|
|
.addr s_LBracket
|
|
.addr s_BackSlash
|
|
.addr s_RBracket
|
|
.addr s_Caret
|
|
.addr s_UnderLine
|
|
|
|
FontData:
|
|
s_Space:
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
|
|
s_Exclaim:
|
|
qbyte $000FF000
|
|
qbyte $000FF000
|
|
qbyte $000FF000
|
|
qbyte $000FF000
|
|
qbyte $00000000
|
|
qbyte $000FF000
|
|
|
|
s_Quote:
|
|
qbyte $0FF00FF0
|
|
qbyte $00F000F0
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
|
|
s_Number:
|
|
qbyte $00000000
|
|
qbyte $00F00F00
|
|
qbyte $0FFFFFF0
|
|
qbyte $00F00F00
|
|
qbyte $0FFFFFF0
|
|
qbyte $00F00F00
|
|
|
|
s_Dollar:
|
|
qbyte $00666600
|
|
qbyte $06616660
|
|
qbyte $06166660
|
|
qbyte $06666660
|
|
qbyte $00666600
|
|
qbyte $00000000
|
|
|
|
s_Percent:
|
|
qbyte $0FF000F0
|
|
qbyte $00000F00
|
|
qbyte $0000F000
|
|
qbyte $000F0000
|
|
qbyte $00F00000
|
|
qbyte $0F000FF0
|
|
|
|
s_Amper:
|
|
qbyte $000FF000
|
|
qbyte $00F00F00
|
|
qbyte $0F00F000
|
|
qbyte $00F000F0
|
|
qbyte $0F0FFF00
|
|
qbyte $00F0F000
|
|
|
|
s_Single:
|
|
qbyte $000FF000
|
|
qbyte $0000F000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
|
|
s_OpenParen:
|
|
qbyte $000FF000
|
|
qbyte $00FF0000
|
|
qbyte $0FF00000
|
|
qbyte $0FF00000
|
|
qbyte $00FF0000
|
|
qbyte $000FF000
|
|
|
|
s_CloseParen: ; Anger symbol
|
|
qbyte $0F0000F0
|
|
qbyte $00F00F00
|
|
qbyte $00000000
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $F000000F
|
|
|
|
|
|
s_Asterix:
|
|
qbyte $00000000 ; Angle symbol
|
|
qbyte $00000FF0
|
|
qbyte $0000FF00
|
|
qbyte $000FF000
|
|
qbyte $00FFFFF0
|
|
qbyte $00000000
|
|
|
|
s_Plus: ; Power symbol
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $0FFFFF00
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $00000000
|
|
|
|
s_Comma:
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $0000FF00
|
|
qbyte $0000F000
|
|
|
|
s_Minus:
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $0FFFFF00
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
|
|
|
|
s_Period:
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $0000FF00
|
|
qbyte $0000FF00
|
|
|
|
s_Slash:
|
|
qbyte $000000F0
|
|
qbyte $00000F00
|
|
qbyte $0000F000
|
|
qbyte $000F0000
|
|
qbyte $00F00000
|
|
qbyte $0F000000
|
|
|
|
s_N0:
|
|
qbyte $00FFFF00
|
|
qbyte $0F000FF0
|
|
qbyte $0F00F0F0
|
|
qbyte $0F0F00F0
|
|
qbyte $0FF000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_N1:
|
|
qbyte $000F0000
|
|
qbyte $00FF0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $00FFF000
|
|
|
|
s_N2:
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $00000F00
|
|
qbyte $000FF000
|
|
qbyte $00F00000
|
|
qbyte $0FFFFFF0
|
|
|
|
s_N3:
|
|
qbyte $00FFFF00
|
|
qbyte $000000F0
|
|
qbyte $000FFF00
|
|
qbyte $000000F0
|
|
qbyte $000000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_N4:
|
|
qbyte $0000FF00
|
|
qbyte $000F0F00
|
|
qbyte $00F00F00
|
|
qbyte $0FFFFFF0
|
|
qbyte $00000F00
|
|
qbyte $00000F00
|
|
|
|
s_N5:
|
|
qbyte $0FFFFFF0
|
|
qbyte $0F000000
|
|
qbyte $0FFFFF00
|
|
qbyte $000000F0
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_N6:
|
|
qbyte $000FFF00
|
|
qbyte $00F00000
|
|
qbyte $0F000000
|
|
qbyte $0FFFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFFF0
|
|
|
|
s_N7:
|
|
qbyte $0FFFFFF0
|
|
qbyte $000000F0
|
|
qbyte $00000F00
|
|
qbyte $0000F000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
|
|
s_N8:
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_N9:
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
qbyte $0000F000
|
|
qbyte $000F0000
|
|
qbyte $00F00000
|
|
|
|
s_Colon:
|
|
qbyte $000FF000
|
|
qbyte $000FF000
|
|
qbyte $00000000
|
|
qbyte $000FF000
|
|
qbyte $000FF000
|
|
qbyte $00000000
|
|
|
|
s_Semi:
|
|
qbyte $00000000
|
|
qbyte $000FF000
|
|
qbyte $000FF000
|
|
qbyte $00000000
|
|
qbyte $000FF000
|
|
qbyte $000F0000
|
|
|
|
s_LAngle:
|
|
qbyte $0000F000
|
|
qbyte $000F0000
|
|
qbyte $00F00000
|
|
qbyte $000F0000
|
|
qbyte $0000F000
|
|
qbyte $00000000
|
|
|
|
s_Equal:
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $0FFFFF00
|
|
qbyte $00000000
|
|
qbyte $0FFFFF00
|
|
qbyte $00000000
|
|
|
|
s_RAngle:
|
|
qbyte $0000F000
|
|
qbyte $00000F00
|
|
qbyte $000000F0
|
|
qbyte $00000F00
|
|
qbyte $0000F000
|
|
qbyte $00000000
|
|
|
|
s_Question:
|
|
qbyte $00FFF000
|
|
qbyte $0F000F00
|
|
qbyte $00000F00
|
|
qbyte $000FF000
|
|
qbyte $00000000
|
|
qbyte $000FF000
|
|
|
|
s_At:
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0F00F0F0
|
|
qbyte $0FFFF0F0
|
|
qbyte $000000F0
|
|
qbyte $0FFFFF00
|
|
|
|
s_A:
|
|
qbyte $000FF000
|
|
qbyte $00F00F00
|
|
qbyte $0F0000F0
|
|
qbyte $0FFFFFF0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
|
|
s_B:
|
|
qbyte $0FFFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0FFFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0FFFFF00
|
|
|
|
s_C:
|
|
qbyte $00FFFFF0
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $00FFFFF0
|
|
|
|
s_D:
|
|
qbyte $0FFFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0FFFFF00
|
|
|
|
s_E:
|
|
qbyte $0FFFFFF0
|
|
qbyte $0F000000
|
|
qbyte $0FFFF000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0FFFFFF0
|
|
|
|
s_F:
|
|
qbyte $0FFFFFF0
|
|
qbyte $0F000000
|
|
qbyte $0FFFF000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
|
|
s_G:
|
|
qbyte $00FFFFF0
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F00FFF0
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_H:
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0FFFFFF0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
|
|
s_I:
|
|
qbyte $0FFFFF00
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $0FFFFF00
|
|
|
|
s_J:
|
|
qbyte $000000F0
|
|
qbyte $000000F0
|
|
qbyte $000000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_K:
|
|
qbyte $0F000F00
|
|
qbyte $0F00F000
|
|
qbyte $0FFF0000
|
|
qbyte $0F00F000
|
|
qbyte $0F000F00
|
|
qbyte $0F000F00
|
|
|
|
s_L:
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0FFFFFF0
|
|
|
|
s_M:
|
|
qbyte $0F0000F0
|
|
qbyte $0FF00FF0
|
|
qbyte $0F0FF0F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
|
|
s_N:
|
|
qbyte $0F0000F0
|
|
qbyte $0FF000F0
|
|
qbyte $0F0F00F0
|
|
qbyte $0F00F0F0
|
|
qbyte $0F000FF0
|
|
qbyte $0F0000F0
|
|
|
|
s_O:
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_P:
|
|
qbyte $0FFFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0FFFFF00
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
qbyte $0F000000
|
|
|
|
s_Q:
|
|
qbyte $00FFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F00F0F0
|
|
qbyte $0F000FF0
|
|
qbyte $00FFFFF0
|
|
|
|
s_R:
|
|
qbyte $0FFFFF00
|
|
qbyte $0F0000F0
|
|
qbyte $0FFFFF00
|
|
qbyte $0F000F00
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
|
|
s_S:
|
|
qbyte $00FFFFF0
|
|
qbyte $0F000000
|
|
qbyte $00FFFF00
|
|
qbyte $000000F0
|
|
qbyte $000000F0
|
|
qbyte $0FFFFF00
|
|
|
|
s_T:
|
|
qbyte $0FFFFF00
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
|
|
s_U:
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $00FFFF00
|
|
|
|
s_V:
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $00F00F00
|
|
qbyte $000FF000
|
|
|
|
s_W:
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0000F0
|
|
qbyte $0F0FF0F0
|
|
qbyte $0FF00FF0
|
|
qbyte $0F0000F0
|
|
|
|
s_X:
|
|
qbyte $0F0000F0
|
|
qbyte $00F00F00
|
|
qbyte $000FF000
|
|
qbyte $000FF000
|
|
qbyte $00F00F00
|
|
qbyte $0F0000F0
|
|
|
|
s_Y:
|
|
qbyte $F00000F0
|
|
qbyte $0F000F00
|
|
qbyte $00F0F000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
|
|
s_Z:
|
|
qbyte $0FFFFFF0
|
|
qbyte $00000F00
|
|
qbyte $0000F000
|
|
qbyte $000F0000
|
|
qbyte $00F00000
|
|
qbyte $0FFFFFF0
|
|
|
|
s_LBracket:
|
|
qbyte $000FFF00
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000F0000
|
|
qbyte $000FFF00
|
|
|
|
s_BackSlash:
|
|
qbyte $0F000000
|
|
qbyte $00F00000
|
|
qbyte $000F0000
|
|
qbyte $0000F000
|
|
qbyte $00000F00
|
|
qbyte $000000F0
|
|
|
|
s_RBracket:
|
|
qbyte $00FFF000
|
|
qbyte $0000F000
|
|
qbyte $0000F000
|
|
qbyte $0000F000
|
|
qbyte $0000F000
|
|
qbyte $00FFF000
|
|
|
|
s_Caret:
|
|
qbyte $0000F000
|
|
qbyte $000F0F00
|
|
qbyte $00F000F0
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
|
|
s_UnderLine:
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $FFFFFFF0
|
|
|
|
s_Template:
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
qbyte $00000000
|
|
|