gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit c6c4a659577ec779bdfb94d43e859d4828113f8a parent 38394d4e5073d7e6e6968531bd766a456beebdd0 Author: toxa <untoxa@mail.ru> Date: Wed, 28 Oct 2020 15:21:02 +0300 useful macro definitions, code review Diffstat:
| M | gbdk-lib/libc/gb/cgb.s | 13 | +++++-------- |
| M | gbdk-lib/libc/gb/cpy_data.s | 4 | +--- |
| M | gbdk-lib/libc/gb/drawing.s | 60 | ++++++++++++++++++++++-------------------------------------- |
| M | gbdk-lib/libc/gb/font.s | 35 | +++++++---------------------------- |
| M | gbdk-lib/libc/gb/get_data.s | 4 | +--- |
| M | gbdk-lib/libc/gb/get_xy_t.s | 4 | +--- |
| M | gbdk-lib/libc/gb/global.s | 30 | +++++++++++++++++++++++++++--- |
| M | gbdk-lib/libc/gb/init_tt.s | 4 | +--- |
8 files changed, 65 insertions(+), 89 deletions(-)
diff --git a/gbdk-lib/libc/gb/cgb.s b/gbdk-lib/libc/gb/cgb.s @@ -32,10 +32,8 @@ _set_bkg_palette:: ; Non-banked LD A,(HL+) ; rgb_data LD H,(HL) LD L,A -1$: - LDH A,(.STAT) - AND #0x02 - JR NZ,1$ +1$: + WAIT_STAT LD A,(HL+) LDH (C),A @@ -70,10 +68,9 @@ _set_bkg_palette_entry:: ; Banked LD A,(HL+) ; rgb_data LD H,(HL) LD L,A -1$: - LDH A,(.STAT) - AND #0x02 - JR NZ,1$ + + WAIT_STAT + LD A,L LDH (C),A LD A,H diff --git a/gbdk-lib/libc/gb/cpy_data.s b/gbdk-lib/libc/gb/cpy_data.s @@ -5,9 +5,7 @@ ;; Copy part (size = DE) of the VRAM from (BC) to (HL) .copy_vram:: 1$: - LDH A,(.STAT) - AND #0x02 - JR NZ,1$ + WAIT_STAT LD A,(BC) LD (HL+),A diff --git a/gbdk-lib/libc/gb/drawing.s b/gbdk-lib/libc/gb/drawing.s @@ -163,10 +163,7 @@ ;; Is the STAT check required, as we are already in the HBL? .lcd:: -1$: - LDH A,(.STAT) - BIT 1,A - JR NZ,1$ + WAIT_STAT LDH A,(.LCDC) AND #0b11101111 ; Set BG Chr to 0x8800 @@ -1314,9 +1311,7 @@ nchgy$: JR NZ,3$ LD E,#0x00 3$: - LDH A,(.STAT) - BIT 1,A - JR NZ,3$ + WAIT_STAT LD A,(HL) AND C @@ -1352,9 +1347,7 @@ nchgy$: JR NZ,12$ LD C,#0x00 12$: - LDH A,(.STAT) - BIT 1,A - JR NZ,12$ + WAIT_STAT LD A,(HL) OR B @@ -1384,9 +1377,7 @@ nchgy$: JR NZ,22$ LD C,#0x00 22$: - LDH A,(.STAT) - BIT 1,A - JR NZ,22$ + WAIT_STAT LD A,(HL) XOR B @@ -1416,9 +1407,7 @@ nchgy$: JR Z,32$ LD C,#0xFF 32$: - LDH A,(.STAT) - BIT 1,A - JR NZ,32$ + WAIT_STAT LD A,(HL) AND B @@ -1455,10 +1444,7 @@ nchgy$: LD A,(BC) LD C,A -gp$: - LDH A,(.STAT) - BIT 1,A - JR NZ,gp$ + WAIT_STAT LD A,(HL+) LD D,A @@ -1467,13 +1453,13 @@ gp$: LD B,#0 LD A,D AND C - JR Z,npix$ + JR Z,1$ SET 0,B -npix$: LD A,E +1$: LD A,E AND C - JR Z,end$ + JR Z,2$ SET 1,B -end$: LD E,B +2$: LD E,B RET ;; Write character C @@ -1532,7 +1518,7 @@ end$: LD E,B LD A,(.fg_colour) LD C,A .endif -chrloop$: +1$: LD A,(DE) INC DE PUSH DE @@ -1550,42 +1536,40 @@ chrloop$: .else BIT 0,L .endif - JR Z,a0$ + JR Z,2$ CPL -a0$: OR B +2$: OR B .if 0 BIT 2,C .else BIT 0,C .endif - JR NZ,a1$ + JR NZ,3$ XOR B -a1$: LD D,A +3$: LD D,A XOR A .if 0 BIT 1,C .else BIT 1,L .endif - JR Z,b0$ + JR Z,4$ CPL -b0$: OR B +4$: OR B .if 0 BIT 3,C .else BIT 1,C .endif - JR NZ,b1$ + JR NZ,5$ XOR B -b1$: +5$: LD E,A .if 1 POP HL .endif -chrwait$: - LDH A,(.STAT) - BIT 1,A - JR NZ,chrwait$ + + WAIT_STAT LD A,D LD (HL+),A @@ -1594,7 +1578,7 @@ chrwait$: POP DE LD A,L AND #0x0F - JR NZ,chrloop$ + JR NZ,1$ RET .area _CODE diff --git a/gbdk-lib/libc/gb/font.s b/gbdk-lib/libc/gb/font.s @@ -84,18 +84,11 @@ font_copy_uncompressed:: jr nz,1$ dec d 1$: - ldh a,(.STAT) - bit 1,a - jr nz,#.-4 + WAIT_STAT ld a,(bc) ld (hl+),a inc bc - - ldh a,(.STAT) - bit 1,a - jr nz,#.-4 - ld a,(bc) ld (hl),a inc bc @@ -168,19 +161,13 @@ font_copy_compressed_grey1: xor c ld c,a font_copy_compressed_grey2: - ldh a,(.STAT) - bit 1,a - jr nz,#.-4 + WAIT_STAT ld (hl),b inc hl - - ldh a,(.STAT) - bit 1,a - jr nz,#.-4 - ld (hl),c inc hl + ld a,h ; Take care of the 97FFF -> 8800 wrap around cp #0x98 jr nz,1$ @@ -420,9 +407,7 @@ set_char_no_encoding: LD BC,#0x9800 ADD HL,BC - ldh a,(.STAT) - bit 1,a - jr nz,#.-4 + WAIT_STAT LD (HL),E POP HL @@ -508,9 +493,7 @@ _cls:: 1$: LD D,#0x20 ; D = width 2$: - ldh a,(.STAT) - bit 1,a - jr nz,#.-4 + WAIT_STAT LD (HL),#.SPACE ; Always clear INC HL @@ -636,9 +619,7 @@ _posy:: ; Banked 1$: LD D,#0x20 ; D = width 2$: - LDH A,(.STAT) - AND #0x02 - JR NZ,2$ + WAIT_STAT LD A,(BC) LD (HL+),A @@ -650,9 +631,7 @@ _posy:: ; Banked LD D,#0x20 3$: - LDH A,(.STAT) - AND #0x02 - JR NZ,3$ + WAIT_STAT LD A,#.SPACE LD (HL+),A diff --git a/gbdk-lib/libc/gb/get_data.s b/gbdk-lib/libc/gb/get_data.s @@ -60,9 +60,7 @@ _get_win_data:: JR Z,4$ RES 4,H ; Switch to 0x8800 4$: - LDH A,(.STAT) - AND #0x02 - JR NZ,4$ + WAIT_STAT LD A,(HL+) LD (BC),A diff --git a/gbdk-lib/libc/gb/get_xy_t.s b/gbdk-lib/libc/gb/get_xy_t.s @@ -50,9 +50,7 @@ PUSH HL ; Store origin PUSH DE ; Store WH 3$: - LDH A,(.STAT) - AND #0x02 - JR NZ,3$ + WAIT_STAT LD A,(HL+) ; Copy W tiles LD (BC),A diff --git a/gbdk-lib/libc/gb/global.s b/gbdk-lib/libc/gb/global.s @@ -154,7 +154,31 @@ ;; Macro definitions .macro WAIT_STAT ?lbl -lbl: ldh a, (.STAT) - and #2 ; Check if in LCD modes 0 or 1 - jr nz, lbl +lbl: LDH A, (.STAT) + AND #0x02 ; Check if in LCD modes 0 or 1 + JR NZ, lbl +.endm + +.macro ADD_A_REG16 regH regL + ADD A, regL + LD regL, A + ADC A, regH + SUB regL + LD regH, A +.endm + +.macro SIGNED_ADD_A_REG16 regH regL ?lbl + ; If A is negative, we need to subtract 1 from upper byte of 16-bit value + BIT 7, A ; set z if a signed bit is 0 + JR Z, lbl ; if z is set jump to positive + dec regH ; if negative decrement upper byte +lbl: + ADD_A_REG16 regH, regL +.endm + +.macro SIGNED_SUB_A_REG16 regH regL ?lbl + ; negate A then add to 16-bit value + CPL + INC A + SIGNED_ADD_A_REG16 regH, regL .endm diff --git a/gbdk-lib/libc/gb/init_tt.s b/gbdk-lib/libc/gb/init_tt.s @@ -6,9 +6,7 @@ ;; Initialize part (size = DE) of the VRAM at (HL) with B .init_vram:: 1$: - LDH A,(.STAT) - AND #0x02 - JR NZ,1$ + WAIT_STAT LD A, B LD (HL+),A
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.