mirror of
https://github.com/simh/simh.git
synced 2026-01-25 19:56:25 +00:00
Notes For V3.8
The makefile now works for Linux and most Unix's. Howevr, for Solaris and MacOS, you must first export the OSTYPE environment variable: > export OSTYPE > make Otherwise, you will get build errors. 1. New Features 1.1 3.8-0 1.1.1 SCP and Libraries - BREAK, NOBREAK, and SHOW BREAK with no argument will set, clear, and show (respectively) a breakpoint at the current PC. 1.2 GRI - Added support for the GRI-99 processor. 1.3 HP2100 - Added support for the BACI terminal interface. - Added support for RTE OS/VMA/EMA, SIGNAL, VIS firmware extensions. 1.4 Nova - Added support for 64KW memory (implemented in third-party CPU's). 1.5 PDP-11 - Added support for DC11, RC11, KE11A, KG11A. - Added modem control support for DL11. - Added ASCII character support for all 8b devices. 2. Bugs Fixed Please see the revision history on http://simh.trailing-edge.com or in the source module sim_rev.h.
This commit is contained in:
committed by
Mark Pizzolato
parent
3cb7c60d5d
commit
59aa4a73b1
@@ -1,6 +1,6 @@
|
||||
/* id16_sys.c: Interdata 16b simulator interface
|
||||
|
||||
Copyright (c) 2000-2006, Robert M. Supnik
|
||||
Copyright (c) 2000-2008, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -23,6 +23,7 @@
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from Robert M Supnik.
|
||||
|
||||
04-Feb-08 RMS Modified to allow -A, -B use with 8b devices
|
||||
18-Oct-06 RMS Re-ordered device list
|
||||
26-Mar-04 RMS Fixed warning with -std=c99
|
||||
27-Feb-03 RMS Added relative addressing support
|
||||
@@ -279,29 +280,34 @@ static const uint32 opc_val[] = {
|
||||
t_stat fprint_sym (FILE *of, t_addr addr, t_value *val,
|
||||
UNIT *uptr, int32 sw)
|
||||
{
|
||||
int32 c1, c2, rdx;
|
||||
int32 bflag, c1, c2, rdx;
|
||||
t_stat r;
|
||||
DEVICE *dptr;
|
||||
|
||||
if (uptr == NULL) uptr = &cpu_unit; /* anon = CPU */
|
||||
else if (uptr != &cpu_unit) return SCPE_ARG; /* CPU only */
|
||||
dptr = find_dev_from_unit (uptr); /* find dev */
|
||||
if (dptr == NULL) return SCPE_IERR;
|
||||
if (dptr->dwidth < 16) bflag = 1; /* 8b dev? */
|
||||
else bflag = 0; /* assume 16b */
|
||||
if (sw & SWMASK ('D')) rdx = 10; /* get radix */
|
||||
else if (sw & SWMASK ('O')) rdx = 8;
|
||||
else if (sw & SWMASK ('H')) rdx = 16;
|
||||
else rdx = dptr->dradix;
|
||||
|
||||
if (sw & SWMASK ('A')) { /* ASCII char? */
|
||||
c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0x7F; /* get byte */
|
||||
if (bflag) c1 = val[0] & 0x7F;
|
||||
else c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0x7F; /* get byte */
|
||||
fprintf (of, (c1 < 0x20)? "<%02X>": "%c", c1);
|
||||
return 0;
|
||||
}
|
||||
if (sw & SWMASK ('B')) { /* byte? */
|
||||
c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0xFF; /* get byte */
|
||||
if (bflag) c1 = val[0] & 0xFF;
|
||||
else c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0xFF; /* get byte */
|
||||
fprint_val (of, c1, rdx, 8, PV_RZRO);
|
||||
return 0;
|
||||
}
|
||||
if (bflag) return SCPE_ARG; /* 16b only */
|
||||
|
||||
if (sw & SWMASK ('C')) { /* string? */
|
||||
c1 = (val[0] >> 8) & 0x7F;
|
||||
c2 = val[0] & 0x7F;
|
||||
@@ -462,14 +468,15 @@ return SCPE_OK;
|
||||
|
||||
t_stat parse_sym (char *cptr, t_addr addr, UNIT *uptr, t_value *val, int32 sw)
|
||||
{
|
||||
int32 by, rdx, num;
|
||||
int32 bflag, by, rdx, num;
|
||||
t_stat r;
|
||||
DEVICE *dptr;
|
||||
|
||||
if (uptr == NULL) uptr = &cpu_unit; /* anon = CPU */
|
||||
else if (uptr != &cpu_unit) return SCPE_ARG; /* CPU only */
|
||||
dptr = find_dev_from_unit (uptr); /* find dev */
|
||||
if (dptr == NULL) return SCPE_IERR;
|
||||
if (dptr->dwidth < 16) bflag = 1; /* 8b device? */
|
||||
else bflag = 0; /* assume 16b */
|
||||
if (sw & SWMASK ('D')) rdx = 10; /* get radix */
|
||||
else if (sw & SWMASK ('O')) rdx = 8;
|
||||
else if (sw & SWMASK ('H')) rdx = 16;
|
||||
@@ -477,17 +484,23 @@ else rdx = dptr->dradix;
|
||||
|
||||
if ((sw & SWMASK ('A')) || ((*cptr == '\'') && cptr++)) { /* ASCII char? */
|
||||
if (cptr[0] == 0) return SCPE_ARG; /* must have 1 char */
|
||||
if (addr & 1) val[0] = (val[0] & ~0xFF) | ((t_value) cptr[0]);
|
||||
else val[0] = (val[0] & 0xFF) | (((t_value) cptr[0]) << 8);
|
||||
if (bflag) val[0] = (t_value) cptr[0];
|
||||
else val[0] = (addr & 1)?
|
||||
(val[0] & ~0xFF) | ((t_value) cptr[0]):
|
||||
(val[0] & 0xFF) | (((t_value) cptr[0]) << 8);
|
||||
return 0;
|
||||
}
|
||||
if (sw & SWMASK ('B')) { /* byte? */
|
||||
by = get_uint (cptr, rdx, DMASK8, &r); /* get byte */
|
||||
if (r != SCPE_OK) return SCPE_ARG;
|
||||
if (addr & 1) val[0] = (val[0] & ~0xFF) | by;
|
||||
else val[0] = (val[0] & 0xFF) | (by << 8);
|
||||
if (bflag) val[0] = by;
|
||||
else val[0] = (addr & 1)?
|
||||
(val[0] & ~0xFF) | by:
|
||||
(val[0] & 0xFF) | (by << 8);
|
||||
return 0;
|
||||
}
|
||||
if (bflag) return SCPE_ARG; /* 16b only */
|
||||
|
||||
if ((sw & SWMASK ('C')) || ((*cptr == '"') && cptr++)) { /* ASCII chars? */
|
||||
if (cptr[0] == 0) return SCPE_ARG; /* must have 1 char */
|
||||
val[0] = ((t_value) cptr[0] << 8) | (t_value) cptr[1];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id32_sys.c: Interdata 32b simulator interface
|
||||
|
||||
Copyright (c) 2000-2007, Robert M. Supnik
|
||||
Copyright (c) 2000-2008, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -23,6 +23,7 @@
|
||||
used in advertising or otherwise to promote the sale, use or other dealings
|
||||
in this Software without prior written authorization from Robert M Supnik.
|
||||
|
||||
04-Feb-08 RMS Modified to allow -A, -B use with 8b devices
|
||||
25-Jan-07 RMS Fixed conflict between -h (hex) and -h (halfword)
|
||||
18-Oct-06 RMS Re-ordered device list
|
||||
02-Jul-04 RMS Fixed missing type in declaration
|
||||
@@ -337,29 +338,34 @@ return -5;
|
||||
t_stat fprint_sym (FILE *of, t_addr addr, t_value *val,
|
||||
UNIT *uptr, int32 sw)
|
||||
{
|
||||
int32 c1, c2, rdx;
|
||||
int32 bflag, c1, c2, rdx;
|
||||
t_stat r;
|
||||
DEVICE *dptr;
|
||||
|
||||
if (uptr == NULL) uptr = &cpu_unit; /* anon = CPU */
|
||||
else if (uptr != &cpu_unit) return SCPE_ARG; /* only for CPU */
|
||||
dptr = find_dev_from_unit (uptr); /* find dev */
|
||||
if (dptr == NULL) return SCPE_IERR;
|
||||
if (dptr->dwidth < 16) bflag = 1; /* 8b dev? */
|
||||
else bflag = 0; /* assume 16b */
|
||||
if (sw & SWMASK ('D')) rdx = 10; /* get radix */
|
||||
else if (sw & SWMASK ('O')) rdx = 8;
|
||||
else if (sw & SWMASK ('H')) rdx = 16;
|
||||
else rdx = dptr->dradix;
|
||||
|
||||
if (sw & SWMASK ('A')) { /* ASCII char? */
|
||||
c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0x7F; /* get byte */
|
||||
if (bflag) c1 = val[0] & 0x7F;
|
||||
else c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0x7F; /* get byte */
|
||||
fprintf (of, (c1 < 0x20)? "<%02X>": "%c", c1);
|
||||
return 0;
|
||||
}
|
||||
if (sw & SWMASK ('B')) { /* byte? */
|
||||
c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0xFF; /* get byte */
|
||||
if (bflag) c1 = val[0] & 0xFF;
|
||||
else c1 = (val[0] >> ((addr & 1)? 0: 8)) & 0xFF; /* get byte */
|
||||
fprint_val (of, c1, rdx, 8, PV_RZRO);
|
||||
return 0;
|
||||
}
|
||||
if (bflag) return SCPE_ARG; /* 16b only */
|
||||
|
||||
if (sw & SWMASK ('C')) { /* string? */
|
||||
c1 = (val[0] >> 8) & 0x7F;
|
||||
c2 = val[0] & 0x7F;
|
||||
@@ -555,14 +561,15 @@ return SCPE_OK;
|
||||
|
||||
t_stat parse_sym (char *cptr, t_addr addr, UNIT *uptr, t_value *val, int32 sw)
|
||||
{
|
||||
int32 by, rdx, num;
|
||||
int32 bflag, by, rdx, num;
|
||||
t_stat r;
|
||||
DEVICE *dptr;
|
||||
|
||||
if (uptr == NULL) uptr = &cpu_unit; /* anon = CPU */
|
||||
else if (uptr != &cpu_unit) return SCPE_ARG; /* CPU only */
|
||||
dptr = find_dev_from_unit (uptr); /* find dev */
|
||||
if (dptr == NULL) return SCPE_IERR;
|
||||
if (dptr->dwidth < 16) bflag = 1; /* 8b device? */
|
||||
else bflag = 0; /* assume 16b */
|
||||
if (sw & SWMASK ('D')) rdx = 10; /* get radix */
|
||||
else if (sw & SWMASK ('O')) rdx = 8;
|
||||
else if (sw & SWMASK ('H')) rdx = 16;
|
||||
@@ -570,17 +577,23 @@ else rdx = dptr->dradix;
|
||||
|
||||
if ((sw & SWMASK ('A')) || ((*cptr == '\'') && cptr++)) { /* ASCII char? */
|
||||
if (cptr[0] == 0) return SCPE_ARG; /* must have 1 char */
|
||||
if (addr & 1) val[0] = (val[0] & ~0xFF) | ((t_value) cptr[0]);
|
||||
else val[0] = (val[0] & 0xFF) | (((t_value) cptr[0]) << 8);
|
||||
if (bflag) val[0] = (t_value) cptr[0];
|
||||
else val[0] = (addr & 1)?
|
||||
(val[0] & ~0xFF) | ((t_value) cptr[0]):
|
||||
(val[0] & 0xFF) | (((t_value) cptr[0]) << 8);
|
||||
return 0;
|
||||
}
|
||||
if (sw & SWMASK ('B')) { /* byte? */
|
||||
by = get_uint (cptr, rdx, DMASK8, &r); /* get byte */
|
||||
if (r != SCPE_OK) return SCPE_ARG;
|
||||
if (addr & 1) val[0] = (val[0] & ~0xFF) | by;
|
||||
else val[0] = (val[0] & 0xFF) | (by << 8);
|
||||
if (bflag) val[0] = by;
|
||||
else val[0] = (addr & 1)?
|
||||
(val[0] & ~0xFF) | by:
|
||||
(val[0] & 0xFF) | (by << 8);
|
||||
return 0;
|
||||
}
|
||||
if (bflag) return SCPE_ARG; /* 16b only */
|
||||
|
||||
if ((sw & SWMASK ('C')) || ((*cptr == '"') && cptr++)) { /* ASCII chars? */
|
||||
if (cptr[0] == 0) return SCPE_ARG; /* must have 1 char */
|
||||
val[0] = ((t_value) cptr[0] << 8) | (t_value) cptr[1];
|
||||
|
||||
@@ -807,7 +807,7 @@ END OF TEST
|
||||
*
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Bugs found
|
||||
Bugs Found and Fixed During Simulator Debug
|
||||
|
||||
1. CPU16: instruction decoding interpreting CPU models incorrectly
|
||||
2. CPU16: SINT should not be conditional on device existing
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* id_lp.c: Interdata line printer
|
||||
|
||||
Copyright (c) 2001-2007, Robert M. Supnik
|
||||
Copyright (c) 2001-2008, Robert M. Supnik
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
@@ -25,6 +25,7 @@
|
||||
|
||||
lpt M46-206 line printer
|
||||
|
||||
27-May-08 RMS Fixed bug in printing test (from Davis Johnson)
|
||||
19-Jan-07 RMS Added UNIT_TEXT flag
|
||||
25-Apr-03 RMS Revised for extended file support
|
||||
*/
|
||||
@@ -189,7 +190,7 @@ else if (t == CR) { /* CR? */
|
||||
lpt_spnd = 1; /* set spc pend */
|
||||
return lpt_bufout (uptr); /* print line */
|
||||
}
|
||||
else if (t >= 0x40) { /* printable? */
|
||||
else if (t >= 0x20) { /* printable? */
|
||||
if ((uptr->flags & UNIT_UC) && islower (t)) /* UC only? */
|
||||
t = toupper (t);
|
||||
if (lpt_bptr < LPT_WIDTH) lpxb[lpt_bptr++] = t;
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
#define UST u3 /* unit status */
|
||||
#define UCMD u4 /* unit command */
|
||||
#define MT_MAXFR (1 << 16) /* max transfer */
|
||||
#define MT_MAXFR (1 << 24) /* max transfer */
|
||||
|
||||
/* Command - in UCMD */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user