From e399754e0c9f71cf5a32767b00745f8d82a083e7 Mon Sep 17 00:00:00 2001 From: Pecusx Date: Wed, 25 May 2022 20:36:15 +0200 Subject: [PATCH] One unified procedure for 4x4 fonts --- grafproc.asm | 96 +++++++++------------------------------------------ scorch.xex | Bin 37940 -> 37844 bytes textproc.asm | 3 +- 3 files changed, 18 insertions(+), 81 deletions(-) diff --git a/grafproc.asm b/grafproc.asm index 4c00c73..8173ae5 100755 --- a/grafproc.asm +++ b/grafproc.asm @@ -1333,86 +1333,26 @@ CharLoopi inx cpx #8 bne CharLoopi +EndPutChar rts .endp ; ------------------------------------------ -.proc PutChar4x4 +.proc PutChar4x4 ; puts 4x4 pixels char on the graphics screen ; in: xdraw, ydraw (upper left corner of the char) ; in: CharCode4x4 (.sbyte) -;-------------------------------------------------- - lda plot4x4color - sta color - - -; calculating address of the first byte - mva #4 LoopCounter4x4 - lda CharCode4x4 - and #1 - sta nibbler4x4 - lda CharCode4x4 - ror - ; in carry there is which nibble of the byte is to be taken - clc - adc #(3*32) - sta y4x4 -nextline4x4 - mva #4 Xcounter4x4 - ldy y4x4 - lda font4x4,y ;there was a problem with OMC here, but it works now - - ldx nibbler4x4 - beq uppernibble - - asl - asl - asl - asl -uppernibble - rol - sta StoreA4x4 - bcs EmptyPixel ; the font I drawn is in inverse ... - ;lda plot4x4color ;these lines are not necessary - ;sta color ;if a plots are one color only - jsr plot - ;jmp Loop4x4Continued -EmptyPixel - ;lda #1 ;reverse color (color==1-color) - ;sec - ;sbc plot4x4color - ;sta color - ;jsr plot - ;this is turned off for speed - ;anyway we assume the text is being drawn - ;over an empty space -Loop4x4Continued - inw xdraw - lda StoreA4x4 - dec Xcounter4x4 - ldx Xcounter4x4 - bne uppernibble - ; here we have on screen one line of the char - inw ydraw - sbw xdraw #4 - sbw y4x4 #32 - dec:lda LoopCounter4x4 - bne nextline4x4 - - rts -.endp -;-------------------------------------------------- -.proc PutChar4x4FULL -; puts 4x4 pixels char on the graphics screen -; in: xdraw, ydraw (upper left corner of the char) -; in: CharCode4x4 (.sbyte) -; this routine works just like PutChar4x4, -; but this time all pixels are being drawn +; all pixels are being drawn ; (empty and not empty) ;-------------------------------------------------- cpw ydraw #(screenheight-4) - jcs EndPut4x4 + jcs TypeChar.EndPutChar ;nearest RTS cpw xdraw #(screenwidth-4) - jcs EndPut4x4 ;nearest RTS + jcs TypeChar.EndPutChar ;nearest RTS + lda plot4x4color + beq FontColor0 + lda #$ff ; better option to check (plot4x4color = $00 or $ff) + sta plot4x4color +FontColor0 ; char to the table lda CharCode4x4 and #1 @@ -1502,26 +1442,22 @@ MakeMask01 dex bne MakeMask01 MaskOK01 - ; here x=0 -; lda Erase -; beq CharLoopi ; it works, because x=0 -; lda #$ff -; ldx #3 -;EmptyChar -; sta char1,x -; sta char2,x -; dex -; bpl EmptyChar ldx #0 CharLoopi4x4 lda (xbyte),y ora mask1,x + bit plot4x4color + bpl PutInColor0_1 ; only mask - no char and char1,x +PutInColor0_1 sta (xbyte),y iny lda (xbyte),y ora mask2,x + bit plot4x4color + bpl PutInColor0_2 ; only mask - no char and char2,x +PutInColor0_2 sta (xbyte),y dey adw xbyte #screenBytes diff --git a/scorch.xex b/scorch.xex index 9b7199000893990b61e26e7f2cf15af360de9499..768db8604f9da98df2ca18123fa7e770a4e768ee 100644 GIT binary patch delta 12060 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