- [NEW] Implementada la gestió de registres i interrupcions de la pantalla, així com el renderitzat de tiles

- [FIX] Si una interrupció no està activada, no s'ha d'eixir de halt
- Hi ha algún bug per ahi que ho petat tot
This commit is contained in:
2025-01-17 15:39:18 +01:00
parent 155487376d
commit 7272414f29
4 changed files with 172 additions and 178 deletions

View File

@@ -6,7 +6,7 @@
#include "sm83dis.h"
#include "debug.h"
//#include "zx_ula.h"
//#include "zx_screen.h"
#include "gbscreen.h"
//#include "zx_tape.h"
#include <SDL2/SDL.h>
#include <string.h>
@@ -24,31 +24,31 @@ namespace actions
{
const uint8_t dt = sm83::step();
debug::cont();
//zxscreen::refresh(dt);
gbscreen::refresh(dt);
}
int decZoom(int value)
{
//zxscreen::decZoom();
gbscreen::decZoom();
return 0;
}
int incZoom(int value)
{
//zxscreen::incZoom();
gbscreen::incZoom();
return 0;
}
int fullscreen(int value)
{
//zxscreen::toggleFullscreen();
return 0; //zxscreen::getFullscreen();
gbscreen::toggleFullscreen();
return gbscreen::getFullscreen();
}
int fullrefresh(int value)
{
//zxscreen::toggleFullRefresh();
return 0; //zxscreen::getFullRefresh();
gbscreen::toggleFullRefresh();
return gbscreen::getFullRefresh();
}
int showAnalyzer(int value)
@@ -79,8 +79,8 @@ int main(int argc, char *argv[])
sm83::reset();
SDL_Init(SDL_INIT_EVERYTHING);
gbscreen::init(0);
debug::init();
//zxscreen::init(SCREEN_MODE_48K);
ui::menu::init();
ui::menu::setexitcallback(actions::exitMenu);
@@ -95,9 +95,9 @@ int main(int argc, char *argv[])
menu = ui::menu::addsubmenu("SCREEN");
ui::menu::addoption(menu, "DEC ZOOM", actions::decZoom);
ui::menu::addoption(menu, "INC ZOOM", actions::incZoom);
ui::menu::addbooloption(menu, "FULLSCREEN", false /*zxscreen::getFullscreen()*/, actions::fullscreen);
ui::menu::addbooloption(menu, "FULLSCREEN", gbscreen::getFullscreen(), actions::fullscreen);
ui::menu::addseparator(menu);
ui::menu::addbooloption(menu, "FULL REFRESH", false /*zxscreen::getFullRefresh()*/, actions::fullrefresh);
ui::menu::addbooloption(menu, "FULL REFRESH", gbscreen::getFullRefresh(), actions::fullrefresh);
menu = ui::menu::addsubmenu("EMULATION");
ui::menu::addbooloption(menu, "STOP ON INVALID OP", sm83::getOption(SM83_OPTION_STOP_ON_INVALID), actions::decZoom);
@@ -132,12 +132,12 @@ int main(int argc, char *argv[])
debug::history::gototop();
const uint8_t dt = sm83::step();
debug::cont();
//zxscreen::refresh(dt);
gbscreen::refresh(dt);
}
} else if (e.key.keysym.scancode==SDL_SCANCODE_F8) {
if (!debug::debugging()) {
debug::stop();
//zxscreen::redraw();
gbscreen::redraw();
} else {
debug::show();
}
@@ -147,8 +147,8 @@ int main(int argc, char *argv[])
debug::history::gototop();
const uint8_t dt = sm83::step();
debug::refresh();
//zxscreen::fullrefresh();
//zxscreen::redraw();
gbscreen::fullrefresh();
gbscreen::redraw();
//z80analyze::refresh();
}
} else if (e.key.keysym.scancode==SDL_SCANCODE_F11) {
@@ -157,8 +157,8 @@ int main(int argc, char *argv[])
debug::history::gototop();
const uint8_t dt = debug::next();
debug::refresh();
//zxscreen::refresh(dt);
//zxscreen::redraw();
gbscreen::refresh(dt);
gbscreen::redraw();
//z80analyze::refresh();
}
} else if (e.key.keysym.scancode==SDL_SCANCODE_F12) {
@@ -167,8 +167,8 @@ int main(int argc, char *argv[])
debug::history::gototop();
const uint8_t dt = debug::stepout();
debug::refresh();
//zxscreen::refresh(dt);
//zxscreen::redraw();
gbscreen::refresh(dt);
gbscreen::redraw();
//z80analyze::refresh();
}
}
@@ -188,13 +188,13 @@ int main(int argc, char *argv[])
for (int i=0;i<5;++i) {
if (debug::isbreak(sm83::getPC(), 9)) {
debug::stop();
//zxscreen::redraw();
gbscreen::redraw();
break;
} else {
uint8_t dt = sm83::step();
t_states += dt;
//zx_ula::sound_update(dt);
//zxscreen::refresh(dt);
gbscreen::refresh(dt);
if (debug::debugging()) break;
}
}
@@ -210,9 +210,9 @@ int main(int argc, char *argv[])
} else if (!debug::debugging() && debug::paused()) {
//zxscreen::redraw(false);
gbscreen::redraw(false);
ui::menu::show();
//zxscreen::present();
gbscreen::present();
}
ui::setClicked(false);
}