diff --git a/.gitignore b/.gitignore index 9b430b5..aadf46c 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,7 @@ bin/blockgen/.vs/ *.user bin/blockgen/vcxproj/.vs/ bin/blockgen/vcxproj/x64/ +*.pdb +bin/overlayhelper/.vs/ +bin/overlayhelper/vcxproj/.vs/ +bin/overlayhelper/vcxproj/x64/ diff --git a/Makefile b/Makefile index 32b042e..a15260e 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,8 @@ F256 = $(HOME)/code/f256 #SYSLIBDIR = $(SYSTEM)/lib #SYSINCDIR = $(SYSTEM)/include -TMPFLAGS = -D F256=1 -include src/mapper.h -include blocks.h -Wno-unknown-pragmas +#TMPFLAGS = -D F256=1 -include src/mapper.h -include blocks.h -Wno-unknown-pragmas +TMPFLAGS = -D F256=1 -include src/mapper.h -Wno-unknown-pragmas INCCMD = -I$(SYSINCDIR) diff --git a/lib/i256.flib b/lib/i256.flib new file mode 100644 index 0000000..de369c4 Binary files /dev/null and b/lib/i256.flib differ diff --git a/rickjr.ld b/rickjr.ld index ebfab73..b9eca9d 100644 --- a/rickjr.ld +++ b/rickjr.ld @@ -34,22 +34,22 @@ MEMORY { } /* LMAs */ -__block8_lma = 0x08000000|__SLOT_ADDR; -__block9_lma = 0x09000000|__SLOT_ADDR; -__block10_lma = 0x0A000000|__SLOT_ADDR; -__block11_lma = 0x0B000000|__SLOT_ADDR; -__block12_lma = 0x0C000000|__SLOT_ADDR; -__block13_lma = 0x0D000000|__SLOT_ADDR; -__block14_lma = 0x0E000000|__SLOT_ADDR; -__block15_lma = 0x0F000000|__SLOT_ADDR; -__block16_lma = 0x10000000|__SLOT_ADDR; -__block17_lma = 0x11000000|__SLOT_ADDR; -__block18_lma = 0x12000000|__SLOT_ADDR; -__block19_lma = 0x13000000|__SLOT_ADDR; -__block20_lma = 0x14000000|__SLOT_ADDR; -__block21_lma = 0x15000000|__SLOT_ADDR; -__block22_lma = 0x16000000|__SLOT_ADDR; -__block23_lma = 0x17000000|__SLOT_ADDR; +__block8_lma = ( 8<<24)|__SLOT_ADDR; +__block9_lma = ( 9<<24)|__SLOT_ADDR; +__block10_lma = (10<<24)|__SLOT_ADDR; +__block11_lma = (11<<24)|__SLOT_ADDR; +__block12_lma = (12<<24)|__SLOT_ADDR; +__block13_lma = (13<<24)|__SLOT_ADDR; +__block14_lma = (14<<24)|__SLOT_ADDR; +__block15_lma = (15<<24)|__SLOT_ADDR; +__block16_lma = (16<<24)|__SLOT_ADDR; +__block17_lma = (17<<24)|__SLOT_ADDR; +__block18_lma = (18<<24)|__SLOT_ADDR; +__block19_lma = (19<<24)|__SLOT_ADDR; +__block20_lma = (20<<24)|__SLOT_ADDR; +__block21_lma = (21<<24)|__SLOT_ADDR; +__block22_lma = (22<<24)|__SLOT_ADDR; +__block23_lma = (23<<24)|__SLOT_ADDR; /* Stash preloaded binary data */ __binarydata_lma = 0x70000; /* At least now, its less than 64k */ @@ -107,6 +107,9 @@ SECTIONS { .block23 : { *(.block23 .block23.*) } >block23 end_block23 = .; } +/* Trick linker into exposing symbols with values larger than 16 bits */ +INCLUDE overlay.ld + /* OUTPUT_FORMAT { FULL(cart_rom) } */ OUTPUT_FORMAT { BYTE(0x5A) /* pgZ */ @@ -140,10 +143,17 @@ OUTPUT_FORMAT { BYTE(0x00) TRIM(block10) +/* block11 */ + SHORT(11*0x2000) + BYTE(11/8) /* block#/8 = the actual system high byte */ + SHORT(end_block11 - __block11_lma) + BYTE(0x00) + TRIM(block11) + + /* Empty Blocks are not allowed, bring these in as you use them - TRIM(block11) TRIM(block12) TRIM(block13) TRIM(block14) diff --git a/src/dat_spritesJR.c b/src/dat_spritesJR.c index b4aef5b..686e10c 100644 --- a/src/dat_spritesJR.c +++ b/src/dat_spritesJR.c @@ -15,6 +15,7 @@ #ifdef GFXF256 +// $$TODO - move this macro into it's own header #define STR2(x) #x #define STR(x) STR2(x) @@ -48,6 +49,8 @@ INCBIN(".binarydata.haf", haf_256, "data/haf.256"); // Congrats INCBIN(".binarydata.haf", congrats_256, "data/congrats.256"); +INCBIN(".block11.i256", i256lib, "lib/i256.flib"); + #endif /* GFXF256 */ /* eof */ diff --git a/src/mapper.h b/src/mapper.h index afcfd7c..6352635 100644 --- a/src/mapper.h +++ b/src/mapper.h @@ -24,6 +24,6 @@ $$JGA TODO, sort out how to mark an entire file #define CODE_BLOCK(index) #define DATA_BLOCK(index) -#define PAGEIN(_function_) +#define PAGEIN(_function_BLOCK) #endif diff --git a/src/scr_credit.c b/src/scr_credit.c index 4fa4c07..5ad8ffa 100644 --- a/src/scr_credit.c +++ b/src/scr_credit.c @@ -14,10 +14,11 @@ segment "screen"; extern char credits_lz4; extern char incbin_sprites_256_start[]; +extern char incbin_sprites_256_start_high[]; extern char incbin_tiles_256_start[]; extern char incbin_splash_256_start[]; extern char __block23_lma_high[]; - +extern char scr_credit_BLOCK[]; CODE_BLOCK(8) void scr_credit() { @@ -25,8 +26,8 @@ CODE_BLOCK(8) void scr_credit() //$$JGA TODO - fix this *((char*)0x200) = (char)(((long)(&incbin_sprites_256_start))); *((char*)0x201) = (char)(((long)(&incbin_sprites_256_start))>>8); - *((char*)0x202) = incbin_sprites_256_start_high; - *((char*)0x203) = scr_credit_BLOCK; + *((char*)0x202) = (char)(((long)(&incbin_sprites_256_start_high))); + *((char*)0x203) = (char)(((long)(&scr_credit_BLOCK))); // *((char*)0x203) = (char)(((long)(__block23_lma_high))>>8); #endif