Line 99... |
Line 99... |
static const int MAXERR;
|
static const int MAXERR;
|
typedef DEVBUS::BUSW BUSW;
|
typedef DEVBUS::BUSW BUSW;
|
DEVBUS *m_fpga;
|
DEVBUS *m_fpga;
|
int m_cursor;
|
int m_cursor;
|
ZIPSTATE m_state;
|
ZIPSTATE m_state;
|
bool m_user_break, m_show_users_timers;
|
bool m_user_break, m_show_users_timers, m_show_cc;
|
public:
|
public:
|
ZIPPY(DEVBUS *fpga) : m_fpga(fpga), m_cursor(0), m_user_break(false),
|
ZIPPY(DEVBUS *fpga) : m_fpga(fpga), m_cursor(0), m_user_break(false),
|
m_show_users_timers(false) {}
|
m_show_users_timers(false), m_show_cc(false) {}
|
|
|
void read_raw_state(void) {
|
void read_raw_state(void) {
|
m_state.m_valid = false;
|
m_state.m_valid = false;
|
for(int i=0; i<16; i++)
|
for(int i=0; i<16; i++)
|
m_state.m_sR[i] = cmd_read(i);
|
m_state.m_sR[i] = cmd_read(i);
|
Line 207... |
Line 207... |
|
|
void show_user_timers(bool v) {
|
void show_user_timers(bool v) {
|
m_show_users_timers = v;
|
m_show_users_timers = v;
|
}
|
}
|
|
|
|
void toggle_cc(void) {
|
|
m_show_cc = !m_show_cc;
|
|
}
|
|
|
void showval(int y, int x, const char *lbl, unsigned int v, bool c) {
|
void showval(int y, int x, const char *lbl, unsigned int v, bool c) {
|
if (c)
|
if (c)
|
mvprintw(y,x, ">%s> 0x%08x<", lbl, v);
|
mvprintw(y,x, ">%s> 0x%08x<", lbl, v);
|
else
|
else
|
mvprintw(y,x, " %s: 0x%08x ", lbl, v);
|
mvprintw(y,x, " %s: 0x%08x ", lbl, v);
|
Line 407... |
Line 411... |
dispreg(ln,60, "sR11", m_state.m_sR[11], (m_cursor==23)); ln++;
|
dispreg(ln,60, "sR11", m_state.m_sR[11], (m_cursor==23)); ln++;
|
|
|
dispreg(ln, 0, "sR12", m_state.m_sR[12], (m_cursor==24));
|
dispreg(ln, 0, "sR12", m_state.m_sR[12], (m_cursor==24));
|
dispreg(ln,20, "sSP ", m_state.m_sR[13], (m_cursor==25));
|
dispreg(ln,20, "sSP ", m_state.m_sR[13], (m_cursor==25));
|
|
|
|
if (m_show_cc) {
|
|
mvprintw(ln,40, " sCC :%16s", "");
|
|
dispreg(ln, 40, "sCC ", m_state.m_sR[14], (m_cursor==26));
|
|
} else {
|
|
mvprintw(ln,40, " sCC :%16s", "");
|
mvprintw(ln,40, "%ssCC :%s%s%s%s%s%s%s",
|
mvprintw(ln,40, "%ssCC :%s%s%s%s%s%s%s",
|
(m_cursor == 26)?">":" ",
|
(m_cursor == 26)?">":" ",
|
(cc&0x1000)?"FE":"", // Floating point exception
|
(cc&0x1000)?"FE":"", // Floating point exception
|
(cc&0x0800)?"DV":"", // Division by zero
|
(cc&0x0800)?"DV":"", // Division by zero
|
(cc&0x0400)?"BE":"", // Bus Error
|
(cc&0x0400)?"BE":"", // Bus Error
|
Line 421... |
Line 430... |
mvprintw(ln,54,"%s%s%s%s",
|
mvprintw(ln,54,"%s%s%s%s",
|
(cc&8)?"V":" ",
|
(cc&8)?"V":" ",
|
(cc&4)?"N":" ",
|
(cc&4)?"N":" ",
|
(cc&2)?"C":" ",
|
(cc&2)?"C":" ",
|
(cc&1)?"Z":" ");
|
(cc&1)?"Z":" ");
|
|
}
|
dispreg(ln,60, "sPC ", m_state.m_sR[15], (m_cursor==27));
|
dispreg(ln,60, "sPC ", m_state.m_sR[15], (m_cursor==27));
|
ln++;
|
ln++;
|
|
|
if (gie)
|
if (gie)
|
attron(A_BOLD);
|
attron(A_BOLD);
|
Line 447... |
Line 457... |
dispreg(ln,60, "uR11", m_state.m_uR[11], (m_cursor==39)); ln++;
|
dispreg(ln,60, "uR11", m_state.m_uR[11], (m_cursor==39)); ln++;
|
|
|
dispreg(ln, 0, "uR12", m_state.m_uR[12], (m_cursor==40));
|
dispreg(ln, 0, "uR12", m_state.m_uR[12], (m_cursor==40));
|
dispreg(ln,20, "uSP ", m_state.m_uR[13], (m_cursor==41));
|
dispreg(ln,20, "uSP ", m_state.m_uR[13], (m_cursor==41));
|
cc = m_state.m_uR[14];
|
cc = m_state.m_uR[14];
|
|
if (m_show_cc) {
|
|
mvprintw(ln,40, " uCC :%16s", "");
|
|
dispreg(ln, 40, "uCC ", m_state.m_uR[14], (m_cursor==42));
|
|
} else {
|
|
mvprintw(ln,40, " uCC :%16s", "");
|
mvprintw(ln,40, "%suCC :%s%s%s%s%s%s%s",
|
mvprintw(ln,40, "%suCC :%s%s%s%s%s%s%s",
|
(m_cursor == 42)?">":" ",
|
(m_cursor == 42)?">":" ",
|
(cc&0x1000)?"FE":"", // Floating point Exception
|
(cc&0x1000)?"FE":"", // Floating point Exception
|
(cc&0x0800)?"DV":"", // Division by zero
|
(cc&0x0800)?"DV":"", // Division by zero
|
(cc&0x0400)?"BE":"", // Bus Error
|
(cc&0x0400)?"BE":"", // Bus Error
|
Line 461... |
Line 476... |
mvprintw(ln,54,"%s%s%s%s",
|
mvprintw(ln,54,"%s%s%s%s",
|
(cc&8)?"V":" ",
|
(cc&8)?"V":" ",
|
(cc&4)?"N":" ",
|
(cc&4)?"N":" ",
|
(cc&2)?"C":" ",
|
(cc&2)?"C":" ",
|
(cc&1)?"Z":" ");
|
(cc&1)?"Z":" ");
|
|
}
|
dispreg(ln,60, "uPC ", m_state.m_uR[15], (m_cursor==43));
|
dispreg(ln,60, "uPC ", m_state.m_uR[15], (m_cursor==43));
|
|
|
attroff(A_BOLD);
|
attroff(A_BOLD);
|
ln+=3;
|
ln+=3;
|
|
|
Line 635... |
Line 651... |
else
|
else
|
stall_screen();
|
stall_screen();
|
while((!done)&&(!gbl_err)) {
|
while((!done)&&(!gbl_err)) {
|
chv = getch();
|
chv = getch();
|
switch(chv) {
|
switch(chv) {
|
|
case 'c': case 'C':
|
|
zip->toggle_cc();
|
|
break;
|
case 'g': case 'G':
|
case 'g': case 'G':
|
m_fpga->writeio(R_ZIPCTRL, CPU_GO);
|
m_fpga->writeio(R_ZIPCTRL, CPU_GO);
|
// We just released the CPU, so we're now done.
|
// We just released the CPU, so we're now done.
|
done = true;
|
done = true;
|
break;
|
break;
|