/* cmon2.c
C monitor program for Lark
L. Stewart September 24, 1982 9:54 AM
L. Stewart December 3, 1982 2:37 PM, word mode dumping
*/
extern int gethex();
extern wf();
extern wf1();
extern wf2();
extern wfcr();
extern int innewp();
extern innew();
extern int fetchb();
extern putchar();
extern int chav();
extern int getchar();
extern SetXbar();
extern StartSlave();
extern PIOOn();
extern int audb;
extern char leftover;
extern int any;
/* command: d(startaddr),(stopaddr)(return) */
dump(words)
int words;
{
int start, stop, adr, addr, ba, pv;
if (words) wf("W ");
else wf("D ");
start = gethex();
if (innewp('\r')) {
innew(',');
stop = gethex();
};
else any = 0;
if (!any) { stop = start + 0x7f; any = 1; };
innew('\r');
start = start >> 4;
stop = stop >> 4;
stop += 1;
for (addr=start;addr<stop;addr+=1) {
wf1("%04x:", addr<<4);
if (words) DW(addr);
else DB(addr);
wf(" ");
for (ba=0;ba<=15;ba+=1) {
adr = (addr<<4)+ba;
pv = fetchb(adr) & 0377;
if ((pv >= 040) && (pv <= 0176)) putchar(pv);
else putchar('.');
};
wfcr();
if (chav()) {getchar(); break; }; /* give up on character typed */
};
};
static DB(addr)
int addr;
{
int ba, adr, pv;
for (ba=0;ba<=15;ba+=1) {
adr = (addr<<4)+ba;
pv = fetchb(adr);
wf1(" %02x", pv & 0xff);
};
};
static DW(addr)
int addr;
{
int ba, adr, pv;
for (ba=0;ba<=15;ba+=2) {
adr = (addr<<4)+ba;
pv = fetchw(adr);
wf1(" %04x", pv);
};
};
togaudio()
{
putchar('a');
if (audb) {
audb = 0;
putchar('0');
PIOOn(0x0020, 0);
};
else {
audb = 1;
putchar('1');
SetXbar(0, 3);
SetXbar(3, 0);
StartSlave(0, 0);
};
};
TraceStack(f)
int f[];
{
int tF[];
while ((tF=f[0]) && (!chav())) {
wf2(" BP, IP = (%4xH, %4xH)\r", tF, f[1]);
f=tF;
};
};