diff options
-rw-r--r-- | Makefile | 20 | ||||
-rw-r--r-- | gfx/text_chars.png | bin | 0 -> 2362 bytes | |||
-rw-r--r-- | gfx/textbox_border.png | bin | 0 -> 150 bytes | |||
-rwxr-xr-x | mgbdis.sh | 6 | ||||
-rw-r--r-- | shim.sym | 30 | ||||
-rw-r--r-- | source/bank_00.asm | 1100 | ||||
-rw-r--r-- | source/bank_02.asm | 61 | ||||
-rw-r--r-- | source/bank_3c.asm | 8 | ||||
-rw-r--r-- | source/bank_69.asm | 4 | ||||
-rw-r--r-- | source/bank_6f.asm | 4 |
10 files changed, 1224 insertions, 9 deletions
@@ -3,7 +3,7 @@ baserom := DMGAKVJ0.1 dir_source := source dir_build := build -dir_assets := assets +dir_gfx := gfx dir_tools := tools RGBASM := rgbasm @@ -12,13 +12,18 @@ RGBLINK := rgblink RGBFIX := rgbfix RGBASMFLAGS := -p 0xff -L -RGBLINKFLAGS := -p 0xff -d -t +RGBLINKFLAGS := -p 0xff -d RGBFIXFLAGS := -p 0xff -c -m 0x1b -r 0x03 -k "01" -i "AKVJ" -t "POKEPICROSS" rwildcard = $(foreach d, $(wildcard $1*), $(filter $(subst *, %, $2), $d) $(call rwildcard, $d/, $2)) -objects := $(patsubst $(dir_source)/%.asm, $(dir_build)/%.o, $(call rwildcard, $(dir_source)/, *.asm)) + +objects := $(patsubst $(dir_source)/%.asm, $(dir_build)/%.o, \ + $(call rwildcard, $(dir_source)/, *.asm)) objects += $(dir_build)/shim.o +gfx := $(patsubst $(dir_gfx)/%.png, $(dir_build)/gfx/%.bin, \ + $(call rwildcard, $(dir_gfx)/, *.png)) + .SECONDEXPANSION: .PHONY: all @@ -33,14 +38,17 @@ $(name).gbc: layout.link $(objects) | $(baserom) $(RGBLINK) $(RGBLINKFLAGS) -O $(baserom) -l $< -n $(@:.gbc=.sym) -m $(@:.gbc=.map) -o $@ $(filter-out $<, $^) $(RGBFIX) $(RGBFIXFLAGS) -v $@ -$(dir_build)/shim.asm: shim.sym +$(dir_build)/shim.asm: shim.sym | $$(dir $$@) $(dir_tools)/makeshim.py $< > $@ -$(dir_build)/%.o: $(dir_build)/%.asm | $$(dir $$@) +$(dir_build)/%.o: $(dir_build)/%.asm | $(gfx) $$(dir $$@) $(RGBASM) $(RGBASMFLAGS) -i $(dir_build)/ -i $(dir_source)/ -M $(@:.o=.d) -o $@ $< -$(dir_build)/%.o: $(dir_source)/%.asm | $$(dir $$@) +$(dir_build)/%.o: $(dir_source)/%.asm | $(gfx) $$(dir $$@) $(RGBASM) $(RGBASMFLAGS) -i $(dir_build)/ -i $(dir_source)/ -M $(@:.o=.d) -o $@ $< +$(dir_build)/gfx/%.bin: $(dir_gfx)/%.png | $$(dir $$@) + $(RGBGFX) -o $@ $< + .PRECIOUS: %/ %/: mkdir -p $@ diff --git a/gfx/text_chars.png b/gfx/text_chars.png Binary files differnew file mode 100644 index 0000000..688e0d5 --- /dev/null +++ b/gfx/text_chars.png diff --git a/gfx/textbox_border.png b/gfx/textbox_border.png Binary files differnew file mode 100644 index 0000000..5393308 --- /dev/null +++ b/gfx/textbox_border.png @@ -1,4 +1,10 @@ #!/bin/sh + +if ! fgrep -qx ';APPEND' picross.sym; then + echo ';APPEND' >> picross.sym + cat shim_mgbdis.sym >> picross.sym +fi + ./mgbdis/mgbdis.py --overwrite \ --disable-auto-ldh \ --ld_c ldh_c \ @@ -1,2 +1,28 @@ -00:c31e w_bank_temp -00:c315 w_bank_rom +00:c31e w_bank_temp ; db +00:c317 w_farcall_target ; dw +00:c315 w_bank_rom ; db + +00:c336 w_c336 +00:c35b w_vwf_char_start_x ; db +00:c35c w_vwf_char_start_y ; db +00:c35d w_vwf_char_end_x ; db +00:c35e w_vwf_char_end_y ; db +00:c35f w_vwf_char_addr ; dw +00:c361 w_vwf_char_bank ; db +00:c362 w_c362 +00:c363 w_c363 +00:c364 w_c364 +00:c365 w_c365 +00:c366 w_c366 +00:c367 w_c367 +00:c368 w_c368 +00:c369 w_c369 +00:c36a w_c36a +00:c36b w_c36b +00:c36c w_c36c +00:c36d w_vwf_char_buffer ; ds ?? +00:cd6d w_cd6d +00:cd6e w_cd6e + +01:d560 w_textbox_width ; db +01:d561 w_textbox_height ; db diff --git a/source/bank_00.asm b/source/bank_00.asm index ac58661..a73c322 100644 --- a/source/bank_00.asm +++ b/source/bank_00.asm @@ -1,7 +1,553 @@ INCLUDE "hardware.inc" -SECTION "vram_copy", ROM0[$0fbd] +SECTION "vwf_draw_char", ROM0[$0723] +vwf_char_draw:: + ld a, [w_vwf_char_start_x] + and $07 + ld c, a + ld b, $00 + ld hl, .pixel_masks_right + add hl, bc + ld a, [hl] + ld [w_c363], a + ld a, [w_vwf_char_end_x] + and $07 + ld c, a + ld b, $00 + ld hl, .pixel_masks_left + add hl, bc + ld a, [hl] + ld [w_c364], a + ld a, [w_vwf_char_start_x] + and $f8 + ld c, a + ld a, [w_vwf_char_end_x] + and $f8 + sub c + srl a + srl a + srl a + ld [w_c365], a + ld a, [w_vwf_char_start_x] + ld c, a + ld a, [w_vwf_char_end_x] + sub c + srl a + srl a + srl a + inc a + ld [w_c366], a + ld a, [w_vwf_char_start_x] + and $07 + ld c, a + add $38 + ld [w_c368], a + ld b, $00 + ld hl, .pixel_masks_right + add hl, bc + ld a, [hl] + ld [w_c369], a + ld hl, .Data_000_0a2c + add hl, bc + ld a, [hl] + ld [w_c36a], a + ld a, [w_vwf_char_addr + 0] + ld c, a + ld a, [w_vwf_char_addr + 1] + ld b, a + ld a, [w_bank_rom] + push af + ld a, [w_vwf_char_bank] + ld [w_bank_rom], a + ld [rROMB0], a + + ld de, w_vwf_char_buffer + ld a, [w_vwf_char_start_y] + ld l, a + ld a, [w_vwf_char_start_x] + and $f8 + ld h, a + +.Jump_000_07a9 + xor a + ld [w_c36b], a + ld [w_c36c], a + ld a, [w_c366] + ld [w_c367], a + ld a, [w_c363] + ld [w_c362], a + push bc + push hl + ld a, [w_c365] + and a + jr nz, .jr_000_07d3 + + push hl + ld a, [w_c364] + ld hl, w_c363 + and [hl] + ld [w_c362], a + pop hl + jp .Jump_000_0911 + +.jr_000_07d3 + push hl + ld a, [w_bank_rom] + push af + ld a, $23 + ld [w_bank_rom], a + ld [rROMB0], a + push bc + push de + ld b, h + ld c, l + ld a, l + and $f8 + srl a + srl a + ld e, a + ld d, $00 + ld a, [w_cd6d] + ld l, a + ld a, [w_cd6e] + ld h, a + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, b + and $f8 + srl a + srl a + ld e, a + ld d, $00 + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, c + and $07 + sla a + add l + ld l, a + pop de + pop bc + ld a, l + ld [de], a + inc de + ld a, h + ld [de], a + inc de + pop af + ld [w_bank_rom], a + ld [rROMB0], a + ld a, [w_c362] + ld [de], a + inc de + ld a, [bc] + ld l, a + ld a, [w_c368] + ld h, a + ld a, [hl] + ld [de], a + ld hl, w_c36a + and [hl] + ld [w_c36b], a + inc bc + inc de + ld a, [bc] + ld l, a + ld a, [w_c368] + ld h, a + ld a, [hl] + ld [de], a + ld hl, w_c36a + and [hl] + ld [w_c36c], a + ld a, c + add $0f + ld c, a + ld a, b + adc $00 + ld b, a + inc de + pop hl + ld a, h + add $08 + ld h, a + ld a, [w_c367] + dec a + ld [w_c367], a + ld a, [w_c365] + dec a + jp z, .Jump_000_090b +.Jump_000_085f + push af + push hl + ld a, [w_bank_rom] + push af + ld a, $23 + ld [w_bank_rom], a + ld [rROMB0], a + push bc + push de + ld b, h + ld c, l + ld a, l + and $f8 + srl a + srl a + ld e, a + ld d, $00 + ld a, [w_cd6d] + ld l, a + ld a, [w_cd6e] + ld h, a + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, b + and $f8 + srl a + srl a + ld e, a + ld d, $00 + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, c + and $07 + sla a + add l + ld l, a + pop de + pop bc + ld a, l + ld [de], a + inc de + ld a, h + ld [de], a + inc de + pop af + ld [w_bank_rom], a + ld [rROMB0], a + ld a, $ff + ld [de], a + inc de + ld a, [w_c367] + and a + jr z, .jr_000_08b7 + + ld a, [bc] + inc bc + +.jr_000_08b7 + ld l, a + ld a, [w_c368] + ld h, a + ld a, [hl] + push af + ld hl, w_c369 + and [hl] + ld hl, w_c36b + or [hl] + ld [de], a + pop af + ld hl, w_c36a + and [hl] + ld [w_c36b], a + inc de + ld a, [w_c367] + and a + jr z, .jr_000_08e1 + + ld a, [bc] + push af + ld a, c + add $0f + ld c, a + ld a, b + adc $00 + ld b, a + pop af + +.jr_000_08e1 + ld l, a + ld a, [w_c368] + ld h, a + ld a, [hl] + push af + ld hl, w_c369 + and [hl] + ld hl, w_c36c + or [hl] + ld [de], a + pop af + ld hl, w_c36a + and [hl] + ld [w_c36c], a + inc de + pop hl + ld a, h + add $08 + ld h, a + ld a, [w_c367] + dec a + ld [w_c367], a + pop af + dec a + jp nz, .Jump_000_085f + +.Jump_000_090b + ld a, [w_c364] + ld [w_c362], a + +.Jump_000_0911 + ld a, [w_bank_rom] + push af + ld a, $23 + ld [w_bank_rom], a + ld [rROMB0], a + push bc + push de + ld b, h + ld c, l + ld a, l + and $f8 + srl a + srl a + ld e, a + ld d, $00 + ld a, [w_cd6d] + ld l, a + ld a, [w_cd6e] + ld h, a + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, b + and $f8 + srl a + srl a + ld e, a + ld d, $00 + add hl, de + ld a, [hl+] + ld h, [hl] + ld l, a + ld a, c + and $07 + sla a + add l + ld l, a + pop de + pop bc + ld a, l + ld [de], a + inc de + ld a, h + ld [de], a + inc de + pop af + ld [w_bank_rom], a + ld [rROMB0], a + ld a, [w_c362] + ld [de], a + inc de + ld a, [w_c367] + and a + jr z, .jr_000_0968 + + ld a, [bc] + inc bc + +.jr_000_0968 + ld l, a + ld a, [w_c368] + ld h, a + ld a, [hl] + push af + ld hl, w_c369 + and [hl] + ld hl, w_c36b + or [hl] + ld [de], a + pop af + ld hl, w_c36a + and [hl] + ld [w_c36b], a + inc de + ld a, [w_c367] + and a + jr z, .jr_000_0992 + + ld a, [bc] + push af + ld a, c + add $0f + ld c, a + ld a, b + adc $00 + ld b, a + pop af + +.jr_000_0992 + ld l, a + ld a, [w_c368] + ld h, a + ld a, [hl] + push af + ld hl, w_c369 + and [hl] + ld hl, w_c36c + or [hl] + ld [de], a + pop af + ld hl, w_c36a + and [hl] + ld [w_c36c], a + inc de + pop hl + pop bc + inc bc + inc bc + ld a, c + and $0f + jr nz, .jr_000_09bc + + ld a, c + add $f0 + ld c, a + ld a, b + adc $00 + ld b, a + +.jr_000_09bc + inc l + ld a, [w_vwf_char_end_y] + cp l + jp nc, .Jump_000_07a9 + + xor a + ld [de], a + inc de + ld [de], a + + ; Write tiles stored in the buffer + ld bc, w_vwf_char_buffer + + ; Ignore hblank (update during vblank?) + ld a, [w_c336] + bit 7, a + jr z, .write_tile_ignore_hblank_loop + +.write_tile_loop + ; Get location to write to + ld a, [bc] + ld l, a + inc bc + ld a, [bc] + ld h, a + or l + jr z, .write_tile_done + + ; Get mask in e, and pixels in d + inc bc + ld a, [bc] + ld e, a + inc bc + ld a, [bc] + ld d, a + inc bc + +.hblank_finish + ldh a, [rSTAT] + and STATF_LCD + jr z, .hblank_finish + +.hblank_enter + ldh a, [rSTAT] + and STATF_LCD + jr nz, .hblank_enter + + ; Write pixels high bit, preserving background + ld a, d + xor [hl] + and e + xor [hl] + ld [hl+], a + ld a, [bc] + ld d, a + inc bc + +.hblank_next + ldh a, [rSTAT] + and STATF_LCD + jr nz, .hblank_next + + ; Write 8 pixels low bit, preserving background + ld a, d + xor [hl] + and e + xor [hl] + ld [hl], a + jr .write_tile_loop + +.write_tile_done + pop af + ld [w_bank_rom], a + ld [rROMB0], a + ret + +.write_tile_ignore_hblank_loop + ; Get location to write to + ld a, [bc] + ld l, a + inc bc + ld a, [bc] + ld h, a + or l + jr z, .write_tile_done + + ; Get mask in e, and pixels in d + inc bc + ld a, [bc] + ld e, a + inc bc + ld a, [bc] + inc bc + + ; Write pixels high bit, preserving background + xor [hl] + and e + xor [hl] + ld [hl+], a + ld a, [bc] + inc bc + + ; Write 8 pixels low bit, preserving background + xor [hl] + and e + xor [hl] + ld [hl], a + jr .write_tile_ignore_hblank_loop + +.pixel_masks_right: + db $ff, $7f, $3f, $1f, $0f, $07, $03, $01 + +.Data_000_0a2c: + db $00 + +.pixel_masks_left: + db $80, $c0, $e0, $f0, $f8, $fc, $fe, $ff + + db $00, $00, $68, $01, $d0, $02, $38, $04, $a0, $05, $08, $07, $70, $08, $d8, $09, $40, $0b, $a8, $0c, $fa, $57, $c3, $a7, $c8, $f0, $00, $f6, $30, $e0, $00, $f0, $4d, $3e, $01, $e0, $4d, $10, $6f + +SECTION "vram_copy", ROM0[$0fbd] ; Parameters: ; a - bank ; hl - source @@ -54,3 +600,555 @@ vram_copy:: ld [w_bank_rom], a ld [rROMB0], a ret + +SECTION "farcall", ROM0[$10cd] +; Save current bank and jump to w_farcall_target in w_bank_temp +farcall:: + push af + push af + push af + push hl + ld hl, sp + 4 + ld a, [w_farcall_target + 0] + ld [hl+], a + ld a, [w_farcall_target + 1] + ld [hl+], a + ld a, [w_bank_rom] + ld [hl], a + ld a, [w_bank_temp] + ld [w_bank_rom], a + ld [rROMB0], a + pop hl + pop af + ret + +; Return to bank and address in stack +farcall_ret:: + push af + push hl + ld hl, sp + 4 + ld a, [hl] + ld [w_bank_rom], a + ld [rROMB0], a + pop hl + pop af + inc sp + inc sp + ret + +SECTION "text_chars_offsets", ROM0[$286f] +text_chars_widths:: + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 4 + db 7 + db 7 + db 6 + db 6 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 8 + db 7 + db 6 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 6 + db 6 + db 6 + db 6 + db 7 + db 6 + db 7 + db 6 + db 7 + db 5 + db 5 + db 5 + db 4 + db 9 + db 8 + db 7 + db 8 + db 8 + db 9 + db 7 + db 9 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 8 + db 9 + db 9 + db 9 + db 8 + db 9 + db 9 + db 9 + db 9 + db 8 + db 10 + db 5 + db 5 + db 4 + db 4 + db 5 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 5 + db 7 + db 7 + db 6 + db 7 + db 6 + db 7 + db 7 + db 7 + db 8 + db 7 + db 7 + db 6 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 6 + db 7 + db 6 + db 7 + db 7 + db 7 + db 7 + db 5 + db 5 + db 5 + db 4 + db 9 + db 8 + db 9 + db 9 + db 9 + db 8 + db 8 + db 9 + db 9 + db 9 + db 9 + db 8 + db 8 + db 9 + db 6 + db 8 + db 8 + db 9 + db 8 + db 8 + db 9 + db 7 + db 8 + db 8 + db 8 + db 5 + db 4 + db 5 + db 5 + db 5 + db 6 + db 4 + db 6 + db 6 + db 6 + db 6 + db 6 + db 6 + db 6 + db 6 + db 5 + db 7 + db 6 + db 7 + db 6 + db 6 + db 6 + db 7 + db 6 + db 3 + db 7 + db 6 + db 6 + db 7 + db 7 + db 7 + db 6 + db 7 + db 6 + db 6 + db 7 + db 7 + db 7 + db 7 + db 7 + db 7 + db 6 + db 6 + db 5 + db 5 + db 5 + db 5 + db 6 + db 6 + db 5 + db 1 + db 5 + db 5 + db 2 + db 7 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 5 + db 7 + db 6 + db 6 + db 5 + db 0 + db 4 + db 4 + db 5 + db 5 + db 8 + db 5 + db 5 + db 4 + db 5 + db 5 + db 2 + db 2 + db 2 + db 4 + db 3 + db 3 + db 7 + db 8 + db 5 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + db 0 + +text_chars_offsets:: + dw $0000 + dw $0020 + dw $0040 + dw $0060 + dw $0080 + dw $00a0 + dw $00c0 + dw $00e0 + dw $0104 + dw $0124 + dw $0144 + dw $0164 + dw $0184 + dw $01a4 + dw $01c4 + dw $01e4 + dw $0208 + dw $0228 + dw $0248 + dw $0268 + dw $0288 + dw $02a8 + dw $02c8 + dw $02e8 + dw $030c + dw $032c + dw $034c + dw $036c + dw $038c + dw $03ac + dw $03cc + dw $03ec + dw $0500 + dw $0520 + dw $0540 + dw $0560 + dw $0580 + dw $05a0 + dw $05c0 + dw $05e0 + dw $0604 + dw $0624 + dw $0644 + dw $0664 + dw $0684 + dw $06a4 + dw $06c4 + dw $06e4 + dw $0708 + dw $0728 + dw $0748 + dw $0768 + dw $0788 + dw $07a8 + dw $07c8 + dw $07e8 + dw $080c + dw $082c + dw $084c + dw $086c + dw $088c + dw $08ac + dw $08cc + dw $08ec + dw $0a00 + dw $0a20 + dw $0a40 + dw $0a60 + dw $0a80 + dw $0aa0 + dw $0ac0 + dw $0ae0 + dw $0b04 + dw $0b24 + dw $0b44 + dw $0b64 + dw $0b84 + dw $0ba4 + dw $0bc4 + dw $0be4 + dw $0c08 + dw $0c28 + dw $0c48 + dw $0c68 + dw $0c88 + dw $0ca8 + dw $0cc8 + dw $0ce8 + dw $0d0c + dw $0d2c + dw $0d4c + dw $0d6c + dw $0d8c + dw $0dac + dw $0dcc + dw $0dec + dw $0f00 + dw $0f20 + dw $0f40 + dw $0f60 + dw $0f80 + dw $0fa0 + dw $0fc0 + dw $0fe0 + dw $1004 + dw $1024 + dw $1044 + dw $1064 + dw $1084 + dw $10a4 + dw $10c4 + dw $10e4 + dw $1108 + dw $1128 + dw $1148 + dw $1168 + dw $1188 + dw $11a8 + dw $11c8 + dw $11e8 + dw $120c + dw $122c + dw $124c + dw $126c + dw $128c + dw $12ac + dw $12cc + dw $12ec + dw $1400 + dw $1420 + dw $1440 + dw $1460 + dw $1480 + dw $14a0 + dw $14c0 + dw $14e0 + dw $1504 + dw $1524 + dw $1544 + dw $1564 + dw $1584 + dw $15a4 + dw $15c4 + dw $15e4 + dw $1608 + dw $1628 + dw $1648 + dw $1668 + dw $1688 + dw $16a8 + dw $16c8 + dw $16e8 + dw $170c + dw $172c + dw $174c + dw $176c + dw $178c + dw $17ac + dw $17cc + dw $17ec + dw $1900 + dw $1920 + dw $1940 + dw $1960 + dw $1980 + dw $19a0 + dw $19c0 + dw $19e0 + dw $1a04 + dw $1a24 + dw $1a44 + dw $1a64 + dw $1a84 + dw $1aa4 + dw $1ac4 + dw $1ae4 + dw $1b08 + dw $1b28 + dw $1b48 + dw $1b68 + dw $1b88 + dw $1ba8 + dw $1bc8 + dw $1be8 + dw $1c0c + dw $1c2c + dw $1c4c + dw $1c6c + dw $1c8c + dw $1cac + dw $1ccc + dw $1cec + dw $1e00 + dw $1e20 + dw $1e40 + dw $1e60 + dw $1e80 + dw $1ea0 + dw $1ec0 + dw $1ee0 + dw $1f04 + dw $1f24 + dw $1f44 + dw $1f64 + dw $1f84 + dw $1fa4 + dw $1fc4 + dw $1fe4 + dw $2008 + dw $2028 + dw $2048 + dw $2068 + dw $2088 + dw $20a8 + dw $20c8 + dw $20e8 + dw $210c + dw $212c + dw $214c + dw $216c + dw $218c + dw $21ac + dw $21cc + dw $21ec + dw $2300 + dw $2320 + dw $2340 + dw $2360 + dw $2380 + dw $23a0 + dw $23c0 + dw $23e0 + dw $2404 + dw $2424 + dw $2444 + dw $2464 + dw $2484 + dw $24a4 + dw $24c4 + dw $24e4 + dw $2508 + dw $2528 + dw $2548 + dw $2568 + dw $2588 + dw $25a8 + dw $25c8 + dw $25e8 + dw $260c + dw $262c + dw $264c + dw $266c + dw $268c + dw $26ac + dw $26cc + dw $26ec diff --git a/source/bank_02.asm b/source/bank_02.asm new file mode 100644 index 0000000..1300a2e --- /dev/null +++ b/source/bank_02.asm @@ -0,0 +1,61 @@ +SECTION "print_char", ROMX[$4c80], BANK[$02] +; Parameters: +; de - character to print +; b - x position +; c - y position +text_char_draw:: + push de + + ; Get char address + sla e + rl d + ld hl, text_chars_offsets + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + ld hl, gfx_text_chars + add hl, de + ld a, l + ld [w_vwf_char_addr + 0], a + ld a, h + ld [w_vwf_char_addr + 1], a + ld a, BANK(gfx_text_chars) + ld [w_vwf_char_bank], a + + ld a, b + ld [w_vwf_char_start_x], a + + ; Get character width + pop de + ld hl, text_chars_widths + add hl, de + ld a, [hl] + and a + jp z, farcall_ret + + ; Check we aren't drawing outside the textbox + push af + add b + ld hl, w_textbox_width + cp [hl] + jr c, .inside_width + pop af + jp farcall_ret +.inside_width + ld [w_vwf_char_end_x], a + + ld a, c + ld [w_vwf_char_start_y], a + add 9 + ld hl, w_textbox_height + cp [hl] + jr c, .inside_height + pop af + jp farcall_ret +.inside_height + ld [w_vwf_char_end_y], a + + call vwf_char_draw + pop af + jp farcall_ret diff --git a/source/bank_3c.asm b/source/bank_3c.asm new file mode 100644 index 0000000..f113abf --- /dev/null +++ b/source/bank_3c.asm @@ -0,0 +1,8 @@ +SECTION "textbox_border_load", ROMX[$4d16], BANK[$3c] +textbox_border_load: + ld a, BANK(gfx_textbox_border) + ld hl, gfx_textbox_border + ld de, $8900 + ld bc, gfx_textbox_border.end - gfx_textbox_border + call vram_copy + jp farcall_ret diff --git a/source/bank_69.asm b/source/bank_69.asm new file mode 100644 index 0000000..ccd64a6 --- /dev/null +++ b/source/bank_69.asm @@ -0,0 +1,4 @@ +SECTION "gfx_textbox_border", ROMX[$6000], BANK[$69] +gfx_textbox_border:: +INCBIN "gfx/textbox_border.bin" +.end:: diff --git a/source/bank_6f.asm b/source/bank_6f.asm new file mode 100644 index 0000000..d72f8d7 --- /dev/null +++ b/source/bank_6f.asm @@ -0,0 +1,4 @@ +SECTION "gfx_text_chars", ROMX[$4000], BANK[$6f] +gfx_text_chars:: +INCBIN "gfx/text_chars.bin" +.end:: |