gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit ecc76ddc9d888aac1e72195106b253fd8b0b5d80 parent 67873dc997491b4cbd43e451585e085d9a2e1c2a Author: Toxa <untoxa@mail.ru> Date: Tue, 13 Jul 2021 18:17:14 +0300 split cgb.s Diffstat:
| M | gbdk-lib/examples/gb/linkerfile/Makefile | 2 | +- |
| M | gbdk-lib/libc/gb/Makefile | 5 | +++-- |
| M | gbdk-lib/libc/gb/cgb.s | 95 | +++---------------------------------------------------------------------------- |
| A | gbdk-lib/libc/gb/cgb_compat.s | 20 | ++++++++++++++++++++ |
| A | gbdk-lib/libc/gb/cgb_palettes.s | 78 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
5 files changed, 105 insertions(+), 95 deletions(-)
diff --git a/gbdk-lib/examples/gb/linkerfile/Makefile b/gbdk-lib/examples/gb/linkerfile/Makefile @@ -51,7 +51,7 @@ $(OBJDIR)/%.s: $(SRCDIR)/%.c $(OBJDIR)/linkfile.lk: $(OBJS) rm -f $(OBJDIR)/linkfile.lk - $(foreach O,$(OBJS),echo $O >>$@;) + $(foreach O,$(OBJS),echo $O >>$@) # Link the compiled object files (via linkerfile) into a .gb ROM file $(BINS): $(OBJDIR)/linkfile.lk diff --git a/gbdk-lib/libc/gb/Makefile b/gbdk-lib/libc/gb/Makefile @@ -7,8 +7,9 @@ PORT = gbz80 CSRC = digits.c gprint.c gprintf.c gprintln.c gprintn.c -ASSRC = cgb.s cpy_data.s \ - drawing.s drawing_isr.s color.s \ +ASSRC = cgb.s cgb_palettes.s cgb_compat.s \ + cpy_data.s \ + drawing.s drawing_isr.s color.s \ f_ibm_full.s f_ibm_sh.s f_italic.s f_min.s f_spect.s \ get_bk_t.s get_data.s get_tile.s \ get_wi_t.s get_xy_t.s global.s \ diff --git a/gbdk-lib/libc/gb/cgb.s b/gbdk-lib/libc/gb/cgb.s @@ -1,91 +1,15 @@ - .include "global.s" + .include "global.s" .title "CGB support" .module CGB - ;; BANKED: checked, imperfect - .area _BASE - -_set_sprite_palette:: ; Non-banked - PUSH BC - LD C,#.OCPS - JR .set_palette - -_set_bkg_palette:: ; Non-banked - PUSH BC - LD C,#.BCPS - -.set_palette:: - LDA HL,4(SP) ; Skip return address and registers - LD A,(HL+) ; first_palette - ADD A ; A *= 8 - ADD A - ADD A - OR #0x80 ; Set auto-increment - LDH (C),A - INC C - LD A,(HL+) ; D = nb_palettes - ADD A ; A *= 8 - ADD A - ADD A - LD B,A ; Number of bytes - LD A,(HL+) ; rgb_data - LD H,(HL) - LD L,A -1$: - WAIT_STAT - - LD A,(HL+) - LDH (C),A - DEC B - JR NZ,1$ - - POP BC - RET - - .area _CODE -_set_sprite_palette_entry:: ; Banked - PUSH BC - LD C,#.OCPS - JR .set_palette_entry - -_set_bkg_palette_entry:: ; Banked - PUSH BC - LD C,#.BCPS - -.set_palette_entry:: - LDA HL,.BANKOV+2(SP); Skip return address and registers - LD A,(HL+) ; first_palette - ADD A ; A *= 4 - ADD A - LD B,A - LD A,(HL+) ; pal_entry - ADD B ; A += first_palette * 4 - ADD A ; A *= 2 - OR #0x80 ; Set auto-increment - LDH (C),A - INC C - LD A,(HL+) ; rgb_data - LD H,(HL) - LD L,A - - WAIT_STAT - - LD A,L - LDH (C),A - LD A,H - LDH (C),A - - POP BC - RET - .area _CODE _cpu_slow:: ; Banked LDH A,(.KEY1) AND #0x80 ; Is GBC in double speed mode? RET Z ; No, already in single speed -shift_speed: +.shift_speed: LDH A,(.IE) PUSH AF @@ -110,17 +34,4 @@ _cpu_fast:: ; Banked LDH A,(.KEY1) AND #0x80 ; Is GBC in double speed mode? RET NZ ; Yes, exit - JR shift_speed - - -_cgb_compatibility:: ; Banked - LD HL, #1$ - PUSH HL - LD HL, #0x0100 - PUSH HL - CALL _set_sprite_palette - CALL _set_bkg_palette - ADD SP, #4 - RET -1$: - .DW 0xFF7F, 0x56B5, 0x294A, 0x0000 + JR .shift_speed diff --git a/gbdk-lib/libc/gb/cgb_compat.s b/gbdk-lib/libc/gb/cgb_compat.s @@ -0,0 +1,20 @@ + .include "global.s" + + .title "DMG palettes for CGB" + .module CGB_DMG_COMPAT + + .globl _set_sprite_palette, _set_bkg_palette + + .area _CODE + +_cgb_compatibility:: ; Banked + LD HL, #1$ + PUSH HL + LD HL, #0x0100 + PUSH HL + CALL _set_sprite_palette + CALL _set_bkg_palette + ADD SP, #4 + RET +1$: + .DW 0xFF7F, 0x56B5, 0x294A, 0x0000 diff --git a/gbdk-lib/libc/gb/cgb_palettes.s b/gbdk-lib/libc/gb/cgb_palettes.s @@ -0,0 +1,78 @@ + .include "global.s" + + .title "CGB palette support" + .module CGB_PALETTES + + .area _CODE + +_set_sprite_palette:: ; Non-banked + PUSH BC + LD C,#.OCPS + JR .set_palette + +_set_bkg_palette:: ; Non-banked + PUSH BC + LD C,#.BCPS + +.set_palette:: + LDA HL,4(SP) ; Skip return address and registers + LD A,(HL+) ; first_palette + ADD A ; A *= 8 + ADD A + ADD A + OR #0x80 ; Set auto-increment + LDH (C),A + INC C + LD A,(HL+) ; D = nb_palettes + ADD A ; A *= 8 + ADD A + ADD A + LD B,A ; Number of bytes + LD A,(HL+) ; rgb_data + LD H,(HL) + LD L,A +1$: + WAIT_STAT + + LD A,(HL+) + LDH (C),A + DEC B + JR NZ,1$ + + POP BC + RET + +_set_sprite_palette_entry:: ; Banked + PUSH BC + LD C,#.OCPS + JR .set_palette_entry + +_set_bkg_palette_entry:: ; Banked + PUSH BC + LD C,#.BCPS + +.set_palette_entry:: + LDA HL,.BANKOV+2(SP); Skip return address and registers + LD A,(HL+) ; first_palette + ADD A ; A *= 4 + ADD A + LD B,A + LD A,(HL+) ; pal_entry + ADD B ; A += first_palette * 4 + ADD A ; A *= 2 + OR #0x80 ; Set auto-increment + LDH (C),A + INC C + LD A,(HL+) ; rgb_data + LD H,(HL) + LD L,A + + WAIT_STAT + + LD A,L + LDH (C),A + LD A,H + LDH (C),A + + POP BC + RET
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.