From 68ae91fe7e85025ebc336663b487759a14633065 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 23 Aug 2023 21:07:25 -0400 Subject: [PATCH] hgr_font: clean things up a bit --- graphics/hgr/hgr_font_4am/bios_test.s | 14 +- .../hgr/hgr_font_4am/font_4am_condensed.s | 218 ++++++++++++++++++ ...ensed_data.s => font_4am_condensed_data.s} | 0 graphics/hgr/hgr_font_4am/font_condensed.s | 156 ------------- graphics/hgr/hgr_font_4am/font_test.s | 14 +- 5 files changed, 232 insertions(+), 170 deletions(-) create mode 100644 graphics/hgr/hgr_font_4am/font_4am_condensed.s rename graphics/hgr/hgr_font_4am/{font_condensed_data.s => font_4am_condensed_data.s} (100%) delete mode 100644 graphics/hgr/hgr_font_4am/font_condensed.s diff --git a/graphics/hgr/hgr_font_4am/bios_test.s b/graphics/hgr/hgr_font_4am/bios_test.s index bbf8621f..101c148d 100644 --- a/graphics/hgr/hgr_font_4am/bios_test.s +++ b/graphics/hgr/hgr_font_4am/bios_test.s @@ -37,7 +37,7 @@ bios_test: ldy #>test1 ldx #1 - stx VTAB + stx CV ldx #0 @@ -47,7 +47,7 @@ bios_test: ldy #>test2 ldx #3 - stx VTAB + stx CV ldx #0 @@ -57,7 +57,7 @@ bios_test: ldy #>test3 ldx #5 - stx VTAB + stx CV ldx #0 @@ -69,7 +69,7 @@ bios_test: ldy #>test4 ldx #7 - stx VTAB + stx CV ldx #0 jsr DrawCondensedString @@ -80,7 +80,7 @@ bios_test: ldy #>test5 ldx #9 - stx VTAB + stx CV ldx #0 jsr DrawCondensedString @@ -103,8 +103,8 @@ test4: test5: .byte 17,"@/\/\/\/\______ |" - .include "font_condensed.s" - .include "font_condensed_data.s" + .include "font_4am_condensed.s" + .include "font_4am_condensed_data.s" .include "zx02_optim.s" diff --git a/graphics/hgr/hgr_font_4am/font_4am_condensed.s b/graphics/hgr/hgr_font_4am/font_4am_condensed.s new file mode 100644 index 00000000..c8148ab9 --- /dev/null +++ b/graphics/hgr/hgr_font_4am/font_4am_condensed.s @@ -0,0 +1,218 @@ +;license:MIT +;(c) 2023 by 4am +; +; drawing routines for Million Perfect Tiles Condensed +; +; Public functions: +; - DrawCondensedString +; + +; VMW: commented, reformatted, minor changes, ca65 assembly + +string_ptr = $FC ; word (used by DrawLargeString) +tmpx = $FE ; byte (used by DrawLargeCharacter, FindValidMove) +tmpy = $FF ; byte (used by DrawLargeCharacter, FindValidMove) + +; Y location of the 16 supported lines +CondensedHGRTops: + .byte 7,18,29,40,51,62,73,84,95,106,117,128,139,150,161,172 + +;------------------------------------------------------------------------------ +; DrawCondensedString +; +; in: A/Y points to length-prefixed string (Pascal style) +; X contains column number (0x00..0x27) +; $25 (CV) contains logical line number (0x00..0x0F) +; pointer is hidden +; out: clobbers all registers & flags +;------------------------------------------------------------------------------ +DrawCondensedString: + + ; store the string location + + sta string_ptr + sty string_ptr+1 + + + + stx CH ; save the X column offset + + ldy #0 + lda (string_ptr), Y ; get string length + tax ; store it in X + + ; 16 bit increment of string_ptr + + inc string_ptr ; increment past the length + bne dcs_noflo + inc string_ptr+1 +dcs_noflo: + + ; Load updated string pointer back into Y/A + lda string_ptr + ldy string_ptr+1 + + ; /!\ execution falls through here to DrawCondensedBuffer + +;------------------------------------------------------------------------------ +; DrawCondensedBuffer +; +; in: A/Y contains address of character buffer (characters 0x19+ only) +; X contains buffer length (0x01..0x28) +; $24 (CH) contains starting column (0x00..0x27) +; $25 (CV) contains logical line number (0x00..0x0F) +; all characters are drawn on the same line +; CH is incremented for each character +; CV is NOT incremented +; out: clobbers all registers & flags +;------------------------------------------------------------------------------ +DrawCondensedBuffer: + + sta dcb_loop_smc+1 ; save string address + sty dcb_loop_smc+2 ; to smc location + + dex ; ? + + ldy CV ; lookup y-coord location + lda CondensedHGRTops, Y ; using lookup table + tay ; + + ; row0 + + lda hposn_low, Y ; get low memory offset + clc + adc CH ; add in x-coord + sta dcb_row0+4 + lda hposn_high, Y ; get high memory offset + sta dcb_row0+5 ; save it out + iny ; go to next row + + ; row1 + + lda hposn_low, Y + adc CH + sta dcb_row1+4 + lda hposn_high, Y + sta dcb_row1+5 + iny + + ; row2 + + lda hposn_low, Y + adc CH + sta dcb_row2+4 + lda hposn_high, Y + sta dcb_row2+5 + iny + + ; row3 + + lda hposn_low, Y + adc CH + sta dcb_row3+4 + lda hposn_high, Y + sta dcb_row3+5 + iny + + ; row4 + + lda hposn_low, Y + adc CH + sta dcb_row4+4 + lda hposn_high, Y + sta dcb_row4+5 + iny + + ; row5 + + lda hposn_low, Y + adc CH + sta dcb_row5+4 + lda hposn_high, Y + sta dcb_row5+5 + iny + + ; row6 + + lda hposn_low, Y + adc CH + sta dcb_row6+4 + lda hposn_high, Y + sta dcb_row6+5 + iny + + ; row7 + + lda hposn_low, Y + adc CH + sta dcb_row7+4 + lda hposn_high, Y + sta dcb_row7+5 + iny + + ; row8 + + lda hposn_low, Y + adc CH + sta dcb_row8+4 + lda hposn_high, Y + sta dcb_row8+5 + iny + + ; row9 + + lda hposn_low, Y + adc CH + sta dcb_row9+4 + lda hposn_high, Y + sta dcb_row9+5 + +dcb_loop: +dcb_loop_smc: + ldy $FDFD, X ; load next char into Y + ; note we are going backward + + ; unrolled loop to write out each line + +dcb_row0: + lda CondensedRow0-$19, Y ; get 1-byte font row + sta $FDFD, X ; write out to graphics mem +dcb_row1: + lda CondensedRow1-$19, Y + sta $FDFD, X +dcb_row2: + lda CondensedRow2-$19, Y + sta $FDFD, X +dcb_row3: + lda CondensedRow3-$19, Y + sta $FDFD, X +dcb_row4: + lda CondensedRow4-$19, Y + sta $FDFD, X +dcb_row5: + lda CondensedRow5-$19, Y + sta $FDFD, X +dcb_row6: + lda CondensedRow6-$19, Y + sta $FDFD, X +dcb_row7: + lda CondensedRow7-$19, Y + sta $FDFD, X +dcb_row8: + lda CondensedRow8-$19, Y + sta $FDFD, X +dcb_row9: + lda CondensedRow9-$19, Y + sta $FDFD, X + + + ; increment to next char + inc CH ; not-needed for the routine + ; I guess auto-points to next string + + ; decrement number of characters + dex ; we're traversing backward + bpl dcb_loop + + rts + diff --git a/graphics/hgr/hgr_font_4am/font_condensed_data.s b/graphics/hgr/hgr_font_4am/font_4am_condensed_data.s similarity index 100% rename from graphics/hgr/hgr_font_4am/font_condensed_data.s rename to graphics/hgr/hgr_font_4am/font_4am_condensed_data.s diff --git a/graphics/hgr/hgr_font_4am/font_condensed.s b/graphics/hgr/hgr_font_4am/font_condensed.s deleted file mode 100644 index bb7efba7..00000000 --- a/graphics/hgr/hgr_font_4am/font_condensed.s +++ /dev/null @@ -1,156 +0,0 @@ -;license:MIT -;(c) 2023 by 4am -; -; drawing routines for Million Perfect Tiles Condensed -; -; Public functions: -; - DrawCondensedString -; - - -string_ptr = $FC ; word (used by DrawLargeString) -tmpx = $FE ; byte (used by DrawLargeCharacter, FindValidMove) -tmpy = $FF ; byte (used by DrawLargeCharacter, FindValidMove) - - -CondensedHGRTops: - .byte 7,18,29,40,51,62,73,84,95,106,117,128,139,150,161,172 - -;------------------------------------------------------------------------------ -; DrawCondensedString -; -; in: A/Y points to length-prefixed string (Pascal style) -; X contains column number (0x00..0x27) -; $25 (VTAB) contains logical line number (0x00..0x0F) -; pointer is hidden -; out: clobbers all registers & flags -;------------------------------------------------------------------------------ -DrawCondensedString: -; +ST16 string_ptr ; macro - sta string_ptr - sty string_ptr+1 - - - - stx HTAB - ldy #0 - lda (string_ptr), y - tax - inc string_ptr - bne dcs1 - inc string_ptr+1 -dcs1: -; +LD16 string_ptr - lda string_ptr - ldy string_ptr+1 - - ; /!\ execution falls through here to DrawCondensedBuffer - -;------------------------------------------------------------------------------ -; DrawCondensedBuffer -; -; in: A/Y contains address of character buffer (characters 0x19+ only) -; X contains buffer length (0x01..0x28) -; $24 (HTAB) contains starting column (0x00..0x27) -; $25 (VTAB) contains logical line number (0x00..0x0F) -; all characters are drawn on the same line -; HTAB is incremented for each character -; VTAB is NOT incremented -; out: clobbers all registers & flags -;------------------------------------------------------------------------------ -;DrawCondensedBuffer -; +ST16 @loop+1 - - sta @loop+1 - sty @loop+2 - - dex - ldy VTAB - lda CondensedHGRTops, y - tay - lda hposn_low, y - clc - adc HTAB - sta @row0+1 - lda hposn_high, y - sta @row0+2 - iny - lda hposn_low, y - adc HTAB - sta @row1+1 - lda hposn_high, y - sta @row1+2 - iny - lda hposn_low, y - adc HTAB - sta @row2+1 - lda hposn_high, y - sta @row2+2 - iny - lda hposn_low, y - adc HTAB - sta @row3+1 - lda hposn_high, y - sta @row3+2 - iny - lda hposn_low, y - adc HTAB - sta @row4+1 - lda hposn_high, y - sta @row4+2 - iny - lda hposn_low, y - adc HTAB - sta @row5+1 - lda hposn_high, y - sta @row5+2 - iny - lda hposn_low, y - adc HTAB - sta @row6+1 - lda hposn_high, y - sta @row6+2 - iny - lda hposn_low, y - adc HTAB - sta @row7+1 - lda hposn_high, y - sta @row7+2 - iny - lda hposn_low, y - adc HTAB - sta @row8+1 - lda hposn_high, y - sta @row8+2 - iny - lda hposn_low, y - adc HTAB - sta @row9+1 - lda hposn_high, y - sta @row9+2 -@loop: ldy $FDFD, x - lda CondensedRow0-$19, y -@row0: sta $FDFD, x - lda CondensedRow1-$19, y -@row1: sta $FDFD, x - lda CondensedRow2-$19, y -@row2: sta $FDFD, x - lda CondensedRow3-$19, y -@row3: sta $FDFD, x - lda CondensedRow4-$19, y -@row4: sta $FDFD, x - lda CondensedRow5-$19, y -@row5: sta $FDFD, x - lda CondensedRow6-$19, y -@row6: sta $FDFD, x - lda CondensedRow7-$19, y -@row7: sta $FDFD, x - lda CondensedRow8-$19, y -@row8: sta $FDFD, x - lda CondensedRow9-$19, y -@row9: sta $FDFD, x - inc HTAB - dex - bpl @loop - rts - diff --git a/graphics/hgr/hgr_font_4am/font_test.s b/graphics/hgr/hgr_font_4am/font_test.s index 8e2948df..3c088e05 100644 --- a/graphics/hgr/hgr_font_4am/font_test.s +++ b/graphics/hgr/hgr_font_4am/font_test.s @@ -29,7 +29,7 @@ font_test: ldy #>test1 ldx #1 - stx VTAB + stx CV ldx #0 @@ -41,7 +41,7 @@ font_test: ldy #>test2 ldx #3 - stx VTAB + stx CV ldx #0 @@ -53,7 +53,7 @@ font_test: ldy #>test3 ldx #5 - stx VTAB + stx CV ldx #0 @@ -65,7 +65,7 @@ font_test: ldy #>test4 ldx #7 - stx VTAB + stx CV ldx #0 jsr DrawCondensedString @@ -76,7 +76,7 @@ font_test: ldy #>test5 ldx #9 - stx VTAB + stx CV ldx #0 jsr DrawCondensedString @@ -99,8 +99,8 @@ test4: test5: .byte 17,"@/\/\/\/\______ |" - .include "font_condensed.s" - .include "font_condensed_data.s" + .include "font_4am_condensed.s" + .include "font_4am_condensed_data.s" hposn_low = $1713 ; 0xC0 bytes (lifetime, used by DrawLargeCharacter)