diff options
Diffstat (limited to 'source/fxemu.c')
-rw-r--r-- | source/fxemu.c | 181 |
1 files changed, 7 insertions, 174 deletions
diff --git a/source/fxemu.c b/source/fxemu.c index ffb82be..c16ee58 100644 --- a/source/fxemu.c +++ b/source/fxemu.c @@ -13,133 +13,21 @@ uint32_t(**fx_ppfFunctionTable)(uint32_t) = 0; void (**fx_ppfPlotTable)() = 0; void (**fx_ppfOpcodeTable)() = 0; -#if 0 -void fx_setCache() -{ - uint32_t c; - GSU.bCacheActive = true; - GSU.pvRegisters[0x3e] &= 0xf0; - c = (uint32_t)GSU.pvRegisters[0x3e]; - c |= ((uint32_t)GSU.pvRegisters[0x3f]) << 8; - if (c == GSU.vCacheBaseReg) - return; - GSU.vCacheBaseReg = c; - GSU.vCacheFlags = 0; - if (c < (0x10000 - 512)) - { - uint8_t const* t = &ROM(c); - memcpy(GSU.pvCache, t, 512); - } - else - { - uint8_t const* t1; - uint8_t const* t2; - uint32_t i = 0x10000 - c; - t1 = &ROM(c); - t2 = &ROM(0); - memcpy(GSU.pvCache, t1, i); - memcpy(&GSU.pvCache[i], t2, 512 - i); - } -} -#endif - void FxCacheWriteAccess(uint16_t vAddress) { -#if 0 - if (!GSU.bCacheActive) - { - uint8_t v = GSU.pvCache[GSU.pvCache[vAddress & 0x1ff]; - fx_setCache(); - GSU.pvCache[GSU.pvCache[vAddress & 0x1ff] = v; - } -#endif - if ((vAddress & 0x00f) == 0x00f) - GSU.vCacheFlags |= 1 << ((vAddress & 0x1f0) >> 4); + if ((vAddress & 0x00f) == 0x00f) + GSU.vCacheFlags |= 1 << ((vAddress & 0x1f0) >> 4); } - void FxFlushCache() +void FxFlushCache() { GSU.vCacheFlags = 0; GSU.vCacheBaseReg = 0; GSU.bCacheActive = false; - // GSU.vPipe = 0x1; -} - -static void fx_backupCache() -{ -#if 0 - uint32_t i; - uint32_t v = GSU.vCacheFlags; - uint32_t c = USEX16(GSU.vCacheBaseReg); - if (v) - for (i = 0; i < 32; i++) - { - if (v & 1) - { - if (c < (0x10000 - 16)) - { - uint8_t* t = &GSU.pvPrgBank[c]; - memcpy(&GSU.avCacheBackup[i << 4], t, 16); - memcpy(t, &GSU.pvCache[i << 4], 16); - } - else - { - uint8_t* t1; - uint8_t* t2; - uint32_t a = 0x10000 - c; - t1 = &GSU.pvPrgBank[c]; - t2 = &GSU.pvPrgBank[0]; - memcpy(&GSU.avCacheBackup[i << 4], t1, a); - memcpy(t1, &GSU.pvCache[i << 4], a); - memcpy(&GSU.avCacheBackup[(i << 4) + a], t2, 16 - a); - memcpy(t2, &GSU.pvCache[(i << 4) + a], 16 - a); - } - } - c = USEX16(c + 16); - v >>= 1; - } -#endif -} - -static void fx_restoreCache() -{ -#if 0 - uint32_t i; - uint32_t v = GSU.vCacheFlags; - uint32_t c = USEX16(GSU.vCacheBaseReg); - if (v) - for (i = 0; i < 32; i++) - { - if (v & 1) - { - if (c < (0x10000 - 16)) - { - uint8_t* t = &GSU.pvPrgBank[c]; - memcpy(t, &GSU.avCacheBackup[i << 4], 16); - memcpy(&GSU.pvCache[i << 4], t, 16); - } - else - { - uint8_t* t1; - uint8_t* t2; - uint32_t a = 0x10000 - c; - t1 = &GSU.pvPrgBank[c]; - t2 = &GSU.pvPrgBank[0]; - memcpy(t1, &GSU.avCacheBackup[i << 4], a); - memcpy(&GSU.pvCache[i << 4], t1, a); - memcpy(t2, &GSU.avCacheBackup[(i << 4) + a], 16 - a); - memcpy(&GSU.pvCache[(i << 4) + a], t2, 16 - a); - } - } - c = USEX16(c + 16); - v >>= 1; - } -#endif } void fx_flushCache() { - fx_restoreCache(); GSU.vCacheFlags = 0; GSU.bCacheActive = false; } @@ -197,10 +85,6 @@ static void fx_readRegisterSpace() i |= ((int)(!!(p[GSU_SCMR] & 0x20))) << 1; GSU.vScreenHeight = GSU.vScreenRealHeight = avHeight[i]; GSU.vMode = p[GSU_SCMR] & 0x03; -#if 0 - if (GSU.vMode == 2) - error illegal color depth GSU.vMode; -#endif if (i == 3) GSU.vScreenSize = (256 / 8) * (256 / 8) * 32; else @@ -210,14 +94,9 @@ static void fx_readRegisterSpace() /* OBJ Mode (for drawing into sprites) */ GSU.vScreenHeight = 256; } -#if 0 - if (GSU.pvScreenBase + GSU.vScreenSize > GSU.pvRam + (GSU.nRamBanks * 65536)) - error illegal address for screen base register -#else if (GSU.pvScreenBase + GSU.vScreenSize > GSU.pvRam + (GSU.nRamBanks * 65536)) GSU.pvScreenBase = GSU.pvRam + (GSU.nRamBanks * 65536) - GSU.vScreenSize; -#endif - GSU.pfPlot = fx_apfPlotTable[GSU.vMode]; + GSU.pfPlot = fx_apfPlotTable[GSU.vMode]; GSU.pfRpix = fx_apfPlotTable[GSU.vMode + 5]; fx_ppfOpcodeTable[0x04c] = GSU.pfPlot; @@ -226,8 +105,6 @@ static void fx_readRegisterSpace() fx_ppfOpcodeTable[0x34c] = GSU.pfRpix; fx_computeScreenPointers(); - - fx_backupCache(); } void fx_dirtySCBR() @@ -395,8 +272,6 @@ static void fx_writeRegisterSpace() p[GSU_RAMBR] = (uint8_t)GSU.vRamBankReg; p[GSU_CBR] = (uint8_t)GSU.vCacheBaseReg; p[GSU_CBR + 1] = (uint8_t)(GSU.vCacheBaseReg >> 8); - - fx_restoreCache(); } /* Reset the FxChip */ @@ -405,30 +280,15 @@ void FxReset(struct FxInit_s* psFxInfo) int i; static uint32_t(**appfFunction[])(uint32_t) = { - &fx_apfFunctionTable[0], -#if 0 - &fx_a_apfFunctionTable[0], - &fx_r_apfFunctionTable[0], - &fx_ar_apfFunctionTable[0], -#endif + &fx_apfFunctionTable[0] }; static void (**appfPlot[])() = { - &fx_apfPlotTable[0], -#if 0 - &fx_a_apfPlotTable[0], - &fx_r_apfPlotTable[0], - &fx_ar_apfPlotTable[0], -#endif + &fx_apfPlotTable[0] }; static void (**appfOpcode[])() = { - &fx_apfOpcodeTable[0], -#if 0 - &fx_a_apfOpcodeTable[0], - &fx_r_apfOpcodeTable[0], - &fx_ar_apfOpcodeTable[0], -#endif + &fx_apfOpcodeTable[0] }; /* Get function pointers for the current emulation mode */ @@ -536,22 +396,12 @@ int FxEmulate(uint32_t nInstructions) { CF(G); fx_writeRegisterSpace(); -#if 0 - GSU.vIllegalAddress = (GSU.vPrgBankReg << 24) | R15; - return FX_ERROR_ILLEGAL_ADDRESS; -#else return 0; -#endif } /* Execute GSU session */ CF(IRQ); - /* - if (GSU.bBreakPoint) - vCount = fx_ppfFunctionTable[FX_FUNCTION_RUN_TO_BREAKPOINT](nInstructions); - else - */ vCount = fx_ppfFunctionTable[FX_FUNCTION_RUN](nInstructions); /* Store GSU registers */ @@ -564,18 +414,6 @@ int FxEmulate(uint32_t nInstructions) return vCount; } -/* Breakpoints */ -/* -void FxBreakPointSet(uint32_t vAddress) -{ - GSU.bBreakPoint = true; - GSU.vBreakPoint = USEX16(vAddress); -} -void FxBreakPointClear() -{ - GSU.bBreakPoint = false; -}*/ - /* Step by step execution */ int FxStepOver(uint32_t nInstructions) { @@ -586,12 +424,7 @@ int FxStepOver(uint32_t nInstructions) if (!fx_checkStartAddress()) { CF(G); -#if 0 - GSU.vIllegalAddress = (GSU.vPrgBankReg << 24) | R15; - return FX_ERROR_ILLEGAL_ADDRESS; -#else return 0; -#endif } if (PIPE >= 0xf0) |