From 4f5831191c722824c1636944e01f7e7068f5faa9 Mon Sep 17 00:00:00 2001 From: Michaelangel007 Date: Wed, 27 Jan 2016 16:05:00 -0800 Subject: [PATCH] Added ca65 source --- asm/drawfont.bin | Bin 0 -> 211 bytes asm/drawfont.s | 130 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) create mode 100644 asm/drawfont.bin create mode 100644 asm/drawfont.s diff --git a/asm/drawfont.bin b/asm/drawfont.bin new file mode 100644 index 0000000000000000000000000000000000000000..ad6ffcbf532ac990b3b3d16c80f889109f8f8d91 GIT binary patch literal 211 zcmZQ%KF{Eh1q2FQ%o&>etM*P{_OW8#yMVd%>)svA5~^?c)N5jUPU+D+n+j(3tQwfdK&w42_IUOwG(KEFGPkU0mH58X!<( U1q23MfItQYMn)zkW@dC602510IsgCw literal 0 HcmV?d00001 diff --git a/asm/drawfont.s b/asm/drawfont.s new file mode 100644 index 0000000..98ad651 --- /dev/null +++ b/asm/drawfont.s @@ -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: +