Update ARM debug functions, allow QT port to compile without OS 5 support

This commit is contained in:
meepingsnesroms
2019-06-12 10:23:45 -07:00
parent 1bb71d8aec
commit 452d5030a1
7 changed files with 59 additions and 7 deletions

View File

@@ -149,6 +149,10 @@ void EmuWrapper::writeOutSaves(){
}
uint32_t EmuWrapper::init(const QString& assetPath, bool useOs5, uint32_t features, bool fastBoot){
#if !defined(EMU_SUPPORT_PALM_OS5)
useOs5 = false;
#endif
if(!emuRunning && !emuInited){
//start emu
uint32_t error;
@@ -435,6 +439,7 @@ void EmuWrapper::setKeyValue(uint8_t key, bool pressed){
emuInput.buttonDown = pressed;
break;
#if defined(EMU_SUPPORT_PALM_OS5)
case BUTTON_LEFT:
emuInput.buttonLeft = pressed;
break;
@@ -446,6 +451,7 @@ void EmuWrapper::setKeyValue(uint8_t key, bool pressed){
case BUTTON_CENTER:
emuInput.buttonCenter = pressed;
break;
#endif
case BUTTON_CALENDAR:
emuInput.buttonCalendar = pressed;
@@ -483,12 +489,14 @@ QVector<uint64_t>& EmuWrapper::debugGetDuplicateLogEntryCount(){
QString EmuWrapper::debugGetCpuRegisterString(){
QString regString = "";
#if defined(EMU_SUPPORT_PALM_OS5)
if(palmEmulatingTungstenT3){
for(uint8_t regs = 0; regs < 16; regs++)
regString += QString::asprintf("R%d:0x%08X\n", regs, pxa255GetRegister(regs));
regString.resize(regString.size() - 1);//remove extra '\n'
}
else{
#endif
for(uint8_t dRegs = 0; dRegs < 8; dRegs++)
regString += QString::asprintf("D%d:0x%08X\n", dRegs, flx68000GetRegister(dRegs));
for(uint8_t aRegs = 0; aRegs < 8; aRegs++)
@@ -496,11 +504,17 @@ QString EmuWrapper::debugGetCpuRegisterString(){
regString += QString::asprintf("SP:0x%08X\n", flx68000GetRegister(15));
regString += QString::asprintf("PC:0x%08X\n", flx68000GetRegister(16));
regString += QString::asprintf("SR:0x%04X", flx68000GetRegister(17));
#if defined(EMU_SUPPORT_PALM_OS5)
}
#endif
return regString;
}
uint64_t EmuWrapper::debugGetEmulatorMemory(uint32_t address, uint8_t size){
#if defined(EMU_SUPPORT_PALM_OS5)
if(palmEmulatingTungstenT3)
return pxa255ReadArbitraryMemory(address, size);
#endif
return flx68000ReadArbitraryMemory(address, size);
}

View File

@@ -31,6 +31,13 @@ SettingsManager::SettingsManager(QWidget* parent) :
ui->featureHleApis->setChecked(settings->value("featureHleApis", false).toBool());
ui->featureDurable->setChecked(settings->value("featureDurable", false).toBool());
#if !defined(EMU_SUPPORT_PALM_OS5)
ui->useOs5->hide();
ui->selectLeftKey->hide();
ui->selectRightKey->hide();
ui->selectCenterKey->hide();
#endif
setKeySelectorState(-1);
updateButtonKeys();
}

View File

@@ -13,7 +13,7 @@ v1.1.0 to v3.2.0(*** ** 2020 - *** ** 2020)
RetroArch GUI:
//TODO: allow adding more content after boot
//TODO: get EMU_MANAGE_HOST_CPU_PIPELINE working on other platforms then the main 4
//TODO: get OpenMP working with RetroArch
//TODO: get OpenMP working with RetroArch(already works but breaks the no external libs rule)
//FIXED: when compiling with "make platform=windows_x86_64" the dll wont load(theres a really good chance its because "libgomp-1.dll"(the OpenMP handler library) is missing from the RetroArch folder)(fixed by disableing OpenMP :( )
Qt GUI:

View File

@@ -2,6 +2,7 @@
#include <stdbool.h>
#include <setjmp.h>
#include "pxa255.h"
#include "pxa255_DMA.h"
#include "pxa255_DSP.h"
#include "pxa255_GPIO.h"
@@ -64,7 +65,7 @@ bool pxa255Init(uint8_t** returnRom, uint8_t** returnRam){
mem_offset += TUNGSTEN_T3_RAM_SIZE;
//memory regions that are not directly mapped to a buffer are not added to mem_areas
//adding them will cause SIGSEGVs
//adding them causes SIGSEGVs
//accessors
//default
@@ -247,3 +248,29 @@ void pxa255Execute(bool wantVideo){
uint32_t pxa255GetRegister(uint8_t reg){
return reg_pc(reg);
}
uint64_t pxa255ReadArbitraryMemory(uint32_t address, uint8_t size){
uint64_t data = UINT64_MAX;//invalid access
switch(size){
case 8:
if(read_byte_map[address >> 26] != bad_read_byte){
data = read_byte_map[address >> 26](address);
}
break;
case 16:
if(read_half_map[address >> 26] != bad_read_half){
data = read_half_map[address >> 26](address);
}
break;
case 32:
if(read_word_map[address >> 26] != bad_read_word){
data = read_word_map[address >> 26](address);
}
break;
}
return data;
}

View File

@@ -23,5 +23,7 @@ void pxa255LoadState(uint8_t* data);
void pxa255Execute(bool wantVideo);//runs the CPU for 1 frame
uint32_t pxa255GetRegister(uint8_t reg);//only for debugging
#define pxa255GetPc() pxa255GetRegister(15)
uint64_t pxa255ReadArbitraryMemory(uint32_t address, uint8_t size);//only for debugging
#endif

View File

@@ -26,12 +26,12 @@ static uint32_t pxa255_io_read_word(uint32_t addr){
case PXA255_BTUART_BASE >> 16:
case PXA255_STUART_BASE >> 16:
//need to implement these
debugLog("Unimplemented 32 bit PXA255 register read:0x%08X\n", addr);
debugLog("Unimplemented 32 bit PXA255 register read:0x%08X, PC:0x%08X\n", addr, pxa255GetPc());
out = 0x00000000;
break;
default:
debugLog("Invalid 32 bit PXA255 register read:0x%08X\n", addr);
debugLog("Invalid 32 bit PXA255 register read:0x%08X, PC:0x%08X\n", addr, pxa255GetPc());
out = 0x00000000;
break;
}
@@ -65,11 +65,11 @@ static void pxa255_io_write_word(uint32_t addr, uint32_t value){
case PXA255_BTUART_BASE >> 16:
case PXA255_STUART_BASE >> 16:
//need to implement these
debugLog("Unimplemented 32 bit PXA255 register write:0x%08X, value:0x%08X\n", addr, value);
debugLog("Unimplemented 32 bit PXA255 register write:0x%08X, value:0x%08X, PC:0x%08X\n", addr, value, pxa255GetPc());
break;
default:
debugLog("Invalid 32 bit PXA255 register write:0x%08X, value:0x%08X\n", addr, value);
debugLog("Invalid 32 bit PXA255 register write:0x%08X, value:0x%08X, PC:0x%08X\n", addr, value, pxa255GetPc());
break;
}
}
@@ -87,11 +87,13 @@ static void pxa255_lcd_write_word(uint32_t addr, uint32_t value){
}
static uint32_t pxa255_memctrl_read_word(uint32_t addr){
//MEMCTRL only governs timing, refresh and protocol configs, not mapping, should be safe to ignore
debugLog("32 bit PXA255 MEMCTRL register read:0x%08X\n", addr);
return 0x00000000;
}
static void pxa255_memctrl_write_word(uint32_t addr, uint32_t value){
//MEMCTRL only governs timing, refresh and protocol configs, not mapping, should be safe to ignore
debugLog("32 bit PXA255 MEMCTRL register write:0x%08X, value:0x%08X\n", addr, value);
}

View File

@@ -5,7 +5,7 @@
#define REG_SAR 1
#define REG_TAR 2
#define REG_CR 3
#define REG_CSR 4
#define REG_CSR 4
static void pxa255dmaPrvChannelRegWrite(_UNUSED_ Pxa255dma* dma, UInt8 channel, UInt8 reg, UInt32 val){