From 619507bcd3247a04b7ff48458befd603fe2bcdde Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Tue, 19 Jun 2018 18:19:03 -0700 Subject: [PATCH] Update GPIO map again, speedups Prevent costly address space resets for writing chip select registers when size and start address stay the same. --- hwTestSuite/tests.c | 45 +++ hwTestSuite/tests.h | 1 + hwTestSuite/viewer.c | 4 + qtBuildSystem/Mu/Mu.pro.user | 532 +++++++++++++++++------------------ src/hardwareRegisters.c | 58 ++-- 5 files changed, 353 insertions(+), 287 deletions(-) diff --git a/hwTestSuite/tests.c b/hwTestSuite/tests.c index 7865e6a..c3200f0 100644 --- a/hwTestSuite/tests.c +++ b/hwTestSuite/tests.c @@ -150,6 +150,51 @@ var listRegisterFunctions(){ return makeVar(LENGTH_0, TYPE_NULL, 0); } +var listRegisterDirections(){ + static Boolean firstRun = true; + uint16_t y = 0; + + if(firstRun){ + firstRun = false; + debugSafeScreenClear(C_WHITE); + } + + if(getButtonPressed(buttonBack)){ + firstRun = true; + exitSubprogram(); + } + + StrPrintF(sharedDataBuffer, "PBDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PBDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PCDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PCDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PDDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PDDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PEDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PEDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PFDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PFDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PGDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PGDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PJDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PJDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PKDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PKDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + StrPrintF(sharedDataBuffer, "PMDIR:0x%02X", readArbitraryMemory8(HW_REG_ADDR(PMDIR))); + UG_PutString(0, y, sharedDataBuffer); + y += FONT_HEIGHT + 1; + + return makeVar(LENGTH_0, TYPE_NULL, 0); +} + var checkSpi2EnableBitDelay(){ static Boolean firstRun = true; diff --git a/hwTestSuite/tests.h b/hwTestSuite/tests.h index 85d0f5c..b219ff0 100644 --- a/hwTestSuite/tests.h +++ b/hwTestSuite/tests.h @@ -6,6 +6,7 @@ var testButtonInput(); var listDataRegisters(); var listRegisterFunctions(); +var listRegisterDirections(); var checkSpi2EnableBitDelay(); var interrogateSpi2(); var tstat1GetSemaphoreLockOrder(); diff --git a/hwTestSuite/viewer.c b/hwTestSuite/viewer.c index a76f74d..bea51cf 100644 --- a/hwTestSuite/viewer.c +++ b/hwTestSuite/viewer.c @@ -299,6 +299,10 @@ void resetFunctionViewer(){ hwTests[totalHwTests].testFunction = listRegisterFunctions; totalHwTests++; + StrNCopy(hwTests[totalHwTests].name, "List P*DIR Registers", TEST_NAME_LENGTH); + hwTests[totalHwTests].testFunction = listRegisterDirections; + totalHwTests++; + StrNCopy(hwTests[totalHwTests].name, "Button Test", TEST_NAME_LENGTH); hwTests[totalHwTests].testFunction = testButtonInput; totalHwTests++; diff --git a/qtBuildSystem/Mu/Mu.pro.user b/qtBuildSystem/Mu/Mu.pro.user index c97152f..389ec51 100644 --- a/qtBuildSystem/Mu/Mu.pro.user +++ b/qtBuildSystem/Mu/Mu.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -58,271 +58,6 @@ ProjectExplorer.Project.Target.0 - - Desktop Qt 5.11.0 clang 64bit - Desktop Qt 5.11.0 clang 64bit - qt.qt5.5110.clang_64_kit - 0 - 0 - 0 - - /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Desktop_Qt_5_11_0_clang_64bit-Debug - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Debug - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - true - - - /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Desktop_Qt_5_11_0_clang_64bit-Release - - - true - qmake - - QtProjectManager.QMakeBuildStep - false - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - - /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Desktop_Qt_5_11_0_clang_64bit-Profile - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - true - false - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - -w - -r - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Profile - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - 3 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy Configuration - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - 2 - - Mu - - Qt4ProjectManager.Qt4RunConfiguration:/Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/Mu/Mu.pro - true - - Mu.pro - false - - /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Android_for_armeabi_v7a_GCC_4_9_Qt_5_11_0_for_Android_armv7-Release - 3768 - false - true - false - false - true - - 1 - - - - ProjectExplorer.Project.Target.1 Android for armeabi-v7a (GCC 4.9, Qt 5.11.0 for Android armv7) Android for armeabi-v7a (GCC 4.9, Qt 5.11.0 for Android armv7) @@ -640,6 +375,271 @@ 1 + + ProjectExplorer.Project.Target.1 + + Desktop Qt 5.11.0 clang 64bit + Desktop Qt 5.11.0 clang 64bit + qt.qt5.5110.clang_64_kit + 0 + 0 + 0 + + /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Desktop_Qt_5_11_0_clang_64bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Desktop_Qt_5_11_0_clang_64bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Desktop_Qt_5_11_0_clang_64bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy Configuration + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + Mu + + Qt4ProjectManager.Qt4RunConfiguration:/Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/Mu/Mu.pro + true + + Mu.pro + false + + /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Desktop_Qt_5_11_0_clang_64bit-Debug/Mu.app/Contents/MacOS + 3768 + false + true + false + false + true + + 1 + + ProjectExplorer.Project.TargetCount 2 diff --git a/src/hardwareRegisters.c b/src/hardwareRegisters.c index 22c82f0..4b3edd9 100644 --- a/src/hardwareRegisters.c +++ b/src/hardwareRegisters.c @@ -867,62 +867,78 @@ void setHwRegister16(uint32_t address, uint16_t value){ case CSA: setCsa(value); - resetAddressSpace(); + if((value & 0x000F) != (registerArrayRead16(CSA) & 0x000F)) + resetAddressSpace();//only reset address space if size changed or enabled/disabled break; case CSB: setCsb(value); - resetAddressSpace(); + if((value & 0x000F) != (registerArrayRead16(CSB) & 0x000F)) + resetAddressSpace();//only reset address space if size changed or enabled/disabled break; case CSC: setCsc(value); - resetAddressSpace(); + if((value & 0x000F) != (registerArrayRead16(CSC) & 0x000F)) + resetAddressSpace();//only reset address space if size changed or enabled/disabled break; case CSD: setCsd(value); - resetAddressSpace(); + if((value & 0x000F) != (registerArrayRead16(CSD) & 0x000F)) + resetAddressSpace();//only reset address space if size changed or enabled/disabled break; case CSGBA: //sets the starting location of ROM(0x10000000) - setCsgba(value); - resetAddressSpace(); + if((value & 0xFFFE) != registerArrayRead16(CSGBA)){ + setCsgba(value); + resetAddressSpace(); + } break; case CSGBB: //sets the starting location of the SED1376(0x1FF80000) - setCsgbb(value); - resetAddressSpace(); + if((value & 0xFFFE) != registerArrayRead16(CSGBB)){ + setCsgbb(value); + resetAddressSpace(); + } break; case CSGBC: //sets the starting location of USBPhilipsPDIUSBD12(address 0x10400000) //since I dont plan on adding hotsync should be fine to leave unemulated, its unemulated in pose - setCsgbc(value); - resetAddressSpace(); + if((value & 0xFFFE) != registerArrayRead16(CSGBC)){ + setCsgbc(value); + resetAddressSpace(); + } break; case CSGBD: //sets the starting location of RAM(0x00000000) - setCsgbd(value); - resetAddressSpace(); + if((value & 0xFFFE) != registerArrayRead16(CSGBD)){ + setCsgbd(value); + resetAddressSpace(); + } break; case CSUGBA: - registerArrayWrite16(CSUGBA, value); - //refresh all chipselect address lines - setCsgba(registerArrayRead16(CSGBA)); - setCsgbb(registerArrayRead16(CSGBB)); - setCsgbc(registerArrayRead16(CSGBC)); - setCsgbd(registerArrayRead16(CSGBD)); - resetAddressSpace(); + if((value & 0xF777) != registerArrayRead16(CSUGBA)){ + registerArrayWrite16(CSUGBA, value); + //refresh all chipselect address lines + setCsgba(registerArrayRead16(CSGBA)); + setCsgbb(registerArrayRead16(CSGBB)); + setCsgbc(registerArrayRead16(CSGBC)); + setCsgbd(registerArrayRead16(CSGBD)); + resetAddressSpace(); + } break; case CSCTRL1: - setCsctrl1(value); - resetAddressSpace(); + if((value & 0x7F55) != registerArrayRead16(CSCTRL1)){ + setCsctrl1(value); + resetAddressSpace(); + } break; case SPICONT2: