From 8929a96e6e679953c199224e5bfd6ff531e5f991 Mon Sep 17 00:00:00 2001 From: David Voswinkel Date: Wed, 20 May 2009 00:45:44 +0200 Subject: [PATCH] o irq button to bsnes menu o trigger irq from bsnes engine o add visual feedback in snes poc --- snes/irqtest/irqtest.asm | 16 +++++++++++----- tools/bsnes/snes/snes.cpp | 4 ++++ tools/bsnes/snes/snes.hpp | 1 + tools/bsnes/ui_qt/base/main.cpp | 3 +++ tools/bsnes/ui_qt/base/main.hpp | 2 ++ tools/bsnes/ui_qt/config.cpp | 2 ++ tools/bsnes/ui_qt/utility/cartridge.cpp | 9 +++++++++ tools/bsnes/ui_qt/utility/utility.hpp | 2 +- 8 files changed, 33 insertions(+), 6 deletions(-) diff --git a/snes/irqtest/irqtest.asm b/snes/irqtest/irqtest.asm index dc3603e..3b28a9a 100644 --- a/snes/irqtest/irqtest.asm +++ b/snes/irqtest/irqtest.asm @@ -14,6 +14,8 @@ ; Main Code ;============================================================================ +.EQU PalNum $0000 ; Use some RAM + .BANK 0 SLOT 0 .ORG 0 .SECTION "MainCode" @@ -46,17 +48,17 @@ Start_do: ; Setup Video modes and other stuff, then turn on the screen jsr SetupVideo - sei - cop prints "Init done" - stz $3001 - - cop lda #$81 sta $4200 Infinity: + lda PalNum + clc + adc #$01 + and #$ff ; If > palette starting color > 24 (00011100), make 0 + sta PalNum jmp Infinity ; bwa hahahahaha @@ -111,6 +113,10 @@ NMIHandler: rti IRQHandler: + stz $2121 + lda PalNum + sta $2122 + sta $2122 prints "IRQHandler" rti diff --git a/tools/bsnes/snes/snes.cpp b/tools/bsnes/snes/snes.cpp index cf8dfe1..0db7ba2 100755 --- a/tools/bsnes/snes/snes.cpp +++ b/tools/bsnes/snes/snes.cpp @@ -64,6 +64,10 @@ void SNES::term() { snesinterface.term(); } +void SNES::irq() { + cpu.triggerIRQ(); +} + void SNES::power() { snes_region = max(0, min(2, snes.config.region)); snes_expansion = max(0, min(1, snes.config.expansion_port)); diff --git a/tools/bsnes/snes/snes.hpp b/tools/bsnes/snes/snes.hpp index 20fd742..17a958f 100755 --- a/tools/bsnes/snes/snes.hpp +++ b/tools/bsnes/snes/snes.hpp @@ -60,6 +60,7 @@ public: virtual void term(); virtual void power(); virtual void reset(); + virtual void irq(); virtual void frame(); virtual void scanline(); diff --git a/tools/bsnes/ui_qt/base/main.cpp b/tools/bsnes/ui_qt/base/main.cpp index 6d2d8bd..ffdbcb4 100755 --- a/tools/bsnes/ui_qt/base/main.cpp +++ b/tools/bsnes/ui_qt/base/main.cpp @@ -12,6 +12,7 @@ void MainWindow::setup() { system_power_off = system_power->addAction("Off"); system_power_off->setCheckable(true); system_reset = system->addAction("&Reset"); + system_irq = system->addAction("&Irq"); system->addSeparator(); system_port1 = system->addMenu("Controller Port 1"); system_port1_none = system_port1->addAction("&None"); @@ -150,6 +151,7 @@ void MainWindow::setup() { connect(system_power_on, SIGNAL(triggered()), this, SLOT(powerOn())); connect(system_power_off, SIGNAL(triggered()), this, SLOT(powerOff())); connect(system_reset, SIGNAL(triggered()), this, SLOT(reset())); + connect(system_irq, SIGNAL(triggered()), this, SLOT(irq())); connect(system_port1_none, SIGNAL(triggered()), this, SLOT(setPort1None())); connect(system_port1_joypad, SIGNAL(triggered()), this, SLOT(setPort1Joypad())); connect(system_port1_multitap, SIGNAL(triggered()), this, SLOT(setPort1Multitap())); @@ -251,6 +253,7 @@ void MainWindow::loadCartridge() { void MainWindow::powerOn() { utility.modifySystemState(Utility::PowerOn); } void MainWindow::powerOff() { utility.modifySystemState(Utility::PowerOff); } void MainWindow::reset() { utility.modifySystemState(Utility::Reset); } +void MainWindow::irq() { utility.modifySystemState(Utility::Irq); } void MainWindow::setPort1None() { snes.config.controller_port1 = SNES::Input::DeviceNone; utility.updateControllers(); syncUi(); } void MainWindow::setPort1Joypad() { snes.config.controller_port1 = SNES::Input::DeviceJoypad; utility.updateControllers(); syncUi(); } diff --git a/tools/bsnes/ui_qt/base/main.hpp b/tools/bsnes/ui_qt/base/main.hpp index f24638a..15e2f52 100755 --- a/tools/bsnes/ui_qt/base/main.hpp +++ b/tools/bsnes/ui_qt/base/main.hpp @@ -25,6 +25,7 @@ public: QAction *system_power_on; QAction *system_power_off; QAction *system_reset; + QAction *system_irq; QMenu *system_port1; QAction *system_port1_none; QAction *system_port1_joypad; @@ -86,6 +87,7 @@ public slots: void powerOn(); void powerOff(); void reset(); + void irq(); void setPort1None(); void setPort1Joypad(); void setPort1Multitap(); diff --git a/tools/bsnes/ui_qt/config.cpp b/tools/bsnes/ui_qt/config.cpp index e764d63..06b41f7 100755 --- a/tools/bsnes/ui_qt/config.cpp +++ b/tools/bsnes/ui_qt/config.cpp @@ -54,6 +54,7 @@ public: string loadCartridge; string pauseEmulation; string resetSystem; + string triggerIrq; string powerCycleSystem; string lowerSpeed; string raiseSpeed; @@ -204,6 +205,7 @@ public: attach(input.uiGeneral.loadCartridge = "none", "input.uiGeneral.loadCartridge"); attach(input.uiGeneral.pauseEmulation = "keyboard00.pause", "input.uiGeneral.pauseEmulation"); attach(input.uiGeneral.resetSystem = "none", "input.uiGeneral.resetSystem"); + attach(input.uiGeneral.triggerIrq = "none", "input.uiGeneral.triggerIrq"); attach(input.uiGeneral.powerCycleSystem = "none", "input.uiGeneral.powerCycleSystem"); attach(input.uiGeneral.lowerSpeed = "keyboard00.divide", "input.uiGeneral.lowerSpeed"); attach(input.uiGeneral.raiseSpeed = "keyboard00.multiply", "input.uiGeneral.raiseSpeed"); diff --git a/tools/bsnes/ui_qt/utility/cartridge.cpp b/tools/bsnes/ui_qt/utility/cartridge.cpp index 294fcd4..0c1ed72 100755 --- a/tools/bsnes/ui_qt/utility/cartridge.cpp +++ b/tools/bsnes/ui_qt/utility/cartridge.cpp @@ -154,6 +154,15 @@ void Utility::modifySystemState(system_state_t state) { showMessage("System was reset."); } break; + + case Irq: { + if(cartridge.loaded() == false || application.power == false) break; + + application.pause = false; + snes.irq(); + + showMessage("Irq was send."); + } break; } winMain->syncUi(); diff --git a/tools/bsnes/ui_qt/utility/utility.hpp b/tools/bsnes/ui_qt/utility/utility.hpp index afbaf57..d57208f 100755 --- a/tools/bsnes/ui_qt/utility/utility.hpp +++ b/tools/bsnes/ui_qt/utility/utility.hpp @@ -26,7 +26,7 @@ public: bool loadCartridgeSufamiTurbo(const char*, const char *, const char*); void unloadCartridge(); - enum system_state_t { LoadCartridge, UnloadCartridge, PowerOn, PowerOff, PowerCycle, Reset }; + enum system_state_t { LoadCartridge, UnloadCartridge, PowerOn, PowerOff, PowerCycle, Reset, Irq }; void modifySystemState(system_state_t state); //window.cpp