HP2100 Update from Dave Bryan
This commit is contained in:
parent
e0fbfa6abf
commit
5863e1bc38
7 changed files with 269 additions and 322 deletions
|
@ -1,6 +1,6 @@
|
||||||
HP 2100 SIMULATOR BUG FIX WRITEUPS
|
HP 2100 SIMULATOR BUG FIX WRITEUPS
|
||||||
==================================
|
==================================
|
||||||
Last update: 2012-03-17
|
Last update: 2012-03-20
|
||||||
|
|
||||||
|
|
||||||
1. PROBLEM: Booting from magnetic tape reports "HALT instruction, P: 77756
|
1. PROBLEM: Booting from magnetic tape reports "HALT instruction, P: 77756
|
||||||
|
@ -4386,10 +4386,11 @@
|
||||||
|
|
||||||
CAUSE: The "exdep_cmd" routine is calling "find_reg_glob" if the
|
CAUSE: The "exdep_cmd" routine is calling "find_reg_glob" if the
|
||||||
"find_reg" routine returns a not-found error for the selected device.
|
"find_reg" routine returns a not-found error for the selected device.
|
||||||
"find_reg_glob" searches for a unique name among all devices and returns
|
"find_reg_glob" searches for a unique name among all devices and returns it
|
||||||
it if found.
|
if found.
|
||||||
|
|
||||||
RESOLUTION: None.
|
RESOLUTION: Modify "exdep_cmd" (scp.c) to search for a global register
|
||||||
|
name only if the device was not explicitly specified.
|
||||||
|
|
||||||
STATUS: Fixed in version 3.8-0.
|
STATUS: Fixed in version 3.8-0.
|
||||||
|
|
||||||
|
@ -5701,7 +5702,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
227. PROBLEM: The 79xx disc returns incorrect status for a disabled drive.
|
227. PROBLEM: The 13037 disc controller returns incorrect status for a disabled
|
||||||
|
drive.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
|
||||||
|
@ -5711,9 +5713,9 @@
|
||||||
|
|
||||||
CAUSE: SIMH initially defines the DS device as having eight 7905 drives
|
CAUSE: SIMH initially defines the DS device as having eight 7905 drives
|
||||||
connected to the controller. Each drive reports "heads unloaded" status
|
connected to the controller. Each drive reports "heads unloaded" status
|
||||||
(status-2 bits 1-0 = 11) until it has a disc image attached. If a unit is
|
(Status-2 bits 1-0 = 11) until it has a disc image attached. If a unit is
|
||||||
disabled, it continues to report "heads unloaded" status. It should be
|
disabled, it continues to report "heads unloaded" status. It should be
|
||||||
reporting "unit not present" (status-2 bits 1-0 = 10) status.
|
reporting "unit not present" (Status-2 bits 1-0 = 10) status.
|
||||||
|
|
||||||
RESOLUTION: Modify "ds_updds2" (hp2100_ds.c) to report an "enabled and
|
RESOLUTION: Modify "ds_updds2" (hp2100_ds.c) to report an "enabled and
|
||||||
unloaded" condition as Not Ready and Busy, and a "disabled" condition as
|
unloaded" condition as Not Ready and Busy, and a "disabled" condition as
|
||||||
|
@ -5723,8 +5725,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
228. PROBLEM: The 79xx disc returns incorrect status for an auto-seek beyond
|
228. PROBLEM: The 13037 disc controller returns incorrect status for an
|
||||||
the drive limits.
|
auto-seek beyond the drive limits.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
|
||||||
|
@ -5771,8 +5773,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
229. PROBLEM: The Read Without Verify command does not verify the address when a
|
229. PROBLEM: The 13037 Read Without Verify command does not verify the address
|
||||||
track boundary is crossed.
|
when a track boundary is crossed.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
|
||||||
|
@ -5832,7 +5834,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
230. PROBLEM: The Request Sector Address command does not check the unit
|
230. PROBLEM: The 13037 Request Sector Address command does not check the unit
|
||||||
number.
|
number.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
@ -5888,7 +5890,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
231. PROBLEM: The Wakeup command does not check the unit number.
|
231. PROBLEM: The 13037 Wakeup command does not check the unit number.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
|
||||||
|
@ -6001,7 +6003,7 @@
|
||||||
or SHOW lists but can still be displayed or modified if requested
|
or SHOW lists but can still be displayed or modified if requested
|
||||||
explicitly. Add hp_setsc and hp_showsc functions (hp2100_sys.c) to set and
|
explicitly. Add hp_setsc and hp_showsc functions (hp2100_sys.c) to set and
|
||||||
show the select code, and modify hp_setdev and hp_showdev to call hp_setsc
|
show the select code, and modify hp_setdev and hp_showdev to call hp_setsc
|
||||||
and hp_showsc, respectively, and to work aroung newline suppression for
|
and hp_showsc, respectively, and to work around newline suppression for
|
||||||
MTAB_NMO entries. Modify the documentation to change device number
|
MTAB_NMO entries. Modify the documentation to change device number
|
||||||
references to select code references.
|
references to select code references.
|
||||||
|
|
||||||
|
@ -6171,44 +6173,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
242. PROBLEM: The DO -E command continues to execute commands after a VM error.
|
242. ENHANCEMENT: Modify the 13037 disc simulator to use the common disc
|
||||||
|
|
||||||
VERSION: 3.8-1
|
|
||||||
|
|
||||||
OBSERVATION: According to the manual, when invoking a DO command file and
|
|
||||||
specifying the -E switch, "command processing (including nested command
|
|
||||||
invocations) will be aborted if any error is encountered." Errors that
|
|
||||||
occur as a result of commands, e.g., an invalid unit name supplied to the
|
|
||||||
ATTACH command, correctly terminate the DO command. However, errors that
|
|
||||||
occur when running the simulated CPU (e.g., a host I/O error) do not; the
|
|
||||||
error is printed on the console, but the command file continues to execute.
|
|
||||||
|
|
||||||
CAUSE: When the -E switch is specified, the DO command processor checks
|
|
||||||
the return status from each command invoked and aborts execution of the
|
|
||||||
command file if the return is not SCPE_OK. When a RUN, GO, STEP, CONT, or
|
|
||||||
BOOT command is invoked, the run command processor calls the VM-provided
|
|
||||||
instruction execution function to start the simulation.
|
|
||||||
|
|
||||||
When simulation is stopped, the instruction executor returns a status code
|
|
||||||
to indicate why execution has stopped. The reason might be a VM-defined
|
|
||||||
condition (e.g., execution of a "halt" instruction) or a system condition
|
|
||||||
(e.g., a host file system I/O error). The run command processor uses this
|
|
||||||
code to print an error message, but then returns SCPE_OK to the caller. As
|
|
||||||
the DO command processor never sees the error message, it continues to
|
|
||||||
execute commands.
|
|
||||||
|
|
||||||
RESOLUTION: Modify "run_cmd" (scp.c) to return the correct status instead
|
|
||||||
of SCPE_OK. Consolidate the error printing code from "run_cmd", "main",
|
|
||||||
and "do_cmd" into a new "fprint_error" function that combines both VM stop
|
|
||||||
and command error messages. Modify the error checkers in "main" and
|
|
||||||
"do_cmd" to call "fprint_error" to avoid printing messages from "run_cmd"
|
|
||||||
twice.
|
|
||||||
|
|
||||||
STATUS: Fixed in version 3.9-0.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
243. ENHANCEMENT: Modify the 13037 disc simulator to use the common disc
|
|
||||||
controller library.
|
controller library.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
@ -6225,7 +6190,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
244. ENHANCEMENT: Add debug printout support to the 13037 disc simulator.
|
243. ENHANCEMENT: Add debug printout support to the 13037 disc simulator.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
|
||||||
|
@ -6238,7 +6203,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
245. ENHANCEMENT: Eliminate the poll for parameters to 13037 disc commands.
|
244. ENHANCEMENT: Eliminate the poll for parameters to 13037 disc commands.
|
||||||
|
|
||||||
VERSION: 3.8-1
|
VERSION: 3.8-1
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* hp2100_cpu5.c: HP 1000 RTE-6/VM VMA and RTE-IV EMA instructions
|
/* hp2100_cpu5.c: HP 1000 RTE-6/VM VMA and RTE-IV EMA instructions
|
||||||
|
|
||||||
Copyright (c) 2007-2008, Holger Veit
|
Copyright (c) 2007-2008, Holger Veit
|
||||||
Copyright (c) 2006-2011, J. David Bryan
|
Copyright (c) 2006-2012, J. David Bryan
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
copy of this software and associated documentation files (the "Software"),
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
@ -26,6 +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"
|
||||||
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)
|
||||||
|
@ -815,7 +816,7 @@ static t_bool cpu_ema_resolve(uint32 dtbl,uint32 atbl,uint32* sum)
|
||||||
int32 sub, act, low, sz;
|
int32 sub, act, low, sz;
|
||||||
uint32 MA, base;
|
uint32 MA, base;
|
||||||
|
|
||||||
int32 ndim = ReadW(dtbl++); /* # dimensions */
|
int32 ndim = SEXT(ReadW(dtbl++)); /* # dimensions */
|
||||||
if (ndim < 0) return FALSE; /* invalid? */
|
if (ndim < 0) return FALSE; /* invalid? */
|
||||||
|
|
||||||
*sum = 0; /* accu for index calc */
|
*sum = 0; /* accu for index calc */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
SIMH/HP 21XX DIAGNOSTICS PERFORMANCE
|
SIMH/HP 21XX DIAGNOSTICS PERFORMANCE
|
||||||
====================================
|
====================================
|
||||||
Last update: 2012-02-13
|
Last update: 2012-02-20
|
||||||
|
|
||||||
|
|
||||||
The HP 24396 diagnostic suite has been run against the SIMH HP 21xx simulation.
|
The HP 24396 diagnostic suite has been run against the SIMH HP 21xx simulation.
|
||||||
|
@ -127,12 +127,12 @@ offline diagnostics:
|
||||||
Date Host Date SIMH
|
Date Host Date SIMH
|
||||||
Part Number Diagnostic Name Code Op. Sys. Code Vers. Result
|
Part Number Diagnostic Name Code Op. Sys. Code Vers. Result
|
||||||
----------- ------------------------------- ---- -------- ---- ----- ----------
|
----------- ------------------------------- ---- -------- ---- ----- ----------
|
||||||
92067-16013 Extended Memory Area Firmware 1805 RTE-IVB 5010 3.8-0 Passed
|
|
||||||
92084-16423 Virtual Memory Area Firmware 2121 RTE-6/VM 6200 3.8-0 Passed
|
|
||||||
12824-16002 Vector Instruction Set Firmware 2026 RTE-IVB 5010 3.8-0 Passed
|
12824-16002 Vector Instruction Set Firmware 2026 RTE-IVB 5010 3.8-0 Passed
|
||||||
12829-16006 Vector Instruction Set Firmware 2226 RTE-6/VM 6200 3.8-0 Passed
|
|
||||||
92835-16006 SIGNAL/1000 Firmware Diagnostic 2040 RTE-6/VM 6200 3.8-0 Passed
|
|
||||||
91711-12032 ICD/MAC Disc Diagnostic 2201 RTE-IVB 5010 3.8-2 Partial
|
91711-12032 ICD/MAC Disc Diagnostic 2201 RTE-IVB 5010 3.8-2 Partial
|
||||||
|
92067-16013 Extended Memory Area Firmware 1805 RTE-IVB 5010 3.8-0 Passed
|
||||||
|
12829-16006 Vector Instruction Set Firmware 2226 RTE-6/VM 6200 3.8-0 Passed
|
||||||
|
92084-16423 Virtual Memory Area Firmware 2121 RTE-6/VM 6200 3.8-0 Passed
|
||||||
|
92835-16006 SIGNAL/1000 Firmware Diagnostic 2040 RTE-6/VM 6200 3.8-0 Passed
|
||||||
|
|
||||||
|
|
||||||
The "SIMH Version" is the version number of the earliest SIMH system that was
|
The "SIMH Version" is the version number of the earliest SIMH system that was
|
||||||
|
@ -3497,54 +3497,6 @@ system.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------
|
|
||||||
#EMA - Extended Memory Array Firmware Diagnostic
|
|
||||||
------------------------------------------------
|
|
||||||
|
|
||||||
TESTED DEVICE: CPU (hp2100_cpu5.c)
|
|
||||||
|
|
||||||
BINARY FILE: 92067-16013 Rev. 1805
|
|
||||||
|
|
||||||
HOST SYSTEM: RTE-IVB Rev. 5010
|
|
||||||
|
|
||||||
CONFIGURATION: sim> set CPU EMA
|
|
||||||
sim> go
|
|
||||||
|
|
||||||
TEST REPORT: EMA ON-LINE DIAGNOSTIC SUCCESSFUL COMPLETION
|
|
||||||
|
|
||||||
TEST RESULT: Passed.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------
|
|
||||||
VMACK - Virtual Memory Array Firmware Diagnostic
|
|
||||||
------------------------------------------------
|
|
||||||
|
|
||||||
TESTED DEVICE: CPU (hp2100_cpu5.c)
|
|
||||||
|
|
||||||
BINARY FILE: 92084-16423 Rev. 2121
|
|
||||||
|
|
||||||
HOST SYSTEM: RTE-6/VM Rev. 6200
|
|
||||||
|
|
||||||
CONFIGURATION: sim> set CPU 1000-F
|
|
||||||
sim> set CPU VMA
|
|
||||||
sim> go
|
|
||||||
|
|
||||||
TEST REPORT: VMACK - VMA FIRMWARE DIAGNOSTIC, FIRMWARE REV# 003
|
|
||||||
VMACK - .IMAR NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .JMAR NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .LBP NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .LBPR NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .LPX NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .LPXR NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .PMAP NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .IMAP NO ERRORS DETECTED PASS# 1
|
|
||||||
VMACK - .JMAP NO ERRORS DETECTED PASS# 1
|
|
||||||
|
|
||||||
TEST RESULT: Passed.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
VISOD - Vector Instruction Set Firmware Diagnostic
|
VISOD - Vector Instruction Set Firmware Diagnostic
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
|
@ -3565,49 +3517,6 @@ TEST RESULT: Passed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--------------------------------------------------
|
|
||||||
VISOD - Vector Instruction Set Firmware Diagnostic
|
|
||||||
--------------------------------------------------
|
|
||||||
|
|
||||||
TESTED DEVICE: CPU (hp2100_cpu7.c)
|
|
||||||
|
|
||||||
BINARY FILE: 12829-16006 Rev. 2226
|
|
||||||
|
|
||||||
HOST SYSTEM: RTE-6/VM Rev. 6200
|
|
||||||
|
|
||||||
CONFIGURATION: sim> set CPU 1000-F
|
|
||||||
sim> set CPU VIS
|
|
||||||
sim> go
|
|
||||||
|
|
||||||
TEST REPORT: VIS ON-LINE DIAGNOSTIC SUCCESSFUL COMPLETION
|
|
||||||
|
|
||||||
TEST RESULT: Passed.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------
|
|
||||||
SDIAG - SIGNAL/1000 Firmware Diagnostic
|
|
||||||
---------------------------------------
|
|
||||||
|
|
||||||
TESTED DEVICE: CPU (hp2100_cpu7.c)
|
|
||||||
|
|
||||||
BINARY FILE: 92835-16006 Rev. 2040
|
|
||||||
|
|
||||||
HOST SYSTEM: RTE-6/VM Rev. 6200
|
|
||||||
|
|
||||||
CONFIGURATION: sim> set CPU 1000-F
|
|
||||||
sim> set CPU VIS
|
|
||||||
sim> set CPU SIGNAL
|
|
||||||
sim> go
|
|
||||||
|
|
||||||
TEST REPORT: SIGNAL/1000 FIRMWARE DIAGNOSTIC
|
|
||||||
|
|
||||||
SIGNAL/1000 FIRMWARE DIAGNOSTIC SUCCESSFUL COMPLETION
|
|
||||||
|
|
||||||
TEST RESULT: Passed.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------
|
------------------------------
|
||||||
DIAG - ICD/MAC Disc Diagnostic
|
DIAG - ICD/MAC Disc Diagnostic
|
||||||
------------------------------
|
------------------------------
|
||||||
|
@ -3618,7 +3527,8 @@ BINARY FILE: 91711-12032 Rev. 2201
|
||||||
|
|
||||||
HOST SYSTEM: RTE-IVB Rev. 5010
|
HOST SYSTEM: RTE-IVB Rev. 5010
|
||||||
|
|
||||||
CONFIGURATION: sim> go
|
CONFIGURATION: sim> set DS0 FORMAT
|
||||||
|
sim> go
|
||||||
|
|
||||||
TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
|
TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
|
||||||
|
|
||||||
|
@ -4122,3 +4032,94 @@ TEST NOTES: Steps 11-14 test CRC generation and checking. Steps 21 and 28
|
||||||
bit. Step 30 tests track sparing. Steps 52, 54, and 55 test
|
bit. Step 30 tests track sparing. Steps 52, 54, and 55 test
|
||||||
cylinder, head, and sector miscompares by writing incorrect
|
cylinder, head, and sector miscompares by writing incorrect
|
||||||
preambles. These features are not simulated.
|
preambles. These features are not simulated.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
#EMA - Extended Memory Array Firmware Diagnostic
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
TESTED DEVICE: CPU (hp2100_cpu5.c)
|
||||||
|
|
||||||
|
BINARY FILE: 92067-16013 Rev. 1805
|
||||||
|
|
||||||
|
HOST SYSTEM: RTE-IVB Rev. 5010
|
||||||
|
|
||||||
|
CONFIGURATION: sim> set CPU EMA
|
||||||
|
sim> go
|
||||||
|
|
||||||
|
TEST REPORT: EMA ON-LINE DIAGNOSTIC SUCCESSFUL COMPLETION
|
||||||
|
|
||||||
|
TEST RESULT: Passed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------
|
||||||
|
VISOD - Vector Instruction Set Firmware Diagnostic
|
||||||
|
--------------------------------------------------
|
||||||
|
|
||||||
|
TESTED DEVICE: CPU (hp2100_cpu7.c)
|
||||||
|
|
||||||
|
BINARY FILE: 12829-16006 Rev. 2226
|
||||||
|
|
||||||
|
HOST SYSTEM: RTE-6/VM Rev. 6200
|
||||||
|
|
||||||
|
CONFIGURATION: sim> set CPU 1000-F
|
||||||
|
sim> set CPU VIS
|
||||||
|
sim> go
|
||||||
|
|
||||||
|
TEST REPORT: VIS ON-LINE DIAGNOSTIC SUCCESSFUL COMPLETION
|
||||||
|
|
||||||
|
TEST RESULT: Passed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------
|
||||||
|
VMACK - Virtual Memory Array Firmware Diagnostic
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
TESTED DEVICE: CPU (hp2100_cpu5.c)
|
||||||
|
|
||||||
|
BINARY FILE: 92084-16423 Rev. 2121
|
||||||
|
|
||||||
|
HOST SYSTEM: RTE-6/VM Rev. 6200
|
||||||
|
|
||||||
|
CONFIGURATION: sim> set CPU 1000-F
|
||||||
|
sim> set CPU VMA
|
||||||
|
sim> go
|
||||||
|
|
||||||
|
TEST REPORT: VMACK - VMA FIRMWARE DIAGNOSTIC, FIRMWARE REV# 003
|
||||||
|
VMACK - .IMAR NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .JMAR NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .LBP NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .LBPR NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .LPX NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .LPXR NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .PMAP NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .IMAP NO ERRORS DETECTED PASS# 1
|
||||||
|
VMACK - .JMAP NO ERRORS DETECTED PASS# 1
|
||||||
|
|
||||||
|
TEST RESULT: Passed.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------
|
||||||
|
SDIAG - SIGNAL/1000 Firmware Diagnostic
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
TESTED DEVICE: CPU (hp2100_cpu7.c)
|
||||||
|
|
||||||
|
BINARY FILE: 92835-16006 Rev. 2040
|
||||||
|
|
||||||
|
HOST SYSTEM: RTE-6/VM Rev. 6200
|
||||||
|
|
||||||
|
CONFIGURATION: sim> set CPU 1000-F
|
||||||
|
sim> set CPU VIS
|
||||||
|
sim> set CPU SIGNAL
|
||||||
|
sim> go
|
||||||
|
|
||||||
|
TEST REPORT: SIGNAL/1000 FIRMWARE DIAGNOSTIC
|
||||||
|
|
||||||
|
SIGNAL/1000 FIRMWARE DIAGNOSTIC SUCCESSFUL COMPLETION
|
||||||
|
|
||||||
|
TEST RESULT: Passed.
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
in this Software without prior written authorization from the authors.
|
in this Software without prior written authorization from the authors.
|
||||||
|
|
||||||
15-Mar-12 JDB First release
|
20-Mar-12 JDB First release
|
||||||
09-Nov-11 JDB Created disc controller common library from DS simulator
|
09-Nov-11 JDB Created disc controller common library from DS simulator
|
||||||
|
|
||||||
References:
|
References:
|
||||||
|
@ -436,110 +436,49 @@ static const DRIVE_PROPERTIES drive_props [] = {
|
||||||
command, and flags to indicate certain common actions that should be taken.
|
command, and flags to indicate certain common actions that should be taken.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CP_V_CLRS 15 /* bits 15-15: command clears the controller status */
|
|
||||||
#define CP_V_WAIT 14 /* bits 14-15: command waits for seek completion */
|
|
||||||
#define CP_V_UACC 13 /* bits 13-13: command accesses the unit */
|
|
||||||
#define CP_V_UCHK 12 /* bits 12-12: command checks for unit legality */
|
|
||||||
#define CP_V_UNIT 11 /* bits 11-11: command has a unit field */
|
|
||||||
#define CP_V_CTYPE 9 /* bits 10- 9: valid controller types */
|
|
||||||
#define CP_V_CLASS 6 /* bits 8- 6: command classification code */
|
|
||||||
#define CP_V_INCNT 3 /* bits 5- 3: inbound parameter word count */
|
|
||||||
#define CP_V_OUTCNT 0 /* bits 2- 0: outbound parameter word count */
|
|
||||||
|
|
||||||
#define CP_M_CTYPE 3 /* 2-bit valid controller types mask */
|
|
||||||
#define CP_M_CLASS 7 /* 3-bit classification code mask */
|
|
||||||
#define CP_M_INCNT 7 /* 3-bit inbound parameter word count mask */
|
|
||||||
#define CP_M_OUTCNT 7 /* 3-bit outbound parameter word count mask */
|
|
||||||
|
|
||||||
#define CP_CLRS (1 << CP_V_CLRS)
|
|
||||||
#define CP_WAIT (1 << CP_V_WAIT)
|
|
||||||
#define CP_UACC (1 << CP_V_UACC)
|
|
||||||
#define CP_UCHK (1 << CP_V_UCHK)
|
|
||||||
#define CP_UNIT (1 << CP_V_UNIT)
|
|
||||||
|
|
||||||
#define CP_MAC (MAC << CP_V_CTYPE) /* command is valid for MAC controllers */
|
|
||||||
#define CP_ICD (ICD << CP_V_CTYPE) /* command is valid for ICD controllers */
|
|
||||||
|
|
||||||
#define CP_INVAL (class_invalid << CP_V_CLASS) /* invalid classification */
|
|
||||||
#define CP_READ (class_read << CP_V_CLASS) /* read classification */
|
|
||||||
#define CP_WRITE (class_write << CP_V_CLASS) /* write classification */
|
|
||||||
#define CP_CNTL (class_control << CP_V_CLASS) /* control classification */
|
|
||||||
#define CP_STAT (class_status << CP_V_CLASS) /* status classification */
|
|
||||||
|
|
||||||
#define TO_CTYPE(t) (uint32) ((t) << CP_V_CTYPE)
|
|
||||||
|
|
||||||
#define GET_CLASS(c) (CNTLR_CLASS) (((c) >> CP_V_CLASS) & CP_M_CLASS)
|
|
||||||
#define GET_INCNT(c) (((c) >> CP_V_INCNT) & CP_M_INCNT)
|
|
||||||
#define GET_OUTCNT(c) (((c) >> CP_V_OUTCNT) & CP_M_OUTCNT)
|
|
||||||
|
|
||||||
// >>> better?
|
|
||||||
#if 0
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CNTLR_OPCODE code;
|
uint32 params_in; /* count of input parameters */
|
||||||
uint32 inbound;
|
uint32 params_out; /* count of output parameters */
|
||||||
uint32 outbound;
|
CNTLR_CLASS classification; /* command classification */
|
||||||
CNTLR_CLASS class;
|
t_bool valid [TYPE_COUNT]; /* per-type command validity */
|
||||||
t_bool mac;
|
t_bool clear_status; /* command clears status */
|
||||||
t_bool icd;
|
t_bool unit_field; /* command has a unit field */
|
||||||
t_bool clear_status;
|
t_bool unit_check; /* command checks unit number validity */
|
||||||
t_bool unit_field;
|
t_bool unit_access; /* command accesses the drive unit */
|
||||||
t_bool unit_check;
|
t_bool seek_wait; /* command waits for seek completion */
|
||||||
t_bool unit_access;
|
|
||||||
t_bool seek_wait;
|
|
||||||
} DS_PROPS;
|
} DS_PROPS;
|
||||||
|
|
||||||
static const DS_PROPS cmd_props [] = {
|
typedef const DS_PROPS *PRPTR;
|
||||||
/* in out class mac icd clst unit uchk uacc wait */
|
|
||||||
{ 0, 0, class_read, 1, 1, 1, 0, 1, 1, 0 }, /* cold load read */
|
|
||||||
{ 0, 0, class_control, 1, 1, 1, 1, 1, 1, 1 }, /* recalibrate */
|
|
||||||
{ 2, 0, class_control, 1, 1, 1, 1, 1, 1, 0 }, /* seek */
|
|
||||||
{ 0, 2, class_status, 1, 1, 0, 1, 0, 0, 0 }, /* request status */
|
|
||||||
{ 0, 1, class_status, 1, 1, 1, 1, 1, 0, 0 }, /* request sector address */
|
|
||||||
{ 0, 0, class_read, 1, 1, 1, 1, 1, 1, 1 }, /* read */
|
|
||||||
{ 0, 0, class_read, 1, 1, 1, 1, 1, 1, 1 }, /* read full sector */
|
|
||||||
{ 1, 0, class_read, 1, 1, 1, 1, 1, 1, 1 }, /* verify */
|
|
||||||
{ 0, 0, class_write, 1, 1, 1, 1, 1, 1, 1 }, /* write */
|
|
||||||
{ 0, 0, class_write, 1, 1, 1, 1, 1, 1, 1 }, /* write full sector */
|
|
||||||
{ 0, 0, class_control, 1, 1, 1, 0, 0, 0, 0 }, /* clear */
|
|
||||||
{ 0, 0, class_write, 1, 1, 1, 1, 1, 1, 1 }, /* initialize */
|
|
||||||
{ 2, 0, class_control, 1, 1, 1, 0, 0, 0, 0 }, /* address record */
|
|
||||||
{ 0, 7, class_status, 1, 0, 0, 0, 0, 0, 0 }, /* request syndrome */
|
|
||||||
{ 1, 0, class_read, 1, 1, 1, 1, 1, 1, 1 }, /* read with offset */
|
|
||||||
{ 0, 0, class_control, 1, 1, 1, 0, 0, 0, 0 }, /* set file mask */
|
|
||||||
{ 0, 0, class_invalid, 0, 0, 1, 0, 0, 0, 0 }, /* invalid */
|
|
||||||
{ 0, 0, class_invalid, 0, 0, 1, 0, 0, 0, 0 }, /* invalid */
|
|
||||||
{ 0, 0, class_read, 1, 1, 1, 1, 1, 1, 1 }, /* read without verify */
|
|
||||||
{ 1, 0, class_status, 1, 0, 1, 0, 0, 0, 0 }, /* load TIO register */
|
|
||||||
{ 0, 2, class_status, 1, 1, 0, 0, 0, 0, 0 }, /* request disc address */
|
|
||||||
{ 0, 0, class_control, 1, 1, 1, 0, 0, 0, 0 }, /* end */
|
|
||||||
{ 0, 0, class_control, 1, 0, 1, 1, 1, 0, 0 } /* wakeup */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const uint32 cmd_props [] = {
|
#define T TRUE
|
||||||
000 | CP_READ | CP_MAC | CP_ICD | CP_CLRS | CP_UCHK | CP_UACC, /* cold load read */
|
#define F FALSE
|
||||||
000 | CP_CNTL | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* recalibrate */
|
|
||||||
020 | CP_CNTL | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC, /* seek */
|
static const DS_PROPS cmd_props [] = {
|
||||||
002 | CP_STAT | CP_MAC | CP_ICD | CP_UNIT, /* request status */
|
/* par par opcode valid for clear unit unit unit seek */
|
||||||
001 | CP_STAT | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK, /* request sector address */
|
/* in out classification MAC ICD stat field check acces wait */
|
||||||
000 | CP_READ | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* read */
|
{ 0, 0, class_read, { T, T }, T, F, T, T, F }, /* 00 = cold load read */
|
||||||
000 | CP_READ | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* read full sector */
|
{ 0, 0, class_control, { T, T }, T, T, T, T, T }, /* 01 = recalibrate */
|
||||||
010 | CP_READ | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* verify */
|
{ 2, 0, class_control, { T, T }, T, T, T, T, F }, /* 02 = seek */
|
||||||
000 | CP_WRITE | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* write */
|
{ 0, 2, class_status, { T, T }, F, T, F, F, F }, /* 03 = request status */
|
||||||
000 | CP_WRITE | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* write full sector */
|
{ 0, 1, class_status, { T, T }, T, T, T, F, F }, /* 04 = request sector address */
|
||||||
000 | CP_CNTL | CP_MAC | CP_ICD | CP_CLRS, /* clear */
|
{ 0, 0, class_read, { T, T }, T, T, T, T, T }, /* 05 = read */
|
||||||
000 | CP_WRITE | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* initialize */
|
{ 0, 0, class_read, { T, T }, T, T, T, T, T }, /* 06 = read full sector */
|
||||||
020 | CP_CNTL | CP_MAC | CP_ICD | CP_CLRS, /* address record */
|
{ 1, 0, class_read, { T, T }, T, T, T, T, T }, /* 07 = verify */
|
||||||
007 | CP_STAT | CP_MAC, /* request syndrome */
|
{ 0, 0, class_write, { T, T }, T, T, T, T, T }, /* 10 = write */
|
||||||
010 | CP_READ | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* read with offset */
|
{ 0, 0, class_write, { T, T }, T, T, T, T, T }, /* 11 = write full sector */
|
||||||
000 | CP_CNTL | CP_MAC | CP_ICD | CP_CLRS, /* set file mask */
|
{ 0, 0, class_control, { T, T }, T, F, F, F, F }, /* 12 = clear */
|
||||||
000 | CP_INVAL | CP_CLRS, /* invalid */
|
{ 0, 0, class_write, { T, T }, T, T, T, T, T }, /* 13 = initialize */
|
||||||
000 | CP_INVAL | CP_CLRS, /* invalid */
|
{ 2, 0, class_control, { T, T }, T, F, F, F, F }, /* 14 = address record */
|
||||||
000 | CP_READ | CP_MAC | CP_ICD | CP_CLRS | CP_UNIT | CP_UCHK | CP_UACC | CP_WAIT, /* read without verify */
|
{ 0, 7, class_status, { T, F }, F, F, F, F, F }, /* 15 = request syndrome */
|
||||||
010 | CP_STAT | CP_MAC | CP_CLRS, /* load TIO register */
|
{ 1, 0, class_read, { T, T }, T, T, T, T, T }, /* 16 = read with offset */
|
||||||
002 | CP_STAT | CP_MAC | CP_ICD, /* request disc address */
|
{ 0, 0, class_control, { T, T }, T, F, F, F, F }, /* 17 = set file mask */
|
||||||
000 | CP_CNTL | CP_MAC | CP_ICD | CP_CLRS, /* end */
|
{ 0, 0, class_invalid, { F, F }, T, F, F, F, F }, /* 20 = invalid */
|
||||||
000 | CP_CNTL | CP_MAC | CP_CLRS | CP_UNIT | CP_UCHK /* wakeup */
|
{ 0, 0, class_invalid, { F, F }, T, F, F, F, F }, /* 21 = invalid */
|
||||||
|
{ 0, 0, class_read, { T, T }, T, T, T, T, T }, /* 22 = read without verify */
|
||||||
|
{ 1, 0, class_status, { T, F }, T, F, F, F, F }, /* 23 = load TIO register */
|
||||||
|
{ 0, 2, class_status, { T, T }, F, F, F, F, F }, /* 24 = request disc address */
|
||||||
|
{ 0, 0, class_control, { T, T }, T, F, F, F, F }, /* 25 = end */
|
||||||
|
{ 0, 0, class_control, { T, F }, T, T, T, F, F } /* 26 = wakeup */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -547,7 +486,7 @@ static const uint32 cmd_props [] = {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
controller = 0, /* controller unit index */
|
controller = 0, /* controller unit index */
|
||||||
timer = 1 /* command wait timer index */
|
timer /* command wait timer index */
|
||||||
} AUX_INDEX;
|
} AUX_INDEX;
|
||||||
|
|
||||||
|
|
||||||
|
@ -640,7 +579,8 @@ static uint16 drive_status (UNIT *uptr);
|
||||||
|
|
||||||
t_bool dl_prepare_command (CVPTR cvptr, UNIT *units, uint32 unit_limit)
|
t_bool dl_prepare_command (CVPTR cvptr, UNIT *units, uint32 unit_limit)
|
||||||
{
|
{
|
||||||
uint32 props, unit;
|
uint32 unit;
|
||||||
|
PRPTR props;
|
||||||
CNTLR_OPCODE opcode;
|
CNTLR_OPCODE opcode;
|
||||||
|
|
||||||
set_timer (cvptr, CLEAR); /* stop the command wait timer */
|
set_timer (cvptr, CLEAR); /* stop the command wait timer */
|
||||||
|
@ -648,12 +588,12 @@ set_timer (cvptr, CLEAR); /* stop the command wait
|
||||||
opcode = GET_OPCODE (cvptr->buffer [0]); /* get the opcode from the command */
|
opcode = GET_OPCODE (cvptr->buffer [0]); /* get the opcode from the command */
|
||||||
|
|
||||||
if (opcode > last_opcode) /* is the opcode invalid? */
|
if (opcode > last_opcode) /* is the opcode invalid? */
|
||||||
props = CP_CLRS; /* undefined commands clear prior status */
|
props = &cmd_props [invalid_opcode]; /* undefined commands clear prior status */
|
||||||
else /* the opcode is potentially valid */
|
else /* the opcode is potentially valid */
|
||||||
props = cmd_props [opcode]; /* get the command properties */
|
props = &cmd_props [opcode]; /* get the command properties */
|
||||||
|
|
||||||
if (cvptr->type == MAC) /* is this a MAC controller? */
|
if (cvptr->type == MAC) /* is this a MAC controller? */
|
||||||
if (props & CP_UNIT) /* is the unit field defined for this command? */
|
if (props->unit_field) /* is the unit field defined for this command? */
|
||||||
unit = GET_UNIT (cvptr->buffer [0]); /* get the unit from the command */
|
unit = GET_UNIT (cvptr->buffer [0]); /* get the unit from the command */
|
||||||
else /* no unit specified in the command */
|
else /* no unit specified in the command */
|
||||||
unit = 0; /* so the unit is always unit 0 */
|
unit = 0; /* so the unit is always unit 0 */
|
||||||
|
@ -661,19 +601,20 @@ if (cvptr->type == MAC) /* is this a MAC control
|
||||||
else /* an ICD controller */
|
else /* an ICD controller */
|
||||||
unit = unit_limit; /* uses the supplied unit number */
|
unit = unit_limit; /* uses the supplied unit number */
|
||||||
|
|
||||||
if (props & CP_CLRS) { /* clear the prior controller status */
|
if (props->clear_status) { /* clear the prior controller status */
|
||||||
cvptr->status = normal_completion; /* if indicated for this command */
|
cvptr->status = normal_completion; /* if indicated for this command */
|
||||||
cvptr->spd_unit = SET_S1UNIT (unit); /* save the unit number for status requests */
|
cvptr->spd_unit = SET_S1UNIT (unit); /* save the unit number for status requests */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props & TO_CTYPE (cvptr->type)) /* is the opcode defined for this controller? */
|
if (cvptr->type <= last_type /* is the controller type legal? */
|
||||||
if ((props & CP_UCHK) && unit > DL_MAXUNIT) /* if the unit number is checked and is illegal, */
|
&& props->valid [cvptr->type]) /* and the opcode defined for this controller? */
|
||||||
|
if (props->unit_check && unit > DL_MAXUNIT) /* if the unit number is checked and is illegal, */
|
||||||
dl_end_command (cvptr, unit_unavailable); /* end with a unit unavailable error */
|
dl_end_command (cvptr, unit_unavailable); /* end with a unit unavailable error */
|
||||||
|
|
||||||
else {
|
else {
|
||||||
cvptr->state = cntlr_busy; /* legal unit, so controller is now busy */
|
cvptr->state = cntlr_busy; /* legal unit, so controller is now busy */
|
||||||
cvptr->opcode = opcode; /* save the controller opcode */
|
cvptr->opcode = opcode; /* save the controller opcode */
|
||||||
cvptr->length = GET_INCNT (props); /* set the inbound parameter count */
|
cvptr->length = props->params_in; /* set the inbound parameter count */
|
||||||
cvptr->index = 1; /* point at the first parameter element (if any) */
|
cvptr->index = 1; /* point at the first parameter element (if any) */
|
||||||
|
|
||||||
if (cvptr->type == MAC && cvptr->length) { /* MAC controller and inbound parameters? */
|
if (cvptr->type == MAC && cvptr->length) { /* MAC controller and inbound parameters? */
|
||||||
|
@ -780,28 +721,30 @@ return FALSE; /* the preparation has f
|
||||||
drive units but are scheduled on the controller unit because they may be
|
drive units but are scheduled on the controller unit because they may be
|
||||||
issued while a drive is processing a seek.
|
issued while a drive is processing a seek.
|
||||||
|
|
||||||
8. The activation time is set to one-half of the intersector time (latency)
|
8. The activation time is set to the intersector time (latency) for read and
|
||||||
for read and write commands, and to the controller processing time for
|
write commands, and to the controller processing time for all others.
|
||||||
all others.
|
This time cannot be shorter than 20 instructions, or DVR32 will be unable
|
||||||
|
to start DCPC in time to avoid an over/underrun.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
UNIT *dl_start_command (CVPTR cvptr, UNIT *units, uint32 unit_limit)
|
UNIT *dl_start_command (CVPTR cvptr, UNIT *units, uint32 unit_limit)
|
||||||
{
|
{
|
||||||
UNIT *uptr, *rptr;
|
UNIT *uptr, *rptr;
|
||||||
uint32 props, unit;
|
uint32 unit;
|
||||||
|
PRPTR props;
|
||||||
t_bool is_seeking = FALSE;
|
t_bool is_seeking = FALSE;
|
||||||
|
|
||||||
props = cmd_props [cvptr->opcode]; /* get the command properties */
|
props = &cmd_props [cvptr->opcode]; /* get the command properties */
|
||||||
|
|
||||||
if (cvptr->type == MAC) { /* is this a MAC controller? */
|
if (cvptr->type == MAC) { /* is this a MAC controller? */
|
||||||
if (props & CP_UNIT) /* is the unit field defined for this command? */
|
if (props->unit_field) /* is the unit field defined for this command? */
|
||||||
unit = GET_UNIT (cvptr->buffer [0]); /* get the unit number from the command */
|
unit = GET_UNIT (cvptr->buffer [0]); /* get the unit number from the command */
|
||||||
else /* no unit is specified in the command */
|
else /* no unit is specified in the command */
|
||||||
unit = 0; /* so the unit number defaults to 0 */
|
unit = 0; /* so the unit number defaults to 0 */
|
||||||
|
|
||||||
if (unit > unit_limit) /* if the unit number is invalid, */
|
if (unit > unit_limit) /* if the unit number is invalid, */
|
||||||
uptr = NULL; /* it does not correspond to a unit */
|
uptr = NULL; /* it does not correspond to a unit */
|
||||||
else if (props & CP_UACC) /* if the command accesses a drive, */
|
else if (props->unit_access) /* if the command accesses a drive, */
|
||||||
uptr = units + unit; /* get the address of the unit */
|
uptr = units + unit; /* get the address of the unit */
|
||||||
else /* the command accesses the controller only */
|
else /* the command accesses the controller only */
|
||||||
uptr = cvptr->aux + controller; /* so use the controller unit */
|
uptr = cvptr->aux + controller; /* so use the controller unit */
|
||||||
|
@ -812,17 +755,16 @@ else { /* for an ICD controller
|
||||||
uptr = units + unit_limit; /* and we use the indicated unit */
|
uptr = units + unit_limit; /* and we use the indicated unit */
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((props & CP_UCHK) && !uptr /* if the unit number is checked and is invalid */
|
if (props->unit_check && !uptr /* if the unit number is checked and is invalid */
|
||||||
|| (props & CP_WAIT) /* or the command waits for the drive */
|
|| props->seek_wait && (drive_status (uptr) & DL_S2STOPS)) { /* or if waiting for an offline drive */
|
||||||
&& (drive_status (uptr) & DL_S2STOPS)) { /* and the drive is offline or faulted */
|
dl_end_command (cvptr, status_2_error); /* then the command ends with a Status-2 error */
|
||||||
dl_end_command (cvptr, status_2_error); /* then the command ends with a Status-2 error */
|
uptr = NULL; /* prevent the command from starting */
|
||||||
uptr = NULL; /* prevent command from starting */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (uptr) { /* otherwise, we have a valid unit */
|
else if (uptr) { /* otherwise, we have a valid unit */
|
||||||
uptr->wait = cvptr->cmd_time; /* most commands use the command delay */
|
uptr->wait = cvptr->cmd_time; /* most commands use the command delay */
|
||||||
|
|
||||||
if (props & CP_UACC) { /* does the command access the unit? */
|
if (props->unit_access) { /* does the command access the unit? */
|
||||||
is_seeking = sim_is_active (uptr) != 0; /* see if the unit is busy */
|
is_seeking = sim_is_active (uptr) != 0; /* see if the unit is busy */
|
||||||
|
|
||||||
if (is_seeking) /* if a seek is in progress, */
|
if (is_seeking) /* if a seek is in progress, */
|
||||||
|
@ -831,15 +773,15 @@ else if (uptr) { /* otherwise, we have a
|
||||||
else { /* otherwise, the unit is idle */
|
else { /* otherwise, the unit is idle */
|
||||||
uptr->STAT &= ~DL_S2ATN; /* clear the drive Attention status */
|
uptr->STAT &= ~DL_S2ATN; /* clear the drive Attention status */
|
||||||
|
|
||||||
if (GET_CLASS (props) == class_read /* if a read command */
|
if (props->classification == class_read /* if a read command */
|
||||||
|| GET_CLASS (props) == class_write) /* or a write command */
|
|| props->classification == class_write) /* or a write command */
|
||||||
uptr->wait = cvptr->sector_time / 2; /* schedule the sector start latency */
|
uptr->wait = cvptr->sector_time; /* schedule the sector start latency */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cvptr->index = 0; /* reset the buffer index */
|
cvptr->index = 0; /* reset the buffer index */
|
||||||
cvptr->length = GET_OUTCNT (props); /* set the count of outbound parameters */
|
cvptr->length = props->params_out; /* set the count of outbound parameters */
|
||||||
cvptr->eod = CLEAR; /* clear the end of data flag */
|
cvptr->eod = CLEAR; /* clear the end of data flag */
|
||||||
|
|
||||||
|
|
||||||
|
@ -1643,17 +1585,11 @@ return SCPE_OK;
|
||||||
|
|
||||||
CNTLR_CLASS dl_classify (CNTLR_VARS cntlr)
|
CNTLR_CLASS dl_classify (CNTLR_VARS cntlr)
|
||||||
{
|
{
|
||||||
uint32 flags;
|
if (cntlr.type <= last_type /* if the controller type is legal, */
|
||||||
|
&& cntlr.opcode <= last_opcode /* and the opcode is legal */
|
||||||
if (cntlr.opcode > last_opcode) /* is the opcode illegal? */
|
&& cmd_props [cntlr.opcode].valid [cntlr.type]) /* and is defined for this controller, */
|
||||||
return class_invalid; /* return an invalid classification */
|
return cmd_props [cntlr.opcode].classification; /* then return the command classification */
|
||||||
|
else /* type or opcode is illegal */
|
||||||
flags = cmd_props [cntlr.opcode]; /* get the opcode properties */
|
|
||||||
|
|
||||||
if (cntlr.type == MAC && (flags & CP_MAC) /* is the opcode */
|
|
||||||
|| cntlr.type == ICD && (flags & CP_ICD)) /* defined for this controller? */
|
|
||||||
return GET_CLASS (cmd_props [cntlr.opcode]); /* yes, so return the command classification */
|
|
||||||
else /* opcode is undefined */
|
|
||||||
return class_invalid; /* so return an invalid classification */
|
return class_invalid; /* so return an invalid classification */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1667,17 +1603,11 @@ else /* opcode is undefined *
|
||||||
|
|
||||||
const char *dl_opcode_name (CNTLR_TYPE controller, CNTLR_OPCODE opcode)
|
const char *dl_opcode_name (CNTLR_TYPE controller, CNTLR_OPCODE opcode)
|
||||||
{
|
{
|
||||||
uint32 flags;
|
if (controller <= last_type /* if the controller type is legal, */
|
||||||
|
&& opcode <= last_opcode /* and the opcode is legal */
|
||||||
if (opcode > last_opcode) /* is the opcode illegal? */
|
&& cmd_props [opcode].valid [controller]) /* and is defined for this controller, */
|
||||||
return invalid_name; /* return an error indication */
|
return opcode_name [opcode]; /* then return the opcode name */
|
||||||
|
else /* type or opcode is illegal, */
|
||||||
flags = cmd_props [opcode]; /* get the opcode properties */
|
|
||||||
|
|
||||||
if (controller == MAC && (flags & CP_MAC) || /* is the opcode */
|
|
||||||
controller == ICD && (flags & CP_ICD)) /* defined for this controller? */
|
|
||||||
return opcode_name [opcode]; /* yes, so return the opcode name */
|
|
||||||
else /* opcode is undefined, */
|
|
||||||
return invalid_name; /* so return an error indication */
|
return invalid_name; /* so return an error indication */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1690,10 +1620,10 @@ else /* opcode is undefined,
|
||||||
|
|
||||||
const char *dl_phase_name (CNTLR_PHASE phase)
|
const char *dl_phase_name (CNTLR_PHASE phase)
|
||||||
{
|
{
|
||||||
if (phase > last_phase) /* is the phase illegal? */
|
if (phase <= last_phase) /* if the phase is legal, */
|
||||||
return invalid_name; /* return an error indication */
|
return phase_name [phase]; /* return the phase name */
|
||||||
else /* phase is defined, */
|
else /* phase is illegal, */
|
||||||
return phase_name [phase]; /* so return the phase name */
|
return invalid_name; /* so return an error indication */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
used in advertising or otherwise to promote the sale, use or other dealings
|
used in advertising or otherwise to promote the sale, use or other dealings
|
||||||
in this Software without prior written authorization from the authors.
|
in this Software without prior written authorization from the authors.
|
||||||
|
|
||||||
15-Mar-12 JDB First release
|
19-Mar-12 JDB First release
|
||||||
09-Nov-11 JDB Created disc controller common library from DS simulator
|
09-Nov-11 JDB Created disc controller common library from DS simulator
|
||||||
|
|
||||||
|
|
||||||
|
@ -191,11 +191,12 @@
|
||||||
#define MODEL_7925 SET_MODEL (D7925_MODEL)
|
#define MODEL_7925 SET_MODEL (D7925_MODEL)
|
||||||
|
|
||||||
|
|
||||||
/* Controller types (values must be powers of 2) */
|
/* Controller types */
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MAC = 1,
|
MAC = 0,
|
||||||
ICD = 2
|
ICD, last_type = ICD, /* last valid type */
|
||||||
|
TYPE_COUNT /* count of controller types */
|
||||||
} CNTLR_TYPE;
|
} CNTLR_TYPE;
|
||||||
|
|
||||||
|
|
||||||
|
@ -218,11 +219,12 @@ typedef enum {
|
||||||
request_syndrome = 015,
|
request_syndrome = 015,
|
||||||
read_with_offset = 016,
|
read_with_offset = 016,
|
||||||
set_file_mask = 017,
|
set_file_mask = 017,
|
||||||
|
invalid_opcode = 020,
|
||||||
read_without_verify = 022,
|
read_without_verify = 022,
|
||||||
load_tio_register = 023,
|
load_tio_register = 023,
|
||||||
request_disc_address = 024,
|
request_disc_address = 024,
|
||||||
end = 025,
|
end = 025,
|
||||||
wakeup = 026, last_opcode = wakeup /* last opcode */
|
wakeup = 026, last_opcode = wakeup /* last valid opcode */
|
||||||
} CNTLR_OPCODE;
|
} CNTLR_OPCODE;
|
||||||
|
|
||||||
#define DL_OPCODE_MASK 037
|
#define DL_OPCODE_MASK 037
|
||||||
|
@ -231,9 +233,9 @@ typedef enum {
|
||||||
/* Controller command phases */
|
/* Controller command phases */
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
start_phase,
|
start_phase = 0,
|
||||||
data_phase,
|
data_phase,
|
||||||
end_phase, last_phase = end_phase /* last phase */
|
end_phase, last_phase = end_phase /* last valid phase */
|
||||||
} CNTLR_PHASE;
|
} CNTLR_PHASE;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1015,7 +1015,8 @@ t_stat sim_os_poll_kbd (void)
|
||||||
int c = -1;
|
int c = -1;
|
||||||
DWORD nkbevents, nkbevent;
|
DWORD nkbevents, nkbevent;
|
||||||
INPUT_RECORD rec;
|
INPUT_RECORD rec;
|
||||||
extern int32 sim_switches;
|
|
||||||
|
\
|
||||||
|
|
||||||
if ((std_input == NULL) || /* No keyboard for */
|
if ((std_input == NULL) || /* No keyboard for */
|
||||||
(std_input == INVALID_HANDLE_VALUE)) /* background processes */
|
(std_input == INVALID_HANDLE_VALUE)) /* background processes */
|
||||||
|
|
63
sim_rev.h
63
sim_rev.h
|
@ -1,6 +1,6 @@
|
||||||
/* sim_rev.h: simulator revisions and current rev level
|
/* 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
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
copy of this software and associated documentation files (the "Software"),
|
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:
|
0 xx-yyy-1 scp.c:
|
||||||
- added *nix READLINE support (Mark Pizzolato)
|
- 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)
|
- fixed handling of DO with no arguments (Dave Bryan)
|
||||||
- clarified some help messages (Mark Pizzolato)
|
- clarified some help messages (Mark Pizzolato)
|
||||||
- added "SHOW SHOW" and "SHOW <dev> SHOW" commands (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)
|
- major revision (Dave Hittner and Mark Pizzolato)
|
||||||
|
|
||||||
sim_tmxr.c:
|
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:
|
h316_cpu.c:
|
||||||
- fixed bugs in MPY, DIV introduced in 3.8-1 (from Theo Engel)
|
- 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):
|
hp2100 all peripherals (Dave Bryan):
|
||||||
- Changed I/O signal handlers for newly revised signal model
|
- Changed I/O signal handlers for newly revised signal model
|
||||||
|
- Deprecated DEVNO modifier in favor of SC
|
||||||
|
|
||||||
hp2100_cpu.c (Dave Bryan):
|
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
|
- Revised DMA for new multi-card paradigm
|
||||||
- Consolidated DMA reset routines
|
- Consolidated DMA reset routines
|
||||||
- DMA channels renamed from 0,1 to 1,2 to match documentation
|
- 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 requests to enable stealing every cycle
|
||||||
- Fixed DMA priority for channel 1 over channel 2
|
- Fixed DMA priority for channel 1 over channel 2
|
||||||
- Corrected comments for "cpu_set_idle"
|
- 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:
|
hp2100_cpu.h:
|
||||||
- Changed declarations for VMS compiler
|
- Changed declarations for VMS compiler
|
||||||
|
@ -79,15 +84,42 @@ patch date module(s) and fix(es)
|
||||||
hp2100_cpu0.c (Dave Bryan):
|
hp2100_cpu0.c (Dave Bryan):
|
||||||
- Removed DS note regarding PIF card (is now implemented)
|
- 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 OPSIZE casts to fp_accum calls in .FPWR/.TPWR
|
||||||
|
|
||||||
hp2100_cpu6.c (Dave Bryan):
|
hp2100_cpu6.c (Dave Bryan):
|
||||||
- DMA channels renamed from 0,1 to 1,2 to match documentation
|
- Eliminated unused variable in "cpu_ema_vset"
|
||||||
|
|
||||||
|
hp2100_cpu7.c (Dave Bryan):
|
||||||
|
- Corrected "opsize" parameter type in vis_abs
|
||||||
|
|
||||||
hp2100_defs.h (Dave Bryan):
|
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
|
- DMA channels renamed from 0,1 to 1,2 to match documentation
|
||||||
- Revised I/O signal enum values for concurrent signals
|
- Revised I/O signal enum values for concurrent signals
|
||||||
- Revised I/O macros for new signal handling
|
- 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):
|
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
|
- Corrected status returns for disabled drive, auto-seek
|
||||||
beyond drive limits, Request Sector Address and Wakeup
|
beyond drive limits, Request Sector Address and Wakeup
|
||||||
with invalid or offline unit
|
with invalid or offline unit
|
||||||
|
@ -95,23 +127,38 @@ patch date module(s) and fix(es)
|
||||||
Read Without Verify
|
Read Without Verify
|
||||||
|
|
||||||
hp2100_fp1.c (Dave Bryan):
|
hp2100_fp1.c (Dave Bryan):
|
||||||
|
- Added missing precision on constant "one" in fp_trun
|
||||||
- Completed the comments for divide; no code changes
|
- Completed the comments for divide; no code changes
|
||||||
|
|
||||||
hp2100_ipl.c (Dave Bryan):
|
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
|
- A failed STC may now be retried
|
||||||
|
- Consolidated reporting of consecutive CRS signals
|
||||||
|
- Revised for new multi-card paradigm
|
||||||
|
|
||||||
hp2100_lps.c (Dave Bryan):
|
hp2100_lps.c (Dave Bryan):
|
||||||
- Corrected 12566B (DIAG mode) jumper settings
|
|
||||||
- Revised detection of CLC at last DMA cycle
|
- 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):
|
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):
|
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
|
- DMA channels renamed from 0,1 to 1,2 to match documentation
|
||||||
- Changed DIB access for revised signal model
|
- Changed DIB access for revised signal model
|
||||||
|
|
||||||
|
hp_disclib.c, hp_disclib.h (Dave Bryan)
|
||||||
|
- Created MAC/ICD disc controller library
|
||||||
|
|
||||||
i1401_cd.c:
|
i1401_cd.c:
|
||||||
- fixed read stacker operation in column binary mode
|
- fixed read stacker operation in column binary mode
|
||||||
- fixed punch stacker operation (Van Snyder)
|
- fixed punch stacker operation (Van Snyder)
|
||||||
|
|
Loading…
Add table
Reference in a new issue