mirror of
https://github.com/wavemotion-dave/A7800DS.git
synced 2024-06-01 02:37:41 -04:00
4.2d More optmization to banksets and some CPU improvements.
This commit is contained in:
parent
f7c4c647ee
commit
1a8f11f129
BIN
A7800DS.nds
BIN
A7800DS.nds
Binary file not shown.
2
Makefile
2
Makefile
|
@ -1,4 +1,4 @@
|
|||
VERSION=4.2c
|
||||
VERSION=4.2d
|
||||
TARGNAME=A7800DS
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
|
|
|
@ -56,7 +56,7 @@ Database_Entry game_list[] = {
|
|||
{"20660b667df538ec32a8e1b998438604", "Frameless Centipede", CT_NORMAL, POKEY_NONE, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_YES, 0, 24, 16, 300, 230, 0}, // title=Centipede - Frameless Hack
|
||||
{"a4b5d742860beb25c29def4530194c1e", "Chase", CT_SUPRAM, POKEY_NONE, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_NO, 0, 8, 19, 269, 233, 0}, // title=Chase
|
||||
{"93e4387864b014c155d7c17877990d1e", "Choplifter", CT_NORMAL, POKEY_NONE, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_NO, 0, 0, 12, 256, 220, 0}, // title=Choplifter
|
||||
{"2e8e28f6ad8b9b9267d518d880c73ebb", "Commando", CT_SUPCAR, POKEY_AT_4000, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_NO, 0, 0, 12, 256, 220, 1}, // title=Commando
|
||||
{"2e8e28f6ad8b9b9267d518d880c73ebb", "Commando", CT_SUPCAR, POKEY_AT_4000, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_NO, 20, 0, 12, 256, 220, 1}, // title=Commando
|
||||
{"db691469128d9a4217ec7e315930b646", "Crack'ed", CT_SUPCAR, POKEY_NONE, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_NO, 0, 0, 18, 256, 229, 0}, // title=Crack'ed
|
||||
{"299d31c8e181fdd011df2014451bdf0f", "Crazy Brix", CT_NORMAL, POKEY_NONE, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_YES, 0, 0, 5, 256, 203, 0}, // title=Crazy Brix
|
||||
{"2d2fe4da9f1bae102fa8ca2d8830a626", "Crazy Otto", CT_NORMAL, POKEY_NONE, JOY, JOY, DIFF_A, DIFF_A, NTSC, HSC_NO, 0, 0, 9, 256, 232, 0}, // title=Crazy Otto
|
||||
|
|
|
@ -61,8 +61,6 @@ static lpair maria_pp __attribute__((section(".dtcm")));
|
|||
static byte maria_horizontal __attribute__((section(".dtcm")));
|
||||
static byte maria_palette __attribute__((section(".dtcm")));
|
||||
static int maria_offset __attribute__((section(".dtcm")));
|
||||
static byte maria_h08 __attribute__((section(".dtcm")));
|
||||
static byte maria_h16 __attribute__((section(".dtcm")));
|
||||
static uint maria_h8_h16 __attribute__((section(".dtcm")));
|
||||
static u32 maria_wmode __attribute__((section(".dtcm")));
|
||||
|
||||
|
@ -102,8 +100,6 @@ void maria_Reset( ) {
|
|||
maria_horizontal = 0;
|
||||
maria_palette = 0;
|
||||
maria_offset = 0;
|
||||
maria_h08 = 0;
|
||||
maria_h16 = 0;
|
||||
maria_h8_h16 = 0x0000;
|
||||
maria_wmode = 0;
|
||||
bg32 = 0x00000000;
|
||||
|
@ -149,7 +145,6 @@ static inline void _maria_ClearCells4(void)
|
|||
*((u32 *)&maria_lineRAM[maria_horizontal]) = 0;
|
||||
}
|
||||
}
|
||||
maria_horizontal += 4;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -177,7 +172,6 @@ static inline void _maria_StoreCells4(byte data)
|
|||
if (data & 0x03) *ptr = maria_palette | (data & 0x03);
|
||||
}
|
||||
}
|
||||
maria_horizontal += 4;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -187,18 +181,15 @@ static inline void maria_StoreCellWriteMode(byte data)
|
|||
{
|
||||
if(maria_horizontal < MARIA_LINERAM_SIZE)
|
||||
{
|
||||
if (data)
|
||||
byte *ptr = (byte *)&maria_lineRAM[maria_horizontal];
|
||||
if (data & write_mask_high) // high
|
||||
{
|
||||
byte *ptr = (byte *)&maria_lineRAM[maria_horizontal];
|
||||
if (data & write_mask_high) // high
|
||||
{
|
||||
*ptr = (maria_palette & 0x10) | (data >> 4);
|
||||
}
|
||||
if (data & write_mask_low) // low
|
||||
{
|
||||
ptr++;
|
||||
*ptr = (maria_palette & 0x10) | (data & 0x0F);
|
||||
}
|
||||
*ptr = (maria_palette & 0x10) | (data >> 4);
|
||||
}
|
||||
if (data & write_mask_low) // low
|
||||
{
|
||||
ptr++;
|
||||
*ptr = (maria_palette & 0x10) | (data & 0x0F);
|
||||
}
|
||||
#ifdef KANGAROO_MODE_SUPPORTED
|
||||
else
|
||||
|
@ -211,7 +202,6 @@ static inline void maria_StoreCellWriteMode(byte data)
|
|||
}
|
||||
#endif
|
||||
}
|
||||
maria_horizontal += 2;
|
||||
}
|
||||
|
||||
|
||||
|
@ -227,6 +217,16 @@ static inline bool maria_IsHoleyDMA( )
|
|||
return false;
|
||||
}
|
||||
|
||||
static inline bool maria_IsNotHoleyDMA( )
|
||||
{
|
||||
if(maria_pp.w & 0x8000)
|
||||
{
|
||||
if (maria_pp.w & maria_h8_h16) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// GetColor
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -415,36 +415,26 @@ static inline void maria_StoreGraphic( )
|
|||
byte data = memory_ram[maria_pp.w];
|
||||
if(maria_wmode)
|
||||
{
|
||||
if(maria_IsHoleyDMA())
|
||||
if (data)
|
||||
{
|
||||
maria_horizontal += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
maria_StoreCellWriteMode(write_mode_lookup[data]);
|
||||
if(maria_IsNotHoleyDMA()) maria_StoreCellWriteMode(write_mode_lookup[data]);
|
||||
}
|
||||
maria_horizontal += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef KANGAROO_MODE_SUPPORTED
|
||||
if(maria_IsHoleyDMA())
|
||||
if (data)
|
||||
{
|
||||
maria_horizontal += 4;
|
||||
if (maria_IsNotHoleyDMA()) _maria_StoreCells4(data);
|
||||
}
|
||||
else if (!data)
|
||||
#ifdef KANGAROO_MODE_SUPPORTED
|
||||
else
|
||||
{
|
||||
_maria_ClearCells4();
|
||||
}
|
||||
#else
|
||||
if(maria_IsHoleyDMA() || !data)
|
||||
{
|
||||
maria_horizontal += 4;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
_maria_StoreCells4(data);
|
||||
}
|
||||
#endif
|
||||
maria_horizontal += 4;
|
||||
|
||||
}
|
||||
maria_pp.w++;
|
||||
}
|
||||
|
@ -564,10 +554,11 @@ ITCM_CODE void maria_RenderScanlineTOP(void)
|
|||
|
||||
maria_dpp.b.l = memory_ram[DPPL];
|
||||
maria_dpp.b.h = memory_ram[DPPH];
|
||||
maria_h08 = memory_ram[maria_dpp.w] & 32;
|
||||
maria_h16 = memory_ram[maria_dpp.w] & 64;
|
||||
maria_h8_h16 = (maria_h08 ? 2048:0) | (maria_h16 ? 4096:0);
|
||||
maria_offset = memory_ram[maria_dpp.w] & 15;
|
||||
|
||||
u8 dl_mode = memory_ram[maria_dpp.w];
|
||||
maria_h8_h16 = ((uint)dl_mode << 6) & 0x1800;
|
||||
maria_offset = dl_mode & 15;
|
||||
|
||||
maria_dp.b.h = memory_ram[maria_dpp.w + 1];
|
||||
maria_dp.b.l = memory_ram[maria_dpp.w + 2];
|
||||
if(memory_ram[maria_dpp.w] & 128)
|
||||
|
@ -583,11 +574,10 @@ ITCM_CODE void maria_RenderScanlineTOP(void)
|
|||
{
|
||||
maria_cycles += MARIA_CYCLES_STARTUP_SHUTDOWN_LAST_LINE_ZONE;
|
||||
maria_dpp.w += 3;
|
||||
maria_h08 = memory_ram[maria_dpp.w] & 32;
|
||||
maria_h16 = memory_ram[maria_dpp.w] & 64;
|
||||
maria_h8_h16 = (maria_h08 ? 2048:0) | (maria_h16 ? 4096:0);
|
||||
maria_offset = memory_ram[maria_dpp.w] & 15;
|
||||
if(memory_ram[maria_dpp.w] & 128)
|
||||
u8 dl_mode = memory_ram[maria_dpp.w];
|
||||
maria_h8_h16 = ((uint)dl_mode << 6) & 0x1800;
|
||||
maria_offset = dl_mode & 15;
|
||||
if(dl_mode & 128)
|
||||
{
|
||||
maria_cycles += sally_ExecuteNMI( ) << 2;
|
||||
}
|
||||
|
@ -631,11 +621,10 @@ ITCM_CODE void maria_RenderScanline(void)
|
|||
{
|
||||
maria_cycles += MARIA_CYCLES_STARTUP_SHUTDOWN_LAST_LINE_ZONE;
|
||||
maria_dpp.w += 3;
|
||||
maria_h08 = memory_ram[maria_dpp.w] & 32;
|
||||
maria_h16 = memory_ram[maria_dpp.w] & 64;
|
||||
maria_h8_h16 = (maria_h08 ? 2048:0) | (maria_h16 ? 4096:0);
|
||||
maria_offset = memory_ram[maria_dpp.w] & 15;
|
||||
if(memory_ram[maria_dpp.w] & 128)
|
||||
u8 dl_mode = memory_ram[maria_dpp.w];
|
||||
maria_h8_h16 = ((uint)dl_mode << 6) & 0x1800;
|
||||
maria_offset = dl_mode & 15;
|
||||
if(dl_mode & 128)
|
||||
{
|
||||
maria_cycles += sally_ExecuteNMI( ) << 2;
|
||||
}
|
||||
|
@ -662,41 +651,30 @@ static inline void mariabank_StoreGraphic( )
|
|||
byte data = bankset_memory_read(maria_pp.w);
|
||||
if(maria_wmode)
|
||||
{
|
||||
if(maria_IsHoleyDMA())
|
||||
if (data)
|
||||
{
|
||||
maria_horizontal += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
maria_StoreCellWriteMode(write_mode_lookup[data]);
|
||||
if(maria_IsNotHoleyDMA()) maria_StoreCellWriteMode(write_mode_lookup[data]);
|
||||
}
|
||||
maria_horizontal += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef KANGAROO_MODE_SUPPORTED
|
||||
if(maria_IsHoleyDMA())
|
||||
if (data)
|
||||
{
|
||||
maria_horizontal += 4;
|
||||
if (maria_IsNotHoleyDMA()) _maria_StoreCells4(data);
|
||||
}
|
||||
else if (!data)
|
||||
#ifdef KANGAROO_MODE_SUPPORTED
|
||||
else
|
||||
{
|
||||
_maria_ClearCells4();
|
||||
}
|
||||
#else
|
||||
if(maria_IsHoleyDMA() || !data)
|
||||
{
|
||||
maria_horizontal += 4;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
_maria_StoreCells4(data);
|
||||
}
|
||||
#endif
|
||||
maria_horizontal += 4;
|
||||
|
||||
}
|
||||
maria_pp.w++;
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// StoreLineRAM
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -791,10 +769,9 @@ ITCM_CODE void mariabank_RenderScanlineTOP(void)
|
|||
{
|
||||
maria_dpp.b.l = bankset_memory_read(DPPL);
|
||||
maria_dpp.b.h = bankset_memory_read(DPPH);
|
||||
maria_h08 = bankset_memory_read(maria_dpp.w) & 32;
|
||||
maria_h16 = bankset_memory_read(maria_dpp.w) & 64;
|
||||
maria_h8_h16 = (maria_h08 ? 2048:0) | (maria_h16 ? 4096:0);
|
||||
maria_offset = bankset_memory_read(maria_dpp.w) & 15;
|
||||
u8 dl_mode = bankset_memory_read(maria_dpp.w);
|
||||
maria_h8_h16 = ((uint)dl_mode << 6) & 0x1800;
|
||||
maria_offset = dl_mode & 15;
|
||||
maria_dp.b.h = bankset_memory_read(maria_dpp.w + 1);
|
||||
maria_dp.b.l = bankset_memory_read(maria_dpp.w + 2);
|
||||
if(bankset_memory_read(maria_dpp.w) & 128)
|
||||
|
@ -810,11 +787,10 @@ ITCM_CODE void mariabank_RenderScanlineTOP(void)
|
|||
{
|
||||
maria_cycles += MARIA_CYCLES_STARTUP_SHUTDOWN_LAST_LINE_ZONE;
|
||||
maria_dpp.w += 3;
|
||||
maria_h08 = bankset_memory_read(maria_dpp.w) & 32;
|
||||
maria_h16 = bankset_memory_read(maria_dpp.w) & 64;
|
||||
maria_h8_h16 = (maria_h08 ? 2048:0) | (maria_h16 ? 4096:0);
|
||||
maria_offset = bankset_memory_read(maria_dpp.w) & 15;
|
||||
if(bankset_memory_read(maria_dpp.w) & 128)
|
||||
u8 dl_mode = bankset_memory_read(maria_dpp.w);
|
||||
maria_h8_h16 = ((uint)dl_mode << 6) & 0x1800;
|
||||
maria_offset = dl_mode & 15;
|
||||
if(dl_mode & 128)
|
||||
{
|
||||
maria_cycles += sally_ExecuteNMI( ) << 2;
|
||||
}
|
||||
|
@ -840,11 +816,10 @@ ITCM_CODE void mariabank_RenderScanline(void)
|
|||
{
|
||||
maria_cycles += MARIA_CYCLES_STARTUP_SHUTDOWN_LAST_LINE_ZONE;
|
||||
maria_dpp.w += 3;
|
||||
maria_h08 = bankset_memory_read(maria_dpp.w) & 32;
|
||||
maria_h16 = bankset_memory_read(maria_dpp.w) & 64;
|
||||
maria_h8_h16 = (maria_h08 ? 2048:0) | (maria_h16 ? 4096:0);
|
||||
maria_offset = bankset_memory_read(maria_dpp.w) & 15;
|
||||
if(bankset_memory_read(maria_dpp.w) & 128)
|
||||
u8 dl_mode = bankset_memory_read(maria_dpp.w);
|
||||
maria_h8_h16 = ((uint)dl_mode << 6) & 0x1800;
|
||||
maria_offset = dl_mode & 15;
|
||||
if(dl_mode & 128)
|
||||
{
|
||||
maria_cycles += sally_ExecuteNMI( ) << 2;
|
||||
}
|
||||
|
|
|
@ -109,6 +109,10 @@ static inline void sally_Flags(byte data)
|
|||
sally_p = (sally_p & ~(_fN | _fZ)) | ((data) & _fN) | (((data) == 0) ? _fZ : 0);
|
||||
}
|
||||
|
||||
static inline void sally_FlagsFastCmp(byte data) // For faster compare handling...
|
||||
{
|
||||
sally_p = (sally_p & 0x7C) | ((data) & _fN) | (((data) == 0) ? (_fZ|_fC) : 0);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Branch
|
||||
|
@ -1614,8 +1618,8 @@ ITCM_CODE void sally_Execute(unsigned int cycles )
|
|||
sally_IndirectX( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
goto next_inst;
|
||||
|
||||
l_0xc4:
|
||||
|
@ -1627,8 +1631,8 @@ ITCM_CODE void sally_Execute(unsigned int cycles )
|
|||
sally_ZeroPage( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
goto next_inst;
|
||||
|
||||
l_0xc6:
|
||||
|
@ -1642,10 +1646,10 @@ ITCM_CODE void sally_Execute(unsigned int cycles )
|
|||
|
||||
l_0xc9:
|
||||
sally_Immediate( );
|
||||
// sally_CMP( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
goto next_inst;
|
||||
|
||||
l_0xca:
|
||||
|
@ -1659,10 +1663,10 @@ ITCM_CODE void sally_Execute(unsigned int cycles )
|
|||
|
||||
l_0xcd:
|
||||
sally_Absolute( );
|
||||
// sally_CMP( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
goto next_inst;
|
||||
|
||||
l_0xce:
|
||||
|
@ -1677,19 +1681,37 @@ ITCM_CODE void sally_Execute(unsigned int cycles )
|
|||
|
||||
l_0xd1:
|
||||
sally_IndirectY( );
|
||||
// sally_CMP( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
sally_Delay(sally_y);
|
||||
goto next_inst;
|
||||
|
||||
l_0xd5:
|
||||
sally_ZeroPageX( );
|
||||
// sally_CMP( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
goto next_inst;
|
||||
|
||||
l_0xd9:
|
||||
sally_AbsoluteY( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
sally_Delay(sally_y);
|
||||
goto next_inst;
|
||||
|
||||
l_0xdd:
|
||||
sally_AbsoluteX( );
|
||||
//sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
sally_FlagsFastCmp(sally_a - data_cmp);
|
||||
if(sally_a > data_cmp) sally_p |= _fC;
|
||||
sally_Delay(sally_x);
|
||||
goto next_inst;
|
||||
|
||||
l_0xd6:
|
||||
|
@ -1701,24 +1723,6 @@ ITCM_CODE void sally_Execute(unsigned int cycles )
|
|||
sally_CLD( );
|
||||
goto next_inst;
|
||||
|
||||
l_0xd9:
|
||||
sally_AbsoluteY( );
|
||||
// sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_Delay(sally_y);
|
||||
goto next_inst;
|
||||
|
||||
l_0xdd:
|
||||
sally_AbsoluteX( );
|
||||
// sally_CMP( );
|
||||
data_cmp = memory_Read_Fast(sally_address.w);
|
||||
if(sally_a >= data_cmp) sally_p |= _fC; else sally_p &= ~_fC;
|
||||
sally_Flags(sally_a - data_cmp);
|
||||
sally_Delay(sally_x);
|
||||
goto next_inst;
|
||||
|
||||
l_0xde:
|
||||
sally_AbsoluteX( );
|
||||
sally_DEC( );
|
||||
|
|
Loading…
Reference in a new issue