LGP, CDC1700, PDQ3: Add new VM optional sim_vm_sprint_addr API

This commit is contained in:
Mark Pizzolato 2016-09-01 14:34:55 -07:00
parent 222ae77436
commit 41ba04e88a
3 changed files with 43 additions and 16 deletions

View file

@ -124,7 +124,7 @@ static void postUpdate(t_bool from_scp)
/*
* Special address print routine for "Relative" display.
*/
static void printAddress(FILE *st, DEVICE *dptr, t_addr addr)
static void sprintAddress(char *buf, DEVICE *dptr, t_addr addr)
{
if ((dptr == sim_devices[0]) && ((sim_switches & SWMASK('R')) != 0)) {
if (!RelValid) {
@ -133,7 +133,15 @@ static void printAddress(FILE *st, DEVICE *dptr, t_addr addr)
}
addr -= RelBase;
}
fprint_val(st, addr, dptr->aradix, dptr->awidth, PV_RZRO);
sprint_val(buf, addr, dptr->aradix, dptr->awidth, PV_RZRO);
}
static void printAddress(FILE *st, DEVICE *dptr, t_addr addr)
{
char buf[64];
sprintAddress(buf, dptr, addr);
fprintf (st, "%s", buf);
}
/*
@ -141,6 +149,7 @@ static void printAddress(FILE *st, DEVICE *dptr, t_addr addr)
*/
static void VMinit(void)
{
sim_vm_sprint_addr = &sprintAddress;
sim_vm_fprint_addr = &printAddress;
sim_vm_post = &postUpdate;
sim_vm_cmd = cdc1700_cmd;

View file

@ -226,14 +226,21 @@ static const char hex_decode[] = "0123456789FGJKQW";
#define fputs(_s,f) Fprintf(f,"%s",_s)
#define fputc(_c,f) Fprintf(f,"%c",_c)
void lgp_fprint_addr (FILE *st, DEVICE *dptr, t_addr addr)
void lgp_sprint_addr (char *buf, DEVICE *dptr, t_addr addr)
{
if ((dptr == sim_devices[0]) &&
((sim_switches & SWMASK ('T')) ||
((cpu_unit.flags & UNIT_TTSS_D) && !(sim_switches & SWMASK ('N')))))
fprintf (st, "%02d%02d", addr >> 6, addr & SCMASK_30);
else fprint_val (st, addr, dptr->aradix, dptr->awidth, PV_LEFT);
return;
sprintf (buf, "%02d%02d", addr >> 6, addr & SCMASK_30);
else sprint_val (buf, addr, dptr->aradix, dptr->awidth, PV_LEFT);
}
void lgp_fprint_addr (FILE *st, DEVICE *dptr, t_addr addr)
{
char buf[64];
lgp_sprint_addr (buf, dptr, addr);
fprintf (st, "%s", buf);
}
t_addr lgp_parse_addr (DEVICE *dptr, CONST char *cptr, CONST char **tptr)
@ -256,6 +263,7 @@ return ea;
void lgp_vm_init (void)
{
sim_vm_sprint_addr = &lgp_sprint_addr;
sim_vm_fprint_addr = &lgp_fprint_addr;
sim_vm_parse_addr = &lgp_parse_addr;
return;

View file

@ -141,18 +141,27 @@ t_stat sim_load (FILE *fi, CONST char *cptr, CONST char *fnam, int flag)
#define fprintf Fprintf
#define fputs(_s,f) Fprintf(f,"%s",_s)
#define fputc(_c,f) Fprintf(f,"%c",_c)
void pdq3_sprint_addr (char *buf, DEVICE *dptr, t_addr addr)
{
*buf = '\0';
if (ADDR_ISWORD(addr))
sprintf(buf,"$");
else if (ADDR_SEG(addr) == reg_segb)
sprintf(&buf[strlen(buf)],"#");
else {
sprint_val (&buf[strlen(buf)], ADDR_SEG(addr), dptr->dradix, dptr->dwidth, PV_LEFT);
sprintf(&buf[strlen(buf)],":");
}
sprint_val (&buf[strlen(buf)], ADDR_OFF(addr), dptr->dradix, dptr->dwidth, PV_LEFT);
return;
}
void pdq3_fprint_addr (FILE *st, DEVICE *dptr, t_addr addr)
{
if (ADDR_ISWORD(addr))
fprintf(st,"$");
else if (ADDR_SEG(addr) == reg_segb)
fprintf(st,"#");
else {
fprint_val (st, ADDR_SEG(addr), dptr->dradix, dptr->dwidth, PV_LEFT);
fprintf(st,":");
}
fprint_val (st, ADDR_OFF(addr), dptr->dradix, dptr->dwidth, PV_LEFT);
return;
char buf[65];
pdq3_sprint_addr (buf, dptr, addr);
fprintf(st,"%s", buf);
}
t_addr pdq3_parse_addr (DEVICE *dptr, CONST char *cptr, CONST char **tptr)
@ -182,6 +191,7 @@ t_addr pdq3_parse_addr (DEVICE *dptr, CONST char *cptr, CONST char **tptr)
void pdq3_vm_init (void)
{
sim_vm_sprint_addr = &pdq3_sprint_addr;
sim_vm_fprint_addr = &pdq3_fprint_addr;
sim_vm_parse_addr = &pdq3_parse_addr;
sim_vm_cmd = pdq3_cmds;