diff options
Diffstat (limited to 'home/gfx.asm')
-rw-r--r-- | home/gfx.asm | 92 |
1 files changed, 70 insertions, 22 deletions
diff --git a/home/gfx.asm b/home/gfx.asm index 0067c85f..14a46844 100644 --- a/home/gfx.asm +++ b/home/gfx.asm @@ -58,56 +58,71 @@ DecompressRequest2bpp:: call CloseSRAM ret -FarCopyBytes:: ; dcd (0:0dcd) +FarCopyBytes:: +; copy bc bytes from a:hl to de + ld [wBuffer], a ldh a, [hROMBank] push af ld a, [wBuffer] rst Bankswitch + call CopyBytes + pop af rst Bankswitch ret -FarCopyBytesDouble:: ; ddd (0:0ddd) + +FarCopyBytesDouble: +; Copy bc bytes from a:hl to bc*2 bytes at de, +; doubling each byte in the process. + ld [wBuffer], a ldh a, [hROMBank] push af ld a, [wBuffer] rst Bankswitch + +; switcheroo, de <> hl ld a, h ld h, d ld d, a ld a, l ld l, e ld e, a + inc b inc c - jr .enter_loop + jr .dec -.copy +.loop ld a, [de] inc de ld [hli], a ld [hli], a -.enter_loop +.dec dec c - jr nz, .copy + jr nz, .loop dec b - jr nz, .copy + jr nz, .loop + pop af rst Bankswitch ret -Request2bpp:: ; dfe (0:0dfe) +Request2bpp:: +; Load 2bpp at b:de to occupy c tiles of hl. ldh a, [hBGMapMode] push af xor a ldh [hBGMapMode], a + ldh a, [hROMBank] push af ld a, b rst Bankswitch + ld a, e ld [wRequested2bppSource], a ld a, d @@ -118,34 +133,41 @@ Request2bpp:: ; dfe (0:0dfe) ld [wRequested2bppDest + 1], a .check ld a, c - cp $8 ; TilesPerCycle + cp 8 ; TilesPerCycle jr nc, .cycle + ld [wRequested2bpp], a call DelayFrame + pop af rst Bankswitch + pop af ldh [hBGMapMode], a ret .cycle - ld a, $8 ; TilesPerCycle + ld a, 8 ; TilesPerCycle ld [wRequested2bpp], a + call DelayFrame ld a, c - sub $8 ; TilesPerCycle + sub 8 ; TilesPerCycle ld c, a jr .check -Request1bpp:: ; e38 (0:0e38) +Request1bpp:: +; Load 1bpp at b:de to occupy c tiles of hl. ldh a, [hBGMapMode] push af xor a ldh [hBGMapMode], a + ldh a, [hROMBank] push af ld a, b rst Bankswitch + ld a, e ld [wRequested1bppSource], a ld a, d @@ -156,35 +178,46 @@ Request1bpp:: ; e38 (0:0e38) ld [wRequested1bppDest + 1], a .check ld a, c - cp $8 ; TilesPerCycle + cp 8 ; TilesPerCycle jr nc, .cycle + ld [wRequested1bpp], a call DelayFrame + pop af rst Bankswitch + pop af ldh [hBGMapMode], a ret .cycle - ld a, $8 ; TilesPerCycle + ld a, 8 ; TilesPerCycle ld [wRequested1bpp], a + call DelayFrame ld a, c - sub $8 ; TilesPerCycle + sub 8 ; TilesPerCycle ld c, a jr .check Get2bpp:: ldh a, [rLCDC] - bit 7, a + bit rLCDC_ENABLE, a jp nz, Request2bpp -Copy2bpp:: + +Copy2bpp: +; copy c 2bpp tiles from b:de to hl + push hl ld h, d ld l, e pop de + +; bank ld a, b + +; bc = c * $10 push af swap c ld a, $f @@ -194,19 +227,27 @@ Copy2bpp:: and c ld c, a pop af + jp FarCopyBytes Get1bpp:: ldh a, [rLCDC] - bit 7, a + bit rLCDC_ENABLE, a jp nz, Request1bpp + Copy1bpp:: +; copy c 1bpp tiles from b:de to hl + push de ld d, h ld e, l + +; bank ld a, b + +; bc = c * $10 / 2 push af - ld h, $0 + ld h, 0 ld l, c add hl, hl add hl, hl @@ -214,18 +255,24 @@ Copy1bpp:: ld b, h ld c, l pop af + pop hl jp FarCopyBytesDouble -Functionea6:: +Function_ea6:: ldh a, [rLCDC] add a jp c, Request2bpp -Functioneac:: + +Function_eac:: push de push hl + +; bank ld a, b - ld h, $0 + +; bc = c * $10 + ld h, 0 ld l, c add hl, hl add hl, hl @@ -234,5 +281,6 @@ Functioneac:: ld b, h ld c, l pop de + pop hl jp FarCopyBytes |