- Finestra del depurador amb SDL
This commit is contained in:
81
main.cpp
81
main.cpp
@@ -2,17 +2,13 @@
|
||||
#include <stdio.h>
|
||||
#include "z80.h"
|
||||
#include "z80dis.h"
|
||||
#include <ncurses.h>
|
||||
#include "z80debug.h"
|
||||
#include <SDL2/SDL.h>
|
||||
#include <string.h>
|
||||
|
||||
uint8_t memory[65536];
|
||||
uint32_t t = 0;
|
||||
|
||||
int w, h;
|
||||
WINDOW *win_regs;
|
||||
WINDOW *win_mem;
|
||||
WINDOW *win_code;
|
||||
|
||||
int ula_in()
|
||||
{
|
||||
return 0;
|
||||
@@ -23,17 +19,6 @@ void ula_out(int val)
|
||||
|
||||
}
|
||||
|
||||
void refresh_registers()
|
||||
{
|
||||
mvwprintw(win_regs, 1, 2, "AF: %04X AF': %04X", z80::getAF(), z80::getAF(true));
|
||||
mvwprintw(win_regs, 2, 2, "BC: %04X BC': %04X", z80::getBC(), z80::getBC(true));
|
||||
mvwprintw(win_regs, 3, 2, "DE: %04X DE': %04X", z80::getDE(), z80::getDE(true));
|
||||
mvwprintw(win_regs, 4, 2, "HL: %04X HL': %04X", z80::getHL(), z80::getHL(true));
|
||||
mvwprintw(win_regs, 5, 2, "IX: %04X IY': %04X", z80::getIX(), z80::getIY());
|
||||
mvwprintw(win_regs, 6, 2, "SP: %04X PC': %04X", z80::getSP(), z80::getPC());
|
||||
wrefresh(win_regs);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
FILE* f = fopen("48.rom", "rb");
|
||||
@@ -43,54 +28,28 @@ int main(int argc, char *argv[])
|
||||
z80::reset(memory);
|
||||
z80::connect_port(0xfe, ula_in, ula_out);
|
||||
|
||||
initscr();
|
||||
start_color();
|
||||
init_pair(1, COLOR_WHITE, COLOR_BLACK);
|
||||
init_pair(2, COLOR_YELLOW, COLOR_BLUE);
|
||||
getmaxyx(stdscr, h, w);
|
||||
|
||||
win_regs = newwin(10,23,0,0);
|
||||
win_mem = newwin(10,w-23,0,23);
|
||||
win_code = newwin(h-10,w,10,0);
|
||||
refresh();
|
||||
|
||||
box(win_regs,0,0);
|
||||
mvwprintw(win_regs, 0, 2, " REGISTERS: ");
|
||||
refresh_registers();
|
||||
|
||||
box(win_mem,0,0);
|
||||
mvwprintw(win_mem, 0, 2, " MEMORY: ");
|
||||
mvwprintw(win_mem, 1, 2, "%ix%i", w, h);
|
||||
wrefresh(win_mem);
|
||||
|
||||
box(win_code,0,0);
|
||||
//wattron(win_code, COLOR_PAIR(1));
|
||||
//mvwprintw(win_code, 1, 1, "Hello world %s !!!", "hola");
|
||||
//wattroff(win_code, COLOR_PAIR(1));
|
||||
wrefresh(win_code);
|
||||
SDL_Init(SDL_INIT_EVERYTHING);
|
||||
z80debug::show();
|
||||
|
||||
bool should_exit = false;
|
||||
int linea=1;
|
||||
char old_line[256];
|
||||
old_line[0]=0;
|
||||
while(!should_exit)
|
||||
SDL_Event e;
|
||||
|
||||
while (!should_exit)
|
||||
{
|
||||
uint16_t PC = z80::getPC();
|
||||
if (old_line[0]!=0) {
|
||||
wattron(win_code, COLOR_PAIR(1));
|
||||
mvwprintw(win_code, linea-1, 1, old_line);
|
||||
wattroff(win_code, COLOR_PAIR(1));
|
||||
while (SDL_PollEvent(&e))
|
||||
{
|
||||
if (e.type == SDL_QUIT) { should_exit=true; break; }
|
||||
if (e.type == SDL_KEYDOWN) {
|
||||
if (e.key.keysym.scancode==SDL_SCANCODE_ESCAPE) {
|
||||
should_exit=true; break;
|
||||
} else if (e.key.keysym.scancode==SDL_SCANCODE_RETURN) {
|
||||
//uint16_t PC = z80::getPC();
|
||||
//z80dis::getAsm(&memory[PC]);
|
||||
t += z80::step();
|
||||
z80debug::refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
sprintf(old_line, "[%04x] ", PC);
|
||||
strcat(old_line, z80dis::getAsm(&memory[PC]));
|
||||
wattron(win_code, COLOR_PAIR(2));
|
||||
mvwprintw(win_code, linea, 1, old_line);
|
||||
wattron(win_code, COLOR_PAIR(2));
|
||||
wrefresh(win_code);
|
||||
linea++;
|
||||
t += z80::step();
|
||||
refresh_registers();
|
||||
getch();
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user