diff --git a/include/hucc/core-startup.asm b/include/hucc/core-startup.asm index 66a26bf7..867ce8b0 100644 --- a/include/hucc/core-startup.asm +++ b/include/hucc/core-startup.asm @@ -241,6 +241,8 @@ __trampolineptr = $5FFF ; are in MPR2, tell PCEAS to CORE_BANK = bank(*) - _bank_base ; It isn't always zero! ;-) + .bank CORE_BANK, "CORE_BANK" ; Give it a label. + .if USING_MPR7 CORE_PAGE = 7 ; User code runs in MPR7. .else @@ -600,7 +602,11 @@ CONST_BANK .rs 2 DATA_BANK .rs 0 .data + .if BUILDING_STAGE1 + .bank DATA_BANK + .else .bank DATA_BANK, ".data" + .endif .org $6000 .code diff --git a/include/hucc/hucc-baselib.asm b/include/hucc/hucc-baselib.asm index 727ccffa..7a14568f 100644 --- a/include/hucc/hucc-baselib.asm +++ b/include/hucc/hucc-baselib.asm @@ -680,6 +680,48 @@ _set_sprpal.3 .macro +; *************************************************************************** +; *************************************************************************** +; +; N.B. Declared in hucc-gfx.h, but defined here because they're macros! +; +; void __fastcall __macro load_sprites( unsigned int vram<_di>, unsigned char __far *data<_bp_bank:_bp>, unsigned int num_groups ); +; void __fastcall __macro sgx_load_sprites( unsigned int vram<_di>, unsigned char __far *data<_bp_bank:_bp>, unsigned int num_groups ); +; void __fastcall __macro far_load_sprites( unsigned int vram<_di>, unsigned int num_groups ); +; void __fastcall __macro sgx_far_load_sprites( unsigned int vram<_di>, unsigned int num_groups ); + + .if SUPPORT_SGX + .macro _sgx_load_sprites.3 + stz.l <_ax + asl a + sta.h <_ax + call _sgx_load_vram.3 + .endm + + .macro _sgx_far_load_sprites.2 + stz.l <_ax + asl a + sta.h <_ax + call _sgx_load_vram.3 + .endm + .endif + + .macro _load_sprites.3 + stz.l <_ax + asl a + sta.h <_ax + call _load_vram.3 + .endm + + .macro _far_load_sprites.2 + stz.l <_ax + asl a + sta.h <_ax + call _load_vram.3 + .endm + + + ; *************************************************************************** ; *************************************************************************** diff --git a/include/hucc/hucc-codegen.asm b/include/hucc/hucc-codegen.asm index 8209c7eb..d6c93073 100644 --- a/include/hucc/hucc-codegen.asm +++ b/include/hucc/hucc-codegen.asm @@ -541,11 +541,11 @@ __switch_r.wr .macro jmp [!table+, x] .endm -; !table: dw jmp1 ; +01 x=\1 -; dw jmp2 ; +23 x=\1+1 -; dw jmp3 ; +45 x=\1+2 -; dw jmp4 ; +67 x=\2 -; dw jmpdefault ; +89 x=\2+1 +; !table: dw jmp1 ; +01 x=(\1 - \1) +; dw jmp2 ; +23 x=(\1 - \1)+1 +; dw jmp3 ; +45 x=(\1 - \1)+2 +; dw jmp4 ; +67 x=(\2 - \1) +; dw jmpdefault ; +89 x=(\2 - \1)+1 ; ************** ; Y:A is the value to check for. @@ -561,7 +561,7 @@ __switch_r.ur .macro .endif .else sec - sbc.l #\1 + sbc #\1 bvc !+ eor #$80 !: bmi !default+ @@ -574,11 +574,11 @@ __switch_r.ur .macro jmp [!table+, x] .endm -; !table: dw jmp1 ; +01 x=\1 -; dw jmp2 ; +23 x=\1+1 -; dw jmp3 ; +45 x=\1+2 -; dw jmp4 ; +67 x=\2 -; dw jmpdefault ; +89 x=\2+1 +; !table: dw jmp1 ; +01 x=(\1 - \1) +; dw jmp2 ; +23 x=(\1 - \1)+1 +; dw jmp3 ; +45 x=(\1 - \1)+2 +; dw jmp4 ; +67 x=(\2 - \1) +; dw jmpdefault ; +89 x=(\2 - \1)+1 ; ************** ; the start of a "default" statement diff --git a/include/hucc/hucc-gfx.h b/include/hucc/hucc-gfx.h index 4c93e363..bf2c2b6d 100644 --- a/include/hucc/hucc-gfx.h +++ b/include/hucc/hucc-gfx.h @@ -97,6 +97,9 @@ extern void __fastcall sgx_load_bat( unsigned int vram<_di>, unsigned char __far extern void __fastcall load_palette( unsigned char palette<_al>, unsigned char __far *data<_bp_bank:_bp>, unsigned char num_palettes<_ah> ); +extern void __fastcall __macro load_sprites( unsigned int vram<_di>, unsigned char __far *data<_bp_bank:_bp>, unsigned int num_groups ); +extern void __fastcall __macro sgx_load_sprites( unsigned int vram<_di>, unsigned char __far *data<_bp_bank:_bp>, unsigned int num_groups ); + extern void __fastcall set_font_addr( unsigned int vram ); extern void __fastcall set_font_pal( unsigned char palette ); @@ -131,6 +134,9 @@ extern void __fastcall sgx_far_load_bat( unsigned int vram<_di>, unsigned char t extern void __fastcall far_load_palette( unsigned char palette<_al>, unsigned char num_palettes<_ah> ); extern void __fastcall far_load_font( unsigned char count<_al>, unsigned int vram ); +extern void __fastcall __macro far_load_sprites( unsigned int vram<_di>, unsigned int num_groups ); +extern void __fastcall __macro sgx_far_load_sprites( unsigned int vram<_di>, unsigned int num_groups ); + // Deprecated functions ... extern void __fastcall load_background( unsigned char __far *tiles<_bp_bank:_bp>, unsigned char __far *palettes<__fbank:__fptr>, unsigned char __far *bat<_cl:_bx>, unsigned char w<_dl>, unsigned char h<_dh> );