From 41ba04e88ab71f1633254feb71b20932a9221028 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 1 Sep 2016 14:34:55 -0700 Subject: [PATCH] LGP, CDC1700, PDQ3: Add new VM optional sim_vm_sprint_addr API --- CDC1700/cdc1700_sys.c | 13 +++++++++++-- LGP/lgp_sys.c | 16 ++++++++++++---- PDQ-3/pdq3_sys.c | 30 ++++++++++++++++++++---------- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/CDC1700/cdc1700_sys.c b/CDC1700/cdc1700_sys.c index a178db2a..3b8ba1a8 100644 --- a/CDC1700/cdc1700_sys.c +++ b/CDC1700/cdc1700_sys.c @@ -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; diff --git a/LGP/lgp_sys.c b/LGP/lgp_sys.c index 73410c53..b4249b2f 100644 --- a/LGP/lgp_sys.c +++ b/LGP/lgp_sys.c @@ -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; diff --git a/PDQ-3/pdq3_sys.c b/PDQ-3/pdq3_sys.c index f94fc266..0b49ebd8 100644 --- a/PDQ-3/pdq3_sys.c +++ b/PDQ-3/pdq3_sys.c @@ -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;