diff --git a/tools/palm/muExpansionDriver/armv5.c b/tools/palm/muExpansionDriver/armv5.c deleted file mode 100644 index 59f215c..0000000 --- a/tools/palm/muExpansionDriver/armv5.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "sdkPatch/PalmOSPatched.h" -#include - -#include "armv5.h" -#include "palmGlobalDefines.h" -#include "specs/emuFeatureRegisterSpec.h" - - -void armv5SetStack(uint8_t* location, uint32_t size){ - uint32_t firstStackEntry = (uint32_t)location + size - 1; - - /*must be 32 bit aligned, m68k only enforces 16 bit aligned even for 32 bit access so MemPtrNew may return a word aligned address*/ - while((firstStackEntry & 0x3) != 0) - firstStackEntry--; - - armv5SetRegister(13, firstStackEntry); -} - -uint32_t* armv5ValidatePointer(uint32_t* address){ - /*patches 16 bit alignment to 32 bit alignment using a special address bit*/ - if((uint32_t)address & 0x00000002) - return (uint32_t*)((uint32_t)address ^ 0x20000002); - return address; -} - -uint32_t* armv5InvalidatePointer(uint32_t* address){ - /*puts address bits back to normal*/ - if((uint32_t)address & 0x20000000) - return (uint32_t*)((uint32_t)address ^ 0x20000002); - return address; -} - -void armv5StackPush(uint32_t value){ - uint32_t stackPtr = armv5GetRegister(13); - - stackPtr -= sizeof(uint32_t); - writeArbitraryMemory32(stackPtr, EndianSwap32(value)); - armv5SetRegister(13, stackPtr); -} - -uint32_t armv5StackPop(void){ - uint32_t stackPtr = armv5GetRegister(13); - uint32_t value = EndianSwap32(readArbitraryMemory32(stackPtr)); - - stackPtr += sizeof(uint32_t); - armv5SetRegister(13, stackPtr); - return value; -} - -void armv5SetRegister(uint8_t reg, uint32_t value){ - writeArbitraryMemory32(EMU_REG_ADDR(EMU_DST), reg); - writeArbitraryMemory32(EMU_REG_ADDR(EMU_VALUE), value); - writeArbitraryMemory32(EMU_REG_ADDR(EMU_CMD), CMD_ARM_SET_REG); -} - -uint32_t armv5GetRegister(uint8_t reg){ - writeArbitraryMemory32(EMU_REG_ADDR(EMU_SRC), reg); - writeArbitraryMemory32(EMU_REG_ADDR(EMU_CMD), CMD_ARM_GET_REG); - return readArbitraryMemory32(EMU_REG_ADDR(EMU_VALUE)); -} - -int32_t armv5Execute(int32_t cycles){ - writeArbitraryMemory32(EMU_REG_ADDR(EMU_VALUE), cycles); - writeArbitraryMemory32(EMU_REG_ADDR(EMU_CMD), CMD_ARM_RUN); - return readArbitraryMemory32(EMU_REG_ADDR(EMU_VALUE)); -} - -Boolean armv5NeedsService(void){ - writeArbitraryMemory32(EMU_REG_ADDR(EMU_CMD), CMD_ARM_SERVICE); - return readArbitraryMemory32(EMU_REG_ADDR(EMU_VALUE)); -} diff --git a/tools/palm/muExpansionDriver/armv5.h b/tools/palm/muExpansionDriver/armv5.h deleted file mode 100644 index e7ed677..0000000 --- a/tools/palm/muExpansionDriver/armv5.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef ARMV5_H -#define ARMV5_H - -#include "sdkPatch/PalmOSPatched.h" -#include - -void armv5SetStack(uint8_t* location, uint32_t size); -uint32_t* armv5ValidatePointer(uint32_t* address); -uint32_t* armv5InvalidatePointer(uint32_t* address); -void armv5StackPush(uint32_t value); -uint32_t armv5StackPop(void); -void armv5SetRegister(uint8_t reg, uint32_t value); -uint32_t armv5GetRegister(uint8_t reg); -int32_t armv5Execute(int32_t cycles); -Boolean armv5NeedsService(void); - -#endif diff --git a/tools/palm/muExpansionDriver/blobs/armCall68k.func b/tools/palm/muExpansionDriver/blobs/armCall68k.func deleted file mode 100644 index c1da300..0000000 Binary files a/tools/palm/muExpansionDriver/blobs/armCall68k.func and /dev/null differ diff --git a/tools/palm/muExpansionDriver/blobs/armExit.func b/tools/palm/muExpansionDriver/blobs/armExit.func deleted file mode 100644 index 4a13073..0000000 Binary files a/tools/palm/muExpansionDriver/blobs/armExit.func and /dev/null differ diff --git a/tools/palm/muExpansionDriver/blobs/m68kCallWithBlob.func b/tools/palm/muExpansionDriver/blobs/m68kCallWithBlob.func deleted file mode 100644 index 869d2b1..0000000 Binary files a/tools/palm/muExpansionDriver/blobs/m68kCallWithBlob.func and /dev/null differ diff --git a/tools/palm/muExpansionDriver/blobs/m68kCallWithBlob.x68 b/tools/palm/muExpansionDriver/blobs/m68kCallWithBlob.x68 deleted file mode 100644 index 0127a8f..0000000 --- a/tools/palm/muExpansionDriver/blobs/m68kCallWithBlob.x68 +++ /dev/null @@ -1,75 +0,0 @@ -*----------------------------------------------------------- -* Title :m68kCallWithBlob -* Written by :meepingsnesroms -*----------------------------------------------------------- - ORG $1000 -START: ; first instruction of program - - ;setup fake OS enviroment - lea stack, sp - move.l #$12345678, a0 - move.l #$87654321, d0 - - ;setup stack - sub.l #2, sp - move.w #1, (sp) - pea (6) - pea stackBlob - pea functionTest - jsr m68kCallWithBlobFunc - SIMHALT - -;uint32_t m68kCallWithBlobFunc(uint32_t functionAddress, uint32_t stackBlob, uint32_t stackBlobSize, uint16_t returnA0); -;Extract:vvv -m68kCallWithBlobFunc: - link a6,#0 - movem.l d1-d2/a1-a3,-(sp) - move.l 8(a6), a3 ;function - move.l 12(a6), a1 ;stackBlob - move.l 16(a6), d1 ;stackBlobSize - move.w 20(a6), d2 ;returnA0 - move.l sp, a2 - sub.l d1, a2 -copy: - cmp.l a2, sp - beq done - move.w (a1), (a2) - add.l #2, a1 - add.l #2, a2 - bra copy -done: - ;update SP with new stack - sub.l d1, sp - jsr (a3) - add.l d1, sp - ;new stack has been used and removed, SP is safe again - tst.w d2 - beq useD0 - move.l a0, d0 -useD0: - movem.l (sp)+,d1-d2/a1-a3 - unlk a6 - rts -;Extract:^^^ - -functionTest: - ;test that calling works and the return value respects returnA0 - move.l #$10101010, a0 - rts - -;Stack - ORG $2000 -stack: - dc.w $0, $0, $0 - -;Variables - ORG $3000 -stackBlob: - dc.w $1, $2, $3 - - END START ; last line of source - -*~Font name~Courier New~ -*~Font size~10~ -*~Tab type~1~ -*~Tab size~4~ diff --git a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvChunkNew.X68 b/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvChunkNew.X68 deleted file mode 100644 index 2d95591..0000000 --- a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvChunkNew.X68 +++ /dev/null @@ -1,24 +0,0 @@ -*----------------------------------------------------------- -* Title :patchPrvChunkNew -* Written by :meepingsnesroms -*----------------------------------------------------------- - ORG $1000 -START: ; first instruction of program - - ; Patch to address 0x20D04 of palmos41-en-m515.rom - move.l $A(a6), d0 - and.l #$FFFFFFFC, d0 - cmp.l $A(a6), d0 - beq done - addq.l #4, d0 -done: - addq.l #8, d0 - addq.w #2, sp - - END START ; last line of source - - -*~Font name~Courier New~ -*~Font size~10~ -*~Tab type~1~ -*~Tab size~4~ diff --git a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvChunkNew.func b/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvChunkNew.func deleted file mode 100644 index 82e6b5f..0000000 Binary files a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvChunkNew.func and /dev/null differ diff --git a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.L68 b/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.L68 deleted file mode 100644 index 8a94242..0000000 --- a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.L68 +++ /dev/null @@ -1,32 +0,0 @@ -00001000 Starting Address -Assembler used: EASy68K Editor/Assembler v5.16.01 -Created On: 4/11/2019 12:27:03 - -00000000 1 *----------------------------------------------------------- -00000000 2 * Title :patchPrvPtrResize -00000000 3 * Written by :meepingsnesroms -00000000 4 *----------------------------------------------------------- -00001000 5 ORG $1000 -00001000 6 START: ; first instruction of program -00001000 7 -00001000 8 ; Patch to address 0x2123C of palmos41-en-m515.rom -00001000 202E 000C 9 move.l $C(a6), d0 -00001004 C0BC FFFFFFFC 10 and.l #$FFFFFFFC, d0 -0000100A B0AE 000C 11 cmp.l $C(a6), d0 -0000100E 6700 0004 12 beq done -00001012 5880 13 addq.l #4, d0 -00001014 14 done: -00001014 5080 15 addq.l #8, d0 -00001016 504F 16 addq.w #8, sp -00001018 17 -00001018 18 END START ; last line of source - -No errors detected -No warnings generated - - -SYMBOL TABLE INFORMATION -Symbol-name Value -------------------------- -DONE 1014 -START 1000 diff --git a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.S68 b/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.S68 deleted file mode 100644 index 819fe61..0000000 --- a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.S68 +++ /dev/null @@ -1,3 +0,0 @@ -S021000036384B50524F47202020323043524541544544204259204541535936384B6D -S11B1000202E000CC0BCFFFFFFFCB0AE000C6700000458805080504FE9 -S804001000EB diff --git a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.X68 b/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.X68 deleted file mode 100644 index a98b18d..0000000 --- a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.X68 +++ /dev/null @@ -1,25 +0,0 @@ -*----------------------------------------------------------- -* Title :patchPrvPtrResize -* Written by :meepingsnesroms -*----------------------------------------------------------- - ORG $1000 -START: ; first instruction of program - - ; Patch to address 0x2123C of palmos41-en-m515.rom - move.l $C(a6), d0 - and.l #$FFFFFFFC, d0 - cmp.l $C(a6), d0 - beq done - addq.l #4, d0 -done: - addq.l #8, d0 - addq.w #8, sp - - END START ; last line of source - - - -*~Font name~Courier New~ -*~Font size~10~ -*~Tab type~1~ -*~Tab size~4~ diff --git a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.func b/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.func deleted file mode 100644 index 120e2a6..0000000 Binary files a/tools/palm/muExpansionDriver/blobs/osPatches/patchPrvPtrResize.func and /dev/null differ diff --git a/tools/palm/muExpansionDriver/blobs/readme.txt b/tools/palm/muExpansionDriver/blobs/readme.txt deleted file mode 100644 index 17d35c9..0000000 --- a/tools/palm/muExpansionDriver/blobs/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -m68kCallWithBlob.x68 is compiled in EASy68K, after export the code in-between the "Extract:vvv", "Extract:^^^" tags - -This is for testing purposes, as I can't debug virtual hardware on a real Palm device. \ No newline at end of file diff --git a/tools/palm/muExpansionDriver/config.c b/tools/palm/muExpansionDriver/config.c index 41f168c..02372f9 100644 --- a/tools/palm/muExpansionDriver/config.c +++ b/tools/palm/muExpansionDriver/config.c @@ -11,10 +11,6 @@ static void getConfigDefaults(uint32_t* configFile){ configFile[USER_WARNING_GIVEN] = false; configFile[DRIVER_ENABLED] = false; configFile[SAFE_MODE] = false; - configFile[ARM_STACK_SIZE] = 0x1000; - configFile[LCD_WIDTH] = 160; - configFile[LCD_HEIGHT] = 220; - configFile[EXTRA_RAM_MB_DYNAMIC_HEAP] = 10; configFile[BOOT_CPU_SPEED] = 100; configFile[PATCH_INCONSISTENT_APIS] = false; } diff --git a/tools/palm/muExpansionDriver/config.h b/tools/palm/muExpansionDriver/config.h index a4cafe6..b10e234 100644 --- a/tools/palm/muExpansionDriver/config.h +++ b/tools/palm/muExpansionDriver/config.h @@ -12,10 +12,6 @@ enum{ USER_WARNING_GIVEN = 0, DRIVER_ENABLED, SAFE_MODE, - ARM_STACK_SIZE, - LCD_WIDTH, - LCD_HEIGHT, - EXTRA_RAM_MB_DYNAMIC_HEAP, BOOT_CPU_SPEED, PATCH_INCONSISTENT_APIS, /*add new entries above*/ diff --git a/tools/palm/muExpansionDriver/devNotes.txt b/tools/palm/muExpansionDriver/devNotes.txt deleted file mode 100644 index 6caf883..0000000 --- a/tools/palm/muExpansionDriver/devNotes.txt +++ /dev/null @@ -1,10 +0,0 @@ -This project can't use global variables, its executed without being launched so writing to globals will corrupt the currently running application, reading will just retrieve random numbers or crash because of invalid access. - -*.func files are binary blobs containing ASM code to perform sensitive functions: -m68kCallWithBlob.func is 68k ASM that copys the stack args blob requested by the armCall68k.func to the 68k stack and executes the function pointer returning A0 or D0 -armCall68k.func is ARM asm that sets up a path back to 68k code without ending ARM execution -armExit.func is ARM asm that terminates ARM execution - -m68kCallWithBlob.func function prototype is: -uint32_t m68kCallWithBlobFunc(uint32_t functionAddress, uint32_t stackBlob, uint32_t stackBlobSize, uint16_t returnA0); -The smallest type on the 68k stack allowed is uint16_t, this is because of alignment restrictions. \ No newline at end of file diff --git a/tools/palm/muExpansionDriver/globals.h b/tools/palm/muExpansionDriver/globals.h index 7eb678b..0e95ffd 100644 --- a/tools/palm/muExpansionDriver/globals.h +++ b/tools/palm/muExpansionDriver/globals.h @@ -4,10 +4,7 @@ #include enum{ - ARM_STACK_START = 0, - TUNGSTEN_W_DRIVERS_INSTALLED, - CURRENT_RESOLUTION, - ORIGINAL_FRAMEBUFFER + EMPTY_LIST = 0 }; uint32_t getGlobalVar(uint16_t id); diff --git a/tools/palm/muExpansionDriver/hires.c b/tools/palm/muExpansionDriver/hires.c deleted file mode 100644 index 686b063..0000000 --- a/tools/palm/muExpansionDriver/hires.c +++ /dev/null @@ -1,196 +0,0 @@ -#include "sdkPatch/PalmOSPatched.h" -#include - -#include "debug.h" -#include "globals.h" -#include "traps.h" -#include "palmOsPriv.h" -#include "palmGlobalDefines.h" -#include "specs/emuFeatureRegisterSpec.h" - - -typedef struct{ - BitmapTypeV3 bitmap; - uint16_t* data; -}BitmapTypeV3Indirect; - - -static Boolean setTungstenWDriverFramebuffer(uint16_t width, uint16_t height){ - if(getGlobalVar(TUNGSTEN_W_DRIVERS_INSTALLED)){ - BitmapTypeV3Indirect* newBitmap; - int16_t newBitmapWidth; - int16_t newBitmapHeight; - WindowType* driverWindow; - Err error; - - /*remove special cases for the presence of a silkscreen, they would waste extra memory*/ - if(width == 160 && height == 220){ - newBitmapWidth = 160; - newBitmapHeight = 160; - } - else if(width == 320 && height == 440){ - newBitmapWidth = 320; - newBitmapHeight = 320; - } - else{ - newBitmapWidth = width; - newBitmapHeight = height; - } - - driverWindow = WinGetWindowPointer(WinGetDisplayWindow()); - - newBitmap = MemChunkNew(0, sizeof(BitmapTypeV3Indirect), memNewChunkFlagPreLock | memNewChunkFlagNonMovable | memNewChunkFlagAllowLarge); - if(!newBitmap){ - debugLog("Couldnt create new framebuffer bitmap struct!\n"); - return false; - } - - error = MemSet(newBitmap, sizeof(BitmapTypeV3Indirect), 0x00); - if(error != errNone) - debugLog("Couldnt clear bitmap struct:%d\n", error); - - /*build bitmap manually to prevent having to duplicate a V2 bitmap*/ - newBitmap->bitmap.width = newBitmapWidth; - newBitmap->bitmap.height = newBitmapHeight; - newBitmap->bitmap.rowBytes = newBitmapWidth * sizeof(uint16_t); - newBitmap->bitmap.flags.indirect = true; - newBitmap->bitmap.flags.forScreen = false;/*this is a lie, it is for the screen, but no screen rendering routines should be used*/ - newBitmap->bitmap.flags.directColor = true; - newBitmap->bitmap.size = sizeof(BitmapTypeV3); - newBitmap->bitmap.pixelFormat = pixelFormat565; - newBitmap->bitmap.compressionType = BitmapCompressionTypeNone; - newBitmap->bitmap.density = kDensityDouble; - - newBitmap->data = MemChunkNew(0, newBitmapWidth * newBitmapHeight * sizeof(uint16_t), memNewChunkFlagPreLock | memNewChunkFlagNonMovable | memNewChunkFlagAllowLarge); - if(!newBitmap->data){ - debugLog("Couldnt create new framebuffer!\n"); - return false; - } - - /*white out framebuffer*/ - /*this dident work?*/ - error = MemSet(newBitmap->data, newBitmapWidth * newBitmapHeight * sizeof(uint16_t), 0xFF); - if(error != errNone) - debugLog("Couldnt clear framebuffer:%d\n", error); - - /*clean up old framebuffer if its not the original one and set new one*/ - /*driverWindow->bitmapP->flags.forScreen = false;*/ - /*BmpDelete(driverWindow->bitmapP);*/ - - driverWindow->bitmapP = (BitmapType*)&newBitmap->bitmap; - - /*tell the emu where the framebuffer is*/ - writeArbitraryMemory32(EMU_REG_ADDR(EMU_SRC), (uint32_t)newBitmap->data); - writeArbitraryMemory32(EMU_REG_ADDR(EMU_VALUE), (uint32_t)width << 16 | height); - writeArbitraryMemory32(EMU_REG_ADDR(EMU_CMD), CMD_LCD_SET_FB); - - return true; - } - - /*driver is not loaded, cant set window*/ - return false; -} - -Boolean installTungstenWLcdDrivers(void){ - /*check that all driver files are installed and launch drivers boot entrypoints*/ - if(!getGlobalVar(TUNGSTEN_W_DRIVERS_INSTALLED)){ -#if 1 - LocalID database; - DmOpenRef highDensityDisplay; - MemHandle highDensityDisplayInitHandle; - void (*installHighDensityDisplay)(void); - - /*Hi Res Blitter.prc, this is the Tungsten W GPU driver, this will crash the device so dont install it*/ - /*PRC ID:bhal hire*/ - /*Resource ID:boot0000*/ - - /*HighDensityFonts.prc, font pack, only need to check if present*/ - /*PRC ID:data hidd*/ - /*Resource ID:nfnt????*/ - database = DmFindDatabase(0, "HighDensityFonts"); - if(!database){ - /*file does not exist*/ - debugLog("HighDensityFonts.prc not installed!\n"); - return false; - } - - /*HighDensityDisplay.prc, HAL addon, need to jump to exte0000*/ - /*PRC ID:extn hidd*/ - /*Resource ID:????????*/ - database = DmFindDatabase(0, "HighDensityDisplay"); - if(!database){ - /*file does not exist*/ - debugLog("HighDensityDisplay.prc not installed!\n"); - return false; - } - - highDensityDisplay = DmOpenDatabase(0, database, dmModeReadOnly); - if(!highDensityDisplay){ - /*cant open file*/ - debugLog("Cant open HighDensityDisplay.prc!\n"); - return false; - } - - highDensityDisplayInitHandle = DmGetResource('exte', 0x0000); - if(!highDensityDisplayInitHandle){ - /*cant open file resource*/ - debugLog("Cant open HighDensityDisplay.prc exte0000!\n"); - return false; - } - installHighDensityDisplay = (void(*)(void))MemHandleLock(highDensityDisplayInitHandle); - - /*backup original LCD window for SED1376*/ - setGlobalVar(ORIGINAL_FRAMEBUFFER, (uint32_t)WinGetBitmap(WinGetDisplayWindow())); - - debugLog("Attempting Tungsten W driver install!\n"); - - /*patch HwrDisplayAttributes before running so driver will install*/ - SysSetTrapAddress(sysTrapHwrDisplayAttributes, emuHwrDisplayAttributes); - - /*remove things that cause crashes*/ - SysSetTrapAddress(sysTrapScrDrawChars, emuScrDrawChars); - - /*run HighDensityDisplay.prc exte0000*/ - installHighDensityDisplay(); - debugLog("Tungsten W drivers installed!\n"); - - /*close everything*/ - MemHandleUnlock(highDensityDisplayInitHandle); - DmCloseDatabase(highDensityDisplay); -#endif - - /*success*/ - setGlobalVar(TUNGSTEN_W_DRIVERS_INSTALLED, true); - return true; - } - - debugLog("Tungsten W drivers already installed!\n"); - - /*already installed*/ - return true; -} - -Boolean setDeviceResolution(uint16_t width, uint16_t height){ - uint32_t oldResolution = getGlobalVar(CURRENT_RESOLUTION); - uint32_t newResolution = (uint32_t)width << 16 | height; - - debugLog("Setting custom FB size w:%d, h:%d\n", width, height); - - if(newResolution != oldResolution){ - if(!setTungstenWDriverFramebuffer(width, height)) - return false; - - setGlobalVar(CURRENT_RESOLUTION, newResolution); - } - - return true; -} - -void screenSignalApplicationStart(void){ - /*nothing for now*/ -} - -void screenSignalApplicationExit(void){ - /*put back all defaults, apps must signal they support hires before its enabled and its disabled again when the app is closed*/ - setDeviceResolution(160, 220); -} diff --git a/tools/palm/muExpansionDriver/hires.h b/tools/palm/muExpansionDriver/hires.h deleted file mode 100644 index ac5275f..0000000 --- a/tools/palm/muExpansionDriver/hires.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef HIRES_H -#define HIRES_H - -#include "sdkPatch/PalmOSPatched.h" -#include - -Boolean installTungstenWLcdDrivers(void); -Boolean setDeviceResolution(uint16_t width, uint16_t height); -void screenSignalApplicationStart(void); -void screenSignalApplicationExit(void); - -#endif diff --git a/tools/palm/muExpansionDriver/make.sh b/tools/palm/muExpansionDriver/make.sh index 55148b1..6ce0b7b 100755 --- a/tools/palm/muExpansionDriver/make.sh +++ b/tools/palm/muExpansionDriver/make.sh @@ -11,7 +11,7 @@ if [ "$1" = "clean" ]; then exit fi -declare -a FILES=("muExpDriver" "patcher" "hires" "armv5" "soundDriver" "globals" "gui" "traps" "config" "debug") +declare -a FILES=("muExpDriver" "patcher" "globals" "gui" "traps" "config" "debug") CFLAGS="-palmos4 -O3" if [ "$1" = "debug" ]; then diff --git a/tools/palm/muExpansionDriver/patcher.c b/tools/palm/muExpansionDriver/patcher.c index 1b609f9..c6504fa 100644 --- a/tools/palm/muExpansionDriver/patcher.c +++ b/tools/palm/muExpansionDriver/patcher.c @@ -4,8 +4,6 @@ #include "debug.h" #include "config.h" #include "traps.h" -#include "armv5.h" -#include "hires.h" #include "globals.h" #include "palmOsPriv.h" #include "palmGlobalDefines.h" @@ -28,76 +26,6 @@ static void lockCodeXXXX(void){ } } -static void resizeTrapTable(void){ - uint16_t oldSr; - void** oldTrapTable; - void** newTrapTable; - - /*order and time sensitive code!!!*/ - oldSr = SysDisableInts(); - - /*get new trap table memory*/ - newTrapTable = MemChunkNew(0, (sysTrapLastTrapNumber - sysTrapBase) * sizeof(uint32_t), memNewChunkFlagPreLock | memNewChunkFlagNonMovable | memNewChunkFlagAllowLarge); - debugLog("New trap table created at:0x%08lX\n", newTrapTable); - - /*copy over old OS 4 size trap table and 0 out the OS 5 part*/ - MemMove(newTrapTable, TrapTablePtr, (sysTrapPceNativeCall - sysTrapBase) * sizeof(uint32_t)); - MemSet(newTrapTable + sysTrapPceNativeCall - sysTrapBase, (sysTrapLastTrapNumber - sysTrapPceNativeCall) * sizeof(uint32_t), 0x00); - - /*save old table pointer to free*/ - oldTrapTable = TrapTablePtr; - - /*swap the tables*/ - TrapTablePtr = newTrapTable; - - /*cant free the old table as it is in low mem globals out of the jurisdiction of the memory manager*/ - - /*return to normal execution*/ - SysRestoreStatus(oldSr); -} - -static void install128mbRam(uint8_t mbDynamicHeap){ - /*these functions are called by HwrInit, which can be called directly by apps*/ - /*PrvGetRAMSize_10002C5E, small ROM*/ - /*PrvGetRAMSize_1008442E, big ROM*/ - /*HwrPreDebugInit_10002B06, small ROM*/ - /*HwrPreDebugInit_100842DC, big ROM, sets up the default RAM card*/ - /*HwrCalcDynamicHeapSize_10005D10, small ROM*/ - /*HwrCalcDynamicHeapSize_10083B54, big ROM, sets up the heap size*/ - - - /*installs a new virtual card with the extra RAM(128mb - 16mb)*/ - - /* - Err MemCardFormat(UInt16 cardNo, const Char *cardNameP, - const Char *manufNameP, const Char *ramStoreNameP) - SYS_TRAP(sysTrapMemCardFormat); - */ - - /* - Err MemStoreSetInfo(UInt16 cardNo, UInt16 storeNumber, - UInt16 *versionP, UInt16 *flagsP, Char *nameP, - UInt32 *crDateP, UInt32 *bckUpDateP, - UInt32 *heapListOffsetP, UInt32 *initCodeOffset1P, - UInt32 *initCodeOffset2P, LocalID* databaseDirIDP) - SYS_TRAP(sysTrapMemStoreSetInfo); - */ -} - -static void installPceNativeCallHandler(uint32_t armStackSize){ - uint8_t* oldArmStack = (uint8_t*)getGlobalVar(ARM_STACK_START); - uint8_t* armStackStart; - - TrapTablePtr[sysTrapPceNativeCall - sysTrapBase] = (void*)emuPceNativeCall; - - if(oldArmStack) - MemChunkFree(oldArmStack); - - armStackStart = MemChunkNew(0, armStackSize, memNewChunkFlagPreLock | memNewChunkFlagNonMovable | memNewChunkFlagAllowLarge); - armv5SetStack(armStackStart, armStackSize); - setGlobalVar(ARM_STACK_START, (uint32_t)armStackStart); -} - static void installDebugHandlers(void){ void* sysUnimplementedAddress = SysGetTrapAddress(sysTrapSysUnimplemented); uint16_t index; @@ -114,98 +42,6 @@ static void installDebugHandlers(void){ TrapTablePtr[sysTrapErrDisplayFileLineMsg - sysTrapBase] = (void*)emuErrDisplayFileLineMsg; } -static void setProperDeviceId(uint16_t screenWidth, uint16_t screenHeight, Boolean hasArmCpu, Boolean hasDpad){ - uint32_t osVer; - uint32_t companyId; - uint32_t deviceId; - uint32_t halId; - - if(hasArmCpu){ - /*get matching OS 5 device*/ - switch((uint32_t)screenWidth << 16 | screenHeight){ - case (uint32_t)480 << 16 | 320: - /*Tapwave Zodiac 2*/ - osVer = sysMakeROMVersion(5, 4, 0, sysROMStageRelease, 0);/*needs to be verifyed!!!*/ - companyId = 'Tpwv'; - deviceId = 'Rdog'; - halId = 'MX1a'; - break; - - case (uint32_t)320 << 16 | 440: - /*Tungsten E2*/ - osVer = sysMakeROMVersion(5, 4, 0, sysROMStageRelease, 0);/*needs to be verifyed!!!*/ - companyId = 'Palm'; - deviceId = 'Zir4'; - halId = 'hspr'; - break; - - default: - /*use Palm Z22, has the same resolution as the Palm m515*/ - osVer = sysMakeROMVersion(5, 4, 0, sysROMStageRelease, 0);/*needs to be verifyed!!!*/ - companyId = 'Palm'; - deviceId = 'D051'; - halId = 'S051'; - break; - } - } - else{ - /*get matching OS 4 device*/ - switch((uint32_t)screenWidth << 16 | screenHeight){ - case (uint32_t)320 << 16 | 440: - /*Tungsten E running OS 4*/ - /*there are no 320x320 + digitizer, 16 bit color, OS 4 devices*/ - /*this is not a real device, using it may cause issues*/ - FtrGet(sysFileCSystem, sysFtrNumROMVersion, &osVer); - companyId = 'Palm'; - deviceId = 'Cct1'; - halId = 'Ect1'; - break; - - case (uint32_t)320 << 16 | 320: - /*Tungsten W*/ - osVer = sysMakeROMVersion(4, 1, 0, sysROMStageRelease, 0);/*needs to be verifyed!!!*/ - companyId = 'palm'; - deviceId = 'atc1'; - halId = 'atlc'; - break; - - default: - /*use device defaults*/ - FtrGet(sysFileCSystem, sysFtrNumROMVersion, &osVer); - FtrGet(sysFileCSystem, sysFtrNumOEMCompanyID, &companyId); - FtrGet(sysFileCSystem, sysFtrNumOEMDeviceID, &deviceId); - FtrGet(sysFileCSystem, sysFtrNumOEMHALID, &halId); - break; - } - } - - /*set CPU ID*/ - if(hasArmCpu) - FtrSet(sysFtrCreator, sysFtrNumProcessorID, sysFtrNumProcessorXscale); - else - FtrSet(sysFtrCreator, sysFtrNumProcessorID, sysFtrNumProcessorVZ); - - /*enable dpad API*/ - if(hasDpad) - FtrSet(navFtrCreator, navFtrVersion, navVersion); - else - FtrUnregister(navFtrCreator, navFtrVersion); - - /*no fixed digitizer, enable digitizer APIs*/ - if(screenHeight != 220 && screenHeight != 440) - FtrSet(pinCreator, pinFtrAPIVersion, pinAPIVersion1_1); - else - FtrUnregister(pinCreator, pinFtrAPIVersion); - - /*later Sony specific stuff may go here to allow running Clie apps*/ - /*later Tapwave specific stuff may go here to allow running Zodiac apps*/ - - FtrSet(sysFileCSystem, sysFtrNumROMVersion, osVer); - FtrSet(sysFileCSystem, sysFtrNumOEMCompanyID, companyId); - FtrSet(sysFileCSystem, sysFtrNumOEMDeviceID, deviceId); - FtrSet(sysFileCSystem, sysFtrNumOEMHALID, halId); -} - void initBoot(uint32_t* configFile){ if(configFile[DRIVER_ENABLED] && !configFile[SAFE_MODE]){ LocalID thisApp; @@ -246,26 +82,10 @@ void initBoot(uint32_t* configFile){ /*prevents the code being moved out from underneath its function pointers(in the API trap table), causing crashes*/ lockCodeXXXX(); - - /*make an OS 5 size trap table, needed if debugging or any OS 5 features are enabled*/ - if(enabledFeatures & (FEATURE_HYBRID_CPU | FEATURE_SND_STRMS | FEATURE_DEBUG)) - resizeTrapTable(); if(enabledFeatures & FEATURE_DEBUG) installDebugHandlers(); - if(enabledFeatures & FEATURE_RAM_HUGE) - install128mbRam(configFile[EXTRA_RAM_MB_DYNAMIC_HEAP]); - - if(enabledFeatures & FEATURE_HYBRID_CPU) - installPceNativeCallHandler(configFile[ARM_STACK_SIZE]); - - if(enabledFeatures & FEATURE_CUSTOM_FB) - if(installTungstenWLcdDrivers()) - setDeviceResolution(configFile[LCD_WIDTH], configFile[LCD_HEIGHT]); - - setProperDeviceId(configFile[LCD_WIDTH], configFile[LCD_HEIGHT], !!(enabledFeatures & FEATURE_HYBRID_CPU), !!(enabledFeatures & FEATURE_EXT_KEYS)); - writeArbitraryMemory32(EMU_REG_ADDR(EMU_VALUE), configFile[BOOT_CPU_SPEED]); writeArbitraryMemory32(EMU_REG_ADDR(EMU_CMD), CMD_SET_CPU_SPEED); diff --git a/tools/palm/muExpansionDriver/soundDriver.c b/tools/palm/muExpansionDriver/soundDriver.c deleted file mode 100644 index 8b13789..0000000 --- a/tools/palm/muExpansionDriver/soundDriver.c +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tools/palm/muExpansionDriver/soundDriver.h b/tools/palm/muExpansionDriver/soundDriver.h deleted file mode 100644 index 8b13789..0000000 --- a/tools/palm/muExpansionDriver/soundDriver.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tools/palm/muExpansionDriver/traps.c b/tools/palm/muExpansionDriver/traps.c index 0aab6ec..a2694ff 100644 --- a/tools/palm/muExpansionDriver/traps.c +++ b/tools/palm/muExpansionDriver/traps.c @@ -1,9 +1,8 @@ #include "sdkPatch/PalmOSPatched.h" #include -#include "debug.h" -#include "armv5.h" #include "traps.h" +#include "debug.h" #include "globals.h" #include "palmOsPriv.h" #include "palmGlobalDefines.h" @@ -12,118 +11,6 @@ /*cant use normal global variables in this file!!!*/ /*functions in this file are called directly by the Palm OS trap dispatch, this means they can be called when the app isnt loaded and the globals are just a random data buffer*/ -#if 0 -static const SECTION(".text") ALIGN(2) uint32_t armExitFunc[] = {0x0000A0E3, 0xBBBBBBF7};/*ARM asm blob*/ -static const SECTION(".text") ALIGN(2) uint32_t armCall68kFunc[] = {0x0100A0E3, 0xBBBBBBF7, 0x0EF0A0E1};/*ARM asm blob*/ -static const SECTION(".text") ALIGN(2) uint8_t m68kCallWithBlobFunc[] = { - 0x4E, 0x56, 0x00, 0x00, 0x48, 0xE7, 0x60, 0x70, 0x26, 0x6E, 0x00, 0x08, - 0x22, 0x6E, 0x00, 0x0C, 0x22, 0x2E, 0x00, 0x10, 0x34, 0x2E, 0x00, 0x14, - 0x24, 0x4F, 0x95, 0xC1, 0xBF, 0xCA, 0x67, 0x00, 0x00, 0x0A, 0x34, 0x91, - 0x54, 0x89, 0x54, 0x8A, 0x60, 0xF2, 0x9F, 0xC1, 0x4E, 0x93, 0xDF, 0xC1, - 0x4A, 0x42, 0x67, 0x00, 0x00, 0x04, 0x20, 0x08, 0x4C, 0xDF, 0x0E, 0x06, - 0x4E, 0x5E, 0x4E, 0x75 - -};/*68k asm blob*/ -#endif - -UInt32 emuPceNativeCall(NativeFuncType* nativeFuncP, void* userDataP){ - /*these arnt set as "static" because the globals dont work here*/ -#if 1 - const ALIGN(2) uint32_t armExitFunc[] = {0x0000A0E3, 0xBBBBBBF7};/*ARM asm blob*/ - const ALIGN(2) uint32_t armCall68kFunc[] = {0x0100A0E3, 0xBBBBBBF7, 0x0EF0A0E1};/*ARM asm blob*/ - const ALIGN(2) uint8_t m68kCallWithBlobFunc[] = { - 0x4E, 0x56, 0x00, 0x00, 0x48, 0xE7, 0x60, 0x70, 0x26, 0x6E, 0x00, 0x08, - 0x22, 0x6E, 0x00, 0x0C, 0x22, 0x2E, 0x00, 0x10, 0x34, 0x2E, 0x00, 0x14, - 0x24, 0x4F, 0x95, 0xC1, 0xBF, 0xCA, 0x67, 0x00, 0x00, 0x0A, 0x34, 0x91, - 0x54, 0x89, 0x54, 0x8A, 0x60, 0xF2, 0x9F, 0xC1, 0x4E, 0x93, 0xDF, 0xC1, - 0x4A, 0x42, 0x67, 0x00, 0x00, 0x04, 0x20, 0x08, 0x4C, 0xDF, 0x0E, 0x06, - 0x4E, 0x5E, 0x4E, 0x75 - - };/*68k asm blob*/ -#endif - uint32_t oldArmRegisters[5]; - uint32_t returnValue; - - /*AAPCS calling convention*/ - /*on a function call R0<->R3 store the function arguments if they fit, extras will go on the stack*/ - /*first arg goes in R0, second in R1, ..., up to 4 args can go in registers*/ - /*on function return R0 and R1 store the return value of the last function, R1 is only used if the return value is 64 bit*/ - /*R4<->R7 are always local variables*/ - - /*My dual CPU calling convention, called when ARM opcode 0xF7BBBBBB is run*/ - /*R0 = 0 is execution finished, R0 = 1 is run function*/ - /*when R0 = 1, R1 = function to execute, R2 = stack blob, R3 = stack blob size and want A0*/ - - /*Fake ARM 32 bit alignment convention*/ - /*0x0XXXXXXX<->0x1XXXXXXX Normal memory access*/ - /*0x20000000<->0x3XXXXXXX Mirrored range, realAddress = address - 0x20000000 + 0x00000002*/ - - /*this will still fail if ARM allocates a 16 bit aligned buffer and passes it to the 68k,*/ - /*but it allows 16 bit aligned data to be executed from the 68k stack and works as a*/ - /*temporary measure until I get MemChunkNew patched correctly*/ - - debugLog("Called ARM function:0x%08lX\n", (uint32_t)nativeFuncP); - - /*save old ARM state, needed if this function is called recursively*/ - /*(68k(normal mode)->PceNativeCall->...->Call68kFunc->...->PceNativeCall(this could corrupt old args if they arnt backed up!!!))*/ - oldArmRegisters[0] = armv5GetRegister(0); - oldArmRegisters[1] = armv5GetRegister(1); - oldArmRegisters[2] = armv5GetRegister(2); - oldArmRegisters[3] = armv5GetRegister(14); - oldArmRegisters[4] = armv5GetRegister(15); - - armv5SetRegister(0, 0xBADC0DE);/*emulStateP is unused*/ - armv5SetRegister(1, (uint32_t)armv5ValidatePointer(userDataP)); - armv5SetRegister(2, (uint32_t)armv5ValidatePointer(armCall68kFunc)); - - armv5SetRegister(14, (uint32_t)armv5ValidatePointer(armExitFunc));/*set link register to return location*/ - armv5SetRegister(15, (uint32_t)armv5ValidatePointer((uint32_t*)nativeFuncP));/*set program counter to function*/ - - while(true){ - armv5Execute(100);/*run 100 opcodes, returns instantly with cycles remaining when service is needed*/ - if(armv5NeedsService()){ - /*ARM tried to call a 68k function or has finished executing*/ - if(armv5GetRegister(0)){ - /*call function*/ - uint32_t function = armv5GetRegister(1); - uint32_t stackBlob = armv5GetRegister(2); - uint32_t stackBlobSizeAndWantA0 = armv5GetRegister(3); - uint32_t (*m68kCallWithBlobFuncPtr)(uint32_t functionAddress, uint32_t stackBlob, uint32_t stackBlobSize, uint16_t returnA0) = (uint32_t (*)(uint32_t, uint32_t, uint32_t, uint16_t))m68kCallWithBlobFunc; - - debugLog("ARM calling 68k: function:0x%08lX, stackBlob:0x%08lX, stackBlobSize:0x%08lX, wantA0:%d\n", function, stackBlob, stackBlobSizeAndWantA0 & ~kPceNativeWantA0, !!(stackBlobSizeAndWantA0 & kPceNativeWantA0)); - - /*API call, convert to address first*/ - if(function <= kPceNativeTrapNoMask) - function = (uint32_t)TrapTablePtr[function];/*SysGetTrapAddress cant be used because this needs to handle OS 5 API calls too*/ - - /*return whatever the 68k function did*/ - armv5SetRegister(0, m68kCallWithBlobFuncPtr(function, stackBlob, stackBlobSizeAndWantA0 & ~kPceNativeWantA0, !!(stackBlobSizeAndWantA0 & kPceNativeWantA0))); - } - else{ - /*execution is over*/ - break; - } - } - } - - returnValue = armv5GetRegister(0); - - /*load old register state*/ - armv5SetRegister(0, oldArmRegisters[0]); - armv5SetRegister(1, oldArmRegisters[1]); - armv5SetRegister(2, oldArmRegisters[2]); - armv5SetRegister(14, oldArmRegisters[3]); - armv5SetRegister(15, oldArmRegisters[4]); - - debugLog("Finished ARM function:0x%08lX\n", (uint32_t)nativeFuncP); - - return returnValue; -} - -UInt32 emuKeyCurrentState(void){ - /*need to call old KeyCurrentState then | wihth new keys*/ - return 0x00000000; -} void emuErrDisplayFileLineMsg(const Char* const filename, UInt16 lineNo, const Char* const msg){ debugLog("Error at:%s, Line:%d, Msg:%s\n", filename, lineNo, msg); @@ -136,197 +23,3 @@ void emuSysUnimplemented(void){ debugLog("Unimplemented API:0x%04X, called from:0x%08lX\n", apiNum, callLocation); } - -Err emuHwrDisplayAttributes(Boolean set, UInt8 attribute, void* dataPtr){ - /*this function is exempt from formatting standards, it is meant as an exact C reconstrution of the Tungsten W HwrDisplayAttributes patched to work on an m515*/ - static const char lcdControllerName[] = "MQ11xx LCD Controller"; - Err error = errNone; - - /*dispErrorClass | 0x01 = Cant Set???, also returned for null pointers*/ - /*dispErrorClass | 0x04 = Attribute Doesnt Exist??*/ - - switch(attribute){ - case 0: - /*display controler ID, MediaQ GPU*/ - (UInt32*)dataPtr = '12MQ'; - break; - - case 1: - /*???*/ - (UInt16*)dataPtr = 1; - break; - - case 2: - /*???*/ - (UInt16*)dataPtr = 1; - break; - - case 3: - /*???*/ - (UInt16*)dataPtr = 0x808B; - break; - - case 4: - /*read some random RAM value and fail if 0*/ - if(ScrStatePtr) - (UInt16*)dataPtr = 0x10; - else - error = dispErrorClass | 0x04; - break; - - case 5: - /*???*/ - (UInt16*)dataPtr = 8; - break; - - case 6: - /*???*/ - (UInt16*)dataPtr = 0x10; - break; - - case 7: - /*display size something, width???, PrvDisplaySize(Boolean set, void* dataPtr)*/ - /*UNTESTED*/ - (UInt16*)dataPtr = 320; - break; - - case 8: - /*display size something, height???, PrvDisplaySize(Boolean set, void* dataPtr)*/ - /*UNTESTED*/ - (UInt16*)dataPtr = 320; - break; - - case 9: - /*display chip framebuffer start address*/ - (UInt32*)dataPtr = 0x1F000000; - break; - - case 10: - /*display chip framebuffer size*/ - (UInt32*)dataPtr = 0x3C000; - break; - - case 11: - /*???*/ - (UInt16*)dataPtr = 1; - break; - - case 12: - /*full name of display controller*/ - StrCopy((char*)dataPtr, lcdControllerName); - break; - - case 13: - /*display base address*/ - /*UNTESTED*/ - (UInt32*)dataPtr = 0x1F000000; - break; - - case 14: - /*display depth*/ - /*UNTESTED*/ - (UInt16*)dataPtr = 16; - break; - - case 15: - /*read some random RAM value and write to dataPtr*/ - if(readArbitraryMemory8(0x36C)) - (UInt16*)dataPtr = 0x140; - else - (UInt16*)dataPtr = 0xA0; - break; - - case 16: - /*read some random RAM value and write to dataPtr*/ - if(readArbitraryMemory8(0x36C)) - (UInt16*)dataPtr = 0x140; - else - (UInt16*)dataPtr = 0xA0; - break; - - case 17: - /*display row bytes*/ - /*UNTESTED*/ - (UInt16*)dataPtr = 320 * sizeof(uint16_t); - break; - - case 18: - /*display backlight*/ - /*UNTESTED*/ - (UInt8*)dataPtr = 0x01; - break; - - case 19: - /*display contrast*/ - /*UNTESTED*/ - (UInt8*)dataPtr = 0x01; - break; - - /*case 20: has no handler*/ - - case 21: - /*display debug indicator*/ - /*TODO, shouldnt be needed*/ - break; - - case 22: - /*display controller chip framebuffer end address???*/ - if(set) - error = dispErrorClass | 0x01; - else - (UInt32*)dataPtr = 0x1F03C000; - break; - - /*case 23: has no handler*/ - /*case 24: has no handler*/ - /*case 25: has no handler*/ - /*case 26: has no handler*/ - - case 27: - /*???*/ - (UInt16*)dataPtr = 0x90; - break; - - case 28: - /*???*/ - (UInt16*)dataPtr = 0x40; - break; - - case 29: - /*???*/ - (UInt16*)dataPtr = 0x20; - break; - - case 30: - /*???*/ - (UInt8*)dataPtr = 1; - break; - - default: - debugLog("Invalid display attribute requested:%d\n", attribute); - error = dispErrorClass | 0x04; - break; - } - - return error; -} - -void emuScrDrawChars(WinPtr pWindow, Int16 xLoc, Int16 yLoc, Int16 xExtent, Int16 yExtent, Int16 clipTop, Int16 clipLeft, Int16 clipBottom, Int16 clipRight, Char* chars, UInt16 len, FontPtr fontPtr){ - /*do nothing*/ -} - -/* -may need to set this to change the border color like on OS 5 -Boolean UIPickColor(IndexedColorType *indexP, RGBColorType *rgbP, - UIPickColorStartType start, const Char *titleP, - const Char *tipP) -SYS_TRAP(sysTrapUIPickColor); -*/ - -/* - may need to remove these from trap table: - ScrGetGrayPat - ScrGetColortable - ScrDrawChars - ScrCopyRectangle - */ diff --git a/tools/palm/muExpansionDriver/traps.h b/tools/palm/muExpansionDriver/traps.h index 4b5a928..a3c8c41 100644 --- a/tools/palm/muExpansionDriver/traps.h +++ b/tools/palm/muExpansionDriver/traps.h @@ -17,12 +17,7 @@ typedef struct PACKED{ #define getCallLocation() (__stack_frame->pc - 4) #define getCalledApiNum() (readArbitraryMemory16(__stack_frame->pc - 2)) -UInt32 emuPceNativeCall(NativeFuncType *nativeFuncP, void *userDataP); -UInt32 emuKeyCurrentState(void); void emuErrDisplayFileLineMsg(const Char* const filename, UInt16 lineNo, const Char* const msg); void emuSysUnimplemented(void); -Err emuHwrDisplayAttributes(Boolean set, UInt8 attribute, void* dataPtr); -void emuScrDrawChars(WinPtr pWindow, Int16 xLoc, Int16 yLoc, Int16 xExtent, Int16 yExtent, Int16 clipTop, Int16 clipLeft, Int16 clipBottom, Int16 clipRight, Char* chars, UInt16 len, FontPtr fontPtr); - #endif diff --git a/tools/palm/muExpansionDriver/unimplementedFeatures.txt b/tools/palm/muExpansionDriver/unimplementedFeatures.txt index 68c7748..0ed1960 100644 --- a/tools/palm/muExpansionDriver/unimplementedFeatures.txt +++ b/tools/palm/muExpansionDriver/unimplementedFeatures.txt @@ -1,19 +1,7 @@ +HLE API forwarder Builtin Dragonball VZ LCD controller emulation -Reading OS 5 keys -Huge RAM support -Unverified OS version strings need to be verified -ARM support -OS 5 audio API -Custom FB mode -Setting window color like OS 5 -Tungsten W drivers are corrupting the trap table pointer(and a ton of other low mem globals) -For some reason the new versions of MuExpDriver dont work with Chuzzle anymore -Need to allocate a new trap table and set the global to that, not just write off the end of the existing one -Need to lock the code resources on boot, databases can be shuffled in RAM to free up space and that will corrupt old trap addresses -Need to patch SysGetOSVersionString Crash on first load when pressing "Emulator", probably caused by accessing the config file wrong(happens after driver is deleted and reinstalled) -Debug memory tools watchAppCode() is unfinished -Now that the low memory global space for the trap table is unused I have a place for global vars + Fixed: GUI \ No newline at end of file