- More memory addressing to monitor

- Faster m6502 save and restore
This commit is contained in:
tudnai 2022-11-18 20:03:57 -08:00
parent ba4a99ad0d
commit 97ce58420e
3 changed files with 47 additions and 14 deletions

View File

@ -118,7 +118,8 @@ void m6502_Debug(void) {
for (
m6502_saved = m6502, clk_6502_per_frm_max = clk_6502_per_frm;
m6502.clkfrm < clk_6502_per_frm_max;
m6502_saved = m6502, m6502.clkfrm += m6502_Step_dbg()
memcpy(&m6502_saved, &m6502, 7), // copy over only A, X, Y, Status, PC & SP...
m6502.clkfrm += m6502_Step_dbg()
){
switch (m6502.interrupt) {
case HALT:
@ -144,8 +145,7 @@ void m6502_Debug(void) {
// memory break happens *after* executing
// the instruction, therefore we need to
// step back to get it right in the debugger
m6502_saved.interrupt = m6502.interrupt;
m6502 = m6502_saved;
memcpy(&m6502, &m6502_saved, 7); // copy over only A, X, Y, Status, PC & SP...
return;
}
@ -158,8 +158,7 @@ void m6502_Debug(void) {
// memory break happens *after* executing
// the instruction, therefore we need to
// step back to get it right in the debugger
m6502_saved.interrupt = m6502.interrupt;
m6502 = m6502_saved;
memcpy(&m6502, &m6502_saved, 7); // copy over only A, X, Y, Status, PC & SP...
return;
}
@ -260,7 +259,7 @@ void m6502_dbg_init(void) {
m6502_dbg_bp_del_all(mem_write_breakpoints);
// TODO: TESTING ONLY!!!
m6502_dbg_bp_add(mem_read_breakpoints, 0xC000);
// m6502_dbg_bp_add(mem_read_breakpoints, 0xC000);
}

View File

@ -1212,11 +1212,21 @@ INLINE uint8_t _src_abs_dis() {
INLINE int8_t _rel_addr() {
return _fetch();
}
INLINE int8_t _rel_addr_dbg() {
uint16_t addr = _fetch();
is_mem_rd_bp(addr);
return addr;
}
INLINE int8_t _rel_addr_dis() {
_disPrintf(disassembly.oper, sizeof(disassembly.oper), "$%04X", m6502.PC + 1 + (int8_t)memread8(m6502.PC));
return _fetch_dis();
}
INLINE uint16_t _abs_addr() {
uint16_t addr = _fetch16();
is_mem_rd_bp(addr);
return addr;
}
INLINE uint16_t _abs_addr_dbg() {
return _fetch16();
}
INLINE uint16_t _abs_addr_dis() {
@ -1226,6 +1236,9 @@ INLINE uint16_t _abs_addr_dis() {
INLINE uint16_t _ind_addr() {
return memread16( _fetch16() );
}
INLINE uint16_t _ind_addr_dbg() {
return _memread16_dbg( _fetch16() );
}
INLINE uint16_t _ind_addr_dis() {
_disPrintf(disassembly.oper, sizeof(disassembly.oper), "($%04X)", memread16(m6502.PC));
_disPrintf(disassembly.comment, sizeof(disassembly.comment), "ind_addr:%04X", memread16(memread16(m6502.PC)));
@ -1305,6 +1318,9 @@ INLINE uint8_t _addr_zp_dis() {
INLINE uint8_t _src_zp() {
return memread8_low(_addr_zp());
}
INLINE uint8_t _src_zp_dbg() {
return _memread_dbg(_addr_zp());
}
INLINE uint8_t _src_zp_dis() {
return memread8_low(_addr_zp_dis());
}
@ -1387,6 +1403,11 @@ INLINE uint8_t _src_X_ind_dis() {
INLINE uint16_t _addr_ind_Y() {
return memread16( _fetch() ) + m6502.Y;
}
INLINE uint16_t _addr_ind_Y_dbg() {
uint16_t addr = _memread16_dbg( _fetch() ) + m6502.Y;
is_mem_rd_bp(addr);
return addr;
}
INLINE uint16_t _addr_ind_Y_dis() {
_disPrintf(disassembly.oper, sizeof(disassembly.oper), "($%02X),Y", memread8(m6502.PC) );
_disPrintf(disassembly.comment, sizeof(disassembly.comment), "ind_addr:%04X", memread16( memread8(m6502.PC) ) + m6502.Y );
@ -1423,6 +1444,9 @@ INLINE uint8_t _addr_zp_X_dis() {
INLINE uint8_t _src_zp_X() {
return memread8_low(_addr_zp_X());
}
INLINE uint8_t _src_zp_X_dbg() {
return _memread_dbg(_addr_zp_X());
}
INLINE uint8_t _src_zp_X_dis() {
return memread8_low(_addr_zp_X_dis());
}
@ -1446,6 +1470,9 @@ INLINE uint8_t _addr_zp_Y_dis() {
INLINE uint8_t _src_zp_Y() {
return memread8_low(_addr_zp_Y());
}
INLINE uint8_t _src_zp_Y_dbg() {
return _memread_dbg(_addr_zp_Y());
}
INLINE uint8_t _src_zp_Y_dis() {
return memread8_low(_addr_zp_Y_dis());
}

View File

@ -427,10 +427,13 @@ INLINE uint8_t _src_abs(void);
INLINE uint8_t _src_abs_dbg(void);
INLINE uint8_t _src_abs_dis(void);
INLINE int8_t _rel_addr(void);
INLINE int8_t _rel_addr_dbg(void);
INLINE int8_t _rel_addr_dis(void);
INLINE uint16_t _abs_addr(void);
INLINE uint16_t _abs_addr_dbg(void);
INLINE uint16_t _abs_addr_dis(void);
INLINE uint16_t _ind_addr(void);
INLINE uint16_t _ind_addr_dbg(void);
INLINE uint16_t _ind_addr_dis(void);
INLINE uint16_t _addr_abs_X(void);
INLINE uint16_t _addr_abs_X_dis(void);
@ -447,6 +450,7 @@ INLINE uint8_t _imm_dis(void);
INLINE uint8_t _addr_zp(void);
INLINE uint8_t _addr_zp_dis(void);
INLINE uint8_t _src_zp(void);
INLINE uint8_t _src_zp_dbg(void);
INLINE uint8_t _src_zp_dis(void);
INLINE uint16_t _addr_ind(void);
INLINE uint16_t _addr_ind_dis(void);
@ -459,6 +463,7 @@ INLINE uint8_t _src_X_ind(void);
INLINE uint8_t _src_X_ind_dbg(void);
INLINE uint8_t _src_X_ind_dis(void);
INLINE uint16_t _addr_ind_Y(void);
INLINE uint16_t _addr_ind_Y_dbg(void);
INLINE uint16_t _addr_ind_Y_dis(void);
INLINE uint8_t _src_ind_Y(void);
INLINE uint8_t _src_ind_Y_dbg(void);
@ -466,10 +471,12 @@ INLINE uint8_t _src_ind_Y_dis(void);
INLINE uint8_t _addr_zp_X(void);
INLINE uint8_t _addr_zp_X_dis(void);
INLINE uint8_t _src_zp_X(void);
INLINE uint8_t _src_zp_X_dbg(void);
INLINE uint8_t _src_zp_X_dis(void);
INLINE uint8_t _addr_zp_Y(void);
INLINE uint8_t _addr_zp_Y_dis(void);
INLINE uint8_t _src_zp_Y(void);
INLINE uint8_t _src_zp_Y_dbg(void);
INLINE uint8_t _src_zp_Y_dis(void);
@ -516,26 +523,26 @@ INLINE uint8_t _src_zp_Y_dis(void);
#define memwrite(addr,data) _memwrite(addr,data);
#define addr_abs() _addr_abs()
#define src_abs() _src_abs_dbg()
#define rel_addr() _rel_addr()
#define abs_addr() _abs_addr()
#define ind_addr() _ind_addr()
#define rel_addr() _rel_addr_dbg()
#define abs_addr() _abs_addr_dbg()
#define ind_addr() _ind_addr_dbg()
#define addr_abs_X() _addr_abs_X()
#define src_abs_X() _src_abs_X_dbg()
#define addr_abs_Y() _addr_abs_Y()
#define src_abs_Y() _src_abs_Y_dbg()
#define imm() _imm()
#define addr_zp() _addr_zp()
#define src_zp() _src_zp()
#define src_zp() _src_zp_dbg()
#define addr_ind() _addr_ind()
#define src_ind() _src_ind_dbg()
#define addr_ind_X() _addr_ind_X()
#define src_X_ind() _src_X_ind_dbg()
#define addr_ind_Y() _addr_ind_Y()
#define src_ind_Y() _src_ind_Y()
#define addr_ind_Y() _addr_ind_Y_dbg()
#define src_ind_Y() _src_ind_Y_dbg()
#define addr_zp_X() _addr_zp_X()
#define src_zp_X() _src_zp_X()
#define src_zp_X() _src_zp_X_dbg()
#define addr_zp_Y() _addr_zp_Y()
#define src_zp_Y() _src_zp_Y()
#define src_zp_Y() _src_zp_Y_dbg()
#else // DEBUGGER