Compare commits

...

2 Commits

4 changed files with 16 additions and 3 deletions

BIN
glaurung.sav Normal file

Binary file not shown.

14
z80.cpp
View File

@@ -10,7 +10,7 @@ namespace z80
static uint8_t memtouched[65536];
static uint32_t t = 0;
static uint16_t current_opcode_address = 0;
bool options[Z80_NUM_OPTIONS] = { true };
bool options[Z80_NUM_OPTIONS] = { true, false };
int (*in_ports[256])(int);
void (*out_ports[256])(int, int);
@@ -661,11 +661,21 @@ namespace z80
if (!iff1) return;
exit_from_halt = true;
PUSH(rPC);
uint16_t address;
if (im==1) {
rPC = 0x38;
} else if (im==2) {
const uint16_t address = (rI<<8) | 0xFE;
address = (rI<<8) | 0xFE;
rPC = READ_MEM_16(address);
} else if (im==0) {
printf("Interrupt mode 0!\n");
z80debug::stop();
return;
}
if (options[Z80_OPTION_BREAK_ON_INTERRUPT]) {
printf("Break on interrupt! 0x%2x, PC: 0x%2x\n", address, rPC);
z80debug::setcursor(rPC);
z80debug::stop();
}
}

3
z80.h
View File

@@ -10,7 +10,8 @@ namespace z80
#define MEMTAG_DATA 3
#define Z80_OPTION_STOP_ON_INVALID 0
#define Z80_NUM_OPTIONS 1
#define Z80_OPTION_BREAK_ON_INTERRUPT 1
#define Z80_NUM_OPTIONS 2
void reset(uint8_t* mem);
void connect_port(int num, int (*in_ptr)(int), void (*out_ptr)(int,int));

View File

@@ -247,6 +247,7 @@ namespace z80debug
void stop()
{
//history::gototop();
zxscreen::setTitle(" (stopped)");
pause();
is_debugging = true;
@@ -623,6 +624,7 @@ namespace z80debug
} else if (strcmp(cmd, "b")==0 || strcmp(cmd, "break")==0) {
getcmd();
if (cmd[0] == 0) { breakpoints[z80::getPC()]=1; return; }
if (cmd[0] == 'i') { z80::setOption(Z80_OPTION_BREAK_ON_INTERRUPT, !z80::getOption(Z80_OPTION_BREAK_ON_INTERRUPT)); sendToConsoleLog("Break on interrupt."); return; }
int address = getnum(cmd);
if (address<0 || address>65536) { sendToConsoleLog("Illegal break address"); return; }
getcmd();