Cleanups, try and make sandbox C89 compliant

This commit is contained in:
meepingsnesroms
2019-04-02 12:35:20 -07:00
parent 992e1cda84
commit 33002e9fb3
6 changed files with 32 additions and 22 deletions

View File

@@ -395,7 +395,7 @@ uint32_t EmuWrapper::installApplication(const QString& path){
appFile.close();
appData.data = (uint8_t*)appDataBuffer.data();
appData.size = appDataBuffer.size();
error = sandboxCommand(SANDBOX_INSTALL_APP, &appData);
error = sandboxCommand(SANDBOX_DEBUG_INSTALL_APP, &appData);
}
if(!wasPaused)

View File

@@ -184,10 +184,6 @@ uint32_t MainWindow::getEmuFeatureList(){
features |= settings->value("featureExtraKeys", false).toBool() ? FEATURE_EXT_KEYS : 0;
features |= settings->value("featureSoundStreams", false).toBool() ? FEATURE_SND_STRMS : 0;
#if defined(EMU_DEBUG)
features |= FEATURE_DEBUG;
#endif
//lazy debug overrides
//features = FEATURE_EXT_KEYS | FEATURE_EMU_HONEST | FEATURE_FAST_CPU | FEATURE_HYBRID_CPU | FEATURE_CUSTOM_FB | FEATURE_DEBUG | FEATURE_SND_STRMS;
//features = FEATURE_FAST_CPU | FEATURE_HYBRID_CPU | FEATURE_CUSTOM_FB | FEATURE_DEBUG;

View File

@@ -85,10 +85,10 @@ uint32_t armv5StateSize(void){
//armv5Cpu
size += sizeof(uint32_t) * 16;//armv5Cpu.regs
size += sizeof(uint32_t) * 2;//armv5Cpu.CPSR/SPSR
size += sizeof(uint32_t) * 3 * 6;//armv5Cpu.bank_usr/bank_svc/bank_abt/bank_und/bank_irq/bank_fiq
size += sizeof(uint32_t) * 2;//armv5Cpu.CPSR / armv5Cpu.SPSR
size += sizeof(uint32_t) * 3 * 6;//armv5Cpu.bank_(usr/svc/abt/und/irq/fiq)
size += sizeof(uint32_t) * 5;//armv5Cpu.extra_regs
size += sizeof(uint16_t) * 3;//armv5Cpu.waitingIrqs/waitingFiqs/CPAR
size += sizeof(uint16_t) * 3;//armv5Cpu.waiting(Irqs/Fiqs) / armv5Cpu.CPAR
size += sizeof(uint32_t);//armv5Cpu.vectorBase
//variables

View File

@@ -50,6 +50,7 @@ static local_cpu_state_t sandboxOldFunctionCpuState;
static mem_region_t sandboxWatchRegions[SANDBOX_MAX_WATCH_REGIONS];//code locations in m68k address space to be sandboxed
static uint16_t sandboxWatchRegionsActive;//number of used sandboxWatchRegions entrys
static uint32_t sandboxCallGuestFunction(bool fallthrough, uint32_t address, uint16_t trap, const char* prototype, ...);
#include "sandboxTrapNumToName.c.h"
@@ -150,12 +151,11 @@ static void logApiCalls(void){
uint32_t programCounter = m68k_get_reg(NULL, M68K_REG_PPC);
uint16_t instruction = m68k_get_reg(NULL, M68K_REG_IR);
if(instruction == 0x4E4F){
//Trap F/API call
if(instruction == 0x4E4F/*Trap F/API call opcode*/){
uint16_t trap = m68k_read_memory_16(programCounter + 2);
if(!ignoreTrap(trap)){
if(!ignoreTrap(trap))
debugLog("Trap F API:%s, API number:0x%04X, PC:0x%08X\n", lookupTrap(trap), trap, programCounter);
}
}
}
@@ -167,7 +167,6 @@ static bool isAlphanumeric(char chr){
static bool readable6CharsBack(uint32_t address){
uint8_t count;
for(count = 0; count < 6; count++)
if(!isAlphanumeric(m68k_read_memory_8(address - count)))
return false;
@@ -588,6 +587,12 @@ void sandboxReset(void){
uint32_t sandboxStateSize(void){
uint32_t size = 0;
size += sizeof(uint8_t) * 2;//sandboxActive / sandboxControlHandoff
size += sizeof(uint32_t) * 4;//sandboxOldFunctionCpuState.(sp/pc/a0/d0)
size += sizeof(uint16_t);//sandboxOldFunctionCpuState.sr
size += sizeof(uint32_t) * 2;//sandboxWatchRegions.(address/size)
size += sizeof(uint16_t);//sandboxWatchRegionsActive
return size;
}
@@ -846,9 +851,10 @@ void sandboxOnMemoryAccess(uint32_t address, uint8_t size, bool write, uint32_t
bool sandboxRunning(void){
uint32_t pc = m68k_get_reg(NULL, M68K_REG_PC);
uint16_t memRegion;
//this is used to capture full logs when running from specific locations
for(uint16_t memRegion = 0; memRegion < sandboxWatchRegionsActive; memRegion++){
for(memRegion = 0; memRegion < sandboxWatchRegionsActive; memRegion++){
if(pc >= sandboxWatchRegions[memRegion].address && pc < sandboxWatchRegions[memRegion].address + sandboxWatchRegions[memRegion].size)
return true;
}
@@ -869,7 +875,7 @@ void sandboxReturn(void){
uint16_t sandboxSetWatchRegion(uint32_t address, uint32_t size){
uint16_t index;
//cant get 0 sized memory area
//cant watch 0 sized memory area
if(size < 1)
return 0xFFFF;

View File

@@ -53,6 +53,14 @@ double palmClk32Sysclks;//how many SYSCLKs have happened in the current CLK32
uint32_t emulatorInit(buffer_t palmRomDump, buffer_t palmBootDump, uint32_t enabledEmuFeatures){
//only accept valid non debug features from the user
enabledEmuFeatures &= FEATURE_RAM_HUGE | FEATURE_FAST_CPU | FEATURE_HYBRID_CPU | FEATURE_CUSTOM_FB | FEATURE_SYNCED_RTC | FEATURE_HLE_APIS | FEATURE_EMU_HONEST | FEATURE_EXT_KEYS | FEATURE_SND_STRMS;
#if defined(EMU_DEBUG)
//enable debug features if compiled in debug mode
enabledEmuFeatures |= FEATURE_DEBUG;
#endif
if(emulatorInitialized)
return EMU_ERROR_RESOURCE_LOCKED;
@@ -189,10 +197,10 @@ uint32_t emulatorGetStateSize(void){
size += sizeof(uint8_t) * 6;//pwm1Fifo[6]
size += sizeof(uint8_t) * 2;//pwm1(Read/Write)
size += sizeof(uint8_t) * 7;//palmMisc
size += sizeof(uint32_t) * 4;//palmEmuFeatures.src / palmEmuFeatures.dst / palmEmuFeatures.size / palmEmuFeatures.value
size += sizeof(uint32_t) * 4;//palmEmuFeatures.(src/dst/size/value)
size += sizeof(uint64_t);//palmSdCard.command
size += sizeof(uint8_t) * 8;//palmSdCard.commandBitsRemaining / palmSdCard.runningCommand / palmSdCard.commandIsAcmd /palmSdCard.allowInvalidCrc / palmSdCard.chipSelect / palmSdCard.receivingCommand / palmSdCard.inIdleState / palmSdCard.writeProtectSwitch
size += sizeof(uint16_t) * 2;//palmSdCard.responseReadPosition / palmSdCard.responseWritePosition
size += sizeof(uint8_t) * 8;//palmSdCard.(commandBitsRemaining/runningCommand/commandIsAcmd/allowInvalidCrc/chipSelect/receivingCommand/inIdleState/writeProtectSwitch)
size += sizeof(uint16_t) * 2;//palmSdCard.response(Read/Write)Position
size += sizeof(int8_t);//palmSdCard.responseReadPositionBit
size += sizeof(uint32_t) * 3;//palmSdCard.runningCommandVars
size += SD_CARD_BLOCK_DATA_PACKET_SIZE;//palmSdCard.runningCommandPacket

View File

@@ -70,10 +70,10 @@ void pdiUsbD12Reset(void){
uint32_t pdiUsbD12StateSize(void){
uint32_t size = 0;
size += sizeof(uint8_t);
size += sizeof(uint64_t);
size += PDIUSBD12_TRANSFER_BUFFER_SIZE * PDIUSBD12_FIFO_TOTAL_FIFOS;
size += sizeof(uint16_t) * PDIUSBD12_FIFO_TOTAL_FIFOS * 2;
size += sizeof(uint8_t);//pdiUsbD12Command
size += sizeof(uint64_t);//pdiUsbD12CommandState
size += PDIUSBD12_TRANSFER_BUFFER_SIZE * PDIUSBD12_FIFO_TOTAL_FIFOS;//pdiUsbD12FifoBuffer
size += sizeof(uint16_t) * PDIUSBD12_FIFO_TOTAL_FIFOS * 2;//pdiUsbD12(Read/Write)Position
return size;
}