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
|
||||
==================================
|
||||
Last update: 2012-03-20
|
||||
Last update: 2012-03-23
|
||||
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
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"
|
||||
11-Sep-08 JDB Moved microcode function prototypes to hp2100_cpu1.h
|
||||
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
|
||||
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:
|
||||
- RTE-IVB Programmer's Reference Manual (92068-90004, Dec-1983).
|
||||
- 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 */
|
||||
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;
|
||||
|
||||
int32 ndim = SEXT(ReadW(dtbl++)); /* # dimensions */
|
||||
ndim = ReadW(dtbl++); /* # dimensions */
|
||||
ndim = SEXT(ndim); /* sign extend */
|
||||
if (ndim < 0) return FALSE; /* invalid? */
|
||||
|
||||
*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
|
||||
|
||||
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):
|
||||
- Eliminated unused variable in "cpu_ema_vset"
|
||||
- DMA channels renamed from 0,1 to 1,2 to match documentation
|
||||
|
||||
hp2100_cpu7.c (Dave Bryan):
|
||||
- Corrected "opsize" parameter type in vis_abs
|
||||
|
|
Loading…
Add table
Reference in a new issue