Switch to Tungsten T3, widescreen is more important than a keyboard

This commit is contained in:
meepingsnesroms
2019-05-22 14:51:00 -07:00
parent 3de2c67cae
commit 9b09d19e19
10 changed files with 67 additions and 63 deletions

View File

@@ -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

View File

@@ -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'

View File

@@ -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)

View File

@@ -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();

View File

@@ -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

View File

@@ -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;

View File

@@ -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 \

View File

@@ -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