diff --git a/024.simple_text/Makefile b/024.simple_text/Makefile index 59a9d64..3bb9d4f 100644 --- a/024.simple_text/Makefile +++ b/024.simple_text/Makefile @@ -18,7 +18,9 @@ include ../shared/base.mk out/%.bin: ../assets/%.png - $(IMAGECON) --input $< $(IMAGECON_ARGS) --output-bitplanes --output-grey-palette-asm --output-palette-asm --output-palette --output out/$* --colors=16 --use-palette palette.pal --full-color-palette-file --output-mask --transparent-color=0,0,0 + $(IMAGECON) --input $< $(IMAGECON_ARGS) --output-bitplanes --output-grey-palette-asm --output-palette-asm --output-palette --output out/$* --colors=16 --use-palette palette.pal --full-color-palette-file --output-mask --transparent-color=0,0,0 --output-png +out/blittext.o: constants.i +out/blit.o: constants.i out/main.o: $(IMAGEDATA) constants.i Makefile link.script.x palette.pal out/init.o: constants.i Makefile \ No newline at end of file diff --git a/024.simple_text/blittext.s b/024.simple_text/blittext.s index b7134c1..0ca0d4f 100644 --- a/024.simple_text/blittext.s +++ b/024.simple_text/blittext.s @@ -1,8 +1,6 @@ include "includes.i" xdef DrawText8 - ;; This will only work for 8 pixel wide fonts - BLIT_LF_MINTERM equ $ca ; cookie cut BLIT_WIDTH_WORDS equ 2 ; blit 2 words to allow shifting BLIT_WIDTH_BYTES equ 4 @@ -12,7 +10,7 @@ DrawText8: ;; a1 - text ;; d0 - xpos ;; d1 - ypos - movem.l d0-d5/a0-a2,-(sp) + movem.l d0-d5/a0-a3,-(sp) jsr WaitBlitter ;; blitter config that is shared for every character move.w #SCREEN_WIDTH_BYTES-BLIT_WIDTH_BYTES,BLTAMOD(a6) ; A modulo @@ -20,17 +18,17 @@ DrawText8: 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 - move.l a1,a5 + move.l a1,a3 .loop: clr.l d2 - move.b (a5)+,d2 ; get next character + move.b (a3)+,d2 ; get next character cmp.b #0,d2 ; 0 terminates the string beq .done bsr DrawChar8 ; draw it add.w #FONT_WIDTH,d0 ; increment the x position bra .loop .done: - movem.l (sp)+,d0-d5/a0-a2 + movem.l (sp)+,d0-d5/a0-a3 rts DrawChar8: @@ -50,9 +48,11 @@ DrawChar8: add.w #1,d5 ; while we have a weird font image, '!' starts on second line lea font(pc),a1 - lea fontMask,a2 mulu.w #SCREEN_WIDTH_BYTES*SCREEN_BIT_DEPTH*FONT_HEIGHT,d5 - add.w d5,a2 + if MASKED_FONT==1 + lea fontMask,a2 + add.w d5,a2 + endif add.w d5,a1 btst #0,d2 ; blitter does words only, so we need to know if its an odd or even character @@ -64,14 +64,13 @@ DrawChar8: moveq #0,d3 .c1 - add.w d2,a1 - add.w d2,a2 - bsr BlitChar8 - movem.l (sp)+,a0 - rts - -BlitChar8: - ;; kills a0,d2,d4 + add.w d2,a1 ; add offset into font + if MASKED_FONT==1 + add.w d2,a2 ; add offset into mask + endif + +.blitChar8: + ;; kills a0,d2,d4 ;; d0 - xpos ;; d1 - ypos bytes ;; d3 - odd character = 1, even character = 0 @@ -79,9 +78,9 @@ BlitChar8: ;; a1 - object ;; a2 - mask - move.l d0,d4 ; d4 = XPOS + move.l d0,d4 move.l d0,d2 - lsr.w #3,d4 ; d4 = XPOS_BYTES + lsr.w #3,d4 ; d4 = XPOS_BYTES jsr WaitBlitter @@ -89,35 +88,41 @@ BlitChar8: beq .evenChar .oddChar sub.w #8,d2 - move.w #$00FF,BLTAFWM(a6) ; no mask for first word - move.w #$0000,BLTALWM(a6) ; mask out last word + move.w #$00FF,BLTAFWM(a6) ; select the second (odd) character in the word + move.w #$0000,BLTALWM(a6) ; subq #1,a0 bra .continue .evenChar: - move.w #$ff00,BLTAFWM(a6) ; no mask for first word - move.w #$0000,BLTALWM(a6) ; mask out last word + move.w #$FF00,BLTAFWM(a6) ; select the first character in the word + move.w #$0000,BLTALWM(a6) .continue: ;; this shift will give us the bits to shift (bits 0-3) in bits (12-15) of d2 - - lsl.w #8,d2 ; BLIT_SOURCE_SHIFT< out/bootblock.txt