Updated HP2100 from Dave Bryan
This commit is contained in:
parent
8255ba9379
commit
6d11b3bd25
3 changed files with 56 additions and 6 deletions
|
@ -1,6 +1,6 @@
|
||||||
HP 2100 SIMULATOR BUG FIX WRITEUPS
|
HP 2100 SIMULATOR BUG FIX WRITEUPS
|
||||||
==================================
|
==================================
|
||||||
Last update: 2012-03-20
|
Last update: 2012-03-23
|
||||||
|
|
||||||
|
|
||||||
1. PROBLEM: Booting from magnetic tape reports "HALT instruction, P: 77756
|
1. PROBLEM: Booting from magnetic tape reports "HALT instruction, P: 77756
|
||||||
|
@ -6215,3 +6215,45 @@
|
||||||
service only when a parameter word has been received with an ioIOO signal.
|
service only when a parameter word has been received with an ioIOO signal.
|
||||||
|
|
||||||
STATUS: Fixed in version 3.9-0.
|
STATUS: Fixed in version 3.9-0.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
245. PROBLEM: The EMA diagnostic sometimes aborts with a DM error.
|
||||||
|
|
||||||
|
VERSION: 3.8-1
|
||||||
|
|
||||||
|
OBSERVATION: Running the RTE-IV EMA diagnostic "#EMA" may abort with a DMS
|
||||||
|
violation:
|
||||||
|
|
||||||
|
DM VIOL = 160377
|
||||||
|
DM INST = 105257
|
||||||
|
ABE 177750 15 1
|
||||||
|
XYO 116123 72137 0
|
||||||
|
DM #EMA 16521
|
||||||
|
#EMA ABORTED
|
||||||
|
|
||||||
|
The abort occurs in test 8, which executes the .EMAP instruction and passes
|
||||||
|
a negative number of dimensions.
|
||||||
|
|
||||||
|
CAUSE: The test supplies a dimension count of -32768. The offset of the
|
||||||
|
specified array element is calculated by the "cpu_ema_resolve" routine by
|
||||||
|
iterating through the array subscripts. The 16-bit word containing the
|
||||||
|
dimension count is loaded into a 32-bit signed integer variable as an
|
||||||
|
unsigned value. Therefore, +32678 dimensions are assumed. However, only
|
||||||
|
one subscript value is supplied in the call, so subsequent instructions
|
||||||
|
after the call are interpreted as subscript addresses, yielding random
|
||||||
|
values from memory. Also, the array descriptor only defines one subscript,
|
||||||
|
so subsequent memory values are interpreted as subscript bounds and element
|
||||||
|
counts.
|
||||||
|
|
||||||
|
If one of subscript offsets evaluates to a negative value, the routine
|
||||||
|
returns FALSE, and the instruction fails. The diagnostic interprets the
|
||||||
|
cause of the failure as the negative dimension count and passes test 8.
|
||||||
|
|
||||||
|
However, if a subscript address points at a protected page of memory, the
|
||||||
|
instruction causes a DM violation when the value is retrieved.
|
||||||
|
|
||||||
|
RESOLUTION: Modify "cpu_ema_resolve" (hp2100_cpu5.c) to sign-extend the
|
||||||
|
16-bit dimension count.
|
||||||
|
|
||||||
|
STATUS: Fixed in version 3.9-0.
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
CPU5 RTE-6/VM and RTE-IV firmware option instructions
|
CPU5 RTE-6/VM and RTE-IV firmware option instructions
|
||||||
|
|
||||||
20-Mar-12 JDB Added sign extension for dim count in "cpu_ema_resolve"
|
23-Mar-12 JDB Added sign extension for dim count in "cpu_ema_resolve"
|
||||||
28-Dec-11 JDB Eliminated unused variable in "cpu_ema_vset"
|
28-Dec-11 JDB Eliminated unused variable in "cpu_ema_vset"
|
||||||
11-Sep-08 JDB Moved microcode function prototypes to hp2100_cpu1.h
|
11-Sep-08 JDB Moved microcode function prototypes to hp2100_cpu1.h
|
||||||
05-Sep-08 JDB Removed option-present tests (now in UIG dispatchers)
|
05-Sep-08 JDB Removed option-present tests (now in UIG dispatchers)
|
||||||
|
@ -798,6 +798,12 @@ return reason;
|
||||||
1. RTE-IV EMA and RTE-6 VMA instructions share the same address space, so a
|
1. RTE-IV EMA and RTE-6 VMA instructions share the same address space, so a
|
||||||
given machine can run one or the other, but not both.
|
given machine can run one or the other, but not both.
|
||||||
|
|
||||||
|
2. The EMA diagnostic (92067-16013) reports bogus MMAP failures if it is
|
||||||
|
not loaded at the start of its partition (e.g., because of a LOADR "LO"
|
||||||
|
command). The "ICMPS" map comparison check in the diagnostic assumes
|
||||||
|
that the starting page of the program's partition contains the first
|
||||||
|
instruction of the program and prints "MMAP ERROR" if it does not.
|
||||||
|
|
||||||
Additional references:
|
Additional references:
|
||||||
- RTE-IVB Programmer's Reference Manual (92068-90004, Dec-1983).
|
- RTE-IVB Programmer's Reference Manual (92068-90004, Dec-1983).
|
||||||
- RTE-IVB Technical Specifications (92068-90013, Jan-1980).
|
- RTE-IVB Technical Specifications (92068-90013, Jan-1980).
|
||||||
|
@ -813,10 +819,11 @@ static const OP_PAT op_ema[16] = {
|
||||||
/* calculate the 32 bit EMA subscript for an array */
|
/* calculate the 32 bit EMA subscript for an array */
|
||||||
static t_bool cpu_ema_resolve(uint32 dtbl,uint32 atbl,uint32* sum)
|
static t_bool cpu_ema_resolve(uint32 dtbl,uint32 atbl,uint32* sum)
|
||||||
{
|
{
|
||||||
int32 sub, act, low, sz;
|
int32 sub, act, low, sz, ndim;
|
||||||
uint32 MA, base;
|
uint32 MA, base;
|
||||||
|
|
||||||
int32 ndim = SEXT(ReadW(dtbl++)); /* # dimensions */
|
ndim = ReadW(dtbl++); /* # dimensions */
|
||||||
|
ndim = SEXT(ndim); /* sign extend */
|
||||||
if (ndim < 0) return FALSE; /* invalid? */
|
if (ndim < 0) return FALSE; /* invalid? */
|
||||||
|
|
||||||
*sum = 0; /* accu for index calc */
|
*sum = 0; /* accu for index calc */
|
||||||
|
|
|
@ -88,10 +88,11 @@ patch date module(s) and fix(es)
|
||||||
- Added OPSIZE casts to fp_accum calls in .FPWR/.TPWR
|
- Added OPSIZE casts to fp_accum calls in .FPWR/.TPWR
|
||||||
|
|
||||||
hp2100_cpu5.c (Dave Bryan):
|
hp2100_cpu5.c (Dave Bryan):
|
||||||
- Added OPSIZE casts to fp_accum calls in .FPWR/.TPWR
|
- Added sign extension for dim count in "cpu_ema_resolve"
|
||||||
|
- Eliminated unused variable in "cpu_ema_vset"
|
||||||
|
|
||||||
hp2100_cpu6.c (Dave Bryan):
|
hp2100_cpu6.c (Dave Bryan):
|
||||||
- Eliminated unused variable in "cpu_ema_vset"
|
- DMA channels renamed from 0,1 to 1,2 to match documentation
|
||||||
|
|
||||||
hp2100_cpu7.c (Dave Bryan):
|
hp2100_cpu7.c (Dave Bryan):
|
||||||
- Corrected "opsize" parameter type in vis_abs
|
- Corrected "opsize" parameter type in vis_abs
|
||||||
|
|
Loading…
Add table
Reference in a new issue