IDENT 1LC,LCW
PERIPH
BASE MIXED
SST
TITLE 1LC - LOAD BUFFER CONTROLWARE.
*COMMENT 1LC - LOAD BUFFER CONTROLWARE ROUTINE.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
1LC SPACE 4,10
***** 1LC - LOAD BUFFER CONTROLWARE.
*
* W. J. SMITH. 79/07/21.
* J. L. LARSON. 83/06/14.
*
* DOWNLOAD DISK CONTROLWARE ON SPECIFIED CHANNEL.
1LC SPACE 4,10
*** *1LC*, IN CONJUNCTION WITH THE CPU PROGRAM *LOADBC, WILL
* DOWNLOAD CONTROLWARE TO THE REQUESTED CHANNEL AND
* CONTROLLER.
*
* CALL -
*
*T,IR 18/ *1LC*,6/ 0,18/ DADDR,18/ LADDR
* DADDR FET ADDRESS FOR CONTROLWARE DUMP.
* = 0 IF CONTROLWARE NOT TO BE DUMPED BEFORE RELOAD.
* LADDR FET ADDRESS OF CONTROLWARE TO LOAD.
*
* *LOADBC* USES RECALL MACRO WHEN CALLING *1LC*.
1LC SPACE 4,20
*** *1LC* IS A PP PROGRAM CALLED BY THE CPU PROGRAM *LOADBC*
* TO DOWNLOAD DISK CONTROLWARE ON A SPECIFIED CHANNEL OR TO
* DOWNLOAD CONTROL MODULE CONTROLWARE TO A SPECIFIED CONTROL
* MODULE. THE CONTROLWORD AT FET+8 IN *LOADBC* FL CONTAINS
* EITHER THE CHANNEL NUMBER OR THE CONTROL MODULE EST ORDINAL
* (IN WHICH CASE BIT 2**11 IS SET).
* THE CONTROLWARE IS CHECKED FOR ITS VALIDITY, READ FROM FIELD
* LENGTH OF *LOADBC* IN SEGMENTS AND DOWNLOADED. CONTROLLER
* IS STATUSED FOR ITS FUNCTIONALITY (GENERAL STATUS OF ZERO
* INDICATES CORRECT CHECKSUM) AND A RESPONSE CODE OF ZERO IS
* RETURNED IN FET+0 ON A SUCCESSFUL LOAD. A NON-ZERO RESPONSE
* CODE IS RETURNED FOR UNSUCCESSFUL LOADS.
* IF A NONZERO DUMP CONTROLWARE FET ADDRESS IS ALSO SPECIFIED,
* THE CONTENTS OF THE 7255 ADAPTOR, THE 7155 CONTROLLER (FMD OR
* DEMA) OR THE 7165 CONTROLLER WILL BE DUMPED TO THE BUFFER
* BEFORE THE RELOAD IS ATTEMPTED. A ZERO RESPONSE CODE IS
* RETURNED TO THE DUMP FET+0 ON A SUCCESSFUL DUMP.
* A NON-ZERO RESPONSE CODE IS RETURNED FOR BUFFER ERROR
* CONDITIONS, UNSUCCESSFUL DUMPS, AND FOR DUMP REQUESTS OF
* CONTROLLERS/ADAPTORS NOT LISTED ABOVE. THE NUMBER OF THE
* CHANNEL THAT WAS USED TO LOAD CONTROLWARE IS RETURNED IN
* FET+8, BYTE 0.
1LC SPACE 4,10
*** DAYFILE MESSAGES.
*
* * FET ADDRESS OUT OF RANGE.* - THE CONTROLWARE DUMP OR
* LOAD FET ADDRESS IS .LE. 1 OR EXTENDS PAST FL.
SPACE 4,10
* MACROS.
*CALL COMPMAC
*CALL COMSCPS
*CALL COMPCHM
*CALL COMSDSL
*CALL COMSPIM
*CALL COMSSSD
SPACE 4,10
* ASSEMBLY CONSTANTS.
BUFL EQU 1000 LENGTH OF CONTROLWARE BLOCK
FCDC EQU 701 DUMP 7165 CONTROLLER MEMORY
FCLA EQU 500 LOAD ADDRESS AND LENGTH (7165 DUMP)
FCAL EQU 414 AUTOLOAD FUNCTION CODE
FCLC EQU 71 CONTROL MODULE LOAD FROM PP FUNCTION
FCAR EQU 67 AUTOLOAD WITH NO DROP OF DRIVE RESERVES
FCDM EQU 63 DUMP CONTROLLER MEMORY FUNCTION CODE
FCMP EQU 62 MANIPULATE PROCESSOR FUNCTION CODE
FCST EQU 12 GENERAL STATUS FUNCTION CODE
FCOC EQU 10 OPERATION COMPLETE CODE
FCCN EQU 0 CONNECT FUNCTION CODE
SPACE 4,10
* 7155 CONTROLLER DUMP ASSEMBLY CONSTANTS.
CTSZ EQU 8192D 7155 CONTROLLER MEMORY SIZE (16 BIT WORDS)
CWDB EQU 32D CONTROLLER WORDS PER MEMORY DUMP BLOCK
PBDB EQU CWDB*2 PP BYTES PER DUMP BLOCK
NCBD EQU CTSZ/CWDB NUMBER OF CONTROLLER BLOCKS TO DUMP
SPACE 4,10
* RESPONSE CODES RETURNED TO LOAD FET+0.
RC0 EQU 0 CONTROLWARE LOAD COMPLETE
RC1 EQU 1 * USER NOT SYSTEM ORIGIN.*
RC2 EQU 2 * SPECIFIED CHANNEL IS IN USE.*
RC3 EQU 3 RESERVED BY CPU ROUTINE *LOADBC*
RC4 EQU 4 RESERVED BY CPU ROUTINE *LOADBC*
RC5 EQU 5 RESERVED BY CPU ROUTINE *LOADBC*
RC6 EQU 6 RESERVED BY CPU ROUTINE *LOADBC*
RC7 EQU 7 RESERVED BY CPU ROUTINE *LOADBC*
RC10 EQU 10 RESERVED BY CPU ROUTINE *LOADBC*
RC11 EQU 11 * SYSTEM NOT IN ENGR MODE.*
RC12 EQU 12 * BUFFER ARGUMENT ERROR.*
RC13 EQU 13 CDC RESERVED
RC14 EQU 14 * CONTROLWARE LOAD ALREADY IN PROGRESS.*
RC15 EQU 15 * NO 77 TABLE IN CONTROLWARE RECORD.*
RC16 EQU 16 * NO 52 TABLE IN CONTROLWARE RECORD.*
RC17 EQU 17 * LENGTH IN 52 TABLE .NE. FET.*
RC20 EQU 20 RESERVED BY CPU ROUTINE *LOADBC*
RC21 EQU 21 * NOT CONTROL MODULE EST ORDINAL.*
RC22 EQU 22 CDC RESERVED
RC23 EQU 23 CDC RESERVED
RC24 EQU 24 CDC RESERVED
RC25 EQU 25 CDC RESERVED
RC26 EQU 26 CDC RESERVED
RC27 EQU 27 CDC RESERVED
RC30 EQU 30 * CONTROLLER DID NOT TAKE ALL CONTROLWARE*
RC31 EQU 31 * GENERAL STATUS = NNNN.*
RC32 EQU 32 * FUNCTION TIMED OUT=NNNN.*
RC33 EQU 33 * NO GENERAL STATUS RECEIVED.*
RC34 EQU 34 * CHXX, CONTROLLER RESERVED.*
SPACE 4,10
* DUMP CONTROLWARE RESPONSE CODES RETURNED TO DUMP FET+0.
DR0 EQU 0 * CONTROLLER DUMP COMPLETE.*
DR1 EQU 1 * DUMP BUFFER ARGUMENT ERROR.*
DR2 EQU 2 * INSUFFICIENT DUMP BUFFER SPACE.*
DR3 EQU 3 * NOT CORRECT CONTROLLER TYPE FOR DUMP.*
DR4 EQU 4 * CONTROLLER DUMP UNSUCCESSFUL.*
SPACE 4,10
* DIRECT CORE ASSIGNMENTS.
BC EQU 20 BUFFER CONTROLLER CHANNEL NUMBER
ST EQU 21 CONTROLLER GENERAL STATUS
WC EQU 22 CONTROLWARE CM WORD COUNT
FN EQU 23 LAST FUNCTION ISSUED TO CONTROLLER
RC EQU 26 RESPONSE CODE
DR EQU 27 DUMP FET RESPONSE CODE
DP EQU 30 - 34 DATA POINTERS (5 LOCATIONS)
CT EQU 35 CONTROLWARE TYPE
CE EQU 36 - 37 CHANNEL CONTROLWARE ENTRY
DB EQU 40 - 44 DUMP FET BUFFER POINTERS
CS EQU 47 CHANNEL SPECIFIED ON CALL STATUS
CN EQU 60 - 64 CM WORD BUFFER
CO EQU 65 CONTROL MODULE EST ORDINAL
EQ EQU 66 CONTROL MODULE EQUIPMENT NUMBER
CF EQU 67 CHANNEL RESERVED BY *1LC* FLAG
TITLE MAIN PROGRAM.
ORG PPFW
LCW SPACE 4,10
** LCW - LOAD BUFFER CONTROLWARE MAIN PROGRAM.
LCW BSS 0 ENTRY
RJM PRS PRESET LOAD CONTROLWARE
STD RC
LMK RC14
ZJP LCW5 IF RELOAD ALREADY IN PROGRESS
LMK RC14
NJN LCW2.1 IF OTHER ERROR
LDD CO
NJN LCW0 IF CONTROL MODULE SPECIFIED
RJM DCT DUMP CONTROLLER
LCW0 RJM LCT LOAD CONTROLWARE
NJN LCW2 IF ERROR RESPONSE
LDD CS
ZJN LCW1 IF DRIVER CALL
LDN FCOC
RJM FNC
NJN LCW2 IF FUNCTION TIMEOUT
LCW1 LDD ST CHECK STATUS
ERRNZ RC0 CODE DEPENDS ON VALUE
ZJN LCW2 IF NO ERROR
LDN RC31 * GENERAL STATUS = NNNN.*
LCW2 STD RC
LCW2.1 LDD CS
ZJN LCW3 IF DRIVER CALL
RJM DCH DROP CHANNEL ASSIGNMENT
UJN LCW4 CLEAR CHANNEL ENTRY INTERLOCK
LCW3 AOM CHTI+1*5 CLEAR SYSTEM REQUEST FLAG
AOM LCWA INCREMENT CONTROLLER LOADED COUNT
LCW4 LDM CHTI+4
LCWA ADN 0
* ADN 1 (DRIVER CALL)
STM CHTI+1*5+4
RJM ICE CLEAR CHANNEL ENTRY INTERLOCK
LDD CM+1
NJN LCW4 IF VERIFY OF LOAD COUNT FAILED
LCW5 RJM SDR SET DUMP FET RESPONSE
RJM GLA FET LOAD FET ADDRESS
CRD CM READ LOAD FET+0
LDN ZERL
CRD CN
LDD RC GET REPLY CODE
SHN 1
LMN 1 SET COMPLETE BIT
STD CM+4
LMN RC32*2+1
NJN LCW6 IF NOT FUNCTION TIME OUT ERROR
LDD FN
UJN LCW7 RETURN LAST FUNCTION TO FET
LCW6 LDD ST RETURN GENERAL STATUS TO FET
LCW7 STD CN+4
LDD BC RETURN CHANNEL NUMBER
STD CN
RJM GLA GET LOAD FET ADDRESS
ADN 8D
CWD CN WRITE FET+8 RESPONSE DATA
SBN 8D
CWD CM WRITE FET+0 COMPLETION STATUS
MONITOR DPPM DROP PP
LJM PPR EXIT TO PP RESIDENT
TITLE SUBROUTINES.
CCS SPACE 4,10
** CCS - CHECK CONTROLLER STATUS.
*
* EXIT (A) = 0 IF STATUS RECEIVED.
* (A) = *RC22* IF STATUS FUNCTION TIMEOUT.
* (A) = *RC23* IF STATUS NOT RECEIVED.
* (ST) = STATUS.
*
* CALLS FNC.
CSS3 EJM CSS1,CH IF DATA NOT PRESENT
LDN 1
IAM ST,CH
DCN CH
NJN CSS2 IF NO STATUS RECEIVED
CCS SUBR ENTRY/EXIT
LDN FCST CHECK STATUS
RJM FNC
NJN CCSX IF FUNCTION TIMEOUT
ACN CH
LDD HN
STD T0
CSS1 ADN 1
NJN CSS3 IF NOT TIMEOUT
SOD T0
NJN CSS3 IF NOT TIMEOUT
CSS2 DCN CH
LDN RC33 * NO GENERAL STATUS RECEIVED.*
UJN CCSX RETURN
DCH SPACE 4,10
** DCH - DROP CHANNEL ASSIGNMENT.
*
* ENTRY (BC) = CHANNEL NUMBER.
* (CF) = 0 IF CHANNEL NOT RESERVED BY *1LC*.
*
* EXIT (CF) = 0.
*
* MACROS DCHAN.
DCH SUBR ENTRY/EXIT
LDD CF
ZJN DCHX IF CHANNEL NOT RESERVED BY *1LC*
LDD BC
DCHAN
* LDN 0
STD CF
UJN DCHX RETURN
DCT SPACE 4,15
** DCT - DUMP CONTROLLER MEMORY.
*
* ENTRY (CT) = CHANNEL CONTROLWARE ENTRY.
* (DB - DB+4) = DUMP FET *IN* POINTER (SET TO *FIRST*).
* (DR) = *DR4* (CONTROLLER DUMP UNSUCCESSFUL) STATUS.
*
* EXIT (DR) = DUMP FET RESPONSE CODE.
*
* USES T1, T2, T3, T4, CM - CM+4.
*
* CALLS D7C, FNC, GDA, SDR, WBC.
DCT8 RJM D7C DUMP 7165 CONTROLLER MEMORY
NJN DCTX IF DUMP NOT SUCCESSFUL
DCT9 RJM GDA GET DUMP FET ADDRESS
ADN 2 UPDATE DUMP FET *IN* POINTER
CWD DB
LDN DR0
DCT10 STD DR SAVE DUMP FET RESPONSE CODE
DCT SUBR ENTRY/EXIT
RJM GDA GET DUMP FET ADDRESS
ZJN DCTX IF NO DUMP REQUESTED
LDN ZERL CLEAR MANIPULATE PROCESSOR PARAMETERS
CRD CM
LDN 2 SET TO DUMP CONTROLLER MEMORY
STD CM
STD T4 PRESET 8K CONTROLLER TYPE INDEX
LDD CT CHECK CONTROLWARE TYPE
LPN 37
LMN FMCW
ZJN DCT1 IF MA721 CONTROLWARE FOR 7155 FMD
LMN PHCW&FMCW
ZJN DCT1 IF MA722 CONTROLWARE FOR 7155 DEMA
LMN CCCW&PHCW
ZJN DCT8 IF 7165 CONTROLLER
LMN IDCW&CCCW
ZJN DCT0 IF 7255 ADAPTOR
LDN DR3 * NOT CORRECT CONTROLLER TYPE FOR DUMP.*
UJN DCT10 SAVE RESPONSE CODE
DCT0 LDN 40 SET 7255 ADAPTOR MEMORY ADDRESS
STD CM+1
SHN 1 SET MEMORY ADDRESS INCREMENT
STM DCTB
LDN 1 SET 7255 CONTROLLER TYPE INDEX
STD T4
DCT1 LDK NFBT SET NUMBER OF FULL BUFFERS
STD T2
LDK CWFB SET CM WORDS IN FULL BUFFER
STD T3
DCT2 LDK MXDB SET NUMBER OF BLOCKS IN FULL BUFFER
STD T1
DCT3 LDC DBUF RESET PP DUMP BUFFER ADDRESS
STM DCTA
DCT4 LDN FCMP INITIATE MANIPULATE PROCESSOR FUNCTION
RJM FNC
DCT5 NJP DCTX IF FUNCTION TIMEOUT
ACN CH
LDN 5 TRANSFER PARAMETERS
OAM CM,CH
FJM *,CH IF CHANNEL FULL
DCN CH
NJN DCT5 IF NOT ALL PARAMETERS TAKEN
LDN FCDM DUMP CONTROLLER MEMORY
RJM FNC
NJN DCT5 IF FUNCTION TIMEOUT
ACN CH
LDD HN
ERRNZ PBDB-100B CODE DEPENDS ON VALUE
IAM DBUF,CH READ CONTROLLER MEMORY DUMP BLOCK
DCTA EQU *-1
NJN DCT5 IF NOT ALL DATA TRANSFERRED
LDD HN ADVANCE PP DUMP BUFFER ADDRESS
RAM DCTA
LDC CWDB ADVANCE CONTROLLER MEMORY ADDRESS
DCTB EQU *-1
* LDC 100 (ADVANCE 7255 ADAPTOR ADDRESS)
RAD CM+2
SHN 21-10
PJN DCT6 IF NOT 8 BIT OVERFLOW
STD CM+2 CLEAR LOWER 8 BITS OF CONTROLLER ADDRESS
AOD CM+1 INCREMENT UPPER 8 BITS OF ADDRESS
DCT6 SOD T1
NJP DCT4 IF MORE BLOCKS TO TRANSFER TO BUFFER
RJM WBC WRITE BUFFER TO CM
SOD T2
MJN DCT7 IF DUMP COMPLETE
NJP DCT2 IF MORE FULL BUFFERS TO DUMP
LDK RPBB SET REMAINING PARTIAL BUFFER BLOCKS
ZJN DCT7 IF NO PARTIAL BUFFER
STD T1
LDK CWPB SET CM WORDS IN LAST PARTIAL BUFFER
STD T3
LDN ZERL CLEAR LAST CM WORD
CRM DBUF+RPBB*PBDB,ON
LJM DCT3 TRANSFER LAST PARTIAL BUFFER
DCT7 LJM DCT9 UPDATE FET
D7C SPACE 4,10
** D7C - DUMP 7165 CONTROLLER MEMORY.
*
* ENTRY (CM+1) = 0.
*
* EXIT (A) = 0 IF DUMP SUCCESSFUL.
*
* USES CM+1, T1, T2, T3, T4.
*
* CALLS FNC, WBC.
D7C SUBR ENTRY/EXIT
LDN 4 SET 7165 CONTROLLER TYPE INDEX
STD T4
LDN NBBD SET NUMBER OF CONTROLLER BLOCKS TO DUMP
STD T2
LDK CMWF SET NUMBER OF CM WORDS IN FULL BUFFER
STD T3
LDK CTDB SET NUMBER OF CONTROLLER WORDS IN BLOCK
STD T1
D7C1 LDC FCLA LOAD ADDRESS AND LENGTH
D7CA EQU *-1
RJM FNC
D7C2 NJN D7CX IF FUNCTION TIMEOUT
ACN CH
LDD CM+1 SEND BOTTOM 12 BITS OF ADDRESS
OAN CH
LDD T1 SEND LENGTH
OAN CH
FJM *,CH
DCN CH
LDC FCDC ISSUE DIAGNOSTIC READ
RJM FNC
NJN D7CX IF FUNCTION TIMEOUT
ACN CH
LDD T1
SHN 1
IAM DBUF,CH READ CONTROLLER MEMORY BLOCK
NJN D7C2 IF NOT ALL DATA TRANSFERRED
RJM WBC WRITE BUFFER TO CM
SOD T2
PJN D7C3 IF DUMP NOT COMPLETE
LDN 0
LJM D7CX RETURN
D7C3 LDC CTDB UPDATE CONTROLLER MEMORY ADDRESS
RAD CM+1
SHN -14
RAM D7CA
LDD T2
NJN D7C4 IF MORE FULL BLOCKS TO DUMP
LDK CMWP SET NUMBER OF CM WORDS IN PARTIAL BLOCK
STD T3
LDK CTPB SET NUMBER OF PP BYTES IN PARTIAL BLOCK
STD T1
D7C4 LJM D7C1 DUMP PARTIAL BLOCK
FNC SPACE 4,10
** FNC - ISSUE FUNCTION.
*
* ENTRY (A) = FUNCTION CODE.
*
* EXIT (A) = 0 IF FUNCTION ACCEPTED.
* (A) = *RC22* IF FUNCTION TIMEOUT.
FNC3 LDN 0
FNC SUBR ENTRY/EXIT
STD FN SAVE FUNCTION ISSUED
IJM FNC1,CH IF CONTROLLER READY
DCN CH
FNC1 FAN CH
LDD HN FUNCTION TIMEOUT OUTER DELAY
STD T0
FNC2 ADD ON
IJM FNC3,CH IF FUNCTION ACCEPTED
NJN FNC2 IF NOT FUNCTION TIMEOUT
SOD T0
NJN FNC2 IF NOT FUNCTION TIMEOUT
DCN CH
LDN RC32 * FUNCTION TIMED OUT=NNNN.*
UJN FNCX EXIT
GDA SPACE 4,10
** GDA - GET DUMP FET ADDRESS.
*
* ENTRY (IR+2 - IR+3) = DUMP FET ADDRESS.
*
* EXIT (A) = ABSOLUTE DUMP FET ADDRESS.
* (A) = 0 IF NO DUMP REQUESTED.
GDA SUBR ENTRY/EXIT
LDD IR+3 GET DUMP FET ADDRESS
SCN 77
SHN 6
ADD IR+2
ZJN GDAX IF NO DUMP REQUESTED
ADD RA
SHN 6
UJN GDAX RETURN
GLA SPACE 4,10
** GLA - GET LOAD FET ADDRESS.
*
* ENTRY (IR+3 - IR+4) = LOAD FET ADDRESS.
*
* EXIT (A) = ABSOLUTE LOAD FET ADDRESS.
GLA SUBR ENTRY/EXIT
LDD IR+3 GET LOAD FET ADDRESS
LPN 37
SHN 6
ADD RA
SHN 6
ADD IR+4
UJN GLAX RETURN
ICE SPACE 4,10
** ICE - INTERLOCK CONTROLWARE LOAD BITS.
*
* ENTRY (CE - CE+1) = CONTROLWARE LOAD BIT ADDRESS.
* (CHTI) = CONTROLWARE INTERLOCK *UTEM* PARAMETERS.
*
* EXIT (CM+1) = *UTEM* RETURN STATUS.
*
* USES CM+1, CM+3, CM+4, T1.
*
* MACROS MONITOR.
ICE SUBR ENTRY/EXIT
LDN 2
STD CM+1 SET NUMBER OF *UTEM* PARAMETER WORDS
STD T1
LDD CE SET CONROLWARE LOAD BIT ADDRESS
STD CM+3
LDD CE+1
STD CM+4
LDD MA
CWM CHTI,T1 SET/CLEAR CONTROLWARE LOAD INTERLOCK
MONITOR UTEM
LDD MA GET NEW VALUES
CRM CHTI,T1
UJN ICEX RETURN
CHTI VFD 1/1,5/0,6/2,6/34D,42/0 VERIFY INTERLOCKS
* VFD 1/1,5/0,6/4,6/30D,42/0 VERIFY RELOAD COUNT/DRIVER BIT
VFD 1/0,5/0,6/1,6/34D,42/1 SET LOAD IN PROGRESS
* VFD 1/0,5/0,6/5,6/30D,42/0 CLEAR INTERLOCK/SET LOAD COUNT
ILF SPACE 4,10
** ILF - ISSUE LOAD FUNCTION.
*
* ENTRY (CO) = 0 IF NOT CONTROL MODULE RELOAD.
* (CS) = 0 IF DRIVER CALL.
* (EQ) = CONTROL MODULE EQUIPMENT NUMBER.
*
* CALLS CCS, FNC.
ILF2 LDD CS
ILFA ZJN ILF3 IF DRIVER CALL
* PSN (*FCAR* FUNCTION NOT SUPPORTED)
LDC FCAL&FCAR
ILF3 LMN FCAR
ILF4 RJM FNC ISSUE FUNCTION
ILF SUBR ENTRY/EXIT
LDD CO
ZJN ILF2 IF NOT CONTROL MODULE RELOAD
ILF1 LDN FCCN
RJM FNC ISSUE CONNECT FUNCTION
NJN ILFX IF FUNCTION TIMEOUT
ACN CH
LDD EQ OUTPUT CONTROL MODULE EQUIPMENT NUMBER
SHN 3
OAN CH
FJM *,CH IF CHANNEL FULL
DCN CH
RJM CCS STATUS CONTROLLER
NJN ILFX IF ERROR
LDD ST
NJN ILF1 IF GENERAL STATUS NOT ZERO
LDN FCLC
UJN ILF4 ISSUE CONTROLWARE LOAD FROM PP FUNCTION
LCT SPACE 4,15
** LCT - LOAD CONTROLWARE TO CONTROLLER.
*
* ENTRY (CS) = CHANNEL SPECIFIED ON CALL STATUS.
* (DP+3 - DP+4) = FWA CONTROLWARE RECORD (77 TABLE).
* (EQ) = CONTROL MODULE EQUIPMENT NUMBER IF SPECIFIED.
* (WC) = CM WORD COUNT OF CONTROLWARE RECORD.
*
* EXIT (A) = 0 IF LOAD COMPLETE.
* (A) = *RC30* IF CONTROLLER DID NOT TAKE ALL
* CONTROLWARE.
* (A) = *RC22* IF FUNCTION TIMEOUT.
* (A) = *RC23* IF STATUS NOT RECEIVED.
*
* USES T1, WC, DP+3 - DP+4.
*
* CALLS CCS, ILF.
LCT4 FJM *,CH IF LAST WORD STILL ON CHANNEL
DCN CH
LCT5 DELAY
RJM CCS CHECK STATUS
NJN LCTX IF ERROR
LDD ST
SBN 2
ZJN LCT5 IF CONTROLLER BUSY
LDN 0
LCT SUBR ENTRY/EXIT
RJM ILF ISSUE LOAD FUNCTION
NJN LCTX IF FUNCTION TIMEOUT
LDD RA
SHN 6
RAD DP+4
SHN -14
RAD DP+3
LDD TH
ERRNZ BUFL-1000 CODE DEPENDS ON VALUE
STD T1
ACN CH ACTIVATE CHANNEL FOR OUTPUT
LCT2 LDD WC SET BLOCK WORD COUNT
ZJN LCT4 IF END OF CONTROLWARE
SBD T1
PJN LCT3 IF DATA OVERFLOWS BUFFER
LDD WC
STD T1
LDN 0
LCT3 STD WC
LDD DP+3 SET CONTROLWARE DATA ADDRESS
SHN 14
ADD DP+4
CRM BUF,T1 READ BLOCK OF CONTROLWARE
STD DP+4 SAVE NEXT CM ADDRESS FOR CONTROLWARE READ
SHN -14
STD DP+3
LDD T1 OUTPUT BLOCK TO CONTROLLER
SHN 2
ADD T1
OAM BUF,CH
FJM *,CH IF CHANNEL FULL
ZJN LCT2 IF ALL DATA TAKEN
LDN RC30 * CONTROLLER DID NOT TAKE ALL CONTROLWARE*
LJM LCTX RETURN
RCT SPACE 4,10
** RCT - READ CHANNEL TABLE.
*
* ENTRY (A) = CHANNEL NUMBER.
*
* EXIT (A) = ADDRESS OF CHANNEL RESERVATION TABLE WORD.
* (BC) = CHANNEL NUMBER.
* (T6) = BYTE ADDRESS OF CHANNEL RESERVATION STATUS.
* (CM - CM+4) = CHANNEL RESERVATION TABLE WORD.
*
* USES T0.
RCT SUBR ENTRY/EXIT
LPN 77
STD BC
STD T6
LCN 0
STD T0
LDK CHTP GET CHANNEL TABLE ADDRESS
CRD CM
RCT1 AOD T0
LCN 5
RAD T6
PJN RCT1 IF CHANNEL WORD NOT REACHED
ADN CM+5
STD T6
LDD CM+2 READ CHANNEL RESERVATION TABLE
SHN 14
LMD CM+3
ADD T0
CRD CM
UJN RCTX RETURN
SDR SPACE 4,10
** SDR - SET DUMP FET RESPONSE.
*
* ENTRY (DR) = DUMP FET RESPONSE CODE.
* (IR+2 - IR+3) = DUMP FET ADDRESS.
*
* EXIT (IR+2 - IR+3) = DUMP FET ADDRESS CLEARED.
*
* USES CM - CM+4.
*
* CALLS GDA.
SDR SUBR ENTRY/EXIT
RJM GDA GET DUMP FET ADDRESS
ZJN SDRX IF NO DUMP REQUESTED
CRD CM
LDD DR RETURN RESPONSE CODE
SHN 1
LMN 1 SET COMPLETE BIT
STD CM+4
RJM GDA
CWD CM
LDN 0 CLEAR DUMP FET ADDRESS
STD IR+2
LDD IR+3
LPN 77
STD IR+3
UJN SDRX RETURN
WBC SPACE 4,10
** WBC - WRITE DUMP BUFFER TO CM.
*
* ENTRY (T3) = NUMBER OF CM WORDS IN BUFFER BLOCK.
* (T4) = CONTROLLER TYPE INDEX IF FIRST BLOCK.
* = 0 IF FIRST BLOCK ALREADY WRITTEN.
* (DB+3 - DB+4) = DUMP FET *IN* POINTER.
*
* EXIT BUFFER BLOCK WRITTEN TO CM.
* DUMP FET *IN* POINTER UPDATED.
WBC SUBR ENTRY/EXIT
LDD T4 SET CONTROLLER TYPE INDEX IN BYTE 0
ZJN WBC1 IF NOT FIRST BLOCK
STM BUF
LDN 0 SET FIRST BLOCK WRITTEN
STD T4
WBC1 LDD DB+3 WRITE BUFFER TO CM
SHN 6
ADD RA
SHN 6
ADD DB+4
CWM DBUF,T3
LDD T3 ADVANCE DUMP FET *IN* POINTER
RAD DB+4
SHN -14
RAD DB+3
UJN WBCX RETURN
TITLE BUFFERS.
USE BUFFERS
USE *
BUF EQU * CONTROLWARE LOAD BUFFER
ERRNG EPFW-BUF-BUFL PPU MEMORY OVERFLOW
DBUF EQU * CONTROLLER DUMP BUFFER
DBUFL EQU EPFW-DBUF-5 MAXIMUM BUFFER SIZE
* 7155 DUMP BUFFER ASSEMBLY CONSTANTS.
MXDB EQU DBUFL/PBDB/5*5 MAXIMUM 7155 DUMP BLOCKS IN PP BUFFER
NFBT EQU NCBD/MXDB NUMBER OF FULL BUFFERS TO TRANSFER
RPBB EQU NCBD-NFBT*MXDB REMAINING PARTIAL BUFFER BLOCKS
CWFB EQU MXDB*PBDB/5 CM WORDS IN FULL BUFFER
PBPB EQU RPBB*PBDB+4 PP BYTES IN LAST PARTIAL BUFFER (ROUNDED)
CWPB EQU PBPB/5 CM WORDS IN LAST PARTIAL BUFFER
* 7165 DUMP BUFFER ASSEMBLY CONSTANTS.
PPDB EQU DBUFL/12*12 PP BYTES PER FULL DUMP BLOCK
CCSZ EQU 40000 7165 CONTROLLER MEMORY SIZE (16 BIT WORDS)
CTDB EQU PPDB/2 CONTROLLER WORDS PER FULL DUMP BLOCK
NBBD EQU CCSZ/CTDB NUMBER OF CONTROLLER BLOCKS TO DUMP
CTPB EQU CCSZ-NBBD*CTDB CONTROLLER WORDS IN PARTIAL DUMP BLOCK
CMWF EQU PPDB/5 NUMBER OF CM WORDS PER FULL BLOCK
CPPB EQU CTPB*2+4 PP BYTES PER PARTIAL BLOCK (ROUNDED)
CMWP EQU CPPB/5 NUMBER OF CM WORDS PER PARTIAL BLOCK
DBSZ EQU CMWF*NBBD+CMWP CM DUMP BUFFER SIZE
OVERFLOW
TITLE PRESET.
PRS SPACE 4,20
** PRS - PRESET LOAD CONTROLWARE.
*
* ENTRY (IR+2 - IR+3) = DUMP FET ADDRESS.
* (IR+3 - IR+4) = LOAD FET ADDRESS.
* (LOAD FET+8) BIT 2**11 = 1 IF BOTTOM 9 BITS =
* CONTROL MODULE EST ORDINAL.
* BIT 2**10 = 0 IF DRIVER CALL.
*
* EXIT (A) = ERROR RESPONSE.
* (BC) = CHANNEL NUMBER.
* (CS) = 0 IF DRIVER CALL.
* (CT) = CHANNEL CONTROLWARE TYPE.
* (CE - CE+1) = CONTROLWARE LOAD BITS POINTER.
* (CHTI) SET FOR CLEAR OF CONTROLWARE TABLE INTERLOCK.
* (DB - DB+4) = *IN* POINTER FOR DUMP FET.
* (DP+3 - DP+4) = FWA OF CONTROLWARE RECORD (77 TABLE).
* (DR) = INITIAL DUMP FET RESPONSE.
* (WC) = CM WORD COUNT OF CONTROLWARE RECORD.
* IF A CHANNEL WAS SPECIFIED ON THE CALL -
* (CF) = 0.
* (CO) = 0.
* IF A CONTROL MODULE WAS SPECIFIED ON THE CALL -
* (CO) = CONTROL MODULE EST ORDINAL.
* (CF) = 1 (CHANNEL RESERVED).
* (EQ) = CONTROL MODULE EQUIPMENT NUMBER.
*
* USES T6, T7, CM - CM+4, CN - CN+4, DB-2 - DB+7, T0 - T4.
*
* CALLS DCH, GDA, GLA, ICE, RCT, RSC, SCC, SDR, VFP.
PRS18 LDN RC1 * USER NOT SYSTEM ORIGIN.*
PRS SUBR ENTRY/EXIT
LDN DR4 PRESET CONTROLLER DUMP UNSUCCESSFUL STATUS
STD DR
LDN 0 INITIALIZE NO CONTROL MODULE EST ORDINAL
STD CO
STD CF INITIALIZE NO CHANNEL RESERVED
LDD IR+3 VALIDATE CONTROLWARE LOAD FET
LPN 77
SHN 14
ADD IR+4
RJM VFP
NJN PRS1 IF INVALID BUFFER PARAMETERS
LDD CP
ADK JOTW
CRD CM
LDD CM+3
LMK SYOT
NJN PRS18 IF NOT SYSTEM ORIGIN
LDD MA GET LOAD FET PARAMETERS
ADN 2
CRD DP *IN* AND *OUT* POINTERS
ADN 1
CRD CM GET FET LENGTH
LDD CM
LPN 77
SBN 4
PJN PRS2 IF LOAD FET LONG ENOUGH
PRS1 LDN RC12 * BUFFER ARGUMENT ERROR.*
UJN PRSX RETURN
PRS2 LDD IR+3 VALIDATE CONTROLWARE DUMP FET
SCN 77
SHN 6
LMD IR+2
SHN 6
ZJN PRS4 IF NO CONTROLLER DUMP REQUESTED
RJM VFP
NJN PRS3 IF INVALID BUFFER PARAMETERS
LDD MA GET DUMP FET PARAMETERS
ADN 3
CRD DB+2 *FIRST* AND *LIMIT* POINTERS
LDN ZERL
CRD DB-2
RJM GDA GET DUMP FET ADDRESS
ADN 2 REWIND FET (SET *IN* = *OUT* = *FIRST*)
CWD DB
ADN 1
CWD DB
LDD DB+2+3 VERIFY DUMP BUFFER SIZE
SBD DB+2+1
SHN 14
ADD DB+2+4
SBD DB+2+2
SBK DBSZ+1 REQUIRED CM DUMP BUFFER SIZE
PJN PRS4 IF DUMP BUFFER LARGE ENOUGH
LDN DR2 * INSUFFICIENT DUMP BUFFER SPACE.*
PRS3 STD DR
RJM SDR SET DUMP FET RESPONSE
PRS4 LDD DP+3 LOAD FET *OUT* POINTER
SHN 6
ADD RA
SHN 6
ADD DP+4
CRD CM
LDD CM
LMC 7700
ZJN PRS5 IF 77 TABLE PRESENT
LDN RC15 * NO 77 TABLE IN CONTROLWARE RECORD.*
UJN PRS6 RETURN
PRS5 LDD DP+3
SHN 6
ADD RA
SHN 6
ADD DP+4
ADD CM+1 ADD 77 TABLE LENGTH
ADN 1
CRD CN READ EXPECTED 52 TABLE
LDD CN
LMC 5200
ZJN PRS7 IF 52 TABLE PRESENT
LDN RC16 * NO 52 TABLE IN CONTROLWARE RECORD.*
PRS6 LJM PRSX RETURN
PRS7 STD CE+1 CLEAR CHANNEL ENTRY POINTER
LDD DP+3
SHN 14
ADD DP+4
ADD CM+1 ADD 77 TABLE LENGTH - 1
ADN 2 52 TABLE ADDRESS + LENGTH
STD DP+4 RESET *OUT* POINTER TO FWA CONTROLWARE
SHN -14
STD DP+3
LDD CN+4 LENGTH OF CONTROLWARE
SBN 1 ADJUST FOR 52 TABLE
STD WC CM WORD COUNT OF CONTROLWARE
LDD DP+1 CHECK *IN* - *OUT*
SBD DP+3
SHN 14
ADD DP+2
SBD DP+4
SBD WC
ZJN PRS8 IF CORRECT CONTROLWARE LENGTH
LDN RC17 * LENGTH IN 52 TABLE .NE. FET.*
UJN PRS6 RETURN
PRS8 STD CO INITIALIZE CONTROL MODULE INDICATOR
RJM GLA GET LOAD FET ADDRESS
ADN 10 READ FET+8
CRD CM
LDD CM+4 SET CALL STATUS
SHN 0-12
LPN 1
STD CS
ZJN PRS9 IF DRIVER CALL
LDN SSTL
CRD T0
LDD T0+3
LPN 4
ZJN PRS9 IF ENGINEERING MODE ENABLED
LDD CP
ADN JCIW
CRD T0 CHECK FOR *MSE* SUBSYSTEM
LDD T0+2 GET SUBSYSTEM ID
LMC ASSI
ZJN PRS9 IF CALLER IS *MSE* SUBSYSTEM
LDN RC11 * SYSTEM NOT IN ENGR MODE.*
UJN PRS10 RETURN
PRS9 LDD CM+4
SHN 21-13
PJN PRS11 IF CHANNEL SPECIFIED
SHN 13-21
LPC 777
STD CO SET CONTROL MODULE EST ORDINAL
RJM SCC SET CONTROL MODULE CHANNEL
ZJN PRS12 IF NO ERROR
PRS10 LJM PRSX RETURN
PRS11 SHN 13-21
RJM RCT READ CHANNEL TABLE
ADN 2*CTALL READ CHANNEL CONTROLWARE TABLE
CRD CM
STD CE+1 SAVE CONTROLWARE ENTRY ADDRESS
SHN -14
STD CE
LDI T6
STD CT SAVE CHANNEL CONTROLWARE ENTRY
LDM PRSA-CM,T6 SET *UTEM* PARAMETERS FOR CHANNEL TABLE
STM CHTI+1
STM CHTI+1*5+1
PRS12 LDD CT
SHN 0-12
STM CHTI+4
SHN 21-0
MJN PRS13 IF LOAD ALREADY IN PROGRESS
RJM ICE INTERLOCK CONTROLWARE LOAD BITS
LDD CM+1
ZJN PRS14 IF INTERLOCK SET CORRECTLY
PRS13 RJM DCH DROP CHANNEL ASSIGNMENT
LDN RC14 * CONTROLWARE LOAD ALREADY IN PROGRESS.*
LJM PRSX RETURN
PRS14 LDD CT SET PARAMETERS TO CLEAR CHANNEL INTERLOCK
SHN -6
LPN 17
STM CHTI+4
LDC 4004
STM CHTI
LDN 5
STM CHTI+1*5
LDC -400
RAM CHTI+1
STM CHTI+1*5+1
LDD CO
NJN PRS15 IF CONTROL MODULE RELOAD
RJM RSC RESERVE AND STATUS CHANNEL
NJN PRS17 IF ERROR
PRS15 LDD CT CHECK CONTROLWARE TYPE
LPN 37
SBN FMCW
ZJN PRS17 IF MA721 (SUPPORTS *FCAR* FUNCTION)
SBN PHCW-FMCW
ZJN PRS17 IF MA722 (SUPPORTS *FCAR* FUNCTION)
SBN IDCW-PHCW
ZJN PRS17 IF MA462 (SUPPORTS *FCAR* FUNCTION)
LDN PSNI
STM ILFA
LDN 0
PRS17 LJM PRSX RETURN
PRSA BSS 0 TABLE OF RELOAD FLAG BIT POSITIONS
CON 58DS6
CON 46DS6
CON 34DS6
CON 22DS6
CON 10DS6
SPACE 4,10
* CHANNEL TABLE.
CHTB CH
SCI SPACE 4,10
** SCI - SET CHANNEL INSTRUCTIONS.
*
* USES T1, T2, T3.
SCI SUBR ENTRY/EXIT
LDC CTCH INITIALIZE CHANNEL TABLE ADDRESS
STD T1
LDD BC CLEAR POSSIBLE CCH FLAG
LPN 37
STD T3
SCI1 LDI T1
ZJN SCIX IF END OF CHANNEL INSTRUCTIONS
STD T2
LDI T2 GET NEXT CHANNEL INSTRUCTION
SCN 37
LMD T3
STI T2 INITIALIZE CHANNEL INSTRUCTION
AOD T1
UJN SCI1 LOOP TO CHECK FOR NEXT INSTRUCTION
RSC SPACE 4,15
** RSC - RESERVE AND STATUS CHANNEL.
*
* ENTRY (BC) = CHANNEL NUMBER.
* = *RC2* IF DOWN CHANNEL IN USE.
* = *RC34* IF CONTROLLER RESERVED.
* (CS) = CHANNEL SPECIFIED ON CALL STATUS.
*
* EXIT (A) = 0.
* (A) = *RC24* IF CONTROLLER RESERVED THROUGH
* ALTERNATE ACCESS OR *RC22* IF FUNCTION
* TIMEOUT OCCURED.
* CHANNEL RESERVED IF NOT SYSTEM REQUEST.
*
* USES CM - CM+4.
*
* CALLS CCS, FNC, RCT, SCI.
*
* MACROS MONITOR, RCHAN.
RSC2 LDD BC
RCHAN RESERVE CHANNEL
RSC3 AOD CF SET CHANNEL RESERVED BY *1LC* FLAG
RSC4 RJM SCI SET CHANNEL INSTRUCTIONS
LDD BC
LPN 40
ZJN RSC5 IF NOT A CIO CHANNEL
LDC 100000 MASTER CLEAR THE CHANNEL
RJM FNC
NJN RSCX IF ERROR OCCURRED
RSC5 RJM CCS CHECK CONTROLLER STATUS
NJN RSC6 IF STATUS TIMEOUT OR STATUS NOT RECEIVED
LDD ST
RSC6 LPC 2000
ZJN RSCX IF CONTROLLER NOT ALREADY RESERVED
LDN RC34 * CHXX, CONTROLLER RESERVED.*
RSC SUBR ENTRY/EXIT
LDD CS
ZJN RSC4 IF DRIVER CALL
LDD BC
RJM RCT READ CHANNEL TABLE
LDI T6
LPN 40
ZJP RSC2 IF CHANNEL UP
LDN 0
STD CM+2
LDD BC ASSIGN DOWNED CHANNEL
STD CM+1
MONITOR CCHM
LDD CM+2
NJP RSC3 IF CHANNEL ASSIGNED
LDN RC2 * SPECIFIED CHANNEL IS IN USE.*
UJN RSCX RETURN
SCC SPACE 4,15
** SCC - SET CONTROL MODULE CHANNEL.
*
* ENTRY (CO) = CONTROL MODULE EST ORDINAL.
* (CS) = 0 IF DRIVER CALL.
*
* EXIT (A) = ERROR RESPONSE (0 IF NO ERROR).
* (BC) = CHANNEL NUMBER.
* (CF) .NE. 0 IF CHANNEL RESERVED.
* (CT) = CONTROLWARE TYPE.
* (EQ) = CONTROL MODULE EQUIPMENT NUMBER.
* (CE - CE+1) = ABSOLUTE ADDRESS OF *CM* EST ENTRY.
*
* USES BC, CF, CT, EQ, T1, CE - CE+1, CM - CM+4, CN - CN+4.
*
* CALLS SCI.
*
* MACROS MONITOR, RCHAN, SFA.
SCC10 LDN RC21 * NOT CONTROL MODULE EST ORDINAL.*
SCC SUBR ENTRY/EXIT
SFA EST,CO GET EST ENTRY
ADK EQDE
CRD CN
ADN EQAE-EQDE
CRD CM
STD CE+1
SHN -14
STD CE
LDD CN+3
LMC 2RCM
NJN SCC10 IF NOT CONTROL MODULE
LDD CN+4 SAVE CONTROL MODULE EQUIPMENT NUMBER
SHN -11
STD EQ
LDD CM+2
STD CT
SHN 0-11
LPN 1
LMN 1
RAM SCCA
LDD CS
NJN SCC6 IF NOT DRIVER CALL
LDD CN+1 SET CHANNEL NUMBER
* LDD CN+2 (CHANNEL ACCESS BIT CLEAR)
SCCA EQU *-1
LPN 37
SCC2 STD BC
LDN 0
SCC3 LJM SCCX RETURN
SCC4 LDI T1
RCHAN RESERVE CHANNEL
SCC5 RJM SCI SET CHANNEL INSTRUCTIONS
AOD CF SET CHANNEL RESERVED BY *1LC* FLAG
LDD CM+1
UJN SCC2 SET CHANNEL NUMBER
SCC6 LDN CN+1
STD T1
SCC7 LDI T1
SHN 0-12
LMN 2
ZJN SCC4 IF CHANNEL ENABLED AND UP
AOD T1
LMN CN+3
NJN SCC7 IF ANOTHER CHANNEL BYTE TO CHECK
SCC8 SOD T1
LMN CN
NJN SCC9 IF ANOTHER CHANNEL TO CHECK
LDN RC2 * SPECIFIED CHANNEL IS IN USE.*
UJN SCC3 RETURN
SCC9 LDI T1
STD CM+1
SHN 21-13
PJN SCC8 IF CHANNEL NOT ENABLED
MONITOR CCHM ASSIGN DOWNED CHANNEL
LDD CM+2
ZJN SCC8 IF CHANNEL NOT ASSIGNED
UJP SCC5 SET CHANNEL ASSIGNED AND RETURN
VFP SPACE 4,20
** VFP - VALIDATE FET PARAMETERS.
*
* ENTRY (A) = FET ADDRESS.
*
* EXIT (A) = 0 IF FET ADDRESS AND BUFFER PARAMETERS VALID.
* (A) = *DR1* IF BUFFER PARAMETERS INVALID.
* (MB+2) = 12/0, 24/*IN*, 24/*OUT*.
* (MB+3) = 1/RANDOM FILE FLAG, 5/0, 6/FET LENGTH,
* 24/*FIRST*, 24/*LIMIT*.
*
* ERROR TO *PPR* AFTER JOB ABORT IF FET ADDRESS INVALID.
*
* USES CM+1, CM+3, CM+4.
*
* CALLS DFM.
*
* MACROS MONITOR.
VFP1 LDN DR1 * DUMP BUFFER ARGUMENT ERROR.*
VFP SUBR ENTRY/EXIT
STD CM+4
SHN -14
STD CM+3
LDN 3 VALIDATE *FIRST*, *IN*, *OUT*, AND *LIMIT*
STD CM+1
MONITOR VFPM
LDD CM+1
ZJN VFPX IF FET ADDRESS AND BUFFER PATAMETERS VALID
SBN 1
NJN VFP1 IF NOT INVALID FET ADDRESS
LDC VFPA * FET ADDRESS OUT OF RANGE.*
RJM DFM
MONITOR ABTM ABORT CONTROL POINT
LJM PPR EXIT TO PP RESIDENT
VFPA DATA C* FET ADDRESS OUT OF RANGE.*
SPACE 4,10
END