1
0
mirror of https://github.com/simh/simh.git synced 2026-01-13 23:35:57 +00:00

Updated HP2100 from Dave Bryan

This commit is contained in:
Mark Pizzolato 2012-03-24 12:54:46 -07:00
parent f77bc42547
commit 95e535008b
3 changed files with 108 additions and 11 deletions

View File

@ -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.

View File

@ -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 */

View File

@ -1,6 +1,6 @@
/* sim_rev.h: simulator revisions and current rev level
Copyright (c) 1993-2011, Robert M Supnik
Copyright (c) 1993-2012, 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"),
@ -38,6 +38,7 @@ patch date module(s) and fix(es)
0 xx-yyy-1 scp.c:
- added *nix READLINE support (Mark Pizzolato)
- fixed "SHOW DEVICE" with only one enabled unit (Dave Bryan)
- fixed handling of DO with no arguments (Dave Bryan)
- clarified some help messages (Mark Pizzolato)
- added "SHOW SHOW" and "SHOW <dev> SHOW" commands (Mark Pizzolato)
@ -50,7 +51,8 @@ patch date module(s) and fix(es)
- major revision (Dave Hittner and Mark Pizzolato)
sim_tmxr.c:
- made option negotiation more reliable (Mark Pizzolato)
- made telnet option negotiation more reliable.
VAX works with PuTTY. (Mark Pizzolato)
h316_cpu.c:
- fixed bugs in MPY, DIV introduced in 3.8-1 (from Theo Engel)
@ -59,8 +61,13 @@ patch date module(s) and fix(es)
hp2100 all peripherals (Dave Bryan):
- Changed I/O signal handlers for newly revised signal model
- Deprecated DEVNO modifier in favor of SC
hp2100_cpu.c (Dave Bryan):
- Minor speedup in "is_mapped"
- Added casts to cpu_mod, dmasio, dmapio, cpu_reset, dma_reset
- Fixed I/O return status bug for DMA cycles
- Failed I/O cycles now stop on failing instruction
- Revised DMA for new multi-card paradigm
- Consolidated DMA reset routines
- DMA channels renamed from 0,1 to 1,2 to match documentation
@ -70,8 +77,6 @@ patch date module(s) and fix(es)
- Fixed DMA requests to enable stealing every cycle
- Fixed DMA priority for channel 1 over channel 2
- Corrected comments for "cpu_set_idle"
- Fixed I/O return status bug for DMA cycles
- Failed I/O cycles now stop on failing instruction
hp2100_cpu.h:
- Changed declarations for VMS compiler
@ -79,15 +84,43 @@ patch date module(s) and fix(es)
hp2100_cpu0.c (Dave Bryan):
- Removed DS note regarding PIF card (is now implemented)
hp2100_cpu4.c (Dave Bryan):
- Added OPSIZE casts to fp_accum calls in .FPWR/.TPWR
hp2100_cpu5.c (Dave Bryan):
- Added sign extension for dim count in "cpu_ema_resolve"
- Eliminated unused variable in "cpu_ema_vset"
hp2100_cpu6.c (Dave Bryan):
- DMA channels renamed from 0,1 to 1,2 to match documentation
hp2100_cpu7.c (Dave Bryan):
- Corrected "opsize" parameter type in vis_abs
hp2100_defs.h (Dave Bryan):
- Added hp_setsc, hp_showsc functions to support SC modifier
- DMA channels renamed from 0,1 to 1,2 to match documentation
- Revised I/O signal enum values for concurrent signals
- Revised I/O macros for new signal handling
- Added DA and DC device select code assignments
hp2100_di.c (Dave Bryan):
- Implemented 12821A HP-IB Disc Interface
hp2100_di_da.c (Dave Bryan):
- Implemented 7906H/20H/25H ICD disc drives
hp2100_dp.c (Dave Bryan):
- Added CNTLR_TYPE cast to dp_settype
hp2100_ds.c (Dave Bryan):
- Rewritten to use the MAC/ICD disc controller library
- ioIOO now notifies controller service of parameter output
- Corrected SRQ generation and FIFO under/overrun detection
- Corrected Clear command to conform to the hardware
- Fixed Request Status to return Unit Unavailable if illegal
- Seek and Cold Load Read now Seek Check if seek in progress
- Remodeled command wait for seek completion
- Corrected status returns for disabled drive, auto-seek
beyond drive limits, Request Sector Address and Wakeup
with invalid or offline unit
@ -95,23 +128,38 @@ patch date module(s) and fix(es)
Read Without Verify
hp2100_fp1.c (Dave Bryan):
- Added missing precision on constant "one" in fp_trun
- Completed the comments for divide; no code changes
hp2100_ipl.c (Dave Bryan):
- Revised for new multi-card paradigm
- Added CARD_INDEX casts to dib.card_index
- A failed STC may now be retried
- Consolidated reporting of consecutive CRS signals
- Revised for new multi-card paradigm
hp2100_lps.c (Dave Bryan):
- Corrected 12566B (DIAG mode) jumper settings
- Revised detection of CLC at last DMA cycle
- Corrected 12566B (DIAG mode) jumper settings
hp2100_ms.c (Dave Bryan):
- Added CNTLR_TYPE cast to ms_settype
hp2100_mt.c (Dave Bryan):
- Fixed error in command scan in mtcio ioIOO handler
- Fixed command scanning error in mtcio ioIOO handler
hp2100_stddev.c (Dave Bryan):
- Add TBG as a logical name for the CLK device
hp2100_sys.c (Dave Bryan):
- Add TBG as a logical name for the CLK device
- Added hp_setsc, hp_showsc functions to support SC modifier
- Added DA and dummy DC devices
- DMA channels renamed from 0,1 to 1,2 to match documentation
- Changed DIB access for revised signal model
hp_disclib.c, hp_disclib.h (Dave Bryan)
- Created MAC/ICD disc controller library
i1401_cd.c:
- fixed read stacker operation in column binary mode
- fixed punch stacker operation (Van Snyder)