gbdk-2020 | GameBoy Development Kit |
| download: https://git.y1.nz/archives/gbdk.tar.gz | |
| README | Files | Log | Refs | LICENSE |
commit b0a36f5bcda48961b6b27b33293b838fafac8b47 parent 5ed2d59d71eb448ebac62127f39f73561b6a2865 Author: Toxa <untoxa@mail.ru> Date: Thu, 14 Mar 2024 19:23:35 +0300 SMS/GG: optimize native tile data loading routines Diffstat:
| M | gbdk-lib/include/sms/sms.h | 18 | +++++------------- |
| M | gbdk-lib/libc/targets/z80/sms_set_native_data.s | 34 | ++++++++++++++++++++++------------ |
2 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/gbdk-lib/include/sms/sms.h b/gbdk-lib/include/sms/sms.h @@ -561,20 +561,12 @@ void set_palette(uint8_t first_palette, uint8_t nb_palettes, const palette_color #define set_bkg_palette set_palette #define set_sprite_palette(first_palette,nb_palettes,rgb_data) set_palette(1,1,rgb_data) -void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) Z88DK_CALLEE PRESERVES_REGS(iyh, iyl); -inline void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) { - set_native_tile_data(start, ntiles, src); -} -inline void set_bkg_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) { - set_bkg_4bpp_data(first_tile, nb_tiles, data); -} +void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh, iyl); +void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh, iyl); +void set_bkg_native_data(uint16_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh, iyl); -inline void set_sprite_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) { - set_native_tile_data((uint8_t)(start) + 0x100u, ntiles, src); -} -inline void set_sprite_native_data(uint8_t first_tile, uint8_t nb_tiles, const uint8_t *data) { - set_sprite_4bpp_data(first_tile, nb_tiles, data); -} +void set_sprite_4bpp_data(uint8_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh, iyl); +void set_sprite_native_data(uint8_t start, uint16_t ntiles, const void *src) PRESERVES_REGS(iyh, iyl); #define COMPAT_PALETTE(C0,C1,C2,C3) (((uint16_t)(C3) << 12) | ((uint16_t)(C2) << 8) | ((uint16_t)(C1) << 4) | (uint16_t)(C0)) extern uint16_t _current_2bpp_palette; diff --git a/gbdk-lib/libc/targets/z80/sms_set_native_data.s b/gbdk-lib/libc/targets/z80/sms_set_native_data.s @@ -4,12 +4,26 @@ .module VRAMUtils .area _HOME -; void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) __z88dk_callee __preserves_regs(iyh,iyl); +; void set_sprite_4bpp_data(uint8_t start, uint16_t ntiles, const void *src) __preserves_regs(iyh,iyl); +_set_sprite_4bpp_data:: +; void set_sprite_native_data(uint8_t start, uint16_t ntiles, const void *src) __preserves_regs(iyh,iyl); +_set_sprite_native_data:: + ld h, #1 + ld l, a + +; void set_bkg_native_data(uint16_t start, uint16_t ntiles, const void *src) __preserves_regs(iyh,iyl); +_set_bkg_native_data:: +; void set_bkg_4bpp_data(uint16_t start, uint16_t ntiles, const void *src) __preserves_regs(iyh,iyl); +_set_bkg_4bpp_data:: +; void set_native_tile_data(uint16_t start, uint16_t ntiles, const void *src) __preserves_regs(iyh,iyl); _set_native_tile_data:: + ld b, h + ld c, l + DISABLE_VBLANK_COPY ; switch OFF copy shadow SAT - pop de ; pop ret address - pop hl + ld h, b + ld l, c add hl, hl add hl, hl @@ -22,13 +36,9 @@ _set_native_tile_data:: VDP_WRITE_CMD h, l - pop bc pop hl - push de + ex (sp), hl - ld e, c - ld d, b - ld c, #.VDP_DATA inc d inc e @@ -36,16 +46,16 @@ _set_native_tile_data:: 1$: ld b, #32 -3$: +3$: outi jr nz, 3$ 2$: dec e - jr nz, 1$ + jp nz, 1$ dec d - jr nz, 1$ - + jp nz, 1$ + ENABLE_VBLANK_COPY ; switch ON copy shadow SAT 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.