mirror of
https://github.com/Michaelangel007/apple2_hgr_font_tutorial.git
synced 2024-12-27 20:33:15 +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