From df4fa208785384f800106bd9453a5cc3757949d0 Mon Sep 17 00:00:00 2001 From: dwsJason Date: Sun, 19 Aug 2018 15:29:03 -0400 Subject: [PATCH] Allocate memory, and decompress sprites --- asm/drawsprite.s | 203 +++++++++++++++++++++++++++++++++++++++++++++++ include/system.h | 1 + src/sysvid.c | 53 ++++++++++++- 3 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 asm/drawsprite.s diff --git a/asm/drawsprite.s b/asm/drawsprite.s new file mode 100644 index 0000000..bd9befc --- /dev/null +++ b/asm/drawsprite.s @@ -0,0 +1,203 @@ +* +* ORCA/M Format!! +* Thunk from C to compiled draw things +* + case on + longa on + longi on + +Dummy4 start ASMCODE + end +*------------------------------------------------------------------------------- + +DrawSprite start ASMCODE + PHB + PHK + PLB + ASL A ; A=Sprite Number ($0000-$01C1) + TAX ; Y=Target Screen Address ($2000-$9D00) + LDA xrickNum,X ; Relative Sprite Number Table + JMP (xrickBank,X) ; Bank Number Table + +xrickNum ANOP + dc h'5C00 5B00 5A00 5900 5800 5700 5500 5400' + dc h'5300 5200 5100 5000 4F00 4D00 4C00 4B00' + dc h'4A00 4900 4800 4700 4600 4500 4400 4300' + dc h'9100 9000 3500 0E00 0400 1C00 0300 2400' + dc h'6200 2B00 1200 0F00 0200 5900 5400 6000' + dc h'5A00 6100 5800 0C00 1100 1000 1F00 6900' + dc h'5E00 4E00 0700 3E00 6800 3400 2500 0400' + dc h'6A00 2700 0B00 2000 4400 1E00 5F00 5800' + dc h'6400 5500 5700 0E00 2600 5000 1E00 0000' + dc h'3D00 4F00 1C00 2600 3000 2200 4800 4900' + dc h'4C00 5600 4300 4400 1100 1200 2100 2400' + dc h'2B00 2700 2600 2E00 7A00 7B00 7E00 7C00' + dc h'2E00 1700 2700 1600 1500 0E00 1E00 4600' + dc h'0100 0600 0500 6400 0800 0900 2800 2A00' + dc h'0B00 2D00 4A00 4900 3F00 4600 1F00 4700' + dc h'5400 2C00 1A00 0900 1C00 4000 5500 2B00' + dc h'0700 2200 1D00 3100 2300 2100 2D00 5200' + dc h'3700 1600 7100 5100 1D00 5D00 2800 1A00' + dc h'4200 4C00 5C00 5D00 4700 3C00 4500 3200' + dc h'2A00 6000 3B00 5A00 1700 1600 6000 3000' + dc h'5200 3D00 1800 1900 5F00 3200 5000 0B00' + dc h'3600 3000 3B00 2200 3600 2900 4000 4900' + dc h'3500 5C00 3900 2000 3E00 3700 5700 3100' + dc h'2400 3100 0500 5B00 4C00 1000 4300 2C00' + dc h'4B00 2F00 2F00 7900 2800 1F00 4B00 2700' + dc h'3400 4A00 4F00 3C00 6A00 0A00 1500 8B00' + dc h'7300 1600 7D00 2200 3800 6700 5E00 1500' + dc h'4200 6F00 2100 3900 4800 5100 3600 1900' + dc h'1400 1300 5D00 1000 0200 0600 5300 4F00' + dc h'0F00 0B00 4400 2D00 5200 3A00 4700 1800' + dc h'8500 1900 4600 2E00 5900 3A00 6300 4D00' + dc h'3500 4100 2A00 7100 7700 3300 2C00 3200' + dc h'1B00 1C00 5700 6B00 2300 1A00 6900 6E00' + dc h'4200 2F00 1700 2100 1D00 1E00 6F00 6800' + dc h'3200 3600 2F00 3A00 3900 5A00 3D00 6500' + dc h'1400 6C00 5B00 3400 3A00 5800 6E00 1300' + dc h'0F00 0A00 2E00 3800 3800 5400 0600 0300' + dc h'0500 0A00 2800 6600 0100 0800 0200 1200' + dc h'2B00 1900 2400 2000 0D00 5600 2300 5300' + dc h'1D00 4A00 5500 0800 2900 5100 1B00 4800' + dc h'1B00 1F00 1800 1100 3F00 4E00 4D00 3C00' + dc h'5600 4E00 8100 8000 8600 7F00 8700 8200' + dc h'8900 8800 8D00 8A00 8C00 8F00 0300 0400' + dc h'0100 0600 8400 8300 0800 0000 0900 0200' + dc h'0E00 1000 6B00 8E00 5E00 6300 5C00 6700' + dc h'5300 6D00 0D00 1A00 1200 0A00 1400 0C00' + dc h'0700 0900 7800 7600 2000 2500 4300 4500' + dc h'4E00 3B00 3300 2300 3F00 4500 1700 0000' + dc h'1100 7000 3300 5F00 6100 4D00 4000 5600' + dc h'2500 4100 4B00 5B00 1B00 1300 2600 3E00' + dc h'5000 3700 0F00 2500 2900 4100 4200 3C00' + dc h'3000 3500 0C00 0700 6C00 6600 7200 7500' + dc h'1500 1300 3900 3300 4000 3700 2C00 2900' + dc h'3D00 4100 3100 3E00 0D00 0500 6D00 6500' + dc h'7000 7400 1400 1800 3B00 3400 3F00 3800' + dc h'2D00 2A00 6200 5900 0C00 0D00 0100 0400' + dc h'0000 0300' + +xrickBank ANOP + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03' + dc a'xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank01,xrickBank01' + dc a'xrickBank01,xrickBank02,xrickBank01,xrickBank02,xrickBank01,xrickBank01,xrickBank02,xrickBank02' + dc a'xrickBank02,xrickBank02,xrickBank00,xrickBank01,xrickBank02,xrickBank02,xrickBank02,xrickBank01' + dc a'xrickBank01,xrickBank01,xrickBank02,xrickBank02,xrickBank01,xrickBank02,xrickBank01,xrickBank01' + dc a'xrickBank01,xrickBank02,xrickBank02,xrickBank01,xrickBank01,xrickBank01,xrickBank02,xrickBank02' + dc a'xrickBank02,xrickBank02,xrickBank00,xrickBank01,xrickBank02,xrickBank01,xrickBank02,xrickBank02' + dc a'xrickBank01,xrickBank01,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00' + dc a'xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank03,xrickBank03,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00' + dc a'xrickBank01,xrickBank01,xrickBank00,xrickBank01,xrickBank00,xrickBank02,xrickBank00,xrickBank00' + dc a'xrickBank00,xrickBank00,xrickBank02,xrickBank02,xrickBank01,xrickBank01,xrickBank01,xrickBank01' + dc a'xrickBank00,xrickBank01,xrickBank01,xrickBank01,xrickBank01,xrickBank01,xrickBank00,xrickBank01' + dc a'xrickBank01,xrickBank01,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank02,xrickBank01' + dc a'xrickBank01,xrickBank02,xrickBank01,xrickBank01,xrickBank02,xrickBank01,xrickBank01,xrickBank02' + dc a'xrickBank02,xrickBank01,xrickBank00,xrickBank00,xrickBank00,xrickBank01,xrickBank02,xrickBank01' + dc a'xrickBank01,xrickBank00,xrickBank02,xrickBank00,xrickBank01,xrickBank01,xrickBank01,xrickBank02' + dc a'xrickBank00,xrickBank02,xrickBank01,xrickBank01,xrickBank01,xrickBank02,xrickBank00,xrickBank01' + dc a'xrickBank00,xrickBank01,xrickBank01,xrickBank02,xrickBank01,xrickBank02,xrickBank02,xrickBank01' + dc a'xrickBank01,xrickBank01,xrickBank02,xrickBank02,xrickBank01,xrickBank02,xrickBank01,xrickBank01' + dc a'xrickBank02,xrickBank02,xrickBank01,xrickBank00,xrickBank00,xrickBank01,xrickBank01,xrickBank02' + dc a'xrickBank01,xrickBank02,xrickBank00,xrickBank02,xrickBank03,xrickBank03,xrickBank02,xrickBank01' + dc a'xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank02,xrickBank03,xrickBank01,xrickBank02' + dc a'xrickBank02,xrickBank03,xrickBank02,xrickBank03,xrickBank01,xrickBank01,xrickBank00,xrickBank02' + dc a'xrickBank00,xrickBank01,xrickBank01,xrickBank00,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank02,xrickBank02,xrickBank02,xrickBank00,xrickBank00,xrickBank00,xrickBank02,xrickBank02' + dc a'xrickBank03,xrickBank03,xrickBank00,xrickBank01,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank02,xrickBank03,xrickBank02,xrickBank02,xrickBank00,xrickBank01,xrickBank01,xrickBank00' + dc a'xrickBank00,xrickBank00,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank00,xrickBank00' + dc a'xrickBank03,xrickBank03,xrickBank02,xrickBank01,xrickBank03,xrickBank03,xrickBank02,xrickBank02' + dc a'xrickBank01,xrickBank01,xrickBank03,xrickBank02,xrickBank03,xrickBank03,xrickBank02,xrickBank02' + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank01,xrickBank01,xrickBank00,xrickBank01' + dc a'xrickBank01,xrickBank01,xrickBank01,xrickBank01,xrickBank00,xrickBank01,xrickBank01,xrickBank01' + dc a'xrickBank01,xrickBank01,xrickBank01,xrickBank00,xrickBank02,xrickBank01,xrickBank02,xrickBank02' + dc a'xrickBank02,xrickBank02,xrickBank02,xrickBank01,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank01,xrickBank01,xrickBank01,xrickBank00' + dc a'xrickBank01,xrickBank01,xrickBank01,xrickBank01,xrickBank01,xrickBank00,xrickBank01,xrickBank01' + dc a'xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank03,xrickBank03,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank02,xrickBank02,xrickBank03,xrickBank03,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank01,xrickBank01,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00,xrickBank00' + dc a'xrickBank00,xrickBank00,xrickBank02,xrickBank02,xrickBank03,xrickBank03,xrickBank00,xrickBank00' + dc a'xrickBank00,xrickBank00,xrickBank00,xrickBank02,xrickBank00,xrickBank01,xrickBank02,xrickBank01' + dc a'xrickBank01,xrickBank01,xrickBank01,xrickBank00,xrickBank01,xrickBank01,xrickBank00,xrickBank00' + dc a'xrickBank00,xrickBank01,xrickBank00,xrickBank02,xrickBank02,xrickBank00,xrickBank01,xrickBank00' + dc a'xrickBank02,xrickBank00,xrickBank00,xrickBank02,xrickBank00,xrickBank02,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank02,xrickBank02,xrickBank02,xrickBank02' + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank02,xrickBank02' + dc a'xrickBank02,xrickBank02,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03,xrickBank03' + dc a'xrickBank03,xrickBank03,xrickBank02,xrickBank02,xrickBank02,xrickBank02,xrickBank00,xrickBank00' + dc a'xrickBank00,xrickBank00' + +xrickBank00 entry + JSL $AA0000 + PLB + RTL + +xrickBank01 entry + JSL $AA0000 + PLB + RTL + +xrickBank02 entry + JSL $AA0000 + PLB + RTL + +xrickBank03 entry + JSL $AA0000 + PLB + RTL +*------------------------------------------------ + + +*------------------------------------------------------------------------------- +* +*void SetSpriteBanks(short b0, short b1, short b2, short b3); +* +SetSpriteBanks entry + +iBank0 equ 4 +iBank1 equ 6 +iBank2 equ 8 +iBank3 equ 10 + + sep #$30 + + lda iBank0,s + sta >xrickBank00+3 + + lda iBank1,s + sta >xrickBank01+3 + + lda iBank2,s + sta >xrickBank02+3 + + lda iBank3,s + sta >xrickBank03+3 + + rep #$30 + + lda 2,s + sta iBank3,s + lda 1,s + sta iBank3-1,s + + tsc + sec + sbc #-8 + tcs + + rtl + +*------------------------------------------------------------------------------- + end + diff --git a/include/system.h b/include/system.h index 350b6a7..22ef7f0 100644 --- a/include/system.h +++ b/include/system.h @@ -181,6 +181,7 @@ extern volatile unsigned long* tick; // GS Rendering Stuff extern void SetTileBank(short bank); extern void DrawTile(int offset, int tileNo); +extern void SetSpriteBanks(short b0, short b1, short b2, short b3); // ADB Support Code extern char KeyArray[128]; diff --git a/src/sysvid.c b/src/sysvid.c index b61fe57..6dedaed 100644 --- a/src/sysvid.c +++ b/src/sysvid.c @@ -12,6 +12,7 @@ */ #ifdef IIGS +segment "system"; #pragma noroot #endif @@ -39,8 +40,6 @@ #include /* memset */ #endif -segment "system"; - U8 *sysvid_fb; /* frame buffer */ rect_t SCREENRECT = {0, 0, SYSVID_WIDTH, SYSVID_HEIGHT, NULL}; /* whole fb */ @@ -218,6 +217,53 @@ taskHeader_t dummyTask = { #endif +#ifdef IIGS +extern U8 xrickspr_00; +extern U8 xrickspr_01; +extern U8 xrickspr_02; +extern U8 xrickspr_03; + +U8* compressedSprites[] = +{ + &xrickspr_00, + &xrickspr_01, + &xrickspr_02, + &xrickspr_03 +}; + +void PrepareSprites() +{ + int idx; + U32* handles[4]; + + for (idx = 0; idx < 4; ++idx) + { + printf("Alloc Sprites %d\n",idx); + handles[idx] = (U32*)NewHandle(0x10000, userid(), 0xC014, 0); + if (toolerror()) + { + printf("Unable to allocate 64k Sprites Bank %d\n", idx); + printf("Game can't run\n"); + sys_sleep(5000); // Wait 5 seconds + exit(1); + } + printf("SUCCESS\n"); + } + + for (idx = 0; idx < 4; ++idx) + { + printf("Decompress Sprites %d\n", idx); + LZ4_Unpack((char*)*handles[idx], compressedSprites[idx]); + } + + SetSpriteBanks( (*handles[0])>>16, + (*handles[1])>>16, + (*handles[2])>>16, + (*handles[3])>>16 ); +} +#endif + + /* * Initialise video */ @@ -293,8 +339,11 @@ sysvid_init(void) printf("SUCCESS\n"); SetTileBank((*tilesPageHandle)>>16); + printf("Decompressing Tiles\n"); LZ4_Unpack((char*)*tilesPageHandle, &tiles_lz4); + PrepareSprites(); + printf("MiscTool Startup\n"); MTStartUp(); // MiscTool Startup, for the Heartbeat if (toolerror())