#include #include #include "z80.h" #include "z80dis.h" #include #include 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; } 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"); fread(memory, 1024, 16, f); fclose(f); 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); bool should_exit = false; int linea=1; char old_line[256]; old_line[0]=0; 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)); } 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; }