Permalink
Browse files

Merge branch 'feature/input-revamp' into medusa

  • Loading branch information...
endrift committed Jul 24, 2017
2 parents 76b8916 + 5122c39 commit 394a2e0bb886a779e9479935fc0082afa4b7ad26
Showing with 2,200 additions and 695 deletions.
  1. +10 −3 .travis-deps.sh
  2. +1 −4 .travis.yml
  3. +7 −0 CHANGES
  4. +3 −3 CMakeLists.txt
  5. +1 −0 include/mgba/core/thread.h
  6. +8 −0 src/core/rewind.c
  7. +12 −5 src/core/thread.c
  8. +11 −1 src/gba/gba.c
  9. +0 −1 src/platform/python/CMakeLists.txt
  10. +6 −5 src/platform/qt/AssetTile.cpp
  11. +6 −4 src/platform/qt/AssetTile.h
  12. +12 −12 src/platform/qt/AssetView.cpp
  13. +11 −5 src/platform/qt/AssetView.h
  14. +9 −1 src/platform/qt/AudioProcessor.cpp
  15. +9 −3 src/platform/qt/AudioProcessor.h
  16. +13 −5 src/platform/qt/AudioProcessorQt.cpp
  17. +3 −2 src/platform/qt/AudioProcessorQt.h
  18. +21 −16 src/platform/qt/AudioProcessorSDL.cpp
  19. +2 −2 src/platform/qt/AudioProcessorSDL.h
  20. +6 −5 src/platform/qt/CMakeLists.txt
  21. +7 −8 src/platform/qt/CheatsView.cpp
  22. +4 −3 src/platform/qt/CheatsView.h
  23. +3 −3 src/platform/qt/ConfigController.cpp
  24. +698 −0 src/platform/qt/CoreController.cpp
  25. +194 −0 src/platform/qt/CoreController.h
  26. +165 −0 src/platform/qt/CoreManager.cpp
  27. +45 −0 src/platform/qt/CoreManager.h
  28. +14 −10 src/platform/qt/DebuggerConsoleController.cpp
  29. +3 −3 src/platform/qt/DebuggerConsoleController.h
  30. +26 −12 src/platform/qt/DebuggerController.cpp
  31. +6 −3 src/platform/qt/DebuggerController.h
  32. +6 −3 src/platform/qt/Display.h
  33. +25 −47 src/platform/qt/DisplayGL.cpp
  34. +10 −10 src/platform/qt/DisplayGL.h
  35. +14 −3 src/platform/qt/DisplayQt.cpp
  36. +4 −3 src/platform/qt/DisplayQt.h
  37. +12 −6 src/platform/qt/GBAApp.cpp
  38. +5 −0 src/platform/qt/GBAApp.h
  39. +5 −5 src/platform/qt/GDBController.cpp
  40. +3 −3 src/platform/qt/GDBController.h
  41. +7 −0 src/platform/qt/GIFView.cpp
  42. +6 −0 src/platform/qt/GIFView.h
  43. +8 −8 src/platform/qt/IOViewer.cpp
  44. +5 −3 src/platform/qt/IOViewer.h
  45. +4 −2 src/platform/qt/LoadSaveState.cpp
  46. +5 −3 src/platform/qt/LoadSaveState.h
  47. +8 −5 src/platform/qt/LogController.cpp
  48. +5 −2 src/platform/qt/LogController.h
  49. +2 −2 src/platform/qt/MemoryModel.cpp
  50. +3 −2 src/platform/qt/MemoryModel.h
  51. +7 −15 src/platform/qt/MemorySearch.cpp
  52. +5 −3 src/platform/qt/MemorySearch.h
  53. +7 −10 src/platform/qt/MemoryView.cpp
  54. +3 −3 src/platform/qt/MemoryView.h
  55. +7 −9 src/platform/qt/MultiplayerController.cpp
  56. +5 −5 src/platform/qt/MultiplayerController.h
  57. +11 −10 src/platform/qt/ObjView.cpp
  58. +4 −3 src/platform/qt/ObjView.h
  59. +23 −22 src/platform/qt/OverrideView.cpp
  60. +11 −4 src/platform/qt/OverrideView.h
  61. +5 −4 src/platform/qt/PaletteView.cpp
  62. +5 −3 src/platform/qt/PaletteView.h
  63. +3 −7 src/platform/qt/ROMInfo.cpp
  64. +4 −2 src/platform/qt/ROMInfo.h
  65. +24 −25 src/platform/qt/SensorView.cpp
  66. +6 −3 src/platform/qt/SensorView.h
  67. +15 −7 src/platform/qt/SettingsView.cpp
  68. +15 −14 src/platform/qt/TileView.cpp
  69. +4 −3 src/platform/qt/TileView.h
  70. +27 −1 src/platform/qt/VFileDevice.cpp
  71. +10 −2 src/platform/qt/VFileDevice.h
  72. +8 −0 src/platform/qt/VideoView.cpp
  73. +8 −0 src/platform/qt/VideoView.h
  74. +399 −286 src/platform/qt/Window.cpp
  75. +26 −15 src/platform/qt/Window.h
  76. +75 −7 src/platform/qt/input/InputController.cpp
  77. +27 −6 src/platform/qt/input/InputController.h
  78. +3 −0 src/platform/qt/library/LibraryController.cpp
View
@@ -3,15 +3,22 @@ if [ $TRAVIS_OS_NAME = "osx" ]; then
brew update
brew install qt5 ffmpeg imagemagick sdl2 libzip libpng
if [ "$CC" == "gcc" ]; then
- brew install gcc@4.9
- export CC=gcc-4.9
- export CXX=g++-4.9
+ brew install gcc@5
+ export CC=gcc-5
+ export CXX=g++-5
fi
else
sudo apt-get clean
+ sudo add-apt-repository -y ppa:george-edison55/cmake-3.x
+ sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install -y -q cmake libedit-dev libmagickwand-dev \
libpng-dev libsdl2-dev libzip-dev qtbase5-dev \
libqt5opengl5-dev qtmultimedia5-dev libavcodec-dev \
libavutil-dev libavformat-dev libavresample-dev libswscale-dev
+ if [ "$CC" == "gcc" ]; then
+ sudo apt-get install -y -q gcc-5 g++-5
+ export CC=gcc-5
+ export CXX=g++-5
+ fi
fi
View
@@ -2,9 +2,6 @@ language: c
sudo: required
matrix:
include:
- - os: linux
- dist: trusty
- compiler: clang
- os: linux
dist: trusty
compiler: gcc
@@ -16,4 +13,4 @@ matrix:
before_install:
- source ./.travis-deps.sh
-script: mkdir build && cd build && cmake -DCMAKE_PREFIX_PATH=/usr/local/opt/qt5 .. && make
+script: mkdir build && cd build && cmake -DCMAKE_PREFIX_PATH=/usr/local/opt/qt5 .. && make -j2
View
@@ -23,10 +23,17 @@ Features:
Bugfixes:
- GB Audio: Make audio unsigned with bias (fixes mgba.io/i/749)
- Python: Fix importing .gb or .gba before .core
+<<<<<<< HEAD
+=======
+ - GBA: Reset active region as needed when loading a ROM
+ - Qt: Fix command line debugger closing second game
+>>>>>>> feature/input-revamp
Misc:
- GBA Timer: Use global cycles for timers
- GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722)
- All: Make FIXED_ROM_BUFFER an option instead of 3DS-only
+ - Qt: Don't rebuild library view if style hasn't changed
+ - Qt: Redo GameController into multiple classes
0.6.0: (2017-07-16)
Features:
View
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 2.8.11)
+cmake_minimum_required(VERSION 3.1)
project(medusa)
set(BINARY_NAME medusa-emu CACHE INTERNAL "Name of output binaries")
if(NOT MSVC)
@@ -262,7 +262,7 @@ if(DEFINED 3DS OR DEFINED PSP2 OR DEFINED WII)
set(USE_SQLITE3 OFF)
endif()
-if(DEFINED 3DS OR DEFINED WII)
+if(DEFINED 3DS)
add_definitions(-DFIXED_ROM_BUFFER)
endif()
@@ -625,7 +625,7 @@ endif()
if(USE_ELF)
list(APPEND FEATURES ELF)
include_directories(AFTER ${LIBELF_INCLUDE_DIRS})
- find_file(ELF_REPL_H elf_repl.h PATHS ${LIBELF_INCLUDE_DIRS})
+ find_file(ELF_REPL_H elf_repl.h PATHS ${LIBELF_INCLUDE_DIRS} NO_CMAKE_FIND_ROOT_PATH)
if (ELF_REPL_H)
add_definitions(-DUSE_ELF_REPL)
endif()
@@ -103,6 +103,7 @@ void mCoreThreadWaitFromThread(struct mCoreThread* threadContext);
void mCoreThreadStopWaiting(struct mCoreThread* threadContext);
void mCoreThreadSetRewinding(struct mCoreThread* threadContext, bool);
+void mCoreThreadRewindParamsChanged(struct mCoreThread* threadContext);
struct mCoreThread* mCoreThreadGet(void);
struct mLogger* mCoreThreadLogger(void);
View
@@ -19,6 +19,9 @@ THREAD_ENTRY _rewindThread(void* context);
#endif
void mCoreRewindContextInit(struct mCoreRewindContext* context, size_t entries, bool onThread) {
+ if (context->currentState) {
+ return;
+ }
mCoreRewindPatchesInit(&context->patchMemory, entries);
size_t e;
for (e = 0; e < entries; ++e) {
@@ -42,6 +45,9 @@ void mCoreRewindContextInit(struct mCoreRewindContext* context, size_t entries,
}
void mCoreRewindContextDeinit(struct mCoreRewindContext* context) {
+ if (!context->currentState) {
+ return;
+ }
#ifndef DISABLE_THREADING
if (context->onThread) {
MutexLock(&context->mutex);
@@ -55,6 +61,8 @@ void mCoreRewindContextDeinit(struct mCoreRewindContext* context) {
#endif
context->previousState->close(context->previousState);
context->currentState->close(context->currentState);
+ context->previousState = NULL;
+ context->currentState = NULL;
size_t s;
for (s = 0; s < mCoreRewindPatchesSize(&context->patchMemory); ++s) {
deinitPatchFast(mCoreRewindPatchesGetPointer(&context->patchMemory, s));
View
@@ -167,10 +167,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
mLogFilterLoad(threadContext->logger.d.filter, &core->config);
}
- if (core->opts.rewindEnable && core->opts.rewindBufferCapacity > 0) {
- mCoreRewindContextInit(&threadContext->impl->rewind, core->opts.rewindBufferCapacity, true);
- threadContext->impl->rewind.stateFlags = core->opts.rewindSave ? SAVESTATE_SAVEDATA : 0;
- }
+ mCoreThreadRewindParamsChanged(threadContext);
_changeState(threadContext->impl, THREAD_RUNNING, true);
@@ -252,7 +249,7 @@ static THREAD_ENTRY _mCoreThreadRun(void* context) {
}
bool mCoreThreadStart(struct mCoreThread* threadContext) {
- threadContext->impl = malloc(sizeof(*threadContext->impl));
+ threadContext->impl = calloc(sizeof(*threadContext->impl), 1);
threadContext->impl->state = THREAD_INITIALIZED;
threadContext->logger.p = threadContext;
if (!threadContext->logger.d.log) {
@@ -547,6 +544,16 @@ void mCoreThreadSetRewinding(struct mCoreThread* threadContext, bool rewinding)
MutexUnlock(&threadContext->impl->stateMutex);
}
+void mCoreThreadRewindParamsChanged(struct mCoreThread* threadContext) {
+ struct mCore* core = threadContext->core;
+ if (core->opts.rewindEnable && core->opts.rewindBufferCapacity > 0) {
+ mCoreRewindContextInit(&threadContext->impl->rewind, core->opts.rewindBufferCapacity, true);
+ threadContext->impl->rewind.stateFlags = core->opts.rewindSave ? SAVESTATE_SAVEDATA : 0;
+ } else {
+ mCoreRewindContextDeinit(&threadContext->impl->rewind);
+ }
+}
+
void mCoreThreadWaitFromThread(struct mCoreThread* threadContext) {
MutexLock(&threadContext->impl->stateMutex);
if (threadContext->impl->interruptDepth && threadContext->impl->savedState == THREAD_RUNNING) {
View
@@ -208,7 +208,7 @@ void GBAReset(struct ARMCore* cpu) {
gba->debug = false;
memset(gba->debugString, 0, sizeof(gba->debugString));
- if (!gba->romVf) {
+ if (!gba->romVf && gba->memory.rom) {
GBASkipBIOS(gba);
}
}
@@ -312,6 +312,10 @@ bool GBALoadNull(struct GBA* gba) {
gba->memory.romMask = SIZE_CART0 - 1;
gba->memory.mirroring = false;
gba->romCrc32 = 0;
+
+ if (gba->cpu) {
+ gba->cpu->memory.setActiveRegion(gba->cpu, gba->cpu->gprs[ARM_PC]);
+ }
return true;
}
@@ -335,6 +339,9 @@ bool GBALoadMB(struct GBA* gba, struct VFile* vf) {
gba->memory.romSize = 0;
gba->memory.romMask = 0;
gba->romCrc32 = doCrc32(gba->memory.wram, gba->pristineRomSize);
+ if (gba->cpu && gba->memory.activeRegion == REGION_WORKING_RAM) {
+ gba->cpu->memory.setActiveRegion(gba->cpu, gba->cpu->gprs[ARM_PC]);
+ }
return true;
}
@@ -379,6 +386,9 @@ bool GBALoadROM(struct GBA* gba, struct VFile* vf) {
gba->memory.romSize = SIZE_CART0;
gba->isPristine = false;
}
+ if (gba->cpu && gba->memory.activeRegion >= REGION_CART0) {
+ gba->cpu->memory.setActiveRegion(gba->cpu, gba->cpu->gprs[ARM_PC]);
+ }
// TODO: error check
return true;
}
@@ -30,7 +30,6 @@ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/lib.c PROPERTIES GENERAT
file(GLOB PYTHON_SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.c)
add_library(${BINARY_NAME}-pylib STATIC ${CMAKE_CURRENT_BINARY_DIR}/lib.c ${PYTHON_SRC})
-add_dependencies(${BINARY_NAME}-pylib ${CMAKE_CURRENT_SOURCE_DIR}/_builder.py)
set_target_properties(${BINARY_NAME}-pylib PROPERTIES INCLUDE_DIRECTORIES "${CMAKE_BINARY_DIR};${INCLUDE_DIRECTORIES}")
set_target_properties(${BINARY_NAME}-pylib PROPERTIES COMPILE_DEFINITIONS "${OS_DEFINES};${FEATURE_DEFINES};${FUNCTION_DEFINES}")
set(PYTHON_LIBRARY ${BINARY_NAME}-pylib PARENT_SCOPE)
@@ -5,6 +5,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "AssetTile.h"
+#include "CoreController.h"
#include "GBAApp.h"
#include <QFontDatabase>
@@ -39,7 +40,7 @@ AssetTile::AssetTile(QWidget* parent)
m_ui.b->setFont(font);
}
-void AssetTile::setController(GameController* controller) {
+void AssetTile::setController(std::shared_ptr<CoreController> controller) {
m_tileCache = controller->tileCache();
switch (controller->platform()) {
#ifdef M_CORE_GBA
@@ -83,7 +84,7 @@ void AssetTile::selectIndex(int index) {
m_index = index;
const uint16_t* data;
- mTileCacheSetPalette(m_tileCache.get(), m_paletteSet);
+ mTileCacheSetPalette(m_tileCache, m_paletteSet);
unsigned bpp = 8 << m_tileCache->bpp;
int dispIndex = index;
int paletteId = m_paletteId;
@@ -98,7 +99,7 @@ void AssetTile::selectIndex(int index) {
#endif
dispIndex -= m_boundary;
}
- data = mTileCacheGetTile(m_tileCache.get(), index, paletteId);
+ data = mTileCacheGetTile(m_tileCache, index, paletteId);
m_ui.tileId->setText(QString::number(dispIndex * (1 + m_paletteSet)));
m_ui.address->setText(tr("%0%1%2")
.arg(m_addressWidth == 4 ? index >= m_boundary : 0)
@@ -112,7 +113,7 @@ void AssetTile::selectIndex(int index) {
void AssetTile::selectColor(int index) {
const uint16_t* data;
- mTileCacheSetPalette(m_tileCache.get(), m_paletteSet);
+ mTileCacheSetPalette(m_tileCache, m_paletteSet);
unsigned bpp = 8 << m_tileCache->bpp;
int paletteId = m_paletteId;
// XXX: Do this better
@@ -121,7 +122,7 @@ void AssetTile::selectColor(int index) {
paletteId += m_tileCache->count / 2;
}
#endif
- data = mTileCacheGetTile(m_tileCache.get(), m_index, m_paletteId);
+ data = mTileCacheGetTile(m_tileCache, m_index, m_paletteId);
uint16_t color = data[index];
m_ui.color->setColor(0, color);
m_ui.color->update();
@@ -6,20 +6,22 @@
#ifndef QGBA_ASSET_TILE
#define QGBA_ASSET_TILE
-#include "GameController.h"
-
#include "ui_AssetTile.h"
+#include <memory>
+
#include <mgba/core/tile-cache.h>
namespace QGBA {
+class CoreController;
+
class AssetTile : public QGroupBox {
Q_OBJECT
public:
AssetTile(QWidget* parent = nullptr);
- void setController(GameController*);
+ void setController(std::shared_ptr<CoreController>);
public slots:
void setPalette(int);
@@ -30,7 +32,7 @@ public slots:
private:
Ui::AssetTile m_ui;
- std::shared_ptr<mTileCache> m_tileCache;
+ mTileCache* m_tileCache;
int m_paletteId = 0;
int m_paletteSet = 0;
int m_index = 0;
@@ -5,32 +5,32 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "AssetView.h"
-#include <QTimer>
+#include "CoreController.h"
-#include <mgba/core/tile-cache.h>
+#include <QTimer>
using namespace QGBA;
-AssetView::AssetView(GameController* controller, QWidget* parent)
+AssetView::AssetView(std::shared_ptr<CoreController> controller, QWidget* parent)
: QWidget(parent)
, m_tileCache(controller->tileCache())
, m_controller(controller)
{
m_updateTimer.setSingleShot(true);
m_updateTimer.setInterval(1);
- connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateTiles()));
+ connect(&m_updateTimer, &QTimer::timeout, this, static_cast<void(AssetView::*)()>(&AssetView::updateTiles));
- connect(m_controller, &GameController::frameAvailable, &m_updateTimer,
+ connect(controller.get(), &CoreController::frameAvailable, &m_updateTimer,
static_cast<void(QTimer::*)()>(&QTimer::start));
- connect(m_controller, &GameController::gameStopped, this, &AssetView::close);
- connect(m_controller, &GameController::gameStopped, &m_updateTimer, &QTimer::stop);
+ connect(controller.get(), &CoreController::stopping, this, &AssetView::close);
+ connect(controller.get(), &CoreController::stopping, &m_updateTimer, &QTimer::stop);
}
-void AssetView::updateTiles(bool force) {
- if (!m_controller->isLoaded()) {
- return;
- }
+void AssetView::updateTiles() {
+ updateTiles(false);
+}
+void AssetView::updateTiles(bool force) {
switch (m_controller->platform()) {
#ifdef M_CORE_GBA
case PLATFORM_GBA:
@@ -56,7 +56,7 @@ void AssetView::showEvent(QShowEvent*) {
}
void AssetView::compositeTile(unsigned tileId, void* buffer, size_t stride, size_t x, size_t y, int depth) {
- const uint8_t* tile = mTileCacheGetRawTile(m_tileCache.get(), tileId);
+ const uint8_t* tile = mTileCacheGetRawTile(m_tileCache, tileId);
uint8_t* pixels = static_cast<uint8_t*>(buffer);
size_t base = stride * y + x;
switch (depth) {
@@ -6,22 +6,28 @@
#ifndef QGBA_ASSET_VIEW
#define QGBA_ASSET_VIEW
+#include <QTimer>
#include <QWidget>
-#include "GameController.h"
+#include <mgba/core/tile-cache.h>
+
+#include <memory>
namespace QGBA {
+class CoreController;
+
class AssetView : public QWidget {
Q_OBJECT
public:
- AssetView(GameController* controller, QWidget* parent = nullptr);
+ AssetView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr);
void compositeTile(unsigned tileId, void* image, size_t stride, size_t x, size_t y, int depth = 8);
protected slots:
- void updateTiles(bool force = false);
+ void updateTiles();
+ void updateTiles(bool force);
protected:
#ifdef M_CORE_GBA
@@ -34,10 +40,10 @@ protected slots:
void resizeEvent(QResizeEvent*) override;
void showEvent(QShowEvent*) override;
- const std::shared_ptr<mTileCache> m_tileCache;
+ mTileCache* const m_tileCache;
private:
- GameController* m_controller;
+ std::shared_ptr<CoreController> m_controller;
QTimer m_updateTimer;
};
Oops, something went wrong.

0 comments on commit 394a2e0

Please sign in to comment.