HP2100 Update from Dave Bryan

This commit is contained in:
Mark Pizzolato 2012-03-23 11:11:07 -07:00
parent e0fbfa6abf
commit 5863e1bc38
7 changed files with 269 additions and 322 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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