gigatron/rom/Contrib/at67/gasm/tetronis/print_text.i
2025-01-28 19:17:01 +03:00

102 lines
3.6 KiB
OpenEdge ABL

; prints text using the inbuilt font and SYS routine
printText LDWI SYS_VDrawBits_134 ; setup 8 vertical pixel SYS routine
STW giga_sysFn
LDI 0x00 ; background colour
ST giga_sysArg0
LDI 0x3F ; foreground colour
ST giga_sysArg1
LDW textStr ; first byte is length
PEEK
ST tt
INC textStr
printT_chr LDW textStr
PEEK
SUBI 32 ; (char - 32)*5 + 0x0700
STW textChr
STW scratch
LSLW scratch
LSLW scratch
ADDW textChr
ADDW tbase
STW scratch ; text font slice base address for chars 32-81
LDW textChr
SUBI 50
BLT printT_draw
LDW scratch
ADDI 0x06
STW scratch ; text font slice base address for chars 82+
printT_draw LDI 0x05
ST ii
printT_slice LDW textPos
STW giga_sysArg4 ; xy
LDW scratch ; text font slice base address
LUP 0x00 ; get ROM slice
ST giga_sysArg2
SYS 134
INC scratch ; next vertical slice
INC textPos ; next x
LoopCounter ii printT_slice
INC textStr ; next char
INC textPos ; 1 pixel space between chars
LoopCounter tt printT_chr
RET
; prints digits using a tiny 3x5 font
printDigits LDWI SYS_Draw4_30 ; setup 4 pixel SYS routine
STW giga_sysFn
LDW textStr ; first byte is length
PEEK
ST tt
INC textStr
printD_chr LDW textStr
PEEK
SUBI 48 ; (char - 48)*4 + digit_font0
STW scratch
LSLW scratch
LSLW scratch
ADDW dbase
STW scratch
LDI 0x05
ST ii
printD_slice LDW scratch
DEEK
STW giga_sysArg0 ; first 2 pixels from digit font LUT
LDW scratch
ADDI 0x02
PEEK
ST giga_sysArg2 ; third pixel from digit font LUT
LDI bgColourB
ST giga_sysArg3 ; fourth pixel is background colour
LDW textPos
STW giga_sysArg4 ; xy
SYS 30
PUSH
CALL playMidi
POP
INC scratch + 1 ; next horizontal slice
INC textPos + 1 ; next y
LoopCounter ii printD_slice
INC textStr ; next char
LD textPos ; x += 4
ADDI 0x04
ST textPos
LD textPos + 1 ; y -= 5
SUBI 0x05
ST textPos + 1
LoopCounter tt printD_chr
RET