git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

commit af846209d876ecd949cb08c9cbee955bf0c0755d
parent acf7b26174b716afcaf6fa66f550ff08ad919b3b
Author: Toxa <untoxa@mail.ru>
Date:   Thu, 16 May 2024 01:07:32 +0300

SMS/GG/MSX: disallow interrupt fire in the middle of the crt0 initialization code

Diffstat:
Mgbdk-lib/libc/targets/z80/gg/crt0.s19+++++++++++++------
Mgbdk-lib/libc/targets/z80/gg/global.s4++--
Mgbdk-lib/libc/targets/z80/msxdos/global.s10+++++-----
Mgbdk-lib/libc/targets/z80/msxdos/msx_set_native_data.s1+
Mgbdk-lib/libc/targets/z80/msxdos/msx_write_vdp.s4++--
Mgbdk-lib/libc/targets/z80/sms/crt0.s19+++++++++++++------
Mgbdk-lib/libc/targets/z80/sms/global.s8++++----
Mgbdk-lib/libc/targets/z80/sms_set_native_data.s2++
Mgbdk-lib/libc/targets/z80/vmemcpy.s2++
9 files changed, 44 insertions(+), 25 deletions(-)

diff --git a/gbdk-lib/libc/targets/z80/gg/crt0.s b/gbdk-lib/libc/targets/z80/gg/crt0.s @@ -2,6 +2,9 @@ .title "Runtime" .module Runtime + + .ez80 + .area _HEADER (ABS) .globl _set_default_palette @@ -75,9 +78,10 @@ _WRITE_VDP_DATA:: ;; Clear VRAM and Initialize VDP ld hl, #((.VDP_R1 << 8) | .R1_DEFAULT) - WRITE_VDP_CMD_HL + ld c, #.VDP_CMD + out (c), l + out (c), h - call _set_default_palette call .clear_VRAM ld c, #.VDP_CMD @@ -108,6 +112,9 @@ _WRITE_VDP_DATA:: VDP_CANCEL_INT ei ; re-enable interrupts before going to main() + + call _set_default_palette + call _main 10$: halt @@ -145,10 +152,10 @@ _WRITE_VDP_DATA:: .area _HOME .clear_VRAM: - ld a, #<.VDP_VRAM - out (#.VDP_CMD), a - ld a, #>.VDP_VRAM - out (#.VDP_CMD), a + ld hl, #.VDP_VRAM + ld c, #.VDP_CMD + out (c), l + out (c), h xor a ld bc, #0x4101 jr 6$ diff --git a/gbdk-lib/libc/targets/z80/gg/global.s b/gbdk-lib/libc/targets/z80/gg/global.s @@ -279,7 +279,7 @@ ;; Macro definitions -.macro VDP_WRITE_DATA regH regL ?lbl +.macro VDP_WRITE_DATA regH regL ld a, regL di out (#.VDP_DATA), a @@ -288,7 +288,7 @@ out (#.VDP_DATA), a .endm -.macro VDP_WRITE_CMD regH regL ?lbl +.macro VDP_WRITE_CMD regH regL ld a, regL di out (#.VDP_CMD), a diff --git a/gbdk-lib/libc/targets/z80/msxdos/global.s b/gbdk-lib/libc/targets/z80/msxdos/global.s @@ -326,7 +326,7 @@ ;; Main user routine .globl _main - + ;; interrupt handler .globl _INT_ISR @@ -342,16 +342,16 @@ jp .BDOS .endm -.macro VDP_WRITE_DATA regH regL ?lbl +.macro VDP_WRITE_DATA regH regL ld a, regL di - out (#.VDP_DATA), a ; 11 - ld a, regH ; 4 + out (#.VDP_DATA), a + ld a, regH ei out (#.VDP_DATA), a .endm -.macro VDP_WRITE_CMD regH regL ?lbl +.macro VDP_WRITE_CMD regH regL ld a, regL di out (#.VDP_CMD), a diff --git a/gbdk-lib/libc/targets/z80/msxdos/msx_set_native_data.s b/gbdk-lib/libc/targets/z80/msxdos/msx_set_native_data.s @@ -2,6 +2,7 @@ .title "VRAM utilities" .module VRAMUtils + .ez80 .area _HOME diff --git a/gbdk-lib/libc/targets/z80/msxdos/msx_write_vdp.s b/gbdk-lib/libc/targets/z80/msxdos/msx_write_vdp.s @@ -3,6 +3,8 @@ .title "write vdp" .module write_vdp + .ez80 + .area _CODE _WRITE_VDP_CMD:: @@ -11,4 +13,3 @@ _WRITE_VDP_CMD:: _WRITE_VDP_DATA:: VDP_WRITE_DATA h, l ret - - diff --git a/gbdk-lib/libc/targets/z80/sms/crt0.s b/gbdk-lib/libc/targets/z80/sms/crt0.s @@ -2,6 +2,9 @@ .title "Runtime" .module Runtime + + .ez80 + .area _HEADER (ABS) .globl _set_default_palette @@ -75,9 +78,10 @@ _WRITE_VDP_DATA:: ;; Clear VRAM and Initialize VDP ld hl, #((.VDP_R1 << 8) | .R1_DEFAULT) - WRITE_VDP_CMD_HL + ld c, #.VDP_CMD + out (c), l + out (c), h - call _set_default_palette call .clear_VRAM ld c, #.VDP_CMD @@ -115,6 +119,9 @@ _WRITE_VDP_DATA:: VDP_CANCEL_INT ei ; re-enable interrupts before going to main() + + call _set_default_palette + call _main 10$: halt @@ -152,10 +159,10 @@ _WRITE_VDP_DATA:: .area _HOME .clear_VRAM: - ld a, #<.VDP_VRAM - out (#.VDP_CMD), a - ld a, #>.VDP_VRAM - out (#.VDP_CMD), a + ld hl, #.VDP_VRAM + ld c, #.VDP_CMD + out (c), l + out (c), h xor a ld bc, #0x4101 jr 6$ diff --git a/gbdk-lib/libc/targets/z80/sms/global.s b/gbdk-lib/libc/targets/z80/sms/global.s @@ -281,16 +281,16 @@ ;; Macro definitions -.macro VDP_WRITE_DATA regH regL ?lbl +.macro VDP_WRITE_DATA regH regL ld a, regL di - out (#.VDP_DATA), a ; 11 - ld a, regH ; 4 + out (#.VDP_DATA), a + ld a, regH ei out (#.VDP_DATA), a .endm -.macro VDP_WRITE_CMD regH regL ?lbl +.macro VDP_WRITE_CMD regH regL ld a, regL di out (#.VDP_CMD), a 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,6 +4,8 @@ .module VRAMUtils .area _HOME + .ez80 + ; 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); diff --git a/gbdk-lib/libc/targets/z80/vmemcpy.s b/gbdk-lib/libc/targets/z80/vmemcpy.s @@ -4,6 +4,8 @@ .module VRAMUtils .area _HOME + .ez80 + ; void vmemcpy (unsigned int dst, const void *src, unsigned int size) __z88dk_callee __preserves_regs(iyh,iyl); _set_data:: _vmemcpy::

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.