From 9b09d19e198ded15cf63bb2833b7afea2b73e2e3 Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Wed, 22 May 2019 14:51:00 -0700 Subject: [PATCH] Switch to Tungsten T3, widescreen is more important than a keyboard --- qtBuildSystem/Mu/Mu.pro | 4 +- qtBuildSystem/Mu/emuwrapper.cpp | 2 +- roadmap.txt | 2 +- src/emulator.c | 76 ++++++++++++------------- src/emulator.h | 10 ++-- src/fileLauncher/launcher.c | 22 ++++--- src/makefile.all | 2 +- src/pxa255/pxa255.c | 12 ++-- src/{tungstenCBus.c => tungstenT3Bus.c} | 0 src/{tungstenCBus.h => tungstenT3Bus.h} | 0 10 files changed, 67 insertions(+), 63 deletions(-) rename src/{tungstenCBus.c => tungstenT3Bus.c} (100%) rename src/{tungstenCBus.h => tungstenT3Bus.h} (100%) diff --git a/qtBuildSystem/Mu/Mu.pro b/qtBuildSystem/Mu/Mu.pro index 17fc4e4..0167dfc 100644 --- a/qtBuildSystem/Mu/Mu.pro +++ b/qtBuildSystem/Mu/Mu.pro @@ -158,7 +158,7 @@ support_palm_os5{ ../../src/armv5te/thumb_interpreter.cpp \ ../../src/armv5te/mem.c \ ../../src/armv5te/mmu.c \ - ../../src/tungstenCBus.c + ../../src/tungstenT3Bus.c HEADERS += \ ../../src/pxa255/pxa255_CPU.h \ @@ -187,7 +187,7 @@ support_palm_os5{ ../../src/armv5te/mmu.h \ ../../src/armv5te/armsnippets.h \ ../../src/armv5te/literalpool.h \ - ../../src/tungstenCBus.h + ../../src/tungstenT3Bus.h } CONFIG += c++11 diff --git a/qtBuildSystem/Mu/emuwrapper.cpp b/qtBuildSystem/Mu/emuwrapper.cpp index dde21cd..bfe027c 100644 --- a/qtBuildSystem/Mu/emuwrapper.cpp +++ b/qtBuildSystem/Mu/emuwrapper.cpp @@ -477,7 +477,7 @@ QString EmuWrapper::debugGetCpuRegisterString(){ QString regString = ""; #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ + 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' diff --git a/roadmap.txt b/roadmap.txt index b2c86e8..6832b21 100644 --- a/roadmap.txt +++ b/roadmap.txt @@ -11,7 +11,7 @@ add Dragonball OG/EZ/VZ CPU builtin LCD controller support too muExpDriver, some v1.1.0 to v3.2.0(*** ** 2020 - *** ** 2020) Core: -add Palm Tungsten C support +add Palm Tungsten T3 support ------------------------------------------ v1.0.0 to v1.1.0(Feb 25 2019 - Easter 2019) diff --git a/src/emulator.c b/src/emulator.c index 286551e..05c9658 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -18,7 +18,7 @@ #include "specs/emuFeatureRegisterSpec.h" #if defined(EMU_SUPPORT_PALM_OS5) -#include "tungstenCBus.h" +#include "tungstenT3Bus.h" #include "pxa255/pxa255.h" #endif @@ -33,7 +33,7 @@ //0xFFFFF000<->0xFFFFFDFF Hardware Registers //0xFFFFFE00<->0xFFFFFFFF Bootloader, only reads from UART into RAM and jumps to it, never executed in consumer Palms -//Memory map of Tungsten C +//Memory map of Tungsten T3 //This is a map of the boot address ranges, it can be(and is) changed with the MMU //0x00000000<->0x003FFFFF ROM //0xA0000000<->0xA3FFFFFF RAM @@ -45,7 +45,7 @@ static bool emulatorInitialized = false; #if defined(EMU_SUPPORT_PALM_OS5) -bool palmEmulatingTungstenC; +bool palmEmulatingTungstenT3; #endif uint8_t* palmRam; uint8_t* palmRom; @@ -63,7 +63,7 @@ double palmClockMultiplier;//used by the emulator to overclock the emulated P #if defined(EMU_SUPPORT_PALM_OS5) -static void emulatorTungstenCFrame(void){ +static void emulatorTungstenT3Frame(void){ //CPU pxa255Execute(); } @@ -94,10 +94,10 @@ uint32_t emulatorInit(uint8_t* palmRomData, uint32_t palmRomSize, uint8_t* palmB #if defined(EMU_SUPPORT_PALM_OS5) //0x00000004 is boot program counter on 68k, its just 0x00000000 on ARM - palmEmulatingTungstenC = !(palmRomData[0x4] || palmRomData[0x5] || palmRomData[0x6] || palmRomData[0x7]); + palmEmulatingTungstenT3 = !(palmRomData[0x4] || palmRomData[0x5] || palmRomData[0x6] || palmRomData[0x7]); - if(palmEmulatingTungstenC){ - //emulating Tungsten C + if(palmEmulatingTungstenT3){ + //emulating Tungsten T3 bool dynarecInited = false; dynarecInited = pxa255Init(&palmRom, &palmRam); @@ -111,10 +111,10 @@ uint32_t emulatorInit(uint8_t* palmRomData, uint32_t palmRomSize, uint8_t* palmB pxa255Deinit(); return EMU_ERROR_OUT_OF_MEMORY; } - memcpy(palmRom, palmRomData, uintMin(palmRomSize, TUNGSTEN_C_ROM_SIZE)); - if(palmRomSize < TUNGSTEN_C_ROM_SIZE) - memset(palmRom + palmRomSize, 0x00, TUNGSTEN_C_ROM_SIZE - palmRomSize); - memset(palmRam, 0x00, TUNGSTEN_C_RAM_SIZE); + memcpy(palmRom, palmRomData, uintMin(palmRomSize, TUNGSTEN_T3_ROM_SIZE)); + if(palmRomSize < TUNGSTEN_T3_ROM_SIZE) + memset(palmRom + palmRomSize, 0x00, TUNGSTEN_T3_ROM_SIZE - palmRomSize); + memset(palmRam, 0x00, TUNGSTEN_T3_RAM_SIZE); memset(palmFramebuffer, 0x00, 320 * 320 * sizeof(uint16_t));//TODO:PXA255 code doesnt always output a picture like my SED1376 code, so clear the buffer to prevent garbage from being displayed before the first render memset(palmAudio, 0x00, AUDIO_SAMPLES_PER_FRAME * 2/*channels*/ * sizeof(int16_t)); memset(&palmInput, 0x00, sizeof(palmInput)); @@ -127,7 +127,7 @@ uint32_t emulatorInit(uint8_t* palmRomData, uint32_t palmRomSize, uint8_t* palmB palmCycleCounter = 0.0; palmEmuFeatures.info = enabledEmuFeatures; - //initialize components, I dont think theres much in a Tungsten C + //initialize components, I dont think theres much in a Tungsten T3 pxa255Framebuffer = palmFramebuffer; blip_set_rates(palmAudioResampler, AUDIO_CLOCK_RATE, AUDIO_SAMPLE_RATE); sandboxInit(); @@ -193,7 +193,7 @@ uint32_t emulatorInit(uint8_t* palmRomData, uint32_t palmRomSize, uint8_t* palmB void emulatorDeinit(void){ if(emulatorInitialized){ #if defined(EMU_SUPPORT_PALM_OS5) - if(!palmEmulatingTungstenC){ + if(!palmEmulatingTungstenT3){ #endif free(palmRom); free(palmRam); @@ -204,7 +204,7 @@ void emulatorDeinit(void){ free(palmAudio); blip_delete(palmAudioResampler); #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC) + if(palmEmulatingTungstenT3) pxa255Deinit(); #endif free(palmSdCard.flashChipData); @@ -215,8 +215,8 @@ void emulatorDeinit(void){ void emulatorHardReset(void){ //equivalent to taking the battery out and putting it back in #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ - memset(palmRam, 0x00, TUNGSTEN_C_RAM_SIZE); + if(palmEmulatingTungstenT3){ + memset(palmRam, 0x00, TUNGSTEN_T3_RAM_SIZE); emulatorSoftReset(); sdCardReset(); pxa255SetRtc(0, 0, 0, 0); @@ -235,7 +235,7 @@ void emulatorHardReset(void){ void emulatorSoftReset(void){ //equivalent to pushing the reset button on the back of the device #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ + if(palmEmulatingTungstenT3){ palmEmuFeatures.value = 0x00000000; palmClockMultiplier = 1.00; pxa255Reset(); @@ -259,7 +259,7 @@ void emulatorSoftReset(void){ void emulatorSetRtc(uint16_t days, uint8_t hours, uint8_t minutes, uint8_t seconds){ #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC) + if(palmEmulatingTungstenT3) pxa255SetRtc(days, hours, minutes, seconds); else #endif @@ -274,10 +274,10 @@ uint32_t emulatorGetStateSize(void){ size += sizeof(uint64_t);//palmSdCard.flashChipSize, needs to be done first to verify the malloc worked size += sizeof(uint16_t) * 2;//palmFramebuffer(Width/Height) #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ + if(palmEmulatingTungstenT3){ size += pxa255StateSize(); size += expansionHardwareStateSize(); - size += TUNGSTEN_C_RAM_SIZE;//system RAM buffer + size += TUNGSTEN_T3_RAM_SIZE;//system RAM buffer } else{ #endif @@ -318,7 +318,7 @@ bool emulatorSaveState(uint8_t* data, uint32_t size){ //state validation, wont load states that are not from the same state version #if defined(EMU_SUPPORT_PALM_OS5) - writeStateValue32(data + offset, SAVE_STATE_VERSION | (palmEmulatingTungstenC ? SAVE_STATE_FOR_TUNGSTEN_C : 0)); + writeStateValue32(data + offset, SAVE_STATE_VERSION | (palmEmulatingTungstenT3 ? SAVE_STATE_FOR_TUNGSTEN_T3 : 0)); #else writeStateValue32(data + offset, SAVE_STATE_VERSION); #endif @@ -339,7 +339,7 @@ bool emulatorSaveState(uint8_t* data, uint32_t size){ offset += sizeof(uint16_t); #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ + if(palmEmulatingTungstenT3){ //chips pxa255SaveState(data + offset); offset += pxa255StateSize(); @@ -347,8 +347,8 @@ bool emulatorSaveState(uint8_t* data, uint32_t size){ offset += expansionHardwareStateSize(); //memory - memcpy(data + offset, palmRam, TUNGSTEN_C_RAM_SIZE); - offset += TUNGSTEN_C_RAM_SIZE; + memcpy(data + offset, palmRam, TUNGSTEN_T3_RAM_SIZE); + offset += TUNGSTEN_T3_RAM_SIZE; } else{ #endif @@ -457,7 +457,7 @@ bool emulatorLoadState(uint8_t* data, uint32_t size){ //state validation, wont load states that are not from the same state version #if defined(EMU_SUPPORT_PALM_OS5) - if(readStateValue32(data + offset) != (SAVE_STATE_VERSION | (palmEmulatingTungstenC ? SAVE_STATE_FOR_TUNGSTEN_C : 0))) + if(readStateValue32(data + offset) != (SAVE_STATE_VERSION | (palmEmulatingTungstenT3 ? SAVE_STATE_FOR_TUNGSTEN_T3 : 0))) return false; #else if(readStateValue32(data + offset) != SAVE_STATE_VERSION) @@ -484,7 +484,7 @@ bool emulatorLoadState(uint8_t* data, uint32_t size){ offset += sizeof(uint16_t); #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ + if(palmEmulatingTungstenT3){ //chips pxa255LoadState(data + offset); offset += pxa255StateSize(); @@ -492,8 +492,8 @@ bool emulatorLoadState(uint8_t* data, uint32_t size){ offset += expansionHardwareStateSize(); //memory - memcpy(palmRam, data + offset, TUNGSTEN_C_RAM_SIZE); - offset += TUNGSTEN_C_RAM_SIZE; + memcpy(palmRam, data + offset, TUNGSTEN_T3_RAM_SIZE); + offset += TUNGSTEN_T3_RAM_SIZE; } else{ #endif @@ -603,19 +603,19 @@ bool emulatorLoadState(uint8_t* data, uint32_t size){ uint32_t emulatorGetRamSize(void){ #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC) - return TUNGSTEN_C_RAM_SIZE; + if(palmEmulatingTungstenT3) + return TUNGSTEN_T3_RAM_SIZE; #endif return M515_RAM_SIZE; } bool emulatorSaveRam(uint8_t* data, uint32_t size){ #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ - if(size < TUNGSTEN_C_RAM_SIZE) + if(palmEmulatingTungstenT3){ + if(size < TUNGSTEN_T3_RAM_SIZE) return false; - memcpy(data, palmRam, TUNGSTEN_C_RAM_SIZE); + memcpy(data, palmRam, TUNGSTEN_T3_RAM_SIZE); } else{ #endif @@ -633,11 +633,11 @@ bool emulatorSaveRam(uint8_t* data, uint32_t size){ bool emulatorLoadRam(uint8_t* data, uint32_t size){ #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC){ - if(size < TUNGSTEN_C_RAM_SIZE) + if(palmEmulatingTungstenT3){ + if(size < TUNGSTEN_T3_RAM_SIZE) return false; - memcpy(palmRam, data, TUNGSTEN_C_RAM_SIZE); + memcpy(palmRam, data, TUNGSTEN_T3_RAM_SIZE); } else{ #endif @@ -728,8 +728,8 @@ void emulatorEjectSdCard(void){ void emulatorRunFrame(void){ #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC) - emulatorTungstenCFrame(); + if(palmEmulatingTungstenT3) + emulatorTungstenT3Frame(); else #endif emulatorM515Frame(); diff --git a/src/emulator.h b/src/emulator.h index 633f2b1..57b594f 100644 --- a/src/emulator.h +++ b/src/emulator.h @@ -16,7 +16,7 @@ extern "C" { #include "specs/emuFeatureRegisterSpec.h"//for feature names //DEFINE INFO!!! -//define EMU_SUPPORT_PALM_OS5 to compile in Tungsten C support(not reccomended for low power devices) +//define EMU_SUPPORT_PALM_OS5 to compile in Tungsten T3 support(not reccomended for low power devices) //define EMU_MULTITHREADED to speed up long loops //define EMU_MANAGE_HOST_CPU_PIPELINE to optimize the CPU pipeline for the most common cases //define EMU_NO_SAFETY to remove all safety checks @@ -57,14 +57,14 @@ static void debugLog(char* str, ...){}; #define SD_CARD_NCR_BYTES 1//how many 0xFF bytes come before the R1 response #define SAVE_STATE_VERSION 0x00000001 #if defined(EMU_SUPPORT_PALM_OS5) -#define SAVE_STATE_FOR_TUNGSTEN_C 0x80000000 +#define SAVE_STATE_FOR_TUNGSTEN_T3 0x80000000 #endif //system constants #if defined(EMU_SUPPORT_PALM_OS5) -#define TUNGSTEN_C_CPU_CRYSTAL_FREQUENCY 3686400 -#define TUNGSTEN_C_RTC_CRYSTAL_FREQUENCY 32768 +#define TUNGSTEN_T3_CPU_CRYSTAL_FREQUENCY 3686400 +#define TUNGSTEN_T3_RTC_CRYSTAL_FREQUENCY 32768 #endif #define M515_CRYSTAL_FREQUENCY 32768 #define AUDIO_SAMPLES_PER_FRAME (AUDIO_SAMPLE_RATE / EMU_FPS) @@ -157,7 +157,7 @@ typedef struct{ //emulator data, some are GUI interface variables, some should be left alone #if defined(EMU_SUPPORT_PALM_OS5) -extern bool palmEmulatingTungstenC;//read allowed, but not advised +extern bool palmEmulatingTungstenT3;//read allowed, but not advised #endif extern uint8_t* palmRom;//dont touch extern uint8_t* palmRam;//access allowed to read save RAM without allocating a giant buffer, but endianness must be taken into account diff --git a/src/fileLauncher/launcher.c b/src/fileLauncher/launcher.c index 8238bd3..0a5b259 100644 --- a/src/fileLauncher/launcher.c +++ b/src/fileLauncher/launcher.c @@ -7,6 +7,9 @@ #include "fatFs/ff.h" +#define LAUNCHER_SD_CARD_SIZE (32 * 0x100000) //SD card size for the default boot configuration +#define LAUNCHER_BOOT_TIMEOUT 10 //in seconds + bool launcherSaveSdCardImage; @@ -15,7 +18,7 @@ static void launcherInstallPassMeM515(void){ } #if defined(EMU_SUPPORT_PALM_OS5) -static void launcherInstallPassMeTungstenC(void){ +static void launcherInstallPassMeTungstenT3(void){ //works like PassMe on a DS, boots from a different slot } #endif @@ -255,7 +258,10 @@ uint32_t launcherLaunch(launcher_file_t* files, uint32_t fileCount, uint8_t* sra } else{ //load apps to new SD card image - error = emulatorInsertSdCard(NULL, totalSize, NULL); + if(totalSize > LAUNCHER_SD_CARD_SIZE) + return EMU_ERROR_OUT_OF_MEMORY; + + error = emulatorInsertSdCard(NULL, LAUNCHER_SD_CARD_SIZE, NULL); if(error != EMU_ERROR_NONE) return error; @@ -270,10 +276,10 @@ uint32_t launcherLaunch(launcher_file_t* files, uint32_t fileCount, uint8_t* sra emulatorLoadRam(sramData, sramSize); } else{ - //install a pre specified RAM image for the current device(m515 or Tungsten C)needs to be decompressed into palmRam here + //install a pre specified RAM image for the current device(m515 or Tungsten T3)needs to be decompressed into palmRam here #if defined(EMU_SUPPORT_PALM_OS5) - if(palmEmulatingTungstenC) - launcherInstallPassMeTungstenC(); + if(palmEmulatingTungstenT3) + launcherInstallPassMeTungstenT3(); else #endif launcherInstallPassMeM515(); @@ -281,11 +287,10 @@ uint32_t launcherLaunch(launcher_file_t* files, uint32_t fileCount, uint8_t* sra emulatorSoftReset(); - /* //execute frames until launch is completed(or failed with a time out) success = false; - palmEmuFeatures.value = 'RUN0'; - for(index = 0; index < EMU_FPS * 10; index++){ + palmEmuFeatures.value = cardImageHasBeenLoaded ? 'RUNC' : 'RUNA'; + for(index = 0; index < EMU_FPS * LAUNCHER_BOOT_TIMEOUT; index++){ emulatorRunFrame(); if(palmEmuFeatures.value == 'STOP'){ success = true; @@ -296,7 +301,6 @@ uint32_t launcherLaunch(launcher_file_t* files, uint32_t fileCount, uint8_t* sra //timed out if(!success) return EMU_ERROR_RESOURCE_LOCKED; - */ //worked return EMU_ERROR_NONE; diff --git a/src/makefile.all b/src/makefile.all index d75a9f2..4f004cb 100644 --- a/src/makefile.all +++ b/src/makefile.all @@ -46,7 +46,7 @@ ifeq ($(EMU_SUPPORT_PALM_OS5), 1) $(EMU_PATH)/armv5te/emuVarPool.c \ $(EMU_PATH)/armv5te/mem.c \ $(EMU_PATH)/armv5te/mmu.c \ - $(EMU_PATH)/tungstenCBus.c + $(EMU_PATH)/tungstenT3Bus.c EMU_SOURCES_CXX += $(EMU_PATH)/armv5te/arm_interpreter.cpp \ $(EMU_PATH)/armv5te/thumb_interpreter.cpp \ $(EMU_PATH)/armv5te/cpu.cpp \ diff --git a/src/pxa255/pxa255.c b/src/pxa255/pxa255.c index 8939038..5286bbf 100644 --- a/src/pxa255/pxa255.c +++ b/src/pxa255/pxa255.c @@ -15,14 +15,14 @@ #include "../armv5te/mem.h" #include "../armv5te/os/os.h" #include "../armv5te/translate.h" -#include "../tungstenCBus.h" +#include "../tungstenT3Bus.h" #include "../emulator.h" #define PXA255_IO_BASE 0x40000000 #define PXA255_MEMCTRL_BASE 0x48000000 -#define PXA255_TIMER_TICKS_PER_FRAME (TUNGSTEN_C_CPU_CRYSTAL_FREQUENCY / EMU_FPS) +#define PXA255_TIMER_TICKS_PER_FRAME (TUNGSTEN_T3_CPU_CRYSTAL_FREQUENCY / EMU_FPS) uint16_t* pxa255Framebuffer; @@ -50,15 +50,15 @@ bool pxa255Init(uint8_t** returnRom, uint8_t** returnRam){ //regions //ROM mem_areas[0].base = PXA255_ROM_START_ADDRESS; - mem_areas[0].size = TUNGSTEN_C_ROM_SIZE; + mem_areas[0].size = TUNGSTEN_T3_ROM_SIZE; mem_areas[0].ptr = mem_and_flags + mem_offset; - mem_offset += TUNGSTEN_C_ROM_SIZE; + mem_offset += TUNGSTEN_T3_ROM_SIZE; //RAM mem_areas[1].base = PXA255_RAM_START_ADDRESS; - mem_areas[1].size = TUNGSTEN_C_RAM_SIZE; + mem_areas[1].size = TUNGSTEN_T3_RAM_SIZE; mem_areas[1].ptr = mem_and_flags + mem_offset; - mem_offset += TUNGSTEN_C_RAM_SIZE; + 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 diff --git a/src/tungstenCBus.c b/src/tungstenT3Bus.c similarity index 100% rename from src/tungstenCBus.c rename to src/tungstenT3Bus.c diff --git a/src/tungstenCBus.h b/src/tungstenT3Bus.h similarity index 100% rename from src/tungstenCBus.h rename to src/tungstenT3Bus.h