From 9aa9c2cf566c828d2740c21da6299c41d831d4f2 Mon Sep 17 00:00:00 2001 From: alpine9000 Date: Tue, 29 Mar 2016 20:50:47 +1100 Subject: [PATCH] Small optimisations --- 024.simple_text/Makefile | 2 +- 024.simple_text/blittext.s | 34 +++++++++++++++++++++++++--------- 024.simple_text/constants.i | 2 +- 024.simple_text/simple_text.s | 25 +++++++++++++++++-------- assets/font8x10.png | Bin 0 -> 5935 bytes 5 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 assets/font8x10.png diff --git a/024.simple_text/Makefile b/024.simple_text/Makefile index 5cbd9aa..87beb12 100644 --- a/024.simple_text/Makefile +++ b/024.simple_text/Makefile @@ -9,7 +9,7 @@ BASE_ADDRESS=4000 BOOTBLOCK_ASM=alpine_bootblock.s OBJS=out/init.o out/utils.o out/image.o out/blittext.o out/cpu.o out/blit.o -IMAGES=font.png +IMAGES=font8x10.png IMAGEDATA=$(addprefix out/, $(IMAGES:.png=.bin)) VASM_EXTRA_ARGS= diff --git a/024.simple_text/blittext.s b/024.simple_text/blittext.s index 65d52c5..6f86c0b 100644 --- a/024.simple_text/blittext.s +++ b/024.simple_text/blittext.s @@ -4,6 +4,7 @@ BLIT_LF_MINTERM equ $ca ; cookie cut BLIT_WIDTH_WORDS equ 2 ; blit 2 words to allow shifting BLIT_WIDTH_BYTES equ 4 +FONTMAP_WIDTH_BYTES equ 32 DrawText8: ;; a0 - bitplane @@ -16,11 +17,11 @@ DrawText8: ;; blitter config that is shared for every character if MASKED_FONT==1 move.w #BLIT_SRCA|BLIT_SRCB|BLIT_SRCC|BLIT_DEST|BLIT_LF_MINTERM,d6 ; BLTCON0 value (masked version) - move.w #SCREEN_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTAMOD(a6) ; A modulo (only used for masked version) + move.w #FONTMAP_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTAMOD(a6) ; A modulo (only used for masked version) else move.w #BLIT_SRCB|BLIT_SRCC|BLIT_DEST|BLIT_LF_MINTERM,d6 ; BLTCON0 value endif - move.w #SCREEN_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTBMOD(a6) ; B modulo + move.w #FONTMAP_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTBMOD(a6) ; B modulo move.w #SCREEN_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTCMOD(a6) ; C modulo move.w #SCREEN_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTDMOD(a6) ; D modulo mulu.w #SCREEN_WIDTH_BYTES*SCREEN_BIT_DEPTH,d1 ; ypos bytes @@ -29,7 +30,7 @@ DrawText8: move.l a1,a3 ; character pointer move.l #font,a5 ; font pointer move.l #fontMask,d7 ; font mask pointer - move.w #SCREEN_WIDTH_BYTES*SCREEN_BIT_DEPTH*FONT_HEIGHT,d3 ; bytes per font line + move.w #FONTMAP_WIDTH_BYTES*SCREEN_BIT_DEPTH*FONT_HEIGHT,d3 ; bytes per font line .loop: clr.l d2 move.b (a3)+,d2 ; get next character @@ -37,7 +38,7 @@ DrawText8: beq .done move.l a0,a4 ; bitplane pointer bsr DrawChar8 ; draw it - add.w #FONT_WIDTH,d0 ; increment the x position + add.l #FONT_WIDTH,d0 ; increment the x position bra .loop .done: movem.l (sp)+,d0-d7/a0-a4 @@ -60,10 +61,25 @@ DrawChar8: lsr.w #5,d5 ; char / 32 = fontmap line andi.w #$1f,d2 ; char index in line (char index - start of line index) - add.w #1,d5 ; while we have a weird font image, '!' starts on second line + add.l #1,d5 ; while we have a weird font image, '!' starts on second line move.l a5,a1 ; #font - mulu.w d3,d5 ; d5 *= #SCREEN_WIDTH_BYTES*SCREEN_BIT_DEPTH*FONT_HEIGHT + if 0 + mulu.w d3,d5 ; d5 *= #FONTMAP_WIDTH_BYTES*SCREEN_BIT_DEPTH*FONT_HEIGHT + else + move.w d5,d3 + lsl.w #7,d3 ; d5 *= FONTMAP_WIDTH_BYTES*SCREEN_BIT_DEPTH + move.w d3,d5 + add.l d3,d5 + add.l d3,d5 + add.l d3,d5 + add.l d3,d5 + add.l d3,d5 + add.l d3,d5 + add.l d3,d5 + add.l d3,d5 + add.l d3,d5 + endif if MASKED_FONT==1 move.l d7,a2 ; #fontMask @@ -74,7 +90,7 @@ DrawChar8: add.w d2,a1 ; add offset into font if MASKED_FONT==1 - add.w d2,a2 ; add offset into mask + add.l d2,a2 ; add offset into mask endif .blitChar8: @@ -129,6 +145,6 @@ DrawChar8: rts font: - incbin "out/font.bin" + incbin "out/font8x10.bin" fontMask: - incbin "out/font-mask.bin" + incbin "out/font8x10-mask.bin" diff --git a/024.simple_text/constants.i b/024.simple_text/constants.i index 85a8d78..2a26e52 100644 --- a/024.simple_text/constants.i +++ b/024.simple_text/constants.i @@ -1,4 +1,4 @@ -MASKED_FONT equ 0 +MASKED_FONT equ 1 if MASKED_FONT==1 BACKGROUND_COLOR equ 4 diff --git a/024.simple_text/simple_text.s b/024.simple_text/simple_text.s index 57451d0..5111523 100644 --- a/024.simple_text/simple_text.s +++ b/024.simple_text/simple_text.s @@ -28,17 +28,17 @@ Entry: move.l onscreen,a0 move.l #BACKGROUND_COLOR,d0 - move.w #SCREEN_HEIGHT,d1 + move.w #SCREEN_HEIGHT,d1 move.w #0,d2 ; ypos jsr BlitFillColor move.l offscreen,a0 move.l #BACKGROUND_COLOR,d0 move.w #SCREEN_HEIGHT,d1 - move.w #0,d2 ; ypos + move.w #0,d2 ; ypos jsr BlitFillColor - WaitBlitter + WaitBlitter jsr Init ; enable the playfield MainLoop: @@ -47,12 +47,16 @@ MainLoop: move.l offscreen,a0 move.l #BACKGROUND_COLOR,d0 - move.w #FONT_HEIGHT,d1 + move.w #FONT_HEIGHT,d1 move.l ypos,d2 ; ypos jsr BlitFillColor - move.l offscreen,a0 - move.l ypos2,d2 + move.l offscreen,a0 + move.l ypos2,d2 + jsr BlitFillColor + + move.l offscreen,a0 + move.l ypos3,d2 jsr BlitFillColor move.l direction,d0 @@ -66,6 +70,9 @@ MainLoop: move.l ypos2,d1 jsr DrawText8 + move.l ypos3,d1 + jsr DrawText8 + jsr SwitchBuffers cmp.l #SCREEN_WIDTH-1-((endText-text)*FONT_WIDTH),xpos @@ -96,6 +103,8 @@ ypos: dc.l 1 ypos2: dc.l SCREEN_HEIGHT-FONT_HEIGHT-1 +ypos3: + dc.l (SCREEN_HEIGHT-FONT_HEIGHT-1)/2 direction: dc.l 2 @@ -138,11 +147,11 @@ copperListBplPtr: dc.l $fffffffe InstallPalette: - include "out/font-palette.s" + include "out/font8x10-palette.s" rts GreyPalette: - include "out/font-grey.s" + include "out/font8x10-grey.s" rts onscreen: dc.l bitplanes1 diff --git a/assets/font8x10.png b/assets/font8x10.png new file mode 100644 index 0000000000000000000000000000000000000000..690e45ed15e97da171faf61d9f0710c98747eb25 GIT binary patch literal 5935 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