HP2100 update from Dave Bryan

This commit is contained in:
Mark Pizzolato 2012-04-04 12:31:43 -07:00
parent a14a1ab5cd
commit 40deb20ccd
16 changed files with 1087 additions and 1022 deletions

View file

@ -2,7 +2,8 @@ Notes For V3.9
The makefile now works for all *nix platforms and with cygwin and MinGW32 The makefile now works for all *nix platforms and with cygwin and MinGW32
on Windows. on Windows. It will automatically detect the availability of libpcap
components and build network capable simulators if they are available.
1. New Features 1. New Features
@ -14,16 +15,33 @@ on Windows.
- added *nix READLINE support (Mark Pizzolato) - added *nix READLINE support (Mark Pizzolato)
- added "SHOW SHOW" and "SHOW <dev> SHOW" commands (Mark Pizzolato) - added "SHOW SHOW" and "SHOW <dev> SHOW" commands (Mark Pizzolato)
- added support for BREAK key on Windows (Mark Pizzolato) - added support for BREAK key on Windows (Mark Pizzolato)
- added ethernet support (Mark Pizzolato)
windows host <-> simulator NIC sharing
native tap interfaces on BSD, Linux and OSX
vde (Virtual Distributed Ethernet) networking
Large Send Offload support
UDP and TCP Checksum offload support
dynamic libpcap loading on *nix platforms
1.1.2 PDP-8 1.1.2 PDP-8
- floating point processor is now enabled - floating point processor is now enabled
1.1.3 IA64 VMS Ethernet Support 1.1.3 HP2100 (Dave Bryan)
- added support for 12821A HP-IB disk controller,
7906H/20H/25H disks
1.1.4 PDP11 and VAX (Mark Pizzolato)
- Added DELQA-Plus device.
1.1.5 IA64 VMS Ethernet Support
- Identified compiler version issues and added IA64 support (Matt Burke) - Identified compiler version issues and added IA64 support (Matt Burke)
1.1.6 Visual Studio Projects (Mark Pizzolato)
2. Bugs Fixed 2. Bugs Fixed
Please see the revision history on http://simh.trailing-edge.com or Please see the revision history on http://simh.trailing-edge.com or

View file

@ -1,6 +1,6 @@
HP 2100 SIMULATOR BUG FIX WRITEUPS HP 2100 SIMULATOR BUG FIX WRITEUPS
================================== ==================================
Last update: 2012-03-23 Last update: 2012-03-25
1. PROBLEM: Booting from magnetic tape reports "HALT instruction, P: 77756 1. PROBLEM: Booting from magnetic tape reports "HALT instruction, P: 77756
@ -6257,3 +6257,26 @@
16-bit dimension count. 16-bit dimension count.
STATUS: Fixed in version 3.9-0. STATUS: Fixed in version 3.9-0.
246. PROBLEM: SHOW MTC SHOW lists the FORMAT modifier twice.
VERSION: 3.8-1
OBSERVATION: Entering the planned SHOW MTC SHOW command results in the
following display:
sim> SHOW MTC SHOW
sh{ow} MTC FORMAT, SC, DEVNO
sh{ow} MTCn FORMAT
FORMAT is listed both as a device and as a unit modifier.
CAUSE: The FORMAT entry in the modifier table contains both the MTAB_VDV
and the MTAB_VUN flags.
RESOLUTION: Remove the redundant MTAB_VUN flag from the "mtc_mod" array
(hp2100_mt.c).
STATUS: Fixed in version 3.9-0.

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
/* hp2100_di.h: HP 12821A HP-IB Disc Interface simulator common definitions /* hp2100_di.h: HP 12821A HP-IB Disc Interface simulator definitions
Copyright (c) 2010-2012, J. David Bryan Copyright (c) 2010-2012, J. David Bryan
@ -41,8 +41,8 @@
only the DA device is implemented. However, as the 12821A diagnostic only the DA device is implemented. However, as the 12821A diagnostic
requires two cards to test I/O fully, a dummy DC device is provided by requires two cards to test I/O fully, a dummy DC device is provided by
the DA simulator. It is enabled only when the DA card is configured for the DA simulator. It is enabled only when the DA card is configured for
diagnostic mode. This dummy device may be removed when either the DC or diagnostic mode. This dummy device should be removed when either the DC
MA device is implemented. or MA device is implemented.
*/ */
@ -51,19 +51,21 @@
#define FIFO_SIZE 16 /* FIFO depth */ #define FIFO_SIZE 16 /* FIFO depth */
typedef enum { da, dc, ma, /* card IDs */ typedef enum {
first_card = da, /* first card ID */ da, dc, ma, /* card IDs */
last_card = ma, /* last card ID */ first_card = da, /* first card ID */
card_count } CARD_ID; /* count of card IDs */ last_card = ma, /* last card ID */
card_count /* count of card IDs */
} CARD_ID;
/* Device flags and accessors (leaves space for disc/tape flags) */ /* Device flags and accessors (bits 7-0 are reserved for disc/tape flags) */
#define DEV_V_BUSADR (DEV_V_UF + 8) /* bits 10-8: HP-IB address */ #define DEV_V_BUSADR (DEV_V_UF + 8) /* bits 10-8: interface HP-IB address */
#define DEV_V_DIAG (DEV_V_UF + 11) /* bit 11: diagnostic mode */ #define DEV_V_DIAG (DEV_V_UF + 11) /* bit 11: diagnostic mode */
#define DEV_V_W1 (DEV_V_UF + 12) /* bit 12: DCPC pacing jumper */ #define DEV_V_W1 (DEV_V_UF + 12) /* bit 12: DCPC pacing jumper */
#define DEV_M_BUSADR 7 /* bus address mask */ #define DEV_M_BUSADR 07 /* bus address mask */
#define DEV_BUSADR (DEV_M_BUSADR << DEV_V_BUSADR) #define DEV_BUSADR (DEV_M_BUSADR << DEV_V_BUSADR)
#define DEV_DIAG (1 << DEV_V_DIAG) #define DEV_DIAG (1 << DEV_V_DIAG)
@ -73,11 +75,11 @@ typedef enum { da, dc, ma, /* card IDs */
#define SET_DIADR(f) (((f) & DEV_M_BUSADR) << DEV_V_BUSADR) #define SET_DIADR(f) (((f) & DEV_M_BUSADR) << DEV_V_BUSADR)
/* Unit flags and accessors (leaves space for disc/tape flags) */ /* Unit flags and accessors (bits 7-0 are reserved for disc/tape flags) */
#define UNIT_V_BUSADR (UNIT_V_UF + 8) /* bits 10-8: HP-IB address */ #define UNIT_V_BUSADR (UNIT_V_UF + 8) /* bits 10-8: unit HP-IB address */
#define UNIT_M_BUSADR 7 /* bus address mask */ #define UNIT_M_BUSADR 07 /* bus address mask */
#define UNIT_BUSADR (UNIT_M_BUSADR << UNIT_V_BUSADR) #define UNIT_BUSADR (UNIT_M_BUSADR << UNIT_V_BUSADR)
@ -95,10 +97,10 @@ typedef enum { da, dc, ma, /* card IDs */
#define DEB_SERV (1 << 5) /* unit service scheduling calls */ #define DEB_SERV (1 << 5) /* unit service scheduling calls */
/* HP-IB control state bit flags. /* HP-IB control line state bit flags.
NOTE that these flags align with the corresponding flags in the DI status NOTE that these flags align with the corresponding flags in the DI status
register, so don't change the order! register, so don't change the numerical values!
*/ */
#define BUS_ATN 0001 /* attention */ #define BUS_ATN 0001 /* attention */
@ -128,7 +130,7 @@ typedef enum { da, dc, ma, /* card IDs */
#define BUS_UCG 0020 /* universal command group */ #define BUS_UCG 0020 /* universal command group */
#define BUS_ACG 0000 /* addressed command group */ #define BUS_ACG 0000 /* addressed command group */
#define BUS_UNADDRESS 0037 /* unlisten and untalk */ #define BUS_UNADDRESS 0037 /* unlisten and untalk addresses */
#define PPR(a) (uint8) (1 << (7 - (a))) /* parallel poll response */ #define PPR(a) (uint8) (1 << (7 - (a))) /* parallel poll response */
@ -146,8 +148,10 @@ typedef enum { da, dc, ma, /* card IDs */
#define SET_LOWER(b) (b) #define SET_LOWER(b) (b)
#define SET_BOTH(b) (SET_UPPER (b) | SET_LOWER (b)) #define SET_BOTH(b) (SET_UPPER (b) | SET_LOWER (b))
typedef enum { upper, /* byte selector */ typedef enum {
lower } SELECTOR; upper, /* upper byte selected */
lower /* lower byte selected */
} SELECTOR;
/* Per-card state variables */ /* Per-card state variables */
@ -170,9 +174,9 @@ typedef struct {
uint32 fifo_count; /* FIFO occupancy counter */ uint32 fifo_count; /* FIFO occupancy counter */
REG *fifo_reg; /* FIFO register pointer */ REG *fifo_reg; /* FIFO register pointer */
uint32 acceptors; /* unit bitmap of bus acceptors */ uint32 acceptors; /* unit bitmap of the bus acceptors */
uint32 listeners; /* unit bitmap of bus listeners */ uint32 listeners; /* unit bitmap of the bus listeners */
uint32 talker; /* unit bitmap of bus talker */ uint32 talker; /* unit bitmap of the bus talker */
uint8 bus_cntl; /* HP-IB bus control state (ATN, EOI, etc.) */ uint8 bus_cntl; /* HP-IB bus control state (ATN, EOI, etc.) */
uint8 poll_response; /* address bitmap of parallel poll responses */ uint8 poll_response; /* address bitmap of parallel poll responses */
@ -183,7 +187,7 @@ typedef struct {
/* Disc interface VM global register definitions. /* Disc interface VM global register definitions.
Include these definitions before any device-specific registers. These definitions should be included before any device-specific registers.
Implementation notes: Implementation notes:
@ -222,7 +226,7 @@ typedef struct {
/* Disc interface VM global modifier definitions. /* Disc interface VM global modifier definitions.
Include these definitions before any device-specific modifiers. These definitions should be included before any device-specific modifiers.
*/ */
#define DI_MODS(dev) \ #define DI_MODS(dev) \

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
SIMH/HP 21XX DIAGNOSTICS PERFORMANCE SIMH/HP 21XX DIAGNOSTICS PERFORMANCE
==================================== ====================================
Last update: 2012-02-20 Last update: 2012-03-30
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.
@ -70,7 +70,7 @@ The results of the diagnostic runs are summarized below:
103116 12967 Synchronous Interface 1438 - No simulation 103116 12967 Synchronous Interface 1438 - No simulation
103017 12966 Asynchronous Data Set 1519 3.8-0 Passed 103017 12966 Asynchronous Data Set 1519 3.8-0 Passed
103121 12968 Asynchronous Comm. Interface 1602 - No simulation 103121 12968 Asynchronous Comm. Interface 1602 - No simulation
103024 12821 ICD Disc Interface 1928 3.8-2 Passed 103024 12821 ICD Disc Interface 1928 3.9-0 Passed
104000 2600 Keyboard Display Terminal 1615 - No simulation 104000 2600 Keyboard Display Terminal 1615 - No simulation
104003 Teleprinter 1509 3.2-3 Partial 104003 Teleprinter 1509 3.2-3 Partial
@ -128,8 +128,9 @@ offline diagnostics:
Part Number Diagnostic Name Code Op. Sys. Code Vers. Result Part Number Diagnostic Name Code Op. Sys. Code Vers. Result
----------- ------------------------------- ---- -------- ---- ----- ---------- ----------- ------------------------------- ---- -------- ---- ----- ----------
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
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.9-0 Partial
92067-16013 Extended Memory Area Firmware 1805 RTE-IVB 5010 3.8-0 Passed 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 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 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 92835-16006 SIGNAL/1000 Firmware Diagnostic 2040 RTE-6/VM 6200 3.8-0 Passed
@ -3527,7 +3528,9 @@ BINARY FILE: 91711-12032 Rev. 2201
HOST SYSTEM: RTE-IVB Rev. 5010 HOST SYSTEM: RTE-IVB Rev. 5010
CONFIGURATION: sim> set DS0 FORMAT CONFIGURATION: sim> set DA1 7906H
sim> set DA1 FORMAT
sim> attach DA1 scratch.U1.7906H.disc
sim> go sim> go
TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
@ -3540,12 +3543,12 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : Start trace at what step ? 0 DIAG : Start trace at what step ? 0
DIAG : Trace operations which are not part of the test steps ? NO DIAG : Trace operations which are not part of the test steps ? NO
DIAG : Stop after first failure ? NO DIAG : Stop after first failure ? NO
DIAG : Disc LU ? 41 DIAG : Disc LU ? 14
DIAG : Disc address ? 0 DIAG : Disc address ? 1
DIAG : Drive model number ? 06 DIAG : Drive model number ? 06
DIAG : Do you want to run the interactive part of the test ? YES DIAG : Do you want to run the interactive part of the test ? YES
DIAG : LU 41 address 0 select code 25 7906 drive DIAG : LU 14 address 1 select code 12 7906 drive
DIAG : CHECK THAT ALL SWITCHES ARE SET CORRECTLY. DIAG : CHECK THAT ALL SWITCHES ARE SET CORRECTLY.
DIAG : THE RUN/STOP SWITCH SHOULD BE IN THE RUN POSITION. DIAG : THE RUN/STOP SWITCH SHOULD BE IN THE RUN POSITION.
@ -3569,7 +3572,7 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 1 PASSED DIAG : STEP 1 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : REQUEST STATUS drive type 0 0 0 50 0 DIAG : REQUEST STATUS drive type 0 0 0 40 0
DIAG : IDENTIFY result 3 0 0 40 0 DIAG : IDENTIFY result 3 0 0 40 0
DIAG : STEP 3 PASSED DIAG : STEP 3 PASSED
@ -3580,19 +3583,19 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : cylinders: 0 - 410 heads: 0 - 3 sectors: 0 - 47 DIAG : cylinders: 0 - 410 heads: 0 - 3 sectors: 0 - 47
DIAG : First and last tracks on LU: DIAG : First and last tracks on LU:
DIAG : cylinder 0 head 0 (track 0) DIAG : cylinder 0 head 0 (track 0)
DIAG : cylinder 199 head 1 (track 399) DIAG : cylinder 49 head 1 (track 99)
DIAG : First and last spares on LU: DIAG : First and last spares on LU:
DIAG : cylinder 200 head 0 (track 400) DIAG : cylinder 50 head 0
DIAG : cylinder 202 head 1 (track 405) DIAG : cylinder 49 head 1 (track 99)
DIAG : Heads on LU (first - last): 0 - 1 DIAG : Heads on LU (first - last): 0 - 1
DIAG : Searching entire LU for file directory: DIAG : Searching entire LU for file directory:
DIAG : NO DIRECTORY OR UNABLE TO READ DIRECTORY ON TEST LU DIAG : NO DIRECTORY OR UNABLE TO READ DIRECTORY ON TEST LU
DIAG : First and last tracks available for testing: DIAG : First and last tracks available for testing:
DIAG : cylinder 0 head 0 (track 0) DIAG : cylinder 0 head 0 (track 0)
DIAG : cylinder 199 head 1 (track 399) DIAG : cylinder 49 head 1 (track 99)
DIAG : Default test tracks: DIAG : Default test tracks:
DIAG : cylinder 199 head 0 (track 398) DIAG : cylinder 49 head 0 (track 98)
DIAG : cylinder 199 head 1 (track 399) DIAG : cylinder 49 head 1 (track 99)
DIAG : Use default test tracks ? YES DIAG : Use default test tracks ? YES
DIAG : Checking test track preambles. DIAG : Checking test track preambles.
@ -3601,11 +3604,11 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : Beginning part 2 of diagnostic. DIAG : Beginning part 2 of diagnostic.
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : STEP 4 PASSED DIAG : STEP 4 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : REQUEST DISC ADDR cy 199 hd 0 sec 0 0 0 40 0 DIAG : REQUEST DISC ADDR cy 49 hd 0 sec 0 0 0 40 0
DIAG : STEP 5 PASSED DIAG : STEP 5 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
@ -3614,8 +3617,8 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 6 PASSED DIAG : STEP 6 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : REQUEST SECTOR ADDR sec 2 0 0 40 0 DIAG : REQUEST SECTOR ADDR sec 6 0 0 40 0
DIAG : STEP 7 PASSED DIAG : STEP 7 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
@ -3626,153 +3629,153 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 8 PASSED DIAG : STEP 8 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 138 0 0 40 0 DIAG : READ FULL SECTOR length 138 0 0 40 0
DIAG : decode preamble cy 199 hd 0 sec 0 spd 0 DIAG : decode preamble cy 49 hd 0 sec 0 spd 0
DIAG : STEP 9 PASSED DIAG : STEP 9 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : WRITE FULL SECTOR length 138 0 0 40 0 DIAG : WRITE FULL SECTOR length 138 0 0 40 0
DIAG : STEP 10 PASSED DIAG : STEP 10 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 1 0 0 40 0 DIAG : VERIFY sector count 1 0 0 40 0
DIAG : STEP 11 FAILED DIAG : STEP 11 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ length 128 0 0 40 0 DIAG : READ length 128 0 0 40 0
DIAG : STEP 12 FAILED DIAG : STEP 12 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ WITH OFFSET length 128 offset 55 0 0 40 0 DIAG : READ WITH OFFSET length 128 offset 55 0 0 40 0
DIAG : STEP 13 FAILED DIAG : STEP 13 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ WITHOUT VERIFY length 128 0 0 40 0 DIAG : READ WITHOUT VERIFY length 128 0 0 40 0
DIAG : STEP 14 FAILED DIAG : STEP 14 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SET FILE MASK mask 0 0 0 40 0 DIAG : SET FILE MASK mask 0 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 47 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 47 0 37 40 0
DIAG : READ FULL SECTOR length 140 0 14 40 1 DIAG : READ FULL SECTOR length 140 0 14 40 1
DIAG : STEP 16 PASSED DIAG : STEP 16 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SET FILE MASK mask 2 0 0 40 0 DIAG : SET FILE MASK mask 2 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 47 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 47 0 37 40 0
DIAG : READ FULL SECTOR length 140 0 0 40 0 DIAG : READ FULL SECTOR length 140 0 0 40 0
DIAG : STEP 17 PASSED DIAG : STEP 17 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SET FILE MASK mask 2 0 0 40 0 DIAG : SET FILE MASK mask 2 0 0 40 0
DIAG : SEEK cy 199 hd 3 sec 47 0 37 40 0 DIAG : SEEK cy 49 hd 3 sec 47 0 37 40 0
DIAG : READ FULL SECTOR length 140 0 14 40 1 DIAG : READ FULL SECTOR length 140 0 14 40 1
DIAG : STEP 18 PASSED DIAG : STEP 18 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SET FILE MASK mask 3 0 0 40 0 DIAG : SET FILE MASK mask 3 0 0 40 0
DIAG : SEEK cy 199 hd 3 sec 47 0 37 40 0 DIAG : SEEK cy 49 hd 3 sec 47 0 37 40 0
DIAG : READ FULL SECTOR length 140 0 0 40 0 DIAG : READ FULL SECTOR length 140 0 0 40 0
DIAG : REQUEST DISC ADDR cy 200 hd 0 sec 1 0 0 40 0 DIAG : REQUEST DISC ADDR cy 50 hd 0 sec 1 0 0 40 0
DIAG : STEP 19 PASSED DIAG : STEP 19 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SET FILE MASK mask 11 0 0 40 0 DIAG : SET FILE MASK mask 11 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 47 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 47 0 37 40 0
DIAG : READ FULL SECTOR length 140 0 0 40 0 DIAG : READ FULL SECTOR length 140 0 0 40 0
DIAG : REQUEST DISC ADDR cy 198 hd 0 sec 1 0 0 40 0 DIAG : REQUEST DISC ADDR cy 48 hd 0 sec 1 0 0 40 0
DIAG : STEP 20 PASSED DIAG : STEP 20 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 1 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 1 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 1 1 0 40 0 DIAG : INITIALIZE length 6144 spd 1 1 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 0 sec 0 spd 0 DIAG : decode preamble cy 49 hd 0 sec 0 spd 0
DIAG : STEP 21 FAILED DIAG : STEP 21 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 0 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 0 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 4 4 0 40 0 DIAG : INITIALIZE length 6144 spd 4 4 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 22 FAILED DIAG : STEP 22 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 1 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 1 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 2 2 0 40 0 DIAG : INITIALIZE length 6144 spd 2 2 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 25 FAILED DIAG : STEP 25 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 0 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 0 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 6 6 0 40 0 DIAG : INITIALIZE length 6144 spd 6 6 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 26 FAILED DIAG : STEP 26 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 1 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 1 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 3 3 0 40 0 DIAG : INITIALIZE length 6144 spd 3 3 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 28 FAILED DIAG : STEP 28 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 0 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 0 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 4 4 0 40 0 DIAG : INITIALIZE length 6144 spd 4 4 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 30 FAILED DIAG : STEP 30 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 0 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 0 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 0 0 0 40 0 DIAG : INITIALIZE length 6144 spd 0 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 0 sec 0 spd 0 DIAG : decode preamble cy 49 hd 0 sec 0 spd 0
DIAG : SET FILE MASK mask 0 0 0 40 0 DIAG : SET FILE MASK mask 0 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ length 128 0 0 40 0 DIAG : READ length 128 0 0 40 0
DIAG : STEP 31 PASSED DIAG : STEP 31 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 1 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 1 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 0 0 0 40 0 DIAG : INITIALIZE length 6144 spd 0 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : SET FILE MASK mask 0 0 0 40 0 DIAG : SET FILE MASK mask 0 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ length 128 0 0 40 0 DIAG : READ length 128 0 0 40 0
DIAG : STEP 32 PASSED DIAG : STEP 32 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : WRITE length 128 0 0 40 0 DIAG : WRITE length 128 0 0 40 0
DIAG : STEP 35 PASSED DIAG : STEP 35 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : READ length 128 0 0 40 0 DIAG : READ length 128 0 0 40 0
DIAG : test data read test passed DIAG : test data read test passed
DIAG : STEP 36 PASSED DIAG : STEP 36 PASSED
@ -3801,19 +3804,19 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 40 PASSED DIAG : STEP 40 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 1 0 0 40 0 DIAG : VERIFY sector count 1 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 2 0 0 40 0 DIAG : VERIFY sector count 2 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 4 0 0 40 0 DIAG : VERIFY sector count 4 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 8 0 0 40 0 DIAG : VERIFY sector count 8 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 16 0 0 40 0 DIAG : VERIFY sector count 16 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 32 0 0 40 0 DIAG : VERIFY sector count 32 0 0 40 0
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : VERIFY sector count 48 0 0 40 0 DIAG : VERIFY sector count 48 0 0 40 0
DIAG : STEP 45 PASSED DIAG : STEP 45 PASSED
@ -3854,38 +3857,38 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 50 PASSED DIAG : STEP 50 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 198 hd 1 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 48 hd 1 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 0 0 0 40 0 DIAG : INITIALIZE length 6144 spd 0 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 52 FAILED DIAG : STEP 52 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 0 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 0 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 0 0 0 40 0 DIAG : INITIALIZE length 6144 spd 0 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 54 FAILED DIAG : STEP 54 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 1 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 1 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 0 0 0 40 0 DIAG : INITIALIZE length 6144 spd 0 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : SET FILE MASK mask 0 0 0 40 0 DIAG : SET FILE MASK mask 0 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ length 128 0 0 40 0 DIAG : READ length 128 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 5 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 5 0 37 40 0
DIAG : READ FULL SECTOR length 138 0 0 40 0 DIAG : READ FULL SECTOR length 138 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : WRITE FULL SECTOR length 138 0 0 40 0 DIAG : WRITE FULL SECTOR length 138 0 0 40 0
DIAG : SEEK cy 199 hd 1 sec 1 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 1 0 37 40 0
DIAG : READ length 128 0 0 40 0 DIAG : READ length 128 0 0 40 0
DIAG : STEP 55 FAILED DIAG : STEP 55 FAILED
@ -3912,7 +3915,7 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 60 PASSED DIAG : STEP 60 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 4 sec 0 0 23 44 1 DIAG : SEEK cy 49 hd 4 sec 0 0 23 44 1
DIAG : SEEK cy 0 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 0 hd 0 sec 0 0 37 40 0
DIAG : STEP 72 PASSED DIAG : STEP 72 PASSED
@ -3922,7 +3925,7 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 73 PASSED DIAG : STEP 73 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 49 0 23 44 1 DIAG : SEEK cy 49 hd 1 sec 49 0 23 44 1
DIAG : SEEK cy 0 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 0 hd 0 sec 0 0 37 40 0
DIAG : STEP 74 PASSED DIAG : STEP 74 PASSED
@ -3948,12 +3951,12 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 81 PASSED DIAG : STEP 81 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : ADDRESS RECORD cy 199 hd 1 sec 0 0 0 40 0 DIAG : ADDRESS RECORD cy 49 hd 1 sec 0 0 0 40 0
DIAG : INITIALIZE length 6144 spd 2 2 0 40 0 DIAG : INITIALIZE length 6144 spd 2 2 0 40 0
DIAG : SEEK cy 199 hd 1 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 40 0
DIAG : READ FULL SECTOR length 3 0 0 40 0 DIAG : READ FULL SECTOR length 3 0 0 40 0
DIAG : decode preamble cy 199 hd 1 sec 0 spd 0 DIAG : decode preamble cy 49 hd 1 sec 0 spd 0
DIAG : STEP 82 FAILED DIAG : STEP 82 FAILED
@ -3965,17 +3968,17 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : STEP 83 PASSED DIAG : STEP 83 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 0 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 0 0
DIAG : WRITE length 1 0 0 0 0 DIAG : WRITE length 1 0 0 0 0
DIAG : STEP 84 FAILED DIAG : STEP 84 FAILED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 0 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 0 0
DIAG : WRITE FULL SECTOR length 1 0 23 0 1 DIAG : WRITE FULL SECTOR length 1 0 23 0 1
DIAG : STEP 85 PASSED DIAG : STEP 85 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 1 sec 0 0 37 0 0 DIAG : SEEK cy 49 hd 1 sec 0 0 37 0 0
DIAG : INITIALIZE length 1 spd 0 0 23 0 1 DIAG : INITIALIZE length 1 spd 0 0 23 0 1
DIAG : STEP 86 PASSED DIAG : STEP 86 PASSED
@ -3992,21 +3995,21 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : Type <space>,<return> DIAG : Type <space>,<return>
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 140 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 140 0
DIAG : STEP 89 PASSED DIAG : STEP 89 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 140 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 140 0
DIAG : WRITE length 1 0 23 140 1 DIAG : WRITE length 1 0 23 140 1
DIAG : STEP 90 PASSED DIAG : STEP 90 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 140 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 140 0
DIAG : WRITE FULL SECTOR length 1 0 23 140 1 DIAG : WRITE FULL SECTOR length 1 0 23 140 1
DIAG : STEP 91 PASSED DIAG : STEP 91 PASSED
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 140 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 140 0
DIAG : INITIALIZE length 1 spd 0 0 23 140 1 DIAG : INITIALIZE length 1 spd 0 0 23 140 1
DIAG : STEP 92 PASSED DIAG : STEP 92 PASSED
@ -4015,7 +4018,7 @@ TEST REPORT: DIAG : HP-IB DISC DIAGNOSTIC
DIAG : Type <space>,<return> DIAG : Type <space>,<return>
DIAG : operation parameters/results spd cs ds DSJ DIAG : operation parameters/results spd cs ds DSJ
DIAG : SEEK cy 199 hd 0 sec 0 0 37 40 0 DIAG : SEEK cy 49 hd 0 sec 0 0 37 40 0
DIAG : STEP 97 PASSED DIAG : STEP 97 PASSED
DIAG : Part 3 of diagnostic completed. DIAG : Part 3 of diagnostic completed.

View file

@ -859,7 +859,7 @@ t_stat dpc_svc (UNIT *uptr)
int32 da, drv, err; int32 da, drv, err;
err = 0; /* assume no err */ err = 0; /* assume no err */
drv = uptr - dpc_dev.units; /* get drive no */ drv = uptr - dpc_unit; /* get drive no */
if (uptr->flags & UNIT_UNLOAD) { /* drive down? */ if (uptr->flags & UNIT_UNLOAD) { /* drive down? */
dpc.command = CLEAR; /* clr cch cmd */ dpc.command = CLEAR; /* clr cch cmd */
@ -1052,7 +1052,7 @@ return detach_unit (uptr); /* detach unit */
t_stat dpc_load_unload (UNIT *uptr, int32 value, char *cptr, void *desc) t_stat dpc_load_unload (UNIT *uptr, int32 value, char *cptr, void *desc)
{ {
uint32 drv; int32 drv;
if ((uptr->flags & UNIT_ATT) == 0) return SCPE_UNATT; /* must be attached to load */ if ((uptr->flags & UNIT_ATT) == 0) return SCPE_UNATT; /* must be attached to load */
@ -1060,7 +1060,7 @@ if (value == UNIT_UNLOAD) /* unload heads? */
uptr->flags = uptr->flags | UNIT_UNLOAD; /* indicate unload */ uptr->flags = uptr->flags | UNIT_UNLOAD; /* indicate unload */
else { /* load heads */ else { /* load heads */
uptr->flags = uptr->flags & ~UNIT_UNLOAD; /* indicate load */ uptr->flags = uptr->flags & ~UNIT_UNLOAD; /* indicate load */
drv = uptr - dpc_dev.units; /* get drive no */ drv = uptr - dpc_unit; /* get drive no */
dpc_sta[drv] = dpc_sta[drv] | STA_ATN | STA_1ST; /* update status */ dpc_sta[drv] = dpc_sta[drv] | STA_ATN | STA_1ST; /* update status */
if (dpc_poll) /* polling enabled? */ if (dpc_poll) /* polling enabled? */
dpcio (&dpc_dib, ioENF, 0); /* set flag */ dpcio (&dpc_dib, ioENF, 0); /* set flag */

View file

@ -678,7 +678,7 @@ t_stat dqc_svc (UNIT *uptr)
int32 da, drv, err; int32 da, drv, err;
err = 0; /* assume no err */ err = 0; /* assume no err */
drv = uptr - dqc_dev.units; /* get drive no */ drv = uptr - dqc_unit; /* get drive no */
if (uptr->flags & UNIT_UNLOAD) { /* drive down? */ if (uptr->flags & UNIT_UNLOAD) { /* drive down? */
dqc.command = CLEAR; /* clr cch cmd */ dqc.command = CLEAR; /* clr cch cmd */
dqcio (&dqc_dib, ioENF, 0); /* set cch flg */ dqcio (&dqc_dib, ioENF, 0); /* set cch flg */

View file

@ -26,7 +26,7 @@
DS 13037D/13175D disc controller/interface DS 13037D/13175D disc controller/interface
02-Mar-12 JDB Rewritten to use the MAC/ICD disc controller library 29-Mar-12 JDB Rewritten to use the MAC/ICD disc controller library
ioIOO now notifies controller service of parameter output ioIOO now notifies controller service of parameter output
14-Feb-12 JDB Corrected SRQ generation and FIFO under/overrun detection 14-Feb-12 JDB Corrected SRQ generation and FIFO under/overrun detection
Corrected Clear command to conform to the hardware Corrected Clear command to conform to the hardware
@ -60,15 +60,14 @@
The 13037D multiple-access (MAC) disc controller supports from one to eight The 13037D multiple-access (MAC) disc controller supports from one to eight
HP 7905 (15 MB), 7906 (20MB), 7920 (50 MB), and 7925 (120 MB) disc drives HP 7905 (15 MB), 7906 (20MB), 7920 (50 MB), and 7925 (120 MB) disc drives
accessed by one to eight CPUs. The controller hardware consists of a 16-bit accessed by one to eight CPUs. The controller hardware consists of a 16-bit
microprogrammed processor constructed from 74S181 bit slices and operating at microprogrammed processor constructed from 74S181 bit slices operating at 5
5 MHz, a device controller providing the interconnections to the drives and MHz, a device controller providing the interconnections to the drives and CPU
CPU interfaces, and error correction circuitry that enables the controller to interfaces, and an error correction controller that enables the correction of
correct up to a 32-bit error burst. 1024 words of 24-bit firmware are stored up to 32-bit error bursts. 1024 words of 24-bit firmware are stored in ROM.
in ROM.
The 13175D disc interface is used to connect the CPU to the 13037 device The 13175D disc interface is used to connect the HP 1000 CPU to the 13037
controller. In a multiple-CPU system, one interface is strapped to reset the device controller. In a multiple-CPU system, one interface is strapped to
controller when the CPU's front panel PRESET button is pressed. reset the controller when the CPU's front panel PRESET button is pressed.
This module simulates a 13037D connected to a single 13175D interface. From This module simulates a 13037D connected to a single 13175D interface. From
one to eight drives may be connected, and drive types may be freely one to eight drives may be connected, and drive types may be freely
@ -134,7 +133,7 @@
#define FIFO_STOP (ds.fifo_count >= 5) /* FIFO stop filling test */ #define FIFO_STOP (ds.fifo_count >= 5) /* FIFO stop filling test */
#define FIFO_FULL (ds.fifo_count == FIFO_SIZE) /* FIFO full test */ #define FIFO_FULL (ds.fifo_count == FIFO_SIZE) /* FIFO full test */
#define PRESET_ENABLE TRUE /* Preset Jumper (W4) enabled */ #define PRESET_ENABLE TRUE /* Preset Jumper (W4) is enabled */
/* Debug flags */ /* Debug flags */
@ -223,7 +222,7 @@ static t_stat activate_unit (UNIT *uptr);
1. The validation routine does not allow the model number or autosizing 1. The validation routine does not allow the model number or autosizing
option to be changed when the unit is attached. Therefore, specifying option to be changed when the unit is attached. Therefore, specifying
UNIT_ATT in the mask field has no deleterious effect. UNIT_ATT in the mask field has no adverse effect.
2. The modifier DEVNO is deprecated in favor of SC but is retained for 2. The modifier DEVNO is deprecated in favor of SC but is retained for
compatibility. compatibility.
@ -237,14 +236,14 @@ static DIB ds_dib = { &ds_io, DS };
#define UNIT_FLAGS (UNIT_FIX | UNIT_ATTABLE | UNIT_ROABLE | UNIT_DISABLE | UNIT_UNLOAD) #define UNIT_FLAGS (UNIT_FIX | UNIT_ATTABLE | UNIT_ROABLE | UNIT_DISABLE | UNIT_UNLOAD)
static UNIT ds_unit [] = { static UNIT ds_unit [] = {
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 0 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 0 */
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 1 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 1 */
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 2 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 2 */
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 3 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 3 */
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 4 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 4 */
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 5 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 5 */
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 6 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 6 */
{ UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* unit 7 */ { UDATA (&ds_service_drive, UNIT_FLAGS | MODEL_7905, D7905_WORDS) }, /* drive unit 7 */
{ UDATA (&ds_service_controller, UNIT_DIS, 0) }, /* controller unit */ { UDATA (&ds_service_controller, UNIT_DIS, 0) }, /* controller unit */
{ UDATA (&ds_service_timer, UNIT_DIS, 0) } /* timer unit */ { UDATA (&ds_service_timer, UNIT_DIS, 0) } /* timer unit */
}; };
@ -252,8 +251,8 @@ static UNIT ds_unit [] = {
static REG ds_reg [] = { static REG ds_reg [] = {
{ FLDATA (CMFOL, ds.cmfol, 0) }, { FLDATA (CMFOL, ds.cmfol, 0) },
{ FLDATA (CMRDY, ds.cmrdy, 0) }, { FLDATA (CMRDY, ds.cmrdy, 0) },
{ BRDATA (FIFO, ds.fifo, 8, 16, FIFO_SIZE), REG_CIRC },
{ DRDATA (FCNT, ds.fifo_count, 5) }, { DRDATA (FCNT, ds.fifo_count, 5) },
{ BRDATA (FIFO, ds.fifo, 8, 16, FIFO_SIZE), REG_CIRC },
{ ORDATA (FREG, ds.fifo_reg, 32), REG_HRO }, { ORDATA (FREG, ds.fifo_reg, 32), REG_HRO },
{ ORDATA (CNTYPE, mac_cntlr.type, 2), REG_HRO }, { ORDATA (CNTYPE, mac_cntlr.type, 2), REG_HRO },
@ -375,13 +374,13 @@ DEVICE ds_dev = {
The control path consists of the usual control, flag buffer, flag, and SRQ The control path consists of the usual control, flag buffer, flag, and SRQ
flip-flops, although flag and SRQ are decoupled to allow the full DCPC flip-flops, although flag and SRQ are decoupled to allow the full DCPC
transfer rate through the FIFO (driving SRQ from the flag limits transfers to transfer rate through the FIFO (driving SRQ from the flag limits transfers to
only every other cycle). SRQ is based on the FIFO level: if data or room in every other cycle). SRQ is based on the FIFO level: if data or room in the
the FIFO is available, SRQ is set to transfer it. The flag is only used to FIFO is available, SRQ is set to initiate a transfer. The flag is only used
signal an interrupt at the end of a command. to signal an interrupt at the end of a command.
One unusual aspect is that SFC and SFS test different things, rather than One unusual aspect is that SFC and SFS test different things, rather than
complementary states of the same thing. SFC tests the busy flip-flop, and complementary states of the same thing. SFC tests the controller busy state,
SFS tests the flag flip-flop. and SFS tests the flag flip-flop.
In addition, the card contains end-of-data-transfer, command-follows, and In addition, the card contains end-of-data-transfer, command-follows, and
command-ready flip-flops. EDT is set when the DCPC EDT signal is asserted command-ready flip-flops. EDT is set when the DCPC EDT signal is asserted
@ -397,16 +396,16 @@ DEVICE ds_dev = {
1. In hardware, SRQ is enabled only when the controller is reading or 1. In hardware, SRQ is enabled only when the controller is reading or
writing the disc (IFIN or IFOUT functions are asserted) and set when the writing the disc (IFIN or IFOUT functions are asserted) and set when the
FIFO is not empty (read) or not full (write). In simulation, SRQ is set FIFO is not empty (read) or not full (write). In simulation, SRQ is set
by the unit service read/write data phase transfers and cleared below by the unit service read/write data phase transfers and cleared in the
when the FIFO is empty (read) or full (write). IOI and IOO signal handlers when the FIFO is empty (read) or full
(write).
2. The DCPC EDT signal cannot set the controller's end-of-data flag directly 2. The DCPC EDT signal cannot set the controller's end-of-data flag directly
because a write EOD must occur only after the FIFO has been drained. because a write EOD must occur only after the FIFO has been drained.
3. Polling the interface or drives must be deferred to the end of the I/O 3. Polling the interface or drives must be deferred to the end of I/O signal
signal service. If they are performed in the IOO/STC handlers handling. If they are performed in the IOO/STC handlers themselves, an
themselves, an associated CLF might clear the flag that was set by the associated CLF might clear the flag that was set by the poll.
poll.
4. Executing a CLC sets the controller's end-of-data flag, which will abort 4. Executing a CLC sets the controller's end-of-data flag, which will abort
a read or write data transfer in progress. Parameter transfers are not a read or write data transfer in progress. Parameter transfers are not
@ -417,7 +416,7 @@ DEVICE ds_dev = {
5. The hardware Interface Function and Flag Buses are not implemented 5. The hardware Interface Function and Flag Buses are not implemented
explicitly. Instead, interface functions and signals are inferred by the explicitly. Instead, interface functions and signals are inferred by the
interface by the current command operation and phase. interface from the current command operation and phase.
*/ */
uint32 ds_io (DIB *dibptr, IOCYCLE signal_set, uint32 stat_data) uint32 ds_io (DIB *dibptr, IOCYCLE signal_set, uint32 stat_data)
@ -512,7 +511,7 @@ while (working_set) {
if (ds.srq == SET && DEBUG_PRI (ds_dev, DEB_CMDS)) if (ds.srq == SET && DEBUG_PRI (ds_dev, DEB_CMDS))
fprintf (sim_deb, ">>DS cmds: [OTx%s] SRQ cleared\n", hold_or_clear); fprintf (sim_deb, ">>DS cmds: [OTx%s] SRQ cleared\n", hold_or_clear);
ds.srq = CLEAR; /* clear SRQ */ ds.srq = CLEAR; /* clear SRQ to stop filling */
} }
} }
break; break;
@ -622,7 +621,7 @@ return stat_data;
overrun error. overrun error.
Write transfers set the initial SRQ to request words from the CPU. As each Write transfers set the initial SRQ to request words from the CPU. As each
arrives, it is unloaded from the FIFO into the sector buffer, and SRQ is word arrives, it is unloaded from the FIFO into the sector buffer, and SRQ is
enabled. If the current sector transfer is complete, the controller is moved enabled. If the current sector transfer is complete, the controller is moved
to the end phase. If the FIFO underflows, the write terminates with a data to the end phase. If the FIFO underflows, the write terminates with a data
overrun error. overrun error.
@ -639,12 +638,12 @@ return stat_data;
Implementation notes: Implementation notes:
1. Every command except Seek, Recalibrate, and End set the flag when the 1. Every command except Seek, Recalibrate, and End sets the flag when the
command completes. A command completes when the controller is no longer command completes. A command completes when the controller is no longer
busy (it becomes idle for Seek, Recalibrate, and End, and becomes waiting busy (it becomes idle for Seek, Recalibrate, and End, or it becomes
for all others). Seek and Recalibrate may generate errors (e.g., heads waiting for all others). Seek and Recalibrate may generate errors (e.g.,
unloaded), in which case the flag must be set. But in these cases, the heads unloaded), in which case the flag must be set. But in these cases,
controller state is waiting, not idle. the controller state is waiting, not idle.
However, it is insufficient simply to check that the controller has moved However, it is insufficient simply to check that the controller has moved
to the wait state, because a seek may complete while the controller is to the wait state, because a seek may complete while the controller is
@ -653,8 +652,9 @@ return stat_data;
completes, another command is issued that attempts to access unit 1, completes, another command is issued that attempts to access unit 1,
which is not ready. The command fails with a Status-2 error, and the which is not ready. The command fails with a Status-2 error, and the
controller moves to the wait state. When the seek completes, the controller moves to the wait state. When the seek completes, the
controller is waiting with error status. We must determine if the seek controller is waiting with error status. We must determine whether the
completed successfully or not, as we must interrupt in the latter case. seek completed successfully or not, as we must interrupt in the latter
case.
Therefore, we determine seek completion by checking if the Attention Therefore, we determine seek completion by checking if the Attention
status was set. Attention sets only if the seek completes successfully. status was set. Attention sets only if the seek completes successfully.
@ -663,31 +663,31 @@ return stat_data;
command terminated before the seek ever started. Also, a seek may command terminated before the seek ever started. Also, a seek may
complete while the controller is busy, waiting, or idle.) complete while the controller is busy, waiting, or idle.)
2. For debug printouts, we want to print the name of the command that has 2. For debug printouts, we want to print the name of the command that has
completed when the controller returns to the idle or wait state. completed when the controller returns to the idle or wait state.
Normally, we would use the controller's "opcode" field to identify the Normally, we would use the controller's "opcode" field to identify the
command that completed. However, while waiting for Seek or Recalibrate command that completed. However, while waiting for Seek or Recalibrate
completion, "opcode" may be set to another command if that command does completion, "opcode" may be set to another command if that command does
not access this drive. For example, it might be set to a Read of not access this drive. For example, it might be set to a Read of another
another unit, or a Request Status for this unit. So we can't rely on unit, or a Request Status for this unit. So we can't rely on "opcode" to
"opcode" to report the correct positioning command completion. report the correct name of the completed positioning command.
However, we cannot rely on "uptr->OP" either, as it can be changed However, we cannot rely on "uptr->OP" either, as that can be changed
during the course of a command. For example, Read Without Verify is during the course of a command. For example, Read Without Verify is
changed to Read after a track crossing. changed to Read after a track crossing.
Instead, we have to determine whether a seek is completing. If it is, Instead, we have to determine whether a seek is completing. If it is,
then we report "uptr->OP"; otherwise, we report "opcode". then we report "uptr->OP"; otherwise, we report "opcode".
3. The initial write SRQ must set only at the transition from the start 3. The initial write SRQ must set only at the transition from the start
phase to the data phase. If a write command begins with an auto-seek, phase to the data phase. If a write command begins with an auto-seek,
the drive service will be entered twice in the start phase (the first the drive service will be entered twice in the start phase (the first
entry performs the seek, and the second begins the write). In hardware, entry performs the seek, and the second begins the write). In hardware,
SRQ does not assert until the write begins. SRQ does not assert until the write begins.
4. The DCPC EDT signal cannot set the controller's end-of-data flag 4. The DCPC EDT signal cannot set the controller's end-of-data flag
directly because a write EOD must only occur after the FIFO has been directly because a write EOD must only occur after the FIFO has been
drained. drained.
*/ */
t_stat ds_service_drive (UNIT *uptr) t_stat ds_service_drive (UNIT *uptr)
@ -695,9 +695,10 @@ t_stat ds_service_drive (UNIT *uptr)
static const char completion_message [] = ">>DS rwsc: Unit %d %s command completed\n"; static const char completion_message [] = ">>DS rwsc: Unit %d %s command completed\n";
t_stat result; t_stat result;
t_bool seek_completion; t_bool seek_completion;
FLIP_FLOP entry_srq = ds.srq; /* SRQ state on entry */ int32 unit;
CNTLR_PHASE entry_phase = (CNTLR_PHASE) uptr->PHASE; /* operation phase on entry */ FLIP_FLOP entry_srq = ds.srq; /* get the SRQ state on entry */
uint32 entry_status = uptr->STAT; /* drive status on entry */ CNTLR_PHASE entry_phase = (CNTLR_PHASE) uptr->PHASE; /* get the operation phase on entry */
uint32 entry_status = uptr->STAT; /* get the drive status on entry */
result = dl_service_drive (&mac_cntlr, uptr); /* service the drive */ result = dl_service_drive (&mac_cntlr, uptr); /* service the drive */
@ -764,7 +765,7 @@ if ((CNTLR_PHASE) uptr->PHASE == data_phase) /* is the drive in the d
break; break;
default: /* entered with an invalid state */ default: /* we were entered with an invalid state */
result = SCPE_IERR; /* return an internal (programming) error */ result = SCPE_IERR; /* return an internal (programming) error */
break; break;
} /* end of data phase operation dispatch */ } /* end of data phase operation dispatch */
@ -774,13 +775,13 @@ if (DEBUG_PRI (ds_dev, DEB_CMDS) && entry_srq != ds.srq)
fprintf (sim_deb, ">>DS cmds: SRQ %s\n", ds.srq == SET ? "set" : "cleared"); fprintf (sim_deb, ">>DS cmds: SRQ %s\n", ds.srq == SET ? "set" : "cleared");
if (uptr->wait) /* is service requested? */ if (uptr->wait) /* was service requested? */
activate_unit (uptr); /* schedule the next event */ activate_unit (uptr); /* schedule the next event */
seek_completion = ~entry_status & uptr->STAT & DL_S2ATN; /* seek is complete when Attention sets */ seek_completion = ~entry_status & uptr->STAT & DL_S2ATN; /* seek is complete when Attention sets */
if (mac_cntlr.state != cntlr_busy) { /* is the command complete? */ if (mac_cntlr.state != cntlr_busy) { /* is the command complete? */
if (mac_cntlr.state == cntlr_wait && !seek_completion) /* is it command and not seek completion? */ if (mac_cntlr.state == cntlr_wait && !seek_completion) /* is it command but not seek completion? */
ds_io (&ds_dib, ioENF, 0); /* set the data flag to interrupt the CPU */ ds_io (&ds_dib, ioENF, 0); /* set the data flag to interrupt the CPU */
poll_interface (); /* poll the interface for the next command */ poll_interface (); /* poll the interface for the next command */
@ -788,22 +789,22 @@ if (mac_cntlr.state != cntlr_busy) { /* is the command co
} }
if (DEBUG_PRI (ds_dev, DEB_RWSC)) if (DEBUG_PRI (ds_dev, DEB_RWSC)) {
unit = uptr - ds_unit; /* get the unit number */
if (result == SCPE_IERR) /* did an internal error occur? */ if (result == SCPE_IERR) /* did an internal error occur? */
fprintf (sim_deb, ">>DS rwsc: Unit %d %s command %s phase service not handled\n", fprintf (sim_deb, ">>DS rwsc: Unit %d %s command %s phase service not handled\n",
uptr - ds_dev.units, unit, dl_opcode_name (MAC, (CNTLR_OPCODE) uptr->OP),
dl_opcode_name (MAC, (CNTLR_OPCODE) uptr->OP),
dl_phase_name ((CNTLR_PHASE) uptr->PHASE)); dl_phase_name ((CNTLR_PHASE) uptr->PHASE));
else if (seek_completion) /* if a seek has completed */ else if (seek_completion) /* if a seek has completed */
fprintf (sim_deb, completion_message, /* report the unit command */ fprintf (sim_deb, completion_message, /* report the unit command */
uptr - ds_dev.units, unit, dl_opcode_name (MAC, (CNTLR_OPCODE) uptr->OP));
dl_opcode_name (MAC, (CNTLR_OPCODE) uptr->OP));
else if (mac_cntlr.state == cntlr_wait) /* if the controller has stopped */ else if (mac_cntlr.state == cntlr_wait) /* if the controller has stopped */
fprintf (sim_deb, completion_message, /* report the controller command */ fprintf (sim_deb, completion_message, /* report the controller command */
uptr - ds_dev.units, unit, dl_opcode_name (MAC, mac_cntlr.opcode));
dl_opcode_name (MAC, mac_cntlr.opcode)); }
return result; /* return the result of the service */ return result; /* return the result of the service */
} }
@ -862,11 +863,11 @@ switch ((CNTLR_PHASE) uptr->PHASE) { /* dispatch the current
case clear: case clear:
case set_file_mask: case set_file_mask:
case wakeup: case wakeup:
ds_io (&ds_dib, ioENF, 0); /* complete the operation with the flag set */ ds_io (&ds_dib, ioENF, 0); /* complete the operation and set the flag */
break; break;
default: /* entered with an invalid state */ default: /* we were entered with an invalid state */
result = SCPE_IERR; /* return an internal (programming) error */ result = SCPE_IERR; /* return an internal (programming) error */
break; break;
} /* end of operation dispatch */ } /* end of operation dispatch */
@ -917,7 +918,7 @@ switch ((CNTLR_PHASE) uptr->PHASE) { /* dispatch the current
break; break;
default: /* entered with an invalid state */ default: /* we were entered with an invalid state */
result = SCPE_IERR; /* return an internal (programming) error */ result = SCPE_IERR; /* return an internal (programming) error */
break; break;
} /* end of operation dispatch */ } /* end of operation dispatch */
@ -976,7 +977,7 @@ return result; /* return the result of
1. During a power-on reset, a pointer to the FIFO simulation register is 1. During a power-on reset, a pointer to the FIFO simulation register is
saved to allow access to the "qptr" field during FIFO loading and saved to allow access to the "qptr" field during FIFO loading and
unloading. This enables the SCP to view the FIFO as a circular queue, so unloading. This enables SCP to view the FIFO as a circular queue, so
that the bottom word of the FIFO is always displayed as FIFO[0], that the bottom word of the FIFO is always displayed as FIFO[0],
regardless of where it is in the actual FIFO array. regardless of where it is in the actual FIFO array.
@ -992,7 +993,7 @@ if (sim_switches & SWMASK ('P')) { /* is this a power-on re
ds.fifo_reg = find_reg ("FIFO", NULL, dptr); /* find the FIFO register entry */ ds.fifo_reg = find_reg ("FIFO", NULL, dptr); /* find the FIFO register entry */
if (ds.fifo_reg == NULL) /* if it cannot be found, */ if (ds.fifo_reg == NULL) /* if it cannot be found, */
return SCPE_IERR; /* report a programming error! */ return SCPE_IERR; /* report a programming error */
else { /* found it */ else { /* found it */
ds.fifo_reg->qptr = 0; /* so reset the FIFO bottom index */ ds.fifo_reg->qptr = 0; /* so reset the FIFO bottom index */
@ -1064,7 +1065,7 @@ return result;
/* Boot a MAC disc drive. /* Boot a MAC disc drive.
The MAC disc bootstrap program is loaded from the HP 12992B Boot Loader ROM The MAC disc bootstrap program is loaded from the HP 12992B Boot Loader ROM
into memory, the I/O instructions are configured from the interface card into memory, the I/O instructions are configured for the interface card's
select code, and the program is run to boot from the specified unit. The select code, and the program is run to boot from the specified unit. The
loader supports booting from cylinder 0 of drive unit 0 only. Before loader supports booting from cylinder 0 of drive unit 0 only. Before
execution, the S register is automatically set as follows: execution, the S register is automatically set as follows:
@ -1166,7 +1167,7 @@ if (unitno != 0) /* boot supported on
return SCPE_NOFNC; /* report "Command not allowed" if attempted */ return SCPE_NOFNC; /* report "Command not allowed" if attempted */
if (ibl_copy (ds_rom, ds_dib.select_code)) /* copy the boot ROM to memory and configure */ if (ibl_copy (ds_rom, ds_dib.select_code)) /* copy the boot ROM to memory and configure */
return SCPE_IERR; /* return an internal error if failed */ return SCPE_IERR; /* return an internal error if the copy failed */
SR = SR & (IBL_OPT | IBL_DS_HEAD) /* set S to a reasonable value */ SR = SR & (IBL_OPT | IBL_DS_HEAD) /* set S to a reasonable value */
| IBL_DS | IBL_MAN | (ds_dib.select_code << IBL_V_DEV); /* before boot execution */ | IBL_DS | IBL_MAN | (ds_dib.select_code << IBL_V_DEV); /* before boot execution */
@ -1193,7 +1194,7 @@ return SCPE_OK;
t_stat ds_load_unload (UNIT *uptr, int32 value, char *cptr, void *desc) t_stat ds_load_unload (UNIT *uptr, int32 value, char *cptr, void *desc)
{ {
const t_bool load = (value != UNIT_UNLOAD); /* true if heads are loading */ const t_bool load = (value != UNIT_UNLOAD); /* true if the heads are loading */
return dl_load_unload (&mac_cntlr, uptr, load); /* load or unload the heads */ return dl_load_unload (&mac_cntlr, uptr, load); /* load or unload the heads */
} }
@ -1265,7 +1266,7 @@ if (uptr) { /* did the command start
time = uptr->wait; /* save the activation time */ time = uptr->wait; /* save the activation time */
if (time) /* was the unit scheduled? */ if (time) /* was the unit scheduled? */
activate_unit (uptr); /* activate it (clears "wait") */ activate_unit (uptr); /* activate it (and clear the "wait" field) */
if (DEBUG_PRI (ds_dev, DEB_RWSC)) { if (DEBUG_PRI (ds_dev, DEB_RWSC)) {
unit = uptr - ds_unit; /* get the unit number */ unit = uptr - ds_unit; /* get the unit number */
@ -1337,8 +1338,8 @@ return;
void poll_drives (void) void poll_drives (void)
{ {
if (mac_cntlr.state == cntlr_idle && ds.control == SET) /* controller is idle and OK to interrupt? */ if (mac_cntlr.state == cntlr_idle && ds.control == SET) /* is the controller idle and interrupts are allowed? */
if (dl_poll_drives (&mac_cntlr, ds_unit, DL_MAXDRIVE)) /* poll drives; was Attention seen? */ if (dl_poll_drives (&mac_cntlr, ds_unit, DL_MAXDRIVE)) /* poll the drives; was Attention seen? */
ds_io (&ds_dib, ioENF, 0); /* request an interrupt */ ds_io (&ds_dib, ioENF, 0); /* request an interrupt */
return; return;
} }
@ -1455,7 +1456,7 @@ return;
static t_stat activate_unit (UNIT *uptr) static t_stat activate_unit (UNIT *uptr)
{ {
uint32 unit; int32 unit;
t_stat result; t_stat result;
if (DEBUG_PRI (ds_dev, DEB_SERV)) { if (DEBUG_PRI (ds_dev, DEB_SERV)) {

View file

@ -1658,7 +1658,7 @@ return SCPE_OK;
t_stat mpx_line_svc (UNIT *uptr) t_stat mpx_line_svc (UNIT *uptr)
{ {
const uint32 port = uptr - mpx_unit; /* port number */ const int32 port = uptr - mpx_unit; /* port number */
const uint16 rt = mpx_rcvtype [port]; /* receive type for port */ const uint16 rt = mpx_rcvtype [port]; /* receive type for port */
const uint32 data_bits = 5 + GET_BPC (mpx_config [port]); /* number of data bits */ const uint32 data_bits = 5 + GET_BPC (mpx_config [port]); /* number of data bits */
const uint32 data_mask = (1 << data_bits) - 1; /* mask for data bits */ const uint32 data_mask = (1 << data_bits) - 1; /* mask for data bits */

View file

@ -690,7 +690,7 @@ int32 unum;
t_mtrlnt tbc; t_mtrlnt tbc;
t_stat st, r = SCPE_OK; t_stat st, r = SCPE_OK;
unum = uptr - msc_dev.units; /* get unit number */ unum = uptr - msc_unit; /* get unit number */
if ((uptr->FNC != FNC_RWS) && (uptr->flags & UNIT_OFFLINE)) { /* offline? */ if ((uptr->FNC != FNC_RWS) && (uptr->flags & UNIT_OFFLINE)) { /* offline? */
msc_sta = (msc_sta | STA_REJ) & ~STA_BUSY; /* reject */ msc_sta = (msc_sta | STA_REJ) & ~STA_BUSY; /* reject */
@ -905,7 +905,7 @@ else
t_stat ms_map_err (UNIT *uptr, t_stat st) t_stat ms_map_err (UNIT *uptr, t_stat st)
{ {
int32 unum = uptr - msc_dev.units; /* get unit number */ int32 unum = uptr - msc_unit; /* get unit number */
if (DEBUG_PRI (msc_dev, DEB_RWS)) if (DEBUG_PRI (msc_dev, DEB_RWS))
fprintf (sim_deb, fprintf (sim_deb,

View file

@ -25,6 +25,7 @@
MT 12559A 3030 nine track magnetic tape MT 12559A 3030 nine track magnetic tape
25-Mar-12 JDB Removed redundant MTAB_VUN from "format" MTAB entry
10-Feb-12 JDB Deprecated DEVNO in favor of SC 10-Feb-12 JDB Deprecated DEVNO in favor of SC
28-Mar-11 JDB Tidied up signal handling 28-Mar-11 JDB Tidied up signal handling
29-Oct-10 JDB Fixed command scanning error in mtcio ioIOO handler 29-Oct-10 JDB Fixed command scanning error in mtcio ioIOO handler
@ -220,7 +221,7 @@ REG mtc_reg[] = {
MTAB mtc_mod[] = { MTAB mtc_mod[] = {
{ MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL }, { MTUF_WLK, 0, "write enabled", "WRITEENABLED", NULL },
{ MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL }, { MTUF_WLK, MTUF_WLK, "write locked", "LOCKED", NULL },
{ MTAB_XTD | MTAB_VDV | MTAB_VUN, 0, "FORMAT", "FORMAT", { MTAB_XTD | MTAB_VDV, 0, "FORMAT", "FORMAT",
&sim_tape_set_fmt, &sim_tape_show_fmt, NULL }, &sim_tape_set_fmt, &sim_tape_show_fmt, NULL },
{ MTAB_XTD | MTAB_VDV, 1, "SC", "SC", &hp_setsc, &hp_showsc, &mtd_dev }, { MTAB_XTD | MTAB_VDV, 1, "SC", "SC", &hp_setsc, &hp_showsc, &mtd_dev },
{ MTAB_XTD | MTAB_VDV | MTAB_NMO, 1, "DEVNO", "DEVNO", &hp_setdev, &hp_showdev, &mtd_dev }, { MTAB_XTD | MTAB_VDV | MTAB_NMO, 1, "DEVNO", "DEVNO", &hp_setdev, &hp_showdev, &mtd_dev },

View file

@ -985,7 +985,7 @@ return SCPE_OK;
t_stat tty_set_opt (UNIT *uptr, int32 val, char *cptr, void *desc) t_stat tty_set_opt (UNIT *uptr, int32 val, char *cptr, void *desc)
{ {
int32 u = uptr - tty_dev.units; int32 u = uptr - tty_unit;
if (u > TTO) return SCPE_NOFNC; if (u > TTO) return SCPE_NOFNC;
if ((u == TTI) && (val == TT_MODE_7P)) if ((u == TTI) && (val == TT_MODE_7P))
@ -997,7 +997,7 @@ return SCPE_OK;
t_stat tty_set_alf (UNIT *uptr, int32 val, char *cptr, void *desc) t_stat tty_set_alf (UNIT *uptr, int32 val, char *cptr, void *desc)
{ {
int32 u = uptr - tty_dev.units; int32 u = uptr - tty_unit;
if (u != TTI) return SCPE_NOFNC; if (u != TTI) return SCPE_NOFNC;
return SCPE_OK; return SCPE_OK;

File diff suppressed because it is too large Load diff

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.
19-Mar-12 JDB First release 30-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
@ -66,7 +66,7 @@
#define CYL u3 /* current drive cylinder */ #define CYL u3 /* current drive cylinder */
#define STAT u4 /* current drive status (Status 2) */ #define STAT u4 /* current drive status (Status 2) */
#define OP u5 /* current drive operation in process */ #define OP u5 /* current drive operation in process */
#define PHASE u6 /* current command phase */ #define PHASE u6 /* current drive operation phase */
/* Unit flags and accessors */ /* Unit flags and accessors */
@ -78,7 +78,7 @@
#define UNIT_V_AUTO (UNIT_V_UF + 5) /* bits 5-5: autosize */ #define UNIT_V_AUTO (UNIT_V_UF + 5) /* bits 5-5: autosize */
#define DL_V_UF (UNIT_V_UF + 6) /* first free unit flag bit */ #define DL_V_UF (UNIT_V_UF + 6) /* first free unit flag bit */
#define UNIT_M_MODEL 3 /* model ID mask */ #define UNIT_M_MODEL 03 /* model ID mask */
#define UNIT_MODEL (UNIT_M_MODEL << UNIT_V_MODEL) #define UNIT_MODEL (UNIT_M_MODEL << UNIT_V_MODEL)
#define UNIT_WLK (1 << UNIT_V_WLK) #define UNIT_WLK (1 << UNIT_V_WLK)
@ -96,9 +96,9 @@
#define DL_V_S1SPD 13 /* bits 15-13: S/P/D flags */ #define DL_V_S1SPD 13 /* bits 15-13: S/P/D flags */
#define DL_V_S1STAT 8 /* bits 12- 8: controller status */ #define DL_V_S1STAT 8 /* bits 12- 8: controller status */
#define DL_V_S1UNIT 0 /* bits 7- 0: last unit number */ #define DL_V_S1UNIT 0 /* bits 3- 0: last unit number */
#define DL_M_S1UNIT 15 /* unit mask */ #define DL_M_S1UNIT 017 /* unit number mask */
#define GET_S1UNIT(v) (((v) >> DL_V_S1UNIT) & DL_M_S1UNIT) #define GET_S1UNIT(v) (((v) >> DL_V_S1UNIT) & DL_M_S1UNIT)
@ -107,7 +107,7 @@
#define SET_S1UNIT(v) ((v) << DL_V_S1UNIT) #define SET_S1UNIT(v) ((v) << DL_V_S1UNIT)
/* Status-2 accessors (+ = kept in unit status, - = determined dynamically */ /* Status-2 accessors (+ = kept in unit status, - = determined dynamically) */
#define DL_V_S2ERR 15 /* bits 15-15: (-) any error flag */ #define DL_V_S2ERR 15 /* bits 15-15: (-) any error flag */
#define DL_V_S2DTYP 9 /* bits 12- 9: (-) drive type */ #define DL_V_S2DTYP 9 /* bits 12- 9: (-) drive type */
@ -116,7 +116,7 @@
#define DL_V_S2FMT 5 /* bits 5- 5: (-) format enabled flag */ #define DL_V_S2FMT 5 /* bits 5- 5: (-) format enabled flag */
#define DL_V_S2FAULT 4 /* bits 4- 4: (+) drive fault flag */ #define DL_V_S2FAULT 4 /* bits 4- 4: (+) drive fault flag */
#define DL_V_S2FS 3 /* bits 3- 3: (+) first status flag */ #define DL_V_S2FS 3 /* bits 3- 3: (+) first status flag */
#define DL_V_S2SC 2 /* bits 2- 2: (+) seek error flag */ #define DL_V_S2SC 2 /* bits 2- 2: (+) seek check flag */
#define DL_V_S2NR 1 /* bits 1- 1: (-) not ready flag */ #define DL_V_S2NR 1 /* bits 1- 1: (-) not ready flag */
#define DL_V_S2BUSY 0 /* bits 0- 1: (-) drive busy flag */ #define DL_V_S2BUSY 0 /* bits 0- 1: (-) drive busy flag */
@ -195,8 +195,9 @@
typedef enum { typedef enum {
MAC = 0, MAC = 0,
ICD, last_type = ICD, /* last valid type */ ICD,
TYPE_COUNT /* count of controller types */ last_type = ICD, /* last valid type */
type_count /* count of controller types */
} CNTLR_TYPE; } CNTLR_TYPE;
@ -224,7 +225,8 @@ typedef enum {
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 valid opcode */ wakeup = 026,
last_opcode = wakeup /* last valid opcode */
} CNTLR_OPCODE; } CNTLR_OPCODE;
#define DL_OPCODE_MASK 037 #define DL_OPCODE_MASK 037
@ -235,7 +237,8 @@ typedef enum {
typedef enum { typedef enum {
start_phase = 0, start_phase = 0,
data_phase, data_phase,
end_phase, last_phase = end_phase /* last valid phase */ end_phase,
last_phase = end_phase /* last valid phase */
} CNTLR_PHASE; } CNTLR_PHASE;
@ -324,22 +327,22 @@ typedef struct {
uint32 verify_count; /* count of sectors to verify */ uint32 verify_count; /* count of sectors to verify */
uint32 poll_unit; /* last unit polled for attention */ uint32 poll_unit; /* last unit polled for attention */
uint16 *buffer; /* data buffer pointer */ uint16 *buffer; /* data buffer pointer */
uint32 index; /* data buffer index */ uint32 index; /* data buffer current index */
uint32 length; /* data buffer length */ uint32 length; /* data buffer valid length */
UNIT *aux; /* auxiliary units (controller and timer) */ UNIT *aux; /* MAC auxiliary units (controller and timer) */
int32 seek_time; /* seek delay time (per cylinder) */ int32 seek_time; /* per-cylinder seek delay time */
int32 sector_time; /* intersector delay time */ int32 sector_time; /* intersector delay time */
int32 cmd_time; /* command start delay time */ int32 cmd_time; /* command response time */
int32 data_time; /* data transfer delay time */ int32 data_time; /* data transfer response time */
int32 wait_time; /* command wait timeout */ int32 wait_time; /* command wait time */
} CNTLR_VARS; } CNTLR_VARS;
typedef CNTLR_VARS *CVPTR; /* pointer to controller state variables */ typedef CNTLR_VARS *CVPTR; /* pointer to controller state variables */
/* Controller state variables initialiation. /* Controller state variables initialization.
Parameters are: The parameters are:
ctype - type of the controller (CNTLR_TYPE) ctype - type of the controller (CNTLR_TYPE)
bufptr - pointer to the data buffer bufptr - pointer to the data buffer

Binary file not shown.