IDENT 1DA,DASX
TITLE 1DA - DISK ARRAY SUBSYSTEM (DAS) DRIVER.
CIPPU ,S
MEMSEL 8
LIST F
BASE M
SST DLYA,.DLY,.EST
*COMMENT 1DA - DISK ARRAY SUBSYSTEM (DAS) DRIVER.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
SPACE 4,10
*** 1DA - DAS DRIVER.
*
* C. D. ROWE. 91/03/06.
* P. C. SMITH. 94/03/21.
* R. E. DUNBAR. 94/07/15.
* P. C. SMITH. 95/12/10.
SPACE 4,40
*** *1DA* IS THE DRIVER FOR THE 583X/47444 DISK ARRAY SUBSYSTEM.
*
* THE FOLLOWING DISK DRIVES ARE SUPPORTED,
* 5832-1, 5832-2
* 5833-1, 5833-1P
* 5833-2, 5833-2P
* 5833-3P, 5833-4
* 5838-1, 5838-1P
* 5838-2, 5838-2P
* 5838-3P, 5838-4
* 47444-1, 47444-1P
* 47444-2, 47444-2P
* 47444-3P, 47444-4
*
* THE DAS DISK DRIVES ARE SUPPORTED AS BUFFERED I/O
* DEVICES. REQUESTS TO BE PROCESSED BY *1DA* ARE POSTED
* BY *CPUMTR* IN THE BUFFERED I/O TABLES IN *CMR*.
* *1DA* INTERLOCKS UNITS, DELINKS BUFFERS, AND COMPLETES
* SAID REQUESTS BY ISSUING APPROPRIATE *BIOM* FUNCTIONS.
*
* EACH COPY OF *1DA* WILL SUPPORT ONE CONCURRENT CHANNEL
* CONFIGURED WITH THE INTELLIGENT PERIPHERAL INTERFACE (IPI)
* AND IS THE SOLE DRIVER FOR ALL DAS DISKS ON THAT CHANNEL.
* *1DA* MUST BE LOADED INTO A CONCURRENT PP, IN THE SAME
* BANK AS THE CHANNEL IT IS TO SERVICE. THIS DRIVER SUPPORTS
* THE 10 AND THE 25 MB IPI CHANNELS. WHEN THE DRIVER IS
* LOADED IT STATUSES THE CHANNEL TO DETERMINE WHICH ONE IS
* PRESENT. IT WILL READ THE CHANNEL SPEED SELECTED IN THE
* CONTROLLER USING INTERLOCK MODE. IF THE SPEED IS
* INCORRECT, IT WILL SET THE SPEED TO BE THE SAME AS THE
* CHANNEL.
*
* EACH COPY OF THE DRIVER CAN SERVICE UP TO 24 LOGICAL DAS
* UNITS IN ANY CONFIGURATION MIX. UP TO 4 CONTROLLERS MAY
* BE CONFIGURED; A CONTROLLER MAY BE COUPLED TO EITHER PORT
* OF THE IPI ADAPTER.
*
* *1DA* SCANS THROUGH THE *PUT* ENTRIES IN A CIRCULAR FASHION
* LOOKING FOR REQUESTS TO PROCESS. ONCE A REQUEST IS FOUND,
* *1DA* USES THE PHYSICAL DISK AND UEM ADDRESSES IN THE
* CORRESPONDING *CBT* ENTRY TO DETERMINE THE ACTION TO BE
* TAKEN. *1DA* WILL ATTEMPT TO PROCESS CONSECUTIVE REQUESTS
* ON THE CURRENT UNIT UNTIL THE END OF THE UNIT I/O QUEUE,
* OR A CONSECUTIVE REQUEST WAS NOT FOUND. AT THIS POINT
* *1DA* WILL RESUME ITS SEARCH THROUGH THE *PUT* WITH THE
* *PUT* ENTRY IMMEDIATELY FOLLOWING THE ONE JUST PROCESSED.
SPACE 4,40
*** ORGANIZATION OF THE DAS UNITS (MEASUREMENTS IN DECIMAL).
*
* EQUIPMENT TYPE EA EB
* PRODUCT NUMBER 5832-1 5832-2
*
* UNITS/LOGICAL DEVICE 1-8 1-4
* PARTITIONS 1 1
*
* PHYSICAL ORGANIZATION
*
* WORDS/PHYSICAL SECTOR 2048 2048
* PHYSICAL SECTORS/TRACK 3 6
* SPARE SECTORS/CYLINDER 0 0
* PHYSICAL TRACKS/CYLINDER 4 4
* CYLINDERS/DRIVE 844 844
*
* LOGICAL ORGANIZATION
*
* WORDS/LOGICAL SECTOR 64 64
* LOGICAL SECTORS/LOGICAL TRACK 160 320
* LOGICAL TRACKS/DRIVE 2023 2023
*
*
* EQUIPMENT TYPE EC/ED EE/EF
* PRODUCT NUMBER 5833-1/1P 5833-2/2P
*
* UNITS/LOGICAL DEVICE 1-2 1
* PARTITIONS 1 1
*
* PHYSICAL ORGANIZATION
*
* WORDS/PHYSICAL SECTOR 2048 2048
* PHYSICAL SECTORS/TRACK 6 11
* SPARE SECTORS/CYLINDER 2 2
* PHYSICAL TRACKS/CYLINDER 7 7
* CYLINDERS/DRIVE 1629 1629
*
* LOGICAL ORGANIZATION
*
* WORDS/LOGICAL SECTOR 64 64
* LOGICAL SECTORS/LOGICAL TRACK 992 1920
* LOGICAL TRACKS/DRIVE 2046 2034
*
*
* EQUIPMENT TYPE EM EN
* PRODUCT NUMBER 5833-3P 5833-4
*
* UNITS/LOGICAL DEVICE 1 1
* PARTITIONS 2 2
*
* PHYSICAL ORGANIZATION
*
* WORDS/PHYSICAL SECTOR 2048 2048
* PHYSICAL SECTORS/TRACK 17 22
* SPARE SECTORS/CYLINDER 2 2
* PHYSICAL TRACKS/CYLINDER 7 7
* CYLINDERS/DRIVE 1629 1629
* CYLINDERS/PARTITION 814 814
*
* LOGICAL ORGANIZATION
*
* WORDS/LOGICAL SECTOR 64 64
* LOGICAL SECTORS/LOGICAL TRACK 1504 1952
* LOGICAL TRACKS/LOGICAL DEVICE 2023 2025
*
*
* EQUIPMENT TYPE EG/EH EI/EJ
* PRODUCT NUMBER 5838-1/1P 5838-2/2P
*
* UNITS/LOGICAL DEVICE 1 1
* PARTITIONS 1 2
*
* PHYSICAL ORGANIZATION
*
* WORDS/PHYSICAL SECTOR 2048 2048
* PHYSICAL SECTORS/TRACK 5 9
* SPARE SECTORS/CYLINDER 4 4
* PHYSICAL TRACKS/CYLINDER 9 9
* CYLINDERS/DRIVE 2620 2620
* CYLINDERS/PARTITION 2620 1310
*
* LOGICAL ORGANIZATION
*
* WORDS/LOGICAL SECTOR 64 64
* LOGICAL SECTORS/LOGICAL TRACK 1696 1600
* LOGICAL TRACKS/LOGICAL DEVICE 2025 2015
*
*
* EQUIPMENT TYPE EK EL
* PRODUCT NUMBER 5838-3P 5838-4
*
* UNITS/LOGICAL DEVICE 1 1
* PARTITIONS 3 4
*
* PHYSICAL ORGANIZATION
*
* WORDS/PHYSICAL SECTOR 2048 2048
* PHYSICAL SECTORS/TRACK 14 18
* SPARE SECTORS/CYLINDER 4 4
* PHYSICAL TRACKS/CYLINDER 9 9
* CYLINDERS/DRIVE 2620 2620
* CYLINDERS/PARTITION 873 655
*
* LOGICAL ORGANIZATION
*
* WORDS/LOGICAL SECTOR 64 64
* LOGICAL SECTORS/LOGICAL TRACK 1696 1632
* LOGICAL TRACKS/LOGICAL DEVICE 2007 2026
*
*
* EQUIPMENT TYPE EO/EP ES/EU
* PRODUCT NUMBER 47444-1/1P 47444-2/2P
*
* UNITS/LOGICAL DEVICE 1 1
* PARTITIONS 1 2
*
* PHYSICAL ORGANIZATION
*
* WORDS/PHYSICAL SECTOR 512 1024
* PHYSICAL SECTORS/TRACK 13 13
* SPARE SECTORS/CYLINDER 7 7
* PHYSICAL TRACKS/CYLINDER 15 15
* CYLINDERS/DRIVE 2290 2290
* CYLINDERS/PARTITION 2290 1145
*
* LOGICAL ORGANIZATION
*
* WORDS/LOGICAL SECTOR 64 64
* LOGICAL SECTORS/LOGICAL TRACK 3240B 3240B
* LOGICAL TRACKS/LOGICAL DEVICE 3755B 3754B
*
*
* EQUIPMENT TYPE EV EW
* PRODUCT NUMBER 47444-3P 47444-4
*
* UNITS/LOGICAL DEVICE 1 1
* PARTITIONS 3 4
*
* PHYSICAL ORGANIZATION
*
* WORDS/PHYSICAL SECTOR 1024 1024
* PHYSICAL SECTORS/TRACK 19 25
* SPARE SECTORS/CYLINDER 7 7
* PHYSICAL TRACKS/CYLINDER 15 15
* CYLINDERS/DRIVE 2290 2290
* CYLINDERS/PARTITION 763 572
*
* LOGICAL ORGANIZATION
*
* WORDS/LOGICAL SECTOR 64 64
* LOGICAL SECTORS/LOGICAL TRACK 3200B 3200B
* LOGICAL TRACKS/LOGICAL DEVICE 3764B 3744B
SPACE 4,20
*** TRANSFER RATES
*
* 1. MAXIMUM TRANSFER RATE OF PP IF 10 MB IPI CHANNEL, 16 KB
* SECTOR SIZE, AND CPU RESPONSE TIME IS IMMEDIATE.
*
* SECTORS STREAMED / PP OVERHEAD + SECTORS * (1.6384 + .150)
*
* USE SECTORS = 96 (8 SSD CYLINDERS)
*
* RATE = 96 * 16384 1572864
* ----------------- = ------- = 9.06 MB/S
* 2 + 96 * (1.7884) 173.686
*
* = 11310 KCHAR/S
*
* 2. MAXIMUM RATE FOR SSD IF 10 MB IPI CHANNEL, 16 KB SECTOR
* SIZE, AND CPU RESPONSE TIME IS IMMEDIATE.
*
* BYTES FOR 8 CYLINDERS
* RATE = -------------------------------------------------------
* PP+CTR OVERHEAD + 8 CYL SWITCHES+SEC. * (1.6384 + 150)
*
*
* 1572864
* = -------------------------- = 8.83 MB/S
* 2 + 2 + 2.4 + 96 * (1.7884)
*
* = 11040 KCHAR/S
*
* 3. MAXIMUM RATE FOR 5833-1 IF 10 MB IPI CHANNEL, 16 KB SECTOR
* SIZE, AND CPU RESPONSE TIME IS IMMEDIATE.
*
* CYLINDER SWITCH = 5.5 MILLISECONDS
*
*
* BYTES FOR 8 CYLINDERS
* RATE = ------------------------------------------------
* 8 CYL SWITCHES + ((HEADS * CYL) + 1) * 16.66666
*
*
* 40 * 16384 * 8 5242880
* RATE = ------------------ = ------------ = 5.27 MB/S
* 44 + 57 * 16.6666 994
*
* = 6593 KCHAR/S
*
* 4. MAXIMUM RATE FOR 5833-2 IF 10 MB IPI CHANNEL, 16 KB SECTOR
* SIZE, AND CPU RESPONSE TIME IS IMMEDIATE.
*
* CYLINDER SWITCH = 11 MILLISECONDS
*
* BYTES FOR 8 CYLINDERS
* RATE = ------------------------------------------------
* 8 CYL SWITCHES + ((HEADS * CYL) + 1) * 16.66666
*
*
* 75 * 16384 * 8 9830400
* RATE = ------------------ = ------------ = 9.45 MB/S
* 88 + 57 * 16.6666 1040
*
*
* = 11810 KCHAR/S
*
* NOTE - SINCE THIS IS GREATER THAN THE RATE THE PP CAN MAINTAIN,
* YOU MUST USE THE RATE THE PP CAN MAINTAIN (11310 KCHAR/S).
*
* 5. MAXIMUM TRANSFER RATE OF PP IF 25 MB IPI CHANNEL, 16 KB
* SECTOR SIZE, AND CPU RESPONSE TIME IS IMMEDIATE.
*
* SECTORS STREAMED / PP OVERHEAD + SECTORS * (.65536 + 150)
*
* USE SECTORS = 96 (8 SSD CYLINDERS)
*
* RATE = 96 * 16384 1572864
* ----------------- = ------- = 20.34 MB/S
* 2 + 96 * (.80536) 77.316
*
* = 25430 KCHAR/S
SPACE 4,35
*** MEASURED TRANSFER RATES.
* MAINFRAME = 860/870
* MST(N=400000,P=6) TO GET TIMING VALUES.
*
* NOTE - THE NUMBER OF DRIVES CONFIGURED PER DRIVER AND THE
* INTERRUPT SIZE (PHYSICAL SECTORS) FOR WRITES COULD
* AFFECT PERFORMANCE.
*
* NOTE- BUFFER THRESHOLD VALUES USED WERE 4,3,3. CHANGING
* THE BUFFER VALUES TO 1,3,3 FOR 583X DRIVES INCREASED
* RANDOM READS APPROXIMATELY 30 PERCENT AND DID NOT
* HURT OTHER VALUES.
*
* NOTE- A FIELD LENGTH OF 60000 WAS USED WHEN RUNNING MST.
* USE OF A SMALLER FIELD LENGTH COULD CAUSE PERFORMANCE
* NUMBERS TO DECREASE.
*
* SEQ. SEQ. RANDOM RANDOM
* UNITS INT. WRITE READ READ WRITE
* TYPE DEFINED SIZE KC/S KC/S IO/S IO/S CHANNEL
* -------------------------------------------------------------
* 5832-1 1 NA 9448 9306 78.2 59.9 IPI-10
* 5832-2 1 NA 10009 9980 73.6 53.9 IPI-10
* 5833-1 1 2 6669 6765 31.8 25.4 IPI-10
* 5833-2 1 2 9996 9379 36.3 27.0 IPI-10
* 5833-3 1 2 9945 9956 36.0 26.4 IPI-10
* 5833-4 1 2 9983 10078 37.2 16.4 IPI-10
* 5838-1 1 2 8180 8172 44.4 27.9 IPI-10
* 47444-1 1 8 4097 4232 29.1 16.4 IPI-10
* 47444-2 1 4 8191 9525 33.5 17.8 IPI-10
* 47444-3 1 4 8792 9594 32.1 16.6 IPI-10
* 47444-4 1 4 9161 9713 32.8 17.0 IPI-10
* 5832-1 1 NA 9886 10032 88.2 66.9 IPI-25
* 5832-2 1 NA 12894 8157 119.1 79.8 IPI-25
* 5833-1 1 2 6649 6774 32.9 25.9 IPI-25
* 5833-2 1 2 11975 8078 40.4 27.5 IPI-25
* 5833-3 1 2
* 5833-4 1 2
* 5838-1 1 2 8067 8205 44.3 26.9 IPI-25
* 5838-2 1 2
* 5838-3 1 2
* 5838-4 1 2
* 47444-1 1 8 IPI-25
* 47444-2 1 4 IPI-25
* 47444-3 1 4 IPI-25
* 47444-4 1 4 IPI-25
* 9853 1 8 3087 3130 21.7 17.2 IPI-10
* 887-4K 1 11210 10958 35.3 18.9 ISI
SPACE 4,10
*** CALL.
*
*T 18/ DRN, 6/ CP, 6/ CO, 18/, 7/ 1, 5/ CH
*
* DRN DRIVER NAME.
* CP CONTROL POINT NUMBER (MUST BE SYSTEM CP).
* CO CHANNEL TABLE ORDINAL (SET BY *CPUMTR*).
* CH CHANNEL NUMBER BEING SERVICED BY THIS PP.
SPACE 4,10
*** DAYFILE MESSAGES.
*
* DRN - UNAUTHORIZED CALL.
*
* THE DRIVER (NAMED *DRN*) WILL ISSUE THIS MESSAGE AND ABORT
* IF NOT ASSIGNED TO THE SYSTEM CONTROL POINT.
SPACE 4,20
*** ERRLOG MESSAGES.
*
* EQORD,TKNNNN, MEDIA DEFECT ENCOUNTERED.
*
* A MEDIA DEFECT HAS BEEN ENCOUNTERED ON EQUIPMENT WITH EST
* ORDINAL ORD, LOGICAL TRACK NNNN. A REQUEST HAS BEEN ISSUED
* TO AUTOMATICALLY FLAW THIS TRACK WHEN IT IS DROPPED.
*
*
* CHCC MH427-DXX,CMN.
*
* CONTROLLER N ON CHANNEL CC IS RUNNING MICROCODE REVISION
* LEVEL XX.
*
*
* YYZZZ, UNN, CMA CONTROLLER DISABLED, CCHBB.
*
* CONTROLLER A ON CONCURRENT CHANNEL BB HAS BEEN DISABLED.
* THIS DRIVER WILL NO LONGER TRY TO USE THIS CONTROLLER.
* THIS ACTION WAS TAKEN AS A RESULT OF ERROR PROCESSING FOR
* DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND EST
* ORDINAL ZZZ. ACCESS TO THIS CONTROLLER MAY BE REENABLED
* BY ENTERING AN *UP,CCH* COMMAND FOR THE AFFECTED CHANNEL.
*
*
* YYZZZ, UNN, CMA CONTROLLER ENABLED, CCHBB.
*
* CONTROLLER A ON CONCURRENT CHANNEL BB HAS BEEN REENABLED.
* THIS DRIVER WILL NOW ATTEMPT TO USE THIS CONTROLLER AGAIN.
* THIS ACTION WAS TAKEN IN RESPONSE TO AN *UP,CCH* COMMAND
* FOR THIS CHANNEL.
*
*
* YYZZZ, UNN, CMA RESET ON CCHBB.
*
* A SLAVE RESET HAS BEEN INITIATED ON CONTROLLER A ON
* CONCURRENT CHANNEL BB, AS PART OF ERROR PROCESSING FOR
* DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND EST
* ORDINAL ZZZ.
*
*
* YYZZZ, UNN, CMA RESET COMPLETE.
*
* THE SLAVE RESET OF CONTROLLER A, WHICH WAS INITIATED AS
* PART OF ERROR PROCESSING FOR DRIVE NN OF THE LOGICAL UNIT
* WITH DRIVE TYPE YY AND EST ORDINAL ZZZ, IS COMPLETE.
*
*
* YYZZZ, UNN, CMA RESET FAILURE.
*
* THE SLAVE RESET OF CONTROLLER A, WHICH WAS INITIATED AS
* PART OF ERROR PROCESSING FOR DRIVE NN OF THE LOGICAL UNIT
* WITH DRIVE TYPE YY AND EST ORDINAL ZZZ, HAS FAILED.
*
*
* YYZZZ, UNN, FORMAT COMPLETE.
*
* THE FORMAT OF DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE
* YY AND EST ORDINAL ZZZ IS COMPLETE.
*
*
* YYZZZ, UNN, FORMAT INITIATED.
*
* A FORMAT HAS BEEN INITIATED ON DRIVE NN OF THE LOGICAL UNIT
* WITH DRIVE TYPE YY AND EST ORDINAL ZZZ.
*
*
* YYZZZ, UNN,PS=XXXXXX.
*
* THE DAS UNIT, NN, WITH DEVICE TYPE YY AND ORDINAL ZZZ HAS
* THE PACK SERIAL NUMBER XXXXXX.
*
*
* YYZZZ, UNN, PARITY PROTECTION DISABLED.
*
* DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND ORDINAL
* ZZZ HAS BEEN SET OFF LINE.
*
*
* YYZZZ, UNN, PARITY PROTECTION RESTORED.
*
* DRIVE NN OF THE LOGICAL UNIT WITH DRIVE TYPE YY AND ORDINAL
* ZZZ HAS BEEN RESTORED.
*
*
* YYZZZ, UNN, PARITY RESTORE INITIATED.
*
* A PARITY RESTORE HAS BEEN INITIATED ON DRIVE NN OF THE
* LOGICAL UNIT WITH DRIVE TYPE YY AND ORDINAL ZZZ.
SPACE 4,10
*** OPERATOR MESSAGES.
*
* EQORD, SPIN UP PENDING.
*
* EQORD UNN FORMATTING.
*
* CMX BEING RESET ON CCHNN.
*
* MR ERROR.
SPACE 4,15
*** DISK ERROR PROCESSING.
*
* THE DRIVER MAINTAINS A COUNTER OF THE NUMBER OF RETRIES
* NECESSARY TO SUCCESSFULLY PROCESS A REQUEST. IF THE
* ERROR COUNT IS NON-ZERO WHEN A REQUEST IS COMPLETED, THE
* DRIVER WILL LOG A BML MESSAGE AND INCREMENT THE RECOVERED
* ERROR COUNT IN THE MST.
*
* IF THE ERROR COUNT REACHES *MERC* BEFORE THE REQUEST IS
* SUCCESSFULLY COMPLETED, THE DRIVER WILL SET AN ERROR CODE
* IN THE *CBT*, LOG A FATAL ERROR IN THE BML, AND INCREMENT
* THE UNRECOVERED ERROR COUNT IN THE MST.
SPACE 4,10
*** CONFIGURATION NOTES.
*
* IN A DUAL ACCESS ENVIRONMENT, THE SAME EQUIPMENT NUMBER MUST
* BE SET FOR THE PORT IN USE ON EACH CONTROLLER.
SPACE 4,20
*** SPECIAL PROGRAMMING NOTES.
*
* THE FOLLOWING IS A LIST OF SPECIAL NOTES THAT SHOULD BE
* READ AND UNDERSTOOD BEFORE ANY MODIFICATIONS ARE MADE TO
* THIS PROGRAM.
*
*
* 1) WHERE POSSIBLE, *CMR* POINTERS HAVE BEEN PLUGGED BY THE
* PRESET ROUTINE TO IMPROVE THE EXECUTION SPEED OF THE
* PROGRAM AND TO MINIMIZE THE AMOUNT OF CODE.
*
* 2) SUBROUTINE *IMR* ISSUES A *BIOM* REQUEST TO *CPUMTR*
* WITHOUT WAITING FOR THE REQUEST TO COMPLETE. THEREFORE,
* BEFORE WRITING THE OUTPUT REGISTER FOR ANY OTHER MONITOR
* FUNCTION, SUBROUTINE *CMC* MUST BE CALLED TO ENSURE ANY
* PREVIOUS *BIOM* REQUEST IS COMPLETE. TO ENSURE THAT THIS
* LOGIC IS FOLLOWED, THE *MONITOR* MACRO IS REDEFINED TO
* CALL SUBROUTINE *IMF* RATHER THAN *PPR* SUBROUTINE *FTN*.
*
* 3) THE DEVICE STATE TABLE COMPLETELY OVERLAYS *PPR*.
* THEREFORE, IT IS NOT POSSIBLE TO CALL ANY *PPR* ENTRY
* POINT AFTER SUBROUTINE *IST* IS CALLED IN *3DZ*.
SPACE 4,25
*** INFORMATIVE BML MESSAGES.
*
* SOME MESSAGES MAY BE LOGGED AT DRIVE INITIALIZATION TIME THAT
* ARE INFORMATIVE RATHER THAN HARDWARE ERRORS.
*
* 1) IF A DRIVE IS FORMATTED FOR NOS/VE, THEN USED BY NOS IN
* DUAL ACCESS MODE, THE DRIVE WILL BE FORMATTED THROUGH
* ONE PATH, BUT THE CONTROLLER ON THE OTHER PATH DOES NOT
* YET KNOW A FORMAT CHANGE OCCURRED. IF THE NUMBER OF
* PHYSICAL DRIVES PER LOGICAL UNIT REMAINS THE SAME, A
* LOGICAL RESET WILL BE REQUIRED. EXAMPLE OF RESPONSE
* RETURNED.
*
* 0016 0132 0600 0018 0DE1 0000 0101 0000 C0FE 0000 1000
*
* IF THE NUMBER OF PHYSICAL DRIVES PER LOGICAL UNIT
* CHANGES, A SLAVE RESET WILL BE REQUIRED ON THE SIDE THAT
* DOES NOT DO THE FORMAT/CLUSTER.
*
* 2) IF THE SYSTEM IS DEADSTARTED WHILE I/O REQUESTS ARE IN
* PROGRESS OR A CHANNEL IS DOWNED WHEN I/O IS IN PROGRESS,
* A DRIVE COULD BE LEFT RESERVED. THE NEXT TIME THE DRIVE
* IS ACCESSED, A RECOVERABLE ERROR MAY OCCUR. IF A DRIVE
* IS BUSY, THE DRIVE RESET, STEP 2 OF ERROR RECOVERY, WILL
* BREAK THE RESERVE.
SPACE 4,10
** COMMON DECKS.
*CALL COMPMAC
RICHI$ EQU 1 SELECT DEFERRED INSTRUCTION MODIFICATION
LCHI$ EQU 1 SELECT CONL FOR CHANNEL ADDRESS TABLE
*CALL COMPCHI
*CALL COMSCPS
QUAL$S SET 0 REMOVE QUALIFICATION OF COMSDFS CONSTANTS
*CALL COMSDFS
*CALL COMSEVT
LIST X
*CALL COMSHIO
LIST *
QUAL IOU
*CALL COMSIOU
QUAL *
QUAL MMF
*CALL COMSMMF
QUAL *
*CALL COMSMSC
*CALL COMSMSP
*CALL COMSMST
*CALL COMSPIM
*CALL COMS1DS
SPACE 4,10
** INTERFACE SPECIFICATIONS.
DN MICRO 1,3,*1DA* DEFAULT DRIVER NAME
TITLE CONSTANTS AND DEFINITIONS.
SPACE 4,10
**** DIRECT CELL ALLOCATION.
NR EQU 15 - 21 NEXT REQUEST
WB EQU 22 - 26 CM WORD BUFFER
* THE NEXT FIVE LOCATIONS ARE ORDER DEPENDENT.
PB EQU 27 PREVIOUS CONTROL BUFFER ORDINAL
CB EQU 30 CURRENT CONTROL BUFFER ORDINAL
NB EQU 31 NEXT CONTROL BUFFER ORDINAL
UA EQU 32 - 33 UEM ADDRESS / 100
EO EQU 34 EST ORDINAL
DN EQU 35 DRIVE NUMBER
CI EQU 36 CONTROLLER STATE TABLE ADDRESS
CN EQU 37 CONTROLLER NUMBER
MS EQU 40 MAJOR STATUS (RESPONSE PACKET)
RT EQU 41 STATUS RESPONSE TYPE
TM EQU 42 TRANSFER MODE, 0 = STREAM DATA
DT EQU 43 DRIVE TYPE
UC EQU 44 UNIT ACTIVITY COUNT
RW EQU 45 READ / WRITE FLAG
PA EQU 46 PROCESSOR ADDRESS
DI EQU 47 DEVICE STATE TABLE ADDRESS
CT EQU IR CHANNEL TYPE, 0 = 10 MB CHANNEL
FC EQU IR+1 FORMAT COMPLETE FOR ALL UNITS IF NONZERO
DD EQU IR+2 NUMBER OF DATA DRIVES IN DEVICE
MF EQU IR+3 MASTER CLEAR CHANNEL ERROR IF NONZERO
CR EQU 57 CHANNEL RESERVED IF NONZERO
RF EQU 60 RESET IN PROGRESS IF NONZERO
LF EQU 61 LAST FUNCTION
PD EQU 62 NUMBER OF PARITY DRIVES IN DEVICE
CW EQU 63 - 67 CM WORD BUFFER
****
SPACE 4,10
** IPI ADAPTER FUNCTION CODES.
F0000 EQU 0#0000 MASTER CLEAR
F00E1 EQU 0#00E1 READ STATUS REGISTER
F0100 EQU 0#0100 CLEAR DMA ERROR
F0102 EQU 0#0102 READ IPI REVISION REGISTER
F0300 EQU 0#0300 WRITE CONTROL REGISTER
F0700 EQU 0#0700 READ OPERATIONAL STATUS
F0800 EQU 0#0800 DMA TERMINATE
F0A00 EQU 0#0A00 READ T REGISTER
F0B00 EQU 0#0B00 WRITE T REGISTER
F0C00 EQU 0#0C00 DMA READ FROM ADAPTER
F0D00 EQU 0#0D00 DMA WRITE TO ADAPTER
F0E00 EQU 0#0E00 CLEAR T REGISTER
F0062 EQU 0#0062 PORT A SELECT
F0862 EQU 0#0862 PORT B SELECT
SPACE 4,10
** IPI CHANNEL FUNCTION CODES.
F0029 EQU 0#0029 SELECT CONTROLLER (SET SELECT OUT)
F005B EQU 0#005B DEFINE INFORMATION TRANSFER (SET SYNC OUT)
F0071 EQU 0#0071 DESELECT CONTROLLER (CLEAR SELECT OUT)
F0711 EQU 0#0711 CLEAR MASTER OUT
F0715 EQU 0#0715 ENABLE INTERRUPTS (SET MASTER OUT)
F8025 EQU 0#8025 REQUEST TRANSFER MODE (SET MASTER OUT)
F8039 EQU 0#8039 MASTER STATUS (CLEAR MASTER OUT)
F8215 EQU 0#8215 RESET LOGICAL INTERFACE (SET MASTER OUT)
F8415 EQU 0#8415 RESET SLAVE (SET MASTER OUT)
F9213 EQU 0#9213 MASTER RESET SLAVES (SET SYNC OUT)
* DATA TRANSFER FUNCTIONS.
F0081 EQU 0#0081 READ INTERLOCKED
F0181 EQU 0#0181 WRITE INTERLOCKED
F0281 EQU 0#0281 READ STREAMING
F0381 EQU 0#0381 WRITE STREAMING
SPACE 4,10
** COMMAND / RESPONSE PACKET DEFINITIONS.
PLN EQU 0 PACKET LENGTH
CRN EQU 1 COMMAND REFERENCE NUMBER
OPC EQU 2 OPERATION CODE
CUN EQU 3 CONTROLLER + UNIT NUMBER
FCP EQU 4 FIRST COMMAND PARAMETER
MST EQU 4 MAJOR STATUS
* MAJOR STATUS RESPONSE TYPES.
CMCT EQU 1 COMMAND COMPLETE
ASRT EQU 4 ASYNCHRONOUS RESPONSE
XFNT EQU 5 TRANSFER NOTIFICATION
* MAJOR STATUS CODES.
CMCS EQU 0#12 COMMAND COMPLETE (CONDITIONAL SUCCESS)
CMSS EQU 0#18 COMMAND COMPLETE (SUCCESSFUL)
ASRS EQU 0#40 ASYNCHRONOUS RESPONSE
XFNS EQU 0#50 TRANSFER NOTIFICATION
IOPL EQU 20 I/O COMMAND PACKET LENGTH
RPBFL EQU 77 RESPONSE PACKET BUFFER LENGTH
SPACE 4,10
** COMMAND PACKET OPERATION CODES.
C0200 EQU 0#0200 REPORT ATTRIBUTES
C0202 EQU 0#0202 RESTORE ATTRIBUTES
C0209 EQU 0#0209 LOAD ATTRIBUTES
C020A EQU 0#020A SAVE ATTRIBUTES
C0301 EQU 0#0301 REPORT ADDRESSEE CONDITION
C0302 EQU 0#0302 REPORT ADDRESSEE STATUS
C0700 EQU 0#0700 SET OPERATING MODE
C0800 EQU 0#0800 ABORT (DRIVE RESET)
C1005 EQU 0#1005 BLOCK READ
C2005 EQU 0#2005 BLOCK WRITE
C280E EQU 0#280E FORMAT
C8100 EQU 0#8100 DRIVE DIAGNOSTICS
CE005 EQU 0#E005 RESTORE DRIVE
SPACE 4,10
** COMMAND PACKET PARAMETER ID-S.
P02D1 EQU 0#02D1 PERFORMANCE LOGGING
P0254 EQU 0#0254 DRIVE RESET
P02D2 EQU 0#02D2 MASTER TERMINATE
P02D3 EQU 0#02D3 EXTENT RESPONSE
P02D4 EQU 0#02D4 ENABLE ASYNCS
P02D5 EQU 0#02D5 PHYSICAL DRIVE
P0351 EQU 0#0351 DISK MODES
P036C EQU 0#036C REQUEST ATTRIBUTE
P0931 EQU 0#0931 COMMAND EXTENT
P0568 EQU 0#0568 FACILITIES ATTACHED
P0968 EQU 0#0968 FACILITIES ATTACHED
P0D68 EQU 0#0D68 FACILITIES ATTACHED
P1168 EQU 0#1168 FACILITIES ATTACHED
SPACE 4,10
** SUBSTATUS PARAMETER ID CODES.
ID16 EQU 0#16 MACHINE EXCEPTION FOR CONTROLLER
ID17 EQU 0#17 COMMAND EXCEPTION FOR CONTROLLER
ID23 EQU 0#23 MESSAGE EXCEPTION
ID24 EQU 0#24 INTERVENTION REQUIRED FOR DRIVE
ID26 EQU 0#26 MACHINE EXCEPTION FOR DRIVE
ID29 EQU 0#29 CONDITIONAL SUCCESS
ID32 EQU 0#32 RESPONSE EXTENT (COMMON)
SPACE 4,10
** INFORMATION TRANSFER DEFINITIONS.
CIOT EQU 0 COMMAND - INFORMATION OUT
RIIN EQU 1 RESPONSE - INFORMATION IN
DAOT EQU 2 DATA - INFORMATION OUT
DAIN EQU 3 DATA - INFORMATION IN
SPACE 4,10
** MAINTENANCE REGISTER REQUEST CODE SYMBOLS.
MR EQU /IOU/MR MAINTENANCE CHANNEL
IOUC EQU /IOU/IOUC+/IOU/MRRD READ CONNECT CODE
RMRF EQU /IOU/MRRD-/IOU/MRRD READ REGISTER
WMRF EQU /IOU/MRWT-/IOU/MRRD WRITE REGISTER
RFMR EQU RMRF*10000+/IOU/FMCR READ FAULT MASK REGISTER
RCSR EQU RMRF*10000+/IOU/C0CR READ CHANNEL STATUS REGISTER
WFMR EQU WMRF*10000+/IOU/FMCR WRITE FAULT MASK REGISTER
SPACE 4,10
** INITIAL OR FINAL FAULT ANALYSIS CODES.
ECIE EQU 2 IPI CHANNEL ERROR FLAG (CHPE)
ECHF EQU 7 CHANNEL HUNG FULL (CHFE)
ETIT EQU 10 CONTROLLER INTERRUPT TIMEOUT (FTOE)
ETFN EQU 11 CHANNEL FUNCTION TIMEOUT
EDPE EQU 14 MEDIA ERROR (PARE)
*EDNR EQU 20 USED BY 9853 (NRDE)
EIDT EQU 24 INCOMPLETE DATA TRANSFER (IDTE)
ERSS EQU 30 RESERVED SUBSTATUS (ID X1) (DSTE)
EDFM EQU 31 DEFECT MANAGEMENT ERROR (ID X2)
EMME EQU 32 MESSAGE/MICROCODE EXCEPTION (ID X3)
ETSL EQU 33 SELECT TIMEOUT
ESUF EQU 34 SPIN-UP FAILURE (DSTE)
ESDF EQU 35 SPIN-DOWN FAILURE
*ETTC EQU 36 USED BY 9853
EIVR EQU 37 INTERVENTION REQUIRED (ID X4)
EAPR EQU 40 ALTERNATE PORT EVENT (ID X5) (DSTE)
EMEX EQU 41 MACHINE EXCEPTION (ID X6)
ECEX EQU 42 COMMAND EXCEPTION (ID X7)
EFDF EQU 43 FORMAT DRIVE FAILURE
EIOS EQU 44 I/O INITIATION ERROR (DSTE)
*ERPE EQU 45 USED BY 9853
*ERDS EQU 46 USED BY 9853
EROD EQU 47 RESTORE OFF-LINE DRIVE ERROR
ECMA EQU 50 COMMAND ABORTED (ID X8) (DSTE)
ECCS EQU 51 CONDITIONAL SUCCESS (ID X9)
ECIC EQU 52 COMMAND INCOMPLETE (ID XA)
EUST EQU 53 SUCCESSFUL NOT SET IN ENDING STATUS
EDTF EQU 54 DIAGNOSTIC FAULT (DDFE)
*EDRS EQU 55 USED BY 9853
ECNR EQU 60 SLAVE/SYNC IN SIGNAL ERROR (RAME)
ELCA EQU 61 LOAD CONTROLLER ATTRIBUTES FAILURE
ESRE EQU 62 SELECTIVE RESET ERROR
ERDA EQU 63 REPORT DEVICE ATTRIBUTES ERROR
EBAE EQU 64 BUS ACKNOWLEDGE ERROR (RAME)
ECOT EQU 65 CONTROLLER OVER TEMPERATURE
EDRE EQU 70 DRIVE RESERVE ERROR (DRVE)
ECRE EQU 74 USED BY 9853 (RAME)
ECMD EQU 75 CONTROLLER DEAD
WDTP EQU 100 WRONG DRIVE TYPE (DSTE)
PNSP EQU 101 PARALLEL NOT SUPPORTED
PDPD EQU 102 PARITY DRIVE PROTECTION DISABLED
PDPE EQU 103 PARITY DRIVE PROTECTION ENABLED
SPACE 4,10
** CHANNEL STATUS FAULT CODES.
ECPE EQU 1 CHANNEL PARITY ERROR
*ECIE EQU 2 IPI CHANNEL ERROR FLAG
ECER EQU 4 CHANNEL DETECTED ERROR
ECCM EQU 5 CHANNEL DETECTED CM ERROR
SPACE 4,10
** DEVICE STATE TABLE DEFINITIONS. (LDM XXXX,DI)
BEGIN BSSN 0
PUTO BSSN 1 *PUT* ORDINAL
PNUN BSSN 1 4/C, 3/P, 3/E, 6/U WHERE
C = *CSTB* INDEX
P = PORT NUMBER
E = EQUIPMENT (CONTROLLER) NUMBER
U = UNIT NUMBER
ADDR BSSN 1 NO ATTENTION RETURN
ATTN BSSN 1 ATTENTION RETURN
IDTR BSSN 1 RETURN ADDRESS FROM *IDT*
EEST BSSN 1 EXPECTED EXECUTION STATUS
RWST BSSN 1 READ / WRITE STATUS
RQLN BSSN 1 1/U, 11/R WHERE
U = UNIT INTERLOCK SET (IN *PUT*)
R = NUMBER OF REQUESTS PROCESSED
CSCT BSSN 1 CUMULATIVE SECTOR COUNT
CYLN BSSN 1 CYLINDER ON SEEK
PHYD BSSN 1 PHYSICAL DRIVE
TKSN BSSN 1 TRACK, SECTOR FOR I/O
ERCT BSSN 1 ERROR COUNT
SREQ BSSN 1 SPECIAL REQUEST
IPPS BSSN 1 I/O PREPROCESSING STATUS
LCMD BSSN 1 LAST COMMAND OP CODE
IOST BSSN 1 READ/WRITE STATUS
DVTP BSSN 1 9/XX, 1/0, 6/YY WHERE
XX = BIT 15 PARTITIONED DEVICE
BIT 14 PROCESS LOST PARITY
BIT 13 CHECK DRIVE TYPE
BIT 12 MMF RESTORE / ACCESS DISABLED
BIT 11 MMF RESTORE / ACCESS ENABLED
BIT 10 ENABLE MMF PARITY DEV. ACCESS
BIT 09 MMF SHARED DEVICE
BIT 08 MMF RESTORE INITIATION
BIT 07 CHECK MMF PARITY ACCESS
YY = DRIVE TYPE (0 = EA, 1 = EB, ... )
OUPD BSSN 1 OFFLINE UNIT OF PARITY DEVICE
SEPR BSSN 1 RETURN ADDRESS FROM *SEP* OR *WAC*
DSTBE BSSN 0 LENGTH OF STATE TABLE ENTRY
END BSSN
SPACE 4,10
** CSTB - CONTROLLER STATE TABLE. (LDML XXXX,CI)
BEGIN BSSN 0
CTST BSSN 1 CONTROLLER STATUS
* 1/S, 1/R, 1/D, 1/0, 12/FD
* S = SLAVE RESET IN PROGRESS
* R = INITIAL LOGICAL RESET REQUIRED (DRIVER STARTUP)
* D = CONTROLLER DEAD (SLAVE RESET FAILED)
* FD = *DST* ADDRESS OF FIRST DEVICE ON CONTROLLER.
*
* NOTE - COMMANDS AND RESPONSES WILL BE TRANSFERRED IN
* INTERLOCK MODE IF *CTST* BIT 15, 14 OR 13 IS SET.
CTSN BSSN 3 CONTROLLER SERIAL NUMBER (LAST 6 DIGITS)
CSTBE BSSN 0 LENGTH OF CONTROLLER STATE TABLE ENTRY
END BSSN
SPACE 4,10
**** ASSEMBLY CONSTANTS.
TE EQU 0 = 1 TO ENABLE COMMAND/RESPONSE TRACING
DE EQU 0 = 1 TO ENABLE DEBUG MODE
BPB EQU 16384D BYTES PER BUFFER / DATA BURST
CH EQU 16 CHANNEL NUMBER
MXCN EQU 4 MAXIMUM NUMBER OF CONTROLLERS / DRIVER
MXND EQU 30 MAXIMUM NUMBER OF UNITS / DRIVER
CBTO EQU 30D NORMAL COMMAND BLOCK TIMEOUT (SECONDS)
FMTO EQU 12D*60D FORMAT TIMEOUT (SECONDS) (UPPED FOR 47444)
SUTO EQU 8D*60D SPIN UP TIMEOUT (SECONDS)
SRTO EQU 9D*60D SLAVE RESET TIMEOUT (SECONDS)
DRFM EQU 1000 DIRECTION FLAG MASK
ILFM EQU 4000 INTERLOCK FLAG MASK
CSRC EQU 4 RETRY COUNT TO MAKE CHANNEL SWITCH
SRRC EQU 2 RETRY COUNT TO ISSUE SLAVE RESET
MERC EQU CSRC*2 RETRY COUNT TO SET UNRECOVERABLE
IRBR EQU 3 I/O REQUESTS BEFORE NEXT RESTORE
SBUR EQU 20D SECONDS BETWEEN *UTRS* REQUESTS
****
SPACE 4,10
* MEMORY LAYOUT.
DSTB EQU 100 START OF DEVICE STATE TABLES
DSTBL EQU DSTB+DSTBE*MXND LWA+1 OF DEVICE STATE TABLES
ERRNG 7777-DSTBL DI IS IN *CTST* BITS 0-11 ONLY
CSTB EQU DSTBL CONTROLLER STATE TABLE
CSTBL EQU CSTB+CSTBE*MXCN LWA+1 OF CONTROLLER STATE TABLES
OCMD MAX CSTBL,MSFW+5 DRIVER ORIGIN
SPACE 4,10
* LAYOUT OF ERROR DATA BUFFERS.
BEGIN BSSN 0 REAL TIME ERROR DATA
EXST BSSN 1 ENDING STATUS
BSSN 2 RESERVED
LSCC BSSN 1 LAST SLAVE COMMAND
LCFN BSSN 1 LAST CHANNEL FUNCTION
CREG BSSN 4 CHANNEL REGISTER DATA
BSSN 3 RESERVED
TREG BSSN 3 CONTENTS OF T REGISTER
RTEDL EQU *
EMBF BSSN 0 ERROR MESSAGE BUFFER
BSSN 3*5 BML MESSAGE PREFIX AND HEADER
CODE BSSN 1 INITIAL FAULT CODE
FCS1 BSSN 1 FAULT CODE - ERROR STEP 1
FCS2 BSSN 1 FAULT CODE - ERROR STEP 2
FCS3 BSSN 1 FAULT CODE - ERROR STEP 3
FALT BSSN 1 FINAL FAULT CODE
EREA BSSN 1 ERROR RECOVERY ENTRY ADDRESS
RBCT BSSN 1 RESIDUAL BYTE COUNT
STCT BSSN 1 SECTORS TRANSFERED COUNT
ICYL BSSN 1 CYLINDER ON INITIAL SEEK
ITAS BSSN 1 TRACK + SECTOR ON INITIAL SEEK
.3 SET *-EMBF+4
EMBFS EQU .3/5
EMBF1 EQU EMBFS*5+EMBF
.1 SET RTEDL*4
.2 SET .1-.1/3*3+2
.3 SET .1/3+.2/3+4
EMBF2 EQU .3/5*5+EMBF1
EMBF2L EQU EMBF2/5
.1 SET RPBFL*4
.2 SET .1-.1/3*3+2
.3 SET .1/3+.2/3+4
EMBFL EQU .3/5*5+EMBF2
END BSSN
EDBFL EQU RTEDL+EMBFL
TITLE MACROS.
** MACRO DEFINITIONS.
TBLM SPACE 4,10
** TBLM - CREATE MASS STORAGE DEVICE TABLE ENTRIES.
*
PURGMAC TBLM
TBLM MACRO TY
.A1 IFGE AI_TY,AIAB
.A2 IFLT AI_TY,AIAE
* 1/PARITY DRIVES, 3/DATA DRIVES, 12/MNEMONIC
DM RMT
EQ_TY EQU *-DM
VFDL 1/BF_TY-6,3/PDD_TY,12/2R_TY
DM RMT
* PHYSICAL SECTORS PER CYLINDER.
PSCY RMT
CON PTCY_TY*PSPT_TY-SPSC_TY
PSCY RMT
.A SET CYPN_TY-1
.B SET PTCY_TY*PSPT_TY-SPSC_TY
.A SET .A*.B
.C SET MCLT_TY-4000B
.D SET SL_TY/LSPS_TY
.C SET .D*.C
.A SET .A-.C+1
.A SET .A/PSBF_TY*PSBF_TY
IFGT .A,10B*.B,1
.A SET 10B*.B
STS_TY EQU .A
* 7/BML MESSAGE DEVICE CODE, 9/STREAMING END-CASE SECTORS.
STS RMT
VFDL 7/MLID_TY,9/STS_TY
STS RMT
* 4/LOGICAL TO PHYSICAL SHIFT, 12/LAST CYLINDER ON UNIT.
CYUN RMT
VFDL 4/CFS_TY,12/CYUN_TY-1
CYUN RMT
* 4/PHYSICAL SECTORS PER BUFFER, 12/MAINTENANCE CYLINDER.
MC RMT
VFDL 4/PSBF_TY,12/CYPN_TY-1
MC RMT
* 6/LAST TRACK ON CYLINDER, 6/LAST SECTOR ON CYLINDER + 1
LSOC RMT
VFD 6/PTCY_TY-1,6/PSPT_TY-SPSC_TY
LSOC RMT
* BYTES PER SECTOR + PHYSICAL SECTORS PER PHYSICAL TRACK.
BPS RMT
CONL 16384D/PSBF_TY+PSPT_TY
BPS RMT
* MODEL NUMBER (LAST TWO BYTES).
MN RMT
CONL MDL_TY
MN RMT
.A2 ENDIF
.A1 ENDIF
TBLM ENDM
SPACE 4
TBL "MSEQ" GENERATE DEVICE ATTRIBUTE TABLES
TBLM SPACE 4,10
** TBLM - CREATE TABLE ENTRY MACRO.
*
*NAM TBLM
*
* ENTRY NAM = TABLE NAME.
*
* EXIT NAM_E MACRO DEFINED.
PURGMAC TBLM
MACRO TBLM,NAM
PURGMAC NAM_E
NAM_E MACRO ADDR
LOCAL A
MACREF NAM_E
NOREF A
A EQU ADDR
T_NAM RMT
CONL A
RMT
TBLM ENDM
CBTE SPACE 4,15
** CBTE - CONTROL BUFFER TABLE ENTRY.
*
* THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCBT*
* THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
* REQUIRES THE FWA OF THE CONTROL BUFFER TABLE.
*
* CBTE ADDR
*
* ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
*
* EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCBT*.
CBT TBLM
CCTE SPACE 4,15
** CCTE - CHANNEL CONTROL TABLE ENTRY.
*
* THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCCT*
* THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
* REQUIRES THE FWA OF THE CHANNEL CONTROL TABLE.
*
* CCTE ADDR
*
* ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
*
* EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCCT*.
CCT TBLM
CHTE SPACE 4,15
** CHTE - CHANNEL TABLE ENTRY.
*
* THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TCHT*
* THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
* REQUIRES THE FWA OF THE CHANNEL TABLE.
*
* CHTE ADDR
*
* ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
*
* EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TCHT*.
CHT TBLM
EMBE SPACE 4,15
** EMBE - ERROR MESSAGE TABLE ENTRY.
*
* THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEMB*
* THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
* REQUIRES THE FWA OF THE ERROR MESSAGE TABLE.
*
* EMBE ADDR
*
* ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
*
* EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEMB*.
EMB TBLM
EXPE SPACE 4,15
** EXPE - EXCHANGE PACKAGE ADDRESS ENTRY.
*
* THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TEXP*
* THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
* REQUIRES THE FWA OF THE PP EXCHANGE PACKAGE.
*
* EXPE ADDR
*
* ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
*
* EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TEXP*.
EXP TBLM
FTTE SPACE 4,15
** FTTE - FUNCTION TIMEOUT TABLE ENTRY.
*
* THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TFTT*
* THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
* REQUIRES THE FWA OF THE FUNCTION TIMEOUT TABLE.
*
* FTTE ADDR
*
* ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
*
* EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TFTT*.
FTT TBLM
PUTE SPACE 4,15
** PUTE - PHYSICAL UNIT TABLE ENTRY.
*
* THIS MACRO GENERATES AN ENTRY IN REMOTE LIST *TPUT*
* THAT CONTAINS THE ADDRESS OF AN INSTRUCTION WHICH
* REQUIRES THE FWA OF THE PHYSICAL UNIT TABLE.
*
* PUTE ADDR
*
* ENTRY (ADDR) = ADDRESS OF INSTRUCTION.
*
* EXIT ADDRESS IS ADDED TO THE REMOTE BLOCK *TPUT*.
PUT TBLM
ERRMSG SPACE 4,10
** ERRMSG - DEFINE ERROR LOG MESSAGE.
*
* TAG ERRMSG (TEXT)
*
* *ERRMSG* DEFINES AN ERROR LOG MESSAGE, AND CALCULATES THE
* LENGTH OF THE MESSAGE IN CM WORDS. THE LENGTH IS STORED
* IN THE PP LOCATION BEFORE THE TEXT. *TAG* POINTS TO THE
* TEXT ITSELF. THE CALCULATED LENGTH IS BIASED TO INCLUDE
* THE MESSAGE HEADER CONTAINED IN SUBROUTINE *IEM*.
PURGMAC ERRMSG
MACRO ERRMSG,TAG,MSG
LOCAL LEN
CON LEN/5
TAG DATA C*MSG*
ERRNG 18D-*+TAG MESSAGE TOO LONG
LEN EQU *-TAG+13+4
ENDM
MONITOR SPACE 4,10
** MONITOR - REQUEST MONITOR FUNCTION.
*
* MONITOR F
*
* ENTRY F = MONITOR FUNCTION.
* (CM+1 - CM+4) = PARAMETERS.
*
* CALLS IMF.
PURGMAC MONITOR
MONITOR MACRO F
MACREF MONITOR
LDK F
RJM IMF
ENDM
WAIT SPACE 4,10
** WAIT - DO NOTHING FOR SPECIFIED TIME.
*
* WAIT N
*
* N = MICROSECOND COUNT.
*
* EXIT (A) = 0.
PURGMAC WAIT
WAIT MACRO N
MACREF WAIT
NOREF .2
BASE D
.2 SET N 1
IFEQ N,64,2
LDD HN
SKIP 4
IFEQ N,512,2
LDD TH
SKIP 1
LDK .2
BASE *
SBN 1
STD T0
NJN *-2 IF WAIT TIME HAS NOT ELAPSED
ENDM
TITLE MAIN PROGRAM.
DAS SPACE 4,15
** DAS - MAIN PROGRAM.
*
* ENTRY AT *DAS* (VIA *RJM*) TO SET REENTRY ADDRESS.
* AT *DAS1* WITH (ADDR,DI) ZERO WHEN REQUEST COMPLETE.
* AT *DAS1* WITH (ADDR,DI) NONZERO TO ALLOW REENTRY.
* AT *DAS6* IF CHANNEL DOWN WHEN DRIVER LOADED.
*
* USES DI.
*
* CALLS CAA, CCR, CET, CFR, EMP, IOM, LDP, PLP, PPE, PRS.
*
* MACROS MONITOR.
ORG OCMD
RICHI BEGIN CHANNEL INSTRUCTION MODIFICATION
DAS SUBR PRS ENTRY (EXECUTE *PRS* ON INITIAL ENTRY)
LDML DAS SET REENTRY ADDRESS
STML ADDR,DI
* PROCESS NEXT DEVICE.
DAS1 LDC DSTB (ADDRESS OF NEXT *DST* ENTRY)
DASA EQU *-1
LMC DSTBL (LWA+1 OF *DSTB* - ADJUSTED BY *IST*)
DASB EQU *-1
ZJN DAS3 IF END OF DEVICE STATE TABLE
DAS2 LDM DASA
STD DI SET DEVICE STATE TABLE ADDRESS
ADN DSTBE
STM DASA ADVANCE TABLE ADDRESS
RJM LDP LOAD DEVICE PARAMETERS
RJM PLP PROCESS LOST PARITY, IF PENDING
RJM PPE PROCESS PARITY ENABLE, IF PENDING
RJM CAA CHECK IF ACCESS ALLOWED
NJN DAS1 IF ACCESS TO DEVICE NOT ALLOWED
RJM CFR CHECK FOR REQUEST
UJN DAS1 CHECK NEXT DEVICE
* END OF DEVICE STATE TABLE - CHECK FOR CHANNEL DOWN.
DAS3 RJM CCR CHECK FOR CHANNEL REQUEST
ZJN DAS5 IF CHANNEL DOWN
RJM CET CHECK ELAPSED TIME
MJN DAS4 IF NOT TIME TO REFRESH OPERATOR MESSAGE
LCN 0 TRY TO MAKE MULTIPLE MESSAGES VISIBLE
RJM IOM REFRESH OPERATOR MESSAGE
DAS4 LDC DSTB RESTART DEVICE STATE TABLE SCAN
STM DASA
UJP DAS2 PROCESS NEXT DEVICE
* CHANNEL *DOWN* DETECTED - FORCE COMPLETION ON ALL REQUESTS.
DAS5 UJN *+2 FIRST PASS
* UJN *+1 (SECOND PASS)
DASC EQU *-1
UJN DAS6 DROP PP ON SECOND PASS
SOM DASC
LDC CMP8 CHANGE PATH THRU *CFR*
STML CFRA
UJN DAS4 LOOP THROUGH DEVICE STATE TABLE
DAS6 MONITOR DPPM DROP PP
UJN * HANG UNTIL *CPUMTR*/*1MA* IDLES PP
.DLY CON 370 DELAY MACRO - DELAY COUNT FOR 4X PP
DLYA SBN 4 DELAY MACRO - FOR 4X PP
TITLE DEVICE ATTRIBUTE TABLES.
SPACE 4,20
** DEVICE RELATED TABLES BUILT VIA *MSDC*.
*
* LOCATION DT IS THE INDEX TO THESE TABLES.
LIST G
DM SPACE 4,10
** 1/PARITY DRIVES, 3/DATA DRIVES, 12/MNEMONIC
DM BSS 0
DM HERE
EQNS EQU *-DM
CON 0 TERMINATE DEVICE TYPE LIST
PSCY SPACE 4,10
** PHYSICAL SECTORS PER CYLINDER.
PSCY BSS 0
PSCY HERE
STS SPACE 4,10
** 7/BML MESSAGE DEVICE CODE, 9/STREAMING END-CASE SECTORS.
BMID BSS 0
STS BSS 0
STS HERE
CYUN SPACE 4,10
** 4/LOGICAL TO PHYSICAL SHIFT, 12/LAST CYLINDER ON UNIT.
CFS BSS 0
CYUN BSS 0
CYUN HERE
MC SPACE 4,10
** 4/PHYSICAL SECTORS PER BUFFER, 12/MAINTENANCE CYLINDER.
PSBF BSS 0
MC BSS 0
MC HERE
LSOC SPACE 4,10
** 6/LAST TRACK ON CYLINDER, 6/LAST SECTOR ON CYLINDER + 1
LSOC BSS 0
LSOC HERE
BPS SPACE 4,10
** BYTES PER SECTOR + PHYSICAL SECTORS PER PHYSICAL TRACK.
BPS BSS 0
PSPT BSS 0
BPS HERE
MN SPACE 4,10
** MODEL NUMBER (LAST TWO BYTES).
MN BSS 0
MN HERE
LIST *
SPACE 4,20
** CHANNEL TYPE RELATED TABLES.
*
* LOCATION CT IS THE INDEX INTO THESE TABLES.
TRAT DATA 0#7E42 10 MB CHANNEL TRANSFER RATE
DATA 0#FF42 25 MB CHANNEL TRANSFER RATE
PAS DATA 0#62 10 MB CHANNEL PORT A SELECT
DATA 0#362 25 MB CHANNEL PORT A SELECT
CTS DATA 0#F02 10 MB CHANNEL, CHANNEL TRANSFER SPEED
DATA 0 25 MB CHANNEL, CHANNEL TRANSFER SPEED
EDC DATA 0 10 MB CHANNEL, USE SINGLE CMI SLOT
DATA 0#4000 25 MB CHANNEL, USE DOUBLE CMI SLOT
TITLE READ / WRITE PROCESSING.
PIO SPACE 4,20
** PIO - READ / WRITE PROCESSING.
*
* ENTRY AT *PIO* TO INITIATE REQUEST.
* AT *PIO2* FROM *CTC* IF NO DATA TRANSFERRED.
* AT *PIO6* FROM *CTC* IF NO MORE DATA.
* (RW) = 0 IF READ.
* (CB) = CONTROL BUFFER.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT TO *ERR* IF ERROR.
* TO *CMP* WHEN COMMAND COMPLETES.
*
* USES CB, T1.
*
* CALLS ATT, BCS, CTC, DCM, EIO, FCN, GSS, SCD, SFR, SOU,
* WCB, WTR.
PIO BSS 0 ENTRY
LDML PIOA,RW READ OR WRITE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
* COMMAND EXTENT PARAMETER SET BY *IIO*.
LDN IOPL COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
UJN PIO2 SET I/O IN PROGRESS
PIO1 RJM DCM DESELECT CONTROLLER
PIO2 LDD CB SET I/O IN PROGRESS
STM IPPS,DI
LDN XFNT PROCESS ATTENTION
RJM ATT
ZJN PIO3 IF EXPECTED STATUS
LCN EIOS I/O INITIATION ERROR
RJM ERR PROCESS ERROR
PIO3 STML PIOC CLEAR ENDING STATUS
LDN 1 SET CHANNEL ACTIVE FOR *CPD*
RJM SCD
LDM IPPS,DI RESTORE CURRENT BUFFER ORDINAL
PIO4 STD CB
LDML PIOC CHECK ENDING STATUS
LPN 0#30
NJN PIO1 IF PAUSE / TIME DEPENDENT OPERATION
* INITIATE DATA TRANSFER.
LDN DAIN DEFINE TRANSFER DIRECTION
SBD RW
ERRNZ DAOT+1-DAIN CODE DEPENDS ON VALUE
RJM BCS
LDML PIOB,RW SET DMA MODE
RJM FCN
RJM WTR WRITE T REGISTER
LDD CB
RJM SFR SEARCH FOR CONSECUTIVE REQUEST
* WAIT UNTIL ONE BURST DMA TRANSFER COMPLETE.
RJM CTC CHECK TRANSFER COMPLETE
* LDN 0
STD T1 CLEAR RESIDUAL BYTE COUNT
LDD NB
ZJN PIO5 IF NO MORE CONSECUTIVE REQUESTS
LDN 0#A
PIO5 LMN 0#A CHECK ENDING STATUS
RJM GSS
RJM EIO ENTER BUFFER IN I/O REQUEST QUEUE
LDD NB
NJN PIO4 IF CONSECUTIVE REQUEST PRESENT
* COMPLETE READ / WRITE OPERATIONS.
* LDN 0 CLEAR CHANNEL ACTIVE FOR *CPD*
RJM SCD
RJM DCM DESELECT CONTROLLER
LDN CMSS EXPECT COMMAND COMPLETE
PIO6 RJM ATT WAIT FOR INTERRUPT
NJN PIO7 IF NOT SUCCESSFUL
LDM RSDI CHECK IF RESTORE IN PROGRESS
LMD DI
NJN PIO6.1 IF NO RESTORE IN PROGRESS ON THIS DEVICE
SOM RMUX REQUESTS TO MULTIPLEX BETWEEN RESTORES
PIO6.1 LJM CMP COMPLETION PROCESSING
PIO7 LDDL MS
LMC 0#42
NJN PIO8 IF NOT CONDITIONAL SUCCESS/ASYNCH
LDDL PA
STML ATTN,DI SET ATTENTION RETURN ADDRESS
PIO8 LCN EIOS I/O INITIATION ERROR
RJM ERR PROCESS ERROR
PIOA BSS 0 COMMAND CODES
CONL C1005
CONL C2005
PIOB BSS 0 DATA TRANSFER FUNCTIONS
CON F0281
CON F0381
PIOC CON 0 ENDING STATUS (SET BY *GSS*)
TITLE FORMAT DRIVES AT DEADSTART.
CFF SPACE 4,25
** CFF - CHECK FOR FORMAT.
*
* ENTRY FROM *CFR* AFTER INITIAL LOGICAL RESET HAS BEEN
* PERFORMED FOR ALL CONTROLLERS.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (FC) = 0.
*
* EXIT TO *CMP*.
* TO *ERR* IF CONTROLLER NOT FUNCTIONING.
* (FC) = 1 IF ALL UNITS FORMATTED.
*
* USES DI, FC.
*
* CALLS CCS, CFM, CLP, CMN, CPC, CPF, IDU, ILU, LDP, SEP.
CFF5 LDN ECMD CONTROLLER DEAD
RJM ERR PROCESS ERROR
CFF BSS 0 ENTRY/EXIT
RJM LDP LOAD DEVICE PARAMETERS
LDD CM+3
SHN 21-FCRF+14
PJN CFF1 IF NO FORMAT REQUEST FOR THIS DEVICE
RJM IDU INTERLOCK DEVICE
NJN CFF1 IF INTERLOCK NOT AVAILABLE
RJM SEP SET ERROR PROCESSING INTERLOCK
NJN CFF1 IF ERROR IN PROGRESS ON DIFFERENT DEVICE
* FORMAT DEVICE.
LDD DI INDICATE FORMAT IN PROGRESS
STM CFFA
LDML CTST,CI CHECK FOR CONTROLLER DEAD
SHN 21-15
MJN CFF5 IF CONTROLLER NOT FUNCTIONAL
RJM CPC CHECK FOR PARALLEL CONTROLLER
RJM CMN CHECK MODEL NUMBER
RJM ILU INITIALIZE LOGICAL UNIT
LDN 0
STM CFFA INDICATE FORMAT COMPLETE
RJM CLP CLEAR *LOST PARITY* FLAGS, IF SET
RJM CFM CLEAR *FORMAT PENDING* FLAG IN MST
LDN FCRF
RJM CPF CLEAR *FORMAT* SPECIAL REQUEST IN *PUT*
* CHECK IF ANY FORMAT REQUESTS REMAIN.
CFF1 LDD DI SAVE DEVICE STATE TABLE INDEX
STM CFFB
LDC DSTB CHECK FIRST DEVICE
STD DI
CFF2 RJM LDP LOAD DEVICE PARAMETERS
LDD CM+3
SHN 21-FCRF+14
PJN CFF3 IF NO FORMAT REQUEST FOR DEVICE
RJM CCS CHECK CHANNEL STATE
ZJN CFF4 IF CHANNEL UP
CFF3 LDN DSTBE CHECK NEXT DEVICE
RAD DI
LMM DASB
NJN CFF2 IF MORE DEVICES TO CHECK
AOD FC INDICATE NO MORE DEVICES TO FORMAT
CFF4 LDC ** RESTORE DEVICE STATE TABLE INDEX
CFFB EQU *-1
STD DI
RJM LDP RELOAD DEVICE PARAMETERS
LJM CMP COMPLETE REQUEST
CFFA DATA 0 FORMAT IN PROGRESS (*DST* ADDRESS)
TITLE SELECTIVE RESET PROCESSING.
SRS SPACE 4,20
** SRS - SELECTIVE RESET PROCESSING.
*
* ENTRY (A) = 2/X, 16/RA.
* WHERE X = 0 IF SLAVE RESET.
* = 1 IF LOGICAL RESET.
* RA = RETURN ADDRESS IF COMMAND COMPLETE.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
* (CN) = CONTROLLER NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
* AT *SRS1* FROM *CCA* IF CHANNEL SPEED WRONG.
*
* EXIT (SRSA) = 0 IF RESET COMPLETE.
* TO *CMP* IF PROCESSING INITIAL LOGICAL RESET.
* TO *CMP10* IF RESET IN PROGRESS ON A DIFFERENT DEVICE,
* OR IF SLAVE RESET REQUIRED DURING *RESTORE*.
* TO *ERR* IF ERROR.
*
* USES PA, RW, TM, T1.
*
* CALLS ATT, CCA, CRF, CRP, GCS, IEM, IOM, RIF, SRI, SRP, STO.
SRS BSS 0 ENTRY
STDL T1 SAVE RETURN ADDRESS
SHN -20 SAVE RESET OPTION
STD RW
LDM SRSA
ZJN SRS0 IF NO RESET IN PROGRESS
LMD DI
NJP CMP10 IF RESET IN PROGRESS ON A DIFFERENT DEVICE
SRS0 LDDL T1
STML SRSB SAVE RETURN ADDRESS
* REENTER HERE FROM *CCA* WITH (RW) = 0 TO FORCE SLAVE RESET.
SRS1 RJM SRI SET SLAVE RESET INTERLOCK, IF REQUIRED
LDD RW SET RESET OPTION
STM RWST,DI
LMN 1
SHN 17-0
STDL T1
LDD DI
STM SRSA SET LOCAL RESET IN PROGRESS
LDML CTST,CI
LPC 77777
LMDL T1 SET BIT 15 IF SLAVE RESET
STML CTST,CI
LDN 1
STDL TM INTERLOCK DATA TRANSFERS
RJM RIF RESET SLAVE / LOGICAL INTERFACE
LDML SRST,RW DEFINE RESET TIMEOUT
RJM STO
LDD CN CONVERT CONTROLLER NUMBER
ADN 1R0
SHN 6 INSERT IN MESSAGE
LMN 1R
STM SRSG+1
LDD RW
NJN SRS2 IF LOGICAL RESET
* IF A SLAVE RESET IS REQUIRED DURING A RESTORE, THE RESTORE
* WILL BE ABANDONED. AN EXIT TO *CMP10* IS FORCED TO ENSURE
* THAT ALL INTERLOCKS ARE CLEARED.
LDM RSIN CHECK RESTORE INTERLOCK
LMD DI
NJN SRS1.1 IF INTERLOCK NOT SET ON THIS DEVICE
RJM CRP CLEAR *RESTORE IN PROGRESS*
LDC CMP10 FORCE COMPLETION AFTER RESET
STML SRSB
SRS1.1 LDC SRSG ISSUE OPERATOR MESSAGE
RJM IOM
LDC ERCR+100000 *EQXXX, UXX, CMX RESET ON CCHXX.*
RJM IEM ISSUE ERRORLOG MESSAGE
SRS2 LDN ASRT WAIT ON ASYNC INTERRUPT
RJM ATT
NJN SRS3 IF NOT ASYNCHRONOUS RESPONSE
* SEARCH RESPONSE PACKET FOR MACHINE EXCEPTION PARAMETER.
LDN ID16 LOOK FOR MACHINE EXCEPTION
RJM SRP
MJN SRS3 IF PARAMETER NOT FOUND
LDML RPBF+6,T3
LPC 0#FEE0 CHECK OPERATIONAL + READY TRANSITION
LMC 0#6000
ZJN SRS4 IF CONTROLLER RESET SUCCESSFUL
SRS3 LCN ESRE SELECTIVE RESET ERROR
RJM ERR PROCESS ERROR
SRS4 RJM CCA CHECK CONTROLLER ATTRIBUTES
RJM GCS GET CONTROLLER SERIAL NUMBER
LDM RWST,DI
NJN SRS5 IF NOT SLAVE RESET
LDC ERRC+100000 *EQXXX, UXX, CMX RESET COMPLETE.*
RJM IEM ISSUE ERRORLOG MESSAGE
SRS5 RJM CRF CLEAR RESET FLAGS
LDML CTST,CI ENABLE CONTROLLER ACTIVITY
STDL T0
LPC 37777 CLEAR BITS 15 AND 14
STML CTST,CI
LDDL T0
SHN 21-16
MJP CMP IF PROCESSING INITIAL LOGICAL RESET
LDML SRSB RETURN ADDRESS
STDL PA
LJM 0,PA RETURN TO CALLER
SRSA CON 0 DI OF CONTROLLING DRIVE FOR RESET
SRSB CON 0 RETURN ADDRESS
SRSG DATA C*CM3 BEING RESET ON CCHNN.*
SRST BSS 0
CONL SRTO SLAVE RESET TIMEOUT
CONL CBTO LOGICAL RESET TIMEOUT
TITLE SUBROUTINES.
ACE SPACE 4,10
** ACE - ANALYZE CHANNEL ERROR.
*
* ENTRY (RBUF) = CHANNEL STATUS REGISTER.
*
* EXIT (A) = 0 IF ERROR FLAG NOT SET.
* = CHANNEL ERROR FAULT CODE.
ACE3 LDN ECCM SET CHANNEL DETECTED CM ERROR
ACE SUBR ENTRY/EXIT
LDM RBUF+5
LPN 2
ZJN ACEX IF CHANNEL ERROR FLAG NOT SET
LDM RBUF
LPN 76
NJN ACE3 IF ERROR IN MEMORY
LDM RBUF+1
SHN -5
ZJN ACE2 IF NOT PARITY / IPI CHANNEL ERROR
LPN 2
ZJN ACE1 IF NOT PARITY ERROR
* SET FAULT ANALYSIS CODE.
LDN ECPE&ECIE CHANNEL PARITY ERROR
ACE1 LMN ECIE&ECER IPI CHANNEL ERROR FLAG
ACE2 LMN ECER CHANNEL DETECTED ERROR
UJN ACEX RETURN
AME SPACE 4,10
** AME - ATTEMPT MONITOR EXCHANGE.
*
* EXIT (A) = 0.
*
* USES CW - CW+4.
*
* MACROS EXPE.
AME SUBR ENTRY/EXIT
EXPE *
AME1 LDC 6 CHECK FOR (MA) NON-ZERO
CRD CW
LDD CW+1
ADD CW
NJN AME1 IF EXCHANGE PACKAGE NOT READY
EXPE *
AME2 LDC 0 SET (B0) NON-ZERO
CWM AMEA,ON
SBN 1 EXCHANGE MONITOR
MXN 0
CRD CW
LDD CW+4
ZJN AMEX IF EXCHANGE TAKEN
LDN 28D
SBN 1
NJN *-1 IF NOT 20 MICROSECONDS ELAPSED
UJN AME2 RETRY EXCHANGE
AMEA VFD 24/0 (P)
VFD 18/0 (A0)
VFD 18/0 (B0)
ATT SPACE 4,10
** ATT - PROCESS ATTENTION.
*
* ENTRY (A) = EXPECTED STATUS RESPONSE TYPE.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT VIA *ECI* IF INTERRUPT RECEIVED.
* TO *ERR* IF NO INTERRUPT.
* (ATTA) = INTERRUPT ADDRESS FOR LAST INTERRUPT TIMEOUT.
*
* CALLS CTO, DAS.
ATT CON 0 ENTRY
STML EEST,DI
LDML ATT SAVE RETURN ADDRESS
STML ATTN,DI
ATT1 RJM DAS RETURN TO MAIN LOOP
* RETURN HERE THROUGH *ECI* IF NO INTERRUPT RECEIVED.
RJM CTO
MJN ATT1 IF NOT TIMEOUT
LDML ATTN,DI SAVE ADDRESS
STML ATTA
LDN 0
STML ATTN,DI CLEAR ATTENTION PROCESSING ADDRESS
STML ADDR,DI CLEAR REENTRY ADDRESS
LDN ETIT INTERRUPT TIMEOUT
RJM ERR PROCESS ERROR
ATTA CON 0 ADDRESS FOR INTERRUPT TIMEOUT
CAA SPACE 4,10
** CAA - CHECK IF ACCESS TO PARITY DEVICE IS ALLOWED.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (DVTP,DI) BIT 7 SET, TIME TO CHECK FOR MMF *RESTORE*.
*
* EXIT (A) = 0, IF ACCESS ALLOWED.
*
* CALLS CMR, DMP, EMP.
CAA8 LDN 0 INDICATE ACCESS ALLOWED
CAA SUBR ENTRY/EXIT
LDML ADDR,DI
* UJN CAA8 (NO SHARED DEVICES CONFIGURED)
CAAA EQU *-2
NJN CAA8 IF REQUEST IN PROGRESS ON THIS DEVICE
LDM RSIN CHECK IF RESTORE INTERLOCK SET
LMD DI
ZJN CAAX IF INTERLOCK SET FOR THIS DEVICE
LDML DVTP,DI
SHN 21-7
MJN CAA2 IF TIME TO CHECK FOR MMF RESTORE
CAA1 LDML DVTP,DI CHECK IF ACCESS ALLOWED
SHN 0-10
LPN 21 *ACCESS DISABLED* AND *RESTORE INITIATION*
UJN CAAX RETURN
CAA2 LDML DVTP,DI CLEAR *CHECK MMF PARITY ACCESS* BIT
LPC 177577
STML DVTP,DI
SHN 21-10 CHECK MMF RESTORE BITS
MJN CAA5 IF *MMF RESTORE INITIATION* FLAG SET
RJM CMR CHECK MMF RESTORE FLAGS IN MST
PJN CAA7 IF RESTORE INITIATION NOT IN PROGRESS
LDML DVTP,DI SET *MMF RESTORE INITIATION* FLAG
LPC 177377
LMC 400
STML DVTP,DI
CAA3 RJM DMP DISABLE MMF PARITY DEVICE ACCESS
CAA4 UJN CAA1 RETURN ACCESS PERMISSION
CAA5 RJM CMR CHECK MMF RESTORE FLAGS IN MST
PJN CAA6 IF RESTORE INITIATION COMPLETE
LDML DVTP,DI CHECK MMF RESTORE BITS
SHN 21-14
PJN CAA3 IF *DISABLE* FLAG NOT SET
UJN CAA4 RETURN ACCESS PERMISSION
CAA6 RJM EMP ENABLE MMF PARITY ACCESS, IF POSSIBLE
UJN CAA4 RETURN ACCESS PERMISSION
CAA7 LDML DVTP,DI CHECK MMF RESTORE BITS
SHN 0-13
LPN 3
ZJN CAA4 IF NEITHER *ENABLE* OR *DISABLE* BIT SET
LDM CMRA
NJN CAA4 IF RESTORE STILL IN PROGRESS
UJN CAA6 ENABLE MMF PARITY ACCESS
CAB SPACE 4,10
** CAB - CHECK ACGL *MMF PARITY DEVICE ACCESS* BIT.
*
* ENTRY (EO) = EST ORDINAL.
*
* EXIT (A) = 0, IF THE BIT FOR THIS MAINFRAME IS CLEAR.
*
* USES CM - CM+4.
*
* CALLS REE.
CAB SUBR ENTRY/EXIT
RJM REE READ EST ENTRY
LDD CM+4
SHN 3
ADN ACGL
CRD CM
LDD CM
LPN 0 (MACHINE MASK FOR THIS MF)
CABA EQU *-1
UJN CABX RETURN
CAC SPACE 4,15
** CAC - CHECK FOR ALTERNATE CHANNEL.
*
* ENTRY (EO) = EST ORDINAL.
*
* EXIT (A) = 0, IF ALTERNATE CHANNEL DEFINED AND UP.
* (CM - CM+4) = *EQDE* WORD OF EST.
* (T1) = INDEX INTO (CM+1) FOR THIS CHANNEL.
* (T2) = INDEX INTO (CM+1) FOR ALTERNATE CHANNEL.
* (T6) = MST ADDRESS / 10B.
*
* USES T2.
*
* CALLS CCI.
CAC SUBR ENTRY/EXIT
RJM CCI CALCULATE CHANNEL INDEX
LMN 1
STD T2
LDM CM+1,T2 CHECK ALTERNATE CHANNEL
SHN -11 CHECK IF ALTERNATE CHANNEL DEFINED AND UP
LMN 4
UJN CACX RETURN
CAN SPACE 4,10
** CAN - CONVERT ASCII NUMBER TO DISPLAY CODE.
*
* ENTRY (T3) = ADDRESS OF OUTPUT BUFFER.
* (T4) = ADDRESS OF 6-DIGIT ASCII NUMBER.
*
* EXIT (T3) ADVANCED.
* (T4) ADVANCED.
*
* USES T1, T3, T4.
CAN SUBR ENTRY/EXIT
LDDL T3
ADN 3
STDL T1
CAN1 LDIL T4
SHN -10
SBN 60-33 CONVERT ASCII TO DISPLAY CODE
SHN 6
STI T3 UPPER CHARACTER OF WORD
LDIL T4
LPC 377
SBN 60-33 CONVERT ASCII TO DISPLAY CODE
RAI T3 LOWER CHARACTER OF WORD
AODL T4
AODL T3
LMDL T1
NJN CAN1 IF MORE CHARACTERS TO CONVERT
UJN CANX RETURN
CBB SPACE 4,10
** CBB - CHECK BDLL *DISABLE ACCESS* BIT.
*
* ENTRY (DI) = DEVICE STATE TABLE INDEX.
*
* EXIT (A) .LT. 0, IF THE BIT FOR THIS CHANNEL IS SET.
* (A) .GE. 0, IF THE BIT FOR THIS CHANNEL IS CLEAR.
* (T1) = CHANNEL INDEX.
*
* CALLS CCI, RBD.
CBB SUBR ENTRY/EXIT
RJM CCI CALCULATE CHANNEL INDEX
LDC SHNI+21-7
SBD T1
STM CBBA
RJM RBD READ *BDLL*
LDD CM+3 CHECK *DISABLE ACCESS* BIT IN *BDLL*
SHN 21-7 CHECK IF BIT SET FOR FIRST CHANNEL
* SHN 21-10 (CHECK IF BIT SET FOR SECOND CHANNEL)
CBBA EQU *-1
UJN CBBX RETURN
CBC SPACE 4,10
** CBC - CLEAR BUFFER COUNT.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) = (RQLN,DI).
* BUFFER COUNT IN (RQLN,DI) CLEARED.
CBC SUBR ENTRY/EXIT
LDM RQLN,DI
LPC 4000
STM RQLN,DI
UJN CBCX RETURN
CBI SPACE 4,10
** CBI - CLEAR *BDT* ERROR PROCESSING INTERLOCKS.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* USES CM - CM+4.
*
* CALLS LNE, RBD, UBP.
*
* MACROS MONITOR.
CBI SUBR ENTRY/EXIT
LDN 0 INITIALIZE PARTITION SEARCH
CBI1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN CBIX IF NO MORE PARTITIONS
RJM RBD READ *BDLL*
LDD CM+3 CHECK IF THIS MF HOLDS INTERLOCK
SHN 21-12
PJN CBI2 IF THIS MF DOES NOT HOLD INTERLOCK
LDN CEPS CLEAR ERROR PROCESSING INTERLOCK
STD CM+1
LDD EO SET EST ORDINAL
STD CM+4
MONITOR MTEM
* LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK
STD CM+2
LDN 26 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
CBI2 LDD EO
UJN CBI1 CHECK FOR NEXT PARTITION
CCA SPACE 4,20
** CCA - CHECK CONTROLLER ATTRIBUTES.
* - DISABLE USAGE STATISTIC COUNTING.
* - ENABLE MASTER TERMINATE.
* - DISABLE EXTENT RESPONSE FOR MASTER TERMINATE.
* - ENABLE REPORTING DEVICE FAULT LOG.
* - SET SPEED SELECTION TO 10 MB IF 10 MB CHANNEL.
* - SET SPEED SELECTION TO 25 MB IF 25 MB CHANNEL.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (CT) = CHANNEL TYPE.
*
* EXIT TO *SRS1* WITH (RW) = 0, IF CHANNEL SPEED WRONG.
* TO *ERR*, IF LOAD CONTROLLER ATTRIBUTES ERROR.
*
* USES RW, TM, T1 - T3.
*
* CALLS ATT, IDT, SDT, SOC, WCB.
CCA SUBR ENTRY/EXIT
* RESTORE CONTROLLER ATTRIBUTES.
LDC C0202 RESTORE ATTRIBUTES OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJP CCA1.1 IF NOT SUCCESSFUL
RJM SDT SET DATA TRANSFER MODE FOR INTERLOCK
* CHECK ATTRIBUTE PARAMETERS D1, D2, D3, D4, AND D6.
LDC C0200 REPORT ATTRIBUTES OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDC 0#76C
STML CPBF+FCP
LDC 0#80D1 REPORT PARAMETERS D1,D2,D3,D4,D6
STML CPBF+FCP+1
LDC 0#D2D3
STML CPBF+FCP+2
LDC 0#D4D6
STML CPBF+FCP+3
LDN 14D COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDN 0
STDL T1
STDL T2
STDL T3
STDL TM DATA TRANSFER MODE IS STREAMING
CCA1 LDML ATTB,T1
LMML CCAA,T1
CCA1.1 NJN CCA2.1 IF PARAMETER ID NOT FOUND
AODL T1
SBN 11
PJN CCA2 IF ALL PARAMETERS CHECKED
LDML ATTB,T1
LMML CCAA,T1
NJN CCA3 IF PARAMETER SET WRONG
AODL T1
UJN CCA1 CHECK NEXT PARAMETER
CCA2 LDML ATTB+13
LPC 0#F02
LMML CTS,CT
NJN CCA3 IF ATTRIBUTE D6 INCORRECT
RJM ATT WAIT FOR COMPLETION RESPONSE
RJM SDT SET DATA TRANSFER MODE TO STREAMING
LJM CCAX EXIT
CCA2.1 LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE
RJM ERR PROCESS ERROR
* LOAD/SAVE ATTRIBUTES.
CCA3 LDML CCAA,T3 BUILD COMMAND PACKET
STML CPBF+FCP,T3
AODL T3
LMN 11
NJN CCA3 IF MORE PARAMETER WORDS TO MOVE
LDML ATTB+11
STML CPBF+FCP+11 PORT A,B CONTROLLER ADDRESS
LDML ATTB+12
STML CPBF+FCP+12 PORT C,D CONTROLLER ADDRESS
LDML ATTB+13
LPC 0#F0FD
LMML CTS,CT
STML CPBF+FCP+13 SELECT CHANNEL TRANSFER RATE
RJM ATT WAIT FOR COMPLETION RESPONSE
LDM RPBF
LMN 10
CCA3.1 NJP CCA2.1 IF ERROR
LDC C0209 LOAD ATTRIBUTE OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDC P02D1
STM CPBF+FCP RESTORE WORD WIPED OUT BY *ATT*
LDN 30D COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN CCA3.1 IF NOT SUCCESSFUL
RJM SDT SET DATA TRANSFER MODE
LDC C020A SAVE ATTRIBUTE OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDN 6
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN CCA3.1 IF NOT SUCCESSFUL
LDML ATTB+13
LPC 0#F02
LMML CTS,CT
ZJP CCAX IF CHANNEL TRANSFER SPEED CORRECT
LDN 0
STD RW
LJM SRS1 FORCE SLAVE RESET
CCAA BSS 0 EXPECTED CONTROLLER ATTRIBUTES
CONL P02D1,0#100
CONL P02D2,0#100
CONL P02D3,0#100
CONL P02D4,0#100
CONL 0#7D6
CCI SPACE 4,15
** CCI - CALCULATE CHANNEL INDEX.
*
* ENTRY (EO) = EST ORDINAL.
* (IR+4) = CHANNEL SERVICED BY THIS DRIVER.
*
* EXIT (A) = (T1) = INDEX INTO (CM+1) FOR THIS CHANNEL.
* (CM - CM+4) = *EQDE* WORD OF EST.
*
* USES T1.
*
* CALLS REE.
CCI SUBR ENTRY/EXIT
RJM REE READ EST ENTRY
LDD CM+1 EXTRACT CHANNEL
LMD IR+4
LPN 77
ZJN CCI1 IF PATH SERVICED BY THIS DRIVER
LDN 1
CCI1 STD T1 SET CHANNEL BYTE INDEX
UJN CCIX RETURN
CCO SPACE 4,20
** CCO - CHECK FOR CONTROLLER OVER TEMPERATURE.
*
* THIS ROUTINE SEARCHES THE RESPONSE PACKET FOR STATUS
* INDICATING AN OVER TEMPERATURE CONDITION. IF THERE IS
* AN OVER TEMPERATURE CONDITION, AN ERROR IS OPTIONALLY
* LOGGED TO THE BML, A BIT INDICATING OVER TEMPERATURE IS
* SET IN *BDLL*, AND AN OPERATOR ACTION MESSAGE IS GENERATED.
*
* ENTRY (A) = 0 IF BML MESSAGE SHOULD NOT BE ISSUED.
* (DT) = DRIVE TYPE.
*
* USES CM+2, T7.
*
* CALLS IDM, IEE, SRP, UBP.
CCO SUBR ENTRY/EXIT
STD T7
LDN ID16
RJM SRP SEARCH RESPONSE PACKET
MJN CCOX IF PARAMETER 16 NOT FOUND
LDML RPBF+6,T3
SHN 21-11
PJN CCOX IF NOT CONTROLLER OVER TEMPERATURE
LDM MSID
STM CCOA SAVE VALUES FROM CURRENT MESSAGE
LDM EDBF+FALT
STM CCOA+1
LDM EDBF+FCS2
STM CCOA+2
LDM MSGL+1
STM CCOA+3
LDML BMID,DT
SHN -11
STM MSID ERROR MESSAGE ID
LDN ECOT CONTROLLER OVERTEMPERATURE
STM EDBF+FALT FINAL FAULT CODE
LDD T7
ZJP CCO1 IF NOT ISSUING MESSAGE TO BML
* *HPA* DOES NOT DISPLAY THE DATA WITH SYMPTOM 0111 WHEN THE
* ERROR IS RECOVERABLE, SO TWO MESSAGES ARE ISSUED TO THE BML.
LCN 0
STM EDBF+FCS2 SET NO STATUS FOR *HPA*
LDN 5
STM MSGL+1 MESSAGE LENGTH
LDD HN
ERRNZ HD0100-100 CODE DEPENDS ON VALUE
RJM IDM ISSUE INITIAL BML MESSAGE
LDN 3
STM MSGL+1 MESSAGE LENGTH
LDC HD0111
RJM IDM ISSUE FINAL BML MESSAGE
LDM CCOA
STM MSID RESTORE VALUES IN CURRENT MESSAGE
LDM CCOA+1
STM EDBF+FALT
LDM CCOA+2
STM EDBF+FCS2
LDM CCOA+3
STM MSGL+1
* SET OVER TEMPERATURE BIT IN *BDLL*.
CCO1 LDN 1 NEW VALUE
STD CM+2
LDN 63 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
RJM IEE ISSUE *CHECK E,E DISPLAY* EVENT
UJP CCOX RETURN
CCOA BSS 4 SAVE AREA FOR VALUES FROM CURRENT MESSAGE
CCR SPACE 4,15
** CCR - CHECK FOR CHANNEL REQUEST.
*
* ENTRY (UC) = UNIT ACTIVITY COUNT.
* (IR+4) = CHANNEL NUMBER.
* AT *CCR2* FROM */3DZ/BST*.
*
* EXIT (A) = 0 IF CHANNEL DOWN.
* TO */3DZ/BST2* IF ENTRY WAS FROM */3DZ/BST*.
*
* USES CM+1, CR.
*
* CALLS DCR, RCT, SRF.
*
* MACROS DELAY, MONITOR.
CCR3 RJM SRF SET DRIVER RELOAD FLAG
CCR4 LDD CR
CCR SUBR /3DZ/BST2 ENTRY/EXIT
RJM RCT READ CHANNEL TABLE
SHN 21-5
MJN CCR3 IF CHANNEL GLOBALLY DOWN
LPN 40
ZJN CCR4 IF CHANNEL NOT REQUESTED
STM CHRQ DISABLE NEW ACTIVITY
LDD UC
NJN CCRX IF CURRENT ACTIVITY
RJM DCR DROP CHANNEL RESERVATION
* LDN 0
STM CHRQ ENABLE NEW ACTIVITY
CCR1 LDD CR
NJN CCRX IF CHANNEL RESERVED
* ENTERED HERE FROM *PRS*.
CCR2 DELAY WAIT AWHILE
LDD IR+4
STD CM+1 ATTEMPT TO RESERVE CHANNEL
MONITOR CCHM
LDD CM+2 SET RESERVATION STATUS
STD CR
RJM RCT READ CHANNEL TABLE
LPN 40
ZJN CCR1 IF CHANNEL NOT DOWN
UJP CCR3 SET DRIVER RELOAD FLAG
CCS SPACE 4,10
** CCS - CHECK CHANNEL STATE FOR SPECIFIED DEVICE.
*
* ENTRY (EO) = EST ORDINAL.
* (IR+4) = CHANNEL SERVICED BY THIS DRIVER.
*
* EXIT (A) = CHANNEL STATE.
*
* CALLS CCI.
CCS SUBR ENTRY/EXIT
RJM CCI CALCULATE CHANNEL INDEX
LDM CM+1,T1
SHN -11
SCN 4
UJN CCSX RETURN
CDA SPACE 4,15
** CDA - CONVERT DISK ADDRESS.
*
* ENTRY (T4) = RELATIVE CYLINDER NUMBER.
* (T5) = PHYSICAL TRACK.
* (T7) = LOGICAL SECTOR WITHIN PHYSICAL TRACK.
* (DT) = DRIVE TYPE.
*
* EXIT (T6) = LOGICAL TRACK.
*
* USES T1, T3 - T7, CM - CM+4.
*
* CALLS REE.
CDA SUBR ENTRY/EXIT
RJM REE READ EST ENTRY
LDD CM+4
SHN 3
ADN MDGL
CRD CM
LDD CM+1 SINGLE UNIT SECTOR LIMIT
STD T1
LDN 0 CLEAR SECTOR COUNT ACCUMULATOR
STD T3
LDC 3777 INITIALIZE LOGICAL TRACK CALCULATION
STD T6
LDML CFS,DT SET UP PHYSICAL TO LOGICAL SHIFTS
SHN -14
ADK SHNI
STM CDAA
STM CDAB
* MULTIPLY THE PHYSICAL TRACK NUMBER BY THE NUMBER OF LOGICAL
* SECTORS PER PHYSICAL TRACK.
CDA1 SOD T5
MJN CDA3 IF END OF CONVERSION
LDM PSPT,DT
CDAA SHN ** PHYSICAL SECTORS TO LOGICAL SECTORS
RAD T7 ADVANCE LOGICAL SECTOR COUNT
SHN -14
RAD T3
UJN CDA1 LOOP ON CONVERSION
* MULTIPLY THE CYLINDER NUMBER BY THE NUMBER OF LOGICAL SECTORS
* PER CYLINDER.
CDA2 LDML PSCY,DT
CDAB SHN ** PHYSICAL SECTORS TO LOGICAL SECTORS
RAD T7 ADVANCE LOGICAL SECTOR COUNT
SHN -14
RAD T3
CDA3 SOD T4
PJN CDA2 IF NOT END OF CONVERSION
* DIVIDE THE ACCUMULATED LOGICAL SECTOR COUNT BY THE NUMBER OF
* LOGICAL SECTORS PER LOGICAL TRACK. THE SINGLE UNIT SECTOR
* LIMIT IS USED, BECAUSE ONLY THE LOGICAL TRACK NUMBER (AND
* NOT THE LOGICAL SECTOR NUMBER) IS OF INTEREST.
CDA4 AOD T6 ADVANCE LOGICAL TRACK NUMBER
LDN 0
SBD T1 SINGLE UNIT SECTOR LIMIT
RAD T7
PJN CDA4 IF NO UNDERFLOW
AOD T7
SOD T3
PJN CDA4 IF DIVISION INCOMPLETE
LJM CDAX RETURN
CDS SPACE 4,15
** CDS - CHECK DEVICE STATUS.
*
* ENTRY (EO) = EST ORDINAL.
*
* EXIT (A) .LT. 0, IF DEVICE HAS NOT BEEN RECOVERED.
* (A) .GT. 0, IF DEVICE IS RECOVERD AND SHARED.
* (A) .EQ. 0, IF DEVICE IS RECOVERD AND NOT SHARED.
* (CM - CM+4) = *EQDE* WORD OF EST ENTRY.
*
* CALLS REE.
CDS SUBR ENTRY/EXIT
RJM REE READ EST ENTRY
LDD CM
SHN 21-6
MJN CDSX IF DEVICE UNAVAILABLE (NOT RECOVERED)
LDD CM
LPC 1000 ISOLATE *SHARED* STATUS
UJN CDSX RETURN
CDT SPACE 4,25
** CDT - CHECK DRIVE TYPE.
*
* VERIFY THAT THE CONFIGURED DRIVE MATCHES THE ACTUAL DRIVE
* TYPE. IF A DRIVE IS ACCESSED FROM 2 CONTROLLERS, THE DRIVE
* COULD BE RECLUSTERED FROM ONE CONTROLLER AND THE OTHER ONE
* WOULD NOT KNOW THE CHANGE OCCURRED. A SLAVE RESET MUST BE
* ISSUED TO CAUSE THE CONTROLLER TO REEVALUATE THE DRIVE.
*
* ENTRY (DN) = DRIVE NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
*
* EXIT TO *CMP* WITH CHECK DRIVE BIT CLEAR IF CORRECT
* NUMBER OF PHYSICAL DRIVES IN THE LOGICAL UNIT AND
* THE DRIVE ATTRIBUTES ARE CORRECT.
* TO *CMP10* IF ERROR IN PROGRESS ON A DIFFERENT DEVICE.
* TO *ERR* IF ERROR.
*
* USES CM+2, T2, T3.
*
* CALLS ATT, COD, CUF, DDT, SEP, UBP, VDA, WAC.
CDT BSS 0 ENTRY
* ALLOW ACTIVITY ON OTHER DRIVES TO COMPLETE BEFORE REPORTING
* ATTRIBUTE 68 FOR THE CONTROLLER. EVEN IF ISSUED, IT WOULD
* NOT BE EXECUTED UNTIL ALL COMMANDS IN PROGRESS COMPLETE.
RJM SEP SET ERROR PROCESSING INTERLOCK
NJP CMP10 IF ERROR IN PROGRESS ON A DIFFERENT DEVICE
RJM WAC WAIT FOR OTHER ACTIVITY TO COMPLETE
* CLEAR CONTROLLER OVER TEMPERATURE BIT IN *BDLL*.
LDN 0 SET NEW VALUE
STD CM+2
LDN 63 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
* CHECK DRIVE CONFIGURATION.
LDD DN
STM PHYD,DI PHYSICAL DRIVE
RJM DDT DETERMINE DRIVE TYPE
MJN CDT1 IF DRIVE NOT FOUND
LDM DDTA TOTAL DRIVES FOUND
STD T2
SBD DD TOTAL DRIVES EXPECTED
SBD PD
ZJN CDT2 IF CORRECT DRIVE COUNT
CDT1 LCN ERDA REPORT DEVICE ATTRIBUTES ERROR
RJM ERR PROCESS ERROR
CDT2 LDD T2
SHN 1
RAD T3
LDM ATTB,T3
SHN 21-4
PJN CDT4 IF NO PARITY DRIVE
SOD T2
CDT4 LDD T2 TOTAL DATA DRIVES FOUND
LMD DD EXPECTED DATA DRIVES
NJN CDT1 IF ERROR
LDM ATTB,T3
SHN 21-11
PJN CDT1 IF NOT CLUSTERED
RJM ATT WAIT FOR COMPLETION RESPONSE
LDC C0302 REPORT ADDRESSEE STATUS OPERATION CODE
RJM CUF CHECK IF UNIT FORMATTED
NJN CDT1 IF NOT FORMATTED
RJM VDA VERIFY DRIVE ATTRIBUTES
RJM COD CHECK FOR OFFLINE DRIVE
LDML DVTP,DI
LPC 157777 CLEAR *CHECK DRIVE TYPE* FLAG
STML DVTP,DI
LJM CMP EXIT
CEA SPACE 4,15
** CEA - CLEAR *ENABLE CONTROLLER ACTIVITY* REQUEST.
*
* ENTRY (EO) = EST ORDINAL FOR DEVICE.
* (IR+4) = CHANNEL NUMBER.
*
* EXIT CHANNEL ENABLE BIT CLEARED IN *MST* WORD *BDLL*.
* SPECIAL REQUEST BIT CLEARED.
*
* USES CM+2.
*
* CALLS CCI, CPF, UBP.
CEA SUBR ENTRY/EXIT
RJM CCI CALCULATE CHANNEL INDEX
LDN 0 NEW VALUE
STD CM+2
LDD T1 BIT TO CHANGE
ADN 49D
RJM UBP CLEAR ENABLE CHANNEL BIT IN *BDLL*
LDN ECAF CLEAR SPECIAL REQUEST IN *PUT*
RJM CPF
UJN CEAX RETURN
CEC SPACE 4,10
** CEC - CHECK FOR *ENABLE CONTROLLER ACTIVITY* REQUEST.
*
* EXIT (A) = 0, IF REQUEST IS FOR THIS CHANNEL.
*
* USES T1 - T7, CM.
*
* MACROS SFA.
CEC SUBR ENTRY/EXIT
SFA EST,EO CHECK EST ENTRY
ADK EQDE
CRD T1
LDD T1+4
SHN 3
ADN BDLL CHECK IF REQUEST IS FOR THIS CHANNEL
CRD T4
LDD T4
SHN -1
LPN 3
STD T4
ZJN CECX IF NEITHER CHANNEL FLAG IS SET
SBN 3
ZJN CECX IF BOTH CHANNEL FLAGS ARE SET
LDM T1,T4 COMPARE REQUESTED CHANNEL TO THIS CHANNEL
LMD IR+4
LPN 77
UJN CECX RETURN
CEP SPACE 4,15
** CEP - CLEAR ERROR PROCESSING INTERLOCK.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
* (ERPA) = (DI), IF ERROR PROCESSING ACTIVE ON DEVICE.
* (ERFL) = (DI), IF E.P. INTERLOCK SET FOR THIS DEVICE.
* (ERMF) = (DI), IF MMF RECOVERY INTERLOCK SET.
*
* EXIT (ERPA) = (ERRA) = 0, IF ERROR PROCESSING ACTIVE.
* (ERFL) = (ERRA) = 0, IF INTERLOCK SET.
* (ERMF) = 0, IF MMF RECOVERY INTERLOCK SET.
* MMF INTERLOCK(S) CLEARED.
*
* CALLS CBI, CDS, LNE.
*
* MACROS CMSTF, MONITOR.
CEP SUBR ENTRY/EXIT
LDM ERPA CHECK IF ERROR PROCESSING ACTIVE
LMD DI
NJN CEP1 IF NOT ACTIVE ON THIS DEVICE
STM ERPA CLEAR ERROR PROCESSING ACTIVE FLAG
STM ERRA ENABLE NEXT PASS THROUGH ERROR PROCESSOR
CEP1 LDM ERFL CHECK IF ERROR PROCESSING INTERLOCK SET
LMD DI
NJN CEPX IF NOT SET ON THIS DEVICE
STM ERFL CLEAR ERROR PROCESSING INTERLOCK FLAG
* CLEAR ERROR PROCESSING FLAGS IN *MST*.
CEP2 LDN 0 INITIALIZE PARTITION SEARCH
CEP3 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN CEP5 IF NO MORE PARTITIONS TO PROCESS
RJM CDS CHECK DEVICE STATUS
MJN CEP4 IF DEVICE NOT RECOVERED
CMSTF GDER CLEAR *ERROR RECOVERY IN PROGRESS* FLAG
CEP4 LDD EO
UJN CEP3 CHECK FOR NEXT PARTITION
* CLEAR MMF INTERLOCKS, IF SET.
CEP5 LDM ERMF CHECK IF RECOVERY ERROR INTERLOCK SET
ZJN CEP6 IF INTERLOCK NOT SET
LDN CRIS CLEAR RECOVERY ERROR PROCESSING INTERLOCK
STD CM+1
MONITOR MTEM
* LDN 0 CLEAR RECOVERY ERROR INTERLOCK FLAG
STM ERMF
CEP6 RJM CBI CLEAR *BDT* ERROR PROCESSING INTERLOCKS
UJP CEPX RETURN
CET SPACE 4,10
** CET - CHECK ELAPSED TIME.
*
* ENTRY (CETB) = TIME OF LAST GLOBAL MST CHECK.
*
* EXIT (A) .LT. 0, IF NOT TIME TO CHECK GLOBAL MST-S.
* (DVTP) BIT 7 SET FOR SHARED PARITY DEVICES, IF TIME.
* (CETB) UPDATED, IF TIME TO CHECK GLOBAL MST-S.
*
* USES T1, T2, CM - CM+4.
CET SUBR ENTRY/EXIT
LDK RTCL GET CURRENT CLOCK
CRD CM
LDD CM+1 COMPARE LOW ORDER BYTE OF SECONDS
SBM CETB CALCULATE ELAPSED TIME
PJN CET1 IF NO UNDERFLOW
ADC 10000 CORRECT FOR UNDERFLOW
CET1 SBN SBUR
MJN CETX IF ELAPSED TIME LESS THAN *SBUR* SECONDS
LDD CM+1 SAVE CURRENT CLOCK VALUE
STM CETB
* SET *CHECK MMF ACCESS* FLAGS FOR ALL SHARED PARITY DEVICES.
LDC DSTB-DSTBE
* UJN CETX (NO SHARED DEVICES CONFIGURED)
CETA EQU *-2
STD T1
CET2 LDN DSTBE PROCESS NEXT DEVICE
RAD T1
LMM DASB
ZJN CETX IF NO MORE DEVICES TO PROCESS
LDM DVTP,T1
LPN 77
STD T2 DRIVE TYPE
LDML DM,T2
SHN 21-17
PJN CET2 IF NOT PARITY DEVICE
LDML DVTP,T1
SHN 21-11
PJN CET2 IF NOT SHARED DEVICE
SHN -21+11+22
LPC 177577
LMC 200 SET *CHECK MMF PARITY ACCESS* FLAG
STML DVTP,T1
UJN CET2 PROCESS NEXT DEVICE
CETB CON 0 TIME OF LAST GLOBAL MST CHECK (SECONDS)
CFM SPACE 4,15
** CFM - CLEAR *FORMAT PENDING* FLAG IN MST(S).
*
* IF FORMAT IS COMPLETE ON ALL UNITS OF A DEVICE, CLEAR *FP*
* IN THE MST(S) FOR ALL PARTITIONS OF THAT DEVICE.
*
* ENTRY (EO) = EST ORDINAL FOR DEVICE.
*
* EXIT MST(S) UPDATED IF FORMAT COMPLETE.
*
* USES CM - CM+4, CW - CW+4.
*
* CALLS LNE.
*
* MACROS CMSTF, PUTE.
CFM SUBR ENTRY/EXIT
LDI DI *PUT* ORDINAL OF FIRST UNIT OF DEVICE
ERRNZ PUTO CODE DEPENDS ON VALUE
CFM1 SHN PUTLS
PUTE *
ADC HSCT GET *PUT* ORDINAL OF NEXT UNIT
CRD CM
ADN PILL-HSCT GET SPECIAL REQUEST FLAGS
CRD CW
LDD CW+3
SHN 21-FCRF-14
MJN CFMX IF FORMAT REQUEST SET FOR THIS UNIT
LDD CM+4
NJN CFM1 IF ADDITIONAL UNITS IN DEVICE
* LDN 0 INITIALIZE PARTITION SEARCH
CFM2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN CFMX IF NO MORE PARTITIONS
CMSTF LFPR CLEAR *FORMAT PENDING* FLAG IN MST
LDD EO
UJN CFM2 SEARCH FOR NEXT PARTITION
CFR SPACE 4,25
** CFR - CHECK *PUT* FOR REQUEST.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (FC) = 0 IF FORMATTING OF DRIVES NOT COMPLETE.
*
* EXIT TO SPECIAL REQUEST OR IO ROUTINE AS APPLICABLE WITH -
* (PO) = *PUT* ORDINAL.
* (CB) = *CBT* ORDINAL.
* (EO) = EST ORDINAL.
* (RW) = READ / WRITE FLAG.
* (CN) = CONTROLLER NUMBER.
* (DN) = DRIVE NUMBER.
* (WB - WB+4) = *UNCT* WORD OF *PUT* ENTRY.
* (DI) = DEVICE STATE TABLE ADDRESS.
* TO *ERR* IF CONTROLLER ERROR.
* TO *CFF* TO CHECK FOR FORMAT REQUEST.
* TO *ISR* TO PROCESS SPECIAL REQUEST.
* TO *PIO* TO PROCESS I/O REQUEST.
* TO *ROD* TO RESTORE AN OFF-LINE DRIVE.
*
* USES CM+3.
*
* CALLS CMP8, ECI, IDU, IIO, ISR, LDP, ROD.
CFR9 LDM RSDI CHECK IF RESTORE IN PROGRESS
LMD DI
NJN CFRX IF NO RESTORE IN PROGRESS ON THIS DEVICE
STM RMUX CLEAR MULTIPLEX COUNT
RJM ROD RESTORE OFF-LINE DRIVE
CFR SUBR ENTRY/EXIT
RJM ECI EXAMINE CONTROLLER INTERRUPTS
* RJM CMP8 (TERMINATION PROCESSING)
CFRA EQU *-1
NJN CFRX IF DEVICE SHOULD NOT BE PROCESSED
LDD FC
NJN CFR0 IF FORMAT COMPLETE
LJM CFF CHECK FOR FORMAT
CFR0 RJM LDP LOAD DEVICE PARAMETERS
LDML DVTP,DI CHECK FOR INTERNAL SPECIAL REQUESTS
SHN 6-15
LPC 100 ISOLATE *CHECK DRIVE TYPE* FLAG
ZJN CFR1 IF NO INTERNAL SPECIAL REQUESTS PENDING
STD CM+3 SET INTERNAL SPECIAL REQUESTS
CFR1 LDD CM+3
NJN CFR2 IF SPECIAL REQUEST
LDD WB+3
CFR1.1 ZJN CFR9 IF NO I/O REQUEST
CFR2 LDD CM+4
ZJN CFR3 IF UNIT NOT INTERLOCKED
LMD OA
CFR2.1 NJN CFRX IF UNIT INTERLOCKED BY OTHER DRIVER
CFR3 LDD CM+3
ZJN CFR5 IF NOT SPECIAL REQUEST
RJM ROD SEE IF TIME TO ISSUE RESTORE
RJM ISR IDENTIFY AND PROCESS SPECIAL REQUEST
UJN CFR1 CHECK FOR ANOTHER REQUEST
CFR5 LDD CB
RJM IIO INITIATE I/O
ZJN CFR1.1 IF I/O NOT ENABLED ON THIS ACCESS
RJM IDU INTERLOCK DISK UNIT
NJN CFR2.1 IF INTERLOCK NOT AVAILABLE
LDML CTST,CI
SHN 21-15
PJN CFR6 IF CONTROLLER FUNCTIONAL
LDN ECMD CONTROLLER DEAD
RJM ERR PROCESS ERROR
CFR6 RJM ROD SEE IF TIME TO ISSUE RESTORE
LJM PIO PROCESS I/O REQUEST
CLP SPACE 4,10
** CLP - CLEAR *LOST PARITY* FLAGS.
*
* USES CM - CM+4.
*
* CALLS CDS, LNE.
*
* MACROS CMSTF, MONITOR.
CLP SUBR ENTRY/EXIT
LDML DVTP,DI CLEAR *PROCESS LOST PARITY* FLAG, IF SET
LPC 137777
STML DVTP,DI
LDN 0 INTIALIZE PARTITION SEARCH
CLP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN CLPX IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
MJN CLP2 IF DEVICE NOT RECOVERED
LDD EO SET EST ORDINAL
STD CM+1
LDN 0
STD CM+2
LDN SOUS CLEAR OFFLINE UNIT IN *ACGL*
STD CM+3
MONITOR STBM
CMSTF GDPL CLEAR *PARITY PROTECTION LOST* FROM *ACGL*
CLP2 LDD EO
UJN CLP1 PROCESS NEXT PARTITION
CLU SPACE 4,40
** CLU - CLUSTER LOGICAL UNIT.
*
* ENTRY (DT) = DRIVE TYPE.
* (CN) = CONTROLLER NUMBER.
* (DD) = NUMBER OF DATA DRIVES IN DEVICE.
* (DN) = DRIVE NUMBER.
* (PD) = NUMBER OF PARITY DRIVES IN DEVICE.
*
* EXIT TO *ERR* IF ERROR.
* COMMAND PACKET WRITTEN THE FOLLOWING VALUES, WHERE
* X INDICATES THE UNIT NUMBER (RANK IN THE CABINET).
*
* <- 5832 -> <-------- 5833 / 5838 / 47444 --------->
* -1 -2 -1 -1P -2 -2P -3 -3P -4
*
* LENGTH 000C 0010 000C 0010 0010 0014 0014 0018 0018
*
* CPBF+FCP+0 0568 0968 0568 0968 0968 0D68 0D68 1168 1168
*
* 1 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X01
* 2 8600 8680 8A00 8A80 8A80 8A80 8A80 8A80 8A80
*
* X X X X X X X
* 3 ---- 0801 ---- 1801 0801 0801 0801 0801 0801
* 4 ---- 8680 ---- 8A10 8A80 8A80 8A80 8A80 8A80
*
* X
* 5 ---- ---- ---- ---- ---- 1801 1X01 1X01 1X01
* 6 ---- ---- ---- ---- ---- 8A10 8A80 8A80 8A80
*
* X X
* 7 ---- ---- ---- ---- ---- ---- ---- 1801 1801
* 8 ---- ---- ---- ---- ---- ---- ---- 8A10 8A80
*
* USES T1.
*
* CALLS ATT, SOU, SRP, WCB.
CLU SUBR ENTRY/EXIT
LDC C0209 LOAD ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LPN 77B
SHN 10
ADN 1
STML CPBF+FCP+1 FIRST DRIVE
ADC 0#800
STML CPBF+FCP+3 SECOND DRIVE
ADC 0#800
STML CPBF+FCP+5 THIRD DRIVE
ADC 0#800
STML CPBF+FCP+7 FOURTH DRIVE
LDD DD NUMBER OF DATA DRIVES
ADD PD NUMBER OF PARITY DRIVES
SBN 1 TOTAL DRIVES LESS 1
SHN 1 SET PARAMETER BLOCK INDEX
STD T1
SHN 1+10B BUILD CLUSTER PARAMETER
ADC P0568
STML CPBF+FCP
LDD DT
IFNE EQEA,0,2
SBK EQEA
MJN CLU1 IF NOT 5832 SOLID STATE DEVICE
SBK EQEC-EQEA
PJN CLU1 IF NOT 5832 SOLID STATE DEVICE
LDC 0#8680
UJN CLU2 CONTINUE SETUP
CLU1 LDC 0#8A80
CLU2 STML CPBF+FCP+2
STML CPBF+FCP+4
STML CPBF+FCP+6
STML CPBF+FCP+10
LDD T1
NJN CLU3 IF NOT 1X DRIVE
LDC -0#80 CLEAR PARALLEL BIT
RAML CPBF+FCP+2
CLU3 LDD PD
ZJN CLU4 IF NOT A PARITY DEVICE
LDML CPBF+FCP+7 MAKE LAST DRIVE PARITY DRIVE
STML CPBF+FCP+1,T1
LDC 0#10-0#80 CLEAR PARALLEL BIT, SET PARITY BIT
RAML CPBF+FCP+2,T1
* COMMAND PACKET SETUP COMPLETE FOR ALL CONFIGURATIONS.
CLU4 LDD T1
SHN 1
ADK 0#C
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN CLU10 IF NOT SUCCESSFUL
* WAIT FOR ASYNCHRONOUS RESPONSE FROM DRIVE.
CLU9 LDN ASRT
RJM ATT PROCESS ATTENTION
NJN CLU10 IF ERROR
LDD CN
SHN 10
ADD DN
LMML RPBF+CUN
NJN CLU9 IF WRONG UNIT
LDN ID26
RJM SRP SEARCH RESPONSE PACKET
MJN CLU10 IF ID26 NOT FOUND
LDML RPBF+5,T3
SBN 7
MJN CLU10 IF PARAMETER TOO SHORT
LDML RPBF+5+3,T3
SHN 21-13
MJP CLUX IF READ READY
CLU10 LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE
RJM ERR PROCESS ERROR
CMC SPACE 4,10
** CMC - CHECK MONITOR COMPLETE.
*
* EXIT (A) = (CW) = 0.
*
* USES CW - CW+4.
*
* CALLS AME.
*
* MACROS DELAY.
CMC SUBR ENTRY/EXIT
CMC1 LDD OA CHECK OUTPUT REGISTER
CRD CW
LDD CW
ZJN CMCX IF NO REQUEST WAITING FOR RESPONSE
SHN 21-13
PJN CMC2 IF REISSUE FLAG NOT SET
SHN 13-21
LPC 177 CLEAR FLAGS
STD CW
LDD OA UPDATE OUTPUT REGISTER
CWD CW
RJM AME REISSUE REQUEST
UJN CMC3 DELAY AND RECHECK
CMC2 SHN 13-21
LPC 177
SBN CPUM
PJN CMC3 IF NOT *MTR* REQUEST
LDK PPRL SET *MTR* REQUEST FLAG
CRD CW
LDD OA
STD CW
LDK PPRL
CWD CW
CMC3 DELAY
UJN CMC1 RECHECK OUTPUT REGISTER
CMN SPACE 4,15
** CMN - CHECK MODEL NUMBER.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (DN) = DRIVE NUMBER.
* (DT) = DRIVE TYPE.
*
* EXIT TO *ERR* IF WRONG DRIVE TYPE.
*
* USES T1, T2.
*
* CALLS ATT, DDT, IDT, SCP, SOU.
CMN4 RJM ATT WAIT FOR COMPLETION RESPONSE
CMN SUBR ENTRY/EXIT
LDD DN
STM PHYD,DI PHYSICAL DRIVE
RJM DDT DETERMINE DRIVE TYPE
MJN CMN4 IF DRIVE NOT FOUND
RJM ATT WAIT FOR COMPLETION RESPONSE
LDC C0200 REPORT ATTRIBUTES OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC 0#8050
STML CPBF+FCP+1
LDC 0#36C
RJM SCP SET COMMAND PARAMETER
LDN 10D COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDM DDTA DRIVES PER LOGICAL UNIT
STDL T1
LDN 0
STDL T2
CMN1 LDML ATTB+26D,T2
NJN CMN2 IF MODEL NUMBER PRESENT
SODL T1
ZJN CMN3 IF NO MODEL NUMBER
LDN 14
RADL T2
UJN CMN1 CONTINUE SEARCH FOR MODEL NUMBER
CMN2 LMML MN,DT EXPECTED MODEL NUMBER
ZJN CMN3 IF CORRECT MODEL NUMBER
LDC -WDTP WRONG DRIVE TYPE
RJM ERR PROCESS ERROR
CMN3 UJP CMN4 WAIT FOR COMPLETION RESPONSE
CMP SPACE 4,25
** CMP - COMPLETE PROCESSING.
*
* ENTRY AT *CMP* IF SPECIAL REQUEST OR I/O REQUEST
* COMPLETED SUCCESSFULLY.
* AT *CMP1* IF UNRECOVERED ERROR.
* AT *CMP2* FROM *ERR* IF SUSPECT STATE WAS JUST
* SET FOR THE DEVICE.
* AT *CMP8* IF PP BEING DROPPED.
* AT *CMP10* TO ABANDON REQUEST (WILL BE RETRIED LATER).
* (DI) = DEVICE STATE TABLE ADDRESS.
* (UC) = UNIT ACTIVITY COUNT.
* (RW) = READ / WRITE STATUS.
*
* EXIT TO *DAS1*.
* (UC) = UNIT ACTIVITY COUNT DECREMENTED.
*
* USES UC, WB+3, WB+4.
*
* CALLS CBC, CEP, CMC, CRF, CRP, DMP, IDM, IMR, RCR.
CMP10 RJM RCR RESET CHANNEL REGISTERS
RJM CBC CLEAR BUFFER COUNT
* UJN CMP ABANDON REQUEST
CMP LDM ERCT,DI
ZJN CMP3 IF NO ERRORS
LDN 3
STM MSGL+1 SET BASIC MESSAGE LENGTH
CMP1 AOM ERCT,DI
LDC HD0111 ISSUE FINAL BML MESSAGE
RJM IDM
CMP2 LDN 0 CLEAR ERROR COUNT
STM ERCT,DI
CMP3 RJM CEP CLEAR ERROR PROCESSING, IF SET
RJM CRF CLEAR RESET FLAGS, IF SET
LDM CFFA
LMD DI
NJN CMP4 IF NO FORMAT IN PROGRESS ON DEVICE
STM CFFA CLEAR *FORMAT IN PROGRESS* FLAG
* INCLUDE *PROBE* DATA IN FINAL *BIOM* REQUEST.
CMP4 LDD RW SET DATA TRANSFER DIRECTION
SHN 13-0
LMM CSCT,DI APPEND CUMULATIVE SECTOR COUNT
STD WB+4
LDM RQLN,DI
CMP5 ZJN CMP7 IF UNIT NOT INTERLOCKED
STD WB+3
LDM RSDI CHECK IF RESTORE IN PROGRESS
LMD DI
NJN CMP6 IF NO RESTORE IN PROGRESS ON THIS DEVICE
LDD WB+3
LPN 77
STD WB+3
ZJN CMP7 IF NO BUFFERS TO DELINK
LDN DCBS DELINK BUFFERS (LEAVE INTERLOCK SET)
RJM IMR
RJM CBC CLEAR BUFFER COUNT (LEAVE INTERLOCK SET)
UJN CMP7 CHECK MONITOR COMPLETE
CMP6 LDN DCBS DELINK BUFFERS / RELEASE UNIT INTERLOCK
RJM IMR
* LDN 0 CLEAR UNIT INTERLOCKED FLAG
STM RQLN,DI
SOD UC ADJUST UNIT ACTIVITY COUNT
CMP7 RJM CMC CHECK MONITOR COMPLETE
* LDN 0
STM ADDR,DI CLEAR REENTRY ADDRESS
STM ATTN,DI CLEAR INTERRUPT ADDRESS
STM CSCT,DI CLEAR CUMULATIVE SECTOR COUNT
STM SREQ,DI CLEAR SPECIAL REQUEST FLAG
LJM DAS1 PROCESS NEXT DEVICE
* TERMINATION PROCESSING.
CMP8 CON 0
RJM CRF CLEAR RESET FLAGS, IF SET
RJM CEP CLEAR ERROR PROCESSING, IF SET
RJM CRP CLEAR *RESTORE IN PROGRESS*, IF SET
LDN 0 CLEAR *PROBE* DATA
STD WB+4
LDD PD
ZJN CMP9 IF NOT PARITY DEVICE
LDML DVTP,DI
SHN 21-11
PJN CMP9 IF NOT MMF SHARED DEVICE
RJM DMP DISABLE MMF PARITY DEVICE ACCESS
CMP9 RJM CBC CLEAR BUFFER COUNT
UJP CMP5 RELEASE UNIT INTERLOCK, IF SET
CMR SPACE 4,15
** CMR - CHECK FOR MMF *RESTORE* FLAGS.
*
* ENTRY (EO) = EST ORDINAL.
*
* EXIT (A) .EQ. 0, IF RESTORE NOT IN PROGRESS.
* (A) .GT. 0, IF RESTORE IN PROGRESS FOR ANY PARTITION.
* (A) .LT. 0, IF RESTORE INITIATION FOR ANY PARTITION.
* (CMRA) = EST ORDINAL OF DEVICE WITH RESTORE FLAG SET.
* (CMRA) = 0, IF NO EST WITH RESTORE FLAG FOUND.
*
* USES T4.
*
* CALLS CDS, GCA, LNE.
CMR3 LDD T4 RETURN STATUS
SHN 21-3
CMR SUBR ENTRY/EXIT
LDN 0
STD T4
STM CMRA
* LDN 0 INITIALIZE PARTITION SEARCH
CMR1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN CMR3 IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
MJN CMR2 IF DEVICE NOT RECOVERED
ZJN CMR2 IF NOT SHARED DEVICE
RJM GCA GET CURRENT *ACGL*
LDD CM+4
LPN 11 CHECK *RESTORE* AND *RESTORE INITIATION*
ZJN CMR2 IF NEITHER BIT SET
STD T4 SAVE STATUS
LDD EO
STM CMRA SAVE EST ORDINAL
CMR2 LDD EO
UJN CMR1 CHECK FOR NEXT PARTITION
CMRA CON 0 EST ORDINAL WITH *RESTORE* SET
COD SPACE 4,10
** COD - CHECK FOR OFF-LINE DRIVE.
*
* ENTRY (PD) = PARITY DEVICE FLAG.
*
* EXIT (A) = 0, IF NO OFFLINE DRIVE FOUND.
*
* CALLS ATT, RDO, SOU, WCB.
COD1 LDN 0 INDICATE NO OFFLINE DRIVE FOUND
COD SUBR ENTRY/EXIT
LDD PD
ZJN CODX IF NOT A PARITY DEVICE
LDC C0302 REPORT ADDRESSEE STATUS OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT WAIT FOR COMPLETION RESPONSE
NJN COD1 IF ERROR
LDML RPBF+11
SHN 21-11
PJN COD1 IF NO OFF-LINE DRIVE DETECTED
SHN -21+11+22 SET PHYSICAL DRIVE ID
LPN 37
STM PHYD,DI
STM OUPD,DI SET OFFLINE UNIT
RJM RDO REPORT DRIVE OFFLINE
LDN 1 INDICATE OFFLINE DRIVE FOUND
UJN CODX RETURN
CPC SPACE 4,10
** CPC - CHECK FOR PARALLEL CONTROLLER.
*
* ENTRY (DT) = DRIVE TYPE.
*
* EXIT TO *ERR* IF CONTROLLER DOES NOT SUPPORT THIS DRIVE.
*
* CALLS ATT, IDT, SOC.
CPC1 RJM ATT WAIT FOR COMPLETION RESPONSE
CPC SUBR ENTRY/EXIT
LDD DD DATA DRIVES PER LOGICAL UNIT
SBN 1
ZJN CPCX IF THIS DRIVE WILL WORK IN SERIAL MODE
LDC C0200 REPORT ATTRIBUTES OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDC 0#36C
STML CPBF+FCP
LDC 0#80DA
STML CPBF+FCP+1 REPORT PARAMETER DA
LDN 10D COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDML ATTB+1
SHN 21-10
MJN CPC1 IF CONTROLLER SUPPORTS PARALLEL DRIVES
LDC -PNSP CONTROLLER DOES NOT SUPPORT PARALLEL
RJM ERR PROCESS ERROR
CPE SPACE 4,20
** CPE - CHECK IF PARITY DRIVE ENABLED.
*
* ENTRY (FFDA) = 0 IF FAILING DRIVE IN RESPONSE PACKET.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
* (FC) = FORMAT COMPLETE FLAG.
* (PD) = 0, IF NOT PARITY DEVICE.
* (IPPA) = 1.
*
* EXIT (CPEA) = 0 IF PARITY DRIVE AND RESPONSE HAS FAILING
* DRIVE.
* (T2) = (RPBF+9) FROM REPORT ADDRESSEE STATUS.
* TO *ERR* IF ERROR.
*
* USES T2.
*
* CALLS ATT, SOU, WCB.
CPE SUBR ENTRY/EXIT
LDD PD PARITY DRIVE INDICATOR
ZJN CPEX IF NOT A PARITY DEVICE
LDM SREQ,DI
NJN CPEX IF SPECIAL REQUEST
LDML CTST,CI
SHN 21-15
MJN CPEX IF CONTROLLER DEAD
LDD FC
ZJN CPEX IF FORMAT NOT COMPLETE
LDM FFDA
NJN CPEX IF NO FAILING DRIVE
LDC C0302 REPORT ADDRESSEE STATUS
RJM SOU SET OPERATION CODE AND UNIT
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
ZJN CPE2 IF SUCCESSFUL
LCN ERDA REPORT DEVICE ATTRIBUTES ERROR
RJM ERR PROCESS ERROR
CPE2 LDML RPBF+11
STDL T2
SHN 3
PJN CPE4 IF LOGICAL UNIT NOT READ READY
SHN 1
PJN CPE4 IF NO PARITY DRIVE
SHN 4
PJN CPE3 IF NO OFF-LINE DRIVE
SHN -10 RIGHT JUSTIFY OFF-LINE UNIT NUMBER
LMM PHYD,DI
LPN 37
NJN CPE4 IF FAILING DRIVE NOT OFF-LINE
CPE3 LDN 0
STM CPEA
CPE4 UJP CPEX RETURN
CPEA CON 0
CPF SPACE 4,15
** CPF - CHANGE *PILL* FIELD IN *PUT*.
*
* ENTRY (A) = 6/V, 6/N, 6/B.
* V = VALUE TO SET INTO SPECIFIED FIELD.
* N = NUMBER OF BITS - 1 TO CLEAR.
* B = LOW ORDER BIT NUMBER TO CHANGE.
* (DI) = DEVICE STATUS TABLE ENTRY ADDRESS.
*
* EXIT (A) = 0.
*
* USES T6, T7, CM+1 - CM+4.
*
* MACROS MONITOR, PUTE.
CPF SUBR ENTRY/EXIT
STD T6 SAVE FIELD SIZE AND LOW ORDER BIT
SHN -14
STD CM+2 NEW VALUE
LDD T6
SHN 6
STD T7 SET BIT NUMBER
SHN -14
ADC PILL*100+1 WORD OFFSET
STD T6
LDD MA
CWD T6 STORE MESSAGE BUFFER PARAMETERS
LDN 1
STD CM+1 PARAMETER WORD COUNT
LDI DI
ERRNZ PUTO CODE DEPENDS ON VALUE
SHN PUTLS
PUTE *
ADC 0 SET BASE *PUT* ENTRY ADDRESS
STD CM+4
SHN -14
STD CM+3
MONITOR UTEM CLEAR *PUT* FLAG
* LDN 0
UJN CPFX RETURN
CRF SPACE 4,10
** CRF - CLEAR RESET FLAGS.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (SRSA) = (DI), IF RESET IN PROGRESS ON DEVICE.
*
* USES RF.
*
* CALLS CRI, IOM.
CRF SUBR ENTRY/EXIT
LDM SRSA CHECK RESET FLAG
LMD DI
NJN CRFX IF NO RESET IN PROGRESS ON THIS DEVICE
STM SRSA CLEAR RESET FLAG
STD RF CLEAR *RESET FAILED*
RJM CRI CLEAR SLAVE RESET INTERLOCK, IF SET
LDN 0 CLEAR OPERATOR MESSAGE
RJM IOM
UJN CRFX RETURN
CRI SPACE 4,10
** CRI - CLEAR SLAVE RESET INTERLOCK.
*
* ENTRY (CRIB) = 0, IF SLAVE RESET INTERLOCK NOT SET.
*
* CALLS IFR.
CRI SUBR ENTRY/EXIT
CRIA LDC ** (SLAVE RESET INTERLOCK FLAG)
* UJN CRIX (NO SHARED BUFFERED DEVICES CONFIGURED)
CRIB EQU *-1
ZJN CRIX IF SLAVE RESET INTERLOCK NOT SET
LCN /MMF/DSRI CLEAR *DAS SLAVE RESET INTERLOCK* FLAG BIT
RJM IFR
LDN 0 CLEAR *SLAVE RESET INTERLOCK SET* FLAG
STM CRIB
UJN CRIX RETURN
CRP SPACE 4,15
** CRP - CLEAR *RESTORE IN PROGRESS* FLAGS.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
* (RSIN) = (DI), IF RESTORE INTERLOCK SET ON DEVICE.
*
* USES CM - CM+4.
*
* CALLS CPF, CDS, LNE, RBD, UBP.
*
* MACROS CMSTF, MONITOR.
CRP4 LDN RSPF CLEAR *RESTORE* SPECIAL REQUEST FLAG
RJM CPF
STM SREQ,DI CLEAR SPECIAL REQUEST FLAG
CRP SUBR ENTRY/EXIT
LDM RSIN CHECK RESTORE INTERLOCK FLAG
LMD DI
NJN CRPX IF INTERLOCK NOT SET FOR THIS DEVICE
STM RSIN CLEAR RESTORE INTERLOCK FLAG
STM RSDI CLEAR *RESTORE IN PROGRESS* FLAG
* LDN 0 INITIALIZE PARTITION SEARCH
CRP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN CRP4 IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
ZJN CRP2 IF DEVICE RECOVERED BUT NOT SHARED
RJM RBD READ *BDLL*
LDD CM+3 CHECK IF THIS MF HOLDS *RESTORE* INTERLOCK
SHN 21-11
PJN CRP3 IF THIS MF DOES NOT HOLD INTERLOCK
CRP2 CMSTF GDUR CLEAR *RESTORE IN PROGRESS* FROM *ACGL*
CMSTF GDRI CLEAR *RESTORE INITIATION* FROM *ACGL*
LDD EO SET EST ORDINAL
STD CM+1
LDN 0
STD CM+2
LDN SRCS CLEAR REMAINING CYLINDERS / 100B IN *ACGL*
STD CM+3
MONITOR STBM
RJM CDS CHECK DEVICE STATUS
MJN CRP3 IF DEVICE NOT RECOVERED
ZJN CRP3 IF NOT SHARED DEVICE
LDD EO SET EST ORDINAL
STD CM+4
LDN CRPS CLEAR RESTORE PARITY INTERLOCK IN *BDT*
STD CM+1
MONITOR MTEM
* LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK
STD CM+2
LDN 25 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
CRP3 LDD EO
UJP CRP1 PROCESS NEXT PARTITION
CSC SPACE 4,10
** CSC - COMPUTE SECTOR COUNT FOR RESTORE.
*
* ENTRY (DT) = DRIVE TYPE.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (CPBF+FCP+2) = NUMBER OF SECTORS TO RESTORE.
*
* USES T1 - T3.
CSC2 LDM PSPT,DT
SBD T2
RAD T3 ADD SECTORS FOR LAST TRACK
STM CPBF+FCP+2 SECTOR COUNT
CSC SUBR ENTRY/EXIT
LDM RTSN
STM TKSN,DI FOR ERROR LOGGING
SHN 14
STD T1 STARTING TRACK
SHN -14
STD T2 STARTING SECTOR
LDD T1
SHN 10
ADD T2
STML CPBF+FCP+4 STARTING TRACK, SECTOR
LDN 0
STD T3
STM CPBF+FCP+1 UPPER 2 BYTES OF SECTOR COUNT
CSC1 AOD T1
LDM LSOC,DT
SHN -6
SBD T1
MJN CSC2 IF LAST TRACK
LDM PSPT,DT
RAD T3 COMPUTE SECTOR COUNT
UJN CSC1 INCREMENT TRACK NUMBER
CSN SPACE 4,15
** CSN - COMPARE CONTROLLER SERIAL NUMBERS.
*
* COMPARE THE CONTROLLER SERIAL NUMBER IN THE *BDT* ENTRY
* FOR THE SPECIFIED DEVICE WITH THE SERIAL NUMBER OF THE
* CONTROLLER PROCESSING THE DEVICE ON THIS CHANNEL.
*
* ENTRY (A) = EST ORDINAL.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
*
* EXIT (A) = 0, IF CONTROLLER SERIAL NUMBER MATCHES.
*
* USES CM - CM+4.
*
* MACROS MONITOR.
CSN SUBR ENTRY/EXIT
* GET SERIAL NUMBER OF CONTROLLER PERFORMING *RESTORE*.
STD CM+4 SET EST ORDINAL
LDN GBDS GET *BDT* ENTRY
STD CM+1
MONITOR MTEM
LDD MA READ *BDT* ENTRY
CRD CM
* COMPARE WITH THIS CONTROLLER-S SERIAL NUMBER.
LDD CM+2
LMM CTSN,CI
NJN CSNX IF NOT THE SAME SERIAL NUMBER
LDD CM+3
LMM CTSN+1,CI
NJN CSNX IF NOT THE SAME SERIAL NUMBER
LDD CM+4
LMM CTSN+2,CI
UJN CSNX RETURN STATUS
CSR SPACE 4,10
** CSR - CLEAR SPECIAL REQUEST.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT TO *CMP*.
*
* CALLS CPF.
CSR BSS 0 ENTRY
LDM SREQ,DI
ZJN CSR1 IF NO SPECIAL REQUEST IN PROGRESS
LPN 77
SBN ECAF+ISRB-ISRA
PJN CSR1 IF INTERNAL SPECIAL REQUEST
LDM SREQ,DI
RJM CPF CLEAR SPECIAL REQUEST FROM *PUT*
CSR1 LJM CMP COMPLETE PROCESSING
CTO SPACE 4,10
** CTO - CHECK TIMEOUT.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) .LT. 0 IF NOT TIMEOUT.
*
* USES T6, T7, CM - CM+4.
*
* MACROS FTTE.
CTO SUBR ENTRY/EXIT
LDI DI
ERRNZ PUTO CODE DEPENDS ON VALUE
SHK FTTLS
FTTE *
ADC 0 READ *FTT* ENTRY
CRD CM
LDC RTCL FETCH CURRENT CLOCK VALUE
CRD T6
LDD T6 CHECK ELAPSED TIME
SBD CM+3
MJN CTOX IF NOT TIMEOUT
SHN 14
ADD T7
SBD CM+4
UJN CTOX RETURN
CUF SPACE 4,10
** CUF - CHECK IF UNIT FORMATTED.
*
* ENTRY (A) = OPERATION CODE.
* (DT) = DRIVE TYPE.
*
* EXIT (A) = 0 IF DRIVE FORMATTED WITH CORRECT SECTOR SIZE.
* TO *ERR* IF ERROR.
*
* CALLS ATT, SOU, WCB.
CUF3 LDN 1
CUF SUBR ENTRY/EXIT
RJM SOU SET OPERATION CODE AND UNIT
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
ZJN CUF1 IF SUCCESSFUL
LCN ERDA REPORT DEVICE ATTRIBUTES ERROR
RJM ERR PROCESS ERROR
CUF1 LDML RPBF+11
SHN 21-16
PJN CUF3 IF NOT FORMATTED
SHN 21-17-21+16+22
MJN CUF2 IF CLUSTERED (DATA DRIVES ALREADY CHECKED)
LDML RPBF+7
LPN 77B MASK ACTUAL DATA DRIVES FOR FORMAT
LMD DD EXPECTED DATA DRIVES
NJN CUFX IF WRONG NUMBER OF DATA DRIVES
CUF2 LDML BPS,DT EXPECTED SECTOR SIZE
SCN 77
LMML RPBF+13 ACTUAL SECTOR SIZE
UJP CUFX RETURN
DCA SPACE 4,15
** DCA - DISABLE CONTROLLER ACTIVITY.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (CN) = CONTROLLER NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
* (IR+4) = CHANNEL NUMBER.
*
* EXIT *CONTROLLER DEAD* FLAG SET IN CONTROLLER STATE TABLE.
* *CMX CONTROLLER DISABLED, CCHXX.* MESSAGE ISSUED.
*
* CALLS IEM.
DCA SUBR ENTRY/EXIT
LDML CTST,CI SET *CONTROLLER DEAD* FLAG
LPC 017777 CLEAR BITS 15, 14 AND 13
LMC 020000 SET BIT 13
STML CTST,CI
LDC ERCD+100000 *EQXXX, UXX, CMX CONTROLLER DISABLED.*
RJM IEM ISSUE ERRORLOG MESSAGE
UJN DCAX RETURN
DCE SPACE 4,10
** DCE - DOWN CHANNEL ON EQUIPMENT.
*
* ENTRY (EO) = EST ORDINAL OF DEVICE.
*
* USES EO, CM - CM+4.
*
* CALLS DAS.
*
* MACROS DELAY, EXECUTE, MONITOR.
DCE SUBR ENTRY/EXIT
DCE1 LDD EO SET EST ORDINAL
STM DCEA
LMC 4000
STM DCEB+4 SET DRIVER CALL FLAG, EST ORDINAL
LDD MA
CWM DCEB,ON STORE *1DS* CALL IN MESSAGE BUFFER
LDN 0
STD CM+1 SET NON-PRIORITY REQUEST
EXECUTE 1DS,=
MONITOR RPPM REQUEST PP
LDD CM+1
NJN DCEX IF *1DS* STARTED
RJM DAS PROCESS ACTIVITY ON OTHER DEVICES
DELAY
LDC ** (EST ORDINAL OF CURRENT PARTITION)
DCEA EQU *-1
STD EO RESTORE EST ORDINAL
UJN DCE1 RETRY CALL
DCEB VFD 18/3L1DS,6/,12/DWNF,12/0,12/4000
DCR SPACE 4,15
** DCR - DROP CHANNEL RESERVATION.
*
* ENTRY (CR) = 1 IF CHANNEL RESERVED.
* (IR+4) = CHANNEL NUMBER.
*
* EXIT (A) = (CR) = 0.
* CHANNEL RESERVATION DROPPED.
*
* USES CM+1, CR.
*
* MACROS MONITOR.
DCR SUBR ENTRY/EXIT
LDD CR
ZJN DCRX IF CHANNEL NOT RESERVED
LDD IR+4
STD CM+1 DROP CHANNEL
MONITOR DCHM
* LDN 0 SET CHANNEL NOT RESERVED
STD CR
UJN DCRX RETURN
DDT SPACE 4,20
** DDT - DETERMINE DRIVE TYPE.
*
* ENTRY (PHYD,DI) = DRIVE TO DETERMINE TYPE OF.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) .EQ. DRIVE TYPE (0-7) IF SUPPORTED DRIVE FOUND.
* DRIVE TYPE 8-13 AND 14-19 ARE REPORTED AS
* DRIVE TYPE 2-7.
* (A) .EQ. *EQNS* IF NON-SUPPORTED DRIVE TYPE FOUND.
* (A) .LT. 0 IF DRIVE NOT FOUND OR ERROR.
* (DDTA) = DRIVES PER LOGICAL UNIT.
* (ATTB+2,T3) HAS BIT 9 SET IF THE DRIVE IS FOUND
* AND IT IS CLUSTERED. (T3) IS ADJUSTED TO POINT
* TO THE CORRECT WORD IN THE RESPONSE.
*
* USES T1 - T4.
*
* CALLS IDT, SOC.
*
* NOTE TO ENSURE THAT THIS ROUTINE IS NOT CALLED FOR MORE
* THAN ONE DEVICE AT THE SAME TIME, THE ERROR PROCESSING
* FLAG MUST ALWAYS BE SET BEFORE CALLING THIS ROUTINE.
DDT SUBR ENTRY
LDC C0200 REPORT ATTRIBUTES OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDC P036C
STML CPBF+FCP PARAMETER TO READ REV NUMBER
LDC 0#8068
STML CPBF+FCP+1 REPORT PARAMETER 68
LDN 10D COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDML DDT
STDL T4 RETURN ADDRESS FROM *DDT*
LDML RPBF+5+2
SHN -1
STDL T1 LENGTH OF ATTRIBUTE DATA
LDM PHYD,DI PHYSICAL DRIVE
SHN 10
ADN 1
STDL T2 EXPECTED PARAMETER WORD WITH UNIT NUMBER
LDN 0
STDL T3 INDEX TO PARAMETER 68
LDN 1
STML DDTA PHYSICAL DRIVES PER LOGICAL UNIT
DDT1 LDML ATTB,T3
LMC 0#568
NJN DDT4 IF NOT SINGLE UNIT
LDML ATTB+1,T3
LMDL T2
NJP DDT15 IF DIFFERENT UNIT
LDML ATTB+2,T3
SHN 21-12
MJN DDT2 IF SOLID STATE DISK
LDN EQEC 5833-1 OR 5838-1 OR 47444-1
UJN DDT3 EXIT
DDT2 LDN EQEA 5832-1
DDT3 UJP DDTX RETURN
DDT4 LMC 0#968&0#568
NJN DDT9 IF NOT 2 UNITS
LDML ATTB+1,T3
LMDL T2
ZJN DDT5 IF UNIT FOUND
LDML ATTB+3,T3
LMDL T2
NJP DDT16 IF DIFFERENT UNIT
DDT5 LDN 2
STML DDTA PHYSICAL DRIVES PER LOGICAL UNIT
LDML ATTB+4,T3
SHN 21-13
MJN DDT6 IF NOT SSD
LDN EQEB 5832-2
UJN DDT3 EXIT
DDT6 SHN 21-4-21+13
MJN DDT7 IF PARITY DRIVE
LDN EQEE 5833-2 OR 5838-2 OR 47444-2
UJN DDT3 EXIT
DDT7 LDN EQED 5833-1P OR 5838-1P OR 47444-1P
DDT8 UJN DDT3 EXIT
DDT9 LMC 0#D68&0#968
NJN DDT12 IF NOT 3 UNITS
LDML ATTB+1,T3
LMDL T2
ZJN DDT10 IF UNIT FOUND
LDML ATTB+3,T3
LMDL T2
ZJN DDT10 IF UNIT FOUND
LDML ATTB+5,T3
LMDL T2
NJP DDT17 IF UNIT NOT FOUND
DDT10 LDN 3
STML DDTA PHYSICAL DRIVES PER LOGICAL UNIT
LDML ATTB+6,T3
SHN 21-4
PJP DDT14 IF NOT A PARITY UNIT
LDN EQEF 5833-2P OR 5838-2P OR 47444-2P
DDT11 UJN DDT8 EXIT
DDT12 LMC 0#1168&0#D68
NJP DDT20 IF ILLEGAL PARAMETER
LDML ATTB+1,T3
LMDL T2
ZJN DDT12.1 IF UNIT FOUND
LDML ATTB+3,T3
LMDL T2
ZJN DDT12.1 IF UNIT FOUND
LDML ATTB+5,T3
LMDL T2
ZJN DDT12.1 IF UNIT FOUND
LDML ATTB+7,T3
LMDL T2
NJN DDT18 IF DIFFERENT UNIT
DDT12.1 LDN 4
STML DDTA TOTAL DRIVES
LDML ATTB+10,T3
SHN 21-4
PJN DDT13.1 IF NOT A PARITY UNIT
LDN EQEM 5833-3P OR 5838-3P OR 47444-3P
DDT13 UJN DDT11 EXIT
DDT13.1 LDN EQEN 5833-4 OR 5838-4 OR 47444-4
UJN DDT13 EXIT
DDT14 LDN EQNS NUMBER OF DEFINED DRIVE TYPES
UJN DDT13 EXIT
DDT15 LDN 3
UJN DDT19 UPDATE POINTER
DDT16 LDN 5
UJN DDT19 UPDATE POINTER
DDT17 LDN 7
UJN DDT19 UPDATE POINTER
DDT18 LDN 11
DDT19 RADL T3 UPDATE POINTER TO PARAMETER 68
SBDL T1
MJP DDT1 IF MORE PARAMETERS TO CHECK
DDT20 LCN 0 DRIVE NOT FOUND OR ERROR
UJN DDT13 EXIT
DDTA CON 0 TOTAL NUMBER OF DRIVES IN LOGICAL UNIT
DLU SPACE 4,10
** DLU - DECLUSTER LOGICAL UNIT.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (DDTA) = PHYSICAL DRIVES PER LOGICAL UNIT.
* (PHYD,DI) = DRIVE TO DECLUSTER.
* (DT) = DRIVE TYPE.
*
* EXIT TO *ERR* IF ERROR.
*
* CALLS ATT, SCP, SOU, SRP, WCB.
DLU SUBR ENTRY/EXIT
LDC C0209+1S17 LOAD ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P0568
RJM SCP SET COMMAND PARAMETER
LDML CPBF+CUN
LPN 77B MASK DRIVE NUMBER
SHN 10
ADN 1
STML CPBF+FCP+1 PARAMETER WORD WITH DRIVE NUMBER
LDD DT
IFNE EQEA,0,2
SBN EQEA
MJN DLU1 IF NOT SOLID STATE
SBN EQEC-EQEA
PJN DLU1 IF NOT SOLID STATE
LDC 0#8500 DECLUSTER 5832
UJN DLU2 SET DECLUSTER PARAMETER
DLU1 LDC 0#8900 DECLUSTER 5833/5838/47444
DLU2 STML CPBF+FCP+2
LDN 12D COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN DLU4 IF NOT SUCCESSFUL
* IF THE NEXT COMMAND IS ISSUED BEFORE THE DECLUSTER
* COMPLETES, AN ERROR COULD OCCUR.
DLU3 LDN ASRT
RJM ATT PROCESS ATTENTION
LDK ID26
RJM SRP SEARCH RESPONSE PACKET
MJN DLU3 IF ID26 NOT FOUND
SOM DDTA
NJN DLU3 IF ANOTHER ASYNCHRONOUS RESPONSE EXPECTED
UJP DLUX RETURN
DLU4 LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE
RJM ERR PROCESS ERROR
DMP SPACE 4,15
** DMP - DISABLE MMF PARITY DEVICE ACCESS.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* USES CM+2.
*
* CALLS CAB, CAC, CBB, LNE, RBD, UBP.
*
* MACROS CMSTF.
DMP5 LDC ** (UNPROCESSED PARTITION COUNT)
DMPB EQU *-1
NJN DMPX IF NOT ALL PARTITIONS PROCESSED
LDML DVTP,DI SET *ACCESS DISABLED* FLAG
LPC 167777
LMC 10000
STML DVTP,DI
DMP SUBR ENTRY/EXIT
LDN 0 CLEAR UNPROCESSED PARTITION COUNT
STM DMPB
* LDN 0 INITIALIZE PARTITION SEARCH
DMP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN DMP5 IF NO MORE PARTITIONS
RJM CAB CHECK ACGL *MMF PARITY DEVICE ACCESS* BIT
ZJN DMP4 IF BIT FOR THIS MF IS CLEAR
RJM CBB CHECK BDLL *DISABLE ACCESS* BIT
MJN DMP2 IF BIT FOR THIS DRIVER ALREADY SET
LDN 1 NEW VALUE
STD CM+2
LDD T1 BIT TO CHANGE
ADN 19D
RJM UBP SET DISABLE ACCESS BIT IN *BDLL*
DMP2 RJM CAC CHECK FOR ALTERNATE CHANNEL
NJN DMP3 IF ALTERNATE CHANNEL UNDEFINED OR DOWN
RJM RBD READ *BDLL*
LDD CM+3 CHECK IF BITS SET FOR BOTH CHANNELS
SHN -7
LPN 3
LMN 3
ZJN DMP3 IF BOTH BITS ARE NOW SET
AOM DMPB UNPROCESSED PARTITION COUNT
UJN DMP4 PROCESS NEXT PARTITION
DMP3 CMSTF GPDA CLEAR ACCESS FLAG BIT FOR THIS MF
DMPA EQU *-3 (BIT NUMBER FOR THIS MF)
DMP4 LDD EO
UJP DMP1 PROCESS NEXT PARTITION
DRT SPACE 4,10
** DRT - CHECK REQUEST TYPE.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (FC) = 0 IF FORMAT NOT COMPLETE.
* (CB) = 0 IF NO I/O BUFFER PRESENT.
*
* EXIT (A) .NE. 0 IF I/O REQUEST.
DRT2 LDN 0
DRT SUBR ENTRY/EXIT
LDD FC
ZJN DRTX IF FORMAT NOT COMPLETE
LDM SREQ,DI
NJN DRT2 IF SPECIAL REQUEST
LDM RSDI CHECK IF RESTORE IN PROGRESS
LMD DI
NJN DRT1 IF NO RESTORE IN PROGRESS ON THIS DEVICE
LDM RMUX
ZJN DRTX IF CURRENTLY RESTORING A CYLINDER
DRT1 LDD CB
UJN DRTX
ECA SPACE 4,20
** ECA - ENABLE CONTROLLER ACTIVITY.
*
* THIS SPECIAL REQUEST CLEARS THE CONTROLLER DEAD FLAG IN THE
* CONTROLLER STATE TABLE. THIS FUNCTION IS ISSUED BY *1MV*
* WHEN AN *UP,CCH* COMMAND IS ENTERED.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (CN) = CONTROLLER NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
* (IR+4) = CHANNEL NUMBER.
*
* EXIT *CONTROLLER DEAD* FLAG CLEARED IN *CTST*.
* *CMX CONTROLLER ENABLED, CCHXX* MESSAGE ISSUED.
* TO *CMP* WHEN FUNCTION COMPLETE.
*
* CALLS CEA, IEM.
ECA BSS 0 ENTRY
LDML CTST,CI ENABLE CONTROLLER ACTIVITY
SHN 21-15
PJN ECA1 IF CONTROLLER NOT DISABLED
SHN -21+15+22
LPC 17777 CLEAR BITS 15 - 13
STML CTST,CI
LDC ERCE+100000 *EQXXX, UXX, CMX CONTROLLER ENABLED.*
RJM IEM ISSUE ERRORLOG MESSAGE
ECA1 RJM CEA CLEAR ENABLE ACTIVITY REQUEST
LJM CMP COMPLETE FUNCTION
ECI SPACE 4,15
** ECI - EXAMINE CONTROLLER INTERRUPTS.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (CN) = CONTROLLER NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) = (PA) = 0 IF NO REQUEST IN PROGRESS.
* (A) .NE. 0, IF DEVICE SHOULD NOT BE PROCESSED.
* TO (ADDR,DI) IF NO RESPONSE FOR REQUEST IN PROGRESS.
* TO (ATTN,DI) IF RESPONSE FOR REQUEST IN PROGRESS.
* TO *CMP* AFTER PERFORMING THE INITIAL LOGICAL RESET
* ON THE CONTROLLER. THIS RESET IS DONE ONCE PER
* CONTROLLER WHEN THE DRIVER IS LOADED.
*
* USES PA.
*
* CALLS FCN, GIS, IDU, IHD, LDP, SAP, SRS.
ECI SUBR ENTRY/EXIT
RJM SAP SELECT ADAPTER PORT
LDC F0715 ENABLE INTERRUPTS
RJM FCN
RJM LDP LOAD DEVICE PARAMETERS
RJM GIS GET INTERRUPT STATUS
LPML TMSK,CN
ZJN ECI2 IF NO INTERRUPT FROM THIS CONTROLLER
* CHECK THAT INTERRUPT BELONGS TO CURRENT DRIVE.
RJM IHD
ZJN ECI2 IF RESPONSE FROM INACTIVE DRIVE
* LDML ATTN,DI
STDL PA SET RETURN ADDRESS
LDN 0
STML ATTN,DI DEACTIVATE RETURN
* RETURN TO CALLER WITH STATUS FROM RESPONSE PACKET.
LDM EEST,DI EXPECTED RESPONSE TYPE
LMD RT
ZJN ECI1 IF EXPECTED RESPONSE
LMD RT
LMD MS
ZJN ECI1 IF EXPECTED STATUS
LMK CMCS&CMSS
ECI1 LJM 0,PA RETURN TO CALLER
* NO INTERRUPT FOUND - CHECK FOR REQUEST IN PROGRESS.
ECI2 LDDL PA
NJN ECI1 IF REQUEST IN PROGRESS
LDM ERFL
ZJN ECI3 IF DRIVER NOT IN ERROR PROCESSING
LMD DI
NJN ECI5 IF ERROR ON DIFFERENT DEVICE
ECI3 LDM SRSA
NJN ECI5 IF RESET IN PROGRESS
LDM CFFA
NJN ECI5 IF FORMAT IN PROGRESS
LDML CTST,CI CHECK CONTROLLER STATUS
SHN 21-16
MJN ECI6 IF INITIAL LOGICAL RESET NOT COMPLETE
LDN 0
ECI5 LJM ECIX RETURN
* PROCESS INITIAL LOGICAL RESET.
ECI6 RJM IDU INTERLOCK DISK UNIT
NJN ECI5 IF DEVICE ASSIGNED ELSEWHERE
LDC 1S16+CMP
LJM SRS INITIATE LOGICAL RESET
EDR SPACE 4,20
** EDR - EXECUTE DRIVE (POWER ON) RESET.
*
* THIS MASTER CLEARS THE DRIVE(S), BREAKS AN OPPOSITE ACCESS
* RESERVE AND RUNS DIAGNOSTICS. IT IS ISSUED BY THE
* CONTROLLER EVEN IF THE DRIVE IS OFF-LINE OR NOT OPERATIONAL.
* IF A SLAVE RESET IS ISSUED AND AN ATTACHED DRIVE IS RESERVED
* TO ANOTHER CONTROLLER, THE CONTROLLER WILL REPORT THE DRIVE
* AS NOT OPERATIONAL.
*
* ENTRY (CN) = CONTROLLER NUMBER.
* (DD) = NUMBER OF DATA DRIVES IN DEVICE.
* (DN) = DRIVE NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (PD) = NUMBER OF PARITY DRIVES IN DEVICE.
*
* EXIT (PHYD,DI) IS NOT CHANGED.
*
* CALLS ATT, DDT, SRS, UPD, WCB.
EDR5 RJM UPD UPDATE PHYSICAL DRIVE ADDRESS
NJN EDR1 IF MORE PHYSICAL DRIVES IN LOGICAL UNIT
LDM EDRA
STM PHYD,DI RESTORE DRIVE NUMBER
EDR SUBR ENTRY/EXIT
LDM MSGL+1
SBN EMBF2L-1
MJN EDRX IF NO RESPONSE PACKET
LDM PHYD,DI
STM EDRA SAVE DRIVE NUMBER
LDD DN
STM PHYD,DI PHYSICAL DRIVE
EDR1 RJM DDT DETERMINE DRIVE TYPE
LDML DDTA TOTAL DRIVES IN LOGICAL UNIT
LMN 1
ZJN EDR3 IF 1X DRIVE
RJM ATT WAIT FOR COMPLETION RESPONSE
LDD DD
ADD PD
SBN 1
ZJN EDR2 IF 1X DRIVE CONFIGURED
LDM PHYD,DI
LPN 70B
NJP EDR5 IF RESET ALREADY ISSUED
EDR2 LDD CN
SHN 10
ADD DN
SCN 0#38
UJN EDR4 SAVE ADDRESS FOR COMMAND
EDR3 RJM ATT WAIT FOR COMPLETION RESPONSE
LDDL CN
SHN 10
ADM PHYD,DI
EDR4 STML CPBF+CUN LOGICAL ADDRESS
LDC C0800 ABORT COMMAND
STML CPBF+OPC
LDC P0254
STML CPBF+FCP
LDC 0#400 RESET AS AT POWER ON
STML CPBF+FCP+1
LDN 10D COMMAND PACKET LENGTH
RJM WCB COMMAND PACKET TRANSFER
LDN CMSS WAIT ON INTERRUPT
RJM ATT
LDC EDR5+1S16 RETURN ADDRESS/LOGICAL RESET
LJM SRS RESET IN CASE OF MULTIPLE RESPONSES
EDRA CON 0 FAILING DRIVE NUMBER
EIO SPACE 4,35
** EIO - ENTER I/O REQUEST QUEUE.
*
* THIS ROUTINE SETS LINKAGE BITS IF THE REQUEST IS A READ.
* IT ALSO DELINKS COMPLETED BUFFERS FROM THE REQUEST QUEUE.
* ON READ REQUESTS, EACH BUFFER IS DELINKED IMMEDIATELY.
* ON WRITE REQUESTS, BUFFERS ARE ONLY DELINKED AFTER ENOUGH
* SUBSEQUENT SECTORS HAVE BEEN SENT TO THE CONTROLLER TO
* ENSURE THAT THE DATA HAS BEEN FLUSHED TO THE DISK (BASED
* ON THE FACT THAT THE CONTROLLER HAS AN INTERNAL BUFFER OF
* 128KB FOR EACH SPINDLE OF THE DEVICE).
*
* THIS ALGORITHM ENSURES THAT THE CURRENT CBT ORDINAL IN THE
* *PUT* WILL POINT TO THE SECTOR IN ERROR, WHEN AN ERROR IS
* ENCOUNTERED ON A WRITE REQUEST. SINCE (CB) IS ALWAYS RESET
* TO THE CURRENT CBT ORDINAL FROM THE *PUT* WHEN *LDP* IS
* CALLED, THIS ALLOWS CODE IN *ERR* TO ENSURE THAT THE CORRECT
* I/O REQUEST WILL BE RETRIED DURING ERROR PROCESSING.
*
* ENTRY (RW) = READ / WRITE STATUS.
* (CB) = CURRENT BUFFER ORDINAL.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
* (NB) = NEXT BUFFER ORDINAL.
*
* USES T1, WB+3, CM - CM+4.
*
* CALLS IMR, SLB.
EIO SUBR ENTRY/EXIT
LDD RW
NJN EIO2 IF WRITE OPERATION
LDD CB
RJM SLB SET LINKAGE BITS
LDD NB
ZJN EIO1 IF LAST BUFFER
LDN 1
UJN EIO3 DELINK AFTER ONE BUFFER READ
EIO1 LDN 2 LAST MONITOR REQUEST WILL DELINK AND
UJN EIO3 RELEASE UNIT INTERLOCK
EIO2 LDD DD CONTROLLER BUFFER IS 128K PER DATA DRIVE
SHN 3
ADN 2
EIO3 STD T1 DELINKING CRITERIA
LDML PSBF,DT
SHN -14
RAM CSCT,DI
AOM RQLN,DI ADVANCE ENTRY COUNT
LPC 3777
SBD T1
MJN EIO5 IF QUEUE NOT FULL
ADN 1
STD WB+3 NUMBER OF BUFFERS TO DELINK
SBN 14
PJN EIO4 IF TIME TO FORCE DELINK
LDD OA
CRD CM CHECK OUTPUT REGISTER
LDD CM
NJN EIO5 IF MONITOR REQUEST IN PROGRESS
EIO4 LDN DCBS
RJM IMR INITIATE MONITOR REQUEST
* LDN 0
SBD WB+3 ADJUST QUEUE ENTRY COUNT
RAM RQLN,DI
EIO5 UJP EIOX RETURN
EMP SPACE 4,15
** EMP - ENABLE MMF PARITY DEVICE ACCESS.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* EXIT (A) = 0, IF ALL PARTITIONS PROCESSED.
*
* USES CM+2, T4.
*
* CALLS CAB, CBB, CCI, CDS, CMR, CSN, LNE, UBP.
*
* MACROS SMSTF.
EMP6 LDC 10000 SET *MMF RESTORE / ACCESS DISABLED* FLAG
STDL T4
EMP7 LDML DVTP,DI CLEAR *ACCESS DISABLED*, *ACCESS ENABLED*,
LPC 163377 AND *RESTORE INITIATION*
LMDL T4 SET ACCESS ENABLED OR DISABLED FLAG
STML DVTP,DI
EMP8 LDC ** (COUNT OF UNPROCESSED PARTITIONS LEFT)
EMPB EQU *-1
EMP SUBR ENTRY/EXIT
LDN 0 CLEAR UNPROCESSED PARTITION COUNT
STM EMPB
RJM CMR CHECK MMF RESTORE FLAGS
MJN EMP8 IF RESTORE INITIATION IN PROGRESS
ZJN EMP1 IF NO RESTORE IN PROGRESS
LDM CMRA EST ORDINAL WITH RESTORE SET
RJM CSN COMPARE CONTROLLER SERIAL NUMBERS
NJN EMP6 IF RESTORE ON DIFFERENT CONTROLLER
LDC 4000 SET *MMF RESTORE / ACCESS ENABLED* FLAG
STD T4
UJN EMP7 SET FLAG AND EXIT
EMP1 LDN 0 CLEAR ACCESS ENABLED/DISABLED FLAG
STD T4
* LDN 0 INITIALIZE PARTITION SEARCH
EMP2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN EMP7 IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
MJN EMP4 IF DEVICE NOT RECOVERED
RJM CBB CHECK BDLL *DISABLE ACCESS* BIT
PJN EMP3 IF BIT FOR THIS DRIVER ALREADY CLEAR
LDN 0 NEW VALUE
STD CM+2
LDD T1 BIT TO CHANGE
ADN 19D
RJM UBP CLEAR DISABLE ACCESS BIT IN *BDLL*
EMP3 RJM CAB CHECK ACGL *MMF PARITY DEVICE ACCESS* BIT
NJN EMP5 IF BIT FOR THIS MF IS ALREADY SET
SMSTF GPDA SET ACCESS FLAG BIT FOR THIS MF
EMPA EQU *-3 (BIT NUMBER FOR THIS MF)
UJN EMP5 PROCESS NEXT PARTITION
EMP4 AOM EMPB INCREMENT UNPROCESSED PARTITION COUNT
EMP5 LDD EO
UJP EMP2 PROCESS NEXT PARTITION
ERR SPACE 4,45
** ERR - PROCESS ERRORS.
*
* ERROR PROCESSING FLOW IS CONTROLLED BY THE RETRY COUNT
* (ERCT,DI). EXAMPLE FLOW THROUGH RECOVERY FOR DRIVE ERROR-
*
* (ERCT,DI) COMMENT
* --------- ------------------------------------------------------
* 0 ENTER, LOGICAL RESET
* 1 ISSUE BML MESSAGE, EXIT
* 1 ENTER, LOGICAL RESET, DRIVE RESET
* 2 ISSUE BML MESSAGE, EXIT
* 2 ENTER, SLAVE RESET (OR LOGICAL RESET IF A DRIVE CAN BE
* OFF-LINE OR MEDIA ERROR)
* 3 ISSUE BML MESSAGE, EXIT
* 3 ENTER, LOGICAL RESET
* 4 ISSUE BML MESSAGE, SET SUSPECT STATE, EXIT
*
* THE REQUEST IS NOW CHANNEL SPECIFIC, AND IF DUAL ACCESS IS
* DEFINED, WILL BE FOR THE OTHER CHANNEL.
*
* 4 ENTER, LOGICAL RESET
* 5 ISSUE BML MESSAGE, EXIT
* 5 ENTER, LOGICAL RESET, DRIVE RESET
* 6 ISSUE BML MESSAGE, EXIT
* 6 ENTER, LOGICAL RESET
* 7 ISSUE BML MESSAGE, RUN DRIVE DIAGNOSTICS, EXIT
* 7 ENTER, LOGICAL RESET
* 8 IF NO DRIVE TO OFF-LINE OR THE OFF-LINE COMMAND
* FAILED, SET MISCELLANEOUS AND ISSUE THE FINAL BML
* MESSAGE. OTHERWISE, OFF-LINE THE FAILING DRIVE,
* SET ERCT TO 0, AND EXIT.
*
* NOTE - IF THE REQUEST STARTS OUT AS A CHANNEL-SPECIFIC
* REQUEST (E.G. A *1MV* I/O REQUEST), ALL RETRIES WILL
* BE DONE ON THIS CHANNEL.
*
* NOTE - IF AN ERROR OCCURS ON AN I/O REQUEST DURING A
* RESTORE, ALL RETRIES WILL BE DONE ON THIS CHANNEL.
* IF THE ERROR IS UNRECOVERABLE, I/O REQUESTS AND
* SPECIAL REQUESTS WILL BE DISABLED FOR THE DRIVE
* UNTIL THE RESTORE COMPLETES.
*
* ENTRY (A) = FAULT ANALYSIS CODE.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DN) = DRIVE NUMBER.
*
* EXIT TO *DAS1* TO RETRY REQUEST.
* TO *CMP2* AFTER SUSPECT STATE SET.
* TO *CMP1* IF RETRIES COMPLETE AND UNRECOVERABLE SET.
* TO *CMP10* IF ERROR IN PROGRESS ON DIFFERENT DEVICE.
*
* USES RW, T1 - T5.
*
* CALLS CBC, CMC, CRF, DCA, EDR, EUI, GBM, ICR, IDM, IEM, IOM,
* LDP, RCR, RND, SCD, SDO, SEC, SEP, SRS, SSS, WAC.
*
* MACROS CBTE.
ERR CON 0 ENTRY
PJN ERR1 IF NO RESPONSE PACKET
LMC 767777
ERR1 STD T4 SAVE FAULT CODE
SHN 0-14
STD T1 SET RESPONSE PACKET STATUS
RJM EUI ENSURE UNIT INTERLOCKED
LDM ERPA CHECK IF ERROR PROCESSING ALREADY ACTIVE
ZJN ERR1.1 IF ERROR PROCESSING NOT ACTIVE
LMD DI
NJN ERR2 IF ACTIVE ON DIFFERENT DEVICE
ERR1.1 LDD DI SET ERROR PROCESSING ACTIVE FLAG
STM ERPA
LDM SRSA
ZJN ERR4 IF NO RESET IN PROGRESS
LMD DI
ZJN ERR3 IF THIS UNIT CONTROLLING RESET
ERR2 LJM CMP10 ABANDON REQUEST (RETRY LATER)
ERR3 RJM CRF CLEAR RESET FLAGS
LDM RWST,DI
NJN ERR4 IF NOT SLAVE RESET
LDC ERRF+100000 *EQXXX, UXX, CMX RESET FAILURE.*
RJM IEM ISSUE ERRORLOG MESSAGE
LDN 0 CLEAR OPERATOR MESSAGE
RJM IOM
RJM DCA DISABLE CONTROLLER ACTIVITY
ERR4 LDN 0 CLEAR CHANNEL ACTIVE
RJM SCD
LDC ** (ZERO IF NEW PASS THROUGH ERROR PROCESSING)
ERRA EQU *-1
NJP ERR11 IF NOT NEW PASS THROUGH ERROR PROCESSING
AOM ERRA INDICATE STATUS SAVED
LDM ERCT,DI
SBN SRRC
ZJN ERR6 IF ERROR MIGHT BE FROM SLAVE RESET
LDM RWST,DI
STM IOST,DI SAVE READ/WRITE STATUS
ERR6 LDD DN SET DEFAULT FAILING DRIVE (MAY BE CHANGED
STM PHYD,DI LATER IF A RESPONSE IS PRESENT)
LCN 0
STM EDBF+FCS2 NO RESPONSE PACKET FOR *HPA*
LDD T4 INSERT INITIAL FAULT CODE
STM EDBF+CODE
STM EDBF+FALT PRESET FINAL FAULT CODE
* GENERATE BML MESSAGE. ON A *CONDITIONAL SUCCESS* ERROR,
* REENTER CALLING ROUTINE TO COMPLETE PROCESSING REQUEST.
RJM GBM GENERATE BML MESSAGE
* RELOAD DEVICE PARAMETERS AND CLEAR BUFFER COUNT. IF AN ERROR
* OCCURS WHILE STREAMING WRITE REQUESTS, THIS ENSURES THAT (CB)
* POINTS TO THE REQUEST IN ERROR, AND THAT NO ADDITIONAL WRITE
* REQUESTS WILL BE DELINKED. SEE DOCUMENTATION IN *EIO*.
RJM LDP RELOAD DEVICE PARAMETERS
RJM CBC CLEAR BUFFER COUNT
* SET ERROR PROCESSING INTERLOCK.
RJM SEP SET ERROR PROCESSING INTERLOCK
NJP CMP10 IF ERROR IN PROGRESS ON A DIFFERENT DEVICE
LDN 0 CLEAR *FORMAT IN PROGRESS* FLAG
STM CFFA
LDML CTST,CI
SHN 21-15
PJN ERR7 IF CONTROLLER STILL FUNCTIONAL
LDN 1
STM CPEA INDICATE NO DRIVE TO OFF-LINE
UJN ERR14 SLAVE RESET FAILED
* ALLOW ACTIVITY ON OTHER DRIVES TO COMPLETE BEFORE ISSUING
* THE RESET.
ERR7 RJM WAC WAIT FOR OTHER ACTIVITY TO COMPLETE
RJM ICR ISSUE CONTROLLER RESET
* UJN ERR12 (IF RESET SUCCESSFUL)
UJN ERR14 RESET FAILED
* REENTER HERE IF ERROR WHILE ATTEMPTING HARDWARE RECOVERY.
ERR11 RJM RCR RESET CHANNEL REGISTERS
UJN ERR14 SET RECOVERY FAULT CODE
ERR12 LDM ERCT,DI CHECK RETRY COUNT
SBN 1
ZJN ERR13 IF TIME FOR DRIVE RESET
SBN MERC-CSRC
NJN ERR14 IF NOT TIME FOR DRIVE RESET
ERR13 RJM EDR EXECUTE DRIVE RESET
ERR14 LDN 0
STM EDBF+FCS3 SET RECOVERY FAULT CODE
LDM IOST,DI
STM RWST,DI RESTORE READ/WRITE STATUS
STD RW
LDM ERCT,DI CHECK ERROR COUNT
SBN MERC-1
MJN ERR15 IF NOT TIME TO OFF-LINE DRIVE
RJM SDO SET DRIVE OFF-LINE
RJM SEC SET ERROR CODE IN *CBT*
AOM MISC MARK ERROR UNRECOVERED
LJM CMP1 COMPLETE PROCESSING
ERR15 AOM ERCT,DI
LDD HN
ERRNZ HD0100-100 CODE DEPENDS ON VALUE
RJM IDM ISSUE MESSAGE
LDML CTST,CI
SHN 21-15
MJN ERR16 IF CONTROLLER DEAD
LDM ERCT,DI
SBN MERC-1
NJN ERR16 IF NOT TIME TO RUN DIAGNOSTICS
RJM RND RUN DRIVE DIAGNOSTICS
ERR16 LDM SREQ,DI
NJP ERR19 IF SPECIAL REQUEST
LDD FC
ZJP ERR19 IF FORMAT NOT COMPLETE
LDM RSDI CHECK IF RESTORE IN PROGRESS
LMD DI
NJN ERR17 IF NO RESTORE IN PROGRESS ON THIS DEVICE
LDM RMUX
ZJN ERR18 IF CURRENTLY RESTORING A CYLINDER
ERR17 LDM ERCT,DI
LMN CSRC
NJN ERR18 IF NOT TIME FOR CHANNEL SWAP
LDD CB
ZJN ERR17.1 IF NO I/O BUFFER
SHN CBTLS
CBTE *
ADC HSLK GET CHANNEL SELECT STATUS
CRD T1
LDD T1
SHN 0-12
LMN 1
ZJN ERR19 IF REQUEST ALREADY CHANNEL-SPECIFIC
ERR17.1 UJP ERR20 SET SUSPECT STATE
ERR18 LDM EDBF+CODE
LMN EROD
NJN ERR19 IF NOT RESTORE
LDM EDBF+FALT
LMN EDPE
NJN ERR19 IF NOT MEDIA ERROR
* IF THE RETRY LIMIT FOR SKIPPING MEDIA ERRORS DURING A
* RESTORE IS CHANGED, CODE IN *GBM* MUST ALSO BE CHANGED.
LDML ERCT,DI
SBN 2
ZJP CMP IF MEDIA RETRY LIMIT FOR RESTORE
ERR19 RJM CMC CHECK MONITOR COMPLETE
* LDN 0
STM ADDR,DI CLEAR REENTRY ADDRESS
STM ATTN,DI CLEAR INTERRUPT ADDRESS
STM CSCT,DI CLEAR CUMULATIVE SECTOR COUNT
STM SREQ,DI CLEAR SPECIAL REQUEST FLAG
STM ERRA ENABLE NEXT PASS THROUGH ERROR PROCESSOR
LDD RF
NJN ERR19.2 IF RESET FAILURE
ERR19.1 LJM DAS1 RETURN TO MAIN LOOP
ERR19.2 LDML CTST,CI
SHN 21-15
MJN ERR19.1 IF CONTROLLER DEAD
LDC 1S16+DAS1 RETURN ADDRESS
LJM SRS ISSUE LOGICAL RESET
ERR20 RJM SSS SET SUSPECT STATE ON DEVICE
RJM SEC SET ERROR CODE IN *CBT*
LJM CMP2 COMPLETE PROCESSING
ERPA CON 0 ERROR PROCESSING ACTIVE FLAG (*DST* INDEX)
EUI SPACE 4,15
** EUI - ENSURE UNIT INTERLOCKED.
*
* IF AN INTERRUPT IS PRESENT AND A CHANNEL ERROR OCCURS WHILE
* READING THE RESPONSE, (DI) MIGHT BE FOR A UNIT THAT IS NOT
* INTERLOCKED.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (DI) = DEVICE ADDRESS OF INTERLOCKED UNIT.
* TO *CMP7* IF NO INTERLOCKED UNIT.
*
* USES DI.
*
* CALLS LDP, LND, RCR.
EUI SUBR ENTRY/EXIT
LDM RQLN,DI
SHN 0-13
NJN EUIX IF UNIT INTERLOCKED
STML ADDR,DI CLEAR REENTRY ADDRESS
STML ATTN,DI CLEAR INTERRUPT ADDRESS
* LDN 0 LOCATE FIRST DRIVE
EUI1 RJM LND LOCATE NEXT DRIVE
ZJN EUI2 IF NO MORE DRIVES ON CONTROLLER
LDM RQLN,T7
SHN 0-13
LMN 1
NJN EUI1 IF UNIT NOT INTERLOCKED
LDD T7
STD DI
RJM LDP LOAD DEVICE PARAMETERS
UJN EUIX RETURN
EUI2 RJM RCR RESET CHANNEL REGISTERS
LJM CMP7 COMPLETE REQUEST
FFD SPACE 4,15
** FFD - FIND FAILING DRIVE.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (FFDA) = 0 IF FAILING DRIVE.
* (PHYD,DI) = FAILING DRIVE.
*
* USES T3.
*
* CALLS SRP.
FFD SUBR ENTRY/EXIT
LDM EDBF+FALT
SBN EMME
ZJN FFD1 IF RESPONSE PRESENT
SBN EIVR-EMME
ZJN FFD1 IF RESPONSE PRESENT
SBN EMEX-EIVR
NJP FFD7 IF NO RESPONSE PACKET
FFD1 LDK ID23
RJM SRP SEARCH RESPONSE PACKET
MJN FFD2 IF ID23 NOT FOUND
LDML RPBF+5,T3
SHN -10
SBN 6
PJN FFD4 IF FAILING DRIVE FOUND
FFD2 LDK ID24
RJM SRP SEARCH RESPONSE PACKET
MJN FFD3 IF ID24 NOT FOUND
LDML RPBF+5,T3
SHN -10
SBN 7
MJN FFD3 IF NO FAILING DRIVE
LDML RPBF+5+3,T3
UJN FFD5 CHECK FOR PHYSICAL DRIVE NUMBER
FFD3 LDK ID26
RJM SRP SEARCH RESPONSE PACKET
MJN FFD7 IF ID26 NOT FOUND
LDML RPBF+5,T3
SHN -10
SBN 10
MJN FFD7 IF NO FAILING DRIVE
AOD T3
FFD4 LDML RPBF+5+3,T3
SHN -10
FFD5 LPC 377
LMC 0#FE
ZJN FFD7 IF NO PHYSICAL DRIVE NUMBER
LMC 0#FE
STM PHYD,DI SAVE FAILING DRIVE NUMBER
LDML RPBF+OPC
LMC C0209
ZJN FFD7 IF COMMAND THAT OFF-LINES A DRIVE
LDN 0
FFD6 STM FFDA
UJP FFDX RETURN
FFD7 LDN 1
UJN FFD6 RETURN
FFDA CON 0
FMU SPACE 4,15
** FMU - FORMAT UNIT.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (PHYD,DI) = THE PHYSICAL DRIVE TO FORMAT.
* (DD) = NUMBER OF DATA DRIVES IN DEVICE.
* (DT) = DRIVE TYPE.
* (FC) = FORMAT COMPLETE FLAG.
*
* EXIT TO *ERR* IF ERROR.
*
* CALLS ATT, C2D, IEM, IOM, SFP, WCB.
FMU SUBR ENTRY/EXIT
LDC ERFI *EQXXX, UXX, FORMAT INITIATED.*
RJM IEM ISSUE ERROR LOG MESSAGE
LDM PHYD,DI
RJM C2D PUT UNIT NUMBER IN MESSAGE
STM FMUA+4
LDD EO
RJM C2D CONVERT EST ORDINAL
STM FMUA+2
LDD EO
SHN -6 SET ORDINAL IN MESSAGE
ADC 2RQ0
STM FMUA+1
LDC FMUA
RJM IOM ISSUE OPERATOR MESSAGE
* FORMAT THE DIAGNOSTIC CYLINDER.
RJM SFP SET COMMON FORMAT PARAMETERS
LDC 0#1DF
STML CPBF+FCP+3 FORMAT THE DIAGNOSTIC CYLINDER
LDD DT DRIVE TYPE
IFNE EQEA,0,2
SBN EQEA
MJN FMU0 IF NOT 5832
SBN EQEC-EQEA
MJN FMU1 IF 5832
FMU0 LDN 0#E COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN FMU1.2 IF NOT SUCCESSFUL
* FORMAT THE DATA CYLINDERS.
FMU1 RJM SFP SET COMMON FORMAT PARAMETERS
LDML FC
NJN FMU2 IF DRIVE CLUSTERED
LDC 0#7DD FACTORY FORMAT PARAMETER
STML CPBF+FCP+3
LDD DD
STML CPBF+FCP+4 DATA DRIVES PER LOGICAL UNIT
LDN 0
STML CPBF+FCP+5 UPPER BYTES OF SECTOR SIZE
LDML BPS,DT BYTES PER SECTOR
SCN 77
STML CPBF+FCP+6
LDN 0#14 COMMAND PACKET LENGTH
UJN FMU3 WRITE COMMAND PACKET
FMU1.2 LCN EFDF FORMAT DRIVE FAILURE
RJM ERR PROCESS ERROR
FMU2 LDC 0#53B
STML CPBF+FCP+3 LOGICAL SECTOR SIZE
LDN 0
STML CPBF+FCP+4 UPPER BYTES OF SECTOR SIZE
LDML BPS,DT
SCN 77
STML CPBF+FCP+5
LDN 0#12 COMMAND PACKET LENGTH
FMU3 RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN FMU1.2 IF ERROR
* LDN 0 CLEAR OPERATOR MESSAGE
RJM IOM
LDC ERFC *EQXXX, UXX, FORMAT COMPLETE.*
RJM IEM ISSUE ERROR LOG MESSAGE
UJP FMUX RETURN
FMUA DATA C* EQ000 U00 FORMATTING.*
GBM SPACE 4,35
** GBM - GENERATE BML MESSAGE.
*
* THIS ROUTINE GENERATES THE ERROR MESSAGE FOR SYMPTOM 100 OR
* 111. IF THE ERROR IS A MEDIA ERROR, THE RETRY COUNT IS ONE,
* AND THE COMMAND IS READ OR WRITE, THE TRACK FLAW WILL BE SET
* IN THE MST. IF THE ERROR IS A MEDIA ERROR, THE RETRY COUNT
* IS ONE, AND THE COMMAND IS A RESTORE, THE CYLINDER, TRACK,
* AND SECTOR VALUES WILL BE UPDATED TO POINT TO THE SECTOR
* AFTER THE ONE WITH THE MEDIA ERROR, SO THE NEXT RESTORE
* COMMAND WILL END UP SKIPPING THE MEDIA DEFECT.
*
* ENTRY (T1) .NE. 0 IF RESPONSE PACKET PRESENT.
* (DI) .EQ. DEVICE STATE TABLE ADDRESS.
* (DT) .EQ. DEVICE TYPE.
*
* EXIT TO *DAS1* IF CONDITIONAL SUCCESS. THE CONTROLLER
* RETURNS AN ASYNCHRONOUS RESPONSE WITH A PARAMETER 29
* FOR EACH PHYSICAL DRIVE OF THE LOGICAL UNIT THAT IT
* PERFORMED RECOVERY ON. IT THEN RETURNS A COMMAND
* COMPLETION RESPONSE. THIS ROUTINE LOGS THE
* ASYNCHRONOUS RESPONSE TO THE BML, THEN EXITS TO THE
* MAIN LOOP, *DAS*. SINCE (ATTN,DI) AND (ADDR,DI) ARE
* STILL SET EXPECTING THE COMMAND COMPLETION RESPONSE,
* WHEN THE COMMAND COMPLETION RESPONSE IS RECEIVED,
* THE CODE IN *PIO* WILL GO TO *CMP* AND LOG A
* RECOVERED ERROR. HOWEVER, IF THE ERROR COUNT
* REACHES THE MAXIMUM VALUE WHEN PROCESSING A
* CONDITIONAL SUCCESS, IT WILL BE TREATED AS A
* NORMAL ERROR.
*
* USES PA, T2 - T7.
*
* CALLS ACE, CCO, FFD, IDM, RCR, RMR, RTR, SMD, SRP, STF, UHD.
GBM SUBR ENTRY/EXIT
LDM CSCT,DI
STM EDBF+STCT SECTORS TRANSFERRED
LDM CYLN,DI SET SEEK ADDRESS - CYLINDER
STM EDBF+ICYL
LDM TKSN,DI SEEK ADDRESS - TRACK AND SECTOR
STM EDBF+ITAS
LDML LCMD,DI SET LAST COMMAND
STML EDBF+LSCC
LDML GSSA EXECUTION (ENDING) STATUS
STML EDBF+EXST
LDML ERR ERROR RECOVERY ENTRY ADDRESS
STML EDBF+EREA
GBM1 LDDL LF SAVE LAST CHANNEL FUNCTION
STML EDBF+LCFN
SCF. GBM1,MR ACQUIRE MAINTENANCE CHANNEL ACCESS
LDN ZERL
CRML RBUF,ON CLEAR BUFFER IN CASE OF ERROR
SBN 1
CRML RBUF+4,ON
RJM RMR READ CHANNEL STATUS REGISTER
DCN. MR+40
CCF. *+2,MR CLEAR MAINTENANCE CHANNEL FLAG
LDN 0
STD T2 INITIALIZE INDEX
RJM ACE ANALYZE CHANNEL ERROR
STML EDBF+FCS1 SAVE CHANNEL STATUS
LDC EDBF+CREG
STDL T5 SET ERROR BUFFER ADDRESS
GBM2 LDM RBUF,T2
SHN 10 PACK 8-BIT DATA
LMM RBUF+1,T2
STIL T5
AODL T5 ADVANCE ADDRESS
LDN 2
RAD T2 INCREMENT INDEX
LMN RBUFL
NJN GBM2 IF MORE REGISTER DATA
RJM RTR READ T REGISTER
LDK RTEDL
STD T4 SET LENGTH OF DATA
LDC EDBF
STDL T2 SOURCE DATA ADDRESS
ADK EMBF1
RJM UHD UNPACK HEX DATA
ADN EMBFS
STM MSGL+1 MESSAGE LENGTH INCLUDING NON-HEX DATA
LDD T1
ZJN GBM3 IF NO RESPONSE PACKET PRESENT
* PUT RESPONSE IN BML.
LDC RPBF
STDL T2 SET SOURCE DATA ADDRESS
LDIL T2
ADN 3 CALCULATE STATUS BLOCK LENGTH
SHN -1
SBK RPBFL
MJN GBM2.1 IF LESS THAN MAXIMUM SIZE
LDN 0
GBM2.1 ADK RPBFL
STD T4
LDC EDBF+EMBF2 CONVERT STATUS TO 12 BIT DATA
RJM UHD MOVE RESPONSE PACKET TO BML MESSAGE
RAM MSGL+1 INCREASE LENGTH TO INCLUDE RESPONSE
LDN 0
STM EDBF+FCS2 RESPONSE PACKET PRESENT FOR *HPA*
* CONVERT MAJOR STATUS TO INDEX.
LDDL MS UNPACK BUS A FLAGS
SHN -10
STD T2
LDD MS BUS B SUBSTATUS FLAGS
LPN 7
SHN 10 COMBINE FLAGS IN ORDER
RAD T2
GBM3 ZJP GBM27 IF NO SUBSTATUS
LCN 0
STD T3
GBM4 AOD T3 ADVANCE INDEX
LDD T2
SHN 21-0 CONVERT FLAG POSITION TO INDEX
STD T2
PJN GBM4 IF BIT NOT SET
LDML GBMA,T3
STDL PA SET PROCESSOR ADDRESS
LJM 0,PA EXIT TO PROCESSOR
* RESERVED SUBSTATUS (PID = X0 AND X1).
GBM5 LDN ERSS
UJN GBM11 SET FINAL FAULT CODE
* DEFECT MANAGEMENT (PID = X2).
GBM6 LDN EDFM
UJN GBM11 SET FINAL FAULT CODE
* MESSAGE / MICROCODE EXCEPTION (PID = X3).
GBM7 LDN EMME
UJN GBM11 SET FINAL FAULT CODE
* INTERVENTION REQUIRED (PID = X4).
GBM8 LDN ID24
RJM SRP SEARCH RESPONSE PACKET
PJN GBM10 IF ID24 FOUND
GBM9 LDN EIVR
UJN GBM11 SET FINAL FAULT CODE
GBM10 LDML RPBF+5+1,T3
SHN 21-11
PJN GBM9 IF NOT FACILITY BUSY
LDN EDRE
GBM11 LJM GBM26 SET FINAL FAULT CODE
* ALTERNATE PORT EXCEPTION (PID = X5).
GBM12 LDN EAPR
UJN GBM11 SET FINAL FAULT CODE
* MACHINE EXCEPTION (PID = X6).
GBM13 LDN ID26 SEARCH FOR DRIVE SUBSTATUS
RJM SRP
ZJN GBM15 IF SUBSTATUS FOUND
GBM14 LDN 0 DO NOT ISSUE SPECIAL BML MESSAGE
RJM CCO CHECK FOR CONTROLLER OVER TEMPERATURE
LDN EMEX
LJM GBM26 SET FINAL FAULT CODE
GBM15 LDML RPBF+5,T3 CHECK LENGTH OF PARAMETER
SHN -10
SBN 0#10+1
MJN GBM14 IF NO EXTENDED SUBSTATUS
LDML RPBF+5+4,T3
SHN -10
LMC 0#FE
ZJN GBM16 IF NO PHYSICAL DRIVE NUMBER
LMC 0#FE
STM PHYD,DI FAILING PHYSICAL DRIVE
GBM16 LDM RPBF+15,T3
LPN 77 EXAMINE COMMAND ENDING STATUS
SBN 0#11
ZJN GBM17 IF ECC ERROR
SBN 0#13-0#11
ZJN GBM17 IF MISSING SYNC
SBN 0#19-0#13
NJP GBM14 IF NOT SECTOR NOT FOUND ERROR
GBM17 LDML RPBF+OPC
SHN -14
SBN 1
ZJN GBM18 IF READ
SBN 1
ZJN GBM18 IF WRITE
SBN 14
NJP GBM14 IF NOT RESTORE (NOT MEDIA ERROR)
GBM18 LDM ERCT,DI
LMN 1
NJN GBM19 IF NOT FIRST RETRY
LDM RPBF+12,T3
STD T4 SET CYLINDER IN ERROR
GBM18.1 SBM MC,DT CHECK FOR MAINTENANCE CYLINDER
ZJN GBM19 IF NOT IN USER AREA
SBN 1
PJN GBM18.1 IF MORE TO CHECK
LDML CFS,DT
SHN -14
ADK SHNI
STM GBMB
LDML RPBF+13,T3
LPN 77
STD T6 PHYSICAL SECTOR
GBMB SHN ** CONVERT PHYSICAL TO LOGICAL
STD T7 LOGICAL SECTOR WITHIN PHYSICAL TRACK
LDML RPBF+13,T3
SHN -10
STD T5 PHYSICAL TRACK
RJM SMD SKIP MEDIA DEFECT
NJN GBM19 IF RESTORE
RJM STF INSERT TRACK FLAW IN MST
GBM19 LDN EDPE
UJN GBM22 SET FINAL FAULT CODE
* COMMAND EXCEPTION (PID = X7).
GBM20 LDN ECEX
UJN GBM22 SET FINAL FAULT CODE
* COMMAND ABORTED (PID = X8).
GBM21 LDN ECMA
GBM22 LJM GBM26 SET FINAL FAULT CODE
* COMMAND CONDITIONALLY SUCCESSFUL (PID = X9).
GBM23 LDN ECCS
STML EDBF+FALT SET FAULT CODE
LDN ID29
RJM SRP SEARCH RESPONSE PACKET
MJN GBM24 IF ID29 NOT FOUND
LDML RPBF+5,T3
SHN -10
SBN 6
MJN GBM24 IF NO FAILING DRIVE
LDML RPBF+5+3,T3
SHN -10
LMC 0#FE
ZJN GBM24 IF NO FAILING DRIVE NUMBER
LMC 0#FE
STM PHYD,DI FAILING DRIVE NUMBER
GBM24 LDN 0
STM EDBF+FCS3
LDM ERCT,DI CHECK ERROR COUNT
SBN MERC-1
MJN GBM24.1 IF MAXIMUM ERROR COUNT NOT REACHED
LDN ECCS
UJN GBM26 SET FINAL FAULT CODE
* ISSUE BML MESSAGE AND RETURN TO MAIN LOOP. THIS ALLOWS
* A REENTRY BASED ON THE VALUES OF (ATTN,DI) AND (ADDR,DI).
GBM24.1 AOM ERCT,DI INCREMENT ERROR COUNT
LDD HN
ERRNZ HD0100-100 CODE DEPENDS ON VALUE
RJM IDM ISSUE MESSAGE
LDN 0
STM ERPA CLEAR ERROR PROCESSING ACTIVE FLAG
STM ERRA ENABLE NEXT PASS THROUGH ERROR PROCESSOR
LJM DAS1 RETURN TO MAIN LOOP
* COMMAND INCOMPLETE (PID = XA).
GBM25 LDN ECIC
* LJM GBM26 SET FINAL FAULT CODE
* COMPLETE ERROR PROCESSING.
GBM26 STML EDBF+FALT SET FINAL FAULT CODE
GBM27 RJM RCR RESET CHANNEL
RJM FFD FIND FAILING DRIVE
LJM GBMX RETURN
GBMA BSS 0 SUBSTATUS PROCESSORS
CONL GBM5 RESERVED
CONL GBM5 RESERVED
CONL GBM6 DEFECT MANAGEMENT
CONL GBM7 MESSAGE / MICROCODE EXCEPTION
CONL GBM8 INTERVENTION REQUIRED
CONL GBM12 ALTERNATE PORT EXCEPTION
CONL GBM13 MACHINE EXCEPTION
CONL GBM20 COMMAND EXCEPTION
CONL GBM21 COMMAND ABORTED
CONL GBM23 COMMAND CONDITIONALLY SUCCESSFUL
CONL GBM25 COMMAND INCOMPLETE
GCA SPACE 4,15
** GCA - GET CURRENT *ACGL*.
*
* ENTRY (EO) = EST ORDINAL.
*
* EXIT (CM - CM+4) = *ACGL* WORD FROM *MST*.
*
* USES CM - CM+4.
*
* CALLS REE.
*
* MACROS MONITOR.
GCA SUBR ENTRY/EXIT
LDD EO SET EST ORDINAL
STD CM+1
LDN UTRS GET CURRENT MST
STD CM+3
MONITOR STBM
RJM REE READ EST ENTRY
LDD CM+4
SHN 3
ADN ACGL READ *ACGL*
CRD CM
UJN GCAX RETURN
GCS SPACE 4,15
** GCS - GET CONTROLLER SERIAL NUMBER.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (CN) = CONTROLLER NUMBER.
* (DN) = DRIVE NUMBER.
*
* EXIT CONTROLLER SERIAL NUMBER IN (CTSN - CTSN+2).
*
* USES T3, T4.
*
* CALLS ATT, CAN, IDT, RCA.
GCS SUBR ENTRY/EXIT
LDM CTSN,CI
NJN GCSX IF CONTROLLER SERIAL NUMBER ALREADY KNOWN
RJM RCA REPORT CONTROLLER ATTRIBUTES
RJM IDT INPUT DATA TO PP
* CONVERT RIGHT 6 OF 8 CONTROLLER SERIAL NUMBER CHARACTERS.
LDC ATTB+0#10 SET ADDRESS OF CONTROLLER SERIAL NUMBER
STDL T4
LDD CI SET ADDRESS FOR CONVERSION
ADN CTSN
STDL T3
RJM CAN CONVERT ASCII NUMBER TO DISPLAY CODE
RJM ATT WAIT FOR COMPLETION RESPONSE
UJN GCSX RETURN
IBM SPACE 4,10
** IBM - ISSUE BML MESSAGE.
*
* ENTRY (A) = SYMPTOM - 100.
* (NR - NR+4, WB - WB+4) = MESSAGE PARAMETERS.
*
* EXIT (A) = 0.
*
* USES CM - CM+4, NR, NR+1.
*
* CALLS IDM.
IBM SUBR ENTRY/EXIT
ADD HN INSERT SYMPTOM CODE
ERRNZ HI0100-100 CODE DEPENDS ON VALUE
STD NR+1
LDC DM0401 DEFINE MESSAGE ID
STD NR
LDN ZERL CLEAR HEADER WORD
CRD CM
LDN 3 WORD COUNT OF MESSAGE
STD CM+3
ADK MLDY-3 DIRECT MESSAGE TO BML
STD CM+4
LDC SBUF SET MESSAGE ADDRESS
STML MAD1
LDD MA MOVE MESSAGE DATA
CWM CM,TR
ERRNZ CM+5-NR CODE DEPENDS ON VALUE
SBN 3
ERRNZ NR+5-WB CODE DEPENDS ON VALUE
CRM SBUF,TR
ERRNG SBUFL-3*5 CODE DEPENDS ON VALUE
LDN 0 ISSUE BML MESSAGE
RJM IDM
* LDN 0
UJN IBMX RETURN
ICR SPACE 4,15
** ICR - ISSUE CONTROLLER RESET.
*
* ENTRY (RW) .NE. 0 IF PREVIOUS RESET FAILED.
* (RF) .NE. 0 IF RESET FAILURE.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (PD) = 0, IF NOT PARITY DEVICE.
* (CPEA) = 0, IF TIME TO DO SLAVE RESET AND THERE
* IS A DRIVE TO OFF-LINE.
*
* EXIT TO *ERR12* IF RESET COMPLETE.
* (CPEA) = 0 IF LOGICAL RESET ISSUED AND THERE IS
* A DRIVE TO OFF-LINE.
*
* CALLS CPE, SRS.
ICR6 LDN 1
STM CPEA INDICATE NO DRIVE TO OFF-LINE
LDM RWST,DI
ZJN ICRX IF SLAVE RESET FAILED
LDM ERCT,DI
SBN CSRC-SRRC
ZJN ICR1 IF TIME TO TRY SLAVE RESET
ICR SUBR ENTRY/EXIT
LDD RF
NJN ICR6 IF PREVIOUS RESET FAILED
LDM ERCT,DI
SBN CSRC-SRRC
NJN ICR2 IF NOT TIME TO TRY SLAVE RESET
* DO NOT DO SLAVE RESET IF CHANNEL ERROR, MEDIA ERROR,
* OR CONTROLLER DEAD.
ICR1 LDML EDBF+FALT
SBN ETIT
ZJN ICR3 IF INTERRUPT TIMEOUT
SBN EDPE-ETIT+1
MJN ICR2 IF NOT DOING SLAVE RESET (CHANNEL ERROR)
SBN ECNR-EDPE-1
ZJN ICR3 IF SLAVE IN/SYNC IN SIGNAL ERROR
SBN ECRE-ECNR
PJN ICR2 IF NOT DOING SLAVE RESET
* DO NOT ISSUE SLAVE RESET (1 MINUTE) IF A DRIVE CAN
* BE SET OFF-LINE.
LDD PD
ZJN ICR3 IF NOT PARITY DEVICE
LDM CPEA
NJN ICR3 IF NO DRIVE TO OFF-LINE
ICR2 LDN 1
STM CPEA INDICATE NO DRIVE TO OFF-LINE
LDC 1S16+ICR5 RETURN ADDRESS
UJN ICR4 ISSUE LOGICAL RESET
ICR3 LDN 0 ENABLE LOGGING OF ERROR RESPONSE
STM ERRA
LDC ERR12 RETURN ADDRESS FROM SLAVE RESET
ICR4 LJM SRS ISSUE RESET
ICR5 RJM CPE CHECK IF PARITY DRIVE ENABLED
LJM ERR12 EXIT
IDM SPACE 4,20
** IDM - ISSUE DAYFILE MESSAGE.
*
* ENTRY (A) = BML MESSAGE SYMPTOM CODE.
* (RW) = READ / WRITE FLAG.
* (EO) = EST ORDINAL.
* (CN) = CONTROLLER NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
* (PHYD,DI) = DRIVE NUMBER.
* (MISC) = 1 IF UNRECOVERED ERROR.
* (MAD1) = MESSAGE ADDRESS.
*
* NOTE - THE CONTENTS OF THE MESSAGE DETERMINES WHETHER IT
* GOES TO THE ERROR LOG OR THE BML.
*
* EXIT (A) = (MISC) = 0.
*
* CALLS IMB, UEC.
IDM SUBR ENTRY/EXIT
LMC D"DN"*400
STM BMLM+1 INSERT SYMPTOM CODE IN MESSAGE
LDML BMID,DT
SHN -11
STM MSID ERROR MESSAGE ID
LDD CN
SHN 6
ADM PHYD,DI INSERT UNIT NUMBER
STM UNIT
LDM PNUN,DI SET PORT NUMBER
SHN -3
SCN 77
STM PORT
LDD EO INCLUDE EST ORDINAL
STM ESTO
LDD RW READ / WRITE FLAG
LPN 1
SHN 21-4
ADM ERCT,DI SET RETRY COUNT
SHN 13-5
RAM MISC APPEND TO RECOVERED/UNRECOVERED STATUS
LDML MAD1
RJM IMB ISSUE MESSAGE TO BUFFER
RJM UEC UPDATE MST ERROR COUNT
LDC MSGP
STML MAD1 RESTORE BML ERROR MESSAGE ADDRESS
LDN 0
STM MISC CLEAR UNRECOVERED ERROR STATUS
* LDN 0
LJM IDMX RETURN
MAD1 CONL MSGP MESSAGE ADDRESS (MAY BE SET BY CALLER)
IDU SPACE 4,15
** IDU - INTERLOCK DISK UNIT.
*
* ENTRY (CB) = CBT ORDINAL, IF I/O REQUEST.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* EXIT (A) .EQ. 0, IF UNIT INTERLOCKED SUCCESSFULLY.
* (A) .LT. 0, IF CHANNEL DOWN.
* (A) .GT. 0, IF UNABLE TO INTERLOCK.
*
* USES T7, WB+3, CM - CM+4.
*
* CALLS CAC, CCS, SUI.
*
* MACROS CBTE.
IDU4 RJM SUI SET UNIT INTERLOCK
IDU SUBR ENTRY/EXIT
LDM RQLN,DI
SHN 0-13 CHECK UNIT RESERVED
LMN 1
ZJN IDUX IF UNIT INTERLOCKED
LDC 0
CHRQ EQU *-1
NJN IDUX IF CHANNEL REQUESTED
RJM CCS CHECK CHANNEL STATE
IDU2 ZJN IDU4 IF CHANNEL UP
SCN 1
NJN IDU3 IF CHANNEL DOWN
* CHANNEL IDLE. IF OTHER CHANNEL IS DEFINED AND UP, ONLY
* PROCESS CHANNEL-SPECIFIC REQUESTS ON THIS CHANNEL.
LDD CB
ZJN IDU3 IF NOT I/O REQUEST
SHN CBTLS
CBTE *
ADC PAD4 GET CHANNEL FROM CBT ENTRY
CRD T7
ADN HSLK-PAD4 GET CHANNEL SELECT STATUS
CRD CM
LDD CM CHECK ERROR FLAGS
SHN 0-12
NJN IDU2.1 IF CHANNEL SPECIFIC REQUEST
RJM CAC CHECK ALTERNATE CHANNEL STATUS
ZJN IDU3 IF OTHER CHANNEL DEFINED AND UP
UJP IDU4 SET UNIT INTERLOCK
IDU2.1 LDD T7 CHECK SPECIFIED CHANNEL
SHN -6
LMD IR+4
ZJN IDU2 IF REQUEST FOR THIS DRIVER
IDU3 LCN 0 RETURN *CHANNEL DOWN* STATUS
UJP IDUX RETURN
IEE SPACE 4,15
** IEE - ISSUE E,E EVENT.
*
* THIS ROUTINE ISSUES A MONITOR REQUEST WHICH CAUSES AN
* OPERATOR ACTION TO VIEW THE E,E DISPLAY.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* USES CM - CM+4.
*
* MACROS MONITOR.
IEE SUBR ENTRY/EXIT
LDN EEVS
STD CM+1 ENTER EVENT
LDN 0
STD CM+3
LDN CEDE *CHECK E,E DISPLAY* EVENT
STD CM+4
MONITOR EATM
UJN IEEX RETURN
IEM SPACE 4,15
** IEM - ISSUE ERROR LOG MESSAGE.
*
* ENTRY (A) = 1/CF,15/ADDRESS.
* CF - SET CONTROLLER NUMBER INTO MESSAGE.
* THE MESSAGE LENGTH IS IN (ADDRESS-1).
* (CN) = CONTROLLER NUMBER.
* (DT) = DRIVE TYPE.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* USES T1, T2.
*
* CALLS C2D, IDM.
IEM SUBR ENTRY/EXIT
STDL T0 SAVE COMPLETE PARAMETER
LPC 17777
STDL T1 ADDRESS OF SPECIFIED MESSAGE
STML IEMA
LDDL T0 CHECK IF CONTROLLER NUMBER FLAG SET
SHN 21-17
PJN IEM1 IF CONTROLLER NUMBER NOT PART OF MESSAGE
LDD CN CONVERT CONTROLLER NUMBER
ADN 1R0
SHN 6 INSERT IN MESSAGE
LMN 1R
STM 1,T1
IEM1 LDM DM,DT SAVE DEVICE MNEMONIC
STM ERMH+5
LDD EO
SHN -3
RJM C2D
STM ERMH+6 UPPER 2 DIGITS OF EST ORDINAL
LDD EO
LPN 7
SHN 6
ADC 2R0,
STM ERMH+7 LOWER DIGIT OF EST ORDINAL
LDM PHYD,DI
RJM C2D
STM ERMH+11 FAILING DRIVE
LDM -1,T1 SET MESSAGE LENGTH
STM ERMH+3
LDN 4
STD T1
LDD MA
CWM **,T1 COPY MESSAGE INTO BUFFER
IEMA EQU *-1
LDD MA
CRM ERMB,T1
LDC ERMH MESSAGE HEADER ADDRESS
STML MAD1
RJM IDM ISSUE MESSAGE TO ERROR LOG
UJP IEMX RETURN
* ERROR MESSAGE HEADER AND BUFFER.
ERMH CON 0,0,0,**,ELDY
DATA 12H*****, U**,
ERMB BSSZ 4*5
CON 0
* ERROR MESSAGES.
ERPD ERRMSG (PARITY PROTECTION DISABLED.)
ERPR ERRMSG (PARITY PROTECTION RESTORED.)
ERRI ERRMSG (PARITY RESTORE INITIATED.)
ERFI ERRMSG (FORMAT INITIATED.)
ERFC ERRMSG (FORMAT COMPLETE.)
ERCR ERRMSG (CMX RESET ON CCHXX.)
ERRC ERRMSG (CMX RESET COMPLETE.)
ERRF ERRMSG (CMX RESET FAILURE.)
ERCD ERRMSG (CMX CONTROLLER DISABLED, CCHXX.)
ERCE ERRMSG (CMX CONTROLLER ENABLED, CCHXX.)
IHD SPACE 4,20
** IHD - INTERRUPT HANDLER.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DN) = DRIVE NUMBER.
*
* EXIT (A) = EXIT CONDITION FROM ROUTINE *VIS*.
* = 0 IF INTERRUPT FOR INACTIVE DRIVE.
* = RETURN ADDRESS TO PROCESSOR.
* (MS) = MAJOR STATUS FROM RESPONSE PACKET.
* (RT) = RESPONSE TYPE FROM STATUS BLOCK.
* (DI) = THE COMMAND REFERENCE NUMBER FROM AN EXPECTED
* RESPONSE.
* TO *DAS1* IF UNEXPECTED ASYNCH.
*
* USES DI, MS, RT, T4.
*
* CALLS DCM, LDP, LSD, RCR, RRP, SCM, VIS.
IHD6 LCN 0 INDICATE ASYNC INTERRUPT
IHD7 RJM VIS VERIFY INTERRUPT SOURCE
IHD SUBR ENTRY/EXIT
LDML CTST,CI
SHN -15
ZJN IHD1 IF STREAMING MODE FOR RESPONSES
* IF 10 MB CHANNEL AND INTERLOCK MODE, SOMETIMES AFTER SENDING
* A COMMAND PACKET, THE ERROR FLAG WILL SET DURING THE
* FOLLOWING BUS CONTROL SEQUENCE (IPI ERROR REGISTER = 0004).
* MASTER CLEARING THE CHANNEL AFTER THE COMMAND PACKET
* PREVENTS THIS PROBLEM.
RJM RCR RESET CHANNEL REGISTERS
IHD1 RJM SCM SELECT CONTROLLER
RJM RRP READ RESPONSE PACKET
LDML RPBF+MST
STDL MS SAVE MAJOR STATUS
SHN -4
LPN 17 EXTRACT RESPONSE TYPE
STD RT
LMN XFNT
ZJN IHD7 IF TRANSFER NOTIFICATION
RJM DCM DESELECT CONTROLLER
LDD RT CHECK RESPONSE TYPE
LMN ASRT
NJP IHD7 IF NOT ASYNC (UNSOLICITED) RESPONSE
LDM RPBF+CUN
LPC 377
STD T4 SAVE DRIVE NUMBER
LMC 377
ZJP IHD6 IF RESPONSE FOR CONTROLLER
RJM LSD LOCATE SELECTED DRIVE
ZJN IHD5 IF DRIVE UNKNOWN ON THIS CONTROLLER
STD DI
RJM LDP LOAD DEVICE PARAMETERS
* AN ASYNCH FOR A DRIVE CAN OCCUR BEFORE THE ASYNCH FOR THE
* CONTROLLER AFTER A SLAVE RESET.
LDM SRSA
NJN IHD5 IF RESET IN PROGRESS
LDM EEST,DI
LMN ASRT
ZJN IHD4 IF EXPECTED ASYNCH
LDML RPBF+CRN
LMD DI
NJN IHD5 IF NOT EXPECTED ASYNCH
IHD4 LDML ATTN,DI
LJM IHDX RETURN
* AN UNEXPECTED ASYNCH CAN BE THE RESULT OF A DRIVE RESET FROM
* THE OTHER ACCESS, OR BECAUSE AN OFF-LINE DRIVE HAS BEEN
* REPAIRED AND SPUN UP. SUCH UNEXPECTED ASYNCHS ARE IGNORED.
IHD5 LJM DAS1 RETURN TO MAIN LOOP
IIO SPACE 4,20
** IIO - INITIATE I/O.
*
* ENTRY (A) = (CB) = *CBT* ORDINAL.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
*
* EXIT (A) = 0 IF I/O DISABLED ON THIS CHANNEL.
* (RW) = READ / WRITE STATUS.
* (PA) = PROCESSOR ADDRESS.
* (NR - NR+4) = PHYSICAL ADDRESS OF REQUEST.
*
* USES PA, RW, NR - NR+4, T1 - T7.
*
* CALLS PEF.
*
* MACROS CBTE.
IIO4 STDL PA
SCN 77 SET I/O DISABLED STATUS
IIO SUBR ENTRY/EXIT
SHN CBTLS
CBTE *
ADC PAD1 FETCH SEEK PARAMETERS FROM *CBT*
CRD NR
ADN PAD4-PAD1 GET CHANNEL FROM CBT ENTRY
CRD T1
ADN HSLK-PAD4 GET CHANNEL SELECT STATUS
CRD T2
SBN HSLK-IOLK GET READ / WRITE FLAG
CRD T3
LDD T2 CHECK ERROR FLAGS
SHN 0-12
ZJN IIO1 IF NO FLAGS
SHN -1
STD RW PROCESS ERROR FLAGS
RJM PEF
NJN IIO4 IF I/O PREPROCESSING INDICATED
*IIO1 LDN 0
IIO1 STML CPBF+FCP+1 CLEAR UPPER BYTES OF BLOCK COUNT
STML CPBF+FCP+6 CLEAR UPPER BYTES OF INTERRUPT SIZE
STML CPBF+FCP+10 CLEAR UPPER BYTES OF BURST SIZE
LDC P0931
STML CPBF+FCP COMMAND EXTENT PARAMETER
LDD NR+1
STM CPBF+FCP+3 SET CYLINDER IN COMMAND PACKET
STM CYLN,DI
* DETERMINE PARTITION.
IIO2 SBM MC,DT
MJN IIO2.1 IF IN THE CORRECT PARTITION
SBN 1
PJN IIO2 IF NOT AT MAINTENANCE CYLINDER
* SET BLOCK COUNT. USING A LARGER BLOCK COUNT IMPROVES
* STREAMING PERFORMANCE.
IIO2.1 ADN 7
PJN IIO2.2 IF WITHIN LAST 8 CYLINDERS
LDML PSCY,DT SET SECTOR COUNT FOR 8 CYLINDERS
SHN 3
UJN IIO3 RETURN
IIO2.2 LDM STS,DT SET SECTOR COUNT FOR .LT. 8 CYLINDERS
LPC 777
IIO3 STML CPBF+FCP+2 SECTOR COUNT
LDD NR+2
STM TKSN,DI TRACK + SECTOR
SCN 77
SHN 2
LMD NR+2 SEPARATE INTO 8 BIT FIELDS
SCN 77
LMD NR+2 SET IN COMMAND PACKET
STML CPBF+FCP+4
LDD T3
SHN 22-11 EXTRACT WRITE DATA FLAG
LPN 1
STM RWST,DI SET READ / WRITE STATUS
STD RW
LDC PIO
UJP IIO4 SET PROCESSOR ADDRESS
ILU SPACE 4,15
** ILU - INITIALIZE LOGICAL UNIT.
*
* DECLUSTER UNIT IF CLUSTERED, FORMAT ALL THE PHYSICAL DRIVES
* OF THE LOGICAL UNIT AS NECESSARY, THEN CLUSTER THE UNIT.
*
* ENTRY (DN) = DRIVE NUMBER.
* (DT) = DRIVE TYPE.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* USES CM - CM+4.
*
* CALLS ATT, CLU, CUF, DDT, DLU, FMU, SRS, UPD.
ILU SUBR ENTRY/EXIT
LDD DN
STM PHYD,DI PHYSICAL DRIVE
ILU1 RJM DDT DETERMINE DRIVE TYPE
MJP ILU7 IF DRIVE NOT IN CONTROLLER TABLE
SBD DT
PJN ILU1.2 IF ACTUAL EQUAL OR GREATER THAN EXPECTED
ILU1.1 ADN EQEG-EQEC ADVANCE DEVICE TYPE RANGE
ERRNZ EQEO-EQEG-EQEG+EQEC (RANGES MUST BE EQUAL SIZE)
MJN ILU1.1 IF NOT TO PROPER RANGE
ILU1.2 ZJN ILU4 IF EXPECTED AND ACTUAL TYPES MATCH
LDM DDTA
SBN 1
ZJN ILU4 IF LOGICAL UNIT IS ONE DRIVE
* IF 2 CONTROLLERS ARE CABLED TO THE UNIT AND THE UNIT IS
* CLUSTERED DIFFERENTLY THAN IT IS CONFIGURED, THE OTHER
* CONTROLLER MAY ALREADY HAVE DECLUSTERED AND RECLUSTERED
* DIFFERENTLY. SLAVE RESET MUST BE DONE TO CAUSE THE
* CONTROLLER TO REEVALUATE THE DRIVES.
LDC ILU2 RETURN ADDRESS
LJM SRS INITIATE SLAVE RESET
* CLEAR THE ASYNCHRONOUS RESPONSES AFTER THE SLAVE RESET.
* THERE IS NORMALLY ONE ASYNCH PER PHYSICAL DRIVE AFTER A
* DECLUSTER COMMAND. IF THE DECLUSTER COMMAND IS ISSUED AFTER
* SLAVE RESET, THE ASYNCHS THAT SHOULD HAVE BEEN AFTER THE
* COMPLETION RESPONSE FOR THE DECLUSTER MAY COME BEFORE THE
* COMPLETION RESPONSE. THIS WILL CAUSE A TIMEOUT WAITING
* FOR A RESPONSE.
ILU2 LDC 1S16+ILU3 RETURN ADDRESS
LJM SRS ISSUE LOGICAL RESET
ILU3 RJM DDT DETERMINE DRIVE TYPE
MJN ILU7 IF DRIVE NOT IN CONTROLLER TABLE
ILU4 LDML ATTB+2,T3
SHN 21-11
PJN ILU5 IF UNIT NOT CLUSTERED
RJM ATT WAIT FOR COMPLETION RESPONSE
RJM DLU DECLUSTER LOGICAL UNIT
UJN ILU6 CHECK FOR CONDITIONAL FORMAT
ILU5 RJM ATT WAIT FOR COMPLETION RESPONSE
ILU6 LDK SSTL
CRD CM
LDD CM+1
SHN 21-12
PJN ILU8 IF UNCONDITIONAL FORMAT
RJM DDT DETERMINE DRIVE TYPE
MJN ILU7 IF DRIVE NOT IN CONTROLLER TABLE
RJM ATT WAIT FOR COMPLETION RESPONSE
LDC C0302+1S17 REPORT ADDRESSEE STATUS OPERATION CODE
RJM CUF CHECK IF UNIT FORMATTED
ZJN ILU9 IF UNIT FORMATTED
UJN ILU8 FORMAT THE UNIT
ILU7 RJM ATT WAIT FOR COMPLETION RESPONSE
ILU8 RJM FMU FORMAT UNIT
ILU9 RJM UPD UPDATE DRIVE NUMBER
NJP ILU1 IF MORE DRIVES TO CHECK
RJM CLU CLUSTER LOGICAL UNIT
UJP ILUX RETURN
IMF SPACE 4,10
** IMF - ISSUE MONITOR FUNCTION AND WAIT FOR COMPLETION.
*
* ENTRY (A) = FUNCTION.
*
* EXIT (A) = 0.
* (CM - CM+4) = MONITOR FUNCTION RESPONSE.
*
* USES CM - CM+4.
*
* CALLS AME, CMC.
IMF SUBR ENTRY/EXIT
STD CM
RJM CMC WAIT MONITOR COMPLETE (PREVIOUS REQUEST)
LDD OA WRITE OUTPUT REGISTER
CWD CM
LDD CM
SBN CPUM
MJN IMF1 IF NOT *CPUMTR* REQUEST
RJM AME ATTEMPT MONITOR EXCHANGE
IMF1 RJM CMC WAIT FOR MONITOR COMPLETE (NEW REQUEST)
LDD OA READ OUTPUT REGISTER
CRD CM
LDN 0
UJN IMFX RETURN
IMR SPACE 4,15
** IMR - INITIATE *BIOM* MONITOR REQUEST.
*
* ENTRY (A) = *BIOM* SUBFUNCTION.
* (WB+3 - WB+4) = *BIOM* PARAMETERS.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) = 0.
*
* USES WB - WB+2.
*
* CALLS AME, CMC.
IMR SUBR ENTRY/EXIT
STD WB+1
LDI DI SET *PUT* ORDINAL
ERRNZ PUTO CODE DEPENDS ON VALUE
STD WB+2
LDN BIOM SET MONITOR FUNCTION
STD WB
RJM CMC CHECK MONITOR COMPLETE
LDD OA
CWD WB
RJM AME ATTEMPT MONITOR EXCHANGE
* LDN 0
UJN IMRX RETURN
IOM SPACE 4,10
** IOM - ISSUE OPERATOR MESSAGE.
*
* ENTRY (A) = ADDRESS OF MESSAGE.
* = 0 TO CLEAR MESSAGE.
* = - TO REFRESH MESSAGE.
* (EO) = EST ORDINAL.
*
* USES T1.
*
* CALLS C2D.
IOM2 LDD CP SYSTEM CP ADDRESS
ADN MS2W
CWD T1 CLEAR THE MESSAGE
IOM3 LDML IOMA
NJN IOM1 IF MESSAGE PRESENT
IOM SUBR ENTRY/EXIT
STDL T1
MJN IOM3 IF MESSAGE REFRESH
STML IOMA
ZJN IOM2 IF CLEAR MESSAGE CALL
IOM1 LDD CP SYSTEM CP ADDRESS
ADN MS2W
CWM **,TR STORE OPERATOR MESSAGE
IOMA EQU *-1
UJN IOMX RETURN
IPR SPACE 4,30
** IPR - INITIATE PARITY RESTORE.
*
* INITIATE RESTORE OF AN OFF-LINE DRIVE, IN RESPONSE TO AN
* OPERATOR *RESTORE* COMMAND.
*
* THIS ROUTINE CHECKS FOR AN OFF-LINE DRIVE OF A PARITY UNIT.
* IT WILL ISSUE A SPIN UP DRIVE COMMAND TO SEE IF THE DRIVE
* IS USEABLE, AND IF SO, FORMAT THE DRIVE IF NECESSARY, THEN
* SET UP TABLES SO THE DRIVE WILL BE RESTORED ONE CYLINDER
* AT A TIME AS A BACKGROUND OPERATION.
*
* THIS DRIVER WILL HOLD THE UNIT INTERLOCK (IN THE *PUT*)
* DURING THE ENTIRE RESTORE OPERATION. FOR A SHARED DEVICE,
* IT WILL ALSO HOLD THE ERROR PROCESSING INTERLOCK (IN THE
* *BDT*) DURING THE RESTORE INITIATION PROCESS, AND THE MMF
* RESTORE INTERLOCK (IN THE *BDT*) DURING THE ENTIRE RESTORE.
* THE MMF RESTORE INTERLOCK WILL ENSURE THAT ONLY THE
* CONTROLLER THAT IS PERFORMING THE RESTORE WILL BE ALLOWED
* TO DO I/O ON THE DEVICE DURING THE RESTORE.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* EXIT TO *CSR*.
* TO *CMP*, TO LEAVE REQUEST PENDING.
*
* USES CM - CM+4.
*
* CALLS ATT, CDS, CLP, COD, CRP, DAS, FMU, GCA, IEE, IEM,
* LNE, SEP, SOU, SRS, SUD, UBP, WAC, WCB.
*
* MACROS CMSTF, DELAY, MONITOR, SMSTF.
IPR BSS 0 ENTRY
LDM RSIN CHECK RESTORE INTERLOCK FLAG
ZJN IPR1 IF INTERLOCK NOT SET
LMD DI
NJN IPR2 IF INTERLOCK SET FOR ANOTHER DEVICE
LJM IPR13 PROCESS REENTRY FOR RESTORE ON THIS DEVICE
* ISSUE LOGICAL RESET TO ENSURE THAT THIS CONTROLLER SEES
* THE CURRENT STATUS OF THE DRIVE IN QUESTION. ALLOW ACTIVITY
* ON OTHER DEVICES TO COMPLETE BEFORE ISSUING THE RESET.
IPR1 RJM SEP SET ERROR PROCESSING INTERLOCK
ZJN IPR3 IF INTERLOCK SET SUCCESSFULLY
IPR2 LJM CMP LEAVE REQUEST PENDING
IPR3 RJM WAC WAIT FOR OTHER ACTIVITY TO COMPLETE
LDML CSTB,CI
SHN 21-15
MJN IPR5 IF CONTROLLER NOT FUNCTIONAL
LDC IPR4+1S16 RETURN ADDRESS
LJM SRS ISSUE LOGICAL RESET
* CHECK FOR OFF-LINE DRIVE.
IPR4 RJM COD CHECK FOR OFF-LINE DRIVE
NJN IPR6 IF OFF-LINE DRIVE DETECTED
RJM CLP CLEAR *LOST PARITY* FLAGS
IPR5 RJM CRP CLEAR *RESTORE IN PROGRESS*, IF SET
LJM CSR ABANDON REQUEST
* SET *RESTORE IN PROGRESS* FLAGS AND INTERLOCKS.
IPR6 LDD DI SET RESTORE INTERLOCK FLAG
STM RSIN
LDD CI SET ADDRESS OF CONTROLLER SERIAL NUMBER
ADK CTSN-2
STM IPRA
LDN 0 INITIALIZE PARTITION SEARCH
IPR7 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJP IPR9 IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
MJN IPR5 IF DEVICE NOT RECOVERED
ZJN IPR8 IF NOT SHARED DEVICE
LDD MA SET CONTROLLER SERIAL NUMBER INTO MB
CWM **,ON (ADDRESS OF *CTSN* FOR THIS CONTROLLER)
IPRA EQU *-1
LDD EO SET EST ORDINAL
STD CM+4
LDN SRPS SET RESTORE PARITY INTERLOCK IN *BDT*
STD CM+1
MONITOR MTEM
LDD CM+4
NJP IPR5 IF REJECT (OTHER MF PERFORMING RESTORE)
LDN 1 SET FLAG THAT SAYS THIS MF HAS INTERLOCK
STD CM+2
LDN 25 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
IPR8 SMSTF GDRI SET *RESTORE INITIATION* IN *ACGL*
SMSTF GDUR SET *RESTORE IN PROGRESS* IN *ACGL*
LDC ERRI *EQXXX, UXX, PARITY RESTORE INITIATED.*
RJM IEM ISSUE ERROR LOG MESSAGE
LDD EO
UJP IPR7 PROCESS NEXT PARTITION
* IF SHARED DEVICE, WAIT FOR OTHER MF-S TO ACKNOWLEDGE.
IPR9 RJM IEE ISSUE E,E EVENT
LDN 0 INITIALIZE PARTITION SEARCH
IPR10 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN IPR13 IF NO MORE PARTITIONS
STM IPRC SAVE EST ORDINAL
RJM CDS CHECK DEVICE STATUS
ZJN IPR12 IF NOT SHARED DEVICE
IPR11 RJM GCA GET CURRENT *ACGL*
LDD CM GET ACCESS FLAGS
LPN 17
SCN ** (MACHINE MASK FOR THIS MF)
IPRB EQU *-1
ZJN IPR12 IF NO OTHER MF HAS ACCESS FLAG SET
RJM DAS PROCESS ACTIVITY ON OTHER DEVICES
DELAY
LDC ** (EST ORDINAL OF CURRENT PARTITION)
IPRC EQU *-1
STD EO RESTORE EST ORDINAL
UJN IPR11 RETRY
IPR12 LDD EO
UJN IPR10 PROCESS NEXT PARTITION
* SPIN UP DRIVE.
IPR13 RJM SUD SPIN UP DRIVE
ZJN IPR15 IF SUCCESSFUL
IPR14 LJM IPR5 ABANDON RESTORE
* FORMAT DRIVE, IF REQUIRED.
IPR15 LDK SSTL
CRD CM
LDD CM+1
SHN 21-12
PJN IPR16 IF UNCONDITIONAL FORMAT
LDC C0302 REPORT ADDRESSEE STATUS OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P02D5
STML CPBF+FCP PHYSICAL DRIVE PARAMETER
LDM OUPD,DI OFFLINE UNIT NUMBER
SHN 10
STML CPBF+FCP+1 PHYSICAL DRIVE TO STATUS
LDN 12 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN IPR14 IF ERROR
LDML RPBF+11
SHN 21-16
IPR16 PJN IPR17 IF DRIVE NOT FORMATTED
LDM RPBF+7 CHECK NUMBER OF DATA DRIVES
LPN 77
LMD DD EXPECTED DATA DRIVES
NJN IPR17 IF WRONG NUMBER OF DATA DRIVES
LDML BPS,DT CHECK SECTOR SIZE
SCN 77
LMML RPBF+13 ACTUAL SECTOR SIZE
ZJN IPR18 IF CORRECT SECTOR SIZE
IPR17 RJM FMU FORMAT THE DRIVE
* SET UP RESTORE PARAMETERS.
IPR18 LDD DI SET *RESTORE IN PROGRESS* FLAG
STM RSDI
LDN 0
STM RCYL STARTING CYLINDER TO RESTORE
STM RTSN STARTING TRACK, SECTOR TO RESTORE
STM RMUX I/O REQUESTS TO MULTIPLEX PER RESTORE
* LDN 0 INITIALIZE PARTITION SEARCH
IPR19 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN IPR20 IF NO MORE PARTITIONS
CMSTF GDRI CLEAR *RESTORE INITIATION* FROM *ACGL*
LDD EO
UJN IPR19 PROCESS NEXT PARTITION
IPR20 LJM CSR CLEAR SPECIAL REQUEST FLAG / START RESTORE
ISR SPACE 4,25
** ISR - IDENTIFY AND PROCESS SPECIAL REQUEST.
*
* ENTRY (CM+3) = SPECIAL REQUEST FLAGS.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* EXIT (CM+3) UPDATED - BITS FOR *ECAF* AND/OR *LMLF* CLEARED
* IF REQUEST IS FOR THE ALTERNATE CHANNEL.
* TO *DAS1* IF UNIT INTERLOCK NOT OBTAINED.
* TO *ERR* IF CONTROLLER FAILURE.
* TO *ECA* IF ENABLE CONTROLLER ACTIVITY AND *BDLL*
* BIT SET FOR THIS CHANNEL.
* TO SPECIAL REQUEST PROCESSOR (ADDRESS IN TABLE *ISRA*)
* IF SPECIAL REQUEST FOUND, WITH -
* (RW) = INDEX FOR SPECIAL REQUEST.
*
* USES CM+3, PA, RW.
*
* CALLS CEC, CPF, IDU, SEO.
ISR SUBR ENTRY/EXIT
* CHECK FOR *ENABLE CONTROLLER ACTIVITY* (*ECAF*) REQUEST.
* IF REQUEST IS FOR OTHER CHANNEL, LOOK FOR DIFFERENT REQUEST.
LDD CM+3
SHN 21-ECAF+ECAF/12D*12D
PJN ISR3 IF *ECAF* REQUEST NOT SET
RJM CEC CHECK IF REQUEST IS FOR THIS CHANNEL
NJN ISR2 IF REQUEST IS NOT FOR THIS CHANNEL
LJM ECA ENABLE CONTROLLER ACTIVITY
ISR2 LDD CM+3 LOOK FOR A DIFFERENT REQUEST TO PROCESS
SCN 1
ERRNZ ECAF-12D CODE DEPENDS ON VALUE
STD CM+3
* CHECK FOR *LIST FIRMWARE REVISION* (*LMLF*) REQUEST.
* IF REQUEST IS FOR OTHER CHANNEL, LOOK FOR DIFFERENT REQUEST.
ISR3 LDD CM+3
SHN 21-LMLF+LMLF/12D*12D
PJN ISR4 IF *LMLF* REQUEST NOT SET
LPN 77 ISOLATE CHANNEL NUMBER
LMD IR+4
ZJN ISR6 IF REQUEST FOR THIS DRIVER
LDD CM+3 LOOK FOR A DIFFERENT REQUEST TO PROCESS
LPN 37
ERRNZ LMLF-17D CODE DEPENDS ON VALUE
STD CM+3
* IF RESTORE ALREADY IN PROGRESS FOR ANY DEVICE, LEAVE ANY
* ADDITIONAL *RESTORE* REQUEST PENDING.
ISR4 LDM RSDI
ZJN ISR4.1 IF NO RESTORE IN PROGRESS
LDD CM+3 CLEAR *RESTORE* SPECIAL REQUEST FLAG
SCN 2
ERRNZ RSPF-13D CODE DEPENDS ON VALUE
STD CM+3
* SEARCH FOR OTHER SPECIAL REQUEST.
ISR4.1 LDD CM+3 ISOLATE SPECIAL REQUEST FLAGS
STD T0
ZJP ISRX IF NO SPECIAL REQUEST TO PROCESS
LDN ECAF-1
STD RW
ISR5 AOD RW ADVANCE INDEX
LDD T0
SHN 21-0 CHECK NEXT FLAG
STD T0
PJN ISR5 IF NOT SET
LDD RW
UJN ISR7 SET SPECIAL REQUEST FLAG
* PROCESS SPECIAL REQUEST.
ISR6 LDC 6S6+LMLF BITS - 1 TO CLEAR / STARTING BIT
ISR7 STM SREQ,DI SET SPECIAL REQUEST FLAG
LPN 77
SBN ECAF CALCULATE INDEX
STD RW
STM RWST,DI SAVE INDEX
RJM SEO SET EST ORDINAL
LDML ISRA,RW
STDL PA SET PROCESSOR ADDRESS
RJM IDU INTERLOCK DISK UNIT
MJN ISR8 IF CHANNEL DOWN OR NOT ENABLED
NJN ISR9 IF INTERLOCK NOT AVAILABLE
LDML CTST,CI
SHN 21-15
MJN ISR10 IF CONTROLLER DEAD
LJM 0,PA EXIT TO SPECIAL REQUEST
* CHANNEL DOWN OR NOT ENABLED.
ISR8 LDM SREQ,DI
LMC 6S6+LMLF
NJN ISR9 IF NOT LIST MICROCODE REVISION
LDC 6S6+LMLF BITS - 1 TO CLEAR / STARTING BIT
RJM CPF CLEAR SPECIAL REQUEST BIT IN *PUT*
* INTERLOCK NOT AVAILABLE.
ISR9 LDN 0
STM SREQ,DI CLEAR SPECIAL REQUEST FLAG
STM ADDR,DI CLEAR REENTRY ADDRESS
STM ATTN,DI CLEAR INTERRUPT ADDRESS
LJM DAS1 RETURN TO MAIN LOOP
* CONTROLLER FAILURE.
ISR10 LDN ECMD CONTROLLER DEAD
RJM ERR PROCESS ERROR
ISRA BSS 0 SPECIAL REQUEST PROCESSORS
CONL CSR CLEAR FLAG (ENABLE CONTROLLER ACTIVITY)
CONL IPR INITIATE PARITY RESTORE
CONL CSR CLEAR FLAG (RESERVED)
CONL LPS LIST PACK SERIAL NUMBER
CONL CSR CLEAR FLAG (FORMAT REQUEST)
CONL LMR LIST MICROCODE REVISION LEVEL
ISRB BSS 0 INTERNAL SPECIAL REQUEST PROCESSORS
CONL CDT CHECK DRIVE TYPE (INTERNAL REQUEST)
LDP SPACE 4,25
** LDP - LOAD DEVICE PARAMETERS.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) = (EO) = EST ORDINAL.
* (CB) = *CBT* ORDINAL.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
* (CN) = CONTROLLER NUMBER.
* (DD) = NUMBER OF DATA DRIVES IN DEVICE.
* (DN) = DRIVE NUMBER.
* (DT) = DRIVE TYPE.
* (PA) = REQUEST IN PROGRESS ADDRESS.
* (PD) = PARITY DEVICE FLAG.
* (RW) = READ / WRITE FLAG.
* (CM - CM+4) = *PILL* WORD OF *PUT* ENTRY.
* (WB - WB+4) = *UNCT* WORD OF *PUT* ENTRY.
*
* USES CB, CI, CN, DD, DN, DT, PA, PD, RW, CM - CM+4,
* WB - WB+4.
*
* CALLS SEO.
*
* MACROS PUTE.
LDP SUBR ENTRY/EXIT
LDM DVTP,DI
LPN 77
STD DT DRIVE TYPE
LDML DM,DT
SHN 0-17
STD PD NONZERO IF PARITY DEVICE
LDML DM,DT
SHN 0-14
LPN 7
STD DD NUMBER OF DATA DRIVES IN DEVICE
LDML PNUN,DI
SHN -14
SHN 2
ERRNZ CSTBE-4 CODE DEPENDS ON VALUE
ADC CSTB
STD CI CONTROLLER STATE TABLE ADDRESS
LDI DI
ERRNZ PUTO CODE DEPENDS ON VALUE
SHN PUTLS
PUTE *
ADC PILL GET INTERLOCK STATUS
CRD CM
SBN PILL-UNCT FETCH UNIT CONTROL WORD
CRD WB
LDD WB GET CONTROLLER AND UNIT NUMBER
LPC 777
SHN 21-5 EXTRACT CONTROLLER NUMBER
STD CN
SHN 5-21 ISOLATE DRIVE NUMBER
STD DN
LDM RWST,DI RESTORE READ / WRITE STATUS
STD RW
LDML ADDR,DI CURRENT PROCESSING ADDRESS
STDL PA
LDD WB+3 *CBT* ORDINAL
STD CB
RJM SEO SET EST ORDINAL
UJP LDPX RETURN
LMR SPACE 4,15
** LMR - LOG MICROCODE REVISION.
*
* ENTRY (CN) = CONTROLLER NUMBER.
* (DN) = DRIVE NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
*
* EXIT TO *CSR* WHEN THE REQUEST IS COMPLETE.
*
* USES NR+2, NR+3, T3, T4, WB - WB+4.
*
* CALLS ATT, CHD, IBM, IDM, IDT, RCA.
LMR BSS 0 ENTRY
RJM RCA REPORT CONTROLLER ATTRIBUTES
RJM IDT INPUT DATA TO PP
* GENERATE MICROCODE REVISION ERRLOG MESSAGE.
LDD CN SET CONTROLLER NUMBER IN BML MESSAGE
STD NR+3
ADC 2RM0 CONVERT FOR ERRLOG MESSAGE
STM LMRB+6
LDC LMRB+4 LOCATION FOR REVISION LEVEL
STDL T3
SBN LMRB+4-LMRA SET MESSAGE ADDRESS
STML MAD1
LDM ATTB+16 CONVERT REVISION LEVEL
RJM CHD
RJM IDM ISSUE MESSAGE TO ERRLOG
* GENERATE MICROCODE REVISION BML MESSAGE.
LDD MA MOVE MICROCODE REVISION LEVEL
CWM LMRB,ON
SBN 1 COPY TO BML MESSAGE
CRD WB
LDD IR+4 SET CHANNEL NUMBER
STD NR+2
LDN HI0104-HI0100
RJM IBM ISSUE BML MESSAGE
* LDN 0
RJM ATT WAIT FOR COMPLETION RESPONSE
LJM CSR CLEAR SPECIAL REQUEST FLAG
LMRA CON 0,0,0,4,ELDY MICROCODE REVISION ERRLOG MESSAGE
DATA 4HCH**
LMRB DATA 10H MH427-D**
DATA C+,CM0.+
LND SPACE 4,15
** LND - LOCATE NEXT DRIVE (ON SPECIFIED CONTROLLER).
*
* ENTRY (A) = 0 TO LOCATE FIRST DRIVE OF STRING.
* (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (T7) = CURRENT *DST* ADDRESS, IF (A) .NE. 0.
*
* EXIT (A) = (T7) = DEVICE STATE TABLE ADDRESS OF NEXT DRIVE.
* (A) = 0 IF NO MORE DRIVES (ON CONTROLLER).
*
* USES T7.
LND2 LDM CTST,CI ADDRESS OF FIRST DRIVE IN STRING
STD T7
LND3 LDM PNUN,T7 VERIFY CONTROLLER
LMM PNUN,DI
SHN -6
NJN LND1 IF NOT SPECIFIED CONTROLLER
LDD T7
LND SUBR ENTRY/EXIT
ZJN LND2 IF INITIAL CALL
LND1 LDN DSTBE
RAD T7 ADVANCE DEVICE STATE TABLE ADDRESS
LMM DASB
NJN LND3 IF NOT END OF BLOCK
* LDN 0
UJN LNDX RETURN
LNE SPACE 4,25
** LNE - LOCATE NEXT EST/PARTITION FOR THIS DEVICE.
*
* LOCATE NEXT EST ASSOCIATED WITH THE CURRENT DEVICE.
*
* ENTRY (A) .EQ. 0, START SEARCH WITH EST ORDINAL IN *PUT*.
* (A) .NE. 0, (A) = LAST EST ORDINAL PROCESSED.
* (DI) = DEVICE STATUS TABLE ADDRESS.
* (EO) = CURRENT EST ORDINAL.
*
* EXIT (A) = (EO) = EST ORDINAL OF NEXT PARTITION.
* (A) = 0, IF NO MORE PARTITIONS FOR THIS *PUT*.
* (EO) = ORIGINAL EST ORDINAL (FROM *CBT*/*PUT*).
*
* USES EO, CM - CM+4.
*
* CALLS REE, SEO.
*
* MACROS PUTE.
LNE3 RJM SEO SET EST ORDINAL FROM *CBT* OR *PUT*
LNE4 LDN 0 INDICATE NO MORE PARTITIONS
LNE SUBR ENTRY/EXIT
ZJN LNE1 IF INITIAL ENTRY OF SEARCH
STD EO SET EST ORDINAL
LDML DVTP,DI
SHN 21-17
PJN LNE4 IF NOT PARTITIONED DEVICE
UJN LNE2 LOCATE NEXT EST ORDINAL
LNE1 LDI DI *PUT* ORDINAL FROM DEVICE STATE TABLE
ERRNZ PUTO CODE DEPENDS ON VALUE
SHN PUTLS
PUTE *
ADC UNCT GET FIRST EST FOR THIS *PUT*
CRD CM
SOD CM+1 SET STARTING EST ORDINAL FOR SEARCH
STD EO
LNE2 AOD EO
LMC ** HIGHEST EST ORDINAL FOR THIS DRIVER (+1)
LNEA EQU *-1
ZJN LNE3 IF NO MORE *EST* ENTRIES TO CHECK
RJM REE READ EST ENTRY
LDD CM
SHN 21-13
PJN LNE2 IF NOT MASS STORAGE
SHN 21-5-21+13
PJN LNE2 IF NOT A BUFFERED DEVICE
LDD CM+4
SHN 3
ADK DILL
CRD CM
LDD CM+2 GET *PUT* ORDINAL FROM *MST*
LMI DI *PUT* ORDINAL FROM DEVICE STATE TABLE
ERRNZ PUTO CODE DEPENDS ON VALUE
NJN LNE2 IF NOT FOR THE DESIRED *PUT*
LDD EO
UJP LNEX RETURN NEXT EST ORDINAL
LPS SPACE 4,15
** LPS - LOG PACK SERIAL NUMBER(S).
*
* ENTRY (CN) = CONTROLLER NUMBER.
* (DN) = DRIVE NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
*
* EXIT TO *CSR* WHEN THE REQUEST IS COMPLETE.
*
* USES NR+2, NR+3, T3, T4, WB - WB+4.
*
* CALLS ATT, CAN, C2D, IBM, IDM, IDT, SOU, UPD.
LPS BSS 0 ENTRY
LDD DN
STM PHYD,DI PHYSICAL DRIVE NUMBER
LDC C0200 REPORT ATTRIBUTES OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P036C REQUEST ATTRIBUTE PARAMETER
STM CPBF+FCP
LDC 0#8050 RETURN ATTRIBUTE ID 50 AS DATA
STML CPBF+FCP+1
LDN 12 COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDC ATTB+0#1E SET ADDRESS OF FIRST PACK SERIAL NUMBER
STDL T4
* GENERATE PACK SERIAL NUMBER ERRLOG MESSAGE.
LPS1 LDC LPSB+2 SET ADDRESS FOR CONVERSION
STDL T3
SBN LPSB+2-LPSA DEFINE MESSAGE ADDRESS
STML MAD1
RJM CAN CONVERT ASCII NUMBER TO DISPLAY CODE
LDN 11
RADL T4 UPDATE POINTER TO NEXT SERIAL NUMBER
LDM PHYD,DI
STD NR+3 PUT UNIT NUMBER IN BML MESSAGE
RJM C2D CONVERT UNIT NUMBER FOR ERRLOG MESSAGE
STM LPSA+11
LDD EO CONVERT EST ORDINAL
SHN -3
RJM C2D
STM LPSA+6 INSERT IN ERRLOG MESSAGE
LDM DM,DT
STM LPSA+5 SAVE DEVICE MNEMONIC
STD NR+2
LDD EO
LPN 7 CONVERT LOWER DIGIT
SHN 6
ADC 2R0, ADD TO ERRLOG MESSAGE
STM LPSA+7
RJM IDM ISSUE MESSAGE TO ERRLOG
* GENERATE PACK SERIAL NUMBER BML MESSAGE.
LDD MA MOVE DRIVE SERIAL NUMBER
CWM LPSB,ON
SBN 1 COPY TO BML MESSAGE
CRD WB
LDD EO INSERT EST ORDINAL
STD WB
LDN 0 CLEAR UNUSED FIELD
STD WB+1
RJM IBM ISSUE BML MESSAGE
RJM UPD UPDATE PHYSICAL DRIVE
NJP LPS1 IF MORE PHYSICAL DRIVES
* LDN 0
RJM ATT WAIT FOR COMPLETION RESPONSE
LJM CSR CLEAR SPECIAL REQUEST FLAG
LPSA CON 0,0,0,4,ELDY PACK SERIAL NUMBER ERRLOG MESSAGE
DATA 10H*****, U**
LPSB DATA C+,PS=******.+
LSD SPACE 4,15
** LSD - LOCATE SELECTED DRIVE IN *DSTB*.
*
* ENTRY (T4) = DRIVE NUMBER.
*
* EXIT (A) = 0 IF NO RESPONSE EXPECTED.
* = DEVICE STATE TABLE ADDRESS FOR DRIVE.
*
* CALLS LND.
LSD SUBR ENTRY/EXIT
LDN 0
UJN LSD2 LOCATE FIRST DRIVE
LSD1 LDN 1
LSD2 RJM LND
ZJN LSDX IF END OF DRIVE STRING
LDD FC
NJN LSD3 IF FORMAT COMPLETE
LDML ATTN,T7
ZJN LSD1 IF RESPONSE NOT EXPECTED
UJN LSD4
LSD3 LDM PNUN,T7
LPN 77 CHECK DRIVE NUMBER
LMD T4
NJN LSD1 IF SPECIFIED DRIVE NOT FOUND
LSD4 LDD T7
UJN LSDX RETURN
PEF SPACE 4,15
** PEF - PROCESS ERROR FLAGS.
*
* ENTRY (RW) = ERROR INDEX.
* (CB) = *CBT* ORDINAL.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DN) = DRIVE NUMBER.
* (T1) = BYTE 0 OF *PAD4* WORD OF CBT ENTRY.
* (T2) = BYTE 0 OF *HSLK* WORD OF CBT ENTRY.
* (NR - NR+4) = *PAD1* WORD OF *CBT* ENTRY.
*
* EXIT (A) = 0 IF OK TO INITIATE I/O.
* TO (0,PA) TO PROCESS A CHANNEL SPECIFIC READ OR
* WRITE REQUEST. AFTER SUSPECT STATE IS SET, THE
* REQUEST BECOMES CHANNEL SPECIFIC.
* TO *CMP10* IF ERROR IN PROGRESS ON A DIFFERENT DEVICE.
*
* CALLS IDU, IIO, LDP, SEP.
PEF1 LDN 0 INDICATE I/O IN ORDER
PEF SUBR ENTRY/EXIT
LDD T1
SHN -6 CHECK CHANNEL NUMBER
LMD IR+4
NJN PEFX IF I/O DISABLED ON THIS ACCESS
LDD RW
ZJN PEFX IF *1MV* DEVICE VERIFICATION
LDM ERFL
LMD DI
ZJN PEFX IF ERROR IN PROGRESS ON THIS DEVICE
LDML CTST,CI
SHN 21-15
MJN PEF1 IF CONTROLLER DEAD
LDML ERCT,DI
NJN PEF1 IF I/O INITIATED
RJM IDU INTERLOCK DEVICE
NJN PEFX IF INTERLOCK NOT AVAILABLE
LDN CSRC
STM ERCT,DI SET INITIAL ERROR COUNT
RJM LDP LOAD DEVICE PARAMETERS
LDD CM+1
SHN -6 FAILING DRIVE NUMBER
STM PHYD,DI FOR RECOVERED ERROR REPORTING
RJM SEP SET ERROR PROCESSING INTERLOCK
NJP CMP10 IF ERROR IN PROGRESS ON A DIFFERENT DEVICE
LDD CB INITIATE I/O
RJM IIO
LJM 0,PA EXIT TO PROCESSOR
PLP SPACE 4,20
** PLP - PROCESS LOST PARITY.
*
* PLP HANDLES *PROCESS LOST PARITY* CONDITIONS, PROVIDED THAT
* THE DEVICE HAS BEEN RECOVERED. IF IT HAS, PLP SETS THE UNIT
* NUMBER AND THE *PARITY PROTECTION LOST* FLAG IN MST WORD
* *ACGL*, SO THAT THE THE E,E DISPLAY ON EACH MAINFRAME WILL
* SHOW WHICH DRIVE IS OFF-LINE.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* USES CM - CM+4.
*
* CALLS CDS, IEE, LNE.
*
* MACROS MONITOR, SMSTF.
PLP4 LDC ** (COUNT OF NEW PARTITIONS PROCESSED)
PLPA EQU *-1
ZJN PLP5 IF NO NEW PARTITIONS PROCESSED
RJM IEE ISSUE E,E EVENT
PLP5 LDC ** (COUNT OF UNPROCESSED PARTITIONS LEFT)
PLPB EQU *-1
NJN PLPX IF NOT ALL PARTITIONS PROCESSED
LDML DVTP,DI CLEAR *PROCESS LOST PARITY* FLAG
LPC 137777
STML DVTP,DI
PLP SUBR ENTRY/EXIT
LDML DVTP,DI
SHN 21-16
PJN PLPX IF *PROCESS LOST PARITY* NOT SET
LDN 0 CLEAR PARTITION COUNTS
STM PLPA
STM PLPB
* LDN 0 INITIALIZE PARTITION SEARCH
PLP1 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN PLP4 IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
MJN PLP2 IF DEVICE NOT RECOVERED
LDD CM+4 CHECK IF *PARITY LOST* FLAG ALREADY SET
SHN 3
ADN ACGL
CRD CM
LDD CM+4
SHN 21-2
MJN PLP3 IF PARTITION ALREADY PROCESSED
LDD EO SET EST ORDINAL
STD CM+1
LDM OUPD,DI OFFLINE UNIT OF PARITY DEVICE
STD CM+2
LDN SOUS SET OFFLINE UNIT IN *ACGL*
STD CM+3
MONITOR STBM
SMSTF GDPL SET *PARITY PROTECTION LOST* IN *ACGL*
AOM PLPA INDICATE NEW PARTITION PROCESSED
UJN PLP3 PROCESS NEXT PARTITION
PLP2 AOM PLPB INCREMENT UNPROCESSED PARTITION COUNT
PLP3 LDD EO
UJP PLP1 PROCESS NEXT PARTITION
PPE SPACE 4,10
** PPE - PROCESS PARITY ENABLE.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* EXIT (DVTP,DI) BIT 10 CLEAR, IF PROCESSING COMPLETE.
* (DVTP,DI) BIT 7 SET, IF PROCESSING COMPLETE.
*
* CALLS EMP.
PPE SUBR ENTRY/EXIT
LDML DVTP,DI
SHN 21-12
PJN PPEX IF *ENABLE MMF PARITY ACCESS* NOT SET
RJM EMP ENABLE MMF PARITY DEVICE ACCESS
NJN PPEX IF NOT ALL PARTITIONS PROCESSED
LDML DVTP,DI CLEAR *ENABLE MMF PARITY ACCESS* FLAG
LPC 175577
LMC 200 SET *CHECK MMF PARITY ACCESS* FLAG
STML DVTP,DI
UJN PPEX RETURN
RBD SPACE 4,10
** RBD - READ *BDLL*.
*
* ENTRY (EO) = EST ORDINAL.
*
* EXIT (CM - CM+4) = *BDLL* WORD OF MST.
*
* USES CM - CM+4.
*
* CALLS REE.
RBD SUBR ENTRY/EXIT
RJM REE READ EST ENTRY
LDD CM+4
SHN 3
ADN BDLL
CRD CM
UJN RBDX RETURN
RCA SPACE 4,10
** RCA - REPORT CONTROLLER ATTRIBUTES.
*
* ENTRY (CN) = CONTROLLER NUMBER.
*
* EXIT PARAMETERS SET UP FOR *IDT* CALL.
*
* CALLS SOC.
RCA SUBR ENTRY/EXIT
LDC C0200 REPORT ATTRIBUTES OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDC P036C REQUEST ATTRIBUTE PARAMETER
STM CPBF+FCP
LDC 0#8050 RETURN ATTRIBUTE ID 50 AS DATA
STML CPBF+FCP+1
LDN 12 COMMAND PACKET LENGTH
UJN RCAX RETURN
RCT SPACE 4,10
** RCT - READ CHANNEL TABLE.
*
* EXIT (A) = CHANNEL TABLE STATUS BYTE.
*
* USES NR - NR+4.
*
* MACROS CHTE.
RCT SUBR ENTRY/EXIT
CHTE *
LDC 0 READ CHANNEL TABLE ENTRY
CRD NR
RCTA LDD NR
UJN RCTX RETURN
RDO SPACE 4,15
** RDO - REPORT DRIVE OFF-LINE.
*
* RDO SETS THE *PROCESS LOST PARITY* FLAG SO THAT MST WORD
* *ACGL* WILL BE UPDATED WHEN THE DEVICE HAS BEEN RECOVERED.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* CALLS PLP.
RDO SUBR ENTRY/EXIT
LDML DVTP,DI SET *PROCESS LOST PARITY* FLAG
LPC 137777
LMC 40000
STML DVTP,DI
RJM PLP PROCESS LOST PARITY
UJN RDOX RETURN
REE SPACE 4,10
** REE - READ EST ENTRY.
*
* ENTRY (EO) = EST ORDINAL.
*
* EXIT (A) = ADDRESS OF *EQDE* WORD OF EST ENTRY.
* (CM - CM+4) = *EQDE* WORD OF EST ENTRY.
*
* USES CM - CM+4.
*
* MACROS SFA.
REE SUBR ENTRY/EXIT
SFA EST,EO
ADK EQDE
CRD CM
UJN REEX RETURN
RLB SPACE 4,15
** RLB - READ LINKAGE BITS.
*
* ENTRY (T6) = ADDRESS FOR LINKAGE.
* (PB) = CONTROL BUFFER ORDINAL.
* (T1) = DATA BUFFER ADDRESS.
* (T2) = CONTROL BUFFER WORD NUMBER.
* (CM - CM+4) = *PAD* WORD OF *CBT* ENTRY.
*
* EXIT SECTOR LINKAGE SET IN *CBT* ENTRY.
*
* USES T1, T6.
*
* MACROS CBTE.
RLB1 LDN 10+4 ADVANCE BUFFER ADDRESS
RADL T1
LDIL T1 EXTRACT LINKAGE FROM BUFFER
RLB2 SHN -14
SHN 10 POSITION FOR *CBT* ENTRY
STI T6
LDML 4,T1 EXTRACT LINKAGE FROM BUFFER
SHN -14
SHN 4 POSITION FOR *CBT* ENTRY
RAI T6
LDML 10,T1 EXTRACT LINKAGE FROM BUFFER
SHN -14
* SHN 0 POSITION FOR *CBT* ENTRY
RAI T6
AOD T6 ADVANCE *CBT* WORD ADDRESS
LMN CM+5
NJN RLB1 IF MORE LINKAGE
LDD PB
SHN CBTLS
CBTE *
ADC 0 FWA OF *CBT*
ADD T2
CWD CM UPDATE CONTROL BUFFER ENTRY
RLB SUBR ENTRY/EXIT
UJN RLB2 MOVE SECTOR LINKAGE
RMR SPACE 4,10
** RMR - READ CHANNEL STATUS REGISTER.
*
* EXIT (A) = 0 IF NO CHANNEL ERROR.
* (RBUF) = REGISTER CONTENTS.
*
* CALLS WMC.
RMR SUBR ENTRY/EXIT
FNC. IOUC,MR
ACN. MR ACTIVATE MAINTENANCE CHANNEL
LDN 0
OAN. MR OUTPUT NULL PARAMETER
CON LDCI
IAN CH (FORCE CHANNEL TABLE ENTRY)
ORG *-1
CON RCSR+CH TRANSMIT REGISTER NUMBER
OAN. MR
RJM WMC WAIT CHANNEL EMPTY
DCN. MR+40
NJN RMRX IF CHANNEL HUNG FULL
ACN. MR
LDN RBUFL READ CHANNEL STATUS REGISTER
IAM. RBUF,MR
UJN RMRX RETURN
RND SPACE 4,15
** RND - RUN DIAGNOSTICS.
*
* NOTE - THE DRIVE MUST BE CLUSTERED TO RUN DIAGNOSTICS.
* THE CODE WILL NOT RUN DIAGNOSTICS IF A FORMAT
* REQUEST IS PRESENT TO ENSURE THIS ROUTINE IS ONLY
* RUN WHEN THE DRIVE IS CLUSTERED.
*
* ENTRY (PHYD,DI) = DRIVE TO RUN DIAGNOSTICS.
* (FC) = 0 IF FORMAT NOT COMPLETE.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT TO *ERR* IF ERROR.
*
* CALLS ATT, SOU, WCB.
RND SUBR ENTRY/EXIT
LDD FC
ZJN RNDX IF FORMAT NOT COMPLETE
LDML EDBF+FALT
SBN EDPE
ZJN RND1 IF MEDIA ERROR
SBN EIVR-EDPE
ZJN RND1 IF ID24
SBN EMEX-EIVR
NJN RNDX IF NOT ID26
RND1 STM ERRA ENABLE LOGGING OF ERROR RESPONSE
LDC C8100 DRIVE DIAGNOSTIC COMMAND
RJM SOU SET OPERATION CODE AND UNIT
LDC P02D5
STML CPBF+FCP PARAMETER TO SELECT DRIVE
LDM PHYD,DI
SHN 10
STML CPBF+FCP+1 PHYSICAL DRIVE NUMBER
LDN 12 WRITE COMMAND PACKET
RJM WCB
LDN CMSS PROCESS ATTENTION
RJM ATT
ZJP RNDX IF DIAGNOSTICS COMPLETED SUCCESSFULLY
LCN EDTF DIAGNOSTIC FAULT
RJM ERR PROCESS ERROR
ROD SPACE 4,20
** ROD - RESTORE OFF-LINE DRIVE.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
*
* EXIT TO CALLER IF NO RESTORE OR NOT TIME TO RESTORE.
* TO *CMP* IF RESTORE CYLINDER COMMAND COMPLETE.
* TO *ERR* IF ERROR.
*
* USES T1.
*
* CALLS ATT, CLP, CRP, CSC, IDM, IEM, LNE, SOU, WCB.
*
* MACROS MONITOR.
ROD10 LDDL MS
LMC 0#42
NJN ROD11 IF NOT CONDITIONAL SUCCESS
LDDL PA SET INTERRUPT REENTRY ADDRESS
STML ATTN,DI EXPECT A COMMAND COMPLETE RESPONSE
ROD11 LCN EROD RESTORE OFF-LINE DRIVE ERROR
UJN ROD13 PROCESS ERROR
ROD12 LDN ECMD CONTROLLER DEAD
ROD13 RJM ERR PROCESS ERROR
ROD SUBR ENTRY/EXIT
LDM RSDI CHECK IF RESTORE IN PROGRESS
LMD DI
NJN RODX IF NO RESTORE IN PROGRESS ON THIS DEVICE
LDM RMUX
NJN RODX IF NOT TIME TO RESTORE A CYLINDER
LDML CTST,CI
SHN 21-15
MJN ROD12 IF CONTROLLER DEAD
* RESTORE NEXT CYLINDER.
LDC CE005 RESTORE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
RJM CSC COMPUTE SECTOR COUNT
LDC P0931
STML CPBF+FCP COMMAND EXTENT PARAMETER
LDC P02D5
STML CPBF+FCP+5 PHYSICAL DRIVE PARAMETER
LDM OUPD,DI
STM PHYD,DI
SHN 10
STML CPBF+FCP+6 PHYSICAL DRIVE PARAMETER
LDC 0#2E3
STML CPBF+FCP+7 RESTORE OPTION PARAMETER
LDM RCYL
STM CPBF+FCP+3 CYLINDER TO RESTORE
STM CYLN,DI FOR ERROR LOGGING
LMM CYUN,DT CHECK FOR LAST CYLINDER
NJN ROD1 IF NOT LAST CYLINDER
LDC 0#901
STML CPBF+FCP NO OP EXTENT PARAMETER
LDC 0#100
UJN ROD2 ON LINE DRIVE
ROD1 LDC 0#200 RESTORE DRIVE
ROD2 STML CPBF+FCP+10
LDN 30 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJP ROD10 IF ERROR
STM RTSN NEXT TRACK, SECTOR TO RESTORE
LDML RMUX
SHN 21-17
MJN ROD3 IF MULTIPLEXING DISABLED
LDN IRBR
STM RMUX I/O REQUESTS BEFORE NEXT RESTORE
* CALCULATE REMAINING CYLINDERS.
ROD3 LDM CYUN,DT CALCULATE REMAINING CYLINDERS / 100B
SBM RCYL
ADN 77
SHN -6
STD T1
LMC ** (VALUE PREVIOUSLY CALCULATED)
RODA EQU *-1
ZJN ROD5 IF VALUE HAS NOT CHANGED
LDN 0 INITIALIZE PARTITITON SEARCH
ROD4 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN ROD5 IF NO MORE PARTITIONS
STD CM+1 SET EST ORDINAL
LDD T1 REMAINING CYLINDERS / 100B
STM RODA
STD CM+2
LDN SRCS SET REMAINING CYLINDERS / 100B IN *ACGL*
STD CM+3
MONITOR STBM
LDD EO
UJN ROD4 PROCESS NEXT PARTITION
ROD5 AOM RCYL INCREMENT CYLINDER TO RESTORE
SBM CYUN,DT CYLINDERS REMAINING
MJN ROD6 IF MORE CYLINDERS TO RESTORE
NJN ROD7 IF NO MORE CYLINDERS TO RESTORE
ROD6 LJM CMP COMPLETION PROCESSING
* RESTORE COMPLETE.
ROD7 RJM CRP CLEAR *RESTORE IN PROGRESS* FLAGS
RJM CLP CLEAR *LOST PARITY* FLAGS
LDM OUPD,DI DRIVE JUST RESTORED
STM PHYD,DI
LDN EROD RESTORE COMMAND
STM EDBF+CODE
LDC PDPE PARITY DRIVE PROTECTION ENABLED
STM EDBF+FALT FINAL FAULT CODE
LDN 0
STM EDBF+FCS1
STM EDBF+FCS2
STM EDBF+FCS3
* LDN 0 INITIALIZE PARTITION SEARCH
ROD8 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN ROD9 IF NO MORE PARTITIONS
LDC ERPR *EQXXX, UXX, PARITY PROTECTION RESTORED.*
RJM IEM ISSUE ERROR LOG MESSAGE
LDD EO
UJN ROD8 PROCESS NEXT PARTITION
ROD9 LDN 4
STM MSGL+1 SET BASIC MESSAGE LENGTH
AOM ERCT,DI
LDD HN
ERRNZ HD0100-100 CODE DEPENDS ON VALUE
RJM IDM ISSUE *PARITY RESTORED* BML MESSAGE
LJM CMP COMPLETION PROCESSING
RCYL CON 0 CURRENT CYLINDER BEING RESTORED
RMUX CON 0 1/X, 15/Y WHERE
X = 0 IF MULTIPLEXING ALLOWED
Y = REQUESTS TO MULTIPLEX PER RESTORE
RSDI CON 0 RESTORE IN PROGRESS FLAG (*DST* INDEX)
RSIN CON 0 RESTORE INTERLOCK FLAG (*DST* INDEX)
RTSN CON 0 6 / RESTORE TRACK, 6 / RESTORE SECTOR
SCD SPACE 4,15
** SCD - STORE *CPD* DATA.
*
* ENTRY (A) = 0 TO INDICATE CHANNEL INACTIVE.
* = 1 TO INDICATE CHANNEL ACTIVE.
* (UC) = UNIT ACTIVITY COUNT.
*
* EXIT (T7) = 0.
*
* USES CM - CM+2, T5 - T7.
*
* MACROS CCTE.
SCD SUBR ENTRY/EXIT
STD T5
LDN ZERL CLEAR UNUSED BYTES
CRD T6
LDD UC INSERT UNIT COUNT
STD T6
CCTE *
LDC CREQ STORE *CPD* DATA
CWD T5
UJN SCDX RETURN
SCP SPACE 4,10
** SCP - SET COMMAND PARAMETER.
*
* ENTRY (A) = COMMAND PARAMETER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DDTA) = TOTAL NUMBER OF DRIVES IN LOGICAL UNIT.
*
* EXIT (A) = 0 IF 1X DRIVE.
* (CPBF+CUN) = LOGICAL ADDRESS.
SCP SUBR ENTRY/EXIT
STML CPBF+FCP
LDML DDTA TOTAL DRIVES
LMN 1
ZJN SCPX IF SINGLE DRIVE
LDML CPBF+CUN
SCN 0#38
STML CPBF+CUN ENSURE STRING BIT CLEAR
LDN 1
UJN SCPX RETURN
SDO SPACE 4,15
** SDO - SET DRIVE OFF-LINE.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
* (PD) = 0, IF NOT PARITY DEVICE.
* (CPEA) = 0 IF DRIVE SHOULD BE SET OFF-LINE.
* (PHYD,DI) = FAILING DRIVE.
*
* EXIT TO CALLER IF NO DRIVE TO SET OFF-LINE.
* TO *CMP10* WITH *ERCT* CLEAR IF DRIVE SET OFF-LINE.
* TO *ERR* IF ERROR.
*
* CALLS ATT, CRP, IDM, IEM, LNE, RDO, SOU, WCB.
SDO SUBR ENTRY/EXIT
LDD PD
ZJN SDOX IF NOT PARITY DEVICE
LDM CPEA
NJN SDOX IF NO DRIVE TO SET OFF-LINE
STM ERRA ENABLE LOGGING OF ERROR
RJM CRP CLEAR *RESTORE IN PROGRESS*, IF SET
LDC C0209 LOAD ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P02D5
STML CPBF+FCP PARAMETER WITH FAILING DRIVE NUMBER
LDM PHYD,DI
STM OUPD,DI OFFLINE DRIVE UNIT NUMBER
SHN 10
STML CPBF+FCP+1 FAILING DRIVE NUMBER
LDC 0#1D9
STML CPBF+FCP+2 PARAMETER TO SET OFF-LINE DRIVE
LDN 14 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND BLOCK
LDN CMSS
RJM ATT WAIT FOR ATTENTION
ZJN SDO1 IF SUCCESSFUL
LCN ERDA REPORT DRIVE ATTRIBUTES ERROR
RJM ERR PROCESS ERROR
* *HPA* DOES NOT DISPLAY THE DATA WITH SYMPTOM 0111 WHEN THE
* ERROR IS RECOVERABLE, SO TWO MESSAGES ARE ISSUED TO THE BML.
SDO1 AOM ERCT,DI
LCN 0
STM EDBF+FCS2 INDICATE NO RESPONSE FOR HPA
LDC PDPD PARITY DRIVE PROTECTION DISABLED
STM EDBF+FALT FINAL FAULT CODE
LDD HN
ERRNZ HD0100-100 CODE DEPENDS ON VALUE
RJM IDM ISSUE INITIAL BML MESSAGE
LDN 3
STM MSGL+1 MESSAGE LENGTH
LDC HD0111
RJM IDM ISSUE FINAL BML MESSAGE
STM ERCT,DI CLEAR ERROR COUNT
* LDN 0 INITIALIZE PARTITION SEARCH
SDO2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN SDO3 IF NO MORE PARTITIONS
LDC ERPD *EQXXX, UXX, PARITY PROTECTION DISABLED.*
RJM IEM ISSUE ERROR LOG MESSAGE
LDD EO
UJN SDO2 PROCESS NEXT PARTITION
SDO3 RJM RDO REPORT DRIVE OFF-LINE
LJM CMP10 ABANDON REQUEST (RETRY LATER)
SDT SPACE 4,10
** SDT - SET DATA TRANSFER MODE.
*
* ENTRY (TM) = 0 TO STREAM DATA.
*
* EXIT TO *ERR* IF ERROR.
*
* CALLS ATT, SOC, WCB.
SDT SUBR ENTRY/EXIT
LDC C0209 LOAD ATTRIBUTE OPERATION CODE
RJM SOC SET OPERATION CODE AND CONTROLLER
LDC 0#46E
STML CPBF+FCP PARAMETER 6E
LDDL TM
ADC 0#C080
STML CPBF+FCP+1 MODE FOR DATA
LDN 0
STML CPBF+FCP+2
LDN 14 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
ZJP SDTX IF SUCCESSFUL
LCN ELCA LOAD CONTROLLER ATTRIBUTES FAILURE
RJM ERR PROCESS ERROR
SEC SPACE 4,15
** SEC - SET ERROR CODE.
*
* ENTRY (CI) = CONTROLLER STATE TABLE ADDRESS.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* USES RF, T5, UC, WB+3, WB+4.
*
* CALLS CAC, CEA, CEC, CFM, CPF, CRP, DCE, DRT, IMR, IOM, LDP.
* THE *SETS* MONITOR REQUEST IS USED TO MOVE THE I/O REQUEST
* TO AN ALTERNATE CHANNEL. THE I/O BUFFER IS ONLY DELINKED
* IF THE REQUEST IS CHANNEL SPECIFIC.
SEC6 LDM RSDI CHECK IF RESTORE IN PROGRESS
LMD DI
NJN SEC7 IF NO RESTORE IN PROGRESS ON THIS DEVICE
LDC 100000
STML RMUX DISABLE REQUEST MULTIPLEXING
UJN SECX RETURN
SEC7 LDN 1 BUFFER COUNT TO BE DELINKED
STD WB+3
LDN SETS INSERT CODE IN *CBT*, RELEASE INTERLOCK
RJM IMR
* LDN 0 SET INTERLOCK RELEASED (FOR *CMP*)
STM RQLN,DI
SOD UC DECREMENT UNIT ACTIVITY COUNT
SEC SUBR ENTRY/EXIT
LDN 0
STD RF CLEAR RESET IN PROGRESS FLAG
RJM IOM CLEAR OPERATOR MESSAGE
RJM LDP LOAD DEVICE PARAMETERS
LDML EDBF+FALT
SHN -2 CREATE INDEX FROM FAULT CODE
STD T5
LDM TMSE,T5
STD WB+4 SET MASS STORAGE ERROR CODE
RJM DRT DETERMINE REQUEST TYPE
NJP SEC6 IF I/O REQUEST
LDML CTST,CI
SHN 21-15
MJN SEC1 IF CONTROLLER DEAD
SHN -21+15+22
LPC 137777 CLEAR RESET FLAG (BIT 14)
STML CTST,CI
SEC1 RJM CRP CLEAR *RESTORE IN PROGRESS*
RJM LDP LOAD DEVICE PARAMETERS
LDD CM+3
SHN 21-LMLF+14
PJN SEC2 IF *LIST MICROCODE REVISION* NOT SET
LPN 77
LMD IR+4
NJN SEC2 IF REQUEST NOT FOR THIS DRIVER
LDC 6S6+LMLF BITS - 1 TO CLEAR / STARTING BIT
RJM CPF CLEAR SPECIAL REQUEST BIT IN *PUT*
SEC2 RJM LDP LOAD DEVICE PARAMETERS
LDD CM+3
SHN 21-ECAF+14
PJN SEC3 IF *ENABLE CONTROLLER ACTIVITY* NOT SET
RJM CEC CHECK IF REQUEST IS FOR THIS CHANNEL
NJN SEC3 IF REQUEST IS NOT FOR THIS CHANNEL
RJM CEA CLEAR REQUEST
SEC3 RJM CAC CHECK FOR ALTERNATE CHANNEL
NJN SEC4 IF NO ALTERNATE CHANNEL
RJM DCE DOWN CHANNEL ON EQUIPMENT
UJN SEC5 COMPLETE PROCESSING
SEC4 LDC 3S6+ECAF+1 BITS - 1 TO CLEAR / STARTING BIT
RJM CPF CLEAR SPECIAL REQUEST BITS IN *PUT*
RJM CFM ENSURE *FORMAT PENDING* CLEARED IN MST
SEC5 LJM SECX RETURN
SEO SPACE 4,15
** SEO - SET EST ORDINAL.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (CB) = CBT ORDINAL.
*
* EXIT (A) = (EO) = EST ORDINAL.
*
* USES EO, CW - CW+4.
*
* CALLS DRT.
*
* MACROS CBTE, PUTE.
SEO1 LDD CW+1 GET EST ORDINAL FROM *PUT*
SEO2 STD EO SET EST ORDINAL
SEO SUBR ENTRY/EXIT
LDI DI
ERRNZ PUTO CODE DEPENDS ON VALUE
SHN PUTLS
PUTE *
ADC UNCT FETCH UNIT CONTROL WORD
CRD CW
RJM DRT DETERMINE REQUEST TYPE
ZJN SEO1 IF NOT I/O REQUEST
LDD CB *CBT* ORDINAL
SHN CBTLS
CBTE *
ADC FSTC
CRD CW GET EST ORDINAL FROM *CBT*
LDD CW
UJN SEO2 SET EST ORDINAL AND RETURN
SEP SPACE 4,30
** SEP - SET ERROR PROCESSING INTERLOCK.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* EXIT (A) .EQ. 0, IF INTERLOCK SET FOR THIS DEVICE.
* (A) .NE. 0, IF ALREADY SET FOR A DIFFERENT DEVICE.
* (ERFL) = DEVICE STATE TABLE OF DEVICE WITH ERROR.
* TO *CMP10*, IF RESTORE IN PROGRESS ON OTHER MF.
*
* USES T1, CM - CM+4.
*
* CALLS CBI, CDS, CMR, DAS, LNE, SEO, UBP.
*
* MACROS DELAY, SMSTF, MONITOR.
SEP CON 0 ENTRY
LDML SEP SAVE RETURN ADDRESS
STML SEPR,DI
SEP1 LDM ERFL
ZJN SEP3 IF ERROR PROCESSING FLAG NOT SET
SEP2 LDML SEPR,DI GET RETURN ADDRESS
STDL T1
LDM ERFL RETURN (A) = 0 IF ERROR IS ON THIS DEVICE
LMD DI
LJM 0,T1 RETURN
* SET MMF ERROR PROCESSING INTERLOCKS, IF REQUIRED.
SEP3 LDML DVTP,DI
SHN 21-11
PJN SEP6 IF NOT SHARED DEVICE
LDN 0 INITIALIZE PARTITION SEARCH
SEP4 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN SEP6 IF NO MORE PARTITIONS TO PROCESS
RJM CDS CHECK DEVICE STATUS
MJP SEP10 IF DEVICE NOT RECOVERED
* DEVICE RECOVERED. SET ERROR INTERLOCK IN *BDT*.
LDD EO SET EST ORDINAL
STD CM+4
LDN SEPS SET ERROR PROCESSING INTERLOCK IN *BDT*
STD CM+1
MONITOR MTEM
LDD CM+4
NJP SEP13 IF NOT SUCCESSFUL
LDN 1 SET FLAG THAT SAYS THIS MF HAS INTERLOCK
STD CM+2
LDN 26 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
SEP5 LDD EO
UJN SEP4 PROCESS NEXT PARTITION
SEP6 LDD DI SET ERROR PROCESSING FLAG
STM ERFL
* SET ERROR PROCESSING FLAG(S) IN THE MST(S).
SEP7 LDN 0 INITIALIZE PARTITION SEARCH
SEP8 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJP SEP2 IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
MJN SEP9 IF DEVICE NOT RECOVERED
SMSTF GDER SET *ERROR RECOVERY IN PROGRESS* FLAG
SEP9 LDD EO
UJN SEP8 CHECK FOR NEXT PARTITION
* DEVICE NOT RECOVERED. SET RECOVERY ERROR INTERLOCK.
SEP10 LDN SRIS SET RECOVERY ERROR PROCESSING INTERLOCK
SEP11 STD CM+1
MONITOR MTEM
LDD CM+4
SBN 2
ZJN SEP13 IF REJECT (ANOTHER DRIVER HOLDS INTERLOCK)
LDD DI
STM ERFL SET ERROR PROCESSING FLAG
STM ERMF SET RECOVERY INTERLOCK FLAG
LDD CM+4
NJN SEP12 IF CONFLICTING INTERLOCKS SET
RJM SEO RESTORE ORIGINAL EST ORDINAL
UJN SEP7 RETURN SUCCESSFUL STATUS
* THE RECOVERY ERROR PROCESSING INTERLOCK WAS SET SUCCESSFULLY,
* BUT ONE OR MORE CONFLICTING *BDT* INTERLOCKS ARE STILL SET.
* *SEP* MUST WAIT, PERIODICALLY ISSUING *MTEM*/*GRIS* REQUESTS,
* UNTIL ALL CONFLICTING INTERLOCKS HAVE BEEN RELEASED.
SEP12 RJM DAS PROCESS ACTIVITY ON OTHER DEVICES
DELAY
RJM CMR CHECK FOR MMF *RESTORE* FLAGS
NJN SEP14 IF RESTORE IN PROGRESS ON OTHER MF
LDN GRIS GET RECOVERY INTERLOCK STATUS
UJN SEP11 CHECK FOR CONFLICTING INTERLOCKS
* INTERLOCK ATTEMPT UNSUCCESSFUL. THIS MEANS THAT ANOTHER MF
* HOLDS THE INTERLOCK (OR SOME OF THE INTERLOCKS) REQUIRED.
* TO AVOID A DEADLOCK, THIS MF MUST RELEASE ANY INTERLOCK
* THAT IT HOLDS, AND THEN RETRY THE INTERLOCK ATTEMPT LATER.
SEP13 RJM CBI CLEAR *BDT* ERROR PROCESSING INTERLOCKS
RJM DAS PROCESS ACTIVITY ON OTHER DEVICES
DELAY
RJM CMR CHECK FOR MMF *RESTORE* FLAGS
NJN SEP14 IF RESTORE IN PROGRESS ON OTHER MF
LJM SEP1 RETRY INTERLOCK
SEP14 LJM CMP10 ABANDON REQUEST (RETRY LATER)
ERFL CON 0 ERROR PROCESSING FLAG
ERMF CON 0 RECOVERY INTERLOCK FLAG
SFP SPACE 4,10
** SFP - SET COMMON FORMAT PARAMETERS.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (FC) = 0 IF DRIVE DECLUSTERED.
* (CN) = CONTROLLER NUMBER.
* (DN) = DRIVE NUMBER.
*
* CALLS SOU.
SFP SUBR ENTRY/EXIT
LDC C280E+1S17 FORMAT OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P02D5 PARAMETER TO SELECT DRIVE
STML CPBF+FCP
LDM PHYD,DI
SHN 10
STML CPBF+FCP+1 DRIVE TO FORMAT
LDC 0#1E5
STML CPBF+FCP+2 DO NOT READ HEADERS
LDD FC
ZJN SFPX IF DRIVE DECLUSTERED
LDD CN
SHN 10
ADD DN
STML CPBF+CUN LOGICAL ADDRESS
UJP SFPX RETURN
SFR SPACE 4,15
** SFR - SEARCH FOR CONSECUTIVE REQUEST.
*
* ENTRY (A) = CURRENT *CBT* ORDINAL.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DT) = DRIVE TYPE.
*
* EXIT (NB) = 0 IF NO CONSECUTIVE REQUEST FOUND.
* = *CBT* ORDINAL OF NEXT REQUEST.
* (NR - NR+4) = PHYSICAL ADDRESS OF NEXT REQUEST.
*
* USES NB, CM - CM+4, NR - NR+4, T1 - T6.
*
* MACROS CBTE.
SFR9 LDN 0
STD NB
SFR SUBR ENTRY/EXIT
SHN CBTLS
CBTE *
ADC PAD1 FETCH SEEK PARAMETERS FROM *CBT*
CRD CM
ADN IOLK-PAD1 (T1) = I/O LINK-UP FLAGS
CRD T1
LDM ERCT,DI
NJN SFR9 IF IN ERROR RECOVERY
LDML PSBF,DT SET NUMBER OF SECTORS PER BUFFER
SHN -14
STD T0
LDM CYLN,DI
SFR1 SBM MC,DT
MJN SFR1.1 IF IN THE CORRECT PARTITION
SBN 1
PJN SFR1 IF NOT AT MAINTENANCE TRACK
SFR1.1 ADN 7
PJN SFR1.2 IF WITHIN LAST 8 CYLINDERS
LDML PSCY,DT SET SECTOR COUNT FOR 8 CYLINDERS
SHN 3
UJN SFR2 CONTINUE
SFR1.2 LDM STS,DT SET SECTOR COUNT FOR .LT. 8 CYLINDERS
LPC 777
SFR2 SBM CSCT,DI
SBD T0 LESS NUMBER OF SECTORS PER BUFFER
ZJN SFR3 IF TIME TO CURTAIL STREAMING
LDD T1+2
ZJN SFR3 IF NO REQUEST AVAILABLE
STD NB
SHN CBTLS
CBTE *
ADC PAD1 PHYSICAL ADDRESS OF NEXT REQUEST
CRD NR
ADN IOLK-PAD1 I/O LINK-UP WORD OF NEXT REQUEST
CRD T2
LDD T2 COMPARE LINK-UP FLAGS
LMD T1
LPC DRFM+ILFM
ZJN SFR5 IF SAME DIRECTION AND INTERLOCKED
SFR3 UJP SFR9 RETURN
SFR5 LDML PSBF,DT CALCULATE NEXT SECTOR
SHN -14
RAD CM+2
LDD NR+1 CHECK SEEK PARAMETERS
SBD CM+1
ZJN SFR6 IF SAME CYLINDER
SBN 1
NJN SFR3 IF NOT NEXT CYLINDER
LDD CM+2 CALCULATED NEXT SECTOR
SBM LSOC,DT
PJN SFR7 IF END OF CYLINDER REACHED
UJN SFR3 RETURN WITH NO CONSECUTIVE REQUEST
SFR6 LDD CM+2 CHECK NEXT SECTOR
LMD NR+2
ZJN SFR8 IF NEXT SECTOR ON SAME TRACK
LDD CM+2
LPN 77
SBM PSPT,DT
MJN SFR3 IF NOT AT END OF TRACK
LMD CM+2
LPN 77
LMD CM+2
ADD HN SET NEXT TRACK
SFR7 LMD NR+2
NJN SFR3 IF NOT NEXT SECTOR ON CONSECUTIVE TRACKS
SFR8 LJM SFRX RETURN
SLB SPACE 4,15
** SLB - SET LINKAGE BITS.
*
* ENTRY (A) = *CBT* ORDINAL.
* (RW) = READ / WRITE STATUS.
*
* EXIT LINKAGE BITS SET IN *CBT* ENTRY / UEM BUFFER.
*
* USES PB, T1, T2, T5, T6, UA, UA+1, CM - CM+4.
*
* CALLS RLB, SUA, WLB.
*
* MACROS CBTE.
SLB SUBR ENTRY/EXIT
STD PB
RJM SUA SET UEM ADDRESS
LDN PAD1
STD T2
LDN 5 UEM WORD COUNT
STD T5
LDML SLBB,RW SET PROCESSOR ADDRESS
STML SLBA
SLB1 LRD UA LOAD *R* REGISTER
LDD PB
SHN CBTLS READ CONTROL BUFFER WORD
CBTE *
ADC 0 FWA OF *CBT*
ADD T2
CRD CM
LDC SBUF-4 SET BUFFER ADDRESS
STDL T1
LDC 1S17 READ START OF BUFFER SEGMENT
CRML SBUF,T5
LDN CM+3 SET *CBT* ENTRY ADDRESS
STD T6
RJM 0 MOVE LINKAGE BITS
SLBA EQU *-1
LDN 10 ADVANCE *R* REGISTER IMAGE
RAD UA+1
SHN -14
RAD UA
AOD T2 ADVANCE CONTROL BUFFER WORD
LMN PAD4+1
NJN SLB1 IF NOT COMPLETE
UJP SLBX RETURN
SLBB CONL RLB
CONL WLB
SMD SPACE 4,15
** SMD - SKIP MEDIA DEFECT DURING RESTORE.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (T5) = PHYSICAL TRACK.
* (T6) = PHYSICAL SECTOR.
* (DT) = DRIVE TYPE.
*
* EXIT (A) = 0 IF NOT RESTORE.
*
* USES T5, T6.
SMD4 LDN 0
SMD SUBR ENTRY/EXIT
LDML RPBF+OPC
LMC CE005
NJN SMD4 IF NOT RESTORE
* SET RCYL, RTSN TO THE PHYSICAL SECTOR AFTER THE FAILING ONE.
AOD T6 PHYSICAL SECTOR
SHN 14
ADD T5 PHYSICAL TRACK
SHN 6
STM RTSN
AOD T5
LDM LSOC,DT
SHN -6
SBD T5
MJN SMD1 IF LAST TRACK
LDD T6
SBM PSPT,DT
MJN SMD2 IF NEXT RESTORE ADDRESS ALREADY SET
SHN 14 POTENTIAL RESIDUAL SECTOR NUMBER
ADD T5
SHN 6
STM RTSN
UJN SMD2 SET REQUESTS TO MULTIPLEX
SMD1 LDM RTSN
SBM LSOC,DT
MJN SMD2 IF NEXT RESTORE ADDRESS ALREADY SET
STM RTSN
AOM RCYL
SMD2 LDML RMUX
SHN 21-17
MJN SMD3 IF MULTIPLEXING I/O REQUESTS DISABLED
LDN IRBR
STML RMUX I/O REQUESTS BEFORE NEXT RESTORE
SMD3 UJP SMDX RETURN
SOC SPACE 4,10
** SOC - SET OPERATION CODE AND CONTROLLER.
*
* ENTRY (A) = OPERATION CODE.
* (CN) = CONTROLLER NUMBER.
SOC SUBR ENTRY/EXIT
STML CPBF+OPC
LDD CN
SHN 10
LMC 0#FF
STM CPBF+CUN
UJN SOCX RETURN
SOU SPACE 4,15
** SOU - SET OPERATION CODE AND UNIT.
*
* ENTRY (A) = 1/X, 17/YY.
* WHERE X = 0 IF (DN) IS THE DRIVE NUMBER.
* = 1 IF (PHYD,DI) IS THE DRIVE NUMBER.
* YY = OPERATION CODE.
* (CN) = CONTROLLER NUMBER.
* (DN) = DRIVE NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) = UNIT NUMBER FOR COMMAND PACKET.
SOU SUBR ENTRY/EXIT
STML CPBF+OPC
MJN SOU1 IF USING PHYSICAL DRIVE
LDD CN MERGE CONTROLLER + DRIVE NUMBERS
SHN 10
LMD DN
UJN SOU2 SET FACILITY ADDRESS
SOU1 LDD CN MERGE CONTROLLER + DRIVE NUMBERS
SHN 10
ADM PHYD,DI
SOU2 STM CPBF+CUN
UJN SOUX RETURN
SRF SPACE 4,10
** SRF - SET DRIVER RELOAD FLAG.
*
* EXIT (A) = 0.
*
* USES CM+1 - CM+4.
*
* CALLS DCR.
*
* MACROS MONITOR, CHTE.
SRF SUBR ENTRY/EXIT
RJM DCR DROP CHANNEL RESERVATION
* LDN 0
STD CM+2 CLEAR UNUSED BYTE
CHTE *
LDC CTALL*2 ADDRESS OF CHANNEL CONTROLWARE TABLE ENTRY
STD CM+4
SHN -14
STD CM+3
LDN 1 SET NUMBER OF REQUESTS
STD CM+1
LDD MA STORE REQUEST IN MESSAGE BUFFER
CWM SRFA,CM+1
MONITOR UTEM SET RELOAD FLAG
* LDN 0
UJN SRFX RETURN
SRFA VFD 1/0,5/0,6/1,6/,42/1
SRI SPACE 4,30
** SRI - SET SLAVE RESET INTERLOCK.
*
* IN A MMF ENVIRONMENT, DAS MUST BE CONFIGURED WITH MORE
* THAN ONE DRIVER ACCESSING EACH CONTROLLER. TO PREVENT AN
* ENDLESS SEQUENCE OF SLAVE RESETS UNDER SOME ERROR CONDITIONS,
* AN EXTENDED MEMORY FLAG REGISTER INTERLOCK IS USED TO ENSURE
* THAT ONLY ONE DRIVER TRIES TO PERFORM A SLAVE RESET AT ANY
* ONE TIME. IF *1DA* ATTEMPTS TO SET THIS INTERLOCK AND
* DETERMINES THAT IT IS HELD BY ANOTHER DRIVER, IT WILL WAIT
* UNTIL THE INTERLOCK IS CLEAR, AND THEN CLEAR THE BUFFER COUNT
* AND COMPLETE THE CURRENT REQUEST. THE REQUEST WILL BE
* RETRIED ON A SUBSEQUENT PASS THROUGH THE MAIN LOOP.
*
* ENTRY (RW) = 0, IF SLAVE RESET.
* (CRIB) .NE. 0, IF SLAVE RESET INTERLOCK ALREADY SET.
*
* EXIT INTERLOCK SET, IF FIRST *IFR* CALL SUCCESSFUL.
* (CRIB) .NE. 0, IF SLAVE RESET INTERLOCK SET.
* TO *CMP10*, IF FIRST *IFR* CALL UNSUCCESSFUL.
*
* CALLS IFR.
*
* MACROS DELAY.
SRI SUBR ENTRY/EXIT
SRIA LDD RW
* UJN SRIX (NO SHARED BUFFERED DEVICES CONFIGURED)
NJN SRIX IF NOT SLAVE RESET
STM SRIB CLEAR *UNSUCCESSFUL IFR CALL* FLAG
LDM CRIB
NJN SRIX IF SLAVE RESET INTERLOCK ALREADY SET
SRI1 LDN /MMF/DSRI SET *DAS SLAVE RESET INTERLOCK* FLAG BIT
RJM IFR
NJN SRI3 IF NOT SUCCESSFUL
LDC 0
* LDC NONZERO (AT LEAST ONE UNSUCCESSFUL *IFR* CALL)
SRIB EQU *-1
NJN SRI2 IF NOT SUCCESSFUL ON FIRST TRY
LDN 1 SET *SLAVE RESET INTERLOCK SET* FLAG
STM CRIB
UJN SRIX RETURN
SRI2 LCN /MMF/DSRI CLEAR *DAS SLAVE RESET INTERLOCK* FLAG BIT
RJM IFR
LJM CMP10 ABANDON REQUEST (RETRY LATER)
SRI3 STM SRIB SET *UNSUCCESSFUL IFR CALL* FLAG
DELAY 20B DELAY TWO MILLISECONDS
UJN SRI1 RETRY INTERLOCK ATTEMPT
SRP SPACE 4,10
** SRP - SEARCH RESPONSE PACKET.
*
* ENTRY (A) = PARAMETER ID TO SEARCH FOR.
*
* EXIT (A) .EQ. 0 IF ID FOUND.
* (A) .LT. 0 IF ID NOT FOUND.
* (RPBF+5,T3) .EQ. THE PARAMETER.
*
* USES T1 - T3.
SRP1 LDML RPBF+5,T3 EXTRACT PARAMETER BLOCK LENGTH
SHN -10-1
ADN 1 CONVERT OCTET COUNT TO BYTE COUNT
STD T0
RAD T3 ADVANCE BUFFER INDEX
LDD T2
SBD T0
SRP2 MJN SRPX IF END OF RESPONSE PACKET
STD T2
LDM RPBF+5,T3 CHECK NEXT PARAMETER BLOCK
LMD T1
LPC 377
NJN SRP1 IF NOT REQUESTED ID
SRP SUBR ENTRY/EXIT
STD T1
LDN 0 INITIALIZE INDEX
STD T3
LDM RPBF+PLN PACKET LENGTH
ADN 1
SHN -1 CONVERT TO PP WORD COUNT
SBN 5
UJN SRP2 CHECK MINIMUM PACKET LENGTH
SSS SPACE 4,15
** SSS - SET SUSPECT STATE ON DEVICE.
*
* THIS ROUTINE ALSO SAVES THE FAILING DRIVE IN WORD *PILL*
* SO THAT THE ALTERNATE CHANNEL DRIVER CAN INCLUDE THE CORRECT
* UNIT NUMBER IN THE BML MESSAGE IF THE ERROR IS RECOVERED.
*
* ENTRY (EO) = EST ORDINAL.
*
* USES T6, T7, CM+1 - CM+4.
*
* CALLS REE.
*
* MACROS MONITOR, PUTE.
SSS SUBR ENTRY/EXIT
RJM REE READ EST ENTRY
LDD CM CHECK DEVICE STATUS
LPN 2
NJN SSSX IF DEVICE *OFF* OR *DOWN*
LDD EO
STD CM+1 SET EST ORDINAL
LDD IR+4
STD CM+3 INSERT CHANNEL NUMBER
LDN SSES
STD CM+2 SET SUSPECT STATE ON DEVICE
MONITOR SEQM
* SAVE FAILING DRIVE IN WORD *PILL* FOR THE ALTERNATE CHANNEL.
LDC PILL*100+6
STD T6 6/WORD, 6/BITS TO CHANGE
LDC 52*100
STD T7 LOW ORDER BIT TO CHANGE
LDM PHYD,DI
STD CM+2 NEW VALUE
LDD MA
CWD T6 STORE MESSAGE BUFFER PARAMETERS
LDN 1
STD CM+1 PARAMETER WORD COUNT
LDI DI
ERRNZ PUTO CODE DEPENDS ON VALUE
SHN PUTLS
PUTE *
ADC 0 SET BASE *PUT* ENTRY ADDRESS
STD CM+4
SHN -14
STD CM+3
MONITOR UTEM SAVE FAILING DRIVE IN *PUT*
UJP SSSX RETURN
STF SPACE 4,15
** STF - REQUEST TRACK FLAW.
*
* ENTRY (CB) = CURRENT *CBT* ORDINAL.
* (EO) = EST ORDINAL.
* (T4) = CYLINDER NUMBER.
* (T5) = PHYSICAL TRACK.
* (T7) = LOGICAL SECTOR WITHIN PHYSICAL TRACK.
*
* USES T4, CM - CM+4.
*
* CALLS CDA, C2D, IDM, REE.
*
* MACROS MONITOR.
STF SUBR ENTRY/EXIT
RJM REE READ EST ENTRY
LDD CM+4 GET PARTITION CYLINDER OFFSET
SHN 3
ADK SCYL
CRD CM
LDD T4 CONVERT ABSOLUTE TO RELATIVE CYLINDER
SBD CM+2
STD T4
RJM CDA CONVERT DISK ADDRESS
LDD T6
STD CM+2 TRACK NUMBER FOR MONITOR REQUEST
RJM C2D SET TRACK NUMBER IN MESSAGE
STM STFB+5
LDD T6
SHN -6
RJM C2D SET TRACK NUMBER IN MESSAGE
STM STFB+4
LDD EO
SHN -3 CONVERT EST ORDINAL
RJM C2D
STM STFB+1 SET ORDINAL IN MESSAGE
LDD EO
STD CM+1
LPN 7
SHN 6 CONVERT LOW ORDER DIGIT
ADC 2R0,
STM STFB+2
LDK SFTS INSERT SUBFUNCTION
STD CM+3
MONITOR SMDM SET TRACK FLAW REQUEST IN MST
LDD CM+1
NJN STF1 IF THIS FLAW ALREADY REQUESTED
LDC STFA
STML MAD1 ISSUE ERROR LOG MESSAGE
RJM IDM
STF1 LJM STFX RETURN
STFA VFD 24/0 RESERVED
VFD 12/1 ERRLOG ALERT FLAG
VFD 12/STFAL MESSAGE LENGTH
VFD 12/ELDY ERRLOG DAYFILE
STFB DATA C*EQXXX,TKNNNN, MEDIA DEFECT ENCOUNTERED.*
.1 SET *-STFA+4
STFAL EQU .1/5
STO SPACE 4,10
** STO - SET TIMEOUT.
*
* ENTRY (A) = TIMEOUT VALUE (IN SECONDS).
*
* USES CM - CM+4, T5 - T7.
*
* MACROS FTTE.
STO SUBR ENTRY/EXIT
STD T6
LDC RTCL FETCH CURRENT TIME
CRD CM
LDD T6
RAD CM+1 SET TIME LIMIT
SHN -14
RAD CM
LDM STO SET CALLERS ADDRESS
STD T7
LDN 0
STD T5
LDI DI
ERRNZ PUTO CODE DEPENDS ON VALUE
SHK FTTLS
FTTE *
ADC 0 STORE *FTT* ENTRY
CWD T5
UJN STOX RETURN
SUA SPACE 4,10
** SUA - SET UEM ADDRESS.
*
* ENTRY (A) = *CBT* ORDINAL.
*
* EXIT (UA - UA+1) = UEM ADDRESS / 100.
*
* USES UA, UA+1, CM - CM+4.
*
* MACROS CBTE.
SUA SUBR ENTRY/EXIT
SHN CBTLS
CBTE *
ADC IOLK READ *CBT* ENTRY
CRD CM
LDD CM+4 EXTRACT RELATIVE UEM ADDRESS
ADC 0
SUAA EQU *-1
SHN -6
STD UA+1 SET ABSOLUTE ADDRESS / 100
LDD CM+3
ADC 0
SUAB EQU *-1
SHN 6
RAD UA+1
SHN -14
STD UA
UJN SUAX RETURN
SUD SPACE 4,10
** SUD - SPIN UP DRIVE.
*
* ENTRY (OUPD,DI) = PHYSICAL DRIVE TO SPIN UP.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (EO) = EST ORDINAL.
*
* EXIT (A) = 0 IF COMMAND SUCCESSFUL.
* (PHYD,DI) = PHYSICAL DRIVE.
*
* CALLS ATT, SOU, WCB.
SUD SUBR ENTRY/EXIT
LDM OUPD,DI SET PHYSICAL DRIVE TO SPIN UP
STM PHYD,DI
SHN 10
STML CPBF+FCP+1 DRIVE TO SPIN UP
LDC P02D5
STML CPBF+FCP PHYSICAL DRIVE PARAMETER
LDC C0301 REPORT CONDITION OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDN 12 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND BLOCK
LDN CMSS
RJM ATT PROCESS ATTENTION
NJP SUD2 IF ERROR
LDML RPBF+6
SHN 21-7
MJN SUD2 IF DRIVE NOT OPERATIONAL
LDC C0700 SET OPERATING MODE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P02D5
STML CPBF+FCP PHYSICAL DRIVE PARAMETER
LDM OUPD,DI PHYSICAL DRIVE
SHN 10
STML CPBF+FCP+1 DRIVE TO SPIN UP
LDC P0351
STML CPBF+FCP+2
LDC 0#8000
STML CPBF+FCP+3 PARAMETER TO SELECT SPIN UP
LDN 16 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
SUD2 UJP SUDX RETURN
SUI SPACE 4,15
** SUI - SET UNIT INTERLOCK.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT (A) = 0 IF *PUT* ENTRY INTERLOCKED.
* (UC) = UNIT ACTIVITY COUNT INCREMENTED.
* (CM+1) = *BIOM* STATUS.
*
* USES CM+1, CM+2, UC.
*
* MACROS MONITOR.
SUI SUBR ENTRY/EXIT
LDI DI SET *PUT* ORDINAL
ERRNZ PUTO CODE DEPENDS ON VALUE
STD CM+2
LDN SUIS SET SUBFUNCTION
STD CM+1
MONITOR BIOM INTERLOCK DEVICE
LDD CM+1
NJN SUIX IF INTERLOCK NOT ACQUIRED
AOD UC ADVANCE UNIT ASSIGNED COUNT
LDC 4000
STM RQLN,DI SET UNIT INTERLOCKED
LDN 0
UJN SUIX RETURN
TMSE SPACE 4,10
** TMSE - TABLE OF MASS STORAGE ERROR CODES.
*
* INDEXED BY FAULT CODE / 4.
TMSE BSS 0
LOC 0
CON CHPE CHANNEL PARITY
CON CHFE CHANNEL FAILURE
CON FTOE FUNCTION TIMEOUT
CON PARE DATA PARITY (MEDIA)
CON NRDE DEVICE NOT READY
CON IDTE DATA TRANSFER
CON DSTE DEVICE STATUS
CON DSTE DEVICE STATUS
CON DSTE DEVICE STATUS
CON DSTE DEVICE STATUS
CON DSTE DEVICE STATUS
CON DDFE DIAGNOSTIC FAILURE
CON RAME CONTROLLER MEMORY
CON RAME CONTROLLER MEMORY
CON DRVE DRIVE RESERVE
CON RAME CONTROLLER MEMORY
CON DSTE DEVICE STATUS
LOC *O
TMSK SPACE 4,10
** TMSK - TABLE OF CONTROLLER MASKS.
*
* INDEXED BY CONTROLLER NUMBER.
SPACE 2
TMSK BSS 0
LOC 0
CON 001
CON 002
CON 004
CON 010
CON 020
CON 040
CON 100
CON 200
LOC *O
UBP SPACE 4,20
** UBP - UPDATE *BDLL* PARAMETER.
*
* THIS ROUTINE CHANGES A BIT IN WORD *BDLL* OF THE MST.
*
* ENTRY (A) = BIT TO CHANGE.
* (EO) = EST ORDINAL.
* (CM+2) = NEW VALUE.
*
* USES T6, T7, CM - CM+4.
*
* CALLS REE.
*
* MACROS MONITOR.
UBP SUBR ENTRY/EXIT
SHN 6
STD T7 BIT NUMBER * 100B
LDN 1
STD T6 NUMBER OF BITS TO CHANGE
LDD MA
CWD T6 STORE MESSAGE BUFFER PARAMETERS
RJM REE READ EST ENTRY
LDD CM+4
SHN 3
ADN BDLL SET ADDRESS OF *BDLL*
STD CM+4
SHN -14
STD CM+3
LDN 1
STD CM+1 PARAMETER WORD COUNT
MONITOR UTEM
UJN UBPX RETURN
UEC SPACE 4,15
** UEC - UPDATE MST ERROR COUNT.
*
* ENTRY (EO) = EST ORDINAL.
* (BMLM+1) = BML MESSAGE SYMPTOM CODE.
* (MISC - BIT 0) = 1 IF UNRECOVERED ERROR.
*
* USES CM+1 - CM+3.
*
* MACROS MONITOR.
UEC SUBR ENTRY/EXIT
LDM BMLM+1
LMC D"DN"*400+HD0111
NJN UECX IF NOT COMPLETION MESSAGE
LDD EO
STD CM+1 SET EST ORDINAL
LDM MISC
LPN 1 SET BYTE NUMBER
ADN 3
STD CM+2
LDN ICTS INCREMENT ERROR COUNT
STD CM+3
MONITOR SMDM
UJN UECX RETURN
UHD SPACE 4,15
** UHD - UNPACK HEX DATA.
*
* STATUS READ FROM THE IPI CHANNEL AND RESPONSES RECEIVED
* FROM THE CONTROLLER ARE IN 16-BIT WORDS. THIS ROUTINE
* MOVES CONSECUTIVE 16-BIT WORDS TO CONSECUTIVE 12-BIT
* WORDS. THUS, 3 16-BIT WORDS WOULD BE UNPACKED AND STORED
* IN 4 12-BIT WORDS IN PP MEMORY.
*
* ENTRY (A) = DESTINATION DATA ADDRESS.
* (T2) = SOURCE DATA ADDRESS.
* (T4) = 16-BIT WORD COUNT OF HEX DATA.
*
* EXIT (A) = CM WORD COUNT OF 12 BIT DATA.
*
* USES T2 - T5.
*
* CALLS DV5.
UHD3 AODL T3 SET END OF 12 BIT DATA
STML UHDA
LDN ZERL ENSURE ZERO FILL TO CM WORD BOUNDARY
CRM *,ON
UHDA EQU *-1
LDDL T3 SET BYTE COUNT OF 12 BIT DATA
SBDL T5
RJM DV5 CONVERT TO CM WORD COUNT
UHD SUBR ENTRY/EXIT
STDL T3
STDL T5 PRESERVE DESTINATION BUFFER ADDRESS
UHD1 LDIL T2
SHN 16
STI T3 UNPACK N+3RD BYTE
SHN -6
SCN 77
STM 1,T3
AODL T3
SOD T4
UHD2 ZJN UHD3 IF END OF HEX DATA
AODL T2
LDIL T2
SHN -10
RAI T3 UNPACK N+4TH BYTE
AODL T3
LDIL T2
SHN 4
SCN 17
STI T3
SOD T4
ZJN UHD2 IF END OF HEX DATA
AODL T2
LDIL T2
STM 1,T3
SHN -14
RAI T3 UNPACK N+5TH BYTE
AODL T3
SOD T4
ZJN UHD2 IF END OF HEX DATA
AODL T2
AODL T3
UJP UHD1 CONTINUE UNPACK
UPD SPACE 4,25
** UPD - UDPATE PHYSICAL DRIVE NUMBER.
*
* THIS ROUTINE UPDATES (PHYD,DI) TO THE NEXT PHYSICAL DRIVE
* OF THE LOGICAL UNIT. THE PHYSICAL DRIVE PROGRESSION IS AS
* FOLLOWS, WHERE X IS THE CABINET RANK.
*
* TYPE PROGRESSION
*
* 1 NX. (N = 0-3)
* 1P 0X, 3X.
* 2 0X, 1X.
* 2P 0X, 1X, 3X.
* 3 0X, 1X, 2X.
* 3P 0X, 1X, 2X, 3X.
* 4 0X, 1X, 2X, 3X.
*
* ENTRY (DT) = DRIVE TYPE.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (DD) = NUMBER OF DATA DRIVES IN DEVICE.
* (PD) = NUMBER OF PARITY DRIVES IN DEVICE.
*
* EXIT (A) = 0 IF (PHYD,DI) IS THE LAST PHYSICAL
* DRIVE OF THE LOGICAL UNIT. NO UPDATE IS
* MADE IN THIS CASE.
UPD2 LDN 0 EXIT WITH NO UPDATE
UPD SUBR ENTRY/EXIT
LDM PHYD,DI
SHN -3
ADN 1
SBD DD
MJN UPD4 IF NORMAL UPDATE
NJN UPD2 IF NO UPDATE NECESSARY
LDD PD
ZJN UPDX IF NO UPDATE NECESSARY
LDN 4
SBD DD
SHN 3
UJN UPD5 UPDATE TO PARITY DRIVE
UPD4 LDN 10B UPDATE TO NEXT STRING
UPD5 RAM PHYD,DI
UJP UPDX RETURN
VDA SPACE 4,10
** VDA - VERIFY DRIVE ATTRIBUTES.
*
* ENTRY (DT) = DRIVE TYPE.
*
* EXIT TO *ERR* IF ERROR.
*
* USES T1.
*
* CALLS ATT, IDT, SOU, WCB.
VDA11 RJM ATT WAIT FOR COMPLETION RESPONSE
VDA SUBR ENTRY/EXIT
* RESTORE DRIVE ATTRIBUTES.
LDC C0202 RESTORE ATTRIBUTES OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJP VDA10 IF NOT SUCCESSFUL
* CHECK ATTRIBUTE 6E.
LDC C0200 REPORT ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P036C
STML CPBF+FCP REPORT ATTRIBUTE 6E
LDC 0#806E
STML CPBF+FCP+1
LDN 12 COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDML ATTB+1
LMC 0#C080
NJN VDA1 IF ATTRIBUTE INCORRECT
RJM ATT WAIT FOR COMPLETION RESPONSE
UJP VDA3 CHECK ATTRIBUTE 6F
VDA1 RJM ATT WAIT FOR COMPLETION RESPONSE
LDC C0209 LOAD ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC 0#46E
STML CPBF+FCP PARAMETER 6E
LDC 0#C080 FOR PARITY DRIVES THIS ENABLES PARITY
STML CPBF+FCP+1 CORRECTION BEFORE ECC CORRECTION
LDN 0
STML CPBF+FCP+2
LDN 14 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN VDA2 IF NOT SUCCESSFUL
LDC C020A SAVE ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
VDA2 NJP VDA10 IF NOT SUCCESSFUL
* CHECK ATTRIBUTE PARAMETER 6F.
VDA3 LDC C0200
RJM SOU SET OPERATION CODE AND UNIT
LDC P036C
STML CPBF+FCP REPORT ATTRIBUTE 6F
LDC 0#806F
STML CPBF+FCP+1
LDN 12 COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDML ATTB+13
LMC BPB
NJN VDA4 IF BURST SIZE NOT CORRECT
RJM ATT WAIT FOR COMPLETION RESPONSE
UJP VDA7 CHECK ATTRIBUTE D8
VDA4 RJM ATT WAIT FOR COMPLETION RESPONSE
LDN 0
STD T1
VDA5 LCN 0 PARAMETERS WITH FFFF WILL NOT BE CHANGED
STML CPBF+FCP,T1
AOD T1
LMN 24
NJN VDA5 IF MORE WORDS TO INITIALIZE
STM CPBF+FCP+10
STM CPBF+FCP+12
LDC BPB*2 SET INTERRUPT SIZE
STML CPBF+FCP+11
SHN -1 SET BURST SIZE
STML CPBF+FCP+13
LDC C0209 LOAD ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC 0#276F
STML CPBF+FCP PARAMETER 6F
LDN 46D COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN VDA6 IF NOT SUCCESSFUL
LDC C020A SAVE ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNT
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
VDA6 NJN VDA8 IF NOT SUCCESSFUL
* CHECK ATTRIBUTE D8.
VDA7 LDD DT
IFNE EQEA,0,2
SBN EQEA
MJN VDA7.1 IF NOT SOLID STATE 5832
SBN EQEC-EQEA
MJP VDAX IF INTERRUPT SIZE NOT USED
VDA7.1 LDC C0200 REPORT ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDC P036C REPORT PARAMETER D8
STML CPBF+FCP
LDC 0#80D8
STML CPBF+FCP+1
LDN 12 COMMAND PACKET LENGTH
RJM IDT INPUT DATA TO PP
LDML ATTB
LMC 0#9D8
VDA8 NJP VDA10 IF RESPONSE INCORRECT
LDC BPB SET INTERRUPT SIZE
LMML ATTB+2
NJN VDA9 IF INTERRUPT SIZE WRONG
LDML ATTB+4
LMC BPB
ZJP VDA11 IF BURST SIZE CORRECT
VDA9 RJM ATT WAIT FOR COMPLETION RESPONSE
LDN 0
STML CPBF+FCP+1
STML CPBF+FCP+3
LDC BPB*2 SELECT INTERRUPT SIZE
STML CPBF+FCP+2
SHN -1 SET BURST SIZE
STML CPBF+FCP+4
LDC 0#09D8
STML CPBF+FCP PARAMETER D8
LDC C0209 LOAD ATTRIBUTE OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDN 20 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN VDA10 IF NOT SUCCESSFUL
LDC C020A SAVE ATTRIBUTES OPERATION CODE
RJM SOU SET OPERATION CODE AND UNIT
LDN 6 COMMAND PACKET LENGTH
RJM WCB WRITE COMMAND PACKET
LDN CMSS
RJM ATT PROCESS ATTENTION
NJN VDA10 IF NOT SUCCESSFUL
LJM VDAX RETURN
VDA10 LCN ERDA REPORT DRIVE ATTRIBUTES ERROR
RJM ERR PROCESS ERROR
VIS SPACE 4,15
** VIS - VERIFY INTERRUPT SOURCE.
*
* ENTRY (A) .LT. 0 IF ASYNC INTERRUPT FROM CONTROLLER.
*
* EXIT (A) = 0 IF INTERRUPT FOR INACTIVE DRIVE.
* = RETURN ADDRESS TO PROCESSOR.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* USES DI.
*
* CALLS CCO, DCM, LDP.
VIS4 RJM CCO CHECK FOR CONTROLLER OVER TEMPERATURE
LDM SRSA
ZJN VISX IF NO RESET IN PROGRESS
STD DI
UJN VIS1 LOAD DEVICE PARAMETERS
VIS SUBR ENTRY/EXIT
MJN VIS4 IF ASYNCH FOR CONTROLLER
LDM RPBF+CRN CHECK COMMAND NUMBER
STD DI
VIS1 RJM LDP LOAD DEVICE PARAMETERS
LDM RQLN,DI
SHN 21-13
PJN VIS2 IF UNIT NOT INTERLOCKED
LDML ATTN,DI
NJN VISX IF EXPECTED RESPONSE
VIS2 LDDL RT
LMN XFNT
NJN VIS3 IF NOT TRANSFER NOTIFICATION
RJM DCM DESELECT CONTROLLER
VIS3 LDN 0
UJN VISX RETURN
WAC SPACE 4,25
** WAC - WAIT FOR OTHER ACTIVITY TO COMPLETE.
*
* WAIT UNTIL ALL OTHER ACTIVITY ON THIS CONTROLLER IS COMPLETE.
* THE FACT THAT *ERFL* IS SET WILL PREVENT NEW ACTIVITY.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
*
* USES DI, T1.
*
* CALLS LND, LDP.
WAC CON 0 ENTRY
LDML WAC SAVE RETURN ADDRESS
STML SEPR,DI
LDC WAC1
STML ADDR,DI RETURN ADDRESS IF NO RESPONSE
WAC1 LDN 1
WAC2 LMN 1
RJM LND LOCATE DRIVE
ZJN WAC3 IF NO MORE DRIVES ON CONTROLLER
LDML ADDR,T7
ZJN WAC2 IF NO ACTIVITY ON DRIVE
LDD T7
LMD DI
ZJN WAC2 IF CURRENT DRIVE
LDD T7
STD DI
RJM LDP LOAD DEVICE PARAMETERS
LJM 0,PA CHECK FOR TIMEOUT ON ACTIVE DRIVE
WAC3 LDML SEPR,DI GET RETURN ADDRESS
STDL T1
LJM 0,T1 RETURN
WLB SPACE 4,10
** WLB - WRITE LINKAGE BITS.
*
* ENTRY (T6) = ADDRESS FOR LINKAGE.
* (T1) = DATA BUFFER ADDRESS.
* (T5) = NUMBER OF WORDS TO WRITE.
* (CM - CM+4) = *PAD* WORD OF *CBT* ENTRY.
*
* EXIT SECTOR LINKAGE SET IN DATA BUFFER.
*
* USES T1, T6.
WLB1 LDN 10+4 ADVANCE BUFFER ADDRESS
RADL T1
LDI T6 EXTRACT LINKAGE FROM *CBT* ENTRY
SHN -10
* LPN 17
SHN 14 POSITION FOR DATA BUFFER
LMI T1
STIL T1
WLB2 LDI T6 EXTRACT LINKAGE FROM *CBT* ENTRY
SHN -4
LPN 17
SHN 14 POSITION FOR DATA BUFFER
LMM 4,T1
STML 4,T1
LDI T6 EXTRACT LINKAGE FROM *CBT* ENTRY
* SHN 0
LPN 17
SHN 14 POSITION FOR DATA BUFFER
LMM 10,T1
STML 10,T1
AOD T6 ADVANCE *CBT* WORD ADDRESS
LMN CM+5
NJN WLB1 IF MORE LINKAGE
LDC 1S17
CWML SBUF,T5 UPDATE DATA BUFFER
WLB SUBR ENTRY/EXIT
UJN WLB2 MOVE SECTOR LINKAGE
WMC SPACE 4,10
** WMC - WAIT MAINTENANCE CHANNEL EMPTY.
*
* EXIT (A) .EQ. 0 IF CHANNEL EMPTY.
* (A) .NE. 0 IF CHANNEL HUNG FULL.
WMC2 LDN 0 INDICATE CHANNEL EMPTY
WMC SUBR ENTRY/EXIT
LDD TH
WMC1 EJM. WMC2,MR IF TRANSMISSION COMPLETE
SBN 1
NJN WMC1 IF NOT TIMED OUT
DCN. MR+40
CCF. *+2,MR CLEAR CHANNEL FLAG
LDD CP
ADN MS2W STORE CP MESSAGE
CWM WMCA,TR
UJN WMCX RETURN
WMCA DATA C*MR ERROR.*
TITLE CHANNEL SUBROUTINES.
BCS SPACE 4,10
** BCS - DEFINE INFORMATION TRANSFER.
*
* ENTRY (A) = BUS *A* BITS 7 AND 6.
*
* EXIT TO *ERR* IF ERROR.
*
* CALLS RSR.
BCS1 LDDL LF FETCH LAST FUNCTION
LMN 0#32
RJM RSR DROP SYNC OUT
BCS SUBR ENTRY/EXIT
SHN 17-1
ADK F005B SET SYNC OUT
RJM RSR READ SLAVE RESPONSE
LPC 377
ZJN BCS1 IF BUS ACKNOWLEDGE CORRECT
LDN EBAE BUS ACKNOWLEDGE ERROR
RJM ERR PROCESS ERROR
CFE SPACE 4,10
** CFE - CHECK FOR I/O ERROR.
*
* ENTRY (A) = RESIDUAL WORD COUNT.
* AT *CFE1* FROM *DCT* IF ERROR FLAG SET.
*
* EXIT (A) = 0.
* TO *ERR* IF ERROR.
CFE4 NJN CFE3 IF INCOMPLETE DATA TRANSFER
CFE SUBR ENTRY/EXIT
CFM CFE4,CH IF CHANNEL ERROR FLAG CLEAR
CFE1 LDN ECIE IPI CHANNEL ERROR FLAG
CFE2 RJM ERR PROCESS CHANNEL ERROR
CFE3 LDN EIDT INCOMPLETE DATA TRANSFER
UJN CFE2 PROCESS ERROR
CRC SPACE 4,10
** CRC - COMMON READ CODE.
*
* ENTRY (A) = LENGTH FOR INPUT.
* (T0) = WORDS NOT TRANSFERRED.
*
* EXIT TO *ERR* IF ERROR.
*
* USES T1.
*
* CALLS GSS.
CRC2 LDN 0
RJM GSS GET ENDING STATUS
CRC SUBR ENTRY/EXIT
SBD T0
STD T1 WORDS NOT TRANSFERRED
LDC 50000D
CRC1 IJM CRC2,CH IF SLAVE IN
SBN 1
NJN CRC1 IF TIMEOUT NOT EXPIRED
LCN ECNR SLAVE/SYNC IN SIGNAL ERROR
RJM ERR PROCESS ERROR
CTC SPACE 4,15
** CTC - CHECK TRANSFER COMPLETE.
*
* ENTRY (RW) = 0 IF READ.
*
* EXIT (A) = 0 TO CALLER IF NO ERROR.
* TO *PIO2* IF ENDING STATUS INDICATES PAUSE AND
* NO DATA WAS READ.
* TO *PIO6* IF ENDING STATUS INDICATES NO MORE DATA
* AND NOT ALL DATA WAS TRANSFERRED.
* TO *ERR* IF ERROR.
*
* USES T1.
*
* CALLS DCM, FAN, FCN, GSS, RCR, RDR, RTR, SCD.
CTC SUBR ENTRY/EXIT
LDC 7700D
STDL T1
CTC1 LDC F0700
RJM FCN REQUEST OPERATIONAL STATUS
ACN CH
EJM CTC2,CH IF ERROR
IAN CH READ STATUS
LPN 1
ZJN CTCX IF TRANSFER COMPLETE
CTC2 SODL T1
NJN CTC1 IF NOT TIMEOUT
RJM RTR READ T REGISTER
LDD CT
ZJN CTC2.1 IF 10 MB CHANNEL
* THE DMA TERMINATE FUNCTION DOES NOT CLEAR DMA MODE
* IN THE 25 MB CHANNEL.
SFM CTC2.0,CH CLEAR ERROR FLAG ON 25MB CHANNEL
CTC2.0 LDC F0E00
RJM FAN CLEAR T REGISTER
CTC2.1 LDC F0800 DMA TERMINATE FUNCTION
RJM FAN SEND THE FUNCTION
LDC F00E1 READ STATUS REGISTER FUNCTION
RJM RDR READ REGISTER
SHN 6
PJN CTC3 IF SLAVE IN DROPPED
LDN ECNR SLAVE/SYNC IN SIGNAL ERROR
RJM ERR PROCESS ERROR
CTC3 LDN 0 NO MASTER TERMINATE
* STD T1 SO LENGTH ERROR NOT REPORTED IN *CFE*
RJM GSS GET ENDING STATUS
LPN 60B
LMN 20B
ZJN CTC5 IF NO MORE DATA
* IF MULTIPLE PHYSICAL DRIVES PER LOGICAL UNIT, AND THERE
* IS A MEDIA ERROR FOR AT LEAST 2 DRIVES AT THE SAME SECTOR,
* THE CONTROLLER WILL TRANSFER NO DATA THEN RETURN AN ENDING
* STATUS INDICATING PAUSE, AND EXPECT THE HOST TO REREAD
* THE DATA IF IT SENDS A TRANSFER NOTIFICATION RESPONSE.
LDDL RW
NJN CTC4 IF WRITE
LDML EDBF+TREG
LMC BPB
NJN CTC4 IF NOT 0-BYTE TRANSFER
RJM RCR RESET CHANNEL REGISTERS
LJM PIO2 WAIT FOR ANOTHER RESPONSE
CTC4 LDN EIDT INCOMPLETE DATA TRANSFER
RJM ERR PROCESS ERROR
* THE CONTROLLER MAY DROP SLAVE IN ANYTIME DURING THE TRANSFER
* AND RETURN 90 HEX AS ENDING STATUS. THIS INDICATES COMMAND
* COMPLETE. THE RESPONSE PACKET SHOULD REPORT AN ERROR.
*CTC5 LDN 0
CTC5 RJM SCD CLEAR CHANNEL ACTIVE FOR *CPD*
RJM DCM DESELECT THE CONTROLLER
LCN 0 TO GUARANTEE AN ERROR IS REPORTED
LJM PIO6 WAIT FOR A RESPONSE
DCM SPACE 4,10
** DCM - DESELECT CONTROLLER.
*
* CALLS FCN, RSR.
DCM SUBR ENTRY/EXIT
LDC F0071
RJM RSR WAIT FOR SLAVE IN TO DROP
CFM DCMX,CH IF ERROR FLAG NOT SET
* ON A 25 MB IPI CHANNEL, A DESELECT SEQUENCE COULD RESULT
* IN A CHANNEL SEQUENCE ERROR. THE FOLLOWING CODE CLEARS
* SUCH AN ERROR STATUS.
LDC F0100
RJM FCN CLEAR THE DMA ERROR
UJN DCMX RETURN
DCT SPACE 4,10
** DCT - DETERMINE CHANNEL TYPE.
*
* EXIT (CT) = 0 IF 10 MB CHANNEL.
* 1 IF 25 MB CHANNEL.
*
* CALLS FCN.
DCT1 STDL CT
DCT SUBR ENTRY/EXIT
LDC F0102
RJM FCN READ IPI REVISION REGISTER
ACN CH
LDN 0
EJM DCT1,CH IF 10 MB/S IPI CHANNEL
LDN 1
UJN DCT1 RETURN
DTM SPACE 4,15
** DTM - DETERMINE TRANSFER MODE.
*
* ENTRY (A) = CONTROLLER NUMBER.
* (T6) = 0 IF STREAMING COMMANDS/RESPONSES.
* (T6) = 200(16) IF INTERLOCKING COMMANDS/RESPONSES.
*
* EXIT (A) = CONTROLLER NUMBER + TRANSFER MODE CHANGE.
*
* USES T4.
*
* CALLS FCN, RSR.
DTM SUBR ENTRY/EXIT
SHN 14
STDL T4 SET CONTROLLER NUMBER IN RESPONSE
LMC F8025
RJM RSR REQUEST TRANSFER SETTINGS
LPN 0#10
LMN 0#10 COMPLEMENT TRANSFER MODE
SHN 11-4
LMDL T6 MASK FOR INTERLOCK DATA
SHN 2
RADL T4 APPEND TRANSFER MODE TO RESPONSE
SFM CFE1,CH IF ERROR FLAG SET
LDDL LF
LMC 0#54 DROP MASTER OUT
RJM RSR ENSURE SLAVE IN DROPPED
CFM DTM1,CH IF ERROR FLAG NOT SET
* ON A 25 MB IPI CHANNEL, A REQUEST TRANSFER SETTINGS SEQUENCE
* COULD RESULT IN A CHANNEL SEQUENCE ERROR. THE FOLLOWING CODE
* CLEARS SUCH AN ERROR STATUS.
LDC F0100
RJM FCN CLEAR THE DMA ERROR
DTM1 LDDL T4
UJP DTMX RETURN
FAN SPACE 4,10
** FAN - SEND A FUNCTION TO THE IPI CHANNEL.
*
* NOTE - THE CHANNEL MAY HAVE BEEN LEFT ACTIVE BY A MASTER
* CLEAR, A ROUTINE SUCH AS DCM, OR AFTER A REPORTED
* ERROR.
*
* ENTRY (A) = FUNCTION TO ISSUE.
FAN SUBR ENTRY/EXIT
DCN CH+40 ENSURE THE CHANNEL IS INACTIVE
FAN CH SEND THE FUNCTION
UJN FANX RETURN
FCN SPACE 4,10
** FCN - ISSUE FUNCTION.
*
* ENTRY (A) = FUNCTION CODE.
*
* EXIT (A) .NE. 0.
* (LF) = FUNCTION CODE.
* TO *ERR* IF FUNCTION TIMEOUT.
FCN SUBR ENTRY/EXIT
DCN CH+40
FAN CH ISSUE FUNCTION
STDL LF
IJM FCNX,CH IF FUNCTION ACCEPTED
RJM LDP LOAD DEVICE PARAMETERS
LDN ETFN CHANNEL FUNCTION TIMEOUT
RJM ERR PROCESS ERROR
GIS SPACE 4,10
** GIS - GET INTERRUPT STATUS.
*
* EXIT (A) = (GISA) = INTERRUPT STATUS.
*
* CALLS FCN.
* INTERRUPTS MUST BE ENABLED AT LEAST 6 MICROSECONDS BEFORE
* THE FOLLOWING INPUT.
GIS1 IAN CH READ INTERRUPT STATUS
GIS2 STML GISA
LDC F0711 NEGATE MASTER OUT
RJM FCN
LDML GISA RETURN WITH (A) = STATUS
GIS SUBR ENTRY/EXIT
ACN CH+40
FJM GIS1,CH
LDN 0
UJN GIS2 SET NULL STATUS
GISA CON 0
GSS SPACE 4,15
** GSS - GET SLAVE STATUS.
*
* ENTRY (A) = 0 IF STATUS W/O MASTER TERMINATE.
* = MASTER TERMINATE OPTION.
* (T1) = RESIDUAL BYTE COUNT.
*
* EXIT (A) = (PIOC) = ENDING STATUS IF TRANSFER SUCCESSFUL.
* (GSSA) = ENDING STATUS AS READ FROM CONTROLLER.
* TO *ERR* IF ERROR.
*
* CALLS RRP, RSR.
GSS5 LDML GSSA ENDING STATUS
STML PIOC
GSS SUBR ENTRY/EXIT
SHN 10
ADC F8039 INDICATE TRANSFER SUCCESSFUL
RJM RSR GET ENDING STATUS
STML GSSA
SFM GSS3,CH IF ERROR FLAG SET
SHN 21-7
PJN GSS1 IF TRANSFER NOT SUCCESSFUL
LDD T1
ZJN GSS5 IF ALL WORDS TRANSFERRED
LDN EIDT INCOMPLETE DATA TRANSFER
UJN GSS4 PROCESS ERROR
GSS1 SHN 10
LPC 117
LMN 3
NJN GSS2 IF NOT COMMAND REJECT
* IF CONTROLLER OVER TEMPERATURE OCCURS BEFORE THE COMMAND IS
* ISSUED, A COMMAND REJECT ERROR COULD OCCUR. A LOGICAL RESET
* WOULD CAUSE THE OVER TEMPERATURE STATUS TO BE LOST.
RJM RRP READ RESPONSE PACKET
LCN EUST SUCCESSFUL NOT SET IN ENDING STATUS
UJN GSS4 PROCESS ERROR
GSS2 LDN EUST SUCCESSFUL NOT SET IN ENDING STATUS
UJN GSS4 PROCESS ERROR
GSS3 LDN ECIE IPI CHANNEL ERROR FLAG
GSS4 RJM ERR PROCESS ERROR
GSSA CON 0 ENDING STATUS
IDT SPACE 4,15
** IDT - INPUT DATA TO PP.
*
* ENTRY (A) = COMMAND PACKET LENGTH.
* (TM) = TRANSFER MODE.
* (DI) = DEVICE STATE TABLE ADDRESS.
*
* EXIT ATTRIBUTE DATA STARTS AT ATTB.
*
* USES T1.
*
* CALLS ATT, BCS, CRC, DCM, FCN, WCB.
IDT1 LCN ERDA REPORT DRIVE ATTRIBUTES ERROR
RJM ERR PROCESS ERROR
IDT CON 0 ENTRY
RJM WCB WRITE COMMAND PACKET
LDML IDT
STML IDTR,DI SAVE RETURN ADDRESS
LDN XFNT EXPECT TRANSFER NOTIFICATION RESPONSE
RJM ATT PROCESS ATTENTION
NJP IDT1 IF ERROR
LDN DAIN DATA TRANSFER IN
RJM BCS BUS CONTROL SEQUENCE
LDI T0 DELAY 750 NANOSECONDS
LDDL TM TRANSFER MODE
SHN 11-0
LMC F0281
RJM FCN TELL DMA LOGIC TO READ
ACN CH
LDC ATTBL
IAM ATTB,CH INPUT ATTRIBUTE DATA
STD T0 WORDS NOT TRANSFERRED
LDM RPBF+MST+3 BYTE LENGTH OF TRANSFER
ADN 1 IN CASE OF ODD BYTE LENGTH
SHN -1 EXPECTED WORDS TO TRANSFER
RAD T0
LDC ATTBL
RJM CRC COMMON READ CODE
RJM DCM DESELECT CONTROLLER
LDML IDTR,DI
STDL T1
LJM 0,T1 RETURN TO CALLER
RCR SPACE 4,10
** RCR - RESET CHANNEL REGISTERS. THIS LEAVES THE IPI
* CHANNEL IN AN IDLE STATE.
*
* ENTRY (MF) = 0 IF PREVIOUS MASTER CLEAR SUCCESSFUL.
*
* USES MF, T1.
*
* CALLS DCT, FCN, WTC.
*
* MACROS WAIT.
RCR2 LDN 0
STD MF INDICATE MASTER CLEAR COMPLETE
RCR SUBR ENTRY/EXIT
LDD MF
NJN RCR2 IF MASTER CLEAR FAILED
AOD MF
LDN F0000
RJM FCN MASTER CLEAR THE ADAPTER
WAIT 100
* MASTER CLEAR DOES NOT CLEAR ERROR FLAG ON THE 25 MB CHANNEL,
* SO THE SFM INSTRUCTION MUST BE USED TO CLEAR IT.
SFM RCR1,CH
*RCR1 LDN 0 SET DEVICE NOT SELECTED
RCR1 ADK F0000-0 ENSURE NO SEQUENCE ERROR
RJM FCN
RJM DCT DETERMINE CHANNEL TYPE
LDML TRAT,CT
RJM FCN SET IPI CHANNEL TRANSFER RATE
LDC F0300
RJM FCN WRITE CONTROL REGISTER FUNCTION
ACN CH
LDML EDC,CT ENABLE DOUBLE CMI SLOT IF 25 MB CHANNEL
STDL T1
LDN 1
OAM T1,CH
RJM WTC WAIT TRANSFER COMPLETE
UJP RCR2 SET COMPLETE AND RETURN
RDR SPACE 4,10
** RDR - READ REGISTER.
*
* ENTRY (A) = FUNCTION CODE.
*
* EXIT (A) = VALUE OF REGISTER OR 0 IF ERROR.
*
* CALLS FAN.
RDR1 LDN 0
RDR SUBR ENTRY/EXIT
RJM FAN SEND FUNCTION
AJM RDR1,CH IF NO FUNCTION REPLY
ACN CH+40B
EJM RDR1,CH IF WORD COULD NOT BE READ
IAN CH
UJN RDRX RETURN
RIF SPACE 4,15
** RIF - RESET INTERFACE.
*
* ENTRY (RW) = 0 TO RESET SLAVE INTERFACE.
* = 1 TO RESET LOGICAL INTERFACE.
* (CN) = CONTROLLER NUMBER.
*
* EXIT (RF) = 1.
*
* USES RF.
*
* CALLS FCN, RCR, SAP.
*
* MACROS WAIT.
RIF SUBR ENTRY/EXIT
AOD RF FLAG RESET IN PROGRESS
RJM RCR RESET CHANNEL
RJM SAP SELECT ADAPTER PORT
LDD CN
SHN 14 FORM RESET FUNCTION
LMML RIFA,RW
RJM FCN ISSUE LOGICAL RESET
WAIT 20
LDDL LF
LMN 2 SET SYNC OUT
RJM FCN
WAIT 10
LDDL LF NEGATE SYNC OUT
SCN 2
RJM FCN
LDDL LF CLEAR MASTER OUT
SCN 4
RJM FCN
UJP RIFX RETURN
RIFA BSS 0 RESET FUNCTION CODES
CONL F8415
CONL F8215
RRP SPACE 4,10
** RRP - READ RESPONSE PACKET.
*
* ENTRY (T6) = 0 IF STREAMING MODE FOR RESPONSES.
*
* CALLS BCS, CRC, FCN.
RRP SUBR ENTRY/EXIT
LDN RIIN
RJM BCS INITIATE BUS EXCHANGE (RESPONSE IN)
LDDL T6 STREAMING OR INTERLOCK MODE
LMC F0281 READ
RJM FCN RAISE MASTER OUT
ACN CH
LDN RPBFL TRANSFER RESPONSE PACKET
IAM RPBF,CH
STD T0 SAVE RESIDUE
SBN RPBFL-4
PJN RRP1 IF INVALID PACKET LENGTH
LDM RPBF+PLN
ADN 3 CONVERT OCTET COUNT TO BYTE COUNT
SHN -1
RAD T0
RRP1 LDK RPBFL COMPARE LENGTH WITH DATA READ
RJM CRC COMMON READ CODE
UJN RRPX RETURN
RSR SPACE 4,10
** RSR - READ SLAVE RESPONSE.
*
* ENTRY (A) = FUNCTION TO ISSUE.
*
* EXIT (A) = SLAVE RESPONSE.
* TO *ERR* IF ERROR.
*
* CALLS FCN.
RSR2 IAN CH READ SLAVE RESPONSE
RSR SUBR ENTRY/EXIT
RJM FCN
LDC 2000
ACN CH
RSR1 FJM RSR2,CH IF SLAVE IN DROPPED
SBN 1
NJN RSR1 IF NOT TIMED OUT
LDN ECNR SLAVE/SYNC IN SIGNAL ERROR
RJM ERR PROCESS ERROR
RTR SPACE 4,10
** RTR - READ T REGISTER.
*
* USES T2, T3.
*
* CALLS FAN.
RTR SUBR ENTRY/EXIT
LDC F0A00 READ T REGISTER FUNCTION
STD T2
RJM FAN
LDN 0
STML EDBF+TREG
STML EDBF+TREG+1 CLEAR T REGISTER BUFFER
STML EDBF+TREG+2
STD T3
ACN CH+40B ACTIVATE CHANNEL
* THE ONE WORD INPUT IS NECESSARY TO PREVENT THE CHANNEL
* FROM HANGING ON A 170 DMA CHANNEL.
RTR1 SOD T2
ZJN RTRX IF TIMEOUT
IJM RTRX,CH IF ERROR
EJM RTR1,CH IF CHANNEL NOT FULL YET
IAN CH
STML EDBF+TREG,T3 SAVE WORD FROM T REGISTER
AOD T3
LMN 3
ZJN RTRX IF TRANSFER COMPLETE
UJN RTR1 INPUT NEXT WORD
SAP SPACE 4,10
** SAP - SELECT ADAPTER PORT.
*
* ENTRY (DI) = DEVICE STATE TABLE ADDRESS.
* (CT) = 0 IF 10 MB CHANNEL.
*
* CALLS FCN.
SAP SUBR ENTRY/EXIT
LDM PNUN,DI
SHN 0-11 ISOLATE PORT NUMBER
SHN 13-0
ERRNZ F0062+4000-F0862 CODE DEPENDS ON VALUE
ADML PAS,CT
RJM FCN
UJN SAPX RETURN
SCM SPACE 4,15
** SCM - SELECT CONTROLLER.
*
* ENTRY (SF) = 1 IF DEVICE PREVIOUSLY SELECTED.
* (CI) = CONTROLLER STATE TABLE INDEX.
* (CN) = CONTROLLER NUMBER.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (T6) = 0 IF STREAMING COMMANDS/RESPONSES.
*
* EXIT TO *ERR* IF ERROR.
*
* USES T6.
*
* CALLS DTM, RSR, SAP.
SCM SUBR ENTRY/EXIT
RJM SAP SELECT ADAPTER PORT
LDML CTST,CI
SHN -15
ZJN SCM1 IF STREAMING COMMANDS/RESPONSES
LDC 0#200
SCM1 STDL T6
LDD CN
RJM DTM DETERMINE TRANSFER MODE
LMN F0029 SET SELECT OUT
RJM RSR READ BIT SIGNIFICANT RESPONSE
LPML TMSK,CN
NJN SCMX IF CORRECT CONTROLLER
LDN ETSL SELECT TIMEOUT
RJM ERR PROCESS ERROR
WCB SPACE 4,15
** WCB - WRITE COMMAND BLOCK (PACKET).
*
* ENTRY (A) = COMMAND PACKET LENGTH.
* (DI) = DEVICE STATE TABLE ADDRESS.
* (T6) = 0 IF STREAMING MODE.
* (DT) = DRIVE TYPE.
*
* EXIT TO *ERR* IF ERROR.
*
* USES T1.
*
* CALLS BCS, DCM, FCN, GSS, SCM, STO.
WCB2 LDN 0 GET STATUS
RJM GSS
RJM DCM DESELECT CONTROLLER
LDML CPBF+OPC OPERATION CODE
SHN -10
SBN 7
NJN WCB3 IF NOT SPIN UP/DOWN
LDC SUTO SPIN UP TIMEOUT
UJN WCB5 SET COMMAND TIMEOUT
WCB3 SBN 0#28-7
NJN WCB4 IF NOT FORMAT
LDML CPBF
LMN 0#E
ZJN WCB4 IF NOT FULL PACK FORMAT
LDC FMTO
UJN WCB5 SET COMMAND TIMEOUT
WCB4 LDC CBTO
WCB5 RJM STO SET TIMEOUT
WCB SUBR ENTRY/EXIT
STM CPBF+PLN
LDML CPBF+OPC
STML LCMD,DI SAVE LAST COMMAND
LDD DI SET COMMAND REFERENCE NUMBER
STM CPBF+CRN
RJM SCM SELECT CONTROLLER
LDN CIOT
RJM BCS INITIATE BUS EXCHANGE (COMMAND OUT)
LDDL T6 STREAM OR INTERLOCK MODE
LMC F0381 WRITE
RJM FCN RAISE MASTER OUT
ACN CH
LDM CPBF+PLN CONVERT OCTET COUNT TO BYTE COUNT
ADN 3
SHN -1 TRANSFER COMMAND PACKET
OAM CPBF,CH
STD T1 SAVE RESIDUAL BYTE COUNT FOR *GSS*
LDC 50000D
WCB1 IJM WCB2,CH IF SLAVE IN DROPPED
SBN 1
NJN WCB1 IF NOT TIMED OUT
LDN ECNR SLAVE/SYNC IN SIGNAL ERROR
RJM ERR PROCESS ERROR
WTC SPACE 4,10
** WTC - WAIT TRANSMISSION COMPLETE.
*
* EXIT TO *ERR* IF ERROR.
*
* CALLS CFE.
WTC1 DCN CH+40 DEACTIVATE CHANNEL
WTC SUBR ENTRY/EXIT
RJM CFE CHECK FOR ERROR
EJM WTC1,CH IF LAST WORD TAKEN OFF CHANNEL
LDN ECHF CHANNEL HUNG FULL
RJM ERR PROCESS CHANNEL ERROR
WTR SPACE 4,10
** WTR - WRITE T REGISTER.
*
* ENTRY (CB) = *CBT* ORDINAL.
* (RW) = 0 IF READ.
*
* CALLS FCN, SLB, SUA, WTC.
WTR SUBR ENTRY/EXIT
LDD RW
ZJN WTR1 IF READ REQUEST
LDD CB
RJM SLB SET LINKAGE BITS
WTR1 LDD CB
RJM SUA GET UEM BUFFER ADDRESS
LDD UA+1
SHN 11 FORMAT ADDRESS
SCN 7
STML WTRA+2 SET ABSOLUTE ADDRESS
LDD UA
SHN 14 COMPLETE BUFFER ADDRESS
LMD UA+1
SHN 11-20 INSERT IN REGISTER IMAGE
STM WTRA+1
LDML WTRB,RW ISSUE DMA FUNCTION
RJM FCN
LDN 3 SET BLOCK LENGTH
ACN CH
OAM WTRA,CH OUTPUT BUFFER PARAMETERS
RJM WTC
UJP WTRX RETURN
WTRA BSS 0 T REGISTER BUFFER
CONL BPB BYTE LENGTH OF I/O TRANSFER
CONL 0,0 UEM ADDRESS OF BUFFER
WTRB BSS 0 DMA I/O FUNCTIONS
CONL F0C00
CONL F0D00
TITLE COMMON DECKS.
SPACE 4,10
** COMMON DECKS.
*CALL COMPCHD
*CALL COMPC2D
RND$ EQU 0 DEFINE ROUNDING FOR *COMPDV5*
*CALL COMPDV5
EST$ EQU 0 ASSEMBLE *EST* ACCESS ROUTINE
IFP$ EQU 0 FORCE REMOTE ASSEMBLY OF *IFP*
*CALL COMPGFP
*CALL COMPIFR
M8K$ EQU 1 USE LONG INSTRUCTIONS
*CALL COMPIMB
QUAL TEO
QUAL$ EQU 0 DO NOT FURTHER QUALIFY COMMON DECKS
T5 EQU EO USE *EO* FOR EST ORDINAL IN COMMON DECKS
*CALL COMPTGB
*CALL COMPTLB
QUAL *
TGB EQU /TEO/TGB
TLB EQU /TEO/TLB
TITLE BUFFERS.
SPACE 4,10
** BUFFERS.
RPBF BSS 0 RESPONSE PACKET BUFFER
CPBF EQU RPBF+1 COMMAND PACKET BUFFER
ATTB EQU RPBF+10 ATTRIBUTE BUFFER
ATTBL EQU 0#8A
RBUF EQU ATTB+ATTBL REGISTER BUFFER
RBUFL EQU 2*4
SBUF EQU RBUF+RBUFL SCRATCH BUFFER
SBUFL EQU 4*5
EDBF EQU 20000-400-RTEDL ERROR DATA BUFFER
ERRNG 400-EDBFL+RTEDL CODE DEPENDS ON VALUE
MSGP EQU EDBF+EMBF MESSAGE PREFIX
MSGL EQU MSGP+2 MESSAGE LENGTH
MSGT EQU MSGL+2 MESSAGE TYPE
BMLM EQU MSGT+1 BML MESSAGE HEADER
MSID EQU BMLM MESSAGE ID
PPCH EQU MSID+2 PP NUMBER / CHANNEL NUMBER
UNIT EQU PPCH+1 UNIT NUMBER
PORT EQU UNIT+1 PORT NUMBER
ESTO EQU PORT+1 EST ORDINAL
MISC EQU ESTO+1 RETRY COUNT / WRITE + RECOVERY FLAGS
MFID EQU MISC+2 MAINFRAME ID
SPACE 4,10
* CHECK FOR BUFFER OVERLAP.
ERRNG EDBF-SBUF-SBUFL *SBUF* OVERFLOWS INTO *EDBF*
TITLE PRESET.
* PRESET DATA LOCATIONS.
CPCH CON 0 6/CPP NUMBER, 6/CHANNEL NUMBER
PUTA CON 0,0 FWA OF *PUT*
PUTN CON 0 NUMBER OF *PUT* ENTRIES
OVLP EQU *+5 ORIGIN FOR OVERLAY *3DZ*
PRS SPACE 4,15
** PRS - PRESET DRIVER FOR PROCESSING.
*
* ENTRY AT *PRS* WHEN DRIVER LOADED.
*
* EXIT TO *3DZ*.
*
* USES CR, CT, PA, UC, CM - CM+4, T2 - T7, WB - WB+4.
*
* CALLS CCP, IFP, MCI, SCT, SPA, STA.
*
* MACROS EXECUTE.
PRS BSS 0 ENTRY
LDD IR+2 SAVE *CCT* ORDINAL
STM PRSA
RJM IFP INITIALIZE *COMPGFP*
LDN 0
STD UC SET NO UNITS RESERVED
STD PA SET NO REQUEST IN PROGRESS
STD CT DEFAULT TO 10 MB CHANNEL
RJM MCI MODIFY CHANNEL INSTRUCTIONS
* LDN 0
STD CR SET CHANNEL NOT RESERVED
RJM SPA SET PP EXCHANGE PACKAGE ADDRESSES
* SET TIME FOR NEXT GLOBAL MST CHECK, BASED ON CPP NUMBER.
LDK RTCL GET CURRENT CLOCK
CRD CM
LDD CM+1 CURRENT TIME (SECONDS)
SBD T4 ADJUST BY CPP NUMBER
PJN PRS1 IF NO UNDERFLOW
LDD T4
PRS1 STM CETB PRESET TIME OF PREVIOUS GLOBAL MST CHECK
RJM SCT SET CHANNEL TABLE ADDRESSES
LDK BIOL
CRD CM READ BUFFERED I/O POINTERS
LDD CM+1
SHN 14
LMD CM+2
ADN FTTP READ *FTT* POINTER
CRD T6
SBN FTTP-CCTP READ *CCT* POINTER
CRD T4
ADN CBTP-CCTP READ *CBT* POINTER
CRD WB
SBN CBTP-PUTP READ *PUT* POINTER
CRD T2
LDD T2+3 SAVE *PUT* ADDRESS
LPN 77
STM PUTA
LDD T2+4
STM PUTA+1
AOD T2
STM PUTN SAVE NUMBER OF *PUT* ENTRIES
LDC T5*20000+TPUT SET *PUT* ADDRESSES
RJM STA
LDC ** ADJUST CHANNEL CONTROL TABLE POINTER
PRSA EQU *-1
SCN 77
SHN CCTLS-6
RAD CM
SHN -14
RAD T7
LDC T7*20000+TCCT SET *CCT* ADDRESSES
RJM STA
.CM1 EQU CM+1
LDC .CM1*20000+TFTT SET *FTT* ADDRESSES
RJM STA
.WB3 EQU WB+3
LDC .WB3*20000+TCBT SET *CBT* ADDRESSES
RJM STA
LDN EMBP FETCH *EMB* POINTER
CRD CM
LDC .CM1*20000+TEMB SET *EMB* ADDRESSES
RJM STA
LDK ESTP SET ENDING EST ORDINAL FOR EST SEARCH
CRD CM
LDD CM+3
STM LNEA
LDK UEML
CRD CM READ UEM POINTERS
LDD CM
SHN 11
* SHN 11+EMSC
SCN 77
STM SUAA SET FWA OF UEM
LDD CM
SHN -3
* SHN EMSC-3
STM SUAB
RJM CCP CHECK CALLING PROGRAM
EXECUTE 3DZ CONTINUE PRESET
TITLE PRESET SUBROUTINES.
CCP SPACE 4,10
** CCP - CHECK CALLING PROGRAM.
*
* EXIT (A) = 0.
* TO *PPR* IF UNAUTHORIZED CALL.
*
* USES CM - CM+4.
*
* CALLS DFM.
*
* MACROS MONITOR.
CCP SUBR ENTRY/EXIT
LDK NCPL
CRD CM GET NUMBER OF CONTROL POINTS
AOD CM+1
SHN 7
LMD CP
ZJN CCPX IF DRIVER AT SYSTEM CP
LDD MA MOVE MESSAGE BELOW ADDRESS 10000
CWM CCPA,TR
LDD MA
CRM CSTB,TR
ERRNG 10000-CSTB MESSAGE BUFFER MUST BE IN FIRST 4K OF PP
ERRNG CSTB-MSFW MESSAGE BUFFER MUST NOT DESTROY PPR
LDC CSTB
RJM DFM ISSUE DAYFILE MESSAGE
MONITOR ABTM
LJM PPR EXIT TO PP RESIDENT
CCPA DATA C* 1DA - UNAUTHORIZED CALL.*
IFP SPACE 4,10
** IFP - INITIALIZE MANAGED TABLE PROCESSORS.
LIST G
IFP HERE
LIST *
MCI SPACE 4,15
** MCI - MODIFY CHANNEL INSTRUCTIONS.
*
* ENTRY (IR+4) = CONCURRENT CHANNEL NUMBER.
*
* EXIT (A) = 0.
*
* USES T1 - T3.
*
* CALLS C2D.
*
* MACROS CHTL.
MCI1 RAIL T2 MODIFY CHANNEL INSTRUCTION
AOD T1
MCI2 LDML TCHA,T1 EXTRACT NEXT ADDRESS
STDL T2
LDD T3 CHECK END OF LIST
CHTL *
SBN CH
NJN MCI1 IF MORE INSTRUCTIONS TO MODIFY
MCI SUBR ENTRY/EXIT
LDD IR+4
LPN 37 EXTRACT CHANNEL NUMBER
STD T3
RJM C2D CONVERT FOR OPERATOR MESSAGES
STM SRSG+13
STM ERCR+10
STM ERCD+16
STM ERCE+16
LDN 0 INITIALIZE REMOTE TABLE INDEX
STD T1
UJN MCI2 ENTER LOOP
SCT SPACE 4,10
** SCT - SET CHANNEL TABLE ENTRY ADDRESSES.
*
* ENTRY (IR+4) = CHANNEL NUMBER.
*
* USES T1, T2, CM - CM+4.
*
* CALLS C2D, STA.
SCT SUBR ENTRY/EXIT
LDD IR+4
STD T1 SET CHANNEL NUMBER
STM DCEB+3
RAM CPCH
RJM C2D CONVERT FOR ERROR MESSAGE
STM LMRA+6
LCN 0 WORD OFFSET
STD T2
SCT1 AOD T2 INCREMENT WORD OFFSET
LCN 5
RAD T1
PJN SCT1 IF CHANNEL NOT IN THIS WORD
ADN 5
STD T1
RAM RCTA SET BYTE OFFSET
LDD T1
SHN 1 BYTE OFFSET * 2
ADD T1 BYTE OFFSET * 3
SHN 2 BYTE OFFSET * 12
SBN 59D (BYTE OFFSET * 12) - 59
LMC -0 59 - (BYTE OFFSET * 12)
SBN 2
SHN 6
STM SRFA+1 SET DRIVER FLAG BIT POSITION
LDK CHTP
CRD CM
LDD T2 SET ADDRESS OF WORD IN CHANNEL TABLE
RAD CM+3
SHN -14
RAD CM+2
.CM2 EQU CM+2
LDC .CM2*20000+TCHT SET CHANNEL TABLE ADDRESSES
RJM STA
LJM SCTX RETURN
SPA SPACE 4,10
** SPA - SET PP EXCHANGE PACKAGE ADDRESSES.
*
* EXIT (T4) = CPP NUMBER.
*
* USES CM - CM+4, T1 - T5.
*
* CALLS STA.
SPA SUBR ENTRY/EXIT
LDN PXPP
CRD CM FETCH FWA OF PP EXCHANGE PACKAGE AREA
ADN 1
CRM AMEA,ON SET FIRST WORD OF PP EXCHANGE PACKAGE
ADN PPCP-PXPP-2
CRD T1 READ PP COMMUNICATION AREA POINTER
LDD IA
STM AMEA+4 SET (B0) NON-ZERO FOR EXCHANGE TEST
SBD T1+4
SHN -3 PP NUMBER
SBN 24 CPP NUMBER
STD T4
SHN 6
STM CPCH SAVE CPP NUMBER FOR BML MESSAGE
SHN -6
ADN 24-2
STD T1 PP NUMBER - 2
SHN 4
ADD T1 (PP NUMBER - 2) * 21B
RAD CM+4
SHN -14
RAD CM+3
.CM3 EQU CM+3
LDC .CM3*20000+TEXP SET EXCHANGE PACKAGE ADDRESSES
RJM STA
LJM SPAX RETURN
STA SPACE 4,10
** STA - SET TABLE ADDRESSES.
*
* ENTRY (A) = 5/ TP, 13/ TA.
* (TP) = TABLE POINTER.
* (TA) = INSTRUCTION TABLE ADDRESS.
*
* EXIT (A) = 0.
*
* USES T1 - T3.
STA1 STDL T2 SET INSTRUCTION ADDRESS
LDM 1,T1
RAM 1,T2 SET LOWER 12 BITS OF ADDRESS
SHN -14
ADI T1 SET UPPER 6 BITS OF ADDRESS
LPN 37
RAI T2
AODL T3 ADVANCE INSTRUCTION LIST
STA2 LDIL T3
NJN STA1 IF NOT END OF TABLE
STA SUBR ENTRY/EXIT
STDL T3
SHN -15 SET ADDRESS POINTER
STD T1
LDDL T3
LPC 17777
STDL T3
UJN STA2 ENTER LOOP
TITLE INSTRUCTION MODIFICATION TABLES.
TCHA SPACE 4,10
** TABLE OF CHANNEL INSTRUCTIONS ADDRESSES.
TCHA CHTB
RSTC RESTORE CHANNEL INSTRUCTIONS
TCBT SPACE 4,10
** TABLE OF INSTRUCTIONS REQUIRING FWA OF *CBT*.
TCBT BSS 0
TCBT HERE
CON 0 TERMINATE TABLE
TCCT SPACE 4,10
** TABLE OF INSTRUCTIONS REQUIRING ADDRESS OF *CCT* ENTRY.
TCCT BSS 0
TCCT HERE
CON 0 TERMINATE TABLE
TCHT SPACE 4,10
** TABLE OF INSTRUCTIONS REQUIRING FWA OF CHANNEL TABLE.
TCHT BSS 0
TCHT HERE
CON 0 TERMINATE TABLE
TEMB SPACE 4,10
** TABLE OF INSTRUCTIONS REQUIRING FWA OF *EMB*.
TEMB BSS 0
QUAL COMPIMB
TEMB HERE
QUAL *
CON 0 TERMINATE TABLE
TEXP SPACE 4,10
** TABLE OF INSTRUCTIONS REQUIRING FWA OF PP EXCHANGE PACKAGE.
TEXP BSS 0
TEXP HERE
CON 0 TERMINATE TABLE
TFTT SPACE 4,10
** TABLE OF INSTRUCTIONS REQUIRING FWA OF *FTT*.
TFTT BSS 0
TFTT HERE
CON 0 TERMINATE TABLE
TPUT SPACE 4,10
** TABLE OF INSTRUCTIONS REQUIRING FWA OF *PUT*.
TPUT BSS 0
TPUT HERE
CON 0 TERMINATE TABLE
SPACE 4,10
* CHECK FOR OVERFLOW.
ERRNG 17777-*-5 OVERFLOW PAST END OF PP
SPACE 4,10
TTL 1DA/3DZ - *DAS* DRIVER PRESET (PART 2).
TITLE
IDENT 3DZ,OVLP *DAS* DRIVER PRESET (PART 2).
*COMMENT 1DA - *DAS* DRIVER PRESET (PART 2).
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1995.
ORG OVLP
QUAL 3DZ
BST SPACE 4,15
** BST - BUILD STATE TABLES AND BML ERROR MESSAGE BUFFER.
*
* ENTRY (CPCH) = CPP NUMBER AND CHANNEL NUMBER.
* (PUTA - PUTA+1) = ADDRESS OF *PUT*.
* (PUTN) = NUMBER OF *PUT* ENTRIES.
*
* EXIT TO *MRS* WHEN PRESET COMPLETE.
* TO *DAS6* IF CHANNEL DOWN.
*
* USES T4.
*
* CALLS CFD, DHE, IST, SMC.
BST SUBR ENTRY
* NOTE - THE FOLLOWING CALL TO *IST* DESTROYS *PPR* IN THIS PP.
* NO CALLS TO *PPR* MAY BE MADE AFTER THIS POINT.
RJM IST INITIALIZE DEVICE/CONTROLLER STATE TABLES
RJM DHE DETERMINE HIGHEST EST ORDINAL
RJM SMC SET MMF CONSTANTS
RJM CFD CLEAR FLAGS AT DEADSTART
* PRESET BML ERROR MESSAGE BUFFER.
LDC EDBF
STDL T4
LDN 0
BST1 STI T4
AODL T4 ADVANCE BUFFER ADDRESS
SHN 0-15
ZJN BST1 IF NOT END OF BUFFER
LDM CPCH SET CPP NUMBER AND CHANNEL NUMBER
STM PPCH
LDN MLDY SET DAYFILE CODE
STM MSGT
LDC ** (MAINFRAME ID)
BSTA EQU *-1
STM MFID
* RESERVE CHANNEL AND INITIATE DRIVER.
LDM DASB CHECK IF ANY DEVICES FOUND
LMC DSTB
ZJN BST3 IF NO DEVICES FOR THIS DRIVER
LJM CCR2 RESERVE CHANNEL (RETURN TO *BST2*)
BST2 NJN MRS IF CHANNEL NOT DOWN
BST3 LJM DAS6 DROP CPP
TITLE SUBROUTINES.
MRS SPACE 4,10
** MRS - MASTER RESET SLAVES.
*
* EXIT TO *CMP* IF RESET SUCCESSFUL.
* TO *DAS1* IF NO UNIT COULD BE INTERLOCKED.
*
* USES DI, T1.
*
* CALLS FCN, IDU, LDP, RCR.
*
* MACROS WAIT.
MRS BSS 0 ENTRY
LDC DSTB-DSTBE FIRST DEVICE TABLE ADDRESS
STD DI
MRS1 LDN DSTBE
RAD DI
LMM DASB
ZJP DAS1 IF NO UNIT COULD BE INTERLOCKED
RJM LDP LOAD DEVICE PARAMETERS
RJM IDU INTERLOCK DISK UNIT
NJN MRS1 IF UNIT NOT INTERLOCKED
RJM RCR MASTER CLEAR CHANNEL
LDN 1
STD T1
SHN 13-0 POSITION PORT NUMBER
MRS3 LMML PAS,CT
RJM FCN SELECT ADAPTER PORT
LDC F9213
RJM FCN ISSUE MASTER RESET
WAIT 10
LDDL LF LAST FUNCTION
SCN 2
RJM FCN CLEAR SYNC OUT
SOD T1
ZJN MRS3 IF ANOTHER PORT TO PROCESS
LJM CMP EXIT/CLEAR UNIT INTERLOCK
SPACE 4,10
* CHECK FOR OVERFLOW.
ERRNG EDBF-* OVERFLOW INTO BML ERROR MESSAGE BUFFER
TITLE OVERLAYABLE SUBROUTINES.
CFD SPACE 4,15
** CFD - CLEAR FLAGS AT DEADSTART.
*
* CLEAR FLAGS THAT ARE LEFT SET AFTER LEVEL 3 DEADSTART.
* THE CORRESPONDING *BDT* INTERLOCKS ARE CLEARED BY *MTE*.
*
* EXIT FLAGS CLEARED IN *BDLL* AND *ACGL*.
*
* USES DI, T4, UC, CM - CM+4, CW - CW+4.
*
* CALLS CDS, CMC, IDU, IMR, LDP, LNE, RBD, UBP.
*
* MACROS CMSTF, MONITOR.
CFD SUBR ENTRY/EXIT
LDC DSTB-DSTBE
STD DI
CFD1 LDN DSTBE PROCESS NEXT DEVICE
RAD DI
LMM DASB
ZJN CFDX IF NO MORE DEVICES TO PROCESS
RJM LDP LOAD DEVICE PARAMETERS
LDN 0 INITIALIZE PARTITION SEARCH
CFD2 RJM LNE LOCATE NEXT EST FOR THIS DEVICE
ZJN CFD1 IF NO MORE PARTITIONS
RJM CDS CHECK DEVICE STATUS
MJN CFD3 IF DEVICE NOT RECOVERED
RJM RBD READ *BDLL*
LDD CM+3 CHECK FLAGS FOR ERROR/RESTORE INTERLOCKS
SHN 0-11
LPN 3
NJN CFD4 IF EITHER FLAG IS SET
CFD3 LJM CFD12 PROCESS NEXT PARTITION
* INTERLOCK DEVICE AND RECHECK FLAGS.
CFD4 RJM IDU INTERLOCK DEVICE
NJN CFD1 IF INTERLOCK NOT AVAILABLE
RJM RBD READ *BDLL*
LDD CM+3 CHECK FLAGS FOR ERROR/RESTORE INTERLOCKS
SHN 0-11
LPN 3
ZJP CFD11 IF NEITHER FLAG IS SET
STD T4 SAVE STATUS
LDN ZERL CLEAR *BDT* ENTRY BUFFER
CRD CW
LDML DVTP,DI
SHN 21-11
PJN CFD5 IF NOT SHARED DEVICE
* GET *BDT* ENTRY FROM *MTE*.
LDD EO SET EST ORDINAL
STD CM+4
LDN GBDS GET *BDT* ENTRY
STD CM+1
MONITOR MTEM
LDD MA READ *BDT* ENTRY
CRD CW
* PROCESS ERROR PROCESSING FLAG.
CFD5 LDD T4
LPN 2
ZJN CFD8 IF *BDLL* ERROR PROCESSING FLAG NOT SET
LDD CW CHECK IF *BDT* ERROR INTERLOCK SET
ZJN CFD6 IF NOT SET
LPN 77
LMN ** (MACHINE INDEX)
CFDA EQU *-1
NJN CFD7 IF SET FOR A DIFFERENT MF
UJN CFD8 DO NOT CLEAR FLAGS
CFD6 CMSTF GDER CLEAR *ERROR RECOVERY IN PROGRESS* FLAG
CFD7 LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK
STD CM+2
LDN 26 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
* PROCESS RESTORE FLAG.
CFD8 LDD T4
LPN 1
ZJN CFD11 IF *BDLL* RESTORE FLAG NOT SET
LDD CW+1 CHECK IF *BDT* RESTORE SET
ZJN CFD9 IF NOT SET
LPN 77
LMN ** (MACHINE INDEX)
CFDB EQU *-1
NJN CFD10 IF SET FOR A DIFFERENT MF
UJN CFD11 DO NOT CLEAR FLAGS
CFD9 CMSTF GDUR CLEAR *RESTORE IN PROGRESS* FROM *ACGL*
CMSTF GDRI CLEAR *RESTORE INITIATION* FROM *ACGL*
LDD EO SET EST ORDINAL
STD CM+1
LDN 0
STD CM+2
LDN SRCS CLEAR REMAINING CYLINDERS / 100B IN *ACGL*
STD CM+3
MONITOR STBM
CFD10 LDN 0 CLEAR FLAG THAT SAYS THIS MF HAS INTERLOCK
STD CM+2
LDN 25 BIT TO CHANGE
RJM UBP UPDATE *BDLL* PARAMETER
* CLEAR UNIT INTERLOCK.
CFD11 LDN 0 RELEASE UNIT INTERLOCK
STD WB+4
LDC 4000
STD WB+3
LDN DCBS
RJM IMR
* LDN 0 CLEAR UNIT INTERLOCKED FLAG
STM RQLN,DI
SOD UC ADJUST UNIT ACTIVITY COUNT
RJM CMC CHECK MONITOR COMPLETE
CFD12 LDD EO
LJM CFD2 PROCESS NEXT PARTITION
DHE SPACE 4,10
** DHE - DETERMINE HIGHEST EST ORDINAL.
*
* ENTRY (LNEA) = HIGHEST MASS STORAGE EST ORDINAL (+1).
*
* EXIT (LNEA) = HIGHEST EST ORDINAL FOR THIS DRIVER (+1).
*
* USES DI.
*
* CALLS LDP, LNE.
DHE SUBR ENTRY/EXIT
LDC DSTB
STD DI
DHE1 RJM LDP LOAD DEVICE PARAMETERS
LDN 0 INITIALIZE PARTITION SEARCH
DHE2 RJM LNE LOCATE NEXT EST ORDINAL
ZJN DHE4 IF NO MORE PARTITIONS
SBM DHEA
MJN DHE3 IF NOT NEW HIGHEST EST ORDINAL
LDD EO SET HIGHEST EST ORDINAL
STM DHEA
DHE3 LDD EO
UJN DHE2 PROCESS NEXT PARTITION
DHE4 LDN DSTBE ADVANCE DEVICE STATE TABLE ADDRESS
RAD DI
LMM DASB
NJN DHE1 IF NOT END OF DEVICE STATE TABLE
LDM DHEA SET HIGHEST EST ORDINAL FOR THIS DRIVER
ADN 1
STM LNEA
UJN DHEX RETURN
DHEA CON 0 HIGHEST EST ORDINAL FOR THIS DRIVER
IST SPACE 4,15
** IST - INITIALIZE DEVICE STATE TABLE.
*
* ENTRY (PUTA - PUTA+1) = ADDRESS OF *PUT*.
* (PUTN) = NUMBER OF *PUT* ENTRIES.
*
* USES CI, DI, FC, T1, T2, T5, CM - CM+4, CW - CW+4,
* WB - WB+4.
*
* MACROS SFA.
IST11 LDD DI DEFINE END OF DEVICE STATE TABLE
STM DASB
IST SUBR ENTRY/EXIT
LDC CSTBL-1
STDL DI
IST1 LDN 0 CLEAR DEVICE AND CONTROLLER STATE TABLES
STI DI
SOD DI
LMC DSTB
NJN IST1 IF MORE TO CLEAR
* LDN 0
STD FC UNITS NOT CHECKED FOR FORMAT REQUEST
STD T5 INITIALIZE *PUT* ORDINAL
* PROCESS NEXT *PUT* ENTRY.
IST2 AOD T5 CHECK NEXT *PUT* ENTRY
LMM PUTN NUMBER OF *PUT* ENTRIES
ZJN IST11 IF END OF PHYSICAL UNIT TABLE
LDD T5
SHN PUTLS CALCULATE *PUT* ADDRESS
STD T1
LDM PUTA FWA OF *PUT*
SHN 14
LMM PUTA+1
ADD T1
ADK UNCT GET UNIT CONTROL WORD
CRD WB
SFA EST,WB+1 FETCH EST ENTRY
ADK EQDE
CRD CM
ADK EQAE-EQDE
CRD CW
LDD CM+1 CHECK FIRST CHANNEL
STD T1
LMD IR+4
LPN 77
ZJN IST3 IF CHANNEL FOR THIS DRIVER
LDD CM+2 CHECK SECOND CHANNEL
STD T1
ZJN IST2 IF SECOND CHANNEL NOT DEFINED
LMD IR+4
LPN 77
NJN IST2 IF NOT CHANNEL FOR THIS DRIVER
* CREATE DEVICE STATE TABLE ENTRY FOR THIS DEVICE.
IST3 LDD T5 SET *PUT* ORDINAL IN STATE TABLE
STI DI
ERRNZ PUTO CODE DEPENDS ON VALUE
LDD T1
LPC 200 SET PORT NUMBER
SHN 11-7
STM PNUN,DI
LDD WB GET EQUIPMENT AND UNIT NUMBERS
LPC 777
RAM PNUN,DI APPEND TO PORT NUMBER
LDN EQNS DETERMINE DEVICE TYPE
STD T1
IST4 SOD T1 CHECK NEXT DEVICE MNEMONIC
LDM DM,T1
LMD CM+3
NJN IST4 IF DEVICE MNEMONIC DOES NOT MATCH
LDD T1 SET DEVICE TYPE INDEX
LMC 1S13 SET *CHECK DRIVE TYPE* FLAG
STML DVTP,DI
LDD CM CHECK FOR SHARED DEVICE
LPC 1000
ZJN IST5 IF NOT SHARED DEVICE
RAML DVTP,DI SET *MMF SHARED DEVICE* FLAG
LDML DM,T1
SHN 0-17 NONZERO IF PARITY DEVICE
SHN 12-0
RAML DVTP,DI SET *ENABLE MMF PARITY DEVICE ACCESS* FLAG
IST5 LDD CW+3
SHN 0-13 NONZERO IF PARTITIONED DEVICE
SHN 17-0
RAML DVTP,DI SET *PARTITIONED DEVICE* FLAG
* FIND CONTROLLER STATE TABLE ENTRY FOR THIS DEVICE.
LDN 0 INITIALIZE CONTROLLER STATE TABLE INDEX
STD T1
IST6 LDD T1 CHECK NEXT CONTROLLER
SHN 2
ERRNZ CSTBE-4 CODE DEPENDS ON VALUE
ADC CSTB
STD CI SET CONTROLLER STATE TABLE ADDRESS
LDML CTST,CI
NJN IST7 IF CONTROLLER ALREADY IDENTIFIED
LDD DI SET *DSTB* ADDRESS OF FIRST DEVICE
LMC 1S14 SET *INITIAL RESET REQUIRED* FLAG
STML CTST,CI
UJN IST8 SET CONTROLLER STATE TABLE INDEX
IST7 LPC 7777 *DSTB* OF FIRST DEVICE ON CONTROLLER
STD T2
LDM PNUN,T2 COMPARE CONTROLLER AND PORT NUMBERS
LMM PNUN,DI
SHN -6
ZJN IST8 IF SAME CONTROLLER AND PORT NUMBERS
AOD T1 CHECK NEXT CONTROLLER
LMN MXCN
NJN IST6 IF NOT END OF CONTROLLER STATE TABLE
STI DI CLEAR DEVICE STATE TABLE ENTRY
ERRNZ PUTO CODE DEPENDS ON VALUE
STM PNUN,DI
STM DVTP,DI
UJN IST9 IGNORE DEVICE AND PROCESS NEXT *PUT*
IST8 LDD T1 SET CONTROLLER STATE TABLE INDEX
SHN 14
RAML PNUN,DI
LDN DSTBE ADVANCE DEVICE STATE TABLE ADDRESS
RAD DI
LMC DSTBL
ZJN IST10 IF DEVICE STATE TABLE IS FULL
IST9 LJM IST2 PROCESS NEXT *PUT* ENTRY
IST10 LJM IST11 DEFINE END OF DEVICE STATE TABLE
SMC SPACE 4,10
** SMC - SET MMF CONSTANTS.
*
* PERFORM CODE MODIFICATION FOR MMF OPERATION.
*
* USES CM - CM+4.
*
* MACROS ISTORE.
SMC SUBR ENTRY/EXIT
LDK MMFL GET MMF WORD
CRD CM
LDD CM SET MAINFRAME ID
STM BSTA
LDD CM+1
SHN 21-11
MJN SMC1 IF SHARED BUFFERED DEVICES CONFIGURED
ISTORE CRIA,(UJN CRIX) DISABLE MMF SLAVE RESET INTERLOCK
ISTORE SRIA,(UJN SRIX)
ISTORE CAAA,(UJN CAA8) DISABLE CHECK FOR MMF PARITY RESTORE
ISTORE CETA,(UJN CETX)
UJN SMCX RESERVE CHANNEL
SMC1 LDD CM+3 SET MACHINE MASKS
RAM IPRB
LPN 77
RAM CABA
LDD CM+4 SET MACHINE INDEX
RAM CFDA
STM CFDB
LDD CM+4 MACHINE INDEX
ADN GPDA-1 *ACGL* BIT NUMBER
LMC LCNI
STM DMPA
LMC LDNI&LCNI
STM EMPA
UJP SMCX RETURN
SPACE 4,10
* CHECK FOR OVERFLOW.
ERRNG 17777-*-5 OVERFLOW PAST END OF PP
QUAL *
TTL 1DA - DISK ARRAY SUBSYSTEM (DAS) DRIVER.
END