mirror of
https://github.com/Michaelangel007/apple2_hgr_font_tutorial.git
synced 2024-11-25 07:32:25 +00:00
Added ca65 source
This commit is contained in:
parent
c36dc839d5
commit
4f5831191c
BIN
asm/drawfont.bin
Normal file
BIN
asm/drawfont.bin
Normal file
Binary file not shown.
130
asm/drawfont.s
Normal file
130
asm/drawfont.s
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
__MAIN = $301
|
||||||
|
.include "dos33.inc"
|
||||||
|
|
||||||
|
; Listing 11
|
||||||
|
|
||||||
|
HgrLo = $E5 ; Low byte Pointer to screen destination
|
||||||
|
HgrHi = $E6 ; High byte Pointer to screen destination
|
||||||
|
String = $F0
|
||||||
|
TmpLo = $F5 ; Low byte Working pointer to screen byte
|
||||||
|
TmpHi = $F6 ; High byte Working pointer to screen byte
|
||||||
|
TopHi = $FD
|
||||||
|
Font = $6000
|
||||||
|
|
||||||
|
; ORG $0301 ; Listing 8
|
||||||
|
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 HgrLoY,X ; HgrLoY[ row ]
|
||||||
|
STA TmpLo
|
||||||
|
LDA HgrHiY,X ; HgrHiY[ row ]
|
||||||
|
CLC
|
||||||
|
ADC HgrHi
|
||||||
|
STA TmpHi
|
||||||
|
RTS
|
||||||
|
; ORG $0321 ; Listing 11
|
||||||
|
SetCursorColRow:
|
||||||
|
STX TmpLo
|
||||||
|
LDA HgrLoY,Y ; HgrLoY[ row ]
|
||||||
|
CLC
|
||||||
|
ADC TmpLo ; add column
|
||||||
|
STA TmpLo
|
||||||
|
LDA HgrHiY,Y ; HgrHiY[ row ]
|
||||||
|
CLC ; \ could optimize this into
|
||||||
|
ADC HgrHi ; / single ORA HgrHi
|
||||||
|
STA TmpHi
|
||||||
|
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 #>Font ; += FontHi; Carry=0 since s=0 from above
|
||||||
|
STA _LoadFont+2; AddressHi = FontHi + (c/32)
|
||||||
|
; ORG $034C ; Listing 4a
|
||||||
|
_DrawChar1:
|
||||||
|
LDX TmpHi
|
||||||
|
STX TopHi
|
||||||
|
; ORG $0350 ; Listing 1
|
||||||
|
_DrawChar:
|
||||||
|
LDX #0
|
||||||
|
_LoadFont: ; A = font[ offset ]
|
||||||
|
LDA Font,X
|
||||||
|
STA (TmpLo),Y ; screen[col] = A
|
||||||
|
CLC
|
||||||
|
LDA TmpHi ;
|
||||||
|
ADC #4 ; screen += 0x400
|
||||||
|
STA TmpHi
|
||||||
|
INX
|
||||||
|
CPX #8
|
||||||
|
BNE _LoadFont
|
||||||
|
; ORG $0363 ; Listing 4a
|
||||||
|
IncCursorCol:
|
||||||
|
INY
|
||||||
|
LDX TopHi ; Move cursor back to top of scanline
|
||||||
|
STX TmpHi
|
||||||
|
RTS
|
||||||
|
; ORG $0369 ; Listing 10
|
||||||
|
SetCursorColRowYX:
|
||||||
|
JSR SetCursorRow
|
||||||
|
CLC
|
||||||
|
TYA
|
||||||
|
ADC TmpLo
|
||||||
|
STA TmpLo
|
||||||
|
RTS
|
||||||
|
; ORG $037E ; Listing 12
|
||||||
|
DrawString:
|
||||||
|
STY String+0
|
||||||
|
STX String+1
|
||||||
|
LDY #0
|
||||||
|
_ds1: LDA (String),Y
|
||||||
|
BEQ _ds2 ; null byte? Done
|
||||||
|
JSR DrawChar ; or DrawCharCol for speed
|
||||||
|
CPY #40 ; col < 40?
|
||||||
|
BCC _ds1
|
||||||
|
_ds2: RTS
|
||||||
|
|
||||||
|
; pad $0385 .. $38F
|
||||||
|
.res $390 - *, $00
|
||||||
|
|
||||||
|
; ORG $0390 ; Listing 8
|
||||||
|
NIB2HEX:
|
||||||
|
.byte "0123456789ABCDEF"
|
||||||
|
; ORG $03A0 ; Listing 9a
|
||||||
|
HgrLoY:
|
||||||
|
.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
|
||||||
|
HgrHiY:
|
||||||
|
.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
|
||||||
|
|
||||||
|
__END:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user