From dc0aac322ccbac07e4680c0f96d2e487ef5f9080 Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Mon, 30 Jul 2018 10:27:00 -0700 Subject: [PATCH] Make touch input activate(it still dosent work, but it does activate :) ) without pushing the up button Also fix some reported bugs. --- qtBuildSystem/Mu/Mu.pro | 6 + qtBuildSystem/Mu/Mu.pro.user | 324 +++++++++++++++++++++++++++++++- qtBuildSystem/Mu/mainwindow.cpp | 21 ++- qtBuildSystem/Mu/mainwindow.qrc | 2 +- qtBuildSystem/Mu/mainwindow.ui | 2 +- src/68328Functions.c | 2 +- src/debug/sandbox.c | 26 ++- src/emulator.c | 12 ++ src/hardwareRegisters.c | 2 + 9 files changed, 374 insertions(+), 23 deletions(-) diff --git a/qtBuildSystem/Mu/Mu.pro b/qtBuildSystem/Mu/Mu.pro index d68df3c..a7dc94b 100644 --- a/qtBuildSystem/Mu/Mu.pro +++ b/qtBuildSystem/Mu/Mu.pro @@ -30,6 +30,12 @@ macx { QMAKE_INFO_PLIST = macos/Info.plist } +android { + QMAKE_CFLAGS += -fopenmp + QMAKE_CXXFLAGS += -fopenmp + QMAKE_LFLAGS += -fopenmp +} + CONFIG(debug, debug|release){ DEFINES += EMU_DEBUG EMU_SANDBOX EMU_CUSTOM_DEBUG_LOG_HANDLER # DEFINES += EMU_SANDBOX_OPCODE_LEVEL_DEBUG EMU_SANDBOX_LOG_APIS diff --git a/qtBuildSystem/Mu/Mu.pro.user b/qtBuildSystem/Mu/Mu.pro.user index 0a03b89..97716c9 100644 --- a/qtBuildSystem/Mu/Mu.pro.user +++ b/qtBuildSystem/Mu/Mu.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -8,7 +8,7 @@ ProjectExplorer.Project.ActiveTarget - 0 + 1 ProjectExplorer.Project.EditorSettings @@ -324,9 +324,327 @@ 1 + + ProjectExplorer.Project.Target.1 + + Android for armeabi-v7a (GCC 4.9, Qt 5.11.1 for Android armv7) + Android for armeabi-v7a (GCC 4.9, Qt 5.11.1 for Android armv7) + {2b7514c9-01b0-4a22-86d3-ec2d92c1ab55} + 0 + 0 + 0 + + /Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/build-Mu-Android_for_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + + true + Copy application data + + Qt4ProjectManager.AndroidPackageInstallationStep + + + android-26 + + true + Build Android APK + + QmakeProjectManager.AndroidBuildApkStep + false + false + + 4 + 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-Android_for_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + true + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + + true + Copy application data + + Qt4ProjectManager.AndroidPackageInstallationStep + + + android-26 + + true + Build Android APK + + QmakeProjectManager.AndroidBuildApkStep + false + false + + 4 + 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-Android_for_armeabi_v7a_GCC_4_9_Qt_5_11_1_for_Android_armv7-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + true + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + + true + Copy application data + + Qt4ProjectManager.AndroidPackageInstallationStep + + + android-26 + + true + Build Android APK + + QmakeProjectManager.AndroidBuildApkStep + false + false + + 4 + 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 + + + + true + Deploy to Android device + + Qt4ProjectManager.AndroidDeployQtStep + false + + 1 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy to Android device + + Qt4ProjectManager.AndroidDeployConfiguration2 + + 1 + + ZY223CQT6S + 27 + + + 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 + + + + + Mu + + Qt4ProjectManager.AndroidRunConfiguration:/Users/Hoppy/Desktop/projects/PalmEmuRedo/libretro-palmm515emu/qtBuildSystem/Mu/Mu.pro + 3768 + false + true + false + false + true + + 1 + + ProjectExplorer.Project.TargetCount - 1 + 2 ProjectExplorer.Project.Updater.FileVersion diff --git a/qtBuildSystem/Mu/mainwindow.cpp b/qtBuildSystem/Mu/mainwindow.cpp index ec3a33a..b36f714 100644 --- a/qtBuildSystem/Mu/mainwindow.cpp +++ b/qtBuildSystem/Mu/mainwindow.cpp @@ -52,17 +52,24 @@ MainWindow::MainWindow(QWidget* parent) : ui->ctrlBtn->setIcon(QIcon(":/buttons/images/play.png")); + + //set resource directory if first launch + if(settings.value("resourceDirectory", "").toString() == ""){ + QString path; + #if defined(Q_OS_ANDROID) - if(settings.value("resourceDirectory", "").toString() == "") - settings.setValue("resourceDirectory", "/sdcard/Mu"); + path = "/sdcard/Mu"; #elif defined(Q_OS_IOS) - if(settings.value("resourceDirectory", "").toString() == "") - settings.setValue("resourceDirectory", "/var/mobile/Media"); + path = "/var/mobile/Media/Mu"; #else - if(settings.value("resourceDirectory", "").toString() == "") - settings.setValue("resourceDirectory", QDir::homePath() + "/Mu"); + path = QDir::homePath() + "/Mu"; #endif + settings.setValue("resourceDirectory", path); + QDir(path).mkpath("."); + } + + #if defined(Q_OS_ANDROID) || defined(Q_OS_IOS) ui->debugger->hide(); #endif @@ -271,7 +278,7 @@ void MainWindow::on_screenshot_clicked(){ const QPixmap* currentScreenPixmap = ui->display->pixmap(); if(currentScreenPixmap != nullptr && !currentScreenPixmap->isNull()){ - uint64_t screenshotNumber = settings.value("screenshotNum", 0).toLongLong(); + qlonglong screenshotNumber = settings.value("screenshotNum", 0).toLongLong(); QString path = settings.value("resourceDirectory", "").toString(); QDir location = path + "/screenshots"; diff --git a/qtBuildSystem/Mu/mainwindow.qrc b/qtBuildSystem/Mu/mainwindow.qrc index b6b3476..0a5536d 100644 --- a/qtBuildSystem/Mu/mainwindow.qrc +++ b/qtBuildSystem/Mu/mainwindow.qrc @@ -7,7 +7,7 @@ images/notes.png images/power.png images/right.png - images/toDo.png + images/todo.png images/up.png images/pause.png images/play.png diff --git a/qtBuildSystem/Mu/mainwindow.ui b/qtBuildSystem/Mu/mainwindow.ui index 3f68e4e..83a7f84 100644 --- a/qtBuildSystem/Mu/mainwindow.ui +++ b/qtBuildSystem/Mu/mainwindow.ui @@ -237,7 +237,7 @@ - :/buttons/images/toDo.png:/buttons/images/toDo.png + :/buttons/images/todo.png:/buttons/images/todo.png diff --git a/src/68328Functions.c b/src/68328Functions.c index 84a5f6d..57ed5d7 100755 --- a/src/68328Functions.c +++ b/src/68328Functions.c @@ -102,7 +102,7 @@ void patchTo68328(){ patchOpcode(OPCODE_BGND, m68k_op_bgnd, 16/*dont know how many cycles, average opcode*/); - for(uint32_t currentOpcode = OPCODE_CPU32_START; currentOpcode <= OPCODE_CPU32_END; currentOpcode++) + for(uint16_t currentOpcode = OPCODE_CPU32_START; currentOpcode <= OPCODE_CPU32_END; currentOpcode++) patchOpcode(currentOpcode, m68k_op_cpu32_dispatch, 91/*dont know how many cycles, most expensive opcode*/); //68328 may actually use some 68020 opcodes, those will be patched in if and when Palm OS attempts to call one diff --git a/src/debug/sandbox.c b/src/debug/sandbox.c index 7597ceb..2cc62f7 100644 --- a/src/debug/sandbox.c +++ b/src/debug/sandbox.c @@ -427,17 +427,23 @@ void sandboxTest(uint32_t test){ break; case SANDBOX_SEND_OS_TOUCH:{ - //press - m68k_write_memory_16(0xFFFFFFE0 - 4, palmInput.touchscreenX); - m68k_write_memory_16(0xFFFFFFE0 - 2, palmInput.touchscreenY); - callFunction(false, 0x00000000, "PenScreenToRaw", "w(p)", 0xFFFFFFE0 - 4); - callFunction(false, 0x00000000, "EvtEnqueuePenPoint", "w(p)", 0xFFFFFFE0 - 4); + //the hack only seems to work when in an interrupt, a hack for a hack :( + m68k_set_irq(5); - //release - m68k_write_memory_16(0xFFFFFFE0 - 4, (uint16_t)-1); - m68k_write_memory_16(0xFFFFFFE0 - 2, (uint16_t)-1); - callFunction(false, 0x00000000, "PenScreenToRaw", "w(p)", 0xFFFFFFE0 - 4); - callFunction(false, 0x00000000, "EvtEnqueuePenPoint", "w(p)", 0xFFFFFFE0 - 4); + if(palmInput.touchscreenTouched){ + //press + m68k_write_memory_16(0xFFFFFFE0 - 4, palmInput.touchscreenX); + m68k_write_memory_16(0xFFFFFFE0 - 2, palmInput.touchscreenY); + callFunction(false, 0x00000000, "PenScreenToRaw", "w(p)", 0xFFFFFFE0 - 4); + callFunction(false, 0x00000000, "EvtEnqueuePenPoint", "w(p)", 0xFFFFFFE0 - 4); + } + else{ + //release + m68k_write_memory_16(0xFFFFFFE0 - 4, (uint16_t)-1); + m68k_write_memory_16(0xFFFFFFE0 - 2, (uint16_t)-1); + callFunction(false, 0x00000000, "PenScreenToRaw", "w(p)", 0xFFFFFFE0 - 4); + callFunction(false, 0x00000000, "EvtEnqueuePenPoint", "w(p)", 0xFFFFFFE0 - 4); + } } break; } diff --git a/src/emulator.c b/src/emulator.c index 8355202..a3b38cf 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -534,7 +534,18 @@ uint32_t emulatorInstallPrcPdb(buffer_t file){ void emulateFrame(){ refreshInputState(); + static uint16_t oldTouchX = 0; + static uint16_t oldTouchY = 0; + static bool oldTouchDown = false; + if(palmInput.touchscreenX != oldTouchX || palmInput.touchscreenY != oldTouchY || palmInput.touchscreenTouched != oldTouchDown){ + sandboxTest(SANDBOX_SEND_OS_TOUCH); + oldTouchX = palmInput.touchscreenX; + oldTouchY = palmInput.touchscreenY; + oldTouchDown = palmInput.touchscreenTouched; + } + //hack, this is just an easy way to use the sandbox without attaching it to the emulator frontend + /* static bool allowRun1 = true; if(palmInput.buttonUp){ palmInput.buttonUp = false; @@ -547,6 +558,7 @@ void emulateFrame(){ else{ allowRun1 = true; } + */ while(palmCycleCounter < CRYSTAL_FREQUENCY / EMU_FPS){ if(palmCrystalCycles != 0.0 && !lowPowerStopActive){ diff --git a/src/hardwareRegisters.c b/src/hardwareRegisters.c index c684feb..ff8df66 100644 --- a/src/hardwareRegisters.c +++ b/src/hardwareRegisters.c @@ -58,6 +58,7 @@ void refreshInputState(){ updatePowerButtonLedStatus(); //update touchscreen state + /* if(!(registerArrayRead8(PFSEL) & 0x02)){ uint16_t icr = registerArrayRead16(ICR); bool penIrqPin = !(ads7846PenIrqEnabled && palmInput.touchscreenTouched);//penIrqPin pulled low on touch @@ -71,6 +72,7 @@ void refreshInputState(){ else clearIprIsrBit(INT_IRQ5); } + */ //check for button presses and interrupts checkPortDInterrupts();//this calls checkInterrupts() so it doesnt need to be called above