Action unknown: copypageplugin__copy
cdc:nos2.source:opl871:cpumtr
Table of Contents
CPUMTR
Table Of Contents
- [00008] CPUMTR - CPU MONITOR.
- [00010] CPU MONITOR.
- [00115] MACRO DEFINITIONS.
- [00118] BLOCK - DEFINE AN OPTIONAL BLOCK OF CPUMTR CODE.
- [00146] BSSZ - REDEFINE *BSSZ* PSEUDO INSTRUCTION.
- [00162] CXI XJ,TAB - CONVERT A TABLE ORDINAL TO AN OFFSET.
- [00262] ENDBLK - END AN OPTIONAL BLOCK OF CPUMTR CODE.
- [00274] IXI XJ/XK - INTEGER DIVISION.
- [00292] MONITOR - ISSUE PSEUDO OUTPUT REGISTER *CPUMTR* FUNCTION.
- [00312] ICTE - INTERNAL CIO FUNCTION CODE TABLE ENTRY.
- [00398] JSNMASK - DEFINE CHARACTER MASK FOR ONE CHARACTER OF JSN.
- [00432] PER - SET ECS PARITY ERROR PROCESSING PARAMETERS.
- [00456] TVFD - DEFINE RELOCATABLE -VFD-.
- [00498] SAC - SUBSTITUTE ADDRESS CONSTANT.
- [01113] EXP - GENERATE EXCHANGE PACKAGE.
- [01192] PMN - GENERATE PPU MONITOR FUNCTION TABLE ENTRY.
- [01222] PPR - GENERATE PPU REQUEST PROCESSOR TABLE ENTRY.
- [01293] SFMACRO - DEFINE THE MACRO TO BUILD A SUBFUNCTION TABLE.
- [01338] SFMACR0 - THE REAL MACRO THAT DOES THE WORK OF *SFMACRO*.
- [01427] SUBFUN - DEFINE SUBFUNCTION PROCESSOR.
- [01452] RUE - READ USER ECS.
- [01480] WUE - WRITE USER ECS.
- [01514] TABLES.
- [01516] NOTE - THE FOLLOWING TABLES *TMNR*, *TPMN*, AND *TPPR*
- [01522] TMNR - TABLE OF *MTR* PROGRAM MODE REQUEST PROCESSORS.
- [01541] TPMN - PPU MONITOR REQUESTS.
- [01558] TPPR - PPU REQUEST TABLE.
- [01603] DATA.
- [01648] PX - PROGRAM MODE EXIT REQUEST.
- [01658] PR - PROGRAM MODE REQUESTS.
- [01670] SMPR - STORAGE MOVE PROGRAM REQUEST.
- [01683] DD - INPUT REGISTER FOR DAYFILE DUMP PROCESSOR.
- [01688] MP - INPUT REGISTER FOR MONITOR AUXILLARY PROCESSOR.
- [01695] MT - MONITOR MODE TIME. (180 MACHINES).
- [01700] SA - CPU SLICE TIME ACCUMULATED SINCE CPU SWITCH.
- [01705] RC - RA+1 AUTO RECALL REQUEST.
- [01710] AM - ACTIVITY MASK FOR PP-S AND TAPE.
- [01715] IP - INCREASE PRIORITY ON I/O COMPLETION.
- [01726] WT - *WQ* TERMINATOR.
- [01762] MTR - MAIN PROGRAM.
- [01784] MTRX - MONITOR EXIT.
- [01869] MNR - MONITOR REQUEST PROCESSING.
- [01960] UTILITY SUBROUTINES.
- [01963] AAD - APPLY ADDER INCREMENT TO SRU ACCUMULATOR.
- [01984] ACB - ASSIGN COMMUNICATION BUFFER.
- [02023] MCB - MONITOR COMMUNICATION BUFFER(S).
- [02040] ACS - ADVANCE CPU SERVICE CYCLE.
- [02102] AIO - APPLY IO INCREMENT TO SRU ACCUMULATOR.
- [02174] AMP - ADD MAP PROCESSOR OR OPTICAL DISK INCREMENT.
- [02210] APQ - ASSIGN PP OR IF UNASSIGNABLE ENTER IN REQUEST QUEUE.
- [02392] TFPL - FAST PP LOADER TABLE.
- [02433] TPPI - TABLE OF PRE-PROCESSOR INDICES.
- [02454] AQR - ASSIGN QUEUE REQUEST.
- [02559] TAQR - TABLE OF QUEUE PROCESSING PARAMETERS.
- [02580] BNJ - BEGIN NEW JOB.
- [02925] CAL - CHECK ACTIVITY LIMIT.
- [02954] CIA - CHECK *IAF* ACCESSIBILITY.
- [02988] CJS - CHECKS JOB STATUS FOR THE FOLLOWING ITEMS.
- [03077] CPT - UPDATE CPU TIME AND SRU ACCUMULATOR.
- [03192] EFP - EXECUTE FUNCTION POST PROCESSOR OVERLAY.
- [03249] EPR - ENTER PROGRAM REQUEST.
- [03270] IAA - INCREMENT AUC ACCUMULATOR.
- [03460] IBF - ISSUE *BOTM* FUNCTION.
- [03603] JAV - JOB ADVANCE.
- [03705] PPQ - PROCESS PP REQUEST QUEUE.
- [03785] RB3 - RETURN TO ADDRESS IN (B3).
- [03792] RB4 - RETURN TO ADDRESS IN (B4).
- [03799] RB5 - RETURN TO ADDRESS IN (B5).
- [03806] RB6 - RETURN TO ADDRESS IN (B6).
- [03813] RCC - RECALL CPU.
- [04032] RSC - RETURN SUB-SYSTEM CONTROL POINT ADDRESS.
- [04137] RSI - RETURN SUBSYSTEM IDENTIFICATION.
- [04174] SCD - SEARCH CENTRAL LIBRARY DIRECTORY.
- [04224] SEF - SET ERROR FLAG.
- [04270] SFL - SET FIELD LENGTH.
- [04336] SIS - SET *I* STATUS.
- [04349] SJS - START JOB SCHEDULER.
- [04460] SNS - SET NULL STATUS.
- [04476] SPL - SEARCH PERIPHERAL LIBRARY.
- [04582] SPR - SET CPU PRIORITY.
- [04645] SRU - CALCULATE SRU MULTIPLIERS CPM AND IOM.
- [04724] STL - SET CPU TIME LIMIT.
- [04755] SXR - SET *X* STATUS WITH RECALL CRITERION.
- [04802] SXS - SET *X* STATUS.
- [04822] TSM - TERMINATE STORAGE MOVE.
- [04906] CPU REQUEST PROCESSOR.
- [04929] CPR - PROCESS CPU REQUEST.
- [05083] AAR - ASSIGN AUTO RECALL PP REQUEST.
- [05104] APJ - ASSIGN PPU JOB.
- [05169] AFL - ASSIGN FIELD LENGTH.
- [05261] CIO - CALL CIO.
- [05284] CLO - CLOSE. (CONVERT CALL TO *CIO*)
- [05296] CPE - PROCESS CPU CALL ERROR.
- [07251] PPU MONITOR REQUEST PROCESSOR.
- [07252] PMN - PPU MONITOR REQUEST PROCESSOR.
- [07327] CSWF - SWITCH CPU.
- [07348] ARTF - ADVANCE RUNNING TIME.
- [07378] CSLF - CHECK SUBCP TIME LIMIT.
- [07402] EPRF - ENTER PROGRAM MODE REQUEST.
- [07492] RCLF - RECALL CPU FOR SPECIFIED CONTROL POINT.
- [07537] MFLF - MODIFY FL.
- [07636] MRAF - MODIFY RA.
- [07679] MSCF - MONITOR STEP CONTROL.
- [07716] PRQF - PROCESS RECALL REQUEST.
- [07823] TCSF - SWITCH CPU ON TIMESLICE.
- [07833] PCXF - PROCESS CPU EXCHANGE REQUEST.
- [07843] ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
- [07861] UCCF - UPDATE CTI CLOCK.
- [07890] CRAF - CHANGE RA.
- [08024] ADTF - ADVANCE DATE AND TIME.
- [08243] SKCF - SET K DISPLAY COMPLETE BIT.
- [08301] CPA - CHECK CPU ACTIVITY.
- [08331] SCA - SET CP/PCP ADDRESS FROM *SMRL*.
- [08347] SCP - SET CP/PCP ADDRESS.
- [08378] UMT - UPDATE MEMORY CONTROL TABLE.
- [08418] PPU REQUEST PROCESSOR.
- [08425] PPR - PPU REQUEST PROCESSOR.
- [10763] TMPO - TABLE OF MESSAGE PROCESSING OPTIONS.
- [10850] TMSK - TABLE OF MESSAGE TERMINATION MASKS.
- [10861] TJSC - TABLE OF JOB SERVICE CLASS TRANSLATIONS.
- [10880] DDB - DUMP DAYFILE BUFFER.
- [10998] DDD - DUMP DAYFILE DIRECT.
- [11793] LAP - LOAD ADDRESS PROCESSORS.
- [11875] TBLM - GENERATE TABLE OF LDAM PARAMETERS.
- [11884] TALP - TABLE OF ALGORITHM PROCESSING PARAMETERS.
- [11901] LADI - 7×54/844-21 ADDRESS CONVERSION PROCESSOR.
- [11927] LADJ - 7×54/844-4X ADDRESS CONVERSION PROCESSOR.
- [11949] LADK - 7154/844-21 ADDRESS CONVERSION PROCESSOR.
- [11972] LADL - 7154/844-4X ADDRESS CONVERSION PROCESSOR.
- [11994] LADM - 7155/885 HALF TRACK ADDRESS CONVERSION.
- [12018] LADQ - 7155/885 FULL TRACK ADDRESS CONVERSION.
- [12039] LADR - CDSS II ADDRESS CONVERSION.
- [12071] LADX - 3330-1 FULL TRACK CONVERSION.
- [12091] LADY - 3330-11 FULL TRACK CONVERSION.
- [12111] LADZ - 3350 FULL TRACK CONVERSION.
- [12131] LADA - 33502 FULL TRACK CONVERSION.
- [12173] LADB - 885-42 PARALLEL HEAD DEMA.
- [12201] LADC - 7165/895 FULL TRACK CONVERSION (*DC*).
- [12232] LADD - 7255/834 FULL TRACK ADDRESS CONVERSION.
- [12262] LADG - 7255/836 FULL TRACK ADDRESS CONVERSION.
- [12864] TMTD - TABLE OF MANAGED TABLE DESCRIPTORS.
- [13267] RECM - RECALL PP REQUEST.
- [13904] ROCM - ROLLOUT JOB.
- [14484] SCDM - SEARCH CENTRAL DIRECTORY.
- [14848] RCB - RECONSTRUCT CHANNEL ACCESS BYTE IN MST.
- [14904] SCH - SET CHANNEL STATE.
- [15405] TSMD - TABLE OF SMDM SUBFUNCTION PARAMETERS.
- [15762] TSTB - TABLE OF STBM SUBFUNCTION PARAMETERS.
- [16227] TGPM - PROCESS REQUEST FOR *IAF* POT CHAIN
- [16488] TRCM - PROCESS TRAP/TRACE REQUEST.
- [16523] TSEM - PROCESS *IAF* REQUEST.
- [17661] PPU REQUEST PROCESSING SUBROUTINES.
- [17663] CCP - CONVERT CPU SCHEDULING PARAMETERS.
- [17712] HNG - HANG PPU.
- [17755] MSC - SET MESSAGE IN SYSTEM CONTROL POINT.
- [17780] PMR - ENTER PPU PROGRAM MODE REQUEST.
- [17798] RZX - RETURN ZERO OUTPUT REGISTER AND EXIT.
- [17811] SPB - SET PPU REQUEST BIT.
- [17840] SVR - SAVE REGISTERS.
- [17903] VAE - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
- [17943] VAJ - VALIDATE ACCESS LEVEL FOR JOB.
- [17967] VFA - VERIFY FET ADDRESS.
- [18023] VFP - VERIFY FET PARAMETERS.
- [18078] PRG - REQUEST TRANSLATION.
- [18081] PRG - PROCESS PROGRAM MODE REQUEST.
- [18144] PPU REQUEST PROCESSORS.
- [18146] CKS - CHECKSUM SELECTED AREA.
- [18183] CST - CLEAR STORAGE.
- [18200] DLK - DELINK TRACK CHAIN.
- [18239] DTC - DROP TRACK CHAIN.
- [18440] LCC - *PIOM* LOAD CENTRAL PROGRAM (SF = 6). PROGRAM MODE.
- [18495] PIP - *PIOM* PROGRAM MODE PROCESSOR.
- [18520] RDC - REQUEST DATA CONVERSION.
- [18907] RTC - RESERVE TRACK CHAIN.
- [19251] STB - SET TRACK BIT.
- [19364] PROGRAM MODE SUBROUTINES.
- [19366] APS - ASSIGN PP (PROGRAM MODE).
- [19401] CCP - CHECK FOR CHECKPOINT REQUESTED.
- [19435] CDI - CLEAR DEVICE INTERLOCK.
- [19458] CSM - CHECK FOR STORAGE MOVE.
- [19496] CTR - CHECK TRACK REQUEST.
- [19574] HNG - HANG PPU.
- [19593] DSB - DIVIDE 60 BIT INTEGER.
- [19612] MPY - CALCULATE THE PRODUCT Z = (X*Y)MOD PRIME.
- [19681] MSB - MULTIPLY 60 BIT INTEGER.
- [19710] REJ - REJECT FUNCTION REQUEST.
- [19744] MONITOR REQUEST PROCESSORS.
- [19746] MNR - MONITOR REQUEST PROCESSOR.
- [19761] IDL - IDLE PROGRAM.
- [19771] MST - MOVE STORAGE.
- [19830] SMP - STORAGE MOVE PROGRAM MODE EXIT.
- [19847] SMPXP - STORAGE MOVE EXCHANGE PACKAGE.
- [19896] PMR - PROCESS INTER-MAINFRAME FUNCTION REQUEST.
- [19905] MEC - MOVE ECS STORAGE.
- [19932] CPUMTR BLOCK ORGANIZATION.
- [19964] CSC - CLEAR STORAGE USING *CMU*.
- [20028] CMP - CMU MOVE LOOP FOR USE IN PROGRAM MODE.
- [20096] SMC - STORAGE MOVE WITH CMU.
- [20130] SMR - STORAGE MOVE VIA REGISTERS.
- [20199] CSP - CLEAR STORAGE THROUGH THE CPU.
- [20263] CCP - *CCP* EXTENSION FOR *CME* MACHINE.
- [20324] CPT - EXTENSION FOR CYBER 180.
- [20399] CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
- [20445] MNR - *CME* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
- [20477] MSR - MONITOR MODE STORAGE MOVE THROUGH REGISTERS
- [20536] PLF - PROCESS LOCAL FNT.
- [20777] PSM - PRESET STORAGE MOVE.
- [20827] RTC - UPDATE REAL-TIME CLOCK FROM CPU MICROSECOND CLOCK.
- [20925] SMI - PROGRAM MODE STORAGE MOVE USING
- [21002] VLM - VERIFY FIELD LENGTH STARTUP PROCESSOR.
- [21030] VFLXP - FIELD LENGTH VERIFICATION EXCHANGE PACKAGE.
- [21072] VFL - VERIFY FIELD LENGTH.
- [21162] XJ2 - ACCUMULATE ACCOUNTING ADJUSTMENTS.
- [21211] APQ - CHECK FOR *1LT* ASSIGNMENT.
- [21248] CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
- [21291] PLF - PROCESS LOCAL FNT.
- [21509] MSM - MONITOR MODE CMU MOVE.
- [21550] MSR - MONITOR MODE MOVE STORAGE WITH REGISTERS.
- [21608] CPR - *CPRM* FUNCTION PROCESSOR.
- [21736] DDB - *DDB* EXTENSION FOR CONCURRENT PPS.
- [21765] DDD - *DDD* EXTENSION FOR CONCURRENT PP-S.
- [21787] DPP - *DPPM* EXTENSION FOR CONCURRENT PP-S.
- [21826] LMS - *LMSM* EXTENSION FOR CONCURRENT PPS.
- [21866] SPL - *SPLM* EXTENSION FOR CONCURRENT PPS.
- [21885] SUBROUTINES.
- [21887] WPR - WRITE PARAMETER WORDS INTO CPP-S COMMUNICATION AREA.
- [21953] APC - ASSIGN PSEUDO-CONTROL POINT.
- [22123] RPC - INITIATE PSEUDO-ROLLOUT OR PCP ROLLOUT.
- [22182] CSP - CHECK FOR SPECIAL PP PROGRAM.
- [22272] BNJ - EXTENSION FOR THE CYBER 176.
- [22282] CJS - EXTENSION FOR THE CYBER 176.
- [22295] CPT - EXTENSION FOR THE CYBER 176.
- [22309] CXJ - CLOCK INTERRUPT NULL PROGRAM.
- [22319] EXP - ERROR EXCHANGE PROGRAM.
- [22362] PPE - PROCESS PSD ERROR.
- [22417] TIM - EXTENSION FOR THE CYBER 176.
- [22439] DLB - DELETE BUFFER FROM I/O QUEUE.
- [22568] HHE - HANG ON HALF-EXIT.
- [22587] IOC - I/O CONTROL.
- [22791] SBR - SET BUFFER RECALL.
- [22822] SCB - SELECT CURRENT BUFFER FOR I/O QUEUE.
- [22858] CPU MONITOR BUFFERED I/O HANDLER.
- [22860] BFM - *BFMM* MONITOR FUNCTION.
- [23146] PST - *PIOM* SECTOR TRANSFER (SF = 0, 1, 2, 3, 4).
- [23663] PBF - *PIOM* BUFFER FLUSH (SF=5). PROGRAM MODE.
- [23715] BPF - BUILD PSEUDO FNT IN PP MESSAGE BUFFER.
- [23749] CLM - CALL I/O BUFFER MANAGER.
- [23854] IDE - IGNORE DATA AFTER EOI WRITE.
- [23882] UDP - UPDATE *PIOM* DIRECT TRANSFER PARAMETERS.
- [24018] DIB - DROP I/O BUFFERS.
- [24076] LBM - I/O BUFFER MANAGER.
- [24390] FUNCTION PROCESSORS.
- [24392] CDA - CHECK DEVICE ACCESSIBILITY.
- [24466] DAB - DROP ALL BUFFERS.
- [24536] DBD - DROP ALL BUFFERS ON SPECIFIED DEVICE.
- [24637] FAW - FLUSH ALL WRITE BUFFERS.
- [24710] FLB - FLUSH BUFFER TO DISK.
- [24794] INB - INTERLOCK BUFFER.
- [24905] RDB - INTERLOCK BUFFER IN READ MODE OR INITIATE READ.
- [25123] REB - RELEASE EMPTY READ BUFFER AND INTERLOCK NEXT BUFFER.
- [25263] REN - RELEASE READ BUFFER.
- [25277] RFB - RELEASE AND FLUSH BUFFER.
- [25295] RWB - REWRITE BUFFER.
- [25315] WTB - WRITE BUFFER.
- [25452] ANB - ALLOCATE NEXT BUFFER.
- [25793] CAT - CHECK READ BUFFER ALLOCATION TRIGGER.
- [25823] CHT - COUNT HASH TABLE EVICTS AND FULLS.
- [25846] CHA - CALCULATE HASH ADDRESS.
- [26190] CLP - CONVERT LOGICAL TO PHYSICAL.
- [26688] DCB - DELINK CONTROL BUFFER FROM LINK.
- [26749] DCC - DELINK CONTROL BUFFER FROM CONTROL BUFFER LINK.
- [26805] DCH - DELINK CONTROL BUFFER FROM HASH LINK.
- [26875] LCB - LINK CONTROL BUFFER.
- [26931] LCC - LINK CONTROL BUFFER TO END OF SPECIFIED CHAIN.
- [27002] LCH - LINK CONTROL BUFFER TO HASH CHAIN.
- [27101] RXR - RESTORE X2 AND X7 AND EXIT TO (X2).
- [27123] SBB - SET BUFFER BUSY RESPONSE.
- [27153] SIS - SET INACCESSIBLE DEVICE RESPONSE.
- [27165] SNS - SET NEXT SECTOR.
- [27233] SNT - SET NEXT TRACK.
- [27269] SRC - SET RECALL CONTROL.
- [27289] SRR - SET RECALL RESPONSE.
- [27315] CIO MONITOR MODE ROUTINES.
- [27357] ACQ - ASSIGN PSEUDO-PP OR CPUCIO REQUEST QUEUE.
- [27431] IPP - INITIATE PSEUDO PP CIO PROCESSOR.
- [27479] MNR - *BUFIO* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
- [27521] PCQ - PROCESS PSEUDO-PP REQUEST QUEUE.
- [27571] PRQ - PROCESS REQUEST QUEUE.
- [27624] CIO PROCESSOR.
- [27722] CIO PROCESSOR EXIT ROUTINES.
- [27724] RCR - REQUEST CIO RECALL.
- [27818] RPC - REQUEST PP CIO.
- [27875] CMP - COMPLETE MASS STORAGE PROCESSING.
- [27974] PPCX - CIO PROCESSOR EXIT.
- [27995] CIO PROCESSOR MAIN ROUTINE.
- [27997] PPC - PSEUDO PP CIO FUNCTION PROCESSOR (ENTRY).
- [28260] CIO READ PROCESSOR.
- [28262] RDF - READ/SKIP FORWARD FUNCTION PROCESSOR.
- [28520] BRD - BUFFER READ DATA.
- [28591] CRD - CONTROL WORD READ DATA.
- [28682] ULA - UPDATE LIST ACCOUNTING.
- [28722] ULP - UPDATE LIST POINTER.
- [28816] CIO WRITE PROCESSOR.
- [28818] WTF - WRITE FUNCTION PROCESSOR.
- [29338] BWD - BUFFER WRITE DATA.
- [29411] CWD - CONTROL WORD WRITE DATA.
- [29467] SCW - SCAN CONTROL WORDS FOR *WRITECW*.
- [29617] CIO PROCESSOR SUBROUTINES.
- [29619] ABP - ADVANCE BUFFER POINTERS.
- [29649] CBS - CHECK BUFFER SPACE.
- [29720] CIM - CALL I/O BUFFER MANAGER.
- [29825] CMS - CALCULATE MOD 40B OF CURRENT SECTOR.
- [29850] CPT - CALCULATE PRUS TO TRANSFER.
- [30052] CSA - CALCULATE SECTOR ADDRESS IN I/O BUFFER.
- [30085] CSP - CALCULATE SECTOR POSITION IN I/O BUFFER.
- [30115] IMF - ISSUE CPU MONITOR FUNCTION.
- [30149] SRA - SET RANDOM ADDRESS FOR CURRENT TRACK/SECTOR.
- [30172] CRA - CONVERT/COMPUTE RANDOM ADDRESS.
- [30335] SFP - SET FST POSITION FOR RANDOM POSITIONING.
- [30360] RRI - RETURN RANDOM INDEX TO FET.
- [30378] RBI - RELEASE I/O BUFFER INTERLOCK.
- [30402] UAC - UPDATE ACCOUNTING AND RELEASE TRACK INTERLOCK.
- [30516] WEI - WRITE EOI/RELEASE BUFFER INTERLOCKS.
- [30669] BIO - PROCESS *BIOM* MONITOR FUNCTION.
- [30980] RPP - RECALL PSEUDO-PP.
- [31016] PPE - EXTENSION FOR BUFFER MANAGER RECALL.
- [31046] XJ2 - EXTENSION TO CHECK STEP CONDITION ON RA+1 REQUEST
- [31069] RIO - RESTART 819 I/O.
- [31109] CLU - CLEAR UNIT FLAGS.
- [31168] DCS - DECODE STATUS.
- [31363] FNR - FIND NEXT REQUEST.
- [31435] INR - INITIATE REQUEST.
- [31543] IOA - I/O ACCEPT.
- [31636] IOL - I/O LINKUP.
- [31760] RAB - READ ABORT PROCESSOR.
- [31821] RDD - READ DISK.
- [32019] RPP - REQUEST PSEUDO-PP.
- [32046] RXP - RESET EXCHANGE PACKAGES.
- [32076] SAA - SET ACCOUNTING ADJUSTMENT.
- [32099] SCB - SET CURRENT BUFFER.
- [32119] WRT - WRITE DISK.
- [32335] PCXF - PROCESS CPU EXCHANGE REQUEST.
- [32360] ACQ - *ACQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
- [32377] APQ - *APQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
- [32394] CCA - DUAL CPU CACHE MACHINE *CCAM* PROCESSOR.
- [32425] CCC - CHECK CPU SELECTION FOR DUAL CPU CACHE MACHINE.
- [32452] CPA - CHECK PP AND TAPE ACTIVITY FOR DUAL CPU CACHE MACHINE.
- [32486] CPE - CPU SELECTION.
- [32506] CPS - CPU SELECTION.
- [32532] DCP - DUAL CPU *DCPM* FUNCTION PROCESSOR.
- [32567] SJC - DUAL CPU CACHE MACHINE *SJCM* FUNCTION PROCESSOR.
- [32600] BNJ - EXTENSION TO *BNJ* FOR DUAL CPU MACHINES.
- [32762] RCC - EXTENSION TO *RCC* FOR DUAL CPU MACHINES.
- [32846] SAX - SET ALTERNATE CPU EXCHANGE.
- [32861] IXP1 - CPU 1 IDLE EXCHANGE PACKAGE.
- [32896] IDL1 - CPU 1 IDLE PROGRAM.
- [32906] SCX1 - SUB-CONTROL POINT EXCHANGE PACKAGE - CPU 1.
- [32916] IIP - INITIATE IDLE PACKAGE FOR DUAL CPU CACHE MACHINE.
- [32936] ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
- [33203] PPU REQUEST PROCESSOR.
- [33205] SFI - SET *FATI* INTERLOCK.
- [33252] CFI - CLEAR *FATI* INTERLOCK.
- [33298] AFAP - *AFAM* PRESET.
- [33320] MBUF - SCRATCH BUFFER FOR USE IN MONITOR MODE.
- [33324] MMF PROGRAM MODE PROCESSING ROUTINES.
- [33327] CLM - CHECKPOINT LOCAL MST TO ECS.
- [33357] CDI - CLEAR DEVICE INTERLOCK.
- [33409] SDI - SET DEVICE INTERLOCKED.
- [33594] SMU - STORE MRT UPDATE.
- [33636] SSD - SEARCH FOR SHARED DEVICE.
- [33672] EXTENDED MEMORY ERROR RECOVERY PROCESSING.
- [33674] PMR - PROCESS EXTENDED MEMORY ERROR RECOVERY.
- [33703] DPE - SHARED DEVICE ERROR PROCESSING.
- [33790] FPE - FAST ATTACH TRACK PARITY ERROR PROCESSING.
- [33925] SUBROUTINES.
- [33927] DRE - DETECT / REPORT AND RECOVER EXTENDED MEMORY ERRORS.
- [33988] STE - ECS SYSTEM TABLE ERROR.
- [34009] AFA - PASS *AFAM* FUNCTION TO *MTE*.
- [34021] CDI - CLEAR DEVICE INTERLOCK.
- [34089] CME - CHECK FOR *MTE* DEVICE INTERLOCK REQUEST NEEDED.
- [34147] ECS - *ECSM* EXTENSION FOR LOW SPEED PORT MMF MODE.
- [34178] SDI - SET DEVICE INTERLOCK.
- [34230] QPR - QUEUE PP REQUEST TO *MTE*.
- [34271] VMS - VALIDATE MASS STORAGE.
- [34303] SMU - FLAG MRT UPDATE TO *MTE*.
- [34341] CHR - CHECK FOR HELPER PP REQUIRED.
- [34549] IFT - ISHARED FUNCTION TABLE GENERATOR.
- [34608] AMM - ACTIVATE MONITOR MODE (PROGRAM MODE).
- [34626] CDI - CLEAR DEVICE INTERLOCK EXTENSION FOR ISHARED DEVICES.
- [34700] CTR - *CTR* ISHARED PROCESSING.
- [34731] QDT - QUEUE DROPPABLE TRACKS.
- [34835] RTC - RTCM ISD PROCESSING.
- [34849] SMD - SMDM ISHARED PROCESSING.
- [34864] SMU - SET MRT-UPDATED FLAG.
- [34918] STB - STBM ISHARED PROCESSING.
- [34981] VMS - *VMSM* EXTENSION FOR *ISHARED* DEVICES.
- [35150] MTE - PROCESS *MTEM* FUNCTION.
- [35249] LBS - *LBM* EXTENSION FOR SHARED DEVICES.
- [35279] CRR - COMPLETE *MTE* REQUEST FOR READ ACCESS.
- [35336] CWR - COMPLETE *MTE* REQUEST FOR WRITE ACCESS.
- [35348] RRA - RELEASE READ ACCESS.
- [35551] RWA - RELEASE WRITE ACCESS.
- [35562] CSD - CHECK SHARED DEVICE ACCESS.
- [35653] IPS - *IPP* PREPROCESSOR FOR SHARED DEVICES.
- [35682] SBP - SET BST PARAMETERS.
- [35721] CPUCIO GLOBAL DATA.
- [35739] CPUCIO EXIT ROUTINES.
- [35741] PMV - PROCESS *MAGNET* MOVING.
- [35750] RCR - REQUEST *CIO* RECALL.
- [35814] RET - RETURN FILE.
- [35835] RPC - REQUEST PP CIO.
- [35883] TAPQ - TABLE OF PP REQUEST CRITERIA.
- [35902] SRC - SET *RCLP* AND CLEAR RECALL STATUS IN REQUEST.
- [35932] CPCX - CPUCIO EXIT PROCESSOR.
- [35977] CPUCIO MAIN ROUTINE.
- [35979] CPC - CPUCIO PROCESSOR (MONITOR MODE ENTRY POINT).
- [36541] TFCP - TABLE OF FUNCTION CODE PROCESSORS.
- [36629] TCIC - TABLE OF CIO INTERNAL FUNCTION CODES.
- [36713] CPUCIO SPECIAL PROCESSORS.
- [36760] CMF - COMPLETE FET.
- [36776] OPE - PROCESS NON-RANDOM OPEN.
- [36810] POD - PROCESS OPTICAL DISK REQUESTS
- [36818] PMT - PROCESS MAGNETIC TAPE REQUEST.
- [36963] RWF - REWIND FILE.
- [37005] TIO - TERMINAL I/O.
- [37143] CST - EXCEPTION PROCESSOR FOR SPECIAL MEMORY CLEAR REQUEST.
- [37215] CSTX - EXIT PROCESSOR FOR PROGRAM MODE *CSTM*.
- [37238] CUE - CLEAR USER ECS.
- [37284] MEC - EXTENSION FOR USER ECS STORAGE MOVE.
- [37325] MST - EXTENSION FOR MEMORY CLEARING AFTER STORAGE MOVE.
- [37381] PRS - PRESET EXTENSION TO CLEAR MEMORY AT DEADSTART.
- [37496] XJ1 - EXCHANGE PROCESSOR.
- [37546] SVS - SET SCHEDULING DATA.
- [37666] CPT - EXTENSION FOR *NVE*.
- [37734] AVP - ASSIGN VIRTUAL PP.
- [37804] UAD - *UADM* EXTENSION FOR *FRAS* SUBFUNCTION.
- [37854] ACE - SET ALTERNATE CPU EXCHANGE.
- [37880] CIO - *CIO* REQUESTS.
- [37916] IOS - I/O STATISTICS FOR BUFFERED I/O.
- [37959] MNR - PROGRAM MODE MTR FUNCTIONS.
- [37979] PMN - MTR FUNCTIONS.
- [38003] PPR - PPU FUNCTION REQUESTS.
- [38029] PRG - PROGRAM MODE PPU REQUESTS.
- [38052] SPL - SEARCH PERIPHERAL LIBRARY.
- [38087] SETFLD - SET UP FIELD VALIDATION REGISTERS.
- [38136] TRP - TRAP ON ERROR CONDITION.
- [38490] CFD - CHECK FIELD.
- [38516] PMN - MTR FUNCTIONS.
- [38659] PPR - PP FUNCTION REQUESTS.
- [38758] TRC - PROCESS TRAP/TRACE REQUEST.
- [38798] BKP - *CPUMTR* BREAKPOINT.
- [38877] RAR - RELOAD ALL REGISTERS.
- [38986] SCP MAIN ROUTINES.
- [40881] SCP SUBROUTINES.
- [40883] CSC - CHECK SUBSYSTEM CONNECTION.
- [40924] CUI - CHECK UCP IDENTIFICATION.
- [40988] CWT - CALCULATE WORD TRANSFER SIZE (CM OR ECS).
- [41040] SCB - SET COMPLETION BIT SPECIFIED BY *ADDRESS*.
- [41118] SSR - SET SPECIAL RECEIVING BUFFER.
- [41212] SFE - SFCALL SF.READ/SF.WRIT ECS TRANSFER.
- [41324] BCE - BEGIN CONTROL POINT EXECUTIVE.
- [41347] ESC - END SUB-CONTROL POINT.
- [41459] CPU REQUEST PROCESSORS.
- [41461] SSE - SET SUBCONTROL POINT ERROR.
- [41642] TXJP - TABLE OF SUB-CONTROL POINT EXCHANGE PACKAGES.
- [41650] SCX - SUB-CONTROL POINT EXCHANGE PACKAGE.
- [41658] CSE - CLEAR CM STORAGE VIA ECS. (PROGRAM MODE)
- [41736] MFX - CHANGE FL FOR USER EXTENDED MEMORY.
- [41792] MRX - CHANGE RA FOR USER EXTENDED MEMORY.
- [41812] USER ECS PROGRAM MODE ROUTINES.
- [41820] CEC - CLEAR USER ECS STORAGE.
- [41888] MEC - MOVE ECS STORAGE.
- [41990] TEC - PERFORM USER ECS TRANSFER FOR *ECXM* FUNCTION.
- [42083] VMSM - VALIDATE MASS STORAGE.
- [42203] VTC - VALIDATE TRACK CHAIN.
- [42292] ECSM - ECS TRANSFER.
- [42435] EAB - ECS ABORT PROCESSOR. (MONITOR MODE)
- [42514] PIO - *PIOM* PP I/O CPU TRANSFERS (MONITOR MODE).
- [42713] PIOX - EXIT FROM *PIOM*.
- [42766] PIOR - REISSUE *PIOM* REQUEST.
- [42780] PIOP - SWITCH TO PROGRAM MODE *PIOM*.
- [42798] ECS PROGRAM MODE ROUTINES.
- [42801] PDT - *PIOM* ECS DIRECT TRANSFER (SF = 3, 4).
- [43226] CFR - CLEAR FLAG REGISTER BIT.
- [43256] SFR - SET FLAG REGISTER BIT.
- [43290] EXTERNAL ECS PARITY ERROR PROCESSING.
- [43292] MC - INPUT REGISTER FOR ECS PARITY ERROR PROCESSING ROUTINE.
- [43300] ECH - EXTENDED MEMORY ERROR HANG.
- [43315] PER - PROCESS ECS PARITY ERROR. (MONITOR MODE)
- [43341] RPE - RECOVER AND REPORT ECS PARITY ERROR.
- [43555] RSE - REPORT STORAGE MOVE EXTENDED MEMORY ERROR.
- [43670] TSM - EXTENSION FOR EXTERNAL ECS PARITY ERROR PROCESSING
- [43714] EXTERNAL ECS PROGRAM MODE ROUTINES.
- [43717] MSE - MOVE STORAGE THROUGH ECS.
- [43813] PER - PROCESS ECS PARITY ERROR. (PROGRAM MODE)
- [43838] ECS PARITY ERROR PROCESSING PARAMETERS.
- [43841] TPER - TABLE OF PROCESSORS FOR UNRECOVERED ERRORS.
- [43860] RUM - READ USER ECS DATA FROM UEM TO CM.
- [44013] WUM - WRITE USER ECS DATA FROM CM TO UEM.
- [44053] MXP - PPU MONITOR EXCHANGE PACKAGE.
- [44059] BXP - BREAKPOINT EXCHANGE PACKAGE.
- [44069] IXP - IDLE EXCHANGE PACKAGE.
- [44104] PXP - PPU EXCHANGE PACKAGES.
- [44120] LBAT - LOADED *CPUMTR* BLOCK ADDRESS TABLE.
- [44139] MCU - DEAD START EXCHANGE PACKAGE.
- [44144] CXP - CLOCK EXCHANGE PACKAGE.
- [44150] EEA - ERROR EXIT EXCHANGE PACKAGE.
- [44246] PRS - PRESET MONITOR.
- [44317] SXP - SYSTEM JOB EXCHANGE PACKAGE. (PROGRAM MODE MONITOR)
- [44323] PRESET SUBROUTINES.
- [44325] SAC - SET ADDRESS CONSTANTS.
- [44560] SCM - SET CP TIME MULTIPLIERS.
- [44794] TMNB - TABLE OF CYBER 180 MODEL NUMBERS.
- [44904] SCD - SET CHANNEL DATA.
- [44960] SCS - SET CPU STATUS.
- [45044] SDT - SET DATE AND TIME FROM *CTI*-SUPPLIED VALUES.
- [45319] SJB - SETUP JOB CONTROL BLOCK TABLE.
- [45336] SSP - SET SYSTEM PARAMETERS.
- [45830] IBO - INITIALIZE FOR BUFFERED I/O.
- [46164] TBLM - GENERATE TABLE OF BUFFERED I/O PARAMETERS.
- [46231] RBS - RECOVER BUFFER STATUS TABLES.
- [46277] RBT - RECOVER BUFFERED I/O TABLES.
- [46386] RCB - RECOVER CBT.
- [46517] VUQ - VALIDATE UNIT I/O QUEUE(S).
- [46608] VWL - VALIDATE WRITE LIST.
- [46667] CIR - CLEAR INTERLOCKS.
- [46784] CLE - CLEAR ECS.
- [46990] DBL - DETERMINE BLOCKS LOADED.
- [47013] ILD - INITIALIZE MULTI-MAINFRAME LINK DEVICE.
- [47304] NON-OVERLAYED PRESET.
- [47306] PRSX - OVERLAY PRESET WITH PPU EXCHANGE PACKAGES.
- [47330] SPS - SET PPU STATUS.
- [47494] BLKT - LOADED BLOCK NAME TABLE DECLARATION.
Source Code
- CPUMTR.txt
- IDENT CPUMTR
- ENTRY CPUMTR
- SST PPR,FL,TH,T1,T2,T3,RA
- B1=1
- LIST F
- *COMMENT CPUMTR - CPU MONITOR.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- TITLE CPUMTR - CPU MONITOR.
- SPACE 4
- *** CPUMTR - CPU MONITOR.
- * G. R. MANSFIELD. 70/12/13.
- * W. E. GOEBEL. 76/01/21.
- * P. T. BARNETT. 80/10/31.
- SPACE 4
- *** *CPUMTR* WORKS IN CONJUNCTION WITH *MTR* TO DO
- * THE FOLLOWING TASKS -
- *
- * 1) SCHEDULE THE CPU AMONG ELIGIBLE JOBS AT CONTROL POINTS.
- * 2) PERFORM REQUESTED OPERATIONS BY PP-S
- * (MONITOR FUNCTIONS ABOVE *CPUM*).
- * 3) PERFORM REQUESTED OPERATIONS BY JOBS RUNNING AT
- * CONTROL POINTS (RA+1 REQUESTS).
- * 4) PERFORM REQUESTED OPERATIONS BY *MTR*
- * (STORAGE MOVE, ETC.)
- * 5) PERFORM DATA TRANSFERS FOR BUFFERED MASS STORAGE DEVICES
- * (REFER TO THE *CPUCIO* BLOCK FOR AN EXPLANATION OF THE
- * PSEUDO-PP).
- *
- * *CPUMTR* CODE RUNS IN BOTH MONITOR AND PROGRAM MODE. THE
- * CODE USED IN EITHER MODE IS MOSTLY SEPARATE, BUT IN CERTAIN
- * RARE CASES, CODE IS SHARED BETWEEN THE TWO. IN BOTH CASES,
- * THE CODE EXECUTES AT AN RA OF 0, AND AN FL OF MACHINE FIELD
- * LENGTH, GIVING *CPUMTR* FULL ACCESS TO ALL OF CM (AND ECS).
- *
- * MONITOR MODE CODE EXECUTION IS LIMITED TO FUNCTIONS THAT CAN
- * BE DONE QUICKLY OR REQUIRE INTERLOCKING. PROGRAM MODE
- * CODE IS USED FOR PROCESSING FUNCTIONS THAT POTENTIALLY CAN
- * TAKE A LONG TIME (SUCH AS STORAGE MOVE). PROGRAM MODE
- * *CPUMTR* RUNS AT CONTROL POINT N+1, AND HAS A CPU PRIORITY
- * OF 100B, HIGHER THAN ANY OTHER JOB IN THE SYSTEM.
- SPACE 4,10
- ** IMPLEMENTATION NOTES.
- *
- * *CPUMTR* IS LOADED AND RELOCATED BY *CPUMLD*.
- * *CPUMLD* SUPPORTS ONLY THE COMMONLY USED LOADER TABLES,
- * INCLUDING 3400 (PIDL), 3600 (ENTR), 4000 (TEXT),
- * 4100 (XFILL), 4200 (FILL), 4600 (XFER), AND 7700 (PRFX)
- * LOADER TABLES. LOADER TABLES SUCH AS 3700 (XTEXT),
- * 4300 (REPL), 4400 (LINK), 4500 (XLINK), AND
- * 4700 (XREPL) ARE NOT SUPPORTED BY *CPUMLD*.
- * SINCE *BSSZ* INSTRUCTIONS OF 6 OR MORE WORDS GENERATE
- * *REPL* TABLES, USE OF *CON* OR *BSS* INSTRUCTIONS
- * ARE RECOMMENDED AS AN ALTERNATIVE.
- *
- * DUE TO THE DEFINITION OF A *CON* INSTRUCTION IN
- * COMPASS 3.0, DATA INSTRUCTIONS CONTAINING RELOCATABLE
- * ADDRESSES SHOULD USE ONLY THE *VFD* INSTRUCTION.
- SPACE 4
- **** ASSEMBLY CONSTANTS.
- NPPCP EQU LREC-1 MAXIMUM NUMBER OF PP-S TO A CP
- RSHF EQU 12 SHIFT COUNT TO MOVE RA FIELD
- OF FLSW TO LOWER BITS
- RMSK EQU 24 FIELD WIDTH OF RA IN CONTROL POINT AREA
- MCUR EQU 40B MAXIMUM CONSECUTIVE UNIT RESERVE COUNT
- SDUD EQU 100 UNABLE TO RELEASE WRITE ACCESS DELAY (MS)
- SDWD EQU 100 DEVICE WRITE ACCESS REQUESTED DELAY (MS)
- SDMD EQU 4 *MTE* WAIT DELAY FOR WRITE ACCESS (MS)
- ****
- SPACE 4
- *CALL COMCMAC
- *CALL COMSACC
- *CALL COMSCIO
- *CALL COMSDFS
- QUAL DSL
- *CALL COMSDSL
- QUAL *
- DSCP EQU /DSL/DSCP DEADSTART CONTROL POINT
- QUAL DST
- *CALL COMSDST
- QUAL *
- *CALL COMSEJT
- *CALL COMSJCE
- *CALL COMSLSD
- *CALL COMSMMF
- *CALL COMSMRT
- *CALL COMSMSP
- QUAL MTX
- *CALL COMSMTX
- QUAL *
- QUAL PFM
- *CALL COMSPFM
- QUAL *
- *CALL COMSREM
- *CALL COMSPRD
- *CALL COMSSCD
- *CALL COMSSSD
- LIST X
- *CALL COMSHIO
- *CALL COMSMSC
- *CALL COMSLFD
- *CALL COMSSCP
- LIST *
- *CALL COMSSRU
- QUAL DSL
- *CALL COMSDSL
- QUAL *
- LIST X
- *CALL COMS176
- *CALL COMSCPS
- *CALL COMSMTR
- LIST *
- TITLE MACRO DEFINITIONS.
- NOREF .1,.2,.3
- BLOCK SPACE 4,20
- ** BLOCK - DEFINE AN OPTIONAL BLOCK OF CPUMTR CODE.
- *
- *
- * BLOCK NAME,(TTLE),Q
- * ENTRY *NAME* = NAME OF BLOCK.
- * *TTLE* = DESCRIPTION TO APPEAR ON TITLE LINE FOLLOWING
- * *CPUMTR - CPU MONITOR *
- * *Q* = QUAL TO BE USED FOR BLOCK IF OTHER THAN *NAME*.
- PURGMAC BLOCK
- BLOCK MACRO NAME,TTLE,Q
- _NAME TTL CPUMTR - CPU MONITOR _TTLE
- TITLE
- QUAL Q NAME
- NOREF .1,.2,.3
- USE /_NAME/
- USE /TREL/
- CON 0
- VFD 42/0L_NAME,18/0
- USE *
- USE /TJMP/
- CON 0
- VFD 42/0L_NAME,18/0
- USE *
- ENDM
- BSSZ SPACE 4,10
- ** BSSZ - REDEFINE *BSSZ* PSEUDO INSTRUCTION.
- *
- * THE REDEFINED *BSSZ* PSEUDO INSTRUCTION WILL ISSUE AN
- * ASSEMBLY ERROR IF THE RESULTING BINARY CANNOT BE LOADED
- * BY *CPUMLD*.
- BSSZ. OPSYN BSSZ SAVE OLD DEFINITION
- PURGMAC BSSZ
- BSSZ MACRO EXP
- BSSZ. EXP
- ERRPL EXP-6 *CPUMLD* CANNOT LOAD THIS *CPUMTR*
- BSSZ ENDM
- CFI SPACE 4,10
- ** CXI XJ,TAB - CONVERT A TABLE ORDINAL TO AN OFFSET.
- *
- * CXI XJ,TAB
- *
- * CONVERT THE ORDINAL FOR TABLE *TAB* IN *XJ* INTO AN OFFSET
- * IN *XI*. *XI* AND *XJ* MUST BE DIFFERENT REGISTERS. THE
- * VALUE OF *XJ* IS PRESERVED.
- PURGDEF CXX,Q
- CXX,Q OPDEF I,J,TAB
- ERRPL TAB_E-21B TABLE ENTRY TOO LONG
- ERRZR I-J REGISTERS MUST BE DIFFERENT
- .1 OCTMIC TAB_E
- .A".1" SKIP
- .A0 ENDIF
- ERR TABLE ENTRIES ARE DEFINED AS ZERO LENGTH
- .B SKIP
- .A1 ENDIF
- BX.I X.J
- .B SKIP
- .A2 ENDIF
- LX.I X.J,B1
- .B SKIP
- .A3 ENDIF
- LX.I X.J,B1
- IX.I X.I+X.J
- .B SKIP
- .A4 ENDIF
- BX.I X.J
- LX.I 2
- .B SKIP
- .A5 ENDIF
- BX.I X.J
- LX.I 2
- IX.I X.I+X.J
- .B SKIP
- .A6 ENDIF
- LX.I X.J,B1
- IX.I X.I+X.J
- LX.I 1
- .B SKIP
- .A7 ENDIF
- BX.I X.J
- LX.I 3
- IX.I X.I-X.J
- .B SKIP
- .A10 ENDIF
- BX.I X.J
- LX.I 3
- .B SKIP
- .A11 ENDIF
- BX.I X.J
- LX.I 3
- IX.I X.I+X.J
- .B SKIP
- .A12 ENDIF
- BX.I X.J
- LX.I 2
- IX.I X.I+X.J
- LX.I 1
- .B SKIP
- .A13 ENDIF
- BX.I X.J
- LX.I 2
- IX.I X.I+X.J
- LX.I 1
- IX.I X.I+X.J
- .B SKIP
- .A14 ENDIF
- BX.I X.J
- LX.I 1
- IX.I X.I+X.J
- LX.I 2
- .B SKIP
- .A15 ENDIF
- BX.I X.J
- LX.I 1
- IX.I X.I+X.J
- LX.I 2
- IX.I X.I+X.J
- .B SKIP
- .A16 ENDIF
- BX.I X.J
- LX.I 3
- IX.I X.I-X.J
- LX.I 1
- .B SKIP
- .A17 ENDIF
- BX.I X.J
- LX.I 4
- IX.I X.I-X.J
- .B SKIP
- .A20 ENDIF
- BX.I X.J
- LX.I 4
- .B ENDIF
- ENDM
- ENDBLK SPACE 4,10
- ** ENDBLK - END AN OPTIONAL BLOCK OF CPUMTR CODE.
- *
- PURGMAC ENDBLK
- ENDBLK MACRO
- BSS 0
- USE *
- QUAL
- ENDM
- IDIV SPACE 4,10
- ** IXI XJ/XK - INTEGER DIVISION.
- *
- * IXI XJ/XK
- * DIVIDE XJ BY XK TO XI.
- * DESTROYS XJ, XK, B7.
- PURGDEF IXX/X
- IXX/X OPDEF I,J,K
- PX.J X.J
- PX.K X.K
- NX.K X.K
- FX.I X.J/X.K
- UX.I B7,X.I
- LX.I X.I,B7
- ENDM
- MONITOR SPACE 4,10
- ** MONITOR - ISSUE PSEUDO OUTPUT REGISTER *CPUMTR* FUNCTION.
- *
- * MONITOR FC,RAD
- * WHERE FC = *CPUMTR* FUNCTION CODE.
- * RAD = RETURN ADDRESS, OPTIONAL IF RETURN TO NEXT
- * LOCATION AFTER MONITOR CALL.
- *
- * CALLS /BUFIO/IMF.
- PURGMAC MONITOR
- MONITOR MACRO FC,RAD
- LOCAL MRA
- IFC NE,$_RAD$B6$,1
- SB6 RAD MRA
- SX1 FC
- EQ /BUFIO/IMF ISSUE MONITOR FUNCTION
- MRA BSS 0
- ENDM
- ICTE SPACE 4,10
- ** ICTE - INTERNAL CIO FUNCTION CODE TABLE ENTRY.
- *
- * ICTE FC,(FLAGS)
- *
- * FC INTERNAL CIO FUNCTION (DEFINED IN *COMSCIO*).
- *
- * FLAGS FUNCTION FLAGS.
- * BKW = BACKWARD OPERATION.
- * CRW = *READCW*/*WRITECW* OPERATION.
- * EOF = EOF OPERATION - STOP ON EOF FOR READ/SKIP,
- * FLUSH EOF FOR WRITE OPERATION.
- * EOI = EOI OPERATION - STOP ON EOI FOR READ/SKIP,
- * FLUSH DATA FROM BUFFER FOR WRITE OPERATION.
- * EOR - EOR OPERATION - STOP OF EOR FOR READ/SKIP,
- * FLUSH EOR FOR WRITE OPERATION.
- * EXF = FUNCTION LEGAL FOR EXECUTE-ONLY FILE.
- * IOF = REWIND OPERATION (SET IN = OUT = FIRST).
- * LST = *READLS*/*RPHRLS* OPERATION.
- * MSO = MASS STORAGE ONLY FUNCTION.
- * MTO = MAGNETIC TAPE ONLY FUNCTION.
- * NDT = NO DEVICE TYPE RETURNED TO FET.
- * NRW = *READN*/*WRITEN* OPERATION.
- * PRU = PRU OPERATION - STOP ON PRU FOR READ/SKIP,
- * FLUSH ONLY ONE FULL PRU FOR WRITE.
- * RFE = FUNCTION REQUIRES FNT ENTRY.
- * RWO = REWRITE OPERATION.
- * SKO = SKIP OPERATION.
- * UNL = UNLOAD OPERATION.
- * VFL = VALIDATE FIRST AND LIMIT FET PARAMETERS.
- * VIO = VALIDATE IN AND OUT FET PARAMETERS.
- * XF = EXTENDED FUNCTION LEGAL (3XX/6XX CIO CODE).
- ICTE MACRO FC,FLAGS
- LOCAL F,FG1,FG2
- FG2 SET 0
- .A IFC NE,$_FC$$
- FG1 SET FC*100B
- .B ECHO ,F=(FLAGS)
- IFC EQ,$_F$BKW$,1
- FG1 SET FG1+4000B
- IFC EQ,$_F$CRW$,1
- FG1 SET FG1+40B
- IFC EQ,$_F$EOF$,1
- FG1 SET FG1+EOF
- IFC EQ,$_F$EOI$,1
- FG1 SET FG1+EOI
- IFC EQ,$_F$EOR$,1
- FG1 SET FG1+EOR
- IFC EQ,$_F$EXF$,1
- FG2 SET FG2+100B
- IFC EQ,$_F$IOF$,1
- FG2 SET FG2+200B
- IFC EQ,$_F$LST$,1
- FG1 SET FG1+20B
- IFC EQ,$_F$MSO$,1
- FG2 SET FG2+2000B
- IFC EQ,$_F$MTO$,1
- FG2 SET FG2+1000B
- IFC EQ,$_F$NDT$,1
- FG2 SET FG2+40B
- IFC EQ,$_F$NRW$,1
- FG1 SET FG1+20B
- IFC EQ,$_F$PRU$,1
- FG1 SET FG1+PRU
- IFC EQ,$_F$RFE$,1
- FG2 SET FG2+400B
- IFC EQ,$_F$RWO$,1
- FG1 SET FG1+2000B
- IFC EQ,$_F$SKO$,1
- FG1 SET FG1+2000B
- IFC EQ,$_F$UNL$,1
- FG1 SET FG1+2000B
- IFC EQ,$_F$VFL$,1
- FG1 SET FG1+1
- IFC EQ,$_F$VIO$,1
- FG1 SET FG1+2
- IFC EQ,$_F$XF$,1
- FG2 SET FG2+4000B
- .B ENDD
- .A ELSE
- FG1 SET 7777B
- .A ENDIF
- VFD 12/FG1,12/FG2,6/0
- ENDM
- JSNMASK SPACE 4,20
- ** JSNMASK - DEFINE CHARACTER MASK FOR ONE CHARACTER OF JSN.
- *
- *
- * JSNMASK LO,HI,EX
- * ENTRY *LO* = LOWEST CHARACTER TO APPEAR IN THIS POSITION.
- * *HI* = HIGHEST CHARACTER TO APPEAR IN THIS POSITION.
- * *EX* = CHARACTERS TO BE EXCLUDED FROM THIS POSITION.
- PURGMAC JSNMASK
- JSNMASK MACRO LO,HI,EX
- IFC EQ,$LO$$
- .1 DECMIC 1RA DEFAULT LOWEST CHARACTER
- ELSE
- ERRNG 1R_LO-1RA VALUE IS TOO LOW
- .1 DECMIC 1R_LO LOWEST CHARACTER ALLOWABLE
- ENDIF
- IFC EQ,$HI$$
- .2 DECMIC 1RZ DEFAULT HIGHEST CHARACTER
- ELSE
- ERRNG 1R9-1R_HI VALUE IS TOO HIGH
- .2 DECMIC 1R_HI HIGHEST CHARACTER ALLOWABLE
- ENDIF
- .2 DECMIC ".2"+1 BIT FOR HIGHEST CHARACTER + 1
- .3 MICRO 1,, -0-1S".2"+1S".1"
- ECHO 4,CH=(EX) CHARACTERS TO EXCLUDE
- IFGE 1R_CH,".1",3
- IFLT 1R_CH,".2",2
- .4 DECMIC 1R_CH
- .3 MICRO 1,, ".3"+1S".4"
- VFD 60/".3" EXCLUDED CHARACTER MASK
- ENDM
- PER SPACE 4,10
- ** PER - SET ECS PARITY ERROR PROCESSING PARAMETERS.
- *
- *
- * PER X,PROC
- * ENTRY *X* = EXIT ADDRESS IN CASE OF UNRECOVERABLE ERROR.
- * *PROC* = EXTENDED MEMORY ERROR PROCESSOR.
- * IF PROC IS NOT DEFINED THEN EITHER /ECS/PER OR
- * /PROGRAM/PER IS USED AS THE PROCESSOR DEPENDING ON
- * IF THE CALL IS FROM ECS OR PROGRAM QUAL BLOCK.
- PURGMAC PER
- PER MACRO X,PROC
- LOCAL A
- QUAL ECS
- A EQU *+1
- QUAL *
- RJ PROC PER
- TPER RMT
- VFD 12/,18/A,12/,18/X
- TPER RMT
- ENDM
- TVFD SPACE 4,25
- ** TVFD - DEFINE RELOCATABLE -VFD-.
- *
- *
- * TVFD N/V,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
- * ENTRY *N* = BIT COUNT
- * *V* = BASE VALUE TO WHICH A *VI* WILL BE ADDED.
- * IF *C1* IS NOT PRESENT
- * *V1* = ADDRESS OF VALUE TO BE ADDED DURING PRESET.
- * IF *C1* IS PRESENT THEN
- * *VI* = THE VALUE TO BE ADDED DURING PRESET, IF THE
- * CORRESPONDING *CI* IS TRUE.
- * *CI* = THE ADDRESS OF THE CONDITION WORD IN PRESET
- * WHICH TELLS IF THE CORRESPONDING VALUE IS TO BE
- * BE USED. IF THE CONDITION WORD IS ZERO, THE
- * CORRESPONDING VALUE WILL BE USED. THE *CI*S ARE
- * CHECKED IN ORDER, FROM LEFT TO RIGHT, UNTIL A
- * TRUE CONDITION IS FOUND. IF NONE OF THE
- * CONDITIONS ARE TRUE, *VN* IS USED.
- * *VN* = THE DEFAULT VALUE TO BE SET DURING PRESET.
- * IT IS THE LAST VALUE SPECIFIED AND MUST NOT
- * HAVE A CONDITION ASSOCIATED WITH IT.
- PURGMAC TVFD
- TVFD MACRO V,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
- LOCAL S
- * EXTRACT FIELD WIDTH
- .1 MICRO 1,,/V
- .1 MICCNT .1
- * CHECK FOR RELOCATION REQUIRED
- .2 MICRO .1+2,, V
- .A IFC EQ,$V1$$
- VFD ".1"/".2"
- .A ELSE
- VFD ".1"/S+".2"
- S SAC ".1",V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
- IF -DEF,S,1
- ERRNZ ".2" 0 V MUST BE ZERO IN A CONDITIONAL *VFD*
- .A ENDIF
- ENDM
- SAC SPACE 4,40
- ** SAC - SUBSTITUTE ADDRESS CONSTANT.
- *
- *
- * THERE ARE TWO FORMS OF THE *SAC* MACRO. IF TWO PARAMETERS
- * ARE SPECIFIED, *SAC* CAUSES A PRESET DETERMINED VALUE TO BE
- * ADDED TO A SPECIFIED FIELD. IF MORE THAN TWO PARAMETERS ARE
- * SECIFIED, *SAC* CAUSES A SPECIFIED VALUE TO BE SUBSTITUTED
- * INTO THE FIELD ACCORDING TO A PRESET DETERMINED CONDITION.
- *
- * SAC W,V
- *
- * ENTRY *W* = FIELD WIDTH.
- *
- * *V* = ADDRESS OF WORD IN PRESET WHOSE VALUE WILL BE
- * ADDED TO THE SPECIFIED FIELD.
- *
- * SAC W,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
- *
- * ENTRY *W* = FIELD WIDTH.
- *
- * *VI* = THE VALUE TO BE SUBSTITUTED INTO THE SPECIFIED
- * FIELD DURING PRESET, IF THE CORRESPONDING *CI*
- * IS TRUE.
- *
- * *CI* = THE ADDRESS OF THE CONDITION WORD IN PRESET
- * WHICH TELLS IF THE CORRESPONDING VALUE IS TO BE
- * BE USED. IF THE CONDITION WORD IS NON-ZERO
- * (THE CONDITION IS TRUE), THE CORRESPONDING
- * VALUE WILL BE USED. THE *CI*S ARE CHECKED IN
- * ORDER, FROM LEFT TO RIGHT, UNTIL A TRUE
- * CONDITION IS FOUND. IF NONE OF THE CONDITIONS
- * ARE TRUE, *VN* IS USED.
- *
- * *VN* = THE DEFAULT VALUE TO BE SET DURING PRESET.
- * IT IS THE LAST VALUE SPECIFIED AND MUST NOT
- * HAVE A CONDITION ASSOCIATED WITH IT.
- PURGMAC SAC
- MACRO SAC,S,W,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
- LOCAL N
- QUAL PRESET
- .1 SET *-*P/60
- .2 SET W+*P-*P/60*60
- USE /TREL/
- .A IFC EQ,$C1$$
- .3 MICRO 1,1,$V1$
- .B IFC NE,$".3"$-$
- + VFD 6/.2,6/W,18/V1,12/2000B,18/.1
- .B ELSE
- .3 MICRO 2,,$V1$
- + VFD 6/.2,6/W,18/".3",12/-2000B,18/.1
- .B ENDIF
- .A ELSE
- + VFD 6/.2,6/W,18/C1,12/2000B+N,18/.1
- .B IFLE W,24D
- + JP V1 FIRST ALTERNATE
- - JP V6 V5 V4 V3 V2 V1
- .1 SET 1
- .D ECHO ,V=(V2,V3,V4,V5,V6),C=(C2,C3,C4,C5,)
- .E IFC NE,$C$$
- + JP V NEXT ALTERNATE
- - VFD 30/C
- .1 SET .1+1
- .E ELSE
- STOPDUP
- IFC EQ,$V$$,1
- ERR NO DEFAULT HAS BEEN SPECIFIED
- .E ENDIF
- .D ENDD
- N EQU .1
- .B ELSE
- + VFD 30/V1 ALTERNATE
- - VFD 30/V2 DEFAULT
- N EQU 1
- .B ENDIF
- .A ENDIF
- .A IFC NE,$S$$
- .B IFC EQ,$C1$$
- QUAL
- S EQU 0
- QUAL *
- .B ELSE
- SAC RMT
- QUAL
- S EQU V1
- QUAL *
- RMT
- .B ENDIF
- .A ENDIF
- USE *
- QUAL *
- ENDM
- OPDEFS SPACE 4
- ** CONDITIONAL ADDRESS SETTING.
- *
- * THE CAPABILITY EXISTS TO PRESET THE ADDRESS PORTION OF AN
- * INSTRUCTION TO A VALUE DETERMINED DURING DEADSTART OR TO ONE
- * OF SEVERAL VALUES DEPENDING ON A *CONDITION* WORD IN THE
- * PRESET RELOCATION TABLE.
- * IN ORDER TO SET THE ADDRESS PORTION CONDITIONALLY A MACRO
- * MUST BE WRITTEN WHICH CALLS THE *SAC* MACRO TO SET THE
- * ADDRESS PORTION OF THE INSTRUCTIONS.
- *
- * AN EXTENSIVE SET OF OPDEFS IS AVAILABLE FOR UNCONDITIONALLY
- * PRESETTING THE SET INSTRUCTIONS. THERE ARE MANY FORMS OF THE
- * INSTRUCTIONS DEFINED. SOME EXAMPLES ARE -
- *
- * TA2 MS2W,SCA
- * TX3 B7+FLSW,TAG
- *
- * THE RESULTING INSTRUCTIONS AFTER PRESET WOULD BE -
- * SA2 MS2W + CONTENTS OF */PRESET/SCA*
- * SX3 B7+FLSW + CONTENTS OF */PRESET/TAG*
- *
- * IN MOST CASES THE FIRST PARAMETER CAN BE A CONSTANT, A
- * REGISTER, THEIR SUM OR DIFFERENCE, OR OMITTED ALTOGETHER.
- * THE SECOND PARAMETER (OR ONLY PARAMETER) IS PASSED TO THE
- * *SAC* MACRO. REFER TO ITS DOCUMENTATION FOR THE POSSIBLE
- * OPTIONS.
- *
- * A SMALLER COLLECTION OF MACROS PERMITS THE CONDITIONAL
- * PRESETTING OF SET INSTRUCTIONS. ANY OR ALL OF THE PARAMETERS
- * MAY CONTAIN A VALUE, A B-REGISTER, OR THEIR SUM.
- *
- * TSX0 (B3+OFFSET,CONDITION,TAG)
- *
- * THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
- * SX0 B3+OFFSET IF CONDITION PRESENT
- * SX0 TAG IF CONDITION NOT PRESENT
- TAQ OPDEF I,L
- SA.I 0
- SAC 18,L
- ENDM
- PURGDEF TBQ
- TBQ OPDEF I,L
- SB.I 0
- SAC 18,L
- ENDM
- TXQ OPDEF I,L
- SX.I 0
- SAC 18,L
- ENDM
- TAQ,Q OPDEF I,K,L
- SA.I K
- SAC 18,L
- ENDM
- TBQ,Q OPDEF I,K,L
- SB.I K
- SAC 18,L
- ENDM
- TXQ,Q OPDEF I,K,L
- SX.I K
- SAC 18,L
- ENDM
- TAAQ,Q OPDEF I,J,K,L
- SA.I A.J+K
- SAC 18,L
- ENDM
- TBAQ,Q OPDEF I,J,K,L
- SB.I A.J+K
- SAC 18,L
- ENDM
- TXAQ,Q OPDEF I,J,K,L
- SX.I A.J+K
- SAC 18,L
- ENDM
- TABQ,Q OPDEF I,J,K,L
- SA.I B.J+K
- SAC 18,L
- ENDM
- TBBQ,Q OPDEF I,J,K,L
- SB.I B.J+K
- SAC 18,L
- ENDM
- TXBQ,Q OPDEF I,J,K,L
- SX.I B.J+K
- SAC 18,L
- ENDM
- TAXQ,Q OPDEF I,J,K,L
- SA.I X.J+K
- SAC 18,L
- ENDM
- TBXQ,Q OPDEF I,J,K,L
- SB.I X.J+K
- SAC 18,L
- ENDM
- TXXQ,Q OPDEF I,J,K,L
- SX.I X.J+K
- SAC 18,L
- ENDM
- TAA,Q OPDEF I,J,L
- SA.I A.J+0
- SAC 18,L
- ENDM
- TBA,Q OPDEF I,J,L
- SB.I A.J+0
- SAC 18,L
- ENDM
- TXA,Q OPDEF I,J,L
- SX.I A.J+0
- SAC 18,L
- ENDM
- TAB,Q OPDEF I,J,L
- SA.I B.J+0
- SAC 18,L
- ENDM
- TBB,Q OPDEF I,J,L
- SB.I B.J+0
- SAC 18,L
- ENDM
- TXB,Q OPDEF I,J,L
- SX.I B.J+0
- SAC 18,L
- ENDM
- TAX,Q OPDEF I,J,L
- SA.I X.J+0
- SAC 18,L
- ENDM
- TBX,Q OPDEF I,J,L
- SB.I X.J+0
- SAC 18,L
- ENDM
- TXX,Q OPDEF I,J,L
- SX.I X.J+0
- SAC 18,L
- ENDM
- OPDEFS SPACE 4,10
- ** THE FOLLOWING *ECHO* PSEUDO-OP DEFINES A SET OF MACROS THAT
- * PERMITS THE REGISTERS IN THE LIST TO BE SET WITH CONDITIONAL
- * VALUES.
- ECHO ,R=(A1,A2,A3,B3,B4,B6,X0,X1,X2,X3,X4,X5,X6,X7)
- PURGMAC TS_R
- TS_R MACRO L,M THE *M* SHOULD BE REMOVED LATER
- LOCAL T
- S_R T+B0
- IFC NE,$M$$,4 THIS IS TRANSITIONAL CODE **
- IFEQ L,0,1 **
- T SAC 21,M "TWOPARS" "SEQNO" **
- ELSE 1 **
- T SAC 21,L
- ENDM
- ENDD
- OPDEFS SPACE 4
- ** JUMP MACROS.
- *
- * A FULL SET OF MACROS IS AVAILABLE FOR THE JUMP INSTRUCTIONS.
- * THE FORM OF A CONDITIONAL JUMP INSTRUCTION IS AS FOLLOWS.
- *
- * TNZ X4,(/ISD/SUB3,ISD,/LSPMMF/SUB2,MMF,/MONITOR/PPRX)
- *
- * THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
- * NZ X4,/ISD/SUB3 JUMP TO SUB3 IF ISD PRESENT
- * NZ X4,/LSPMMF/SUB2 JUMP TO SUB2 IF MMF PRESENT
- * NZ X4,/MONITOR/PPRX OTHERWISE JUMP TO PPRX
- *
- * ANY OR ALL OF THE PARAMETERS OF A *TJP* INSTRUCTION MAY ALSO
- * CONTAIN A REGISTER OR A REGISTER PLUS OFFSET. THE PARAMETERS
- * MAY BE ANY ALLOWED ON THE *JP* INSTRUCTION.
- *
- * TJP (/PROGRAM/TAG1,MMF,/MONITOR/HNG1)
- *
- * THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
- * JP 0+/PROGRAM/TAG1 JUMP TO TAG1 IF MMF PRESENT
- * JP 0+/MONITOR/HNG1 JUMP TO HNG1 IF MMF NOT PRESENT
- TJP MACRO L,M THE *M* SHOULD BE REMOVED LATER
- LOCAL S
- JP S
- IFC NE,$M$$,4 THIS IS TRANSITIONAL CODE **
- 0 ERR *TJP* CAN HAVE ONLY ONE PARAMETER **
- IFEQ L,0,1 **
- S SAC 24,M **
- ELSE 1 **
- S SAC 24,L
- ENDM
- TEQ MACRO L
- LOCAL S
- EQ S
- S SAC 18,L
- ENDM
- TGE MACRO J,K,L
- LOCAL S
- .1 MICRO 1,, J
- .2 MICRO 1,, K
- GE ".1",".2",S
- S SAC 18,L
- ENDM
- TGT MACRO J,K,L
- LOCAL S
- .1 MICRO 1,, J
- .2 MICRO 1,, K
- GT ".1",".2",S
- S SAC 18,L
- ENDM
- TZR MACRO J,L
- LOCAL S
- .1 MICRO 1,, J
- ZR ".1",S
- S SAC 18,L
- ENDM
- TNZ MACRO J,L
- LOCAL S
- .1 MICRO 1,, J
- NZ ".1",S
- S SAC 18,L
- ENDM
- TPL MACRO J,L
- LOCAL S
- .1 MICRO 1,, J
- PL ".1",S
- S SAC 18,L
- ENDM
- TNG MACRO J,L
- LOCAL S
- .1 MICRO 1,, J
- NG ".1",S
- S SAC 18,L
- ENDM
- OPDEFS SPACE 4,10
- * THIS INSTRUCTION IS A CONDITIONAL NO-OP.
- * IF THE CONDITION WORD *C* IS NON-ZERO, AN *EQ* TO
- * THE SPECIFIED ADDRESS (*L*) IS ENTERED INTO THIS
- * LOCATION AT PRESET TIME. OTHERWISE, A *SB0 46000B*
- * IS ENTERED, MAKING THE INSTRUCTION A NO-OP.
- TNO MACRO L,C
- .1 SET *P
- .A IFEQ .1,15
- NO
- .A ENDIF
- VFD 30/0400000000B+L
- SAC 30,0400000000B+L,C,6100046000B
- ENDM
- OPDEFS SPACE 4,10
- * THIS INSTRUCTION IS A CONDITIONAL NO-OP.
- * IF THE CONDITION WORD *C* IS NONZERO, A *NZ B5*
- * TO THE SPECIFIED ADDRESS (*L*) IS ENTERED INTO THIS
- * LOCATION AT PRESET TIME. OTHERWISE, A *SB0 46000B*
- * IS ENTERED, MAKING THE INSTRUCTION A NO-OP.
- TNZB5 MACRO L,C
- .1 SET *P
- .A IFEQ .1,15
- NO
- .A ENDIF
- NZ B5,L
- SAC 30,0550000000B+L,C,6100046000B
- ENDM
- OPDEFS SPACE 4,10
- * THESE MACROS PERMIT SETTING THE COUNT IN A SHIFT OR MASK
- * INSTRUCTION. THE FORM OF THESE INSTRUCTIONS IS IDENTICAL TO
- * THE OTHER CONDITIONAL INSTRUCTIONS.
- *
- * WHEN USING THE *TAX*, *TLX*, OR *TMX* MACROS IN THE FORM
- *
- * TLX1 (M,N,CONDITION)
- *
- * MAKE SURE THAT *M* AND *N* ARE POSITIVE. FOR EXAMPLE
- * *TLX0 (-6,0,ESM)* SHOULD BE *TLX0 (60-6,0,ESM)*.
- ECHO ,R=(0,1,2,3,4,5,6,7)
- TAX_R MACRO J,L
- LOCAL S
- IFC EQ,*L**,3
- AX_R S
- S SAC 6,J
- ELSE 4
- AX_R J
- S SAC 6,L
- IF -DEF,S,1
- ERR ONLY ONE PARAMETER IS PERMITTED ON A CONDITIONAL SHIFT
- ENDM
- ENDD
- ECHO ,R=(0,1,2,3,4,5,6,7)
- TLX_R MACRO J,L
- LOCAL S
- IFC EQ,*L**,3
- LX_R S
- S SAC 6,J
- ELSE 4
- LX_R J
- S SAC 6,L
- IF -DEF,S,1
- ERR ONLY ONE PARAMETER IS PERMITTED ON A CONDITIONAL SHIFT
- ENDM
- ENDD
- TMX3 MACRO L
- LOCAL S
- MX3 S
- S SAC 6,L
- ENDM
- CME SPACE 4,10
- ** THE FOLLOWING MACROS DEFINE INSTRUCTIONS FOR
- * READING AND WRITING CENTRAL MEMORY. THESE INSTRUCTIONS
- * SHOULD BE USED WHEN ADDRESSING A USER-S FIELD LENGTH,
- * OR FOR ANY ADDRESSING OUTSIDE LOW CORE. THESE
- * INSTRUCTIONS ARE MODIFIED AT PRESET TIME TO USE
- * THE STANDARD *SAI XJ* OPCODE IF RUNNING ON A MAINFRAME
- * WITH UP TO 262K OF CENTRAL MEMORY. OTHERWISE, IT IS
- * SET TO A NEW OPCODE THAT ALLOWS ADDRESSING OF ADDRESSES
- * LARGER THAN 18 BITS. NOTE THAT THE SAME CONVENTIONS
- * FOR REGISTER USAGE (I.E. 1,2,3,4,5 FOR READING CM;
- * 6,7 FOR WRITING CM) STILL EXIST FOR CODE THAT CAN
- * RUN IN EITHER MODE.
- ERRMC MACRO
- .A IF -DEF,CME$
- ERR INVALID OP-CODE
- .A ENDIF
- ENDM
- EXREAD MACRO I,J
- .1 MICRO 1,1, J
- .A IFC NE,$".1"$X$
- ERR ILLEGAL SOURCE OPERAND
- .A ENDIF
- .2 MICRO 2,2, J
- VFD 15/660_I_".2"B
- SAC 15,660_I_".2"B,CME,53_I_".2"0B
- ENDM
- EXWRIT MACRO I,J
- .1 MICRO 1,1, J
- .A IFC NE,$".1"$X$
- ERR ILLEGAL SOURCE OPERAND
- .A ENDIF
- .2 MICRO 2,2, J
- VFD 15/670_I_".2"B
- SAC 15,670_I_".2"B,CME,53_I_".2"0B
- ENDM
- ERX0 MACRO J
- ERRMC
- EXREAD 0,J
- ENDM
- ERX1 MACRO J
- EXREAD 1,J
- ENDM
- ERX2 MACRO J
- EXREAD 2,J
- ENDM
- ERX3 MACRO J
- EXREAD 3,J
- ENDM
- ERX4 MACRO J
- EXREAD 4,J
- ENDM
- ERX5 MACRO J
- EXREAD 5,J
- ENDM
- ERX6 MACRO J
- ERRMC
- EXREAD 6,J
- ENDM
- ERX7 MACRO J
- ERRMC
- EXREAD 7,J
- ENDM
- EWX0 MACRO J
- ERRMC
- EXWRIT 0,J
- ENDM
- EWX1 MACRO J
- ERRMC
- EXWRIT 1,J
- ENDM
- EWX2 MACRO J
- ERRMC
- EXWRIT 2,J
- ENDM
- EWX3 MACRO J
- ERRMC
- EXWRIT 3,J
- ENDM
- EWX4 MACRO J
- ERRMC
- EXWRIT 4,J
- ENDM
- EWX5 MACRO J
- ERRMC
- EXWRIT 5,J
- ENDM
- EWX6 MACRO J
- EXWRIT 6,J
- ENDM
- EWX7 MACRO J
- EXWRIT 7,J
- ENDM
- SPACE 4,10
- ** THE FOLLOWING OPDEF GENERATES AN 016 INSTRUCTION TO READ THE
- * FREE RUNNING COUNTER TO THE SPECIFIED X REGISTER ON A 180
- * MACHINE. ON OTHER MACHINES A *BXI XI-XI* INSRUCTION IS
- * GENERATED TO SET THE X REGISTER TO 0.
- RCX OPDEF P1
- VFD 9/016B,3/P1,3/0
- SAC 15,016_P1_0B,CME,13_P1_P1_P1_B
- ENDM
- SPACE 4,10
- ** DEFINE OPCODES.
- * TRAP INSTRUCTION.
- RTX,Q OPDEF P1,K
- + VFD 9/017B,3/P1,18/K,30/0
- ENDM
- * INVALIDATE CACHE.
- *
- * P1 = 1/ F,59/ ADDR.
- * F = CENTRAL MEMORY/EXTENDED MEMORY INDICATOR (0 IF CM).
- * ADDR = RAC/RAE (RAC IF *F* = 0).
- * P2 = BLOCK LENGTH.
- * K = EI SUBFUNCTION (703B TO INVALIDATE SELECTED CACHE;
- * 40000B TO INVALIDATE ALL CACHE ON THE OTHER CPU).
- ICX,X,Q OPDEF P1,P2,K
- + VFD 9/017B,3/P1,3/P2,15/K,30/0
- ENDM
- OPDEFS SPACE 4,10
- * TIC - CONDITIONALLY INVALIDATE CACHE.
- *
- * THIS INSTRUCTION IS A CONDITIONAL NO-OP. IF THE CONDITION
- * WORD *C* IS NONZERO, AN *IC 40000B* INSTRUCTION (WHICH
- * INVALIDATES ALL CACHE ON THE OTHER CPU) IS ENTERED INTO
- * THIS LOCATION AT PRESET TIME. OTHERWISE, TWO *SB0 46000B*
- * INSTRUCTIONS ARE ENTERED, MAKING THIS WORD A NO-OP.
- *
- * NOTE - WHEN UPDATING A SEQUENCE OF WORDS TERMINATING IN AN
- * INTERLOCK WORD, THIS INSTRUCTION IS NORMALLY ISSUED JUST
- * BEFORE THE LAST WRITE. SINCE THE CACHE INVALIDATE
- * OPERATION TIES UP THE OTHER CPU FOR 5 MICROSECONDS (ON A
- * 960), THIS SEQUENCE OF INSTRUCTIONS ALLOWS THE FINAL WRITE
- * TO PROCEED IN PARALLEL WITH THE PURGE. THIS MINIMIZES
- * CACHE PURGE OVERHEAD WHILE STILL ENSURING DATA INTEGRITY.
- TIC MACRO C
- + VFD 30/0170040000B *IC 40000B*
- SAC 30,0170040000B,C,6100046000B
- VFD 30/0
- SAC 30,0,C,6100046000B
- ENDM
- EXP SPACE 4
- ** EXP - GENERATE EXCHANGE PACKAGE.
- PURGMAC EXP
- EXP MACROE P,A0,B0,RA,A1,B1,FL,A2,B2,EM,A3,B3,RAX,A4,B4,FLX,A5,B5,
- ,MA,A6,B6,EA,A7,B7,X0,X1,X2,X3,X4,X5,X6,X7
- LOCAL A
- MACREF EXP
- A BSS 0
- + VFD 24/P
- VFD 18/A0
- VFD 18/B0
- + VFD 24/RA
- VFD 18/A1
- VFD 18/B1
- + TVFD 24/FL
- TVFD 18/A2
- VFD 18/B2
- IFC EQ,$EM$$
- + TVFD 12/0,EEMC+60B,CP176,EEMC
- ELSE
- TVFD 12/EM
- ENDIF
- VFD 12/
- TVFD 18/A3
- VFD 18/B3
- + VFD 3/
- TVFD 21/RAX
- TVFD 18/A4
- VFD 18/B4
- + TVFD 24/FLX
- TVFD 18/A5
- VFD 18/B5
- + VFD 6/
- TVFD 18/MA
- TVFD 18/A6
- VFD 18/B6
- + VFD 6/
- IFC EQ,$EA$$,2
- TVFD 18/0,EEAD
- ELSE 1
- TVFD 18/EA
- TVFD 18/A7
- VFD 18/B7
- + VFD 60/X0
- VFD 60/X1
- VFD 60/X2
- VFD 60/X3
- VFD 60/X4
- VFD 60/X5
- VFD 60/X6
- VFD 60/X7
- ENDM
- MNR SPACE 4
- *** MNR - GENERATE PPU MONITOR PROGRAM MODE FUNCTION TABLE ENTRY.
- *
- *
- * MNR FCN,A
- * ENTRY *FCN* = FUNCTION CODE NAME.
- * *A* = ENTRY ADDRESS.
- PURGMAC MNR
- MNR MACRO FCN,A
- MACREF MNR
- LOC FCN
- BSS 0
- ORG TMNR+FCN
- VFD 42/
- IFC NE,*A**
- TVFD 18/,A
- ELSE 1
- VFD 18//PROGRAM/.FCN
- USE *
- .FCN BSS 0
- ENDM
- PMN SPACE 4
- ** PMN - GENERATE PPU MONITOR FUNCTION TABLE ENTRY.
- *
- *
- * PMN FCN,A
- * ENTRY *FCN* = FUNCTION CODE NAME.
- * *A* = ENTRY ADDRESS.
- PURGMAC PMN
- PMN MACRO FCN,A
- MACREF PMN
- LOC FCN
- BSS 0
- ORG TPMN-1+FCN
- VFD 42/
- .1 SET 0
- IRP A
- .1 SET .1+1
- IRP
- IFEQ .1,0,1
- VFD 18//MONITOR/.FCN
- IFEQ .1,1,1
- VFD 18//MONITOR/A
- IFGT .1,1,1
- TVFD 18/,A
- USE *
- .FCN BSS 0
- ENDM
- PPR SPACE 4,30
- ** PPR - GENERATE PPU REQUEST PROCESSOR TABLE ENTRY.
- *
- *
- * PPR FCN,MON,PRG,SCP
- * ENTRY *FCN* = FUNCTION CODE NUMBER.
- * *MON* = MONITOR MODE PROCESSOR.
- * *PRG* = PROGRAM MODE PROCESSOR.
- * *SCP* = *DCP*, DROP CPU OPERATION NEEDS ACTIVE CPU.
- * *SCP* = *FEX*, FAST EXIT WITHOUT FULL PARAMETER SETUP.
- * ACTIVE CPU CHECK IS NOT MADE WITH *FEX* OPTION.
- *
- * THE *MON* AND *PRG* ADDRESSES MAY BE CONDITIONAL
- * VALUES THAT ARE SET DURING PRESET. THEY ARE SPECIFIED
- * IDENTICALLY TO THE WAY CONDITIONAL ADDRESSES ARE
- * SPECIFIED IN THE CONDITIONAL JUMP MACROES.
- * FOR EXAMPLE THE FOLLOWING INSTRUCTION SETS THE
- * MONITOR MODE PROCESSOR ADDRESS TO EITHER /MMF/IAU
- * OR /0MMF/IAU DEPENDING ON THE PRESENCE OF MMF.
- *
- * PPR IAUM,(/MMF/IAU,/0MMF/IAU,MMF)
- *
- * THE CORRECT ENTRY ADDRESS IS SET DEPENDING IN THIS CASE
- * UPON THE PRESENCE OF THE MMF BLOCK.
- *
- * NOTE CPUMTR PROGRAM MODE FUNCTIONS MUST ALWAYS
- * BE PROCESSED IN THE SAME CPU, THAT IS CPU-0
- * IF BOTH CPU-S ARE AVAILABLE.
- PURGMAC PPR
- PPR MACRO FCN,A,B,C
- MACREF PPR
- LOC FCN
- BSS 0
- IFC NE,*B**,3
- IFC NE,*C**,2
- IFC NE,*C*FEX*,1
- ERR PROGRAM MODE/CPU SELECTION CONFLICT
- ORG TPPR+FCN-CPUM
- .2 SET 0
- IFC EQ,*C*FEX*,1
- .2 SET 4000B
- IFC EQ,*C*DCP*,1
- .2 SET 2000B
- VFD 12/.2
- .1 SET 0
- IRP B
- .1 SET .1+1
- IRP
- IFEQ .1,0,1
- VFD 18//PROGRAM/HNG
- IFEQ .1,1,1
- VFD 18//PROGRAM/B
- IFGT .1,1,1
- TVFD 18/,B
- VFD 12/0
- .1 SET 0
- IRP A
- .1 SET .1+1
- IRP
- IFEQ .1,0,1
- VFD 18//MONITOR/.FCN
- IFEQ .1,1,1
- VFD 18//MONITOR/A
- IFGT .1,1,1
- TVFD 18/,A
- USE *
- .FCN BSS 0
- PPR ENDM
- SFMACRO SPACE 4,25
- ** SFMACRO - DEFINE THE MACRO TO BUILD A SUBFUNCTION TABLE.
- *
- * F SFMACRO PIF,OPT,BIAS
- *
- * *SFMACRO* DEFINES A MACRO (NAMED BY THE *F* PARAMETER) THAT
- * WILL BUILD SUBFUNCTION TABLE ENTRIES THAT ARE PACKED TWO PER
- * WORD. IF *PAIRED* IS SPECIFIED, THERE IS AN ENTRY FOR EVERY
- * TWO CONSECUTIVE SUBFUNCTION CODES. EACH ENTRY CONSISTS OF AN
- * ADDRESS IN THE LOWER 18 BITS OF THE WORD AND AN OPTION CODE
- * PACKED INTO THE UPPER 12 BITS OF THE WORD. WHEN OPTIONS ARE
- * ALLOWED, THEIR CODES AND VALUES ARE SPECIFIED BY THE *OPT*
- * PARAMETER. THE SECOND ENTRY IS CORRECTLY POSITIONED IN THE
- * WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING THE
- * WORD BY 30 BITS.
- *
- * F = FIRST THREE CHARACTERS OF MONITOR FUNCTION NAME.
- * PIF = PAIRED/INDIVIDUAL FLAG.
- * = *INDIVIDUAL*, IF THERE IS ONE SUBFUNCTION PER ENTRY.
- * = *PAIRED*, IF THERE ARE TWO SUBFUNCTIONS PER ENTRY.
- * OPT = AN OPTIONAL LIST OF OPTIONS TO BE ALLOWED FOR EACH
- * ENTRY. (O=X,P=Y,Q=Z,...)
- * O,P,Q = 1 OR 2 CHARACTER OPTION CODES.
- * X,Y,Z = THE VALUE TO BE USED WHEN CODE IS SPECIFIED.
- * OPTIONS ARE ADDED TOGETHER WHEN MORE THAN ONE IS USED.
- * BIAS = NUMBER OF THE FIRST SUBFUNCTION (DEFAULT = 0).
- PURGMAC SFMACRO
- MACRO SFMACRO,F,PIF,OPT,BIAS
- .A IFC EQ,/PIF/INDIVIDUAL/
- .1 MICRO 1,,$*$ DELETE PAIRED-ONLY LINES
- .A ELSE
- IFC NE,/PIF/PAIRED/,1
- ERR PARAMETER MUST BE *INDIVIDUAL* OR *PAIRED*
- .1 MICRO 0,,$$ INCLUDE PAIRED-ONLY LINES
- .A ENDIF
- .A IFC EQ,/OPT//
- .2 MICRO 1,,$*$ DELETE OPTION-ONLY LINES
- .A ELSE
- .2 MICRO 0,,$$ INCLUDE OPTION-ONLY LINES
- .A ENDIF
- F SFMACR0 ".1",".2",OPT,BIAS
- ENDM
- SFMACR0 SPACE 4,15
- ** SFMACR0 - THE REAL MACRO THAT DOES THE WORK OF *SFMACRO*.
- *
- * F SFMACR0 PIF,OPF,OPT,BIAS
- *
- * F = FIRST THREE CHARACTERS OF MONITOR FUNCTION NAME.
- * PIF = PAIRED/INDIVIDUAL FLAG.
- * = *INDIVIDUAL*, IF THERE IS ONE SUBFUNCTION PER ENTRY.
- * = *PAIRED*, IF THERE ARE TWO SUBFUNCTIONS PER ENTRY.
- * OPF = OPTIONS FLAG.
- * = -*-, IF OPTIONS MAY BE SPECIFIED FOR THE SUBFUNCTIONS.
- * = NULL, IF OPTIONS ARE NOT USED.
- * OPT = SAME AS *SFMACRO* PARAMETER.
- * BIAS = SAME AS *SFMACRO* PARAMETER.
- PURGMAC SFMACR0
- MACRO SFMACR0,F,PIF,OPF,OPT,BIAS
- .A IFC EQ,/PIF/*/
- .1 MICRO 0,,$$ OMIT *SF2* PARAMETER
- .A ELSE
- .B IFC EQ,/PIF//
- .1 MICRO 1,,$SF2,$ INCLUDE *SF2* PARAMETER
- .B ELSE
- ERR PAIRED FLAG MUST BE -*- OR OMITTED
- .B ENDIF
- .A ENDIF
- .A IFC EQ,/OPF//
- .1 MICRO 1,,$".1"OP,$ INCLUDE *OP* PARAMETER
- IRP OPT DEFINE OPTION CODES
- .4 MICRO 1,,=OPT= GET MNEMONIC
- .4 MICCNT .4
- .5 MICRO .4+2,,$OPT$ GET VALUE
- .F_M.".4" EQU ".5"
- IRP
- .A ELSE
- .B IFC NE,/OPF/*/
- ERR OPTIONS FLAG MUST BE -*- OR OMITTED
- .B ENDIF
- .A ENDIF
- PURGMAC F
- F MACRO SF1,".1"BLOCK
- .6 SET SF1
- PIF .6 SET SF1/2
- .7 SET 0_BIAS/2
- PIF .7 SET 0_BIAS/4
- ERRNZ T_F+.6-.6/2-.7-*O SUBFUNCTION OUT OF ORDER
- .6 MICRO 1,17,$/MONITOR/.F_M_SF1$
- PIF ERRNZ SF1/2*2-SF1 FIRST SUBFUNCTION MUST BE EVEN
- PIF IFC NE,/SF2//,3
- PIF .7 MICRO 1,17,$/MONITOR/.F_M_SF2$
- PIF ERRNZ SF1*1+1-SF2 SUBFUNCTIONS MUST BE CONSECUTIVE
- PIF ERRNZ ".6"-".7" SUBFUNCTIONS NOT DEFINED ON SAME *SUBFUN*
- ORG T1
- LOC SF1
- VFD 18/".6"
- .8 SET 2000B
- OPF IRP OP
- OPF .8 SET .8+.F_M.OP OP IS AN UNDEFINED OPTION
- OPF IRP
- .C IFEQ .6,.6/2*2 IF FIRST ENTRY IN WORD
- ORG T_F+.6/2-.7
- VFD 12/..SF1_NO,18/".6"
- .D IFC NE,$BLOCK$$
- SAC 18,".6",BLOCK,/MONITOR/HNG1
- .D ENDIF
- VFD 12/.8,18/..SF1_NA
- .8 MICRO 1,, ..SF1
- ..SF1_NO OCTMIC 4000B
- ..SF1_NA MICRO 1,,$/MONITOR/HNG1$
- RMT
- ..SF1_NO EQU "..SF1_NO"B
- ..SF1_NA EQU "..SF1_NA"
- RMT
- .C ELSE
- ORG T_F+.6/2-.7+1
- ".8"NO OCTMIC .8
- ".8"NA MICRO 1,,$".6"$
- .D IFC NE,$BLOCK$$
- SAC 18,".6",BLOCK,/MONITOR/HNG1
- .D ENDIF
- .C ENDIF
- ENDM
- SFMACRO ENDM
- SUBFUN SPACE 4,15
- ** SUBFUN - DEFINE SUBFUNCTION PROCESSOR.
- *
- * SFA SUBFUN FNC,(SFN)
- * ENTRY SFA = SUBFUNCTION PROCESSOR ENTRY NAME.
- * FNC = FUNCTION NAME.
- * SFN = ONE OR MORE SUBFUNCTION NAMES.
- *
- * THIS MACRO DEFINES A SYMBOL, QUALIFIED BY *MONITOR*, FOR EACH
- * SUBFUNCTION IN THE LIST. THE SYMBOL NAME IS *.FNCSFN*,
- * TRUNCATED TO 8 CHARACTERS. IT IS SET TO THE ADDRESS OF THE
- * PROCESSOR.
- PURGMAC SUBFUN
- MACRO SUBFUN,SFA,FNC,SFN
- SFA BSS 0
- QUAL MONITOR
- IRP SFN
- .1 MICRO 1,8,$.FNC_SFN$
- ".1" BSS 0
- IRP
- QUAL *
- ENDM
- RUE SPACE 4,10
- ** RUE - READ USER ECS.
- *
- * RUE MODE
- *
- * ENTRY *MODE* = *MONITOR* IF CALLED FROM MONITOR MODE,
- * OTHERWISE CALLED FROM PROGRAM MODE.
- * (A0) = CM ADDRESS.
- * (B4) = WORD COUNT TO READ FROM USER ECS.
- * (B6) = RETURN ADDRESS.
- * (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
- *
- * USES A - 2, 3, 6, 7, IF */SUE/RUM* ROUTINE CALLED.
- *
- * CALLS /SUE/RUM, IF SIMULTANEOUS UEM/ESM DEFINED.
- RUE MACRO MODE
- LOCAL S
- + VFD 12/0400B
- SAC 12,0400B,SUE,0114B
- VFD 18/S
- .A IFC EQ,*MODE*MONITOR*
- S SAC 18,/SUE/RUM1,SUE,000000B
- .A ELSE
- S SAC 18,/SUE/RUM,SUE,000000B
- .A ENDIF
- ENDM
- WUE SPACE 4,10
- ** WUE - WRITE USER ECS.
- *
- * WUE MODE
- *
- * ENTRY *MODE* = *MONITOR* IF CALLED FROM MONITOR MODE,
- * OTHERWISE CALLED FROM PROGRAM MODE.
- * (A0) = CM ADDRESS.
- * (B4) = WORD COUNT TO WRITE TO USER ECS.
- * (B6) = RETURN ADDRESS.
- * (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
- *
- * USES A - 2, 3, 6, 7, IF */SUE/WUM* ROUTINE CALLED.
- *
- * CALLS /SUE/WUM, IF SIMULTANEOUS UEM/ESM DEFINED.
- WUE MACRO MODE
- LOCAL S
- + VFD 12/0400B
- SAC 12,0400B,SUE,0124B
- VFD 18/S
- .A IFC EQ,*MODE*MONITOR*
- S SAC 18,/SUE/WUM1,SUE,000000B
- .A ELSE
- S SAC 18,/SUE/WUM,SUE,000000B
- .A ENDIF
- ENDM
- SPACE 4,10
- * DEFINE *QUAL* ORDER IN CROSS REFERENCE.
- QUAL MONITOR
- QUAL PROGRAM
- QUAL PRESET
- QUAL
- TITLE TABLES.
- TMNR SPACE 4,10
- ** NOTE - THE FOLLOWING TABLES *TMNR*, *TPMN*, AND *TPPR*
- * MUST BE CONTIGOUS AND THE UPPER FOUR BITS OF THE ENTRIES
- * IN THE FIRST TWO TABLES MUST BE 0 DUE TO CODE IN ROUTINE
- * */MONITOR/PPR*.
- ** TMNR - TABLE OF *MTR* PROGRAM MODE REQUEST PROCESSORS.
- * ENTRY 1 WORD.
- *
- * INDEXED BY *MTR* PROGRAM MODE FUNCTION.
- *
- *T 4/0,38/,18/ ADDR
- *
- * ADDR ADDRESS OF PROCESSOR.
- QUAL PROGRAM
- USE TMNR
- TMNR BSS 0
- DUP PMXF,1
- VFD 42/0,18//PROGRAM/HNG
- USE *
- QUAL *
- TPMN SPACE 4,10
- ** TPMN - PPU MONITOR REQUESTS.
- * ENTRY = 1 WORD.
- *
- * INDEXED BY PPU MONITOR FUNCTION.
- *
- *T 4/0,38/,18/ ADDR
- *
- * ADDR ADDRESS OF PROCESSOR.
- USE TPMN
- TPMN BSS 0
- DUP MXPF-1,1
- VFD 42/0,18//MONITOR/HNG
- USE *
- TPPR SPACE 4,10
- ** TPPR - PPU REQUEST TABLE.
- * ENTRY = 1 WORD.
- *
- * INDEXED BY MONITOR FUNCTION.
- *
- *T 1/F,1/D,10/,18/ PRG,12/,18/ MTR
- *
- * F *SCP* = *FEX* SPECIFIED.
- * D *SCP* = *DCP* SPECIFIED.
- * PRG PROGRAM MODE PROCESSOR ADDRESS.
- * MTR MONITOR MODE PROCESSOR ADDRESS.
- USE TPPR
- .1 SET CPUM-MXPF+1-PMXF
- IFGT .1,0,2
- DUP .1,1
- VFD 42/0,18//MONITOR/HNG
- TPPR BSS 0
- DUP MXFM-CPUM,1
- VFD 42/0,18//MONITOR/HNG
- TPPRL BSS 0
- USE *
- TREL SPACE 4,10
- ** THE FOLLOWING DECLARATIONS ESTABLISH THE *TREL* USE BLOCK
- * FOR THE *SAC* MACRO. *CPUMLD* LOADS THIS BLOCK (FOLLOWED
- * BY THE *TBLK* BLOCK) AFTER ALL OTHER BLOCKS THAT ARE
- * INCLUDED IN THE LOAD.
- QUAL PRESET
- USE /TREL/
- REL BSS 0
- USE *
- QUAL *
- TJMP SPACE 4,10
- ** ESTABLISH *TJMP* BLOCK
- QUAL PRESET
- USE /TJMP/
- TJMP BSS 0
- USE *
- QUAL *
- TITLE DATA.
- DATA SPACE 4
- ORG BSS 0
- DATA SPACE 4
- ** *CPUMTR* LOW MEMORY LOCATIONS.
- CL BSS 0
- ORG CL+CBLP LOADED BLOCK TABLE POINTER
- VFD 42/0,18//MONITOR/LBAT
- ORG CL+CSXP SYSTEM CP EXCHANGE PACKAGE TABLE ADDRESS
- VFD 42/0,18//MONITOR/MNRA
- ORG CL+CXBP *EXPACS* BLOCK POINTER
- VFD 42/0,18//MONITOR/MXP
- ORG CL+CFPP FAST PP LOADER TABLE POINTERS
- VFD 24/0,6//MONITOR/TPPIL,6//MONITOR/TFPLL,6/0,18//MONITOR/
- ,TFPL
- ORG CL+CMST MONITOR MODE STATUS BY CPU
- VFD 60/0
- VFD 60/0
- ORG CL+CPBT PROGRAM MODE BASE TIME BY CPU
- CON 0
- CON 0
- ORG CL+CACX ALTERNATE CPU EXCHANGE REQUESTS BY CPU
- CON 0
- CON 0
- ORG CL+CMTLL
- QUAL MONITOR
- PX SPACE 4
- ** PX - PROGRAM MODE EXIT REQUEST.
- * (PX) IS SET FOR IN THE FOLLOWING CASES.
- * (PX) = 1 INDICATES THAT PROGRAM MODE MONITOR IS COMPLETE.
- * (PX) = -1 INDICATES A PP IS REQUESTED BY PROGRAM MODE MONITOR.
- * (PX) = -2 INDICATES AN *MTR*-LIKE FUNCTION IS REQUESTED BY
- * PROGRAM MODE MONITOR. (SEE *PMN*.)
- PX CON 0 PROGRAM MODE EXIT REQUEST
- PR SPACE 4
- ** PR - PROGRAM MODE REQUESTS.
- * (PR) CONTAINS A STACK OF REQUESTS FOR PROGRAM MODE
- * EXECUTION.
- *
- *T, PR 1/,11/ MF,20/ PF,1/ PS,27/
- * MF *MTR* PROGRAM MODE REQUESTS.
- * PF PP PROGRAM MODE REQUESTS.
- * PS PSEUDO-PP REQUEST.
- PR CON 0
- SMPR SPACE 4,10
- ** SMPR - STORAGE MOVE PROGRAM REQUEST.
- *
- * WORD *SMPR* CONTAINS THE REQUEST FOR THE STORAGE MOVE
- * (PROGRAM MODE) EXCHANGE PACKAGE. IT WILL CONTAIN EITHER
- * *MSTF*+1 OR *MECF*+1, DEPENDING ON WHETHER THE CURRENT
- * STORAGE MOVE REQUEST IS FOR CM OR ECS/ESM/UEM. IF NO
- * REQUESTS ARE PENDING OR IN PROGRESS, THIS WORD WILL BE
- * ZERO. NOTE THAT THIS MECHANISM CANNOT STACK REQUESTS.
- SMPR CON 0,0
- SMIN EQU SMPR+1 STORAGE MOVE INCREMENT
- DD SPACE 4,10
- ** DD - INPUT REGISTER FOR DAYFILE DUMP PROCESSOR.
- DD VFD 18/3L1DD,42/0
- MP SPACE 4
- ** MP - INPUT REGISTER FOR MONITOR AUXILLARY PROCESSOR.
- * USED FOR ASSIGNING THE MONITOR AUXILLARY PROCESSOR TO
- * PROCESS REQUESTS FOR STORAGE INCREASES.
- MP VFD 18/0L1MA,3/2,39/0
- MT SPACE 4,10
- ** MT - MONITOR MODE TIME. (180 MACHINES).
- MT CON 0,0 MONITOR MODE TIME BY CPU
- SA SPACE 4,10
- ** SA - CPU SLICE TIME ACCUMULATED SINCE CPU SWITCH.
- SA CON 0,0 SLICE TIME ACCUMULATED BY CPU
- SPACE 4
- ** RC - RA+1 AUTO RECALL REQUEST.
- RC VFD 24/0LRCLP,36/0
- AM SPACE 4,10
- ** AM - ACTIVITY MASK FOR PP-S AND TAPE.
- AM CON 00370000000000007760B
- SPACE 4,10
- ** IP - INCREASE PRIORITY ON I/O COMPLETION.
- *
- * IP = 20, GIVES NEXT JOB STARTED EXTRA PRIORITY OVER
- * EQUAL PRIORITY JOB. THIS IS SET BY
- * *DPPM* AND *RCLM* FUNCTIONS.
- *
- * IP = 0, NO CHANGE IN PRIORITY.
- IP CON 0
- SPACE 4
- ** WT - *WQ* TERMINATOR.
- *
- * THE LAST ENTRY IN *WQ* POINTS TO THIS LOCATION.
- WT VFD 12/2000B,48/0
- TPRC SPACE 4,10
- ** PRIORITY CONTROL TABLE.
- TPRC BSS 0
- DUP MPRS+1,1
- CON 0
- SPACE 4,10
- ** THE FOLLOWING ARE USED FOR TEMPORARY STORAGE.
- QUAL MONITOR
- RA BSS 1 ADDRESS OF RA
- RA1 BSS 1 ADDRESS OF RA+1
- ERRNZ RA1-RA-1
- T1 BSS 1
- T2 BSS 1
- T3 BSS 1
- QUAL *
- SPACE 4
- **** THE FOLLOWING ARE CONSTANTS.
- TH CON 0.001P48+1 .001
- CON 1000.P 1000
- TTH CON 0.0001P48+1 .0001
- CON 10000.P 10000
- HTH CON 0.0000001P48+1
- ****
- TTL CPUMTR/MONITOR - MONITOR MODE EXECUTION.
- TITLE MTR - MAIN PROGRAM.
- MTR SPACE 4
- ** MONITOR MODE EXECUTION REGISTER USAGE.
- *
- * INVIOLATE USAGE.
- *
- * (A0) = CPU NUMBER (0 OR 1).
- * (A5) = OUTPUT REGISTER ADDRESS FOR ALL ROUTINES THAT MAY HAVE
- * BEEN ENTERED FROM A POOL PP EXCHANGE.
- * (B1) = 1.
- * (B2) = ADDRESS OF CALLER-S EXCHANGE PACKAGE.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * NOTE - CMU MAY NOT BE USED IN MONITOR MODE ON A DUAL CPU
- * MACHINE WITH ONLY A SINGLE CMU BECAUSE THE CMU MAY BE IN
- * USE ON THE OTHER CPU, CAUSING MONITOR MODE TO WAIT FOR THE
- * CMU TO BECOME FREE.
- *
- * CONVENTIONS.
- *
- * (B3) = SUBROUTINE EXIT ADDRESS.
- MTRX SPACE 4
- ** MTRX - MONITOR EXIT.
- * THE FOLLOWING RULES MUST BE FOLLOWED ON EXIT -
- *
- * 1) ALL EXITS MUST CHECK FOR A POSSIBLE MODE ERROR THAT
- * WAS IN PROCESS (HAD NOT GENERATED AN EXCHANGE) AT THE TIME
- * OF THE EXCHANGE INTERRUPT. IF THIS IS NOT DONE MODE
- * ERRORS WILL NOT BE PROCESSED CORRECTLY ON MACHINES SUCH
- * AS THE CYBER 73.
- *
- * 2) ALL EXITS MUST SET (X0) = 0 AND BRANCH TO */NVE/XJ1*
- * (IF PRESENT) IMMEDIATELY PRIOR TO THE *XJ*. THIS IS A
- * MICROCODE REQUIREMENT.
- *
- * 3) ALL EXITS MUST CHECK FOR A CPU SWITCH REQUEST.
- MTRC SA7 A5+ STORE OUTPUT REGISTER FOR PPU REQUEST
- PPR1 EQU MTRC
- EQ MTRX EXIT MONITOR MODE
- MTRP SA1 RA1 ADDRESS OF RA+1
- NO
- EWX7 X1 SET RA+1
- MTRX TNO /MONITOR/MTRX+1,NTRACE
- *PPRX EQU MTRX
- JP /TRACE/TRP CHECK FOR TRAP CONDITION
- SA2 A0+CSWL CHECK FOR CPU SWITCH REQUEST
- SA3 B2+ CHECK FOR MODE ERROR
- NG X2,BNJ1 IF CPU SWITCH REQUEST
- AX3 36+1 CHECK FOR P = 0 OR 1
- SB4 XJ1 *CJS* RETURN ADDRESS
- ZR X3,MTR2 IF MODE ERROR
- XJ1 SX0 B0+
- TNO /CME/XJ2,CME
- XJ1.1 XJ B2 EXCHANGE TO PROGRAM
- TNO /IH819/XJ2,IH819 CHECK STEP CONDITION
- XJ2 SA1 CPSL
- RC X3 GET MONITOR MODE START TIME IF 180 MACHINE
- PX6 B0,X3
- SA6 CL+CMST+A0 SET CPU CALL AND BASE TIME
- NZ X1,MTR3 IF PP EXCHANGE REQUESTED
- MTR SPACE 4
- * ENTRY FROM CPU PROGRAM.
- MTR SA2 B2+B1 SET RA
- SX7 B1
- TA5 20B,SP SET FAKE RA
- AX2 36 RA
- BX6 X2
- IX7 X2+X7 RA+1
- ERX5 X7 READ RA+1
- SA6 RA STORE RA
- SB3 A6 ADDRESS OF RA ADDRESS
- SA7 A6+B1 STORE RA+1
- ZR X2,MNR IF RA = 0, CHECK MONITOR REQUEST
- NZ X5,CPR PROCESS CPU REQUEST IF (RA+1) " 0
- TEQ (/MONITOR/PPE,CP176,/MONITOR/MTRX) CHECK MODE ERROR
- * PROCESS MODE ERROR.
- MTR2 SA1 CPAL+A0
- SB6 B2 SET EXCHANGE PACKAGE ADDRESS
- AX1 24
- SB7 X1
- JP CJS
- * PROCESS PP PRIORITY EXCHANGE.
- MTR3 SX6 B0 CLEAR EXCHANGE REQUESTED
- SA6 A1
- TA1 PRXS,SDA COUNT EXCHANGE REQUESTS
- SA2 TSCL+A0
- SX0 B1
- IX6 X1+X0
- AX2 48+3
- SA6 A1
- SX2 X2-LSCS-200B
- PL X2,MTR IF SYSTEM PRIORITY
- EQ SXS PLACE CONTROL POINT IN RECALL
- MNR SPACE 4,10
- ** MNR - MONITOR REQUEST PROCESSING.
- *
- * THIS ROUTINE DOES THE START-UP AND EXIT PROCESSING FOR THE
- * VARIOUS PROGRAM-MODE EXCHANGE PACKAGES CONTAINED WITHIN
- * *CPUMTR*.
- *
- * ENTRY (X3) = MONITOR MODE START TIME IF 180 MACHINE.
- MNR SA1 B2+CWQW GET EXCHANGE PACKAGE TYPE
- MX2 -3
- LX1 -18
- BX1 -X2*X1 EXCHANGE PACKAGE TYPE
- SA1 MNRA+X1 GET PROCESSOR ADDRESS
- AX1 18 SHIFT TO PROCESSOR ADDRESS
- SB4 X1
- JP B4 JUMP TO PROCESSOR
- * PROCESS EXIT FROM CONTROL POINT N+1.
- MNR3 SB7 B2 SET CONTROL POINT ADDRESS
- TNO /BUFIO/MNR,BUFIO IF BUFFERED I/O PRESENT
- BX0 X0-X0
- MNR4 SA1 PX PROGRAM MODE EXIT STATUS
- SA2 PR PROGRAM MODE REQUESTS
- BX7 X7-X7
- SA7 A1 CLEAR EXIT STATUS
- ZR X1,MTRX IF PROGRAM MODE NOT COMPLETE
- SB3 X1+3
- TNG X1,(/ISD/MNR5,ISD,/MONITOR/MNR5) IF REQUEST
- ZR X2,BNJ IF NO MORE REQUESTS TO PROCESS
- EQ MTRX RETURN TO PROGRAM MODE
- * PROCESS PP REQUEST FROM CONTROL POINT N+1.
- MNR5 SX1 B0+ PRESET RESPONSE
- SB6 MNR6 *CAL* RETURN ADDRESS - NO LIMIT
- SB3 MNR7 *CAL* RETURN ADDRESS - ACTIVITY LIMIT
- EQ CAL CHECK ACTIVITY LIMIT
- MNR6 SA2 B2+16B PARAMETER WORD IN (X6)
- SA5 B2+17B PP CALL IN (X7)
- SB4 -1
- BX7 X2
- BX6 X5
- SA7 APQA
- EQ APQ ASSIGN PP
- MNR7 BX7 X1
- SA7 A5-B1 RETURN STATUS IN (X6)
- EQ MTRX RETURN
- * PROCESS STORAGE MOVE EXIT PROCESSING.
- MNR8 SA1 SMPR STORAGE MOVE REQUESTS
- NZ X1,MTRX IF NOT YET COMPLETE, RETURN
- EQ TSM TERMINATE STORAGE MOVE
- * THE FOLLOWING TABLE MUST BE MAINTAINED IN THE ORDER OF THE
- * PROGRAM MODE EXCHANGE PACKAGE TYPES DEFINED IN *COMSMTR*.
- *
- * ENTRY FORMAT -
- *
- * 24/ 0,18/ PROCESSOR ADDRESS,18/ EXCHANGE PACKAGE ADDRESS
- MNRA VFD 24/0,18/MNR3 CONTROL POINT N+1
- TVFD 18/0,SCA
- VFD 24/0,18/MNR8,18//PROGRAM/SMPXP STORAGE MOVE XP
- VFD 24/0 FIELD LENGTH VERIFICATION XP
- TVFD 18/0,(/CME/MNR,CME,0)
- TVFD 18/0,(/CME/VFLXP,CME,0)
- VFD 24/0 PSEUDO-PP EXCHANGE PACKAGE
- TVFD 18/0,(/BUFIO/MNR1,BUFIO,/MONITOR/MNR)
- TVFD 18/0,(/BUFIO/CPP,BUFIO,0)
- * ALL FOLLOWING ENTRIES WILL HANG *MNR*.
- VFD 24/0,18/MNR,18/IXP CPU 0 IDLE PACKAGE XP
- VFD 24/0,18/MNR CPU 1 IDLE PACKAGE XP
- TVFD 18/0,(/DCP/IXP1,DCP,0)
- VFD 24/0,18/MNR,18/0 ILLEGAL
- VFD 24/0,18/MNR,18/0 ILLEGAL
- CON 0 END OF TABLE
- TITLE UTILITY SUBROUTINES.
- APP SPACE 4
- AAD SPACE 4
- ** AAD - APPLY ADDER INCREMENT TO SRU ACCUMULATOR.
- *
- * NEW SRU = AD (UNITS) + OLD SRU.
- *
- * ENTRY (X1) = INCREMENT (INTEGER FORMAT).
- * (B3) = EXIT ADDRESS.
- * (B4) = OVERFLOW FLAG.
- *
- * EXIT EXITS THRU ROUTINE *AIO* TO APPLY FINAL
- * INCREMENT TO SRU ACCUMULATOR.
- *
- * USES X - 1, 2, 3, 6.
- * A - 2, 3, 6.
- AAD ZR X1,AIO2 IF NO INCREMENT
- SX2 10000000/200B
- IX1 X1*X2
- LX1 7
- EQ AIO1 (X1) = SRU INCREMENT
- ACB SPACE 4,15
- ** ACB - ASSIGN COMMUNICATION BUFFER.
- *
- * *ACB* ALLOCATES A BUFFER FOR COMMUNICATION BETWEEN
- * *CPUMTR* AND A PP. IT IS THE RESPONSIBILITY OF THE
- * PP TO CLEAR THE FIRST WORD OF ITS ASSIGNED BUFFER
- * WHEN COMPLETE. THIS *RETURNS* THE BUFFER TO THE
- * SYSTEM FOR FURTHER USAGE. *CPUMTR* WILL NOT ASSIGN
- * THE BUFFER TO ANYONE ELSE AS LONG AS THE FIRST WORD
- * OF THE BUFFER IS NON-ZERO.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- * (B3) .LT. 0 IF RETURN TO */PROGRAM/APS1*.
- *
- * EXIT (X1) = ADDRESS OF BUFFER.
- * (X1) = 0 IF NO BUFFER AVAILABLE.
- *
- * USES X - 1, 6.
- * A - 1, 6.
- ACB SX6 B0+ INITIALIZE BUFFER INDEX
- ACB1 SX1 X6-MCBLL
- ZR X1,ACB3 IF END OF BUFFER(S)
- SX1 MCB+X6 ADDRESS OF BUFFER
- SX6 X6+MCBL INCREMENT TO NEXT BUFFER
- + SA1 X1 **** PERFORM IN ONE WORD ****
- NZ X1,ACB1 IF ASSIGNED **** PERFORM IN ONE WORD ****
- SA6 A1 **** PERFORM IN ONE WORD ****
- SX1 A1+ ADDRESS OF BUFFER
- ACB2 NG B3,/PROGRAM/APS1 IF CALLED BY *APS*
- JP B3 RETURN
- ACB3 TA1 CBNS,SDA COUNT BUFFER NOT AVAILABLE
- SX6 B1
- IX6 X1+X6
- SA6 A1
- SX1 B0 SET BUFFER NOT AVAILABLE
- EQ ACB2 RETURN
- MCB SPACE 4,10
- ** MCB - MONITOR COMMUNICATION BUFFER(S).
- *
- * THESE BUFFERS ARE USED BY *CPUMTR* TO PASS INFORMATION
- * TO A PP REQUESTED BY IT (SUCH AS *1MA* AND *1MC*).
- * THE ASSEMBLY CONSTANTS ARE DEFINED IN *COMSMSC*.
- *
- * NMCB = NUMBER OF BUFFER(S).
- * MCBL = LENGTH OF BUFFER.
- MCB BSS 0
- .A DUP NMCB
- CON 0 FWA OF BUFFER - NOT BUSY
- BSS MCBL-1
- .A ENDD
- MCBLL EQU *-MCB TOTAL LENGTH OF BUFFER(S)
- ACS SPACE 4,25
- ** ACS - ADVANCE CPU SERVICE CYCLE.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (X1 BITS 0 - 17) = ADDRESS OF FIRST *WQ* ENTRY AT OR
- * BELOW PRIORITY (WITHOUT FLAGS) OF
- * NEW JOB.
- * (X3) = NEW JOB *CWQW* (DELINKED FROM *WQ*).
- * (A3) = ADDRESS OF NEW JOB *CWQW*.
- * (B4) = NEW JOB CPU PRIORITY (WITH FLAGS).
- *
- * EXIT SERVICE CYCLE UPDATED FOR PRIORITY.
- * CPU SCHEDULING ACSUMULATORS AND FLAGS RESET FOR
- * NEW JOB AND ALL *WQ* ENTRIES AT THE SAME CPU
- * PRIORITY.
- * (X7) = *CSAW* FOR NEW SERVICE CYCLE.
- * (B4) = NEW JOB CPU PRIORITY (WITH FLAGS).
- * (B6) = NEW JOB CPU PRIORITY (WITHOUT FLAGS).
- *
- * USES X - 0, 1, 2, 3, 5, 6, 7.
- * A - 1, 2, 6, 7.
- * B - 5, 6.
- ACS BSS 0 ENTRY
- * ADVANCE SERVICE CYCLE FOR PRIORITY AND UPDATE NEW JOB CPU
- * SCHEDULING PARAMETERS.
- SX6 B4
- AX6 3
- SA2 TPRC+X6 GET SERVICE CYCLE FOR PRIORITY
- MX7 6
- SX0 B1
- LX6 3
- LX0 54-0
- SB6 X6 SET PRIORITY WITHOUT FLAGS FOR COMPARISON
- BX6 X7*X2 OLD SERVICE CYCLE
- BX2 -X7*X2
- IX6 X6+X0
- BX7 X7*X6 NEW SERVICE CYCLE
- BX6 X2+X7 MERGE NEW SERVICE CYCLE
- SX2 24B
- SA6 A2+ UPDATE *TPRC* ENTRY
- LX2 45
- BX3 X3+X2 SET SLICE ACTIVE/INCOMPLETE FLAGS
- SX5 A3+
- BX6 X3
- UX0,B4 X3 SET PRIORITY WITH ACTIVE FLAG
- * UPDATE CPU SCHEDULING PARAMETERS FOR ALL *WQ* ENTRIES AT
- * PRIORITY OF NEW JOB.
- ACS1 SA1 X1 GET NEXT *WQ* ENTRY
- SA6 X5 UPDATE PRIORITY FLAGS
- SA7 X5+B1 SET SERVICE CYCLE AND CLEAR ACSUMULATORS
- ERRNZ CSAW-CWQW-1
- SX5 A1
- UX0,B5 X1 UNPACK PRIORITY WITH FLAGS
- BX6 X1+X2 SET SLICE ACTIVE FLAGS
- LE B6,B5,ACS1 IF PRIORITY (NO FLAGS) SAME AS NEW JOB
- JP B3 RETURN
- AIO SPACE 4
- ** AIO - APPLY IO INCREMENT TO SRU ACCUMULATOR.
- *
- * IO = S2*MS + S3*MT + S4*PF + S5*OD
- *
- * NEW SRU = IOM*IO + OLD SRU
- *
- * ENTRY (X1) = INCREMENT (INTEGER FORMAT).
- * (X2) = INCREMENT INDEX.
- * (B3) = EXIT ADDRESS.
- * (B4) = OVERFLOW FLAG.
- *
- * USES X - 0, 1, 2, 3, 4, 6.
- * B - 4, 6.
- * A - 2, 3, 4, 6.
- AIO ZR X1,AIO2 IF NO INCREMENT
- SA2 AIOA+1+X2 INCREMENT MULTIPLIER (S2, S3, S4 OR S5)
- SA3 B7+MP3W IO MULTIPLIER (IOM)
- MX6 -30
- PX1 X1
- BX3 -X6*X3 ISOLATE IOM
- NX1 X1
- PX3 X3
- RX1 X2*X1 IO = (S2, S3, S4, S5) * (MS, MT, PF, OD)
- NX3 X3
- RX1 X3*X1 IOM * IO
- UX1,B6 X1
- LX1 B6 (X1) = SRU INCREMENT
- NE B1,B4,AIO1 IF NOT PF ACCUMULATOR
- SB4 B4+1
- * UPDATE SRU ACCUMULATOR.
- * (X1) = INCREMENT.
- * (B4) = 0B FOR NO OVERFLOW,
- * 1B FOR ADDER OVERFLOW,
- * 2B FOR PF OVERFLOW,
- * 4B FOR TAPE OVERFLOW,
- * 10B FOR MS OVERFLOW,
- * 20B FOR MP OVERFLOW,
- * 40B FOR AUC OVERFLOW,
- * 100B FOR OD OVERFLOW.
- AIO1 SA2 B7+SRUW SRU ACCUMULATOR
- MX0 -42
- BX6 X2
- SA4 B7+MP3W CHECK FOR SRU ACCUMULATION DISABLED
- NG X4,AIO2 IF SRU ACCUMULATION DISABLED
- BX4 -X0*X2 ISOLATE ACCUMULATOR
- SA3 B7+STLW GET SRU LIMIT
- IX4 X4+X1 APPLY INCREMENT
- BX3 -X0*X3 ISOLATE LIMIT VALUE
- IX6 X2+X1
- IX4 X3-X4 COMPARE LIMIT TO NEW VALUE
- SA6 A2
- PL X4,AIO2 IF LIMIT NOT EXCEEDED
- SB4 B4+20000B SET SRU LIMIT FLAG
- AIO2 NZ B4,AIO3 IF OVERFLOW OR LIMIT HAS OCCURRED
- JP B3
- AIO3 SA2 B7+SRUW SET LIMIT FLAGS
- SX0 B4
- BX3 X2
- LX0 43 POSITION FLAGS
- LX3 59-53
- NG X3,RB3 IF RESOURCE LIMITS DISABLED
- BX6 X2+X0
- SA6 A2
- JP B3 EXIT
- AIOA CON "S5SRM","S4SRM","S3SRM","S2SRM" S5,S4,S3,S2
- AMP SPACE 4,10
- ** AMP - ADD MAP PROCESSOR OR OPTICAL DISK INCREMENT.
- *
- * IF OD, EXITS TO *AIO* TO APPLY IO INCREMENT.
- *
- * IF MAP, NEW SRU = M1 * MAP MULTIPLIER * (X1) + OLD SRU
- *
- * ENTRY (X1) = INCREMENT (INTEGER FORMAT)
- * (X2) = 0 IF MAP INCREMENT,
- * 1 IF OD INCREMENT.
- * (B3) = EXIT ADDRESS
- * (B4) = OVERFLOW FLAG
- *
- * EXIT EXITS THRU ROUTINE *AIO* TO APPLY FINAL
- * INCREMENT TO SRU ACCUMULATOR.
- *
- * USES A - 3.
- * B - 4.
- * X - 1, 2, 3, 6.
- AMP ZR X1,AIO2 IF NO INCREMENT
- NZ X2,AMP1 IF OD INCREMENT
- SA3 B7+MPAW GET M1 * MAP MULTIPLIER
- MX6 18
- BX2 X6*X3 ISOLATE MULTIPLIER
- LX2 18
- IX1 X1*X2 M1 * MAP MULTIPLIER * INCREMENT
- ZR B4,AIO1 IF NO OVERFLOW
- SB4 20B SET OVERFLOW FLAG TO MAP
- EQ AIO1 UPDATE SRU ACCUMULATION
- AMP1 SX2 -1 SET INDEX TO *S5*
- ZR B4,AIO IF NO OVERFLOW
- SB4 100B SET OVERFLOW FLAG TO OD
- EQ AIO UPDATE IO SRU ACCUMULATION
- APQ SPACE 4,10
- ** APQ - ASSIGN PP OR IF UNASSIGNABLE ENTER IN REQUEST QUEUE.
- *
- * ENTRY (X6) = PP CALL.
- * (B3) = EXIT ADDRESS.
- * (B4) = INDEX INTO *TFPL* IF LIBRARY SEARCH NOT NEEDED.
- * (B4) = 0 IF LIBRARY SEARCH NEEDED.
- * (B4) .LT. 0 RETURN REQUESTED WHEN PP UNASSIGNABLE.
- * (B7) = CONTROL POINT ADDRESS.
- * NOTE THAT THE CONTROL POINT NUMBER IS ENTERED
- * INTO THE PP CALL BY THIS ROUTINE.
- * (A5) = OUTPUT REGISTER OF REQUESTING PP, IF ANY.
- * (APQA) = PARAMETER WORD.
- * (APQC) = MASK FOR *PPAL* SELECTION.
- *
- * EXIT (X1) = 0 IF PP UNASSIGNABLE AND RETURN REQUESTED.
- * (X1) = -0 IF REJECT FOR STORAGE MOVE.
- * (X1) = *IR* ADDRESS IF PP ASSIGNED.
- *
- * USES X - 1, 2, 3, 4, 7.
- * B - 6.
- * A - 1, 2, 6, 7.
- *
- * PRESERVES X0, B7, B4, B3, A5, A0.
- *
- * CALLS APQ, SPL.
- APQ SA2 PPAL CHECK PP AVAILABILITY
- MX3 20
- LX3 -12
- BX2 X3*X2
- SA3 SCRL CHECK EMERGENCY STEP
- LX3 59-56
- NG X3,APQ8 IF EMERGENCY STEP SET
- * ENTERED HERE FROM *PPQ*.
- APQ1 MX7 20 INITIALIZE PP SELECTION MASK
- LX7 -12
- SA7 APQC
- * CHECK FOR SPECIAL PRE-PROCESSING REQUIRED.
- * EXIT TO *CSP* IF CYBER 810/830.
- * EXIT TO *APQ9* IF CYBER 170.
- TJP (/MONITOR/CSP,CP830,/0CME/APQ9,NCME,/MONITOR/APQ1.0)
- APQ1.0 BX3 X2
- MX4 5
- SA2 CMCL CHECK MOVE REQUESTED
- SX7 B7
- LX4 40-59
- LX7 36-7 MERGE CONTROL POINT NUMBER
- BX6 -X4*X6
- AX2 48
- BX6 X6+X7
- LX2 36
- BX2 X2-X7
- ZR X2,APQ7 IF MOVE REQUESTED
- ZR X3,APQ8 IF NO PP AVAILABLE
- * ENTER HERE FOR SPECIAL *1VP* ASSIGNMENT REQUEST.
- APQ1.1 SB6 APQ2 *SPL* RETURN ADDRESS
- LT B4,B1,SPL IF LIBRARY SEARCH / NO PP RECALL
- SA2 PLDP
- SA1 TFPL-1+B4 GET PP DIRECTORY ADDRESS
- AX2 36
- SX1 X1+
- MX3 1
- ZR X2,APQ7 IF LIBRARY LOCKED
- ZR X1,SPL IF FAST PP LOADER TABLE NOT BUILT
- MX4 18
- SA1 X1 READ DIRECTORY ENTRY
- LX3 41-59
- BX1 -X4*X1
- IX7 X1+X3
- BX7 -X3*X7
- TNO /PROBE/SPL,PROBE
- APQ2 ZR X1,APQ8 IF LIBRARY LOCKED
- SA2 APQC GET SELECTION MASK
- SA1 PPAL ASSIGN NEXT PP
- BX2 X2*X1
- MX3 1
- LX3 -12
- NX2 B6,X2 SELECT NEXT AVAILABLE PP
- SX2 B6
- SX4 B6-11B-1
- AX3 B6,X3
- BX1 X1-X3 CLEAR PP AVAILABLE
- NG X4,APQ2.1 IF NOT SECOND BANK
- * THE PPS IN THE SECOND BANK ARE ASSIGNED IN REVERSE ORDER.
- * PP = (31B-20B+12B+12B-BIT NUMBER) = (35B-BIT NUMBER)
- SX4 35B REVERSE ORDER OF SECOND BANK
- IX2 X4-X2
- APQ2.1 LX2 PPCES
- MX4 48
- R= X3,ASCM
- BX1 X4*X1
- TX2 X2,FP SET PP COMMUNICATION BLOCK ADDRESS
- LX3 48
- BX7 X7+X3
- SA4 APQB-1 PRESET SEARCH OF TABLE
- SA7 X2+B1 SET PP OR (LOAD PARAMETERS)
- MX7 18
- APQ2.2 SA4 A4+B1 GET NEXT TABLE ENTRY
- ZR X4,APQ5 IF END OF TABLE
- SB6 X4 SAVE LOAD PARAMETER ADDRESS
- BX4 X4-X6
- BX4 X7*X4
- NZ X4,APQ2.2 IF PP NAME DOES NOT MATCH
- EQ B4,B6,APQ3 IF *CPUCIO* REQUEST
- TX4 A5-1,-SP
- NZ X4,APQ5 IF NOT PSEUDO-PP REQUEST
- SA4 A5+2 LOAD MB+1
- EQ APQ4 TRANSFER DATA
- APQ3 SA4 /CPUCIO/MB
- APQ4 BX7 X4 MOVE MB TO MB
- SA7 A7+B1
- SA4 A4+B1
- ERRNZ /CPUCIO/MB1-/CPUCIO/MB-1
- BX7 X4 MB1 TO MB+1
- SA7 A7+B1
- SA4 A4+B1
- ERRNZ /CPUCIO/MB2-/CPUCIO/MB1-1
- BX7 X4 MB2 TO MB+2
- SA7 A7+B1
- EQ APQ6 SKIP PARAMETER WORD CHECK
- APQ5 SA4 APQA MOVE PARAMETER WORD
- BX7 X4
- SA7 A7+B1 MOVE TO MB
- APQ6 SX4 B7
- SX7 B7 SET FUNCTION PROCESSING CP ADDRESS
- LX4 24 SET CP ADDRESS
- BX7 X7+X4
- LX4 24-7 SET CP NUMBER
- BX7 X7+X4
- TX4 X2,-FP
- LX4 PPXES-PPCES
- TA7 X4+ACPP,FPX SET CP ASSIGNMENT
- BX7 X1
- MX4 20
- LX4 -12
- BX1 X4*X1
- CX1 X1
- SA6 X2 STORE PP INPUT REGISTER
- BX7 X7+X1
- SA7 A1+
- SA1 B7+STSW INCREMENT PP COUNT
- IX7 X1+X3
- SA7 A1
- SX1 A6 RETURN *IR* ADDRESS
- JP B3 RETURN
- APQ7 BX1 -X1+X1
- NG B4,RB3 IF NO QUEUEING REQUESTED
- APQ8 BX1 X1-X1
- NG B4,RB3 IF NO QUEUEING REQUESTED
- MX4 6
- SA3 APQA
- SX2 PQ
- BX7 X3
- SA7 AQRA
- EQ AQR ASSIGN QUEUE REQUEST
- APQA BSS 1 PARAMETER WORD
- * TABLE OF PP-S REQUIRING SPECIAL PROCESSING FOR *CPUCIO*.
- APQB VFD 18/3L1MS,24/,18/LA1MS
- VFD 18/3L1MI,24/,18/LA1MI
- VFD 18/3L1ML,24/,18/LA1ML
- VFD 18/3L1OD,24/,18//MONITOR/LA1OD
- CON 0 END OF TABLE
- APQC VFD 12/0,20/-0,28/0 *PPAL* SELECTION MASK
- TFPL SPACE 4,10
- ** TFPL - FAST PP LOADER TABLE.
- *
- * THIS TABLE CONTAINS THE ABSOLUTE MEMORY ADDRESS OF THE *PLD*
- * ENTRY FOR THE CORRESPONDING PP PROGRAM. IT IS UPDATED
- * BY *SLL* OR *REC* WHEN A LIBRARY CHANGE OR RELOAD OCCURS.
- TFPL BSS 0
- LOC 1
- LA1MS VFD 17/0,1/1,18/3L1MS,24/0 *1MS* LIBRARY ENTRY ADDRESS
- LA1AJ VFD 17/0,1/1,18/3L1AJ,24/0 *1AJ* LIBRARY ENTRY ADDRESS
- LA1MI VFD 17/0,1/1,18/3L1MI,24/0 *1MI* LIBRARY ENTRY ADDRESS
- LA1RO VFD 17/0,1/1,18/3L1RO,24/0 *1RO* LIBRARY ENTRY ADDRESS
- LA1SJ VFD 17/0,1/1,18/3L1SJ,24/0 *1SJ* LIBRARY ENTRY ADDRESS
- LA1MA VFD 17/0,1/1,18/3L1MA,24/0 *1MA* LIBRARY ENTRY ADDRESS
- LACPM VFD 17/0,1/1,18/3LCPM,24/0 *CPM* LIBRARY ENTRY ADDRESS
- LALDR VFD 17/0,1/1,18/3LLDR,24/0 *LDR* LIBRARY ENTRY ADDRESS
- LA1ML VFD 17/0,1/1,18/3L1ML,24/0 *1ML* LIBRARY ENTRY ADDRESS
- LA1OD VFD 17/0,1/1,18/3L1OD,24/0 *1OD* LIBRARY ENTRY POINTER
- LA1FA VFD 17/0,1/1,18/3L1FA,24/0 *1FA* LIBRARY ENTRY ADDRESS
- LA1RU VFD 17/0,1/1,18/3L1RU,24/0 *1RU* LIBRARY ENTRY ADDRESS
- LA1BP VFD 17/0,1/1,18/3L1BP,24/0 *1BP* LIBRARY ENTRY ADDRESS
- LA3RX VFD 17/0,1/1,18/3L3RX,24/0 *3RX* LIBRARY ENTRY ADDRESS
- LA1CP VFD 17/0,1/1,18/3L1CP,24/0 *1CP* LIBRARY ENTRY ADDRESS
- TMSD EQU *O-1
- LOC 1
- LA6DI VFD 18/1,18/3L6DI,24/0 *6DI* PLD ENTRY ADDRESS
- LA6DJ VFD 18/1,18/3L6DJ,24/0 *6DJ* PLD ENTRY ADDRESS
- LA6DP VFD 18/1,18/3L6DP,24/0 *6DP* PLD ENTRY ADDRESS
- LA6DE VFD 18/1,18/3L6DE,24/0 *6DE* PLD ENTRY ADDRESS
- LA6DX VFD 18/1,18/3L6DX,24/0 *6DX* PLD ENTRY ADDRESS
- LA6DC VFD 18/1,18/3L6DC,24/0 *6DC* PLD ENTRY ADDRESS
- LA6DD VFD 18/1,18/3L6DD,24/0 *6DD* PLD ENTRY ADDRESS
- LA6MX BSS 0 END OF DRIVERS
- LOC *O
- TFPLL EQU *-TFPL FAST PP LOADER TABLE LENGTH
- TPPI SPACE 4,10
- ** TPPI - TABLE OF PRE-PROCESSOR INDICES.
- *
- * THIS TABLE CONTAINS THE PRE-PROCESSOR NAME AND
- * DEFAULT FL/100B CORRESPONDING TO THE INDEX FOR
- * THE *ENEJ* SUBFUNCTION OF THE *EJT* RA+1 CALL.
- * THIS TABLE MUST IMMEDIATELY FOLLOW THE *TFPL*
- * TABLE SO IT CAN BE LOCATED AND REBUILT BY *SLL*
- * AFTER A LIBRARY CHANGE IS MADE.
- TPPI BSS 0
- LOC 0
- VFD 42/4LLDR=,18/0
- VFD 42/4LSORT,18/0
- VFD 42/4LPACK,18/0
- LOC *O
- TPPIL EQU *-TPPI
- AQR SPACE 4,10
- ** AQR - ASSIGN QUEUE REQUEST.
- *
- * ENTRY (X0) = ORDERED QUEUE PARAMETER.
- * (X2) = QUEUE INDEX.
- * = RQ, IMPLIES AN ORDERED QUEUE REQUIRING X0 SET.
- * (X6) = REQUEST.
- * (A5) = OUTPUT REGISTER ADDRESS (PRIORITY PP REQUEST).
- * (B3) = EXIT ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- * (AQRA) = PARAMETER WORD.
- *
- * EXIT (A2) = ADDRESS OF QUEUE ENTRY LINKED TO NEW ENTRY.
- *
- * USES X - 1, 2, 3, 4, 6, 7.
- * B - 6.
- * A - 1, 3, 6, 7.
- *
- * PRESERVES B3, A5, B7, A0.
- AQR SA1 B7+STSW ALLOCATE RECALL SLOT
- ZR X6,* IF PP CALL ZERO
- SA2 TAQR+X2 READ PROCESSING PARAMETERS
- MX7 -4
- BX4 -X7*X1 NEXT FREE RECALL SLOT
- *
- * CONTINUING AT THIS POINT WILL YIELD CATASTROPHIC
- * RESULTS AND COVER UP THE AUDIT TRAIL, SO STOP.
- *
- ZR X4,* IF CONFUSED, HANG
- SB6 B7+RCCW-1
- BX7 X7*X1
- SA3 B6+X4 READ NEXT FREE RECALL SLOT
- SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
- SA4 AQRA GET PARAMETER WORD
- MX6 1
- BX6 X4+X6
- SA6 A3+REPW-RCCW
- UX2,B6 X2 SET RECALL ADDER
- SX3 X3+B6
- SB6 X2 SET PROCESSOR ADDRESS
- IX7 X7+X3
- AX2 18 GET START OF QUEUE
- SA7 A1
- MX7 -18
- BX1 X1-X1
- JP B6 JUMP TO PROCESSOR
- * PLACE ENTRY AT END OF QUEUE.
- * USED FOR PQ AND CQ.
- *
- * LOOP IS REPLICATED FOR PERFORMANCE.
- AQR0 MX1 1 SET NO ROLL FLAG
- AQR1 SA2 X2
- BX3 -X7*X2
- ZR X3,AQR1.1 IF END OF QUEUE
- SA2 X2
- BX3 -X7*X2
- NZ X3,AQR1 IF NOT END OF QUEUE
- AQR1.1 BX2 X7*X2
- BX7 X7-X7 CLEAR END OF QUEUE
- BX7 X1+X7
- SA7 A3
- SX7 A3 EXTEND END OF QUEUE
- BX7 X7+X2 INSERT LINK
- SX1 A3 RETURN QUEUE ADDRESS
- SA7 A2+
- JP B3 RETURN
- * ASSIGN ENTRY TO ORDERED QUEUE.
- AQR2 SA2 X2+ FIND FIRST ENTRY
- MX4 -12
- BX0 X4*X0
- AQR3 BX7 -X4*X2 EXTRACT LINKAGE
- SB6 A2
- ZR X7,AQR4 IF END OF QUEUE
- SA2 X7 READ NEXT QUEUE ENTRY
- IX3 X2-X0
- NG X3,AQR3 IF NOT .LT. THIS QUEUE ENTRY
- AQR4 BX7 X7+X0
- SX3 A3 SET RECALL SLOT ADDRESS
- SA2 B6 REPLACE LINK TO NEW RECALL ENTRY
- SA7 A3
- BX2 X4*X2
- BX7 X2+X3
- SA7 A2+
- JP B3 RETURN
- * PLACE ENTRY AT BEGINNING OF QUEUE.
- AQR5 SA2 X2 PLACE ENTRY AT HEAD OF QUEUE
- BX2 -X7*X2
- SX7 A5
- LX7 18
- BX7 X7+X2
- SA7 A3
- SX7 A3
- SA7 A2
- JP B3 RETURN
- AQRA BSS 1
- TAQR SPACE 4,10
- ** TAQR - TABLE OF QUEUE PROCESSING PARAMETERS.
- *
- * ENTRY 1 WORD
- *T, TAQR 12/ 2000+RC,12/,18/ QS,18/ QP
- * RC RECALL COUNT TO INCREMENT *STSW*.
- * QS START OF QUEUE POINTER.
- * QP QUEUE PROCESSOR.
- TAQR BSS 0
- LOC 0
- BQ VFD 12/2420B,12/0,18/BQRL,18/AQR2 BUFFER MANAGER
- RQ VFD 12/2020B,12/0,18/RQRL,18/AQR2 *MTR* RECALL
- NRQ VFD 12/2420B,12/0,18/RQRL,18/AQR2
- CQ VFD 12/2420B,12/0,18/CQRL,18/AQR1 *CPUCIO* REQUEST QUEUE
- PQ VFD 12/2020B,12/0,18/PQRL,18/AQR1 PP REQUEST QUEUE
- NPQ VFD 12/2420B,12/0,18/PQRL,18/AQR0 PP NO ROLL REQUEST
- PRP VFD 12/2420B,12/0,18/PQRL,18/AQR5 PRIORITY PP REQUEST
- LOC *O
- BNJ SPACE 4,25
- ** BNJ - BEGIN NEW JOB.
- *
- * THIS ROUTINE UPDATES THE CPU TIME FOR THE CURRENTLY ACTIVE
- * JOB (OLD JOB) IN THIS CPU AND STARTS THE HIGHEST PRIORITY JOB
- * (NEW JOB) THAT CAN USE THIS CPU.
- *
- * IF ENTERED AT *BNJ*, (B7) IS THE ACTIVE (OLD JOB) CONTROL
- * POINT AND (X7) IS THE CPU STATUS TO SET FOR THE OLD JOB.
- *
- * IF ENTERED AT *BNJ1*, THE OLD JOB CPU STATUS IS ASSUMED TO
- * HAVE BEEN SET PRIOR TO ENTRY IF NOT *A* OR *B* STATUS.
- *
- * IF THE OLD JOB CPU STATUS IS *A* OR *B* ON ENTRY, THE CPU
- * STATUS WILL BE CHANGED TO *W* AND THE JOB WILL BE INSERTED IN
- * *WQ* ACCORDING TO PRIORITY AND CPU SLICE EXPIRATION CRITERIA.
- *
- * EXIT EXCHANGE PACKAGE AT (B2) RESET FOR PPU USE.
- * RUNNING TIME UPDATED.
- *
- * USES X - ALL.
- * B - 3, 4, 5, 6.
- * A - 1, 2, 3, 4, 5, 6, 7.
- *
- * CALLS ACS, CPT, ESC, /DCP/BNJ, MSM, MSR.
- BNJ SA1 B7+STSW
- MX0 3 CLEAR OLD STATUS AND SET NEW
- LX7 -3
- BX1 -X0*X1
- BX7 X7+X1
- SA7 A1+
- * ENTRY IF CPU STATUS ALREADY SET OR IF *W* STATUS TO BE SET.
- BNJ1 SB3 BNJ2 *CPT* RETURN ADDRESS
- SB6 200B SET CPU SWITCH FLAG
- TJP (/NVE/CPT1,NVE,/CME/CPT1,CME,/MONITOR/CP76,CP176,/MONIT
- ,OR/CPT)
- BNJ2 SA2 X1+STSW GET CONTROL POINT *STSW*
- SX6 B0+
- SX4 1
- SA6 SA+A0 CLEAR CPU SWITCH ACCUMULATED TIME
- LX4 56
- BX7 X4*X2
- SB4 X1+ EXCHANGE PACKAGE ADDRESS IF SUB-CP ACTIVE
- TNZ X7,(/MONITOR/ESC,SUBCP,/MONITOR/BNJ2) IF SUB-CP ACTIVE
- LX1 24
- SB4 X1 EXCHANGE PACKAGE ADDRESS IF NOT SUB-CP
- * UPDATE CPU SLICE ACCUMULATORS AND FLAGS FOR OLD JOB.
- * INCREMENT CPU SLICE ACCUMULATOR BY TIME USED.
- * CLEAR EXTENDED CPU SLICE INCOMPLETE FLAG IF .LT. RECALL CPU
- * SLICE REMAINING IN EXTENDED CPU SLICE.
- * CLEAR CPU SLICE ACTIVE FLAG IF .LT. RECALL CPU SLICE
- * REMAINING IN CPU SLICE.
- * CLEAR RECALL FLAG IF RECALL CPU SLICE LIMIT REACHED.
- * CLEAR RECALL SLICE ACCUMULATOR IF RECALL FLAG CLEARED.
- BNJ3 SA3 B4+CWQW GET *WQ* PARAMETERS
- SA1 B4+STSW GET EXCHANGE PACKAGE *STSW*
- SA4 A3+B1 GET CPU SLICE ACCUMULATORS
- ERRNZ CSAW-CWQW-1
- TAX0 (6,CME,11,CP176,0) SCALE CPU TIME FOR ACCUMULATORS
- MX7 -9
- LX7 27
- BX7 -X7*X3 SERVICE PARAMETERS INDEX
- BX2 X1
- SX6 A0+ACPS+WCPS
- AX2 57
- LX7 -27
- SB3 X2 (B3) .GT. 0 IF *A* OR *B* CPU STATUS
- LX6 -3
- SB5 X2 SET STATUS FOR DRIVER RECALL CHECK
- LE B3,B0,BNJ4 IF NOT TO SET *W* STATUS
- BX6 X1-X6 SET *W* STATUS
- SB5 WCPS-7 SET *W* STATUS FOR DRIVER RECALL CHECK
- SA6 A1+
- BNJ4 TA2 X7+CSAT,JCB GET CPU SCHEDULING PARAMETERS
- GT B3,B0,BNJ5 IF *W* STATUS SET (JOB PREEMPTED)
- NZ X0,BNJ5 IF CPU SLICE INCREMENT NOT NULL
- SX0 1 SET VALUE TO INSURE SLICE EXPIRATION
- BNJ5 SX5 X4 CPU SLICE ACCUMULATOR
- SX7 X2 EXTENDED CPU SLICE LIMIT
- IX5 X5+X0
- IX5 X5-X7 CHECK TIME LEFT IN EXTENDED CPU SLICE
- LX3 59-48 POSITION RECALL FLAG
- NG X5,BNJ6 IF .GE. RECALL SLICE LEFT IN EXTENDED
- MX7 6
- SX1 7 SET TO CLEAR ALL CPU SCHEDULING FLAGS
- BX7 X7*X4 SET TO CLEAR ALL ACCUMULATORS
- LX7 -18
- LE B3,B0,BNJ8 IF *W* STATUS NOT SET
- PL X3,BNJ8 IF RECALL FLAG NOT SET
- LX4 -18
- LX2 -18
- SX6 X4 RECALL CPU SLICE ACCUMULATOR
- SX1 X2 RECALL CPU SLICE LIMIT
- IX6 X6+X0
- IX6 X6-X1
- SX1 7 SET TO CLEAR ALL CPU SCHEDULING FLAGS
- PL X6,BNJ8 IF NO TIME REMAINING IN RECALL SLICE
- SX1 5 SET TO CLEAR ALL BUT RECALL FLAG
- EQ BNJ8 UPDATE ACCUMULATORS AND FLAGS
- BNJ6 IX4 X4+X0 INCREMENT CPU SLICE ACCUMULATOR
- LX4 -18
- SX1 6 SET TO CLEAR NORMAL SLICE AND RECALL FLAGS
- SX6 X4 RECALL CPU SLICE ACCUMULATOR
- IX7 X4-X6 CLEAR RECALL CPU SLICE ACCUMULATOR
- LE B3,B0,BNJ8 IF *W* STATUS NOT SET
- LX2 -18
- SX1 X2+ RECALL CPU SLICE LIMIT
- LX2 -18
- PL X3,BNJ7 IF RECALL CPU SLICE NOT ACTIVE
- IX6 X6+X0
- IX6 X6-X1
- PL X6,BNJ7 IF NO TIME REMAINING IN RECALL CPU SLICE
- IX7 X4+X0 INCREMENT RECALL CPU SLICE ACCUMULATOR
- SX1 B0 SET TO PRESERVE ALL FLAGS
- EQ BNJ8 UPDATE ACCUMULATORS AND FLAGS
- BNJ7 SX2 X2 CPU SLICE RECALL EXTENSION
- IX2 X2+X5 CHECK TIME LEFT IN UNEXTENDED CPU SLICE
- MX1 1
- BX2 -X2
- BX1 X1*X2 SET TO CLEAR SLICE ACTIVE IF LIMIT
- LX1 2-59
- SX1 X1+2 SET TO CLEAR RECALL FLAG
- * WRITE ACCUMULATORS AND UPDATE CPU SCHEDULING FLAGS.
- BNJ8 LX7 18 RESTORE *CSAW*
- LX1 58
- SA7 A4 UPDATE CPU SLICE ACCUMULATORS
- BX3 -X1*X3 CLEAR SELECTED SCHEDULING FLAGS
- SX1 B5
- SX6 B1
- AX1 1
- LX6 57-0
- SX1 X1+B1 (X1) = 0 IF *W* OR *X* STATUS
- BX3 X3+X6 SET DRIVER RECALL NOT REQUIRED
- NZ X1,BNJ9 IF NOT *W* OR *X* STATUS
- NG X3,BNJ9 IF *W* STATUS WITH RECALL
- BX3 -X6*X3 CLEAR DRIVER RECALL NOT REQUIRED
- * INITIALIZE TO RESET *WQ* LINKAGE.
- BNJ9 MX6 42
- LX3 48-59 RESTORE *CWQW*
- SX1 B0+
- LE B3,B0,BNJ14 IF *W* STATUS NOT SET
- SA2 WQRL
- UX0,B4 X3 OLD JOB CPU PRIORITY AND FLAGS
- BX4 X3
- LX4 59-49
- SX7 A3+ OLD JOB *CWQW* ADDRESS
- PL X4,BNJ11 IF CPU SLICE INACTIVE
- * INSERT OLD JOB IN *WQ* AS FIRST AT PRIORITY.
- * LOOP REPLICATED FOR PERFORMANCE.
- BNJ10 SA4 X2
- UX0,B5 X4
- GE B4,B5,BNJ13 IF POSITION FOUND
- SA2 X4
- UX0,B5 X2
- LT B4,B5,BNJ10 IF POSITION NOT FOUND
- EQ BNJ12 SET *WQ* LINKAGE
- * INSERT OLD JOB IN *WQ* AS LAST AT PRIORITY.
- * LOOP REPLICATED FOR PERFORMANCE.
- BNJ11 SA4 X2
- UX0,B5 X4
- GT B4,B5,BNJ13 IF POSITION FOUND
- SA2 X4
- UX0,B5 X2
- LE B4,B5,BNJ11 IF POSITION NOT FOUND
- * SET LINKAGE FOR JOB INSERTED IN *WQ*.
- BNJ12 BX1 X6*X4 CLEAR LINK
- BX7 X1+X7 MERGE NEW LINK
- SX1 A2 SET LINK TO NEXT ENTRY
- SA7 A4
- EQ BNJ14 UPDATE LINK
- BNJ13 BX1 X6*X2 CLEAR LINK
- BX7 X1+X7 MERGE NEW LINK
- SX1 A4 SET LINK TO NEXT ENTRY
- SA7 A2
- * UPDATE OLD JOB PRIORITY FLAGS AND *WQ* LINKAGE.
- BNJ14 BX3 X6*X3
- BX7 X3+X1 MERGE LINK
- SA7 A3+ UPDATE *CWQW*
- * SELECT NEW JOB, UPDATE *WQ* POINTER, AND ADVANCE CPU SERVICE
- * CYCLE IF JOB WITH INACTIVE CPU SLICE SELECTED.
- BNJ15 SA1 WQRL SELECT NEXT JOB
- * EQ /DCP/BNJ (DUAL CPU MACHINE)
- SA3 X1 GET *CWQW* ENTRY
- UX0,B4 X3 UNPACK PRIORITY
- ZR B4,BNJ15 IF NOT VALID *WQ* FIRST ENTRY
- BX7 X6*X3 CLEAR *WQ* LINK
- BX6 -X6*X3 EXTRACT *WQ* LINK
- SA7 A3
- SA6 A1 UPDATE *WQ* POINTER
- BX3 X7
- LX7 59-49
- NG X7,BNJ16 IF ACTIVE CPU SLICE
- SB3 BNJ16 SET *ACS* RETURN ADDRESS
- BX1 X6
- EQ ACS ADVANCE CPU SERVICE CYCLE
- * SET ACTIVE CPU STATUS AND CLEAR *MTR* BYPASS FLAG FOR JOB
- * WITH CPU SWITCH REQUEST. THE SWITCH REQUEST MAY HAVE BEEN
- * FOR A JOB OTHER THAN THE SELECTED NEW JOB.
- BNJ16 SA1 A3+STSW-CWQW GET CPU STATUS
- SA2 CSWL+A0
- LX3 -27
- MX6 -9
- SX7 A0+ACPS+WCPS
- MX5 -3
- BX6 -X6*X3 SERVICE PARAMETERS INDEX
- LX3 9
- LX7 -3
- BX5 -X5*X3 EXCHANGE PACKAGE TYPE
- BX7 X1-X7 SET ACTIVE STATUS
- LX2 -36
- SA7 A1 UPDATE CPU STATUS
- SX2 X2
- ZR X2,BNJ17 IF NO *WQ* ENTRY WITH *MTR* BYPASS SET
- SA2 X2 GET *WQ* ENTRY WITH BYPASS FLAG
- SX7 B1
- LX7 26-0
- BX7 -X7*X2 CLEAR *MTR* BYPASS FLAG
- SA7 A2
- * SET CPU SCHEDULING CMR POINTERS.
- BNJ17 SA4 A3+CSAW-CWQW GET *CSAW* ACCUMULATORS
- SA1 RTCL
- TA2 X6+CSJT,JCB GET CPU SCHEDULING SERVICE PARAMETERS
- SA3 BNJA
- MX6 -36
- MX7 -12
- SX0 X4+ CPU SLICE ACCUMULATOR
- BX1 -X6*X1 REAL TIME MILLISECOND CLOCK
- PX0 X0
- BX6 -X7*X2 CPU SLICE LIMIT
- NO (NON - CME MACHINE)
- SAC 15,40003B,CME,46000B
- * FX0 X0*X3 (CME MACHINE)
- LX2 -12
- UX0 X0
- BX2 -X7*X2 RECALL SLICE LIMIT
- IX6 X6-X0 TIME REMAINING IN CPU SLICE
- IX3 X1+X2 MILLISECOND CLOCK AT END OF RECALL SLICE
- IX0 X6-X2
- IX6 X1+X6 MILLISECOND CLOCK AT END OF CPU SLICE
- PX7 B4,X3 MERGE CPU PRIORITY AND RECALL SLICE LIMIT
- PL X0,BNJ18 IF .GE. RECALL SLICE IN UNEXTENDED SLICE
- BX6 X3 SET TO SWITCH CPU AT END OF RECALL SLICE
- BNJ18 SA6 CSWL+A0 SET CPU SWITCH CONTROL
- SA7 TSCL+A0 SET PRIORITY AND RECALL SLICE LIMIT
- * SET CPU PROGRAM CONTROL CMR POINTERS. NOTE THAT THE OLD
- * EXCHANGE PACKAGE ADDRESS IN *CPAL* IS THE ADDRESS IN THE
- * JOB-S FIELD LENGTH TO WHICH THE SUB-CONTROL POINT EXCHANGE
- * PACKAGE WILL BE COPIED IF A SUB-CONTROL POINT WAS ACTIVE.
- * EXIT IS MADE TO *MTRX* WITHOUT UPDATING *CPAL* AND *ACPL* IF
- * THE OLD AND NEW JOBS ARE THE SAME TO AVOID THE OVERHEAD OF
- * AN EXCHANGE PACKAGE COPY AND BECAUSE THE RA VALUE READ FROM
- * THE NEW EXCHANGE PACKAGE AREA WILL NOT BE CORRECT IF MONITOR
- * MODE WAS ENTERED FROM A PP EXCHANGE.
- SA2 CPAL+A0
- SX1 A4-CSAW NEW JOB EXCHANGE PACKAGE ADDRESS
- LX5 42
- SA3 X1+B1 READ RA
- BX7 X1+X5 SET NEW EXCHANGE PACKAGE ADDRESS AND TYPE
- SX4 X1
- ZR X5,BNJ19 IF CONTROL POINT EXCHANGE PACKAGE
- TX4 SCA SET SYSTEM CONTROL POINT ADDRESS
- BNJ19 MX0 -24
- SB7 X4 NEW CONTROL POINT ADDRESS
- MX6 24
- LX4 24
- BX2 -X0*X2 OLD JOB EXCHANGE PACKAGE ADDRESS
- BX6 X6*X3 NEW JOB RA
- IX0 X1-X2
- BX7 X7+X4 MERGE CONTROL POINT ADDRESS
- ZR X0,MTRX IF RESTARTING OLD JOB
- SA6 ACPL+A0 SET RA FOR *MTR* RA+1 CHECK
- SA7 CPAL+A0 SET EXCHANGE PACKAGE POINTERS
- SX3 B2+ OLD EXCHANGE ADDRESS
- SB2 X1 NEW EXCHANGE ADDRESS
- IX1 X3-X2 EXCHANGE PACKAGE MOVE DIFFERENTIAL
- TNO /NVE/SVS,NVE
- * COPY EXCHANGE PACKAGE.
- * ENTRY FROM *XJP* AND *ESC*.
- * RETURN FROM */NVE/SVS*.
- * (B2) = NEW PROGRAM MODE EXCHANGE PACKAGE ADDRESS.
- * (X1) = EXCHANGE PACKAGE MOVE DIFFERENTIAL.
- * (X3) = ADDRESS OF EXCHANGE PACKAGE FOR COPY.
- BNJ20 ZR X1,MTR IF NO EXCHANGE PACKAGE COPY
- TX2 MCMS SET MACHINE FIELD LENGTH
- SB4 20B (B4) = LENGTH OF MOVE
- LX2 36+6
- BX0 X3 FWA OF EXCHANGE COPY
- SB6 BNJ21 *MSM* *MSR* RETURN ADDRESS
- TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
- BNJ21 SX6 B1 RA = 0, B1 = 1
- BX7 X2+X3 FL, B2
- SA6 X3+B1
- SX4 A5 MERGE FLS AND (A5)
- TX6 XPFE
- LX4 18
- SA7 A6+B1
- LX6 48
- TX1 MECS SET MACHINE FLX
- TLX1 (6,ESM170,0)
- TX2 MECNF
- BX1 X1+X2
- SA6 A7+B1
- TLX1 (36+3,ESM170,36+9)
- TX6 RAEX SET RAE BASE ADDRESS
- TLX6 (36+3,ESM170,36+9)
- BX7 X1+X4
- SA6 A6+B1 (RAX)=0
- SA7 A6+B1 FLX, A5
- BX6 X6-X6
- SA6 A7+B1 (MA) = 0
- TEQ (/MONITOR/BNJ30,CP176,/MONITOR/MTR)
- BNJA CON 0.064P48+1 MICROSECONDS/64 TO MILLISECONDS CONVERSION
- CAL SPACE 4,15
- ** CAL - CHECK ACTIVITY LIMIT.
- *
- * *CAL* ADDS UP THE ACTIVITY ON THE CONTROL POINT
- * (PP-S ACTIVE, TAPE ACTIVITY, AND PP-S IN RECALL),
- * AND CHECKS TO SEE IF THEY EXCEED THE ALLOWED LIMIT.
- * IF THE CONTROL POINT IS THE SYSTEM CONTROL POINT,
- * PP-S ACTIVE ARE NOT INCLUDED IN THE SUM.
- *
- * ENTRY (B3) = RETURN ADDRESS IF ACTIVITY LIMIT.
- * (B6) = RETURN ADDRESS IF NO LIMIT.
- *
- * USES X - 2, 3, 4.
- * B - 5.
- * A - 2.
- CAL SA2 B7+STSW GET CONTROL POINT STATUS
- MX3 -4
- LX2 -4
- BX4 -X3*X2 PP RECALL, TAPE ACTIVITY
- TB5 B7,-SCA
- LX2 4-48
- ZR B5,CAL1 IF SYSTEM CONTROL POINT
- BX2 -X3*X2
- IX4 X2+X4 INCLUDE PP ACTIVITY COUNT
- CAL1 SX2 X4-NPPCP
- PL X2,RB3 IF ACTIVITY LIMIT
- JP B6 RETURN
- CIA SPACE 4,20
- ** CIA - CHECK *IAF* ACCESSIBILITY.
- *
- * *CIA* CHECKS IF *IAF* IS ACCESSIBLE BY LOOKING AT THE
- * SUBSYSTEM CONTROL POINT TABLE (SSCT). THE *IAF* STATUS WORD
- * STSW IS ALSO CHECKED FOR AN ERROR FLAG, BECAUSE IAF MUST BE
- * CONSIDERED INACCESSIBLE IF AN ERROR FLAG IS SET SO THAT *PP*S
- * AT IAF-S CONTROL POINT WILL DROP AND ALLOW *1AJ* TO PROCESS
- * THE ERROR FLAG.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- *
- * EXIT (B4) = 0, IF *IAF* IS ACCESSIBLE AND NO ERROR FLAGS
- * ARE SET.
- * .NE. 0, IF *IAF* IS UNACCESSIBLE OR AN ERROR FLAG
- * IS SET.
- * (X2) = SSCT WORD.
- *
- * USES X - 0, 2, 3.
- * A - 2, 3.
- * B - 4.
- CIA SA2 SSCP GET SSCT ADDRESS
- SB4 B1 SET RETURN PARAMETER NON-ZERO
- AX2 12
- SA2 X2+ GET SUBSYSTEM CONTROL POINT TABLE ENTRY
- PL X2,RB3 IF *IAF* NOT ACCESSIBLE
- SA3 VCPT*200B+STSW CHECK FOR ERROR FLAG
- MX0 -12
- LX3 -36
- BX3 -X0*X3
- SB4 X3 INDICATE IF IAF IS ACCESSIBLE
- JP B3 RETURN
- CJS SPACE 4,20
- ** CJS - CHECKS JOB STATUS FOR THE FOLLOWING ITEMS.
- *
- * MODE ERRORS, PROGRAM STOPS, TIME AND SRU LIMITS.
- *
- * ENTRY (B4) = EXIT ADDRESS.
- * (B6) = EXCHANGE PACKAGE ADDRESS TO BE CHECKED.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT EXITS TO SEF IF ERRORS DETECTED.
- *
- * USES X - 2, 3, 4, 6, 7.
- * A - 2, 3, 4.
- CJS SA3 B6+B1 READ RA
- AX3 36
- SA2 B6 READ P
- SA4 A3+B1 READ FL
- AX2 36
- AX4 36
- IX7 X2+X3 RA + P
- IX6 X2-X4 P - FL
- PL X6,CJS2 IF P .GE. FL
- AX6 X2,B1
- ERX1 X7 READ RA + P
- R= X7,TLET PRESET TIME LIMIT ERROR FLAG
- ZR X6,CJS3 IF P = 0, 1
- CJS1 SA2 B7+SRUW CHECK FOR LIMITS
- MX4 6
- BX6 X4*X1
- LX1 X2,B1
- ZR X6,CJS2 IF PROGRAM STOP
- LX2 59-56
- BX4 X2+X1
- NG X4,CJS5 IF LIMIT
- SA1 B7+STSW READ CP STATUS
- TJP (/MONITOR/CJS7,CP176,B4)
- CJS2 SX7 PSET SET PROGRAM STOP ERROR FLAG
- JP SEF
- CJS3 ZR X2,CJS4 IF NOT SETCORE
- NZ X1,CJS1 IF RA+1 NOT PROCESSED
- CJS4 SA4 A4+B1 CLEAR EXIT MODE BITS
- SA2 MABL CHECK MAINFRAME TYPE
- MX6 2
- ERX3 X3 READ (RA)
- LX2 59-47
- LX6 -7
- AX3 51
- PL X2,CJS4.5 IF CYBER 170-8X5
- BX6 -X6*X4
- SA6 A4
- CJS4.5 R= X7,ARET
- ZR X3,SEF IF ARITHMETIC ERROR
- AX3 54-51 SHIFT OFF MODE FLAG BITS
- NZ X3,SEF IF NOT PARITY ERROR
- NG X2,CJS4.6 IF CYBER 170-8X5
- LX2 20-16
- CJS4.6 PL X2,SEF IF NOT A CYBER 170
- SX7 PEET SET PARITY ERROR
- EQ SEF SET ERROR FLAG
- CJS5 NG X1,CJS6 IF TIME LIMIT
- SX7 SRET SET SRU LIMIT FLAG
- CJS6 SA2 B7+TFSW CHECK FOR INTERACTIVE JOB
- MX6 12
- BX6 X6*X2 EJT ORDINAL
- LX6 12
- CX2 X6,EJT CONVERT EJT ORDINAL TO OFFSET
- MX6 -4
- TA2 X2+JSNE,EJT GET CONNECTION STATUS FROM EJT ENTRY
- AX2 7
- BX2 -X6*X2 CONNECTION STATUS
- SX6 OLCS
- BX6 X2-X6
- ZR X6,RB4 IF ON-LINE INTERACTIVE JOB
- R= X1,DTCS
- BX2 X1-X2
- ZR X2,RB4 IF DETACHED INTERACTIVE JOB
- TA2 SP CHECK PSEUDO-PP IR
- SX4 7600B CONTROL POINT MASK
- SX3 B7
- AX2 36-7
- BX2 X4*X2
- BX3 X2-X3
- ZR X3,RB4 IF PSEUDO-PP ASSIGNED TO THIS C.P.
- EQ SEF SET ERROR FLAG
- CPT SPACE 4,30
- ** CPT - UPDATE CPU TIME AND SRU ACCUMULATOR.
- *
- * CP = S0 * CP0 * SC + S1 * CP1 * SC
- * S0 = SITE DEFINABLE CPU MULTIPLIER FOR CPU 0.
- * S1 = SITE DEFINABLE CPU MULTIPLIER FOR CPU 1.
- * CP0 = CPU TIME USED BY CPU 0 IN MACHINES UNITS.
- * CP1 = CPU TIME USED BY CPU 1 IN MACHINES UNITS.
- * SC = SCALING FACTOR TO CONVERT MACHINES UNITS INTO
- * QUARTER NANOSECONDS.
- * MACHINE UNITS ARE MILLISECONDS FOR CYBER 6000,
- * CYBER 70 AND CYBER 171 - 175 MAINFRAMES.
- * MACHINE UNITS ARE 27.5 NANOSECONDS FOR CYBER 176.
- * MACHINE UNITS ARE MICROSECONDS FOR CYBER 8X5.
- *
- * NEW SRU = CPM*CP + OLD SRU
- *
- * ENTRY (B3) = EXIT ADDRESS.
- *
- * EXIT (X1) = *CPAL* SHIFTED LEFT CIRCULAR 36 BITS.
- * (X6) = UPDATED CP ACCUMULATOR (QUARTER NANO SECONDS)
- * (X0) = CPU TIME SINCE CPU SWITCH IN MACHINE UNITS.
- *
- * USES X - 0, 1, 2, 3, 6, 7.
- * B - 4, 6.
- * A - 1, 2, 3, 6, 7.
- CPT SA1 RTCL READ MACHINE UNITS
- SA2 CL+CPBT+A0 READ BASE TIME
- MX7 -36
- BX6 -X7*X1 MILLISECOND CLOCK
- SA6 A2 SET NEW BASE TIME
- IX0 X6-X2 TIME USED IN MACHINE UNITS
- * ENTER HERE IF OTHER THAN MILLISECOND CLOCK USED.
- * (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
- CPT1 SA1 CPAL+A0
- SA2 SA+A0
- SA3 CPTA+A0
- LX1 -42
- IX6 X2+X0
- IX3 X3*X0 SCALE CPU TIME FOR CPU TYPE
- SX2 X1 EXCHANGE PACKAGE TYPE
- SA6 SA+A0 UPDATE TIME ACCUMULATED SINCE CPU SWITCH
- BX0 X6
- NZ X2,CPT5 IF INTERNAL *CPUMTR* EXCHANGE PACKAGE
- * UPDATE CPU TIME AND SRU ACCUMULATOR.
- LX1 18 POSITION CONTROL POINT ADDRESS
- SA2 CPTW+X1 READ CONTROL POINT ACCUMULATOR
- IX6 X3+X2
- SA6 A2
- SA2 X1+CPLW READ TIME LIMIT WORD
- IX7 X2-X6
- PX3 X3
- NG X7,CPT4 IF TIME LIMIT
- CPT2 SA2 X1+MP3W READ CPM
- NG X2,RB3 IF SRU ACCUMULATION DISABLED
- AX2 30
- PX2 X2
- NX7 X3
- NX2 X2
- SA3 CPTB CONVERT TO MILLIUNITS
- RX2 X2*X7 CPM*CP
- RX2 X2*X3 CPM * CP / 4000000
- SA3 X1+SRUW READ SRU ACCUMULATOR
- UX2,B4 X2
- LX2 B4
- IX7 X3+X2
- SA7 A3
- SA3 X1+STLW READ SRU LIMIT
- MX2 -42
- BX7 -X2*X7
- BX3 -X2*X3
- IX3 X7-X3
- PL X3,CPT3 IF SRU LIMIT
- JP B3 RETURN
- CPT3 SA2 X1+SRUW SET SRU LIMIT FLAG
- SX7 B1
- BX3 X2
- LX7 56
- LX3 59-53
- NG X3,RB3 IF RESOURCE LIMITS DISABLED
- BX7 X2+X7
- SA7 A2
- JP B3 RETURN
- CPT4 SA2 X1+SRUW SET TIME LIMIT FLAG
- BX7 X2
- LX7 59-53
- NG X7,CPT2 IF RESOURCE LIMITS DISABLED
- SX7 B1
- LX7 58
- BX7 X2+X7
- SA7 A2
- EQ CPT2 CHECK SRU LIMIT
- * UPDATE CPU TIME FOR INTERNAL *CPUMTR* EXCHANGE PACKAGE.
- CPT5 LX1 42 POSITION EXCHANGE PACKAGE ADDRESS
- SA2 X1+CTMW UPDATE ACCUMULATOR
- IX6 X2+X3
- LX1 -24 POSITION *CPAL* TO CONTROL POINT
- SA6 A2
- JP B3 RETURN
- CPTA CON 4000000 QUARTER NANOUNITS PER MACHINE UNIT * S0
- CON 4000000 QUARTER NANOUNITS PER MACHINE UNIT * S1
- CPTB DATA 0.25E-6 MILLISECONDS PER QUARTER NANOSECOND
- CPTC CON 4000000.0 QUARTER NANOUNITS PER MILLISECOND
- EFP SPACE 4,20
- ** EFP - EXECUTE FUNCTION POST PROCESSOR OVERLAY.
- *
- * ENTRY (X5) = 12/0, 48/OUTPUT REGISTER RESPONSE.
- * (X7) = OVERLAY CALL PARAMETERS.
- * (B4) = OVERLAY PLD POINTER.
- * (B3) = RETURN ADDRESS.
- *
- * EXIT OUTPUT REGISTER RESPONSE SET IN WORD *SBFP + 0* IN
- * EXTENDED PP COMMUNICATION BLOCK.
- * PARAMETERS SET IN WORD *SBFP + 1* OF EXTENDED PP
- * COMMUNICATION BLOCK.
- * *BOTM* FUNCTION ISSUED TO PP.
- * TO *HNG* IF OVERLAY NOT CM RESIDENT.
- *
- * *BOTM* FUNCTION FORMAT -
- *
- * 12/ *BOTM*,24/ OVERLAY CODE FWA,24/ *SBFP + 2* ADDRESS
- *
- * USES X - 1, 2, 3, 4, 7.
- * A - 1, 3, 4, 7.
- EFP BSS 0 ENTRY
- * SET PARAMETERS AND OUTPUT REGISTER RESPONSE.
- * A *PRLM* WILL BE SET IN THE OUTPUT REGISTER IF THERE IS A
- * MOVE REQUEST FOR THE CP/PCP IN CASE STORAGE MOVE HAD BEEN
- * ENABLED PREVIOUSLY.
- TX3 A5-1,-FP
- SA1 CMCL
- LX3 PPXES-PPCES
- TA3 X3+ACPP,FPX GET CP/PCP ASSIGNMENT
- SA4 B4 GET PLD POINTERS
- SA7 A3+SBFP+1-ACPP SET CALL PARAMETERS
- BX3 X3-X1
- BX7 X5
- AX3 48
- SX1 A7+B1 COMMUNICATION BLOCK POINTER FOR CALL
- NZ X3,EFP1 IF NO MOVE REQUEST FOR CP/PCP
- SX2 PRLM SET PAUSE REQUEST
- LX2 48
- BX7 X7+X2
- EFP1 AX4 24
- SA7 A7-B1 SET OUTPUT REGISTER
- * ISSUE *BOTM* FUNCTION TO PP.
- SX4 X4+1-400000B
- SX7 BOTM
- LX4 24 OVERLAY CODE FWA
- LX7 48
- BX4 X4+X1
- BX7 X7+X4
- SA7 A5+ SET *BOTM* FUNCTION AND PARAMETERS
- JP B3 RETURN
- EPR SPACE 4,15
- ** EPR - ENTER PROGRAM REQUEST.
- * THIS ROUTINE CAN ONLY BE ENTERED FROM CPU-0 IF BOTH
- * CPU-S ARE IN USE. THIS INSURES THAT *PR* IS
- * INTERLOCKED PROPERLY.
- *
- * ENTRY (X0) = REQUEST BIT.
- *
- * USES X - 2, 6.
- * B - 3, 6.
- * A - 2, 6.
- *
- * CALLS RCC.
- EPR SA2 PR SET REQUEST BIT
- SB3 MTRX SET *RCC* RETURN ADDRESS
- TB6 SCA SET EXCHANGE PACKAGE ADDRESS
- BX6 X2+X0
- SA6 A2
- EQ RCC RECALL CPU
- IAA SPACE 4,40
- ** IAA - INCREMENT AUC ACCUMULATOR.
- *
- * PARAMETER BLOCK FORMAT -
- *
- *T ADDR 6/ BC,22/ 0,32/ CP
- *T ADDR+1 10/ 0,10/ MS,10/ 0,10/ MT,10/ 0,10/ PF
- *T ADDR+2 10/ 0,10/ OD,20/ MP,20/ AU
- *T ADDR+3 36/ 0,12/ EM,12/ CM
- *
- * BC = BLOCK CODE = 01B.
- * CP = CP TIME (QUARTER NANOUNITS).
- * MS = MS UNITS.
- * MT = MT UNITS.
- * PF = PF UNITS.
- * OD = OD UNITS.
- * MP = MP UNITS.
- * AU = AUC MILLIUNITS.
- * EM = EXTENDED MEMORY SIZE/1000B.
- * CM = CENTRAL MEMORY SIZE/100B.
- *
- * SRU INCREMENT =
- *
- * M1(CP + M2*IO + M3(CP+IO)CM +
- * M4(CP+IO)EC + MM*MP + AU)
- *
- * = M1((1 + M3*CM + M4*EC)CP +
- * (M2 + M3*CM + M4*EC)IO + MM*MP + AU)
- *
- * = (M1 + M1*M3*CM + M1*M4*EC)CP +
- * (M1*M2 + M1*M3*CM + M1*M4*EC)IO + M1*MM*MP + M1*AU
- *
- * = CPM*CP + IOM*IO + M1M*MP + M1*AU.
- *
- * AUC INCREMENT = SRU INCREMENT / M1.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (B7) = CONTROL POINT AREA ADDRESS.
- * (X2) = ABSOLUTE PARAMETER BLOCK ADDRESS.
- *
- * EXIT (B3) = EXIT ADDRESS.
- * (B4) = OVERFLOW FLAG.
- * (B5) = 0, IF NO ERROR.
- * = 1, IF EXCESSIVE INCREMENT.
- * (B7) = CONTROL POINT AREA ADDRESS.
- * (X5) = PRESERVED.
- * TO *AIO1* TO INCREMENT SRU ACCUMULATOR.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 6.
- * B - 4, 5, 6, 7.
- IAA BX3 X2 GET PARAMETER BLOCK CODE
- ERX3 X3
- MX6 6
- BX6 X6*X3
- LX6 6
- SB4 X6
- SB5 B0+ SET NO ERROR
- EQ B4,B1,IAA1 IF CODE = 01
- JP B3 EXIT
- IAA1 SA1 B7+MP2W M1*1000
- LX1 36
- MX0 -18
- BX6 -X0*X1 M12
- AX1 18
- BX1 -X0*X1 M1*1000
- SB4 X1 SAVE M1*1000
- SX4 3 GET *EM* AND *CM*
- IX4 X2+X4
- ERX4 X4
- SB6 X6 SAVE M12
- MX6 -12
- BX1 -X6*X4 CM/100B
- AX4 12
- BX7 -X6*X4 EM/1000B
- MX6 -3
- IX1 X1-X6 ROUND CM/100B WITH 7B
- AX1 3 CM = (CM/100B + 7B)/10B
- SB5 X1 SAVE CM/1000B
- ERRNZ MP2W-MP1W-1 CODE DEPENDS ON CONTIGUOUS WORDS
- SA1 A1-B1 GET M13 AND M14
- LX1 36
- BX6 -X0*X1 ISOLATE M14
- IX7 X7*X6 M14 * EM/1000B
- AX1 18
- BX1 -X0*X1 ISOLATE M13
- SX6 B5 CM/1000B
- IX1 X6*X1 CM/1000B * M13
- IX1 X1+X7 M13*CM + M14*EC
- BX7 X1
- MX6 -54 CHECK *CP* SIZE
- BX4 -X6*X3
- MX6 -32 ISOLATE *CP*
- BX3 -X6*X3
- IX6 X4-X3
- NZ X6,IAA7 IF INCREMENT TOO LARGE
- SX6 B4 M1*1000
- IX1 X1+X6 M1*1000 + M13*CM + M14*EC
- PX3 X3
- PX1 X1
- NX4 X3
- NX1 X1
- SA3 CPTB CONVERT TO MILLIUNITS
- RX1 X1*X4 CPM * CP
- RX1 X1*X3 CPM * CP / 4000000
- UX1,B5 X1
- LX1 B5
- SX4 B1+B1 GET *AU* AND *MP*
- IX4 X2+X4
- ERX4 X4
- MX0 -20
- BX6 -X0*X4 *AU*
- SX3 B4
- IX6 X3*X6 M1*1000 * AU
- IX1 X6+X1 CPM*CP + M1*1000*AU
- LX4 20
- BX6 -X0*X4 *OD* (SET FOR IO LOOP INITIAL PASS)
- SA3 B7+MPMW GET M1 * MAP MULTIPLIER
- LX4 20
- BX4 -X0*X4 *MP*
- LX3 20
- BX3 -X0*X3
- IX3 X3*X4 MP * M1M
- IX1 X1+X3 CPM*CP + M1*1000*AU + MP*M1M
- SX3 B6+ M12
- IX7 X7+X3 M12 + M13*CM + M14*EC
- PX7 X7
- NX7 X7
- SX4 B1+ GET *IO* COMPONENTS
- IX4 X4+X2
- ERX4 X4
- SB5 B0+ INITIALIZE INDEX
- LX4 20
- IAA2 MX3 -10
- ZR X6,IAA3 IF NO INCREMENT
- LX3 10
- BX3 -X3*X6
- NZ X3,IAA7 IF INCREMENT TOO LARGE
- PX6 X6
- SA3 B5+AIOA GET MULTIPLIER
- NX6 X6
- RX6 X3*X6 IO = (S2, S3, S4, S5) * (MS, MT, PF, OD)
- RX3 X6*X7 IOM*IO
- UX3,B6 X3
- LX3 B6
- IX1 X1+X3
- IAA3 LX4 -20
- BX6 -X0*X4 ISOLATE INCREMENT
- SB5 B5+1
- SB6 4
- NE B5,B6,IAA2 IF MORE *IO* COMPONENTS
- BX4 X1 DIVIDE BY M1*1000 FOR AUC INCREMENT
- SX3 B4
- SB4 B7 SAVE CONTROL POINT ADDRESS
- IX6 X4/X3 AUC INCREMENT
- SB7 B4 RESTORE CONTROL POINT ADDRESS
- MX0 19 CHECK FOR INCREMENT TOO LARGE
- BX3 X0*X1
- NZ X3,IAA7 IF SRU INCREMENT TOO LARGE
- MX0 31
- BX3 X0*X6
- NZ X3,IAA7 IF AUC INCREMENT TOO LARGE
- * ADD INCREMENT TO AUC ACCUMULATOR.
- SB4 40B PRESET OVERFLOW FLAG
- SA2 B7+AUCW GET AUC ACCUMULATOR
- BX3 -X0*X2
- IX3 X3+X6 ADD INCREMENT
- BX7 X0-X3
- NZ X7,IAA4 IF NOT MAXIMUM
- SX3 B0+ SET ACCUMULATOR = 0
- EQ IAA6 SET NEW ACCUMULATOR VALUE
- IAA4 BX7 X0*X3 CHECK FOR OVERFLOW
- ZR X7,IAA5 IF NO OVERFLOW
- BX3 -X0*X3 INCREMENT TO OVERFLOW VALUE - MAXIMUM
- EQ IAA6 SET NEW ACCUMULATOR VALUE
- IAA5 SB4 B0+ CLEAR OVERFLOW FLAG
- IAA6 BX6 X0*X2 SET NEW VALUE INTO AUCW
- BX6 X6+X3
- SA6 A2
- SB5 B0 SET NO ERROR FOR RETURN
- EQ AIO1 INCREMENT SRU ACCUMULATOR
- IAA7 SB5 B1+ SET EXCESSIVE INCREMENT ERROR
- JP B3 EXIT
- IBF SPACE 4,20
- ** IBF - ISSUE *BOTM* FUNCTION.
- *
- * *IBF* FORMATS AND ISSUES A *BOTM* FUNCTION TO *PPR* TO
- * EXECUTE AN OVERLAY PROGRAM VIA A BOOTSTRAP LOADER. *IBF*
- * ALLOCATES A PP SAVE AREA, MOVES THE PP-S OUTPUT REGISTER AND
- * MESSAGE BUFFER TO IT, PRESETS A THREE-WORD BOOTSTRAP, SETS IT
- * IN THE PP SAVE AREA, AND THEN ISSUES THE *BOTM* TO THE PP.
- *
- * THE PRESETTING USES INFORMATION LOCATED IN THE FOURTH WORD OF
- * THE BOOTSTRAP, DESCRIBED BELOW AS *BS+3*.
- *
- * ENTRY (X3) = 12/ 0, 24/ BP, 12/0, 6/OX, 6/BX.
- * BP = *BOTM* PARAMETERS FOR BYTES 3 AND 4.
- * OX = *TFPL* INDEX OF OVERLAY.
- * BX = *TFPL* INDEX OF BOOTSTRAP.
- * (A5) = *OR* ADDRESS.
- * (B5) = RETURN ADDRESS IF *SYSEDIT* ACTIVE OR NO PP
- * SAVE AREA AVAILABLE.
- * (BS+3) = 12/2000B+PA, 48/ PP.
- * PA = PRESET ALGORITHM.
- * PP = PRESET PARAMETERS.
- * WHEN A PP SAVE AREA IS USED, THIS FIELD
- * MUST BE FORMATTED AS FOLLOWS.
- * 12/ L1, 12/ L2, 12/ F1, 12/ F2.
- * L1 = LENGTH OF THE FIRST BLOCK SAVED.
- * L2 = LENGTH OF THE SECOND BLOCK SAVED.
- * F1 = FIRST BYTE ADDRESS OF FIRST BLOCK.
- * F2 = FIRST BYTE ADDRESS OF SECOND BLOCK.
- * *DSDI* USES THIS INFORMATION.
- *
- * EXIT TO *SPL* IF BOOTSTRAP CAN BE EXECUTED.
- * TO *B5* RETURN ADDRESS VIA *REJ* IF BOOTSTRAP CANNOT
- * BE EXECUTED.
- *
- * USES X - 0, 1, 3, 4, 5, 6, 7.
- * A - 1, 3, 4, 6, 7.
- * B - 4, 6.
- *
- * CALLS MSM, MSR, SPL.
- IBF BSS 0 ENTRY
- MX4 -6
- BX4 -X4*X3
- AX3 6
- SX1 X3
- SA4 X4+TFPL-1 GET BOOTSTRAP *TFPL* ENTRY
- SA1 X3+TFPL-1 GET OVERLAY *TFPL* ENTRY
- SX6 X4
- SX7 X1
- ZR X6,REJ IF BOOTSTRAP ENTRY NOT INITIALIZED
- ZR X7,REJ IF OVERLAY ENTRY NOT INITIALIZED
- LX7 18
- BX6 X6+X7
- SA6 T1 SAVE PLD POINTERS
- * ALLOCATE PP SAVE AREA FOR OVERLAY CALL.
- SA1 PPSP GET PP SAVE AREA POINTER
- MX7 -12
- BX7 -X7*X1 GET NUMBER OF SAVE AREAS
- AX1 12
- SA1 X1-PPSA
- SX0 A5+ SET MOVE SOURCE ADDRESS
- IBF1 SA1 A1+PPSA GET SAVE AREA INTERLOCK WORD
- SX7 X7-1
- NG X7,REJ IF NONE AVAILABLE
- NZ X1,IBF1 IF THIS SAVE AREA IS INTERLOCKED
- SX5 A1+B1 SET MOVE DESTINATION ADDRESS
- TSB4 (7,CME,7,CMUMTR,10B) SET MOVE WORD COUNT
- IX1 X0-X5 SET MOVE DIFFERENCE
- SB6 IBF2 SET RETURN ADDRESS
- TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
- IBF2 SA1 T1
- SX4 X1 RESTORE BOOTSTRAP PLD POINTER
- AX1 18 RESTORE OVERLAY PLD POINTER
- * BUILD BOOTSTRAP CALL.
- R= X0,BOTM BUILD *BOTM* FUNCTION
- AX3 6 POSITION *BOTM* PARAMETERS
- BX0 X0+X3
- SA4 X4 GET BOOTSTRAP PLD ENTRY
- LX0 24 POSITION THE *BOTM* PARAMETERS
- AX4 24 GET BOOTSTRAP FWA
- SB6 X4
- PL B6,HNG IF BOOTSTRAP IS NOT CM RESIDENT
- SA3 X4+4-400000B GET BOOTSTRAP PRESET CONTROL WORD
- SX7 A5 BUILD THE PP SAVE AREA INTERLOCK
- SA4 A3-B1 GET LAST WORD OF BOOTSTRAP
- LX7 48 POSITION OUTPUT REGISTER ADDRESS
- UX6,B6 X3 GET PRESET ALGORITHM AND *BOTM* PARAMETERS
- SA3 A4-B1
- BX7 X7+X6
- SA1 X1+ GET OVERLAY PLD ENTRY
- SA7 X5-1 SET THE PP SAVE AREA INTERLOCK
- SX5 X5+7 FWA OF BOOTSTRAP IN PP SAVE AREA
- AX6 24 POSITION *BOTM* DATA
- BX7 X0+X5
- LX7 24
- IX7 X7+X6
- NZ B6,HNG IF UNUSED PRESET ALGORITHM INDEX
- * EXIT TO THE BOOTSTRAP PRESET CODE WITH THESE VALUES -
- *
- * (A1) = ADDRESS OF OVERLAY-S PLD ENTRY.
- * (A3) = ADDRESS OF SECOND WORD OF BOOTSTRAP.
- * (A4) = ADDRESS OF LAST WORD OF BOOTSTRAP.
- * (B6) = PRESET INDEX.
- * (X1) = OVERLAY-S PLD ENTRY.
- * (X3) = SECOND WORD OF BOOTSTRAP.
- * (X4) = LAST WORD OF BOOTSTRAP.
- * (X5) = FWA OF BOOTSTRAP IN PP SAVE AREA.
- * (X7) = *BOTM* CALL WORD.
- * PRESET ALGORITHM 0.
- *
- * (MB) = OVERLAY LOAD PARAMETERS FROM *SPL*.
- * (MB+1) = *BOTM* CALL WORD.
- BX6 X3
- SA3 A3-B1
- SB6 IBF3 *SPL* RETURN ADDRESS
- SA6 X5+B1
- BX5 X7
- SA7 A5+2 SAVE *BOTM* CALL IN *MB*+1
- BX7 X4
- MX4 18
- SA7 A6+B1
- MX7 6
- BX6 X3
- BX7 X7*X1
- SA6 A6-B1
- LX7 -54
- EQ SPL1.1 BUILD LOAD PARAMETERS
- IBF3 SA7 A5+B1 SAVE LOAD PARAMETERS IN *MB*
- BX7 X5 RESTORE *BOTM*
- EQ PPR1 ISSUE *BOTM*
- JAV SPACE 4,40
- ** JAV - JOB ADVANCE.
- *
- * CONDITIONS REQUIRED FOR ADVANCE-
- *
- * ROLLOUT FLAG SET-
- * 1) NO PP,S ASSIGNED.
- * 2) EJT ENTRY INTERLOCK NOT SET.
- * 3) NO ROLLOUT INHIBITING RECALL REQUESTS.
- * IE. ENTRIES IN BQ OR CQ.
- * 4) EJT ORDINAL IN *TFSW* OF CONTROL POINT.
- * 5) STORAGE MOVE NOT PENDING FOR THIS CP.
- * 6) LEVEL 3 DEADSTART NOT IN PROGRESS.
- *
- * IF ROLLOUT FLAG NOT SET-
- * 1) NO PP,S ASSIGNED.
- * 2) EJT ENTRY INTERLOCK NOT SET.
- * 3) NO CPU ACTIVITY.
- * 4) NO PP IN RECALL.
- * 5) NO TAPE ACTIVITY.
- * 6) NO WAIT RESPONSE/LONG TERM CONNECTION SET. (IF ERROR
- * FLAG IS SET, OR *END* IS IN (RA+1) THIS CONDITION
- * DOES NOT INHIBIT ADVANCE.)
- * 7) EJT ORDINAL IN *TFSW* OF CONTROL POINT.
- * 8) STORAGE MOVE NOT PENDING FOR THIS CP.
- * 9) LEVEL 3 DEADSTART NOT IN PROGRESS.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (B7) = CP ADDRESS.
- *
- * EXIT NONE
- *
- * USES X - 1, 2, 3, 4, 6, 7.
- * B - 4.
- * A - 1, 2, 4, 7.
- *
- * CALLS APQ, /PCP/APC, RB3.
- JAV BSS 0 ENTRY
- SA2 DSSL CHECK FOR DEADSTART IN PROGRESS
- SA1 B7+STSW
- MX6 -3
- BX6 -X6*X2
- SX6 X6-7
- ZR X6,RB3 IF A LEVEL 3 DEADSTART IN PROGRESS
- SX6 7377B
- LX6 -12
- BX3 X6*X1
- MX6 12
- NZ X3,RB3 IF ACTIVITY REMAINS
- SA2 SMRL
- MX4 -12
- BX2 -X4*X2
- LX2 7 CONVERT CP NUMBER TO CPA ADDRESS
- SB4 X2
- EQ B4,B7,RB3 IF MOVE PENDING FOR THIS CP
- SX2 7400B
- LX6 12+11
- BX3 X2*X1
- LX1 59-24
- LX2 -4+35 POSITION TO RECALL COUNT
- NG X1,JAV1 IF ROLLOUT SET
- BX4 X6*X1
- BX3 X1*X2 EXTRACT RECALL COUNT
- NZ X4,JAV1 IF ERROR FLAG
- SA4 B7+SSCW
- ZR X4,JAV1 IF NO SUBSYSTEM CONNECTIONS
- SA2 B7+FLSW READ RA/FL
- MX6 -12
- BX4 -X6*X2
- ZR X4,RB3 IF NO FIELD LENGTH
- LX2 -12
- MX6 -RMSK
- BX2 -X6*X2 EXTRACT RA
- SX6 B1
- LX2 6
- IX2 X2+X6
- ERX2 X2 READ (RA+1)
- LX2 18
- SX2 X2-3REND
- NZ X2,RB3 IF NOT END IN RA+1
- JAV1 NZ X3,RB3 IF ACTIVITY REMAINS
- SA4 B7+TFSW GET EJT ORDINAL
- MX6 -12
- LX4 -48
- BX2 -X6*X4 EJT ORDINAL
- CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
- ZR X2,RB3 IF NO JOB AT CP
- TA4 X4+JSNE,EJT
- SX7 101B JOB ADVANCE AND INTERLOCK MASK
- BX6 X7*X4
- BX7 X4+X7 SET JOB ADVANCE AND INTERLOCK
- NZ X6,RB3 IF JOB ADVANCE OR INTERLOCK ALREADY SET
- SA7 A4
- LX1 59-31-59+24
- JAVA TNG X1,(/PCP/APC,PCP,/MONITOR/JAV2) IF PSEUDO-ROLL OK
- * EQ /TRACE/TRP13 (DURING DEAD JOB TRAP EXECUTION)
- JAV2 SX6 3R1AJ
- R= B4,LA1AJ SET *1AJ* INDEX
- LX6 42
- EQ APQ ASSIGN *1AJ*
- PCQ SPACE 4,10
- ** PPQ - PROCESS PP REQUEST QUEUE.
- *
- * ENTRY NONE.
- *
- * EXIT TO MTRX.
- *
- * CALLS APQ.
- PPQ SA1 PQ+TAQR SET START OF QUEUE
- SA2 SCRL CHECK EMERGENCY STEP
- AX1 18
- SX0 X1
- LX2 59-56
- SB3 PPQ2 *APQ* RETURN ADDRESS
- NG X2,MTRX IF EMERGENCY STEP SET
- PPQ1 SA1 X0+ FIND NEXT ENTRY IN QUEUE
- SX1 X1
- SA2 PPAL
- ZR X1,MTRX IF NO PP REQUEST
- SX0 X0
- LX0 36
- BX0 X0+X1
- MX4 20
- LX4 -12
- BX2 X4*X2
- ZR X2,MTRX IF NO PP AVAILABLE
- SA4 X1+REPW-RCCW GET PARAMETER WORD
- MX7 -12+7 CONTROL POINT AREA ADDRESS MASK
- BX6 X4
- SA6 APQA
- SA4 X1+RECW-RCCW READ PP REQUEST
- LX7 7
- BX6 X4
- BX7 -X7*X1
- SB4 -B3 SELECT RETURN IF PP UNASSIGNABLE
- SB7 X7+
- BX1 X1-X1
- EQ APQ1 ASSIGN PP
- PPQ2 SA2 X0 CHECK FOR PRIORITY PP REQUEST
- BX6 X1
- BX3 X2
- MX7 -18
- AX3 18
- BX3 -X7*X3
- NG X2,PPQ2.1 IF A NO ROLL REQUEST
- ZR X3,PPQ3 IF NOT PRIORITY PP REQUEST
- ZR X1,PPQ4 IF PP NOT ASSIGNED
- LX6 36 RETURN ASSIGNMENT ADDRESS
- SA6 X3+
- PPQ2.1 SX3 -400B SET DECREMENT FOR INHIBIT ROLLOUT COUNT
- PPQ3 ZR X1,PPQ1 IF NO PP AVAILABLE
- AX0 36
- SA1 X0 DELETE ENTRY FROM QUEUE
- BX6 -X7*X2
- BX1 X7*X1
- BX6 X1+X6
- SA6 A1
- MX4 -4
- BX6 X6-X6
- SA1 B7+STSW ADD RECALL SLOT TO FREE LIST
- SX3 X3-20B-RCCW+1
- SA6 A2+RECW-RCCW
- SA6 A2+REPW-RCCW
- BX7 -X4*X1
- BX1 X4*X1
- SX4 A2-B7 COMPUTE RECALL INDEX
- SA7 A2
- IX4 X4+X3
- IX7 X4+X1 SET NEW FREE ENTRY AND RECALL COUNT
- SA7 A1+
- EQ PPQ1 PROCESS NEXT QUEUE ENTRY
- PPQ4 BX6 X6-X6
- SA6 X3 RETURN RESPONSE TO WAITING PP
- SX1 B1+
- SX3 -400B SET DECREMENT FOR INHIBIT ROLLOUT COUNT
- EQ PPQ3 DELETE FROM QUEUE
- RB3 SPACE 4,10
- ** RB3 - RETURN TO ADDRESS IN (B3).
- *
- * ENTRY (B3) = EXIT ADDRESS.
- RB3 JP B3 RETURN
- RB4 SPACE 4,10
- ** RB4 - RETURN TO ADDRESS IN (B4).
- *
- * ENTRY (B4) = EXIT ADDRESS.
- RB4 JP B4 RETURN
- RB5 SPACE 4,10
- ** RB5 - RETURN TO ADDRESS IN (B5).
- *
- * ENTRY (B5) = EXIT ADDRESS.
- RB5 JP B5 RETURN
- RB6 SPACE 4,10
- ** RB6 - RETURN TO ADDRESS IN (B6).
- *
- * ENTRY (B6) = EXIT ADDRESS.
- RB6 JP B6 RETURN
- RCC SPACE 4,20
- ** RCC - RECALL CPU.
- *
- * THIS ROUTINE MAKES THE REQUESTED JOB OR EXCHANGE PACKAGE A
- * CANDIDATE FOR THE CPU. A CPU SWITCH REQUEST WILL BE ENTERED
- * IN *CSWL* FOR THE CURRENTLY EXECUTING OR THE ALTERNATE CPU IF
- * THE JOB IN THAT CPU CAN BE IMMEDIATELY PREEMPTED. A SWITCH
- * REQUEST FOR THE CURRENT CPU WILL BE PROCESSED DIRECTLY BY
- * *CPUMTR* ON EXIT FROM MONITOR MODE. A SWITCH REQUEST FOR THE
- * ALTERNATE CPU WILL BE DETECTED AND PROCESSED THE NEXT TIME
- * THE ALTERNATE CPU EXITS FROM MONITOR MODE OR WILL BE
- * INITIATED BY *MTR*.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (B6) = EXCHANGE PACKAGE ADDRESS.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * B - 4, 5.
- * A - 1, 2, 3, 4, 6, 7.
- RCC BSS 0 ENTRY
- SA1 B6+STSW GET CPU STATUS
- MX4 1 BUILD *W* STATUS
- MX2 -57
- BX6 -X2*X1 CLEAR OLD STATUS
- BX2 X2*X1 STATUS CODE
- LX1 59-24
- LX2 3
- BX6 X6+X4
- SB4 X2+
- SB4 -B4 NEGATIVE STATUS CODE
- * THE FOLLOWING IS A JUMP TABLE INDEXED BY CPU STATUS
- * IN REVERSE ORDER.
- RCCA NG X1,RCC15 IF ROLLOUT SET
- JP RCCA+7+B4 JUMP TO PROCESSOR, LOOP FOR STATUS = 7
- + SA6 A1+ 6 = *I* STATUS, AUTO RECALL
- EQ RCC7 ADD ENTRY TO WQ
- + SA3 B6+CRCW 5 = *X* STATUS, CPU RECALL
- EQ RCC4 DELETE ENTRY FROM *RQ* AND ADD TO *WQ*
- + SA3 B6+CWQW 4 = *W* STATUS, WAITING FOR CPU
- EQ RCC3 DELETE FROM *WQ* AND REINSERT
- + EQ * 3 = ILLEGAL
- + SX1 B1 2 = *B* STATUS, CPU 1 ACTIVE ON JOB
- SX7 B1
- EQ RCC2 SET RECALL FLAG
- + SX1 B0 1 = *A* STATUS, CPU 0 ACTIVE ON JOB
- SX7 B1
- EQ RCC2 SET RECALL FLAG
- + LX1 12+24-59 0 = NULL STATUS, NO ACTIVITY
- AX1 48 EXTRACT ERROR FLAG
- NZ X1,RB3 IF ERROR FLAG
- SA6 A1+ SET *W* STATUS
- EQ RCC7 ENTER IN CPU REQUEST QUEUE
- * SET RECALL FLAG ON ACTIVE JOB TO ENFORCE RECALL CPU SLICE.
- RCC2 SA3 B6+CWQW
- SA1 TSCL+X1
- SX6 12B
- LX6 45
- LX7 48-0
- BX6 X3+X6 SET RECALL AND DRIVER FLAGS IN *CWQW*
- BX7 X1+X7 SET RECALL FLAG IN *TSCL*
- SA6 A3 UPDATE *CWQW*
- SA7 A1 UPDATE *TSCL*
- JP B3 RETURN
- * DELETE ENTRY FROM *WQ*.
- RCC3 SX1 WQRL
- MX6 -18
- SX7 A3 SET *WQ* ENTRY ADDRESS
- EQ RCC5 DELETE QUEUE ENTRY
- * DELETE ENTRY FROM *RQ*.
- RCC4 SX1 RQRL 5 = *X* STATUS, CPU RECALL
- SA6 A1 SET NEW CPU STATUS
- BX7 X7-X7
- MX6 -12
- SA7 A3 CLEAR *RQ* PARAMETERS
- SX7 A3+ SET *RQ* ENTRY ADDRESS
- * DELETE ENTRY FROM *RQ* OR *WQ*.
- * SEARCH LOOP REPLICATED FOR PERFORMANCE.
- RCC5 SA2 X1
- BX1 -X6*X2
- BX0 X7-X1
- SA4 X1
- ZR X0,RCC6 IF ENTRY FOUND
- BX1 -X6*X4
- BX0 X7-X1
- NZ X0,RCC5 IF ENTRY NOT FOUND
- SA2 A4+
- RCC6 BX2 X6*X2 DELETE LINK TO ENTRY
- BX3 -X6*X3 EXTRACT LINK FROM ENTRY
- BX7 X2+X3 SET LINK TO BYPASS ENTRY
- SA7 A2
- * SET RECALL FLAG AND CHECK CPU SLICE RESTART REQUIRED.
- RCC7 SA3 B6+CWQW GET CPU SCHEDULING PARAMETERS
- SA4 B6+CSAW GET SERVICE CYCLE AND ACCUMULATORS
- SX6 12B
- SX0 B1
- LX6 45
- LX0 26-0
- UX7,B4 X3 UNPACK CPU PRIORITY AND FLAGS
- SX1 B4
- BX3 X3+X0 SET *MTR* BYPASS FLAG
- AX1 3 CPU PRIORITY
- BX3 X3+X6 SET RECALL AND DRIVER FLAGS
- SA1 TPRC+X1 GET SERVICE CYCLE FOR PRIORITY
- SA2 WQRL
- LX0 47-26
- BX0 X0*X3 EXTENDED CPU SLICE INCOMPLETE FLAG
- MX7 6
- LX0 49-47
- BX4 X7*X4 CPU SERVICE CYCLE
- BX3 X3+X0 SET SLICE ACTIVE STATUS
- BX7 X7*X1 CURRENT SERVICE CYCLE
- BX1 X4-X7
- ZR X1,RCC8 IF CPU SLICE IN CURRENT SERVICE CYCLE
- * RESTART CPU SLICE IN CURRENT SERVICE CYCLE.
- LX6 1
- SA7 B6+CSAW SET SERVICE CYCLE AND CLEAR ACCUMULATORS
- BX3 X3+X6 SET ACTIVE/INCOMPLETE SLICE FLAGS
- * INSERT JOB IN *WQ* WITH RECALL FLAG.
- * SEARCH LOOP REPLICATED FOR PERFORMANCE.
- RCC8 MX6 42
- SX7 A3+ SET CURRENT JOB WAIT QUEUE ADDRESS
- UX0,B4 X3 GET CPU PRIORITY AND FLAGS
- RCC9 SA4 X2
- UX0,B5 X4
- GT B4,B5,RCC10 IF POSITION FOUND
- SA2 X4
- UX0,B5 X2
- LE B4,B5,RCC9 IF POSITION NOT FOUND
- BX1 X6*X4 CLEAR LINK
- BX7 X1+X7 MERGE NEW LINK
- SX0 A2 SET LINK TO NEXT ENTRY
- SA7 A4
- EQ RCC11 UPDATE LINK
- RCC10 BX1 X6*X2 CLEAR LINK
- BX7 X1+X7 MERGE NEW LINK
- SX0 A4 SET LINK TO NEXT ENTRY
- SA7 A2
- * SET RECALLED JOB *WQ* LINK AND CHECK CPU SWITCH CRITERIA.
- * IF THERE IS A SWITCH REQUEST FOR THE CURRENT CPU ON A DUAL
- * CPU SYSTEM, THE OTHER CPU WILL NOT BE CHECKED BY *RCC* SINCE
- * *BNJ* WILL PERFORM THIS CHECK ON EXIT FROM MONITOR MODE.
- RCC11 SA4 CSWL+A0
- SA1 TSCL+A0
- SA2 RTCL
- BX3 X6*X3 CLEAR POSSIBLE OLD LINK
- BX3 X3+X0 MERGE NEW LINK
- NO
- NO
- NG X4,RCC14 IF PENDING SWITCH REQUEST FOR THIS CPU
- MX7 -36
- UX0,B5 X1 GET THIS CPU ACTIVE JOB PRIORITY
- BX1 -X7*X1
- BX2 -X7*X2
- RCCB GT B4,B5,RCC13 IF NEW JOB .GT. ACTIVE JOB
- * EQ /DCP/RCC (DUAL CPU MACHINE)
- LT B4,B5,RCC14 IF NEW JOB .LT. ACTIVE JOB
- RCC12 IX6 X2-X1
- NG X6,RCC14 IF RECALL SLICE NOT EXPIRED
- * WRITE *CWQW* AND REQUEST CPU SWITCH.
- RCC13 SX1 A3
- MX7 1
- LX1 36
- BX7 X4+X7 SET SWITCH REQUEST FLAG
- BX6 X3
- BX7 X7+X1 SET POINTER TO *WQ* ENTRY WITH BYPASS FLAG
- SA6 A3 WRITE *CWQW*
- SA7 A4 WRITE *CSWL*
- JP B3 RETURN
- * CLEAR *MTR* BYPASS FLAG.
- RCC14 SX7 B1
- LX7 26-0
- BX6 -X7*X3 CLEAR BYPASS FLAG
- SA6 A3 WRITE *CWQW*
- JP B3 RETURN
- * PROCESS RECALL REQUEST WITH ROLLOUT PENDING.
- RCC15 LX1 12+24-59
- SX2 B1
- AX1 48 EXTRACT ERROR FLAG
- LX2 25
- NZ X1,RB3 IF ERROR FLAG SET
- BX6 X2+X6 SET CPU STATUS AT ROLLOUT
- LX2 59-25
- BX6 -X2*X6 CLEAR *W* STATUS
- SA6 A1 SET NULL STATUS
- JP B3 RETURN
- RSC SPACE 4,30
- ** RSC - RETURN SUB-SYSTEM CONTROL POINT ADDRESS.
- *
- * ENTRY (X0) = -7777B
- * (X1) = SUBSYSTEM IDENTIFICATION.
- * (B3) = EXIT ADDRESS.
- * ((B3)-1) = EXIT ADDRESSES FOR ERROR CASES.
- * ((B3)-1) = 12/ A1-XA,18/ A2,12/ A3-XA,18/ A4
- * XA = EXIT ADDRESS = (B3)
- * A1 = EXIT ADDRESS IF SUB-SYSTEM NOT ACTIVE.
- * NOTE - IF THE SUB-SYSTEM FL IS ZERO IT
- * IS TREATED AS A NOT ACTIVE CONDITION.
- * A2 = EXIT ADDRESS IF ILLEGAL SUBSYSTEM ID.
- * A3 = EXIT ADDRESS IF JOB ADVANCE OR DMP= SET.
- * A4 = EXIT ADDRESS IF STORAGE MOVE SET.
- * (B7) = CALLER,S CONTROL POINT ADDRESS.
- *
- * EXIT (X0) = -7777B
- * (X3) = SUB-SYSTEM RA.
- * (X6) = SUB-SYSTEM FL.
- * (A2) = STSW ADDRESS IN SUB-SYSTEM CONTROL POINT AREA.
- *
- * USES X - 1, 2, 3, 6.
- * B - 6.
- * A - 1, 2.
- *
- * CALLS RSI.
- RSC SB6 RSC1 SET RETURN ADDRESS FOR *RSI*
- EQ RSI1 RETURN SUBSYSTEM INFORMATION
- * RETURN FROM *RSI* IF ILLEGAL SUBSYSTEM IDENTIFICATION.
- RSC1 SA1 B3-B1 GET RETURN ADDRESS
- AX1 30
- EQ RSC6 RETURN
- * RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
- + SB6 X3 SHIFT COUNT
- AX2 B6
- LX2 -12
- MX3 -5
- PL X2,RSC4 IF SUBSYSTEM NOT ACTIVE
- SA2 A2+SSCTL GET *SSAT* WORD FOR THIS SUBSYSTEM
- AX2 B6
- BX6 -X0*X2 GET EJT ORDINAL OF SUBSYSTEM
- CX2 X6,EJT CONVERT EJT ORDINAL TO OFFSET
- TA2 X2+JSNE,EJT GET EJT ENTRY
- LX2 -1
- BX6 -X3*X2 GET JOB STATUS
- SX6 X6-EXJS
- LX2 59-6+1
- NZ X6,RSC4 IF SUBSYSTEM NOT AT CONTROL POINT
- NG X2,RSC7 IF JOB ADVANCE SET ON SUBSYSTEM
- SA2 A2+SCHE-JSNE GET CONTROL POINT NUMBER
- AX2 12
- BX6 -X3*X2
- LX6 7 SUBSYSTEM CONTROL POINT ADDRESS
- SA2 X6+JCIW READ JOB CONTROL
- AX2 24
- BX3 X2-X1
- SA1 SMRL CHECK FOR STORAGE MOVE IN PROGRESS
- BX3 -X0*X3
- NZ X3,RSC4 IF SUB-SYSTEM NOT ACTIVE
- BX1 -X0*X1
- LX1 7
- SA2 X6+STSW
- BX1 X1-X6
- ZR X1,RSC5 IF SUBSYSTEM MOVING
- RSC2 SA1 A2+FLSW-STSW GET RA AND FL
- BX6 -X0*X1 EXTRACT FL
- LX1 -RSHF
- ZR X6,RSC4 IF ZERO FL - TREAT AS NOT ACTIVE
- MX3 -RMSK
- BX3 -X3*X1
- LX6 6
- LX3 6
- SA1 A2+SPCW-STSW CHECK DMP= PROCESSING
- AX1 48
- NZ X1,RSC7 IF DMP= IN PROGRESS
- JP B3
- * EXIT IF SUB-SYSTEM NOT ACTIVE.
- RSC4 SA1 B3-B1
- AX1 48
- EQ RSC8 RETURN
- * EXIT IF MOVE FLAG SET.
- RSC5 SA1 B3-B1
- SB6 X6
- EQ B6,B7,RSC2 IF CALLER,S CP .EQ. SUB-SYSTEM,S CP
- RSC6 SB3 X1
- JP B3 RETURN
- * EXIT IF ADVANCE FLAG SET.
- RSC7 SA1 B3-1
- LX1 30
- AX1 48
- RSC8 SB3 B3+X1
- JP B3 RETURN
- RSI SPACE 4,15
- ** RSI - RETURN SUBSYSTEM IDENTIFICATION.
- *
- * ENTRY (X0) = -7777B.
- * (X1) = SUBSYSTEM IDENTIFICATION IF ENTRY AT *RSI1*.
- * (B6) = RETURN ADDRESS IF NOT SUBSYSTEM.
- * RETURN TO (B6)+1 WITH SUBSYSTEM INFORMATION.
- * (B7) = CONTROL POINT ADDRESS OF SUBSYSTEM IF
- * ENTRY AT *RSI*.
- *
- * EXIT (A2) = ADDRESS OF *SSCT* WORD FOR THIS SUBSYSTEM.
- * (X1) = SUBSYSTEM IDENTIFICATION.
- * (X2) = *SSCT* ENTRY FOR THIS SUBSYSTEM.
- * (X3) = SHIFT COUNT TO POSITION TO BYTE IN *SSCT*
- * WORD FOR THIS SUBSYSTEM INFORMATION.
- *
- * USES A - 2.
- * X - 1, 2, 3, 6.
- RSI SA1 B7+JCIW GET SUBSYSTEM IDENTIFICATION
- LX1 36
- BX1 -X0*X1
- RSI1 SX6 X1-LSSI-1
- NG X6,RB6 IF NOT SUBSYSTEM
- SX6 X1-MXSI-1
- PL X6,RB6 IF NOT SUBSYSTEM
- TX3 -1,SSCT GET FWA - 1 OF *SSCT* TABLE
- SB6 B6+1 ADVANCE RETURN ADDRESS
- RSI2 SX6 X6+5
- SX3 X3+1
- NG X6,RSI2 IF *SSCT* WORD NOT REACHED
- LX6 2
- SA2 X3 GET *SSCT* WORD FOR THIS SUBSYSTEM
- LX3 X6,B1
- IX3 X3+X6 SHIFT COUNT FOR SUBSYSTEM BYTE
- JP B6 RETURN
- SCD SPACE 4,10
- ** SCD - SEARCH CENTRAL LIBRARY DIRECTORY.
- *
- * ENTRY (X2) = 42/ ENTRY POINT NAME, 18/
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X7) = ADDRESS OF PST.
- * (X7) = 0 IF NOT FOUND.
- *
- * USES X - 1, 2, 3, 4, 5, 7.
- * A - 1, 2.
- * B - 4, 5.
- SCD SA1 EPDP READ DIRECTORY ADDRESS
- MX4 42
- SX3 B1
- BX7 X4*X2 ENTRY POINT NAME
- AX1 36
- SA2 LBDP FIND END OF DIRECTORY
- SB4 X1 FWA OF DIRECTORY
- AX2 12
- LX3 41-1
- IX2 X2-X3
- SB5 X2 LWA+1 OF DIRECTORY
- EQ SCD2 ENTER LOOP
- SCD1 BX1 -X4*X1
- ZR X5,SCD4 IF ENTRY POINT FOUND
- SB4 A1+B1 RESET FWA OF SEARCH
- SCD2 SX1 B5-B4 LENGTH OF SEARCH INTERVAL
- AX1 1
- EQ B4,B5,SCD3 IF END OF SEARCH
- SA1 B4+X1 GET DIRECTORY ENTRY
- NO
- BX5 X4*X1 ENTRY POINT NAME
- IX5 X7-X5
- PL X5,SCD1 IF PROGRAM .GE. SAMPLE ENTRY
- SB5 A1+
- SCD3 GT B5,B4,SCD2 IF MORE DIRECTORY TO SEARCH
- SX7 B0+ CLEAR REPLY (ENTRY POINT NOT FOUND)
- JP B6 RETURN
- * ENTRY POINT FOUND.
- SCD4 SA2 PSTP GET FWA OF PST
- AX2 12
- BX2 -X4*X2
- IX7 X1+X2 ADDRESS OF PST ENTRY
- JP B6 RETURN
- SEF SPACE 4,15
- ** SEF - SET ERROR FLAG.
- *
- * ENTRY (B7) = CP ADDRESS.
- * (X7) = ERROR FLAG.
- * JOB ACTIVE IN THIS CPU.
- *
- * EXIT TO *SSE* IF SUBCONTROL POINT ACTIVE.
- * TO *MTRX* IF NEW .LT. CURRENT ERROR FLAG.
- * TO *SNS* IN NORMAL CASE.
- *
- * USES X - 1, 2, 4, 6, 7.
- * A - 1, 6.
- * B - 3, 5.
- *
- * CALLS MSC.
- SEF SA1 B7+STSW READ CP STATUS
- BX6 X1
- LX1 59-56
- SEF1 TNG X1,(/MONITOR/SSE,SUBCP,/MONITOR/SEF1)
- MX2 -12
- LX7 36
- LX2 36
- BX4 -X2*X6 GET OLD ERROR FLAG
- IX4 X7-X4
- ZR X7,SEF2 IF NEW ERROR FLAG IS ZERO
- NG X4,MTRX IF OLD .GT. NEW ERROR FLAG
- SEF2 TB3 SCA
- EQ B7,B3,SEF2.1 IF SYSTEM CONTROL POINT
- IX6 X6+X4
- SA6 A1
- EQ SNS SET NULL CPU STATUS
- SEF2.1 SA1 CPAL+A0
- AX1 42
- SX2 X1-IDXT
- SX1 SABT * SYSTEM ABORT.*
- TPL X2,(/MONITOR/SEF4,NVE,/MONITOR/SEF3) IF IDLE PACKAGE
- SEF3 SB5 MTRX SET EXIT ADDRESS FOR *MSC*
- EQ MSC SET MESSAGE AT SYSTEM CONTROL POINT
- SEF4 SB5 ZERL ABORT AFTER POSTING MESSAGE
- EQ MSC SET MESSAGE AT SYSTEM CONTROL POINT
- SFL SPACE 4,15
- ** SFL - SET FIELD LENGTH.
- *
- * ENTRY (B5) = 0 IF NOT *MTR* CALL.
- * (B6) = EXCHANGE PACKAGE ADDRESS.
- * (B7) = CONTROL POINT ADDRESS IF .NE. 0.
- * (B7) = 0 IF CMR REQUEST FROM *MTR*.
- * (X0) = INCREMENT.
- *
- * EXIT TO *MTRX*.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * B - 3, 4.
- * A - 2, 3, 4, 6, 7.
- *
- * CALLS CJS, SJS, SRU.
- SFL BSS 0 ENTRY
- SA2 A0+CPAL FETCH CPU ASSIGNMENT DATA
- SA3 ACML
- SX6 B7
- BX7 -X0 COMPLEMENT INCREMENT
- AX2 24 POSITION CP ADDRESS
- LX7 36-6
- AX6 7-1
- IX7 X3+X7 ADJUST AVAILABLE MEMORY
- SB3 X2+
- SA6 UMTA SET MCT INDEX FOR CP
- SA7 A3+
- * UPDATE EXCHANGE PACKAGE AND CP STATUS.
- SFL1 SA3 B7+FLSW GET FL STATUS WORDS
- AX0 6
- SA4 A3+B1
- TA2 X6,MCT FETCH MCT ENTRY
- MX1 -12
- IX6 X3+X0 UPDATE FIELD LENGTH
- + SA6 A3
- IX7 X4+X0 MODIFY *FLSW* + 1
- BX6 -X1*X6
- SA7 A4 CHANGE CPA WORDS IN 1 WORD OF CODE
- SA3 B6+2
- IX7 X2-X0 ADJUST UNASSIGNED CM ABOVE CP/PCP
- SA7 A2
- ZR B7,SFL2 IF CMR REQUEST
- MX7 -36
- BX4 -X7*X3 CLEAR OLD FL
- LX6 36+6
- BX6 X6+X4 UPDATE EXCHANGE PACKAGE FL
- SA6 B6+2
- SFL2 ZR B5,SFL3 IF NOT *MTR* CALL
- SX6 0
- SA6 SMRL
- ZR B7,MTRX IF CMR REQUEST
- SFL3 NE B3,B7,SFL4 IF CURRENT CPU NOT ACTIVE ON THIS JOB
- SB4 SFL4
- JP CJS CHECK JOB STATUS
- * UPDATE CM USAGE.
- SFL4 SB4 SJS
- NG X0,SRU IF FL DECREASE
- SB4 MTRX
- NZ X0,SRU IF FL INCREASE
- JP MTRX EXIT MONITOR MODE
- SIS SPACE 4,10
- ** SIS - SET *I* STATUS.
- *
- * ENTRY (B7) = CONTROL POINT ADDRESS.
- * JOB ACTIVE IN THIS CPU.
- *
- * EXIT TO *BNJ* BEGIN NEW JOB.
- *
- * USES X - 7.
- SIS BSS 0 ENTRY
- SX7 ICPS SET *I* STATUS FOR *BNJ* ENTRY
- EQ BNJ BEGIN NEW JOB
- SJS SPACE 4,15
- ** SJS - START JOB SCHEDULER.
- *
- * EXIT TO MTRX.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * B - 3, 4.
- * A - 1, 2, 3, 7.
- *
- * CALLS APQ.
- *
- * PRESERVES A5, B7, A0.
- SJS SX7 B7+ SAVE CONTROL POINT ADDRESS
- TB7 SCA SET SYSTEM CONTROL POINT ADDRESS
- SA7 T1
- SB6 SJS0 RETURN ADDRESS IF NO ACTIVITY LIMIT
- SB3 SJS3 RETURN ADDRESS IF ACTIVITY LIMIT
- EQ CAL CHECK ACTIVITY LIMIT
- SJS0 SA3 JSCL READ SCHEDULER CONTROL WORD
- SA1 RTCL
- NG X3,SJS3 IF SCHEDULER ACTIVE
- SA2 SJSA READ *1SJ* CALL
- MX7 24
- AX1 36 EXTRACT TIME IN SECONDS
- MX0 -24
- BX7 X7*X2 CLEAR *1SJ* CALL FLAGS
- MX5 1
- SA7 A2
- ERRNZ SJSB-SJSA-1 CODE ASSUMES *SJSB* = *SJSA* + 1
- SA4 A2+B1
- SA7 A4 RESET FORCED *JSCL* RESET FLAG
- BX7 X3+X5 SET SCHEDULER ACTIVE FLAG
- BX6 X2
- ZR X4,SJS0.1 IF FORCED *JSCL* RESET
- BX4 -X0*X3 EXTRACT RECALL TIME
- IX4 X1-X4 *RTCL* - TIME TO RECALL
- NG X4,SJS1 IF NOT TIME TO PERFORM PERIODIC RECALL
- SJS0.1 AX3 24 EXTRACT RECALL TIME PERIOD
- MX0 -12
- BX4 -X0*X3
- IX7 X7+X4 UPDATE TIME TO RECALL
- AX3 12 EXTRACT QFT/EJT SCHEDULING FREQUENCY
- BX4 -X0*X3
- SX3 B1+
- SB3 X4
- LX4 X3,B3 GENERATE FREQUENCY MASK
- IX4 X4-X3
- BX1 X4*X1
- NZ X1,SJS1 IF NOT TIME FOR QFT SCHEDULING
- LX3 24
- BX6 X6+X3
- SJS1 SB3 SJS2 *APQ* RETURN ADDRESS
- SB4 LA1SJ SET LOAD PARAMETER INDEX
- SA7 A3 STORE SCHEDULER CONTROL WORD
- EQ APQ ASSIGN PP
- * NOTE -
- * IN ORDER TO AVOID *DEADLOCK* (SORT OF) PROBLEMS
- * WITH THE *CPUCIO* REQUEST QUEUE, THE QUEUE IS CHECKED
- * PENDING REQUESTS ON EVERY *1SJ* CALL
- SJS2 SB3 SJS3 *PCQ* RETURN ADDRESS
- SB4 SJS3
- TNO /BUFIO/PCQ1,BUFIO PROCESS PSEUDO-PP REQUEST QUEUE
- SJS3 SA1 T1 RESTORE (B7)
- SB7 X1+
- * IF A PRIORITY PP REQUEST IS PENDING, THE ENTRY IS
- * CLEARED AND A REJECT STATUS IS SET TO THE WAITING PP.
- SA3 PQRL CHECK FOR PENDING PRIORITY REQUEST
- ZR X3,MTRX IF NO PP REQUESTS IN QUEUE
- SA1 X3
- MX2 -18
- LX1 -18
- BX3 -X2*X1
- ZR X3,MTRX IF FIRST REQUEST NOT PRIORITY
- BX7 X7-X7 SEND REJECT RESPONSE TO WAITING PP
- SA7 X3
- * DELETE ENTRY FROM QUEUE.
- LX1 18
- MX4 -12
- BX6 -X4*X1 ADDRESS OF NEXT ENTRY
- SA6 A3
- SA7 A1+RECW-RCCW CLEAR ENTRY FROM CONTROL POINT
- SA7 A1+REPW-RCCW
- SX1 A1
- AX1 7
- MX4 -4
- LX1 7 CONTROL POINT ADDRESS
- SA2 X1+STSW ADD ENTRY TO FREE LIST
- SX3 -420B-RCCW+1
- SB4 X1
- BX7 -X4*X2 NEXT FREE ENTRY
- BX2 X4*X2
- SA7 A1
- SX4 A1-B4 COMPUTE RECALL INDEX
- IX4 X4+X3
- IX7 X4+X2
- SA7 A2 UPDATE STSW
- EQ MTRX EXIT
- SJSA VFD 18/3R1SJ,6/0,12/0,12/0,12/0
- SJSB CON 1 ZERO IF FORCED *JSCL* RESET
- SNS SPACE 4,10
- ** SNS - SET NULL STATUS.
- *
- * ENTRY (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT TO *JAV* ADVANCE JOB.
- *
- * CALLS JAV.
- SNS SA4 B7+STSW CLEAR CPU STATUS
- SB3 BNJ1 *JAV* RETURN ADDRESS
- MX7 -57
- BX7 -X7*X4
- SA7 A4+
- EQ JAV ADVANCE JOB
- SPL SPACE 4,20
- ** SPL - SEARCH PERIPHERAL LIBRARY.
- *
- * ENTRY (X6) = PPU REQUEST.
- * (X5) = PP OUTPUT REGISTER IF *SPLM* CALL.
- * (B6) = EXIT ADDRESS.
- * = EXIT ADDRESS + 400000B, IF REQUEST IS FOR CPP.
- *
- * EXIT LIBRARY UNLOCKED.
- * (X1) .GT. 0.
- * (X5) = 0 IF PROGRAM FOUND, ELSE *SFP* *PLD* ENTRY
- * RETURNED.
- * (X7) = PP LOAD PARAMETERS.
- * (A1) = ADDRESS OF PLD ENTRY.
- * (B6) = EXIT ADDRESS.
- *
- * LIBRARY LOCKED (SYSEDIT ACTIVE)
- * (X1) = -0.
- * (X7) = (X5) ON ENTRY WITH BITS 56 AND 57 SET.
- *
- * USES X - 1, 3, 4, 5, 7.
- * B - 5.
- * A - 1, 7.
- SPL SA1 PSTP FIND END OF DIRECTORY
- MX4 18
- AX1 12
- SX3 X1-2
- SA1 PLDP READ START OF DIRECTORY
- BX7 X4*X6 SET PROGRAM NAME
- AX1 36
- SB5 X1 FWA OF LIBRARY
- IX3 X3-X1 LIBRARY LENGTH
- NZ B5,SPL1 IF LIBRARY NOT LOCKED
- SX3 44B REJECT FUNCTION (SET RETRY/MOVABLE FLAGS)
- BX1 -X1+X1
- LX3 -6
- BX7 X5+X3
- TJP (/CPP/SPL1,CPP,B6) RETURN
- SPL1 SX2 B5+X3 RESET LWA OF LIBRARY
- ZR X3,SPL4 IF END OF SEARCH
- AX3 1
- SA1 B5+X3 SAMPLE DIRECTORY ENTRY
- BX5 X4*X1
- IX5 X7-X5
- LX5 18 POSITION SIGN BIT
- NG X5,SPL1 IF PROGRAM .LT. SAMPLE
- SB5 A1+B1 RESET FWA OF SEARCH INTERVAL
- SX3 B5 RESET LENGTH
- IX3 X2-X3
- NZ X5,SPL1 IF PROGRAM NOT FOUND
- LX7 -54
- * ENTER HERE TO BUILD THE LOAD PARAMETERS FOR AN OVERLAY.
- * (X1) = PLD ENTRY.
- * (X4) = 77777700 ... 00B.
- * (X7) = FIRST CHARACTER OF OVERLAY NAME.
- * (B6) = RETURN ADDRESS.
- *
- * NOTE. (X5) WILL NOT BE CHANGED.
- SPL1.1 BX1 -X4*X1
- SX3 B1
- SX7 X7-1R7
- LX3 41
- ZR X7,SPL5 IF *7XX* OVERLAY
- * SET *RT* PARAMETER.
- BX7 -X3*X1 CLEAR CM/MS BIT
- SB5 -B6 SET (B5) POSITIVE IF CPP
- SX2 214B SET *RT* PARAMETER POSSIBILITIES
- BX3 X3*X1
- ZR X3,SPL2 IF MS RESIDENT OVERLAY
- LX1 -24 GET *RPL* ADDRESS
- SB5 A1
- SA1 X1-400000B
- AX2 3 SET NEW *RT* PARAMETER
- BX3 -X4*X1
- SA1 B5 RESTORE THE *PLD* ADDRESS
- AX3 40 ONE = 16-BIT PROGRAM
- SB5 X3
- AX2 B5 SET NEW *RT* PARAMETER
- SPL2 MX3 -4
- BX1 -X4*X1 ENSURE (X1) .GT. 0
- BX2 -X3*X2 *RT* = 14/10/01/00
- LX2 42
- PL B5,SPL3 IF CONCURRENT PP OR CM RESIDENT
- AX1 23-17
- SX3 X1 SET LEADING ZEROS IF 12-BIT OVERLAY
- SPL3 BX2 X3*X2
- BX7 X7+X2
- TJP (/CPP/SPL1,CPP,/PROBE/SPL,PROBE,B6) RETURN
- SPL4 SA1 PSTP READ SFP ENTRY
- SX3 1
- AX1 12
- SA1 X1-2
- LX3 41
- SPL5 IX7 X1+X3 SET *RT* PARAMETER
- BX7 -X3*X7
- TJP (/CPP/SPL1,CPP,/PROBE/SPL,PROBE,B6) RETURN
- SPR SPACE 4,20
- ** SPR - SET CPU PRIORITY.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- * (X3) = *CWQW*.
- * (X5) = NEW CPU PRIORITY.
- * (A3) = ADDRESS OF *CWQW*.
- *
- * EXIT NEW CPU PRIORITY SET AND CPU SLICE RESTARTED.
- * TO CALLER VIA *RCC* IF JOB IN *W* STATUS.
- * TO CALLER VIA */NVE/SVS* IF JOB ACTIVE IN CPU AND
- * *NVE* PRESENT.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 6, 7.
- * B - 4, 6.
- SPR BSS 0 ENTRY
- SA4 TPRC+X5 GET SERVICE CYCLE FOR NEW PRIORITY
- SA1 B7+STSW DETERMINE CPU STATUS
- LX5 3
- UX3,B4 X3 UNPACK CPU PRIORITY AND PARAMETERS
- SB4 X5 SET PRIORITY WITHOUT PRIORITY FLAGS
- SX6 B1
- PX3 B4,X3 SET NEW CPU PRIORITY IN *CWQW*
- LX6 47-0
- MX7 6
- BX6 X3+X6 SET EXTENDED CPU SLICE INCOMPLETE FLAG
- BX7 X7*X4
- SA6 A3 UPDATE *CWQW*
- SA7 A3+B1 SET SERVICE CYCLE AND CLEAR ACCUMULATORS
- ERRNZ CSAW-CWQW-1
- MX4 3
- BX1 X4*X1
- LX1 3
- SX4 X1-WCPS
- ZR X1,RB3 IF NULL STATUS
- PL X4,SPR1 IF *W* STATUS OR GREATER
- * SET PRIORITY OF ACTIVE JOB. A CPU SWITCH IS REQUESTED TO
- * FORCE SELECTION OF THE HIGHEST PRIORITY JOB.
- SA2 X1+TSCL-1 GET CPU PRIORITY OF ACTIVE JOB
- SA3 X1+CSWL-1
- SB4 B4+3 SET ACTIVE SLICE AND RECALL FLAGS
- UX6 X6
- PX6 B4,X6
- SA6 A6 REWRITE *CWQW* WITH FLAGS
- UX2 X2
- PX6 B4,X2 SET *TSCL* CPU PRIORITY AND FLAGS
- MX7 1
- BX7 X3+X7
- SA7 A3 REQUEST CPU SWITCH
- SA6 A2 UPDATE *TSCL*
- SB6 B3 SET *SVS* RETURN ADDRESS
- MX0 -12
- TJP (/NVE/SVS1,NVE,/MONITOR/RB3)
- SPR1 NZ X4,RB3 IF NOT *W* STATUS
- SB6 B7+ SET EXCHANGE PACKAGE ADDRESS
- EQ RCC REORDER WAIT QUEUE
- SRU SPACE 4,30
- ** SRU - CALCULATE SRU MULTIPLIERS CPM AND IOM.
- *
- * SRU = M1(CP + M2*IO + M3(CP+IO)CM +
- * M4(CP+IO)EC + MM*MP + AUC) + A1
- *
- * = M1(1 + M3*CM + M4*EC)CP + M1(M2 + M3*CM + M4*EC)IO +
- * M1*MM*MP + M1*AUC + A1
- *
- * = (M1 + M1*M3*CM + M1*M4*EC)CP +
- * (M1*M2 + M1*M3*CM + M1*M4*EC)IO +
- * M1*MM*MP + M1*AUC + A1
- *
- * = CPM*CP + IOM*IO + M1M*MP + M1*AUC + A1.
- *
- * CP = (S0)*CP0 + (S1)*CP1
- * IO = S2*MS + S3*MT + S4*PF
- * CM = (CM FL + 777B) / 1000B (WORDS)
- * EC = (ECS FL) / 1000B
- * MP = MAP ACCUMULATOR
- * AUC = AUC ACCUMULATOR
- * A1 = ADDER ACCUMULATOR (MAINTAINED IN MICROUNITS * 10)
- *
- * ENTRY (B4) = EXIT ADDRESS.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * B - 3.
- * A - 1, 3, 4, 6.
- *
- * CALLS CPT
- SRU SA3 B7+ECSW ECS FL
- SA4 B7+FLSW
- MX2 -12
- BX0 -X2*X4
- LX4 12
- BX4 -X2*X4 ADD NEGATIVE FIELD LENGTH
- IX4 X4+X0
- SA1 B7+MP1W M1*M3 AND M1*M4
- TLX3 0,UESC ADJUST EM FL
- MX7 -3
- BX3 -X2*X3
- LX1 18
- MX2 -18
- IX4 X4-X7 ROUND CM FL/100B WITH 7B
- BX6 -X2*X1
- AX4 3 CM = (CM FL/100B + 7B) / 10B
- LX1 18
- IX6 X6*X4 M1*M3*CM
- BX7 -X2*X1
- ERRNZ MP2W-MP1W-1 CODE DEPENDS ON CONTIGUOUS WORDS
- SA4 A1+B1 M1*1000 AND M1*M2
- IX7 X7*X3 M1*M4*EC
- LX4 18
- IX6 X6+X7 M1*M3*CM + M1*M4*EC
- BX3 -X2*X4
- LX4 18
- IX7 X3+X6 M1*1000 + M1*M3*CM + M1*M4*EC (CPM)
- BX4 -X2*X4
- IX4 X4+X6 M1*M2 + M1*M3*CM + M1*M4*EC (IOM)
- LX7 30
- SX6 B4 SAVE EXIT ADDRESS
- SA6 SRUA
- IX4 X7+X4 30/CPM AND 30/IOM
- SB3 SRU1
- TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
- ,/CPT)
- SRU1 SA1 SRUA
- SB4 X1
- SA1 A4+B1
- MX2 1
- BX2 X2*X1
- BX6 X2+X4
- SA6 A1
- JP B4 EXIT
- SRUA CON 0
- STL SPACE 4,15
- ** STL - SET CPU TIME LIMIT.
- *
- * ENTRY (X3)= TIME LIMIT IN MILLISECONDS.
- * IF (X3) .LT. 0, TIME LIMIT IS UNLIMITED.
- * (B7)= CONTROL POINT ADDRESS.
- * (B3)= EXIT ADDRESS.
- *
- * EXIT (X7) = 0.
- *
- * USES X - 1, 2, 6, 7.
- * B - 4.
- * A - 2, 6.
- *
- * CALLS MSB.
- STL SA2 B7+SRUW ENTRY
- MX1 1
- BX6 -X1*X3
- LX1 58-59
- BX7 -X1*X2 CLEAR TIME LIMIT
- SA7 A2+
- NG X3,STL1 IF UNLIMITED REQUEST
- SB4 STL1 SET *MSB* RETURN ADDRESS
- SA2 CPTC MILLISECONDS TO QUARTER NANOUNITS
- EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
- STL1 SA6 B7+CPLW
- SX7 B0+ CLEAR OUTPUT REGISTER
- JP B3 RETURN
- SXR SPACE 4,10
- ** SXR - SET *X* STATUS WITH RECALL CRITERION.
- *
- * ENTRY (X0) = RECALL CRITERION.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT TO *MTRX* IF CONTROL POINT NOT ACTIVE.
- * TO *BNJ* BEGIN NEW JOB.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 6, 7.
- SXR SA1 B7+STSW GET JOB STATUS
- SA2 RQRL
- SA3 B7+CWQW
- SX6 1
- NG X1,MTRX IF *W* OR *I* STATUS
- LX6 46-0
- AX1 57
- BX6 -X6*X3 CLEAR RECALL NOT REQUIRED FLAG
- ZR X1,MTRX IF NULL STATUS
- SA6 B7+CWQW UPDATE *CWQW*
- MX4 -12
- LX0 12
- * FIND POSITION IN *RQ*. CODE IS REPLICATED FOR PERFORMANCE
- * REASONS.
- SXR1 BX7 -X4*X2
- SA3 X7
- IX6 X3-X0
- BX5 -X4*X3
- PL X6,SXR2 IF POSITION REACHED
- SA2 X5
- IX6 X2-X0
- NG X6,SXR1 IF POSITION NOT REACHED
- BX7 X5
- SA2 A3
- SXR2 SX3 B7+CRCW ADDRESS OF NEW ENTRY
- BX7 X7+X0
- SA7 X3
- BX2 X4*X2
- BX6 X2+X3
- SX7 XCPS
- SA6 A2
- EQ BNJ BEGIN NEW JOB
- SXS SPACE 4
- ** SXS - SET *X* STATUS.
- *
- * ENTRY (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT TO SXR.
- SXS SA1 RTCL GET CURRENT TIME
- SA2 MSCL EXTRACT RECALL TIME DELAY
- MX0 -36
- BX1 -X0*X1
- MX0 -12
- LX2 -36
- BX2 -X0*X2
- SX0 PTMF SET RECALL CRITERION
- IX1 X1+X2
- LX0 36
- BX0 X0+X1
- EQ SXR SET *X* STATUS WITH RECALL CRITERION
- TSM SPACE 4,15
- ** TSM - TERMINATE STORAGE MOVE.
- *
- * EXIT (SMRL) = 0.
- * TO *BNJ1* (VIA *UMT* AND *JAV*).
- * TO *CRA5* IF FIELD LENGTH SWAP.
- *
- * USES X - 0, 1, 2, 4, 5, 6.
- * A - 1, 4, 6.
- * B - 3, 6.
- *
- * CALLS BNJ, JAV, RCC, SCA.
- TSM SA1 SMPXP+STSW CLEAR CPU STATUS ON PSEUDO-CP
- MX2 -57
- BX6 -X2*X1 SET NULL STATUS
- SA6 A1+
- SB3 TSM1
- EQ SCA CONVERT CP/PCP ADDRESS
- TSM1 SA4 A2 READ *SMRL*
- LX4 59-37
- TNG X4,(/ECS/TSM4,EEC,/MONITOR/TSM2) IF ECS ERROR ON MOVE
- TSM2 LX4 37-36
- ERRNZ ICPS-6 CODE DEPENDS ON VALUE
- MX5 2
- TNG X4,(/ECS/TSM8,EEC,/MONITOR/TSM3) IF USER ECS ERROR
- TSM3 LX4 59-47+36-59
- SB3 TSM4 *RCC* RETURN ADDRESS
- AX4 57
- ZR X4,TSM4 IF STATUS PREVIOUS NULL
- SX4 X4+1
- SB6 B7+ EXCHANGE PACKAGE ADDRESS
- NZ X4,RCC IF PREVIOUSLY ACTIVE STATUS
- SA1 B7+STSW
- BX6 X1+X5 SET *I* STATUS
- SA6 A1
- * CPU STATUS IS RESTORED BEFORE *SMRL* IS CLEARED SO THAT ANY
- * PP PROGRAMS SENSING CPU STATUS WILL NOT MISS IT.
- TSM4 SA2 TSMA CHECK BLOCK MOVE STATUS
- SB4 BNJ1
- NZ X2,TSM6 IF FIELD LENGTH SWAP
- TB5 SCA
- GT B7,B5,TSM5 IF PSEUDO-CONTROL POINT
- SB4 JAV SET *UMT* EXIT ADDRESS
- TSM5 SB3 BNJ1 SET *JAV* EXIT ADDRESS
- EQ UMT UPDATE MEMORY CONTROL TABLE
- TSM6 SA1 SMRL GET MOVE PARAMETERS
- BX0 X2
- SX4 X1 EXTRACT MEMORY TYPE FLAG
- AX4 12-1
- MX5 -12
- ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
- SX6 X4+FLSW
- SA1 X6+B7 READ FL CONTROL WORD
- SX2 B7
- BX5 -X5*X1 EXTRACT FIELD LENGTH
- AX4 1
- AX2 7-1
- TB5 X4,MCT SET BASE MCT ADDRESS
- AX1 48
- SA4 X2+B5 READ REQUESTOR-S MCT ENTRY
- IX1 X1+X5
- LX0 1 CONVERT MCT ORDINAL TO INDEX
- IX7 X4+X1 ADJUST REQUESTOR-S HOLE SIZE
- SA4 TSMB GET PRE-MOVE HOLE POINT HOLE SIZE
- SA3 X0+B5 READ HOLE POINT MCT ENTRY
- MX5 12
- IX6 X3-X4 ADJUST HOLE POINT HOLE SIZE
- SA7 X2+B5
- IX4 X4-X1
- AX2 1
- MX7 -24
- BX3 X7*X3
- LX5 -12
- BX3 X3+X4
- EQ CRA5 CHANGE MEMORY TABLE LINKAGE
- TSMA CON 0 HOLE POINT NUMBER IF BLOCK MOVE
- TSMB CON 0 PRE-MOVE HOLE POINT HOLE SIZE
- TITLE CPU REQUEST PROCESSOR.
- CPR SPACE 4
- *** CPU PROGRAM REQUESTS.
- *
- *
- * CPU PROGRAM REQUESTS ARE PASSED THROUGH RELATIVE
- * LOCATION 1. THE FORMAT IS AS FOLLOWS -
- *
- *T 18/ NAME,6/ A,36/ ARG
- *
- * NAME REQUEST NAME
- * A 20B IF AUTO RECALL DESIRED
- * ARG ARGUMENTS
- *
- *
- * IF THE REQUEST IS NOT ONE OF THE FOLLOWING, AND THE
- * NAME OF THE REQUEST BEGINS WITH AN ALPHA CHARACTER,
- * THE REQUEST IS ASSUMED TO BE THE NAME OF A PP PROGRAM, AND
- * THIS PROGRAM IS ASSIGNED TO AN AVAILABLE PP.
- *
- * IF THE REQUEST IS NOT OF THE ABOVE FORMAT, THE JOB IS
- * ABORTED WITH A *MONITOR CALL ERROR.*.
- CPR SPACE 4
- ** CPR - PROCESS CPU REQUEST.
- *
- * ENTRY (X2) = RA.
- * (X5) = (RA+1).
- * (A2) = ADDRESS OF RA IN EXCHANGE PACKAGE.
- * (B3) = ADDRESS OF WORD IN CPUMTR CONTAINING RA.
- * (B7) = CONTROL POINT ADDRESS.
- CPR SA1 A2+B1 GET FL
- BX4 X5
- MX0 -12
- LX4 18
- AX1 36
- SX7 X4-3RRCL
- SB4 X1 SET FL
- NZ X7,CPR2 IF NOT *RCL*
- * PROCESS *RCL* IN LINE DUE TO FREQUENCY OF USE.
- LX4 59-40-18
- SX3 B1
- IX2 X2+X3 RA+1
- NG X4,CPR1 IF AUTO RECALL
- EWX7 X2 CLEAR RA+1
- EQ SXS SET *X* STATUS
- CPR1 SX3 X5-1 RECALL ADDRESS - 1
- SA1 B7+STSW CHECK ACTIVITY
- MX6 -4
- SB5 X5
- LX6 4
- IX4 X2+X3 ADDRESS OF WORD RECALLED ON
- BX7 -X6*X1
- LX6 48-4
- GE B5,B4,CPE IF ILLEGAL ADDRESS
- LE B5,B1,CPE IF ILLEGAL ADDRESS
- BX6 -X6*X1
- ERX1 X4 CHECK WORD RECALLED ON
- BX7 X7+X6
- MX6 -18
- R= X0,PCBF PROCESS COMPLETION BIT
- LX0 36
- LX1 59-0
- BX0 X0+X4
- SA4 B7+SSCW CHECK FOR SUBSYSTEM CONNECTIONS
- ZR X7,CPR1.2 IF NO ACTIVITY
- PL X1,SXR IF BUSY, SET *X* STATUS, RECALL CONDITION
- CPR1.1 BX7 X7-X7
- EWX7 X2 CLEAR RA+1
- EQ MTRX RETURN
- CPR1.2 NG X1,CPR1.1 IF COMPLETION BIT SET
- SA1 B7+DBAW GET K-DISPLAY BUFFER ADDRESSES
- SA2 B7+JCIW CHECK SUBSYSTEM ID
- MX3 -12
- BX7 -X6*X5
- LX3 24
- BX3 -X3*X2
- NZ X3,SXR IF SUBSYSTEM
- NZ X4,SXS IF SUBSYSTEM CONNECTIONS
- BX3 -X6*X1 CHECK K-DISPLAY BUFFERS
- LX6 18
- BX6 -X6*X1
- LX1 59-58
- BX3 X3-X7
- LX6 -18
- BX6 X6-X7
- SX7 RCET
- NG X1,SEF IF K-DISPLAY STATUS NOT TO BE RETURNED
- ZR X3,SXR IF K-DISPLAY ADDRESS MATCHES
- ZR X6,SXR IF K-DISPLAY ADDRESS MATCHES
- EQ SEF SET ERROR FLAG
- CPR2 SX6 X4-3RTIM
- SA3 CMCL CHECK STORAGE MOVE REQUEST
- ZR X6,TIM IF *TIM*
- SX7 B7
- AX3 48
- AX7 7
- BX7 X7-X3
- SA3 B7+STSW CHECK SUBCP ACTIVE
- ZR X7,SXS IF STORAGE MOVE REQUESTED
- LX3 59-56
- BX7 -X0*X4
- CPR3 TNG X3,(/MONITOR/BCE,SUBCP,/MONITOR/CPR3)
- SB5 X4-3RMSG
- ZR X7,CPE IF LAST TWO CHARACTERS OF PP CALL ZERO
- SX7 B1+
- LX7 41-0
- BX5 -X7*X5 CLEAR BIT 41 IN RA+1 CALL
- * IDENTIFY REQUEST BY TREE SEARCH.
- * EXIT TO PROCESSOR WITH
- * (X0) = -7777B
- * (X1) = FL
- * (X2) = RA
- * (X4) = REQUEST WORD SHIFTED 18
- * (X5) = REQUEST WORD
- * (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
- * (B4) = FL
- * (B7) = CONTROL POINT ADDRESS
- ZR B5,MSG IF *MSG*
- SX7 X4-3RCIO
- PL B5,CPR5 IF ABOVE *MSG*
- ZR X7,CIO IF *CIO*
- PL X7,CPR4 IF ABOVE *CIO*
- SB6 X4-3RABT
- ZR B6,ABT IF *ABT*
- SX6 X4-3RAAA
- PL X6,APJ IF LEGAL PROGRAM NAME
- EQ CPE *MONITOR CALL ERROR.*
- CPR4 SX6 X4-3RLDR
- ZR X6,LDR IF *LDR*
- SX7 X4-3RCPM
- PL X6,LDV IF ABOVE *LDR*
- SX6 X4-3REND
- ZR X7,CPM IF *CPM*
- SX7 X4-3REJT
- ZR X6,END IF *END*
- ZR X7,EJT IF *EJT*
- SX7 X4-3RCLO
- NZ X7,APJ IF NOT *CLO*
- EQ CLO CONVERT *CLO* TO *CIO*
- CPR5 SX7 X4-3RRFL
- PL X6,CPR6 IF ABOVE *TIM*
- NG X7,PFL IF BELOW *RFL*
- SX6 X4-3RRSB
- ZR X7,RFL IF *RFL*
- ZR X6,RSB IF *RSB*
- SX7 X4-3RSPC
- ZR X7,SPC IF *SPC*
- PL X6,SIC IF ABOVE *RSB*
- SX6 X4-3RRPV
- ZR X6,RPV IF *RPV*
- EQ APJ
- CPR6 SX7 X4-3RWCL
- SX6 X4-3RXJP
- ZR X7,WCL IF *WCL*
- SX7 X4-3RXJR
- TZR X6,(/MONITOR/XJP,SUBCP,/MONITOR/APJ) IF *XJP*
- ZR X7,XJR IF *XJR*
- SX6 X4-3R0AA
- PL X6,CPE IF ILLEGAL REQUEST
- EQ APJ ASSIGN PPU JOB
- AAR SPACE 4,10
- ** AAR - ASSIGN AUTO RECALL PP REQUEST.
- *
- * ENTRY (X5) = PP REQUEST.
- * (B7) = CONTROL POINT.
- AAR SB4 B0+ SET LIBRARY SEARCH NEEDED
- AAR1 SB6 AAR2 *CAL* RETURN ADDRESS - NO LIMIT
- SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
- EQ CAL CHECK ACTIVITY LIMIT
- AAR2 MX0 1 FORCE AUTO-RECALL
- SX7 B0+ CLEAR RA+1
- LX0 41-59
- SA2 RA1 ADDRESS OF RA+1
- EWX7 X2 CLEAR (RA+1)
- BX6 X0+X5
- SA7 APQA
- SB3 SIS *APQ* RETURN ADDRESS
- EQ APQ ASSIGN PP
- APJ SPACE 4,15
- ** APJ - ASSIGN PPU JOB.
- *
- * ENTRY (X5) = PPU REQUEST WORD.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT TO *APQ* TO ASSIGN PP.
- * TO *SXS* TO SET X STATUS IF ACTIVITY LIMIT.
- *
- * USES X - ALL.
- * B - 3, 4, 6.
- * A - 1, 2, 7.
- *
- * CALLS CAL.
- APJ BX7 X7-X7 CLEAR PP PARAMETER WORD
- SB4 B0 SET LIBRARY SEARCH NEEDED
- SA7 APQA
- APJ0 SA1 B7+JCIW CHECK FOR SUBSYSTEM OR NON-ROLLABLE JOB
- SX3 B1
- LX1 0-21
- BX4 X3*X1 *DIS* FLAG
- LX3 40-0
- BX6 X3*X5 CHECK FOR AUTO RECALL
- LX1 -24-0+21
- MX2 -12
- BX2 -X2*X1 SUBSYSTEM IDENTIFICATION
- NZ X6,APJ0.1 IF PP CALL WITH AUTO RECALL
- BX6 X2+X4
- NZ X6,APJ2 IF SYSTEM JOB
- BX5 X5+X3 FORCE AUTO RECALL
- APJ0.1 SA1 B7+STSW GET JOB ACTIVITY
- MX6 -8
- SX2 X2-LSSI-1
- LX1 -4
- BX6 -X6*X1 RECALL/TAPE ACTIVITY COUNT
- PL X2,APJ0.2 IF SUBSYSTEM
- LX1 12+4
- MX2 -5
- BX2 -X2*X1 PP COUNT
- IX6 X6+X2
- IX6 X6-X4 ALLOW FOR *DIS*
- APJ0.2 NZ X6,SXS IF PP OR TAPE ACTIVITY
- * ASSIGN PPU JOB.
- APJ1 MX0 1 EXTRACT AUTO RECALL FLAG
- LX0 40-59
- BX0 X0*X5
- LX0 41-40
- SA2 RA1 ADDRESS OF RA+1
- SX7 B0+ CLEAR RA+1
- BX6 X0+X5 MAP AUTO RECALL TO BIT 41
- EWX7 X2 CLEAR (RA+1)
- SB3 SIS *APQ* RETURN ADDRESS
- TNZ X0,(/DCP/APQ,DCPC,/MONITOR/APQ) IF AUTO-RECALL
- SB3 MTRX
- TJP (/DCP/APQ,DCPC,/MONITOR/APQ) ASSIGN PP
- * AVOID FORCED AUTO RECALL
- APJ2 SB6 APJ1 *CAL* RETURN ADDRESS - NO LIMIT
- SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
- EQ CAL CHECK ACTIVITY LIMIT
- AFL SPACE 4,20
- ** AFL - ASSIGN FIELD LENGTH.
- *
- * ENTRY (X1) = CURRENT FIELD LENGTH.
- * (X2) = REQUESTED FIELD LENGTH.
- * (X5) = *1MA* CALL TO BE ISSUED IF NEEDED.
- * (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
- * (B5) = STATUS RESPONSE ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- * (A5) = RA+1.
- *
- * EXIT TO MTRX.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 2, 3, 4, 6, 7.
- * B - 4, 5, 6.
- *
- * CALLS APJ, SFL.
- AFL SA3 B7+ECSW GET ECS CONTROL WORD
- MX7 -17 SET FIELD LENGTH
- BX0 -X7*X2
- MX4 -12 GET ECS FIELD LENGTH
- SB6 B2 SET EXCHANGE PACKAGE ADDRESS
- BX4 -X4*X3
- BX6 X1 RETAIN CURRENT FL
- ZR X0,AFL3 IF EMPTY REQUEST
- SX3 X0-MCMX
- ZR X4,AFL1 IF NO ECS ASSIGNED
- PL X3,AFL1 IF FL .GE. MCMX
- SX0 MCMX SET FL TO MINIMUM ALLOWED WITH ECS
- * CHECK DIRECTION OF REQUEST.
- AFL1 SX1 X0+77B ROUND UP REQUEST
- NG X1,CPE IF REQUEST TOO LARGE
- AX1 6
- LX1 6
- IX0 X1-X6 CHECK REQUEST
- LX2 59-17
- ZR X0,AFL3 IF NO MEMORY CHANGE
- SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
- PL X0,APJ1 IF MEMORY INCREASE CALL *1MA*
- * CHECK NO-REDUCE STATUS.
- SA4 B7+STSW CHECK ACTIVITY
- SA3 AM
- BX4 X3*X4
- MX7 -12
- ZR X4,AFL2 IF NO PP ACTIVITY
- SA4 B7+JCIW CHECK FOR SUBSYSTEM OR NON-ROLLABLE JOB
- LX4 -24
- BX7 -X7*X4
- LX4 0-21+24 CHECK FOR *DIS* JOB
- SX3 B1
- BX4 X3*X4
- BX4 X4+X7
- ZR X4,SXS IF NOT SYSTEM JOB
- AFL2 SA3 B7+LB1W READ LOADER CONTROL
- LX3 59-53
- BX4 -X3+X2
- TX7 B7+200B,-SCA CHECK CONTROL POINT
- AX4 60
- BX0 X4*X0
- PL X4,AFL3 IF NO CHANGE IN MEMORY
- BX6 X1 SET NEW FIELD LENGTH
- ZR X7,APJ1 IF LAST CONTROL POINT CALL *1MA*
- SA3 SSTL
- LX3 59-58
- PL X3,APJ1 IF MEMORY CLEARING ENABLED
- AFL3 BX7 X7-X7 CLEAR (RA+1)
- SA3 B3+B1
- EWX7 X3
- ZR B5,SFL SET FIELD LENGTH IF NO STATUS RESPONSE
- SX4 B5
- SA3 B3
- IX4 X4+X3
- ERX3 X4 CHECK FOR CMM CLEAR JOB STEP STATUS
- LX6 30
- SX7 B1
- LX3 59-3
- BX6 X6+X7 STORE STATUS RESPONSE
- SB5 B0
- EWX6 X4
- PL X3,SFL IF NOT CMM CLEAR
- SA3 B7+DBAW
- LX7 54
- BX6 -X7*X3
- SA6 A3
- EQ SFL SET FIELD LENGTH
- CIO SPACE 4
- ** CIO - CALL CIO.
- *
- * ENTRY (X7) = 0.
- CIO SB6 CIO1 *CAL* RETURN ADDRESS - NO LIMIT
- SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
- EQ CAL CHECK ACTIVITY LIMIT
- CIO1 SA7 /CPUCIO/MB
- SX0 B1 MOVE AUTO RECALL BIT FROM BIT 40 TO 41
- LX0 40
- SA2 RA1 ADDRESS OF (RA+1)
- BX0 X0*X5 EXTRACT AUTO RECALL BIT
- BX5 -X0*X5
- LX0 41-40
- SB3 A2-B1 RESET ADDRESS OF WORD CONTAINING RA
- BX6 X0+X5
- SA6 A7-B1 STORE REQUEST WORD
- ERRNZ /CPUCIO/IR-/CPUCIO/MB+1 CODE REQUIRES CONTIGUOUS
- EWX7 X2 CLEAR (RA+1)
- TEQ (/PROBE/CIO,PROBE,/CPUCIO/CPC)
- CLO SPACE 4,10
- ** CLO - CLOSE. (CONVERT CALL TO *CIO*)
- *
- * ENTRY (X7) = 0.
- CLO MX2 42
- SX3 3RCIO
- BX4 X2*X4
- BX5 X4+X3
- LX5 42
- EQ CIO PROCESS AS *CIO* REQUEST
- CPE SPACE 4
- ** CPE - PROCESS CPU CALL ERROR.
- CPE SX7 PCET SET ERROR FLAG = *MONITOR CALL ERROR.*
- EQ SEF
- ABT SPACE 4
- *** *ABT*.
- * ABORT JOB.
- *
- *T 18/ *ABT*,42/
- ABT SX7 CPET SET CPU ABORT FLAG
- JP SEF
- CPM SPACE 4
- *** *CPM*.
- * RESIDENT CPM FUNCTIONS.
- *
- * ENTRY (X7) = 0.
- *
- *T 18/ *CPM*,6/,12/ FN,6/,18/ PAR
- * FN FUNCTION NUMBER.
- * PAR PARAMETER.
- CPM SA2 CPMA READ VALID FUNCTION WORD
- LX4 -24-18 EXTRACT FUNCTION
- SX3 X5
- BX4 -X0*X4
- SB4 X4
- IX4 X3-X1 CHECK PARAMETER PAST FL
- AX2 X2,B4
- CX6 X2
- LX6 X6,B1 INDEX * 2
- LX2 59
- SB4 X6
- BX4 X2*X4
- SB5 -B4
- BX6 -X4+X3
- SA2 B3 ADDRESS OF RA
- SB4 LACPM SET *CPM* LOAD PARAMETER INDEX
- NG X6,APJ0 IF BAD PARAMETER OR NON-CPUMTR FUNCTION
- IX3 X2+X3 ABSOLUTE PARAMETER ADDRESS
- SA2 B3+B1
- EWX7 X2 CLEAR RA+1
- MX2 -18
- JP CPMB+B5 JUMP TO PROCESSOR
- * EXIT TO PROCESSOR WITH -
- * (X0) = -7777B.
- * (X1) = FL.
- * (X2) = -777777B.
- * (X3) = PARAMETER ADDRESS.
- * (X7) = 0.
- * (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
- * (B7) = CONTROL POINT ADDRESS.
- * NOTE - FUNCTIONS 73B AND ABOVE MUST BE PROCESSED BY THE PPU
- * CPM PROCESSOR.
- *
- * SET BIT INDICATES VALID CENTRAL FUNCTION.
- * THESE FUNCTIONS MUST BE IN REVERSE ORDER.
- CPMA BSS 0
- POS 65B+1
- VFD 1/1
- POS 64B+1
- VFD 1/1
- POS 63B+1
- VFD 1/1
- POS 62B+1
- VFD 1/1
- POS 61B+1
- VFD 1/1
- POS 55B+1
- VFD 1/1
- POS 51B+1
- VFD 1/1
- POS 50B+1
- VFD 1/1
- POS 45B+1
- VFD 1/1
- POS 43B+1
- VFD 1/1
- POS 37B+1
- VFD 1/1
- POS 33B+1
- VFD 1/1
- POS 32B+1
- VFD 1/1
- POS 25B+1
- VFD 1/1
- POS 24B+1
- VFD 1/1
- POS 16B+1
- VFD 1/1
- BSS 0 FORCE UPPER
- * EACH FUNCTION MUST OCCUPY TWO WORDS OF CODE AND MUST BE IN
- * ORDER OF OCCURENCE.
- * FUNCTION 16.
- + SA1 B7+3 READ EXIT MODE
- LX1 12
- BX6 -X0*X1
- EWX6 X3
- JP MTRX EXIT
- * FUNCTION 24.
- + SA1 B7+JCRW READ JOB CONTROL WORD
- BX6 X1
- EWX6 X3
- JP MTRX EXIT
- * FUNCTION 25.
- ERX1 X3
- BX6 X1
- SA6 B7+JCRW
- JP MTRX EXIT
- * FUNCTION 32.
- + SA1 B7+UIDW RETURN USER NUMBER
- BX6 X2*X1
- EWX6 X3
- JP MTRX EXIT
- * FUNCTION 33.
- + SA1 B7+FLCW READ FIELD LENGTH CONTROL WORD
- BX6 X1
- EWX6 X3
- JP MTRX EXIT
- * FUNCTION 37.
- + SA1 B7+TXSW READ TELEX SUB-SYSTEM
- MX6 -6
- LX1 6
- BX6 -X6*X1
- EWX6 X3
- JP MTRX
- * FUNCTION 43.
- + SA1 B7+SEPW READ SPECIAL ENTRY POINT WORD
- SX2 B1
- SB6 X1
- ZR B6,CPM1 IF NO PARAMETER BLOCK
- EQ CPM4 RESTORE (RA+1)
- * FUNCTION 45.
- + SA1 B7+LB1W READ FIRST LOADER CONTROL WORD
- BX6 X1
- EWX6 X3
- JP MTRX EXIT
- * FUNCTION 50.
- + SA1 MMFL READ MACHINE ID WORD
- LX1 12
- BX6 -X0*X1
- EWX6 X3
- JP MTRX EXIT
- * FUNCTION 51.
- + SX3 B1 FORCE AUTO RECALL
- BX7 X5 RESET RA+1 REQUEST
- SA2 RA1
- LX3 40
- EWX7 X2
- EQ CPM1.3 EXIT
- * FUNCTION 55.
- + SA1 B7+ELCW READ ECS FL CONTROL WORD
- TLX1 0,UESC
- BX6 X1
- EWX6 X3
- JP MTRX EXIT
- * FUNCTION 61.
- + SA4 B7+LOFW READ LIST POINTER
- LX2 24 POSITION MASK
- SX7 B1
- BX4 -X2*X4
- EQ CPM3 SET COMPLETE BIT
- * FUNCTION 62.
- ERX4 X3
- LX4 -30
- BX4 -X2*X4
- IX1 X4-X1 CHECK LIST BASE ADDRESS WITHIN FL
- NG X1,CPM2 IF LIST WITHIN FL
- EQ CPM4 ASSIGN PPU
- * FUNCTION 63.
- SA4 B7+EOJW READ END-OF-JOB CONTROL WORD
- MX6 -6
- LX4 6 RETURN TERMINATION STATUS
- BX6 -X6*X4
- EQ CPM3.1 CONTINUE
- * FUNCTION 64.
- SA4 B7+SEPW CHECK SSJ=
- SA2 B7+JCIW CHECK FOR SUBSYSTEM
- LX4 59-50
- AX2 -24
- EQ CPM3.2 CONTINUE
- * FUNCTION 65.
- + SA1 B7+SEPW
- LX1 59-50
- PL X1,CPM4 IF NOT SSJ=
- EQ CPM3.5 SET/CLEAR UTL= ENTRY POINT
- CPMB BSS 0
- * EXIT FOR FUNCTION 43.
- CPM1 LX2 50-0 BIT MASK
- SB6 X5
- SB6 B6-1
- GT B6,CPM1.1 IF DISABLE/ENABLE SSJ=
- BX6 -X2*X1 CLEAR SSJ=
- LX2 55-50
- BX6 -X2*X6 CLEAR LDR=
- LX2 36-55
- BX6 -X2*X6 CLEAR ENABLE SSJ=
- SA6 A1
- NG B6,MTRX IF ZERO PARAMETER
- LX1 59-48
- LX2 59-36
- NG X1,MTRX IF SSM= ENTRY POINT
- SA1 B7+DBAW
- BX6 -X2*X1
- SA6 A1
- JP MTRX EXIT
- CPM1.1 SB6 B6-B1
- GT B6,CPM1.2 IF ENABLE SSJ=
- BX6 X2*X1 EXTRACT SSJ=
- BX1 -X2*X1 CLEAR SSJ=
- LX2 55-50
- BX1 -X2*X1 CLEAR LDR=
- LX2 36-55
- BX1 -X2*X1 CLEAR ENABLE SSJ=
- LX6 36-50
- BX6 X6+X1 SET ENABLE SSJ=
- SA6 A1
- JP MTRX EXIT
- CPM1.2 SB6 B6-1
- GT B6,CPM4 IF INCORRECT REQUEST
- BX6 X1
- LX6 59-36
- PL X6,CPM4 IF INCORRECT REQUEST
- BX6 X2+X1 SET SSJ=
- LX2 36-50
- BX6 -X2*X6 CLEAR ENABLE SSJ=
- SA6 A1
- JP MTRX EXIT
- * EXIT FOR FUNCTION 51.
- CPM1.3 BX5 X5+X3
- EQ APJ1 ASSIGN PPU
- * EXIT FOR FUNCTIONS 61 AND 62.
- CPM2 LX2 24 POSITION MASK
- SA1 B7+LOFW READ LIST POINTER
- LX4 24
- BX1 X2*X1 CLEAR OLD LIST ADDRESS
- SX7 B1
- BX6 X1+X4
- SA6 A1
- CPM3 LX4 6 RE-POSITION LIST ADDRESS
- BX7 X4+X7 SET COMPLETE BIT
- EWX7 X3
- EQ MTRX EXIT
- * EXIT FOR FUNCTION 63.
- CPM3.1 SA4 B7+TFSW
- LX4 12
- BX4 -X0*X4 EJT ORDINAL
- CX1 X4,EJT CONVERT EJT ORDINAL TO OFFSET
- TA4 X1+SCHE,EJT READ EJT WORD
- SX7 300B
- LX4 6-33
- BX4 X7*X4 JOB TERMINATION STATUS
- BX6 X4+X6 ADD TO REPLY
- EWX6 X3
- JP MTRX EXIT
- * EXIT FOR FUNCTION 64.
- CPM3.2 NG X4,CPM3.3 IF SSJ=
- BX2 -X0*X2
- SX2 X2-LSSI
- NG X2,CPM4 IF NOT SUBSYSTEM
- CPM3.3 BX2 X3 CHECK PARAMETER BLOCK WITHIN FL
- SX4 4 PARAMETER BLOCK LENGTH
- IX3 X3+X4
- SA4 B3 GET RA ADDRESS
- IX4 X1+X4
- IX4 X4-X3
- SX1 B1
- NG X4,CPM4 IF PARAMETER BLOCK PAST FL
- SB3 CPM3.4 SET EXIT ADDRESS
- BX5 X2 SAVE PARAMETER BLOCK ADDRESS
- IX2 X2+X1 SKIP STATUS WORD
- EQ IAA INCREMENT AUC ACCUMULATOR
- CPM3.4 SX6 B5 SET ERROR CODE
- LX6 9
- EWX6 X5
- EQ MTRX EXIT
- * EXIT FOR FUNCTION 65.
- CPM3.5 BX2 -X2*X5 GET SET/CLEAR FLAG
- MX3 1
- LX2 5-0
- LX3 5-59
- BX1 -X3*X1 CLEAR OLD UTL= VALUE
- BX6 X1+X2 MERGE NEW UTL= VALUE
- LX6 50-59 RE-POSITION *SEPW*
- SA6 A1 UPDATE *SEPW*
- EQ MTRX EXIT
- * RESTORE (RA+1).
- CPM4 BX7 X5
- SA1 B3+B1 GET RA+1 ADDRESS
- EWX7 X1
- JP APJ0 ASSIGN PPU
- EJT SPACE 4,10
- *** *EJT*.
- * EXECUTING JOB TABLE UPDATE FUNCTIONS.
- *
- * EXIT JOB ENABLED, OR *1MA* CALL MADE.
- *
- * ERROR TO *CPE* IF ABORT REQUIRED.
- * ERROR CODE RETURNED TO CALLER IF NO ABORT REQUIRED.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 4, 6, 7.
- * B - 4, 6.
- *
- * CALLS SCD.
- *
- *T RA+1 18/*EJT*,6/AR,18/0,18/ADDR
- * ADDR = RELATIVE ADDRESS OF PARAMETER BLOCK.
- *
- *ADDR 24/ JSN,12/ FLAGS,6/ PPI,8/ ERR,9/ FCN,1/C
- * 42/ NAME,6/ ERF,12/ EJTO
- * 3/RES,3/JAL,6/ OT,6/ RC,18/ MSG BUF,24/ RES
- * 60/ REC WD 1
- * 60/ REC WD 2
- * 12/ INST,12/ TN,36/ CDC RES
- * 42/ TNAME, 18/ RESERVED
- *
- * JSN = JOB SEQUENCE NUMBER.
- * FLAGS = DTEJ, RCEJ - BIT 0 = CHANGE SERVICE CLASS.
- * ENEJ - BIT 0 - TERMINAL CONTROL DISABLED.
- * RTEJ - BIT 0 = SELECT EJT ENTRIES BY ORIGIN TYPE.
- * BIT 1 = DEFAULT TIMEOUT (CLEAR = 0 TIMEOUT).
- * PPI = PREPROCESSOR INDEX.
- * ERR = ERROR RETURN (0 ON CALL).
- * FCN = FUNCTION CODE.
- * C = COMPLETE BIT (0 ON CALL).
- * NAME = ENEJ - ENTRY POINT NAME.
- * DTEJ, RCEJ, RSEJ - USER NAME.
- * ERF = ERROR FLAG TO SET.
- * EJTO = EXECUTING JOB TABLE ORDINAL.
- * RES = RESERVED FOR CDC.
- * JAL = JOB ACCESS LEVEL LIMIT (RETURNED ON *DTEJ*; 0 ON CALL).
- * OT = ORIGIN TYPE.
- * RC = REASON CODE.
- * MSG BUF = RELATIVE ADDRESS OF BUFFER TO RETURN *MS1W*.
- * REC WD 1 = RECOVERY WORD 1 (NFL WORD RC1N - SEE *PPCOM*).
- * REC WD 2 = RECOVERY WORD 2 (NFL WORD RC2N - SEE *PPCOM*).
- * INST = RESERVED FOR INSTALLATIONS.
- * TN = TERMINAL NUMBER.
- * CDC RES = RESERVED FOR CDC.
- * TNAME = TERMINAL NAME (RETURNED BY *DTEJ* AND *TJEJ*;
- * SPECIFIED ON CALL FOR *RCEJ*).
- *
- * NOTE - ANY CHANGES TO THIS PARAMETER BLOCK SHOULD ALSO
- * BE DOCUMENTED IN *IAFEX* AND *1MA*.
- EJT BSS 0 ENTRY
- SA3 B7+JCIW CHECK SUBSYSTEM IDENTIFICATION
- AX3 24
- BX3 -X0*X3
- ZR X3,CPE IF NOT SUBSYSTEM
- SB6 X5 VALIDATE PARAMETER BLOCK ADDRESS
- LE B6,B1,CPE IF ADDRESS INVALID
- SX3 B6+EJPB
- IX4 X1-X3
- NG X4,CPE IF BEYOND FL
- SX3 B6
- IX6 X2+X3
- SX3 B1
- SA6 T1 SAVE PARAMETER BLOCK FWA
- ERX4 X6 GET FIRST WORD OF PARAMETER BLOCK
- IX6 X6+X3
- SA6 A6+B1
- ERRNZ T2-T1-1 ADDRESSES MUST BE CONSECUTIVE
- MX6 -10 EXTRACT FUNCTION CODE
- BX6 -X6*X4
- LX6 59-0
- NG X6,CPE IF COMPLETE BIT ALREADY SET
- SX7 X6-MXEJ
- PL X7,CPE IF INVALID REQUEST CODE
- ZR X6,CPE IF INVALID REQUEST CODE
- SX7 X6-RCEJ
- ZR X7,EJT1 IF RECOVERY REQUEST
- * VALIDATE EJT ORDINAL AND JSN.
- R= X2,IEER ILLEGAL EJT ORDINAL ERROR CODE
- SA1 A6 READ SECOND WORD OF PARAMETER BLOCK
- ERX1 X1
- TX7 EJTM MAXIMUM EJT ORDINAL
- BX1 -X0*X1 REQUEST EJTO
- IX7 X7-X1
- NG X7,EJT7 IF EJTO OUT OF RANGE
- MX0 24
- BX7 X0*X4 REQUEST JSN
- SX3 X6-RTEJ
- BX7 X7+X1
- NZ X3,EJT0.1 IF NOT *RTEJ*
- ZR X7,EJT1 IF *RTEJ* BY ORIGIN TYPE
- EJT0.1 ZR X1,EJT7 IF EJT ORDINAL = 0
- BX7 X0*X7 ISOLATE REQUEST JSN
- CX3 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- TA3 X3+JSNE,EJT
- BX0 X0*X3 JSN FROM ENTRY
- BX1 X0-X7 COMPARE JSN-S
- ZR X0,EJT7 IF FREE EJT ENTRY
- R= X2,JFER JOB NOT FOUND ERROR CODE
- NZ X1,EJT7 IF JSN MISMATCH
- R= X2,RTER RETRY ERROR CODE
- SX7 X6-SAEJ
- ZR X7,EJT1 IF SET ABORT REQUEST
- * CHECK INTERLOCK AND JOB ADVANCE.
- SX1 B1
- BX0 X1*X3
- BX7 X1+X3 SET ENTRY INTERLOCK
- LX1 6-0 CHECK JOB ADVANCE
- BX1 X1*X3
- BX1 X1+X0
- NZ X1,EJT7 IF JOB ADVANCE OR INTERLOCK SET
- SX1 X6-ENEJ
- ZR X1,EJT2 IF ENABLE JOB REQUEST
- SX4 X6-FJEJ
- MX1 -6
- BX3 -X1*X3
- SB3 EJT0.2 *CAL* *ACB* RETURN ADDRESS
- SB6 ACB *CAL* RETURN ADDRESS - NO LIMIT
- BX1 X1-X1 PRESET NO BUFFER AVAILABLE
- BX0 X2 SAVE ERROR CODE
- NZ X4,CAL IF NOT FREEZE JOB REQUEST
- SX3 X3-SIJS*2
- NZ X3,CAL IF NOT SWAP-IN JOB STATUS
- EQ EJT7 RETURN RETRY ERROR CODE
- EJT0.2 BX2 X0 RESTORE ERROR CODE
- ZR X1,EJT7 IF NO BUFFER ASSIGNED
- SA7 A3 SET ENTRY INTERLOCK
- BX7 X1 COMMUNICATIONS BUFFER ADDRESS
- EQ EJT1.2 CALL *1MA*
- * MAKE *1MA* CALL FOR OTHER FUNCTIONS.
- EJT1 SB3 EJT1.1 *CAL* *ACB* RETURN ADDRESS
- SB6 ACB *CAL* RETURN ADDRESS - NO LIMIT
- BX1 X1-X1 PRESET NO BUFFER AVAILABLE
- BX0 X2 SAVE ERROR CODE
- EQ CAL CHECK ACTIVITY LIMIT
- EJT1.1 BX2 X0 RESTORE ERROR CODE
- ZR X1,EJT7 IF NO BUFFER ASSIGNED
- BX7 X1 COMMUNICATIONS BUFFER ADDRESS
- EJT1.2 SA4 T1 ABSOLUTE ADDRESS OF BLOCK
- SA7 APQA SET BUFFER ADDRESS FOR *APQ*
- ERX4 X4 FIRST WORD OF PARAMETER BLOCK
- BX6 X4
- SA4 T2
- SA6 X1+B1 SET WORD IN BUFFER
- ERX1 X4
- SX3 B1
- IX4 X4+X3
- ERX2 X4
- BX6 X1
- BX7 X2
- SA6 A6+B1
- SA7 A6+B1
- SX4 B1 TRANSFER AUTO RECALL BIT
- LX4 40-0
- SX3 X5 GET ADDR
- BX5 X4*X5
- SA4 EJTA SET UP CALL
- BX4 X4+X3 MERGE ADDR
- SB4 LA1MA SET PROGRAM TO CALL
- SA2 RA1
- LX5 1
- BX7 X7-X7
- BX6 X4+X5 INSERT AUTO-RECALL FLAG
- EWX7 X2 CLEAR RA+1
- SB3 MTRX *APQ* RETURN ADDRESS
- ZR X5,APQ IF NOT AUTO-RECALL
- SB3 SIS *APQ* RETURN ADDRESS
- EQ APQ ASSIGN PP
- * ENEJ - ENABLE JOB FOR SCHEDULING.
- EJT2 MX6 -6 VALIDATE JOB STATUS
- SA1 T2 READ SECOND PARAMETER BLOCK WORD ADDRESS
- BX6 -X6*X3
- R= X2,NDER JOB NOT DISABLED ERROR CODE
- SX0 X6-IOJS*2
- ZR X0,EJT3 IF AWAITING INTERACTIVE I/O
- SX0 X6-DOJS*2
- ZR X0,EJT3 IF DISABLED
- ERX3 X1
- LX6 12 SAVE JOB STATUS
- BX6 X6+X3
- EWX6 X1 REWRITE PARAMETER BLOCK WORD
- EQ EJT7 PROCESS ERROR
- EJT3 ERX1 X1
- MX0 42
- BX2 X0*X1
- SX0 B0
- ZR X2,EJT5 IF NO ENTRY POINT NAME
- SB6 EJT4 SET REENTRY ADDRESS
- EQ SCD SEARCH CENTRAL DIRECTORY
- * IF THE SPECIFIED ENTRY POINT IS NOT FOUND, IT IS ASSUMED
- * THAT THE REQUEST IS FOR A LOCAL FILE LOAD. IN THIS CASE
- * THE FL FOR *LDR=* IS USED.
- EJT4 SA1 TPPI GET FL FOR *LDR=*
- SX0 X1+
- ZR X7,EJT5 IF ENTRY POINT NOT FOUND
- * CALCULATE FL FROM FOUND ENTRY POINT.
- SA1 X7 GET FL FIELD
- MX0 10
- LX0 58
- BX0 X0*X1
- LX0 12
- EJT5 SA4 T1 CHECK PPI FIELD
- ERX4 X4
- MX2 -6
- LX4 42
- BX1 -X2*X4
- SX7 MCMX/100B
- MX6 -12
- ZR X1,EJT6 IF NO PPI SPECIFIED
- SB6 X1-TPPIL
- R= X2,IPER INVALID PPI ERROR CODE
- GT B6,EJT7 IF PPI OUT OF RANGE
- SA1 X1+TPPI GET PREPROCESSOR FIELD LENGTH/100B
- SX1 X1
- IX2 X0-X1
- PL X2,EJT6 IF ENTRY POINT FIELD LENGTH IS LARGER
- BX0 X1 MOVE LARGER FL
- EJT6 SA2 A3+SCLE-JSNE GET USER-S NFL
- BX3 -X6*X2 CURRENT FL
- LX6 12
- BX6 -X6*X2
- ZR X6,EJT6.1 IF ECS NOT ASSIGNED
- IX6 X3-X7
- IX3 X0-X7
- PL X6,EJT6.1 IF CURRENT FL .GE. *MCMX*
- PL X3,EJT6.1 IF FL .GE. *MCMX*
- BX0 X7 SET FL TO *MCMX*
- EJT6.1 IX7 X2+X0 ADD IN SELECTED FL
- SA7 A2
- * CALCULATE ENTRY TIME.
- AX2 54
- CX1 X2,JCB CONVERT JCB ORDINAL TO OFFSET
- TA1 X1+EXQT,JCB
- MX3 -12
- BX2 -X3*X1 INITIAL EXECUTION PRIORITY
- NZ X0,EJT6.2 IF JOB STEP INITATION
- * IF JOB STEP INITATION AFTER I/O, USE INTERACTIVE JOB PRIORITY
- * (TP). OTHERWISE USE INITIAL PRIORITY (IP).
- SA2 A1+MCMT-EXQT
- AX2 36
- BX2 -X3*X2
- EJT6.2 AX1 12
- BX6 -X3*X1 WEIGHTING FACTOR (SHIFT COUNT)
- SB6 X6
- AX1 24
- BX1 -X3*X1 LOWER BOUND SCHEDULING PRIORITY
- IX2 X2-X1
- SA1 RTCL CURRENT TIME
- LX6 X2,B6
- AX1 36
- IX1 X1-X6 ENTRY TIME
- SA2 A3+B1 CLEAR SCHEDULE FIELD
- MX0 30
- BX7 X0*X2
- BX7 X1+X7 MERGE ENTRY TIME
- SA7 A2
- R= X1,ROJS*2
- SX2 B0
- SA3 A3 CHANGE JOB STATUS
- MX0 54
- BX7 X0*X3
- BX7 X7+X1
- SA7 A3 ENABLE JOB
- EJT7 SA3 T1 PARAMETER BLOCK ADDRESS
- ERX4 X3 FIRST WORD OF PARAMETER BLOCK
- SX6 B1 SET PARAMETER BLOCK COMPLETE
- LX2 10-0
- BX4 X4+X6
- SA1 RA1 READ ADDRESS OF RA+1
- BX7 X7-X7
- BX6 X4+X2 SET ERROR CODE
- EWX7 X1
- EWX6 X3
- EQ SJS START JOB SCHEDULER
- EJTA VFD 18/3L1MA,6/0,12/5,24/0
- END SPACE 4
- *** *END*.
- * END JOB.
- *
- *T 18/ *END*,42/
- END EQU SNS SET NULL STATUS
- LDR SPACE 4,10
- *** *LDR*.
- * REQUEST OVERLAY LOAD.
- *
- *T 18/ *LDR*,24/,18/ ADDR
- * REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
- LDR BSS 0 ENTRY
- SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
- EQ AAR1 ASSIGN AS AUTO-RECALL REQUEST
- LDV SPACE 4,10
- *** *LDV*.
- * REQUEST LOADER ACTION.
- *
- *T 18/ *LDV*,6/,36/ 0
- * REQUEST AUTO LOAD OF RELOCATABLE FILE, NAME IN (64B).
- *
- *T 18/ *LDV*,24/,18/ ADDR
- * REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
- LDV BSS 0 ENTRY
- SX6 X4-3RLOD
- SX7 X4-3RMEM
- ZR X6,LOD IF *LOD*
- SX6 X4-3RLDX
- ZR X7,MEM IF *MEM*
- SX7 X4-3RLDV
- ZR X6,LDX IF *LDX*
- NZ X7,APJ IF NOT *LDV*
- * PROCESS *LDV* REQUEST.
- SB5 X5
- ZR B5,LOD IF RELOCATABLE
- SX1 B1 SET AUTO RECALL
- SX6 3RLDR&3RLDV CHANGE CALL TO *LDR*
- LX6 42
- BX2 X5-X6
- LX1 40
- BX5 X2+X1
- SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
- EQ APJ1 ASSIGN PP
- LDX SPACE 4,10
- *** *LDX*.
- * REQUEST OVERLAY LOAD.
- *
- *T 18/ *LDX*,6/ R,18/,18/ ADDR
- * REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
- * AUTORECALL IS NOT FORCED FOR SUBSYSTEMS.
- LDX BSS 0 ENTRY
- SX6 3RLDR&3RLDX CHANGE CALL TO *LDR*
- LX6 42
- BX5 X5-X6
- SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
- EQ APJ0 ASSIGN PP
- LOD SPACE 4,10
- *** *LOD*.
- * REQUEST AUTO LOAD OF RELOCATABLE FILE, NAME IN (64B).
- *
- *T 18/ *LOD*,6/,36/ 0
- LOD BSS 0 ENTRY
- SA4 LODA ENTER *LDR* REQUEST WORDS
- LX1 18 POSITION FIELD LENGTH
- SA2 A4+B1
- BX5 X4
- LX6 X2
- MX7 2
- SA4 B2 READ P, A0, B0
- LX7 42-59 (X7) = 140BS36
- SA3 B3+B0 ADDRESS OF RA
- SX2 X5
- IX3 X3+X2
- SA2 B2+5 READ FLX
- EWX6 X3
- SX6 B1
- IX3 X6+X3
- EWX7 X3
- MX3 42
- LX3 18
- BX4 X3*X4
- AX2 36
- TLX2 (6,ESM170,0)
- BX6 X4+X1 STORE UPDATED (A0)
- LX7 X2
- SA6 B2
- SA7 B2+10B STORE (X0) ECS FIELD LENGTH
- SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
- EQ APJ1 ASSIGN PP
- LODA BSS 0
- CON 0LLDR+1S40+60B
- CON 0LLDR=+100B
- MEM SPACE 4,40
- *** *MEM*.
- * REQUEST MEMORY.
- *
- *T 18/ *MEM*,6/ ,18/ TYPE,18/ ADDR
- * TYPE 0 IF CM, ABORT IF NOT AVAILABLE
- * 1 IF ECS, ABORT IF NOT AVAILABLE
- * 2 IF CM, DO NOT ABORT IF NOT AVAILABLE
- * 3 IF ECS, DO NOT ABORT IF NOT AVAILABLE
- * ADDR ADDRESS OF REQUEST WORD
- *T ADDR 30/ VAL,24/,1/R,1/C,1/,1/0
- *
- * R = CLEAR *CMM* STATUS.
- * C = THIS IS A *CMM* TYPE REQUEST.
- * TYPE CM.
- * IF VAL .GT. 0 THEN
- * VAL = 12/,1/N,17/FL
- * N = NO-REDUCE OVERRIDE.
- * FL = CM FIELD LENGTH.
- * TYPE ECS.
- * IF VAL .GT. 0 THEN
- * VAL = ECS FIELD LENGTH.
- * IF VAL .EQ. -0 RELEASE ALL ECS FIELD LENGTH.
- *
- * TYPE CM OR ECS.
- * IF VAL .EQ. 0 RETURN CURRENT FIELD LENGTH.
- * IF VAL .EQ. -1 RETURN MAXIMUM FIELD LENGTH (MFL).
- *
- * RESPONSE.
- *T ADDR 30/ FL OR MFL,30/1
- *
- * * MONITOR CALL ERROR.* IS RETURNED FOR THE FOLLOWING-
- * 1) ILLEGAL ADDRESS.
- * 2) CLEAR *CMM* STATUS WITH (R) = 1 AND (C) = 0.
- * 3) CLEAR *CMM* STATUS WITH (R) = 1 AND (C) = 1 AND
- * *CMM* JOB STEP STATUS NOT SET.
- *
- * A CMM ERROR WILL BE ISSUED BY *1MA* IF JOB STEP CMM
- * STATUS IS SET AND A MEMORY CHANGE REQUEST IS ISSUED THAT
- * DOES NOT HAVE THE (C) BIT SET.
- MEM MX6 -23
- SB5 X5 SET REQUEST ADDRESS
- SA3 MP
- GE B5,B4,CPE IF ADDRESS .GE. FL
- LE B5,B1,CPE IF ADDRESS .LT. 2
- SA2 B3 GET RA ADDRESS
- BX0 -X6*X5 EXTRACT *1MA* PARAMETERS
- SX6 X5
- IX2 X6+X2
- SX6 B1
- ERX2 X2 READ REQUEST WORD
- LX6 18
- IX5 X0+X6 INCREMENT TYPE FIELD
- MX4 -2
- AX2 2 EXTRACT REQUEST TYPE
- BX4 -X4*X2
- AX2 28
- * (B6) = *CMM* FIELD OF REQUEST WORD - 1.
- SB6 X4-1
- AX7 X2,B1
- LX0 59-18
- SA4 B7+DBAW
- LX6 54-18
- EQ B6,B1,CPE IF *CMM* FIELD = 2 ABORT
- PL X0,MEM1 IF NOT ECS
- LX6 55-54
- PL X2,MEM1 IF NOT (RELEASE ALL ECS OR MFL REQUEST)
- NZ X2,MEM1 IF MFL REQUEST
- SX7 B1+ INDICATE NON STATUS ECS REQUEST
- MEM1 BX5 X5+X3 COMPLETE *1MA* REQUEST
- BX3 X6*X4 EXTRACT CMM JOB STEP STATUS
- SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
- LE B6,B1,MEM4 IF CMM FIELD .NE. 3
- * REQUEST TO CLEAR CMM FLAG. THE CLEAR WILL BE DONE IN CPUMTR
- * ONLY IF IT IS NOT POSSIBLE FOR THE REQUEST TO BE
- * REQUEUED AND REPROCESSED.
- ZR X3,CPE IF JOB STEP CMM FLAG NOT SET ON CLEAR
- NG X0,APJ1 IF ECS STATUS REQUEST
- NZ X7,AFL IF NOT STATUS REQUEST
- BX6 -X6*X4 CLEAR CMM JOB STEP STATUS
- SA6 A4+
- * RETURN CM STATUS.
- MEM2 SX3 B1
- PL X7,MEM3 IF NOT MFL REQUEST
- MX6 12
- SA4 B7+FLCW
- BX1 X6*X4
- LX1 -12-30
- MEM3 LX1 30 STORE RESPONSE
- BX7 X7-X7
- BX6 X1+X3
- SA2 B3 RA ADDRESS
- SA1 B3+B1 RA + 1 ADDRESS
- SX3 B5
- IX2 X3+X2
- EWX7 X1 CLEAR RA+1
- EWX6 X2 STORE RESPONSE
- EQ MTRX EXIT
- * PROCESS CMM REQUEST FIELD = 0, 1.
- MEM4 NZ B6,MEM6 IF CMM FIELD = 0
- BX6 X4+X6 SET CMM JOB STEP STATUS
- SA6 A4
- MEM5 NG X0,APJ1 IF ECS REQUEST
- ZR X7,MEM2 IF STATUS REQUEST
- EQ AFL ASSIGN FIELD LENGTH
- MEM6 ZR X3,MEM5 IF CMM JOB STEP STATUS CLEAR
- ZR X7,MEM5 IF STATUS REQUEST
- MX1 36 ABORT WITH CMM ERROR
- BX5 X1*X5
- EQ APJ0 ASSIGN PP
- MSG SPACE 4,20
- *** *MSG*.
- * SEND MESSSAGE TO SYSTEM.
- *
- *T, 18/ *MSG*,6/ R,12/ MO,6/ AL,18/ ADDR
- * MO MESSAGE OPTION
- * AL ADDRESS LOCATION (0 - USER FL, 40B - NEGATIVE FL).
- * ADDR ADDRESS OF MESSAGE
- *
- * MO MESSAGE WRITTEN TO
- * 0 MASTER DAYFILE, JOB DAYFILE, AND CONTROL POINT
- * MESSAGE BUFFER
- * 1 CONSOLE LINE 1
- * 2 CONSOLE LINE 2
- * 3 JOB DAYFILE AND CONTROL POINT MESSAGE BUFFER
- * 4 ERROR LOG (SYSTEM ORIGIN / SSJ= ONLY)
- * 5 ACCOUNT FILE (SYSTEM ORIGIN / SSJ= ONLY)
- * 6 MASTER DAYFILE (COMMON PRODUCTS COMPATIBILITY)
- * 7 JOB DAYFILE (COMMON PRODUCTS COMPATIBILITY)
- * 10B INTERNAL TO *CPUMTR*
- * 11B MAINTENANCE LOG (SYSTEM ORIGIN / SSJ= ONLY)
- * 12B ACCOUNT FILE WITH JSN (SYOT/SSJ= ONLY)
- * 13B JOB DAYFILE ONLY
- *
- * NOTES AN ILLEGAL MESSAGE OPTION WILL CAUSE MO = 1
- * TO BE SELECTED.
- MSG LX4 18
- BX6 X5 SAVE REQUEST
- SA6 MSGB
- BX3 X5
- SB5 X5 CHECK MESSAGE ADDRESS
- LX3 59-23
- BX4 -X0*X4 EXTRACT MESSAGE OPTION
- SB6 B5-CSBN-1
- MX6 12
- PL X3,MSG1 IF NOT CONTROL STATEMENT MESSAGE
- SX7 B5-MS1W
- NZ X7,MSG0 IF NOT *MS1W*
- SX7 B7 USE CPA ADDRESS AS RA
- SA7 B3
- SB4 200B SET FL TO LENGTH OF CPA
- EQ MSG1 ISSUE MESSAGE
- MSG0 SA1 B3 SET RA TO BEGINNING OF BUFFER
- SX7 CSBN+2
- IX7 X1-X7
- SA7 B3
- PL B6,CPE IF NOT IN CONTROL STATEMENT BUFFER
- SB4 CSBN-INSN+7 SET LENGTH OF BUFFER
- SB5 B6-B1 CHANGE NFL ADDRESS TO BUFFER INDEX
- SB5 -B5
- MSG1 GE B5,B4,CPE IF ILLEGAL MESSAGE ADDRESS
- SB6 B4-5
- LE B5,B1,CPE IF ILLEGAL MESSAGE ADDRESS
- SA1 B3
- SX2 B5
- IX1 X1+X2
- ERX2 X1 READ FIRST WORD OF MESSAGE
- BX7 X6*X2
- LX6 X2
- SX5 B1+
- ZR X2,MSG2 IF NULL MESSAGE
- NZ X7,MSG2 IF MESSAGE PRESENT
- BX7 X2+X5 SET OPERATION COMPLETE
- AX2 30
- SB5 X2
- GE B5,B4,CPE IF ILLEGAL MESSAGE ADDRESS
- EWX7 X1
- LE B5,B1,CPE IF ILLEGAL MESSAGE ADDRESS
- SA1 B3
- SX2 B5
- IX1 X1+X2
- ERX2 X1 READ FIRST WORD OF MESSAGE
- BX6 X2
- MSG2 GT B5,B6,CPE IF MESSAGE ADDRESS + 5 .GT. FL
- SB6 X4-TMSGL
- PL B6,TMSG+1 IF ILLEGAL OPTION ASSUME 1
- JP TMSG+TMSGL+B6
- TMSG BSS 0 MESSAGE PROCESSOR TABLE
- + EQ MSG7 PREPROCESS MASTER DAYFILE MESSAGE
- + SA6 B7+MS1W SET MESSAGE IN LINE 1 OF CONTROL POINT
- EQ MSG3
- + SA6 B7+MS2W SET MESSAGE IN LINE 2 OF CONTROL POINT
- EQ MSG4
- + EQ MSG7 PREPROCESS JOB DAYFILE MESSAGE
- + EQ MSG5 PREPROCESS ERROR LOG MESSAGE
- + EQ MSG5 PREPROCESS ACCOUNT FILE MESSAGE
- + SX4 0
- EQ MSG6 CHANGE MESSAGE OPTION TO MASTER DAYFILE
- + SX4 CPON/10000B
- EQ MSG6 CHANGE MESSAGE OPTION TO JOB DAYFILE
- + EQ MSG7 PREPROCESS JOB DAYFILE MESSAGE
- SX4 BMLN/10000B
- EQ MSG4.0 PREPROCESS MAINTENANCE LOG MESSAGE
- + SX4 AJNN/10000B
- EQ MSG4.1 PREPROCESS ACCOUNT MESSAGE WITH JSN
- + SX4 CDON/10000B
- EQ MSG6 CHANGE MESSAGE OPTION FOR *DFMM*
- TMSGL EQU *-TMSG
- * FIRST CONSOLE MESSAGE.
- MSG3 IX1 X1+X5
- ERX3 X1
- IX1 X1+X5
- ERX2 X1
- LX7 X3
- BX6 X2
- SA7 A6+B1
- SA6 A7+B1
- * SECOND CONSOLE MESSAGE.
- MSG4 IX1 X1+X5
- ERX3 X1
- IX1 X1+X5
- ERX2 X1
- LX7 X3
- BX6 X0*X2 TERMINATE MESSAGE
- SA7 A6+B1
- BX7 X0-X0
- SA6 A7+B1
- EQ MTRP CLEAR RA+1
- * ENTER HERE TO PREPROCESS MAINTENANCE LOG MESSAGE (MO = 11B).
- MSG4.0 SB6 B0
- AX6 48
- * ENTER HERE TO CHANGE MESSAGE OPTION (MO = 12B).
- MSG4.1 SA1 RA1 READ REQUEST
- LX0 24
- ERX5 X1
- BX5 X0*X5 REMOVE CURRENT MESSAGE OPTION
- LX4 24
- BX7 X5+X4 INSERT NEW OPTION
- MX0 -12
- EWX7 X1 RESET REQUEST
- BX5 X7
- * ENTER HERE TO CHECK JOB ORIGIN AND SSJ (MO = 4, 5).
- MSG5 SA3 B7+TFSW GET JOB EJT ORDINAL
- MX1 -12
- LX3 12
- BX3 -X1*X3
- MX4 -4
- CX2 X3,EJT CONVERT EJT ORDINAL TO OFFSET
- + ZR X3,* IF NO EJT ORDINAL
- TA3 X2+SCLE,EJT GET JOB ORIGIN
- LX3 -48
- BX3 -X4*X3
- SX3 X3-SYOT
- ZR X3,MSG8 IF SYSTEM ORIGIN JOB
- SA1 B7+SEPW
- BX7 X7-X7
- LX1 59-50
- NG X1,MSG8 IF SSJ JOB
- ZR B6,MTRX IF MO = BINARY MAINTENANCE LOG
- SX4 CPON/10000B
- * ENTER HERE TO CHANGE MESSAGE OPTION (MO = 6, 7, 13B).
- MSG6 LX0 24
- SA1 RA1 READ REQUEST
- ERX5 X1
- BX5 X0*X5 REMOVE CURRENT MESSAGE OPTION
- LX4 24
- BX5 X5+X4 INSERT NEW OPTION
- MX0 -12
- BX7 X5
- EWX7 X1 RESET REQUEST
- * ENTER HERE TO CHECK MESSAGE LIMIT EXCEEDED (MO = 0, 3).
- MSG7 SA1 B7+ACLW
- LX1 12
- AX1 48
- NZ X1,MSG8 IF MESSAGE LIMIT NOT EXCEEDED
- NG X1,MSG8 IF UNLIMITED USER
- SX7 MLET MESSAGE LIMIT ERROR
- JP SEF SET ERROR FLAG
- MSG8 SA2 B3 RA
- SX4 B5 SAVE RELATIVE FWA
- ZR B6,MSG11 IF BINARY MESSAGE
- SB6 B5+MCML-2
- SX4 B5-1 SET MESSAGE ADDR-1
- SX0 -5 PRESET MASK INDEX FOR CODED MESSAGE
- SA3 MSGA
- * DETERMINE WORD COUNT OF CODED MESSAGE.
- MSG9 SX1 B5
- IX1 X2+X1
- ERX1 X1 READ NEXT WORD
- SB5 B5+B1 ADVANCE MESSAGE ADDRESS
- EQ B5,B6,MSG10 IF MAXIMUM MESSAGE LENGTH
- GT B5,B4,CPE IF ILLEGAL ADDRESS
- ZR X1,MSG10 IF EOM
- BX6 X3*X1 EXTRACT LOW ORDER BITS FROM EACH BYTE
- BX7 -X3*X1
- IX6 X6+X3 NON-ZERO CHARACTER PAIRS PRODUCE CARRY
- LX7 -11
- NO
- IX6 X6+X7 COMPENSATE FOR *5:* (DISPLAY CODE 4000B)
- BX7 -X3*X6
- BX6 -X3-X7 CHECK FOR 5 NON-ZERO BYTES
- ZR X6,MSG9 IF WORD HAS NO EOM BYTE
- PL X7,MSG10 IF EOM IN BYTE 0
- + LX7 12
- SX0 X0+B1 ADVANCE INDEX FOR EOM MASK
- NG X7,* IF EOM BYTE NOT REACHED
- MSG10 SB6 X4+B1 FWA
- SX6 B5-B6 SET MESSAGE LENGTH
- EQ MSG14 GO ISSUE MESSAGE TO DAYFILE
- * CHECK LENGTH OF BINARY MESSAGE.
- MSG11 PL X6,MSG13 IF MESSAGE LENGTH .GE. 0
- MSG12 SX6 MBML-2 SET MAXIMUM MESSAGE LENGTH
- MSG13 SB6 X6-MBML+1
- PL B6,MSG12 IF INVALID MESSAGE LENGTH
- SB5 B5+X6
- SB6 B5+B1
- GE B6,B4,CPE IF EOM BEYOND FL
- SX1 B5
- BX0 X0-X0 DEFINE MASK INDEX
- IX1 X1+X2
- ERX1 X1 READ LAST WORD
- MSG14 IX4 X4+X2 ABSOLUTE FWA
- SA5 RA1
- MX2 1 SET *MSG* FLAG
- ERX5 X5 READ REQUEST
- JP DFM2 ISSUE MESSAGE TO DAYFILE
- MSGA DATA 37773777377737773777B
- MSGB BSS 1 ORIGINAL *MSG* REQUEST
- PFL SPACE 4
- *** *PFL*.
- * SET (P) AND CHANGE FIELD LENGTH.
- *
- *T 18/ *PFL*,6/,18/ P,18/ FL
- * P NEW (P)
- * FL NEW FIELD LENGTH
- PFL SX7 X4-3ROPE
- SB5 X4-3RPFL
- ZR X7,CLO IF *OPE*, CONVERT TO *CIO*
- NZ B5,APJ IF NOT *PFL*
- * PROCESS *PFL* REQUEST.
- MX2 18
- SA3 B2 READ EXCHANGE PACKAGE
- LX2 -6
- BX6 -X2*X3 CLEAR (P)
- LX5 18
- BX4 X2*X5 EXTRACT NEW (P)
- BX5 -X2*X5 REFORMAT *PFL* REQUEST TO *RFL* REQUEST
- BX6 X4+X6 MERGE NEW (P)
- LX5 -18
- SA6 B2 STORE EXCHANGE PACKAGE
- EQ RFL
- RCL SPACE 4,10
- *** *RCL*.
- * PLACE PROGRAM ON RECALL.
- *
- * ENTRY (X7) = 0.
- *
- *T 18/ *RCL*,1/ ,1/0,40/
- * PLACE PROGRAM ON RECALL UNTIL SYSTEM RECALL DELAY HAS
- * EXPIRED.
- *
- *T 18/ *RCL*,1/ ,1/1,22/,18/ STATUS
- * PLACE PROGRAM ON RECALL UNTIL BIT 0 OF (STATUS) IS SET.
- * JOBS WILL BE CHECKED FOR PENDING *RCLP* BY *MTR* PP RECALL.
- *
- * EXIT TO *SXR* IF *RCLP*.
- * TO *SXS* IF *RCL*.
- * TO *CPE* IF BAD ADDRESS ON *RCLP*.
- * TO *MTRX* IF *RCLP* REQUEST COMPLETE.
- * PROCESSED INLINE IN *CPR* DUE TO USAGE.
- RFL SPACE 4,10
- *** *RFL*.
- * REQUEST FIELD LENGTH.
- *
- *T 18/ *RFL*,6/,18/ ADDR,1/N,17/ FL
- * ADDR ADDRESS FOR STATUS RESPONSE
- * N NO-REDUCE OVERRIDE
- * FL FIELD LENGTH
- *
- * IF FL = 0, CURRENT FIELD LENGTH WILL BE RETURNED
- *
- * RESPONSE.
- *T ADDR 12/ 0,18/ FL,30/ 1
- RFL MX6 -18 EXTRACT FL
- SA4 MP READ *1MA* CALL
- BX2 -X6*X5
- SA3 B7+DBAW CHECK IF CMM JOB STEP STATUS SET
- AX5 18
- SB5 X5 SET STATUS ADDRESS
- LX3 59-54
- BX5 X4
- GT B5,B4,CPE IF ADDRESS .GE. FL
- ZR X2,RFL1 IF STATUS REQUEST
- NG X3,RFL2 IF CMM JOB STATUS SET
- RFL1 BX5 X5+X2
- ZR B5,AFL IF NO STATUS REQUEST
- * CONVERT *RFL* TO *MEM* REQUEST.
- LX2 30
- SX5 B5
- BX6 X2
- LE B5,B1,CPE IF ADDRESS .LT. 2
- SA2 B3+
- IX2 X2+X5
- EWX6 X2
- EQ MEM
- RFL2 SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
- EQ APJ1 ASSIGN PP
- RPV SPACE 4,10
- *** *RPV.*
- * REPRIEVE CENTRAL PROGRAM.
- *
- * THIS REQUEST IS TRAPPED IN ORDER TO FORCE AUTO RECALL.
- * THIS ENSURES PROPER INTERLOCKING OF THE CONTROL POINT
- * AREA WHILE ALLOWING FOR EXISTING PROGRAMS THAT MAY
- * CALL *RPV* WITHOUT AUTO RECALL.
- RPV EQU AAR ASSIGN *RPV* AS AUTO RECALL REQUEST
- RSB SPACE 4,50
- *** *RSB*.
- * READ SUB-SYSTEM PROGRAM BLOCK.
- *
- *T 18/ *RSB*,1/ ,1/R,4/ ,6/0,12/ SID,18/ STAT
- * R = 1 IF AUTO RECALL SELECTED.
- * SID = SUBSYSTEM IDENTIFICATION.
- * IF SID = 0, THEN BLOCK IF READ FROM CORE MEMORY OR
- * RELATIVE TO CALLERS CONTROL POINT.
- * STAT = ADDRESS OF STATUS WORD IN FORMAT -
- *
- *T STAT 12/0,12/ WC,18/ ADDR,18/ BUFF
- * WC = NUMBER OF WORDS TO BE READ.
- * ADDR = ADDRESS TO READ FROM IN SUB-SYSTEM.
- * BUFF = ADDRESS OF BUFFER TO RECEIVE DATA.
- *
- *
- * A BLOCK OF DATA OF LENGTH WC WHERE WC < 101B WILL BE
- * TRANSFERRED FROM SUBSYSTEM WITH IDENTIFICATION SID.
- * BEGINNING AT LOCATION ADDR TO A BUFFER IN THE CALLING
- * PROGRAM THAT BEGINS AT LOCATION BUFF. IF ADDR IS NEGATIVE,
- * THE TRANSFER WILL BE FROM THE SUBSYSTEM-S NFL.
- *
- *
- * WHEN SID = 0, THE CONTENTS OF BUFF DETERMINE WHETHER THE
- * READ IS FROM CENTRAL MEMORY RESIDENT OR IS RELATIVE TO
- * THE CALLER-S CONTROL POINT. IF BIT 59 OF BUFF IS ONE,
- * THE READ IS FROM CMR, AND ADDR IS THE ABSOLUTE ADDRESS
- * AT WHICH TO BEGIN THE READ. IF BIT 59 OF BUFF IS ZERO,
- * THEN THE READ IS RELATIVE TO THE CALLER-S CONTROL POINT
- * AND IS EITHER A SELECTIVE OR A BLOCK READ.
- *
- *T BUFF 1/C, 23/ 0, 18/ B, 18/ CPAW
- * C = 1, IF CMR READ.
- * C = 0, IF CONTROL POINT READ.
- * B = 0, SELECTIVE READ.
- * B = 1, BLOCK READ.
- * CPAW = CONTROL POINT AREA WORD TO READ.
- *
- * IF THE READ IS SELECTIVE, BUFF CONTAINS A LIST OF ADDRESSES
- * TO READ. THE LIST TERMINATES AT WC OR WITH A ZERO ENTRY.
- * THE WORD READ IS STORED IN THE BUFF LOCATION CONTAINING ITS
- * ADDRESS. B CAN ONLY BE SPECIFIED IN (BUFF+0).
- * IF THE READ IS A BLOCK READ, WC WORDS, BEGINNING WITH THE
- * ADDRESS SUPPLIED (CPAW), ARE READ AND STORED IN BUFF.
- *
- *
- * THE CALLING PROGRAM MUST HAVE EITHER A SSJ= ENTRY POINT OR A
- * SUBSYSTEM IDENTIFICATION.
- *
- *
- * RESPONSE
- *T STAT 12/ REPLY,12/ WC,18/ ADDR,18/ BUFF
- * REPLY = 4000 TRANSFER SUCCESSFULLY COMPLETED.
- * 2000 SUB-SYSTEM NOT PRESENT.
- RSB BSS 0 ENTRY
- SA2 B7+JCIW CHECK SUBSYSTEM IDENTIFICATION
- SA4 B7+SEPW CHECK FOR SSJ=
- AX2 24
- BX2 -X0*X2
- SX2 X2-LSSI-1
- LX4 59-50
- BX4 -X2+X4
- PL X4,APJ IF CALL CONDITIONS NOT MET
- SB5 X5
- LX5 -18
- LE B5,B1,CPE IF *STAT* .LE. 1
- GE B5,B4,CPE IF *STAT* .GE. FL
- SX1 X5 (X1) = SUBSYSTEM IDENTIFICATION
- SA3 B3 RA
- SX4 B5 RELATIVE STATUS ADDRESS
- IX3 X3+X4 RA + STAT
- BX7 X3
- ERX3 X3 READ (STAT)
- SA7 T1 SAVE STATUS ADDRESS
- SB5 X3 (B5) = *BUFF*
- AX3 18
- LE B5,B1,CPE IF *BUFF* .LE. 1
- SX4 X3 (X4) = *ADDR*
- AX3 18
- SB6 B5+X3 BUFF + WC
- PX5 X6 PRESET NOT PRESENT STATUS
- LE B6,B5,CPE IF WC .LT. 1
- GE B6,B4,CPE IF BUFF + WC .GE. FL
- SB6 100B
- SB4 X3 (B4) = WC
- SA2 B3 RA
- SX6 B5 BUFF
- IX6 X2+X6
- SA6 T2 SAVE BUFFER ADDRESS
- GT B4,B6,CPE IF WC .GT. 100
- SB3 RSB2 *RSC* RETURN ADDRESS
- NZ X1,RSC IF SUB-SYSTEM READ
- SA2 FLSW SET FL TO CMR SIZE
- MX3 0 SET RA TO ZERO FOR LOW CORE UPDATE
- BX6 -X0*X2
- SA1 T2 GET BUFFER ADDRESS
- ERX1 X1
- LX6 6
- SX6 X6+B1 SET FL TO SIZE OF CMR+1
- NG X1,RSB2.1 IF LOW CORE READ
- SX4 X1
- LX1 59-18
- SB6 -200B
- SX3 B7+ SET RA TO START OF CP AREA
- SX6 B1-B6 SET *FL* TO LENGTH OF CP AREA + 1
- NG X1,RSB2.1 IF BLOCK READ OF CONTROL POINT AREA
- LX1 18-59
- MX5 1 COMPLETION STATUS
- * SELECTIVE READ OF CONTROL POINT AREA.
- RSB1 SX1 X1+
- NG X1,CPE IF ADDRESS OUT OF RANGE
- SX7 X1+B6
- PL X7,CPE IF ILLEGAL CONTROL POINT AREA ADDRESS
- SA4 B7+X1 READ CONTROL POINT AREA WORD
- BX6 X4
- SA1 T2 GET BUFFER ADDRESS
- EWX6 X1
- LE B4,B1,RSB3 IF TRANSFER COMPLETE
- SX7 B1
- IX7 X7+X1
- ERX1 X7 READ NEW ADDRESS
- SA7 T2 SAVE
- SB4 B4-B1
- NZ X1,RSB1 IF CONTINUING SELECTIVE READ
- EQ RSB3
- * RSC EXIT ADDRESSES.
- VFD 12/RSB3-RSB2,18/CPE,12/SXS-RSB2,18/SXS
- * READ SUBSYSTEM FL OR NFL.
- RSB2 SA2 A2-STSW+FLSW GET NFL
- AX2 48 NFL/100B
- LX2 6 NFL
- IX3 X3-X2 SET RA TO RA-NFL
- IX4 X4+X2 BIAS *ADDR* BY NFL
- IX6 X6+X2 SET FL TO FL+NFL
- * PERFORM BLOCK READ.
- RSB2.1 SX7 X4+B4 ADDR + WC
- NG X4,CPE IF ADDR .LT. ZERO
- SX4 X4
- IX6 X7-X6
- MX5 1 SET COMPLETION STATUS
- PL X6,CPE IF ADDR + WC .GE. FL
- IX0 X4+X3 FWA OF SUBSYSTEM READ
- SA1 T2 BUFF
- IX1 X0-X1 DIFF
- SB6 RSB3 SET *MSM* *MSR* RETURN
- TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
- * RETURN COMPLETION STATUS.
- RSB3 SA3 T1 STAT ADDRESS
- ERX4 X3 READ STAT
- BX6 X5+X4
- MX7 0
- EWX6 X3 STORE STATUS
- JP MTRP EXIT TO STORE OUTPUT REGISTER
- SIC SPACE 4,40
- *** *SIC*.
- * SEND INTER-CONTROL POINT BLOCK TO SUBSYSTEM PROGRAM.
- *
- * CONTROL IS ALSO TRANSFERRED HERE FOR SYSTEM CONTROL POINT
- * FUNCTIONS *SSC* AND *SSF*.
- *
- *T 18/ *SIC*,1/ ,1/R,4/ ,18/ BUFF,18/ STAT
- * R= 1 IF AUTO RECALL SELECTED.
- * BUFF= ADDRESS OF BUFFER TO BE TRANSFERRED TO SUBSYSTEM.
- * STAT= ADDRESS OF STATUS WORD IN FORMAT -
- *
- *T STAT 18/ BN,12/ SID,30/ 0
- * BN = BUFFER NUMBER (0 OR 1) OF SUBSYSTEM TO TRANSFER TO.
- * SID = DESTINATION SUBSYSTEM IDENTIFICATION.
- *
- * A BLOCK STARTING AT BUFF WILL BE TRANSFERRED TO THE INDICATED
- * SUBSYSTEM. BLOCK LENGTH IS SPECIFIED IN BITS 0-17 OF THE
- * FIRST WORD OF THE BLOCK (BUFF). LENGTH INCLUDES THIS FIRST
- * WORD. THE LENGTH OF THE BLOCK MUST BE LESS THAN 101B WORDS.
- * THE CALLER MUST BE A SUBSYSTEM OR HAVE AN SSJ= ENTRY POINT.
- *
- * RESPONSE.
- *T STAT 18/ BN,12/ SID,30/ REPLY
- * REPLY= 1 IF TRANSFER COMPLETED SUCCESSFULLY.
- * 3 IF DESTINATION SUBSYSTEM IS NOT PRESENT IN THE
- * SYSTEM.
- * 5 IF SUBSYSTEM BUFFER IS FULL, SUBSYSTEM BEING MOVED,
- * OR SUBSYSTEM JOB IS ADVANCING.
- * 7 IF BLOCK LENGTH AS SPECIFIED IN THE FIRST WORD IS
- * LARGER THAN THAT PERMITTED BY THE SUBSYSTEM.
- * 11 IF DESTINATION BUFFER IS UNDEFINED BY SUBSYSTEM.
- *
- * IF AUTO-RECALL IS SELECTED AND CONDITION 5 ABOVE IS PRESENT,
- * THE CALLING PROGRAM IS PLACED IN RECALL STATUS UNTIL THE
- * CONDITION ENDS.
- SIC SX6 X4-3RSIC
- TNZ X6,(/MONITOR/SSC,SCP,/MONITOR/APJ) IF NOT SIC
- * PROCESS *SIC* REQUEST.
- SA2 B7+JCIW CHECK FOR SUBSYSTEM
- SA4 B7+SEPW CHECK *SSJ=*
- AX2 24
- LX4 59-50
- BX2 -X0*X2 SUBSYSTEM ID
- BX4 -X4
- SX2 X2-LSSI-1
- SB5 X5+ SET *STAT* ADDRESS
- BX2 X4*X2
- LX5 -18
- NG X2,APJ IF CALLER NOT SUBSYSTEM OR SSJ= PROGRAM
- LE B5,B1,CPE IF *STAT* .LE. 1
- GE B5,B4,CPE IF *STAT* .GE. FL
- SB6 X5 SET *BUFF* ADDRESS
- SA4 B3 RA
- SX3 B5 STATUS ADDRESS
- IX7 X3+X4
- ERX3 X7 READ (STAT)
- SX5 X5
- SA7 T1 SAVE STATUS ADDRESS
- LE B6,B1,CPE IF *BUFF* .LE. 1
- GE B6,B4,CPE IF *BUFF* .GE. FL
- AX3 30
- BX1 -X0*X3 (X1) = SUBSYSTEM IDENTIFICATION
- IX7 X4+X5
- ERX4 X7 READ (BUFF)
- SA7 T2
- AX3 12
- SB6 B6+X4 LWA + 1 OF *BUFF*
- GE B6,B4,CPE IF BUFF + WC .GE. FL
- SB4 X4+ WORD COUNT
- LT B4,B1,CPE IF WC .LT. 1
- SB5 100B
- BX5 X4 SAVE FIRST WORD OF TRANSFER
- SX7 B1
- SB3 SIC1 *RSC* RETURN ADDRESS
- BX7 X7*X3 CHECK BUFFER NUMBER
- BX3 X3-X7
- GT B4,B5,CPE IF WORD COUNT .GT. 100B
- SX4 ICAN
- ZR X3,RSC IF BUFFER NUMBER .GT. 1
- EQ CPE PROCESS CALL ERROR
- * *RSC* EXIT ADDRESSES.
- VFD 12/SIC7-SIC1,18/CPE,12/SIC8-SIC1,18/SIC8
- SIC1 IX1 X3-X4 BUFFER POINTER WORD ABSOLUTE ADDRESS
- ERX1 X1 READ BUFFER POINTERS
- SB5 X6+ (B5) = SUBSYSTEM FL
- MX0 -6
- NZ X7,SIC2 IF BUFFER 1
- LX1 -24
- SIC2 SB3 X1 BUFFER RELATIVE ADDRESS
- AX1 18
- ZR B3,SIC5 IF BUFFER UNDEFINED
- BX1 -X0*X1
- SB6 X1+B1 BUFER LENGTH
- GT B4,B6,SIC6 IF BLOCK TOO LONG FOR BUFFER
- SB6 B3+B4 BUFFER ADDRESS + WC
- GT B6,B5,SIC7 IF BUFFER OUTSIDE OF FL
- SX1 B3 BUFFER FWA
- IX7 X1+X3 BUFFER ABSOLUTE ADDRESS
- SA7 T3 SAVE SUBSYSTEM BUFFER ADDRESS
- ERX2 X7 READ SUBSYSTEM BUFFER
- NZ X2,SIC8 IF BUFFER FULL
- SB4 B4-B1
- SX0 B1
- IX7 X7+X0 SUBSYSTEM BUFFER + 1
- SA1 T2 BUFFER FWA
- IX0 X1+X0 FWA TO MOVE FROM
- IX1 X0-X7 DIFFERENCE OF ADDRESSES
- SB6 SIC3 *MSM* *MSR* RETURN ADDRESS
- TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
- SIC3 BX7 X5 STORE FIRST WORD
- SX6 B1 COMPLETION STATUS
- SA4 T3
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- EWX7 X4
- * RETURN COMPLETION STATUS.
- SIC4 SA3 T1
- ERX4 X3 REREAD STATUS WORD
- MX0 30
- BX4 X0*X4
- MX7 0
- BX6 X4+X6
- EWX6 X3
- EQ MTRP EXIT TO CLEAR RA+1
- * PROCESS DESTINATION BUFFER UNDEFINED BY SUBSYSTEM. (11)
- SIC5 SX6 11B
- EQ SIC4
- * PROCESS BLOCK TOO LARGE FOR SUBSYSTEM BUFFER. (7)
- SIC6 SX6 7
- EQ SIC4
- * PROCESS SUBSYSTEM NOT PRESENT IN SYSTEM. (3)
- SIC7 SX6 3
- EQ SIC4
- * PROCESS SUBSYSTEM MOVING, ADVANCING OR BUFFER FULL.
- SIC8 SA5 RA1 RA+1 ADDRESS
- ERX5 X5 CHECK FOR AUTO RECALL
- LX5 59-40
- SX6 5
- PL X5,SIC4 IF AUTO RECALL NOT SPECIFIED
- EQ SXS PLACE CALLER IN AUTO RECALL
- SPC SPACE 4,10
- *** *SPC*.
- * PROCESS SPECIAL PP REQUEST. VALID ONLY FROM SYSTEM JOB.
- *
- *T 18/ *SPC*, 24/, 18/ ADDR
- * ADDR ADDRESS OF PPU REQUEST
- SPC SA1 B7+JCIW
- SB5 X5
- AX1 24
- LE B5,B1,CPE IF ADDRESS .LE. 1
- GE B5,B4,CPE IF ADDRESS PAST FL
- BX3 -X0*X1
- SA4 B3 READ PP REQUEST
- SX6 X5
- IX2 X6+X4
- ERX4 X2
- BX6 X4
- LX4 18
- ZR X3,APJ IF NOT SYSTEM JOB
- SX5 X4-3R1ZZ-1
- SX4 X4-3RAAA
- BX4 -X4*X5
- PL X4,CPE IF ILLEGAL PROGRAM NAME
- SA5 B3+B1 CLEAR (RA+1)
- EWX7 X5
- SB6 SPC1 *CAL* RETURN ADDRESS - NO LIMIT
- BX5 X2 SAVE ADDRESS OF REQUEST
- SB3 MTRX *CAL* RETURN ADDRESS - ACTIVITY LIMIT
- EQ CAL CHECK ACTIVITY LIMIT
- SPC1 EWX7 X5 CLEAR REQUEST WORD
- SB4 B0 SET LIBRARY SEARCH NEEDED
- SA7 APQA
- LX6 18
- SX4 X6-3RCIO
- LX6 -18
- TNZ X4,(/DCP/APQ,DCPC,/MONITOR/APQ) IF NOT *CIO*
- SA6 /CPUCIO/IR
- SA7 /CPUCIO/MB
- EQ /CPUCIO/CPC PROCESS *CIO* REQUEST
- TIM SPACE 4,45
- *** *TIM*.
- * REQUEST SYSTEM TIME.
- *
- *T 18/ *TIM*,6/,12/ OP,6/,18/ ADDR
- * OP TIME OPTION
- * ADDR ADDRESS FOR RESPONSE
- *
- *
- * OP RESPONSE
- *
- * 0 ACCUMULATED CPU TIME
- *T ADDR 3/2,45/ SECONDS,12/ MILISEC.
- *
- * 1 DATE
- *T ADDR 60/ * YY/MM/DD.*
- *
- * 2 CLOCK
- *T ADDR 60/ * HH.MM.SS.*
- *
- * 3 JULIAN DATE
- *T ADDR 24/ 0,36/ * YYDDD*
- *
- * 4 SCOPE FORMAT REAL TIME
- *T ADDR 24/0, 36/ SECONDS*4096
- *
- * 5 REAL TIME
- *T ADDR 24/ SECONDS,36/ MILLISECONDS
- *
- * 6 PACKED DATE/TIME
- *T ADDR 24/ 0,6/ Y-70,6/ MM,6/ DD,6/ HH,6/ MM,6/ SS
- *
- * 7 ACCUMULATED SRUS
- *T ADDR 12/ 2000B,12/ 0,36/ MILLI-UNITS
- *
- * 11 ACCUMULATED CYBER 176 CPU CLOCK CYCLE COUNT FOR JOB.
- *T ADDR 12/ TYPE,48/ CLOCK CYCLE COUNT
- * TYPE = 2000B, IF CLOCK CYCLE COUNT IS AVAILABLE.
- * TYPE = 6000B, IF CLOCK CYCLE COUNT IS NOT AVAILABLE.
- *
- * 12 ACCUMULATED CYBER 176 CPU CLOCK CYCLE COUNT SINCE
- * DEADSTART.
- *T ADDR 12/ TYPE,48/ CLOCK CYCLE COUNT
- * TYPE = 2000B, IF CLOCK CYCLE COUNT IS AVAILABLE.
- * TYPE = 6000B, IF CLOCK CYCLE COUNT IS NOT AVAILABLE.
- *
- * 13 DATE WITH 4-DIGIT YEAR
- *T ADDR 60/ *YYYY/MM/DD*
- *
- * 14 JULIAN DATE WITH 4-DIGIT YEAR
- *T ADDR 18/ 0,42/ *YYYYDDD*
- *
- * 15 JULIAN DATE WITH *ISO* CENTURY CHARACTER
- *T ADDR 24/ 0,36/ *CYYDDD*
- * C = * * FOR 19YY YEARS, *0* FOR 20YY YEARS.
- TIM SB5 X5 CHECK RESPONSE ADDRESS
- LE B5,B1,CPE IF ILLEGAL ADDRESS
- AX5 24
- GE B5,B4,CPE IF ADDRESS OUT OF RANGE
- BX4 -X0*X5 SET OPTION
- SB6 X4-TTIML
- PL B6,TTIM IF UNIDENTIFIED, ASSUME 0
- JP TTIM+TTIML+B6
- TTIM BSS 0
- * OPTION 0 - ACCUMLATED CPU TIME.
- + SB3 TIM3 UPDATE CPU TIME
- TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
- ,/CPT)
- * OPTION 1 - DATE.
- + SA1 DTEL DATE
- EQ TIM1
- * OPTION 2 - CLOCK.
- + SA1 TIML CLOCK
- EQ TIM1
- * OPTION 3 - JULIAN DATE.
- + SA1 JDAL JULIAN DATE
- JP TIM1
- * OPTION 4 - SCOPE FORMAT REAL TIME.
- + SA1 RTCL REAL TIME CLOCK
- JP TIM2
- * OPTION 5 - REAL TIME.
- + SA1 RTCL REAL TIME CLOCK
- EQ TIM1
- * OPTION 6 - PACKED DATE/TIME.
- + SA1 PDTL PACKED DATE
- EQ TIM1
- * OPTION 7 - ACCUMULATED SRUS.
- + SB3 TIM5 UPDATE CPU TIME AND SRU ACCUMULATOR
- TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
- ,/CPT)
- * OPTION 10 - UNIDENTIFIED OPTION.
- + EQ TTIM+0 UNIDENTIFIED OPTION, ASSUME OPTION = 0
- * OPTION 11 - ACCUMULATED CLOCK CYCLE COUNT FOR JOB.
- + SB3 TIM7 ACCUMULATED JOB CLOCK CYCLE COUNT
- TEQ (/MONITOR/CP76,CP176,/MONITOR/TIM6)
- * OPTION 12 - ACCUMULATED CLOCK CYCLE COUNT SINCE DEADSTART.
- + SB3 TIM8 *CPT* RETURN ADDRESS
- TEQ (/MONITOR/CP76,CP176,/MONITOR/TIM6) COMPUTE CP TIME
- * OPTION 13 - DATE WITH 4-DIGIT YEAR.
- + SA1 DTEL DATE
- EQ TIM12 EXPAND TO 4-DIGIT YEAR
- * OPTION 14 - JULIAN DATE WITH 4-DIGIT YEAR.
- + SA1 JDAL JULIAN DATE
- JP TIM14 EXPAND TO 4-DIGIT YEAR
- * OPTION 15 - JULIAN DATE WITH *ISO* CENTURY CHARACTER.
- + SA1 JDAL JULIAN DATE
- JP TIM10 ADD *ISO* CENTURY CHARACTER
- TTIML EQU *-TTIM
- TIM1 SA2 RA1 RA+1
- SX7 B5-B1 REQUEST ADDRESS-1
- BX6 X1 STORE REQUEST
- IX3 X2+X7
- BX7 X7-X7
- EWX6 X3 STORE VALUE REQUESTED
- EWX7 X2 CLEAR RA+1
- EQ MTRX EXIT
- * CONVERT REAL TIME (SCOPE FORMAT).
- TIM2 MX2 -36 EXTRACT MILLISECONDS
- SA3 TH+1 =1000.P
- BX6 -X2*X1
- NX2 X3 NORMALIZE DIVISOR
- LX6 12 MILLISECONDS*4096
- PX7 X6
- FX3 X7/X2 MILLISECONDS*4096/1000.P
- UX6 X3,B4 UNPACK RESULT
- LX1 X6,B4
- EQ TIM1 STORE RESULT
- * CONVERT CPU/REAL TIME.
- TIM3 SB4 TIM4 SET *DSB* RETURN ADDRESS
- SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
- EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
- TIM4 SA2 TH =.001P48+1
- PX1 X6
- DX6 X2*X1 EXTRACT MILLISECONDS
- FX7 X2*X1 EXTRACT SECONDS
- SA3 TH+1 =1000.P
- UX5 X7
- FX4 X3*X6 SCALE MILLISECONDS
- LX5 12 MERGE MILLISECONDS, SECONDS
- BX1 X5+X4
- EQ TIM1
- * SCALE SRUS TO MILLI-UNITS.
- TIM5 SA2 TTH =.0001P48+1
- SA1 B7+SRUW SRU ACCUMULATOR
- MX7 -42
- BX7 -X7*X1
- PX1 X7
- FX1 X2*X1 SCALE
- EQ TIM1 STORE REQUEST
- * CYBER 176 CPU CLOCK COUNT UNAVAILABLE.
- TIM6 MX1 2 INDICATE CLOCK COUNT UNAVAILABLE
- SB3 A5-B1 RESET (B3)
- EQ TIM1 STORE RESULT
- * ADD *ISO* CENTURY CHARACTER TO *JDATE*.
- TIM10 LX1 30
- BX1 X0*X1
- SX6 1R SPACE MARKS YEAR AS 19YY
- NG X1,TIM11 IF YEAR IS 50 OR GREATER
- SX6 1R0 ZERO MARKS YEAR AS 20YY
- TIM11 BX1 X1+X6
- LX1 30
- EQ TIM1 STORE RESULT
- * EXPAND *DATE* FROM * YY/MM/DD.* TO *YYYY/MM/DD*.
- TIM12 LX1 6
- BX1 X0*X1
- SX6 2R19
- NG X1,TIM13 IF YEAR IS 50 OR GREATER
- SX6 2R20
- TIM13 BX1 X1+X6
- LX1 48
- EQ TIM1 STORE RESULT
- * EXPAND *JDATE* FROM *YYDDD* TO *YYYYDDD*.
- TIM14 LX1 30
- BX1 X0*X1
- SX6 2R19
- NG X1,TIM15 IF YEAR IS 50 OR GREATER
- SX6 2R20
- TIM15 BX1 X1+X6
- LX1 30
- EQ TIM1 STORE RESULT
- WCL SPACE 4,15
- *** *WCL*.
- * PLACE PROGRAM ON TIMED RECALL.
- *
- * ENTRY (X7) = 0.
- *
- *T 18/ *WCL*,30/0,12/ DELAY
- * PLACE PROGRAM ON RECALL UNTIL *DELAY* MILLISECONDS
- * HAVE EXPIRED.
- *
- * *DELAY* MUST BE IN THE RANGE OF 10D TO 4095D
- * MILLISECONDS. A VALUE .LT. 10D DEFAULTS TO 10D AND
- * A VALUE .GT. 4095D DEFAULTS TO 4095D. ONLY JOBS
- * WITH *SYOT* OR *SSJ=* ARE ALLOWED TO SPECIFY A VALUE
- * OF *DELAY* THAT IS LESS THAN THE SYSTEM DEFAULT.
- WCL MX0 -18 VALIDATE *DELAY*
- BX3 -X0*X5
- SX1 4095D
- SX4 B1 CLEAR RA+1
- IX2 X2+X4
- EWX7 X2
- IX2 X3-X1 CHECK FOR *DELAY* ABOVE UPPER LIMIT
- MX0 -12
- NG X2,WCL1 IF .LT. UPPER LIMIT
- SX3 X1 SET UPPER LIMIT
- WCL1 SX2 X3-10D CHECK FOR *DELAY* .LT. LOWER LIMIT
- PL X2,WCL2 IF .GT. LOWER LIMIT
- SX3 10D SET LOWER LIMIT
- * VALIDATE CALLER IF *DELAY* .LT. SYSTEM DEFAULT.
- WCL2 SA1 MSCL GET SYSTEM DEFAULT RECALL DELAY
- LX1 24
- BX1 -X0*X1
- IX2 X3-X1
- PL X2,WCL3 IF *DELAY* .GE. SYSTEM DEFAULT
- SA2 B7+SEPW GET SPECIAL ENTRY POINT WORD
- LX2 59-50
- NG X2,WCL3 IF *SSJ=* JOB
- SA2 B7+JOTW CHECK JOB ORIGIN TYPE
- AX2 12
- BX2 -X0*X2
- ERRNG SYOT CODE DEPENDS ON VALUE
- ZR X2,WCL3 IF SYSTEM ORIGIN
- SX3 X1+ SET DELAY TO SYSTEM DEFAULT
- WCL3 SA1 RTCL GET CURRENT TIME
- MX0 -36
- BX1 -X0*X1
- SX0 PTMF SET RECALL CRITERION
- IX1 X1+X3
- LX0 36
- BX0 X0+X1
- EQ SXR SET *X* STATUS WITH RECALL CRITERION
- XJR SPACE 4,15
- *** *XJR*
- * PROCESS EXCHANGE JUMP REQUEST.
- *
- * ENTRY
- *
- *T 18/ *XJR*,6/,12/ FN,6/,18/ ADDR
- * FN FUNCTION CODE
- * ADDR ADDRESS OF EXCHANGE PACKAGE.
- * FN 0 = START JOB WITH EXCHANGE PACKAGE AT *ADDR*.
- * 1 = SAVE CURRENT PACKAGE AT *ADDR*.
- XJR SB5 X5 EXTRACT ADDRESS
- LX5 -24
- SB6 B5+20B
- LE B5,B1,CPE IF ILLEGAL ADDRESS
- SA1 XJRA
- GE B6,B4,CPE IF ILLEGAL ADDRESS
- GE B5,B4,CPE IF ILLEGAL ADDRESS
- BX6 -X0*X5
- AX2 X6,B1
- NZ X2,CPE IF ILLEGAL FUNCTION
- SA3 B3+B1
- MX4 -36
- EWX7 X3 CLEAR (RA+1)
- ZR X6,XJR2 IF FUNCTION 0
- * SAVE EXCHANGE PACKAGE FUNCTION 1.
- SA2 B2 FIRST WORD OF EXCHANGE PACKAGE
- UX1 X1 UNPACK REGISTER REPLACE BITS
- SX0 B2 CONTROL POINT ADDRESS
- SX6 B1
- IX3 X3-X6 RA
- SX7 B5 RELATIVE ADDRESS OF XP
- IX7 X3+X7 ABS ADDRESS
- IX7 X0-X7 DIFFERENCE OF MOVE
- XJR1 BX6 X2
- LX1 1
- IX2 X0-X7
- EWX6 X2 STORE EXCHANGE PACKAGE
- SX2 B1+
- IX0 X0+X2
- ERX2 X0 READ NEXT WORD TO MOVE
- PL X1,XJR1 IF FULL WORD TO MOVE
- SB6 X1
- IX3 X0-X7
- ERX3 X3 READ EXCHANGE PACKAGE
- NG B6,XJR3 IF END OF COPY
- BX2 -X4*X2 REPLACE REGISTERS
- BX3 X4*X3
- IX2 X3+X2
- EQ XJR1 CONTINUE REGISTER COPY
- * STORE EXCHANGE PACKAGE - FUNCTION 0.
- XJR2 SA2 B3 RA
- SX0 B5 RELATIVE ADDRESS
- IX0 X0+X2 ABS ADDRESS
- SX2 B2 CONTROL POINT ADDRESS
- IX7 X0-X2 DIFFERENCE OF MOVE
- ERX2 X0 READ FIRST WORD
- EQ XJR1 COPY EXCHANGE PACKAGE
- XJR3 SX7 B0
- MX0 -12
- EQ MTRX EXIT MONITOR
- XJRA CON 37600200000000000002B BIT SET FOR REGISTER REPLACE
- TITLE PPU MONITOR REQUEST PROCESSOR.
- ** PMN - PPU MONITOR REQUEST PROCESSOR.
- *
- * ENTRY (X0) = REQUEST.
- *
- * ENTERED AT *PMN1* FROM */ISD/PMR*.
- * ENTERED AT *PMN4* FROM */ISD/PMR* AND */DCP/PCX*.
- PMN RC X5 READ CPU CLOCK IF 180 MACHINE
- SX7 B0+
- PX6 B0,X5 PRESET AS RA+1 PROCESS
- SA7 PPXL CLEAR *PP EXCHANGE PENDING*
- SA6 CL+CMST+A0 SET CALL TYPE AND BASE TIME
- TNO /CME/RTC,CME UPDATE REAL TIME CLOCK FROM CPU CLOCK
- * ENTRY FROM /ISD/MNR.
- PMN1 NZ X0,PMN2 IF NOT *CCPF* REQUEST
- ERRNZ CCPF CODE DEPENDS ON VALUE
- * PROCESS *CCPF* FUNCTION - RA+1 CALL DETECTED BY *MTR*.
- SA1 CPAL+A0 SET ACTIVE CP ADDRESS
- AX1 24
- SA2 B2+B1 CHECK ACTIVE RA
- AX2 36
- SB7 X1
- ZR X2,MTRX IF RA=0, EXIT
- TA5 20B,SP SET DUMMY RA
- BX6 X2 RA ADDRESS
- SX7 B1
- IX7 X2+X7 RA+1 ADDRESS
- ERX5 X7 READ (RA+1)
- SA7 RA1 STORE RA+1
- SA6 A7-B1 STORE RA
- SB3 A7-B1 RA
- NZ X5,CPR PROCESS CPU REQUEST IF PRESENT
- EQ MTRX EXIT
- * OTHER REQUESTS.
- PMN2 SX1 X0-MXPF
- PL X1,PMN4 IF PPU REQUEST
- SA3 TPMN-1+X0 SET REQUEST PROCESSOR
- SX7 X0+2000B SET FUNCTION
- LX7 48
- BX6 X7+X5
- SA6 CL+CMST+A0 SET FUNCTION AND BASE TIME
- MX7 24
- BX2 -X7*X0
- AX2 24
- SB6 X3
- SB7 X2 SET CP ADDRESS/PARAMETER
- BX7 X7-X7
- * EXIT TO PROCESSOR WITH-
- * (X0) = REQUEST.
- * (X2) = CP ADDRESS/PARAMETER.
- * (X7) = 0.
- * (B6) = PROCESSOR ADDRESS.
- * (B7) = CP ADDRESS/PARAMETER.
- TJP (/PROBE/PMN,PROBE,B6) PROCESS REQUEST
- * PROCESS PPU REQUEST.
- * ENTRY FROM */ISD/MNR* AND */DCP/PCX*.
- * (X0) = OUTPUT REGISTER ADDRESS.
- * (X5) = MONITOR MODE ENTRY TIME IF 180 MACHINE.
- PMN4 BX3 X5 SET START TIME FOR *PPR*
- SA5 X0+ READ OUTPUT REGISTER
- UX1,B4 X5 UNPACK FUNCTION CODE AND PARAMETERS
- SB4 B4+1777B
- EQ PPR0.1 PROCESS PPU REQUEST
- CSWF SPACE 4,10
- ** CSWF - SWITCH CPU.
- *
- * ENTRY
- *T, X0 42/,18/ CSWF
- *
- * EXIT TO *BNJ1* IF CPU TO BE SWITCHED.
- PMN CSWF
- SA1 TSCL+A0
- SA2 RTCL
- SA3 CSWL+A0
- MX6 -36
- BX1 -X6*X1
- BX2 -X6*X2
- NG X3,BNJ1 IF CPU SWITCH REQUESTED
- IX2 X2-X1
- PL X2,BNJ1 IF RECALL SLICE EXPIRED
- EQ MTRX EXIT
- ARTF SPACE 4
- ** ARTF - ADVANCE RUNNING TIME.
- *
- * ENTRY
- *T X0 42/,18/ ARTF
- *
- * EXIT NONE.
- PMN ARTF
- ART SB3 ART1 SET *CPT* RETURN ADDRESS
- SB6 B0+
- TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
- ,/CPT)
- ART1 SA3 RTCL
- SA2 JSCL
- MX7 -24
- SB4 MTRX
- AX3 36
- BX2 -X7*X2
- SB6 B2
- SB7 X1+
- IX4 X3-X2
- AX1 18
- NG X4,ART3 IF NOT TIME TO CALL *1SJ*
- SB4 SJS
- ART3 ZR X1,CJS IF USER JOB EXECUTING
- JP B4
- CSTF SPACE 4,10
- ** CSLF - CHECK SUBCP TIME LIMIT.
- *
- * ENTRY
- *T,X0 42/,18/ CSLF.
- *
- * EXIT NONE.
- PMN CSLF
- SA1 ACPL+A0
- MX7 -36
- BX1 -X7*X1
- ZR X1,MTRX IF NO SUBCP
- SA3 RTCL
- BX3 -X7*X3
- IX3 X3-X1
- NG X3,MTRX IF NO TIME LIMIT
- SA1 CPAL+A0 SET ACTIVE CP ADDRESS
- SX7 TLET TIME LIMIT
- AX1 24
- SB7 X1 SET CPA ADDRESS
- EQ SEF SET ERROR FLAG
- EPRF SPACE 4,10
- ** EPRF - ENTER PROGRAM MODE REQUEST.
- *
- * ENTRY
- *T, X0 24/,12/ PR,6/,18/ EPRF
- * PR PROGRAM MODE REQUEST NUMBER AS DEFINED IN COMSMTR.
- *
- * EXIT REQUEST BIT SET IN *PR*.
- PMN EPRF
- TZR B7,(/MONITOR/EPR1,SMXF,/MONITOR/EPR3) IF *MSTF*
- ERRNZ MSTF
- PX0 X7 POSITION REQUEST BIT
- AX0 X0,B7
- SB3 B7-MECF
- NZ B3,EPR IF NOT *MECF*
- TSX6 (EEMC-1+300B,ESM170,EEMC-1+100B)
- TX2 MECS SET MAXIMUM MEMORY
- TLX2 (6,ESM170,0)
- TX1 MECNF
- BX2 X1+X2
- LX2 3
- TEQ (/MONITOR/EPR2,SMXF,/MONITOR/EPR3) PROCESS *MECF*
- * MODIFY STORAGE MOVE EXCHANGE PACKAGE IF EXTERNAL
- * USER ECS IS DEFINED ON AN 865/875 MAINFRAME.
- * FOR *MSTF*, CM COPY FLAG SET AND FLE = MACHINE CM FL.
- * FOR *MECF*, CM COPY FLAG CLEAR AND FLE = MACHINE ECS FL.
- EPR1 TSX6 (EEMC-1+700B,ESM170,EEMC-1+500B)
- TX2 MCMS SET MAXIMUM MEMORY
- EPR2 TLX2 (36-18,ESM170,36+6-18)
- SX1 SMIN SET XP A5 = *SMIN*
- LX6 48
- BX7 X1+X2
- SA6 SMPXP+3
- LX7 18
- SA7 SMPXP+5
- EPR3 SB3 EPR4 SET RETURN ADDRESS
- SX7 B7+1 SAVE REQUEST
- SA7 SMPR
- EQ SCA CONVERT CP/PCP ADDRESS
- EPR4 SA2 A2 REREAD *SMRL*
- SX6 B7
- SA6 SMPXP+7 SET CP/PCP ADDRESS IN MOVE XP
- BX7 X2
- MX0 -12
- AX2 24 POSITION BLOCK MOVE STATUS
- SX5 X7
- BX6 -X0*X2 EXTRACT HOLE POINT NUMBER
- AX7 48
- SA6 TSMA
- ZR X6,EPR6 IF NOT FIELD LENGTH SWAP
- MX7 -24
- AX5 12
- LX6 1
- TB5 X5,MCT MCT BASE ADDRESS
- SA3 B5+X6 READ HOLE POINT MCT ENTRY
- SX6 B1
- BX7 -X7*X3 HOLE
- TA3 DMMS,SDA
- SA7 TSMB SAVE PRE-MOVE HOLE SIZE
- SB3 EPR5 SET *SCA* RETURN ADDRESS
- IX6 X3+X6 INCREMENT DIRECT MOVE COUNT
- LX5 1
- ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
- SA6 A3
- SX2 X2
- SB6 X5+FLSW SET FL CONTROL WORD ADDRESS
- SA3 B6+B7
- AX3 12 POSITION RA/RAX
- SX5 X3
- EQ SCP SET CP/PCP ADDRESS OF HOLE
- EPR5 SA4 B6+B7 CALCULATE FWA OF HOLE
- AX3 48-12
- BX1 -X0*X4 EXTRACT FL/FLX
- AX4 12
- IX3 X5-X3 RA/RAX - NFL OF REQUESTOR
- SX4 X4
- IX4 X4+X1 HOLE BEGINS AT RA/RAX + FL/FLX
- IX7 X4-X3
- EPR6 SA7 SMIN SAVE MOVE INCREMENT
- TB7 SCA
- SB6 SMPXP STORAGE MOVE EXCHANGE PACKAGE
- SB3 MTRX *RCC* RETURN ADDRESS
- EQ RCC RECALL CPU
- RCLF SPACE 4,15
- ** RCLF - RECALL CPU FOR SPECIFIED CONTROL POINT.
- *
- * NOTE ANY ADDITIONAL PROGRAMS IN *X* STATUS RECALL WHOSE
- * TIME HAS EXPIRED AND WHICH DIRECTLY FOLLOW THE
- * REQUESTED CONTROL POINT WILL ALSO BE RECALLED.
- *
- * ENTRY
- *T X0 24/,12/ CPA,6/,18/RCLF
- * CPA = CONTROL POINT ADDRESS.
- PMN RCLF
- RCL SA1 B7+CWQW CHECK RECALL STATUS
- SA5 B7+CRCW GET *X* STATUS *RQ* LINK
- SB3 RCL1 SET *RCC* RETURN ADDRESS
- SB6 B7 SET EXCHANGE PACKAGE ADDRESS
- LX1 59-46
- PL X1,RCC IF TO RECALL JOB
- EQ MTRX EXIT
- RCL1 MX0 -7
- BX1 -X0*X5
- SA3 RTCL
- SX2 X1-CRCW
- NZ X2,MTRX IF NO LINK TO *RQ* ENTRY
- SA4 MSCL
- MX0 -12
- LX4 12
- BX1 -X0*X5 EXTRACT ADDRESS OF NEXT RECALL ENTRY
- BX6 -X0*X4 EXTRACT RECALL DELAY REDUCTION LIMIT
- SX4 7600B
- SA2 X1
- MX0 -36
- BX3 -X0*X3 EXTRACT REAL TIME
- AX2 12
- IX3 X3+X6 REAL TIME + DELAY REDUCTION LIMIT
- BX6 -X0*X2 EXTRACT RECALL TIME
- BX1 X4*X5 EXTRACT CP ADDRESS
- IX6 X3-X6 ADJUSTED REAL TIME - RECALL TIME
- NG X6,MTRX IF TIME NOT EXPIRED
- SB7 X1+
- EQ RCL LOOP TO RECALL NEXT JOB
- MFLF SPACE 4,15
- ** MFLF - MODIFY FL.
- *
- * ENTRY
- *T, X0 12/ MI, 6/ FL, 6/ ST, 12/ PN, 12/, 12/ MFLF
- * MI MEMORY INCREMENT.
- * FL FL SELECTION.
- * 0 = NFL CHANGE.
- * 4 = FL CHANGE.
- * 10 = MACHINE FL CHANGE (*MABL*, *ACML*, LAST CP MCT).
- * 11 = MACHINE FL CHANGE (LAST CP MCT ONLY)
- * ST STORAGE MEDIUM.
- * 0 = CM TYPE.
- * 1 = XM TYPE.
- * PN CP/PCP NUMBER.
- PMN MFLF
- BX6 X0
- LX6 59-39
- NG X6,MFL3 IF MACHINE FL CHANGE
- SB4 MFL1 SET RETURN FROM *CPA*
- SX3 77B
- SB3 CPA SET RETURN FROM *SCP*
- EQ SCP SET CP/PCP ADDRESS
- MFL1 AX2 36 POSITION PARAMETERS
- AX0 48
- SA1 ACML GET AVAILABLE FL WORD
- SB5 B1+
- BX7 -X0
- BX3 X3*X2 EXTRACT STORAGE MEDIUM
- LX7 12 POSITION INCREMENT FOR XM UPDATE
- NZ X3,MFL2 IF XM
- LX7 24 POSITION INCREMENT FOR CM UPDATE
- MFL2 IX7 X1+X7 UPDATE AVAILABLE CM/XM
- SA7 A1
- TNZ X3,(/UEC/MFX,UEC,/MONITOR/HNG) IF XM
- MX5 -12
- BX1 -X5*X2 EXTRACT TYPE OF FL
- LX0 6
- AX1 6
- NZ X1,SFL1 IF NOT NFL CHANGE
- SA2 B7+FLSW
- LX0 48-6 POSITION INCREMENT FOR *FLSW*
- SA1 A2+B1
- IX7 X2+X0 ADJUST NFL
- LX0 12+12
- TA3 X6,MCT READ MCT ENTRY
- IX1 X1+X0
- AX3 48-1 INDEX TO BACKWARD LINK
- LX0 12
- IX6 X1-X0 ADJUST RA - NFL
- SA7 A2
- LX0 -24 POSITION INCREMENT FOR MCT
- AX7 12
- SA6 A1 UPDATE *FLSW* + 1
- TA3 X3,MCT
- SB4 MTRX SET RETURN FROM *CRA*
- IX6 X3-X0 ADJUST UNASSIGNED CM BELOW CP/PCP
- SA6 A3
- NG X0,CRA6 IF NFL DECREASE
- MX3 -24
- BX3 -X3*X7 RA/100
- BX1 -X5*X0 INCREMENT / 100
- AX7 36
- LX1 6 INCREMENT (AMOUNT TO CLEAR)
- BX2 -X5*X7 NFL/100
- IX2 X3-X2
- LX2 6 FWA OF NFL
- SB3 CRA6 SET RETURN FROM *CSM*
- TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
- * PROCESS CHANGE IN MACHINE FL (SPECIAL *VER* REQUEST).
- MFL3 BX2 X0 GET MEMORY INCREMENT/DECREMENT
- AX2 48
- BX2 -X2
- LX6 59-36-59+39
- NG X6,MFL4 IF *MABL*/*ACML* NOT TO BE UPDATED
- SA1 MABL ADJUST MACHINE FL
- LX2 12
- IX6 X1+X2
- SA6 A1+
- LX2 24
- SA1 ACML ADJUST AVAILABLE CM
- IX6 X1+X2
- SA6 A1+
- SX2 B0+ CLEAR UNASSIGNED MEMORY AT LAST CP
- MFL4 TX6 -1,SC GET MCT INDEX FOR LAST CP
- LX6 1
- TA1 X6,MCT CHANGE UNASSIGNED MEMORY VALUE FOR LAST CP
- MX6 48
- BX1 X6*X1
- BX2 -X6*X2
- BX6 X1+X2
- SA6 A1+
- EQ MTRX EXIT
- MRAF SPACE 4,10
- ** MRAF - MODIFY RA.
- *
- * ENTRY
- *T, X0 12/ MI, 12/ ST, 12/ PN, 12/, 12/ MRAF
- * MI MEMORY INCREMENT.
- * ST STORAGE MEDIUM.
- * 0 = CM TYPE
- * 1 = XM TYPE
- * PN CP/PCP NUMBER.
- PMN MRAF
- SB3 MRA1
- EQ SCP SET CP/PCP ADDRESS
- MRA1 AX0 36 POSITION PARAMETERS
- MX3 -12
- SB4 MTRX SET EXIT ADDRESS
- BX3 -X3*X0
- AX0 12 POSITION INCREMENT
- TNZ X3,(/UEC/MRX,UEC,/MONITOR/HNG) IF XM REQUEST
- SA2 B7+FLSW READ FL CONTROL WORD
- BX5 X0
- SA1 B7+B1 READ EXCHANGE PACKAGE
- LX2 -RSHF
- IX7 X2+X0 UPDATE RA
- MX6 -RMSK
- BX6 -X6*X7 NEW RA
- MX3 -36
- LX6 36+6 POSITION NEW RA FOR XP
- BX1 -X3*X1
- LX7 RSHF REPOSITION *FLSW*
- SA3 A2+B1
- LX5 24 POSITION INCREMENT
- BX6 X6+X1
- SB5 B0
- + SA7 A2 UPDATE CONTROL POINT AREA
- IX7 X3+X5
- SA6 A1 MODIFY EXCHANGE PACKAGE
- SA7 A3
- EQ UMT1 UPDATE MEMORY CONTROL TABLE
- MSCF SPACE 4
- ** MSCF - MONITOR STEP CONTROL.
- *
- * ENTRY
- *T, X0 30/,12/ P,18/ MSCF
- *
- * P PARAMETER.
- * O = SET MONITOR STEP.
- * 1 = CLEAR MONITOR STEP.
- PMN MSCF
- SA1 MSCA+B7
- GT B7,B1,* IF NOT VALID PARAMETER
- NO
- BX6 X1
- SA6 PPR
- EQ MTRX EXIT
- MSCA EQ MSC2 DISABLE PPU *MXN* PROCESSOR
- MSC1 SA5 A5 ENABLE PPU *MXN* PROCESSOR
- RC X3
- SX6 B0
- UX1,B4 X5
- EQ PPR0 PROCESS REQUEST
- * ENTERED FROM *PPR* WHEN STEP IS SET.
- MSC2 TX7 A5,-SP
- PL X7,MSC1 IF PSEUDO PP
- SA5 A5 INDICATE THAT CPU EXCHANGE HAS OCCURRED
- SX1 B1
- LX1 57
- BX7 X1+X5
- SA7 A5
- EQ MTRX DONT PROCESS REQUEST
- PRQF SPACE 4,10
- ** PRQF - PROCESS RECALL REQUEST.
- *
- * ENTRY
- *T, X0 12/,12/,12/ AD,6/,18/ PRQF
- * AD ADDRESS OF REQUEST TO RECALL.
- PMN PRQF
- SA1 RQ+TAQR
- AX1 18
- MX2 -12
- SX7 X1+
- SA3 B7+
- PRQ1 SA1 X7 FIND NEXT ENTRY IN QUEUE
- BX7 -X2*X1
- SB6 X7+
- ZR X7,MTRX IF ENTRY NOT IN QUEUE
- NE B6,B7,PRQ1 IF NOT THIS ENTRY
- SA4 B7+RECW-RCCW READ RECALL REQUEST
- AX0 24+7 SET CP ADDRESS
- MX6 -5
- BX7 X2*X1 REPLACE LINK IN ENTRY POINTING TO RECALL
- BX0 -X6*X0
- LX0 7
- BX3 -X2*X3
- BX7 X7+X3
- SB7 X0
- SA7 A1+
- SA1 B7+STSW ADD FREE ENTRY TO CONTROL POINT
- SA3 B6+ CHECK RECALL CRITERION
- SX0 A4-B7
- LX3 12
- BX3 -X2*X3
- MX2 -4
- SX3 X3-PTRF
- SX0 X0-RECW+1-20B
- NZ X3,PRQ2 IF ROLLOUT NOT INHIBITED
- SX0 X0-400B
- PRQ2 BX7 -X2*X1
- BX1 X2*X1 CLEAR OLD NEXT FREE ENTRY
- MX6 0 CLEAR RECALLED REQUEST
- SA7 B6
- SA6 A4+
- SA3 A4+REPW-RECW GET PARAMETER WORD
- SA6 A3
- IX7 X1+X0
- BX6 X4
- SA7 A1 UPDATE STSW
- BX7 X3
- LX4 18
- SA7 APQA SET PARAMETER WORD
- SX3 X4-3R1AJ
- SB3 MTRX *APQ* RETURN ADDRESS
- ZR X3,PRQ3 IF *1AJ*
- SX4 X4-3RCIO
- SB4 B0+ SET LIBRARY TO BE SEARCHED
- TA5 1,FP SET *MTR*-S OUTPUT REGISTER ADDRESS
- NZ X4,APQ IF NOT *CIO*
- TA5 10B,SP SET FAKE RA+1
- SA6 /CPUCIO/IR
- SA7 /CPUCIO/MB
- SA1 SMRL CHECK IF CONTROL POINT MOVING
- MX4 -12
- BX3 -X4*X1
- LX3 7
- SB5 X3
- NE B5,B7,/CPUCIO/CPC IF CONTROL POINT NOT MOVING
- SB5 MVPR MOVE IN PROGRESS
- EQ /CPUCIO/RCR REQUEUE *CIO* CALL
- * CHECK FOR NO ACTIVITY IF *1AJ* IS COMING OUT OF RECALL.
- PRQ3 SA1 B7+STSW GET CONTROL POINT ACTIVITY
- SA7 AQRA SAVE PARAMETER WORD IF REQUEUE NEEDED
- MX0 -12
- LX1 12
- BX7 -X0*X1 PP AND CPU ACTIVITY
- LX1 59-24-12
- NG X1,PRQ4 IF ROLLOUT SET
- SA2 B7+JCIW GET DIS FLAG
- SX0 B1
- LX2 0-21
- BX2 X0*X2
- IX7 X7-X2
- PRQ4 LX1 24-59-8
- MX0 -4
- BX1 -X0*X1 PP-S IN RECALL
- IX7 X1+X7
- NZ X7,REC2 IF ACTIVITY, RECALL REQUEST
- SA2 B7+TFSW GET JOB EJT ORDINAL
- MX1 -12
- LX2 12
- BX2 -X1*X2
- CX3 X2,EJT CONVERT EJT ORDINAL TO OFFSET
- + ZR X2,* IF NO EJT ORDINAL
- TA2 X3+JSNE,EJT GET EJT ENTRY
- SX1 B1
- BX3 X1*X2 CHECK JOB INTERLOCK
- NZ X3,REC2 IF JOB INTERLOCK ALREADY SET
- BX7 X2+X1 SET JOB INTERLOCK
- LX1 6-0
- BX7 X7+X1 SET JOB ADVANCE FLAG
- SA7 A2
- R= B4,LA1AJ SET *1AJ* LOAD PARAMETERS
- EQ APQ ASSIGN *1AJ*
- TCSF SPACE 4,10
- ** TCSF - SWITCH CPU ON TIMESLICE.
- *
- * ENTRY
- *T, X0 42/,18/ TCSF
- *
- * EXIT TO *BNJ1* IF CPU TO BE SWITCHED.
- PMN TCSF,.CSWF
- PCXF SPACE 4
- ** PCXF - PROCESS CPU EXCHANGE REQUEST.
- *
- * ENTRY
- *T X0 42/,18/ PCXF
- *
- * EXIT NONE.
- PMN PCXF,(/DCP/PCX,DCP,/MONITOR/HNG)
- ARMF SPACE 4
- ** ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
- * *ARMF* IS CALLED ONCE EVERY SECOND BY PPU MONITOR
- * TO DO THE FOLLOWING.
- * 1) STATUS FLAG REGISTER BITS.
- * 2) WRITE REAL TIME CLOCK TO ECS.
- * 3) DETERMINE STATUS OF OTHER MAINFRAMES BY INTEROGATING
- * THEIR ECS CLOCKS. (DONE EVERY 2 SECONDS)
- *
- * ENTRY
- *T X0 24/,12/ S,6/,18/ ARMF
- * (B7) = S = 0 IF MAINFRAMES NOT TO BE STATUSED.
- *
- * EXIT
- * EXITS TO ART.
- PMN ARMF,(/MMF/ARM,MMF,/MONITOR/HNG)
- UCCF SPACE 4
- ** UCCF - UPDATE CTI CLOCK.
- *
- * ENTRY
- *T X0 42/,18/ UCCF
- PMN UCCF
- * ENTER HERE FROM *ADTF* PROCESSOR.
- UCC1 SA5 INWL CHECK CTI CLOCK UPDATE ACTIVE FLAG
- MX2 1
- LX5 59-3
- NG X5,MTRX IF *1MA* ALREADY CALLED
- * SET CTI CLOCK UPDATE ACTIVE FLAG AND CALL *1MA*.
- TB7 SCA SET SYSTEM CONTROL POINT
- BX7 X2+X5
- SB3 MTRX SET EXIT ADDRESS
- LX7 3-59
- SA1 UCCA SET PP CALL
- BX6 X1
- SA7 A5 SET CTI CLOCK UPDATE ACTIVE FLAG
- SB4 LA1MA SET INDEX INTO *TAPQ* TABLE
- EQ APQ ASSIGN PP
- UCCA VFD 18/0L1MA,6/0,12/6,24/0
- CRAF SPACE 4,10
- ** CRAF - CHANGE RA.
- *
- * ENTRY
- *T, X0 12/ HN, 12/ ST, 12/ PN, 6/ PF, 18/ CRAF
- * HN HOLE POINT NUMBER.
- * ST STORAGE MEDIUM.
- * 0 = CM TYPE
- * 1 = XM TYPE
- * PN CONTROL POINT NUMBER.
- * PF = UPPER 6 BITS OF *RSTM* FLAG BYTE.
- PMN CRAF
- SB6 B7+0 SAVE CP/PCP NUMBER
- SB3 CRA1
- EQ SCP SET CP/PCP ADDRESS
- CRA1 AX0 22-0
- MX7 -2
- BX7 -X7*X0 PSEUDO-ROLLIN, PSEUDO-ROLLOUT FLAGS
- AX0 36-1-22+0 POSITION STORAGE TYPE
- ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
- MX5 -12
- BX4 -X5*X0
- SB5 B7+
- AX0 12+1
- SX4 X4+FLSW
- BX2 X0 SET CP/PCP NUMBER FOR *SCP*
- SB3 CRA2 *SCP* EXIT ADDRESS
- EQ SCP GET CPA/PCPA ADDRESS
- CRA2 SA3 B7+X4 READ FL CONTROL WORD
- BX2 -X5*X3 FL
- BX0 X6
- LX3 -12
- SB4 MTRX SET EXIT ADDRESS
- BX6 X3
- SX1 X3
- ZR X7,CRA3 IF JOB INITIATION/ROLLIN FROM MASS STORAGE
- LX6 12
- LX3 -48+12
- SA6 B5+X4 MOVE FL CONTROL WORD
- BX2 -X5*X3 NFL (0 IF RAE UPDATE)
- SA3 A3+1 SAVE *FLSW*+1
- SB3 A6+1
- SB5 B7
- BX2 -X2 -NFL (-0 IF RAE UPDATE)
- CRA3 IX6 X1+X2 ADJUST RA
- LX6 12
- SA6 B5+X4
- LX4 59-2
- ERRNZ ECSW-25B CODE DEPENDS ON VALUE
- ERRNZ FLSW-23B CODE DEPENDS ON VALUE
- SX1 4000B
- NG X4,CRA4 IF EM REQUEST
- BX6 X6+X1 BUILD *FLSW*+1
- LX6 12
- SA6 A6+1
- ZR X7,CRA4 IF JOB INITIATION/ROLLIN FROM MASS STORAGE
- BX7 X3
- SA7 B3 MOVE OTHER *FLSW*+1
- CRA4 AX4 59 SIGN EXTEND MEMORY TYPE FLAG
- SX3 1
- MX5 12 SET LINK BYTE MASK
- BX6 X3*X4
- SX2 B6
- TB5 X6,MCT
- * STEP 1. MCT ENTRY FOR CP/PCP BELOW HOLE - CHANGE FORWARD
- * LINK TO REQUESTING CP AND CLEAR UNASSIGNED MEMORY.
- SA3 X0+B5 GET MCT ENTRY
- MX7 -24
- LX5 -12
- BX6 X7*X3 REMOVE UNASSIGNED MEMORY
- CRA5 LX2 36
- BX6 -X5*X6
- BX6 X6+X2 CHANGE FORWARD LINK
- SA6 A3
- * STEP 2. MCT ENTRY FOR CP/PCP ABOVE HOLE - CHANGE BACKWARD
- * LINK TO REQUESTING CP.
- BX4 X5*X3 OLD FORWARD LINK
- AX4 36-1
- SA1 X4+B5 GET MCT ENTRY
- LX5 12
- BX1 -X5*X1 REMOVE BACKWARD LINK
- LX2 12
- BX6 X2+X1 BACKWARD LINK TO REQUESTING CP
- SA6 A1
- * STEP 3. MCT ENTRY FOR REQUESTING CP - CHANGE BACKWARD LINK
- * TO CP/PCP OF STEP 1, CHANGE FORWARD LINK TO CP/PCP
- * OF STEP 2 AND SET UNASSIGNED MEMORY FROM HOLE.
- LX2 12+1
- BX3 -X7*X3 UNASSIGNED MEMORY FROM HOLE
- LX0 48-1
- BX3 X0+X3 CHANGE BACKWARD LINK
- SA2 X2+B5
- LX4 36-1
- BX6 X3+X4 CHANGE FORWARD LINK
- SA6 A2
- * STEP 4. MCT ENTRY BELOW REQUESTING CP - CHANGE FORWARD
- * LINK TO CP ABOVE REQUESTOR AND ACCUMULATE ANY
- * UNASSIGNED MEMORY PREVIOUSLY ABOVE REQUESTOR.
- BX3 X5*X2 EXTRACT REQUESTOR-S BACKWARD LINK
- AX3 48-1
- BX1 -X5*X2 REMOVE BACKWARD LINK
- SA4 X3+B5
- LX5 -12 POSITION MASK
- BX4 -X5*X4
- IX6 X4+X1 ADD FORWARD LINK AND UNASSIGNED MEMORY
- SA6 A4
- * STEP 5. MCT ENTRY ABOVE REQUESTING CP - CHANGE BACKWARD
- * LINK TO CP BELOW REQUESTOR.
- BX2 X5*X2 EXTRACT REQUESTOR-S FORWARD LINK
- AX2 36-1
- LX5 12 REPOSITION MASK
- SA4 X2+B5
- BX4 -X5*X4 REMOVE OLD LINK
- LX3 48-1
- BX6 X3+X4 SET NEW BACKWARD LINK
- SA6 A4
- CRA6 SX7 0 INDICATE FUNCTION COMPLETE
- SA7 SMRL
- JP B4 EXIT
- ADTF SPACE 4,10
- ** ADTF - ADVANCE DATE AND TIME.
- *
- * ENTRY
- *T, X0 12/ BA,24/,12/ 0,12/ ADTF
- *
- * BA = 0 IF CALLED TO ADVANCE DATE AND TIME.
- * = BUFFER ADDRESS IF CALLED TO ENTER DATE AND TIME.
- *
- * EXIT NONE.
- PMN ADTF
- MX5 -12
- LX0 -48
- BX0 -X5*X0 BUFFER ADDRESS IF ENTER DATE/TIME CALL
- SA1 X0
- ZR X0,ADT2 IF CALLED TO ADVANCE DATE/TIME
- * ENTER DATE AND TIME.
- SA2 A1+B1
- BX6 X1
- BX7 X2
- SA6 JDAL UPDATE *JDAL*
- ERRNZ PDTL-JDAL-1 CODE DEPENDS ON VALUES
- SA7 A6+B1 UPDATE *PDTL*
- SA1 A2+B1
- BX6 X1
- SA2 A1+B1
- ERRNZ TIML-PDTL-1 CODE DEPENDS ON VALUES
- SA6 A7+B1 UPDATE *TIML*
- BX7 X2
- ERRNZ DTEL-TIML-1 CODE DEPENDS ON VALUES
- SA7 A6+B1 UPDATE *DTEL*
- SA1 A2+B1
- LX1 -48
- BX6 -X5*X1
- ZR X6,ADT1 IF NO DAY LIMIT UPDATE REQUIRED
- SA6 ADTA UPDATE DAY LIMIT
- ADT1 BX7 X7-X7
- SA1 MABL
- LX1 59-47
- SA7 X0 CLEAR *DSD* INTERLOCK
- NG X1,MTRX IF NOT CYBER 180
- LX1 59-42-59+47
- PL X1,MTRX IF NOT CYBER 180
- EQ UCC1 CHECK FOR CTI CLOCK UPDATE REQUIRED
- * ADVANCE DATE AND TIME IN *PDTL*.
- ADT2 SA1 JDAL
- ERRNZ PDTL-JDAL-1 CODE DEPENDS ON VALUES
- SA2 A1+B1 READ *PDTL*
- LX2 -6 LEAVE SECONDS UNCHANGED
- MX7 -6
- BX2 X7*X2 RESET MINUTES
- LX2 -6
- SX0 B1
- SB4 6
- SB3 12
- IX2 X2+X0 ADVANCE HOURS
- BX4 -X7*X2
- SX4 X4-24D
- NG X4,ADT6 IF NOT END OF DAY
- SA4 ADTA
- BX2 X7*X2 RESET HOUR = 0
- SB3 B3+B4
- LX2 -18+12
- IX2 X2+X0 ADVANCE DAY IN *PDTL*
- BX6 -X7*X2
- BX6 X4-X6
- NZ X6,ADT3 IF NOT END OF MONTH
- BX2 X7*X2
- IX2 X2+X0 RESET DAY = 1
- SB3 B3+B4
- LX2 -24+18
- IX2 X2+X0 ADVANCE MONTH IN *PDTL*
- BX4 -X7*X2
- SA3 X4+TDLM SET NEW DAY LIMIT
- SX6 X3+1
- SA6 A4+
- SX4 X4-13D
- NG X4,ADT3 IF NOT END OF YEAR
- BX2 X7*X2
- IX2 X2+X0 RESET MONTH = 1
- SB3 B3+6
- LX2 -30+24
- IX2 X2+X0 ADVANCE YEAR
- SX6 28 RESET FEBRUARY *TDLM* ENTRY
- MX4 -18
- BX1 X4*X1
- SX4 3R000
- BX1 X1+X4 RESET JULIAN DAY
- SX4 3
- BX4 X4*X2
- SX4 X4-2 CORRECT PACKED DATE TO NEAREST LEAP YEAR
- NZ X4,ADT2.1 IF NOT LEAP YEAR
- SX6 X6+B1 ADJUST FOR LEAP YEAR
- ADT2.1 SA6 TDLM+2
- * ADVANCE JULIAN DAY.
- ADT3 SX6 1R0
- SB5 B0+
- ADT4 IX1 X1+X0
- BX4 -X7*X1
- SX4 X4-45B
- NG X4,ADT5 IF NOT DIGIT OVERFLOW
- BX1 X7*X1
- BX1 X1+X6 RESET DIGIT TO DISPLAY CODE 0
- LX1 -6
- SB5 B5+B4
- EQ ADT4 INCREMENT NEXT DIGIT
- ADT5 LX1 X1,B5 RESTORE *JDAL* POSITION
- MX4 -18
- BX4 -X4*X1
- SX4 X4-3R001
- NZ X4,ADT6 IF NO NEED TO ADVANCE JULIAN YEAR
- SB5 B5-18
- PL B5,ADT6 IF JULIAN YEAR ALREADY ADVANCED
- LX1 -18
- SB5 18
- EQ ADT4 ADVANCE YEAR
- * CONSTRUCT *TIML*.
- ADT6 LX6 X2,B3 RESTORE *PDTL* POSITION
- SA6 A2 UPDATE *PDTL*
- BX4 X6
- BX6 X1
- SA6 A1+ UPDATE *JDAL*
- LX4 -12
- BX3 -X7*X4 HOUR FROM *PDTL*
- ERRNZ TIML-PDTL-1 CODE DEPENDS ON VALUES
- SA2 A2+B1 READ *TIML*
- SX1 2R00
- LX2 -24
- BX2 X5*X2 RESET MINUTES IN *TIML*
- BX2 X2+X1
- LX2 -42+24
- BX2 X5*X2 CLEAR HOUR FIELD OF *TIML*
- SB3 -1 CONVERT OCTAL HOUR TO DECIMAL DISPLAY CODE
- SB5 X3+ OCTAL HOUR
- ADT7 SB4 B5
- SB3 B3+B1
- SB5 B4-10D
- PL B5,ADT7 IF CONVERSION TO DECIMAL INCOMPLETE
- SX6 B3 LEFT DIGIT VALUE
- LX6 6
- SX3 B4+ RIGHT DIGIT VALUE
- BX3 X6+X3 COMBINE DIGIT VALUES
- IX3 X3+X1 CONVERT TO DISPLAY CODE
- BX6 X2+X3 MERGE DISPLAY CODE HOURS INTO *TIML*
- LX6 42
- SA6 A2+ UPDATE *TIML*
- * CONSTRUCT *DTEL*.
- ERRNZ DTEL-TIML-1 CODE DEPENDS ON VALUES
- SA2 A6+B1 READ *DTEL*
- LX2 12
- SB6 3
- ADT8 LX2 -18
- BX2 X5*X2 CLEAR 12 BIT FIELD
- LX4 -6 POSITION *PDTL*
- BX3 -X7*X4 *PDTL* 6 BIT VALUE
- NE B6,B1,ADT9 IF NOT CONVERTING YEAR
- SX3 X3+70D BIAS YEAR BY 1970
- ADT9 SB3 -1 CONVERT OCTAL VALUE TO DECIMAL DISPLAY
- SB5 X3+ OCTAL VALUE
- ADT10 SB4 B5
- SB3 B3+B1
- SB5 B4-10D
- PL B5,ADT10 IF CONVERSION TO DECIMAL INCOMPLETE
- SX6 B3-10D
- ZR X6,ADT11 IF CENTURY ROLLOVER
- SX6 B3 LEFT DIGIT VALUE
- LX6 6
- ADT11 SX3 B4 RIGHT DIGIT VALUE
- BX3 X6+X3 COMBINE DIGIT VALUES
- IX3 X3+X1 CONVERT DIGITS TO DISPLAY CODE
- BX2 X2+X3 MERGE DATA INTO *DTEL*
- SB6 B6-B1
- NZ B6,ADT8 IF NOT DONE BUILDING *DTEL*
- LX2 42
- BX6 X2
- SA6 A2 UPDATE *DTEL*
- EQ MTRX EXIT
- ADTA CON 0 DAY LIMIT
- ** TABLE OF DAY LIMITS.
- TDLM EQU *-1
- LOC 1
- CON 31 JANUARY
- CON 28 FEBRUARY
- * CON 29 (LEAP YEAR)
- CON 31 MARCH
- CON 30 APRIL
- CON 31 MAY
- CON 30 JUNE
- CON 31 JULY
- CON 31 AUGUST
- CON 30 SEPTEMBER
- CON 31 OCTOBER
- CON 30 NOVEMBER
- CON 31 DECEMBER
- CON 31 JANUARY (FOR END OF YEAR)
- LOC *O
- SKCF SPACE 4,10
- ** SKCF - SET K DISPLAY COMPLETE BIT.
- *
- * ENTRY
- *T, X0 17/,1/S,6/,12/ CPA,12/,12/ SKCF
- *
- * S SCREEN FLAG.
- * 0 = LEFT SCREEN.
- * 1 = RIGHT SCREEN.
- * CPA CONTROL POINT ADDRESS.
- PMN SKCF
- SA1 B7+TFSW GET EJT ORDINAL
- SA3 SMRL
- MX7 -12
- AX2 7 SET CP NUMBER
- LX1 12
- BX3 -X7*X3 MOVING CP NUMBER
- BX1 -X7*X1 EJT ORDINAL
- BX3 X3-X2
- ZR X1,MTRX IF NO JOB AT CP
- ZR X3,MTRX IF CP MOVING
- CX3 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- LX0 59-42
- SA2 B7+DBAW GET K DISPLAY CONTROL
- TA1 X3+JSNE,EJT GET JOB ADVANCE STATUS
- SA3 B7+FLSW GET RA AND FL
- MX6 -18
- LX4 X2,B1
- LX1 59-6
- BX7 -X7*X3
- AX3 RSHF
- LX7 6 FL
- NG X4,MTRX IF RETURN STATUS NOT SELECTED
- NG X1,MTRX IF JOB ADVANCE SET
- MX4 -RMSK
- PL X0,SKC1 IF PROCESSING LEFT SCREEN
- LX2 -18
- SKC1 BX3 -X4*X3
- BX2 -X6*X2 STATUS WORD RELATIVE ADDRESS
- LX3 6 RA
- IX7 X2-X7
- ZR X2,MTRX IF SCREEN NOT ACTIVE
- PL X7,MTRX IF ADDRESS BEYOND FL
- IX2 X3+X2 STATUS WORD ABSOLUTE ADDRESS
- SA3 B7+CWQW
- ERX1 X2 READ STATUS WORD
- SX6 1
- LX3 59-46
- BX6 X1+X6 SET COMPLETE BIT
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- EWX6 X2 WRITE STATUS WORD
- NG X3,MTRX IF NOT TO RECALL CPU
- SB6 B7 SET EXCHANGE PACKAGE ADDRESS
- SB3 MTRX SET *RCC* EXIT ADDRESS
- EQ RCC RECALL CPU
- CPA SPACE 4,15
- ** CPA - CHECK CPU ACTIVITY.
- *
- * ENTRY (B4) = EXIT ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT (X2) = ORIGINAL (X0).
- * (B3) = ADDRESS OF CP USING CURRENT CPU.
- * (B6) = ADDRESS OF EXCHANGE PACKAGE.
- *
- * USES X - 1, 2.
- * A - 1.
- * B - 3, 5, 6.
- CPA BSS 0 ENTRY
- SA1 CPAL+A0 GET CPU ASSIGNMENT DATA
- SB6 B2
- AX1 24 SET CP ADDRESS
- SB3 X1
- BX2 X0 SAVE (X0)
- ZR B7,RB4 IF CMR STORAGE REQUEST
- SB5 A0-CPAL-1
- EQ B3,B7,RB4 IF JOB EXECUTING IN THIS CPU
- SB6 B7
- SA1 B0-B5
- AX1 24 SET CP ADDRESS
- SB5 X1
- NE B5,B7,RB4 IF JOB NOT RUNNING IN OTHER CPU
- EQ MTRX EXIT
- SCA SPACE 4,10
- ** SCA - SET CP/PCP ADDRESS FROM *SMRL*.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- *
- * EXIT (A2) = *SMRL*.
- *
- * USES X - 1, 2.
- * A - 2.
- SCA BSS 0 ENTRY
- SA2 SMRL GET STORAGE MOVE REQUEST
- MX1 -12
- BX2 -X1*X2 EXTRACT CP/PCP NUMBER
- * EQ SCP
- SCP SPACE 4,15
- ** SCP - SET CP/PCP ADDRESS.
- *
- * ENTRY (X2) = CP/PCP NUMBER.
- * (B3) = EXIT ADDRESS.
- *
- * EXIT (X2) = CP/PCP ADDRESS.
- * (X6) = MCT INDEX FOR CP/PCP.
- * (B7) = CP/PCP ADDRESS.
- * (A6) = *UMTA*.
- * (UMTA) = MCT INDEX FOR CP/PCP.
- *
- * USES X - 1, 2, 6.
- * A - 6.
- * B - 7.
- SCP BSS 0 ENTRY
- LX6 B1,X2 SAVE MCT INDEX
- NO
- SA6 UMTA
- TB7 X2,-SC SUBTRACT SYSTEM CP NUMBER
- TX1 PCPA
- GE B7,B1,SCP1 IF PSEUDO CONTROL POINT
- SB7 X2+B1
- BX1 X1-X1 REAL CP BASE ADDRESS
- SCP1 SX2 B7-B1
- LX2 7
- IX2 X1+X2 FORM ABSOLUTE ADDRESS
- SB7 X2
- JP B3 EXIT
- UMT SPACE 4,15
- ** UMT - UPDATE MEMORY CONTROL TABLE.
- *
- * ENTRY (X0) = INCREMENT.
- * (B4) = EXIT ADDRESS.
- * (B5) = 0 IF CHANGING CM.
- * = 1 IF CHANGING XM.
- * (UMTA) = MCT INDEX FOR CP/PCP.
- *
- * EXIT (SMRL) = 0.
- *
- * USES X - 0, 2, 3, 6, 7.
- * A - 2, 3, 6, 7.
- * B - 5.
- UMT BSS 0 ENTRY
- SA3 SMRL GET MOVE PARAMETERS
- SX6 X3
- BX0 X3 MOVE INCREMENT
- AX6 12
- AX0 48
- SB5 X6+ SET MEMORY TYPE
- * ALTERNATE ENTRY POINT WITH PARAMETERS SET.
- UMT1 SA2 UMTA GET MCT INDEX
- TB5 B5,MCT
- SA3 X2+B5
- IX7 X3-X0 ADJUST UNASSIGNED FL ABOVE CP/PCP
- AX3 48-1
- SA2 X3+B5 ADJUST UNASSIGNED FL BELOW CP/PCP
- SA7 A3
- IX6 X2+X0 UPDATE MCT ENTRY FOR CP/PCP MOVED
- BX7 X7-X7
- SA6 A2 UPDATE BACKWARD LINK
- SA7 SMRL
- JP B4 EXIT
- UMTA CON 0 MCT INDEX FOR CP/PCP
- TITLE PPU REQUEST PROCESSOR.
- PPR SPACE 4
- ** PPU REQUEST PROCESSOR REGISTER USAGE.
- *
- *
- * (A5) = OUTPUT REGISTER ADDRESS.
- PPR SPACE 4
- ** PPR - PPU REQUEST PROCESSOR.
- *
- * ENTRY (OR) = REQUEST.
- PPR SA5 A5 READ OUTPUT REGISTER
- RC X3 GET MONITOR MODE START TIME IF 180 MACHINE
- SX6 B0
- UX1,B4 X5 UNPACK FUNCTION CODE AND PARAMETERS
- * ENTRY FROM *MSCF* PROCESSOR.
- PPR0 SA6 PPXL CLEAR *PP EXCHANGE PENDING*
- SB4 B4+1777B
- * ENTRY FROM *PMN* AND */BUFIO/MNR*.
- PPR0.1 PX6 B4,X3
- SX7 B4-MXFM
- SA6 CL+CMST+A0 SET FUNCTION AND BASE TIME
- SA3 X7+TPPR+MXFM-CPUM READ PROCESSOR CONTROL WORD
- PL X7,HNG IF ILLEGAL REQUEST
- SB6 X3+
- TNG X3,(/PROBE/PPR,PROBE,/MONITOR/RB6) IF FAST EXIT
- TX2 A5-1,-FP
- BX7 X7-X7
- LX2 PPXES-PPCES
- TA2 X2+ACPP,FPX
- LX6 X3,B1 CHECK CPU SELECTION
- SB7 X2 SET CP ADDRESS
- TNG X6,(/DCP/CPS,DCP,/MONITOR/HNG) IF CPU SELECTION
- TJP (/PROBE/PPR,PROBE,B6) EXIT TO FUNCTION PROCESSOR
- ** EXIT TO PROCESSOR WITH -
- *
- * IF FAST EXIT (*FEX*) SELECTED - X2, X7, AND B7 ARE NOT SET.
- *
- * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
- * (X2) = *ACPP*.
- * (X3) = PROCESSOR CONTROL WORD.
- * (X5) = OUTPUT REGISTER.
- * (X7) = 0.
- * (A2) = *ACPP* ADDRESS.
- * (B6) = PROCESSOR ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- PPRX SPACE 4
- * EXIT TO STORE OUTPUT REGISTER.
- PPR1 EQU MTRC
- PPRX EQU MTRX
- ABTM SPACE 4
- *** ABTM - ABORT CONTROL POINT.
- *
- * ENTRY
- *T, OR 12/ ABTM,12/,12/,12/,12/
- *
- * EXIT
- *T, IR 60/ 0
- *T, OR 60/ 0
- *
- * * PP HUNG.* WILL OCCUR IF ATTEMPT IS MADE TO ABORT THE SYSTEM
- * CONTROL POINT OR AN UNOCCUPIED USER CONTROL POINT.
- PPR ABTM,,,DCP
- SX5 PPET ERROR FLAG = *PPU ABORT.*
- SB6 B0 SET ABORT FLAG
- LX5 36
- SB5 B1 FLAG *CEFM* CALL
- EQ CEF1 CHANGE ERROR FLAG
- ACTM SPACE 4,35
- *** ACTM - ACCOUNTING FUNCTIONS.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ FN,36/ -
- *
- * FN = 0 (ABCS) - CLEAR SRU ACCUMULATORS.
- * FN = 1 (ABBF) - ACCOUNT BLOCK BEGIN.
- * FN = 2 (ABSF) - COMPUTE SRU MULTIPLIERS CPM AND IOM.
- * FN = 3 (ABCF) - ACCOUNT BLOCK CHANGE/END.
- * FN = 4 (ABEF) - COMPUTE/CONVERT ELAPSED SRUS.
- * FN = 5 (ABVF) - CONVERT ACCUMULATORS.
- * FN = 6 (ABIF) - INCREMENT ACCUMULATOR.
- * FN = 7 (ABUS) - GET RAW CP TIME - USAGE PRICING.
- * FN = 10 (ABOF) - CONVERT OTHER ACCUMULATORS.
- *
- *
- * 0 ABCS - CLEAR SRU ACCUMULATORS.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABCS,36/
- *
- * EXIT
- *T, OR 60/ 0
- *
- * FUNCTION
- * CLEARS SRU ACCUMULATORS IN CPA WORDS *SRJW* AND *SRUW*.
- *
- *
- * 1 ABBF - ACCOUNT BLOCK BEGIN.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABBF,36/ -
- *T, MB 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
- *
- * EXIT
- *T, OR 60/ 0
- *
- * FUNCTION
- * BEGIN ACCOUNT BLOCK BY INSERTING NEW MULTIPLIERS IN CONTROL
- * POINT AREA AND APPLYING THE INITIAL ADDER TO THE SRU
- * ACCUMULATOR. THE MULTIPLIERS CPM AND IOM ARE CALCULATED.
- *
- *
- * 2 ABSF - COMPUTE SRU MULTIPLIERS CPM AND IOM.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABSF,36/ -
- *
- * EXIT
- *T, OR 60/ 0
- *
- * FUNCTION
- * THE MULTIPLIERS CPM AND IOM ARE CALCULATED USING THE
- * CURRENT CM AND ECS FIELD LENGTHS.
- *
- *
- * 3 ABCF - ACCOUNT BLOCK CHANGE/END.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABCF,36/ -
- *T, MB 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
- *
- * EXIT
- *T, OR 60/ 0
- *
- * FUNCTION
- * CHANGE/END ACCOUNT BLOCK BY CLEARING SRU ACCUMULATORS,
- * REPLACING MULTIPLIERS IN CONTROL POINT AREA AND APPLYING THE
- * ADDER TO THE SRU ACCUMULATOR. THE MULTIPLIERS CPM AND IOM
- * ARE CALCULATED.
- *
- *
- * 4 ABEF - COMPUTE/CONVERT ELAPSED SRUS.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABEF,36/ -
- *T, MB+0 60/ OLD SRU ACCUMULATOR
- *T, MB+1 60/ NEW SRU ACCUMULATOR
- *
- * EXIT
- *T, OR 60/ 0
- *T, MB 60/ ELAPSED SRUS IN F10.3 FORMAT
- *
- * FUNCTION
- * ELAPSED SRUS (NEW-OLD) ARE CONVERTED AND PROGRAM MODE IS
- * ENTERED FOR THE CONVERSION BY *RDC*. IF ELAPSED SRUS
- * ARE LESS THAN OR EQUAL TO *MDSR*, ZERO IS RETURNED.
- *
- *
- * 5 ABVF - CONVERT ACCUMULATORS.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABVF,36/ -
- *T, MB+0 60/ SRUW CONTROL POINT AREA WORD
- *T, MB+1 60/ CPTW CONTROL POINT AREA WORD
- *T, MB+2 60/ IOAW CONTROL POINT AREA WORD
- *T, MB+3 60/ MP1W CONTROL POINT AREA WORD
- *
- * EXIT
- *T, OR 60/ 0
- *T, MB+0 60/ SRU ACCUMULATOR IN F10.3 FORMAT
- *T, MB+1 60/ CP ACCUMULATOR IN F10.3 FORMAT
- *T, MB+2 60/ MS ACCUMULATOR IN F10.3 FORMAT
- *T, MB+3 60/ MT ACCUMULATOR IN F10.3 FORMAT
- *T, MB+4 60/ PF ACCUMULATOR IN F10.3 FORMAT
- *T, MB+5 60/ AD ACCUMULATOR IN F10.3 FORMAT
- *
- * FUNCTION
- * THE ACCUMULATORS ARE UNPACKED AND STORED 1 PER WORD IN (MB)
- * AND PROGRAM MODE IS ENTERED FOR CONVERSION BY *RDC*. IF
- * TOTAL SRUS ARE LESS THAN OR EQUAL TO *MCSR*, *MCSR* IS
- * RETURNED AS THE SRU ACCUMULATOR.
- *
- *
- * 6 ABIF - INCREMENT ACCUMULATOR.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABIF,30/ ,3/OP,3/CT
- *T, MB+0 30/ ,30/INCREMENT TO APPLY
- *T, MB+1 60/ ACCUMULATOR VALUE
- *
- * OP = OPERATION FLAG (0 = ADD, 1 = SUBTRACT)
- * CT = REQUEST COUNT (1-3)
- *
- * EXIT
- *T, OR 60/ 0
- *T, MB+0 30/ NO CHANGE,30/ NEW VALUE FIRST OPERATION
- *T, MB+2 30/ NO CHANGE, 30/ NEW VALUE SECOND OPERATION
- *
- * FUNCTION
- * THE SRU ACCUMULATOR VALUE IS FIRST CONVERTED TO AN INTEGER
- * NUMBER AND THEN INTEGER ADDITION OR SUBTRACTION IS
- * PERFORMED. IF THE CONVERTED ACCUMULATOR VALUE IS LESS THAN
- * 1, 1 IS USED. THE UPPER HALF OF THE WORDS CONTAINING
- * THE INCREMENTS WILL BE PRESERVED IN THE UPPER HALF OF THE
- * REPLY.
- *
- *
- * 7 ABUS - GET RAW CP TIME - USAGE PRICING.
- *
- * ENTRY
- *T, OR 12/ ACTM,12/ ABUS,36/ -
- *T, MB+0 60/ CPTW CONTROL POINT AREA WORD
- *T, MB+1 60/ CPJW CONTROL POINT AREA WORD
- *
- * EXIT
- *T, OR 60/ 0
- *T, MB 60/ ELAPSED APPLICATION UNITS IN F10.3 FORMAT
- *
- * FUNCTION
- * ELAPSED CP SECONDS (CPTW-CPJW) IS CALCULATED AND THE
- * CPU 0 MULTIPLIER IS FACTORED, TO OBTAIN RAW CP SECONDS.
- * PROGRAM MODE IS ENTERED FOR CONVERSION BY *RDC*.
- *
- * 10 ABOF - CONVERT OTHER ACCUMULATORS.
- *
- * ENTRY
- *T,OR 12/ ACTM,12/ ABOF,36/ -
- *T,MB+0 60/ MPAW/ODAW CONTROL POINT AREA WORD
- *T,MB+1 60/ AUCW CONTROL POINT AREA WORD
- *
- * EXIT
- *T,OR 60/ 0
- *T,MB+0 60/ MP ACCUMULATOR IN F10.3 FORMAT
- *T,MB+1 60/ AUC ACCUMULATOR IN F10.3 FORMAT
- *T,MB+2 60/ OD ACCUMULATOR IN F10.3 FORMAT
- *
- * FUNCTION
- * THE ACCUMULATORS ARE UNPACKED AND STORED 1 PER WORD
- * IN (MB) AND PROGRAM MODE IS ENTERED FOR CONVERSION
- * BY ROUTINE *RDC*.
- PPR ACTM,,RDC
- AX1 36 GET FUNCTION NUMBER
- SB4 X1-TACTL
- SA1 A5+B1 GET (MB)
- PL B4,HNG IF ILLEGAL FUNCTION
- JP TACT+TACTL+B4 JUMP TO PROCESS FUNCTION
- * OPTION TABLE.
- TACT BSS 0
- LOC 0
- + SB4 B0 (ABCS) - CLEAR SRU ACCUMULATORS
- MX6 0
- EQ ACT1 CLEAR *SRJW* AND *SRUW* FIELDS
- + EQ ACT2 (ABBF) - ACCOUNT BLOCK BEGIN
- + EQ ACT4 (ABSF) - COMPUTE SRU MULTIPLIERS CPM AND IO
- + MX6 0 (ABCF) - ACCOUNT BLOCK CHANGE/END
- EQ ACT1
- + SA2 A1+B1 (ABEF) - COMPUTE/CONVERT ELAPSED SRUS
- MX3 -42
- EQ ACT6
- + SA1 A1+3 (ABVF) - CONVERT ACCUMULATORS
- EQ ACT7
- + SB6 3 (ABIF) - INCREMENT ACCUMULATORS
- EQ ACT10
- + BX6 X1 (ABUS) - GET RAW CP TIME - USAGE PRICING
- MX0 -30
- EQ ACT15
- SA1 A1+B1 (ABOF) - CONVERT OTHER ACCUMULATORS
- MX2 -29
- EQ ACT9.1
- TACTL BSS 0
- LOC *O
- * CLEAR SRU ACCUMULATORS.
- * (X6) = 0.
- ACT1 SA2 B7+SRJW CLEAR SRU ACCUMULATOR SET AT START OF JOB
- SA6 B7+SRUW CLEAR RUNNING ACCUMULATOR
- MX3 30
- BX7 X3*X2
- SA7 A2+
- SX7 B0+
- PL B4,PPR1 IF *ABCS* SUBFUNCTION
- * STORE MULTIPLIERS IN CONTROL POINT AREA.
- * (X1) = 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
- ACT2 SX6 MPSR SET MAP MULTIPLIER
- SA3 B7+MPMW
- MX2 -12
- LX1 12
- MX4 -42
- BX5 -X2*X1 (X5) = M1
- IX6 X6*X5 M1 * MAP MULTIPLIER
- BX4 -X4*X3
- SA3 B7+MP2W
- LX6 42
- BX6 X4+X6
- SA6 B7+MPMW
- SB4 B1+B1 SET LOOP COUNT
- SX4 1000
- ACT3 LX1 12
- IX6 X5*X4 PASS 1 - M1*1000 PASS 2 - M1*M3
- BX4 -X2*X1
- IX7 X5*X4 PASS 1 - M1*M2 PASS 2 - M1*M4
- LX6 42
- MX4 -24
- LX7 24 POSITION MULTIPLIERS
- BX3 -X4*X3
- IX6 X6+X7 COMBINE MULTIPLIERS
- LX1 12
- IX6 X6+X3 INSERT MULTIPLIERS
- BX4 -X2*X1
- SA6 A3+
- SB4 B4-B1 DECREMENT LOOP COUNT
- SA3 A3-B1 PASS 2 - STORE M1*M3 AND M1*M4 IN MP1W
- NZ B4,ACT3 IF PASS 2
- * APPLY ADDER TO SRU ACCUMULATOR.
- * (X1) = 48/ -,12/ ADDER
- SB3 ACT4 SET RETURN ADDRESS
- BX1 X4
- NZ X4,AAD IF ADDER TO APPLY
- * CALCULATE SRU MULTIPLIERS CPM AND IOM.
- ACT4 SB4 ACT5 SET RETURN ADDRESS
- EQ SRU CALCULATE CPM AND IOM
- ACT5 MX7 0 SET TO CLEAR (OR)
- EQ PPR1 EXIT
- * COMPUTE AND CONVERT ELAPSED SRUS.
- * (X1) = OLD SRU ACCUMULATOR. (X2) = NEW SRU ACCUMULATOR.
- ACT6 LX1 12 RESTORE ORIGINAL ACCUMULATOR SIZE
- SA4 ACTA SET MINIMUM DISPLAY VALUE
- BX1 -X3*X1 ISOLATE OLD SRUS
- SX7 10001B PARAMETERS FOR RDC (PROGRAM MODE)
- BX2 -X3*X2 ISOLATE NEW SRUS
- IX6 X2-X1 NEW - OLD
- SA6 A1 STORE ELAPSED SRUS IN (MB)
- IX4 X6-X4 COMPARE TO MINIMUM
- PL X4,ACT9 IF GREATER THAN MINIMUM
- MX7 0 SET TO CLEAR (OR)
- SA7 A5+B1 CLEAR (MB)
- EQ PPR1 EXIT
- * CONVERT ACCUMULATORS.
- * (X1) = (MB+3) - MP1W WORD FROM CONTROL POINT AREA.
- ACT7 MX2 -20 SET ACCUMULATOR MASK
- SB6 3 SET ACCUMULATOR COUNT
- BX6 -X2*X1 ISOLATE AD ACCUMULATOR
- SX7 60201B PARAMETERS FOR *RDC* (PROGRAM MODE)
- SA1 A1-1 GET MS, MT AND PF ACCUMULATORS
- ACT8 SA6 A1+B6 STORE ACCUMULATOR
- BX6 -X2*X1 ISOLATE NEXT ACCUMULATOR
- AX1 20 SHIFT FOR NEXT PASS
- SB6 B6-B1 DECREMENT ACCUMULATOR COUNT
- PL B6,ACT8 IF MORE TO MOVE
- SA1 ACTB SET MINIMUM CHARGE VALUE
- SA2 A5+B1 SRU ACCUMULATOR
- MX6 -42
- BX6 -X6*X2 ISOLATE SRU ACCUMULATOR
- IX6 X6-X1
- PL X6,ACT9 IF GREATER THAN MINIMUM
- BX6 X1
- SA6 A2
- * ENTER PROGRAM MODE FOR CONVERSION BY RDC.
- * (X5) = (OR). (X7) = RDC PARAMETERS.
- ACT9 MX1 12 SET (OR) MASK
- LX7 24 POSITION RDC PARAMETERS
- BX5 X1*X5 ISOLATE (OR) FUNCTION CODE
- IX5 X5+X7 INSERT RDC PARAMETERS
- EQ PMR ENTER PROGRAM MODE
- * CONVERT OTHER ACCUMULATORS.
- * (X1) = (MB+1) - AUCW WORD FROM CONTROL POINT AREA
- ACT9.1 BX6 -X2*X1 ISOLATE AUC ACCUMULATOR
- SA1 A1-B1 GET MP/OD ACCUMULATOR
- SA6 A1+B1
- MX2 -20 SET ACCUMULATOR MASK
- BX7 -X2*X1
- SA7 A1+ STORE MP ACCUMULATOR
- LX1 -20
- BX6 -X2*X1
- SA6 A6+B1 STORE OD ACCUMULATOR
- SX7 30000B PARAMETERS FOR *RDC* (PROGRAM MODE)
- EQ ACT9 PROCESS CONVERSION IN *RDC*
- * INCREMENT ACCUMULATOR.
- ACT10 MX0 -3
- BX2 -X0*X5 REQUEST COUNT
- SB5 X2
- AX5 3
- BX2 -X0*X5 OPERATION FLAG
- SB4 X2+
- MX0 -42
- ZR B5,HNG IF NO REQUEST COUNT
- GT B5,B6,HNG IF ILLEGAL REQUEST COUNT
- GT B4,B1,HNG IF ILLEGAL OPERATION FLAG
- ACT11 MX3 -30
- SA2 A1+B1 GET NEXT PARAMETER
- BX2 -X0*X2
- BX5 -X3*X1
- PX2 X2 CONVERT ACCUMULATOR TO UNITS
- BX1 X3*X1 PRESERVE UPPER HALF
- SA3 HTH
- FX4 X3*X2 .0000001
- UX2 X4
- NZ X2,ACT12 IF ACCUMULATOR NOT LESS THAN 1
- SX2 B1
- ACT12 ZR B4,ACT14 IF ADDITION DESIRED
- IX6 X2-X5
- ACT13 SA6 A1 STORE REPLY IN MESSAGE BUFFER
- EQ B5,B1,PPR1 IF ALL REQUESTS HONORED
- SA1 A2+B1
- SB5 B5-B1
- EQ ACT11 PROCESS NEXT REQUEST
- ACT14 IX6 X2+X5 PERFORM ADDITION
- BX6 X1+X6
- JP ACT13
- * GET RAW CP TIME - USAGE PRICING.
- ACT15 SB4 ACT15.1 SET *MSB* RETURN ADDRESS
- SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
- EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
- ACT15.1 SA2 A1+B1 GET *CPJW* VALUE
- AX6 8
- BX2 -X0*X2
- IX6 X6-X2 CALCULATE NUMBER OF CP QUARTER SECONDS
- NZ X6,ACT16 IF NOT LESS THAN MINIMUM
- SX6 B1+
- ACT16 SX7 10100B PARAMETERS FOR *RDC* (PROGRAM MODE)
- SA2 =250000 CONVERT TO CP MICROSECONDS
- IX6 X6*X2
- SA2 ACTC
- ZR X2,ACT17 IF NO MULTIPLIER CALCULATION REQUIRED
- PX6 X6 FACTOR OUT THE CPU MULTIPLIER
- NX6 X6
- RX6 X6*X2
- UX6,B6 X6
- LX6 X6,B6
- ACT17 SX2 4000 CONVERT TO CP QUARTER NANOSECONDS
- IX6 X6*X2
- SA6 A1
- EQ ACT9 TO CONVERT RAW CP MILLISECOND VALUE
- ACTA CON MDSR*10000 MINIMUM DISPLAY VALUE FOR SRU ACCUMULATOR
- ACTB CON MCSR*10000 MINIMUM CHARGE VALUE FOR SRU ACCUMULATOR
- ACTC CON 0.0 MULTIPLIER FOR APPLICATION ACCOUNTING
- AFAM SPACE 4,10
- *** AFAM - ACCESS FAST ATTACH.
- * AFAM ATTACHES OR RELEASES FAST ATTACH FILES.
- *
- * ENTRY
- *T OR 12/ AFAM,12/ EQ,1/ NR,11/ P1,12/ SF,12/ P2
- * EQ EST ORDINAL OF DEVICE WHERE THE FAST
- * ATTACH FILE RESIDES, IF GLOBAL FAST ATTACH FILE.
- * 0, IF LOCAL FAST ATTACH FILE.
- * NR NON-ROLLABLE OPTION (VALID ONLY ON WRITEABLE MODES
- * FOR *AFAS* SUBFUNCTION).
- * P1 MODE OF ATTACH.
- * P2 FNT ORDINAL.
- * SF SUBFUNCTION CODE AS DEFINED IN COMSCPS.
- * AFAS = 0 = ATTACH FAST ATTACH FILE.
- * RFAS = 1 = RETURN FAST ATTACH FILE.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,24/ ,4/ WF,6/ ,1/ NR,1/
- * ST = 0 IF FUNCTION COMPLETE.
- * ST = 1 IF FUNCTION CANNOT BE COMPLETED AT THIS TIME.
- * FILE IS ATTACHED IN A CONFLICTING MODE.
- * WF .NE. 0 IF FILE ALREADY ATTACHED IN A WRITABLE MODE (AFAS
- * REJECT ONLY).
- * NR = NON-ROLLABLE FLAG (AFAS REJECT ONLY).
- *
- * *PP HUNG* WILL OCCUR IF -
- * 1) ILLEGAL FUNCTION CODE IS DETECTED.
- * 2) ILLEGAL FNT ORDINAL DETECTED.
- * 3) ILLEGAL MODE NUMBER DETECTED.
- * 4) FILE NOT *FAFT*.
- *
- * THIS FUNCTION MAY BE REJECTED IF -
- * 1) THE GLOBAL FST IS BUSY.
- * WHEN THIS OCCURS BIT 59 OF OR IS SET AND *PPR* WILL
- * RECALL CPUMTR TO RETRY THE REQUEST.
- *
- * NOTE - AFTER AN *AFAS* SUBFUNCTION, IT IS THE RESPONSIBILITY
- * OF THE CALLER TO ENSURE THAT THE TRT ON THIS MAINFRAME
- * IS CURRENT. IN SOME CASES, THIS MAY REQUIRE AN EXPLICIT
- * *STBM/UTRS* REQUEST FOR AN UP-TO-DATE TRT. NOTE THAT WHEN
- * A FILE IS TO BE ACCESSED VIA *CIO* CALLS, CERTAIN ACCESS
- * MODES (M, RM, A, RA) WILL FORCE *STBM* CALLS BEFORE
- * EACH ACCESS. THEREFORE, WHEN *PFM* ATTACHES A FILE IN
- * SUCH A MODE, A TRT UPDATE REQUEST IS NOT NEEDED.
- *
- * NOTE - IF A FAST ATTACH FILE RESIDES ON AN INDEPENDENT
- * SHARED DEVICE, *1FA* PROCESSES THE REQUEST DIRECTLY
- * WITHOUT CALLING *AFAM*. *1FA* MAINTAINS THE COUNTS AND
- * INTERLOCKS IN THE SYSTEM SECTOR INSTEAD OF THE FST.
- PPR AFAM,(/ISD/CHR,ISD,/MMF/AFAP,MMF,/MONITOR/.AFAM)
- LX1 48
- MX4 -12
- BX6 -X4*X1
- LX6 59
- SB6 X6+
- SB5 PPRX SET *REJ* EXIT
- NZ B6,HNG IF ILLEGAL SUBFUNCTION
- LX1 48 POSITION ATTACH MODE
- BX5 -X4*X5 EXTRACT FNT ORDINAL
- TX7 X5,-FNTM ORDINAL - MAXIMUM NUMBER OF ENTRIES
- MX0 -11
- BX3 -X0*X1 MODE OF FAST ATTACH FILE
- SX0 X3-TFASL
- BX7 X7*X0
- PL X7,HNG IF ILLEGAL FNT ORDINAL/ATTACH MODE
- CX2 X5,FNT
- TA2 X2+FNTG,FNT GET FNT ENTRY
- BX0 -X4*X2
- AX0 6
- SA3 TFAS+X3 READ MODE PARAMETERS
- SX0 X0-FAFT
- LX2 -1
- NG X2,REJ IF FILE BUSY
- LX2 -11
- MX5 -6
- BX2 -X5*X2
- NZ X0,HNG IF NOT *FAFT* FILE
- SA1 A2+B1 GET FST ENTRY
- ERRNZ FSTG-FNTG-1 CODE DEPENDS ON VALUE
- SB4 A1 FST ADDRESS
- TNZ X2,(/MMF/SFI,MMF,/LSPMMF/AFA) IF FAT ENTRY IN EM
- * PERFORM UPDATE.
- AFA1 UX3,B6 X3 (B6) = POSITION OF FIELD
- BX2 -X4*X3 (X2) = FIELD MASK
- AX5 X1,B6 POSITION FIELD TO BOTTOM OF WORD
- LX3 -24
- BX5 X2*X5 CURRENT VALUE OF FIELD
- BX4 -X4*X3
- MX7 1
- LX4 X4,B6 INCREMENT SHIFTED TO FIELD POSITION
- NG X6,AFA2 IF DECREMENTING FIELD
- UX3,B5 X3 (B5) = -MASK WIDTH
- LX3 -12
- AX6 X7,B5 FORM BUSY MASK
- BX4 -X4 COMPLEMENT INCREMENT VALUE
- SB5 X3 SET POSITION OF BUSY MASK
- LX6 X6,B5
- BX5 X2-X5
- BX3 -X6*X1 CHECK IF BUSY STATUS
- NZ X3,AFA5 IF FILE BUSY
- AFA2 ZR X5,AFA5 IF OVERFLOW/UNDERFLOW
- SB5 B6-8
- IX6 X1-X4 INCREMENT/DECREMENT FIELD
- SX2 B1+B1
- NZ B5,AFA4 IF NOT WRITABLE MODE
- SA5 A5
- LX5 59-12
- NG X5,AFA3 IF RETURNING FAST ATTACH FILE
- LX5 59-35-59+12
- PL X5,AFA4 IF NON-ROLLABLE BIT NOT REQUESTED
- BX6 X2+X6 SET NON-ROLLABLE BIT
- EQ AFA4 STORE GLOBAL WORD
- AFA3 BX6 -X2*X6 CLEAR NON-ROLLABLE BIT
- AFA4 SA6 A1 STORE GLOBAL WORD
- TNZ X0,(/MMF/CFI,MMF,/MONITOR/HNG) IF FAT ENTRY IN EM
- SX7 B0
- EQ CSM CHECK FOR STORAGE MOVE
- AFA5 LX7 37 POSITION STATUS
- TNZ X0,(/MMF/CFI1,MMF,/MONITOR/HNG) IF EM PROCESSING
- AFA6 ZR X7,CSM IF NO REJECT
- MX4 -12
- BX3 -X4*X1
- BX7 X7+X3
- EQ CSM CHECK FOR STORAGE MOVE
- SPACE 4,15
- ** AFAM PARAMETER TABLE FORMAT.
- * THE FOLLOWING TABLE DEFINES THE PARAMETERS NEEDED TO PERFORM
- * 1) BUSY CHECK.
- * THE BUSY CHECK IS PERFORMED BY DEFINING A FIELD IN THE WORD
- * WHICH MUST BE ZERO FOR THE UPDATE TO TAKE PLACE.
- * 2) OVERFLOW/UNDERFLOW CHECK.
- * 3) INCREMENT/DECREMENT OF FIELDS UPDATED BY *AFAM* FUNCTIONS.
- *
- *T, AFAM 12/ P1,12/ P2,12/ INC,12/ W,12/ MAX
- * P1 POSITION OF FIELD TO INCREMENT + 2000B
- * P2 POSITION OF BUSY MASK
- * INC VALUE TO USE FOR INCREMENT/DECREMENT
- * W 2073B - WIDTH OF BUSY MASK
- * MAX MAXIMUM VALUE OF FIELD (FOR INCREMENT)
- * MAX FIELD MASK (FOR DECREMENT)
- TFAS BSS 0 TABLE OF FAST ATTACH PROCESSING PARAMETERS
- LOC 0
- VFD 12/2000B+8,12/2,12/7,12/2073B-34,12/7 WRITE
- VFD 12/2000B+12,12/8,12/1,12/2073B-4,12/77B READ
- VFD 12/2000B+8,12/2,12/1,12/2073B-16,12/1 APPEND
- VFD 12/2000B+12,12/8,12/1,12/2073B-4,12/77B EXECUTE
- VFD 12/2000B,12/0,12/0,12/2073B-59,12/0 NULL
- VFD 12/2000B+8,12/2,12/3,12/2073B-22,12/3 MODIFY
- VFD 12/2000B+24,12/10,12/1,12/2073B-1,12/7777B R/MODIFY
- VFD 12/2000B+18,12/9,12/1,12/2073B-3,12/77B R/APPEND
- VFD 12/2000B+8,12/8,12/10B,12/2073B-16,12/10B UPDATE
- VFD 12/2000B+2,12/8,12/1,12/2073B-3,12/77B R/UPDATE
- LOC *O
- TFASL EQU *-TFAS
- BFMM SPACE 4,25
- *** BFMM - BUFFERED I/O BUFFER MANAGER CALL.
- *
- * ENTRY
- *T OR 12/ BFMM,6/ NBI,1/I,5/,6/ CP,18/ FNTA,6/ OP,6/ PA
- * NBI NUMBER OF ADDITIONAL WRITE BUFFERS TO
- * INTERLOCK (FOR *BMVI* OPERATION ONLY).
- * MAXIMUM OF 10D ADDITIONAL BUFFERS IS ALLOWED.
- * I CURRENT BUFFER ALREADY INTERLOCKED FLAG
- * (FOR *BMVI* OPERATION ONLY).
- * CP CONTROL POINT NUMBER IF PSEUDO-PP CALL.
- * 0 IF PP CALL.
- * FNTA FNT RELATIVE ADDRESS IN NEGATIVE IF PSEUDO-PP CALL.
- * PSEUDO-FNT ADDRESS IF PP CALL.
- * EST ORDINAL OF EQUIPMENT TO PROCESS IF *BMFW* OR
- * *BMDD* OPERATION.
- * 0 IF *BMFW* TO PROCESS ALL EQUIPMENTS.
- * OP OPERATION CODE.
- * BMRD = READ BUFFER.
- * BMWR = WRITE BUFFER.
- * BMRW = REWRITE BUFFER.
- * BMVI = VALIDATE AND INTERLOCK BUFFER.
- * BMRG = RELEASE READ BUFFER AND GET NEXT BUFFER.
- * BMRB = RELEASE READ BUFFER.
- * BMFL = FLUSH BUFFER.
- * BMRF = RELEASE AND FLUSH WRITE BUFFER.
- * BMFW = FLUSH ALL WRITE BUFFERS.
- * BMTR = TERMINATE SHARED DEVICE READ ACCESS.
- * BMTW = TERMINATE SHARED DEVICE WRITE ACCESS.
- * BMDB = DROP ALL BUFFERS FOR FILE.
- * BMDD = DROP ALL BUFFERS ON DEVICE.
- * BMCR = COMPLETE SHARED DEVICE READ ACCESS REQUEST.
- * BMCW = COMPLETE SHARED DEVICE WRITE ACCESS REQUEST.
- * PA OPERATION CODE DEPENDENT PARAMETER.
- * FOR *BMRD* - BUFFER COUNT.
- * 0 = USE DEFAULT BUFFER COUNT.
- * BUFFER COUNT IF .NE. 0.
- * FOR *BMWR* - RECALL ALLOWED FLAG.
- * 0 = RECALL ALLOWED.
- * 1 = RECALL NOT ALLOWED.
- * FOR *BMVI* - OPERATION CODE TO BE EXECUTED IF BUFFER
- * CANNOT BE INTERLOCKED IN MONITOR MODE.
- * *BMRD* = INTERLOCK FOR READ.
- * *BMWR* = INTERLOCK FOR WRITE.
- * FOR *BMRF* - WRITE OPERATION CODE TO BE EXECUTED ON
- * NEXT BUFFER AFTER FLUSH OF CURRENT BUFFER.
- * 0 = NO WRITE OPERATION.
- * *BMWR* = WRITE BUFFER.
- * *BMRW* = REWRITE BUFFER.
- * FOR *BMFW* - RESTART 819 I/O FLAG.
- * 0 = DO NOT RESTART 819 I/O.
- * RESTART 819 I/O IF .NE. 0.
- * FOR *BMCR*, *BMCW* - STATUS CODE.
- * 0 = NORMAL COMPLETION.
- * 1 = *BRT* ENTRY EVICTED BY *MTE*.
- * 2 = OTHER MACHINE CANNOT RELEASE WRITE ACCESS.
- *
- *T FNT+0 60/
- *T,FNT+1 3/,9/ EQ,12/,12/ CT,12/ CS,12/
- *T,FNT+2 48/,12/ BI
- * EQ EST ORDINAL.
- * CT CURRENT LOGICAL TRACK.
- * CS CURRENT LOGICAL SECTOR.
- * BI BUFFER INDEX FOR OP = BMVI, BMRG, BMRB AND BMRF.
- *
- * EXIT
- *T, OR 36/0, 12/ BI,5/ ST,7/0
- * BI BUFFER INDEX.
- * ST STATUS.
- * BIT 11 SET IF BUFFER RECALL.
- * BIT 10 SET IF BUFFER BUSY.
- * BIT 9 SET IF I/O ERROR.
- * BIT 8 SET IF INACCESSIBLE DEVICE.
- * BIT 7 SET IF ADDRESS ERROR.
- *
- * FOR *BMVI* OPERATION WITH *BMWR* OR *BMRW* SUBFUNCTION,
- * ORDINALS OF ADDITIONAL WRITE BUFFERS INTERLOCKED ARE RETURNED
- * IN *MB* AND *MB*+1 -
- *
- *T, MB 12/ BF5,12/ BF4,12/ BF3,12/ BF2,12/ BF1
- *T, MB+1 12/ BF10,12/ BF9,12/ BF8,12/ BF7,12/ BF6
- * BF(N) BUFFER INDEX OF (N)TH MULTIPLE WRITE
- * BUFFER RESERVED FOR *BMVI* OPERATION (ZERO
- * INDICATES NO (N)TH BUFFER INTERLOCKED).
- *
- *
- * HANG CONDITIONS -
- *
- * 1. INVALID OPERATION CODE.
- * 2. INVALID SUBFUNCTION FOR *BMVI* OPERATION.
- * 3. MULTIPLE WRITE BUFFER COUNT .GT. 10D FOR *BMVI*
- * OPERATION.
- * 4. NEXT TRACK NOT RESERVED WHEN NEEDED FOR MULTIPLE
- * WRITE BUFFER REQUEST.
- PPR BFMM,(/BUFIO/BFM,BUFIO,/MONITOR/HNG),(/BUFIO/BFM3,BUFIO
- ,,/PROGRAM/HNG)
- BIOM SPACE 4,40
- *** BIOM - BUFFERED I/O CONTROL.
- *
- * THIS FUNCTION PROCESSES CPU INTERRUPTS BY DEDICATED BUFFERED
- * DEVICE DRIVERS. NOTE THAT THESE DRIVERS DO NOT USE *PPR* TO
- * ISSUE THE *BIOM* MONITOR FUNCTION, THEREFORE, THE FLAGS IN
- * BITS 59-56 OF THE PP OUTPUT REGISTER ARE NOT RECOGNIZED.
- *
- * ENTRY -
- *T, OR 12/ BIOM, 12/ SF, 12/ PO, 1/ I, 11/ NB, 12/ P1
- *
- * SF SUBFUNCTION -
- * SUIS = 0 = SET UNIT INTERLOCK.
- * DCBS = 1 = DELINK CONTROL BUFFERS.
- * SETS = 2 = SET ERROR STATUS IN *CBT*.
- * IDSS = 3 = INHIBIT DATA STREAMING.
- * CETS = 4 = CLEAR ERROR STATUS FROM I/O QUEUE.
- *
- * PO *PUT* ORDINAL.
- * I CLEAR UNIT INTERLOCK FLAG.
- * NB NUMBER OF CONTROL BUFFERS TO PROCESS.
- * (THE UNIT INTERLOCK FLAG MUST BE SET IF THE *PROBE*
- * TABLE *IOST* IS TO BE UPDATED.)
- * P1 FOR *DCBS* SUBFUNCTION, NUMBER OF CBT-S PROCESSED.
- * FOR *SETS* SUBFUNCTION, ERROR CODE.
- * FOR *PCIS* SUBFUNCTION, CHANNEL NUMBER.
- * FOR OTHER SUBFUNCTIONS, UNUSED.
- *
- * EXIT -
- *T, OR 12/0, 12/ ST, 36/0
- *
- * ST REPLY STATUS - *SUIS*
- * = 0 IF UNIT INTERLOCK SET FOR CALLING PP.
- * = OR ADDRESS OF PP HOLDING UNIT INTERLOCK.
- *
- * REPLY STATUS - *SETS*
- * = 0 IF ERROR RECOVERY ON ALTERNATE CHANNEL.
- * = 1 IF NO ERROR RECOVERY. CALLER IS RESPONSIBLE FOR
- * ISSUING ALL MESSAGES ASSOCIATED WITH THE ERROR.
- *
- * REPLY STATUS - *PCIS*
- * = 0 IF CHANNEL MAY BE DOWNED ON SPECIFIED UNIT.
- * = 1 IF REQUESTS REQUIRING SPECIFIED CHANNEL ARE STILL
- * PENDING ON SPECIFIED UNIT.
- *
- * REPLY STATUS - ALL OTHER SUBFUNCTIONS
- * = 0.
- *
- * *PP HUNG.* WILL OCCUR IF-
- * 1) BUFFER COUNT = 0 ON AN I/O COMPLETE.
- PPR BIOM,(/IHPFMD/BIO,IHPFMD,/MONITOR/HNG),,FEX
- BMIM SPACE 4,10
- *** BMIM - BUFFERED MEMORY INVALIDATION.
- *
- * THIS FUNCTION IS USED TO INVALIDATE BUFFERED MEMORY. IT
- * SHOULD BE USED ONLY ON CYBER 170-835 AND CYBER 170-855
- * MACHINES. IF CACHE IS NOT PRESENT, THE FUNCTION IS IGNORED.
- *
- * ENTRY
- *T, OR 12/ BMIM,12/ SF,12/,12/ MF,12/
- * SF SUBFUNCTION -
- * ICMS = 1 INVALIDATE CACHE MEMORY.
- * MF MODE FLAG -
- * = 0 IF CENTRAL MEMORY.
- * = 1 IF EXTENDED MEMORY.
- *
- * EXIT
- *T, OR 60/0
- *
- * PP HANG CONDITIONS -
- * INVALID SUBFUNCTION.
- * INVALID MODE FLAG ON *ICMS* SUBFUNCTION.
- PPR BMIM
- SA1 MABL GET LOWER CYBER 170-8XX FLAG
- MX4 -4
- LX1 59-47
- NG X1,MTRC IF NOT LOWER CYBER 170-8XX MAINFRAME
- SA1 EABL+CPEI GET PROCESSOR 0 DESCRIPTOR POINTER
- LX1 18
- SA1 X1+/DSL/DEGR/5 GET SECOND WORD OF DESCRIPTOR
- LX1 0-47
- LX1 0-12
- BX1 -X4*X1 CACHE DEGRADATION FLAGS
- NZ X1,PPR1 IF NO CACHE PRESENT
- MX0 -12
- BX3 X5
- LX3 0-36
- BX3 -X0*X3 SUBFUNCTION
- SB4 X3-TBMIL
- ZR X3,HNG IF INVALID SUBFUNCTION
- PL B4,HNG IF INVALID SUBFUNCTION
- JP B4+TBMI+TBMIL-1 ENTER SUBFUNCTION PROCESSOR
- TBMI BSS 0
- LOC 1
- + AX5 12 (ICMS) - INVALIDATE CACHE
- BX3 -X0*X5 MODE FLAG
- EQ BMI1 ENTER *ICMS* PROCESSOR
- TBMIL BSS 0
- LOC *O
- BMI1 SB4 X3-1 CHECK FOR INVALID MODE
- GT B4,B0,HNG IF INVALID MODE
- SA7 A5 COMPLETE FUNCTION
- SB4 B7+FLSW
- ERRNZ ECSW-FLSW-2 CODE ASSUMES *ECSW*=*FLSW*+2
- LX3 1 MODE*2
- SA1 B4+X3 GET *FLSW*/*ECSW*
- BX2 -X0*X1 CM/EM FL
- LX2 6
- LX1 24
- AX1 36 CM/UEM RA
- LX1 6
- ZR X3,BMI2 IF CM MODE
- TLX1 3,UESC RELATIVE UEM ADDRESS
- MX3 1
- BX1 X3+X1 SET EXTENDED MEMORY FLAG
- TLX2 3,UESC UEM FL
- BMI2 IC X1,X2,703B TELL EI TO INVALIDATE CACHE BLOCK
- EQ MTRX EXIT
- CCAM SPACE 4
- *** CCAM - CHANGE CONTROL POINT ASSIGNMENT.
- * ENTERED FROM *TIOM*.
- *
- * ENTRY
- *T, OR 12/ CCAM,1/J,1/R,1/M,1/A,1/,7/ CP,12/ EJTO,24/
- * J IF SET, INDICATES EJT ORDINAL NOT REQUIRED AT NEW
- * CONTROL POINT.
- * R IF SET, (SCHEDULER CALL TO RESERVE CONTROL POINT) SET
- * JOB ADVANCE AND INTERLOCK FLAGS FOR JOB SPECIFIED BY
- * EJT ORDINAL *P* AND SET EJT ORDINAL IN CP AREA WORD
- * *TFSW*. THE FUNCTION WILL BE REJECTED IF THE JOB
- * ADVANCE OR INTERLOCK FLAGS ARE ALREADY SET OR IF THE
- * CP IS OCCUPIED (EJT ORDINAL ALREADY SET).
- * M IF SET, REJECT CHANGE IF MOVE FLAG SET. IF NOT SET
- * AND THE MOVE FLAG IS SET AT THE NEW CP/PCP, A *PRLM*
- * FUNCTION WILL BE ENTERED IN THE OUTPUT REGISTER AFTER
- * THE CHANGE. THIS OPTION WILL BE IGNORED IF THE
- * REQUEST IS TO CLEAR AN ALTERNATE CP/PCP ASSIGNMENT.
- * A IF SET AND *CP* .NE. 0, SET ALTERNATE CP/PCP
- * ASSIGNMENT TO CP OR PCP *CP*. IF SET AND *CP* .EQ. 0,
- * CLEAR ALTERNATE CP/PCP ASSIGNMENT.
- * CP NEW CONTROL POINT OR PSEUDO-CONTROL POINT NUMBER.
- * PSEUDO-CONTROL POINT IS ALLOWED ONLY IF *A* IS SET.
- * IF ZERO, CLEAR ALTERNATE CP/PCP ASSIGNMENT (*A* MUST
- * BE SET).
- * EJTO EJT ORDINAL TO SET. IGNORED IF *R* OPTION NOT SET.
- *
- * EXIT
- *T, OR 12/ 0,48/ PARAMETERS
- * PARAMETERS = 0 IF CONTROL POINT CHANGE MADE
- * PARAMETERS = ENTRY PARAMETERS IF CHANGE NOT MADE
- *
- * HANG CONDITIONS -
- * *J* OPTION SPECIFIED WITH *M* OR *A* OPTION.
- * *R* OPTION SPECIFIED WITHOUT *J* OPTION.
- * *R* OPTION SPECIFIED WITH *M* OR *A* OPTION.
- * CHANGE IS BEING MADE TO CURRENT CONTROL POINT.
- * CHANGE TO AN INVALID CONTROL POINT.
- * CHANGE IS BEING MADE AND ALTERNATE CP/PCP ASSIGNMENT
- * IS IN EFFECT.
- * ALTERNATE CP/PCP SPECIFIED (*A* OPTION) IS THE CURRENT
- * ALTERNATE CP/PCP.
- * INVALID CP/PCP SPECIFIED WITH *A* OPTION.
- * INVALID EJT ORDINAL SPECIFIED WITH *R* OPTION.
- PPR CCAM
- * SET OLD AND NEW CP/PCP POINTERS AND VALIDATE CALL PARAMETERS.
- SA3 A5-B1
- BX7 X1 SET REJECT RESPONSE
- LX1 0-44
- MX0 -4
- SX6 741040B VALID OPTION COMBINATIONS MASK
- BX0 -X0*X1 OPTIONS
- LX2 -24
- SB3 X0+59-17
- SB5 X2 OLD CP/PCP ADDRESS
- LX6 B3
- SX0 37600B
- SX4 7600B
- AX5 36-7
- PL X6,HNG IF INVALID OPTION COMBINATION
- LX3 -36+7
- BX5 X0*X5 NEW CP ADDRESS OR PCP NUMBER * 200B
- BX6 X3 SAVE INPUT REGISTER
- SB4 X5 SAVE NEW CP OR PCP NUMBER * 200B
- BX3 X4*X3
- SB6 X5 NEW CP ADDRESS IF CP
- SB7 X3 CALLING CP ADDRESS
- LX1 59-44-0+44
- SB3 A2 SAVE *ACPP* ADDRESS
- TX0 X5-200B,-SCA
- NG X1,CCA1 IF ALTERNATE CP/PCP REQUEST
- ZR B6,HNG IF NEW CP NUMBER NOT VALID
- PL X0,HNG IF NEW CP NUMBER NOT VALID
- NE B5,B7,HNG IF ALTERNATE CP/PCP ASSIGNMENT
- BX6 -X4*X6
- BX6 X6+X5 SET NEW CP NUMBER IN INPUT REGISTER
- EQ CCA3 CHECK CHANGE TO CURRENT CP
- CCA1 NZ B6,CCA2 IF NOT CLEAR ALTERNATE CP/PCP ASSIGNMENT
- SB4 B7
- SB6 B7
- CCA2 NG X0,CCA3 IF NOT SET ALTERNATE PCP ASSIGNMENT
- TX3 X0-200B,-PCM2
- TB6 X0,PCPA SET PCP ADDRESS
- PL X3,HNG IF INVALID PCP NUMBER
- CCA3 EQ B5,B6,HNG IF CHANGING TO CURRENT CP/PCP
- * CHECK ACTIVITY AT NEW CP/PCP. SINCE THE *CCAM* FUNCTION MAY
- * HAVE BEEN STORAGE MOVABLE FOLLOWING A PREVIOUS EXIT TO *REJ*,
- * EXIT MUST BE MADE TO *CSM* IF A REJECT RESPONSE IS TO BE
- * RETURNED TO THE CALLER.
- SA2 B6+TFSW GET EJT ORDINAL
- LX6 36-7 RESTORE INPUT REGISTER
- LX1 59-47-59+44
- MX0 12
- LX5 X1,B1
- BX3 X0*X2 NEW CP EJT ORDINAL
- PL X5,CCA4 IF NOT RESERVE CP OPTION
- LX1 59-35-59+47
- SA4 B6+STSW
- NZ X3,CSM IF EJT ORDINAL PRESENT
- BX4 X0*X4 PP ACTIVITY
- BX3 X0*X1 SPECIFIED EJT ORDINAL
- NZ X4,CSM IF PP ACTIVITY AT CONTROL POINT
- LX1 59-47-59+35
- ZR X3,HNG IF NO EJT ORDINAL SPECIFIED
- BX2 X3+X2 SET EJT ORDINAL IN *TFSW*
- CCA4 NZ X3,CCA5 IF EJT ORDINAL IS PRESENT
- TX4 B6,-SCA
- ZR X4,CCA5 IF CHANGE TO SYSTEM CP
- PL X1,CSM IF EJT ORDINAL REQUIRED
- CCA5 LX3 12
- CX4 X3,EJT CONVERT EJT ORDINAL TO OFFSET
- MX0 1
- TA4 X4+JSNE,EJT
- LX4 59-6 CHECK JOB ADVANCE FLAG AT NEW CP
- BX0 X0*X5 EXTRACT RESERVE CP OPTION
- PL X4,CCA6 IF JOB ADVANCE NOT SET
- BX3 X1
- LX3 59-44-59+47
- PL X3,CSM IF NOT ALTERNATE CP/PCP OPTION
- EQ B6,B7,CCA6 IF CLEAR ALTERNATE CP/PCP ASSIGNMENT
- BX3 X6
- AX3 42
- SX3 X3-3R1RO
- NZ X3,CSM IF NOT *1RO*
- CCA6 BX4 X4+X0 SET JOB ADVANCE IF RESERVE CP OPTION
- LX4 59-0-59+6
- BX3 X0*X4
- LX1 59-44-59+47
- NG X3,CSM IF JOB INTERLOCK SET AND RESERVE CP OPTION
- SA3 TFPL-1+LA1CP GET *1CP* PLD POINTER
- BX4 X0+X4 SET JOB INTERLOCK IF RESERVE CP OPTION
- LX4 0-59
- * SUSPEND PROCESSING IF *1CP* NOT ACCESSIBLE OR INCORRECT CPU
- * ASSIGNMENT ON DUAL CPU CACHE MACHINE.
- SX5 X3+
- ZR X5,CCA16 IF *PLD* BEING MODIFIED
- SA3 B6+STSW NEW CP STATUS
- TNO /MONITOR/CCA7,NDCPC IF NOT DUAL CPU CACHE MACHINE
- SX0 A0+
- LX7 X3,B1
- NZ X0,CCA7 IF MONITOR MODE IN CPU 1
- NG X3,CCA7 IF NEW CP NOT ACTIVE IN EITHER CPU
- NG X7,/DCP/SAX IF NEW CP IN CPU 1, SET ALTERNATE EXCHANGE
- * UPDATE NEW CP/PCP PP ACTIVITY AND CP/PCP ASSIGNMENT.
- CCA7 SX0 1
- LX0 48-0
- IX7 X3+X0 INCREMENT PP COUNT
- EQ B6,B7,CCA8 IF CLEAR ALTERNATE CP/PCP REQUEST
- SA7 A3+ UPDATE PP COUNT
- CCA8 SX7 B6+
- PL X1,CCA10 IF NOT ALTERNATE CP/PCP REQUEST
- EQ B6,B7,CCA10 IF CLEAR ALTERNATE CP/PCP REQUEST
- TX3 B4-200B,-SCA
- NG X3,CCA9 IF NOT SET ALTERNATE PCP ASSIGNMENT
- SX7 B7+ SET CALLING CP FOR FUNCTION PROCESSING
- CCA9 SX3 1
- LX3 23-0
- BX7 X7+X3 SET ALTERNATE CP/PCP FLAG
- CCA10 SX3 B4
- LX3 48-7 SET NEW CP/PCP NUMBER
- BX7 X3+X7
- SX3 B6
- LX3 24 SET NEW CP/PCP ADDRESS
- BX7 X7+X3
- LX1 59-45-59+44
- SA7 B3 UPDATE *ACPP*
- PL X1,CCA11 IF NOT TO REJECT CHANGE ON STORAGE MOVE
- * CHECK REJECT ON STORAGE MOVE. THIS MUST BE DONE AFTER *STSW*
- * AND *ACPP* HAVE BEEN UPDATED TO INTERLOCK WITH *MTR* STORAGE
- * MOVE PROCESSING. IF THE FUNCTION IS REJECTED, THE ENTRY
- * CONDITIONS MUST BE RESTORED.
- NE B5,B7,CCA11 IF ALTERNATE CP/PCP ASSIGNMENT
- SA3 CMCL
- SX7 B4
- AX7 7 NEW CP/PCP NUMBER
- AX3 48
- IX3 X3-X7
- ZR X3,CCA15 IF MOVE REQUEST FOR NEW CP/PCP
- * UPDATE NEW CP/PCP STATUS FOR *R* OPTION AND UPDATE OLD CP/PCP
- * PP ACTIVITY.
- CCA11 SA3 B5+STSW GET OLD CP/PCP STATUS
- BX7 X2
- SA7 A2 UPDATE *TFSW*
- BX7 X4
- SA7 A4 UPDATE EJT ENTRY
- LX1 59-44-59+45
- SA6 A5-B1 UPDATE INPUT REGISTER
- PL X1,CCA12 IF NOT ALTERNATE CP/PCP REQUEST
- NE B6,B7,CCA13 IF NOT CLEAR ALTERNATE CP/PCP REQUEST
- CCA12 IX6 X3-X0 DECREMENT OLD CP/PCP PP ACTIVITY
- SA6 A3+
- BX3 X6
- * CALL *1CP* TO COMPLETE FUNCTION PROCESSING.
- CCA13 SA1 B3 GET *ACPP* PARAMETERS
- BX6 X3 SAVE *STSW* FOR DUAL CPU CACHE CHECK
- SB4 X5 SET *1CP* PLD ENTRY ADDRESS
- SX5 B0 SET *CCAM* RESPONSE
- MX0 24
- TX7 B6+FLSW+1,-NCME SET FL CONTROL WORD ADDRESS
- LX0 12
- LX7 24
- BX1 X0*X1 SET CP/PCP NUMBER AND CP ADDRESS
- SB3 CCA14 SET *EFP* RETURN ADDRESS
- BX7 X7+X1
- EQ EFP EXECUTE *1CP*
- * CHECK JOB ACTIVITY AT OLD CONTROL POINT.
- CCA14 SB7 B5+ SET OLD CP TO CHECK
- TX0 B5,-SCA
- SB3 PPRX SET *JAV* RETURN ADDRESS
- TNO /DCP/CCA,DCPC IF DUAL CPU CACHE MACHINE
- NG X0,JAV IF OLD JOB NOT SYSTEM CP OR PCP
- EQ PPRX EXIT
- * RESTORE ENTRY CONDITIONS FOR CHANGE REJECTED ON STORAGE
- * MOVE.
- CCA15 SA3 B6+STSW RESET PP ACTIVITY
- SA5 A5 GET OUTPUT REGISTER
- SX1 B5 RECONSTRUCT ORIGINAL *ACPP*
- SX6 B5
- LX1 24
- BX6 X6+X1
- LX1 24-7
- BX6 X1+X6
- SA6 B3 UPDATE *ACPP*
- IX6 X3-X0 DECREMENT PP ACTIVITY
- UX7,B0 X5 CLEAR FUNCTION CODE
- SA6 A3 UPDATE PP ACTIVITY
- EQ CSM CHECK STORAGE MOVE AND EXIT
- * REJECT REQUEST WHEN *1CP* NOT ACCESSIBLE.
- CCA16 SB5 PPRX SET EXIT ADDRESS
- EQ REJ REJECT REQUEST
- CDAM SPACE 4,15
- *** CDAM - CHECK MASS STORAGE DEVICE ACTIVITY.
- *
- * ENTRY
- *T, OR 12/ CDAM,12/ EQ,36/
- * EQ MASS STORAGE EST ORDINAL.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/ 0
- * ST DEVICE ACTIVITY COUNT.
- *
- * HANG CONDITIONS -
- *
- * EST ORDINAL DOES NOT POINT TO MASS STORAGE DEVICE.
- PPR CDAM,,,FEX
- AX1 36 POSITION EST ORDINAL
- CX2 X1,EST
- TA2 X2+EQDE,EST
- PL X2,HNG IF NOT MASS STORAGE
- MX0 -12
- BX6 -X0*X2 EXTRACT MST POINTER
- SX7 B1
- LX6 3 SET MST ADDRESS
- SA4 X6+DILL
- LX4 -24 EXTRACT *PUT* ORDINAL
- BX4 -X0*X4
- ZR X4,CDA1 IF NOT BUFFERED DEVICE
- SA3 /BUFIO/MSTA
- LX4 PUTLS FORM *PUT* INDEX
- BX3 X6-X3
- ZR X3,CDA2 IF BUFFER ASSIGNMENT IN PROGRESS
- TA1 X4+UNCT,PUT
- LX1 -12 CHECK CURRENT *CB* PRESENT
- BX7 -X0*X1
- ZR X7,PPR1 IF DEVICE INACTIVE
- CDA1 SA2 A4-B1
- ERRNZ DALL+1-DILL CODE DEPENDS ON VALUE
- MX0 -6
- LX2 -48 EXTRACT REQUEST COUNT
- BX7 -X0*X2
- CDA2 LX7 36 POSITION RESPONSE
- SA7 A5
- EQ PPRX RETURN
- CEFM SPACE 4,30
- *** CEFM - CHANGE ERROR FLAG.
- *
- * ENTRY
- *T, OR 12/ CEFM,1/E,11/ EF,12/ EJTO,24/ JSN
- * E IF SET, CHANGE ERROR FLAG ON JOB SPECIFIED BY
- * *EJTO* FIELD.
- * IF CLEAR, CHANGE ERROR FLAG ON CONTROL POINT TO
- * WHICH PP IS ASSIGNED.
- * EF ERROR FLAG TO SET.
- * EJTO EJT ORDINAL OF JOB IF *E* SET.
- * JSN JOB SEQUENCE NAME IF *E* OPTION SELECTED.
- *
- * EXIT
- *T, OR 12/ 0,3/ JS,9/ ST,36/
- * JS = CPU STATUS FROM *STSW* IF ERROR FLAG SET ON JOB AT
- * CONTROL POINT.
- * ST = 0, IF ERROR FLAG SET ON SPECIFIED JOB.
- * ST = 1, IF JOB IS MOVING (FOR *E* = 1 OPTION ONLY).
- * ST = 3, IF JOB SPECIFIED BY *EJTO* NOT FOUND.
- *
- * HANG CONDITIONS -
- *
- * 1. IF JOB AT CONTROL POINT WITH EJT ORDINAL = 0.
- * 2. *EJTO* = 0 FOR *E* = 1 OPTION.
- * 3. *EJTO* EXCEEDS MAXIMUM EJT ORDINAL FOR *E* = 1 OPTION.
- * 4. CLEARING ZERO ERROR FLAG.
- * 5. CHANGING ERROR FLAG AT SYSTEM CP OR UNOCCUPIED USER CP.
- * 6. SETTING AN INCORRECT ERROR FLAG.
- PPR CEFM
- SB6 CEF1 SET RETURN ADDRESS FOR *CPE*
- LX1 59-47
- SB5 -B1 FLAG EJT ORDINAL NOT SPECIFIED
- TPL X1,(/DCP/CPE,DCP,/MONITOR/CEF1) IF SET ERROR AT CP
- MX1 24
- LX5 -24
- MX0 -12
- BX2 X1*X5 SPECIFIED JSN
- BX6 -X0*X5 SPECIFIED EJT ORDINAL
- LX5 24
- TX3 X6,-EJTM
- ZR X6,HNG IF NO EJT ORDINAL SPECIFIED
- PL X3,HNG IF EJT ORDINAL EXCEEDS MAXIMUM
- CX3 X6,EJT CONVERT EJT ORDINAL TO OFFSET
- TA3 X3+JSNE,EJT GET EJT ENTRY
- MX7 2
- LX7 36-58 STATUS = JOB NOT FOUND
- SX4 7600B
- BX1 X1*X3 JOB SEQUENCE NUMBER IN EJT
- LX3 7-1
- BX2 X2-X1
- BX0 X4*X3
- NZ X2,PPR1 IF JOB NOT FOUND
- SA3 A3+SCHE-JSNE GET JOB CONTROL POINT NUMBER
- SA2 A3+PRFE-SCHE GET EJT ERROR FLAG
- BX6 X3
- SX0 X0-EXJS*200B
- LX6 59-34
- SB5 B7+ INDICATE SETTING ERROR IN EJT
- SA6 CEFC SAVE JOB TERMINATION STATUS
- NZ X0,CEF2 IF JOB NOT AT CONTROL POINT
- LX3 -12+7
- BX3 X4*X3
- SB5 -2 INDICATE EJT ORDINAL SPECIFIED ON CALL
- SB7 X3 SET CONTROL POINT ADDRESS
- TNO /DCP/CPE,DCP IF DUAL-CPU IN USE
- * SET ERROR AT CONTROL POINT.
- * ENTERED HERE FOR *ABTM* AND *CHGM*.
- * (B6) = 0 IF *ABTM*.
- * (B6) .LT. 0 IF *CHGM*.
- * (B5) .GT. 0 IF *ABTM* OR *CHGM*.
- CEF1 SA4 B7+TFSW GET EJT ORDINAL
- MX0 12
- BX4 X0*X4
- ZR X4,HNG IF SYSTEM CP OR UNOCCUPIED USER CP
- LX4 12
- CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
- TA3 X3+SCHE,EJT
- MX6 -2
- LX3 0-33
- BX3 -X6*X3
- SX6 B0
- ERRNZ NOTM CODE ASSUMES *NOTM* = 0
- IX6 X6-X3
- SA6 CEFC
- SA2 B7+STSW
- SB5 B5+B1
- PL B5,CEF2 IF NOT EJT ORDINAL CALL
- SX7 B1 STATUS = JOB MOVING
- SA3 CMCL CHECK FOR STORAGE MOVE
- LX7 36
- BX3 X0*X3
- LX3 12+7 CPA ADDRESS FOR STORAGE MOVE
- SB4 X3
- EQ B4,B7,PPR1 IF JOB MOVING
- CEF2 MX0 11 GET ERROR FLAG
- LX0 46-59
- BX7 X0*X5 NEW ERROR FLAG
- BX3 X0*X2 OLD ERROR FLAG
- IX6 X7+X3
- ZR X6,HNG IF CLEARING ZERO ERROR FLAG
- BX1 -X0*X2
- ZR X7,CEF4 IF CLEARING ERROR FLAG
- LX2 59-56
- IX0 X7-X3 NEW - OLD
- AX3 36
- BX6 X7
- LX6 -36
- SB4 X3-RSET
- SX3 X6-MXET
- PL X3,HNG IF ILLEGAL ERROR FLAG
- ZR B4,CEF6 IF AN UNPROCESSED *RSET* PRESENT
- GT B5,CEF4 IF *ABTM* OR SETTING ERROR IN EJT
- SA3 CEFB
- SB4 X6
- LX3 B4,X3
- SA4 CEFC
- BX4 X3*X4
- NG X4,CEF6 IF ODET/RRET/OKET AT END OF JOB
- PL X2,CEF4 IF NO SUB-CP ACTIVE
- BX6 X6-X6
- AX7 36
- SA6 A5 CLEAR OUTPUT REGISTER
- EQ SEF SET ERROR FLAG
- CEF4 NG X0,CEF5 IF OLD ERROR FLAG .GT. NEW ERROR FLAG
- BX6 X1+X7 STORE NEW ERROR FLAG
- SA6 A2
- CEF5 ZR X7,PPR1 IF ERROR FLAG CLEARED
- SX5 B1+
- LX5 36-0 SET TO CLEAR ROLLOUT CPU STATUS
- NE B5,B7,.DCPM IF NOT SETTING ERROR FLAG IN EJT ENTRY
- CEF6 BX7 X7-X7 CLEAR OUTPUT REGISTER
- SA7 A5
- EQ PPRX EXIT
- CEFB BSS 0 MASK FOR ODET / RRET / OKET
- POS 60-ODET
- VFD 1/1
- POS 60-RRET
- VFD 1/1
- POS 60-OKET
- VFD 1/1
- VFD $/0
- CEFC CON 0 JOB TERMINATION STATUS
- CHGM SPACE 4,10
- *** CHGM - CONDITIONALLY HANG PP.
- *
- * ENTRY
- *T, OR 12/ CHGM,12/PA,12/EF,12/,12/
- * PA ADDRESS IN PP WHERE ERROR CONDITION DETECTED.
- * EF ERROR FLAG TO SET AT CONTROL POINT OR ZERO.
- *
- * EXIT IF SYSTEM DEBUG MODE ENABLED
- *T, OR 12/ HLTM,48/
- *
- * EXIT IF SYSTEM DEBUG MODE DISABLED
- *T, OR 60/0
- PPR CHGM,,,DCP
- SA5 A5 GET CURRENT OUTPUT REGISTER
- MX6 1 SET MOVABLE FUNCTION FLAG
- LX6 56-59
- BX5 X5+X6
- BX6 X5
- SA6 A5
- SB3 CHG1
- EQ ACB ASSIGN COMMUNICATIONS BUFFER
- CHG1 ZR X1,CHG9 IF NO BUFFER ASSIGNED
- MX0 -12
- LX5 24 GET PP PROGRAM ADDRESS
- BX6 -X0*X5
- LX6 36
- SA4 B7+TFSW GET EJT ORDINAL
- LX4 12
- BX2 -X0*X4
- ZR X2,CHG2 IF NO EJT ENTRY
- CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
- TA3 X4+JSNE,EJT GET EJT ENTRY
- MX2 24
- BX2 X2*X3 JOB SEQUENCE NUMBER IN EJT
- LX2 36
- BX6 X6+X2
- TA3 X4+SCLE,EJT GET JOB SERVICE CLASS
- MX2 6
- BX3 X2*X3
- LX3 6
- BX6 X3+X6
- CHG2 LX5 -24+12 GET FUNCTION BEING PERFORMED
- MX7 -7
- BX7 -X7*X5
- SX7 X7-CHGM
- ZR X7,CHG3 IF *CHGM* FUNCTION
- SX7 3 FLAG PP HUNG
- LX7 48
- IX6 X6+X7
- LX6 -36 SET PP PROGRAM ADDRESS TO ZERO
- BX6 X0*X6
- LX6 36
- EQ CHG4 SET UP *1MA* CALL
- CHG3 SX7 B1
- LX5 -12+36
- BX2 -X0*X5
- LX7 48
- ZR X2,CHG4 IF NO ERROR FLAG
- SX2 X2-SWET
- IX6 X6+X7 FLAG JOB BEING ABORTED
- NZ X2,CHG4 IF NOT *SWET* ERROR, ASSUME JOB STEP ABORT
- IX6 X6+X7 SET JOB ABORTED
- * SET UP *1MA* REQUEST.
- CHG4 SA6 X1+B1 STORE PARAMETER IN COMMUNICATIONS BUFFER
- SA4 A5-B1 GET PP INPUT REGISTER
- BX6 X4
- SA2 A4+B1 GET PP OUTPUT REGISTER
- BX7 X2
- SA6 A6+B1 STORE IN COMMUNICATIONS BUFFER
- SA7 A6+B1
- SA4 A2+B1 GET FIRST WORD OF MESSAGE BUFFER
- BX6 X4
- SA6 A7+B1 STORE IN COMMUNICATIONS BUFFER
- SB4 -B1 SET NO QUEUEING
- SX6 B7 SAVE CONTROL POINT ADDRESS
- SA6 CHGB
- TB7 0,SCA USE SYSTEM CONTROL POINT
- SA2 CHGA GET *1MA* REQUEST
- BX6 X2
- IX6 X6+X1 ADD IN COMMUNICATIONS BUFFER ADDRESS
- SX1 0
- SB3 CHG5
- EQ APQ ASSIGN *1MA* TO SYSTEM CONTROL POINT
- CHG5 NZ X1,CHG6 IF *1MA* ASSIGNED
- SB3 CHG6
- SX2 PQ QUEUE THE REQUEST
- EQ AQR ASSIGN QUEUE REQUEST
- CHG6 SA1 CHGB RESTORE CONTROL POINT ADDRESS
- SA5 A5
- MX7 -7
- LX5 12
- BX7 -X7*X5 GET FUNCTION BEING PERFORMED
- SX7 X7-CHGM
- SB7 X1+
- SB5 PPRX
- NZ X7,HNG2 IF NOT *CHGM*
- SA4 SSTL CHECK FOR SYSTEM DEBUG ENABLED
- SB5 CHG7
- LX4 59-13
- SA5 A5
- PL X4,HNG2 IF SYSTEM DEBUG MODE ENABLED
- * PROCESS AS *HLTM* WHEN SYSTEM DEBUG IS DISABLED.
- SA7 A5+ CLEAR OUTPUT REGISTER
- EQ CHG8 CHECK FOR ERROR FLAG PRESENT
- CHG7 SX1 HLTM CHANGE CHGM FUNCTION TO HLTM FUNCTION
- LX1 48
- MX2 12
- BX7 -X2*X5
- BX7 X7+X1
- SA7 A5+
- CHG8 LX5 0-24
- MX2 -11
- TB4 B7,-SCA
- ZR B4,PPRX IF SYSTEM CONTROL POINT DO NOT SET ERROR
- BX5 -X2*X5 GET ERROR FLAG
- LX5 36 POSITION ERROR FLAG
- ZR X5,PPRX IF NO ERROR FLAG PRESENT, RETURN
- SB6 -1 FLAG DO NOT STORE OUTPUT REGISTER
- EQ CEF1 CHANGE ERROR FLAG
- CHG9 MX1 1 HAVE PP REISSUE FUNCTION
- BX7 X5+X1
- EQ PPR1 RETURN STORING OUTPUT REGISTER
- CHGA VFD 18/0L1MA,6/,12/7,24/
- CHGB CON 0 SAVE OF CONTROL POINT ADDRESS
- CKSM SPACE 4
- *** CKSM - CHECKSUM SPECIFIED AREA.
- * THE SPECIFIED AREA IS CHECKSUMMED, AND THE RESULT IS COMPARED
- * TO THE FIRST WORD OF THE MESSAGE BUFFER. THE RESULT IS
- * ALSO RETURNED TO THE CALLER.
- *
- * ENTRY
- *T, OR 12/ CKSM,7/,17/ WC,7/,17/ FWA
- * WC WORD COUNT.
- * FWA RELATIVE FIRST WORD ADDRESS.
- *
- *T, MB 60/ CHECKSUM COMPARE VALUE
- *
- * EXIT
- *T, OR 12/ 0,36/ 0,12/ STATUS
- * STATUS = 0, IF CHECKSUM COMPARE SUCCESSFUL.
- *
- *T, MB 60/ CALCULATED CHECKSUM
- PPR CKSM,PMR,CKS,FEX
- CPRM SPACE 4,20
- *** CPRM - ASSIGN, LOAD, OR IDLE A CPP.
- *
- * ENTRY
- *T, OR 12/ CPRM,12/ FFFF,12/ 0,12/ 0,12 PPPP
- * FFFF SUBFUNCTION.
- * 0 = ASSIGN CPP.
- * 1 = ASSIGN CPP AND LOAD PP RESIDENT.
- * 2 = RETURN CPP.
- * PPPP CIO BARREL FROM WHICH CPP IS TO BE ASSIGNED
- * (SUBFUNCTION 0 AND 1).
- * 2 = BARREL 0 (CPP 0 THRU 4).
- * 3 = BARREL 1 (CPP 5 THRU 11).
- * (SUBFUNCTION 2).
- * NUMBER OF CPP TO RETURN.
- *
- *T, MB 60/ IR
- * IR INPUT REGISTER FOR CPP BEING ASSIGNED
- * (SUBFUNCTION 0 AND 1).
- * NOT USED FOR SUBFUNCTION 2.
- *
- *T, PW 60/ PW
- * PW THIS WORD WILL BE PLACED INTO MB OF THE
- * ASSIGNED CPP (SUBFUNCTION 0 AND 1).
- * NOT USED FOR SUBFUNCTION 2.
- *
- * EXIT
- *T, OR 12/,12/ ST,12/ RC,12/,12/
- * ST STATUS (SUBFUNCTION 0 AND 1).
- * ADDRESS OF THE ASSIGNED CPP INPUT REGISTER.
- * ZERO IF CPP NOT ASSIGNED, RC FIELD INDICATES REASON.
- * STATUS (SUBFUNCTION 2).
- * ZERO INDICATES CPP DROPPED, RC FIELD NOT VALID.
- * ONE INDICATES ERROR IN REQUEST, RC INDICATES REASON.
- * RC RESPONSE CODE.
- * 0 = CPP ASSIGNED.
- * 1 = CPP NOT ASSIGNED (SUBFUNCTION 2 ONLY).
- * 2 = CPP NOT PRESENT.
- * 3 = CPP NOT AVAILABLE.
- * 4 = INCORRECT CPP NUMBER.
- * 5 = INCORRECT CIO BARREL NUMBER.
- * 6 = MAXIMUM NUMBER (NPPCP) OF PP-S ALREADY ASSIGNED.
- * 7 = IF PERIPHERAL LIBRARY LOCKED (SUBFUNCTION 2 ONLY).
- * 10 = PP PROGRAM NOT FOUND (SUBFUNCTION 2 ONLY).
- PPR CPRM
- TNO /CPP/CPR,CPP IF CPP-S ARE DEFINED
- SX7 10002B SET ERROR CODE ST=1, RC=2
- AX1 36+1
- NZ X1,CPRM1 IF SUBFUNCTION 2
- SX7 B1+B1
- CPRM1 LX7 24-0
- EQ /MONITOR/MTRC STORE (OR) AND EXIT MONITOR MODE
- CSTM SPACE 4
- *** CSTM - CLEAR STORAGE.
- * NOTE - CSTM CLEARS STORAGE FROM LWA TO FWA.
- *
- * ENTRY
- *T, OR 12/ CSTM,3/ 0,1/S,1/E,1/R,18/ WC,24/ FWA
- * WC WORD COUNT OF AREA TO BE CLEARED.
- * FWA FIRST WORD ADDRESS OF AREA TO BE CLEARED.
- * S = 1, IF REQUEST IS SPECIAL FOR *RSTM* FROM *MTR*.
- * 0, IF REQUEST IS NORMAL MONITOR FUNCTION.
- * E = 0, IF FWA IS A CM ADDRESS.
- * = 1, IF FWA IS A USER ECS ADDRESS.
- * R = 0, IF FWA IS AN ABSOLUTE ADDRESS.
- * = 1, IF FWA IS A CP RELATIVE ADDRESS.
- * IF WC IS ZERO FOR A CM REQUEST, AREAS TO BE CLEARED ARE
- * SPECIFIED BY A LIST IN THE MESSAGE BUFFER.
- * LIST IS TERMINATED BY A ZERO WORD.
- * LIST FORMAT NOT APPLICABLE FOR ECS REQUEST.
- *
- * FORMAT OF LIST ENTRY-
- *T, MB 18/0,18/ WC,24/ FWA
- *
- * IF S=1, THE REQUEST IS CLEAR STORAGE TO BE RELEASED BY
- * THE JOB. THE FWA AND WORD COUNT IS TO BE DERIVED FROM
- * THE *RSTM* REQUEST IN MB+5. UPON COMPLETION, THE *RSTM*
- * REQUEST (PLUS THE COMPLETION FLAG) IS TO BE RESTORED
- * IN THE CALLER-S OUTPUT REGISTER SO IT MAY BE COMPLETED.
- *
- * NOTE - WHEN CLEARING ECS, WC IS THE NUMBER OF *UEBS*
- * WORD BLOCKS TO CLEAR,AND FWA IS
- * THE ACTUAL ADDRESS/*UEBS*.
- *
- * EXIT
- *T, OR 60/ 0
- PPR CSTM,,CST
- AX2 24
- LX1 59-44
- SB7 X2+ SET CP/PCP ADDRESS
- TNG X1,(/MCE/CST,MCE,/MONITOR/HNG) IF SPECIAL *RSTM* CALL
- LX1 44-59
- * REENTRY FROM */MCE/CST* AFTER SETUP OF *CSTM* PARAMETERS.
- CST0 BX4 X1 CHECK FOR VALID OPTIONS
- MX0 -12
- SB4 X1 SET FWA
- LX4 59-43
- TNG X4,(/MONITOR/PMR,UEC,/MONITOR/HNG) IF ECS REQUEST
- BX6 X5
- LX5 -24
- SB3 X5+ (B3) = 0 IF LIST PRESENT
- LX5 24
- LX4 59-42-59+43
- PL X4,CST3 IF NOT RELATIVE ADDRESSES
- * CONVERT TO ABSOLUTE ADDRESSES.
- SA2 B7+FLSW READ RA AND FL
- BX1 X5
- BX3 -X0*X2
- LX2 12
- BX6 -X0*X2 EXTRACT NFL
- MX0 -RMSK
- AX2 RSHF+12
- BX2 -X0*X2 RA/100
- LX6 6 NFL
- SB5 X6
- MX0 36
- LX3 6
- SB4 X3 (B4) = FL
- LX2 6 (X2) = RA
- NZ B3,CST2 IF NOT LIST OPTION
- SA1 A5+B1 READ FIRST LIST WORD
- CST2 SX7 X1
- IX6 X7+X2 CONVERT RELATIVE ADDRESS TO ABSOLUTE
- NG X6,HNG IF BAD FWA
- BX3 X0*X1
- BX6 X3+X6
- LX1 -24
- PL X7,CST2.1 IF NOT NFL ADDRESS
- SB6 X7
- SB6 -B6
- GT B6,B5,HNG IF BEYOND NFL
- SB6 X1
- SB6 B6+X7
- LE B6,B0,CST2.2 IF WITHIN NFL
- EQ HNG HANG PP
- CST2.1 SB6 X1
- SB6 B6+X7
- GT B6,B4,HNG IF BEYOND FL
- CST2.2 LX1 24
- NZ B3,CST3 IF NOT LIST OPTION
- SA6 A1 STORE ABSOLUTE ADDRESS
- SA1 A1+1
- NZ X1,CST2 IF MORE WORDS IN LIST
- CST3 ZR B3,PMR IF LIST OPTION
- AX1 24
- BX5 X6
- SB4 X1-100B-1
- SB5 X1-1
- PL B4,PMR IF TOO MANY WORDS FOR MONITOR MODE
- NG B5,HNG IF ILLEGAL WORD COUNT
- MX2 -24 CLEAR STORAGE
- SX1 X1+
- BX2 -X2*X5 FWA
- SB3 PPR1 *CSM* RETURN ADDRESS
- TJP (/MCE/CST5,MCE,/CME/CSM,CME,/0CME/CSM) CLEAR
- DCPM SPACE 4,25
- *** DCPM - DROP CPU.
- * IT SHOULD BE NOTED THAT THE EXCHANGE PACKAGE IS NOT
- * IN THE USER,S CP AREA AT THE TIME THE OUTPUT
- * REGISTER IS CLEARED. TO MAKE SURE THE PACKAGE IS
- * AVAILABLE ANOTHER *CPUMTR* MONITOR FUNCTION SHOULD
- * BE DONE SUCH AS *RCLM*.
- *
- * ENTRY
- *T, OR 12/ DCPM,11/0,1/F,12/,12/,12/
- * F = 1, TO CLEAR CPU STATUS PRESENT AT ROLLOUT.
- *
- * EXIT
- *T, OR 12/ 0,3/ ST,9/0,36/
- * ST CPU STATUS FROM STSW.
- *
- * NOTE WHEN ENTERING THE *DCPM* PROCESSOR FROM ANOTHER
- * ROUTINE THE FOLLOWING ENTRY CONDITIONS MUST BE SET -
- *
- * (B6) .LT. 0 IF NOT TO WRITE OUTPUT REGISTER.
- * (B6) = 0 IF TO RETURN *DPPM* FUNCTION IN OUTPUT
- * REGISTER.
- * (B6) = 1 IF TO CLEAR OUTPUT REGISTER.
- * (B6) .GT. 1 IF TO RETURN CURRENT CPU STATUS IN OUTPUT
- * REGISTER.
- * (X5 BIT 36) = 1 IF TO CLEAR CPU STATUS AT ROLLOUT.
- PPR DCPM,,,DCP
- * SET FUNCTION RETURN. ENTERED HERE FROM *CEFM*, *ROCM*, AND
- * *RPNM*.
- SA1 B7+STSW READ STATUS
- MX0 3
- BX7 X0*X1 CPU STATUS
- GT B6,B1,DCP1 IF TO RETURN CPU STATUS
- SX7 B0+
- EQ B6,B1,DCP1 IF TO CLEAR OUTPUT REGISTER
- SX7 DPPM+4000B RETURN *DPPM* FUNCTION
- DCP1 NG B6,DCP2 IF NOT TO WRITE OUTPUT REGISTER
- TX2 10B,SP
- SX3 A5
- MX4 -18
- BX3 -X4*X3
- IX2 X3-X2
- PL X2,DCP2 IF NOT PP REQUEST
- LX7 -12
- SA7 A5 WRITE OUTPUT REGISTER
- * CLEAR CPU STATUS.
- DCP2 SX3 B1
- LX5 25-36 POSITION CLEAR ROLLOUT CPU STATUS FLAG
- LX3 25-0
- BX7 -X0*X1 CLEAR CPU STATUS
- BX3 X3*X5
- BX7 -X3*X7 CLEAR ROLLOUT CPU STATUS IF SELECTED
- BX1 X0*X1 CPU STATUS ON ENTRY
- SA7 A1 WRITE STATUS
- * CHECK ENTRY CPU STATUS.
- ZR X1,DCP4 IF NULL STATUS ON ENTRY
- PL X1,DCP6 IF ACTIVE JOB
- LX1 1
- NG X1,DCP4 IF *I* STATUS
- LX0 X1,B1
- SA3 B7+CWQW READ *CWQW*
- SX6 1
- LX6 46-0
- BX6 X3+X6 SET NO DRIVER RECALL
- NG X0,DCP2.1 IF *X* STATUS
- MX7 58
- MX4 42
- LX7 48-0
- BX6 X4*X6 CLEAR *WQ* LINKAGE
- SX1 WQRL
- BX6 X7*X6 CLEAR CPU SLICE ACTIVE AND RECALL FLAGS
- SA6 A3 UPDATE *CWQW*
- TJP (/DCP/DCP,DCP,/MONITOR/DCP3)
- DCP2.1 SA6 A3 UPDATE *CWQW* FLAGS
- SA3 B7+CRCW READ *CRCW*
- SX7 B0
- SX1 RQRL
- SA7 A3 CLEAR *RQ* PARAMETERS
- MX4 -12
- * REMOVE *WQ* OR *RQ* ENTRY IF *W* OR *X* STATUS.
- DCP3 ZR X1,DCP4 IF END OF QUEUE
- SA2 X1 FIND LINK TO DELETED ENTRY
- SX6 A3
- BX1 -X4*X2
- BX0 X6-X1
- NZ X0,DCP3 IF NOT FOUND
- BX2 X4*X2 REPLACE LINK TO DELETED ENTRY
- BX3 -X4*X3
- BX6 X2+X3
- SA6 A2
- DCP4 TX2 A5-1,-FP
- SB3 PPRX *JAV* RETURN ADDRESS
- ZR X2,PPRX IF CALL BY *MTR*
- EQ JAV ADVANCE JOB
- * JOB ACTIVE IN THIS CPU - START NEW JOB.
- DCP6 TX1 A5-1,-FP
- SB3 BNJ1 *JAV* RETURN ADDRESS
- ZR X1,BNJ1 IF CALL BY *MTR*
- EQ JAV CHECK FOR JOB ADVANCE
- DEQM SPACE 4,20
- *** DEQM - DROP EQUIPMENT.
- *
- * RELEASE EQUIPMENT FROM JOB ASSIGNMENT.
- *
- * ENTRY
- *T, OR 12/ DEQM,12/ EQ,12/,12/ EJT,12/
- * EQ EST ORDINAL (IF 4000B + EQ, EJT IS PRESENT).
- * EJT EJT ORDINAL TO RELEASE EQUIPMENT FROM.
- *
- * EXIT
- *T, OR 60/ 0
- * COUNTER IN *EACW* DECREMENTED, IF EQUIPMENT WAS
- * ASSIGNED TO CALLER AND IS RELEASED.
- *
- * HANG CONDITIONS -
- *
- * ILLEGAL EST ORDINAL.
- * EQUIPMENT NOT ASSIGNED TO CALLER (OR ALTERNATE EJT ORDINAL).
- PPR DEQM
- LX5 24
- MX2 -9
- BX2 -X2*X5 EST ORDINAL
- MX0 -12
- TX3 X2,-ESTL
- PL X3,HNG IF INVALID EST ORDINAL
- CX3 X2,EST CONVERT EST ORDINAL TO OFFSET
- LX5 59-47-24
- TA3 X3+EQAE,EST READ EQUIPMENT ASSIGNMENT WORD
- LX1 36
- TX4 B7,-SCA
- BX6 X0*X3
- NG X5,DEQ1 IF ALTERNATE EJT SPECIFIED
- MX1 12
- ZR X4,DEQ1 IF PP AT SYSTEM CONTROL POINT
- SA1 B7+TFSW GET JOB EJT
- DEQ1 LX1 12
- BX4 X1-X3 CHECK EQUIPMENT ASSIGNMENT
- SX2 B1
- BX4 -X0*X4
- NZ X4,HNG IF EQUIPMENT ASSIGNED ELSEWHERE
- LX2 48
- SA6 A3
- NG X5,PPR1 IF RELEASE FROM ALTERNATE EJT
- SA4 B7+EACW
- IX6 X4-X2 DECREMENT EQUIPMENT ASSIGNED COUNT
- SA6 A4
- EQ PPR1 RETURN
- DFMM SPACE 4,30
- *** DFMM - PROCESS DAYFILE MESSAGE.
- *
- * ENTRY
- *T, OR 12/ DFMM,12/ BC,6/,6/ MO,24/
- *T, MB 42/, 18/ADDR
- * BC BYTE COUNT OF MESSAGE. THE PP WILL BE HUNG IF
- * *BC* TRANSLATES TO WORD COUNT GREATER THAN 5 FOR
- * CODED MESSAGES AND 6 FOR BINARY MESSAGES.
- * FOR *BMCN* THE (BC) MUST TRANSLATE TO A WORD COUNT
- * THAT IS .LE. 60.
- * BC = 0, SET BUFFER IN *1DD* INPUT REGISTER BUSY.
- * MO MESSAGE OPTION (SEE *PPCOM* FOR LIST OF OPTIONS).
- * BIT 5 OF *MO* SET INDICATES THAT THE CALLING PP
- * CANNOT DUMP THE DAYFILE BUFFER.
- * BIT 4 OF *MO* SET WILL CAUSE THE DAYFILE BUFFER TO
- * BE INTERLOCKED FOR PROCESSING BY THE CALLING PP.
- *
- * MESSAGE BUFFER CONTAINS UP TO AND INCLUDING 5 WORDS
- * OF MESSAGE DATA (6 WORDS FOR BINARY MESSAGE).
- * ADDR FOR *BMCN* THIS IS THE CENTRAL MEMORY ADDRESS WHERE
- * THE *BML* ENTRY IS LOCATED.
- *
- * INTERMEDIATE PROCESSING (USED ON BUFFER BUSY AND FULL)
- *T, OR 12/ CDBM,12/ BC,6/,6/ MO,12/ CP+SF,12/ DI
- * CP = CONTROL POINT ADDRESS.
- * SF = 0 TO WAIT FOR 1 SECTOR OF SPACE IN DAYFILE BUFFER.
- * = 1 TO WAIT UNTIL PP DUMP BUFFER NOT BUSY.
- * DI DAYFILE INDEX.
- * 0 = JOB DAYFILE.
- * 1 = MASTER DAYFILE.
- * 2 = ACCOUNT DAYFILE.
- * 3 = ERRLOG DAYFILE.
- * 4 = MAINLOG DAYFILE.
- *
- * EXIT
- *T, OR 12/ 0,12/ BC,6/,6/ MO,12/ 0,12/ 0
- * MESSAGE COMPLETELY PROCESSED.
- *
- *T, OR 12/ 0,36/,12/ BUSY
- * BUSY = 0, IF BUFFER WAS SET BUSY ON BC = 0 REQUEST.
- *
- *T, OR 12/ 0,12/ BC,6/,6/ MO,12/ LN,12/ DI
- * PP MUST CALL *1DD* TO DUMP THE BUFFER.
- * LN LENGTH OF MASS STORAGE ERROR PROCESSOR AND DIRECT
- * CELLS TO BE SAVED.
- * DI DAYFILE INDEX.
- * 0 = JOB DAYFILE.
- * 1 = MASTER DAYFILE.
- * 2 = ACCOUNT DAYFILE.
- * 3 = ERRLOG DAYFILE.
- * 4 = MAINLOG DAYFILE.
- *
- * NOTE THAT IF AN ALTERNATE PSEUDO-CONTROL POINT ASSIGNMENT IS
- * PRESENT, THE ONLY OPTIONS THAT CAN BE SPECIFIED ARE THOSE
- * THAT ISSUE MESSAGES TO THE SYSTEM DAYFILES WITH THE JSN
- * SUPPLIED BY THE CALLER.
- *
- * HANG CONDITIONS -
- *
- * MESSAGE LENGTH TOO LONG.
- * OPTION SELECTED IS NOT FOR SYSTEM DAYFILE WITH CALLER
- * SUPPLIED JSN AND ALTERNATE PSEUDO-CONTROL POINT
- * ASSIGNMENT IS PRESENT.
- PPR DFMM
- AX2 24
- SB7 X2 SET CP/PCP ADDRESS
- SA2 DSSL CHECK FOR DEADSTART IN PROGRESS
- SX6 A5+ SET DUMMY RA+1
- LX2 59-2
- PL X2,DFM0 IF NOT DEADSTART IN PROGRESS
- TB7 SCA ISSUE MESSAGE AT SYSTEM CONTROL POINT
- DFM0 SA6 RA1
- MX0 36 CLEAR BYTES 3 AND 4 OF OUTPUT REGISTER
- BX7 X0*X5
- AX1 36 POSITION BYTE COUNT
- SA7 A5+
- BX5 X7
- ZR X1,DFM30 IF SET BUFFER BUSY REQUEST
- SB4 4
- SX7 16384/5+1
- SX4 X1+B4 BC+4
- IX6 X7*X4 (BC+4)*16384/5
- SX3 B4+B1 X3 = 5
- AX6 14 ((BC+4)*(16384/5))/16384 = (BC+4)/5
- SX2 X1-27
- SB6 X6 SET WORD COUNT
- SX4 A5+ SET MESSAGE ADDRESS - 1
- MX0 -4
- LX5 -24
- TX2 B7-200B,-SCA
- BX0 -X0*X5 CHECK MESSAGE DESTINATION
- NG X2,DFM0.3 IF NOT ALTERNATE PCP ASSIGNMENT
- SX2 106014B CALLER SUPPLIED JSN OPTIONS MASK
- SB3 X0+59-17
- LX2 B3
- PL X2,HNG IF NOT CALLER SUPPLIED JSN OPTION
- DFM0.3 SB3 X0-BMLN/10000B
- LX5 -36
- NG B3,DFM1 IF NOT MAINTENANCE LOG (*BMLN* OR *BMCN*)
- SX2 X1-31
- ZR B3,DFM1 IF *BMLN* FUNCTION
- SA2 A5+1
- SX4 X2-1 SET MESSAGE ADDRESS - 1
- SX2 X1-60*5+1
- DFM1 PL X2,HNG IF MESSAGE TOO LONG
- IX7 X6*X3 (BC+4)/5*5
- IX0 X1-X7 BC-((BC+4)/5*5) = -REMAINDER
- SX2 0 SET *DFMM* FLAG
- SA1 X4+B6
- NZ B6,DFM2 IF WORD COUNT .NE. 0
- BX0 -X3 SET MASK INDEX FOR NULL MESSAGE
- SX6 B1 SET WORD COUNT
- * BEGIN PROCESSING COMMON TO *DFMM* AND *MSG* REQUESTS.
- *
- * ENTRY (X0) = MASK INDEX FOR LAST WORD OF MESSAGE.
- * (X1) = LAST WORD OF MESSAGE.
- * (X2) = 1/X,59/0 WHERE X = 1 IF *MSG* CALL.
- * (X4) = MESSAGE ADDRESS - 1.
- * (X5) = REQUEST.
- * (X6) = WORD COUNT OF MESSAGE.
- DFM2 BX7 X2+X4 COMBINE CALL FLAG WITH MESSAGE ADDRESS
- SA6 DMWC SAVE WORD COUNT
- SA7 A6+B1
- ERRNZ DMWC+1-DMMA MEMORY REFERENCE OUT OF ORDER
- SA3 X0+TMSK+5 FETCH EOM MASK
- MX4 -4
- BX7 X3*X1
- SX0 X6+B1 ADJUST WORD COUNT TO INCLUDE TIME
- LX5 -24 EXTRACT MESSAGE OPTION
- SA7 A7+B1
- ERRNZ DMMA+1-DMLW MEMORY REFERENCE OUT OF ORDER
- BX3 -X4*X5
- MX1 12
- SB4 X3-TMPOL
- PL B4,DFM8 IF ILLEGAL OPTION (DEFAULT TO 0)
- SA2 X3+TMPO
- DFM3 BX6 X2 SAVE ENTRY FROM MESSAGE OPTION TABLE
- LX5 24 SHIFT REQUEST WORD BACK
- SA6 DMPA
- NG X2,DFM7 IF MESSAGE GOING TO JOB DAYFILE
- MX3 -6
- AX6 36
- BX6 -X3*X6
- SB6 X6 SET DAYFILE INDEX
- LX3 X6,B1 CALCULATE ABSOLUTE ADDRESS
- IX3 X3+X6
- TX6 X3-3,DP
- SA6 DDBA
- ERX3 X6 READ BUFFER POINTERS
- DFM4 SX7 B1
- IX4 X6+X7
- IX7 X7+X4
- ERX4 X4
- ERX1 X7 CHECK BUFFER STATUS
- SB4 X4 OUT POINTER
- LX1 59-1
- AX4 24 BUFFER LENGTH
- SB3 X3 IN POINTER
- ZR X4,DFM16 IF ZERO LENGTH BUFFER
- SA7 DFPA
- PL X1,DFM23 IF BUFFER INTERLOCKED
- SB5 B4-B3 OUT - IN
- LX3 59-35
- NG X3,DFM24 IF MESSAGES WERE LOST
- LX3 35-59
- AX3 36 FIRST POINTER
- SB4 X0+B1 WORD COUNT INCLUDING JOB SEQUENCE NUMBER
- GT B5,B0,DFM5 IF OUT .GT. IN
- SB5 X4+B5
- DFM5 TGE B4,B5,(/CPP/DDB,CPP,/MONITOR/DDB) IF NOT ENOUGH SPACE
- BX7 X5
- LX7 59-28
- PL X7,DFM6 IF NO REQUEST TO SET BUFFER INTERLOCK
- SX7 B1
- LX1 1
- BX7 -X7*X1
- PL X1,DFM23 IF DUMP IN PROGRESS
- LX7 1
- SA1 DFPA
- EWX7 X1 SET BUFFER INTERLOCK
- DFM6 SB4 X2 PREPROCESSOR ADDRESS
- SA1 TIML
- SA2 DMMA
- BX6 X1 TIME VALUE FOR MESSAGE
- SB5 X4 SET LIMIT
- BX4 X6
- JP B4 EXIT TO PREPROCESSOR
- DFM7 TX4 B7,-SCA
- ZR X4,DFM8 IF SYSTEM CONTROL POINT
- SA3 B7+FLSW
- MX1 12
- BX4 X1*X3
- ZR X4,DFM16 IF NO NFL
- MX1 -RMSK
- LX1 12
- BX4 -X1*X3 EXTRACT RA
- AX4 6
- SX6 DAPN
- IX6 X4-X6
- ERX3 X6
- SA6 DDBA
- SX7 DAYN
- IX4 X4-X7 SET ABSOLUTE BUFFER ADDRESS
- SX3 X3
- LX4 36
- BX3 X4+X3 COMBINE BUFFER ADDRESS WITH IN POINTER
- SB6 B0+ SET DAYFILE INDEX FOR JOB DAYFILE
- EQ DFM4 READ REMAINING BUFFER POINTERS
- DFM8 SA5 A5 REREAD REQUEST
- LX1 -24
- SA2 TMPO CHANGE MESSAGE OPTION TO 0
- BX7 -X1*X5
- SA7 A5+
- LX5 -24
- EQ DFM3 PROCESS NEW MESSAGE OPTION
- * ENTRY FOR MESSAGE WITH JOB SEQUENCE NUMBER IN MESSAGE.
- *
- *T MB 24/ JSN, 12/ NONZERO, 12/ NONZERO, 6/ , 6/ SC
- * JSN JOB SEQUENCE NUMBER.
- * SC JOB SERVICE CLASS.
- DFM9 SX1 B1
- IX0 X0-X1
- IX2 X1+X2 INCREMENT ADDRESS
- ERX1 X2 READ NEXT WORD
- MX7 -6
- BX7 -X7*X1 JOB SERVICE CLASS
- EQ DFM12 STORE TIME
- * ENTRY FOR MESSAGE TO BINARY MAINTENANCE LOG.
- DFM10 SX7 X0+1 SET WORD COUNT FOR MESSAGE HEADER
- SA1 PDTL
- MX6 -36
- BX1 -X6*X1
- LX7 48
- BX6 X7+X1
- * ENTRY FOR MESSAGE WITH JOB SEQUENCE NUMBER FROM
- * CONTROL POINT AREA.
- DFM11 SA1 B7+TFSW GET EJT ORDINAL
- MX4 -12
- LX1 12
- BX4 -X4*X1
- CX1 X4,EJT CONVERT EJT ORDINAL TO OFFSET
- TA1 X1+SCLE,EJT GET JOB SERVICE CLASS
- BX7 X1
- AX7 54
- SA1 A1+JSNE-SCLE GET JOB SEQUENCE NUMBER
- NZ X4,DFM12 IF EJT ORDINAL PRESENT
- + TX4 B7,-SCA
- NZ X4,* IF NOT SYSTEM CONTROL POINT
- * STORE TIME AND TRANSLATE JOB SERVICE CLASS.
- DFM12 SX4 B3 STORE TIME IN DAYFILE BUFFER
- IX4 X3+X4
- EWX6 X4
- MX4 24
- SB3 B3+B1 ADVANCE IN
- BX4 X4*X1
- SA1 TJSC+X7 GET JOB SERVICE CLASS TRANSLATION
- LX4 -12
- BX4 X4+X1
- NE B3,B5,DFM13 IF IN .NE. LIMIT
- SB3 0 SET IN = FIRST
- * ENTRY FOR MESSAGE WITH NO JOB SEQUENCE NUMBER.
- DFM13 ZR X0,DFM14 IF MESSAGE TRANSFER COMPLETE
- BX6 X4
- SX1 B3
- IX1 X3+X1
- SX0 X0-1 DECREMENT MESSAGE WORD COUNT
- EWX6 X1
- SB3 B3+B1 ADVANCE IN
- SX4 B1
- IX2 X2+X4
- ERX4 X2 READ NEXT WORD OF MESSAGE
- NE B3,B5,DFM13 IF IN .NE. LIMIT
- SB3 0 SET IN = FIRST
- EQ DFM13 CONTINUE TRANSFER
- DFM14 SA2 DMLW STORE EOM
- BX7 X2
- SA2 DDBA REREAD IN POINTER
- ERX3 X2
- AX3 18 CLEAR IN POINTER
- SX0 B3 SET IN
- LX3 18
- SB3 DFM16 SET RETURN FROM *DDD*
- BX6 X3+X0
- EWX7 X1
- EWX6 X2
- SX6 B1
- IX6 X6+X2
- ERX1 X6
- BX4 X1
- SX1 X1
- AX4 24
- IX7 X0-X1 IN - OUT
- PL X7,DFM15 IF IN .GT. OUT
- IX7 X7+X4 ADD BUFFER LENGTH
- DFM15 BX6 X4-X7 CHECK BUFFER THRESHOLD
- AX6 6
- ZR X6,DDD IF BUFFER FULL
- DFM16 TX4 B7,-SCA CHECK JOB ISSUING MESSAGE
- SA2 DMPA
- LX2 -18 POSITION POST PROCESSOR ADDRESS
- BX7 X7-X7
- SB4 X2
- LX2 18+1
- ZR X4,DFM20 IF JOB AT SYSTEM CONTROL POINT
- SA1 DMMA GET *MSG* CALL FLAG
- JP B4 EXIT TO POST PROCESSOR
- DFM17 SX3 10B
- EQ DFM19 CHANGE MESSAGE REQUEST
- DFM18 SB0 0
- SX3 CPON/10000B
- * CHANGE MESSAGE REQUEST.
- DFM19 LX5 -24 POSITION OUTPUT REGISTER
- MX7 55
- SA4 DMWC READ WORD COUNT
- BX5 X7*X5 REMOVE CURRENT REQUEST
- SA2 X3+TMPO READ MESSAGE OPTION TABLE
- BX7 X5+X3 INSERT NEW MESSAGE OPTION
- MX1 12
- LX7 24
- SX0 X4+B1
- BX5 X5+X3
- SA1 RA1
- EWX7 X1 REWRITE RA+1
- SA7 MSGB UPDATE POSSIBLE *X* STATUS COPY
- EQ DFM3 PROCESS NEXT DAYFILE
- DFM20 PL X2,PPR1 IF MESSAGE NOT SPECIFIED FOR *MS1W*
- SB0 0
- * STORE MESSAGE AT *MS1W* OF CONTROL POINT.
- DFM21 MX0 -12
- SA3 DMMA RETRIEVE MESSAGE ADDRESS
- LX5 59-23
- PL X3,DFM22 IF *DFMM* CALL
- SX1 1
- NG X5,DFM22 IF CONTROL STATEMENT MESSAGE
- SA4 B7+ACLW CHECK USER MESSAGE LIMIT
- LX1 36
- BX2 X4
- LX4 12
- AX4 48
- ZR X4,DFM22 IF UNLIMITED USER
- IX7 X2-X1 DECREMENT USER MESSAGE LIMIT
- SA7 A4
- DFM22 BX4 -X3 KEEP MSG INDICATOR
- SX5 B1
- IX1 X3+X5 NEXT WORD
- ERX2 X1 READ NEXT WORD
- BX6 X2
- JP TMSG+1 MOVE MESSAGE VIA *MSG* PROCESSOR
- * IF CALLING PP CAN DUMP THE BUFFER, REJECT THE REQUEST VIA
- * *CDBM*. OTHERWISE, SIMULATE A COMPLETED REQUEST.
- DFM23 SA2 DMMA CHECK REQUEST
- SX4 B6
- MX1 1
- NG X2,DFM23.1 IF *MSG* CALL
- BX5 X4+X5
- JP DDB2 CHANGE REQUEST TO *CDBM*
- * RESTORE ORIGINAL REQUEST AND SET *X* STATUS.
- DFM23.1 SA1 MSGB GET ORIGINAL REQUEST
- BX6 X1
- SA1 RA1 GET RA+1 ADDRESS
- EWX6 X1
- EQ SXS SET *X* STATUS
- * DAYFILE MESSAGES WERE RECENTLY DISCARDED BECAUSE THE
- * CALLING PP COULD NOT DUMP THE DAYFILE BUFFER. THIS ROUTINE
- * PUTS AN INFORMATIVE MESSAGE IN THE BUFFER, IF ROOM EXISTS.
- DFM24 SX0 X0+DFMAL+1 TEST IF ROOM FOR ERROR MESSAGE
- LX3 35-59 REPOSITION BUFFER POINTERS
- SB5 B4-B3
- AX3 36 FIRST POINTER
- SB4 X0+B1
- GT B5,B0,DFM25 IF OUT .GT. IN
- SB5 X4+B5
- DFM25 TGE B4,B5,(/CPP/DDB,CPP,/MONITOR/DDB) IF NOT ENOUGH SPACE
- MX6 1
- SB5 X4 SET LIMIT
- BX6 -X6*X1
- LX1 59-0-59+1
- PL X1,DFM23 IF DUMP IN PROGRESS
- LX6 1-59
- SA1 DFPA SET BUFFER INTERLOCK
- EWX6 X1
- SA4 DFMA JOB SEQUENCE NAME FOR CODED DAYFILES
- SX4 X2-DFM10 CHECK FOR MESSAGE TO MAINLOG
- SA1 TIML TIME LINE FOR CODED DAYFILES
- NZ X4,DFM25.1 IF NOT MAINLOG
- SX4 4 SET MAINLOG WORD COUNT
- SA1 PDTL
- LX4 48
- BX1 X1+X4
- SA4 DFMB JOB SEQUENCE NAME FOR BINARY DAYFILE
- DFM25.1 SX4 B3+ STORE TIME
- IX4 X3+X4
- BX6 X1
- EWX6 X4
- SA4 A4 REREAD JOB SEQUENCE NAME
- SB3 B3+B1 ADVANCE IN
- NE B3,B5,DFM26 IF IN .NE. LIMIT
- SB3 B0
- DFM26 SX1 B3 WRITE JOB SEQUENCE NUMBER TO BUFFER
- BX6 X4
- IX1 X1+X3
- EWX6 X1
- SA1 A4+B1 ERROR MESSAGE
- SB3 B3+B1 ADVANCE IN
- NE B3,B5,DFM27 IF IN .NE. LIMIT
- SB3 0
- DFM27 SX4 B3 WRITE ERROR MESSAGE TO BUFFER
- BX6 X1
- IX4 X3+X4
- SA1 A1+B1 GET NEXT WORD OF ERROR MESSAGE
- SB3 B3+B1 ADVANCE IN
- NE B3,B5,DFM27.1 IF IN .NE. LIMIT
- SB3 B0
- DFM27.1 EWX6 X4 WRITE FIRST WORD OF MESSAGE TO BUFFER
- SX4 B3
- BX6 X1
- IX4 X3+X4
- SA1 DDBA
- EWX6 X4 WRITE SECOND WORD OF MESSAGE
- SX0 B1
- IX0 X0+X1
- ERX1 X1 CLEAR *MESSAGE LOST* FLAG
- MX6 1
- LX1 59-35
- BX6 -X6*X1
- SB3 B3+B1 ADVANCE IN
- NE B3,B5,DFM28 IF IN .NE. LIMIT
- SB3 B0
- DFM28 LX6 35-59
- SA1 DDBA REREAD *IN* POINTER
- SX4 B3 SET *IN*
- AX6 12
- LX6 12
- BX6 X4+X6
- ERX4 X0 RESTORE *LIMIT*
- EWX6 X1
- SX1 B1
- IX0 X0+X1
- AX4 24
- ERX1 X0
- MX6 1
- LX1 59-1
- LX5 59-28
- BX6 X1+X6
- NG X5,DFM29 IF REQUEST TO SET BUFFER INTERLOCK
- LX6 1-59
- EWX6 X0 CLEAR BUFFER INTERLOCK
- DFM29 SA1 DMWC RESTORE WORD COUNT
- LX5 28-59
- SX0 X1+B1 ADJUST WORD COUNT TO INCLUDE TIME
- EQ DFM6 PROCESS MESSAGE
- * SET BUFFER BUSY FOR *1DD* DIRECT CALL.
- DFM30 SA1 A5-B1 READ INPUT REGISTER
- SX3 X1
- NZ X3,DFM31 IF NOT JOB DAYFILE
- SA3 B7+FLSW GET RA
- MX2 -RMSK
- AX3 RSHF
- BX2 -X2*X3 EXTRACT RA/100B
- LX2 6
- SX3 DAPN-2 SET INTERLOCK ADDRESS
- IX3 X2-X3
- EQ DFM32 CONTINUE PROCESSING
- DFM31 LX2 X3,B1 SET INTERLOCK ADDRESS
- IX2 X2+X3
- TX3 X2-3+2,DP
- DFM32 ERX1 X3
- MX4 -3
- BX6 -X4*X1
- BX5 X6-X4
- SX4 5
- SX7 B1+
- NZ X5,PPR1 IF BUFFER ALREADY DUMPED
- BX6 -X4*X1 SET BUFFER BUSY, CLEAR *1DD* CALLED FLAG
- BX7 X7-X7
- EWX6 X3
- EQ PPR1 CLEAR OUTPUT REGISTER
- DFMA DATA 10H**ERROR**. JOB SEQUENCE NUMBER
- DATA C*MESSAGES LOST.* ERROR MESSAGE
- DFMAL EQU *-DFMA ERROR MESSAGE LENGTH - 1
- DFMB DATA 10H SYS S. SYSTEM JOB JAME
- VFD 12/DM0406,12/DS0114,36/0
- BSSZ DFMB+DFMAL-* FILL REST OF MESSAGE
- DMWC CON 0 MESSAGE WORD COUNT
- DMMA CON 0 MESSAGE ADDRESS
- DMLW CON 0 LAST WORD OF MESSAGE
- DMPA CON 0 PROCESSOR ADDRESS
- DFPA CON 0 BUFFER POINTER ADDRESS
- TMPO SPACE 4,10
- ** TMPO - TABLE OF MESSAGE PROCESSING OPTIONS.
- *
- * INDEXED BY MESSAGE OPTION (MO).
- *
- *T, 6/ DF,12/,6/ DI,18/ PP,18/ PA
- * DF = DESTINATION FLAGS.
- * BITS 0 - 3 = RESERVED.
- * BIT 4 = *MS1W* FLAG FOR SYSTEM CONTROL POINT.
- * BIT 5 = JOB DAYFILE FLAG.
- * DI = DAYFILE INDEX.
- * 0 = JOB DAYFILE.
- * 1 = MASTER DAYFILE.
- * 2 = ACCOUNT DAYFILE.
- * 3 = ERRLOG DAYFILE.
- * 4 = MAINLOG DAYFILE.
- * PP = POST PROCESSOR ADDRESS.
- * PA = PROCESSOR ADDRESS.
- TMPO BSS 0
- VFD 6/20B (00B) - *MS1W* AND JOB/SYSTEM DAYFILES
- VFD 12/
- VFD 6/MSDY+1
- VFD 18/DFM18,18/DFM11
- VFD 6/0 NMSN - JOB/SYSTEM DAYFILES, NOT *MS1W*
- VFD 12/
- VFD 6/MSDY+1
- VFD 18/DFM17,18/DFM11
- VFD 6/0 JNMN - SYSTEM DAYFILE WITH JSN IN MESSAGE
- VFD 12/
- VFD 6/MSDY+1
- VFD 18/MTRP,18/DFM9
- VFD 6/60B CPON - *MS1W* AND JOB DAYFILE
- VFD 12/
- VFD 6/0
- VFD 18/DFM21,18/DFM13
- VFD 6/0 ERLN - ERRLOG
- VFD 12/
- VFD 6/ELDY+1
- VFD 18/MTRP,18/DFM11
- VFD 6/0 ACFN - ACCOUNT FILE
- VFD 12/
- VFD 6/ACDY+1
- VFD 18/MTRP,18/DFM11
- VFD 6/0 EJNN - ERRLOG WITH JSN IN MESSAGE
- VFD 12/
- VFD 6/ELDY+1
- VFD 18/MTRP,18/DFM9
- VFD 6/0 AJNN - ACCOUNT FILE WITH JSN IN MESSAGE
- VFD 12/
- VFD 6/ACDY+1
- VFD 18/MTRP,18/DFM9
- VFD 6/40B (10B) - USED INTERNALLY BY *CPUMTR*
- VFD 12/
- VFD 6/0
- VFD 18/MTRP,18/DFM13
- VFD 6/40B CDON - JOB DAYFILE
- VFD 12/
- VFD 6/0
- VFD 18/MTRP,18/DFM13
- VFD 6/0 MDON - SYSTEM DAYFILE ONLY
- VFD 12/
- VFD 6/MSDY+1
- VFD 18/MTRP,18/DFM11
- VFD 6/0 I1FN - USER OPTION 1
- VFD 12/
- VFD 6/MSDY+1
- VFD 18/DFM18,18/DFM11
- VFD 6/0 I2FN - USER OPTION 2
- VFD 12/
- VFD 6/MSDY+1
- VFD 18/DFM18,18/DFM11
- VFD 6/0 I3FN - USER OPTION 3
- VFD 12/
- VFD 6/MSDY+1
- VFD 18/DFM18,18/DFM11
- VFD 6/0 BMLN - BINARY MAINTENANCE LOG
- VFD 12/
- VFD 6/MLDY+1
- VFD 18/MTRP,18/DFM10
- VFD 6/0 BMCN - BML WITH MESSAGE IN ALT. BUFFER
- VFD 12/
- VFD 6/MLDY+1
- VFD 18/MTRP,18/DFM10
- TMPOL EQU *-TMPO
- TMSK SPACE 4,10
- ** TMSK - TABLE OF MESSAGE TERMINATION MASKS.
- TMSK BSS 0
- VFD 60/0
- VFD 12/-0,48/0
- VFD 24/-0,36/0
- VFD 36/-0,24/0
- VFD 48/-0,12/0
- VFD 60/-0
- TJSC SPACE 4,10
- ** TJSC - TABLE OF JOB SERVICE CLASS TRANSLATIONS.
- *
- * ONE WORD ENTRIES INDEXED BY JOB SERVICE CLASS.
- *T 12/ SPACES, 24/ 0, 6/ SC, 6/ ., 12/ SPACES
- * SC SERVICE CLASS CHARACTER TRANSLATION.
- TJSC BSS 0
- .1 SET 1
- .A DUP MXSC
- .2 MICRO .1,1,$"NMDS"$
- .B IFC NE,$".2"$$
- VFD 12/2H ,24/0,6/1H".2",18/3H.
- .1 SET .1+1
- .B ELSE
- STOPDUP
- .B ENDIF
- .A ENDD
- DDB SPACE 4,15
- ** DDB - DUMP DAYFILE BUFFER.
- *
- * ENTRY (DDBA) = FIRST / IN POINTER ADDRESS.
- * (DFPA) = BUFFER POINTER INTERLOCK ADDRESS.
- * (B6) = DAYFILE INDEX.
- * (B7) = CONTROL POINT ADDRESS.
- * (X5) = REQUEST.
- *
- * USES A - 1, 2, 4, 6, 7.
- * B - 3.
- * X - ALL.
- *
- * CALLS APQ, DDD, PPRX, PPR1, SXS.
- DDB SA4 DDBA CHECK BUFFER STATUS
- SX2 B1+B1
- IX6 X4+X2
- ERX1 X6
- SA2 DMMA CHECK REQUEST
- LX1 59-0
- SX4 B6
- NG X2,DDB4 IF *MSG* REQUEST
- BX5 X4+X5
- PL X1,DDB2 IF DUMP IN PROGRESS
- SA2 DFPP
- MX0 -59
- LX2 59-0
- LX4 X2,B1
- PL X2,DDB1 IF PP DUMP BUFFER IN USE
- BX2 X5 CHECK DUMP FLAG
- LX2 59-29
- BX7 X7-X7
- NG X2,DDB2 IF PP CANNOT DUMP BUFFER
- BX7 -X0*X1
- LX7 1
- MX0 48
- EWX7 X6 SET DAYFILE BUFFER BUSY
- BX6 X0*X4
- SX4 65B PARAMETER FOR PP *1DD* CALL
- MX0 -48
- SX3 A5-B1 PP INPUT REGISTER ADDRESS
- BX5 -X0*X5
- LX4 12
- BX6 X6+X3 SET PP DUMP BUFFER BUSY
- IX7 X5+X4
- SA6 A2
- SA7 A5 HAVE CALLING PP DUMP DAYFILE
- JP PPRX EXIT
- DDB1 BX7 X5 STORE PP OUTPUT REGISTER
- SB3 DDB2 SET RETURN FROM *DDD*
- SA7 A5
- JP DDD ATTEMPT TO DUMP DAYFILE DIRECT
- * CHANGE *DFMM* REQUEST TO *CDBM* IF THE CALLING PP CAN DUMP
- * THE DAYFILE BUFFER. OTHERWISE, DISCARD REMAINING PORTION
- * OF MESSAGE, SET A *MESSAGE LOST* FLAG, AND SIMULATE A
- * COMPLETED REQUEST.
- DDB2 SX0 B7
- NZ X1,DDB3 IF DUMP INITIATED
- SX0 X0+B1
- DDB3 LX0 12 POSITION *CDBM* SUBFUNCTION
- SX2 CDBM&DFMM
- LX5 59-29
- NG X5,DDB3.1 IF CALLING PP CANNOT DUMP BUFFER
- LX5 29-59
- BX5 X5+X0
- LX2 48 CHANGE PP REQUEST TO *CDBM*
- BX7 X5-X2
- JP PPR1 EXIT TO STORE PP OUTPUT REGISTER
- DDB3.1 SA1 DDBA READ BUFFER POINTERS
- MX7 1
- ERX2 X1
- LX7 35-59
- BX7 X2+X7 SET *MESSAGE LOST* FLAG
- EWX7 X1 REWRITE POINTERS
- BX7 X7-X7 CLEAR OUTPUT REGISTER
- EQ PPR1 EXIT
- * NOT ENOUGH SPACE IN BUFFER ON *MSG* REQUEST.
- DDB4 PL X1,DDB8 IF DUMP IN PROGRESS
- SB3 DDB7 SET RETURN ADDRESS IF ACTIVE
- SA2 DD
- LX1 59-2-59+0
- SX0 B7 SAVE (B7)
- BX5 X6
- BX6 X2+X4
- NG X1,DDB8 IF *1DD* ALREADY CALLED
- ZR B6,DDB5 IF JOB DAYFILE
- TB7 0,SCA SET SYSTEM CONTROL POINT
- DDB5 SB6 DDB6
- EQ CAL CHECK ACTIVITY LIMIT
- DDB6 MX2 1 SET *1DD* CALLED
- BX7 X1+X2
- LX7 2-59
- EWX7 X5 STORE BUFFER INTERLOCK WORD
- SB4 B0+ SET FOR DIRECTORY SEARCH
- SB3 DDB7
- EQ APQ ASSIGN PP REQUEST
- DDB7 SB7 X0 RESTORE (B7)
- * RESTORE ORIGINAL REQUEST AND SET *X* STATUS.
- DDB8 SA1 MSGB GET ORIGINAL REQUEST
- BX6 X1
- SA1 RA1 GET RA+1 ADDRESS
- EWX6 X1
- EQ SXS SET JOB ON RECALL
- DDBA CON 0 FIRST / IN POINTER ADDRESS
- DDD SPACE 4,15
- ** DDD - DUMP DAYFILE DIRECT.
- *
- * ENTRY (DDBA) = FIRST / IN POINTER ADDRESS.
- * (A5) = REQUEST ADDRESS.
- * (B3) = RETURN ADDRESS.
- * (B6) = DAYFILE INDEX.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT (X1) = 0 IF DUMP NOT INITIATED.
- *
- * USES A - 1, 2, 4, 6, 7.
- * B - 3.
- * X - ALL.
- *
- * CALLS APQ.
- DDD SA4 DDBA CHECK BUFFER STATUS
- SX2 B1+B1
- MX6 -3
- IX0 X4+X2
- ERX3 X0
- BX6 -X6*X3
- BX1 X1-X1
- SX6 X6-3
- NZ X6,RB3 IF BUFFER BUSY, INTERLOCKED, OR *1DD* CALL
- SX4 B6
- SA1 B7+TFSW SET EJT ORDINAL
- MX2 -12
- LX1 12
- BX2 -X2*X1
- CX1 X2,EJT CONVERT EJT ORDINAL TO OFFSET
- NZ X2,DDD1 IF EJT ORDINAL PRESENT
- + TX2 B7,-SCA
- NZ X2,* IF NOT SYSTEM CONTROL POINT
- DDD1 TA2 X1+JSNE,EJT GET JOB ADVANCE FLAG
- BX1 X1-X1
- LX2 59-6
- SX7 B3 SAVE EXIT ADDRESS
- SX6 B6 SAVE (B6)
- NG X2,RB3 IF JOB ADVANCE SET
- SA2 B7+STSW
- LX7 18
- LX2 59-24
- BX6 X6+X7
- SX7 B7 SAVE (B7)
- TNG X2,(/CPP/DDD,CPP,/MONITOR/RB3) IF ROLLOUT REQUESTED
- DDD2 SA2 DD BUILD *1DD* CALL
- LX6 18
- BX6 X6+X7
- ZR B6,DDD3 IF JOB DAYFILE
- TB7 0,SCA SET SYSTEM CONTROL POINT
- DDD3 SX7 4 SET *1DD* CALLED FLAG
- SB3 DDD6
- SA6 T1 SAVE PARAMETERS
- SB6 DDD4
- BX6 X2+X4
- BX7 X3+X7
- EQ CAL CHECK ACTIVITY LIMIT
- DDD4 EWX7 X0 STORE BUFFER STATUS WORD
- SB4 B0 SET TO SEARCH DIRECTORY
- SB3 DDD5 SET RETURN ADDRESS
- EQ APQ ASSIGN PP
- DDD5 SX1 B1+ SET DUMP INITIATED
- DDD6 SA4 T1 RESTORE PARAMETERS
- SA5 A5 RESTORE REQUEST
- SB7 X4 RESTORE (B7)
- AX4 18
- SA2 DMMA
- SB6 X4 RESTORE (B6)
- AX4 18
- SB3 X4 RESTORE (B3)
- PL X2,RB3 IF *DFM* CALL
- SA2 RA1
- ERX5 X2
- JP B3 RETURN
- DLKM SPACE 4
- *** DLKM - DELINK TRACKS.
- *
- * ENTRY
- *T, OR 12/ DLKM,12/ EQ,12/ FT,12/ NT,12/ LT
- * EQ EST ORDINAL
- * IF BIT 11 OF EQUIPMENT FIELD IS SET THEN SET THE
- * CHECKPOINT BIT FOR THIS EQUIPMENT UPON COMPLETION OF
- * THE REQUEST.
- * FT TRACK ONTO WHICH NT IS LINKED.
- * NT TRACK TO BE LINKED TO FT.
- * LT LAST TRACK IN CHAIN TO DROP.
- *
- * BIT 11 OF FT MUST BE CLEAR
- * ALL TRACKS FROM FT (NOT INCLUDING FT) TO LT ARE RELEASED.
- * NT IS LINKED TO FT.
- *
- * EXIT.
- *T, OR 36/ 0,24/ PRU
- * PRU = NUMBER OF PRUS RETURNED TO THE SYSTEM.
- *
- * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
- * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
- * BEFORE THE DLKM IS ISSUED TO CPUMTR.
- PPR DLKM,(/ISD/CHR,ISD,/LSPMMF/CME,LSPMMF,/MONITOR/PMR),DLK
- ,,FEX
- DPPM SPACE 4,15
- *** DPPM - DROP PP.
- *
- * ENTRY
- *T, OR 12/ DPPM,12/,12/,12/,12/
- *
- * EXIT.
- *T, IR 60/ 0
- *T, OR 60/ 0
- *
- * HANG CONDITIONS -
- *
- * PP COUNT FIELD OF *STSW* IS ZERO UPON ENTRY.
- * ALTERNATE CONTROL POINT OR PSEUDO-CONTROL POINT ASSIGNMENT
- * PRESENT.
- PPR DPPM,,,FEX
- * ENTRY FROM *JACM*, *RECM*, *RPPM*, *UADM*, AND *CPCX*.
- TX2 A5-1,-FP
- LX2 PPXES-PPCES
- MX0 -5
- TA2 X2+ACPP,FPX GET CP ASSIGNMENT
- TB5 A5-1,-SP
- GT B5,B0,* IF RA+1 ADDRESS (*CPCX* CALL)
- SA1 X2+STSW GET CP STATUS
- SB7 X2 SET CP ADDRESS
- SX7 B1
- LX2 59-23
- LX0 48-0
- NG X2,HNG IF ALTERNATE CP/PCP ASSIGNMENT
- LX7 48-0
- BX3 -X0*X1 PP COUNT
- IX6 X1-X7 DECREMENT PP COUNT
- ZR X3,HNG IF PP COUNT ALREADY ZERO
- SA6 A1
- TNO /MONITOR/DPP1,NDCPC IF NOT DUAL CPU CACHE MACHINE
- SB4 DPP1 SET *CPA* RETURN ADDRESS
- TJP (/DCP/CPA,DCPC,/MONITOR/HNG) CHECK CPU SELECTION
- DPP1 SB3 /BUFIO/PCQ SET EXIT TO PROCESS PSEUDO-PP REQUESTS
- TZR B5,(/MONITOR/DPP4,BUFIO,/MONITOR/HNG) IF PSEUDO-PP
- TX3 A5-1,-FPC
- NG X3,DPP2 IF NOT CPP
- TJP (/CPP/DPP,CPP,/MONITOR/HNG) DROP CPP
- * RETURN PP TO POOL.
- DPP2 SA3 PPAL
- TX4 A5-1,-FP
- MX7 1
- AX4 PPCES PP INDEX
- SB3 PPQ SET EXIT TO PROCESS PP REQUESTS
- SX2 X4-12B
- SX1 35B
- LX7 -12
- NG X2,DPP3 IF NOT SECOND BANK
- IX4 X1-X4
- DPP3 SB6 X4+
- AX7 B6,X7
- BX7 X7+X3 SET PP AVAILABLE BIT
- SX4 B1 INCREMENT FREE PP COUNT
- IX7 X7+X4
- SA7 A3+
- * CLEAR PP ASSIGNMENT.
- DPP4 SA4 A5-B1 SAVE AUTO RECALL BIT
- SX7 B0
- SA7 A2 CLEAR *ACPP*
- SA7 A5-B1 CLEAR INPUT REGISTER
- SA7 A5+B1 CLEAR MB
- SA7 A5 CLEAR OUTPUT REGISTER
- SX7 1S4
- SA7 IP SET INCREASED PRIORITY FOR JOB
- * CHECK JOB STATUS.
- AX6 48
- LX4 59-41
- ZR X6,JAV IF NO CPU/PP ACTIVITY
- PL X4,RB3 IF NOT AUTO RECALL FOR THIS PP
- AX6 9
- SX6 X6+B1
- SB6 B7+ SET EXCHANGE PACKAGE ADDRESS
- NZ X6,RB3 IF NOT *I* STATUS
- EQ RCC RECALL CPU
- DTKM SPACE 4
- *** DTKM - DROP TRACKS.
- *
- * ENTRY
- *T, OR 12/ DTKM,12/ EQ,12/ TK,12/ SC,12/
- * EQ EST ORDINAL
- * IF BIT 11 OF EQUIPMENT FIELD IS SET THEN SET THE
- * CHECKPOINT BIT FOR THIS EQUIPMENT UPON COMPLETION OF
- * THE REQUEST.
- * IF BIT 10 OF THE EQUIPMENT FIELD IS SET THE CALLER IS
- * RELEASING A TRACK CHAIN LOCAL TO ANOTHER MACHINE.
- * TK FIRST TRACK
- * SC SECTOR NUMBER
- *
- * IF BIT 11 OF TK = 1, ALL TRACKS FROM TK TO END OF CHAIN ARE
- * DROPPED.
- * IF BIT 11 OF TK = 0, ALL TRACKS AFTER TK ARE DROPPED, AND
- * SC IS INSERTED IN TRACK BYTE.
- *
- * EXIT
- *T, OR 36/ 0,24/ PRU
- * PRU = NUMBER OF PRUS RETURNED TO THE SYSTEM.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- * 1) EQUIPMENT NOT MASS STORAGE OR OUT OF EST.
- * 2) ECS ADDRESS OF MST SET WHEN NOT MULTI-MAINFRAME MODE.
- * 3) IF LAST SECTOR WRITTEN .GE. MAXIMUM SECTOR LIMIT.
- * 4) IF ATTEMPTING TO DROP TRACKS LOCAL TO ANOTHER MACHINE.
- * THIS IS DETECTED BY THE MRT BIT NOT BEING SET FOR
- * THE FIRST TRACK IN THE CHAIN BEING DROPED.
- * 5) THE TRACK IS BEYOND THE DEVICE TRACK LIMITS.
- *
- * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
- * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
- * BEFORE THE DTKM IS ISSUED TO CPUMTR.
- PPR DTKM,(/ISD/CHR,ISD,/MONITOR/.DTKM),DTC,FEX
- * THIS FUNCTION WILL BE PERFORMED IN MONITOR MODE IF THE
- * THE FOLLOWING CONDITIONS ARE MET-
- *
- * 1) DEVICE IS NOT MMF SHARED.
- * 2) *MST* IS NOT INTERLOCKED.
- * 3) REQUEST IS RESETTING EOI IN CURRENT EOI TRACK.
- LX1 59-35
- NG X1,PMR IF DROP ENTIRE CHAIN
- MX2 -9
- BX6 -X2*X1 EXTRACT EST ORDINAL
- CX4 X6,EST
- TA4 X4+EQDE,EST READ EST ENTRY
- SX7 -7777B
- BX4 -X7*X4 MST ADDRESS/10B
- LX4 3
- SA4 X4+SDGL CHECK SHARED DEVICE STATUS
- LX4 -1
- MX3 -5
- NG X4,PMR IF DEVICE INTERLOCKED
- BX3 -X3*X4
- AX4 36-1
- ZR X4,DTC1 IF NON-SHARED DEVICE
- TZR X3,(/LSPMMF/CME1,LSPMMF,/MONITOR/PMR) IF MST NOT READ
- DTC1 BX1 X1-X6 CLEAR EST ORDINAL
- LX1 35-25
- SA4 A4+TRLL-SDGL
- SX4 X4 PREVENT CARRY
- IX4 X4+X1
- SA3 X4 READ TRT WORD
- MX7 2 EXTRACT BYTE POSITION
- BX1 X7*X1
- LX1 2+2 BYTE * 4
- LX2 X1,B1 BYTE * 8
- IX1 X1+X2
- SB4 X1
- LX3 X3,B4
- NG X3,PMR IF EOI TRACK CHANGING
- UX1,B6 X5 SET TO INTERLOCK TRT
- SB3 /PROGRAM/DTC1 SET TO UPDATE EOI
- SX6 B2+ SAVE (B2)
- SB5 PPRX
- SA6 T1
- EQ /PROGRAM/CTR1
- EATM SPACE 4,25
- *** EATM - ENTER/ACCESS EVENT TABLE.
- *
- * ENTRY
- *T, OR 12/ EATM,12/ FN,15/,21/ EVENT
- * FN EEVS = ENTER EVENT.
- * SEIS = SET EVENT TABLE INTERLOCK.
- *
- *T, OR 12/ EATM,12/ FN,18/,1/0,17/ TINT
- * FN UHSS = UPDATE 887 DISK SPIN-UP TIME.
- * TINT TIME INTERVAL BEFORE NEXT EVENT ALLOWED.
- *
- * EXIT
- * FN EEVS, UHSS.
- *T, OR 12/ 0,12/ ST,36/
- * ST 0 IF REQUEST HONORED.
- * 1 IF SUBFUNCTION NOT PROCESSED.
- *
- * FN SEIS.
- *T, OR 12/ 0,12/ COUNT,36/
- * COUNT COUNT OF EVENTS IN TABLE PRESENTLY.
- PPR EATM,,,FEX
- TA1 EVT GET EVENT COUNT
- MX7 1
- BX3 X5 GET SUBFUNCTION
- MX0 -12
- LX3 24
- BX7 X7+X5
- BX3 -X0*X3
- BX6 -X0*X1 ISOLATE COUNT AND INTERLOCK BIT
- SB4 X3-UETMS
- LX6 59
- PL B4,EAT4 IF UPDATE EVENT TIME REQUEST
- NG X6,PPR1 IF INTERLOCK SET, REISSUE REQUEST
- NZ X3,EAT2 IF SET INTERLOCK REQUEST
- SX3 MEVC MAXIMUM NUMBER OF EVENTS
- MX0 -1
- IX3 X3-X6
- ZR X3,EAT3 IF TABLE FULL
- AX4 X6,B1 SET TABLE INDEX
- SB4 12 SET SHIFT COUNT
- SX6 X6+B1 INCREMENT COUNT
- BX3 -X0*X6 SAVE EVEN OR ODD FLAG
- MX0 -21
- SX7 B0+
- ZR X3,EAT1 IF COUNT EVEN
- SB4 36 SET SHIFT COUNT
- EAT1 BX5 -X0*X5
- SX6 B1+B1
- LX5 B4
- IX6 X1+X6
- LX0 B4
- SA6 A1 WRITE NEW COUNT
- TA2 X4,EVT
- BX6 X0*X2
- BX6 X5+X6
- SA6 A2+ WRITE EVENT TO TABLE
- EQ PPR1 CLEAR OR
- EAT2 SX3 B1 SET INTERLOCK
- IX7 X1+X3
- SA7 A1+
- EAT3 LX6 36
- BX7 X6
- EQ PPR1 RETURN EVENT COUNT
- EAT4 SA2 TSVT+B4 READ EVENT TIME
- SX3 X3-UETME
- SA1 RTCL FETCH SECOND COUNTER
- MX0 -24
- LX1 24
- PL X3,HNG IF INVALID SUBFUNCTION
- BX1 -X0*X1
- IX3 X1-X2
- NG X3,EAT5 IF EVENT TIME NOT ELAPSED
- SX5 X5
- IX6 X1+X5 TIME INTERVAL FOR EVENT
- SA6 A2
- BX7 X7-X7
- EQ PPR1 SET REQUEST COMPLETE
- EAT5 SX7 B1 INDICATE TIME NOT ELAPSED
- LX7 36
- EQ PPR1 REJECT REQUEST
- TSVT BSSZ UETME-UETMS SYSTEM EVENT TIMES
- ECSM SPACE 4
- *** ECSM - ECS TRANSFER.
- * 1.) TRANSFER FROM 1 TO 100B WORDS TO/FROM RELATIVE ECS
- * USING A USER SPECIFIED CM BUFFER.
- * 2.) TRANSFER FROM 1 TO 100B WORDS TO/FROM ECS
- * USING A USER SPECIFIED CM BUFFER.
- * 3.) TRANSFER ECS ACCORDING TO A LIST OF ADDRESSES.
- * 4.) PERFORM FLAG REGISTER OPERATIONS.
- *** RRES-WRES - READ/WRITE RELATIVE USER ECS.
- *
- * ENTRY
- *T, OR 12/ ECSM,6/ WC,18/ CMA,3/ SF,21/ ECA
- * WC WORD COUNT - 1.
- * CMA RELATIVE+400000B OR ABSOLUTE CM ADDRESS OF BUFFER.
- * SF *RRES* OR *WRES* SUBFUNCTION CODE.
- * ECA RELATIVE USER ECS ADDRESS.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,12/,24/ ECD
- * ST 0 FOR TRANSFER COMPLETE.
- * 1 FOR ADDRESS BEYOND RELATIVE FLX.
- * 7777 FOR TRANSFER ABORTED.
- * ECD ABSOLUTE USER ECS ADDRESS WHERE ERROR OCCURRED
- * IF ABORTED.
- *** RECS-WECS - READ/WRITE ABSOLUTE SYSTEM ECS.
- *
- * ENTRY
- *T, OR 12/ ECSM,6/ WC,18/ CMA,3/ SF,21/ ECA
- * WC NUMBER OF WORDS TO TRANSFER - 1.
- * WC = 0 TRANSFER 1 WORD.
- * WC = 1 TRANSFER 2 WORDS.
- * .
- * .
- * WC = 77B TRANSFER 100B WORDS.
- * CMA RELATIVE+400000B OR ABSOLUTE CM ADDRESS OF BUFFER.
- * SF *RECS* OR *WECS* SUBFUNCTION CODE.
- * ECA ABSOLUTE SYSTEM ECS ADDRESS OF TRANSFER.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,12/,24/ ECD
- * ST 0 FOR TRANSFER COMPLETE.
- * 7777 FOR TRANSFER ABORTED.
- * ECD ABSOLUTE SYSTEM ECS ADDRESS WHERE ERROR OCCURRED
- * IF ABORTED.
- *** SFRS-CFRS - SET/CLEAR FLAG REGISTER BITS.
- * SFRM IS THE TEST AND SET FLAG REGISTER FUNCTION.
- * CFRM IS THE UNCONDITIONAL CLEAR FLAG REGISTER FUNCTION.
- *
- * ENTRY
- *T, OR 12/ ECSM,6/ ECB,18/,3/ SF,21/
- * ECB ECS FLAG REGISTER BIT NUMBER TO SET/CLEAR.
- * SF *SFRS* OR *CFRS* SUBFUNCTION CODE.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,12/,12/,12/
- * ST 0 IF FUNCTION COMPLETED.
- * ST 7777 IF *SFRS* FUNCTION PERFORMED ON A BIT WHICH WAS
- * ALREADY SET.
- *** PELS - PROCESS ECS ACCORDING TO LIST.
- *
- * ENTRY
- *T, OR 12/ ECSM,6/ WC,18/ CML,3/ SF,1/W,1/U,19/
- * WC NUMBER OF LIST ENTRIES TO PROCESS.
- * CML ABSOLUTE CM FWA OF LIST.
- * SF *PELS* SUBFUNCTION CODE.
- * W SET IF LIST OF ECS WORDS TO BE WRITTEN.
- * CLEAR IF LIST OF ECS WORDS TO BE READ.
- * U SET IF LIST CONTAINS ABSOLUTE USER ECS ADDRESSES.
- * CLEAR IF LIST CONTAINS ABSOLUTE SYSTEM ECS ADDRESSES.
- *
- *T,CML 12/0,6/ CT,18/0,24/ ECS
- * CT WORD COUNT TO TRANSFER (MAXIMUM OF 60D).
- * ECS ABSOLUTE SYSTEM OR USER ECS ADDRESS.
- *
- * THE LIST OF ECS DATA WORDS IMMEDIATELY FOLLOW THE
- * LIST OF ECS ADDRESSES. DATA IS WRITTEN FROM THIS
- * BUFFER OR READ TO THIS BUFFER.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/ 0
- * ST 0 FOR TRANSFER COMPLETE.
- * 7777 FOR TRANSFER ABORTED.
- *
- *T, CML 60/ EF
- * EF ERROR FLAGS INDICATING ECS WORDS ON WHICH
- * ERROR OCCURRED IF TRANSFER ABORTED.
- * BIT 0 SET = ERROR OCCURRED ON ECS WORD
- * AT *ECS* + 0.
- * ...
- * BIT *CT* - 1 SET = ERROR OCCURRED ON ECS WORD
- * AT *ECS* + *CT* - 1.
- PPR ECSM,(/LSPMMF/ECS,LSPMMF,/ECS/ECS)
- ECXM SPACE 4,26
- *** ECXM - TRANSFER EM DATA FOR ROLLIN/ROLLOUT.
- *
- * THIS FUNCTION IS ISSUED BY *MTR* WHEN IT DETECTS AN *RCXM*
- * FUNCTION. *1RI* AND *1RO* ISSUE THE *RCXM* FUNCTION DURING
- * ROLLIN/ROLLOUT OF EM. TO ACHIEVE OPTIMAL PERFORMANCE, THE
- * PP POSTS THE REQUEST IN ITS OUTPUT REGISTER WITHOUT
- * EXCHANGING THE CPU. *MTR* DETECTS THE REQUEST, CHANGES IT TO
- * AN *ECXM* FUNCTION AND PASSES IT TO *CPUMTR* AS A PROGRAM
- * MODE REQUEST.
- *
- * ENTRY
- *T, OR 12/ ECXM,29/ ,1/T,18/ ADDR
- * T FUNCTION TYPE -
- * 0 READ REQUEST.
- * 1 WRITE REQUEST.
- * ADDR RESPONSE ADDRESS.
- *
- *T, MB 12/ WC,12/,12/ CMA,24/ ECA
- * WC WORD COUNT.
- * CMA RELATIVE CM ADDRESS / 100B FOR START OF TRANSFER.
- * ECA RELATIVE EM ADDRESS / 1000B FOR START OF TRANSFER.
- *
- * EXIT
- *T, OR 60/0
- *T, ADDR 60/0 TRANSFER COMPLETED WITHOUT ERROR.
- *T, ADDR 12/0,12/7777,36/0 ERROR(S) IN TRANSFER.
- PPR ECXM,,(/PROGRAM/TEC,/PROGRAM/HNG,UEC)
- HNGM SPACE 4,10
- *** HNGM - HANG PP.
- *
- * ENTRY
- *T, OR 12/ HNGM,48/
- *
- * EXIT
- *T, OR 12/ HNGM,48/
- PPR HNGM,.CHGM
- JACM SPACE 4,25
- *** JACM - JOB ADVANCEMENT CONTROL.
- *
- * ENTRY
- *T, OR 12/ JACM,12/ FLAGS,36/
- *
- * FLAGS *JACM* SUBFUNCTION FLAGS (SEE *COMSCPS*).
- *
- * EXIT
- *T, OR 60/ 0
- *
- * ON EXIT THE JOB ADVANCE AND JOB INTERLOCK FLAGS WILL BE
- * CLEARED UNLESS THE *CCPS* OPTION WAS SELECTED AND A *PEET*
- * ERROR IS PRESENT AT THE CONTROL POINT. IN THAT CASE, THE
- * EJT INTERLOCK FLAGS WILL BE LEFT SET, THE CONTROL POINT
- * AREA FIELDS WILL NOT BE CLEARED, THE EJT ENTRY WILL NOT BE
- * RELEASED, AND THE *FZSI* SUBSYSTEM ID WILL BE SET.
- *
- * THE FOLLOWING CONDITIONS WILL HANG THE PP -
- * UNDEFINED OPTION SPECIFIED.
- * SPECIFIED OPTION COMBINATION NOT VALID.
- * NO JOB PRESENT AT CONTROL POINT.
- * JOB ADVANCE FLAG OR JOB INTERLOCK FLAG CLEAR ON ENTRY.
- PPR JACM
- SA3 B7+TFSW GET EJT ORDINAL
- SX7 753200B SET VALID OPTIONS MASK
- AX1 36
- MX0 -12
- SB3 X1+59-17 SPECIFIED OPTIONS
- SX1 X1-20B
- PL X1,HNG IF UNDEFINED OPTION SPECIFIED
- LX7 B3
- LX3 12
- PL X7,HNG IF SPECIFIED OPTIONS NOT VALID
- BX4 -X0*X3 EJT ORDINAL
- CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
- ZR X4,HNG IF NO JOB PRESENT
- TA3 X3+JSNE,EJT
- SX7 101B
- BX6 X3-X7 TOGGLE JOB INTERLOCK AND JOB ADVANCE
- BX3 X7*X6
- LX5 59-36
- NZ X3,HNG IF JOB ADVANCE OR INTERLOCK CLEAR ON ENTRY
- SA6 A3 UPDATE *JSNE*
- NG X5,JAC3 IF RELEASE CP OPTION SPECIFIED
- * PROCESS NORMAL JOB ADVANCE OR ROLLIN. THE CPU PRIORITY WILL
- * BE SET TO THE NEW SERVICE CLASS PRIORITY IF THE SERVICE CLASS
- * PRIORITY CHANGED WHILE THE JOB WAS ADVANCING OR ROLLED OUT.
- SA2 B7+CWQW
- MX7 -9
- UX6,B5 X2 UNPACK CPU PRIORITY AND PARAMETERS
- LX2 -27
- SX3 B5
- BX2 -X7*X2 SERVICE PARAMETERS INDEX
- AX3 3 REMOVE FLAGS FROM CPU PRIORITY
- TA2 X2+CSJT,JCB
- AX2 48 SERVICE CLASS CPU PRIORITY
- IX7 X2-X3
- ZR X7,JAC1 IF JOB AT SERVICE CLASS PRIORITY
- BX7 X6
- LX7 59-45
- NG X7,JAC1 IF PRIORITY NOT SET FROM SERVICE CLASS
- LX2 3
- SX7 B1
- SB5 X2
- LX7 47-0
- PX6 B5,X6 SET NEW PRIORITY
- BX6 X6+X7 SET INCOMPLETE EXTENDED CPU SLICE
- SA6 B7+CWQW UPDATE CPU PRIORITY AND FLAGS
- SX6 B0+
- SA6 B7+CSAW CLEAR SERVICE CYCLE AND ACCUMULATORS
- JAC1 LX5 59-39-59+36
- SB6 B7 SET EXCHANGE PACKAGE ADDRESS
- SB3 JAC2 SET *RCC* EXIT ADDRESS
- NG X5,RCC IF REQUEST CPU OPTION
- JAC2 LX5 59-37-59+39
- NG X5,.DPPM IF TO DROP PP
- SX7 B0
- EQ PPR1 EXIT TO CLEAR OUTPUT REGISTER
- * CHECK FOR CM/CPU PARITY ERROR AT CONTROL POINT TO BE
- * RELEASED.
- JAC3 SA1 B7+STSW
- SX6 10001B SET *STSW* = 1 PP, SET RECALL STACK INDEX
- SX7 B0
- LX6 -12
- LX1 -36
- SA6 A1 UPDATE *STSW*
- BX1 -X0*X1 ERROR FLAG
- SB4 X1-PEET SET *PEET* ERROR INDICATOR
- SX6 B0
- NZ B4,JAC4 IF NO *PEET* ERROR SET
- SA2 A1 RESET *PEET* ERROR FLAG
- LX1 36
- BX6 X2+X1
- SA6 A1
- SX6 100B
- SA3 A3 GET *JSNE*
- BX6 X3+X6 RESET JOB ADVANCE FLAG
- SA6 A3 UPDATE *JSNE*
- BX6 X4 SET TO PRESERVE EJT ORDINAL
- SX7 FZSI SET *FZSI* ID
- LX6 48
- LX7 24
- * CLEAR CONTROL POINT AREA WORDS.
- JAC4 SA6 B7+TFSW CLEAR (IF NO *PEET* ERROR) EJT ORDINAL
- SA7 B7+JCIW CLEAR (SET IF *PEET* ERROR) JOB CONTROL
- BX7 X7-X7
- BX6 -X6+X6
- SA7 B7+CSSW CLEAR PROCEDURE FILE DISK ADDRESS
- SA7 B7+RFCW CLEAR RESOURCE CONTROL
- SA7 B7+EOJW CLEAR END OF JOB PROCESSING FLAGS
- SA7 B7+SRUW CLEAR LIMIT FLAGS
- ZR B4,JAC5 IF *PEET* ERROR
- SA6 B7+PFCW SET FAMILY TO NULL
- SA7 B7+MS1W CLEAR MESSAGES
- JAC5 SA7 B7+MS2W
- SA7 B7+SSCW CLEAR SCP CONNECTIONS
- * RESET RECALL AREA LINKS.
- SX7 B1
- SX1 B1
- SB5 B7+RCCW-2
- JAC6 SX7 X7+B1
- SX6 X7-LREC
- SA7 B5+X7
- NZ X6,JAC6 IF NOT FINISHED
- * CLEAR RECALL STACK.
- SB5 B5+RECW-RCCW+2
- JAC7 IX7 X7-X1
- SA6 B5+X7
- PL X7,JAC7 IF NOT FINISHED
- LX5 59-38-59+36
- PL X5,JAC9 IF NOT CLEARING EJT ENTRY
- ZR B4,JAC9 IF *PEET* ERROR
- SX1 PEJT SET EJT PROCESSING
- LX4 36 SET EJT ORDINAL
- LX1 24
- BX1 X1+X4
- SB6 JAC8 SET *MTRM* RETURN ADDRESS
- EQ MTM0 RETURN EJT ENTRY TO POOL
- JAC8 SA5 A5+ RESTORE OUTPUT REGISTER
- LX5 59-38
- JAC9 LX5 59-37-59+38
- SX7 B0
- PL X5,PPR1 IF NOT DROP PP OPTION
- EQ .DPPM DROP PP
- LDAM SPACE 4,35
- *** LDAM - LOAD ADDRESS FOR MASS STORAGE DRIVERS.
- *
- * ENTRY
- *
- *T, OR 12/ LDAM,12/ RW,36/
- *T, MB 12/,12/ EQ,12/ LT,12/ LS,12/
- *
- * RW READ/WRITE FLAG, VALID ONLY FOR ISD DEVICES.
- * 0, IF TO ISSUE SEEK ONLY.
- * *RDS2*, IF TO ISSUE READ/SEEK.
- * *WDS2*, IF TO ISSUE WRITE/SEEK.
- * EQ EQUIPMENT.
- * LT LOGICAL TRACK.
- * LS LOGICAL SECTOR.
- *
- * EXIT
- *
- *T, OR 12/ 0,12/ 0,12/ 0,12/ F,12/ RS
- *T, MB 60/ UNCHANGED
- *T, MB+1 12/ LU,6/ RW,6/ PU,12/ PC,12/ PT,12/ PS
- *T, MB+2 60/ 0
- *
- * F STATUS FLAGS.
- * 4 = UNIT SWITCH NEEDED.
- * 11 = REQUEST CHANNEL IF NOT RESERVED.
- * 7777 - ADDE = ADDRESS ERROR.
- * 7777 - NRDE = REDEFINITION REQUESTED.
- * RS REMAINING SECTORS TILL *LDAM* REQUIRED.
- * LU LOGICAL UNIT.
- * RW READ/WRITE FLAG.
- * 0, IF TO ISSUE SEEK ONLY (NON-ISD DEVICES).
- * 1, IF TO ISSUE WRITE/SEEK.
- * 2, IF TO ISSUE READ/SEEK.
- * PU PHYSICAL UNIT.
- * PC PHYSICAL CYLINDER.
- * PT PHYSICAL TRACK.
- * PS PHYSICAL SECTOR.
- *
- *
- * HANG CONDITIONS -
- *
- * ILLEGAL ALGORITHM INDEX.
- * ALGORITHM INDEX FOUND IN THE MST FOR THE EQUIPMENT IS OUT
- * OF RANGE (.GE. AIMX) OR NO PROCESSOR IS DEFINED FOR THE
- * ALGORITHM INDEX.
- PPR LDAM,,,FEX
- SA3 A5+B1 GET PARAMETER WORD
- MX2 -12
- LX3 -12
- BX5 -X2*X3 LS
- LX3 -24
- BX0 -X2*X3 EST ORDINAL
- LX3 12
- CX1 X0,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST READ EST ENTRY
- BX1 -X2*X1 MST/10B
- LX1 3
- SA1 X1+DILL READ ALGORITHM INDEX
- MX0 -6
- BX2 -X0*X1 ALGORITHM INDEX
- SX4 X2-AIIE
- NG X4,LDA1 IF NOT BUFFERED DEVICE
- SX4 X2-AIBD
- PL X4,LDA1 IF NOT BUFFERED DEVICE
- SA4 A1+DALL-DILL
- SX1 3
- LX1 36
- BX6 X1+X4
- SA6 A4+
- LDA1 SA4 A1+DDLL-DILL READ UNIT LIST
- SB3 X2-AIMX
- SA2 TALP+X2 READ PROCESSING PARAMETERS
- SB4 B0+
- PL B3,HNG IF ILLEGAL ALGORITM INDEX
- SB6 X2 SET PROCESSOR ADDRESS
- BX1 X4
- AX2 48
- AX1 48
- IX6 X5-X2
- SB3 B0 PRESET TO LOGICAL UNIT ZERO
- BX7 X7-X7
- NG X6,LDA3 IF FIRST UNIT
- MX7 -3
- PX6 X2
- BX1 -X7*X1
- PX7 X5
- NX6 X6
- FX7 X7/X6 LU = LS / SL
- UX7,B3 X7
- LX7 B3
- IX6 X1-X7
- SB3 X7+
- IX1 X7*X2
- SB3 B3+X7
- PL X6,LDA2 IF NO ADDRESS ERROR
- SB4 7777B-ADDE SET ADDRESS ERROR
- LDA2 SB3 B3+X7
- SB3 B3+B3 LU * 6
- IX5 X5-X1 R(LS/SL)
- AX4 B3 POSITION PU
- LDA3 TX1 A5-1,-FP
- LX1 PPXES-PPCES
- BX0 -X0*X4 EXTRACT PHYSICAL UNIT NUMBER
- TA1 X1+DRQP,FPX GET CURRENT UNIT NUMBER
- AX1 48
- BX1 X1-X7
- NG X1,LDA4 IF NULL ENTRY
- ZR X1,LDA4 IF NO CHANGE IN UNIT
- NZ B4,LDA4 IF ADDRESS ERROR
- SB4 4
- LDA4 LX7 12
- SB3 B1+B1
- BX6 X7+X0
- MX4 -11
- IX7 X2-X5 RS
- LX6 36
- SX1 B3+B1
- BX4 -X4*X3
- SX0 1
- JP B6 EXIT TO PROCESSOR
- LAP SPACE 4
- ** LAP - LOAD ADDRESS PROCESSORS.
- *
- * THE FUNCTION OF AN ADDRESS PROCESSOR IS TO CONVERT
- * LOGICAL DISK ADDRESSES TO THE CORRESPONDING PHYSICAL
- * ADDRESSES FOR A PARTICULAR EQUIPMENT TYPE. EACH ADDRESS
- * PROCESSOR HAS THE FOLLOWING ENTRY AND EXIT CONDITIONS BUT
- * PRODUCES THE PARAMETERS *PC*, *PT* AND *PS* USING AN
- * ALGORITHM UNIQUE TO THE EQUIPMENT TYPE.
- *
- * LT = LOGICAL TRACK.
- * LS = LOGICAL SECTOR.
- * R(A/B) = REMAINDER OF A/B.
- * PC = PHYSICAL CYLINDER.
- * PT = PHYSICAL TRACK.
- * PS = PHYSICAL SECTOR.
- * PU = PHYSICAL UNIT.
- * RS = REMAINING SECTOR COUNT UNTIL POSITION REQUIRED.
- * SL = SECTOR LIMIT.
- * SC = SECTORS FROM BEGINNING OF TRACK TO END OF CYLINDER.
- *
- * ENTRY (X0) = 1.
- * (X1) = 3.
- * (X2) = SL (SINGLE UNIT SECTOR LIMIT).
- * (X4) = LT - 4000B. (LOGICAL TRACK NUMBER)
- * (X5) = R(LS/SL)
- * (X6) = 12/,12/PU,36/0.
- * (X7) = RS (SL-R(LS/SL)) (SECTORS TO NEXT *LDAM*).
- * (A5) = OUTPUT REGISTER ADDRESS.
- * (B3) = 2.
- * (B4) = PRESET RETURN STATUS.
- *
- * EXIT (MB) = 12/,12/ PU,12/ PC,12/ PT,12/ PS
- * (OR) = 12/ 0,12/ F,24/,12/ RS
- *
- * USES ADDRESS PROCESSORS MAY USE ALL REGISTERS EXCEPT -
- * A0, A5, B1, B2, B4, B7.
- SPACE 4,10
- ** COMPLETE ADDRESS PROCESSING.
- *
- * ENTRY (X0) + (X5) = RELATIVE SECTOR NUMBER IN CYLINDER.
- * (X1) = SECTORS PER PHYSICAL TRACK.
- * (X3) = PHYSICAL CYLINDER IN BYTE 2.
- * (X6) = 12/,12/PU,36/0.
- * (X7) = REPLY FOR *OR*.
- * (B4) = RETURN STATUS.
- LDA6 IX0 X0+X5 (X0) = RELATIVE SECTOR IN CYLINDER
- PX4 X1
- PX2 X0
- NX4 X4
- FX2 X2/X4
- UX2,B3 X2
- LX2 B3 (X2) = PHYSICAL TRACK
- IX4 X2*X1
- IX4 X0-X4 (X4) = PS
- * ENTRY (X1) = SECTORS PER PHYSICAL TRACK.
- * (X2) = PHYSICAL TRACK.
- * (X3) = PHYSICAL CYLINDER IN BYTE 2.
- * (X4) = PHYSICAL SECTOR.
- * (X6) = 12/,12/PU,36/0.
- * (X7) = SECTORS TO NEXT *LDAM*.
- * (B4) = RETURN STATUS.
- LDA7 LX2 12
- BX3 X3+X4
- BX6 X6+X2 MERGE PT IN REPLY
- BX6 X6+X3 MERGE PS AND CY IN REPLY
- SX1 B4+ RETURN STATUS
- SA6 A3+1 (MB+1) = PARAMETERS
- NZ B4,LDA8 IF STATUS TO RETURN
- SX1 11B REQUEST CHANNEL STATUS
- LDA8 BX6 X6-X6
- LX1 12
- BX7 X7+X1
- SA6 A6+B1 CLEAR (MB+2)
- SA7 A5 STORE (OR)
- EQ PPRX RETURN
- TBLM SPACE 4,10
- ** TBLM - GENERATE TABLE OF LDAM PARAMETERS.
- PURGMAC TBLM
- TBLM MACRO EQ
- IFNE LDAM_EQ,0,1
- VFD 12/SL_EQ,30/0,18/LA_EQ
- ENDM
- TALP SPACE 4
- ** TALP - TABLE OF ALGORITHM PROCESSING PARAMETERS.
- *
- * ONE WORD ENTRIES INDEXED BY ALGORITHM INDEX.
- *
- *T, TALP 12/ SL,30/,18/ AP
- *
- * SL = SECTOR LIMIT.
- * AP = ALGORITHM PROCESSOR.
- TALP VFD 24/,18/1,18/HNG
- LIST G
- TBL "MSEQ"
- LIST *
- PURGMAC TBLM
- LADI SPACE 4,20
- ** LADI - 7X54/844-21 ADDRESS CONVERSION PROCESSOR.
- *
- * ALGORITHM -
- * SL = 153B SECTOR LIMIT
- * HC = BIT 0 OF LT HALF CYLINDER BIT
- * HT = BIT 1 OF LT HALF TRACK BIT
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
- * PT = (HT+2*R(LS/SL))/30B+HC*11B PHYSICAL TRACK
- * PS = R((HT+2*R(LS/SL))/30B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
- *
- * EXIT (X0) = HC*330B+HT
- * (X5) = 2*R(LS/SL)
- LADI BX3 -X1*X4 PC
- LX4 -1
- LX3 24-2
- BX0 X0*X4 HT
- PL X4,LAI1 IF IN FIRST HALF OF CYLINDER
- SX0 X0+330B
- LAI1 LX5 1
- LX1 3 30B SECTORS PER PHYSICAL TRACK
- EQ LDA6 COMPLETE ADDRESS CONVERSION
- LADJ SPACE 4,20
- ** LADJ - 7X54/844-4X ADDRESS CONVERSION PROCESSOR.
- *
- * ALGORITHM -
- * SL = 343B SECTOR LIMIT
- * HT = BIT 0 OF LT HALF TRACK BIT
- * LU = LS/SL LOGICAL UNIT
- * PT = (HT+2*R(LS/SL))/30B PHYSICAL TRACK
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * PS = R((HT+2*R(LS/SL))/30B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
- *
- * EXIT (X0) = HT
- * (X5) = 2*R(LS/SL)
- LADJ BX3 -X0*X4 PC
- LX5 1 2*R(LS/SL)
- BX0 X0*X4 HT
- LX3 24-1
- LAJ1 LX1 3 30B SECTORS PER PHYSICAL TRACK
- EQ LDA6 COMPLETE ADDRESS CONVERSION
- LDAK SPACE 4,20
- ** LADK - 7154/844-21 ADDRESS CONVERSION PROCESSOR.
- *
- * ALGORITHM -
- * SL = 160B SECTOR LIMIT
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
- * XX = BITS 0 AND 1 OF LT TRACK NUMBER WITHIN CYLINDER
- * PT = (XX*162B+R(LS/SL))/30B PHYSICAL TRACK
- * PS = R((XX*162B+R(LS/SL))/30B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
- *
- * EXIT (X0) = XX*162B
- * (X5) = R(LS/SL)
- LADK BX3 -X1*X4 (X3) = PC * 4
- SX2 X2+B3 (X2) = 162B
- BX0 X1*X4 XX
- LX3 24-2
- IX0 X0*X2 XX * 162B
- LX1 3 30B SECTORS PER PHYSICAL TRACK
- EQ LDA6 COMPLETE CONVERSION
- LADL SPACE 4,15
- ** LADL - 7154/844-4X ADDRESS CONVERSION PROCESSOR.
- *
- * ALGORITHM -
- * SL = 343B SECTOR LIMIT
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
- * PT = (X*345B+R(LS/SL))/30B PHYSICAL TRACK
- * PS = R((X*345B+R(LS/SL))/30B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) R*
- * EXIT (X0) = X*345B
- * (X5) = R(LS/SL)
- LADL BX3 -X0*X4 (X3) = PC * 2
- LX4 -1
- LX3 24-1
- AX4 59
- SX0 X2+B3 (X0) = 345B
- BX0 X4*X0
- EQ LAJ1 COMPLETE ADDRESS CONVERSION
- LADM SPACE 4,10
- ** LADM - 7155/885 HALF TRACK ADDRESS CONVERSION.
- *
- * ALGORITHM -
- * SL = 1200B SECTOR LIMIT
- * HT = BIT 0 OF LT HALF TRACK BIT
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * PT = (HT+2*R(LS/SL))/40B PHYSICAL TRACK
- * PS = R((HT+2*R(LS/SL))/40B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
- *
- * EXIT
- LADM BX3 -X0*X4 PC
- LX5 1
- BX0 X0*X4 HT
- LX3 24-1
- LAM1 IX2 X0+X5 RELATIVE SECTOR IN CYLINDER
- MX1 -5
- BX4 -X1*X2 PS
- AX2 5 PT
- EQ LDA7 COMPLETE PROCESSING
- LADQ SPACE 4,10
- ** LADQ - 7155/885 FULL TRACK ADDRESS CONVERSION.
- *
- * ALGORITHM -
- * SL = 1200B SECTOR LIMIT
- * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * PT = (X*SL+R(LS/SL))/40B PHYSICAL TRACK
- * PS = R((X*SL+R(LS/SL))/40B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
- *
- * EXIT
- LADQ LX4 -1
- SX3 X4 PC
- AX4 59
- LX3 24
- BX0 X4*X2
- EQ LAM1 COMPLETE CONVERSION
- LADR SPACE 4,10
- ** LADR - CDSS II ADDRESS CONVERSION.
- *
- * ALGORITHM -
- * SL = 3600B SECTOR LIMIT
- * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER TRIAD
- * SO = 1200B*X STARTING SECTOR OFFSET
- * PC = LT+(LT/2)+(LS+SO)/2400B PHYSICAL CYLINDER
- * SC = R((LS+SO)/2400B) SECTOR WITHIN CYLINDER
- * PT = SC/40B PHYSICAL TRACK
- * PS = SC-PT*40B PHYSICAL SECTOR
- * RS = MAGIC SECTORS UNTIL NEXT LDAM
- * EXIT
- LADR AX3 X4,B1 CYLINDER TRIAD (LT/2)
- MX2 -1
- IX3 X4+X3 PC (WHERE TRACK STARTS) (LT+(LT/2))
- BX2 -X2*X4 TRIAD HALF (X)
- SB3 X2
- SX2 2400B SET *LDAM* LIMIT AT END-OF-CYLINDER
- AX4 X2,B3 2400B, 1200B FOR X = 0, 1. EOC SECTOR.
- IX0 X2-X4 0B, 1200B FOR X = 0, 1. SECTOR OFFSET
- IX2 X5-X4 LOGICAL SECTOR - END OF CYLINDER
- NG X2,LAR1 IF SECTOR IS ON FIRST CYLINDER
- SX4 1200B SET *LDAM* LIMIT AT END-OF-TRACK
- LX4 B3 1200B, 2400B FOR X = 0, 1.
- BX5 X2 SECTOR WITHIN SECOND CYLINDER
- SX3 X3+1 PC (WHERE TRACK ENDS)
- SX0 B0+ CLEAR STARTING SECTOR OFFSET
- LAR1 IX7 X4-X5 RS
- LX3 24 PC
- EQ LAM1 COMPLETE CONVERSION
- LADX SPACE 4,10
- ** LADX - 3330-1 FULL TRACK CONVERSION.
- *
- * ALGORITHM -
- * SL = 142B SECTOR LIMIT
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
- * XX = BITS 0 - 1 OF LT TRACK NUMBER WITHIN CYLINDER
- * PT = (XX*144B+R(LS/SL))/25B PHYSICAL TRACK
- * PS = R((XX*144B+R(LS/SL))/25B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
- LADX BX3 -X1*X4 (X3) = PC * 4
- SX2 X2+B3 (X2) = 144B
- BX0 X1*X4 XX
- IX0 X0*X2 XX * 144B
- LAX1 SX1 25B (X1) = SECTORS PER PHYSICAL TRACK
- LX3 24-2
- EQ LDA6 COMPLETE ADDRESS CONVERSION
- LADY SPACE 4,10
- ** LADY - 3330-11 FULL TRACK CONVERSION.
- *
- * ALGORITHM -
- * SL = 306B SECTOR LIMIT
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
- * PT = (X*310B+R(LS/SL))/25B PHYSICAL TRACK
- * PS = R((X*310B+R(LS/SL))/25B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
- LADY BX3 -X0*X4 (X3) = PC * 2
- LX4 -1
- LX3 1
- AX4 59
- SX0 X2+B3 (X0) = 310B
- BX0 X4*X0
- EQ LAX1 COMPLETE PROCESSING
- LADZ SPACE 4,10
- ** LADZ - 3350 FULL TRACK CONVERSION.
- *
- * ALGORITHM -
- * SL = 644B SECTOR LIMIT
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
- * PT = (X*SL+R(LS/SL))/34B PHYSICAL TRACK
- * PS = R((X*SL+R(LS/SL))/34B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTOR TILL LDAM
- LADZ BX3 -X0*X4 (X3) = PC * 2
- LX4 -1
- SX0 X2 SL
- AX4 59
- LX3 24-1
- BX0 X4*X0
- EQ LA12 COMPLETE ADDRESS CONVERSION
- LAD1 SPACE 4,10
- ** LADA - 33502 FULL TRACK CONVERSION.
- *
- * ALGORITHUM -
- * SL = 1510 SECTOR LIMIT
- * VL = TL/2 VOLUME TRACK LIMIT
- * LU = LS/SL LOGICAL UNIT
- * PC = LT-(VL*(LT/VL)) PHYSICAL CYLINDER
- * X = 0 LOGICAL TRACK WITHIN CYLINDER
- * PT = X*SL+R(LS/SL))/34B PHYSICAL TRACK
- * PS = R((X*SL+R(LS/SL))/34B) PHYSICAL SECTOR
- * PU = (LT/VL)*40B+UNIT PHYSICAL UNIT
- LADA BX3 X4 LT
- SX0 NTDA/2 SET TRACK LIMIT PER VOLUME
- IX1 X4-X0 LT MINUS TRACK LIMIT PER VOLUME
- SX0 40B
- SB3 B0 CLEAR VOLUME FLAG
- SA2 A1 GET LAST VOLUME USED FLAG
- NG X1,LA11 IF ON VOLUME 0
- BX3 X1 SET CYLINDER FOR VOLUME 1
- MX0 0
- SB3 B1+ INDICATE VOLUME ONE
- LA11 LX0 36
- LX2 18
- BX1 X6-X0 SWITCH TO CORRECT VOLUME
- SB6 X2
- SB6 B6-B3
- ZR B6,LA11.1 IF NOT SWITCHING VOLUMES
- SX6 B3
- AX2 18
- LX6 -18
- NZ B4,LA11.1 IF PREVIOUS ERROR
- SB4 4 SET UNIT SWITCH FOR *DSWM*
- BX6 X2+X6
- SA6 A2
- LA11.1 BX6 X1
- LX3 24 POSITION PC
- SX0 B0
- LA12 SX1 34B SECTORS PER PHYSICAL TRACK
- EQ LDA6 COMPLETE ADDRESS PROCESSING
- LADB SPACE 4,15
- ** LADB - 885-42 PARALLEL HEAD DEMA.
- *
- * ALGORITHM -
- * SL = 1200B SECTOR LIMIT
- * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
- * LU = LS/SL LOGICAL UNIT
- * PC = 1 - 11 OF LT PHYSICAL CYLINDER
- * PT = (X*SL+R(LS/SL))/200B PHYSICAL TRACK
- * PS = (R(X*SL+R(LS/SL))/200B)/4 PHYSICAL SECTOR
- LADB BSS 0
- LX4 -1
- SX3 X4 PC
- AX4 59
- LX3 24 PC IN BYTE 2
- BX0 X4*X2
- IX2 X0+X5 RELATIVE SECTOR IN CYLINDER
- MX1 -7
- BX4 -X1*X2
- * ADD CODE HERE TO PULL OFF LOWER 2 BITS OF X4 AS
- * RELATIVE LOGICAL PRU IN LARGE SECTOR.
- AX4 2 PS
- AX2 7 PT
- EQ LDA7 COMPLETE PROCESSING
- LADC SPACE 4,10
- ** LADC - 7165/895 FULL TRACK CONVERSION (*DC*).
- *
- * THIS ALGORITHM RETURNS A SMALL RECORD ADDRESS AND AS SUCH,
- * IT CAN NOT BE USED TO READ LARGE RECORDS.
- *
- * ALGORITHM -
- * SL = 1300B SECTOR LIMIT
- * LU = LS/SL LOGICAL UNIT
- * X = BIT 0 OF LT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * PT = (X*SL + R(LS/SL))/140B PHYSICAL TRACK
- * PS = R((X*SL + R(LS/SL))/140B) PHYSICAL SECTOR
- LADC LX4 -1
- SX3 X4 PC
- AX4 59 X
- LX3 24 POSTION PC IN BYTE 2
- BX4 X4*X2 X*SL
- SX1 140B
- IX5 X4+X5 X*SL + R(LS/SL)
- PX0 X1
- PX4 X5
- NX0 X0
- FX4 X4/X0 (X*SL + R(LS/SL))/140B
- UX4,B3 X4
- LX2 X4,B3 PT
- IX4 X2*X1 (X*SL + R(LS/SL))/140B*140B
- IX4 X5-X4 R((X*SL + R(LS/SL))/140B)
- EQ LDA7 RETURN PHYSICAL DISK ADDRESS
- LADD SPACE 4,10
- ** LADD - 7255/834 FULL TRACK ADDRESS CONVERSION.
- *
- * ALGORITHM -
- * SL = 240B SECTOR LIMIT
- * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * PT = (X*SL+R(LS/SL))/40B PHYSICAL TRACK
- * PS = R((X*SL+R(LS/SL))/40B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
- LADD SX1 40B SECTORS PER PHYSICAL TRACK
- LAD1 LX4 -1
- SX3 X4 PHYSICAL CYLINDER
- AX4 59
- LX3 24
- BX0 X4*X2 X*SL
- SA2 A5
- LX2 12
- AX2 48
- ZR X2,LDA6 IF TO ISSUE A SEEK ONLY
- SX4 X2-.RDS2 CHECK FOR *RDS2*
- SX2 B1+B1
- ZR X4,LAD2 IF TO ISSUE A READ/SEEK
- SX2 B1 ISSUE A WRITE/SEEK
- LAD2 LX2 42
- BX6 X2+X6
- EQ LDA6 COMPLETE ADDRESS PROCESSING
- LADG SPACE 4,10
- ** LADG - 7255/836 FULL TRACK ADDRESS CONVERSION.
- *
- * ALGORITHM -
- * SL = 1064B SECTOR LIMIT
- * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
- * LU = LS/SL LOGICAL UNIT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * PT = (X*SL+R(LS/SL))/57B PHYSICAL TRACK
- * PS = R((X*SL+R(LS/SL))/57B) PHYSICAL SECTOR
- * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
- LADG SX1 57B SECTORS PER PHYSICAL TRACK
- EQ LAD1 COMPLETE ADDRESS PROCESSING
- LMSM SPACE 4,20
- *** LMSM - LOAD MASS STORAGE DRIVERS.
- *
- * ENTRY
- *
- *T, OR 12/ LMSM,2/ ,1/C,9/ EQ,12/,6/ ,18/ SMSOP
- *T, MB 12/ ,12/ WDSE,12/,12/ ,12/
- *T, MB+1 12/ ,12/ ,12/,7/,5/ MSD,12/ CHRV
- *
- * C *6DC* REQUEST (ONLY IF CPP).
- * EQ EQUIPMENT.
- * SMSOP 3/ WP,12/ UERR,3/ SF
- * WP 4 = WDSE ADDRESS VALID IN CALL.
- * 0 = NO VALID WDSE ADDRESS IN CALL.
- * UERR CALLERS ERROR PROCESSING OPTIONS.
- * SF SUBFUNCTION CODE. *SETMS* OPTION
- * 0 = NORMAL I/O. *IO*
- * 1 = PROTECTED SECTOR I/O. *PIO*
- * 2 = PROTECTED SECTOR I/O, SELECTED CHANNEL. *PIOCH*
- * 3 = READ SYSTEM FILE. *READSYS*
- * 4 = READ STREAM. *READSTR*
- * 5 = RETURN DEVICE STATUS. *STATUS*
- * 6 = NORMAL I/O ON SELECTED CHANNEL. *IOCH*
- * WDSE WRITE ERROR PROCESSING BUFFER ADDRESS.
- * MSD MASS STORAGE DRIVER INDEX.
- * CHRV CHANNEL RESERVATION STATUS.
- *
- * EXIT
- *
- *T, OR 12/ 0,6/ 0,18/ DRA,12/ DRL,12/ 2
- *T, MB 12/ DP,12/ WDSE,12/ 0,12/ RDCT,12/ STSA
- *T, MB+1 12/ S,12/ UERR,12/ SLM,12/ MSD,12/ CHRV
- *T, MB+2 60/ EST
- *
- * DRA LOAD ADDRESS OF DRIVER. ZERO IF NO DRIVER LOAD.
- * DRL LENGTH OF DRIVER IN CM WORDS.
- * DP DEVICE PARAMETER FROM BYTE 2 OF EST WORD *EQAE*.
- * WDSE WRITE ERROR PROCESSING BUFFER, ZERO IF NO VALID
- * ADDRESS PASSED ON CALL.
- * RDCT 0
- * STSA 2, IF DRIVER PRESET NOT TO BE EXECUTED.
- * S 2000 IF FULL TRACK DEVICE.
- * 2001 IF HALF TRACK DEVICE.
- * UERR CALLERS ERROR PROCESSING OPTIONS.
- * WHEN THE *READSYS* OPERATION TYPE IS SPECIFIED, THE
- * *NS* ERROR PROCESSING OPTION IS IMPLIED. ALTHOUGH
- * THE *EPNS* BIT IS NOT FORCED SET BY *READSYS*, *MTR*
- * WILL NOT RETURN THE *LNRE* ERROR FLAG FOR AN OFF OR
- * SUSPECT DEVICE IF THE *READSYS* BIT IS SET IN *CHRV*.
- * SLM SECTOR LIMIT.
- * MSD MASS STORAGE DESIGNATOR BYTE.
- * DRIVER INDEX WILL BE CLEARED FOR SUBFUNCTIONS *PIO*
- * AND *PIOCH*. BIT 2**6 SET IF DEVICE INACCESSIBLE
- * AND JOB NOT *UTL=* OR IN UNCONDITIONAL TERMINATION
- * STATE. BIT 2**11 SET IF JOB NOT SUBSYSTEM, NOT
- * *UTL=*, AND NOT IN UNCONDITIONAL TERMINATION STATE.
- * CHRV CHRV IS UPDATED DEPENDING ON THE SUBFUNCTION.
- * 1000 BIT SET FOR *READSTR* OPTION.
- * 40 BIT SET FOR *READSYS* OPTION ON A SYSTEM DEVICE.
- * 4 BIT SET IF ACCESS SHOULD BE ALLOWED TO A SUSPECT
- * OR OFF DEVICE.
- * 2 BIT SET IF ACCESS SHOULD BE ALLOWED TO A DOWN
- * DEVICE.
- * EST *EQDE* WORD OF EST ENTRY.
- *
- *
- * HANG CONDITIONS -
- *
- * INCORRECT SUBFUNCTION CODE.
- * EST ORDINAL OUTSIDE OF EST.
- * NON-MASS STORAGE EQUIPMENT (AND NOT *RD* EQUIPMENT).
- * *6DC* REQUEST BIT SET BY NONCONCURRENT PP (NPP).
- * *6DC* REQUEST BIT NOT SET BY CONCURRENT PP (CPP).
- * NOT CALLED BY AN NPP AND THERE ARE NO CPPS.
- PPR LMSM
- TB3 A5,-FPC SUBTRACT *IR* ADDRESS OF FIRST CPP
- MX0 -3 EXTRACT SUBFUNCTION CODE
- SX6 X5 SIGN EXTEND WDSE PRESENT BIT
- AX1 3
- BX2 -X0*X5
- MX0 -12
- AX6 18
- TPL B3,(/CPP/LMS13,CPP,/MONITOR/HNG) IF FROM CPP
- BX5 -X0*X1 UERR
- AX1 36-3 EXTRACT EQUIPMENT
- SB4 X1
- TB3 ESTL
- SX4 -B4
- ERRNZ RDEQ CODE ASSUMES *RDEQ* = 0
- GE B4,B3,HNG IF *6DC* REQUEST OR IF OUTSIDE EST
- SB3 X2 (B3) = SUBFUNCTION CODE
- CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
- TA3 EQDE+X3,EST READ EST ENTRY
- BX6 -X0*X6 MASK FOR WDSE EXTRACTION
- BX1 -X0*X3
- BX7 X3
- AX7 59-0
- BX7 X4+X7
- SA2 A5+B1 READ WDSE
- NZ X7,HNG IF NEITHER MASS STORAGE NOR *RD* EQUIPMENT
- BX7 X3
- SA4 A2+B1 READ MESSAGE BUFFER PARAMETERS
- LX6 36
- LX1 3 MST ADDRESS
- BX6 X6*X2 WDSE TO SAVE FOR REPLY
- SA7 A4+B1 STORE EST IN REPLY
- SX2 EPAD&EPNS
- SX7 211B
- BX2 X2*X5 MAP *AD*/*NS* OPTIONS INTO *CHRV*
- BX7 X7*X4 PRESERVE CHANNEL STATUS FROM *CHRV*
- LX5 36
- BX7 X2+X7 COMBINE OLD AND NEW *CHRV* DATA
- SA1 X1+MDGL
- BX7 X7+X5 COMBINE *CHRV* AND *UERR*
- BX2 -X0*X1
- SX5 370000B
- LX2 24 POSITION *SLM*
- BX7 X7+X2
- BX4 X5*X4 OLD DRIVER INDEX
- LX3 59-58
- BX5 X5*X1 NEW DRIVER INDEX
- LX1 59-47+12
- SA2 B7+SEPW CHECK SPECIAL ENTRY POINTS
- BX1 -X0*X1
- AX1 11 POSITION INTERLACE
- LX2 59-56
- SB6 X1
- NG X2,LMS3 IF *UTL=* ENTRY POINT
- SA2 B7+TFSW
- LX2 12
- BX1 -X0*X2
- CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- TA2 X2+SCHE,EJT
- LX2 59-34
- ERRNZ UCTM-2 CODE ASSUMES VALUE
- NG X2,LMS3 IF UNCONDITIONAL JOB TERMINATION
- SA2 B7+JCIW CHECK SUBSYSTEM
- LX2 -24
- BX2 -X0*X2
- SX2 X2-LSSI-1
- MX1 1
- BX2 X1*X2
- LX2 23-59
- BX7 X7+X2 SET SUBSYSTEM STATUS
- SA2 A1+DALL-MDGL
- R= B4,.READSYS
- NE B3,B4,LMS2 IF NOT *READSYS* OPTION
- NG X3,LMS3 IF SYSTEM DEVICE
- SA3 INWL
- LMS2 LX2 59-55
- LX3 59-15
- BX2 X1*X2
- NG X3,LMS3 IF DEADSTART SEQUENCING NOT COMPLETE
- LX2 18-59
- BX7 X7+X2 SET SUSPECT STATUS
- LMS3 SX0 11B
- PX3 X7,B6 SET INTERLACE
- BX1 X1-X1
- NZ B3,LMS12 IF NOT FUNCTION 0
- * CHECK FOR DRIVER LOAD NEEDED.
- LMS4 IX2 X4-X5 OLD INDEX - NEW INDEX
- BX1 X0*X3 *CHRV* CHANNEL STATUS
- SX7 B1+B1 SET STATUS REPLY
- IX2 X1+X2
- ZR X2,LMS4.1 IF CORRECT DRIVER AND NO CHANNEL RESERVE
- BX6 X6+X7 SET TO NOT EXECUTE DRIVER PRESET
- MX0 18+12
- NZ X1,LMS5 IF CHANNEL RESERVED
- BX4 X5 SET NEW DRIVER INDEX
- AX5 12
- SA1 TMSD+X5 READ DRIVER LOAD
- LX0 -18
- SX1 X1 SET PLD ADDRESS
- ZR X1,LMS9 IF LIBRARY LOCKED
- ZR X5,HNG IF ILLEGAL DRIVER INDEX
- SX5 X5-LA6MX
- PL X5,HNG IF ILLEGAL DRIVER INDEX
- SA2 X1
- SX1 B1
- BX2 X0*X2 CLEAR LOAD ADDRESS AND PROGRAM NAME
- LX1 41
- LMS4.1 IX2 X1+X2
- BX6 -X7*X6 SET TO EXECUTE DRIVER PRESET
- BX7 X7+X2
- SA1 A3+B1
- ERRNZ EQDE+1-EQAE CODE DEPENDS ON VALUE
- MX5 12
- LX1 24
- BX5 X5*X1 EXTRACT DEVICE PARAMETER FROM EST
- BX6 X5+X6
- ERRNZ .PIO-1 CODE ASSUMES *.PIO* = 1
- LMS5 NE B3,B1,LMS6 IF NOT *PIO*/*PIOCH* SUBFUNCTION
- SX4 0 CLEAR DRIVER INDEX IN *MSD*
- LMS6 SA6 A5+B1 STORE MB REPLY
- BX6 X3+X4 MERGE DRIVER INDEX
- SA6 A6+B1 STORE MB+1 REPLY
- SA7 A5 STORE OUTPUT REGISTER
- EQ PPRX RETURN
- LMS7 PL X3,LMS8 IF NOT SYSTEM DEVICE
- SX1 40B
- LMS8 BX3 X7+X1
- EQ LMS4 CHECK FOR DRIVER LOAD
- LMS9 SA5 A5 REJECT REQUEST
- MX7 1
- BX7 X5+X7
- SA7 A5
- EQ PPRX RETURN
- LMS10 SX7 B1+B1 SET REPLY STATUS
- BX6 X6+X7 SET NO DRIVER PRESET
- SA6 A5+B1 STORE MB REPLY
- SA7 A5
- EQ PPRX RETURN
- LMS11 SB3 .PIO
- EQ TLMS+.IOCH GO TO *IOCH* PROCESSOR
- LMS12 BX7 X3 SAVE MB+1 IMAGE
- SX1 B0
- JP TLMS+B3 JUMP TO PROCESSOR
- BSS 0
- QUAL
- TLMS EQU *-1 TABLE OF *LMSM* SUBFUNCTION PROCESSORS
- LOC 1
- .PIO SX5 LA6DI*4096 SUBFUNCTION 1 - *PIO*
- EQ /MONITOR/LMS4 LOAD DRIVER
- .PIOCH SX5 LA6DI*4096 SUBFUNCTION 2 - *PIOCH*
- EQ /MONITOR/LMS11 EQUATE THIS SUBFUNCTION TO *PIO*
- .READSYS SA3 A3 SUBFUNCTION 3 - *READSYS*
- LX3 59-58
- EQ /MONITOR/LMS7 SET SYSTEM SEARCH FLAG
- .READSTR SX1 1000B SUBFUNCTION 4 - *READSTR*
- EQ /MONITOR/LMS8 CHECK DRIVER LOAD
- .STATUS BX7 X7+X4 SUBFUNCTION 5 - *STATUS*
- SA7 A4 STORE MB+1 REPLY
- EQ /MONITOR/LMS10 COMPLETE FUNCION
- .IOCH SX1 20B SUBFUNCTION 6 - *IOCH*
- EQ /MONITOR/LMS8 CONTINUE
- + EQ /MONITOR/HNG SUBFUNCTION 7 - INVALID
- LOC *O
- QUAL *
- MTEM SPACE 4,15
- *** MTEM - *MTE* FUNCTION REQUEST PROCESSOR.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ SF,36/ PARAMETERS
- *
- * SF SUBFUNCTION CODE.
- * CBRS CLEAR BAT READ ACCESS.
- * CBWS CLEAR BAT READ AND WRITE ACCESS.
- * CEMS CLEAR EXTENDED MEMORY TRACK.
- * EBRS ENABLE BRT PROCESSING.
- * SEPS SET *DAS* ERROR PROCESSING INTERLOCK.
- * CEPS CLEAR *DAS* ERROR PROCESSING INTERLOCK.
- * SRIS SET RECOVERY ERROR PROCESSING INTERLOCK.
- * CRIS CLEAR RECOVERY ERROR PROCESSING INTERLOCK.
- * RBPS RELEASE BAT/BST ACCESS PERMISSIONS.
- * GRIS GET RECOVERY INTERLOCK STATUS.
- * SRPS SET *DAS* RESTORE PARITY INTERLOCK.
- * CRPS CLEAR *DAS* RESTORE PARITY INTERLOCK.
- * GBDS GET *BDT* ENTRY.
- *
- *
- * CBRS/CBWS - CLEAR BAT READ/WRITE ACCESS.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ SF,12/ MI,12/ 0,12/ EQ
- * SF *CBRS*/*CBWS* SUBFUNCTION.
- * MI MAINFRAME INDEX FOR THE MAINFRAME BEING RECOVERED.
- * EQ EST ORDINAL FOR THE DEVICE BEING RECOVERED.
- *
- * EXIT
- *T, OR 12/ 0,48/ UNCHANGED
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
- * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
- * 3. MACHINE INDEX IS INVALID.
- *
- *
- * EBRS - ENABLE BRT PROCESSING.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *EBRS*,12/ 0,12/ BD,12/ BT
- * BD TRACK NUMBER OF BDT IN EXTENDED MEMORY.
- * BT TRACK NUMBER OF BRT IN EXTENDED MEMORY.
- *
- * EXIT
- *T, OR 12/ 0,48/ UNCHANGED
- *
- *
- * CEMS - CLEAR EXTENDED MEMORY TRACK.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *CEMS*,12/ FS,12/ NS,12/ TK
- * FS FIRST SECTOR TO CLEAR.
- * NS NUMBER OF SECTORS TO CLEAR.
- * TK EXTENDED MEMORY TRACK TO CLEAR.
- *
- * EXIT
- *T, OR 12/ 0,48/ UNCHANGED
- *
- * *PP HUNG.* WILL OCCUR IF THE LAST SECTOR TO CLEAR
- * IS PAST THE TRACK BOUNDARY OF THE SPECIFIED TRACK.
- *
- *
- * SEPS - SET *DAS* ERROR PROCESSING INTERLOCK.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *SEPS*,24/ 0,12/ EQ
- * EQ EST ORDINAL OF DEVICE TO BE PROCESSED.
- *
- * EXIT
- *T, OR 12/ 0,36/ UNCHANGED,12/ ST
- * ST STATUS = 0, IF SUCCESSFUL.
- * = 1, IF REJECT.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
- * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
- *
- *
- * CEPS - CLEAR *DAS* ERROR PROCESSING INTERLOCK.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *CEPS*,24/ 0,12/ EQ
- * EQ EST ORDINAL OF DEVICE TO BE PROCESSED.
- *
- * EXIT
- *T, OR 12/ 0,36/ UNCHANGED,12/ 0
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
- * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
- *
- *
- * SRIS - SET RECOVERY ERROR PROCESSING INTERLOCK.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *SRIS*,36/ 0
- *
- * EXIT
- *T, OR 12/ 0,36/ UNCHANGED,12/ ST
- * ST STATUS = 0, IF SUCCESSFUL.
- * = 1, IF INCOMPLETE (RECOVERY INTERLOCK IS SET,
- * BUT CONFLICTING *BDT* INTERLOCKS ARE SET).
- * = 2, IF REJECT.
- *
- *
- * CRIS - CLEAR RECOVERY ERROR PROCESSING INTERLOCK.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *CRIS*,36/ 0
- *
- * EXIT
- *T, OR 12/ 0,48/ UNCHANGED
- *
- *
- * RBPS - RELEASE BAT/BST ACCESS PERMISSIONS.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *RBPS*,24/ 0,12/ EQ
- * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
- *
- * EXIT
- *T, OR 12/ 0,36/ UNCHANGED,12/ ST
- * ST STATUS .EQ. 0, IF SUCCESSFUL.
- * .NE. 0, IF NOT ALL PERMISSIONS WERE RELEASED.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
- * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
- *
- *
- * GRIS - GET RECOVERY INTERLOCK STATUS.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *GRIS*,36/ 0
- *
- * EXIT
- *T, OR 12/ 0,36/ UNCHANGED,12/ ST
- * ST STATUS = 0, IF NO CONFLICTING *BDT* INTERLOCKS SET.
- * = 1, IF CONFLICTING *BDT* INTERLOCKS STILL SET.
- *
- *
- * SRPS - SET *DAS* RESTORE PARITY INTERLOCK.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *SRPS*,24/ 0,12/ EQ
- *T, MB 24/ ,36/ CID
- * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
- * CID SERIAL NUMBER FOR CONTROLLER PERFORMING *RESTORE*.
- *
- * EXIT
- *T, OR 12/ 0,36/ UNCHANGED,12/ ST
- * ST STATUS .EQ. 0, IF SUCCESSFUL.
- * .NE. 0, IF REJECT.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
- * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
- *
- *
- * CRPS - CLEAR *DAS* RESTORE PARITY INTERLOCK.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *CRPS*,24/ 0,12/ EQ
- * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
- * CID CONTROLLER SERIAL NUMBER (FOR *SRPS*).
- *
- * EXIT
- *T, OR 12/ 0,48/ UNCHANGED
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
- * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
- *
- *
- * GBDS - GET *BDT* ENTRY.
- *
- * ENTRY
- *T, OR 12/ MTEM,12/ *GCIS*,24/ 0,12/ EQ
- * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
- *
- * EXIT
- *T, OR 12/ 0,48/ UNCHANGED
- *T, MB 60/ BDT
- * BDT BDT ENTRY FOR SPECIFIED DEVICE (SEE *COMSMMF*).
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
- * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
- PPR MTEM,(/BUFIO/MTE,BIOMMF,/MONITOR/HNG)
- MTRM SPACE 4,35
- *** MTRM - MANAGE TABLE REQUEST PROCESSOR.
- *
- * ENTRY
- *T, OR 12/ MTRM,12/ FPARM,1/ SF,11/ TABLE,24/
- *T, MB 60/ FWORD
- *
- * FPARM FUNCTION PARAMETER.
- * = 0, IF RESERVE TABLE ENTRY FOR USE (REMOVE AN ENTRY
- * FROM POOL OF AVAILABLE ENTRIES FOR THIS TABLE).
- * = ORDINAL, IF NONZERO. TABLE ENTRY SPECIFIED WILL
- * BE RETURNED TO POOL OF AVAILABLE ENTRIES.
- * SF SYSTEM JOB FLAG.
- * IF SET, AND *FPARM* = 0, ONE OF THE *RESERVED FOR
- * SYSTEM JOB* ENTRIES WILL BE ASSIGNED IF THE TABLE
- * IS FULL.
- * TABLE TABLE IDENTIFICATION.
- * *PEJT* IF EJT ENTRY TO BE PROCESSED.
- * *PFNT* IF SYSTEM FNT ENTRY TO BE PROCESSED.
- * *PFOT* IF FAMILY ORDINAL TABLE TO BE PROCESSED.
- * *PQFT* IF QFT ENTRY TO BE PROCESSED.
- * *PODT* IF ORT ENTRY TO BE PROCESSED.
- *
- * FWORD INFORMATION TO STORE IN FIRST WORD OF TABLE
- * ENTRY RESERVED FOR *FPARM* = 0 REQUEST.
- *
- * EXIT
- *T, OR 12/ 0,12/ STAT,12/,24/ ADDR
- *
- * STAT RETURN STATUS.
- * = 0 FOR *FPARM* = ORDINAL OPTION.
- * = 0 FOR *FPARM* = 0 OPTION, IF NO TABLE ENTRY
- * AVAILABLE.
- * = ORDINAL FOR *FPARM* = 0 OPTION, IF THIS TABLE
- * ENTRY HAS BEEN RESERVED FOR USE BY CALLER.
- * ADDR ABSOLUTE ADDRESS OF TABLE ENTRY RESERVED FOR
- * USE FOR *FPARM* = 0 OPTION.
- *
- * *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- * 1. INVALID TABLE IDENTIFICATION.
- * 2. ORDINAL OF ENTRY TO RETURN TO POOL IS INVALID.
- * 3. ENTRY TO RETURN TO POOL IS NOT IN USE (BYTE 0 = 0).
- PPR MTRM,,,FEX
- SB6 PPR1 SET *MTRM* EXIT ADDRESS
- * ENTRY FROM *JACM* AND *RJSM* PROCESSORS.
- * (B6) = RETURN ADDRESS.
- MTM0 AX1 24
- MX3 -11
- MX0 -12
- BX6 -X0*X1 SYSTEM JOB FLAG
- BX2 -X3*X1 TABLE IDENTIFICATION
- AX1 12
- SX2 X2-PFOT
- SX3 X2-TMTDL
- BX3 -X3+X2
- SB3 -B1 DECREMENT NUMBER OF FREE ENTRIES
- NG X3,HNG IF INVALID TABLE IDENTIFICATION
- SA4 TMTD+X2 GET TABLE POINTER AND ENTRY LENGTH
- BX5 -X0*X4
- AX4 12
- BX7 -X0*X4
- SB4 X7 NUMBER OF RESERVED ENTRIES
- AX4 12
- SA4 X4 GET TABLE FWA AND LINKED LIST POINTER
- LX4 -12
- BX2 -X0*X4 COUNT OF AVAILABLE ENTRIES
- LX4 -24
- NZ X1,MTM1 IF RETURN ENTRY TO AVAILABLE POOL
- * REMOVE ENTRY FROM POOL OF AVAILABLE ENTRIES.
- SA3 A4 GET FIRST AVAILABLE ENTRY
- BX7 -X0*X3
- ZR X7,PPR1 IF NO ENTRIES AVAILABLE
- SX1 B4
- IX2 X1-X2
- NG X2,MTM0.1 IF TABLE NOT FULL
- AX6 11
- NZ X6,MTM0.1 IF SYSTEM JOB CALL
- SX7 B0+
- EQ PPR1 CLEAR OUTPUT REGISTER
- MTM0.1 SX4 X4
- IX5 X7*X5
- IX5 X5+X4 ABSOLUTE ADDRESS OF FIRST AVAILABLE ENTRY
- SA2 A5+B1 RESERVE NEXT AVAILABLE ENTRY
- LX7 36
- SA1 X5 GET NEXT LINK
- BX7 X7+X5
- LX6 X2
- BX1 -X0*X1
- EQ MTM4 UPDATE POINTER FOR NEXT AVAILABLE ENTRY
- * RETURN ENTRY TO POOL OF AVAILABLE ENTRIES.
- MTM1 LX4 12
- BX2 -X0*X4 MAXIMUM NUMBER OF ENTRIES
- SX7 A4+
- LX4 -12
- IX2 X1-X2
- PL X2,HNG IF ORDINAL OUT OF RANGE
- MTM2 SA3 X7
- MX2 1
- BX6 -X0*X3
- IX7 X6*X5
- ZR X6,MTM3 IF END OF LINKED LIST
- IX2 X1-X6
- IX7 X7+X4
- MTM3 PL X2,MTM2 IF ORDINAL .GT. NEXT POINTER
- SB4 X5
- IX5 X1*X5
- SB3 B1 INCREMENT NUMBER OF FREE ENTRIES
- IX5 X5+X4 ABSOLUTE ADDRESS OF ENTRY TO RETURN
- BX7 X7-X7
- SA2 X5 CHECK IF ENTRY ALREADY IN POOL
- LX2 12
- BX2 -X0*X2
- ZR X2,HNG IF ENTRY IS NOT IN USE
- MTM4 BX3 X0*X3 ADD/REMOVE ENTRY IN LIST
- SX2 B3
- LX2 12
- + SA6 X5 UPDATE TABLE IN ONE WORD OF CODE
- BX6 X3+X1
- SA6 A3
- SA4 A4
- IX6 X4+X2 INCREMENT/DECREMENT FREE ENTRIES
- SA6 A4
- NZ X7,RB6 IF NOT CLEARING ENTRY
- MTM5 SB4 B4-B1 CLEAR REMAINDER OF ENTRY
- SA7 X5+B4
- GT B4,B1,MTM5 IF MORE WORDS TO CLEAR
- JP B6 EXIT
- TMTD SPACE 4,10
- ** TMTD - TABLE OF MANAGED TABLE DESCRIPTORS.
- *
- * ONE WORD PER ENTRY -
- *T 18/,18/ PTRA,12/ RSEN,12/ ENTL
- * PTRA MANAGED TABLE POINTER ADDRESS.
- * RSEN NUMBER OF ENTRIES RESERVED FOR SYSTEM JOBS.
- * ENTL TABLE ENTRY LENGTH.
- TMTD BSS 0
- LOC 1
- ERRNZ *-PFOT TABLE POSITION DEPENDS ON VALUE
- VFD 18/0,18/FOTP,12/0,12/1 FAMILY ORDINAL TABLE
- ERRNZ *-PFNT TABLE POSITION DEPENDS ON VALUE
- VFD 18/0,18/FNTP,12/0,12/FNTE SYSTEM FNT
- ERRNZ *-PQFT TABLE POSITION DEPENDS ON VALUE
- VFD 18/0,18/QFTP,12/QFTR,12/QFTE QUEUE FILE TABLE
- ERRNZ *-PEJT TABLE POSITION DEPENDS ON VALUE
- VFD 18/0,18/EJTP,12/EJTR,12/EJTE EXECUTING JOB TABLE
- ERRNZ *-PODT TABLE POSITION DEPENDS ON VALUE
- VFD 18/0,18/ORTP,12/0,12/ORTE OPTICAL DISK REQUEST TABLE
- LOC *O
- TMTDL EQU *-TMTD TABLE LENGTH
- PIOM SPACE 4,20
- *** PIOM - PP I/O VIA CPU TRANSFERS.
- *
- * ENTRY
- *
- * FOR PP I/O BUFFER SUBFUNCTIONS (SF = 0, 1, 2) -
- *T, OR 12/ PIOM,6/ SF,6/ FF,24/,12/ CH
- *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
- *
- * FOR DIRECT READ OR WRITE OF SPECIFIED NUMBER OF SECTORS
- * (SF = 3 WITH FF BIT 38 = 0, AND SF = 4) -
- *T, OR 12/ PIOM,6/ SF,6/ FF,12/ SC,6/,18/ CMR
- *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
- *
- * FOR DIRECT READ TO EOR (SF = 3 WITH FF BIT 38 = 1) -
- *T, OR 12/ PIOM,6/ SF,6/ FF,18/ LWR,18/ CMR
- *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
- *
- * FOR WRITE BUFFER FLUSH (SF = 5) -
- *T, OR 12/ PIOM,6/ SF,6/,24/,12/ FNTO
- *
- * FOR CM RESIDENT CODE TRANSFER SUBFUNCTION (SF = 6) -
- *T, OR 12/ PIOM,6/ SF,6/,18/ LWR,18/ CMR
- *T, MB 24/,24/ CMA,12/
- *
- * SF SUBFUNCTION CODE AS DEFINED IN *COMSCPS*.
- * SUBFUNCTIONS 0 THRU 4 APPLY TO ECS/LCM (DE)
- * AND BUFFERED I/O DEVICES (DV, DW, DB, DC, ETC.).
- * SUBFUNCTION 5 APPLIES TO 819 EQUIPMENT ONLY.
- * SUBFUNCTION 6 APPLIES TO CM RESIDENT CODE ONLY.
- * 0 = REBS = RESERVE WRITE BUFFER.
- * 1 = RESS = READ SECTOR.
- * 2 = WESS = WRITE SECTOR.
- * 3 = RDDS = READ DIRECT.
- * 4 = WDDS = WRITE DIRECT.
- * 5 = FLBS = FLUSH 819 I/O LCM BUFFERS.
- * 6 = LCRS = LOAD CM RESIDENT CODE.
- * FF FUNCTION FLAGS.
- * BIT 36 = REWRITE (SF = 2 ONLY).
- * BIT 37 = LAST SECTOR BUFFER FLUSH FOR SECTOR WRITE
- * (SF = 2), WRITE EOI AND FLUSH BUFFER FOR DIRECT
- * WRITE ON BUFFERED DEVICE (SF = 4).
- * BIT 38 = READ TO EOR (SF = 3 ONLY), TERMINATES ON
- * ANY SHORT SECTOR - EOR/EOF/EOI.
- * CH CHANNEL NUMBER TO BE USED IN PROCESSING REQUEST, VALID
- * ONLY WHEN BIT 4 OF *CHRV* IS SET.
- * SC SECTOR COUNT TO BE TRANSFERRED (SF = 3 WITH
- * FF BIT 38 = 0 AND SF =4).
- * LWR LWA+1 OF TRANSFER (SF = 3 WITH FF BIT 38 = 1
- * AND SF = 6). IF ZERO, LWA+1 TRANSFER = FL.
- * CMR RELATIVE CM ADDRESS OF TRANSFER (SF = 3, 4, 6 ONLY).
- * T4 PP I/O BUFFER INCREMENT, IF PP I/O BUFFER RESERVED.
- * T5 EQUIPMENT (EST ORDINAL OF ECS/LCM OR BUFFERED DEVICE).
- * T6 CURRENT TRACK (LOGICAL).
- * T7 CURRENT SECTOR (LOGICAL).
- * CMA ABSOLUTE CM ADDRESS OF CM RESIDENT CODE TO TRANSFER.
- * CHRV CHANNEL RESERVATION INDICATOR.
- * BIT 5 = SYSTEM FILE REQUEST.
- * BIT 6 = PP I/O BUFFER RESERVED (BUFFER
- * INCREMENT IN T4).
- * BIT 7 = BUFFER I/O LINK SET.
- * BIT 8 = DIRECT TRANSFER CONTINUATION (CLEAR IF
- * INITIAL CALL).
- * BIT 9 = STREAM DATA ON PRU READ.
- * FNTO FNT ORDINAL FOR FNT NEEDING A BUFFER FLUSHED.
- *
- * EXIT
- *
- * FOR PP I/O BUFFER SUBFUNCTIONS (SF = 0, 1, 2) -
- *T, OR 12/ 0,6/ ST,6/ EC,6/,30/ EEA
- *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
- *T, MB+1 60/ SAME AS (OR).
- *
- * FOR DIRECT READ OR WRITE OF SPECIFIED NUMBER OF SECTORS
- * (SF = 3 WITH FF BIT 38 = 0, AND SF = 4) -
- *T, OR 12/ 0,6/ ST,6/ EC,12/ SC,6/,18/ CMR
- *T, MB 12/ T4, 12/ T5, 12/ T6, 12/ T7, 12/ CHRV
- *T, MB+1 60/ SAME AS (OR)
- *
- * FOR DIRECT READ TO EOR (SF = 3 WITH FF BIT 38 = 1) -
- *T, OR 12/ 0,6/ ST,6/ EC,18/ LWR,18/ CMR
- *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
- *T, MB+1 60/ SAME AS (OR)
- *
- * FOR WRITE BUFFER FLUSH (SF = 5) =
- *T, OR 60/ 0
- *
- * FOR CM RESIDENT CODE TRANSFER SUBFUNCTION (SF = 6) -
- *T, OR 12/ 0,6/ ST,6/,18/ LWR,18/ CMR
- *T, MB 30/,18/ CMA,12/
- *
- * ST RETURN STATUS. IF A NONZERO STATUS IS PRESENT, THE
- * ERROR CODE FIELD IS ALWAYS CLEAR.
- * 04XX = *IFLS* = INSUFFICIENT FIELD LENGTH FOR LOAD
- * (SF = 3 WITH FF BIT 38 = 1, OR SF = 6).
- * 60XX = *REIS* = REISSUE FUNCTION (SET IN MB+1 ONLY,
- * I/O OR *PAUSE* IS REQUIRED) (SF = 0, 1, 2, 3, 4).
- * EC ERROR CODE. SEE *COMSMSP* FOR A DESCRIPTION OF MASS
- * STORAGE ERROR CODES.
- * SC REMAINING SECTOR COUNT (SF = 3, 4 ONLY).
- * LWR SAME AS ON ENTRY.
- * CMR RELATIVE CM ADDRESS UPDATED TO LWA+1 TRANSFER
- * (SF = 3, 4, 6 ONLY).
- * EEA ERROR ADDRESS IF ECS/ESM ERROR.
- * T4 PP I/O BUFFER INCREMENT, IF BUFFER RESERVED
- * (SF = 0, 1, 2).
- * NUMBER OF SECTORS TRANSFERRED (SF = 3, 4).
- * T5 EQUIPMENT.
- * T6 TRACK. UPDATED TO NEXT TRACK, IF NECESSARY,
- * FOR DIRECT TRANSFER (SF = 3, 4). NOT ADVANCED
- * PAST EOI TRACK.
- * T7 SECTOR. UPDATED TO NEXT SECTOR, FOR DIRECT
- * TRANSFER (SF = 3, 4). NOT ADVANCED PAST EOI SECTOR.
- * CMA SAME AS ON ENTRY.
- * CHRV BITS UPDATED TO REFLECT CURRENT RESERVATION
- * STATUS.
- *
- * NOTES 1. MB+1 IS USED BY CPUMTR TO KEEP PROGRAM OR
- * MONITOR MODE FLAGS. MB+2 AND MB+3 ARE USED
- * TO CONTAIN A PSEUDO FNT FOR A BUFFERED DISK
- * REQUEST.
- *
- * 2. IF *RCLS* STATUS IS RETURNED, THE PP SHOULD
- * LOOP ISSUING *PAUSE* AND CHECKING MB+1 BYTE 1
- * UNTIL STATUS = *REIS*. BIT 46 OF MB+1 IS SET
- * WHEN A *PAUSE* IS REQUIRED OR PENDING BUFFERED I/O
- * IS COMPLETE. THE *PIOM* FUNCTION SHOULD THEN BE
- * REISSUED TO COMPLETE THE TRANSFER. NOTE THAT A
- * DIRECT TRANSFER IS PREMATURELY TERMINATED IF
- * NONZERO STATUS IS RETURNED.
- *
- * 3. THE PP SHOULD RELEASE THE PP I/O BUFFER AFTER
- * TRANSFER OF SECTOR TO PP IS COMPLETE (SF = 1).
- * DRIVER *ENDMS* PROCESSING SHOULD RELEASE THE
- * PP I/O BUFFER IF IT IS RESERVED. CPUMTR WILL
- * RELEASE THE BUFFER IN THE FOLLOWING CASES -
- * (1) DIRECT TRANSFER IS REQUESTED (SF = 3, 4).
- * (2) BUFFERED I/O IS PENDING (ST = 4000).
- * (3) ADDRESS ERROR, I/O ERROR OR INACCESSIBLE
- * DEVICE.
- * (4) LAST SECTOR BUFFER FLUSH REQUESTED ON
- * WRITE (SF = 2).
- * NOTE THAT THE PP WILL HAVE TO RE-RESERVE AN
- * I/O BUFFER (SF = 0) AND REWRITE THE DATA TO
- * THE BUFFER FOR SF = 2, WHEN BUFFERED I/O IS
- * PENDING (ST = 4000).
- *
- * 4. *PIOM* WILL HANG FOR FOLLOWING CONDITIONS -
- * (1) ILLEGAL SUBFUNCTION CODE.
- * (2) *CHRV* BIT 0 SET INDICATING PP I/O BUFFER
- * RESERVED, BUT BUFFER INTERLOCK DOES NOT
- * CORRESPOND TO THIS PP.
- * (3) SF = 0 AND PP I/O BUFFER PREVIOUSLY
- * RESERVED.
- * (4) SF = 2 AND PP I/O BUFFER NOT PREVIOUSLY
- * RESERVED.
- * (5) SECTOR SPECIFICATION INVALID.
- * (6) EOR, EOF, OR EOI ENCOUNTERED ON DIRECT READ
- * WITH SECTOR COUNT (SF = 3).
- * (7) NEXT TRACK IS NOT RESERVED, WHEN DIRECT
- * TRANSFER HAS TO CROSS LOGICAL TRACK
- * BOUNDARY.
- * (8) LWA+1 LOAD .GT. FL (SF = 3 WITH FF BIT
- * 38 = 1, OR SF = 6).
- * (9) DIRECT TRANSFER OF SPECIFIED NUMBER OF
- * SECTORS ATTEMPTED BEYOND CP FL.
- * (10) FUNCTION FLAG SELECTION IS NOT LEGAL FOR
- * THIS SUBFUNCTION.
- * READ TO EOR FLAG (BIT 38) ALLOWED ONLY
- * FOR SF=3.
- * LAST SECTOR BUFFER FLUSH (BIT 37) ALLOWED
- * ONLY FOR SF = 0, 2, 4.
- * REWRITE FLAG (BIT 36) ALLOWED ONLY FOR
- * SF = 0, 2, 4.
- PPR PIOM,,PIP
- AX1 42 GET SUBFUNCTION CODE
- MX2 -12
- SB4 X1-LCRS CHECK FOR CM RESIDENT CODE LOAD
- SB5 X1-1
- TNZ B4,(/ECS/PIO,ECS,/MONITOR/HNG) IF NOT CM FUNCTION
- EQ PMR SWITCH TO PROGRAM MODE
- ERRNZ REBS CODE DEPENDS ON VALUE
- ERRNZ RESS-1 CODE DEPENDS ON VALUE
- ERRNZ WESS-2 CODE DEPENDS ON VALUE
- ERRNZ RDDS-3 CODE DEPENDS ON VALUE
- ERRNZ WDDS-4 CODE DEPENDS ON VALUE
- ERRNZ FLBS-5 CODE DEPENDS ON VALUE
- PLFM SPACE 4,40
- *** PLFM - PROCESS LOCAL FNT ENTRY.
- *
- * CREATE OR DELETE LOCAL FNT ENTRY IN NEGATIVE FL.
- *
- *T OR 12/ PLFM,6/,1/S,2/,3/SF,24/,12/ ADDR
- *
- *T,MB 42/ FN,18/
- *
- * S CREATE SPECIAL FILE USING ONE OF THE RESERVED FNT
- * ENTRIES. SEE SYMBOL *SRFE* IN *PPCOM* FOR A LIST
- * OF SPECIAL FILES.
- *
- * SF SUBFUNCTION -
- * DLFS (0) DELETE LOCAL FNT ENTRY.
- * DLCS (1) RETURN FILE COUNT.
- * CRFS (2) CREATE LOCAL FNT ENTRY.
- *
- * ADDR NFL ADDRESS OF FNT ENTRY (SF = DLFS, DLCS).
- *
- * FN FILE NAME (SF = CRFS).
- *
- *
- *T OR 12/ 0,12/ ADDR,12/,12/ COUNT,12/ STAT
- *
- * ADDR NFL ADDRESS OF LOCAL FNT ENTRY (SF = CRFS).
- *
- * COUNT NUMBER OF LOCAL FILES REMAINING ON SAME
- * EQUIPMENT (SF = DLCS).
- *
- * STAT RETURN STATUS (SF = CRFS).
- * 0 = FILE CREATED.
- * 1 = FILE ALREADY EXISTS.
- * 2 = LOCAL FILE LIMIT (MAXIMUM NFL REACHED).
- * 4 = NFL INCREASE NEEDED.
- *
- *
- * WHEN DELETING AN FNT ENTRY (SF = DLFS), IF THE NFL
- * ADDRESS OF THE ENTRY MATCHES THE ADDRESS IN THE FIRST BYTE
- * OF *EOCW* IN THE CONTROL POINT AREA, THAT FIELD IS CLEARED.
- PPR PLFM,(/CME/PLF,CME,/0CME/PLF)
- RCLM SPACE 4,10
- *** RCLM - RECALL CPU.
- *
- * ENTRY
- *T, OR 12/ RCLM,12/,12/,12/,12/
- *
- * EXIT
- *T, OR 60/ 0
- PPR RCLM
- SA1 B7+CWQW CHECK RECALL STATUS
- SA7 A5+ CLEAR OUTPUT REGISTER
- SX6 1S4 SET INCREASED PRIORITY FOR JOB
- SA6 IP
- SB3 PPRX SET *RCC* RETURN ADDRESS
- LX1 59-46
- SB6 B7 SET EXCHANGE PACKAGE ADDRESS
- PL X1,RCC IF TO RECALL CPU
- EQ PPRX RETURN
- RCPM SPACE 4
- *** RCPM - REQUEST CPU.
- *
- * ENTRY
- *T, OR 12/ RCPM,12/,12/,12/,12/
- *
- * EXIT
- *T, OR 60/ 0
- PPR RCPM
- * ENTER HERE FROM RLMM FOR JOB STEP START.
- SA1 B7+STSW READ STATUS
- SA3 SMRL
- SB3 PPRX SET *RCC* RETURN ADDRESS
- MX0 -12
- BX0 -X0*X3
- SX5 B7 CONTROL POINT ADDRESS
- LX0 7
- AX1 57
- BX5 X5-X0
- SB6 X1+1
- ZR X5,HNG IF STORAGE MOVE IN PROGRESS
- ZR X1,RCP1 IF NO STATUS
- NZ B6,HNG IF NOT *I* STATUS
- SA2 A5-B1
- LX1 41
- BX6 X1*X2 CLEAR PP AUTO RECALL
- SA6 A2
- RCP1 SA7 A5 CLEAR OUTPUT REGISTER
- SB6 B7 SET EXCHANGE PACKAGE ADDRESS
- EQ RCC RECALL CPU
- RDCM SPACE 4,25
- *** RDCM - REQUEST DATA CONVERSION.
- *
- * ENTRY
- *T, OR 12/ RDCM, 12/ SF, 36/
- *
- * SF = 0 - 6 (RCIS) - CONVERT INTEGER(S) TO F10.3 FORMAT.
- * SF = 7 (RCDS) - CONVERT INTEGER TO F20.3 FORMAT.
- * SF = 10 (RIDS) - INCREMENT PACKED DATE BY SPECIFIED TERM.
- * SF = 11 (REPS) - ENCRYPT PASSWORD.
- *
- *
- * 0 - 6 RCIS - CONVERT INTEGER(S) TO F10.3 FORMAT.
- *
- * CONVERT 30 BIT INTEGER TO DISPLAY CODE IN F10.3 FORMAT.
- * CAUTION - ONLY NINE DIGITS OF ACCURACY ARE RETURNED. VALUES
- * GREATER THAN 999999.999 ARE TRUNCATED TO THE LOW ORDER NINE
- * DIGITS.
- *
- * ENTRY
- *T, OR 12/ RDCM,12/ C,6/ M,6/ W,24/
- * C = NUMBER OF VALUES TO CONVERT (1-6),
- * IF C=0, ONLY THE VALUE IN MB+0 IS CONVERTED.
- * M = WORD CONTAINING QUARTER NANOUNIT COUNT TO BE CONVERTED TO
- * MILLIUNITS. THIS WORD IS A 60 BIT VALUE.
- * MB+M-1 POINTS TO THE WORD REQUIRING CONVERSION.
- * IF C=0, M IS IGNORED.
- * W = WORD CONTAINING SRU ACCUMULATOR (1-6).
- * MB+W-1 POINTS TO THE WORD REQUIRING CONVERSION.
- * IF C=0, W IS IGNORED.
- *
- *T, MB+0 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
- *T, MB+I 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
- *T, MB+5 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
- *
- * EXIT
- *T, OR 60/ 0
- *
- *T, MB+0 60/ CONVERSION
- *T, MB+I 60/ CONVERSION
- *T, MB+5 60/ CONVERSION
- *
- *
- * 7 RDCS - CONVERT INTEGER TO F20.3 FORMAT.
- *
- * CONVERT A 60-BIT INTEGER TO DISPLAY CODE IN F20.3 FORMAT.
- * CAUTION - ONLY 15 DIGITS OF ACCURACY ARE RETURNED. VALUES
- * GREATER THAN 999999999999.999 ARE TRUNCATED TO THE LOW ORDER
- * 15 DIGITS.
- *
- * ENTRY
- *T, OR 12/ RDCM, 12/ RCDS, 6/, 6/ Q, 24/
- * Q = CONVERT QUARTER NANOUNITS TO CYBER 176 CLOCK CYCLES FLAG.
- *
- *T, MB+0 60/ 60-BIT INTEGER
- *
- * EXIT
- *T, OR 60/ 0
- *
- *T, MB+0 60/ CONVERSION (FIRST WORD)
- *T, MB+1 60/ CONVERSION (SECOND WORD)
- *
- *
- * 10 RIDS - INCREMENT CURRENT PACKED DATE BY SPECIFIED TERM.
- *
- * ENTRY
- *T, OR 12/ RDCM, 12/ RIDS, 24/, 12/ TERM
- * TERM - NUMBER OF DAYS TO ADD TO PACKED DATE.
- *
- * EXIT
- *T, OR 60/ 0
- *
- *T, MB+0 42/ 0, 18/ NEW PACKED DATE
- *
- *
- * 11 REPS - ENCRYPT PASSWORD.
- *
- * ENTRY
- *T, OR 12/ RDCM, 12/ REPS, 36/
- *
- *T, MB+0 60/ PASSWORD
- *
- * EXIT
- *T, OR 60/ 0
- *
- *T, MB+0 60/ ENCRYPTED PASSWORD
- PPR RDCM,PMR,RDC,FEX
- RECM SPACE 4,10
- ** RECM - RECALL PP REQUEST.
- *
- * ENTRY
- *T, OR 12/ RECM,1/ ND,11/ RF,36/ RC
- *T, MB 60/ IR
- *T, MB+1 1/Q,59/ PAR
- *
- * IR = INPUT REGISTER OF PP, CONTROL POINT NEED NOT BE SET.
- * ND = SET IF PP IS NOT TO BE DROPPED.
- * RF = RECALL FUNCTION NUMBER AS DEFINED IN *COMSCPS*.
- * RC = RECALL CRITERION, UNIQUE TO EACH RECALL FUNCTION.
- * RF = RC = 0, IF TO SET 1 SECOND TIMED RECALL.
- * Q = RECALL FLAG, SET BY *CPUMTR* WHEN CALL IS QUEUED.
- * PAR = PARAMETER DATA TO BE PASSED TO ASSIGNED PP IN *MB*.
- *
- * EXIT
- *T, OR 12/ 0,48/
- *
- * HANG CONDITIONS -
- * RECALL FUNCTION IS UNDEFINED.
- * NO-DROP OPTION SELECTED WHEN PP CALLED WITH AUTO-RECALL.
- * PP REQUEST (MB) IS ZERO.
- *
- * NOTE -
- * THE AUTO RECALL IN THE CALLING PP-S INPUT
- * REGISTER IS PROPAGATED TO THE RECALLED REQUEST,
- * AND THE AUTO-RECALL BIT (IF ANY) IS CLEARED FROM
- * THE CALLING PP-S INPUT REGISTER IF THE NO-DROP
- * OPTION IS NOT SELECTED.
- PPR RECM
- SA3 A5+2 FETCH PARAMETER WORD
- LX1 59-47
- BX6 X3
- SA6 AQRA
- SB3 REC5 *AQR* RETURN ADDRESS
- SX0 B1
- SA3 A5-B1 READ INPUT REGISTER
- LX0 41
- BX2 X3*X0 EXTRACT AUTO RECALL BIT
- LX3 59-41
- BX6 X3*X1
- NG X6,HNG IF AUTO RECALL AND NO-DROP
- NG X1,REC1 IF NO-DROP PP
- SB3 .DPPM *AQR* RETURN ADDRESS
- LX3 41-59
- BX6 -X0*X3 REMOVE AUTO RECALL BIT
- SA6 A3+
- REC1 MX6 1 CLEAR DROP INHIBIT BIT
- BX1 -X6*X1
- BX0 X1
- SA4 A5+B1
- ZR X4,HNG IF PP CALL ZERO
- BX6 X2+X4 PROPAGATE AUTO-RECALL BIT
- AX1 48
- SB4 X1-TRECL
- PL B4,HNG IF CRITERION OUT OF RANGE
- JP TREC+TRECL+B4
- TREC BSS 0
- LOC 0
- + ZR X0,REC2 IF DEFAULT CALL - (PTMF)
- EQ HNG ILLEGAL CRITERION
- + EQ HNG (PCBF) - ILLEGAL FROM PP
- + SA1 RTCL COMPUTE EXTRACTION TIME
- EQ REC6 (PTRF) - TIMED RECALL / NO ROLLOUT
- + SA1 RTCL COMPUTE EXTRACTION TIME
- EQ REC3 (PTMF) - TIMED RECALL
- + EQ REC7 (PBMF) - BUFFER MANAGER RECALL
- TRECL BSS 0
- LOC *O
- * ENTER HERE FROM *CPUCIO* TO QUEUE *CIO* REQUEST FOR
- * SUSPENDED DETTACHED TERMINAL JOB.
- * ENTER HERE FROM *PRQ* TO REQUEUE *1AJ* WHEN ACTIVITY
- * ON JOB OR JOB INTERLOCK SET.
- REC2 SA2 MSCL GET DEFAULT PP RECALL TIME
- MX0 -12
- AX2 24
- BX2 -X0*X2
- SX0 PTMF SET TIMED RECALL CRITERION
- LX0 36
- IX0 X2+X0
- LX0 12
- SA1 RTCL
- REC3 MX3 -36 ADD TO REAL TIME CLOCK
- BX1 -X3*X1
- LX1 12
- IX0 X0+X1
- REC4 SA1 B7+STSW CHECK FOR ROLLOUT
- R= X2,RQ SET RECALL QUEUE
- LX1 59-24
- PL X1,AQR IF ROLLOUT NOT SET
- LX1 24-59
- * PUT ENTRY IN RECALL AREA BUT NOT IN QUEUE WHEN ROLLOUT SET.
- MX7 -4
- NO
- BX4 -X7*X1 NEXT FREE RECALL SLOT
- SB4 B7+RCCW-1
- BX7 X7*X1
- SA3 B4+X4 READ NEXT FREE RECALL SLOT
- SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
- SA4 AQRA GET PARAMETER WORD
- MX6 1
- BX6 X6+X4 SET RECALL BIT FLAG
- SA6 A3+REPW-RCCW STORE PARAMETER WORD
- SX3 X3+20B
- IX7 X7+X3
- SA7 A1
- JP B3 EXIT
- REC5 BX7 X7-X7 CLEAR *OR*
- SA7 A5
- EQ MTRX EXIT
- REC6 MX3 -36
- BX1 -X3*X1
- LX1 12
- IX0 X0+X1
- R= X2,NRQ INHIBIT ROLLOUT
- EQ AQR ASSIGN QUEUE REQUEST
- REC7 MX3 -12
- SA4 A5-B1
- LX3 12
- BX3 -X3*X0 CBT ORDINAL PASSED IN *RECM* CALL
- AX3 12-CBTLS
- MX2 -5
- TA3 X3+LSLK,CBT
- LX4 -18
- LX2 18
- BX4 -X2*X4 CONTROL POINT NUMBER OF CALLER
- BX3 -X2*X3 CONTROL POINT NUMBER FROM CBT ENTRY
- R= X2,BQ SET BUFFER MANAGER RECALL QUEUE
- BX4 X4-X3 COMPARE CONTROL POINT NUMBERS
- ZR X4,AQR IF RECALL STILL SET FOR THIS JOB
- BX7 X7-X7
- SA6 A5-B1 RESET INPUT REGISTER
- SA1 A5+2 RESTORE MB+4
- SA7 A5 CLEAR OR
- BX7 X1
- SA7 A5+5
- EQ MTRX RESTART PSEUDO-PP
- REQM SPACE 4,25
- *** REQM - REQUEST EQUIPMENT.
- *
- * REQUEST ASSIGNMENT OF EQUIPMENT TO JOB.
- *
- * ENTRY
- *T, OR 12/ REQM,12/ EQ,12/ SF,12/ EJT,12/
- * EQ EST ORDINAL (IF 4000B + EQ, EJT IS PRESENT).
- * SF SUBFUNCTION.
- * = REQS TO REQUEST ACTIVE NON-MS EQUIPMENT.
- * = RDES TO REQUEST DOWN EQUIPMENT.
- * = RVES TO ASSIGN ANY EQUIPMENT.
- * EJT EJT ORDINAL TO ASSIGN EQUIPMENT TO.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,12/,12/,12/
- * ST .NE. 0 IF EQUIPMENT ASSIGNED.
- * ST = 0 IF EQUIPMENT NOT AVAILABLE.
- * COUNTER IN *EACW* INCREMENTED, IF EQUIPMENT ASSIGNED TO
- * CALLER.
- *
- *
- * HANG CONDITIONS -
- *
- * INCORRECT EST ORDINAL.
- * INCORRECT SUBFUNCTION.
- PPR REQM
- LX5 24
- MX2 -9
- BX0 -X2*X5 EST ORDINAL
- LX5 59-47-24
- TX3 X0,-ESTL
- PL X3,HNG IF INCORRECT EST ORDINAL
- CX2 X0,EST CONVERT EST ORDINAL TO OFFSET
- TA2 X2+EQDE,EST READ EST ENTRY
- LX1 36
- TX4 B7,-SCA
- SA3 A2+B1
- ERRNZ EQDE+1-EQAE CODE DEPENDS ON VALUE
- MX0 -12
- NG X5,REQ1 IF ALTERNATE EJT SPECIFIED
- MX1 12
- ZR X4,REQ1 IF PP AT SYSTEM CONTROL POINT
- SA1 B7+TFSW GET JOB EJT
- REQ1 LX1 12
- BX1 -X0*X1 EJT ORDINAL
- BX6 X1+X3 INSERT EQUIPMENT ASSIGNMENT
- BX3 -X0*X3
- NZ X3,PPR1 IF EQUIPMENT ALREADY ASSIGNED
- LX5 47-59-24
- BX4 -X0*X5 EXTRACT SUBFUNCTION
- LX3 X2
- SB3 X4-1 CHECK SUBFUNCTION
- LX2 59-49
- PL X2,REQ2 IF EQUIPMENT ON OR IDLE
- NO
- LX2 1
- REQ2 GT B3,B1,HNG IF INVALID SUBFUNCTION
- ERRNZ RVES-2 CODE DEPENDS ON VALUE
- PL B3,REQ3 IF NOT *REQS*
- ERRNZ REQS CODE DEPENDS ON VALUE
- BX2 X3+X2
- NO
- NG X2,PPR1 IF EQUIPMENT MASS STORAGE AND/OR DOWN
- REQ3 NZ B3,REQ4 IF NOT SUBFUNCTION *RDES*
- ERRNZ RDES-1 CODE DEPENDS ON VALUE
- PL X2,PPR1 IF EQUIPMENT NOT DOWN
- REQ4 SX7 B1
- LX5 24+59-47
- SA6 A3 STORE EQUIPMENT ASSIGNMENT
- LX7 36
- NG X5,PPR1 IF ALTERNATE EJT SPECIFIED
- SA1 B7+EACW UPDATE ASSIGNED EQUIPMENT COUNT
- SX6 B1
- LX6 48
- IX6 X1+X6
- SA6 A1
- EQ PPR1 RETURN
- RJSM SPACE 4,20
- *** RJSM - REQUEST JOB SEQUENCE NUMBER.
- *
- * ASSIGN A JOB SEQUENCE NUMBER.
- *
- * ENTRY
- *T, OR 12/ RJSM,12/ SF,1/ F,11/ TABLE,12/,12/
- *T, MB 24/,36/ QFT ENTRY VALUE
- * SF = 0 IF REQUESTING QFT ENTRY.
- * IF SF = 0, F = 1 IF SYSTEM JOB CALL (RESERVED QFT ENTRY
- * WILL BE ASSIGNED IF TABLE FULL).
- * TABLE = *PQFT*.
- *
- * EXIT (SF = 0)
- *T, OR RESPONSE FROM *MTRM*
- *T, MB 24/ SEQUENCE NUMBER,36/ QFT ENTRY VALUE
- *
- * EXIT (SF .NE. 0)
- *T, OR 12/ 0,12/ SF,12/ PQFT,24/ SEQUENCE NUMBER
- *T, MB 24/ SEQUENCE NUMBER,36/ QFT ENTRY VALUE
- *
- * *RJSM* HAS BEEN SET UP TO ALLOW A SITE TO AVOID GENERATING
- * POTENTIALLY OFFENSIVE JSN-S BY THE SELECTION OF CHARACTERS
- * WHICH ARE TO BE EXCLUDED FROM EACH CHARACTER POSITION OF
- * JSN-S (VOWELS, FOR EXAMPLE).
- PPR RJSM
- SA4 JSNL FETCH CURRENT SEQUENCE NUMBER
- SA3 A5+B1
- MX0 -24
- BX4 -X0*X4
- BX7 X0*X1
- BX7 X7+X4
- LX4 36
- MX0 -36
- BX6 -X0*X3
- BX6 X4+X6
- BX4 X0*X1 GET SUBFUNCTION
- SA6 A3+ SET SEQUENCE NUMBER IN MB
- NZ X4,RJS1 IF NOT REQUESTING QFT ENTRY
- SB6 RJS1 SET *MTRM* RETURN ADDRESS
- EQ MTM0 REQUEST QFT ENTRY
- RJS1 SA1 JSNL ADVANCE JOB SEQUENCE NUMBER
- MX0 -6
- SA7 A5 WRITE OR
- SA2 RJSA+3 FOURTH CHARACTER EXCLUSION MASK
- SB5 B0+
- RJS2 BX3 -X0*X1 GET CHARACTER
- BX4 X0*X1
- AX3 X3,B5
- SB6 X3+B1 INCREMENT TO NEXT CHARACTER
- RJS2.1 AX7 X2,B6
- LX7 -1
- PL X7,RJS3 IF USABLE CHARACTER
- SB6 B6+B1 SKIP A CHARACTER
- NZ X7,RJS2.1 IF NO OVERFLOW
- LX0 6
- SB6 1RA-1 RESET CHARACTER
- SX5 B5-18
- RJS2.2 SB6 B6+1
- AX7 X2,B6
- LX7 -1
- NG X7,RJS2.2 IF EXCLUDED CHARACTER
- SX7 B6
- LX7 X7,B5
- BX1 X4+X7
- SB5 B5+6
- SA2 A2-B1 NEXT EXCLUSION MASK
- NZ X5,RJS2 IF NOT END OF SEQUENCE NUMBER
- EQ RJS4 WRITE NEXT SEQUENCE NUMBER
- RJS3 SX3 B6+
- LX3 X3,B5
- BX1 X3+X4
- RJS4 BX6 X1
- SA6 A1 WRITE NEXT SEQUENCE NUMBER
- EQ PPRX EXIT
- * DEFINE THE RANGE OF CHARACTERS ALLOWABLE IN EACH CHARACTER
- * POSITION IN JSN-S BY SETTING THE FIRST AND SECOND PARAMETERS
- * OF THE *JSNMASK* MACRO FOR THAT POSITION TO THE LOWEST AND
- * HIGHEST ALLOWABLE CHARACTERS FOR THAT POSITION.
- * THE FIRST PARAMETER MUST BE EQUAL TO OR HIGHER THAN *A*, AND
- * THE SECOND PARAMETER MUST BE EQUAL TO OR LOWER THAN *9*.
- * THE LOW AND HIGH DEFAULTS ARE *A* AND *9*, RESPECTIVELY.
- *
- * TO EXCLUDE A CHARACTER FROM USE IN A PARTICULAR CHARACTER
- * POSITION IN JSN-S, ADD IT TO THE LIST IN THE THIRD PARAMETER
- * OF THE *JSNMASK* MACRO FOR THAT POSITION. TO ALLOW A
- * CHARACTER TO BE USED, OMIT OR REMOVE IT FROM THE LIST.
- *
- * NOTE - IF THE LETTER *A* IS TO BE EXCLUDED, IT WILL ALSO BE
- * NECESSARY TO CHANGE THE INITIAL JSN, WHICH CAN BE FOUND AT
- * LABEL *.JSN* IN THE DECK *SET*.
- RJSA BSS 0 JSN CHARACTER EXCLUSION MASKS
- JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 1ST CHARACTER MASK (X---)
- JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 2ND CHARACTER MASK (-X--)
- JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 3RD CHARACTER MASK (--X-)
- JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 4TH CHARACTER MASK (---X)
- RLMM SPACE 4,25
- *** RLMM - REQUEST LIMIT.
- *
- * ENTRY
- *T,OR 12/ RLMM,12/ FN,18/0,18/VL
- *
- * FN SUBFUNCTION CODE.
- * RLCO CLEAR OVERFLOW FLAGS.
- * RLIT INCREMENT TIME LIMIT.
- * RLIS INCREMENT JOB STEP SRU LIMIT.
- * RLJS START JOB STEP.
- * RLTL SET TIME LIMIT
- * RLSL SET SRU LIMIT
- * RLIA INCREMENT ACCOUNT BLOCK SRU LIMIT.
- *
- * VL VALUE OF INCREMENT OR LIMIT REQUESTED
- * EXIT
- *
- *T,OR 52/ 0,8/ OF FOR SUBFUNCTION RLCO
- * OF OVERFLOW FLAGS IN SRUW BEFORE CLEARING.
- *
- *T,OR 48/ 0,12/ EF FOR SUBFUNCTIONS RLIT AND RLIS
- *
- * EF ERROR FLAG (0 IF NO ERRORS)
- *
- *T,OR 60/ 0 FOR SUBFUNCTION RLJS
- PPR RLMM
- MX3 -18 GET VALUE REQUESTED
- SB3 PPR1 PRESET RETURN ADDRESS
- BX5 -X3*X1
- LX1 24 GET SUBFUNCTION NUMBER
- SB4 X1-TRLML
- MX0 -30
- PL B4,HNG IF ILLEGAL PROCESSOR
- JP TRLM+TRLML+B4 JUMP TO PROCESSOR
- ** EXIT TO PROCESSOR WITH -
- *
- * (X0) = 30/-0,30/0
- * (X3) = 42/-0,18/0
- * (X5) = PARAMETER VALUE
- * (B3) = RETURN ADDRESS
- * SUBFUNCTION TABLE.
- TRLM BSS 0
- LOC 0
- + SA2 B7+SRUW
- EQ RLM1 (RLCO) - CLEAR OVERFLOW FLAGS
- + SA1 B7+CPLW
- EQ RLM2 (RLIT) - INCREMENT TIME LIMIT
- + SA1 B7+STLW
- EQ RLM3 (RLIS) - INCREMENT JOB STEP SRU LIMIT
- + SA2 B7+SRUW
- EQ RLM8 (RLJS) - START JOB STEP
- + SA2 B7+CPJW (RLTL) - SET TIME LIMIT
- EQ RLM11
- + SA1 B7+SRJW (RLSL) - SET SRU LIMIT
- EQ RLM12
- + SA1 B7+STLW
- EQ RLM16 (RLIA) - INCREMENT ACCOUNT BLOCK SRU LIMIT
- TRLML BSS 0
- LOC *O
- * RETURN AND CLEAR OVERFLOW FLAGS
- RLM1 MX3 -9
- LX2 19
- BX7 -X3*X2 ISOLATE FLAGS FOR CALLER
- BX6 X3*X2 CLEAR FLAGS
- LX6 41
- SA6 A2
- JP PPR1 EXIT
- * INCREMENT TIME LIMIT.
- RLM2 BX6 X1
- SB4 RLM2.1 SET *MSB* RETURN ADDRESS
- SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
- EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
- RLM2.1 SX2 1000 CONVERT INCREMENT TO MILLISECONDS
- BX3 X6
- IX5 X2*X5
- SA4 B7+CPJW GET ACCUMULATOR AT JOB STEP START
- SA1 B7+ALMW GET VALIDATION LIMIT
- MX6 -6
- BX4 -X0*X4 JOB START
- LX6 30
- LX4 8 RESTORE FIELD SIZE
- IX3 X3+X5 REQUESTED NEW LIMIT
- BX1 -X6*X1
- BX6 X6+X1
- ZR X6,STL IF UNLIMITED VALIDATION
- LX1 -30+6+3 CONVERT AS COMCCVI BUT CONVERT TO SECONDS
- SX6 X1+KTLI*10B (X6) = VALIDATION LIMIT IN SECONDS
- IX6 X2*X6 CONVERT TO MILLISECONDS
- IX6 X6+X4 VALIDATION LIMIT
- IX1 X6-X3
- PL X1,STL IF VALIDATION .GE. REQUESTED
- SA1 A5-B1 CHECK FOR *1AJ* CALL
- BX7 X3 SAVE NEW LIMIT
- SA2 B7+EECW
- LX1 18
- BX3 X6 SET LIMIT TO VALIDATION LIMIT
- SX6 B1+
- LX6 48
- SX1 X1-3R1AJ
- NZ X1,RLM2.2 IF NOT A *1AJ* CALL
- BX3 X7 SET LIMIT TO NEW LIMIT
- BX6 X6+X2 SET VALIDATION EXTENDED FLAG
- SA6 A2+
- RLM2.2 SA1 B7+SRUW SET VALIDATION LIMIT FLAG
- MX2 1
- BX6 X1+X2
- SA6 A1
- EQ STL SET TIME LIMIT
- * INCREMENT JOB STEP SRU LIMIT.
- RLM3 MX2 -42 GET CURRENT COMPUTED LIMIT
- BX4 -X2*X1
- * CONVERT REQUESTED INCREMENT TO MICRO-UNITS*10.
- SX1 10000000/200B
- LX1 7
- IX3 X1*X5 REQUESTED INCREMENT (MICRO-UNITS*10)
- JP RLM13
- * BEGIN JOB STEP.
- RLM8 MX4 -59 CLEAR TIME LIMIT VALIDATION FLAG
- BX6 -X4*X2
- SA1 B7+MP3W ENSURE SRU ACCUMULATION ENABLED
- SA6 A2
- BX6 -X4*X1
- SA6 A1
- MX4 -42 ISOLATE SRU ACCUMULATOR
- BX4 -X4*X2
- SA1 B7+SRJW SET SRU AT JOB STEP START
- BX2 X4
- AX2 12
- BX6 X0*X1 CLEAR OLD VALUE
- BX6 X2+X6 INSERT NEW ONE
- SA6 A1
- SB3 RLM9 SET RETURN ADDRESS
- LX1 30
- MX6 -3
- BX5 -X3*X1 JOB STEP LIMIT
- BX6 -X6+X5 ADD LOWER THREE BITS FOR CHECK
- BX1 X6+X3
- SX3 -B1 PRESET UNLIMITED JOB STEP LIMIT
- ZR X1,RLM13 IF UNLIMITED JOB STEP LIMIT
- SX2 10000000/200B
- MX3 -18 RESTORE MASK
- LX2 7
- SA1 B7+STLW GET ACCOUNT BLOCK LIMIT
- LX1 18
- BX1 -X3*X1
- IX3 X2*X5 JOB STEP LIMIT (MICRO-UNITS*10)
- IX6 X2*X1
- IX6 X6-X4 ACCOUNT BLOCK LIMIT - ACCUMULATOR
- IX5 X6-X3 REMAINING - NORMAL JOB STEP
- PL X5,RLM13 IF ENOUGH IN ACCOUNT BLOCK FOR JOB STEP
- BX3 X6 USE REMAINING AS JOB STEP LIMIT
- PL X6,RLM13 IF NOT OVER ACCOUNT BLOCK LIMIT
- R= X3,TSLI ALLOW USER TO RAISE LIMIT
- IX3 X3*X2 CONVERT TO MICRO-UNITS*10
- EQ RLM13 SET SRU LIMIT
- RLM9 SA4 B7+CPTW GET CP ACCUMULATOR
- BX6 X4
- SB4 RLM9.1 SET *MSB* RETURN ADDRESS
- SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
- EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
- RLM9.1 BX4 X6
- MX2 30
- SA1 B7+CPJW SET TIME AT JOB STEP START
- AX6 8
- BX2 X2*X1
- BX6 X6+X2
- SA6 A1+
- MX3 -18 GET JOB STEP TIME LIMIT
- AX1 30
- BX5 -X3*X1
- BX1 X3-X5
- SB3 .RCPM *STL* RETURN ADDRESS
- ZR X1,STL IF LIMIT INDEFINITE
- RLM10 SX2 1000 CONVERT LIMIT VALUE TO MILLISECONDS
- IX5 X2*X5
- IX3 X4+X5 NEW COMPUTED TIME LIMIT IN MILLISECONDS
- JP STL SET TIME LIMIT
- * SET TIME LIMIT.
- RLM11 LX2 30
- BX1 X3*X2 CLEAR OLD VALUE
- BX6 X1+X5 INSERT NEW LIMIT VALUE
- LX6 30
- SA6 A2
- BX1 X3-X5
- ZR X1,STL IF INDEFINITE
- BX4 -X0*X6
- LX4 8
- JP RLM10
- * SET SRU LIMIT.
- RLM12 BX4 -X0*X1 SRU ACCUMULATOR AT JOB STEP START
- LX4 12 RESTORE 42 BIT VALUE
- LX1 30
- BX1 X3*X1 CLEAR OLD VALUE
- SX2 10000000/200B
- BX6 X1+X5 INSERT NEW VALUE
- BX1 X3-X5 CHECK FOR INDEFINITE REQUEST
- LX6 30
- SA6 A1+
- ZR X1,RLM13 IF INDEFINITE
- LX2 7
- IX3 X2*X5 CONVERT TO MICRO-UNITS*10
- * SET SRU LIMIT, CLEAR LIMIT FLAGS.
- * (X3) = INCREMENT (MICRO-UNITS*10).
- * (X4) = ACCUMULATOR (MICRO-UNITS*10).
- RLM13 SA2 B7+FPFW GET SRU VALIDATION LIMIT
- MX1 -12
- LX2 11-47
- BX2 -X1*X2
- SX0 B0+ CLEAR SRU VALIDATION LIMIT FLAG
- BX5 -X1-X2
- SX1 10000000/200B
- MX6 42
- LX1 7 MULTIPLY BY 200B
- LX6 -18 PRESET UNLIMITED SRU VALIDATION
- ZR X5,RLM14 IF SRU VALIDATION UNLIMITED
- LX2 6 CONVERT VALIDATION TO SRU-S
- SX6 KSLI*10B-KSLI*10B/100B*100B APPLY REST OF SRU FORMULA
- IX2 X6+X2 VALIDATION IN SRU-S
- IX6 X1*X2 CONVERT TO MICRO-UNITS*10
- IX2 X3+X4 ADD INCREMENT TO LIMIT
- IX1 X6-X2 VALIDATION LIMIT - REQUESTED LIMIT
- PL X1,RLM14 IF WITHIN ALLOWED RANGE
- SA1 A5-B1 CHECK FOR *1AJ* CALL
- LX1 18
- SX1 X1-3R1AJ
- MX0 1 SET SRU VALIDATION LIMIT FLAG
- ZR X1,RLM14 IF *1AJ* ALLOW FULL INCREMENT
- IX3 X6-X4 USE REMAINING VALIDATION AMOUNT
- RLM14 LX0 57-59
- SA1 B7+STLW SET NEW JOB STEP SRU LIMIT
- MX2 18 USED FOR LOW ORDER 42-BIT FIELD
- BX2 X2*X1 CLEAR OLD VALUE
- PL X3,RLM15 IF NOT INFINITE
- IX3 X6-X4 COMPUTE REMAINING VALIDATION AMOUNT
- RLM15 IX5 X3+X4 NEW SRU LIMIT
- BX6 X5+X2 INSERT NEW VALUE
- SA6 A1
- MX5 2
- SA1 B7+SRUW CLEAR SRU LIMIT FLAG
- LX5 57-59
- BX6 -X5*X1
- BX6 X6+X0 CONDITIONAL SET SRU VALIDATION LIMIT FLAG
- SA6 A1
- JP B3
- * INCREMENT ACCOUNT BLOCK SRU LIMIT.
- RLM16 MX2 18
- SX3 10000000/200B
- BX0 X2*X1 EXTRACT ACCOUNT BLOCK SRU LIMIT
- LX3 7
- BX4 -X2*X1 EXTRACT COMPUTED JOB STEP SRU LIMIT
- BX0 -X2+X0
- IX3 X3*X5 REQUESTED INCREMENT (MICRO-UNITS*10)
- ZR X0,RLM13 IF ACCOUNT BLOCK SRU UNLIMITED
- LX5 -18
- IX6 X5+X1 ADD REQUESTED INCREMENT TO LIMIT
- SA6 A1 UPDATE ACCOUNT BLOCK SRU LIMIT
- EQ RLM13 SET SRU LIMIT
- ROCM SPACE 4,35
- ** ROCM - ROLLOUT JOB.
- *
- * ENTRY
- *T, OR 12/ ROCM,1/C,11/ OP,12/ CPN,24/
- * C = 1, IF JOB AT CP/PCP *CPN* TO BE ROLLED.
- * C = 0, IF CP TO WHICH PP IS ASSIGNED TO BE ROLLED. IF AN
- * ALTERNATE CP ASSIGNMENT IS IN EFFECT, THE ALTERNATE CP
- * WILL BE USED. ROLLOUT OF A PCP MUST BE REQUESTED WITH
- * *C = 1* (ALTERNATE PCP ASSIGNMENT WILL NOT BE
- * PROCESSED WITH *C = 0*).
- * OP BIT SELECTION(S) SPECIFYING OPTION(S) REQUESTED
- * (DEFINED IN *COMSCPS*).
- * *ROTE* = BIT 36 SET = TIMED/EVENT ROLLOUT FLAG TO
- * BE SET IN *STSW*.
- * *RODS* = BIT 37 SET = DISABLE JOB FLAG TO BE SET
- * IN *STSW*.
- * *ROSC* = BIT 38 SET = SCP ROLLOUT FLAG TO BE SET
- * IN *STSW*.
- * *ROSU* = BIT 39 SET = SUSPEND JOB FLAG TO BE SET
- * IN *STSW*.
- * *ROPR* = BIT 40 SET = ROLL JOB TO PSEUDO-CONTROL
- * POINT IF POSSIBLE.
- * CPN CP/PCP NUMBER OF JOB TO BE ROLLED IF *C* SELECTED.
- *
- *T, MB 24/,12/ T,12/ EQ,12/ EV
- * T TIMED/EVENT ROLLOUT TIME.
- * EQ TIMED/EVENT EST ORDINAL.
- * EV TIMED/EVENT EVENT DESCRIPTOR.
- * MESSAGE BUFFER PARAMETERS ARE MEANINGFUL ONLY WHEN THE *ROTE*
- * OPTION IS SELECTED.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/
- * ST = 0 IF FUNCTION ACCEPTED, OTHERWISE NON-ZERO.
- *
- * HANG CONDITIONS -
- * INVALID CONNECTION STATUS IN EJT ENTRY.
- * SELECTED ROLLOUT OPTIONS ARE INVALID DUE TO THE JOB-S
- * CONNECTION STATUS.
- ERRNZ ROSR CHECK SCHEDULER ROLLOUT BIT
- ERRNZ ROTE-1 CHECK TIMED/EVENT ROLLOUT BIT
- ERRNZ RODS-2 CHECK DISABLE JOB BIT
- ERRNZ ROSC-4 CHECK SCP ROLLOUT BIT
- ERRNZ ROSU-10B CHECK SUSPEND JOB BIT
- ERRNZ ROPR-20B CHECK PSEUDO-ROLL BIT
- PPR ROCM
- * CHECK CP/PCP NUMBER SPECIFIED, DUAL CPU ACTIVITY, AND JOB
- * PRESENT AT CP/PCP.
- BX7 X1
- LX7 59-47
- PL X7,ROC0.1 IF CP/PCP NOT SPECIFIED BY CALLER
- LX7 59-35-59+47
- AX7 48 SPECIFIED CP/PCP NUMBER
- LX7 7
- TB5 X7-200B,-SCA
- SB7 X7+ CP ADDRESS
- LT B5,ROC0.1 IF CP SPECIFIED
- TB7 B5,PCPA SET PCP ADDRESS
- ROC0.1 SA3 B7+TFSW GET EJT ORDINAL
- BX7 X1 SET REJECT STATUS
- MX0 -12
- LX3 -48
- BX3 -X0*X3
- SB6 ROC0.2 SET *CPE* RETURN ADDRESS
- ZR X3,PPR1 IF NO JOB PRESENT
- TNO /DCP/CPE,DCP IF DUAL CPU PRESENT
- * GET JOB STATE AND CONNECTION STATUS AND PROCESS TIMED/EVENT
- * PARAMETERS.
- ROC0.2 SB4 TROCL
- CX6 X3,EJT CONVERT EJT ORDINAL INTO OFFSET
- TA3 X6+JSNE,EJT
- MX4 -11
- BX3 -X4*X3
- SA4 B7+TERW
- LX3 -7
- BX6 X4
- LX5 59-36
- SB6 X3+ CONNECTION STATUS
- MX1 30
- PL X5,ROC1 IF NOT TIMED/EVENT ROLLOUT
- SA2 A5+1 GET TIMED/EVENT PARAMETERS
- BX4 X1*X4 CLEAR OLD TIMED/EVENT DATA
- MX6 -24
- BX6 -X6*X2 ISOLATE EST ORDINAL AND EVENT DESCRIPTOR
- AX2 24
- BX2 -X0*X2 ISOLATE TIME
- LX2 21
- BX6 X2+X6 MERGE TIME, EST ORDINAL AND EVENT
- BX6 X4+X6 MERGE TIMED/EVENT DATA INTO *TERW*
- * VALIDATE ROLLOUT OPTION FOR CURRENT CONNECTION STATUS.
- ROC1 SA2 B6+TROC
- SX1 EXJS*2
- LX5 59-47-59+36
- AX3 59-6
- BX4 X1-X3
- BX2 X2*X5
- SX1 PCJS*2
- BX3 X1-X3
- MX1 1
- NZ X2,HNG IF INVALID OPTION
- GE B6,B4,HNG IF INVALID CONNECTION STATUS
- PL X5,ROC3 IF CP/PCP NOT SPECIFIED BY CALLER
- * CHECK FOR JOB CONDITIONS INHIBITING ROLLOUT IF CALLER
- * SPECIFIED CP/PCP.
- SB3 PPRX SET *RPC* EXIT ADDRESS
- ZR X4,ROC2 IF *EXJS* AND NOT ADVANCING/INTERLOCKED
- NZ X3,PPR1 IF NOT *PCJS* OR ADVANCING/INTERLOCKED
- ROC2 SA3 CMCL CHECK FOR MOVE IN PROGRESS
- BX2 X5
- LX3 -48
- LX2 -24-59+47
- BX4 X3-X2
- BX4 -X0*X4
- BX3 -X0*X2
- ZR X4,PPR1 IF CP/PCP MOVING
- SA1 B7+JCIW CHECK FOR ROLLOUT INHIBITED
- LX1 59-39
- NG X1,PPR1 IF *CPUPFM* ACTIVE
- TB4 B7,-SCA
- SB4 -B4
- SX7 B0+
- SB6 B1 SET *RPC* ENTRY CONDITION
- * INITIATE ROLLOUT OF PCP.
- ROC3 TA1 STSW,SCA CHECK FOR AVAILABLE RECALL SLOT
- PL B4,ROC3.1 IF NOT PCP ROLL
- MX4 -4
- BX4 -X4*X1
- ZR X4,PPR1 IF NO RECALL SLOTS AVAILABLE
- ROC3.1 SA6 A4 UPDATE *TERW*
- PL B4,ROC4 IF NOT PCP ROLL
- SA7 A5 RELEASE CALLING PP
- SB4 B7 PCPA ADDRESS FOR *RPC*
- SB5 X3 PCP NUMBER
- TEQ (/PCP/RPC,PCP,/MONITOR/HNG) IF PCP ROLL
- * CPUCIO ENTRY FOR DETACHED INTERACTIVE I/O.
- * (B6) = -1.
- * (X5) = ROLLOUT CONTROL OPTIONS.
- ROC4 SA1 B7+STSW
- SX0 B1+ CLEAR EXISTING PSEUDO-ROLLOUT ALLOWED FLAG
- LX0 31-0
- BX1 -X0*X1
- MX0 3 EXTRACT CPU STATUS
- BX6 X1
- BX3 X0*X1
- AX6 24 EXTRACT CURRENT ROLLOUT STATUS
- MX0 -2
- BX0 -X0*X6
- MX2 5
- BX6 -X0
- NZ X0,ROC5 IF ROLLOUT REQUESTED ALREADY SET
- MX6 -1
- ZR X3,ROC5 IF NULL STATUS
- MX6 -2
- ROC5 LX6 24
- LX0 59-0
- BX6 -X6+X1
- BX0 X2*X0
- LX5 59-40-59+47
- BX2 X2*X5 GET ROLLOUT FLAGS
- MX4 -4
- BX2 -X0*X2 DISALLOW PSEUDO-ROLL IF MULTIPLE *ROCM*-S
- LX2 31-59
- BX6 X6+X2
- SA6 A1+
- LX1 -4
- BX3 -X4*X1 REQUESTS IN PQ, RQ, BQ, CQ PLUS TAPES
- LX1 -4
- BX0 -X4*X1 REQUESTS IN BQ AND CQ
- IX3 X3-X0 REQUESTS IN PQ, RQ, AND TAPE ACTIVITY
- ZR X3,ROC11 IF NO REQUESTS IN PQ OR RQ
- MX0 -7
- SX3 RQRL
- MX4 -12
- SB4 B0
- * DELETE REQUESTS FROM RQ AND PQ.
- ROC6 ZR X3,ROC10 IF END OF QUEUE
- SA2 X3 READ NEXT QUEUE ENTRY
- BX3 -X4*X2
- ROC7 BX5 X0*X3
- SB5 X5
- NE B5,B7,ROC6 IF NOT THIS CP
- SA1 X3 READ NEXT ENTRY
- NZ B4,ROC9 IF PROCESSING PQ
- LX1 12
- BX6 -X4*X1
- SX6 X6-PTRF
- LX1 -12
- ZR X6,ROC6 IF ROLLOUT INHIBITED
- BX2 X4*X2 DELINK ENTRY FROM SYSTEM-WIDE QUEUE
- BX3 -X4*X1
- ROC8 BX6 X3+X2
- SA6 A2
- EQ ROC7 CONTINUE
- ROC9 BX6 X4*X1
- NZ X6,ROC6 IF PRIORITY PP REQUEST
- BX2 X4*X2 DELINK ENTRY FROM SYSTEM-WIDE QUEUE
- BX3 -X4*X1
- EQ ROC8 COMPLETE PROCESS
- ROC10 SX3 PQRL
- SB4 B4+1
- EQ B4,B1,ROC6 IF PQ NOT PROCESSED
- ROC11 SX5 B0 SET NO CLEAR OF ROLLOUT CPU STATUS
- NG B6,.DCPM IF *CPUCIO* REQUEST
- SB6 B1 SET TO CLEAR OUTPUT REGISTER
- EQ .DCPM DROP CPU
- SPACE 4,10
- * THE FOLLOWING TABLE CONTAINS AN ENTRY FOR EACH CONNECTION
- * STATUS. EACH ENTRY INDICATES WHAT ROLLOUT CONTROL OPTIONS
- * ARE INVALID FOR JOBS HAVING THE CORRESPONDING CONNECTION
- * STATUS. THE OPTION IS INVALID IF THE FLAG IS SET.
- TROC BSS 0
- VFD 12/ROSU+RODS,48/0 CONNECTION STATUS = *NICS*
- VFD 12/RODS,48/0 CONNECTION STATUS = *DTCS*
- VFD 12/0,48/0 CONNECTION STATUS = *OLCS*
- TROCL EQU *-TROC MAXIMUM CONNECTION STATUS + 1
- ERRNZ TROCL-MXCS ERROR IN TABLE DEFINITION
- RPNM SPACE 4,30
- *** RPNM - READ P REGISTER/BREAKPOINT.
- *
- * READ P REGISTER.
- *
- * ENTRY
- *T, OR 12/ RPNM,30/,18/ 0
- *
- * EXIT
- *T, OR 12/ 0,12/ STAT,12/ CP,24/ P
- *
- * STAT BYTE 0 OF STSW OF THE ACTIVE JOB.
- * CP CONTROL POINT NUMBER OF JOB CURRENTLY ACTIVE ON
- * CPU-0 (UNLESS ASSIGNED JOB IS ACTIVE).
- * P PROGRAM ADDRESS OF ACTIVE JOB.
- *
- * BREAKPOINT.
- *
- * ENTRY
- *T, OR 12/ RPNM,30/ 0,18/ BA
- *
- * BA BREAKPOINT ADDRESS.
- *
- * EXIT
- *T, OR 12/ 0,3/ ST,33/ 0,12/ RV
- *
- * BA IS COMPARED TO THE PROGRAM COUNTER OF THE JOB TO
- * WHICH THE CALLING PP IS ASSIGNED.
- *
- * ST = 0 IF COMPARISON FAILS.
- * ST = CPU STATUS FROM *STSW* IF COMPARISON SUCCEEDS.
- * RV = 1 IF COMPARISON FAILS.
- * RV = 0 IF COMPARISON SUCCEEDS.
- PPR RPNM,,,DCP
- SA3 CPAL+A0 ACTIVE JOB
- SA2 B2 PROGRAM COUNTER OF ACTIVE XP
- AX3 24
- NZ X1,RPN1 IF BREAKPOINT REQUEST
- SA1 X3+STSW CONTROL POINT-S STATUS
- AX2 36 CURRENT PROGRAM COUNTER
- LX3 24 ACTIVE EXCHANGE PACKAGE
- BX2 X3+X2
- MX4 12
- BX1 X4*X1 EXTRACT CONTROL POINT STATUS
- LX1 -12
- BX7 X1+X2 FORM RESPONSE
- EQ PPR1 RETURN
- RPN1 SB5 X3 CP ASSIGNED TO CPU-0
- EQ B5,B7,RPN2 IF JOB IS EXECUTING
- SA2 B7 GET PROGRAM COUNTER FROM CP AREA
- RPN2 SA3 B7+STSW CONTROL POINT STATUS
- AX2 36
- BX0 X2-X1 COMPARE PROGRAM COUNTER TO BA
- LX3 59-56
- SX7 B1 PRESET COMPARISON FAILED
- NG X3,PPR1 IF SUBCONTROL POINT ACTIVE
- NZ X0,PPR1 IF PROGRAM COUNTER DOES NOT MATCH BA
- EQ .DCPM DROP THE CPU
- RPPM SPACE 4,30
- *** RPPM - REQUEST PPU TO BE ASSIGNED.
- *
- * ENTRY
- *T, OR 12/ RPPM, 8/, 1/A, 1/S, 1/D, 1/P, 36/
- *T, MB 60/ IR
- *T, MB+1 1/Q,59/ PAR
- *
- * IR INPUT REGISTER OF PP, CONTROL POINT NEED NOT BE SET.
- * P PP PRIORITY REQUEST.
- * D IF SET, DROP PP.
- * S IF SET, SPECIAL *1VP* REQUEST FOR PARTNER PP-S.
- * THIS REQUEST MUST ALSO BE A PRIORITY REQUEST.
- * A IF SET, ASSIGN PP TO SYSTEM CONTROL POINT.
- * Q RECALL FLAG, SET BY *CPUMTR* WHEN CALL IS QUEUED.
- * PAR PARAMETER DATA TO BE PASSED TO ASSIGNED PP IN *MB*.
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 12/ ST2, 24/
- * ST = ADDRESS OF ASSIGNED PPU-S INPUT REGISTER.
- * ST = ADDRESS OF REQUEST IN RECALL STACK IF NOT ASSIGNED.
- * ST = 0 IF RECALL STACK FULL.
- * ST = 0 IF PRIORITY REQUEST AND NO PP AVAILABLE.
- * ST = 1 IF *CIO* REQUEST PROCESSED.
- * ST2 = ADDRESS OF SECOND ASSIGNED PP-S INPUT REGISTER, IF
- * PARTNER PAIR ASSIGNED FOR SPECIAL *1VP* REQUEST.
- *
- * NOTE -
- * THE AUTO RECALL BIT IN THE CALLING PP-S INPUT
- * REGISTER IS PROPAGATED TO THE RECALLED REQUEST
- * AND THE AUTO RECALL BIT IS REMOVED FROM THE
- * CALLING PP-S INPUT REGISTER, IF THE DROP-PP
- * OPTION IS SET.
- *
- * A REJECT STATUS WILL BE RETURNED ON A PRIORITY PP REQUEST
- * IF THERE IS CURRENTLY A PRIORITY REQUEST IN THE QUEUE.
- * THIS LIMITS THE NUMBER OF PRIORITY REQUESTS IN THE QUEUE
- * TO ONE, WHICH WILL ALWAYS BE AT THE TOP, AND WILL BE THE
- * NEXT ENTRY TO BE PROCESSED WHEN A PP BECOMES AVAILABLE.
- * THE PRIORITY PP REQUEST OPTION IS MEANT TO BE USED
- * ONLY BY PP-S THAT REQUIRE KNOWLEDGE OF THE PP TO WHICH
- * ITS REQUEST WAS ASSIGNED (SUCH AS *DSD*, *1MT*, ETC.).
- * USAGE OF THIS OPTION FOR OTHER PURPOSES WILL SERIOUSLY
- * IMPACT PERFORMANCE, AND MAY CAUSE SYSTEM DEADLOCK.
- *
- * * PP HUNG.* WILL OCCUR IF MB = 0.
- PPR RPPM
- * NOTE - THIS SWITCH LOGIC IS ALSO USED IN THE *DCP* BLOCK.
- LX5 59-39
- TX4 A5-1,-SP
- PL X5,RPP0.1 IF NOT FORCED CP ASSIGNMENT
- TB7 SCA SET SYSTEM CONTROL POINT
- RPP0.1 ZR X4,RPP1 IF PSEUDO PP CALL
- TB4 B7,-SCA
- ZR B4,RPP1 IF REQUEST FOR SYSTEM CONTROL POINT
- SB4 A0-CPAL-1
- SA4 -B4
- AX4 24
- SB4 X4+
- NE B4,B7,RPP1 IF NO CPU SWITCH REQUIRED
- TNO /DCP/SAX,DCP
- RPP1 SA4 A5+B1 READ REQUEST
- LX1 59-36
- SB3 RPP7 *APQ* *ACQ* RETURN ADDRESS
- ZR X4,HNG IF PP CALL ZERO
- SB4 B0+ PRESET REQUEST TO BE QUEUED
- PL X1,RPP2 IF NOT PRIORITY PP REQUEST
- SB4 -1 PRESET NO QUEUEING
- RPP2 LX1 36-37
- PL X1,RPP4 IF NO DROP PP
- SX7 B1
- SB3 .DPPM *APQ* *ACQ* RETURN ADDRESS
- SA1 A5-B1 READ INPUT REGISTER
- LX7 41
- BX5 X7*X1 PROPAGATE AUTO RECALL STATUS
- BX4 X4+X5
- BX6 -X7*X1 CLEAR AUTO RECALL BIT FROM *IR*
- SA6 A1
- RPP4 SA1 B7+STSW FETCH CP STATUS WORD
- MX0 -4
- BX6 X4
- LX1 -4
- LX4 18
- BX2 -X0*X1 RECALL COUNT
- LX1 4-48
- BX3 -X0*X1 PP COUNT
- LX1 48-60+59-24
- NZ X7,RPP5 IF DROP OPTION
- TB5 B7,-SCA
- SX0 X2-NPPCP-1
- ZR B5,RPP5 IF SYSTEM CONTROL POINT
- NO
- IX0 X0+X3
- RPP5 PL X0,PPR1 IF LIMIT OF PP-S
- NG X1,RPP10 IF ROLLOUT REQUESTED
- RPP6 SX3 X4-3RCIO
- ZR X3,RPP8 IF *CIO* REQUEST
- SA3 A5+2 MB+1 TO MB
- BX7 X3
- SA7 APQA
- SX3 X4-3R1VP
- NZ X3,APQ IF NOT *1VP* REQUEST
- SA2 A5 CHECK FOR SPECIAL REQUEST
- LX2 59-38
- TNG X2,(/NVE/AVP,NVE,/MONITOR/HNG) IF SPECIAL REQUEST
- EQ APQ ASSIGN PP
- RPP7 ZR X1,RPP9 IF NO PP ASSIGNED AND PRIORITY REQUEST
- BX7 X1 RETURN ASSIGNMENT ADDRESS
- LX7 36
- SA7 A5 STORE *OR*
- EQ MTRX RETURN
- RPP8 SA4 A5+2 SET MESSAGE BUFFER
- SA6 /CPUCIO/IR SET IR
- BX7 X4
- SA7 A6+B1 CLEAR MB
- ERRNZ /CPUCIO/MB-/CPUCIO/IR-1
- EQ /CPUCIO/CPC PROCESS *CIO* REQUEST
- RPP9 BX7 X7-X7
- NG X1,PPR1 IF REJECT ON STORAGE MOVE
- MX0 -18 CHECK FOR PRIORITY REQUEST PENDING
- SA2 PQRL
- SA2 X2
- AX2 18
- BX2 -X0*X2
- NZ X2,PPR1 IF REQUEST ALREADY PENDING
- SB3 MTRX *AQR* RETURN ADDRESS
- SX2 PRP
- * NOTE - PARAMETER WORD IS NOT SAVED IN *REPW*.
- EQ AQR ASSIGN QUEUE REQUEST
- * PUT REQUEST IN CONTROL POINT AREA IF ROLLOUT SET.
- RPP10 TX3 A5-1,-SP
- ZR X3,RPP6 IF PSEUDO-PP REQUESTING
- SX3 X4-3R1AJ
- ZR X3,RPP6 IF *1AJ*
- NG B4,RPP9 IF PRIORITY PP REQUEST
- LX1 24-59
- MX0 -4
- BX4 -X0*X1 NEXT FREE RECALL SLOT
- SB4 B7+RCCW-1
- BX7 X0*X1
- SA3 B4+X4 READ NEXT FREE RECALL SLOT
- SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
- SA4 A5+2 GET MB+1
- SX3 X3+20B
- MX6 1
- IX7 X7+X3
- BX6 X6+X4 SET RECALL FLAG
- SA7 A1 UPDATE STSW
- SA6 A3+REPW-RCCW STORE PARAMETER WORD
- SX1 A3 SET ASSIGNMENT ADDRESS
- JP B3 COMPLETE PROCESSING
- RSJM SPACE 4
- *** RSJM - REQUEST JOB SCHEDULER.
- *
- * ENTRY
- *T, OR 12/ RSJM, 12/,10/,1/R,1/F,12/,12/
- * R IF SET, RESET THE RECALL CYCLE.
- * F IF SET, QFT/EJT SCHEDULING SHOULD BE PERFORMED.
- *
- * EXIT
- *T, OR 60/ 0
- PPR RSJM
- * SET QFT/EJT SCHEDULING FLAG IN SCHEDULER CALL IF SET IN
- * *RSJM* REQUEST.
- SA7 A5 CLEAR OUTPUT REGISTER
- SX0 B1
- SA1 SJSA
- LX0 24-0
- BX6 X0*X5
- BX6 X6+X1
- SA6 A1
- LX0 25-24
- BX6 -X5*X0 ISOLATE FORCED RESET FLAG
- NZ X6,SJS IF FORCED RESET NOT SPECIFIED
- ERRNZ SJSB-SJSA-1 CODE ASSUMES *SJSB* = *SJSA* + 1
- SA6 A6+B1
- EQ SJS
- RTCM SPACE 4,105
- *** RTCM - REQUEST TRACK CHAIN.
- *
- * ENTRY
- *T, OR 12/RTCM, 1/C, 2/, 9/ EQ, 12/ TK, 1/ A, 2/, 3/ AL, 18/ SC
- * C SET CHECKPOINT UPON FUNCTION COMPLETION.
- * EQ EST ORDINAL.
- * IF EQ IS ZERO TK BYTE CONTAINS SELECTION PARAMETER.
- * TK CURRENT TRACK IF EQ IS NON-ZERO
- * TK DEVICE SELECTION PARAMETER AS FOLLOWS. (EQ IS ZERO)
- * 0 = TMPS = SELECT TEMP DEVICE.
- * 1 = INPS = SELECT INPUT FILE DEVICE.
- * 2 = OUTS = SELECT OUTPUT FILE DEVICE.
- * 3 = ROLS = SELECT ROLLOUT DEVICE.
- * 4 = DAYS = SELECT USER DAYFILE DEVICE.
- * 5 = PRIS = SELECT PRIMARY FILE DEVICE.
- * 6 = LOCS = SELECT LOCAL FILE DEVICE.
- * 7 = LGOS = SELECT LGO FILE DEVICE.
- * 10 = SROS = SECONDARY ROLLOUT FILE DEVICE.
- * 11 = R1OS = RESERVED FOR CDC.
- * 12 = R2OS = RESERVED FOR CDC.
- * 13 = TNDS = TEMPORARY NON-SHARED FILE DEVICE.
- * A ACCESS LEVEL SELECTION SPECIFIED.
- * AL ACCESS LEVEL.
- * SC SECTOR COUNT.
- * -1 IF ALL SECTORS ON DEVICE REQUESTED.
- * 0 IF REQUESTING 1 TRACK.
- *
- * A DEVICE ELIGIBLE FOR SELECTION MUST BE *ON*, HAVE ENOUGH
- * SPACE TO SATISFY THE REQUEST, MUST NOT HAVE ERROR IDLE SET,
- * AND, IF ACCESS LEVEL SELECTION IS SPECIFIED, MUST HAVE
- * THE REQUESTED ACCESS LEVEL WITHIN THE DEVICE ACCESS LEVEL
- * RANGE. THE ALGORITHM SEARCHES FOR AN ELIGIBLE DEVICE
- * STARTING WITH THE NEXT EQUIPMENT AFTER THE LAST ELIGIBLE
- * DEVICE. THE PRESENCE OF A COPY OF THE SYSTEM ON A DEVICE
- * IS CONSIDERED AS ADDITIONAL ACTIVITY IN THOSE DECISIONS
- * MADE BASED ON ACTIVITY. THIS IS DONE SUCH THAT A DEVICE
- * WITHOUT A COPY OF THE SYSTEM WILL USUALLY BE GIVEN PREFERENCE
- * OVER A DEVICE WITH THE SYSTEM PROVIDING ACTIVITY IS EQUAL.
- * HOWEVER, NON-SYSTEM DEVICES HAVE NO PREFERENCE OVER
- * SYSTEM DEVICES IN COMPARING ACTIVITIES OF ZERO.
- *
- * THE SELECTION ALGORITHM IS AS FOLLOWS.
- *
- * 1) SELECT ELIGIBLE DEVICE WITH .GT. 1/8 OF SPACE LEFT
- * AND NO ACTIVITY SET.
- * 2) SELECT ELIGIBLE DEVICE WITH .GT. 1/8 OF SPACE LEFT.
- * IF *ROLS* OR *SROS* DEVICE SELECTION, SELECT DEVICE
- * WITH .GT. 1/8 OF SPACE LEFT AND LEAST ACTIVITY.
- * 3) SELECT BEST ELIGIBLE DEVICE OF ALLOCATION TYPE.
- * 4) IF SELECTION TYPE IS *TMPS*, REJECT REQUEST AND EXIT.
- * IF SELECTION TYPE IS NOT *SROS*, SET SELECTION TYPE
- * *TMPS* AND RETURN TO STEP 1. IF SELECTION TYPE IS
- * *SROS*, SET SELECTION TYPE *ROLS* AND RETURN TO STEP
- * 1.
- *
- * EXIT
- *T, OR 12/ 0, 12/ EQ, 12/ TKE, 12/ SCE, 12/ TKF
- *
- * EQ EST ORDINAL ASSIGNED.
- * ( = 4000 IF NO EQUIPMENT ASSIGNED).
- * TKE TRACK NUMBER OF EOI SECTOR.
- * SCE SECTOR NUMBER OF EOI SECTOR.
- * (REJECT REASON CODE IF NO TRACKS ALLOCATED).
- * ( = 1 IF REJECT BECAUSE OF TRACK LIMIT).
- * ( = 2 IF REJECT BECAUSE OF ACCESS LEVEL CONFLICT).
- * TKF FIRST TRACK ASSIGNED.
- * ( = 0 IF NO TRACKS ALLOCATED).
- * BITS 59 AND 57 OF OR WILL BE SET ALONG WITH THE SELECTED
- * EST ORDINAL IF MONITOR SELECTED AN INDEPENDENT
- * SHARED DEVICE.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- * 1) EQUIPMENT NOT MASS STORAGE OR OUT OF EST.
- * 2) ECS ADDRESS OF MST SET WHEN NOT MULTI-MAINFRAME MODE.
- * 3) IF CURRENT TRACK IS NOT RESERVED OR IS LINKED.
- * 4) IF DEVICE SELECTION PARAMETER IS OUT OF RANGE.
- *
- * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
- * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
- * BEFORE THE RTCM IS ISSUED TO CPUMTR.
- PPR RTCM,(/ISD/CHR,ISD,/LSPMMF/CME,LSPMMF,/MONITOR/PMR),RTC
- ,,FEX
- SCDM SPACE 4,10
- ** SCDM - SEARCH CENTRAL DIRECTORY.
- *
- * ENTRY
- *T,OR 12/ SCDM, 48/ 0
- *T,MB 42/ EPN, 18/ 0
- * EPN ENTRY POINT NAME.
- *
- * EXIT
- *T,OR 42/ 0, 18/ADDR
- *T,MB 42/ EPN, 18/ 0
- * ADDR ADDRESS OF PST ENTRY.
- * EPN ENTRY POINT NAME.
- PPR SCDM,,,FEX
- SA2 A5+1 GET ENTRY POINT NAME
- SB6 PPR1 SET *SCD* RETURN ADDRESS
- EQ SCD SEARCH CENTRAL DIRECTORY
- SCSM SPACE 4,45
- *** SCSM - SET CHANNEL STATE.
- *
- * ENTRY
- *T, OR 12/ SCSM,12/ EQ,12/ CH1,12/ SF,12/ CH2
- *
- * EQ EST ORDINAL.
- * CH1 CHANNEL 1 DATA.
- * FOR SUBFUNCTIONS *UPSS*, *DWSS*, *SUCS*, *SICS*,
- * *DAPS* AND *EAPS* -
- * CHANNEL NUMBER (INCLUDING CONCURRENCY FLAG).
- * FOR SUBFUNCTION *SCHS* -
- * DATA TO BE STORED IN CHANNEL 1 FIELD.
- * FOR SUBFUNCTION *RVCS* -
- * UNUSED.
- * SF SUBFUNCTION.
- * UPSS = 0 = REINSTATE CHANNEL.
- * DWSS = 1 = REMOVE CHANNEL FROM SYSTEM USE.
- * SCHS = 2 = SET CHANNEL DATA.
- * SUCS = 3 = SET *UP* CHANNEL STATE.
- * SICS = 4 = SET *IDLE* CHANNEL STATE.
- * RVCS = 5 = REVERSE CHANNELS IN MST.
- * DAPS = 6 = DISABLE ACCESS PATH.
- * EAPS = 7 = ENABLE ACCESS PATH.
- * CH2 CHANNEL 2 DATA.
- * FOR SUBFUNCTION *SCHS* -
- * DATA TO BE STORED IN CHANNEL 2 FIELD.
- * FOR SUBFUNCTIONS *UPSS*, *DWSS*, *SUCS*, *SICS*,
- * *RVCS*, *DAPS* AND *EAPS* -
- * UNUSED.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/
- *
- * ST REPLY STATUS.
- *
- * FOR SUBFUNCTION *UPSS* -
- * EQ IF REQUEST HONORED.
- * 0 IF REQUEST REJECTED DUE TO NO PP AVAILABLE
- * FOR BUFFERED DRIVER OR *1MV*.
- *
- * FOR SUBFUNCTION *DWSS* -
- * EQ IF REQUEST HONORED. 4000 BIT SET IF
- * CHANNEL IS GLOBALLY DOWN.
- * 0 IF REQUEST REJECTED DUE TO *1MV* ACTIVE ON
- * DEVICE OR CHANNEL SPECIFIC REQUESTS
- * PRESENT.
- *
- * FOR SUBFUNCTIONS *SCHS*, *SUCS*, *SICS*, *RVCS* AND
- * *EAPS* -
- * EQ THERE ARE NO REJECT CONDITIONS FOR THESE
- * SUBFUNCTIONS.
- *
- * FOR SUBFUNCTION *DAPS* -
- * EQ IF REQUEST HONORED.
- * 0 IF REQUEST REJECTED DUE TO NO ALTERNATE
- * PATH TO NON-DOWN DEVICE.
- *
- * *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
- *
- * 1. UNDEFINED SUBFUNCTION.
- * 2. INVALID EST ORDINAL.
- * 3. NON-MASS STORAGE EST ORDINAL SPECIFIED FOR ANY
- * SUBFUNCTION OTHER THAN *UPSS*, *DWSS*, *SCHS* OR *SUCS*.
- * 4. CHANNEL NOT DEFINED FOR SPECIFIED DEVICE FOR ANY
- * SUBFUNCTION OTHER THAN *SCHS* OR *RVCS*.
- PPR SCSM
- BX7 X1
- LX1 -12
- MX0 -12
- BX2 -X0*X1 SUBFUNCTION
- SB4 X2-TSCSL
- PL B4,HNG IF INVALID SUBFUNCTION
- SB6 X2
- LX1 -12
- BX2 -X0*X1 CHANNEL NUMBER (CHANNEL 1 DATA)
- LX1 -12
- TB5 ESTL
- BX1 -X0*X1
- SB3 X1 EST ORDINAL
- GE B3,B5,HNG IF EST ORDINAL TOO LARGE
- SB5 B3-NOPE
- SB4 B6-SCHS
- CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
- MX6 -6
- TA3 X3+EQDE,EST
- BX5 -X0*X3
- LX5 3 MST ENTRY ADDRESS
- EQ B4,B0,SCS4 IF SUBFUNCTION *SCHS*
- PL B5,SCS0 IF EST ORDINAL IN RANGE
- NZ B3,HNG IF NOT EST ORDINAL ZERO
- BX4 X3
- MX1 -12
- LX4 -12
- BX4 -X1*X4 DEVICE MNEMONIC
- SB5 B6-RVCS
- SB4 X4-2RRD
- ZR B4,HNG IF *RD* PSEUDO-EQUIPMENT
- EQ SCS1 CONTINUE
- SCS0 SB4 B6-SUCS
- SB5 B6-RVCS
- LE B4,B0,SCS1 IF DEVICE MAY BE NON-MASS STORAGE
- ERRNZ DWSS-UPSS-1 CODE DEPENDS ON VALUE
- ERRNZ SCHS-DWSS-1 CODE DEPENDS ON VALUE
- ERRNZ SUCS-SCHS-1 CODE DEPENDS ON VALUE
- PL X3,HNG IF NOT MASS STORAGE DEVICE
- SCS1 ZR B5,SCS3 IF CHANNEL NOT SPECIFIED
- LX3 -24
- BX1 -X0*X3
- SB5 24 SET CHANNEL BYTE SHIFT COUNT
- ZR X1,SCS2 IF CHANNEL 2 NOT PRESENT
- BX4 X2-X1
- BX4 -X6*X4
- ZR X4,SCS3 IF CHANNEL 2 MATCHES SPECIFIED CHANNEL
- SCS2 LX3 -12
- BX4 X2-X3
- SB5 36 ADJUST CHANNEL BYTE SHIFT COUNT
- BX4 -X6*X4
- NZ X4,HNG IF CHANNEL 1 DOESN-T MATCH
- SCS3 SX1 3000B CHANNEL STATE MASK
- LX1 B5 POSITION CHANNEL STATE MASK
- SA3 A3 REREAD EST ENTRY WORD *EQDE*
- BX1 X1*X3 CHANNEL STATE
- SB4 48+1
- SB4 B4-B5
- SCS4 JP TSCS+B6 ENTER SUBFUNCTION PROCESSOR
- * ENTER PROCESSOR WITH -
- *
- * (A3) = ADDRESS OF EST ENTRY WORD *EQDE*.
- * (A5) = PP OUTPUT REGISTER ADDRESS.
- * (B4) = 48+1-B5.
- * (B5) = CHANNEL BYTE SHIFT COUNT.
- * (B6) = SUBFUNCTION.
- * (X0) = MASK OF -12.
- * (X1) = CHANNEL STATE POSITIONED AS IN EST ENTRY.
- * (X2) = CHANNEL NUMBER (CHANNEL 1 DATA).
- * (X3) = EST ENTRY WORD *EQDE*.
- * (X5) = MST ENTRY ADDRESS (IF MASS STORAGE).
- * (X6) = MASK OF -6.
- * (X7) = PP OUTPUT REGISTER WITH BYTE 0 CLEAR.
- TSCS BSS 0
- BSS 0 FORCE UPPER
- UPSS EQU *-TSCS
- UPSS EQU //UPSS ENSURE SUBFUNCTION CORRECT
- SB6 SCS11 *SCH* EXIT ADDRESS
- EQ SCS10 REINSTATE CHANNEL
- BSS 0 FORCE UPPER
- DWSS EQU *-TSCS
- DWSS EQU //DWSS ENSURE SUBFUNCTION CORRECT
- SA4 X5+STLL
- EQ SCS20 REMOVE CHANNEL FROM SYSTEM USE
- BSS 0 FORCE UPPER
- SCHS EQU *-TSCS
- SCHS EQU //SCHS ENSURE SUBFUNCTION CORRECT
- SA4 A5
- BX4 -X0*X4 CHANNEL 2 DATA
- EQ SCS30 SET CHANNEL DATA
- BSS 0 FORCE UPPER
- SUCS EQU *-TSCS
- SUCS EQU //SUCS ENSURE SUBFUNCTION CORRECT
- SB6 PPR1 *SCH* EXIT ADDRESS
- EQ SCS40 SET *UP* CHANNEL STATE
- BSS 0 FORCE UPPER
- SICS EQU *-TSCS
- SICS EQU //SICS ENSURE SUBFUNCTION CORRECT
- SB6 PPR1 *SCH* EXIT ADDRESS
- EQ SCS50 SET *IDLE* CHANNEL STATE
- BSS 0 FORCE UPPER
- RVCS EQU *-TSCS
- RVCS EQU //RVCS ENSURE SUBFUNCTION CORRECT
- SA1 X5+DALL
- EQ SCS60 REVERSE CHANNELS IN MST
- BSS 0 FORCE UPPER
- DAPS EQU *-TSCS
- DAPS EQU //DAPS ENSURE SUBFUNCTION CORRECT
- SX1 B0
- EQ SCS70 DISABLE ACCESS PATH
- BSS 0 FORCE UPPER
- EAPS EQU *-TSCS
- EAPS EQU //EAPS ENSURE SUBFUNCTION CORRECT
- SX1 4000B
- EQ SCS80 ENABLE ACCESS PATH
- BSS 0 FORCE UPPER
- TSCSL EQU *-TSCS
- * SUBFUNCTION *UPSS* - REINSTATE CHANNEL.
- SCS10 LX1 B4
- PL X1,PPR1 IF CHANNEL NOT DOWN ON DEVICE
- SX6 B1
- EQ SCH SET *IDLE* CHANNEL STATE
- SCS11 SB6 PPR1 *RCB* EXIT ADDRESS
- EQ RCB RECONSTRUCT CHANNEL ACCESS BYTE IN MST
- * SUBFUNCTION *DWSS* - REMOVE CHANNEL FROM SYSTEM USE.
- SCS20 LX1 B4
- NG X1,SCS26 IF CHANNEL STATE IS DOWN
- LX4 59-43
- PL X3,SCS24 IF NOT MASS STORAGE
- PL X4,SCS22 IF *1MV* NOT ACTIVE ON DEVICE
- SCS21 SX7 B0 SET REJECT STATUS
- EQ PPR1 EXIT
- SCS22 SA1 X5+DILL
- LX1 -24
- BX1 -X0*X1 *PUT* ORDINAL
- MX6 -6
- LX1 PUTLS
- ZR X1,SCS24 IF NON-BUFFERED DEVICE
- TA4 X1+UNCT,PUT
- SCS23 BX1 -X0*X4 NEXT CBT ORDINAL
- ZR X1,SCS24 IF END OF SCAN
- LX1 CBTLS
- TA4 X1+IOLK,CBT
- SA1 A4-IOLK+HSLK
- LX4 -24
- LX1 59-58
- PL X1,SCS23 IF NOT CHANNEL SPECIFIC REQUEST
- SA1 A4-IOLK+PAD4
- LX1 -54
- BX1 X2-X1
- BX1 -X6*X1
- ZR X1,SCS21 IF REQUEST IS FOR IDLED CHANNEL
- EQ SCS23 CHECK NEXT QUEUE ENTRY
- SCS24 SB6 SCS25 *SCH* RETURN ADDRESS
- SX6 3
- EQ SCH SET *DOWN* CHANNEL STATE
- SCS25 SB6 SCS26 *RCB* RETURN ADDRESS
- EQ RCB RECONSTRUCT MST CHANNEL ACCESS BYTE
- SCS26 TX1 ESTL
- SX3 NOPE-1
- SCS27 SX3 X3+B1 INCREMENT EST ORDINAL
- BX4 X3-X1
- NZ X4,SCS28 IF NOT END OF SCAN
- SX1 B1+ SET GLOBAL DOWN STATUS
- LX1 47-0
- BX7 X7+X1
- EQ PPR1 EXIT
- SCS28 CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
- MX6 -6
- TA4 EQDE+X4,EST
- PL X4,SCS27 IF NOT MASS STORAGE
- LX4 59-47
- LX5 X4,B1
- PL X4,SCS29 IF CHANNEL 1 NOT PRESENT AND ENABLED
- NG X5,SCS29 IF CHANNEL 1 DOWN
- LX4 -48
- BX4 X4-X2
- BX4 -X6*X4
- ZR X4,PPR1 IF CHANNEL IN USE ON DEVICE
- SCS29 LX5 59-35-59+47-1
- LX4 X5,B1
- PL X5,SCS27 IF CHANNEL 2 NOT PRESENT AND ENABLED
- NG X4,SCS27 IF CHANNEL 2 DOWN
- LX5 -48
- BX5 X5-X2
- BX5 -X6*X5
- ZR X5,PPR1 IF CHANNEL IN USE ON DEVICE
- EQ SCS27 CHECK NEXT EST ENTRY
- * SUBFUNCTION *SCHS* - SET CHANNEL DATA.
- SCS30 MX1 -24
- LX1 24
- BX6 X1*X3 CLEAR CHANNEL FIELDS
- LX2 12 POSITION CHANNEL 1 DATA
- BX2 X4+X2 MERGE WITH CHANNEL 2 DATA
- LX2 24
- BX6 X2+X6 MERGE NEW CHANNEL DATA
- SA6 A3 UPDATE EST ENTRY
- SB6 PPR1 SET *RCB* EXIT ADDRESS
- SA3 A3+ REREAD EST ENTRY
- EQ RCB RECONSTRUCT MST CHANNEL ACCESS BYTE
- * SUBFUNCTION *SUCS* - SET *UP* CHANNEL STATE.
- SCS40 SX6 B0+
- EQ SCH SET *UP* CHANNEL STATE
- * SUBFUNCTION *SICS* - SET *IDLE* CHANNEL STATE.
- SCS50 NZ X1,PPR1 IF CHANNEL NOT UP
- SX6 B1+
- EQ SCH SET *IDLE* CHANNEL STATE
- * SUBFUNCTION *RVCS* - REVERSE CHANNELS IN MST.
- SCS60 BX4 -X0*X1
- BX1 X0*X1
- BX6 X4
- AX4 6
- LX6 6
- BX4 X4+X6
- BX4 -X0*X4
- BX6 X4+X1
- SA6 A1
- EQ PPR1 EXIT
- * SUBFUNCTIONS *DAPS* - DISABLE ACCESS PATH.
- SCS70 SB4 B5-12
- LX4 X3,B4
- PL X4,SCS21 IF NO ALTERNATE ACCESS
- LX4 1
- NG X4,SCS21 IF ALTERNATE ACCESS IS DOWN
- * SUBFUNCTIONS *EAPS* - ENABLE ACCESS PATH.
- SCS80 SX6 4000B
- LX6 B5
- BX6 -X6*X3 CLEAR ENABLED BIT
- LX1 B5
- BX6 X1+X6 SET ENABLED FLAG IF SUBFUNCTION *EAPS*
- SA6 A3+ UPDATE EST ENTRY
- EQ PPR1 EXIT
- RCB SPACE 4,10
- ** RCB - RECONSTRUCT CHANNEL ACCESS BYTE IN MST.
- *
- * ENTRY (A3) = EST ENTRY ADDRESS.
- * (B6) = RETURN ADDRESS.
- * (X0) = MASK OF -12.
- * (X3) = *EQDE* WORD OF EST ENTRY.
- * (X5) = MST ENTRY ADDRESS.
- *
- * USES X - 0, 1, 2, 3, 4, 6.
- * A - 2, 3, 6.
- * B - 3, 5.
- RCB SB5 X2
- TB3 EST
- SB3 A3-B3
- NG X3,RCB0 IF MASS STORAGE
- NE B3,B0,RCB5 IF NOT *RD* DEVICE
- ERRNZ RDEQ CODE DEPENDS ON VALUE
- RCB0 MX6 60
- LX3 59-47
- MX1 60
- LX4 X3,B1
- PL X3,RCB1 IF CHANNEL 1 NOT PRESENT AND ENABLED
- NG X4,RCB1 IF CHANNEL 1 DOWN
- LX3 59-41-59+47
- NG X3,RCB1 IF CHANNEL 1 IS CONCURRENT
- AX3 54 CHANNEL 1
- SX6 X3+
- RCB1 LX4 59-35-59+47-1
- LX3 X4,B1
- PL X4,RCB2 IF CHANNEL 2 NOT PRESENT AND ENABLED
- NG X3,RCB2 IF CHANNEL 2 DOWN
- LX4 59-29-59+35
- AX4 54 CHANNEL 2
- NG X4,RCB2 IF CHANNEL 2 IS CONCURRENT
- SX1 X4+
- RCB2 BX3 X1
- SA2 X5+DALL
- LX3 6
- BX4 X3+X6
- PL X4,RCB4 IF BOTH CHANNELS AVAILABLE
- BX4 X1*X6
- PL X4,RCB3 IF SINGLE CHANNEL PRESENT
- SX4 B0+
- RCB3 SX3 X4+
- LX4 6
- BX4 X3+X4
- RCB4 BX4 -X0*X4
- BX1 X0*X2 UPDATE CHANNEL ACCESS BYTE IN MST
- BX6 X1+X4
- SA6 A2
- RCB5 SA3 A3 RESTORE *X3*
- SX2 B5 RESTORE *X2*
- JP B6 EXIT
- SCH SPACE 4,15
- ** SCH - SET CHANNEL STATE.
- *
- * ENTRY (A3) = EST ENTRY ADDRESS.
- * (B5) = CHANNEL BYTE SHIFT COUNT.
- * (B6) = EXIT ADDRESS.
- * (X0) = MASK OF -12.
- * (X3) = WORD *EQDE* OF EST ENTRY.
- * (X6) = CHANNEL STATE TO BE SET.
- *
- * USES X - 1, 4, 6.
- * A - 6.
- * B - 3.
- SCH SX1 3000B CHANNEL STATE MASK
- LX1 B5
- BX4 -X1*X3 CLEAR CURRENT CHANNEL STATE
- SB3 B5+9
- LX6 B3
- BX6 X6+X4 SET NEW CHANNEL STATE
- SA6 A3
- SA3 A3 UPDATED *EQDE*
- JP B6 EXIT
- SCTM SPACE 4,30
- *** SCTM - SET SYSTEM CONTROL PARAMETERS.
- *
- * ENTRY
- *T, OR 12/ SCTM,12/ SF,24/ P2,12/ P1
- *
- * SF SUBFUNCTION CODE.
- * CCSS CONVERT CPU SCHEDULING PARAMETERS.
- *
- * P1 SERVICE CLASS FOR SF = CCSS.
- *
- * P2 RESERVED.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/ 0
- *
- * ST = 0 IF FUNCTION PERFORMED.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- *
- * 1) ILLEGAL SUBFUNCTION.
- * 2) SERVICE CLASS OUT OF RANGE (CCSS).
- PPR SCTM
- BX2 X1 GET SUBFUNCTION
- AX2 36
- SB4 X2-TSCTL
- PL B4,HNG IF ILLEGAL SUBFUNCTION
- JP TSCT+TSCTL+B4 JUMP TO PROCESSOR
- * SUBFUNCTION TABLE.
- TSCT BSS 0
- LOC 0
- + MX6 -12
- ERRNZ *-CCSS TABLE POSITION DEPENDS ON VALUE
- BX4 -X6*X1 GET SERVICE CLASS
- EQ SCT1 (CCSS) - CONVERT CPU SCHEDULING PARAMETERS
- TSCTL BSS 0
- LOC *O
- * *CCSS* - CONVERT CPU SCHEDULING PARAMETERS.
- SCT1 ZR X4,HNG IF ZERO SERVICE CLASS
- SX6 X4-MXJC
- PL X6,HNG IF INCORRECT SERVICE CLASS
- SB3 SCT2 SET *CCP* RETURN ADDRESS
- EQ CCP CONVERT CPU SCHEDULING PARAMETERS
- * CHECK CONTROL POINTS FOR JOBS WITH CPU PRIORITY UPDATE
- * REQUIRED. JOBS WITH JOB ADVANCE SET ARE BYPASSED. *JACM*
- * PROCESSING WILL UPDATE THE CPU PRIORITY WHEN JOB ADVANCE IS
- * CLEARED.
- SCT2 SB7 200B INITIALIZE CONTROL POINT ADDRESS
- SCT3 SA1 B7+TFSW GET EJT ORDINAL
- SA3 B7+CWQW GET CPU SCHEDULING PARAMETERS
- MX6 -12
- MX7 -9
- LX1 -48
- LX3 -27
- BX1 -X6*X1 EJT ORDINAL
- BX7 -X7*X3 *JCB* OFFSET
- ZR X1,SCT4 IF CONTROL POINT NOT OCCUPIED
- TA2 X7+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
- LX3 27
- UX0,B4 X3 UNPACK CPU PRIORITY
- SX7 B4+
- LX0 59-45
- AX7 3 JOB CPU PRIORITY WITHOUT FLAGS
- NG X0,SCT4 IF PRIORITY NOT SET FROM SERVICE CLASS
- AX2 48 SERVICE CLASS CPU PRIORITY
- IX6 X7-X2
- ZR X6,SCT4 IF CURRENT PRIORITY MATCHES SERVICE CLASS
- CX6 X1,EJT SET EJT ENTRY OFFSET
- TA1 X6+JSNE,EJT GET JOB ADVANCE STATUS
- SX5 X2 SET CPU PRIORITY
- LX1 59-6
- SB3 SCT4 SET *SPR* RETURN ADDRESS
- PL X1,SPR IF JOB ADVANCE NOT SET
- SCT4 SB7 B7+200B ADVANCE CONTROL POINT ADDRESS
- TX7 B7,-SCA
- NZ X7,SCT3 IF NOT SYSTEM CONTROL POINT
- EQ PPR1 CLEAR OUTPUT REGISTER AND EXIT
- SFBM SPACE 4
- *** SFBM - SET FILE BUSY.
- *
- * ENTRY
- *T, OR 12/ SFBM,12/,12/ EQ,6/,18/ ADDR
- *T, MB 42/ FILE NAME,18/
- * ADDR NFL ADDRESS OF FNT ENTRY.
- * EQ IF EQ .NE. 0, SET IT IN THE EST ORDINAL
- * FIELD OF THE FST IF THE FILE IS NOT BUSY. THE
- * FST IS NOT SET BUSY WHEN THIS OPTION IS USED.
- *
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/ 0
- * ST = 0 IF FILE WAS NOT PREVIOUSLY BUSY.
- * ST = 1 IF FILE WAS PREVIOUSLY BUSY.
- * ST = 2 IF COMPARISON FAILED.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- * 1) IF ADDRESS BEYOND NFL SIZE
- PPR SFBM
- SA3 B7+FLSW GET NFL/100
- MX0 -RMSK
- AX3 RSHF
- BX2 -X0*X3 RA / 100
- MX0 -18
- AX3 36
- LX3 6
- SB4 X3 NFL SIZE
- BX3 -X0*X1 NFL ADDRESS
- SB6 X1
- GT B6,B4,HNG IF BEYOND NFL SIZE
- LX2 6
- SX7 B1
- IX2 X2-X3 ABSOLUTE ADDRESS FNT
- IX3 X2+X7 ABSOLUTE ADDRESS FST
- ERX4 X3 READ FST
- BX5 X7*X4
- BX6 -X7*X4 CLEAR BUSY BIT
- LX7 36 SET BUSY STATUS
- ZR X5,PPR1 IF BUSY
- MX0 12
- LX1 24
- BX5 X0*X1
- ERX1 X2 READ FNT
- LX7 1 SET NO COMPARE STATUS
- SA4 A5+B1 READ COMPARE WORD FROM MESSAGE BUFFER
- BX4 X1-X4
- LX4 -12
- AX4 6
- NZ X4,PPR1 IF NO COMPARE
- ZR X5,SFB1 IF NO EST ORDINAL CHANGE
- SX7 B1
- BX6 -X0*X6
- BX6 X7+X6
- BX6 X5+X6
- SFB1 EWX6 X3 SET FST BUSY
- BX7 X7-X7 SET RESPONSE
- JP PPR1 EXIT
- SJCM SPACE 4,50
- *** SJCM - SELECT JOB CONTROL PARAMETERS.
- *
- * ENTRY
- *T, OR 12/ SJCM,12/ SF,24/ P2,12/ P1
- *
- * SF SUBFUNCTION CODE.
- * CPRS SET CPU PRIORITY.
- * CPUS SELECT CPU FOR JOB.
- * SCTS SET JOB CONTROL FLAG(S).
- * CCTS CLEAR JOB CONTROL FLAG(S).
- * SSIS SET SUBSYSTEM IDENTIFICATION.
- * SBKS SET PP BREAKPOINT.
- * CBKS CLEAR PP BREAKPOINT.
- * SAPS SET *CPUPFM* ACTIVE.
- * CAPS CLEAR *CPUPFM* ACTIVE.
- * SSPS SET SCHEDULING PARAMETER INDEX.
- *
- * P1 CPU PRIORITY FOR SF = CPRS.
- * 0 = SET CPU PRIORITY TO SERVICE CLASS VALUE.
- *
- * P1 CPU SELECTION FOR SF = CPUS.
- * 0 = USE ANY CPU.
- * 2 = USE CPU 0 ONLY.
- * 1 = USE CPU 1 ONLY.
- *
- * P1 6 BIT MASK FOR SF = SCTS, CCTS.
- * (APPLIED TO *JCIW* BITS 18 - 23).
- *
- * P1 SUBSYSTEM IDENTIFICATION FOR SF = SSIS.
- *
- * P1 CP NUMBER (OPTIONAL) FOR SF = SBKS.
- *
- * P1 SCHEDULING PARAMETER INDEX FOR SF = SSPS.
- *
- * P2 PP NAME (LEFT JUSTIFIED) FOR SF = SBKS.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/ 0
- *
- * ST = 0 IF FUNCTION COMPLETE.
- * ST = 1 IF FUNCTION REJECTED (SF = SBKS, CBKS ONLY).
- * BREAKPOINT DISABLED (*0BK*/*7BK* NOT CM RESIDENT).
- * ATTEMPT TO SET BREAKPOINT WHEN ONE ALREADY SET.
- * ATTEMPT TO CLEAR BREAKPOINT WHEN NONE IS SET.
- * LIBRARY IS LOCKED (*SYSEDIT* RUNNING).
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- * 1) REQUESTED CPU PRIORITY .GE. *MPRS* (CPRS).
- * 2) REQUESTED CPU PRIORITY .LT. *LJCS* (CPRS).
- * 3) REQUESTED CPU SELECTION .GT. 2 (CPUS).
- PPR SJCM
- MX3 -12
- BX5 -X3*X1 EXTRACT PARAMETER
- LX1 11-47 POSITION TO SUBFUNCTION
- MX6 -6
- SA2 B7+JCIW GET JOB CONTROL WORD
- BX1 -X3*X1 EXTRACT SUBFUNCTION
- BX6 -X6*X5
- SB4 X1-TSJCL
- PL B4,HNG IF ILLEGAL SUBFUNCTION
- JP TSJC+TSJCL+B4 JUMP TO PROCESSOR
- ** EXIT TO PROCESSOR WITH-
- *
- * (A2) = ADDRESS OF *JCIW*.
- * (X2) = CONTENTS OF *JCIW*.
- * (X3) = 48/-0,12/0.
- * (X5) = PARAMETER VALUE.
- * (X6) = LOWER 6 BITS OF PARAMETER VALUE.
- * (X7) = 0.
- * SUBFUNCTION TABLE
- TSJC BSS 0
- LOC 0
- ERRNZ *-CPRS TABLE POSITION DEPENDS ON VALUE
- + SA3 B7+CWQW GET CPU PRIORITY
- EQ SJC1 (CPRS) - SET CPU PRIORITY
- ERRNZ *-CPUS TABLE POSITION DEPENDS ON VALUE
- + SA1 B7+CWQW GET CPU ASSIGNMENT FLAGS
- EQ SJC2 (CPUS) - SELECT CPU FOR JOB
- ERRNZ *-SCTS TABLE POSITION DEPENDS ON VALUE
- + LX6 23-5 POSITION BIT MASK
- BX6 X6+X2 SET REQUESTED BITS
- EQ SJC5 (SCTS) - SET JOB CONTROL FLAG(S)
- ERRNZ *-CCTS TABLE POSITION DEPENDS ON VALUE
- + LX6 23-5 POSITION BIT MASK
- BX6 -X6*X2 CLEAR REQUESTED BITS
- EQ SJC5 (CCTS) - CLEAR JOB CONTROL FLAG(S)
- ERRNZ *-SSIS TABLE POSITION DEPENDS ON VALUE
- + LX3 35-11 POSITION MASK TO BYTE 2
- LX5 35-11 POSITION PARAMETER TO BYTE 2
- EQ SJC4 (SSIS) - SET SUBSYSTEM IDENTIFICATION
- ERRNZ *-SBKS TABLE POSITION DEPENDS ON VALUE
- + SX6 1
- EQ SJC6 (SBKS) - SET PP BREAKPOINT
- ERRNZ *-CBKS TABLE POSITION DEPENDS ON VALUE
- + SX6 -1
- EQ SJC6 (CBKS) - CLEAR PP BREAKPOINT
- ERRNZ *-SAPS TABLE POSITION DEPENDS ON VALUE
- + SX6 1
- EQ SJC12 (SAPS) - SET *CPUPFM* ACTIVE
- ERRNZ *-CAPS TABLE POSITION DEPENDS ON VALUE
- + SX6 B0+
- EQ SJC12 (CAPS) - CLEAR *CPUPFM* ACTIVE
- ERRNZ *-SSPS TABLE POSITION DEPENDS ON VALUE
- + SA2 B7+TFSW GET EJT ORDINAL
- EQ SJC13 (SSPS) - SET SCHEDULING PARAMETER INDEX
- TSJCL BSS 0
- LOC *O
- * SET CPU PRIORITY.
- SJC1 SX0 B1+
- SB3 RZX SET *SPR* RETURN ADDRESS
- LX0 45-0
- ZR X5,SJC1.1 IF SET PRIORITY FROM SERVICE CLASS
- BX3 X3+X0 INDICATE PRIORITY NOT FROM SERVICE CLASS
- SX6 X5-MPRS
- SX7 X5-LJCS
- PL X6,HNG IF PRIORITY NOT VALID
- NG X7,HNG IF PRIORITY NOT VALID
- EQ SPR SET CPU PRIORITY
- SJC1.1 BX3 -X0*X3 INDICATE PRIORITY SET FROM SERVICE CLASS
- MX6 -9
- LX3 -27
- BX1 -X6*X3
- TA1 X1+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
- LX3 27
- AX1 48
- SX5 X1 SERVICE CLASS CPU PRIORITY
- EQ SPR SET CPU PRIORITY
- * SET CPU SELECTION.
- SJC2 SX6 X5-3
- MX3 -2
- LX5 24
- PL X6,HNG IF CPU SELECTION NOT VALID
- LX3 24
- BX6 X3*X1 CLEAR CPU ASSIGNMENT FLAGS
- BX6 X6+X5 MERGE SELECTION FLAGS
- TJP (/DCP/SJC,DCPC,/MONITOR/SJC3)
- SJC3 LX3 36-24
- LX5 36-24
- SA6 B7+CWQW UPDATE *CWQW*
- * SET PARAMETER IN *JCIW*.
- SJC4 BX6 X3*X2 CLEAR OLD PARAMETER
- SB0 0
- BX6 X6+X5 INSERT PARAMETER
- * COMPLETE PROCESSING OF FUNCTION.
- SJC5 BX7 X7-X7 CLEAR OUTPUT REGISTER
- SA6 A2 UPDATE *JCIW*
- EQ PPR1 RETURN
- * SET / CLEAR PP BREAKPOINT.
- SJC6 SA5 A5+ REREAD OUTPUT REGISTER
- SA3 PSTP
- SA2 PLDP FETCH PLD POINTER
- AX3 12
- LX5 24 POSITION NAME
- MX0 18
- SB4 X3-2 LWA+1 PLD
- AX2 36
- BX5 X0*X5 ISOLATE NAME
- SB3 X2
- ZR X2,SJC7 IF NO PLD POINTER (LIBRARY LOCKED)
- SA3 B3-3
- BX1 -X0*X3 *0BK* LOAD INFORMATION
- SA4 A3+B1
- AX3 42
- BX2 -X0*X4 BREAKPOINTED PP STATUS
- SX3 X3-3R"PBK0"
- PL X6,SJC8 IF SETTING BREAKPOINT
- BX5 X0*X4
- NO
- NZ X2,SJC9 IF BREAKPOINT SET
- SB0 0
- SJC7 SX7 B1 FLAG ERROR
- LX7 37
- EQ PPR1 RETURN
- SJC8 NZ X2,SJC7 IF BREAKPOINT ALREADY SET
- SJC9 NZ X3,SJC7 IF *0BK* NOT FOUND
- SJC10 SA2 B3
- GE B3,B4,SJC7 IF PP ROUTINE NOT FOUND
- BX3 X0*X2
- SB3 B3+B1 ADVANCE PLD ADDRESS
- IX3 X3-X5
- NZ X3,SJC10 IF NOT MATCHING NAME
- MX3 -12
- PL X6,SJC11 IF SETTING BREAKPOINT
- BX6 X4
- SA6 A2 RESTORE CORRECT ENTRY
- MX6 1
- SA6 A4 CLEAR OUT BREAKPOINT
- SA6 A6+B1
- EQ PPR1 RETURN
- SJC11 BX1 X5+X1 MERGE NAME AND *0BK* LOAD DATA
- BX6 -X3*X2
- BX6 X6+X1 APPEND PP LOAD ADDRESS
- SA6 A2
- SA1 A5 REREAD OUTPUT REGISTER
- BX6 X2
- SX4 B1
- BX1 -X3*X1 EXTRACT CP NUMBER (IF ANY)
- SA6 A4
- LX4 41
- BX6 -X0*X2 PP LOAD INFORMATION
- LX1 48+7
- IX6 X6+X4 ADD IN RESIDENCY FLAG
- BX6 -X4*X6
- BX6 X1+X6 MERGE IN CPA ADDRESS
- SA6 A4+B1
- EQ PPR1 RETURN
- * SET/CLEAR *CPUPFM* ACTIVE FLAG.
- SJC12 MX7 59 SET/CLEAR *CPUPFM* ACTIVE FLAG
- LX6 39-0
- LX7 39-0
- BX7 X7*X2
- BX6 X7+X6
- EQ SJC5 COMPLETE PROCESSING
- * SET SCHEDULING PARAMETER INDEX.
- SJC13 SX6 X5-MXJC*JCBE
- PL X6,HNG IF INDEX OUT OF RANGE
- LX2 12
- BX2 -X3*X2 EJT ORDINAL
- CX0 X2,EJT
- TA1 X5+EXQT,JCB GET UPPER BOUND SCHEDULING PRIORITY
- TA2 X0+SCHE,EJT GET EJT SCHEDULING DATA
- LX1 -24
- BX2 X3*X2
- BX1 -X3*X1
- BX6 X2+X1 SET SCHEDULING PRIORITY TO UPPER BOUND
- SA3 B7+CWQW GET CPU SCHEDULING PARAMETERS
- SA6 A2 UPDATE *SCHE*
- MX0 -9
- LX3 -27
- BX6 X0*X3
- BX6 X6+X5 SET PARAMETER IN *CWQW*
- LX3 59-45+27
- LX6 27
- SA6 A3 UPDATE *CWQW*
- NG X3,PPR1 IF CPU PRIORITY NOT SET FROM SERVICE CLASS
- TA1 X5+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
- SB3 RZX SET *SPR* RETURN ADDRESS
- AX1 48
- BX3 X6
- SX5 X1 SERVICE CLASS CPU PRIORITY
- EQ SPR SET CPU PRIORITY
- SMDM SPACE 4,30
- *** SMDM - SET MST DATA.
- * THIS FUNCTION PERFORMS MST UPDATING FUNCTIONS THAT DO NOT
- * REQUIRE THE MST TO BE INTERLOCKED.
- *
- * ENTRY
- *T, OR 12/ SMDM,12/ EQ,12/ PA,12/ SF,12/ PB
- *
- * EQ EST ORDINAL.
- * PA PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
- * BEING PERFORMED.
- * PA = BIT NUMBER FOR SF = CLBS/SLBS.
- * PA = ERROR STATUS FOR SF = SERS/CERS.
- * PA = TRACK NUMBER FOR SF = USTS/SFTS/CFTS.
- * PA = STATUS BITS FOR SF = SSTS.
- * PA = BYTE NUMBER FOR SF = ICTS.
- * SF SUBFUNCTION CODE.
- * SLBS = 0 = SET LOCAL BIT. (STLL)
- * CLBS = 1 = CLEAR LOCAL BIT. (STLL)
- * IUCS = 2 = INCREMENT USER COUNT FIELD. (STLL)
- * DUCS = 3 = DECREMENT USER COUNT FIELD. (STLL)
- * SERS = 4 = SET ERROR STATUS. (STLL)
- * CERS = 5 = CONDITIONALLY CLEAR ERROR STATUS. (STLL)
- * IFCS = 6 = INCREMENT FAMILY COUNT. (DULL)
- * DFCS = 7 = DECREMENT FAMILY COUNT. (DULL)
- * TFIS = 10B = TOGGLE FAMILY IDLE STATUS. (DULL)
- * USTS = 11B = UPDATE SYSTEM TABLE TRACK. (DULL)
- * SFTS = 12B = SET FAILING TRACK. (NVGL)
- * CFTS = 13B = CLEAR FAILING TRACK. (NVGL)
- * SSTS = 14B = SET EQUIPMENT STATE. (DALL)
- * ICTS = 15B = INCREMENT ERROR COUNTER. (CTLL/EDLL)
- * CTCS = 16B = CLEAR TABLES-CURRENT (ISHARED). (SDGL)
- * C1AS = 17B = CLEAR *1RU* ACTIVITY (ISHARED). (MCLL)
- * PB PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
- * BEING PERFORMED.
- * PB = BIT MASK FOR BITS TO CHANGE FOR SF = SSTS.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/
- * ST = 0, IF FUNCTION PERFORMED.
- * ST = 1 IF BIT ALREADY SET FOR SLBS.
- * ST = 1 IF MATCHING TRACK NUMBER FOR SFTS.
- * ST = 1 IF NON-MATCHING TRACK NUMBER FOR CFTS.
- * ST = 1 IF DEVICE ASSIGNED AND DOWN FOR SSTS.
- * ST = BYTE 4 OF *DULL* FOR TFIS.
- *
- * *PP HUNG.* WILL OCCUR IF -
- * 1) IF BIT NUMBER OUT OF RANGE. (SLBS/CLBS)
- * 2) IF ERROR CODE OUT OF RANGE. (SERS/CERS)
- SMDM SPACE 4,20
- ** TSMD - TABLE OF SMDM SUBFUNCTION PARAMETERS.
- * THERE IS A *TSMD* ENTRY FOR EVERY TWO CONSECUTIVE SMDM
- * SUBFUNCTION CODES. EACH ENTRY CONTAINS THE RETURN ADDRESS
- * FOR ROUTINE *CTR*. THE SECOND ENTRY IS CORRECTLY POSITIONED
- * IN THE WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING
- * THE WORD BY 30 BITS.
- *
- * THE ENTRIES ARE BUILT BY THE *SMD* MACRO.
- *
- * SMD SF1,SF2,BLOCK
- *
- * SF1,SF2 TWO CONSECUTIVE SUBFUNCTION CODES.
- * BLOCK THE NAME OF THE *CPUMTR* BLOCK THAT CONTAINS
- * THE PROCESSOR WHEN IT IS CONDITIONALLY
- * LOADED. THE DEFAULT ASSUMES THE PROCESSOR IS
- * UNCONDITIONALLY LOADED.
- SMD SFMACRO PAIRED DEFINE THE *SMD* MACRO
- TSMD BSS 0 TABLE OF SMDM OPTION PARAMETERS.
- SMD SLBS,CLBS
- SMD IUCS,DUCS
- SMD SERS,CERS
- SMD IFCS,DFCS
- SMD TFIS,USTS
- SMD SFTS,CFTS
- SMD SSTS,ICTS
- SMD CTCS,C1AS,ISD
- LOC *O
- TSMDL EQU *-TSMD END OF TABLE
- PPR SMDM
- SX4 X1 CHECK SUBFUNCTION
- ERRPL TSMDL-11B CODE ASSUMES NO SUBFUNCTION .GT. 37B
- SB5 PPRX SET ERROR EXIT ADDRESS
- LX4 -14
- SA2 X4+TSMD READ OPTION TABLE
- SB6 X4-TSMDL CHECK LEGALITY OF OPTION
- NG X4,SMD1 IF SECOND ENTRY IN OPTION TABLE WORD
- LX2 30 SHIFT TO SECOND ENTRY
- SMD1 PL B6,HNG IF ILLEGAL OPTION
- SB3 X2 SET *CTR* RETURN
- SB6 B0 SET *CTR* PARAMETER
- NG X2,HNG IF UNUSED SUBFUNCTION
- EQ /PROGRAM/CTR1 CHECK TRACK REQUEST
- * SET LOCAL MST BIT.
- SUBFUN SMDM,(SLBS,CLBS)
- SX7 X1-60
- PL X7,HNG IF BIT NUMBER OUT OF RANGE
- SA4 A3+STLL READ MST WORD
- SX7 B1
- SB3 X1
- BX2 X7*X2 CHECK FOR INCREMENT/DECREMENT
- LX1 X7,B3 POSITION MST BIT
- UX0 X0 GET SHARED STATUS
- BX6 -X1*X4
- NZ X2,SMD2 IF CLEARING BIT
- BX4 X1*X4
- BX6 X6+X1
- ZR X4,SMD2 IF BIT NOT PREVIOUSLY SET
- LX7 36 POSITION REJECT STATUS
- SMD2 SA6 A4 STORE MST WORD
- SA7 A5 STORE OUTPUT REGISTER
- NG X0,PPRX IF NON-SHARED
- TNZ X0,(/PROGRAM/CLM,MMF,/MONITOR/PPRX) IF MMF DEVICE
- EQ PPRX EXIT
- * INCREMENT/DECREMENT USER COUNTS.
- SUBFUN SMDM,(IUCS,DUCS)
- SX3 10000B
- SA4 A3+STLL READ USER COUNT WORD
- SMD3 LX2 -1 POSITION INCREMENT/DECREMENT BIT
- AX2 59
- BX2 X2-X3 (X2) = 1 IF INCREMENT, -1 IF DECREMENT
- LX3 11
- IX6 X4+X2 PERFORM INCREMENT/DECREMENT
- BX7 X4-X6 CHECK FOR OVERFLOW/UNDERFLOW
- BX7 X3*X7
- SB6 B0
- ZR X7,SMD2 IF NO OVERFLOW/UNDERFLOW
- EQ SMD8 RETURN OVERFLOW STATUS
- * SET ERROR STATUS / CONDITIONALLY CLEAR ERROR STATUS.
- SUBFUN SMDM,(SERS,CERS)
- SX7 X1-MXEC
- PL X7,HNG IF ERROR CODE OUT OF RANGE
- SA4 A3+STLL READ ERROR STATUS WORD
- LX2 -1
- MX0 -6
- LX4 -36 POSITION ERROR STATUS
- BX6 X0*X4 CLEAR OLD ERROR STATUS
- PL X2,SMD4 IF *SERS* SUBFUNCTION
- BX7 -X0*X4 COMPARE ERROR STATUS
- BX1 X7-X1
- NZ X1,PPR1 IF NOT CLEARING DIFFERENT STATUS
- SMD4 BX7 X6+X1 MERGE ERROR STATUS
- LX7 36
- EQ SMD6 STORE NEW ERROR STATUS AND EXIT
- * INCREMENT / DECREMENT FAMILY COUNT SUBFUNCTIONS.
- SUBFUN SMDM,(IFCS,DFCS)
- SA4 A3+DULL READ MST WORD
- SX3 B1+ SET INCREMENT/DECREMENT VALUE
- EQ SMD3 INCREMENT/DECREMENT FIELD
- * TOGGLE FAMILY IDLE STATUS.
- SUBFUN SMDM,(TFIS,USTS)
- LX2 -1 TEST FUNCTION CODE
- MX3 1
- SA4 A3+DULL-TDGL
- NG X2,SMD5 IF *USTS* SUBFUNCTION
- LX3 12
- BX6 X4-X3
- MX7 -48
- LX4 36
- BX7 -X7*X4
- SA6 A4 STORE RESULT
- SA7 A5 STORE OUTPUT REGISTER
- EQ PPRX EXIT TO STORE OUTPUT REGISTER
- * UPDATE SYSTEM TABLE TRACK.
- SMD5 LX4 -12
- BX4 X5*X4 CLEAR OLD SYSTEM TABLE TRACK
- BX7 X1+X4 MERGE NEW SYSTEM TABLE TRACK
- LX7 12
- SMD6 SA7 A4 STORE MST WORD
- BX7 X7-X7 CLEAR OUTPUT REGISTER
- EQ PPR1 EXIT AND STORE OUTPUT REGISTER
- * SET / CLEAR FAULTY TRACK.
- SUBFUN SMDM,(SFTS,CFTS)
- MX7 -11 CHECK TRACK WITHIN TRT
- AX3 48
- BX7 -X7*X1 CLEAR UPPER BIT OF REQUESTED TRACK
- IX7 X7-X3
- PL X7,PPR1 IF INCORRECT TRACK NUMBER
- SA4 A3+NVGL-TDGL GET CURRENT TRACK-TO-FLAW
- MX7 1
- LX1 48 POSITION TRACK NUMBER
- LX2 -1
- ERRNZ SFTS-SFTS/2*2 CODE ASSUMES *SFTS* IS EVEN
- ERRZR CFTS-CFTS/2*2 CODE ASSUMES *CFTS* IS ODD
- BX1 X1+X7 ENSURE THAT BIT 11 IS SET IN TRACK NUMBER
- MX6 12
- BX3 X6*X4
- BX6 -X6*X4
- BX3 X3-X1 COMPARE TRACK NUMBER WITH CURRENT TRACK
- SA4 A3+STLL-TDGL
- NG X2,SMD7 IF *CFTS*
- ZR X3,SMD8 IF SETTING SAME TRACK
- SX3 B0
- BX6 X1+X6 SET NEW TRACK
- SMD7 NZ X3,SMD8 IF CLEARING WRONG TRACK
- SA6 A3+NVGL-TDGL
- LX7 50-59 SET CHECKPOINT REQUEST FLAG
- BX7 X4+X7
- EQ SMD6 STORE CHECKPOINT REQUEST FLAG AND RETURN
- * SSTS - SET EQUIPMENT STATE.
- SUBFUN SMDM,(SSTS,ICTS)
- SX2 X2-SSTS
- SA4 A3+DALL-TDGL UPDATE STATE BITS IN *DALL*
- NZ X2,SMD9 IF *ICTS*
- BX7 -X5*X7 GET BIT MASK
- LX1 54-0 GET NEW STATUS
- LX7 54-0
- LX3 X4,B1 SAVE PREVIOUS STATE
- BX3 X3*X4
- BX4 -X7*X4 CLEAR BITS TO SET
- LX3 59-57
- BX7 X4+X1 MERGE BITS TO SET
- PL X3,SMD6 IF PREVIOUS STATE NOT DOWN
- SA1 A5 REREAD OUTPUT REGISTER
- MX3 -9
- LX1 24
- BX3 -X3*X1 EST ORDINAL
- CX2 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA2 X2+EQAE,EST
- BX2 -X5*X2
- ZR X2,SMD6 IF DEVICE NOT ASSIGNED
- SMD8 SX7 B1 SET REJECT STATUS
- LX7 36
- EQ PPR1 EXIT TO RETURN REJECT STATUS
- * ICTS - INCREMENT ERROR COUNTER.
- SMD9 SA2 A3+EDLL-TDGL
- SA4 PDTL
- BX6 X4
- SA6 A2 SET PACKED DATE AND TIME OF LAST ERROR
- SX6 4
- SA4 A2-B1
- ERRNZ EDLL-CTLL-1 CODE DEPENDS ON VALUE
- AX5 1 SET MASK = -3777
- IX2 X6-X1 4 - BYTE NUMBER
- LX3 X2,B1 *2
- IX3 X2+X3 *3
- LX3 2 (4 - BYTE NUMBER) * 12
- SB3 X3
- SX2 B1
- LX5 B3 POSITION MASK
- LX2 B3 POSITION INCREMENT
- BX3 X5*X4 CLEAR COUNTER FIELD
- IX7 X2+X4 INCREMENT COUNTER
- BX7 -X5*X7 MASK OFF OVERFLOW
- BX7 X7+X3 MERGE COUNTER FIELD AND REST OF WORD
- EQ SMD6 UPDATE *CTLL* WORD AND EXIT
- SPLM SPACE 4
- *** SPLM - SEARCH PERIPHERAL LIBRARY.
- *
- * ENTRY
- *T, OR 12/ SPLM,12/,5/0,1/A,18/ PN,12/
- * A IF SET, *PLD* ADDRESS AND PP NAME RETURNED ON EXIT,
- * RATHER THAN LOAD PARAMETERS.
- * PN PP PACKAGE NAME.
- *
- * EXIT
- *T, OR 12/ 0,6/ RT,6/ EQ,12/ TK,12/ SN,12/ LA (MS)
- *T, OR 12/ 0,6/ RT,18/ PA,12/ PL,12/ LA (RPL)
- *T, OR 12/ 0,6/ RT,18/ SA,12/ PL,12/ LA (SFP)
- *T, OR 12/ 0,5/0,1/1,18/ PN,24/ DA
- * EQ EST ORDINAL.
- * SA ADDRESS OF *SFP* IN *RPL*.
- * PA PROGRAM ADDRESS.
- * LA LOAD ADDRESS.
- * PL PROGRAM LENGTH.
- * TK TRACK.
- * SN SECTOR.
- * RT RESIDENCE AND TYPE CODE.
- * 0 = 12-BIT, MS RESIDENT (NPP).
- * 1 = 12-BIT, *RPL* RESIDENT.
- * 2 = *SFP*.
- * 10 = 16-BIT, *RPL* RESIDENT.
- * 14 = 16-BIT, MS RESIDENT (NPP).
- * MS RESIDENT (CPP).
- * PN PP PACKAGE NAME.
- * DA PP PACKAGE *PLD* ADDRESS (0 IF NOT FOUND).
- PPR SPLM,,,FEX
- BX6 X5
- SB6 CSM SET EXIT ADDRESS
- LX6 30 POSITION PROGRAM NAME
- SX1 B1
- BX1 X1*X6
- TZR X1,(/CPP/SPL,CPP,/MONITOR/SPL) IF NOT *PLD*/PP NAME
- SB6 SPM1 SET RETURN ADDRESS
- TEQ (/CPP/SPL,CPP,/MONITOR/SPL) SEARCH PERIPHERAL LIBRARY
- SPM1 NG X1,PPR1 IF LIBRARY LOCKED
- MX4 19
- LX4 1
- BX7 X4*X6 PROGRAM NAME AND ADDRESS FLAG
- LX7 -18
- SX1 A1 RETURN *PLD* ENTRY ADDRESS
- BX7 X7+X1
- EQ CSM CHECK FOR STORAGE MOVE
- STBM SPACE 4,30
- *** STBM - SET TRACK BIT.
- * THIS FUNCTION PERFORMS MST AND TRT UPDATING FUNCTIONS.
- * THE MST/TRT MUST BE INTERLOCKED TO PREVENT A PROGRAM MODE
- * REQUEST FROM WORKING WITH THE SAME MST/TRT.
- *
- * ENTRY
- *T, OR 12/ STBM,1/ CK,1/ RT,10/ EQ,12/ PM,12/ SF,12/
- *
- * CK IF CK = 1 SET CHECKPOINT BIT.
- * RT RETURN TRACK NOT RESERVED STATUS.
- * EQ EQUIPMENT.
- * PM PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
- * BEING PERFORMED.
- * PM = TRACK FOR SF = STFS/CTFS/STIS/CTIS/SPFS/CPFS.
- * PM = IQFT TRACK FOR SIQS SUBFUNCTIONS.
- * PM = BIT NUMBER FOR CGBS/SGBS SUBFUNCTIONS.
- * PM = NEW UNIT/COUNT FOR SOUS/SRCS SUBFUNCTIONS.
- * SF SUBFUNCTION CODE.
- * STFS = 0 = SET TRACK FLAWED STATUS.
- * CTFS = 1 = CLEAR TRACK FLAWED STATUS.
- * STIS = 2 = SET TRACK INTERLOCKED BIT.
- * CTIS = 3 = CLEAR TRACK INTERLOCKED STATUS.
- * SPFS = 4 = SET PRESERVED FILE STATUS BIT.
- * CPFS = 5 = CLEAR PRESERVED FILE STATUS BIT.
- * UTRS = 6 = UPDATE TRT FROM ECS.
- * UITS = 7 = UPDATE ISHARED TABLES.
- * IIQS = 10B = INTERLOCK IQFT TRACK.
- * SIQS = 11B = SET IQFT TRACK.
- * SGBS = 12B = SET GLOBAL MST BIT. (ACGL)
- * CGBS = 13B = CLEAR GLOBAL MST BIT. (ACGL)
- * IPAS = 14B = INCREMENT PF ACTIVITY COUNT. (DULL)
- * DPAS = 15B = DECREMENT PF ACTIVITY COUNT. (DULL)
- * SPIS = 16B = SET PF INTERLOCK. (DULL)
- * CPIS = 17B = CLEAR PF INTERLOCK. (DULL)
- * SIIS = 20B = SET *INSTALL* INTERLOCK. (DULL)
- * CIIS = 21B = CLEAR *INSTALL* INTERLOCK. (DULL)
- * SLTS = 22B = SET LONG-TERM INTERLOCK. (MCLL)
- * CDIS = 23B = CLEAR DEVICE INTERLOCK. (SDGL)
- * SDIS = 24B = SET DEVICE INTERLOCK. (SDGL)
- * SVIS = 26B = SET VERIFICATION INTERLOCK. (DULL)
- * CVIS = 27B = CLEAR VERIFICATION INTERLOCK. (DULL)
- * SOUS = 30B = SET OFFLINE DAS PARITY UNIT. (ACGL)
- * SRCS = 31B = SET REMAINING CYLINDERS. (ACGL)
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/
- * ST = 0, IF FUNCTION PERFORMED.
- * ST = 1 IF BIT ALREADY SET FOR STFS/STIS/SPFS/SGBS.
- * ST = 1 IF NO IQFT TRACK OR IQFT TRACK PREVIOUSLY INTERLOCKED
- * FOR *IIQS* OPTION.
- * ST = 1 IF CANNOT HONOR PF REQUEST DUE TO
- * PF SYSTEM INTERLOCK OR TOO MANY PFM,S ACTIVE.
- * ST = 2 IF TRACK NOT RESERVED.
- * ST = IPC FOR *SPIS* SUBFUNCTION WHERE -
- * I = 1/0, SET IF PF INTERLOCK SET BY REQUEST.
- * PC = 6/0, IF NO PFM,S ACTIVE.
- *
- * *PP HUNG.* WILL OCCUR IF -
- * 1) IF TRACK NOT RESERVED. (CTFS/STIS/CTIS/SPFS/CPFS/IIQS)
- * 2) IF TRACK NOT INTERLOCKED. (CTIS)
- * 3) IF TRACK NOT PRESERVED. (CPFS)
- * 4) IF TRACK NOT FLAWED. (CTFS)
- * 5) IF TRACK INFORMATION NOT ZERO. (STFS)
- * 6) IF MST/TRT INTERLOCK NOT SET. (SLTS/CDIS)
- * 7) IF BIT NUMBER OUT OF RANGE. (SGBS/CGBS)
- * 8) IF PARAMETER VALUE TOO LARGE. (SOUS/SRCS)
- *
- * THIS FUNCTION MAY BE REJECTED IF THE MST/TRT IS INTERLOCKED.
- * WHEN THIS OCCURS BIT 59 OF *OR* IS SET AND *PPR* WILL RECALL
- * *CPUMTR* TO RETRY THE REQUEST. THE REQUEST WILL BECOME
- * STORAGE MOVABLE WHEN IT IS REJECTED.
- * BIT 0 OF *SDGL* INTERLOCKS THE MST/TRT BETWEEN MONITOR AND
- * PROGRAM MODE.
- * FOR SHARED DEVICES BITS 1-5 INDICATES WHICH MACHINE HAS
- * THE MST/TRT INTERLOCKED IN EXTENDED MEMORY.
- * FOR INDEPENDENT SHARED DEVICES BITS 1-5 ARE USED BY *1RU*
- * TO INDICATE THE DEVICE IS INTERLOCKED IN THE LABEL.
- * THE MST/TRT INTERLOCK CONTROLS THE UPDATING OF THE TRT
- * AND MST WORDS TDGL AND ACGL.
- *
- * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
- * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
- * BEFORE THE STBM IS PROCESSED BY *CPUMTR*.
- STBM SPACE 4,20
- ** TSTB - TABLE OF STBM SUBFUNCTION PARAMETERS.
- * THERE IS A *TSTB* ENTRY FOR EVERY TWO CONSECUTIVE STBM
- * SUBFUNCTION CODES. EACH ENTRY CONSISTS OF A PARAMETER AND
- * RETURN ADDRESS FOR ROUTINE *CTR*. TWO ENTRIES ARE PACKED
- * IN A WORD SUCH THAT THE LOWER 18 AND UPPER 12 BITS FORM
- * AN ENTRY. THE SECOND ENTRY IS CORRECTLY POSITIONED IN THE
- * WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING THE
- * WORD BY 30 BITS.
- *
- * THE ENTRIES ARE BUILT BY THE *STB* MACRO.
- *
- * STB SF1,SF2,(OPTIONS),BLOCK
- *
- * SF1,SF2 TWO CONSECUTIVE SUBFUNCTION CODES.
- * OPTIONS OPTIONS TO BE PASSED TO *CTR*.
- * *DI* = SET DEVICE INTERLOCK.
- * BLOCK THE NAME OF THE *CPUMTR* BLOCK THAT CONTAINS
- * THE PROCESSOR WHEN IT IS CONDITIONALLY
- * LOADED. THE DEFAULT ASSUMES THE PROCESSOR IS
- * UNCONDITIONALLY LOADED.
- STB SFMACRO PAIRED,(DI=1) DEFINE THE *STB* MACRO
- TSTB BSS 0 TABLE OF STBM OPTION PARAMETERS.
- STB STFS,CTFS,DI
- STB STIS,CTIS,DI
- STB SPFS,CPFS,DI
- STB UTRS,UITS,DI
- STB IIQS,SIQS,DI
- STB SGBS,CGBS,DI
- STB IPAS,DPAS,DI
- STB SPIS,CPIS,DI
- STB SIIS,CIIS,DI
- STB SLTS,CDIS
- STB SDIS,25BS,DI
- STB SVIS,CVIS,DI
- STB SOUS,SRCS,DI
- LOC *O
- TSTBL EQU *-TSTB END OF TABLE
- PPR STBM,,STB
- SX4 X1 CHECK SUBFUNCTION
- ERRPL TSTBL-11B CODE ASSUME NO SUBFUNCTION .GT. 37B
- SB5 PPRX SET ERROR EXIT ADDRESS
- LX4 -14
- SA2 X4+TSTB READ OPTION TABLE
- SB6 X4-TSTBL CHECK LEGALITY OF OPTION
- NG X4,STB1 IF SECOND ENTRY IN OPTION TABLE WORD
- LX2 30 SHIFT TO SECOND ENTRY
- STB1 PL B6,HNG IF ILLEGAL OPTION
- NG X2,HNG IF UNUSED SUBFUNCTION
- SB3 X2 SET *CTR* RETURN
- UX2,B6 X2 SET *CTR* PARAMETER
- TNZ B6,(/ISD/CHR,ISD,/PROGRAM/CTR1) IF INTERLOCK NEEDED
- EQ /PROGRAM/CTR1 CHECK TRACK REQUEST
- * SET GLOBAL MST BIT.
- SUBFUN STBM,(SGBS,CGBS)
- SX7 X1-60
- PL X7,HNG IF BIT NUMBER OUT OF RANGE
- SA4 A3+ACGL READ MST WORD
- SX7 B1
- SB3 X1
- BX2 X7*X2 CHECK FOR INCREMENT/DECREMENT
- LX1 X7,B3 POSITION MST BIT
- BX6 -X1*X4
- NZ X2,STB2 IF CLEARING BIT
- BX4 X1*X4
- BX6 X6+X1
- ZR X4,STB2 IF BIT NOT PREVIOUSLY SET
- LX7 36 POSITION REJECT STATUS
- STB2 SA6 A4 STORE MST WORD
- EQ /PROGRAM/CCP1 EXIT
- * SET/CLEAR IQFT TRACK.
- * SET IQFT TRACK INTERLOCKED.
- SUBFUN STBM,(IIQS,SIQS)
- SA4 A3+ACGL READ MST WORD
- LX4 -12 POSITION OLD IQFT TRACK
- BX3 X1 NEW IQFT TRACK
- LX2 -1
- BX1 -X5*X4 OLD IQFT TRACK
- PL X2,/PROGRAM/STB2 IF *IIQS* SUBFUNCTION
- BX6 X5*X4 CLEAR OLD TRACK
- BX6 X3+X6 MERGE NEW IQFT TRACK
- LX6 12
- EQ STB2 RETURN COMPLETED STATUS
- STB3 SX7 B1
- LX7 36 SET REJECT STATUS
- EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
- * SET DEVICE INTERLOCK.
- SUBFUN STBM,(SDIS,25BS)
- LX2 -1
- UX0 X0
- NG X2,HNG IF UNUSED SUBFUNCTION
- ERRNZ SDIS-SDIS/2*2 CODE ASSUMES *SDIS* IS EVEN
- NZ X0,/PROGRAM/CSM1 IF NOT ISHARED DEVICE
- TEQ (/ISD/STB2,ISD,/MONITOR/HNG1) PROCESS ISHARED DEVICE
- * SET LONG-TERM INTERLOCK (ISHARED ONLY).
- * CLEAR DEVICE INTERLOCK.
- SUBFUN STBM,(SLTS,CDIS)
- SA4 A4 READ *SDGL* WORD
- BX1 X1-X1
- SX5 B4+
- LX2 -1
- LX4 -1
- PL X4,HNG IF DEVICE NOT INTERLOCKED
- NG X0,/PROGRAM/CCP1 IF NON-SHARED DEVICE
- TPL X2,(/ISD/STB3,ISD,/MONITOR/HNG1) IF *SLTS*
- TEQ (/ISD/STB4,ISD,/PROGRAM/CCP1) CLEAR DEVICE INTERLOCK
- * UPDATE TABLES.
- SUBFUN STBM,(UTRS,UITS)
- LX2 -1
- UX4,B3 X0
- PL X2,/PROGRAM/CCP1 IF UTRS
- NZ X4,/PROGRAM/CCP1 IF NOT ISHARED DEVICE
- SB3 B6+B3 *MRT* FWA
- TEQ (/ISD/SMU,ISD,/MONITOR/HNG1) UPDATE ISHARED TABLES
- * INCREMENT / DECREMENT DEVICE PF COUNT.
- SUBFUN STBM,(IPAS,DPAS)
- SX2 X2-IPAS
- NZ X2,STB4 IF NOT INCREMENT
- MX1 2
- SX4 B1
- LX1 42-59
- BX7 X1*X3
- NZ X7,/PROGRAM/CCP1 IF INTERLOCKED OR OVERFLOW
- SA2 A3+DULL-TDGL READ LOCAL COUNT
- LX4 36
- BX7 X1*X2
- NZ X7,HNG1 IF LOCAL INTERLOCK OR OVERFLOW
- EQ STB5 PERFORM INCREMENT
- STB4 MX1 6
- SX4 -B1
- LX1 41-59
- BX7 X1*X3
- ZR X7,HNG1 IF NO GLOBAL COUNT SET
- SA2 A3+DULL-TDGL READ LOCAL COUNT
- LX4 36
- BX7 X1*X2
- ZR X7,HNG1 IF NO LOCAL COUNT
- STB5 IX6 X3+X4 INCREMENT GLOBAL COUNT
- SA6 A3
- IX6 X2+X4 INCREMENT LOCAL COUNT
- SA6 A2
- EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
- * SET / CLEAR UTILITY INTERLOCK.
- SUBFUN STBM,(SPIS,CPIS)
- SX0 X2-SPIS 0 = SET, 1 = CLEAR UTILITY INTERLOCK
- SB4 42
- STB6 SX1 B1
- LX0 B4
- LX1 B4
- BX7 -X3*X0
- NZ X7,HNG1 IF CLEARING CLEARED INTERLOCK
- SA2 A3+DULL-TDGL
- BX6 X1-X3
- NZ X0,STB7 IF CLEARING INTERLOCK
- BX7 X1*X3
- SB3 42
- NZ X7,/PROGRAM/CCP1 IF INTERLOCK PREVIOUSLY SET
- NE B4,B3,STB7 IF NOT *SPIS* SUBFUNCTION
- MX7 7
- LX7 42-59
- STB7 BX7 X7*X3
- SA6 A3
- BX6 X2-X1
- SA6 A2
- EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
- * INSTALL INTERLOCK PROCESSING.
- SUBFUN STBM,(SIIS,CIIS)
- SX0 X2-SIIS 0 = SET INSTALL INTERLOCK
- SB4 43
- EQ STB6 SET / CLEAR INTERLOCK
- * DEVICE VERIFICATION INTERLOCK PROCESSING.
- SUBFUN STBM,(SVIS,CVIS)
- SX0 X2-SVIS 0 = SET VERIFICATION INTERLOCK
- SB4 46
- EQ STB6 SET / CLEAR INTERLOCK
- * SET OFFLINE UNIT NUMBER (*DAS* PARITY DEVICE).
- * SET REMAINING CYLINDERS / 100B (*DAS* PARITY RESTORE).
- SUBFUN STBM,(SOUS,SRCS)
- MX7 54
- BX6 X7*X1
- NZ X6,HNG IF PARAMETER VALUE TOO LARGE
- LX7 36
- LX1 36
- LX2 -1
- NG X2,STB8 IF *SRCS* SUBFUNCTION
- LX7 6
- LX1 6
- STB8 SA4 A3+ACGL-TDGL READ MST WORD
- BX6 X7*X4 CLEAR OLD VALUE
- BX6 X6+X1 SET NEW VALUE
- SA6 A4 STORE MST WORD
- MX7 0
- EQ /PROGRAM/CCP1 EXIT
- TDAM SPACE 4,25
- *** TDAM - TRANSFER DATA TO/FROM JOB - FROM TO MESSAGE BUFFER.
- * IF TRANSFER TO JOB THE FIRST WORD BEING TRANSFERRED TO
- * MUST BE 0.
- *
- * ENTRY
- *T, OR 12/ TDAM,9/0,1/T,1/C,1/R,12/ SID,6/ WC,18/ ADDRESS
- * T = 1, INCREMENT TAPE ACTIVITY IF WRITE COMPLETE.
- * C = 1, SET COMPLETION BIT SPECIFIED BY *ADDRESS*.
- * R = 0 IF READ DATA FROM SUBSYSTEM FL TO PP MESSAGE BUFFER.
- * = 1 IF WRITE DATA FROM PP MESSAGE BUFFER TO SUBSYSTEM FL.
- * SID = SUBSYSTEM IDENTIFICATION.
- * WC = NUMBER OF WORDS TO TRANSFER.
- * = REPLY CODE IF COMPLETION BIT OPTION SELECTED (*C*=1).
- * ADDRESS = RELATIVE ADDRESS OF RECEIVING BUFFER.
- * = 0, SPECIAL SUBSYSTEM RECEIVING BUFFER USED (SSCR).
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 12/ EJTO, 24/ JSN
- * ST = 0, OPERATION COMPLETE.
- * ST = 1, MOVE IN PROGRESS.
- * ST = 2, NOT READY FOR DATA.
- * ST = 3, REJECT (WRITE REQUEST TO NON-ZERO FIRST WORD)
- * ST = 4, INACTIVE OR JOB ADVANCE SET.
- * ST = 5, SCP INVALID PARAMETERS.
- * EJTO = EJT ORDINAL OF SCP IF *ST* = 5.
- * JSN = JOB SEQUENCE NUMBER OF SCP IF *ST* = 5.
- *
- * HANG CONDITIONS -
- * SPECIAL BUFFER OR SET COMPLETE BIT SPECIFIED AND SCP
- * FACILITY NOT ENABLED.
- * INCORRECT WORD COUNT.
- * LAST WORD TO BE TRANSFERED NOT IN SUBSYSTEM FL.
- * OVERFLOW INCREMENTING TAPE ACTIVITY.
- PPR TDAM
- LX1 -36
- SB3 TDA1 *RSC* RETURN ADDRESS
- MX0 -12
- SX7 B1 PRESET STORAGE MOVE - JOB ADVANCE STATUS
- SX4 X1 FLAGS
- LX1 12
- SB5 X5 SUBSYSTEM ADDRESS
- LX7 36
- BX1 -X0*X1 SUBSYSTEM IDENTIFICATION
- EQ RSC RETURN SUBSYSTEM LOCATION
- * *RSC* EXIT ADDRESSES.
- VFD 12/TDA3-TDA1,18/HNG,12/TDA3-TDA1,18/PPR1
- TDA1 SX1 ICAN
- IX1 X3-X1
- ERX1 X1 GET INTER-CONTROL POINT COMMUNICATION WORD
- SB4 X4-2 CHECK FOR SET COMPLETION BIT ONLY
- SB3 X6 SUBSYSTEM FL
- LX7 1 SET NOT READY STATUS
- TZR B5,(/MONITOR/SSR,SCP,/MONITOR/HNG) IF SPECIAL BUFFER
- TZR B4,(/MONITOR/SCB,SCP,/MONITOR/HNG) IF SET COMPLETION
- AX5 6
- PL X1,PPR1 IF NOT READY TO RECEIVE DATA
- SX5 X5
- SB3 X6 (B4) = SUB-SYSTEM FL
- AX5 12 (X5) = WORD COUNT
- SX0 B5 RELATIVE ADDRESS TO X0
- IX0 X0+X3 ABSOLUTE SUB SYSTEM ADDRESS
- SX1 X5-7 CHECK FOR LEGAL WORD COUNT
- SX5 X5-1
- BX1 -X5*X1
- SB6 B5+X5
- PL X1,HNG IF ILLEGAL WORD COUNT
- GE B6,B3,HNG IF OUTSIDE SUB-SYSTEM FL
- SX1 A5+1 MESSAGE BUFFER ADDRESS
- AX6 X7,B1
- SB4 X5+1 WORD COUNT
- IX1 X0-X1 DIFFERENCE
- ZR X4,TDA2 IF READ
- SX0 A5+B1 REVERSE TRANSFER
- IX7 X6+X7 SET REJECT STATUS
- IX3 X0+X1 SUB SYSTEM BUFFER
- ERX3 X3
- MX6 60
- BX1 X6-X1 COMPLEMENT DIFFERENCE
- NZ X3,PPR1 IF NON-ZERO FIRST WORD
- NG X3,PPR1 IF NON-ZERO FIRST WORD
- * DATA TRANSFER LOOP.
- TDA2 SB6 TDA2.2 *MSR* RETURN
- SX2 X4+ SAVE FLAGS
- TNO /CME/MSR,CME
- SB6 X1+
- TDA2.1 SB4 B4-B1 DECREMENT WORD COUNT
- SA3 X0+B4
- BX7 X3
- SA7 A3-B6
- NZ B4,TDA2.1 IF MORE TO MOVE, CONTINUE
- TDA2.2 BX7 X7-X7 SET COMPLETION STATUS
- ZR X2,PPR1 IF READ - EXIT TO STORE OUTPUT REGISTER
- LX2 59-2
- PL X2,TDA2.3 IF NOT TO INCREMENT TAPE ACTIVITY
- SA1 B7+STSW
- SX0 360B
- SX6 20B
- BX2 X0*X1 CURRENT TAPE/RECALL ACTIVITY
- IX6 X1+X6 INCREMENT TAPE ACTIVITY
- IX2 X0-X2
- ZR X2,HNG IF ACTIVITY ALREADY AT MAXIMUM
- SA6 A1+ UPDATE TAPE ACTIVITY
- * ENTRY FROM *SSR* TO START SUB-SYSTEM EXECUTIVE.
- TDA2.3 SA1 A2+CWQW-STSW GET RECALL STATUS
- SA7 A5 STORE OUTPUT REGISTER
- LX1 59-46
- SB6 A2-STSW SET JOB EXCHANGE PACKAGE ADDRESS
- NG X1,PPRX IF NOT TO RECALL CPU
- SB3 PPRX *RCC* RETURN ADDRESS
- EQ RCC RECALL CPU
- * EXIT FOR SCP NOT ACTIVE. (ALSO ENTERED HERE FROM *SSR*.)
- TDA3 SX7 B1 RETURN STATUS 4
- LX7 36+2
- EQ PPR1
- TDRM SPACE 4,25
- *** TDRM - INTERLOCK TAPE DRIVER REQUEST.
- *
- * ENTRY
- *T, OR 12/ TDRM,12/ UDTA,10/,1/B,25/
- *
- * UDTA UDT ADDRESS
- * B UNIT BUSY STATUS.
- *
- * EXIT
- *T, OR 12/ 0,48/,12/ STATUS
- *T, MB 60/ FTAB
- *T, MB+1 60/ ASCM
- *
- * STATUS 1 = REQUEST IN PROGRESS SET.
- * 0 = NO DRIVER REQUEST PRESENT, REQUEST ALREADY IN
- * PROGRESS OR COMPLETE, OR REQUEST REQUEUED.
- * FTAB *1MT* FUNCTION TABLE ENTRY IF REQUEST IN PROGRESS SET.
- * ASCM *ASCM* FUNCTION TO LOAD FIRST *1MT* OVERLAY IF REQUEST
- * IN PROGRESS SET AND PLD NOT LOCKED.
- * 0 IF REQUEST IN PROGRESS SET AND PLD INTERLOCKED.
- *
- * HANG CONDITIONS -
- * CALLING PP NOT ASSIGNED TO MAGNET CP.
- * INCORRECT UDT ADDRESS.
- PPR TDRM
- SA2 B7+JCIW
- SA4 B7+FLSW
- AX1 36 SET UDT ADDRESS
- MX0 -12
- ZR X1,HNG IF NO UDT ADDRESS
- LX2 -24
- BX6 -X0*X4
- BX2 -X0*X2 SUBSYSTEM ID
- LX6 6 FL
- MX0 -RMSK
- LX4 -RSHF
- SX6 X6-/MTX/UNITL
- BX4 -X0*X4
- SX2 X2-MTSI
- LX4 6 RA
- NZ X2,HNG IF NOT CALLED BY MAGNET
- IX6 X1-X6
- IX3 X4+X1 UDT ABSOLUTE ADDRESS
- PL X6,HNG IF UDT ENTRY NOT IN FL
- ERX1 X3 GET *UXRQ*
- ERRNZ /MTX/UXRQ
- MX0 12
- BX0 X0*X1 REQUEST STATUS
- NZ X0,PPR1 IF REQUEST ALREADY IN PROGRESS OR COMPLETE
- LX1 -36
- MX0 -6
- BX2 -X0*X1 REQUEST CODE
- SX6 X2-/MTX/MDFN
- PL X6,PPR1 IF NOT *1MT* REQUEST
- SX6 X2+/MTX/TFUN-1
- ZR X2,PPR1 IF NO REQUEST
- IX6 X4+X6 FUNCTION TABLE ENTRY ABSOLUTE ADDRESS
- LX5 53-25
- ERX2 X6 READ FUNCTION TABLE ENTRY
- BX5 X5*X2 BUSY STATUS .AND. REQUEUE ON UNIT BUSY
- LX5 59-53
- LX0 6
- PL X5,TDR2 IF NOT TO REQUEUE REQUEST
- * REQUEUE REQUEST.
- SX2 100B
- BX4 -X0*X1 COUNT OF REQUEUES WITHOUT DELAY
- IX6 X1+X2 INCREMENT REQUEUES WITHOUT DELAY
- SX4 X4-7700B
- BX1 X0*X1 CLEAR REQUEUE COUNT
- ZR X4,TDR1 IF MAXIMUM REQUEUES WITHOUT DELAY
- LX6 36
- EWX6 X3 UPDATE *UXRQ*
- EQ PPR1 EXIT TO SET OUTPUT REGISTER
- TDR1 SX6 /MTX/RBS
- LX1 36
- LX6 48
- BX6 X6+X1 SET REQUEUE ON UNIT BUSY
- EWX6 X3 UPDATE *UXRQ*
- EQ PPR1 EXIT TO SET OUTPUT REGISTER
- * SET REQUEST IN PROGRESS.
- TDR2 BX1 X0*X1 CLEAR REQUEUE COUNT
- SX6 /MTX/RIP
- LX1 36
- LX6 48
- BX7 X2
- BX6 X1+X6 SET REQUEST IN PROGRESS
- SA7 A5+B1 SET FUNCTION TABLE ENTRY
- EWX6 X3 UPDATE *UXRQ*
- MX0 6
- SX6 2L3M
- BX2 X0*X2 OVERLAY NAME THIRD CHARACTER
- LX6 42
- LX2 -12
- BX6 X6+X2 SET OVERLAY NAME
- SB6 TDR3 SET RETURN ADDRESS
- EQ SPL SEARCH FOR OVERLAY
- TDR3 SX6 B0
- R= X2,ASCM
- NG X1,TDR4 IF LIBRARY LOCKED
- NZ X5,TDR4 IF OVERLAY NOT FOUND
- LX2 48
- BX6 X2+X7 SET *ASCM* PARAMETERS
- TDR4 SX7 1 INDICATE REQUEST IN PROGRESS SET
- SA6 A5+2 SET OVERLAY PARAMETERS
- EQ PPR1 EXIT TO SET OUTPUT REGISTER
- TGPM SPACE 4,20
- ** TGPM - PROCESS REQUEST FOR *IAF* POT CHAIN
- *
- * A POT POINTER IS TAKEN OUT OF ONE OF THE *TGPM* QUEUES
- * IN *IAF*. THIS POT POINTER IS RETURNED IN THE OUTPUT
- * REGISTER. IF THERE IS NO POT POINTER IN THE QUEUE, AN
- * ERROR COUNTER IS INCREMENTED AND A REJECT IS RETURNED.
- * IF *IAF* IS UNACCESSIBLE OR ERROR FLAGS ARE SET, THE
- * OUTPUT REGISTER IS CLEARED.
- *
- * ENTRY
- *T,OR 12/ TGPM, 12/ PCL, 36/ 0.
- * PCL POT CHAIN LENGTH.
- *
- * EXIT
- *T,OR 12/ 0, 12/ PP, 36/ 0.
- * PP 7777, IF NO POTS ARE AVAILABLE,
- * 0, IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET,
- * ELSE, THE POT POINTER.
- PPR TGPM
- SB3 TGP1
- EQ CIA CHECK *IAF* ACCESSIBILITY
- TGP1 SA2 VCPT*200B+FLSW
- NZ B4,PPR1 IF *IAF* INACCESSIBLE OR ERROR FLAG SET
- SA3 TGPA GET SHORT POT CHAIN POINTER
- MX0 -RMSK
- AX1 36
- AX2 RSHF
- SB4 X1-VSCL-1
- BX2 -X0*X2
- LX2 6 (X2) = REFERENCE ADDRESS
- PL B4,TGP5 IF LONG POT CHAIN NEEDED
- SB4 -VTLP GET SHORT POT CHAIN QUEUE LIMIT
- SX5 VTSP
- TGP2 IX7 X3+X2
- ERX4 X7
- ZR X4,TGP6 IF NO POT IN *TGPM* QUEUE
- BX6 X6-X6
- EWX6 X7 CLEAR QUEUE ENTRY
- SX6 X3+1 INCREMENT QUEUE POINTER
- SB4 X6+B4
- NG B4,TGP4 IF LIMIT
- BX6 X5 RESET TO BEGINNING OF QUEUE
- TGP4 SA6 A3+
- LX4 36
- BX7 X4
- EQ PPR1 RETURN POT POINTER
- TGP5 SA3 TGPB GET LONG POT CHAIN POINTER
- SX5 VTLP
- SB4 -VTEQ GET LONG POT CHAIN QUEUE LIMIT
- EQ TGP2 CONTINUE
- TGP6 SX5 VTGR COUNT NO POT AVAILABLE
- IX5 X2+X5
- ERX2 X5
- MX7 12 SET ERROR RESPONSE
- SX6 B1
- LX7 -12
- IX6 X6+X2
- EWX6 X5
- EQ PPR1 RETURN ERROR
- TGPA CON VTSP SHORT POT CHAIN QUEUE POINTER
- TGPB CON VTLP LONG POT CHAIN QUEUE POINTER
- TIOM SPACE 4,30
- *** TIOM - TAPE I/O PROCESSOR.
- *
- * UPDATES TAPE ACCOUNTING.
- * THE PP IS CHANGED TO *MAGNET,S* CONTROL POINT.
- * IF COMPLETION CODE .NE. 0, THE SPECIFIED UDT WORD IS CLEARED
- * THE FET IS COMPLETED, AND THE ACTIVITY COUNT IS DECREMENTED.
- *
- * ENTRY
- *T, OR 12/ TIOM,12/ UDT,1/W,11/ AI,6/ AM,18/ CC
- * UDT UNIT DESCRIPTOR TABLE ADDRESS.
- * W READ/WRITE INDICATOR (0 = READ, 1 = WRITE).
- * AI ACCOUNTING INCREMENT.
- * AM ACCOUNTING MULTIPLIER.
- * IF NON-ZERO, AI*AM IS APPLIED TO MT ACCUMULATOR.
- * IF ZERO, AI IS APPLIED TO MT ACCUMULATOR.
- * CC FET COMPLETION CODE IF COMPLETING CIO REQUEST. IF
- * ZERO, THE FET AND FST WILL NOT BE SET COMPLETE AND
- * THE TAPE ACTIVITY WILL NOT BE DECREMENTED. NOTE
- * THAT A NON-ZERO VALUE MUST BE SPECIFIED ON A TAPE
- * RETURN REQUEST TO CAUSE THE TAPE ACTIVITY TO BE
- * DECREMENTED.
- *
- * EXIT
- *T, OR 12/ 0,48/ (UNCHANGED)
- *
- * HANG CONDITIONS -
- * MAGNET NOT PRESENT OR NOT ACCESSIBLE.
- * INCORRECT UDT ADDRESS.
- * NO TAPE ACTIVITY PRESENT.
- * INCORRECT FET ADDRESS.
- PPR TIOM
- * CHECK MAGNET STATUS.
- SX1 MTSI SET MAGNET SUBSYSTEM ID
- SB5 PPRX SET *REJ* RETURN ADDRESS
- SB3 TIO1 SET *RSC* NORMAL RETURN ADDRESS
- SX0 -7777B
- EQ RSC CHECK MAGNET STATUS
- * VALIDATE UDT ADDRESSES AND TAPE ACTIVITY.
- VFD 12/HNG-TIO1,18/HNG,12/HNG-TIO1,18/REJ
- TIO1 SA1 B7+STSW
- SB3 X5 SAVE FET STATUS
- LX5 -36
- BX2 -X0*X5
- SX2 X2+/MTX/UBLC *UBLC* RELATIVE ADDRESS
- IX6 X2-X6
- IX4 X3+X2 *UBLC* ABSOLUTE ADDRESS
- PL X6,HNG IF UDT WORDS NOT IN MAGNET FL
- ERRNG /MTX/UBLC-/MTX/UFRQ VALIDATE *UFRQ* IN FL
- ERRNG /MTX/UBLC-/MTX/UCIA VALIDATE *UCIA* IN FL
- ERX3 X4 READ *UBLC*
- SX6 360B
- BX6 X6*X1
- MX7 11
- ZR X6,HNG IF NO TAPE ACTIVITY PRESENT
- * UPDATE BLOCK COUNT IN UDT.
- LX7 -1
- BX6 X7*X5 BLOCKS TRANSFERRED
- LX6 -12
- PL X5,TIO2 IF UPDATING BLOCKS READ
- LX6 -24
- TIO2 IX6 X3+X6 COUNT BLOCKS READ OR WRITTEN
- EWX6 X4 UPDATE *UBLC*
- ZR B3,TIO4 IF NOT COMPLETING REQUEST
- * DECREMENT TAPE ACTIVITY AND CHECK REQUEST TYPE.
- SX6 /MTX/UBLC-/MTX/UFRQ
- IX4 X4-X6 *UFRQ* ABSOLUTE ADDRESS
- ERX3 X4 READ *UFRQ*
- SX6 20B
- IX6 X1-X6 DECREMENT TAPE ACTIVITY
- SA6 A1
- BX2 -X0*X3 *CIO* REQUEST FNT ADDRESS
- ZR X3,HNG IF NO REQUEST
- SX6 B0
- AX3 48
- EWX6 X4 CLEAR *UFRQ*
- SX3 X3-/MTX/CIO
- SX6 /MTX/UCIA-/MTX/UFRQ
- NZ X3,TIO8 IF NOT *CIO* REQUEST
- * VERIFY FNT AND FET ADDRESS.
- SA1 B7+FLSW
- IX4 X4+X6 *UCIA* ABSOLUTE ADDRESS
- ERX3 X4 READ *UCIA*
- MX7 -18
- BX6 -X0*X1 FL/100B
- LX1 -48
- BX3 -X7*X3 RELATIVE FET ADDRESS
- BX4 -X0*X1 NFL/100B
- SB4 X3+ RELATIVE FET ADDRESS
- LX6 6 FL
- LX4 6 NFL
- SB5 X6+ FL
- IX4 X2-X4
- LE B4,B1,HNG IF INCORRECT FET ADDRESS
- PL X4,HNG IF FNT ADDRESS NOT IN NFL
- * SET FST COMPLETE.
- LX1 36
- MX6 -RMSK
- SX2 X2-FSTL RELATIVE FST ADDRESS
- BX6 -X6*X1
- LX6 6 RA
- IX2 X6-X2 ABSOLUTE FST ADDRESS
- IX3 X6+X3 ABSOLUTE FET ADDRESS
- ERX1 X2 READ FST
- SX6 B1
- BX6 X1+X6 SET FST COMPLETE
- LX1 -36
- BX1 X5-X1
- BX1 -X0*X1
- NZ X1,HNG IF INCORRECT UDT ADDRESS IN FST
- EWX6 X2 UPDATE FST
- GE B4,B5,TIO4 IF FET ADDRESS NOT IN FL
- * SET FET STATUS.
- ERX1 X3 READ FET STATUS
- SX2 B3+
- MX6 -16
- BX2 -X7*X2 COMPLETION STATUS
- EQ B3,B1,TIO3 IF NORMAL COMPLETION
- LX6 2
- BX1 X6*X1 CLEAR STATUS FLAGS
- TIO3 BX6 X1+X2 MERGE COMPLETION STATUS
- EWX6 X3 UPDATE FET STATUS
- * UPDATE ACCOUNTING.
- TIO4 SA3 B7+IOAW
- LX5 -48
- MX1 -11
- BX1 -X1*X5 AI
- LX5 6
- ZR X1,TIO7 IF NO ACCOUNTING INCREMENT
- MX7 -6
- SB4 B0+ SET NO OVERFLOW
- BX7 -X7*X5 AM
- MX6 20
- ZR X7,TIO5 IF AM NOT SPECIFIED
- IX1 X7*X1
- TIO5 LX3 -20 POSITION TAPE ACCUMULATOR
- LX6 20
- BX4 X6*X3 OLD VALUE
- IX4 X4+X1 ADD INCREMENT
- BX3 -X6*X3 CLEAR OLD VALUE
- IX7 X4-X6
- NG X7,TIO6 IF NO OVERFLOW
- SB4 4 SET MT ACCUMULATOR OVERFLOW
- IX4 X4-X6 REMOVE OVERFLOW
- TIO6 BX6 X3+X4 MERGE NEW VALUE
- SB3 TIO7 SET *AIO* RETURN ADDRESS
- LX6 20
- SX2 B1 SET TAPE ACCUMULATOR
- SA6 A3 UPDATE TAPE ACCUMULATOR
- EQ AIO UPDATE SRU ACCUMULATOR
- * RECALL CPU.
- TIO7 SA1 B7+CWQW CHECK RECALL STATUS
- SB6 B7 SET EXCHANGE PACKAGE ADDRESS
- LX1 59-46
- NG X1,TIO8 IF NOT TO RECALL CPU
- SB3 TIO8 *RCC* RETURN ADDRESS
- EQ RCC RECALL CPU
- * RETURN TO MAGNET CONTROL POINT.
- TIO8 TX2 A5-1,-FP
- SX1 ALCS
- LX2 PPXES-PPCES
- LX1 36 SET ALTERNATE CP FLAG
- TA2 X2+ACPP,FPX GET *ACPP*
- SB3 CCAM-1777B
- PX6 B3,X1
- BX5 X1
- SA6 A5 SET *CCAM* REQUEST IN OUTPUT REGISTER
- EQ .CCAM CHANGE CONTROL POINT
- TRCM SPACE 4,35
- ** TRCM - PROCESS TRAP/TRACE REQUEST.
- *
- * UPDATE TRAP/TRACE CONTROL WORDS IN THE TRACE BLOCK.
- *
- * ENTRY
- *T,OR 12/ TRCM,12/ FLAGS,12/ 0,24/ WD1.
- *T,MB+0 12/ 0,24/ WD2,24/ WD3.
- *T,MB+0 12/ FN1,12/ FN2,12/ FN3,12/ FN4,12/ FN5.
- *T,MB+0 30/ 0,6/ LEN,18/ 0,6/ LOW.
- *T,MB+1 60/ VALUE.
- *
- * FLAGS -
- * BIT 47 SET IF *TRAP,MEM*.
- * BIT 46 SET IF *TRAP,CPA*.
- * BIT 45 SET IF *TRAP,NFL*.
- * BIT 44 SET IF *TRAP,MCT*.
- * BIT 43 SET IF *TRAP,DJB*.
- * BIT 42 SET IF *TRAP,EJT*.
- * BIT 41 SET IF TRAPPING ON ANY NONZERO VALUE.
- * BIT 40 SET IF *TRACE,MTR*.
- * BIT 39 SET IF *TRACE,PPU*.
- * BIT 38 SET IF *TRACE,SET,ABS*.
- * BIT 37 SET IF *TRACE,SET,CPA*.
- *
- * WD1 = ABSOLUTE ADDRESS OF WORD TO TRAP ON (*TRAP,MEM*).
- * = ADDRESS IN CPA OF WORD TO TRAP ON (*TRAP,CPA*).
- * WD2, WD3 = ABS OR CPA ADDRESSES TO TRACE (*TRACE,SET*).
- * FN1 - FN5 = FUNCTIONS TO TRACE FOR *TRACE,MTR/PPU*.
- * LEN = LENGTH OF FIELD TO CHECK FOR *TRAP,MEM/CPA*.
- * LOW = LOW BIT OF FIELD TO CHECK FOR *TRAP,MEM/CPA*.
- * VALUE = VALUE TO CHECK AGAINST FOR *TRAP,MEM/CPA*.
- PPR TRCM,(/TRACE/TRC,TRACE,/MONITOR/HNG)
- TSEM SPACE 4,20
- ** TSEM - PROCESS *IAF* REQUEST.
- *
- * THE *IAF REQUEST IS PUT IN THE *IAF* *TSEM* QUEUE.
- * IF THERE IS NO AVAILABLE QUEUE ENTRY FOR THE REQUEST,
- * AN ERROR COUNTER IS INCREMENTED AND A REJECT IS RETURNED.
- * IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET, THE OUTPUT
- * REGISTER IS CLEARED.
- *
- * ENTRY
- *T,OR 12/ TSEM,48/ .
- *T,MB 60/ *IAF* REQUEST.
- *
- * EXIT
- *T,OR 12/ 0, 12/ FLAG, 36/ 0.
- * FLAG 0, IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET,
- * .NE. 0, IF REQUEST COMPLETE.
- * 7777, IF NO AVAILABLE QUEUE ENTRY.
- *
- * IF THE REQUEST IS INVALID, THE SYSTEM WILL HANG.
- PPR TSEM
- SB3 TSE1 SET RETURN ADDRESS
- EQ CIA CHECK *IAF* ACCESSIBILITY
- TSE1 SA3 A5+1
- BX7 X3
- AX3 48
- NZ B4,TSE4 IF IAF INACCESSIBLE OR ERROR FLAG SET
- NG X3,TSE4 IF IAF GOING DOWN
- SB4 X3-2000B
- NG B4,HNG IF INVALID *TSEM* REQUEST
- SB4 X3-VMXR
- PL B4,HNG IF INVALID *TSEM* REQUEST
- SA2 VCPT*200B+FLSW
- SA1 TSEA GET *TSEM* QUEUE POINTER
- MX0 -RMSK
- AX2 RSHF
- BX2 -X0*X2
- LX2 6 (X2) = REFERENCE ADDRESS
- IX6 X1+X2
- ERX4 X6
- SB4 X1+1-VTSP
- NZ X4,TSE3 IF QUEUE ENTRY NOT AVAILABLE
- EWX7 X6 PASS ENTRY TO *IAF*
- SX6 X1+B1
- NG B4,TSE2 IF NOT AT LIMIT
- SX6 VTRP RESET TO BEGINNING OF QUEUE
- TSE2 SA6 A1
- AX7 12 SET REQUEST COMPLETE
- EQ PPR1 RETURN NON-ZERO STATUS
- TSE3 SX5 VTSR COUNT UNAVAILABLE ENTRY
- IX5 X2+X5
- ERX2 X5
- MX7 12
- SX6 B1
- LX7 -12
- IX6 X6+X2 INCREMENT ERROR COUNT
- EWX6 X5
- EQ PPR1 RETURN ERROR CODE
- TSE4 SX7 B0
- PL X3,PPR1 IF NOT A SPECIAL REQUEST
- MX7 1
- NZ X3,TSE5 IF NOT *7777* REQUEST TO SET ACCESSIBILITY
- SX6 VTSP
- BX7 X2+X7 SET IAF ACCESSIBILITY BIT
- SA7 A2
- SA6 TGPA RESET QUEUE POINTERS
- SX7 VTRP
- SX6 VTLP
- SA7 TSEA
- SA6 TGPB
- MX7 1
- LX7 -12
- EQ PPR1 RETURN NON-ZERO STATUS
- TSE5 BX6 -X7*X2 CLEAR IAF ACCESSIBILITY BIT
- SX7 X3+B1
- NZ X7,HNG IF NOT *7776* REQUEST
- SA6 A2
- EQ PPR1 RETURN
- TSEA CON VTRP *TSEM* QUEUE POINTER
- UADM SPACE 4
- *** UADM - UPDATE CONTROL POINT AREA.
- *
- * ENTRY
- *T,OR 12/ UADM,12/ CT,10/,1/ RF,1/ DF,12/,12/
- *
- *T,MB 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
- *T,MB+1 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
- * .
- * .
- * .
- *T,MB+CT-1 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
- *
- * NOTE - REQUESTS ARE PROCESSED IN REVERSE ORDER.
- *
- * CT NUMBER OF REQUESTS IN MESSAGE BUFFER
- * RF SET IF CPU TO BE RECALLED TO CONTROL POINT
- * DF DROP FLAG 0 = DROP
- * 1 = NO DROP
- *
- * SF SUBFUNCTION CODE AS DEFINED IN COMSCPS
- * CICS INCREMENT CONTROL POINT FIELD
- * CIOS INCREMENT CONTROL POINT FIELD BY ONE
- * CDOS DECREMENT CONTROL POINT FIELD BY ONE
- * CDCS DECREMENT CONTROL POINT FIELD
- * LICS INCREMENT LOW CORE FIELD
- * LIOS INCREMENT LOW CORE FIELD BY ONE
- * LDOS DECREMENT LOW CORE FIELD BY ONE
- * LDCS DECREMENT LOW CORE FIELD
- * AISS ACCOUNTING INCREMENT - IO
- * AIAD ACCOUNTING INCREMENT - ADDER
- * AIMP ACCOUNTING INCREMENT - MP
- * CSFS SET CONTROL POINT FIELD
- * FRAS ADJUST *FRC*-BASED VALUES IN *CPUMTR*
- *
- * AD ADDRESS OF WORD IN CP/LOW CORE
- * P LOW ORDER BIT POSITION OF FIELD TO UPDATE
- * W WIDTH OF FIELD TO UPDATE
- * INC 18 BIT POSITIVE VALUE TO INCREMENT/DECREMENT/SET
- *
- * FOR *FRAS* SUBFUNCTION -
- *
- *T,MB+N 12/ FRAS, 48/ DESIRED *FRC* VALUE
- *
- * THE CPU START TIME(S) AND THE WALL CLOCK BASES ARE ADJUSTED
- * BY THE DIFFERENCE BETWEEN THE DESIRED AND CURRENT VALUES OF
- * THE FREE-RUNNING COUNTER. THE REQUESTING PP-S OUTPUT
- * REGISTER IS CLEARED IMMEDIATELY, ALTHOUGH THE MONITOR
- * FUNCTION DOES NOT COMPLETE UNTIL THE FREE-RUNNING COUNTER IS
- * UPDATED (BY *DFT*). THIS IS NECESSARY TO ENSURE THAT NO
- * USER JOB IS CHARGED (OR TIME LIMITED) WHEN THE MICROSECOND
- * CLOCK IS ADVANCED BY AS MUCH AS DAYS, WEEKS, OR MONTHS.
- * NOTE THAT THE DROP-PP OPTION AND ANY FURTHER REQUESTS ARE
- * IGNORED.
- *
- * EXIT
- *T,OR 12/,12/ STAT,12/,12/,12/
- * STAT NON-ZERO IF OVERFLOW/UNDERFLOW
- * BITS INDICATE WHICH REQUESTS GAVE OVERFLOW/UNDERFLOW
- * BIT 0 = MB
- * BIT 1 = MB+1 ETC
- *
- * THE FOLLOWING DESCRIBES THE ACTION TAKEN WHEN OVERFLOW/
- * UNDERFLOW OCCURS.
- *
- * UPDATE OPTION ACTION TAKEN
- * LOW CORE LEAVE FIELD ALONE.
- * CONTROL POINT INCREMENT TO MAXIMUM VALUE - 1.
- * DECREMENT TO ZERO ON UNDERFLOW.
- * SRU UPDATES INCREMENT TO OVERFLOW VALUE - MAXIMUM
- *
- * IF ALL THE BITS ARE SET IN THE FIELD BEFORE THE UPDATE AND
- * THE FIELD WIDTH IS GREATER THAN ONE BIT, THE UPDATE OPTION
- * IS IGNORED. IF ALL THE BITS IN THE FIELD ARE SET AS A
- * RESULT OF THE UPDATE, AN OVERFLOW CONDITION IS RETURNED.
- *
- * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- * 1) TOO MANY REQUESTS.
- * 2) CONTROL POINT UPDATE AND ADDRESS NOT BETWEEN
- * *STSW* AND *CSBW*.
- * 3) LOW CORE UPDATE AND ADDRESS IS .GE. *CRTL*.
- * 4) ILLEGAL SUBFUNCTION.
- * 5) REQUEST COUNT = 0 AND NOT DROP PP OPTION.
- PPR UADM
- LX1 59-25
- PL X1,UAD0 IF NO RECALL OF THE CPU
- SA3 B7+CWQW CHECK RECALL STATUS
- SB6 B7 SET EXCHANGE PACKAGE ADDRESS
- LX3 59-46
- SB3 UAD0 SET *RCC* RETURN ADDRESS
- PL X3,RCC IF TO RECALL CPU
- UAD0 UX1 X5
- LX1 59-35
- MX2 11
- BX1 -X2*X1 CLEAR BIT FLAGS
- SB4 6
- SB5 X1 REQUEST COUNT
- AX1 48
- ZR B5,UAD10 IF NO REQUESTS PRESENT
- SX7 X1 DROP FLAG
- GT B5,B4,HNG IF TOO MANY REQUESTS
- SB3 UAD7 SET *AIO*/*AAD* RETURN
- UAD1 SA2 A5+B5 READ REQUEST
- MX0 -12
- SB5 B5-B1 DECREMENT REQUEST COUNT
- MX6 -18
- BX1 X0*X2
- LX1 9
- SB6 X1 OPTION CODE
- AX1 58
- SB4 B6-FRAS/10B
- NZ X1,UAD2 IF INCREMENT/DECREMENT OF 1
- TZR B4,(/NVE/UAD,NVE,/MONITOR/HNG) IF *FRAS* REQUEST
- BX3 -X6*X2 SET VARIABLE INCREMENT
- BX1 X1-X3 COMPLEMENT FOR DECREMENT OPTION
- UAD2 LX2 24
- BX5 -X0*X2 DETERMINE WORD ADDRESS
- MX0 -6
- LX2 12
- BX4 -X2+X0 FIELD WIDTH COMPLEMENTED
- AX2 6
- SB4 X4+59
- MX6 1
- BX2 -X0*X2 FIELD POSITION WITHIN WORD
- SX4 X5-STSW
- AX0 X6,B4 FORM COMPLEMENT OF FIELD MASK
- SX3 X5-RCCW
- BX4 -X4*X3
- NZ B6,UAD3 IF NOT LOW CORE UPDATE
- SX4 X5-200B
- SX6 -B7 SET RELATIVE TO ZERO
- IX5 X5+X6
- UAD3 SA3 X5+B7 READ WORD TO UPDATE
- MX5 -1
- PL X4,HNG IF ADDRESS OUT OF RANGE
- SX6 B6-CSFS/10B CHECK SET FIELD
- BX5 X5-X0 SET 1 BIT FIELD WIDTH FLAG
- SB4 X2 FIELD POSITION WITHIN WORD
- NZ X6,UAD4 IF NOT SET CONTROL POINT FIELD
- LX6 X0,B4 CLEAR ANY EXISTING DATA
- BX3 X6*X3
- UAD4 AX4 X3,B4 POSITION FIELD TO BOTTOM OF WORD
- BX6 X4+X0
- AX2 4
- BX4 -X0*X4 CURRENT VALUE OF FIELD
- SB6 B6-1
- ZR X5,UAD5 IF 1 BIT FIELD WIDTH
- ZR X6,UAD7 IF UNLIMITED
- IX6 X4+X1
- BX5 X0+X6
- ZR X5,UAD8 IF FIELD INCREMENTED TO MAXIMUM
- UAD5 IX6 X4+X1 CURRENT VALUE + INCREMENT
- LX4 X1,B4 POSITION INCREMENT/DECREMENT VALUE
- BX5 X0*X6 ERASE FIELD
- NZ X5,UAD8 IF OVERFLOW/UNDERFLOW
- SB4 B0
- SB6 B6-B1
- UAD6 IX6 X4+X3 INCREMENT/DECREMENT FIELD
- SA6 A3
- NG B6,UAD7 IF NO SRU UPDATE
- ZR B6,AIO IF INCREMENTING IO SRU
- SB6 B6-1
- ZR B6,AAD IF INCREMENTING ADDER SRU
- SB6 B6-1
- ZR B6,AMP IF INCREMENTING MAP OR OD SRU
- SB6 B6-3
- NE B6,B1,HNG IF ILLEGAL OPERATION CODE
- UAD7 GT B5,B0,UAD1 IF MORE REQUESTS
- SB6 B1+ MAKE SURE B6 IS NON-ZERO
- ZR X7,.DPPM IF DROP PPU
- EQ PPR1 EXIT
- UAD8 SX4 X7 SET ERROR INDICATION
- LX4 X4,B5
- LX4 36
- BX7 X7+X4
- BX4 X4-X4 NO INCREMENT FOR LOW CORE UPDATE
- NG B6,UAD6 IF LOW CORE OPTION
- SB6 B6-B1
- IX4 X6+X0 INCREMENT TO OVERFLOW VALUE - MAXIMUM
- SX6 X2
- PL B6,UAD9 IF SRU UPDATE
- SX4 -B1
- AX5 59
- IX4 X4-X0 MAXIMUM - 1
- BX4 -X5*X4 X4 CLEARED FOR DECREMENT (UNDERFLOW)
- UAD9 LX0 X0,B4 CLEAR FIELD
- LX4 X4,B4 POSITION NEW VALUE
- BX3 X0*X3
- SB4 B1 SET PF OR ADDER OVERFLOW FLAG
- NG B6,UAD6 IF NOT SRU UPDATE
- ZR X6,UAD6 IF PF OR ADDER UPDATE
- LX6 2
- SB4 X6 OVERFLOW FLAG MT=4, MS=10B
- EQ UAD6
- UAD10 SB6 B1+ MAKE SURE B6 IS NON-ZERO
- ZR X1,.DPPM IF DROP PPU SELECTED
- EQ HNG HANG PPU
- UTEM SPACE 4,10
- *** UTEM - UPDATE TABLE ENTRY.
- *
- * ENTRY
- *T,OR 12/ UTEM,6/0,1/I,1/J,1/0,3/NR,12/,24/ ADDR
- *
- *T,MB 1/V,5/ WI,6/ FS,6/ BP,42/ VALUE
- * .
- * .
- * .
- *T,MB+NR-1 1/V,5/ WI,6/ FS,6/ BP,42/ VALUE
- *
- * NR NUMBER OF REQUESTS IN MESSAGE BUFFER.
- * I INTERLOCK *ADDR* OPTION.
- * I = 0, NR = 0 *ADDR* INTERLOCK (BIT 0) WILL
- * BE SET (REJECT IF ALREADY SET
- * OR *ADDR* ENTRY NOT IN USE).
- * I = 0, NR .NE. 0 *NR* REQUESTS FROM MESSAGE
- * BUFFER WILL BE PROCESSED.
- * I = 1, NR = 0 *ADDR* INTERLOCK WILL BE
- * CLEARED (HANG IF INTERLOCK NOT
- * PREVIOUSLY SET OR *ADDR* ENTRY
- * NOT IN USE).
- * I = 1, NR .NE. 0 *ADDR* INTERLOCK WILL BE SET
- * AFTER PROCESSING *NR* REQUESTS
- * FROM MESSAGE BUFFER (REJECT IF
- * VERIFY FAILURE FROM MESSAGE
- * BUFFER REQUEST OR IF INTERLOCK
- * ALREADY SET OR *ADDR* ENTRY
- * NOT IN USE).
- * J IF SET, JOB ADVANCE CHECK NEEDED ON EJT ENTRY
- * (APPLICABLE ONLY FOR *I* = 1, *NR* = 0 OPTION).
- * ADDR ABSOLUTE FWA TABLE TO VERIFY/UPDATE.
- * V IF SET, CONTENTS OF SPECIFIED FIELD IN TABLE ENTRY
- * WILL BE VERIFIED WITH CONTENTS OF *VALUE* FIELD.
- * IF CLEAR, CONTENTS OF *VALUE* FIELD WILL BE STORED
- * INTO SPECIFIED FIELD IN TABLE ENTRY.
- * WI WORD INDEX INTO TABLE OF ENTRY TO BE
- * VERIFIED/UPDATED.
- * FS SIZE OF FIELD TO BE VERIFIED/UPDATED
- * (1 TO 60D BITS).
- * BP LOW ORDER BIT POSITION OF FIELD TO VERIFY/
- * UPDATE (0 TO 59D).
- * VALUE CONTENTS USED TO VERIFY SPECIFIED FIELD IN TABLE
- * ENTRY (IF *V* SET) OR UPDATE SPECIFIED FIELD IN TABLE
- * ENTRY (IF *V* NOT SET). RIGHTMOST *FS* NUMBER OF
- * BITS OF *VALUE* ARE USED IF *FS* .LE. 42, OTHERWISE
- * 42 BIT CONTENT OF *VALUE* IS USED, RIGHT JUSTIFIED
- * WITH BINARY ZERO FILL.
- *
- * EXIT
- *T,OR 12/ 0,12/ STAT,36/
- *
- *T,MB 1/V,5/ WI,6/ FS,6/ BP,42/ OLD VALUE
- * .
- * .
- * .
- *T,MB+NR-1 1/V,5/ WI,6/ FS,6/ BP,42/ OLD VALUE
- *
- * STAT 0 = OPERATION COMPLETE.
- * 1 = INTERLOCK ALREADY SET (FOR *I* = 0, *NR* = 0
- * OR *I* = 1, *NR* .NE. 0 PROCESSING).
- * 2 = VERIFICATION FAILED (FOR *NR* .NE. 0
- * PROCESSING OF REQUEST WITH *V* SET).
- * NO FURTHER REQUESTS WERE PROCESSED (TO PREVENT
- * UPDATE AFTER VERIFY REQUEST THAT FAILED).
- * 3 = ENTRY TO INTERLOCK IS NOT IN USE (TOP 48 BITS OF
- * *ADDR* = 0 FOR *I* = 0, *NR* = 0 OR *I* = 1,
- * *NR* .NE. 0 PROCESSING).
- *
- * V,WI,FS,BP SAME AS ON ENTRY.
- * OLD VALUE CONTENTS OF SPECIFIED FIELD IN TABLE ENTRY
- * BEFORE UPDATE/VERIFY, RIGHT JUSTIFIED WITH
- * BINARY ZERO FILL (RIGHTMOST 42 BITS OF FIELD
- * IF *FS* .GT. 42).
- *
- * *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
- * 1. *NR* .GT. 6.
- * 2. *FS* = 0.
- * 3. *BP* + *FS* .GT. 60D.
- * 4. *ADDR* INTERLOCK WAS NOT PREVIOUSLY SET FOR CLEAR
- * INTERLOCK REQUEST (*I* = 1, *NR* = 0 PROCESSING).
- * 5. *ADDR* ENTRY NOT IN USE (BYTE 0 = 0) FOR CLEAR INTERLOCK
- * REQUEST (*I* = 1, *NR* = 0 PROCESSING).
- * 6. JOB ADVANCE REQUESTED ON ILLEGAL ENTRY.
- PPR UTEM,,,FEX
- AX1 36
- SX7 B1
- ZR X1,UTE3 IF SET *ADDR* INTERLOCK OPTION
- MX2 -3
- BX3 -X2*X1 NUMBER OF REQUESTS IN MESSAGE BUFFER
- AX1 5
- MX0 -42
- BX1 -X1*X7
- BX7 X1+X3
- ZR X7,UTE3 IF CLEAR *ADDR* INTERLOCK OPTION
- NZ X1,UTE0.1 IF NOT AN INTERLOCK REQUEST
- SA4 X5 READ TABLE ENTRY
- MX6 12
- SX7 B1+ SET RETURN STATUS
- BX6 X6*X4
- LX4 59-0
- NZ X6,UTE0 IF NOT AN EMPTY ENTRY
- SX7 3 SET REPLY
- EQ UTE4 EXIT
- UTE0 NG X4,UTE4 IF ENTRY ALREADY INTERLOCKED
- UTE0.1 SA4 A5+B1 GET MESSAGE BUFFER REQUEST
- SB4 X3
- SB3 6
- SB5 60
- GT B4,B3,HNG IF NUMBER OF REQUESTS .GT. 6
- UTE1 SB4 B4-B1 DECREMENT MESSAGE BUFFER REQUESTS
- BX2 -X0*X4 VALUE TO VERIFY/UPDATE FIELD WITH
- MX6 -6
- BX3 X0*X4
- AX4 42
- BX1 -X6*X4 LOW ORDER BIT POSITION OF FIELD
- AX4 6
- SB3 X1
- BX6 -X6*X4 FIELD SIZE IN BITS
- MX7 1
- SB6 X6
- SB7 B6-B1
- ZR B6,HNG IF FIELD SIZE = 0
- AX7 B7 BUILD FIELD MASK
- SB7 B3+B6
- GT B7,B5,HNG IF FIELD EXCEEDS WORD BOUNDARY
- AX4 6
- LX7 B6 RIGHT JUSTIFY MASK
- MX6 -5
- BX2 X7*X2 FIELD SIZE BITS OF VALUE
- BX4 -X6*X4 TABLE WORD INDEX
- IX4 X5+X4 TABLE ENTRY ABSOLUTE ADDRESS
- SA1 X4 GET TABLE ENTRY
- SB7 B5-B3
- LX1 B7 RIGHT JUSTIFY FIELD IN TABLE ENTRY
- BX6 X7*X1 CONTENTS OF FIELD IN TABLE ENTRY
- BX1 -X7*X1
- BX7 -X0*X6 RETURN OLD VALUE OF FIELD
- BX1 X1+X2 REPLACE FIELD WITH NEW VALUE
- BX7 X3+X7
- SA7 A4
- SX7 B1+B1 RETURN STATUS = 2 IF VERIFY REJECT
- PL X3,UTE5 IF FIELD TO BE UPDATED
- BX6 X6-X2
- NZ X6,UTE4 IF FIELD DOES NOT VERIFY
- UTE2 SA4 A4+B1 GET NEXT REQUEST
- NZ B4,UTE1 IF MORE REQUESTS
- LX7 41-1
- BX7 X7*X5
- ZR X7,PPR1 IF NO *ADDR* INTERLOCK OPTION
- SX7 B1 SET *ADDR* INTERLOCK
- UTE3 SA1 X5 GET TABLE ENTRY INTERLOCK
- MX0 48
- BX0 X0*X1
- BX4 X0+X7
- ZR X4,HNG IF CLEARING INTERLOCK ON UNUSED ENTRY
- MX3 -1
- BX4 -X3*X1 PREVIOUS INTERLOCK VALUE
- BX2 X4+X7
- ZR X2,HNG IF CLEARING ALREADY CLEAR INTERLOCK
- BX1 X3*X1
- BX6 X1+X7
- LX2 X7,B1
- BX3 -X3-X7
- BX7 X7+X2 RETURN STATUS = 3 IF ENTRY NOT IN USE
- ZR X0,UTE4 IF *ADDR* ENTRY NOT IN USE
- BX7 X4*X7 RETURN STATUS = 1 IF SET INTERLOCK REJECT
- BX4 X4*X7 INTERLOCK STATUS .AND. REQUEST BIT
- LX4 59
- NG X4,UTE3.1 IF WORD ALREADY INTERLOCKED
- SA6 X5
- UTE3.1 LX3 40-0 CHECK JOB ADVANCE OPTION
- BX3 X3*X5
- NZ X3,UTE6 IF EJT ENTRY JOB ADVANCE NEEDED
- UTE4 LX7 36 SAVE RETURN STATUS
- SA7 A5
- EQ PPRX EXIT
- UTE5 LX6 X1,B3 REPOSITION TABLE ENTRY
- SA6 X4 STORE UPDATED TABLE ENTRY
- EQ UTE2 PROCESS NEXT REQUEST
- UTE6 MX3 -6
- BX1 -X3*X6
- SB3 PPRX SET EXIT ADDRESS FOR *JAV*
- SX1 X1-EXJS*2
- NZ X1,UTE4 IF JOB NOT AT CONTROL POINT
- SA1 X5+B1 GET CONTROL POINT NUMBER
- ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
- AX1 12
- BX1 -X3*X1
- LX1 7
- TX2 X1,-SCA
- PL X2,HNG IF ILLEGAL CONTROL POINT
- SA7 A5 INDICATE OPERATION COMPLETE
- SB7 X1
- EQ JAV CHECK FOR JOB ADVANCE
- VFLM SPACE 4,15
- *** VFLM - VERIFY FIELD LENGTH.
- *
- * ENTRY
- *T, OR 12/ VFLM, 12/ CP, 36/
- * CP CONTROL POINT.
- * 0 = USE THE CONTROL POINT TO WHICH THE PP IS ASSIGNED.
- *
- * EXIT
- *T, OR 12/0, 12/ ST, 36/
- * ST STATUS
- * 0 = NO DOUBLE-BIT ERRORS ENCOUNTERED.
- * 1 = JOB TO VERIFY FL FAILED.
- * 2 = FIELD LENGTH VERIFICATION ALREADY IN PROGRESS.
- PPR VFLM
- SX7 B1 PRESET RESPONSE
- LX7 36
- TEQ (/CME/VLM,CME,/MONITOR/PPR1)
- VFPM SPACE 4,30
- *** VFPM - VERIFY FET PARAMETERS.
- *
- * ENTRY
- *T, OR 12/ VFPM,12/ VO,18/ ,18/ FA
- * VO FET PARAMETER VALIDATION OPTION.
- * 0 = NO FET PARAMETER VALIDATION.
- * 1 = VALIDATE FIRST AND LIMIT ONLY.
- * 2 OR 3 = VALIDATE FIRST, IN, OUT, AND LIMIT.
- *
- * EXIT
- *T, OR 12/ 0,12/ ST,36/
- * ST STATUS
- * 0 = NO ERROR.
- * 1 = ILLEGAL FET ADDRESS.
- * 2 = BUFFER ARGUMENT ERROR.
- *T, MB+2 12/ 0, 24/ IN, 24/ OUT
- *T, MB+3 1/R, 5/0, 6/ FETL, 24/ FIRST, 24/ LIMIT
- * R SET IF RANDOM FILE.
- * FETL FET LENGTH - 5.
- *
- * FIRST, IN, OUT, LIMIT ARE RETURNED ONLY IF FET PARAMETER
- * VALIDATION IS REQUESTED. ZERO VALUE IS RETURNED FOR THOSE
- * PARAMETERS NOT VALIDATED (FOR OPTION 1, IN=OUT=0 IS RETURNED,
- * FOR OPTION 2/3, FIRST=IN=OUT=LIMIT=0 IS RETURNED).
- * MB+2 AND MB+3 ARE NOT RETURNED IF ERROR IS DETECTED.
- PPR VFPM
- SX7 B1 RETURN STATUS = ILLEGAL FET ADDRESS
- AX2 24
- SB3 PPR1 SET ERROR EXIT ADDRESS FOR *VFA*/*VFP*
- SB7 X2 SET CP/PCP ADDRESS
- LX7 36
- SB6 VFM1 SET RETURN ADDRESS FOR *VFA*
- EQ VFA VERIFY FET ADDRESS
- VFM1 BX0 X6 SAVE FET LENGTH - 5 AND RANDOM FLAG
- SX7 B1+B1 RETURN STATUS = BUFFER ARGUMENT ERROR
- SB6 VFM2 SET RETURN ADDRESS FOR *VFP*
- SA2 A5 GET FET PARAMETER VALIDATION OPTION
- MX6 -6
- SX1 B0
- LX2 -36
- BX6 -X6*X2
- LX7 36
- NZ X6,VFP IF FET PARAMETER VALIDATION NEEDED
- VFM2 BX7 X1+X0 SAVE FIRST AND LIMIT
- SA6 A5+3 SAVE IN AND OUT
- SA7 A6+B1
- BX7 X7-X7 RETURN STATUS = NO ERROR
- SA7 A5
- EQ PPRX EXIT
- VMSM SPACE 4,25
- *** VMSM - VALIDATE MASS STORAGE.
- * LEGAL ONLY WHEN MASS STORAGE VALIDATION IS SELECTED.
- *
- * ENTRY
- *T, OR 12/ VMSM,12/ EQ,12/ TK,12/ SF,12/
- * EQ EST ORDINAL TO PROCESS.
- * TK FIRST TRACK OF CHAIN FOR VTCS OPTION.
- * SF SUBFUNCTION CODE AS DEFINED IN COMSCPS.
- *
- * VEIS VALIDATE EQUIPMENT WITH INTERLOCK.
- * VEQS VALIDATE EQUIPMENT.
- * VTCS VALIDATE TRACK CHAIN.
- *
- * REPLY
- *T, OR 12/,12/ RS,36/
- * RS REPLY STATUS
- * BIT 0 SET = RESERVATION BIT COUNT ERROR.
- * BIT 1 SET = PRESERVED FILE COUNT ERROR.
- * BIT 2 SET = PERMIT CHAIN ERROR.
- * BIT 3 SET = CATALOG CHAIN ERROR.
- * BIT 4 SET = INDIRECT CHAIN ERROR.
- *
- * BIT 0 SET = BAD TRACK CHAIN (VTCS ONLY).
- *
- * *PP HUNG.* WILL OCCUR FOR AN ILLEGAL MASS STORAGE EQUIPMENT.
- *
- * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
- * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
- * BEFORE THE VMSM IS ISSUED TO CPUMTR.
- * IF THE *VEIS* SUBFUNCTION IS USED ON AN INDEPENDENT SHARED
- * DEVICE BECAUSE THE MST INTERLOCK WAS PREVIOUSLY LEFT SET,
- * THE *LPTU* FLAG MUST BE SET FIRST TO PREVENT *1RU* FROM
- * HANGING TRYING TO SET THE INTERLOCK.
- PPR VMSM,(/ISD/VMS,ISD,/LSPMMF/CME0,LSPMMF,/MONITOR/PMR ),
- ,(/VMS/VMS,VMS,/PROGRAM/HNG)
- VSAM SPACE 4,30
- *** VSAM - VALIDATE SECURITY ACCESS FUNCTIONS.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ FN, 36/
- * FN = 0 (VJAS) - SET JOB ACCESS LEVEL.
- * FN = 1 (VSFS) - SET FILE ACCESS LEVEL.
- * FN = 2 (VAES) - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
- * FN = 3 (VAJS) - VALIDATE ACCESS LEVEL/CATEGORIES FOR JOB.
- * FN = 4 (VJCS) - VALIDATE JOB CREATION PARAMETERS.
- * FN = 5 (VEDS) - VALIDATE EXPIRATION DATE.
- * FN = 6 (VJLS) - VALIDATE JOB ACCESS LEVEL LIMITS.
- *
- *
- * 0 VJAS - SET JOB ACCESS LEVEL.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ VJAS, 24/ , 12/ AL
- * AL REQUESTED JOB ACCESS LEVEL.
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 36/
- * ST = 0 IF ACCESS LEVEL VALID (FUNCTION COMPLETE).
- *
- * FUNCTION
- * DETERMINE IF THE SPECFIED ACCESS LEVEL IS VALID FOR THE
- * CALLING JOB. IF VALID, SET THE NEW ACCESS LEVEL IN THE
- * CONTROL POINT AREA AND THE EJT ENTRY FOR THE JOB.
- *
- * *PP HUNG.* WILL OCCUR IF AN INVALID ACCESS LEVEL IS
- * SPECIFIED.
- *
- *
- * 1 VSFS - SET FILE ACCESS LEVEL.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ VSFS, 12/ , 12/ FA, 12/ AL
- * FA NFL ADDRESS FOR THE FNT ENTRY OF THE FILE.
- * AL REQUESTED FILE ACCESS LEVEL.
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 36/
- * ST = 0 IF ACCESS LEVEL VALID (FUNCTION PERFORMED).
- *
- * FUNCTION
- * DETERMINE IF THE SPECIFIED ACCESS LEVEL IS VALID FOR
- * THE CALLING JOB AND THE EQUIPMENT UPON WHICH THE
- * SPECIFIED JOB RESIDES. IF VALID, SET THE NEW ACCESS
- * LEVEL IN THE FNT ENTRY FOR THE FILE.
- *
- * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
- * 1) THE FNT ENTRY FOR THE FILE IS NOT SET BUSY BEFORE
- * CALLING *VSAM*.
- * 2) AN INVALID ACCESS LEVEL IS SPECIFIED.
- *
- *
- * 2 VAES - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ VAES, 12/ EQ, 12/ , 12/ AL
- * EQ EST ORDINAL FOR EQUIPMENT.
- * AL REQUESTED ACCESS LEVEL.
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 36/
- * ST = 0 IF ACCESS LEVEL VALID.
- *
- * FUNCTION
- * DETERMINE IF THE SPECIFIED ACCESS LEVEL IS WITHIN
- * THE EQUIPMENT LIMITS (OR, FOR A MASS STORAGE DEVICE,
- * WITHIN THE DEVICE LIMITS) FOR A SPECIFIED EQUIPMENT.
- *
- * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
- * 1) AN INVALID EST ORDINAL IS SPECIFIED.
- * 2) AN INVALID ACCESS LEVEL IS SPECIFIED.
- *
- *
- * 3 VAJS - VALIDATE ACCESS LEVEL AND/OR CATEGORIES FOR JOB.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ VAJS, 24/ , 12/ P
- *T, MB 12/ , 12/ AL, 36/ AC
- * P PROCESSING OPTIONS.
- * 1 - ACCESS LEVEL ONLY.
- * 2 - ACCESS CATEGORIES ONLY.
- * 3 - BOTH ACCESS LEVEL AND ACCESS CATEGORIES.
- * AL ACCESS LEVEL.
- * AC ACCESS CATEGORIES.
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 36/
- * ST = 0 IF SPECIFIED *AL* AND/OR *AC* WERE VALID.
- *
- * FUNCTION
- * DETERMINE IF THE SPECIFIED ACCESS LEVEL AND/OR
- * ACCESS CATEGORY SET ARE CURRENTLY LEGAL FOR THE
- * CALLING JOB.
- *
- * *PP HUNG.* WILL OCCUR IF AN INVALID ACCESS LEVEL IS
- * SPECIFIED.
- *
- *
- * 4 VJCS - VALIDATE JOB CREATION PARAMETERS.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ VJCS, 12/ OT, 12/ UAL, 12/ IJL
- *T, MB 12/ , 12/ ALVAL, 36/ ACVAL
- * OT ORIGIN TYPE FOR JOB.
- * UAL UPPER LIMIT ON ACCESS LEVELS FOR JOB
- * (4000B IF DEFAULT IS TO BE USED).
- * IJL INITIAL JOB ACCESS LEVEL.
- * ALVAL ACCESS LEVEL VALIDATION BITS (FROM VALIDUS).
- * ACVAL ACCESS CATEGORY VALIDATION (FROM VALIDUS).
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 12/ AIJL, 12/ RUAL, 12/ RLAL
- *T, MB 12/ , 12/ RALVAL, 36/ RACVAL
- * ST = 0 IF JOB MAY BE CREATED.
- * AIJL ADJUSTED INITIAL JOB ACCESS LEVEL.
- * RUAL RESTRICTED UPPER ACCESS LEVEL LIMIT.
- * RLAL RESTRICTED LOWER ACCESS LEVEL LIMIT.
- * RALVAL RESTRICTED SET OF ACCESS LEVEL BITS.
- * RACVAL RESTRICTED SET OF ACCESS CATEGORY BITS.ATION
- *
- * FUNCTION
- * DETERMINE IF THE NEW JOB CAN BE CREATED WITH THE
- * SPECIFIED VALIDATIONS AND WITHIN THE SPECFIED LIMITS.
- * THE INITIAL JOB ACCESS LEVEL SPECIFIED BY THE CALLER IS
- * THE LOCAL FILE ACCESS LEVEL, IF THE JOB IS BEING CREATED
- * FROM A LOCAL FILE. OTHERWISE, THIS VALUE IS ZERO. THE
- * UPPER LIMIT SPECIFIED BY THE CALLER IS FROM THE JOB CARD
- * (LINE ACCESS LEVEL LIMIT FOR INTERACTIVE JOBS). IF THE
- * DEFAULT IS TO BE USED, 4000B IS SPECIFIED.
- *
- * IF THE JOB CAN BE CREATED, RESTRICT THE ACCESS LEVEL
- * LIMITS AND VALIDATION BITS, AND THE ACCESS CATEGORY
- * VALIDATION BITS, TO BE CONSISTENT AND TO BE WITHIN
- * THE LIMITS FOR THE SPECIFIED JOB ORIGIN TYPE.
- *
- * THE SPECIFIED INITIAL ACCESS LEVEL WILL BE ADJUSTED UPWARDS
- * IF NECESSARY TO THE RESTRICTED LOWER ACCESS LEVEL LIMIT. IF
- * IT IS ALREADY ABOVE THIS LEVEL, IT WILL BE SET TO THE NEXT
- * HIGHEST ACCESS LEVEL IN THE RESTRICTED SET OF ACCESS LEVEL
- * BITS. IF THERE ARE NO VALID LEVELS AT OR ABOVE *IJL*, THE
- * JOB CANNOT BE CREATED.
- * IF THE VALUE 4000B IS SPECIFIED FOR *UAL*, THE RESTRICTED
- * UPPER ACCESS LEVEL LIMIT WILL BE SET TO THE ADJUSTED INITIAL
- * ACCESS LEVEL, CALCULATED AS DESCRIBED ABOVE.
- *
- * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
- * 1) AN INVALID ACCESS LEVEL IS SPECIFIED.
- * 2) AN INVALID ORIGIN TYPE IS SPECIFIED.
- *
- *
- * 5 VEDS - VALIDATE EXPIRATION DATE.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ VEDS, 18/ , 18/ EXP
- * EXP EXPIRATION DATE
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 36/
- * ST = 0 IF EXPIRATION DATE NOT YET REACHED.
- *
- * FUNCTION
- * DETERMINE IF THE SPECIFIED EXPIRATION DATE HAS BEEN
- * REACHED (IF EXPIRATION DATE .LE. TODAY-S DATE).
- *
- *
- * 6 VJLS - VALIDATE JOB ACCESS LEVEL LIMITS.
- *
- * ENTRY
- *T, OR 12/ VSAM, 12/ VJLS, 12/ OT, 12/ UAL, 12/ LAL
- * OT = ORIGIN TYPE OF JOB.
- * UAL = UPPER ACCESS LEVEL LIMIT FOR JOB.
- * LAL = LOWER ACCESS LEVEL LIMIT FOR JOB.
- *
- * EXIT
- *T, OR 12/ 0, 12/ ST, 36/
- * ST = 0 IF ACCESS LEVEL LIMITS VALID.
- *
- * FUNCTION
- * DETERMINE IF THE SPECIFIED JOB ACCESS LEVEL LIMITS
- * LIE WITHIN THE RANGE OF VALID ACCESS LEVELS FOR
- * THE SPECIFIED ORIGIN TYPE.
- *
- * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
- * 1) AN INVALID ACCESS LEVEL IS SPECIFIED.
- * 2) AN INVALID ORIGIN TYPE IS SPECIFIED.
- PPR VSAM
- LX1 -36 GET SUBFUNCTION NUMBER
- SB4 X1-TVSAL
- MX0 -12
- PL B4,HNG IF ILLEGAL FUNCTION
- SA3 B7+JCIW CHECK SUBSYSTEM ID
- BX1 -X0*X5 GET SPECIFIED ACCESS LEVEL
- SA2 A5+B1 GET (MB)
- TB5 OSSM GET OPERATING SYSTEM SECURITY MODE
- LX3 -24
- BX3 -X0*X3
- SX7 X3-LSSI-1
- SB4 B4+TVSAL
- JP TVSA+B4 PROCESS FUNCTION
- * EXIT TO SUBFUNCTIONS WITH -
- * (X0) = 48-BIT MASK.
- * (X1) = SPECIFIED ACCESS LEVEL (BYTE 4 OF (OR)).
- * (X2) = FIRST WORD OF MESSAGE BUFFER.
- * (X5) = OUTPUT REGISTER.
- * (X7) .GE. 0 IF THE JOB IS A SUBSYSTEM.
- * (B5) = OPERATING SYSTEM SECURITY MODE.
- * OPTION TABLE.
- TVSA BSS 0
- LOC 0
- + EQ VS01 (VJAS) - SET JOB ACCESS LEVEL
- + EQ VS11 (VSFS) - SET FILE ACCESS LEVEL
- + EQ VS21 (VAES) - VALIDATE *AL* FOR EQUIPMENT
- + EQ VS31 (VAJS) - VALIDATE *AL*/*AC* FOR JOB
- + EQ VS42 (VJCS) - VALIDATE JOB CREATION PARAMETERS
- + EQ VS51 (VEDS) - VALIDATE EXPIRATION DATE
- + EQ VS61 (VJLS) - VALIDATE JOB LIMITS
- TVSAL BSS 0
- LOC *O
- * *VJAS* (0) - SET JOB ACCESS LEVEL.
- VS01 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
- SB6 VS02 SET RETURN ADDRESS
- EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
- VS02 ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
- SA2 B7+JSCW GET CURRENT ACCESS LEVEL
- LX2 -45
- MX0 -3
- BX3 -X0*X2
- IX6 X1-X3 CHECK IF NEW *AL* LESS THAN OLD
- BX3 X2 CHECK IF VALIDATED FOR DOWNGRADE
- LX3 59-55+45
- BX6 -X3*X6
- BX6 X7*X6 CHECK IF THE JOB IS A SUBSYSTEM
- NG X6,VSX3 IF INVALID ACCESS
- BX2 X0*X2 SET NEW ACCESS LEVEL IN *JSCW*
- BX6 X2+X1
- LX6 45
- SA6 A2
- EQ VSX1 RETURN (NORMAL STATUS)
- * *VSFS* (1) - SET ACCESS LEVEL FOR FILE.
- VS11 SB6 VS12 SET RETURN ADDRESS
- EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
- VS12 ZR B5,VS13 IF SYSTEM IN UNSECURED MODE
- ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
- VS13 LX0 12 GET FNT ADDRESS
- BX2 -X0*X5
- SA3 B7+FLSW GET RA
- LX2 -12
- MX0 -24
- LX3 -12
- BX3 -X0*X3
- LX3 6
- IX2 X3-X2 CALCULATE FNT ADDRESS
- SX3 B1
- ERRNZ FSTL-1 CODE DEPENDS ON VALUE
- IX2 X2+X3 *FSTL* ADDRESS
- ERX3 X2 GET *FSTL*
- LX3 59-0
- NG X3,HNG IF FILE NOT SET BUSY
- LX3 12-59+0 GET EST ORDINAL
- MX0 -12
- SB6 VS14 SET RETURN ADDRESS
- BX3 -X0*X3
- EQ VAE VALIDATE ACCESS LEVEL FOR EQUIPMENT
- VS14 ZR B5,VS15 IF SYSTEM IN UNSECURED MODE
- NG X6,VSX3 IF ACCESS LEVEL NOT VALID
- VS15 SX3 B1+ GET CURRENT FILE ACCESS LEVEL
- ERRNZ FUTL-FSTL-1 CODE DEPENDS ON VALUE
- IX2 X2+X3 *FUTL* ADDRESS
- ERX3 X2 GET *FUTL*
- LX3 -24
- MX0 -3
- ZR B5,VS16 IF SYSTEM IN UNSECURED MODE
- BX6 -X0*X3
- IX6 X1-X6 CHECK IF NEW *AL* LESS THAN OLD
- SA4 B7+JSCW
- LX4 59-54 CHECK IF VALIDATED FOR DOWNGRADE
- BX6 -X4*X6
- BX6 X7*X6 CHECK IF THE JOB IS A SUBSYSTEM
- NG X6,VSX3 IF INVALID ACCESS
- VS16 BX3 X0*X3 SET NEW ACCESS LEVEL IN *FUTL*
- BX7 X3+X1
- LX7 24
- EWX7 X2 REWRITE *FUTL*
- EQ VSX1 EXIT (NORMAL STATUS)
- * *VAES* (2) - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
- VS21 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
- LX5 -24 GET EST ORDINAL
- BX3 -X0*X5
- ZR X3,HNG IF INVALID EST ORDINAL
- TX4 X3,-ESTL
- PL X4,HNG IF INVALID EST ORDINAL
- LX5 24
- SB6 VS22 SET RETURN ADDRESS
- EQ VAE VALIDATE ACCESS LEVEL FOR EQUIPMENT
- VS22 NG X6,VSX3 IF ACCESS LEVEL NOT VALID
- EQ VSX1 EXIT (NORMAL STATUS)
- * *VAJS* (3) - VALIDATE ACCESS LEVEL / ACCESS CATEGORY SET.
- VS31 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
- BX4 X1 SAVE SELECTION PARAMETERS
- LX1 59-0
- PL X1,VS33 IF ACCESS LEVEL NOT TO BE CHECKED
- LX0 36
- BX1 -X0*X2 GET SPECIFIED ACCESS LEVEL
- LX1 -36
- SB6 VS32 SET RETURN ADDRESS
- EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
- VS32 ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
- VS33 LX4 59-1
- PL X4,VSX1 IF ACCESS CATEGORY SET NOT TO BE CHECKED
- MX0 -32 GET SPECIFIED ACCESS CATEGORY SET
- BX2 -X0*X2
- SA3 B7+JSCW GET VALID ACCESS CATEGORY SET FOR JOB
- BX3 -X0*X3
- BX6 -X3*X2
- NZ X6,VSX3 IF NONVALID BITS SET IN REQUEST
- EQ VSX1 EXIT (NORMAL STATUS)
- * *VJCS* (4) - VALIDATE JOB CREATION PARAMETERS.
- VS41 BX5 X5-X5 CLEAR OUTPUT REGISTER
- MX0 12 CLEAR ACCESS LEVELS AND CATEGORIES
- BX2 X0*X2
- EQ VS411 EXIT
- VS42 ZR B5,VS41 IF SYSTEM IN UNSECURED MODE
- SB4 X1-7
- GT B4,B0,HNG IF INVALID LOWER ACCESS LEVEL
- LX0 24 GET ORIGIN TYPE
- BX4 -X0*X5
- LX4 -24
- SB4 X4-IAOT
- GT B4,B0,HNG IF INVALID ORIGIN TYPE
- TA4 X4,JCB GET ORIGIN TYPE VALIDATIONS FROM SCT
- LX4 -36
- MX0 -3
- BX3 -X0*X4 ORIGIN TYPE UPPER LIMIT
- LX4 -3
- BX4 -X0*X4 ORIGIN TYPE LOWER LIMIT
- SB4 X4 SET *LAL* TO ORIGIN TYPE LOWER LIMIT
- MX0 -12
- LX0 12
- BX1 -X0*X5
- LX1 -12
- SB3 X1+ SPECIFIED UPPER ACCESS LEVEL (*UAL*)
- BX6 X1 CHECK FOR *DEFAULT UAL* SPECIFICATION
- LX6 59-11
- NG X6,VS44 IF DEFAULT TO BE USED FOR *UAL*
- SB5 X1-7
- GT B5,B0,HNG IF INVALID UPPER ACCESS LEVEL
- IX6 X1-X4
- NG X6,VSX3 IF *UAL* .LT. ORIGIN TYPE LOWER LIMIT
- IX6 X3-X1
- PL X6,VS45 IF *UAL* .LE. ORIGIN TYPE UPPER LIMIT
- VS44 SB3 X3+ SET *UAL* TO ORIGIN TYPE UPPER LIMIT
- * CONSTRUCT RESTRICTED SET OF ACCESS LEVEL VALIDATION BITS.
- VS45 SB5 B3-B4 CONSTRUCT MASK FOR VALID ACCESS LEVELS
- NG B5,VSX3 IF *LAL* .GT. *UAL*
- MX3 1
- AX3 B5
- SB5 B3+36+1 ALIGN MASK
- LX3 B5
- BX6 X3*X2 CONSTRUCT SUBSET OF ACCESS LEVEL BITS
- ZR X6,VSX3 IF NO VALID ACCESS LEVELS IN RANGE
- LX0 24
- BX2 X0*X2
- BX2 X2+X6 (X2) = UPDATED MESSAGE BUFFER WORD
- * CONSTRUCT RESTRICTED SET OF ACCESS CATEGORY VALIDATION BITS.
- SA3 SSML GET SYSTEM ACCESS CATEGORY SET
- MX7 -32
- BX3 -X7*X3
- BX7 X7+X3 CONSTRUCT MASK
- BX2 X7*X2 (X2) = UPDATED MESSAGE BUFFER WORD
- * RESTRICT JOB ACCESS LEVEL LIMITS WITH RESTRICTED SET
- * OF ACCESS LEVEL VALIDATION BITS.
- MX0 -12
- BX4 -X0*X5 SAVE *IJL*
- BX7 X2
- SB6 B4-23 PUT *LAL* BIT IN BIT 59
- SX6 B4 GET LOWER ACCESS LEVEL LIMIT (*LAL*)
- AX7 B6 (CIRCULAR LEFT SHIFT)
- NG X7,VS47 IF VALIDATION BIT SET FOR CURRENT *LAL*
- VS46 LX7 -1 INCREMENT *LAL*
- SX6 X6+B1
- PL X7,VS46 IF VALIDATION BIT NOT SET FOR NEW *LAL*
- VS47 BX5 X0*X5 UPDATE *LAL* IN OUTPUT REGISTER
- BX5 X5+X6
- BX3 X6 SAVE *RLAL*
- VS48 BX7 X2 CHECK UPPER ACCESS LEVEL LIMIT (*UAL*)
- SB4 B3-23 PUT *UAL* BIT IN BIT 59
- AX7 B4 (CIRCULAR LEFT SHIFT)
- NG X7,VS410 IF VALIDATION BIT SET FOR CURRENT *UAL*
- VS49 LX7 1 DECREMENT *UAL*
- SB3 B3-B1
- PL X7,VS49 IF VALIDATION BIT NOT SET FOR NEW *UAL*
- VS410 SX6 B3+ UPDATE *UAL* IN OUTPUT REGISTER
- MX0 -12
- LX0 12
- LX6 12
- BX5 X0*X5
- BX5 X5+X6
- SX6 B3 GET *RUAL*
- SB4 X3 SAVE *RLAL*
- IX0 X3-X4
- PL X0,VS410.2 IF *IJL* .LE. *RLAL*
- BX7 X2
- SB6 X4-23 PUT *IJL* BIT IN BIT 59
- AX7 B6 (CIRCULAR LEFT SHIFT)
- BX3 X4
- NG X7,VS410.2 IF VALIDATION BIT SET FOR CURRENT *IJL*
- VS410.1 LX7 -1 INCREMENT *IJL*
- SX4 X4+B1
- IX0 X6-X4
- BX3 X4
- NG X0,VSX3 IF *AIJL* ABOVE *RUAL*
- PL X7,VS410.1 IF VALIDATION BIT NOT SET FOR *AIJL*
- VS410.2 MX0 -12 SET *AIJL* IN OUTPUT REGISTER
- LX0 24
- LX3 24
- BX5 X0*X5
- BX5 X5+X3
- LX1 59-11
- PL X1,VS411 IF DEFAULT NOT TO BE USED FOR *UAL*
- LX3 -24
- SB3 X3+
- IX1 X6-X3
- ZR X1,VS411 IF *AIJL* = *RUAL*
- LX3 12 RESET *RUAL* TO *AIJL* IN OR
- LX0 -12
- BX5 X0*X5
- BX5 X5+X3
- SB5 B3-B4 RECALCULATE MASK
- MX3 1
- AX3 B5
- SB5 B3+36+1
- LX3 B5
- BX6 X3*X2 RESET RESTRICTED SET OF ACCESS LEVELS
- LX0 24
- BX2 X0*X2
- BX2 X2+X6
- VS411 BX7 X2 UPDATE MESSAGE BUFFER
- SA7 A2
- EQ VSX1 EXIT (NORMAL STATUS)
- * *VEDS* (5) - VALIDATE EXPIRATION DATE.
- VS51 MX0 -18
- SA2 PDTL
- BX1 -X0*X5 EXPIRATION DATE
- LX2 -18
- BX2 -X0*X2 TODAY-S DATE
- IX6 X2-X1
- PL X6,VSX3 IF EXPIRATION DATE HAS BEEN REACHED
- EQ VSX1 EXIT (NORMAL STATUS)
- * *VJLS* (6) - VALIDATE JOB ACCESS LEVEL LIMITS.
- VS61 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
- LX0 24 GET ORIGIN TYPE
- BX4 -X0*X5
- LX4 -24
- SB4 X4-IAOT
- GT B4,B0,HNG IF INVALID ORIGIN TYPE
- TA4 X4,JCB GET LIMITS FOR ORIGIN TYPE FROM SCT
- LX4 -36
- MX0 -3
- BX3 -X0*X4 ORIGIN TYPE UPPER LIMIT
- LX4 -3
- SB4 X1-7
- GT B4,B0,HNG IF INVALID LOWER ACCESS LEVEL
- BX4 -X0*X4 ORIGIN TYPE LOWER LIMIT
- IX6 X3-X1
- NG X6,VSX3 IF *LAL* .GT. ORIGIN TYPE UPPER LIMIT
- IX6 X1-X4
- MX0 -12
- NG X6,VSX3 IF *LAL* .LT. ORIGIN TYPE LOWER LIMIT
- LX0 12 GET SPECIFIED *UAL*
- BX1 -X0*X5
- LX1 -12
- IX6 X3-X1
- SB4 X1-7
- GT B4,B0,HNG IF INVALID UPPER ACCESS LEVEL
- NG X6,VSX3 IF *UAL* .GT. ORIGIN TYPE UPPER LIMIT
- IX6 X1-X4
- NG X6,VSX3 IF *UAL* .LT. ORIGIN TYPE LOWER LIMIT
- * EQ VSX1 EXIT (NORMAL STATUS)
- * *VSAM* EXIT PROCESSING.
- VSX1 SX6 B0+ RETURN NORMAL STATUS
- VSX2 MX0 -36 CLEAR BYTES 0 AND 1 OF OUTPUT REGISTER
- BX7 -X0*X5
- BX7 X7+X6 SET REPLY STATUS
- EQ PPR1 EXIT
- VSX3 SX6 B1 RETURN REJECT STATUS
- LX6 36
- EQ VSX2 SET OUTPUT REGISTER
- TITLE PPU REQUEST PROCESSING SUBROUTINES.
- CCP SPACE 4,20
- ** CCP - CONVERT CPU SCHEDULING PARAMETERS.
- *
- * ON CME MACHINES, CONVERT THE CPU SCHEDULING PARAMETERS IN
- * JCB WORD *CSJT* FROM MILLISECONDS TO *CSAW* UNITS (UNITS OF
- * 64 MICROSECONDS) AND PLACE THE CONVERTED VALUES INTO JCB
- * WORDS *CSAT* AND *CSBT*. ON NON-CME MACHINES, COPY THE
- * PARAMETERS WITHOUT CONVERSION FROM *CSJT* TO *CSAT*/*CSBT*.
- *
- * ENTRY (X4) = SERVICE CLASS.
- * (B3) = RETURN ADDRESS.
- *
- * EXIT PARAMETERS CONVERTED FOR SPECIFIED SERVICE CLASS.
- * (A1) = ADDRESS OF *JCB* *CSBT* WORD.
- *
- * USES X - 0, 1, 2, 6, 7.
- * A - 1, 6.
- CCP BSS 0 ENTRY
- CX1 X4,JCB CONVERT JCB ORDINAL TO OFFSET
- MX0 -12
- TA1 X1+CSJT,JCB GET UNCONVERTED PARAMETERS
- TNO /CME/CCP,CME CONVERT PARAMETERS FOR CME MACHINE
- * COPY PARAMETERS WITHOUT CONVERSION FOR NON-CME MACHINE.
- BX7 -X0*X1 UNEXTENDED CPU SLICE
- LX1 -12
- BX6 -X0*X1 RECALL CPU SLICE
- IX7 X7-X6 UNEXTENDED SLICE - RECALL SLICE
- LX1 -12
- BX2 -X0*X1 CPU SLICE EXTENSION
- IX7 X7+X2 UNEXTENDED SLICE + EXTENSION - RECALL SLICE
- LX6 -18
- BX6 X6+X2
- LX6 36
- BX6 X6+X7
- SA6 A1+B1
- ERRNZ CSAT-CSJT-1 WORDS MUST BE CONTIGUOUS
- LX1 -12
- BX6 -X0*X1 SYSTEM I/O CPU THRESHOLD
- SA1 A6+B1
- ERRNZ CSBT-CSAT-1 WORDS MUST BE CONTIGUOUS
- MX0 42
- BX1 X0*X1
- BX6 X1+X6
- SA6 A1
- JP B3 RETURN
- HNG SPACE 4,15
- ** HNG - HANG PPU.
- *
- * ALL REGISTERS ARE SAVED TO AID IN PROBLEM DIAGNOSIS.
- * LEAVE PPU OUTPUT REGISTER SET, SET PACKED TIME AND DATE IN
- * LAST WORD OF MESSAGE BUFFER, AND DISPLAY MESSAGE.
- * MAY BE CALLED FROM EITHER MONITOR OR PROGRAM MODE WHEN
- * ENTERED AT *HNG1*.
- *
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- * (B5) = EXIT ADDRESS IF ENTERED AT *HNG1*.
- *
- * USES X - 1, 7.
- * B - 5.
- * A - 1, 7.
- HNG RJ SVR SAVE REGISTERS
- HNG0 SA5 A5+ REREAD PP OUTPUT REGISTER
- SB5 HNGM FLAG WE ARE HANGING PP TO *CHGM*
- EQ .CHGM ASSIGN *1MA* TO ISSUE DAYFILE MESSAGES
- * (B5) = EXIT ADDRESS.
- HNG1 RJ SVR SAVE REGISTERS
- HNG2 SA1 PDTL SET PACKED TIME AND DATE
- SX7 4RHNG//32 ADD *HNG/* TO PACKED DATE/TIME
- PX7 X7
- LX7 5+36
- BX7 X7+X1
- SA1 A5 SET STORAGE MOVABLE FLAG
- SA7 A5+6
- MX7 1
- LX7 56-59
- BX7 X7+X1
- SA7 A5
- SA1 A5-B1 ADD PP NAME TO *PP HUNG* MESSAGE
- MX7 18
- BX7 X7*X1
- SX1 HNGA SET *PP HUNG - XXX* MESSAGE
- SA7 X1+B1
- * EQ MSC SET MESSAGE IN SYSTEM CONTROL POINT
- MSC SPACE 4
- ** MSC - SET MESSAGE IN SYSTEM CONTROL POINT.
- *
- * ENTRY (X1) = MESSAGE ADDRESS.
- * (B5) = EXIT ADDRESS.
- *
- * USES X - 1, 7.
- * A - 1, 7.
- MSC SA1 X1 READ FIRST WORD OF MESSAGE
- BX7 X1
- TA7 MS2W,SCA SET MESSAGE IN SYSTEM CONTROL POINT
- SA1 A1+B1
- BX7 X1
- SA1 A1+B1
- SA7 A7+B1
- BX7 X1
- SA7 A7+B1
- JP B5 EXIT
- HNGA DATA H*PP HUNG - *
- DATA C*XXX* NAME OF HUNG PP
- SABT DATA C* SYSTEM ABORT.*
- PMR SPACE 4
- ** PMR - ENTER PPU PROGRAM MODE REQUEST.
- *
- * ENTRY (X5) = OUTPUT REGISTER.
- *
- * EXIT TO *EPR*.
- PMR TX3 A5-47*10B-1,-FP SET PPU SHIFT COUNT
- BX7 X7-X7
- PX1 X7 DISABLE PPU REQUEST
- SX2 B1 SET REQUEST BIT
- AX3 3
- SB4 X3
- BX7 X1+X5
- AX0 X2,B4
- SA7 A5
- EQ EPR ENTER PROGRAM MODE REQUEST
- RZX SPACE 4,10
- ** RZX - RETURN ZERO OUTPUT REGISTER AND EXIT.
- *
- * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
- *
- * EXIT TO *PPRX*.
- * (OR) = 0.
- RZX BSS 0 ENTRY
- SX7 B0 CLEAR OUTPUT REGISTER
- SA7 A5
- EQ PPRX EXIT
- SPB SPACE 4,15
- ** SPB - SET PPU REQUEST BIT.
- *
- * ENTRY (X0) = 1 IF BIT TO BE SET.
- * (X0) = 0 IF BIT TO BE CLEARED.
- * (X1) = REQUEST WORD.
- * (B3) = EXIT ADDRESS.
- * (A1) = ADDRESS OF WORD.
- *
- * EXIT NONE.
- *
- * USES X - 0, 1, 2, 3, 6.
- * B - 4.
- * A - 6.
- *
- * CALLS NONE.
- SPB BSS 0 ENTRY
- TX2 A5-47*10B-1,-FP SET PPU SHIFT COUNT
- SX3 B1 SET MASK BIT
- AX2 3
- SB4 X2
- AX3 X3,B4 CLEAR PREVIOUS REQUEST
- BX1 -X3*X1
- AX0 X0,B4 SET REQUEST BIT
- BX6 X1+X0
- SA6 A1 STORE REQUEST WORD
- JP B3 EXIT
- SVR SPACE 4,10
- ** SVR - SAVE REGISTERS.
- *
- * EXIT (BXP - BXP+7) = *A* AND *B* REGISTER VALUES.
- * (BXP+8 - BXP+15) = *X* REGISTER VALUES.
- *
- * USES X - 0, 6, 7.
- * A - 6, 7.
- * B - 1, 7.
- SVR PS ENTRY/EXIT
- SB1 B7-B0 HOLD *B7*
- SB7 A7-B0 HOLD *A7*
- SA7 BXP+15 SAVE *X7*
- BX7 X0
- SA7 BXP+8 SAVE *X0*
- BX7 X6
- SA7 BXP+14 SAVE *X6*
- MX0 -18
- SX7 B7-B0 SET *A7*
- BX7 -X0*X7
- SX6 B1-B0 SET *B7*
- LX7 18
- BX6 -X0*X6
- SB1 1 RESET *B1*
- IX6 X7+X6
- SX7 A6-B0 SET *A6*
- SA6 BXP+7 SAVE *A7* AND *B7*
- BX7 -X0*X7
- SX6 B6-B0 SET *B6*
- LX7 18
- BX6 -X0*X6
- IX6 X7+X6
- SA6 A6-B1 SAVE *A6* AND *B6*
- .1 SET 5
- DUP 5
- RN OCTMIC .1,1
- BX7 X"RN"
- SA7 A7-B1 SAVE *X"RN"*
- .1 SET .1-1
- ENDD
- .1 SET 5
- DUP 5
- RN OCTMIC .1,1
- SX6 A"RN"-B0 SET A"RN"
- BX6 -X0*X6
- SX7 B"RN"-B0 SET B"RN"
- LX6 18
- IFNE .1,1,1
- BX7 -X0*X7
- IX6 X6+X7
- SA6 A6-B1 SAVE A"RN" AND B"RN"
- .1 SET .1-1
- ENDD
- SX6 A0-B0 SET *A0*
- BX6 -X0*X6
- LX6 18
- SA6 A6-B1 SAVE *A0*
- EQ SVR RETURN
- VAE SPACE 4,15
- ** VAE - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
- *
- * ENTRY (X1) = ACCESS LEVEL.
- * (X3) = EST ORDINAL OF EQUIPMENT.
- * (B6) = RETURN ADDRESS.
- * (X3) = EST WORD *EQDE* OF EQUIPMENT, IF ENTRY
- * AT *VAE0*.
- * (X4) = OFFSET INTO EST FOR EQUIPMENT, IF ENTRY
- * AT *VAE0*.
- *
- * EXIT (X6) .LT. 0, IF ACCESS LEVEL NOT VALID FOR EQUIPMENT.
- * TO *HNG*, IF ACCESS LEVEL SPECIFIED IS INVALID.
- *
- * USES X - 3, 4, 6.
- * A - 3, 4.
- VAE BSS 0 ENTRY
- CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA3 X4+EQDE,EST GET EST ENTRY
- VAE0 TA4 X4+EQAE,EST
- SX6 8
- LX4 -6 GET EQUIPMENT ACCESS LIMITS
- IX6 X1-X6
- PL X6,HNG IF INVALID ACCESS LEVEL
- PL X3,VAE1 IF NOT MASS STORAGE EQUIPMENT
- MX6 -12
- BX3 -X6*X3 GET MST ADDRESS
- LX3 3
- SA4 X3+PFGL GET DEVICE ACCESS LIMITS
- VAE1 LX4 -6
- MX6 -3
- BX3 -X6*X4 UPPER LIMIT
- LX4 -3
- BX4 -X6*X4 LOWER LIMIT
- IX6 X1-X4
- NG X6,RB6 IF LESS THAN LOWER LIMIT
- IX6 X3-X1 CHECK FOR GREATER THAN UPPER LIMIT
- JP B6 RETURN
- VAJ SPACE 4,15
- ** VAJ - VALIDATE ACCESS LEVEL FOR JOB.
- *
- * ENTRY (X1) = ACCESS LEVEL.
- * (B6) = RETURN ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT (X6) = 0, IF ACCESS LEVEL NOT VALID FOR JOB.
- * TO *HNG*, IF ACCESS LEVEL SPECIFIED IS INVALID.
- *
- * USES X - 3, 6.
- * A - 3.
- * B - 3.
- VAJ BSS 0 ENTRY
- SB3 X1-7
- GT B3,B0,HNG IF INVALID ACCESS LEVEL
- SA3 B7+JSCW GET SET OF VALID AL-S FOR JOB
- SB3 X1+36+1
- MX6 1
- LX6 B3
- BX6 X6*X3 CHECK SPECIFIED *AL*
- JP B6 RETURN
- VFA SPACE 4,20
- ** VFA - VERIFY FET ADDRESS.
- *
- * ENTRY (B3) = ERROR EXIT ADDRESS.
- * (B6) = RETURN ADDRESS.
- * (B7) = CPA.
- * (X1) = RELATIVE FET ADDRESS IN LOWER 18 BITS.
- * (X7) = ERROR STATUS.
- *
- * EXIT (B4) = FL.
- * (X0) = RA.
- * (X2) = (FLSW) LEFT SHIFTED BY -12.
- * (X5) = ABSOLUTE FET+1 ADDRESS.
- * (X6) = 12/ FET LENGTH - 5, 48/ 0.
- *
- * USES A - 2, 3, 7.
- * B - 4, 5.
- * X - ALL.
- VFA SA2 B7+FLSW
- MX4 -12
- BX3 -X4*X2 FL/100B
- MX5 -18
- LX2 -12
- BX5 -X5*X1 RELATIVE FET ADDRESS
- LX3 6
- SX0 X2 RA/100B
- SB4 X3 FL
- SX3 X3-4
- LX0 6
- IX4 X5-X3
- PL X4,RB3 IF FET ADDRESS .GE. FL - 4
- SB5 X5
- SX5 X5+B1
- LE B5,B1,RB3 IF FET ADDRESS .LE. 1
- IX5 X0+X5 ABSOLUTE FET + 1 ADDRESS
- ERX3 X5 GET FET LENGTH
- MX6 -6
- LX3 -18
- BX6 -X6*X3
- MX1 1 GET RANDOM FILE FLAG
- LX3 18+12
- IX4 X4+X6
- PL X4,RB3 IF LWA+1 FET .GT. FL
- AX7 X6,B1
- BX1 X1*X3
- LX6 48
- ZR X1,RB6 IF NOT RANDOM FILE
- BX6 X6+X1 RETURN RANDOM FILE FLAG
- NZ X7,RB6 IF FET LONG ENOUGH FOR RANDOM PROCESSING
- BX7 X3-X1 CLEAR RANDOM FLAG FROM FET
- LX7 -12
- BX6 X6-X1 REMOVE RANDOM FLAG FROM RESPONSE
- EWX7 X5
- JP B6 RETURN
- VFP SPACE 4,20
- ** VFP - VERIFY FET PARAMETERS.
- *
- * ENTRY (B3) = ERROR EXIT ADDRESS.
- * (B4) = FL.
- * (B6) = RETURN ADDRESS.
- * (X5) = ABSOLUTE FET+1 ADDRESS.
- * (X6) = VALIDATION FLAGS (1 = VALIDATE FIRST/LIMIT,
- * 2 OR 3 = VALIDATE FIRST/IN/OUT/LIMIT).
- * (X7) = ERROR STATUS.
- *
- * EXIT (X1) = 12/ 0, 24/ FIRST, 24/ LIMIT.
- * (X6) = 12/ 0, 24/ IN, 24/ OUT.
- *
- * USES A - 1, 2, 3.
- * B - 4.
- * X - 1, 2, 3, 4, 6.
- VFP MX3 -2
- IX3 X5-X3 FET+4
- ERX1 X5 GET FIRST
- ERX2 X3 GET LIMIT
- MX4 -18
- BX1 -X4*X1
- SX3 B4 FL
- BX4 -X4*X2
- IX3 X3-X4
- NG X3,RB3 IF LIMIT .GT. FL OR LIMIT .LT. 0
- IX3 X1-X4
- PL X3,RB3 IF FIRST .GE. LIMIT OR FIRST .LT. 0
- SB4 X1+
- AX6 1
- SX2 B1
- ZR X6,VFP1 IF NO VALIDATION FOR IN AND OUT
- IX3 X5+X2 FET+2
- IX2 X3+X2 FET+3
- ERX3 X3 GET IN
- ERX2 X2 GET OUT
- SX3 X3
- SX2 X2
- IX6 X3-X1
- IX1 X2-X1
- BX1 X1+X6
- NG X1,RB3 IF IN OR OUT .LT. FIRST
- IX6 X3-X4
- PL X6,RB3 IF IN .GE. LIMIT
- IX1 X2-X4
- LX3 24
- PL X1,RB3 IF OUT .GE. LIMIT
- BX6 X3+X2
- SX1 B4
- VFP1 LX1 24
- BX1 X1+X4
- JP B6 RETURN
- TTL CPUMTR/PROGRAM - PROGRAM MODE EXECUTION.
- TITLE PRG - REQUEST TRANSLATION.
- QUAL PROGRAM
- PRG SPACE 4
- ** PRG - PROCESS PROGRAM MODE REQUEST.
- PRG1 SA7 A5 STORE *OR* FOR PROGRAM MODE REQUEST
- EQ PRG
- PRGX SX6 1 SET REQUEST EXIT
- SA6 PX
- MJ1 XJ * EXIT
- PRG SA1 PR CHECK REQUEST WORD
- * ALL PENDING REQUESTS ARE PROCESSED BEFORE ANY ADDITIONAL
- * REQUESTS ARE PROCESSED.
- SA3 PRGA CHECK PENDING REQUESTS
- BX7 X7-X7
- NZ X3,PRG2 IF PENDING REQUESTS
- BX3 X1 SELECT FROM NEW REQUESTS
- PRG2 ZR X3,PRGX IF NO REQUESTS
- LX3 -11
- PX4 X7 SET BIT 58
- NX1,B4 X3 FIND REQUEST BIT
- AX2 X4,B4 POSITION BIT
- LX3 11
- SX4 B4
- * CLEAR REQUEST BIT.
- + SA1 A1 **** PERFORM IN 1 WORD ****
- BX6 X1-X2 **** PERFORM IN 1 WORD ****
- SA6 A1 **** PERFORM IN 1 WORD ****
- BX6 X3-X2 CLEAR REQUEST
- AX2 48
- SA6 A3
- NZ X2,MNR IF MONITOR REQUEST
- * PROCESS PPU REQUEST.
- LX4 PPCES
- TA5 X4+1-11*PPCE,FP
- LX4 PPXES-PPCES
- TA2 X4+ACPP-11*PPXE,FPX
- UX1,B4 X5 UNPACK REQUEST
- SB7 X2 SET CP ADDRESS
- SA3 TPPR-CPUM+B4 SET PROCESSOR ADDRESS
- LX3 30
- SB6 X3
- TJP (/PROBE/PRG,PROBE,B6) PROCESS REQUEST
- PRGA CON 0 PENDING REQUEST WORD
- ** EXIT TO PROCESSOR WITH -
- * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
- * (X2) = *ACPP*.
- * (X3) = PROCESSOR CONTROL WORD SHIFTED 30 BITS.
- * (X7) = 0.
- * (A2) = *ACPP* ADDRESS.
- * (A5) = OUTPUT REGISTER ADDRESS.
- * (B4) = REQUEST NUMBER.
- * (B6) = PROCESSOR ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- TITLE PPU REQUEST PROCESSORS.
- CKS SPACE 4
- ** CKS - CHECKSUM SELECTED AREA.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- * (X7) = 0.
- CKS SA2 B7+1 GET RA
- MX6 -17
- AX5 24
- BX5 -X6*X5 LENGTH
- BX1 -X6*X1 FWA
- AX2 36 RA
- IX1 X2+X1 ABSOLUTE FWA
- SX0 B1
- IX5 X5-X0
- SX4 2
- CKS1 ERX2 X1
- LX7 1
- IX3 X1+X0
- IX6 X7+X2
- ERX3 X3
- LX6 1
- IX1 X1+X4
- SX5 X5-2 DECREMENT LENGTH
- IX7 X6+X3
- PL X5,CKS1 IF CHECKSUM NOT COMPLETE
- LX5 -1
- SA3 A5+B1 COMPARE CHECKSUM
- PL X5,CKS2 IF EVEN WORD COUNT
- BX7 X6
- CKS2 BX6 X7-X3
- ZR X6,CKS3 IF COMPARE SUCCESSFUL
- SX6 B1 RETURN RESPONSE
- CKS3 SA7 A3 STORE NEW CHECKSUM
- SA6 A5 STORE OUTPUT REGISTER
- JP PRG
- CST SPACE 4,10
- ** CST - CLEAR STORAGE.
- *
- * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
- * (X2) = *ACPP*.
- *
- * EXIT TO CLEAR STORAGE PROCESSOR.
- *
- * USES X - 2.
- * A - 2, 5.
- CST BSS 0 ENTRY
- AX2 24 SET CP/PCP ADDRESS
- SB7 X2
- TJP (/PROGRAM/CSE1,CME,/PROGRAM/CSE,MECS,/PROGRAM/CSC,CMU,/
- ,PROGRAM/CSP)
- DLKM SPACE 4,18
- ** DLK - DELINK TRACK CHAIN.
- *
- * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
- *
- * EXIT (X1) = FIRST TRACK OF CHAIN TO DROP.
- * (X2) = TRACK WHICH FIRST TRACK IS TO BE LINKED TO.
- * (X3) = TDGL WORD OF MST.
- * (X5) = -7777B.
- * (B3) .LT. 4 FLAG TO DROP TRACKS PROCESSOR.
- * (B6) = FIRST WORD ADDRESS OF TRT.
- * (A3) = ADDRESS OF TDGL WORD IN MST.
- *
- * USES A - 1, 4, 6, 7.
- * B - 3.
- * A - 4, 7.
- *
- * CALLS CTR, DTC.
- DLK SB3 DLK1 SET *CTR* RETURN
- EQ CTR CHECK TRACK REQUEST
- DLK1 AX4 X5,B1 TRACK MASK = -3777B
- MX6 -2
- BX7 -X4*X7 LAST TRACK TO DROP
- BX6 -X6*X7 BYTE NUMBER
- SA4 TMSK+X6 READ TRACK CLEARING MASK
- SB3 X6 RESERVATION BIT SHIFT COUNT
- AX7 2 TRT WORD NUMBER
- BX6 -X5+X4 DISABLE CLEARING RESERVATION AND INTERLOCK
- SA4 B6+X7 READ TRT WORD
- LX7 X4,B3 CHECK LAST TRACK RESERVED
- LX7 56
- PL X7,HNG IF TRACK NOT RESERVED
- BX7 X6*X4 CLEAR LINK IN LAST TRACK
- SA7 A4
- SB3 B0 INDICATE CALLED FROM *DLK*
- EQ DTC1 EXIT TO DROP TRACKS PROCESSOR
- DTC SPACE 4
- ** DTC - DROP TRACK CHAIN.
- *
- * ENTRY (A5) = PPU OUTPUT REQISTER ADDRESS.
- *
- * EXIT (OR) = NUMBER OF SECTORS RETURNED TO SYSTEM.
- *
- * USES X - ALL.
- * B - 2, 3, 4, 5, 6, 7.
- * A - 1, 2, 6, 7.
- *
- * CALLS CCP, CTR.
- DTC SB3 DTC1 SET *CTR* RETURN
- EQ CTR CHECK TRACK REQUEST
- * ENTERED HERE FROM *DLKM* PROCESSOR.
- DTC1 LX3 12 POSITION TRACK COUNT
- AX4 X5,B1 (X4) = TRACK MASK = -3777B
- SA5 A5
- BX7 -X4*X3
- LX5 59-58
- LX3 -24
- PL X5,DTC1.1 IF NOT PROGRAM MODE
- SA7 DTCB
- DTC1.1 MX5 -12
- BX7 -X4*X1
- BX6 X4*X1 DROPPING ALL TRACKS FLAG
- BX3 -X4*X3
- SA1 A3+DILL-TDGL GET 819 DEVICE FLAG
- SB5 X3+B6 FIRST FREE TRACK POINTER
- LX1 0-22
- SX3 B1
- BX1 X3*X1 819 DEVICE FLAG
- LX7 -2
- SB7 X1
- SA1 A3+MDGL-TDGL READ SECTOR LIMITS
- BX1 -X4*X1 SECTOR LIMIT
- LX1 24
- BX3 X3+X1
- NZ X6,DTC3 IF DROPPING ALL TRACKS
- * ENTER SECTOR NUMBER/LINK BYTE IN LAST TRACK.
- BX0 X4*X7 BYTE NUMBER
- LX0 2
- SB2 X0+56 RESERVATION BIT SHIFT COUNT
- LX1 -24
- LX0 2
- IX1 X2-X1 CHECK EOI SECTOR NUMBER
- SB4 X0
- ZR B3,DTC2 IF ENTERED FROM *DLK*
- PL X1,HNG IF ILLEGAL LAST SECTOR WRITTEN
- DTC2 LX0 1
- SB3 B4+X0 LINK BYTE SHIFT COUNT
- SB4 B3-48
- SA1 B6+X7 READ TRT WORD
- AX7 X5,B4 POSITION BYTE CLEARING MASK
- AX2 X2,B4 POSITION SECTOR NUMBER/LINK
- BX7 X7*X1 CLEAR OLD LINK
- SB4 A1 SET LINK ADDRESS
- BX7 X7+X2 MERGE SECTOR LIMIT/LINK
- EQ DTC6 DROP REST OF CHAIN
- * DECREMENT PRESERVED FILE COUNT AND CHECK MRT PROCESSING.
- DTC3 BX2 X4*X7 BYTE NUMBER
- LX2 2
- SA1 X7+B6 READ TRT WORD
- SB2 X2
- LX1 X1,B2 POSITION PRESERVED FILE BIT
- LX1 59-11
- NG X1,DTC9 IF PRESERVED FILE
- ZR X6,DTC5 IF NOT DROPPING ALL TRACKS
- MX1 1 FORCE *MRT* UPDATE
- BX6 X6-X6
- DTC4 PL X1,DTC5 IF NOT TO CLEAR *MRT* BIT
- TPL X0,(/ISDMMF/CMB,ISDMMF,/PROGRAM/HNG) IF SHARED DEVICE
- * DROP TRACK CHAIN.
- * REENTRY HERE FROM */PROGRAM/CMB*.
- DTC5 IX6 X6+X3 INCREMENT TRACKS/PRU-S DROPPED
- TNZ B7,(/BUFIO/DIB,BUFIO,/PROGRAM/HNG) IF BUFFERED DEVICE
- * REENTRY HERE FROM */IO819/DLB*.
- DTC5.1 SA1 DTCB FETCH TRACK LIMIT
- BX2 X7
- BX0 X4*X7 BYTE NUMBER
- LX2 2 TRACK NUMBER
- LX0 2
- IX1 X1-X2
- SA2 TMSK+X0 READ TRACK CLEARING MASK
- SB2 X0+56 RESERVATION BIT SHIFT COUNT
- NG X1,HNG IF TRACK BEYOND DEVICE LIMIT
- LX0 2
- SA1 B6+X7 READ TRT WORD
- SB3 X0
- LX0 1
- SB3 B3+X0 BYTE NUMBER * 12 + 12
- SX0 A1-B5
- BX7 X2*X1 CLEAR TRACK
- PL X0,DTC6 IF NOT FIRST FREE TRACK
- SB5 A1 UPDATE FIRST FREE TRACK POINTER
- DTC6 SA7 A1 STORE TRT WORD
- LX2 X1,B3 POSITION LINK BIT
- LX1 X1,B2 POSITION RESERVATION BIT
- AX2 48
- PL X1,HNG IF NOT RESERVED
- BX7 -X4*X2
- LX7 -2
- NG X2,DTC5 IF NOT END OF CHAIN
- * UPDATE REMAINING TRACK COUNT.
- * UPDATE FIRST FREE TRACK POINTER.
- SA3 A5 LOCATE DEVICE MST
- MX0 -9
- AX3 36
- BX0 -X0*X3 EXTRACT EST ORDINAL
- CX3 X0,EST CONVERT EST ORDINAL TO OFFSET
- MX0 -12
- TA3 X3+EQDE,EST READ EST ENTRY
- BX7 -X0*X3
- LX7 3
- SA3 X7+TDGL READ *TDGL* WORD OF MST
- MX0 -24
- BX7 -X0*X6 NUMBER OF TRACKS DROPPED
- SX1 B5-B6 FIRST FREE TRACK
- IX7 X3+X7 ADD TRACKS TO *TDGL*
- AX6 24 NUMBER OF SECTORS DROPPED
- LX7 -12
- SB5 PRG
- BX7 X4*X7 CLEAR FIRST FREE TRACK POINTER
- AX3 24
- BX7 X7+X1 UPDATE FIRST FREE TRACK
- LX7 12
- BX5 -X4*X3 LENGTH OF TRT
- SA7 A3
- SA2 A3+NVGL-TDGL
- SX3 B1+
- PL X2,DTC8 IF NO FLAW REQUEST
- LX2 12
- BX2 -X4*X2
- LX2 -2
- BX0 -X0+X2
- SA2 B6+X2 READ TRT WORD FOR TRACK
- LX0 2
- SB3 X0
- IX7 X7-X3
- AX3 B3
- BX2 X3-X2
- BX3 X3*X2
- ZR X3,DTC8 IF TRACK RESERVED
- SB3 B3+X0
- SB3 B3+X0
- SB3 B3+B3
- SA7 A3 STORE UPDATED *TDGL*
- LX4 12
- SB3 B3+B3
- AX4 B3
- BX7 -X4+X2
- SA7 A2
- DTC8 SA2 A5+
- BX7 X6 SET REPLY
- LX2 59-58
- NG X2,CCP1 IF PROGRAM MODE
- SA2 /MONITOR/T1 RESTORE (B2)
- SB5 /MONITOR/PPRX SET MONITOR MODE EXIT
- SB2 X2+
- EQ CCP1 CHECK FOR CHECKPOINT REQUEST
- * PROCESS PRESERVED FILE.
- DTC9 LX1 4 POSITION TRACK INTERLOCK
- ZR X6,DTC4 IF NOT DROPPING ALL TRACKS
- SA2 A3+B1 READ MST
- ERRNZ ACGL-1 INDEX MUST BE ONE
- LX5 24
- BX6 -X5*X2 PRESERVED FILE COUNT
- ZR X6,DTC4 IF FILE COUNT IS ZERO
- SX5 B1
- LX5 24
- IX6 X2-X5 DECREMENT PRESERVED FILE COUNT
- SA6 A2
- BX6 X6-X6
- EQ DTC4 RE-ENTER PROCESSING
- DTCA BSS 0 SCRATCH WORD
- CON 0 MUST BE THE WORD BEFORE TMSK
- TMSK BSS 0 TRACK CLEARING MASKS
- VFD 12/0,12/-0,12/-0,12/-0,12/3567B BYTE 0
- VFD 12/-0,12/0,12/-0,12/-0,12/5673B BYTE 1
- VFD 12/-0,12/-0,12/0,12/-0,12/6735B BYTE 2
- VFD 12/-0,12/-0,12/-0,12/0,12/7356B BYTE 3
- DTCB CON 0 DEVICE TRACK LIMIT
- LCC SPACE 4
- ** LCC - *PIOM* LOAD CENTRAL PROGRAM (SF = 6). PROGRAM MODE.
- *
- * ENTRY (A5) = PP OUTPUT REGISTER.
- * (X5) = *PIOM* REQUEST.
- * (B7) = CP ADDRESS.
- *
- * USES X - ALL.
- * B - 3, 4, 5, 6.
- * A - 1, 2, 4.
- *
- * CALLS CMP, MSR.
- LCC SA2 B7+FLSW GET RA AND FL
- MX6 -12
- SB5 X5 GET RELATIVE CM ADDRESS OF LOAD
- BX4 -X6*X2 FL/100B
- LX2 -12
- MX6 -RMSK
- BX2 -X6*X2 RA/100B
- LX5 -18
- SA1 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
- LX4 6
- LX2 6
- SX3 X5 GET LWA+1 OF LOAD
- LX1 -12
- LX5 18
- ZR X3,LCC1 IF NO LWA SPECIFIED FOR LOAD
- IX0 X4-X3
- BX4 X3
- NG X0,HNG IF LWA+1 .GT. FL
- LCC1 BX1 -X6*X1 ABSOLUTE CM ADDRESS
- ERX3 X1
- SB6 X4 FL OR RELATIVE LWA+1 LOAD
- SB4 X3-1 GET PROGRAM LENGTH
- MX6 -36
- SB3 B4+B5 RELATIVE LOAD ADDRESS + LENGTH
- SX3 IFLS RETURN STATUS = INSUFFICIENT FL
- BX5 -X6*X5
- GT B3,B6,LCC2 IF INSUFFICIENT FIELD LENGTH FOR LOAD
- SX0 B1
- IX0 X1+X0 FWA PROGRAM CODE
- SX3 B5
- IX1 X2+X3 CM ADDRESS LOADING TO
- SX2 B4+
- BX3 X3-X3 RETURN STATUS = NO ERROR
- IX5 X5+X2 ADVANCE RELATIVE CM ADDRESS
- IX1 X0-X1
- SB6 LCC2 *CMP* *MSR* RETURN ADDRESS
- TJP (/CME/MSR,CME,/PROGRAM/CMP,CMU,/MONITOR/MSR)
- LCC2 LX3 -24
- BX7 X5+X3
- EQ PRG1 EXIT TO STORE OUTPUT REGISTER
- PIP SPACE 4,15
- ** PIP - *PIOM* PROGRAM MODE PROCESSOR.
- *
- * ENTRY (A5) = PP *OR* ADDRESS.
- * (X5) = (OR).
- * (B7) = CP ADDRESS.
- * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
- * DESCRIPTION.
- * (MB+1) = 1/MODE,23/,18/PROC,18/SUBFUNCTION DATA.
- * MODE = 1 (PROGRAM MODE).
- * PROC = PROGRAM MODE *PIOM* RETURN ADDRESS.
- *
- * EXIT TO *PIOM* PROCESSOR RETURN ADDRESS.
- * (B5) = *PIOM* SUBFUNCTION - 1.
- * A5, B7, X5 SAME AS ON ENTRY.
- PIP AX1 42 GET *PIOM* SUBFUNCTION CODE
- SB4 X1-LCRS
- ZR B4,LCC IF LOAD CM RESIDENT CODE SUBFUNCTION
- SA3 A5+2 GET PROGRAM MODE PROCESSOR ADDRESS
- SB5 X1-1 SUBFUNCTION - 1
- LX3 -18
- SB6 X3
- JP B6 JUMP TO *PIOM* SUBFUNCTION PROCESSOR
- RDC SPACE 4
- ** RDC - REQUEST DATA CONVERSION.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- * REFER TO *RDCM* DOCUMENTATION FOR MORE INFORMATION.
- *
- * EXIT TO *PRG*.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * B - 1, 2, 3, 4, 5, 6.
- * A - 1, 2, 3, 4, 6, 7.
- *
- * CALLS DSB.
- RDC SA1 A5 PRESET (A1)
- MX4 -6
- SB3 B1 SET WORD COUNT
- LX1 24
- SB6 RCDS CHECK FOR *RCIS*/*RCDS* SUBFUNCTIONS
- ERRNZ RCIS CODE DEPENDS ON VALUE
- BX2 -X4*X1
- LX1 6
- SB5 6 SHIFT COUNT
- BX5 -X4*X1 MILLIUNITS CONVERSION
- LX1 6
- BX1 -X4*X1 VALIDATE WORD COUNT AND SRU POINTER
- MX4 -30 (X4) = DATA MASK
- ZR X2,RDC4 IF 1 WORD TO CONVERT (0 IMPLIES 1)
- SB3 X2 SET SUBFUNCTION / WORD COUNT
- SB4 X1 SET SRU POINTER
- GT B3,B6,RDC9 IF NOT *RCIS*/*RCDS* SUBFUNCTION
- LT B3,B6,RDC1 IF NOT *RCDS* SUBFUNCTION
- * CONVERT INTEGER TO F10.3 FORMAT (*RCDS*).
- MX4 -48 DATA MASK
- SA3 A5+B1 WORD TO CONVERT
- ZR B4,RDC4 IF NO CONVERSION TO CLOCK CYCLES
- SB4 RDC3 SET *DSB* RETURN ADDRESS
- SA2 /MONITOR/CPTA CONVERT QUARTER NANOUNITS TO CLOCK CYCLE
- PX2 X2
- BX6 X3
- NX2 X2
- EQ DSB DIVIDE 60 BIT INTEGER
- * CONVERT INTEGER(S) TO F10.3 FORMAT (*RCIS*).
- RDC1 ZR B4,RDC2 IF NO SRU CONVERSION
- GT B4,B3,HNG IF SRU POINTER .GT. WORD COUNT
- SA2 A5+B4
- MX6 -42
- SA3 /MONITOR/TTH
- BX6 -X6*X2 ISOLATE SRU ACCUMULATOR
- PX6 X6
- FX6 X3*X6 SCALE SRU ACCUMULATOR
- SA6 A2 STORE FOR CONVERSION
- RDC2 ZR X5,RDC4 IF NO NANOUNITS TO MILLIUNITS CONVERSION
- SB4 X5
- SA3 A5+B4 WORD TO CONVERT
- GT B4,B6,HNG IF MILLIUNITS POINTER .GT. WORD COUNT
- SA2 /MONITOR/CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
- SB4 RDC3 SET *DSB* RETURN ADDRESS
- BX6 X3
- EQ MSB MULTIPLY 60 BIT INTEGER
- RDC3 SA6 A3+ STORE QUOTIENT
- SB6 7 RESTORE B6
- * INITIALIZE CONVERSION. (A1) = OR. (B6) = CONVERSION COUNT.
- RDC4 SA2 RDCA (X2) = 0.1P48+1
- SX5 1R. (X5) = DECIMAL POINT
- SA3 RDCB (X3) = 10.0P
- LX5 18
- MX0 -18 (X0) = FRACTION MASK
- * CONVERT ACCOUNTING WORDS.
- RDC5 SA1 A1+B1 CHECK NEXT WORD
- BX6 -X4*X1
- SX7 1000
- ZR X6,RDC8 IF BLANK WORD
- SB4 1R0-1R (B4) = CONVERSION
- SA4 A3+B1 (X4) = BACKGROUND
- PX1 X6
- SB2 9 SET MAXIMUM NUMBER OF DIGITS PER WORD
- IX7 X6-X7
- SB6 -B5
- PL X7,RDC6 IF INTEGER PRESENT
- SB4 B0+
- SA4 A4+1
- RDC6 DX6 X2*X1 EXTRACT REMAINDER
- FX1 X2*X1
- UX7 X1 CHECK QUOTIENT
- SB2 B2-B1 DECREMENT CHARACTER COUNT
- LX4 -6 SHIFT ASSEMBLY
- GT B2,B0,RDC7 IF WORD NOT FULL
- BX7 X7-X7 TERMINATE CONVERSION
- RDC7 SB6 B6+B5 ADVANCE SHIFT COUNT
- FX6 X3*X6 EXTRACT DIGIT
- SX6 X6+B4 CONVERT DIGIT
- IX4 X6+X4
- NZ X7,RDC6 LOOP TO ZERO QUOTIENT
- LX6 X4,B6 RIGHT JUSTIFY ASSEMBLY
- BX4 -X0*X6 EXTRACT FRACTION
- ZR X5,RDC8 IF SECOND PASS FOR F20.3 CONVERSION
- IX7 X4+X5 ADD DECIMAL POINT
- LX6 6
- MX4 36
- BX4 X4*X6 EXTRACT INTEGER
- IX6 X4+X7 ADD INTEGER
- SB6 -B5 RESET SHIFT COUNT
- LE B3,B5,RDC8 IF NOT F20.3 CONVERSION
- SA6 A1+1 STORE WORD FROM FIRST PASS
- SB2 10 RESET NUMBER OF DIGITS PER WORD
- SA4 A3+1 RESET BACKGROUND
- UX7 X1
- SX5 B0+ INDICATE F20.3 FIRST PASS COMPLETE
- BX6 X4
- SB4 1R0-1R RESET CONVERSION OFFSET
- NZ X7,RDC6 IF MORE DIGITS TO CONVERT
- RDC8 SA6 A1 STORE CONVERSION
- BX7 X7-X7
- GT B3,B5,PRG1 IF F20.3 CONVERSION
- SB3 B3-B1 DECREMENT WORD COUNT
- MX4 -30
- NZ B3,RDC5 IF MORE TO CONVERT
- EQ PRG1 EXIT AND STORE *OR*
- * INCREMENT CURRENT PACKED DATE BY SPECIFIED TERM (*RIDS*).
- RDC9 SB6 REPS
- ERRNZ REPS-RIDS-1 CODE DEPENDS ON VALUE
- GT B3,B6,HNG IF ILLEGAL SUBFUNCTION
- EQ B3,B6,RDC17 IF *REPS* SUBFUNCTION
- SA2 PDTL GET CURRENT DATE
- AX2 18
- SA5 A5 GET TERM
- MX0 -12
- BX1 -X0*X5
- MX0 -6 UNPACK DATE
- BX3 -X0*X2
- SB3 X3 DAY
- AX2 6
- BX3 -X0*X2
- SB4 X3 MONTH
- AX2 6
- BX2 -X0*X2
- SB5 X2 YEAR
- MX0 -2 MASK FOR LEAP YEAR
- * ADVANCE YEAR.
- RDC10 SX4 X1-366D (TERM REMAINING) - (DAYS IN LEAP YEAR)
- NG X4,RDC14 IF LESS THAN 1 YEAR REMAINING
- SB5 B5+B1 ADD 1 YEAR TO EXPIRATION DATE
- SX3 B5+B1
- SB6 B1+B1
- BX2 -X0*X3
- ZR X2,RDC11 IF CURRENT YEAR IS A LEAP YEAR
- SX2 X3+B1 YEAR + 1 + LEAP YEAR OFFSET
- BX2 -X0*X2
- NZ X2,RDC13 IF NEXT YEAR IS NOT A LEAP YEAR
- LE B4,B6,RDC13 IF BEFORE LEAP DAY
- SX1 X1-1 SUBTRACT 1 DAY TO OFFSET LEAP DAY
- EQ RDC13 SUBTRACT 1 YEAR FROM TERM
- RDC11 GT B4,B6,RDC13 IF AFTER LEAP DAY
- SX1 X1-1 SUBTRACT 1 DAY TO OFFSET LEAP DAY
- RDC13 SX1 X1-365D SUBTRACT 1 YEAR FROM TERM
- EQ RDC10 CONTINUE PROCESSING
- * ADVANCE MONTH.
- RDC14 SA4 RDCC+B4 GET DAYS IN CURRENT MONTH
- SX7 B4-2
- NZ X7,RDC15 IF CURRENT MONTH NOT FEBRUARY
- SX2 B5+2
- BX7 -X0*X2
- NZ X7,RDC15 IF NOT LEAP YEAR
- SX4 X4+B1 ADD LEAP DAY
- RDC15 SX2 B3+
- IX2 X4-X2 DAYS TO END OF CURRENT MONTH
- IX3 X1-X2 SUBTRACT FROM TERM REMAINING
- NG X3,RDC16 IF NOT ENOUGH TERM REMAINING TO FILL MONTH
- ZR X3,RDC16 IF TERM EXACTLY FILLS CURRENT MONTH
- SB3 B0+
- SB4 B4+B1 INCREMENT MONTH
- BX1 X3 SET NEW TERM
- SX7 B4-13
- NZ X7,RDC14 IF NOT END OF YEAR
- SB5 B5+B1 INCREMENT YEAR
- SB4 B1 SET MONTH TO JANUARY
- EQ RDC14 CONTINUE
- * RETURN NEW PACKED DATE.
- RDC16 SB3 X1+B3 SET DAYS
- SX6 B5 ADD IN YEAR
- LX6 6
- SX6 X6+B4 ADD IN MONTH
- LX6 6
- SX6 X6+B3 ADD IN DAY
- SA6 A5+B1 SET DATE IN MESSAGE BUFFER WORD
- BX7 X7-X7
- EQ PRG1 EXIT AND STORE OUTPUT REGISTER
- * ENCRYPT PASSWORD (*REPS*).
- *
- * THE ENCRYPTION ALGORITHM USED IS A POLYNOMIAL EXPANSION,
- * MODULUS A LARGE PRIME NUMBER, OF THE FORM -
- *
- * E = SUM(A(N) * K**B(N))MOD PRIME
- *
- * WHERE -
- *
- * E = ENCRYPTED PASSWORD.
- * K = UNENCRYPTED (PLAINTEXT) PASSWORD.
- * A(N) = LARGE EXPANSION COEFFICIENT (N=1,6).
- * B(N) = PRIME EXPANSION EXPONENT (N=1,6).
- * PRIME = LARGE PRIME INTEGER IN THE INTERVAL
- * (2**41, 2**42-1).
- *
- * PROGRAMMING NOTES.
- *
- * 1. THIS ALGORITHM MAY BE CUSTOMIZED BY ANY OR ALL
- * OF THE FOLLOWING METHODS -
- *
- * A. CHANGING THE VALUE OF THE PRIME MODULUS,
- * MAINTAINING THE CORRECT RANGE.
- *
- * B. CHANGING THE NUMBER OF TERMS IN THE EXPANSION
- * POLYNOMIAL.
- *
- * C. CHANGING THE VALUES OF THE PRIME EXPONENTS.
- *
- * D. CHANGING THE VALUES OF THE COEFFICIENTS.
- *
- * 2. THE LENGTH OF THE BIT STRING TO BE ENCRYPTED MAY
- * BE ALTERED TO ANY VALUE N .LE. 48D BY ALTERING
- * THE RANGE OF THE PRIME MODULUS TO ANY VALUE *MOD*
- * SUCH THAT -
- *
- * (2**(N-1)) .LE. MOD .LE. (2**(N)-1)
- NTERM EQU 6 NUMBER OF TERMS IN POLYNOMIAL EXPANSION
- ** TEMPORARY STORAGE LOCATIONS USED BY SUBFUNCTION *REPS*.
- RDCD BSS 0 START OF TEMPORARY STORAGE
- EPWD CON 0 ENCRYPTED PASSWORD
- UPWD CON 0 UNENCRYPTED PASSWORD
- TMP1 CON 0 TEMPORARY STORAGE
- TMP2 CON 0 TEMPORARY STORAGE
- TMP3 CON 0 TEMPORARY STORAGE
- RDCDL EQU *-RDCD LENGTH OF TEMPORARY STORAGE
- SPACE 4,10
- * PRIME - PRIME IS CHOSEN TO PROVIDE A LARGE PRIME
- * INTEGER IN THE INTERVAL (2**41,2**42-1).
- PRIM DATA 00000077777777777561B (2**42)-143 PRIME MODULUS
- MOD DATA 17717777777777756100B PACKED/NORMALIZED PRIME MODULUS
- SPACE 4,10
- * EXPT - TABLE OF PRIME EXPONENTS USED BY SUBFUNCTION *REPS*.
- EXPT BSS 0 START OF TABLE
- DATA 1777777777747B (2**37)-25
- DATA 1777755B (2**19)-19
- DATA 3
- DATA 2
- DATA 1
- DATA 0
- EXPTL EQU *-EXPT
- ERRNZ EXPTL-NTERM IMPROPER NUMBER OF EXPONENTS
- SPACE 4,10
- * COFT - TABLE OF COEFFICIENTS USED BY SUBFUNCTION *REPS*.
- COFT BSS 0 START OF TABLE
- DATA 35216
- DATA 14486
- DATA 29891
- DATA 68607
- DATA 41867
- DATA 14951
- COFTL EQU *-COFT
- ERRNZ COFTL-NTERM IMPROPER NUMBER OF COEFFICIENTS
- RDC17 SA1 A5+B1 GET UNENCRYPTED PASSWORD
- MX0 -42
- AX1 18
- BX6 -X0*X1
- SB6 B0+ INITIALIZE ITERATION INDEX
- SA6 UPWD
- * CALCULATE THE EXPONENT Y = (Z**N)MOD PRIME, WHERE
- * Y, Z, AND N ARE 42-BIT INTEGERS.
- RDC18 SA1 UPWD GET UNENCRYPTED PASSWORD
- SA2 EXPT+B6 GET EXPONENT
- BX6 X1 SAVE Z = INTEGER
- LX7 X2 SAVE N = WORKING EXPONENT
- SA6 A1+B1 (TMP1) = Z TERM
- ERRNZ TMP1-UPWD-1 ERROR IF WORDS NOT CONTIGUOUS
- SA7 A6+B1 (TMP2) = N
- ERRNZ TMP2-TMP1-1 ERROR IF WORDS NOT CONTIGUOUS
- SX6 B1 INITIALIZE Y TERM
- SA6 A7+B1 (TMP3) = Y
- ERRNZ TMP3-TMP2-1 ERROR IF WORDS NOT CONTIGUOUS
- ZR X2,RDC23 IF EXPONENT = ZERO
- RDC19 SA3 TMP2 GET N TERM
- SA1 TMP1 GET Z TERM
- AX6 X3,B1 N = N/2
- LX3 59-0
- SA6 A3+ STORE HALVED N TERM
- PL X3,RDC21 IF N TERM WAS EVEN BEFORE HALVING
- SA2 TMP3 GET Y TERM
- SB3 RDC20 SET RETURN ADDRESS
- EQ MPY Y = Z*Y
- RDC20 SA6 TMP3 SAVE NEW Y
- SA3 TMP2 CHECK N
- ZR X3,RDC23 IF CALCULATION COMPLETE
- SA1 TMP1 GET Z TERM
- RDC21 BX2 X1
- SB3 RDC22 SET RETURN ADDRESS
- EQ MPY Z = Z*Z
- RDC22 SA6 TMP1 SAVE NEW Z TERM
- EQ RDC19 LOOP
- * MULTIPLY COEFFICIENT * EXPONENT.
- RDC23 SA2 COFT+B6 GET COEFFICIENT
- SA1 TMP3 GET EXPONENT
- SB3 RDC24 SET RETURN ADDRESS
- EQ MPY MULTIPLY BY COEFFICIENT
- * CALCULATE THE ENCRYPTED PASSWORD.
- RDC24 SA2 EPWD GET ENCRYPTED PASSWORD
- SA3 PRIM GET PRIME MODULUS
- IX6 X2+X6 SUM VALUES
- IX1 X6-X3
- NG X1,RDC25 IF SUM .LT. MODULUS
- BX6 X1
- RDC25 SA6 A2 STORE NEW ENCRYPTED PASSWORD
- SB6 B6+B1 INCREMENT ITERATION INDEX
- SB5 B6-NTERM
- NG B5,RDC18 IF MORE ITERATIONS REQUIRED
- * CLEAR TEMPORARY STORAGE LOCATIONS AND RETURN
- * ENCRYPTED PASSWORD.
- SA1 EPWD GET ENCRYPTED PASSWORD
- SB6 RDCDL-1
- BX6 X1
- LX6 18 LEFT-JUSTIFY OUTPUT
- BX7 X7-X7
- SA6 A5+B1 RETURN ENCRYPTED PASSWORD
- RDC26 SA7 RDCD+B6 CLEAR TEMPORARY STORAGE
- SB6 B6-1
- PL B6,RDC26 IF MORE WORDS TO CLEAR
- EQ PRG1 EXIT AND SET OUTPUT REGISTER
- RDCA CON 0.1P48+1 EXTRACT REMAINDER
- RDCB CON 10.0P EXTRACT DIGIT
- CON 10H
- CON 10H 0000
- RDCC EQU *-1 TABLE OF DAYS IN MONTH
- CON 31 JANUARY
- CON 28 FEBRUARY
- CON 31 MARCH
- CON 30 APRIL
- CON 31 MAY
- CON 30 JUNE
- CON 31 JULY
- CON 31 AUGUST
- CON 30 SEPTEMBER
- CON 31 OCTOBER
- CON 30 NOVEMBER
- CON 31 DECEMBER
- RTC SPACE 4,20
- ** RTC - RESERVE TRACK CHAIN.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- *
- * EXIT (X7) = FIRST TRACK IN BYTE 4, IF TRACKS ASSIGNED.
- * (X7) = REASON CODE IN BYTE 3, IF NO TRACKS ASSIGNED.
- *
- * USES X - ALL.
- * B - 2, 3, 4, 5, 6, 7.
- * A - 0, 1, 2, 3, 4, 6, 7.
- *
- * CALLS CCP1, CTR.
- RTC BSS 0 ENTRY
- BX2 X1 CHECK EQUIPMENT SPECIFIED
- MX0 -9
- LX2 24
- BX3 -X0*X2
- SB3 RTC7 SET *CTR* RETURN
- NZ X3,CTR IF EQUIPMENT SPECIFIED
- AX2 48
- SB4 B0 (B4) = FIRST UNRESTRICTED DEVICE
- SB2 X2-MXRS
- PL B2,HNG IF ILLEGAL DEVICE SELECTION
- TA1 X2,MSA READ DEVICE SELECTION BITS
- TA0 EQDE,EST (A0) = FWA OF EST
- UX3,B5 X1 (B5) = CURRENT EQUIPMENT TO CHECK
- MX0 13 (X0) = MASK TO CLEAR CURRENT SELECTION
- SX2 X5 (X2) = SECTORS REQUESTED
- PL X2,RTC0 IF SECTORS REQUESTED FIELD GT 0
- SX6 X2+1 CHECK FOR -1 IN SECTORS REQUESTED FIELD
- MX7 -18
- ZR X6,RTC0 IF ALL AVAILABLE TRACKS REQUESTED
- BX2 -X7*X2 SET SECTORS REQUESTED TO POSITIVE NUMBER
- RTC0 MX7 -12
- SB2 1000B-1777B (B2) = DALL ACTIVITY TO BEAT
- PX6 X7,B0 (X6) = TRACK LIMIT REJECT
- LX5 59-23
- SB3 0-1777B (B3) = DALL ACTIVITY, IMMEDIATE SELECTION
- PL X5,RTC3 IF NO ACCESS LEVEL SELECTION
- TEQ (/PROGRAM/RTC1,OSSM,/PROGRAM/RTC3)
- RTC1 LX5 -59+23-18 EXTRACT ACCESS LEVEL SELECTION REQUIREMENT
- MX6 -3 (X6) = -7 = ACCESS LEVEL REJECT CODE
- BX4 -X5+X6
- SB6 X4 (B6) = - ACCESS LEVEL REQUESTED
- EQ RTC3 ENTER SELECTION LOOP
- RTC2 SA3 X5+PFGL READ DEVICE ACCESS LEVEL LIMITS
- LX3 -6
- BX4 -X6*X3 UPPER ACCESS LEVEL LIMIT
- SX4 X4+B6 NEGATIVE IF ACCESS LEVEL EXCEEDED
- LX3 -3
- BX3 -X6*X3
- SB7 B6-B1
- SX3 X3+B7
- BX4 -X3+X4
- UX6,B7 X6
- PX6 X6,B0 SET DEVICE FOUND (TRACK LIMIT REJECT)
- PL X4,RTC4 IF REQUESTED ACCESS LEVEL WITHIN LIMITS
- PX6 X6,B7 RESET TO PREVIOUS REJECT REASON
- * DEVICE SEARCH LOOP.
- RTC3 AX5 X0,B5 FIND NEXT EQUIPMENT
- BX3 -X5*X1
- PX5 X3
- NX4,B5 X5
- ZR X3,RTC6 IF END OF PASS ON EQUIPMENTS
- IFEQ ESTE,2,1
- SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 2)
- IFEQ ESTE,3,2
- SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 3)
- SB7 B7+B5
- IFEQ ESTE,4,2
- SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 4)
- SB7 B7+B7
- IFEQ ESTE,5,3
- SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 5)
- SB7 B7+B7
- SB7 B7+B5
- IFEQ ESTE,6,3
- SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 6)
- SB7 B7+B5
- SB7 B7+B7
- IFEQ ESTE,7,4
- SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 7)
- SB7 B7+B5
- SB7 B7+B7
- SB7 B7+B5
- IFEQ ESTE,8,3
- SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 8)
- SB7 B7+B7
- SB7 B7+B7
- ERRPL ESTE-9 CODE DOES NOT HANDLE EST SIZE .GT. 8
- SA4 A0+B7 READ EST ENTRY
- BX5 -X7*X4
- LX4 59-54
- LX5 3
- NG X4,RTC3 IF UNAVAILABLE DEVICE
- LE B6,B0,RTC2 IF ACCESS LEVEL VALIDATION REQUIRED
- RTC4 SA3 X5+DALL READ ACTIVITY BYTE
- UX3,B7 X3
- SA4 X5 + TDGL READ TRACK COUNT
- ERRNZ TDGL
- GE B7,B2,RTC3 IF NOT LESS THAN PREVIOUS LEAST ACTIVITY
- SA3 X5+MDGL READ SECTORS PER TRACK
- BX4 -X7*X4
- BX3 -X7*X3
- IX4 X4*X3
- IX4 X4-X2
- SA3 X5+ACGL
- NG X4,RTC3 IF NOT ENOUGH TRACKS
- LX3 59-4
- NG X3,RTC3 IF ERROR IDLE SET
- SB4 B5 SET CURRENT EQUIPMENT AS BEST
- SB2 B7 SET CURRENT ACTIVITY AS BEST
- GT B2,B3,RTC3 IF ACTIVITY PROHIBITS IMMEDIATE SELECTION
- RTC5 SA1 A1 UPDATE LAST EQUIPMENT SELECTED
- PX6 X1,B4
- SA6 A1
- SA5 A5 REREAD OUTPUT REGISTER
- LX7 24
- SX4 B4 MERGE EQUIPMENT IN REQUEST
- BX3 -X7*X5 ORIGINAL DEVICE SELECTION
- BX5 X7*X5
- LX4 36
- AX3 24 CHECK ORIGINAL DEVICE SELECTION
- SX2 X3-ROLS
- SX3 X3-SROS
- IX3 X2*X3
- NZ X3,RTC5.2 IF NEITHER ROLLOUT NOR SECONDARY ROLL
- TA3 ROTS,SDA UPDATE ROLLOUT STATISTICS
- TA2 NROS,SDA
- SX0 B1
- SX1 X5
- IX6 X3+X0 COUNT ROLLOUT
- IX7 X2+X1 COUNT SECTORS ROLLED
- SA6 A3
- SA7 A2
- TX7 A1-SROS,-MSA CHECK FILE ALLOCATION
- NZ X7,RTC5.2 IF NOT SECONDARY ROLLOUT DEVICE
- TA3 SOTS,SDA UPDATE SECONDARY ROLLOUT STATISTICS
- TA2 NSRS,SDA
- IX6 X3+X0 COUNT SECONDARY ROLLOUT
- IX7 X2+X1 COUNT SECONDARY SECTORS ROLLED
- SA6 A3
- SA7 A2
- RTC5.2 BX5 X4+X5
- BX7 X5
- UX1 X5
- SA7 A5 UPDATE OUTPUT REGISTER
- SB3 RTC7 SET *CTR* RETURN
- SB6 B1+ SET *CTR* ENTRY CONDITION
- TEQ (/ISD/RTC,ISD,/PROGRAM/CTR) CHECK TRACK REQUEST
- * PROCESS END OF PASS ON EQUIPMENTS.
- RTC6 UX5,B5 X1 CHECK FOR WRAP ON SELECTION WORD
- AX4 X0,B5
- PX1 X5 INITIALIZE FOR EQUIPMENT WRAP
- SB5 B0
- BX1 X4*X1 CLEAR EQUIPMENTS ALREADY CHECKED
- BX4 X4-X0
- NZ X4,RTC3 IF SECOND PASS ON EQUIPMENTS NEEDED
- SB7 100B-1777B UNRESTRICTED DEVICE THRESHOLD
- LT B2,B7,RTC5 IF UNRESTRICTED EQUIPMENT FOUND
- SA4 A1 REREAD SELECTION
- UX4 X4
- TB7 A1-SROS,-MSA
- NZ B7,RTC6.1 IF NOT SECONDARY ROLLOUT
- TA1 ROLS,MSA
- BX1 -X4*X1 CLEAR DEVICES ALREADY CHECKED
- UX3,B5 X1
- NZ X3,RTC3 IF ROLLOUT DEVICES PRESENT
- RTC6.1 TA1 MSA
- BX1 -X4*X1
- UX3,B5 X1
- NZ X3,RTC3 IF TO TRY TEMP DEVICES
- SA1 A4 RESET DEVICE TO UPDATE EQUIPMENT FOR
- NZ B4,RTC5 IF EQUIPMENT FOUND
- SX7 10000B TRACK LIMIT REJECT CODE
- AX6 12 CHECK REJECT REASON
- NZ X6,RTC6.2 IF NOT ACCESS LEVEL REJECT - EXIT
- LX7 1
- RTC6.2 SB5 PRG
- EQ CSM1 CHECK FOR STORAGE MOVE
- * CHECK TRACKS AVAILABLE.
- RTC7 SA4 A3+MDGL-TDGL READ SECTOR LIMITS
- BX6 -X5*X3 TRACKS AVAILABLE
- BX4 -X5*X4 MINUMUM SECTOR LIMIT
- NZ X7,RTC7.1 IF NOT REQUESTING ONE TRACK
- SX7 B1+ SET ONE SECTOR REQUESTED
- EQ RTC8 COMPUTE REQUESTED TRACKS
- RTC7.1 PL X7,RTC8 IF NOT REQUESTING ALL TRACKS
- SX2 X7+B1
- MX5 -18
- BX7 -X5*X7 SET SECTORS REQUESTED TO POSITIVE NUMBER
- NZ X2,RTC8 IF NOT REQUESTING ALL TRACKS
- IX7 X6*X4 REQUEST ALL TRACKS ON DEVICE
- RTC8 PX2 X4 COMPUTE REQUESTED TRACKS
- PX5 X7
- NX2 X2
- FX2 X5/X2
- UX2,B2 X2
- LX2 X2,B2
- IX5 X2*X4 COMPUTE SECTORS IN LAST TRACK
- IX7 X7-X5
- SA7 RTCA SAVE REMAINDER
- SX5 -1
- ZR X7,RTC9 IF MULTIPLE OF SECTOR LIMIT
- SX2 X2+1 INCREASE TRACK COUNT BY ONE
- RTC9 SB4 X2 REQUESTED TRACKS
- IX3 X3-X2 DECREMENT TRACKS REMAINING
- SX7 B1
- IX6 X6-X2 DECREMENT TRACKS REMAINING
- LX7 47
- NG X6,CCP1 IF TRACKS NOT AVAILABLE
- MX6 -11
- SB7 -48 (B7) = -48 = NORMALIZE BIAS
- LX3 -12
- SB3 B6-B1 FIRST WORD ADDRESS - 1 OF TRT
- BX2 -X6*X3 FIRST FREE TRACK POINTER
- MX5 -4 (X5) = -17B = RESERVATION BIT MASK
- BX3 X6*X3 CLEAR FIRST FREE TRACK POINTER
- SA2 X2+B3 SET START OF TRT SEARCH
- SA0 TMSK-1 SET SCRATCH WORD ADDRESS
- SA4 B0+ SET NO LINK WORD ADDRESS
- * CLEAR LINK BYTE IN CURRENT TRACK.
- ZR X1,RTC10 IF NO CURRENT TRACK
- MX2 -2
- BX0 -X6*X1 CURRENT TRACK
- BX2 -X2*X1
- AX0 2
- SB2 X2+56 RESERVATION BIT SHIFT COUNT
- LX2 2
- SB3 X2
- LX2 1
- SA4 X0+B6 READ TRT WORD OF CURRENT TRACK
- SB3 X2+B3 SET LINK BIT SHIFT COUNT
- LX2 X4,B2 POSITION RESERVATION BIT
- SA0 A4 SET LINK ADDRESS
- LX0 X4,B3 POSITION LINK BIT
- SB3 B3+B7 SET LINK SHIFT COUNT
- BX2 -X0*X2
- AX6 X6,B3 POSITION CLEARING MASK
- MX0 1 SET NO MRT PROCESSING
- PL X2,HNG IF NOT RESERVED OR IF LINKED
- BX6 X6*X4
- SA6 A4
- * SEARCH FOR FIRST FREE TRACK.
- RTC10 SA2 A2+B1 SEARCH FOR FREE TRACK
- BX6 X2+X5
- ZR X6,RTC10 IF NO FREE TRACK
- SX4 A2-B6 COMPUTE TRACK NUMBER
- NX6,B2 X6
- LX4 2
- SB6 4000B-44+X4
- SX4 B6+B2 TRACK NUMBER
- BX3 X3+X4 SAVE FIRST TRACK ASSIGNED
- NG X0,RTC13 IF NO MRT BIT TO SET
- TEQ (/ISDMMF/SMB,ISDMMF,/PROGRAM/HNG) SET MRT BIT
- * TRT SEARCH AND LINK LOOP.
- RTC11 SA2 A2+B1 NEXT TRT WORD
- SB6 B6+4 INCREMENT BASE TRACK NUMBER
- BX6 X2+X5 CHECK TRACKS RESERVED
- RTC12 ZR X6,RTC11 IF ALL TRACKS RESERVED
- NX6,B2 X6 (B2) = BYTE NUMBER + 44
- SX4 B6+B2 TRACK NUMBER
- RTC13 AX6 X7,B2 POSITION RESERVATION BIT
- BX6 X2+X6 RESERVE TRACK
- SA6 A2
- SA1 A0 READ PREVIOUS RESERVATION
- AX6 X4,B3 POSITION LINK BYTE
- BX6 X6+X1 MERGE LINK BYTE
- SX4 B2+B7 BYTE NUMBER - 4
- SA6 A1
- LX4 2
- SB4 B4-B1 DECREMENT TRACK COUNT
- SB3 X4
- SA2 A2 RE-READ RESERVATION WORD
- LX4 1
- SA0 A2 SET LINK ADDRESS
- SB3 X4+B3 SET LINK SHIFT COUNT
- BX6 X2+X5
- NZ B4,RTC12 IF MORE TRACKS REQUESTED
- * UPDATE LAST TRACK BYTE (EOI SECTOR).
- SA1 RTCA GET REMAINDER
- NZ X1,RTC13.1 IF REQUEST NOT MULTIPLE OF SECTOR LIMIT
- SA1 A3+MDGL-TDGL GET SECTOR LIMIT
- MX7 -12
- BX1 -X7*X1 SECTOR LIMIT
- RTC13.1 SX7 B1 COMPUTE REMAINING SECTOR COUNT
- IX1 X1-X7
- AX7 X1,B3 POSITION TO TRACK BYTE IN TRT
- BX7 X7+X2
- SA7 A2 UPDATE TRACK BYTE
- LX1 12
- SX7 B2+B6 TRACK NUMBER
- LX7 24
- BX7 X1+X7 PRESET RESPONSE
- * UPDATE FIRST FREE TRACK AND RETURN FIRST TRACK ASSIGNED.
- MX4 -11
- SA1 A3+TRLL-TDGL SET FWA OF TRT
- SB6 X1
- SB4 A4 SET LINK WORD ADDRESS
- BX1 -X4*X3
- BX6 X4*X3
- SX5 A2-B6 FIRST FREE TRACK
- SX0 X1+4000B FIRST TRACK
- BX7 X0+X7 INSERT INTO RESPONSE TO PP
- BX6 X6+X5 MERGE FIRST FREE TRACK BYTE
- AX1 2
- SB3 A2
- LX6 12
- SA2 A5 RE-READ REQUEST
- LT B4,B3,RTC14 IF LINK WORD BEFORE LAST WORD TO UPDATE
- SX5 B4-B6 UPDATE UP TO LINK WORD
- RTC14 MX4 -9 SET EST ORDINAL
- SA6 A3 STORE UPDATED *TDGL*
- LX4 36
- BX2 -X4*X2
- SX5 X5+B1 SET LWA+1 OF TRT TO UPDATE
- BX7 X2+X7 RETURN FIRST TRACK ASSIGNED
- EQ CCP1 CHECK FOR DEVICE CHECKPOINT REQUESTED
- RTCA CON 0 REMAINDER
- STB SPACE 4
- ** STB - SET TRACK BIT.
- * ENTERED FROM BOTH MONITOR AND PROGRAM MODE.
- *
- * ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
- * STB ENTRY FROM PROGRAM MODE.
- * STB1 ENTRY FROM MONITOR MODE.
- * (B5) EXIT ADDRESS IF ENTERED AT *STB1*.
- *
- * EXIT NONE.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * B - 3, 4, 5.
- * A - 3, 4, 6, 7.
- *
- * CALLS CCP, CTR.
- STB SX4 X1
- LX4 -14
- SA2 X4+/MONITOR/TSTB READ OPTION TABLE
- NG X4,STB1 IF SECOND ENTRY IN OPTION TABLE WORD
- LX2 30
- STB1 SB3 X2 SET *CTR* RETURN
- UX2,B6 X2 SET *CTR* PARAMETER
- EQ CTR CHECK TRACK REQUEST
- STB2 SX7 STIS*10000B INTERLOCK IQFT TRACK
- ZR X1,/MONITOR/STB3 IF NO IQFT TRACK
- SUBFUN STBM,(STFS,CTFS,STIS,CTIS,SPFS,CPFS)
- AX4 X5,B1 -3777B MASK
- BX1 -X4*X1 TRACK NUMBER
- MX3 -2
- SX5 B1
- BX3 X3+X1 BYTE NUMBER - 3
- LX7 -13
- SB3 X3 SET RESERVATION BIT SHIFT COUNT
- LX1 -2
- SX2 X7
- AX5 X5,B3 POSITION RESERVATION BIT
- LX2 2
- SA4 B6+X1 READ TRT WORD
- SB3 X2 SET TRACK BIT SHIFT COUNT
- BX2 X5*X4 CURRENT VALUE OF RESERVATION BIT
- LX5 X5,B3 POSITION TRACK BIT
- AX7 59 (X7) = 0 FOR SET, -0 FOR CLEAR OPTION
- BX6 X4-X5 COMPLEMENT TRACK BIT
- BX4 X5*X4 CURRENT VALUE OF TRACK BIT
- BX5 -X7*X5 NON-ZERO IF SET REQUEST
- BX4 X5-X4 ZERO IF BIT ALREADY SET/CLEAR
- ZR B3,STB8 IF FLAW REQUEST
- ZR X2,STB9 IF TRACK NOT RESERVED
- ZR X4,STB7 IF BIT ALREADY SET/CLEAR
- AX4 8
- SX3 B1
- STB4 NZ X4,STB5 IF INCREMENT/DECREMENT OF PF COUNT
- BX7 X7-X7
- SA6 A4 STORE TRT WORD
- NG X0,CCP1 IF NOT SHARED DEVICE
- TEQ (/ISDMMF/STB10,ISDMMF,/MONITOR/HNG1)
- * INCREMENT/DECREMENT PRESERVED FILE COUNT.
- STB5 BX7 X7-X3 (X7) = 1 IF INCREMENT, -1 IF DECREMENT
- LX3 24+11
- SA2 A3+B1 READ *ACGL* WORD
- LX7 24
- IX7 X2+X7 ADJUST COUNT
- BX4 -X3+X7 CHECK FOR OVERFLOW/UNDERFLOW
- ZR X4,STB4 IF OVERFLOW/UNDERFLOW
- STB6 SA7 A2 STORE UPDATED COUNTS
- BX4 X4-X4
- EQ STB4
- STB7 ZR X5,/MONITOR/HNG1 IF CLEARING AN ALREADY CLEARED BIT
- SX7 B1
- SX3 B1
- LX7 36
- MX5 1 SET NO UPDATE OF TRT IN ECS
- EQ CDI RELEASE DEVICE INTERLOCK
- * PROCESS FLAW REQUEST.
- STB8 ZR X4,STB7 IF BIT ALREADY SET/CLEAR
- SA2 X3+TMSK+3
- LX3 2 COMPUTE BYTE SHIFT COUNT
- BX5 -X2*X6 MASK OUT ALL FIELDS FOR THIS TRACK
- SB4 X3
- LX3 1
- SB4 B4+X3
- MX4 -11
- SA2 A3 REREAD *TDGL*
- LX4 12
- BX2 X4*X2 CLEAR FIRST FREE TRACK POINTER
- AX4 X4,B4 POSITION FLAW STATUS BYTE
- BX6 -X4-X6 COMPLIMENT FLAW STATUS
- BX4 -X4*X7
- BX5 X5-X4
- AX5 4 SHIFT OFF RESERVATION BITS
- NZ X5,/MONITOR/HNG1 IF BAD TRACK
- SX3 B1
- BX7 -X7-X3
- IX7 X2+X7
- EQ STB6
- STB9 SA4 A5 CHECK RETURN ON TRACK NOT RESERVED
- SX7 B1+B1
- MX5 1 SET NO TRT UPDATE
- LX4 59-46
- PL X4,/MONITOR/HNG1 IF NO RETURN
- SX3 B1
- LX7 36
- EQ CDI CLEAR DEVICE INTERLOCK
- TITLE PROGRAM MODE SUBROUTINES.
- APS SPACE 4,10
- ** APS - ASSIGN PP (PROGRAM MODE).
- *
- * ENTRY (X1) = PP REQUEST.
- * (B3) = EXIT ADDRESS.
- *
- * EXIT (X1) = ADDRESS OF COMMUNICATION BUFFER.
- * (X1) = 0 IF NO BUFFER AVAILABLE.
- * (X6) = PP REQUEST.
- *
- * USES X - 1, 6, 7.
- * A - 1, 6.
- *
- * CALLS /MONITOR/ACB.
- APS SX6 -B1 SET PP REQUEST TO MONITOR MODE
- BX7 X1 SAVE PP REQUEST
- SA6 PX
- SB3 -B3 SET *APS* CALL TO *ACB*
- EQ /MONITOR/ACB ASSIGN COMMUNICATION BUFFER
- APS1 SB3 -B3 RESET RETURN ADDRESS
- BX6 X1 PARAMETER WORD
- ZR X1,APS2 IF NO BUFFER AVAILABLE
- MJ EXCHANGE TO MONITOR MODE
- ZR X6,APS3 IF NO PP ASSIGNED
- APS2 BX6 X7 RESTORE PP REQUEST
- JP B3 RETURN
- APS3 SA6 X1 RELEASE COMMUNICATION BUFFER
- BX1 X1-X1 CLEAR RESPONSE
- EQ APS2 EXIT
- CCP SPACE 4
- ** CCP - CHECK FOR CHECKPOINT REQUESTED.
- *
- * ENTRY (X7) = STATUS TO RETURN TO OR.
- * (X1) = FIRST WORD OF TRT TO UPDATE. (MSD ONLY)
- * (X5) = LAST WORD + 1 OF TRT TO UPDATE. (MSD ONLY)
- * (B4) = TRT LINK WORD TO UPDATE. (MSD ONLY)
- * (B5) = EXIT ADDRESS.
- * (B6) = STARTING ADDRESS OF TRT.
- * (A3) = ADDRESS OF TDGL WORD OF MST.
- * (A5) = OR ADDRESS.
- * BIT 11 SET IN OR+1 INDICATES CHECKPOINT REQUESTED.
- *
- * EXIT EXITS TO CDI.
- *
- * USES X - 2, 3, 4, 6.
- * A - 2, 6.
- * ENTERED HERE FROM MONITOR MODE.
- CCP1 SA2 A5
- SA4 A3+SDGL-TDGL CHECK FOR ISHARED DEVICE
- SX3 B1
- LX2 12 POSITION CHECKPOINT REQUESTED BIT
- BX2 -X4*X2
- PL X2,CDI IF ISHARED OR NO CHECKPOINT REQUESTED
- SA2 A3+STLL-TDGL READ MST WORD
- SX4 B1+
- LX4 50
- BX6 X2+X4 SET CHECKPOINT BIT
- SA6 A2+
- * EQ CDI CLEAR DEVICE INTERLOCK
- CDI SPACE 4
- ** CDI - CLEAR DEVICE INTERLOCK.
- *
- * ENTRY (X1) = FIRST WORD OF TRT TO UPDATE. (MSD ONLY)
- * (X3) = 1.
- * (X5) = LAST WORD + 1 OF TRT TO UPDATE. (MSD ONLY)
- * (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
- * (B4) = TRT LINK WORD TO UPDATE. (MSD ONLY)
- * (B5) = EXIT ADDRESS.
- * (B6) = START OF TRT.
- * (A3) = ADDRESS OF MST IN CM.
- * (A5) = OUTPUT REGISTER ADDRESS.
- *
- * EXIT (OR) = (X7) = STATUS RESPONSE.
- CDI SA4 A3+SDGL READ SDGL WORD OF MST
- BX6 -X3*X4 RELEASE MST INTERLOCK
- AX4 36
- TNG X6,(/ISD/CDI,ISD,/MONITOR/HNG1) IF ISHARED
- TNZ X4,(/PROGRAM/CDI1,MMF,/LSPMMF/CDI) IF MMF DEVICE
- SA6 A4+ STORE *SDGL*
- * EQ CSM1 CHECK FOR STORAGE MOVE
- CSM SPACE 4,15
- ** CSM - CHECK FOR STORAGE MOVE.
- *
- * ENTRY (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
- * (B5) = EXIT ADDRESS, IF ENTERED AT *CSM1*.
- * (A5) = OUTPUT REGISTER ADDRESS.
- *
- * EXIT OUTPUT REGISTER STORED.
- * (X7) = VALUE STORED IN OUTPUT REGISTER.
- *
- * USES X - 2, 3, 6, 7.
- * A - 2, 3, 7.
- * B - 5.
- * ENTRY WITH RETURN ADDRESS SPECIFIED BY CALLER.
- CSM1 TX6 A5-1,-SP IGNORE PSEUDO-PP
- MX2 12 IGNORE NONZERO OUTPUT REGISTERS
- BX6 -X6+X7
- TX3 A5-1,-FP
- BX2 X2*X6
- LX3 PPXES-PPCES
- NZ X2,CSM2 IF PSEUDO-PP OR FUNCTION PRESENT
- TA3 X3+ACPP,FPX GET CP/PCP ASSIGNMENT
- SA2 CMCL
- BX3 X3-X2
- AX3 48
- NZ X3,CSM2 IF NO MOVE REQUEST FOR CP/PCP
- SX3 PRLM
- LX3 48
- BX7 X3+X7 SET *PRLM* IN OUTPUT REGISTER
- CSM2 SA7 A5 STORE OUTPUT REGISTER
- JP B5 EXIT
- CSM BSS 0 ENTRY
- SB5 PPRX SET RETURN ADDRESS
- EQ CSM1 CHECK FOR STORAGE MOVE
- CTR SPACE 4,35
- ** CTR - CHECK TRACK REQUEST.
- * MAY BE USED FROM PROGRAM OR MONITOR MODE.
- *
- * ENTRY (X1) = REQUEST WORD.
- *T, X1 12/ 0,12/ EQ,12/ TK,12/ ,12/
- * EQ = EST ORDINAL.
- * TK = TRACK NUMBER.
- * (B3) = EXIT ADDRESS.
- * (B5) = EXIT ADDRESS IF ILLEGAL REQUEST FOUND.
- * NEEDED IF ENTERED AT *CTR1*.
- * (B6) = 0 IF NOT TO INTERLOCK MST/TRT.
- * (B6) .NE. 0 IF TO INTERLOCK MST/TRT AND
- * READ TRT FROM ECS. (SHARED DEVICE)
- *
- * EXIT (X0) .LT. 0 IF NOT SHARED DEVICE
- * (X0) = 12/TRT LENGTH + 2000B, 48/ECS ADDRESS OF MRT.
- * (FOR ISD, ECS ADDRESS = 0.)
- * (X1) = BYTE 2 OF REQUEST WORD.
- * (X2) = BYTE 3 OF REQUEST WORD.
- * (X3) = TDGL WORD OF MST.
- * (X5) = -7777B.
- * (X7) = LOWER 18 BITS OF REQUEST WORD. (SIGN EXTENDED)
- * (B6) = ADDRESS OF FIRST WORD OF TRT.
- * (A3) = ADDRESS OF TDGL WORD OF MST.
- * (A4) = ADDRESS OF SDGL WORD OF MST.
- * HANG PPU IF NOT LEGAL MASS STORAGE DEVICE.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * B - 5, 6.
- * A - 3, 4.
- *
- * CALLS REJ, SDI.
- CTR SB5 PRG SET EXIT ADDRESS
- * (B5) = EXIT ADDRESS IN CASE OF ERROR DETECTED.
- CTR1 LX1 24 POSITION EQUIPMENT FIELD
- MX3 -9
- MX2 -6
- BX7 -X3*X1 EST ORDINAL
- CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
- MX5 -12
- TA4 X4+EQDE,EST READ EST ENTRY
- TX6 X7,-ESTL
- BX3 -X5*X4 MST ADDRESS/10B
- BX0 X4*X6
- ZR X7,CTR1.0 IF REQUEST FOR *RD* DEVICE
- PL X0,/MONITOR/HNG1 IF NOT *MS* OR OUT OF EST
- CTR1.0 LX3 3
- LX1 24
- SA4 X3+SDGL CHECK SHARED STATUS
- BX6 -X2*X4 MACHINE INTERLOCK FIELD
- AX4 36
- SA3 X3+TDGL
- TNG X4,(/ISD/CTR3,ISD,/MONITOR/HNG1) IF ISHARED
- TNZ X4,(/PROGRAM/SDI,MMF,/LSPMMF/SDI) IF MMF SHARED
- ZR B6,CTR2 IF NOT TO INTERLOCK MST/TRT
- * INTERLOCK MST/TRT.
- CTR1.1 SA4 A4 **** PERFORM IN 1 WORD ****
- SX6 B1 **** PERFORM IN 1 WORD ****
- BX6 X4+X6 **** PERFORM IN 1 WORD ****
- SA6 A4 **** PERFORM IN 1 WORD ****
- BX2 X6-X4
- ZR X2,REJ IF PREVIOUSLY INTERLOCKED
- CTR2 BX2 -X5*X1
- LX1 12
- SA3 A3+TRLL-TDGL SET FWA OF TRT
- SB6 X3
- SX7 X1
- LX1 -24 POSITION BYTE 2
- BX1 -X5*X1
- SA3 A3+TDGL-TRLL RE-READ *TDGL*
- JP B3 RETURN
- HNG SPACE 4
- ** HNG - HANG PPU.
- * LEAVE PPU OUTPUT REGISTER SET, SET PACKED TIME AND DATE IN
- * LAST WORD OF MESSAGE BUFFER, AND DISPLAY MESSAGE.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- * (/MONITOR/T1) = (B2) TO BE RESTORED IF MONITOR MODE.
- *
- * EXIT EXITS TO *PRG*.
- HNG RJ /MONITOR/SVR SAVE REGISTERS
- SA2 A5
- LX2 59-58 CHECK MONITOR MODE CALL
- SB5 PRGX
- NG X2,/MONITOR/HNG2 IF IN PROGRAM MODE
- SA2 /MONITOR/T1 RESTORE (B2)
- SB2 X2
- JP /MONITOR/HNG0 HANG PP
- DSB SPACE 4,30
- ** DSB - DIVIDE 60 BIT INTEGER.
- *
- * ENTRY (X6) = DIVIDEND.
- * (X2) = DIVISOR.
- * (B4) = RETURN ADDRESS.
- *
- * EXIT (X6) = QUOTIENT.
- *
- * USES X - 1, 2.
- *
- * CALLS MSB.
- DSB SX1 B1 FORM RECIPROCAL
- PX1 X1
- NX1 X1
- RX2 X1/X2
- EQ MSB MULTIPLY 60 BIT INTEGER
- MPY SPACE 4,15
- ** MPY - CALCULATE THE PRODUCT Z = (X*Y)MOD PRIME.
- *
- * ENTRY (X1) = INTEGER (X).
- * (X2) = INTEGER (Y).
- * (B3) = RETURN ADDRESS.
- *
- * EXIT (X6) = INTEGER RESULT.
- *
- * USES X - ALL.
- * A - 3.
- * B - 5.
- MPY PX1 X1 PACK AND NORMALIZE X AND Y
- PX2 X2
- NX1 X1 (X1) = D1
- NX2 X2 (X2) = D2
- * CALCULATE DX = D1*D2.
- SA3 MOD
- FX7 X1*X2
- DX6 X1*X2
- * CALCULATE IX = DX/MOD.
- BX0 X3
- SX1 B0+
- FX2 X7/X0
- FX5 X2*X0
- FX4 X7-X5
- DX5 X7-X5
- NX4 X4
- FX5 X5+X4
- DX4 X2*X0
- FX4 X6-X4
- FX5 X5+X4
- FX1 X2*X1
- FX4 X5-X1
- FX5 X4/X0
- FX1 X2+X5
- NX1 X1
- DX2 X2+X5
- FX4 X2+X1
- UX4,B5 X4
- LX3 X4,B5
- PX3 X3 (X3) = IX
- * CALCULATE DY = IX*MOD.
- DX1 X3*X0
- FX2 X3*X0
- * CALCULATE Z = DX-DY.
- FX3 X7-X2
- DX4 X7-X2
- FX5 X6-X1
- NX0 X3
- FX1 X4+X5
- FX3 X0+X1
- NX6 X3
- DX5 X0+X1
- NX5 X5
- FX6 X6+X5
- UX6,B5 X6
- LX6 X6,B5 (X6) = Z
- JP B3 RETURN
- MSB SPACE 4,10
- ** MSB - MULTIPLY 60 BIT INTEGER.
- *
- * ENTRY (X6) = 60 BIT INTEGER MULTIPLICAND.
- * (X2) = FLOATING POINT MULTIPLIER.
- * (B4) = RETURN ADDRESS.
- *
- * EXIT (X6) = PRODUCT.
- *
- * USES X - 1, 6, 7.
- * B - 6.
- MSB UX7 X6
- MX1 12
- PX7 X7
- BX1 X1*X6 MULTIPLY TOP 12 BITS OF INTEGER
- NX7 X7
- AX1 12
- RX7 X7*X2
- PX1 X1
- RX1 X1*X2
- UX7,B6 X7
- LX7 B6
- UX1,B6 X1
- SB6 B6+12
- LX1 B6
- IX6 X1+X7 MERGE PARTIAL PRODUCTS
- JP B4 RETURN
- REJ SPACE 4
- ** REJ - REJECT FUNCTION REQUEST.
- *
- * IF STORAGE MOVE IS REQUESTED FOR THE CONTROL POINT OR
- * PSEUDO-CONTROL POINT TO WHICH THE PP IS ASSIGNED, SET THE
- * REISSUE FUNCTION AND ALLOW STORAGE MOVE FLAGS IN THE OUTPUT
- * REGISTER. NOTE THAT ANY MONITOR FUNCTION WHOSE PROCESSOR MAY
- * CALL THE ROUTINE IS NOW STORAGE MOVABLE WHILE THE REQUEST IS
- * PENDING. FUTURE CODE IN PP ROUTINES SHOULD CONSIDER ANY
- * MONITOR FUNCTION AS MOVABLE, ALLOWING FOR THE FOR THE TIME
- * THAT THIS IS ACTUALLY ACHIEVED.
- *
- * ENTRY (B5) = EXIT ADDRESS.
- * (A5) = *OR* ADDRESS.
- *
- * USES X - 4, 5, 7.
- * A - 4, 5, 7.
- REJ TX4 A5-1,-FP
- LX4 PPXES-PPCES
- TA4 X4+ACPP,FPX GET CP/PCP ASSIGNMENT
- MX7 1
- BX5 X4
- SA4 CMCL GET MOVE CONTROL
- BX4 X4-X5
- AX4 48
- SA5 A5+ GET OUTPUT REGISTER
- NZ X4,REJ1 IF NO MOVE REQUEST FOR CP/PCP
- SX4 1 SET STORAGE MOVABLE FUNCTION FLAG
- LX4 56-0
- BX7 X4+X7
- REJ1 BX7 X7+X5 SET REJECTION BIT
- SA7 A5 STORE OR
- JP B5 RETURN
- TITLE MONITOR REQUEST PROCESSORS.
- MNR SPACE 4
- ** MNR - MONITOR REQUEST PROCESSOR.
- *
- * ENTRY (X7) = 0.
- * (B4) = REQUEST NUMBER.
- *
- * EXIT (X7) = 0.
- * (B2) = 2.
- * (B4) = REQUEST NUMBER.
- MNR SA3 TMNR+B4 SET PROCESSOR
- SB2 B1+B1
- SB6 X3 PROCESS REQUEST
- TJP (/PROBE/MNR,PROBE,B6) PROCESS REQUEST
- IDL SPACE 4
- ** IDL - IDLE PROGRAM.
- IDL CON 0 (RA) FOR IDLE PROGRAM
- CON 0 (RA+1) FOR IDLE PROGRAM
- CX2 X1 DELAY (6 BITS)
- CX2 X1 DELAY (6 BITS)
- EQ 2 LOOP
- MST SPACE 4
- ** MST - MOVE STORAGE.
- * MOVE A CONTROL POINT UP OR DOWN.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * B - 2, 3, 4, 5.
- * A - 1, 2, 3, 4, 5, 6, 7.
- *
- * CALLS SMP.
- MNR MSTF,(/PROGRAM/MSE,ECM,/PROGRAM/MST)
- MST SA5 A5 GET MOVE INCREMENT
- MX1 -12
- SA2 B7+FLSW
- BX4 -X1*X2
- LX5 6
- LX2 -RSHF
- LX4 6 FL
- SB6 MST2 RETURN ADDRESS
- MX3 -RMSK
- BX3 -X3*X2 RA
- LX2 12+12
- LX3 6 RA
- BX2 -X1*X2
- BX1 -X5 MOVE INCREMENT
- LX2 6 NFL
- IX0 X3-X2 SUBTRACT NFL SIZE FROM RA
- IX4 X4+X2 ADD NFL SIZE TO FL
- SB4 X4
- TJP (/CME/SMI,CME,/PROGRAM/SMC,CMU,/PROGRAM/SMR)
- * INDICATE MOVE COMPLETE.
- MST2 TNO /MCE/MST,MCE IF MEMORY CLEARING ENABLED
- TA1 CMMS,SDA COUNT STORAGE MOVE
- MST3 SX2 B1
- IX6 X1+X2
- SA6 A1
- SA5 A5 GET MOVE INCREMENT
- SA2 B7+FLSW READ FL CONTROL WORD
- MX6 -RMSK
- SA1 B7+B1 READ EXCHANGE PACKAGE
- LX2 -RSHF POSITION TO RA
- IX7 X2+X5 UPDATE RA
- BX6 -X6*X7 NEW RA
- LX7 RSHF RE-POSITION
- SA7 A2+0
- LX6 36+6 POSITION NEW RA
- MX7 24
- BX1 -X7*X1 CLEAR OLD RA
- BX6 X6+X1 INSERT NEW RA
- SA6 A1 UPDATE EXCHANGE PACKAGE
- SA1 A2+B1 CHANGE SECOND FLSW WORD
- LX5 24
- IX7 X1+X5
- SA7 A1+
- * EQ SMPX EXIT
- SMP SPACE 4,10
- ** SMP - STORAGE MOVE PROGRAM MODE EXIT.
- *
- * ENTRY (A5) = ADDRESS OF *SMRL*.
- *
- * EXIT TO REQUEST PROCESSOR.
- SMPX SX7 B0+
- SA7 SMPR CLEAR REQUEST
- XJ
- SMP SA1 SMPR CHECK FOR REQUEST
- SB4 X1-1
- SA3 TMNR-1+X1 GET PROCESSOR ADDRESS
- SB6 X3+
- TJP (/PROBE/MNR,PROBE,B6)
- SMPXP SPACE 4,10
- ** SMPXP - STORAGE MOVE EXCHANGE PACKAGE.
- *
- * THIS EXCHANGE PACKAGE IS USED FOR CM AND UEM STORAGE
- * MOVES. IT RUNS SEPARATE FROM THE SYSTEM CONTROL POINT
- * AT AN EQUAL PRIORITY, BUT ITS CPU RESOURCES ARE ACCOUNTED
- * TO THE SYSTEM CP. UNLIKE THE SYSTEM CP, IT IS NOT FORCED
- * INTO CPU-0, UNLESS ECS IS USED FOR THE CM STORAGE MOVE.
- * THE PRIMARY PURPOSE OF THIS SEPARATE EXCHANGE PACKAGE IS
- * TO ALLOW IT TO TAKE ADVANTAGE OF THE ARCHITECHURE OF THE
- * MAINFRAMES EQUIPPED WITH *CME* (CENTRAL MEMORY EXTENSION).
- SMPXP EXP P=/PROGRAM/SMP,FL=(,MCM),FLX=(,MXM),B1=1,A5=SMIN,MA=SMP
- ,XP,EM=(,EXPFEC),EA=SMPXP
- * STSW.
- VFD 3/ZCPS CPU STATUS
- VFD 57/0
- * CWQW.
- VFD 2/1
- VFD 7/MPRS CPU PRIORITY
- VFD 1/0
- VFD 1/0 CPU SLICE ACTIVE
- VFD 1/0 RECALL FLAG
- VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
- VFD 2/0
- VFD 9/0 SERVICE CYCLE
- VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
- VFD 1/0 *MTR* BYPASS FLAG
- VFD 2/0 NO CPU SELECTION
- VFD 3/0
- VFD 3/SMXT STORAGE MOVE EXCHANGE PACKAGE TYPE
- VFD 18/0 *WQ* LINKAGE
- * CSAW.
- VFD 60/0
- * *CTMW*.
- VFD 60/0
- QUAL
- SMPXP EQU /PROGRAM/SMPXP
- QUAL *
- PMR SPACE 4
- ** PMR - PROCESS INTER-MAINFRAME FUNCTION REQUEST.
- *
- * ENTRY NONE.
- *
- * EXIT NONE.
- MNR PMRF,(/PROGRAM/PMR,MMF,/PROGRAM/HNG)
- MEC SPACE 4,10
- ** MEC - MOVE ECS STORAGE.
- *
- * ENTRY
- *T SM 12/ INC,30/,18/ CP
- * INC = INCREMENT.
- * CP = CONTROL POINT ADDRESS.
- *
- * EXIT
- *T SM 60/0
- MNR MECF,(/PROGRAM/MEC,UEC,/PROGRAM/HNG)
- SPACE 4
- * MONITOR/PROGRAM MODE EQUIVALENCES.
- PX EQU /MONITOR/PX
- PR EQU /MONITOR/PR
- SMPR EQU /MONITOR/SMPR
- SMIN EQU /MONITOR/SMIN
- PPRX EQU /MONITOR/PPRX
- QUAL MONITOR
- CSM EQU /PROGRAM/CSM
- CSM1 EQU /PROGRAM/CSM1
- REJ EQU /PROGRAM/REJ
- TTL CPUMTR - CPU MONITOR.
- TITLE CPUMTR BLOCK ORGANIZATION.
- BLOCKS SPACE 4,10
- ** CPUMTR COMMON BLOCK ORGANIZATION.
- *
- * CPUMTR IS ORGANIZED TO PLACE OPTIONAL CODE INTO COMMON
- * BLOCKS WHICH CAN BE LOADED OR IGNORED AT DEAD START TIME,
- * DEPENDING UPON WHICH FEATURES ARE TO BE USED BY THE OPERATING
- * SYSTEM. WITH THE BLOCK ORGANIZTION A SITE OR MACHINE NOT
- * USING AN OPTIONAL FEATURE SUCH AS ECS OR MULTI-MAINFRAME
- * DOES NOT HAVE TO LOAD THIS CODE INTO CMR WITH CPUMTR.
- * A START OF BLOCK MACRO *BLOCK* AND AN END OF BLOCK MACRO
- * *ENDBLK* ARE USED TO DEFINE A CPUMTR COMMON BLOCK. THESE
- * MACROS PROVIDE THE LOADER AND QUAL BLOCK DEFINITIONS FOR
- * THE CPUMTR BLOCK. EACH BLOCK WILL NORMALLY BE QUALIFIED WITH
- * ITS NAME TO ASSURE PROGRAMMER AWARENESS OF WHICH ROUTINES
- * AND DATA CELLS RESIDE IN WHICH BLOCK.
- * A NULL BLOCK WILL USUALLY BE ASSOCIATED WITH EACH
- * OPTIONAL BLOCK AND WILL BE LOADED WHEN THE OPTIONAL BLOCK
- * IS NOT.
- * WHEN THERE ARE TWO ASSOCIATED BLOCKS, THE CPUMTR LOADER
- * WILL MAKE A DECISION AT DEADSTART TIME AS TO WHICH BLOCK TO
- * LOAD. FOR EXAMPLE IN THE CASE OF ECS TRANSEFER CODE, THE
- * LOADER WOULD CHECK THE ECS FIELD LENGTH TO DETERMINE THE
- * PRESENCE OF ECS. IF THERE IS NO ECS FIELD LENGTH THE NULL
- * ECS TRANSFER BLOCK WOULD BE LOADED.
- BLOCK CMU,(MOVE STORAGE WITH CMU.),PROGRAM
- SMP SPACE 4
- ** NOTE -
- * THE *CMU* MUST NOT BE USED IN MONITOR MODE ON A DUAL-CPU
- * MAINFRAME WITH ONLY ONE *CMU*, BECAUSE IT MAY BE IN USE BY
- * THE OTHER CPU, CAUSING MONITOR MODE TO WAIT FOR IT TO FINISH.
- CSC SPACE 4,10
- ** CSC - CLEAR STORAGE USING *CMU*.
- *
- * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
- * (X5) = OUTPUT REGISTER.
- * (X1) = FUNCTION PARAMETERS FROM OUTPUT REGISTER.
- * (X7) = 0.
- *
- * EXIT ((A5)) = 0.
- *
- * CALLS CEC, CMP1, HNG, PRG.
- *
- * USES X - ALL.
- * A - 3, 4, 7.
- * B - 2, 3, 4, 5, 6.
- MVED EQU 5 MOVE DIFFERENTIAL FOR OVERLAPPING CLEAR
- * *CMP* RETURN PROCESSING.
- CSC3 SX7 B0+
- TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
- CSC4 SA3 A3+B1 READ NEXT LIST ENTRY
- SB5 -MVED RESET (B5)
- SB2 B7-B5 SET SIZE OF INITIAL CLEAR
- NZ X3,CSC1 IF NOT END OF LIST
- TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
- * ENTRY.
- CSC LX5 -24
- SB3 X5 (B3) = 0 IF LIST PRESENT
- SB5 -MVED SET MOVE DIFFERENTIAL
- BX3 X1
- LX5 59-43+24
- SB7 -B1
- MX2 -4
- TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEARING ECS
- SB6 CSC3 *CMP* RETURN ADDRESS
- SB2 B7-B5 SET SIZE OF INITIAL CLEAR
- NZ B3,CSC1 IF NOT LIST
- SA3 A5+B1 READ FIRST LIST WORD
- CSC1 BX6 X3
- AX3 24
- ZR X3,CSC4 IF NOTHING TO CLEAR
- BX4 X2*X3
- NZ X4,CSC2 IF MORE THAN 15 WORDS TO CLEAR
- SB2 X3+B7
- CSC2 SA7 X6+B2 CLEAR PRIMER AREA OR SHORT BLOCK
- SB2 B2-B1
- PL B2,CSC2 IF MORE TO CLEAR
- ZR X4,CSC4 IF SHORT BLOCK
- SB4 X3+B5 SET WORD COUNT
- MX0 -24
- SA4 CMPB ADDRESS INCREMENT
- SX1 -MVED MOVE DIFFERENTIAL
- SB5 CSCA MOVE DESCRIPTOR WORD
- BX6 -X0*X6 FWA
- SB2 X4 100B
- EQ CMP1 ENTER MOVE LOOP
- CSCA CON 0 MOVE DESCRIPTOR WORD
- CMP SPACE 4
- ** CMP - CMU MOVE LOOP FOR USE IN PROGRAM MODE.
- * CMP PROCESSES BOTH UPWARD AND DOWNWARD MOVES WITH NO CHECK
- * FOR OVERLAP. IF AN OVERLAP MAY EXIST AND IS NOT DESIRED
- * *SMC* MUST BE CALLED TO PREVENT AN OVERLAPING MOVE.
- *
- * ENTRY (X0) = ADDRESS TO MOVE FROM.
- * (B4) = WORD COUNT OF MOVE.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B6) = EXIT ADDRESS.
- *
- * IF ENTERED AT *CMP1* -
- * (X4) = ADDRESS INCREMENT (CMPB).
- * (X6) = ADDRESS TO MOVE FROM.
- * (X1) = (X6) - ADDRESS TO MOVE TO.
- * (A4) = CMPB.
- * (B2) = 100B.
- * (B6) = RETURN ADDRESS.
- *
- * USES X - 0, 1, 4, 6, 7.
- * B - 2, 4, 5.
- * A - 1, 4, 7.
- *
- * PRESERVES B3.
- CMP SA4 CMPB READ ADDRESS INCREMENT
- BX6 X0 SET ADDRESS FOR START OF MOVE
- SB2 X4+ 100B
- SB5 CMPA MOVE DESCRIPTOR WORD
- * ENTERED HERE FROM *SMC*.
- CMP1 MX7 -18 SET ADDRESSES
- BX0 -X1
- IX0 X6+X0
- BX6 -X7*X6
- LX6 30
- BX0 -X7*X0
- BX6 X6+X0
- SA1 A4+B1
- * CMU MOVE LOOP.
- CMP2 GE B4,B2,CMP3 IF .GE. 100B WORDS TO MOVE
- SX1 B4 SET CHARACTER COUNT FOR SHORT BLOCK
- SX0 B4+B4
- LX1 3
- MX7 -4
- IX1 X1+X0
- BX0 -X7*X1 LL
- BX1 X7*X1 LU
- LX0 30-4
- LX1 48-4
- BX1 X1+X0
- CMP3 BX7 X6+X1 MERGE ADDRESSES AND CHARACTER COUNT
- IX6 X6+X4 INCREMENT ADDRESSES
- SA7 B5 STORE DESCRIPTOR WORD
- SB4 B4-B2 DECREMENT WORD COUNT
- IM B5 MOVE STORAGE
- GT B4,B0,CMP2 IF MORE WORDS TO TRANSFER
- JP B6 RETURN
- * THE FOLLOWING WORDS MUST REMAIN IN ORDER.
- CMPA CON 0 INDIRECT MOVE DESCRIPTOR WORD
- CMPB VFD 30/100B,30/100B ADDRESS INCREMENT
- VFD 12/100B*10/20B,48/0 CHARACTER COUNT FOR 100B WORDS
- SMC SPACE 4
- ** SMC - STORAGE MOVE WITH CMU.
- * SMC MOVES BLOCKS OF 100B WORDS UPWARD OR DOWNWARD
- * PREVENTING OVERLAP.
- *
- * ENTRY (X0) = ADDRESS TO MOVE FROM.
- * (B4) = WORD COUNT OF MOVE.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B6) = EXIT ADDRESS.
- *
- * USES X - 0, 1, 4, 6, 7.
- * B - 2, 4, 5, 6.
- * A - 1, 4, 7.
- *
- * CALLS CMP1.
- SMC SA4 CMPB ADDRESS INCREMENT
- SB5 SMCA MOVE DESCRIPTOR WORD
- BX6 X0
- SB2 X4 100B
- PL X1,CMP1 IF DOWNWARD MOVE - NO OVERLAP
- SX6 X4
- BX4 -X4 COMPLEMENT INCREMENT
- IX6 X0-X6 START MOVE FROM END OF BLOCK
- SX0 B4 WORD COUNT
- IX6 X0+X6
- EQ CMP1 ENTER MOVE LOOP
- SMCA CON 0 MOVE DESCRIPTOR WORD
- ENDBLK
- BLOCK 0CMU,(MOVE STORAGE WITH REGISTERS.),PROGRAM
- SMR SPACE 4
- ** SMR - STORAGE MOVE VIA REGISTERS.
- * SMR MOVES BLOCKS OF 10B WORDS THROUGH A REGISTER MOVE
- * LOOP. BLOCKS WHICH ARE NOT MULTIPLES OF 10B WORDS
- * SHOULD BE MOVED WITH *MSR*.
- *
- * ENTRY (X0) = ADDRESS TO MOVE FROM.
- * (B4) = WORD COUNT OF MOVE.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B6) = EXIT ADDRESS.
- *
- * USES X - ALL.
- * B - 2, 4, 5, 6.
- * A - 1, 2, 3, 4, 6, 7.
- SMR SB5 X1+ B5 = MOVE DIFFERENCE
- SA1 X0+ A1 = FWA TO MOVE FROM
- SX0 B4-B1 (X0) = WORD COUNT - 1
- SB2 B1 SET DIRECTION OF MOVE
- PL B5,SMR1 IF DOWNWARD MOVE
- SB4 B4-B1
- SA1 A1+B4
- SB2 -1
- SMR1 SX5 -B1
- AX0 3 (X0) = WORD COUNT - 10B
- SA2 A1+B2
- SB2 B2+B2
- * REGISTER MOVE LOOP.
- SMR2 SA3 A1+B2 READ NEXT TWO WORDS
- BX6 X1
- SA4 A2+B2
- LX7 X2
- SA6 A1-B5 STORE TWO WORDS
- IX0 X0+X5 DECREMENT BLOCK COUNT
- SA7 A2-B5
- SA1 A3+B2 READ NEXT TWO WORDS
- SA2 A4+B2
- BX6 X3
- LX7 X4
- SA6 A3-B5 STORE TWO WORDS
- SA7 A4-B5
- SA3 A1+B2 READ NEXT TWO WORDS
- SA4 A2+B2
- BX6 X1
- LX7 X2
- SA6 A1-B5 STORE TWO WORDS
- SA7 A2-B5
- SA1 A3+B2 READ NEXT TWO WORDS
- SA2 A4+B2
- BX6 X3
- LX7 X4
- SA6 A3-B5 STORE LAST TWO WORDS
- SA7 A4-B5
- NZ X0,SMR2 IF NOT END OF MOVE
- SX0 B1+B1
- SMR3 BX6 X1 MOVE THE LAST 10B WORDS
- LX7 X2
- SA6 A1-B5
- SA7 A2-B5
- NG X0,SMR4 IF END OF MOVE
- SA1 A1+B2 READ THE NEXT TWO WORDS
- SA2 A2+B2
- IX0 X0+X5 DECREMENT THE LOOP COUNT
- EQ SMR3 LOOP TO STORE THE NEXT TWO WORDS
- SMR4 JP B6 RETURN
- CSP SPACE 4,10
- ** CSP - CLEAR STORAGE THROUGH THE CPU.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- *
- * USES X - 0, 1, 5, 6.
- * B - 3, 4, 5, 6.
- * A - 1, 6, 7.
- CSP LX5 -24
- SB3 X5 (B3) = 0 IF LIST PRESENT
- BX6 X6-X6
- LX5 59-43+24
- TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEARING ECS
- SB4 12B
- SB6 B1+B1
- NZ B3,CSP1 IF NOT LIST OPTION
- SA1 A5+B1 GET LIST ENTRY
- CSP1 BX5 X1
- AX1 24 EXTRACT WORD COUNT
- ZR X1,CSP4 IF NOTHING TO CLEAR
- SB5 X1-1 WORDS TO CLEAR
- LT B5,B4,CSP3 IF LESS THAN 13 WORDS
- SA7 X5+B5
- SB4 B4-B6
- SA6 A7-B1
- SB5 B5-B6 WORDS TO CLEAR
- CSP2 SA7 A7-B6 CLEAR 10 WORD BLOCKS
- SA6 A6-B6
- SA7 A7-B6
- SA6 A6-B6
- SA7 A7-B6
- SB5 B5-B4 DECREMENT WORD COUNT
- SA6 A6-B6
- SA7 A7-B6
- SA6 A6-B6
- GT B5,B4,CSP2 IF STILL 11 OR MORE WORDS TO CLEAR
- CSP3 SA6 X5+B5
- SB5 B5-B1
- PL B5,CSP3 IF STILL MORE TO CLEAR
- TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
- SB4 12B
- CSP4 SA1 A1+1
- NZ X1,CSP1 IF NOT END OF LIST
- TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
- ENDBLK
- BLOCK CME,(CENTRAL MEMORY EXTENSION.)
- SPACE 4,10
- HNG EQU /MONITOR/HNG
- MT EQU /MONITOR/MT
- PPR1 EQU /MONITOR/PPR1
- T1 EQU /MONITOR/T1
- T2 EQU /MONITOR/T2
- T3 EQU /MONITOR/T3
- RA EQU /MONITOR/RA
- RA1 EQU /MONITOR/RA1
- RB6 EQU /MONITOR/RB6
- SPACE 4,10
- * DEFINE CME INSTRUCTION BLOCK.
- CME$ EQU 1
- CCP SPACE 4,10
- ** CCP - *CCP* EXTENSION FOR *CME* MACHINE.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- * (X1) = *JCB* *CSJT* WORD.
- * (A1) = ADDRESS OF *JCB* *CSJT* WORD.
- *
- * EXIT CONVERTED SCHEDULING PARAMETERS SET IN *JCB* ENTRY.
- *
- * USES X - 0, 1, 2, 3, 6, 7.
- * A - 1, 3, 6.
- * B - 4.
- CCP BSS 0 ENTRY
- SA3 CCPA =15.625
- BX7 -X0*X1 UNEXTENDED CPU SLICE
- LX1 -12
- BX6 -X0*X1 RECALL CPU SLICE
- IX7 X7-X6 UNEXTENDED SLICE - RECALL SLICE
- PX6 X6
- NX6 X6
- FX6 X6*X3
- UX6,B4 X6
- LX6 B4 CONVERTED RECALL CPU SLICE
- LX1 -12
- BX2 -X0*X1 CPU SLICE EXTENSION
- IX7 X7+X2 UNEXTENDED SLICE + EXTENSION - RECALL SLICE
- PX2 X2
- NX2 X2
- FX2 X2*X3
- UX2,B4 X2
- LX2 B4 CONVERTED CPU SLICE EXTENSION
- LX6 -18
- BX6 X6+X2
- PX7 X7
- NX7 X7
- FX7 X7*X3
- UX7,B4 X7
- LX7 B4 CONVERTED (*US* + *SE* - *RS*)
- LX6 36
- BX6 X6+X7
- SA6 A1+B1
- ERRNZ CSAT-CSJT-1 WORDS MUST BE CONTIGUOUS
- LX1 -12
- BX6 -X0*X1 SYSTEM I/O CPU THRESHOLD
- PX6 X6
- NX6 X6
- FX6 X6*X3
- UX6,B4 X6
- LX6 B4 CONVERTED SYSTEM I/O CPU THRESHOLD
- SA1 A6+B1
- ERRNZ CSBT-CSAT-1 WORDS MUST BE CONTIGOUS
- MX0 42
- BX1 X0*X1
- BX6 X1+X6
- SA6 A1
- JP B3 RETURN
- CCPA CON 15.625
- CPT SPACE 4,15
- ** CPT - EXTENSION FOR CYBER 180.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (B6) = 200B IF ENTERED AT *CPT1* (*BNJ* CALL).
- *
- * EXIT TO /MONITOR/CPT1.
- * (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
- * (MT+A0) = 0 IF RA+1 PROCESS AND NOT CPU SWITCH.
- * (MT+A0) = -ACAD2 IF NOT RA+1 PROCESS OR IF CPU SWICH.
- * (CL+CPBT+A0) RESET TO CURRENT CLOCK.
- * (CL+CMST+A0) UPDATED.
- *
- * USES X - 0, 1, 2, 3, 5, 6, 7.
- * A - 1, 2, 3, 6, 7.
- * B - 4, 6.
- CPT BSS 0 ENTRY
- SB6 B0+ DO NOT SET CPU SWITCH FLAG
- * ENTRY FROM /MONITOR/*BNJ*.
- CPT1 SA1 CL+CMST+A0 GET MONITOR MODE PARAMETERS
- SA2 CL+CPBT+A0 GET PROGRAM MODE BASE TIME
- SA3 MT+A0 GET MONITOR MODE ACCUMULATED TIME
- RC X6 READ CLOCK
- UX1,B4 X1
- SB6 B4+B6 SET CPU SWITCH STATUS
- PX7 B6,X6 SET FUNCTION WITH STATUS AND NEW BASE TIME
- SA6 A2 UPDATE PROGRAM MODE BASE TIME
- SA7 A1 UPDATE MONITOR MODE PARAMETERS
- SX7 B0+ SET TO CLEAR MONITOR MODE ACCUMULATOR
- ZR B6,CPT3 IF RA+1 PROCESS AND NOT CPU SWITCH
- ERRNZ CCPF CODE DEPENDS ON VALUE
- TX7 -ACAD2 - (EXCHANGE JUMP TIME)
- ZR B4,CPT3 IF RA+1 PROCESS
- * COMPUTE MONITOR MODE TIME SINCE LAST BASE TIME.
- *
- * THE MICROSECOND CLOCK ON THE CYBER 170-865 AND 170-875 WILL
- * WRAP APPROXIMATELY EVERY 1.2 HOURS, SINCE IT IS ONLY 32 BITS
- * WIDE. ALL OTHER MODELS IN THE 170-800 SERIES HAVE 48 BIT
- * COUNTERS, WHICH WILL WRAP ONLY ONCE EVERY 9 YEARS OR SO.
- * SINCE THIS COUNTER IS RESET AT DEADSTART, IT IS SAFE TO
- * ASSUME THAT IF A WRAP IS DETECTED, THE COUNTER IS ONLY 32
- * BITS WIDE.
- IX5 X6-X1 TIME SINCE MONITOR MODE BASE TIME
- PL X3,CPT2 IF *MT* NOT PREVIOUSLY ADJUSTED BY *CPT*
- SX3 B0
- CPT2 IX3 X3+X5 ADD CURRENT AND ACCUMULATED TIME
- IX3 X3-X7 ADD EXCHANGE JUMP TIME
- PL X5,CPT3 IF NO OVERFLOW OF COUNTER
- SX0 1
- LX0 32
- IX3 X3+X0
- * COMPUTE PROGRAM MODE CPU TIME USED.
- *
- * IF MONITOR MODE WAS NOT ENTERED TO PROCESS AN RA+1 CALL OR IF
- * A CPU SWITCH IS PENDING, THE MONITOR MODE ACCUMULATOR FOR THE
- * CPU WILL BE RESET WITH A VALUE OF *-ACAD2*. SINCE EXIT FROM
- * MONITOR MODE ADDS AN INCREMENT OF *ACAD* (TWICE THE VALUE OF
- * *ACAD2*) TO THE ACCUMULATOR, THE RESULT IN THIS CASE WILL BE
- * TO ACCOUNT ONLY FOR THE EXCHANGE JUMP BACK TO PROGRAM MODE.
- * *CPT* WILL ALREADY HAVE ACCOUNTED FOR THE EXCHANGE JUMP INTO
- * MONITOR MODE.
- CPT3 IX6 X6-X2 COMPUTE TIME USED
- SA7 MT+A0 RESET MONITOR MODE ACCUMULATOR
- IX0 X6-X3 DEDUCT MONITOR MODE TIME
- PL X0,/MONITOR/CPT1 IF NO UNDERFLOW
- SX0 B0+
- EQ /MONITOR/CPT1 ENTER MAIN *CPT* PROCESSOR
- CSM SPACE 4,15
- ** CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
- *
- * ENTRY (X1) = WORD COUNT.
- * (X2) = FWA.
- * (B3) = RETURN ADDRESS.
- *
- * EXIT (X7) = 0.
- *
- * USES X - ALL.
- *
- * CALLS /MONITOR/RB3.
- CSM MX6 -3 INITIALIZE
- SX0 B1
- BX5 -X6*X1 REMAINDER
- BX7 X7-X7
- AX1 3 10B WORD BLOCK COUNT
- ZR X1,CSM2 IF .LT. 10B
- IX3 X2+X0 FWA+1
- SX6 B0+
- SX4 2
- CSM1 EWX6 X2
- IX1 X1-X0 DECREMENT BLOCK COUNT
- NO
- EWX7 X3
- IX2 X2+X4
- IX3 X3+X4
- EWX6 X2
- EWX7 X3
- IX2 X2+X4
- IX3 X3+X4
- EWX6 X2
- EWX7 X3
- IX2 X2+X4
- IX3 X3+X4
- EWX6 X2
- EWX7 X3
- IX2 X2+X4
- IX3 X3+X4
- NZ X1,CSM1 IF NOT COMPLETE
- CSM2 ZR X5,/MONITOR/RB3 IF COMPLETE
- IX5 X5-X0
- EWX7 X2
- IX2 X2+X0
- EQ CSM2 CLEAR REMAINDER
- MNR SPACE 4,10
- ** MNR - *CME* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
- MNR SA1 B2 EXCHANGE PACKAGE P-ADDRESS
- SA2 B0
- SA3 VFLR
- MX0 24
- BX4 X0*X1
- NZ X2,MNR2 IF WORD ZERO IS NON-ZERO
- BX6 X3
- ZR X4,MNR2 IF P-ADDRESS IS ZERO
- AX6 18
- SX7 B0+ CLEAR RESPONSE
- NZ X6,/MONITOR/MTRX IF REQUEST NOT COMPLETE
- MNR1 SA7 X3 SET RESPONSE
- SA6 A3 CLEAR REQUEST WORD
- SA1 VFLXP+STSW SET NULL STATUS
- MX0 -57
- BX7 -X0*X1
- SA7 A1+
- EQ /MONITOR/BNJ1 BEGIN NEW JOB
- MNR2 SX6 VFL RESET P-ADDRESS
- SX7 B1 SET RESPONSE
- BX1 -X0*X1 CLEAR P-ADDRESS
- LX6 36
- LX7 36
- BX6 X6+X1
- SA6 A1
- BX6 X6-X6 CLEAR REQUEST WORD
- EQ MNR1 EXIT
- MSR SPACE 4,15
- ** MSR - MONITOR MODE STORAGE MOVE THROUGH REGISTERS
- * FOR *CME* MAINFRAMES.
- *
- * ENTRY (X0) = ADDRESS TO MOVE FROM.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B4) = WORD COUNT.
- * (B6) = RETURN ADDRESS.
- *
- * CALLS PSM.
- *
- * USES X - 0, 1, 4, 6, 7.
- * B - 4, 5.
- MSR SB5 MSR1 *PSM* RETURN ADDRESS
- EQ PSM PRESET STORAGE MOVE
- * (X0) = ADDRESS TO MOVE FROM.
- * (X1) = ADDRESS TO MOVE TO.
- * (X4) = INCREMENT (1 OR -1).
- * (B4) = BLOCK COUNT (WORD COUNT / 10B).
- * (B6) = RETURN ADDRESS.
- MSR1 ERX6 X0 LOAD UP FIRST DATA
- IX0 X0+X4
- ERX7 X0
- IX0 X0+X4
- SB4 B4-1 DECREMENT BLOCK COUNT
- EWX6 X1
- IX1 X1+X4
- ERX6 X0
- IX0 X0+X4
- EWX7 X1
- IX1 X1+X4
- ERX7 X0
- IX0 X0+X4
- EWX6 X1
- IX1 X1+X4
- ERX6 X0
- IX0 X0+X4
- EWX7 X1
- IX1 X1+X4
- ERX7 X0
- IX0 X0+X4
- EWX6 X1
- IX1 X1+X4
- ERX6 X0
- IX0 X0+X4
- EWX7 X1
- IX1 X1+X4
- ERX7 X0
- IX0 X0+X4
- EWX6 X1
- IX1 X1+X4
- EWX7 X1
- IX1 X1+X4
- GT B4,B0,MSR1 IF MORE BLOCKS TO MOVE
- JP B6 RETURN
- PLF SPACE 4,10
- ** PLF - PROCESS LOCAL FNT.
- PLF SA3 B7+FLSW GET RA AND NFL
- MX0 -12
- BX1 -X0*X5 EXTRACT NFL ADDRESS/PARAMETER
- LX5 24
- MX0 -3
- BX2 -X0*X5 EXTRACT SUBFUNCTION
- AX3 RSHF
- LX5 59-41-24
- MX0 -RMSK
- BX4 -X0*X3
- AX3 48-RSHF
- LX4 6 RA
- MX0 -18
- ZR X3,HNG IF NO NFL
- BX6 X4
- LX3 6 NFL
- SA6 RA
- SB6 X2-TPLFL-1
- PL B6,HNG IF ILLEGAL SUBFUNCTION
- JP TPLF+TPLFL+1+B6 JUMP TO PROCESSOR
- * EXIT TO PROCESSOR WITH -
- *
- * (X0) = 42/-0,18/0.
- * (X1) = NFL ADDRESS/PARAMETER.
- * (X3) = NFL SIZE.
- * (X4) = RA.
- * (X5) = *CREATE SPECIAL FILE* FLAG IN LEFT-MOST BIT.
- * (X7) = 0.
- * (RA) = RA.
- TPLF BSS 0
- LOC 0
- + IX2 X3-X1
- EQ PLF14 (DLFS) - DELETE ENTRY
- + IX2 X3-X1
- SX7 B1
- EQ PLF14 (DLCS) - RETURN FILE COUNT
- * EQ PLF1 (CRFS) - CREATE LOCAL FNT ENTRY
- TPLFL BSS 0
- LOC *O
- * SET UP FOR FNT SEARCH.
- PLF1 SA7 T2 CLEAR EMPTY ENTRY POINTER
- SX2 X3-FNTN COMPUTE ADDRESS OF LAST ENTRY
- SX6 LENF
- PX2 X2
- PX3 X6
- NX3 X3
- FX1 X2/X3
- UX1 B6,X1
- LX1 X1,B6
- IX3 X6*X1
- SA1 A5+B1
- SX2 FNTN ALLOW USE OF SPECIAL FILE RESERVED ENTRY
- NG X5,PLF2 IF SPECIAL FILE
- SX2 X2+SRFE*LENF PREVENT USE OF RESERVED ENTRIES
- PLF2 IX6 X4-X2
- SA6 A7+B1 SAVE FWA OF LAST RESERVED ENTRY
- SX3 X3+FNTN
- IX7 X4-X3 ADDRESS OF LAST ENTRY
- BX5 X0*X1 FILE NAME
- SA7 A7-B1
- EWX5 X7 SAVE FILE NAME MATCH
- SX1 FNTN-LENF*2
- SX2 FNTN-LENF
- IX6 X4-X1
- IX7 X4-X2
- * SEARCH FOR MATCHING ENTRY.
- PLF4 SX3 LENF*2 SEARCH INCREMENT
- IX6 X6-X3
- IX7 X7-X3
- ERX1 X6
- ERX2 X7
- BX3 X1-X5
- BX4 X2-X5
- BX3 X0*X3
- BX4 X0*X4
- ZR X3,PLF7 IF FOUND
- ZR X4,PLF6 IF FOUND
- ZR X1,PLF8 IF EMPTY
- PLF4.1 NZ X2,PLF4 IF NOT EMPTY
- SA1 A6
- IX1 X7-X1
- PL X1,PLF4 IF USE OF RESERVED ENTRY NOT ALLOWED
- SA7 T2 SAVE ADDRESS OF EMPTY ENTRY
- PLF4.9 SX3 LENF*2
- * SEARCH FOR MATCH (EMPTY ENTRY FOUND).
- PLF5 IX6 X6-X3
- IX7 X7-X3
- ERX1 X6
- ERX2 X7
- BX1 X1-X5
- BX2 X2-X5
- BX1 X0*X1
- BX2 X0*X2
- ZR X1,PLF7 IF FOUND
- NZ X2,PLF5 IF NOT FOUND
- PLF6 BX6 X7
- PLF7 SA4 T1
- SX7 B0+ CLEAR LAST ENTRY
- EWX7 X4
- BX2 X6-X4
- ZR X2,PLF10 IF LAST ENTRY
- SA3 RA
- IX3 X3-X6
- LX3 36 BYTE 1 OF RESPONSE
- SX7 B1 STATUS = FILE ALREADY EXISTS
- BX7 X3+X7
- EQ PPR1 EXIT
- * EMPTY ENTRY FOUND.
- PLF8 SA1 A6
- IX1 X6-X1
- PL X1,PLF4.1 IF USE OF RESERVED ENTRY NOT ALLOWED
- SA6 T2 SAVE ADDRESS OF EMPTY ENTRY
- EQ PLF4.9 CONTINUE SEARCH
- * NO MATCH FOUND, CREATE ENTRY.
- PLF10 SA4 T2 ADDRESS OF FIRST EMPTY ENTRY
- SA1 RA UPDATE LOCAL FILE COUNT
- SX2 LFCN
- IX2 X1-X2
- ERX6 X2
- SX3 X6-MXLF+SRFE+2 CHECK MAXIMUM FILE COUNT
- ZR X4,PLF11 IF NO FREE ENTRY
- SX7 FNTN+SRFE*LENF
- IX1 X1-X7
- IX1 X4-X1
- MX7 1
- BX7 X7*X1
- LX7 1
- IX6 X6+X7 INCREMENT FILE COUNT IF NOT SPECIAL FILE
- SX3 X6-MXLF+SRFE+1
- PL X3,PLF11 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
- EWX6 X2
- SX7 LOFT*100B SET LOCAL FILE TYPE
- BX7 X5+X7
- EWX7 X4
- R= X5,FSTL
- SX7 4 FST COMPLETE/NOT BUSY
- IX6 X5+X4 ADDRESS OF FST
- EWX7 X6
- SA1 RA
- IX7 X1-X4 NFL ADDRESS
- LX7 36
- EQ PPR1 EXIT WITH RESPONSE
- PLF11 SX7 B1+B1 STATUS = LOCAL FILE LIMIT
- PL X3,PPR1 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
- LX7 1 STATUS = NEED MORE NFL
- EQ PPR1 EXIT
- * DELETE FNT ENTRY.
- PLF14 NG X2,HNG IF NFL ADDRESS OUT OF RANGE
- IX2 X4-X1 ADDRESS OF FNT
- ERX3 X2 READ FNT
- SX6 X1-FNTN-SRFE*LENF-LENF
- R= X1,FSTL
- IX5 X2+X1 ADDRESS OF FST
- ZR X3,HNG IF EMPTY
- MX3 1
- ERX0 X5 READ FST
- NZ X7,PLF17 IF COUNTING FILES
- BX3 -X6*X3
- LX3 1
- BX6 X6-X6 CLEAR FNT/FST
- EWX6 X2
- EWX6 X5
- IX5 X5+X1
- ERRNZ FSTL-1
- ERRNZ LENF-3
- EWX6 X5
- SX6 LFCN DECREMENT FILE COUNT IF NOT SPECIAL FILE
- IX6 X4-X6
- ERX2 X6
- IX1 X2-X3
- NG X1,HNG IF NEGATIVE FILE COUNT
- EWX1 X6 UPDATE *LFCN*
- SA2 B7+EOCW CHECK EXECUTE-ONLY FILE
- SA5 A5
- MX1 12
- LX5 -12
- BX6 X5-X2
- BX6 X1*X6
- NZ X6,PPR1 IF NO MATCH
- BX6 -X1*X2
- SA6 A2 CLEAR EXECUTE ONLY FILE POINTER
- EQ PPR1 RETURN
- * COUNT FILES ON EQUIPMENT SPECIFIED IN FST.
- PLF17 SA2 B7+FLSW FETCH NFL SIZE
- MX7 12
- BX2 X7*X2
- SX6 FNTN
- LX2 6+12 NFL
- IX2 X2-X6
- SX3 LENF COMPUTE ADDRESS OF LAST FNT SLOT
- PX5 X3
- PX2 X2
- NX5 X5
- FX1 X2/X5
- UX1 B6,X1
- LX1 X1,B6
- IX6 X1*X3
- MX7 59 INITIALIZE FILE COUNT
- SX6 X6+FNTN-FSTL
- SA4 RA FETCH REFERENCE ADDRESS
- SX5 B1
- IX6 X4-X6 ADDRESS OF LAST FST SLOT IN NFL
- SX1 FNTN-FSTL-LENF
- IX1 X4-X1 INITIALIZE NFL SCAN
- EWX0 X6
- PLF18 IX1 X1-X3
- ERX4 X1 READ FST ENTRY
- BX2 X4-X0
- AX2 48
- NZ X2,PLF18 IF NOT MATCHING EST ORDINAL
- BX4 X1-X6
- IX7 X7+X5 INCREMENT FILE COUNT
- NZ X4,PLF18 IF NOT END OF NFL
- LX7 12
- EWX4 X6 CLEAR SEARCH OBJECTIVE
- EQ PPR1 EXIT
- PSM SPACE 4,20
- ** PSM - PRESET STORAGE MOVE.
- *
- * ENTRY (X0) = ADDRESS TO MOVE FROM.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B4) = WORD COUNT.
- * (B5) = RETURN ADDRESS.
- * (B6) = RETURN ADDRESS FOR CALLING ROUTINE.
- *
- * EXIT (X0) = ADDRESS TO MOVE FROM.
- * (X1) = ADDRESS TO MOVE TO.
- * (X4) = INCREMENT (1 OR -1).
- * (B4) = BLOCK COUNT (WORD COUNT / 10B).
- * (B6) = RETURN ADDRESS FOR CALLING ROUTINE.
- *
- * USES X - 0, 1, 4, 6, 7.
- * B - 4.
- *
- * CALLS RB6.
- *
- * THE ADDRESSES ARE ADJUSTED TO PREVENT OVERLAP, IF NECESSARY.
- PSM SX4 B1+ INCREMENT
- SX7 B4 WORD COUNT
- MX6 -3
- BX6 -X6*X7 REMAINDER
- IX7 X0-X1 ADDRESS TO MOVE TO
- PL X1,PSM1 IF DOWNWARD MOVE
- SX1 B4+ WORD COUNT
- IX0 X0+X1 FWA = LWA+1
- IX7 X7+X1
- IX0 X0-X4 FWA = LWA
- IX7 X7-X4
- BX6 -X6 COMPLEMENT REMAINDER
- BX4 -X4 COMPLEMENT INCREMENT
- PSM1 BX1 X7 FWA OF MOVE
- SX7 B4 WORD COUNT
- AX7 3 TRUNCATE WORD COUNT
- SB4 X7 BLOCK COUNT (WORD COUNT / 10B)
- PSM2 ZR X6,PSM3 IF NO REMAINDER
- ERX7 X0 MOVE REMAINDER
- IX0 X0+X4
- EWX7 X1
- IX1 X1+X4
- IX6 X6-X4
- EQ PSM2 LOOP FOR NEXT WORD
- PSM3 ZR B4,RB6 IF MOVE COMPLETE
- JP B5 RETURN
- RTC SPACE 4,15
- ** RTC - UPDATE REAL-TIME CLOCK FROM CPU MICROSECOND CLOCK.
- *
- * READS THE CPU MICROSECOND CLOCK AND UPDATES THE REAL TIME
- * CLOCK (RTCL) WHEN PROCESSING *MTR* REQUESTS.
- *
- * ENTRY (X5) = CPU MICROSECOND CLOCK.
- *
- * EXIT (RTCL) = UPDATED TO NEAREST SECOND AND MILLISECOND.
- * (X5) = CPU MICROSECOND CLOCK AT ENTRY.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * A - 1, 2, 3, 5, 6, 7.
- * B - 4.
- RTC SA2 RTCA CPU CLOCK VALUE AT LAST WHOLE MILLISECOND
- SX3 B0+
- IX1 X5-X2 MICROSECONDS SINCE LAST WHOLE MILLISECOND
- PL X1,RTC1 IF NO OVERFLOW
- * SINCE THE 48 BIT CPU CLOCK ON A CYBER 180 WILL OVERFLOW ONLY
- * AFTER APPROXIMATELY 9 YEARS, IT IS SAFE TO ASSUME THAT IF AN
- * OVERFLOW HAS OCCURRED IT IS ON A CYBER 170-865/875, WHICH
- * USES A 32 BIT CPU CLOCK WHICH OVERFLOWS EVERY 1.2 HOURS.
- SX3 B1+ CORRECT FOR OVERFLOW
- LX3 32
- IX1 X1+X3
- RTC1 SX6 1000 ONE MILLISECOND
- IX7 X1-X6
- PX1 X1
- NG X7,/MONITOR/PMN1 IF .LT. ONE MILLISECOND
- BX7 X5
- SA7 RTCE SAVE ENTRY CLOCK VALUE
- PX7 X6
- NX7 X7
- FX7 X1/X7 CALCULATE MILLISECONDS
- UX7 X7,B4
- LX7 B4 INTEGER MILLISECONDS
- IX6 X6*X7
- IX6 X2+X6 MICROSECONDS AT NEW WHOLE MILLISECOND
- BX6 -X3*X6 CLEAR POSSIBLE OVERFLOW (CYBER 865/875)
- SA6 A2
- MX2 24
- SA3 RTCC *RTCL* AT LAST *CPUMTR* UPDATE
- BX1 -X2*X3 ISOLATE OLD *RTCL* COMPONENTS
- BX3 X2*X3
- IX7 X1+X7 CURRENT MILLISECONDS
- SA1 RTCB MICROSECONDS AT LAST WHOLE SECOND
- LX3 24
- BX7 -X2*X7 NEW *RTCL* MILLISECOND COMPONENT
- BX2 X2-X2
- SX4 B1
- IX1 X5-X1 MICROSECONDS SINCE LAST WHOLE SECOND
- SB4 10-1
- PL X1,RTC2 IF NO OVERFLOW
- SX2 B1 CORRECT FOR OVERFLOW
- LX2 32
- IX1 X1+X2
- IX5 X5+X2
- RTC2 SX6 1000000/100B
- LX6 6
- IX6 X1-X6
- NG X6,RTC3 IF LESS THAN ONE SECOND
- NG B4,RTC3 IF MORE THAN A 10 SECOND UPDATE
- BX1 X6
- SB4 B4-B1
- IX3 X3+X4 INCREMENT SECONDS
- NZ X6,RTC2 IF NOT WHOLE SECONDS
- RTC3 IX6 X5-X1 MICROSECONDS AT NEW WHOLE SECOND
- MX1 -24
- BX6 -X2*X6 CLEAR POSSIBLE OVERFLOW (CYBER 865/875)
- SA6 A1
- BX3 -X1*X3 NEW *RTCL* SECONDS COMPONENT
- LX3 36
- BX7 X3+X7 UPDATE REAL TIME CLOCK
- SA7 A3+ SAVE NEW *RTCL* VALUE
- SA7 RTCL
- PL B4,RTC4 IF NOT AN EXCESSIVE UPDATE
- SA1 RTCD COPY OPERATOR MESSAGE
- BX6 X1
- SA1 A1+B1
- TA6 MS2W,SCA
- BX6 X1
- SA1 A1+B1
- SA6 A6+B1
- BX6 X1
- SA6 A6+B1
- RTC4 SA5 RTCE RESTORE ENTRY CLOCK VALUE
- EQ /MONITOR/PMN1 EXIT TO PROCESS *MTR* REQUEST
- RTCA CON 0 MICROSECONDS AT LAST WHOLE MILLISECOND
- RTCB CON 0 MICROSECONDS AT LAST WHOLE SECOND
- RTCC CON 377777000000000000B *RTCL* INITIAL AND PREVIOUS
- RTCD DATA C*CLOCK UPDATE WARNING.*
- RTCE CON 0 CPU CLOCK AT ENTRY
- SMI SPACE 4,15
- ** SMI - PROGRAM MODE STORAGE MOVE USING
- * CM TO CM COPY INSTRUCTION.
- *
- * ENTRY (X0) = ADDRESS FROM MOVE TO.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B4) = WORD COUNT OF MOVE.
- * (B6) = RETURN ADDRESS.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * B - 4, 5.
- *
- * CALLS RB6.
- SMI SB5 400B MAXIMUM WORD COUNT / TRANSFER
- SX7 B4+ WORD COUNT
- GE B4,B5,SMI1 IF WORD COUNT .GE. TRANSFER SIZE
- SB5 B4+ SET TRANSFER SIZE TO WORD COUNT
- SMI1 SX4 B5 WORD COUNT / TRANSFER
- BX2 X0 PRESET FWA OF MOVE
- PL X1,SMI3 IF DOWNWARD MOVE
- IX6 X4+X1
- NG X6,SMI2 IF DIFFERENCE BIG ENOUGH
- BX4 -X1 USE DIFFERENCE AS WORD COUNT
- SMI2 IX6 X7+X0 LWA+1 OF BLOCK TO BE MOVED
- IX2 X6-X4 FWA OF MOVE = LWA+1 - INCREMENT
- EQ SMI4 DETERMINE BLOCK COUNT
- SMI3 IX6 X4-X1
- NG X6,SMI4 IF DIFFERENCE BIG ENOUGH
- BX4 X1 USE DIFFERENCE AS WORD COUNT
- * DETERMINE BLOCK COUNT.
- SMI4 PX0 X4 WORD COUNT / TRANSFER
- PX6 X7 WORD COUNT
- NX0 X0
- FX0 X6/X0
- UX0,B4 X0
- LX6 X0,B4
- IX0 X6*X4 BLOCK COUNT
- IX3 X7-X0 REMAINDER
- * SET UP FOR MOVE.
- IX0 X2-X1 ADDRESS TO MOVE TO
- LX2 30
- BX0 X0+X2 INSERT ADDRESS TO MOVE FROM
- SB5 X4 WORD COUNT / TRANSFER
- PL X1,SMI5 IF DOWNWARD MOVE
- BX4 -X4 COMPLEMENT INCREMENT
- SMI5 MX2 -30 BUILD INCREMENT WORD
- BX7 -X2*X4
- BX4 -X2*X4
- LX7 30
- BX4 X7+X4
- SB4 X6+ BLOCK COUNT
- * MOVE STORAGE (MAIN LOOP).
- SMI6 WE B5 MOVE STORAGE
- + SB4 B4-B1 DECREMENT BLOCK COUNT
- IX0 X0+X4 INCREMENT/DECREMENT ADDRESSES
- GT B4,B0,SMI6 IF NOT COMPLETE
- ZR X3,RB6 IF NO REMAINDER
- * MOVE REMAINDER.
- SB5 X3+ REMAINING STORAGE LENGTH
- PL X4,SMI7 IF DOWNWARD MOVE
- IX0 X0-X4 RESET LAST INCREMENT/DECREMENT
- IX0 X0-X3 DECREMENT REMAINING LENGTH
- LX3 30
- IX0 X0-X3
- SMI7 WE B5 MOVE REMAINDER
- + JP B6 RETURN
- VLM SPACE 4,10
- ** VLM - VERIFY FIELD LENGTH STARTUP PROCESSOR.
- *
- * EXIT TO */MONITOR/RCC1*.
- * (VFLR) = 24/0, 18/ CPA, 18/ PP OR
- * TO */MONITOR/PPR1*, IF *VLFM* IN PROGRESS.
- *
- * USES X - 1, 4, 6, 7.
- * A - 1, 6.
- * B - 3, 6.
- VLM LX1 7-36 GET CONTROL POINT
- SX4 7600B
- BX6 X4*X1
- SA1 VFLR VFL REQUEST WORD
- SX7 2 PRESET RESPONSE
- NZ X6,VLM1 IF CONTROL POINT SPECIFIED
- SX6 B7+
- VLM1 SX4 A5+ OUTPUT REGISTER ADDRESS
- LX6 18
- LX7 36
- SB6 VFLXP EXCHANGE PACKAGE ADDRESS
- SB3 /MONITOR/MTRX *RCC* RETURN ADDRESS
- BX6 X6+X4 ASSEMBLE REQUEST
- NZ X1,PPR1 IF *VFLM* ALREADY IN PROGRESS
- SA6 A1 SET REQUEST
- EQ /MONITOR/RCC RECALL CPU
- VFLXP SPACE 4,10
- ** VFLXP - FIELD LENGTH VERIFICATION EXCHANGE PACKAGE.
- *
- * THIS EXCHANGE PACKAGE IS USED TO VERIFY THE FIELD LENGTH
- * OF A PROGRAM AFTER A MEMORY PARITY ERROR HAS BEEN DETECTED.
- * IT MUST BE SEPARATE FROM THE REST OF THE SYSTEM BECAUSE IT
- * MAY ABORT DUE TO A HARD DOUBLE-BIT ERROR IN THE FIELD LENGTH
- * IN QUESTION.
- VFLXP EXP P=/CME/VFL,FL=(,MCM),FLX=(,MXM),A5=VFLR,B1=1,MA=VFLXP,E
- ,M=(,CXPFE)
- * STSW.
- VFD 3/ZCPS INITIAL CPU STATUS
- VFD 57/0
- * CWQW.
- VFD 2/1
- VFD 7/MPRS CPU PRIORITY
- VFD 1/0
- VFD 1/0 CPU SLICE ACTIVE
- VFD 1/0 RECALL FLAG
- VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
- VFD 2/0
- VFD 9/0 SERVICE CYCLE
- VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
- VFD 1/0 *MTR* BYPASS FLAG
- VFD 2/0 NO CPU SELECTION
- VFD 3/0
- VFD 3/FVXT FL VERIFICATION EXCHANGE PACKAGE TYPE
- VFD 18/0 *WQ* LINKAGE
- * CSAW.
- VFD 60/0
- * *CTMW*.
- VFD 60/0
- VFL SPACE 4,10
- ** VFL - VERIFY FIELD LENGTH.
- *
- * ENTRY (A5) = VFLR.
- *
- * CALLS CSM.
- VFLX XJ RETURN
- * CLEAR CM FL.
- VFL SA5 A5 GET REQUEST
- AX5 18 SHIFT TO CONTROL POINT ADDRESS
- SA2 X5+1 RA
- SA1 X5+2 FL
- AX2 36 FWA TO CLEAR
- AX1 36 WORD COUNT
- SB3 VFL1 *CSM* RETURN ADDRESS
- EQ CSM CLEAR STORAGE
- * CHECK CM FL.
- VFL1 SA5 A5 GET REQUEST
- AX5 18
- SA3 X5+FLSW GET NEGATIVE FL LENGTH
- SA2 X5+1 RA
- SA1 X5+2 FL
- SX4 B1 SET INCREMENT
- AX3 48
- AX2 36 FWA
- AX1 36 WORD COUNT
- LX3 6 NEGATIVE FL OFFSET
- IX2 X2-X3 START FWA AT END OF NFL
- IX1 X1+X3 ADD NFL SIZE TO WORD COUNT
- IX1 X1-X4 PRE-DECREMENT WORD COUNT
- VFL2 ERX3 X2
- NO
- IX1 X1-X4 DECREMENT WORD COUNT
- IX2 X2+X4 INCREMENT ADDRESS
- PL X1,VFL2 IF NOT COMPLETE
- TNO /CME/VFL5,XUEM (865/875 AND USER EM IN EXTERNAL EM)
- * CLEAR UEM FL.
- SA5 A5 GET REQUEST
- AX5 18 SHIFT TO CONTROL POINT ADDRESS
- SA2 X5+4 RAE
- SA1 X5+5 FLE
- AX2 36 FWA TO CLEAR
- AX1 36 WORD COUNT
- TLX2 (6,ESM170,0)
- TLX1 (6,ESM170,0)
- ZR X1,VFL5 IF FLE = 0
- BX7 X7-X7
- SX6 B1+
- VFL2.1 WX7 X2 CLEAR USER EM
- IX1 X1-X6
- IX2 X2+X6
- NZ X1,VFL2.1 IF NOT END OF USER EM
- * CHECK UEM FL.
- VFL3 SA5 A5 GET REQUEST
- AX5 18
- SA2 X5+4 RAE
- SA1 X5+5 FLE
- SX4 B1 SET INCREMENT
- AX2 36 FWA
- AX1 36 WORD COUNT
- TLX2 (6,ESM170,0)
- TLX1 (6,ESM170,0)
- IX1 X1-X4 PRE-DECREMENT WORD COUNT
- VFL4 RX3 X2
- NO
- IX1 X1-X4 DECREMENT WORD COUNT
- IX2 X2+X4 INCREMENT ADDRESS
- PL X1,VFL4 IF NOT COMPLETE
- * SET RESPONSE.
- VFL5 SA5 A5 GET REQUEST
- SX6 X5 EXTRACT PP OUTPUT REGISTER ADDRESS
- SA6 A5
- EQ VFLX RETURN
- VFLR VFD 24/0
- VFD 18/0 CONTROL POINT ADDRESS
- VFD 18/0 PP OUTPUT REGISTER ADDRESS
- XJ2 SPACE 4,10
- ** XJ2 - ACCUMULATE ACCOUNTING ADJUSTMENTS.
- *
- * EXIT TO */MONITOR/XJ1.1*.
- *
- * USES X - 1, 2, 4, 6, 7.
- * A - 1, 2, 6, 7.
- * B - 6.
- XJ2 TNO /NVE/XJ1,NVE
- XJ3 SA1 CL+CMST+A0 MONITOR MODE STATUS
- SA2 MT+A0 MONITOR MODE TIME ACCUMULATOR
- TX7 ACAD EXCHANGE JUMP OVERHEAD FACTOR
- SX6 B0 CLEAR BASE TIME TO FLAG MONITOR MODE EXIT
- UX1,B6 X1 EXTRACT MONITOR MODE BASE TIME
- PX6 B6,X6
- ZR B6,XJ5 IF NOT TO ACCUMULATE MONITOR MODE TIME
- RC X4
- IX7 X2+X7 ADD EXCHANGE FACTOR
- IX5 X4-X1 MONITOR MODE TIME INCREMENT
- PL X5,XJ4 IF NO OVERFLOW
- * NOTE - THE MICROSECOND CLOCK ON THE CYBER 170-865 AND 170-875
- * WILL WRAP APPROXIMATELY EVERY 1.2 HOURS, SINCE IT IS ONLY 32
- * BITS WIDE. ALL OTHER MODELS IN THE 170-800 SERIES HAVE 48
- * BIT COUNTERS, WHICH WILL WRAP ONLY ONCE EVERY 9 YEARS OR SO.
- * SINCE THIS COUNTER IS RESET AT DEADSTART, IT IS SAFE TO
- * ASSUME THAT IF A WRAP IS DETECTED, THE COUNTER IS ONLY 32
- * BITS WIDE.
- SX4 1
- LX4 32
- IX5 X5+X4
- XJ4 IX7 X7+X5
- SA7 MT+A0 UPDATE MONITOR MODE TIME
- XJ5 SA6 A1 UPDATE MONITOR MODE STATUS
- EQ /MONITOR/XJ1.1 EXCHANGE TO PROGRAM
- ENDBLK
- BLOCK 0CME,(NO CENTRAL MEMORY EXTENSION.)
- SPACE 4,10
- HNG EQU /MONITOR/HNG
- PPR1 EQU /MONITOR/PPR1
- T1 EQU /MONITOR/T1
- T2 EQU /MONITOR/T2
- T3 EQU /MONITOR/T3
- RA EQU /MONITOR/RA
- RA1 EQU /MONITOR/RA1
- APQ SPACE 4,10
- ** APQ - CHECK FOR *1LT* ASSIGNMENT.
- *
- * ENTRY (X6) = REQUEST.
- *
- * EXIT (X2) = PP AVAILABILITY MASK.
- * (APQC) = NEW PP ALLOCATION MASK.
- *
- * USES X - 1, 2, 3, 4, 7.
- * A - 1, 7.
- * B - 6.
- APQ9 SX3 3R1LT
- MX1 18
- LX3 -18
- BX3 X3-X6
- BX1 X1*X3
- NZ X1,/MONITOR/APQ1.0 IF NOT *1LT*
- SA1 APQD GET ASSIGNMENT MASK
- MX3 10
- TX4 A5-1,-FP
- LX3 -12
- LX4 -3
- SB6 X4-12B
- PL B6,APQ10 IF SECOND PP CHASSIS
- SB6 X4+
- APQ10 AX4 B6,X1 ADJUST PP MASK
- LX1 B6,X1
- BX4 X3*X4 FIRST PP CHASSIS SELECTION
- LX3 -10
- BX1 X3*X1 SECOND PP CHASSIS SELECTION
- BX7 X4+X1
- BX2 X7*X2 ALLOWABLE PP SELECTION
- SA7 /MONITOR/APQC SET SELECTION MASK
- EQ /MONITOR/APQ1.0 ASSIGN THE PP
- APQD VFD 45/-040120060050020B,15/0
- CSM SPACE 4,15
- ** CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
- *
- * ENTRY (X1) = WORD COUNT.
- * (X2) = FWA.
- * (B3) = RETURN ADDRESS.
- *
- * EXIT (X7) = 0.
- *
- * USES X - 0, 1, 3, 5, 6, 7.
- * A - 3, 6, 7.
- *
- * CALLS /MONITOR/RB3.
- CSM SA3 X2-1 GET FWA - 1
- BX7 X3
- SX0 B1
- SA7 A3 INITIALIZE A7
- MX3 -3
- BX5 -X3*X1 EXTRACT REMAINDER
- SX6 B0
- AX1 3 SET BLOCK COUNT
- BX7 X7-X7
- ZR X1,CSM3 IF .LT. 8 WORDS TO CLEAR
- * CLEAR 8 WORD BLOCKS.
- CSM1 SA6 A7+B1
- IX1 X1-X0 DECREMENT BLOCK COUNT
- SA7 A6+1
- CSM2 SA6 A7+B1
- SA7 A6+B1
- SA6 A7+B1
- SA7 A6+B1
- SA6 A7+B1
- SA7 A6+B1
- NZ X1,CSM1 IF NOT COMPLETE
- CSM3 ZR X5,/MONITOR/RB3 IF COMPLETE
- IX5 X5-X0
- SA7 A7+B1 CLEAR REMAINDER
- NZ X5,CSM3 IF NOT COMPLETE
- JP B3 RETURN
- PLF SPACE 4,10
- ** PLF - PROCESS LOCAL FNT.
- PLF SA3 B7+FLSW GET RA AND NFL SIZE
- MX0 -12
- AX3 12
- BX4 -X0*X3
- AX3 36
- ZR X3,HNG IF NO NFL
- LX4 6
- BX6 X6-X6
- LX3 6 NFL
- SB5 X4 RA
- SA1 B5-FNTN+LENF GET FIRST FNT ENTRY
- BX1 -X0*X5 EXTRACT NFL ADDRESS
- LX5 24
- MX0 -3
- BX2 -X0*X5 EXTRACT SUBFUNCTION
- MX0 -18
- LX5 59-41-24
- SB6 X2-TPLFL-1
- PL B6,HNG IF ILLEGAL SUBFUNCTION
- JP TPLF+TPLFL+1+B6 JUMP TO PROCESSOR
- * EXIT TO FUNCTION PROCESSOR WITH -
- *
- * (X0) = 42/-0,18/0.
- * (X1) = NFL ADDRESS/PARAMETER.
- * (X3) = NFL SIZE.
- * (X5) = REQUEST WORD LEFT-SHIFTED 59-35.
- * (A1) = ADDRESS OF FIRST FNT ENTRY.
- * (B5) = RA.
- TPLF BSS 0
- LOC 0
- + IX4 X3-X1 (DLFS) - DELETE ENTRY
- EQ PLF14
- + SX7 B1 (DLCS) - RETURN FILE COUNT
- IX4 X3-X1
- EQ PLF14
- * EQ PLF1 (CRFS) - CREATE LOCAL FNT ENTRY
- TPLFL BSS 0
- LOC *O
- * SET UP FOR FNT SEARCH.
- PLF1 SA4 A5+B1 FILE NAME
- BX6 X6-X6
- SX2 X3-FNTN COMPUTE ADDRESS OF LAST FNT ENTRY
- SX3 LENF
- PX2 X2
- PX3 X3
- NX3 X3
- FX1 X2/X3
- BX7 X0*X4
- UX1 B6,X1
- SA2 A1-LENF
- SX3 LENF
- LX1 X1,B6
- IX3 X1*X3
- SB6 X3+FNTN
- SB3 LENF*2 SEARCH INCREMENT
- SB6 B5-B6 ADDRESS OF LAST ENTRY
- SA7 B6
- SB4 B5-FNTN ALLOW USE OF SPECIAL FILE RESERVED ENTRY
- NG X5,PLF4 IF SPECIAL FILE
- SB4 B4-SRFE*LENF PREVENT USE OF RESERVED ENTRIES
- * SEARCH FOR MATCH OR EMPTY ENTRY.
- *
- * NOTE - THE SEARCH METHOD USED THROUGHOUT THIS PROCESSOR
- * IS TO STORE THE TARGET ENTRY AT THE END OF THE
- * TABLE, THUS GUARANTEEING A MATCH. ONCE IT IS
- * FOUND, THE LAST ENTRY IS CLEARED, AND THE ADDRESS
- * RETURNED IS CHECKED AGAINST THE LAST ENTRY. IF
- * THEY MATCH, THE SEARCH IS DEEMED UNSUCCESSFUL.
- PLF4 SA1 A1-B3
- SA2 A2-B3
- BX3 X4-X1
- BX7 X4-X2
- BX3 X0*X3
- BX7 X0*X7
- ZR X3,PLF7 IF FOUND
- ZR X7,PLF6 IF FOUND
- ZR X1,PLF8 IF EMPTY
- PLF4.1 NZ X2,PLF4 IF NOT EMPTY
- SX7 A2-B4
- PL X7,PLF4 IF USE OF RESERVED ENTRY NOT ALLOWED
- SX6 A2
- BX6 -X0*X6
- * EMPTY ENTRY FOUND, SEARCH FOR MATCH.
- PLF5 SA1 A1-B3
- SA2 A2-B3
- BX3 X4-X1
- BX7 X4-X2
- BX3 X3*X0
- BX7 X7*X0
- ZR X3,PLF7 IF FOUND
- NZ X7,PLF5 IF NOT FOUND
- PLF6 SA1 A2+
- PLF7 BX7 X7-X7 CLEAR LAST ENTRY
- SX3 A1-B6
- SA7 B6+
- ZR X3,PLF10 IF LAST ENTRY
- SB4 A1
- SX3 B5-B4 NFL ADDRESS
- LX3 36 BYTE 1 OF RESPONSE
- SX7 B1 STATUS = FILE ALREADY EXISTS
- BX7 X7+X3
- EQ PPR1 EXIT
- * EMPTY ENTRY FOUND.
- PLF8 SX7 A1-B4
- PL X7,PLF4.1 IF USE OF RESERVED ENTRY NOT ALLOWED
- SX6 A1 SET ADDRESS OF FREE ENTRY
- BX6 -X0*X6
- EQ PLF5 SEARCH FOR MATCH
- * NO MATCH FOUND, CREATE ENTRY.
- PLF10 SA1 B5-LFCN INCREMENT LOCAL FILE COUNT
- SX2 X1-MXLF+SRFE+2 CHECK MAXIMUM FILE COUNT
- ZR X6,PLF11 IF NO FREE ENTRY FOUND
- SB4 X6
- SX3 B5-B4
- SX3 X3-FNTN-SRFE*LENF-LENF
- MX7 1
- BX7 -X3*X7
- LX7 1
- IX7 X1+X7 INCREMENT FILE COUNT IF NOT SPECIAL FILE
- SX2 X7-MXLF+SRFE+1
- PL X2,PLF11 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
- SA7 A1
- BX4 X0*X4
- SX7 LOFT*100B SET LOCAL FILE TYPE
- BX7 X7+X4
- SA7 X6
- SX7 4 SET FST - OPERATION COMPLETE, NOT BUSY
- SA7 A7+FSTL
- SX7 B5-B4 NFL ADDRESS OF FNT ENTRY
- LX7 36
- EQ PPR1 EXIT WITH RESPONSE
- PLF11 SX7 B1+B1 STATUS = LOCAL FILE LIMIT
- PL X2,PPR1 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
- LX7 1 STATUS = NEED MORE NFL
- EQ PPR1 EXIT
- * DELETE FNT ENTRY.
- PLF14 NG X4,HNG IF NFL ADDRESS OUT OF RANGE
- SB3 X1
- SA2 B5-B3 CLEAR FNT ENTRY
- ZR X2,HNG IF EMPTY FNT SLOT
- MX5 12
- SA4 A2+B1 READ *FST* ENTRY (FOR *DLCS* FILE COUNT)
- NZ X7,PLF17 IF COUNTING FILES
- ERRNZ FSTL-1
- SA6 A2
- SA6 A2+B1
- SA6 A6+B1
- ERRNZ LENF-3
- SX4 X1-FNTN-SRFE*LENF-LENF
- MX6 1
- SA2 B5-LFCN DECREMENT FILE COUNT IF NOT SPECIAL FILE
- BX6 -X4*X6
- LX6 1
- IX6 X2-X6
- NG X6,HNG IF NEGATIVE FILE COUNT
- SA6 A2
- SA2 B7+EOCW CHECK FOR EXECUTE-ONLY FILE
- BX6 -X5*X2
- AX2 48 POSITION FNT ADDRESS
- BX1 X2-X1
- NZ X1,PPR1 IF NOT DELETING EXECUTE-ONLY FNT
- SA6 A2
- EQ PPR1 RETURN
- * COUNT FILES ON EQUIPMENT SPECIFIED IN FST.
- PLF17 SX6 LENF
- SX2 X3-FNTN COMPUTE ADDRESS OF LAST FNT SLOT
- PX3 X6
- PX2 X2
- NX3 X3
- FX1 X2/X3
- SX5 B1
- UX1 B6,X1
- LX1 X1,B6
- IX3 X1*X6
- SA1 B5-FNTN+LENF+FSTL FIRST FNT ENTRY
- SB6 X3+FNTN-FSTL
- BX6 X4 STORE SEARCH OBJECTIVE AT END OF NFL
- SB6 B5-B6
- MX7 59 INITIALIZE FILE COUNT
- SA6 B6
- PLF18 SA1 A1-LENF READ FST ENTRY
- BX2 X4-X1
- AX2 48
- NZ X2,PLF18 IF NOT MATCHING EST ORDINAL
- SX6 A1-B6
- IX7 X7+X5 INCREMENT FILE COUNT
- NZ X6,PLF18 IF NOT END OF NFL
- LX7 12
- SA6 B6 CLEAR SEARCH OBJECTIVE
- EQ PPR1 EXIT
- ENDBLK
- BLOCK CMUMTR,(1 CPU MONITOR MODE CMU MOVE.),MONITOR
- MSM SPACE 4
- ** MSM - MONITOR MODE CMU MOVE.
- *
- * ENTRY (X0) = ADDRESS TO MOVE FROM.
- * (B4) = WORD COUNT OF MOVE.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B6) = EXIT ADDRESS.
- *
- * USES X - 0, 1, 4, 6, 7. (*MSM* AND *MSR* REGISTER USAGE)
- * B - 4, 5.
- * A - 1, 4, 6, 7.
- MSM SB5 X1 MOVE DIFFERENCE
- SA1 X0 FWA TO MOVE FROM
- SX1 B4 SET CHARACTER COUNT OF BLOCK
- SX0 B4+B4
- LX1 3
- MX6 -4
- IX1 X1+X0
- BX0 -X6*X1 LL
- BX1 X6*X1 LU
- LX0 30-4
- SX6 A1
- LX1 48-4
- BX1 X1+X0
- MX7 -18
- SX0 A1-B5 SET ADDRESS OF MOVE
- BX6 -X7*X6
- BX0 -X7*X0
- LX6 30
- BX0 X1+X0 MERGE CHARACTER COUNT
- BX6 X0+X6
- SA6 MSMA STORE DESRCIPTOR WORD
- IM MSMA
- JP B6 RETURN
- MSMA CON 0 INDIRECT MOVE DESCRIPTOR WORD
- ENDBLK
- BLOCK 0CMUMTR,(REGISTER MOVE.),MONITOR
- MSM SPACE 4
- ** MSR - MONITOR MODE MOVE STORAGE WITH REGISTERS.
- *
- * ENTRY (X0) = ADDRESS TO MOVE FROM.
- * (B4) = WORD COUNT OF MOVE.
- * (X1) = (X0) - ADDRESS TO MOVE TO.
- * (B6) = EXIT ADDRESS.
- *
- * USES X - 0, 1, 4, 6, 7. (*MSM* AND *MSR* REGISTER USAGE)
- * B - 4, 5.
- * A - 1, 4, 6, 7.
- MSR SB5 X1+ MOVE DIFFERENCE
- SA1 X0+ FWA TO MOVE FROM
- SB4 B4-10B
- NG B4,MSR2 IF LESS THAN 10B WORDS TO MOVE
- * REGISTER MOVE LOOP.
- MSR1 BX6 X1
- SB4 B4-10B DECREMENT WORD COUNT
- SA4 A1+B1
- SA6 A1-B5
- LX7 X4
- SA1 A4+B1
- SA7 A4-B5
- BX6 X1
- SA4 A1+B1
- SA6 A1-B5
- LX7 X4
- SA1 A4+B1
- SA7 A4-B5
- BX6 X1
- SA4 A1+B1
- SA6 A1-B5
- LX7 X4
- SA1 A4+B1
- SA7 A4-B5
- BX6 X1
- SA4 A1+B1
- SA6 A1-B5
- LX7 X4
- SA1 A4+B1
- SA7 A4-B5
- PL B4,MSR1 IF MORE 10 WORD BLOCKS TO MOVE
- MSR2 SB4 B4+10B
- EQ MSR4
- MSR3 SB4 B4-B1
- BX6 X1
- SA6 A1-B5
- SA1 A1+B1
- MSR4 GT B4,B0,MSR3 IF MORE WORDS TO MOVE
- JP B6 RETURN
- ENDBLK
- BLOCK CPP,(CONCURRENT PP REQUEST CODE.)
- CPR SPACE 4,10
- ** CPR - *CPRM* FUNCTION PROCESSOR.
- *
- * ENTRY (X1) = CALLING PARAMETERS.
- * (X7) = 0.
- *
- * EXIT (X7) = REASON CODE AND STATUS.
- CPR BSS 0 ENTRY
- AX1 36 GET SUBFUNCTION
- SB5 /MONITOR/PPRX ERROR EXIT ADDRESS
- MX6 -12
- SB4 X1
- SA1 CPPL
- BX6 -X6*X5 GET PARAMETER
- GT B4,B1,CPR8 IF NOT ASSIGN OPERATION
- SB6 X6-2 DETERMINE IF REQUEST IS FOR A LEGAL BARREL
- SX7 5 RC = *INCORRECT CIO BARREL NUMBER*
- NG B6,CPR2 IF INCORRECT BARREL PARAMETER
- GT B6,B1,CPR2 IF INCORRECT BARREL PARAMETER
- SB3 5 SET CPP-S PER BARREL
- ZR B6,CPR1 IF BARREL ZERO REQUESTED
- SX2 X1
- AX2 12
- SX2 X2-6
- NG X2,CPR2 IF BARREL 1 NOT PRESENT
- SB6 50B SET TO SCAN BARREL 1
- * SUBFUNCTION 0 (ASSIGN CPP).
- CPR1 TA3 B6,FPC
- ZR X3,CPR3 IF FREE CPP FOUND
- SB3 B3-1
- SB6 B6+10B
- NZ B3,CPR1 IF MORE CPP-S TO CHECK
- SX7 3 RC = *CPP NOT AVAILABLE*
- CPR2 LX7 24-0 POSITION ERROR CODES
- EQ /MONITOR/MTRC STORE OUTPUT REGISTER AND EXIT MONITOR
- CPR3 EQ B4,B1,CPR5 IF ASSIGN AND LOAD CPP (SUBFUNCTION 1)
- SA2 CPRA CHECK IF CALL FOR NOS/VE PP
- SA4 A5+B1
- BX2 X2-X4
- MX0 18
- BX2 X0*X2
- SB3 B7+
- SB4 CPR4 RETURN ADDRESS
- NZ X2,WPR IF CALL NOT FOR NOS/VE PP
- TB3 SCA SYSTEM CONTROL POINT NUMBER
- EQ WPR WRITE PARAMETER WORDS
- CPR4 SX7 A3
- LX7 36-0 SET ST=INPUT REGISTER AND RC=0
- EQ /MONITOR/MTRC STORE (OR) AND EXIT MONITOR MODE
- * ASSIGN AND LOAD CPP (SUBFUNCTION 1).
- CPR5 SB3 B7 CONTROL POINT ADDRESS
- SB4 CPR6 RETURN ADDRESS
- TB7 SCA SET CONTROL POINT FOR *1MA* CALL
- EQ WPR WRITE PARAMETER WORDS
- CPR6 SA1 A5+B1
- BX6 X1
- SB6 CPR7+400000B RETURN ADDRESS AND CPP FLAG
- EQ /MONITOR/SPL SEARCH PERIPHERAL LIBRARY
- CPR7 BX6 X7
- SX2 B1
- SX7 7 RC = *LIBRARY LOCKED*
- NG X1,CPR9 IF LIBRARY LOCKED
- LX2 48
- SX7 X7+B1 RC = *PROGRAM NOT FOUND*
- NZ X5,CPR9 IF PP PROGRAM NOT FOUND
- BX7 X6+X2
- SA7 A3+B1 SET CPP OUTPUT REGISTER
- SX7 A3 SET ST = CPP INPUT REGISTER, RC = 0
- LX7 36-0
- SA7 A5
- SA1 CPRB SET UP *1MA* CALL
- SX0 A3 *IR* OF CPP
- SX2 A5 *OR* OF CALLING PP
- LX2 12-0
- BX2 X0+X2
- BX6 X1+X2 PP CALL FORMAT
- SB4 /MONITOR/LA1MA SET INDEX INTO *TAPQ* TABLE
- SB3 /MONITOR/MTRX EXIT ADDRESS
- EQ /MONITOR/APQ ASSIGN PP
- * SUBFUNCTION 2 (RETURN CPP).
- CPR8 SB4 B4-2 CHECK SUBFUNCTION
- GT B4,B0,/MONITOR/HNG1 IF INCORRECT SUBFUNCTION
- SX0 X1 VALIDATE THAT CPP EXISTS
- AX0 12
- SX7 4 RC = *INCORRECT CPP NUMBER*
- IX1 X0-X6
- LX6 3 MULTIPLY BY 10B
- NG X1,CPR2 IF CPP DOES NOT EXIST
- TA3 X6,FPC
- MX0 18
- BX3 X0*X3
- SA1 CPRA
- TB3 SCA SYSTEM CONTROL POINT NUMBER
- SX7 10001B RC = *CPP NOT ASSIGNED*
- BX0 X1-X3
- NZ X0,CPR2 IF CPP IS NOT ASSIGNED TO *VER*
- BX7 X7-X7
- CPR9 SA2 B3+STSW
- SA1 PPAL
- SX0 B1
- LX0 48-0
- IX6 X2-X0 DECREMENT PP COUNT AT CP
- SA6 A2
- LX0 12-48
- IX6 X0+X1 INCREMENT AVAILABLE CPP COUNT
- SA6 A1
- BX6 X6-X6 CLEAR INPUT REGISTER
- TX1 A3,-FP
- SA6 A3
- LX1 PPXES-PPCES
- TA6 X1+ACPP,FPX CLEAR CP ASSIGNMENT
- EQ CPR2 EXIT
- CPRA VFD 18/3L*VP,42/0 SIGNIFIES A NOS/VE PP
- CPRB VFD 18/0L1MA,6/0,12/10B,24/0
- DDB SPACE 4,15
- ** DDB - *DDB* EXTENSION FOR CONCURRENT PPS.
- *
- * *DDB* GETS CALLED WHEN IT IS NECESSARY TO DUMP A DAYFILE
- * BUFFER.
- *
- * ENTRY (A5) = REQUEST ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT TO /MONITOR/DDB3 WITH (X0) = (B7), IF CALLED FROM CPP.
- * TO /MONITOR/DDB IF NOT CALLED FROM CPP.
- *
- * USES X - 0, 2.
- * B - 3.
- *
- * CALLS DDD.
- DDB TX2 A5,-FPC
- NG X2,/MONITOR/DDB IF NOT CALLED FROM A CPP
- TX2 A5,-SP
- PL X2,/MONITOR/DDB IF NOT CALLED FROM A CPP
- SB3 DDB1 SET *DDD* RETURN ADDRESS
- JP /MONITOR/DDD ATTEMPT TO DUMP DAYFILE DIRECT
- DDB1 SX0 B7 WAIT FOR 1 SECTOR OF SPACE
- SX4 B6+ SET DAYFILE INDEX
- BX5 X4+X5
- JP /MONITOR/DDB3 CHANGE FUNCTION TO *CDBM*
- DDD SPACE 4,15
- ** DDD - *DDD* EXTENSION FOR CONCURRENT PP-S.
- *
- * *DDD* GETS CALLED WHEN ATTEMPTING TO INITIATE A DAYFILE
- * BUFFER DUMP BY CALLING *1DD* DIRECTLY AND THE CONTROL POINT
- * INVOLVED HAS ROLLOUT REQUESTED. IF A *CPP* IS REQUESTING THE
- * DUMP, *1DD* WILL BE CALLED. OTHERWISE, IT WILL NOT BE.
- *
- * ENTRY (A5) = REQUEST ADDRESS.
- * (B3) = RETURN ADDRESS FOR */MONITOR/DDD*.
- *
- * EXIT TO */MONITOR/DDD2*, IF CALLED FROM A CPP.
- * TO (B3), IF NOT CALLED FROM A CPP.
- *
- * USES X - 2.
- DDD TX2 A5,-FPC
- NG X2,/MONITOR/RB3 IF NOT CALLED FROM A CPP
- TX2 A5,-SP
- NG X2,/MONITOR/DDD2 IF CALLED FROM A CPP
- JP B3 RETURN
- DPP SPACE 4,10
- ** DPP - *DPPM* EXTENSION FOR CONCURRENT PP-S.
- *
- * ENTRY (A5) = *OR* ADDRESS OF CPP TO DROP.
- * (A2) = ADDRESS OF *ACPP*.
- *
- * EXIT TO *APQ*, TO CALL *1MA* WHICH WILL IDLE THE CPP.
- *
- * USES X - 3, 4, 6, 7.
- * A - 4, 7.
- * B - 3, 4, 7.
- DPP BSS 0 ENTRY
- SX7 3L*MA RESET INPUT REGISTER
- LX7 59-17
- MX4 18
- BX7 X4*X7
- SA7 A5-B1
- SA4 PPAL INCREMENT COUNT OF AVAILABLE CPP-S
- SX3 10000B
- IX7 X4+X3
- SA7 A4
- BX7 X7-X7
- SA7 A2 CLEAR *ACPP*
- SA7 A5+ CLEAR OUTPUT REGISTER
- SB3 DPP1
- EQ /MONITOR/JAV CHECK JOB ADVANCE CONDITIONS
- DPP1 SA2 DPPA SET PP CALL
- SX3 A5-B1 INPUT REGISTER ADDRESS
- BX6 X2+X3
- TB7 SCA SET CONTROL POINT FOR *1MA* CALL
- SB4 /MONITOR/LA1MA SET INDEX INTO *TAPQ* TABLE
- SB3 /MONITOR/MTRX EXIT ADDRESS
- EQ /MONITOR/APQ ASSIGN PP
- DPPA VFD 18/0L1MA,6/0,12/12B,24/0
- LMS SPACE 4,15
- ** LMS - *LMSM* EXTENSION FOR CONCURRENT PPS.
- *
- * ENTRY (X0) = 77777777777777770000B.
- * (X2) = SUBFUNCTION CODE.
- * (X6) = *WDSE* MASK = -0 IF *WDSE* PRESENT.
- *
- * EXIT (X0) = 11B.
- * (X3) = *CHRV* VALUE FROM MB+1.
- * (X4) = OLD DRIVER INDEX.
- * (X5) = *6DC*/*6DD* DRIVER INDEX.
- * (X6) = 12/0, 12/*WDSE* VALUE, 24/0, 12/2.
- * (A3) = MESSAGE BUFFER ADDRESS.
- * (B3) = SUBFUNCTION CODE.
- *
- * USES X - 0, 2, 3, 4, 5, 6, 7.
- * A - 2, 3.
- * B - 3.
- LMS13 SA3 A5+B1 GET *MB*
- SB3 X2 (B3) = SUBFUNCTION CODE
- SA2 A3+B1 GET *MB*+1
- LX5 59-44
- SX4 37B*10000B
- MI X5,LMS14 IF *6DD* REQUEST BIT IS SET
- SX5 /MONITOR/LA6DC*10000B SET NEW DRIVER INDEX
- EQ LMS15 COMPLETE *6DC* LOAD PROCESSING
- LMS14 SX5 /MONITOR/LA6DD*10000B SET *6DD* DRIVER INDEX
- LMS15 BX7 -X0*X2 GET *CHRV* VALUE
- BX0 X6*X0 GET *WDSE* VALUE
- LX0 36
- BX4 X4*X2
- BX0 -X0*X3
- SX6 B1+B1 INHIBIT PRESET IF *6DC* ALREADY LOADED
- LX3 X7
- BX6 X6+X0
- SX0 11B
- EQ /MONITOR/LMS4 CHECK FOR DRIVER LOAD NEEDED
- SPL SPACE 4,10
- ** SPL - *SPLM* EXTENSION FOR CONCURRENT PPS.
- *
- * ENTRY ENTRY CONDITIONS FOR *SPL*.
- *
- * EXIT (B6) = B6 + 400000B, IF REQUEST IS FOR A CPP.
- *
- * USES X - 3, 4.
- SPL TX3 A5,-FPC CHECK FOR CALL FROM CPP
- TX4 A5,-SP
- NG X3,/MONITOR/SPL IF NOT FROM CPP
- PL X4,/MONITOR/SPL IF NOT FROM CPP
- SB6 B6+400000B
- EQ /MONITOR/SPL SEARCH PERIPHERAL LIBRARY
- SPL1 PL B6,SPL2 IF REQUEST WAS FOR AN NPP
- SB6 B6-400000B
- SPL2 TJP (/PROBE/SPL,PROBE,B6) RETURN
- TITLE SUBROUTINES.
- WPR SPACE 4,15
- ** WPR - WRITE PARAMETER WORDS INTO CPP-S COMMUNICATION AREA.
- *
- * ENTRY (A3) = *IR* ADDRESS OF ASSIGNED CPP.
- * (A5) = *OR* ADDRESS OF CALLING PP.
- * (B3) = CONTROL POINT ADDRESS.
- * (B4) = RETURN ADDRESS.
- *
- * EXIT TO *CPR2*, IF PP LIMIT EXCEEDED.
- * *MB* OF CALLING PP WRITTEN INTO CPP-S *IR*.
- * *MB+1* OF CALLING PP WRITTEN INTO CPP-S *MB*.
- *
- * USES X - 0, 1, 2, 4, 6, 7.
- * A - 1, 2, 4, 7.
- * B - 6.
- WPR SA4 B3+STSW
- SX7 6 RC = *MAXIMUM PP-S ALREADY ASSIGNED*
- TX2 B3,-SCA
- MX0 -5
- LX4 0-48
- ZR X2,WPR1 IF CALL FOR SYSTEM CONTROL POINT
- BX0 -X0*X4
- SB6 X0-NPPCP-1
- PL B6,CPR2 IF PP LIMIT EXCEEDED
- WPR1 SX0 B1
- IX7 X4+X0 INCREMENT PP COUNT
- LX7 48-0
- SA7 A4
- SA2 PPAL
- LX0 12-0
- IX7 X2-X0 DECREMENT AVAILABLE CPP COUNT
- SA7 A2
- SA1 A5+B1
- SX2 B3 ADD CONTROL POINT NUMBER
- LX2 36-0-7
- BX7 X1+X2
- SA2 A1+B1
- BX6 X2
- SA7 A3
- SA6 A3+2 WRITE PARAMETER WORD INTO NEW CPP-S MB
- * IF NOT CALLED TO THE SYSTEM CONTROL POINT, AN ALTERNATE
- * ASSIGNMENT TO THE SYSTEM CONTROL POINT WILL BE SET TO ALLOW
- * A STORAGE MOVE OF THE CALLING JOB WHILE THE CPP DEADSTART IS
- * IN PROGRESS.
- TX7 B3,-SCA
- ZR X7,WPR2 IF CALLED TO SYSTEM CP
- SX7 B1
- LX7 23-0 SET ALTERNATE CP FLAG
- WPR2 TX1 SCA
- BX7 X7+X1
- LX1 24
- TX2 A3,-FP
- BX7 X7+X1
- LX1 24-7
- LX2 PPXES-PPCES
- BX7 X7+X1
- TA7 X2+ACPP,FPX SET CP ASSIGNMENT
- JP B4 RETURN
- ENDBLK
- BLOCK PCP,(PSEUDO-CONTROL POINT CODE.)
- APC SPACE 4,20
- ** APC - ASSIGN PSEUDO-CONTROL POINT.
- *
- * ENTRY (X1) = *STSW* LEFT SHIFTED 59-31.
- * (X2) = EJT ORDINAL.
- * (X4) = EJT *JSNE* WORD.
- * (A1) = *STSW* ADDRESS.
- * (B7) = CPA ADDRESS.
- *
- * EXIT (B3) = UNCHANGED.
- * (B5) = PCP NUMBER IF ROLLOUT TO PCP POSSIBLE.
- * (B6) = -1 IF COMPOUND ROLLOUT.
- * = 0 IF SIMPLE PSEUDO-ROLLOUT.
- * (B7) = CPA ADDRESS (UNCHANGED).
- * TO *RPC* TO INITIATE ROLLOUT TO PCP.
- * TO /MONITOR/*JAV2* IF ROLLOUT TO PCP NOT POSSIBLE.
- *
- * USES X - ALL.
- * B - 3, 4, 5, 6.
- * A - 1 - 6.
- *
- * CALLS RPC.
- APC BSS 0 ENTRY
- * CHECK JOB FOR CONDITIONS PREVENTING PSEUDO-ROLLOUT.
- SX6 X2+
- SA2 B7+SRUW
- SA3 B7+FLIW
- SA6 APCC SAVE EJT ORDINAL
- MX0 -12
- AX1 36-32
- SX6 4000B
- BX1 -X0*X1 ERROR FLAG
- MX7 -36
- LX2 11-41 POSITION ACCUMULATOR OVERFLOW FLAG
- BX3 -X7*X3 PENDING FL OR FLE INCREASE
- BX2 X4+X2
- IX1 X1+X3
- BX2 X6*X2 SET OVERFLOW AND SCP CONNECTION STATUS
- IX2 X1+X2
- ZR X2,APC2 IF NO CONDITIONS PREVENTING PSEUDO-ROLLOUT
- * ROLL OUT JOB TO MASS STORAGE IF PSEUDO-ROLLOUT NOT POSSIBLE.
- APC1 SA1 B7+STSW
- MX6 -1
- LX6 31-0
- BX6 X6*X1 CLEAR PSEUDO-ROLLOUT ALLOWED FLAG
- SA6 A1
- EQ /MONITOR/JAV2 CALL *1AJ* FOR MASS STORAGE ROLLOUT
- * SAVE REGISTERS AND INITIALIZE PCP SEARCH.
- APC2 SA1 PCPP
- SX6 A5+ SAVE (A5)
- TX3 SC SYSTEM CP NUMBER
- SB4 X1+TFSW PCPA FWA + *TFSW*
- SA6 APCB
- SX7 B3+ SAVE (B3)
- SB5 X3+1 FIRST PCP NUMBER
- SX6 77777B INITIALIZE LOWEST PRIORITY
- SA1 CMCL
- SA7 APCA
- TX2 NPCP NUMBER OF PCP-S
- LX1 -48
- BX1 -X0*X1 MOVING CP/PCP NUMBER
- * SEARCH FOR AVAILABLE PCP.
- APC3 SX2 X2-1 DECREMENT PCP INDEX
- NG X2,APC4 IF END OF SCAN
- BX3 X2
- LX3 7 PCP INDEX * 200B
- SA4 B4+X3 READ THIS PCP-S *TFSW* WORD
- LX4 -48
- BX4 -X0*X4 EJT ORDINAL
- ZR X4,APC5 IF FREE PCP
- SX3 B5+X2 PCP NUMBER
- BX3 X3-X1
- ZR X3,APC3 IF PCP MOVING
- CX5 X4,EJT CONVERT EJT ORDINAL TO OFFSET
- TA5 X5+JSNE,EJT
- SA3 A4+STSW-TFSW
- LX5 59-0
- AX3 48
- NG X5,APC3 IF PCP JOB INTERLOCKED
- SA5 A5+SCLE-JSNE
- AX5 54 SERVICE CLASS
- CX4 X5,JCB CONVERT JCB ORDINAL TO OFFSET
- NZ X3,APC3 IF ACTIVITY AT PCP
- TA4 X4+EXQT,JCB
- LX4 -12
- BX7 -X0*X4 WEIGHTING FACTOR (WF)
- SB3 X7
- LX4 -36+12
- BX4 -X0*X4 LOWER BOUND PRIORITY (LB)
- SA3 RTCL
- AX3 36 REAL TIME SECONDS (RT)
- SA5 A5+SCHE-SCLE
- LX5 36
- AX5 36 ENTRY TIME (ET)
- IX3 X3-X5 RT - ET
- AX3 X3,B3 (RT - ET) / WF
- IX4 X3+X4 PRIORITY = LB + (RT - ET) / WF
- IX5 X4-X6
- PL X5,APC3 IF HIGHER PRIORITY THAN CURRECNT LOWEST
- SX6 X4 SET NEW LOWEST PRIORITY PCP JOB
- SB6 B5+X2 SET NEW LOWEST PRIORITY PCP NUMBER
- EQ APC3 CONTINUE SCAN
- * PROCESS NO PCP AVAILABLE. INITIATE COMPOUND ROLLOUT OF
- * LOWEST PRIORITY PCP JOB IF THAT JOB-S PRIORITY IS LOWER THAN
- * THAT OF THE CP JOB.
- APC4 SA3 B7+TFSW
- TA1 PCNS,SDA
- SX7 B1
- IX7 X1+X7 INCREMENT *NO PCP* COUNTER
- SA7 A1
- LX3 -48
- BX4 -X0*X3 CP JOB-S EJT ORDINAL
- CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
- TA3 X3+SCHE,EJT
- BX3 -X0*X3 CP JOB-S SCHEDULING PRIORITY
- IX3 X6-X3
- PL X3,APC7 IF LOWEST PCP PRIORITY .GE. CP JOB-S
- SX4 B6-B5 PCP INDEX
- LX4 7
- TB4 X4,PCPA PCPA ADDRESS FOR *RPC*
- SB5 B6 PCP NUMBER FOR *RPC*
- SB6 -B1 INDICATE *APC* CALL
- EQ APC6 INITIATE COMPOUND ROLLOUT
- * INITIATE ROLLOUT TO UNOCCUPIED PCP.
- APC5 SA1 APCC GET EJT ORDINAL
- SB6 B0+ INDICATE SIMPLE PSEUDO-ROLLOUT TO *RPC*
- TB4 X3,PCPA *PCPA* ADDRESS FOR *RPC*
- LX1 48
- AX3 7 PCP INDEX
- BX6 X1
- SB5 B5+X3 PCP NUMBER
- SA6 B4+TFSW RESERVE PCP
- * RESTORE REGISTERS AND INITIATE PSEUDO-ROLLOUT OR COMPOUND
- * ROLLOUT.
- APC6 SA1 APCA RESTORE (B3)
- SA2 A1+B1 RESTORE (A5)
- ERRNZ APCB-APCA-1 CODE DEPENDS ON VALUE
- SB3 X1
- SA5 X2
- EQ RPC INITIATE PSEUDO OR COMPOUND ROLLOUT
- * RESTORE REGISTERS AND INITIATE ROLLOUT TO MASS STORAGE.
- APC7 SA1 APCA RESTORE (B3)
- SA2 A1+B1 RESTORE (A5)
- ERRNZ APCB-APCA-1 CODE DEPENDS ON VALUE
- SB3 X1
- SA5 X2
- EQ APC1 INITIATE ROLLOUT TO MASS STORAGE
- APCA CON 0 (B3) SAVE AREA
- APCB CON 0 (A5) SAVE AREA
- APCC CON 0 EJT ORDINAL
- RPC SPACE 4,20
- ** RPC - INITIATE PSEUDO-ROLLOUT OR PCP ROLLOUT.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (B4) = PCPA ADDRESS.
- * (B5) = PCP NUMBER.
- * (B6) = -1 IF COMPOUND ROLLOUT.
- * = 0 IF SIMPLE PSEUDO-ROLLOUT.
- * .GT. 0 IF SIMPLE PCP ROLLOUT.
- * (B7) = CPA ADDRESS IF SIMPLE PSEUDO-ROLLOUT OR
- * COMPOUND ROLLOUT.
- * = PCPA ADDRESS IF SIMPLE PCP ROLLOUT.
- *
- * EXIT (B3) = UNCHANGED.
- * TO *APQ*.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 6.
- * B - 4, 6, 7.
- *
- * CALLS APQ.
- RPC BSS 0 ENTRY
- SX5 B1 *1RO* FUNCTION CODE - 2
- SX7 B1
- GT B6,B0,RPC1 IF SIMPLE PCP ROLLOUT
- TA1 POTS,SDA
- SX5 -B6
- IX6 X1+X7 INCREMENT PSEUDO-ROLLOUT COUNTER
- SA6 A1+
- EQ B6,B0,RPC2 IF SIMPLE PSEUDO-ROLLOUT
- RPC1 TA1 PCTS,SDA INCREMENT PCP ROLLOUT COUNTER
- SA3 B4+TFSW GET PCP EJT ORDINAL
- IX6 X1+X7
- LX3 -48
- SA6 A1+
- MX0 -12
- BX3 -X0*X3 PCP JOB EJT ORDINAL
- CX6 X3,EJT CONVERT EJT ORDINAL TO OFFSET
- TA3 X6+JSNE,EJT READ PCP EJT ENTRY
- BX6 X3+X7 SET JOB INTERLOCK
- SA6 A3
- RPC2 SA2 RPCA
- SX4 B5+ PCP NUMBER
- LX5 24
- IX2 X2+X5 SET *1RO* FUNCTION CODE
- BX6 X2+X4 MERGE PCP NUMBER INTO *1RO* CALL
- SB6 B6-B1
- SB4 /MONITOR/LA1RO SET *1RO* FAST PP LOAD TABLE INDEX
- NG B6,/MONITOR/APQ IF NOT SIMPLE PCP ROLLOUT
- TB7 SCA SET SYSTEM CONTROL POINT ASSIGNMENT
- EQ /MONITOR/APQ ASSIGN PP
- RPCA VFD 18/3L1RO,6/0,12/2,24/0 *1RO* REQUEST
- ENDBLK
- BLOCK CP830,(CYBER 810/830 RESIDENT CODE.),MONITOR
- CSP SPACE 4,20
- ** CSP - CHECK FOR SPECIAL PP PROGRAM.
- *
- * ON CYBER 810/830 MAINFRAMES WITH 20 PPS, CERTAIN PROGRAMS
- * ARE ASSIGNED ONLY TO BARREL 1.
- *
- * ENTRY (X6) = PP CALL.
- * (X2) = AVAILABLE PP FLAGS.
- * (B7) = CP ADDRESS.
- *
- * EXIT (X2) = UPDATED AVAILABLE PP FLAGS.
- * (APQC) = PP SELECTION MASK.
- *
- * USES X - 2, 3, 4, 7.
- * A - 4, 7.
- CSP BSS 0 ENTRY
- SA4 CSPB PRESET TABLE SEARCH
- MX3 18
- BX3 X3*X6 GET PACKAGE NAME
- LX3 18
- MX7 -18 GET PP ROUTINE
- BX7 -X7*X4
- IX7 X3-X7
- ZR X7,CSP2 IF *1AJ* CALL
- PL X7,CSP1 IF SYSTEM CALL (*1XX* PP NAME)
- SA4 CSPA-1 PRESET ALTERNATE TABLE SEARCH
- * CHECK FOR SPECIAL PP-S.
- CSP1 SA4 A4+B1 READ NEXT ENTRY
- MX7 -18 GET PP ROUTINE
- BX7 -X7*X4
- IX7 X3-X7
- NG X7,APQ1.0 IF PACKAGE NAME NOT IN TABLE
- NZ X7,CSP1 IF NO MATCH
- * ASSIGN SPECIFIED BARREL.
- CSP2 MX7 20
- LX7 -12
- BX7 X7*X4
- BX2 X7*X2
- SA7 APQC
- EQ APQ1.0 RETURN TO *APQ*
- CSP SPACE 4,10
- **** LIST OF PP ROUTINES AND ASSOCIATED BARREL.
- *
- *T 12/ 0, 20/ B, 10/ 0, 18/ PP.
- * B - BARREL TO LOAD PP ROUTINE.
- * PP - PP ROUTINE NAME.
- *
- * NOTE - BOTH LISTS MUST BE IN ASCENDING ALPHABETICAL ORDER.
- * SPECIAL SYSTEM ROUTINES.
- CSPA VFD 12/0,20/BARREL1,10/0,18/3LCPD *CPD*
- VFD 12/0,20/BARREL1,10/0,18/3LLDD *LDD*
- VFD 12/0,20/BARREL1,10/0,18/3LLDQ *LDQ*
- VFD 12/0,20/BARREL1,10/0,18/3LLDR *LDR*
- VFD 12/0,20/BARREL1,10/0,18/3LMP3 *MP3*
- VFD 12/0,20/BARREL1,10/0,18/3LMTE *MTE*
- VFD 12/0,20/BARREL1,10/0,18/3LNDR *NDR*
- VFD 12/0,20/BARREL1,10/0,18/3LPFU *PFU*
- VFD 12/0,20/BARREL1,10/0,18/3LTCS *TCS*
- VFD 12/0,20/BARREL1,10/0,18/3LVER *VER*
- CSPB VFD 12/0,20/BARREL1,10/0,18/3L1AJ *1AJ*
- VFD 12/0,20/BARREL1,10/0,18/3L1KB *1KB*
- VFD 12/0,20/BARREL1,10/0,18/3L1LT *1LT*
- VFD 12/0,20/BARREL1,10/0,18/3L1MS *1MS*
- VFD 12/0,20/BARREL1,10/0,18/3L1MT *1MT*
- VFD 12/0,20/BARREL1,10/0,18/3L1PC *1PC*
- VFD 12/0,20/BARREL1,10/0,18/3L1PD *1PD*
- VFD 12/0,20/BARREL1,10/0,18/3L1PL *1PL*
- VFD 12/0,20/BARREL1,10/0,18/3L1PM *1PM*
- VFD 12/0,20/BARREL1,10/0,18/3L1RI *1RI*
- VFD 12/0,20/BARREL1,10/0,18/3L1RO *1RO*
- VFD 12/0,20/BARREL0,10/0,18/3L1VN *1VN*
- VFD 12/0,20/BARREL1,10/0,18/3L1VO *1VO*
- CON -0 END OF TABLE
- BARREL0 EQU 1777BS10
- BARREL1 EQU 1777B
- ****
- ENDBLK
- BLOCK CP176,(CYBER 176 RESIDENT CODE.),MONITOR
- BNJ SPACE 4,10
- ** BNJ - EXTENSION FOR THE CYBER 176.
- *
- * ENTRY (A6) = ADDRESS-1 OF EEA REGISTER.
- BNJ30 TX7 EEAD SET ERROR EXIT ADDRESS
- LX7 36
- SA7 A6+B1
- JP /MONITOR/MTR RETURN
- CJS SPACE 4,10
- ** CJS - EXTENSION FOR THE CYBER 176.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (B6) = EXCHANGE PACKAGE ADDRESS.
- CJS7 SA4 B6+3 CLEAR PSD
- MX2 12
- LX2 -12
- BX6 -X2*X4
- SA6 A4
- JP B4 RETURN
- CPT SPACE 4,10
- ** CPT - EXTENSION FOR THE CYBER 176.
- CP76 SA1 CXP+15B ACCUMULATED INTERRUPT COUNT
- SA2 CL+CPBT+A0 READ BASE TIME
- TB6 READ CPU CLOCK
- MX7 -18
- SX6 B6
- BX6 -X7*X6
- IX6 X1+X6
- SA6 A2+ SET NEW BASE TIME
- IX0 X6-X2 TIME USED IN MACHINE UNITS
- EQ /MONITOR/CPT1 COMPUTE CP TIME USED
- CXJ SPACE 4,10
- ** CXJ - CLOCK INTERRUPT NULL PROGRAM.
- *
- * ENTRY (X0) = 400000B.
- * (X5) = INTERRUPT COUNT.
- CXJ XJ CXP RETURN TO CALLER
- IX5 X5+X0 COUNT EXCHANGE
- JP CXJ RETURN
- EXP SPACE 4,10
- ** EXP - ERROR EXCHANGE PROGRAM.
- *
- * ENTRY (X0) = 77770000777777777777B.
- * (X4) = 1.
- * (X5) = COUNT OF EXCHANGES.
- EXP XJ 0
- SA1 B2+3 GET PSD
- MX6 3
- MX2 9
- LX6 -9
- BX6 X6*X1 EXTRACT MODE BITS
- BX2 X6+X2
- IX5 X5+X4 COUNT EXIT
- LX2 -12
- BX7 -X0*X1
- BX2 X2*X1 EXTRACT CONDITION BITS
- SX3 B2
- ZR X7,EXP1 IF NO ERROR CONDITIONS - CPUMTR LOST
- AX2 37
- ZR X2,EXP3 RETURN IF ERROR CONDITION PERMITTED
- LX2 -6
- LX6 11
- PL X2,EXP1 IF NO SCM DIRECT RANGE ERROR
- LX2 1
- AX2 1 CLEAR SCM RANGE CONDITION
- MI X6,EXP1 IF MODE 1 NOT SELECTED
- ZR X2,EXP3 IF NO OTHER ERRORS
- SB3 EXP
- EXP1 SX7 B2
- LX3 30
- BX6 X3+X7
- SA6 B0 *ALERT* DSD
- EXP2 SB3 B3-B1
- NZ B3,EXP2 DELAY
- SA2 B0 CHECK FOR FLAG CLEARED
- NZ X2,EXP2 HANG UNLESS CLEARED
- SA2 B2+6 READ MA (NEA)
- EXP3 BX6 X0*X1 CLEAR CONDITION BITS AND RETURN
- SA6 A1
- JP EXP RETURN
- PPE SPACE 4,20
- ** PPE - PROCESS PSD ERROR.
- *
- * ENTRY (B2) = USER EXCHANGE PACKAGE ADDRESS.
- * (B3) = RA OF CONTROL POINT.
- *
- * EXIT TO *MTR1* IF NO ERRORS.
- * TO *SEF* OTHERWISE.
- PPE SA1 B2+3 CHECK CONDITION FLAGS (PSD)
- MX6 3
- MX2 9
- LX6 -9
- BX6 X6*X1 MODE BITS
- BX2 X2+X6 ADD MASK TO CHECK ALL NON-MODE CONDITIONS
- LX2 -12
- BX2 X2*X1
- ZR X2,/MONITOR/MTRX IF NO ERROR CONDITION
- LX1 59-39
- TNG X1,(/IH819/PPE,IH819,/MONITOR/MTRX) IF STEP
- SX7 ARET ARITHMETIC ERROR
- * MAP ERROR AND P ADDRESS INTO RA+0.
- SX6 B0+ INITIALIZE MAPPING REGISTER
- SX1 40B CM PARITY BIT
- LX2 59-46
- PL X2,PPE1 IF NO SCM SECDED ERROR
- BX6 X1+X6 MAP SCM SECDED AS CM PARITY
- PPE1 MX0 5 MASK FOR ADDRESS RANGE ERRORS
- LX2 1
- BX3 X0*X2
- SX1 B1 ADDRESS RANGE BIT
- MX0 2 MASK FOR INFINITE AND INDEFINTITE MODES
- ZR X3,PPE2 IF NO RANGE ERRORS
- BX6 X1+X6 MAP ALL RANGE ERRORS AS ADDRESS RANGE
- PPE2 LX2 10 MAP OVERFLOW AND INDEFINITE
- LX0 3
- BX1 X0*X2
- BX6 X1+X6
- MX0 18 ADD P ADDRESS TO MAPPED BITS
- SA1 B2
- LX6 48
- LX0 -6
- BX1 X0*X1
- LX1 -6
- SA2 B3 INSERT MAPPED BITS AND P IN RA+0
- SA2 X2
- MX0 -30
- BX6 X1+X6
- BX2 -X0*X2
- BX6 X2+X6
- SA6 A2
- EQ /MONITOR/SEF SET ERROR FLAG
- TIM SPACE 4,10
- ** TIM - EXTENSION FOR THE CYBER 176.
- * ACCUMULATED JOB CLOCK CYCLE COUNT.
- TIM7 SB4 TIM9 SET *DSB* RETURN ADDRESS
- SA2 CPTA+A0 QUARTER NANOUNITS TO CLOCK CYCLES
- PX2 X2
- NX2 X2
- EQ /PROGRAM/DSB DIVIDE 60 BIT INTEGER
- * ACCUMULATED CLOCK CYCLE COUNT SINCE DEADSTART.
- TIM8 SA1 CL+CPBT+A0 READ BASE TIME
- BX6 X1
- TIM9 PX1 X6
- SB3 A5-B1 RESTORE RA
- EQ /MONITOR/TIM1 STORE RESULT
- ENDBLK
- BLOCK BUFIO,(BUFFERED I/O PROCESSING.)
- DLB SPACE 4,10
- ** DLB - DELETE BUFFER FROM I/O QUEUE.
- *
- * ENTRY (A2) = ADDRESS OF *UNCT* WORD IN *PUT* ENTRY.
- * (A3) = CONTROL BUFFER ADDRESS.
- * (B3) = RETURN ADDRESS.
- * (X2) = *UNCT* WORD OF *PUT* ENTRY.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * A - 2, 4, 6, 7.
- * B - 5, 7.
- DLB SA4 A3+IOLK CHECK I/O LINKUP
- MX5 -12
- MX7 -24
- LX5 12
- LX7 24
- SX6 5000B I/O INTERLOCK, WRITE FLAGS
- BX7 X7*X4 CLEAR QUEUE LINKAGE
- LX4 -24
- MX5 -12
- LX6 48
- BX3 -X5*X4 FORWARD LINK
- BX7 -X6*X7 CLEAR FLAGS
- LX4 -12
- SA7 A4
- BX6 -X5*X4 BACKWARD LINK
- BX7 -X5*X4
- SB7 X3+
- NZ X6,DLB2 IF NOT FIRST BUFFER IN CHAIN
- BX2 X5*X2
- BX2 X2+X3 INSERT NEW FIRST
- EQ DLB3 PROCESS FORWARD LINK
- DLB2 LX7 CBTLS PROCESS BACKWARD LINK
- TA4 X7+IOLK,CBT
- LX4 -24
- BX7 X5*X4 FORWARD LINK
- BX7 X7+X3 INSERT NEW FORWARD LINK
- LX7 24
- SA7 A4
- DLB3 ZR X3,DLB4 IF LAST BUFFER
- LX3 CBTLS PROCESS FORWARD LINK
- TA4 X3+IOLK,CBT
- LX4 -36
- BX4 X5*X4 CLEAR OLD BACKWARD LINK
- BX7 X4+X6 INSERT NEW BACKWARD LINK
- LX7 36
- SA7 A4+
- DLB4 SX4 B1 DECREMENT QUEUE SIZE
- LX4 24
- LX5 12
- IX6 X2-X4
- BX3 -X5*X2 CURRENT BUFFER
- TX2 A3,-CBT COMPUTE DELETED BUFFER ORDINAL
- LX3 -12
- AX2 CBTLS
- BX7 X3-X2
- NZ X7,DLB6 IF NOT CURRENT BUFFER
- BX6 X5*X6 ADVANCE TO NEXT QUEUE ENTRY
- SX2 B7
- NZ B7,DLB5 IF NOT END OF QUEUE
- SA4 A2+B1
- ERRNZ HSCT-UNCT-1 INDEXES MUST BE CONSECUTIVE
- MX3 -12
- MX7 59
- BX2 -X3*X6 FIRST REQUEST
- LX7 58
- BX6 X7*X6 CLEAR REQUEST(S) WAITING FLAG
- BX7 X5*X4 CLEAR REQUEST COUNT
- SA7 A4
- * SET NEW CURRENT *CB* ORDINAL IN THE *PUT* SO AS TO EXCLUDE
- * THOSE BUFFERS CONTAINING PREVIOUSLY PROCESSED ERRORS.
- DLB5 SB6 DLB6
- EQ SCB SELECT CURRENT BUFFER IN I/O QUEUE
- DLB6 SA6 A2+ RESET *PUT* ENTRY
- * DECREMENT DEVICE ACTIVITY COUNT.
- SA1 A3+FSTC EST ORDINAL
- MX3 -12
- LX1 12
- BX7 -X3*X1 EST ORDINAL
- CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
- TA4 X4+EQDE,EST READ EST ENTRY
- BX7 -X3*X4 *MST* ADDRESS/10B
- LX7 3
- SA4 X7+DALL DECREMENT ACTIVITY COUNT
- SB5 A2+ SAVE *PUT* ENTRY ADDRESS
- SA2 X7+CTLL
- BX1 X4
- LX1 59-36
- LX2 36
- BX5 -X3*X2
- SX5 X5-1
- PL X5,DLB7 IF NO UNDERFLOW
- SX5 0
- DLB7 BX2 X2*X3
- BX7 X2+X5
- LX7 24
- SA7 A2 UPDATE *CTLL*
- PL X1,DLB8 IF NO RECENT *DSWM* ACCESS TO DEVICE
- LX1 59-37-59+36
- NG X1,DLB10 IF UNIT IS BEING ACCESSED VIA *DSWM*
- DLB8 MX7 54
- BX2 X7*X5
- LX7 48
- ZR X2,DLB9 IF NOT ACTIVITY OVERFLOW
- SX5 77B
- DLB9 BX4 X7*X4 CLEAR OLD ACTIVITY
- LX5 48
- BX7 X4+X5 ADD IN COMPUTED ACTIVITY
- SA7 A4 UPDATE *DALL*
- DLB10 LX6 59-58
- SX3 B1
- PL X6,/MONITOR/RB3 IF *RW* FLAG CLEAR
- ERRNZ HSCT-UNCT-1 CODE DEPENDS ON VALUE
- SA4 B5+B1
- LX3 12
- IX7 X4+X3 INCREMENT REQUESTS PROCESSED
- LX4 59-12-8
- ERRNZ RCTH-400B VALUE MUST BE 2**8
- NG X4,/MONITOR/RB3 IF REQUEST COUNT LIMIT
- SA7 A4+
- JP B3 RETURN
- HHE SPACE 4,10
- ** HHE - HANG ON HALF-EXIT.
- *
- * ENTRY VIA *RJ* SO THAT ERROR EXIT ADDRESS IS SAVED.
- *
- * EXIT NONE (IT NEVER DOES).
- *
- * CALLS MSC.
- HHE PS ENTRY
- SX1 HHEA * ESM ERROR - BUFFERED I/O.*
- SB5 HHE1 *MSC* RETURN ADDRESS
- EQ /MONITOR/MSC SET MESSAGE IN SYSTEM CONTROL POINT
- HHE1 EQ * HANG
- HHEA DATA C* ESM ERROR - BUFFERED I/O.*
- IOC SPACE 4,25
- ** IOC - I/O CONTROL.
- *
- * ENTRY (X2) = 24/ FCN, 24/ RCD, 12/CBO
- *
- * FCN = 0, ENTER BUFFER IN UNIT I/O QUEUE.
- * = 2, SET RECALL CONTROL ON BUFFER.
- * = 3, 819 I/O RESTART.
- *
- * RCD = RECALL DATA.
- *
- * CBO = CONTROL BUFFER ORDINAL.
- *
- * EXIT ((B7) + 16B) = RESPONSE.
- *
- * RESPONSE = 0, I/O COMPLETE.
- * 1, RECALL CONTROL SET.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 6, 7.
- * B - 3, 4, 5, 6, 7.
- *
- * CALLS /IH819/INR.
- IOC9 SA2 A3+IOLK
- SA4 A3+LSLK
- PL X2,IOC10 IF I/O INTERLOCK CLEAR
- SX6 1
- BX7 X4+X7
- NO
- SA7 A4+
- IOC10 TA6 16B,SCA STORE RESPONSE
- IOCX SX7 B0+ CLEAR I/O REQUEST
- TB7 SCA SYSTEM CONTROL POINT
- TA7 IORQ
- EQ /MONITOR/MTRX RETURN
- IOC MX4 -12
- BX4 -X4*X2 CONTROL BUFFER ORDINAL
- MX7 -24
- LX2 -12
- SB6 X4 CONTROL BUFFER ORDINAL
- BX7 -X7*X2 RECALL DATA
- LX2 -24
- LX4 CBTLS
- SB7 X2 FUNCTION CODE
- TA3 X4+PAD1,CBT CBT ADDRESS
- MX2 -12
- TA4 X4+HSLK,CBT GET *PUT* ORDINAL
- BX2 -X2*X4 *PUT* ORDINAL
- LX2 PUTLS
- SX6 B0+
- TA2 X2+UNCT,PUT *PUT* ENTRY
- ZR B7,IOC0 IF ENTER BUFFER REQUEST
- SB7 B7-2
- ZR B7,IOC9 IF TO SET RECALL CONTROL REQUEST
- TEQ (/IH819/RIO,IH819,/BUFIO/IOCX) RESTART 819 I/O
- * ENTER REQUEST IN UNIT I/O QUEUE.
- IOC0 MX7 -12
- SB3 B0 CLEAR FORWARD LINK
- BX1 -X7*X2 FIRST
- SB7 B1 SET INITIAL PASS
- NZ X1,IOC1 IF NOT EMPTY QUEUE
- SX6 B6 CONTROL BUFFER ORDINAL
- BX2 X6+X2
- LX6 12
- BX2 X6+X2
- SB4 B0 CLEAR BACKWARD LINK
- SX4 B6 SET INITIAL ORDINAL
- EQ IOC4 ENTER REQUEST IN QUEUE
- IOC1 SB5 X1 PREVIOUS ORDINAL
- LX1 CBTLS
- TA4 X1+PAD1,CBT OLD DISK ADDRESS
- MX1 24
- LX1 -12
- BX7 X1*X4
- BX6 X1*X3
- IX6 X7-X6
- NO
- PL X6,IOC2 IF SLOT FOUND
- SA1 A4+IOLK-PAD1
- SX5 A4 PREVIOUS CONTROL BUFFER ADDRESS
- SB4 B5 PREVIOUS CONTROL BUFFER ORDINAL
- MX7 -12
- LX1 -24
- SB7 B0 CLEAR INITIAL PASS FLAG
- BX1 -X7*X1
- NZ X1,IOC1 IF NOT END OF QUEUE
- LX7 36
- BX4 -X7*X4 EXTRACT CYLINDER NUMBERS
- BX7 -X7*X3
- IX7 X7-X4
- SX7 X7-CCTH
- NG X7,IOC3 IF NOT BEYOND THRESHOLD
- SX7 B1 SET REQUEST(S) WAITING FLAG
- LX7 58
- BX2 X7+X2
- EQ IOC3 ENTER REQUEST AT END OF QUEUE
- IOC2 ZR B7,IOC3 IF NOT START OF QUEUE
- SX7 B1+
- SB3 B5 FORWARD LINK
- LX7 58
- MX6 48
- BX2 X7+X2 SET REQUEST(S) WAITING FLAG
- SB4 B0 BACKWARD LINK
- SX4 B6 INSERT NEW START OF QUEUE
- BX6 X6*X2
- BX2 X4+X6
- EQ IOC4 ENTER BUFFER IN QUEUE
- * ENTER NEW CONTROL BUFFER IN UNIT I/O QUEUE.
- IOC3 SA3 X5+IOLK LINK TO PREVIOUS ENTRY
- MX7 -12
- LX3 -24
- BX5 -X7*X3
- BX7 X7*X3
- SB3 X5 FORWARD LINK
- SX4 B6 NEW ENTRY ORDINAL
- BX7 X4+X7
- LX7 24
- SA7 A3+
- IOC4 LX4 CBTLS NEW ENTRY LINK WORD
- TA3 X4+IOLK,CBT
- MX7 36
- LX3 -24
- BX7 X7*X3 CLEAR LINK FIELDS
- SX6 B4 LINK IN NEW ENTRY
- LX6 12
- BX7 X7+X6
- SX3 B3
- BX6 X3+X7
- MX7 1 SET I/O INTERLOCK
- LX6 24
- BX6 X7+X6
- LX7 24+1
- SA6 A3
- IX2 X2+X7 INCREMENT QUEUE SIZE
- ZR B3,IOC6 IF END OF QUEUE
- LX3 CBTLS PROCESS LINK TO NEXT ENTRY
- TA3 X3+IOLK,CBT
- MX7 48
- LX3 -36
- BX7 X7*X3 CLEAR BACKWARD LINK
- SX4 B6 NEW ENTRY ORDINAL
- BX7 X7+X4
- LX7 36
- SA7 A3+
- IOC6 LX2 -12 CHECK CURRENT *CB* ORDINAL
- MX0 -12
- SX4 B6 ORDINAL OF NEW BUFFER
- BX7 -X0*X2
- MX5 -54
- NZ X7,IOC7 IF CURRENT *CB* PRESENT
- BX2 X2+X4
- IOC7 LX2 12
- BX6 X2 UPDATE *PUT* ENTRY
- LX4 CBTLS
- SA6 A2
- * INCREMENT DEVICE ACTIVITY COUNT.
- TA4 X4+FSTC,CBT
- LX4 12
- BX7 -X0*X4 EST ORDINAL
- CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
- TA4 X4+EQDE,EST READ EST ENTRY
- BX7 -X0*X4 MST ADDRESS / 10B
- LX7 3
- SA4 X7+DALL INCREMENT ACTIVITY COUNT
- SX7 B1
- SA3 A4+CTLL-DALL
- LX7 24
- IX6 X3+X7
- SA6 A3
- LX6 -24
- BX3 -X0*X6 EXTRACT QUEUE SIZE
- LX4 59-37
- NG X4,IOC8.1 IF DEVICE IS BEING ACCESSED VIA *DSWM*
- LX3 54
- SX7 X3 MOST SIGNIFICANT SIX BITS
- LX4 6-59+37
- ZR X7,IOC8 IF NOT OVERFLOW
- MX3 6
- IOC8 BX4 -X5*X4 REMOVE OLD COUNT
- BX7 X3+X4
- LX7 -6 UPDATE COUNT
- SA7 A4
- IOC8.1 NG X2,IOCX IF UNIT INTERLOCKED
- TNO /BUFIO/IOCX,IHPFMD IF NOT 819
- MX5 1
- BX6 X5+X2 SET UNIT INTERLOCK
- LX2 -12
- BX0 -X0*X2
- SA6 A2+
- SB3 IOCX *INR* RETURN ADDRESS
- EQ /IH819/INR INITIATE REQUEST
- SBR SPACE 4,15
- ** SBR - SET BUFFER RECALL.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- * (A3) = CONTROL BUFFER ADDRESS.
- *
- * IF 819 DEVICES -
- * (B4) = CHANNEL NUMBER.
- * (B7) = 0 IF INPUT XP, 20 IF OUTPUT XP.
- *
- * USES X - 3, 4, 6.
- * A - 4, 6.
- *
- * CALLS /IHPFMD/RPP, /IH819/RPP.
- SBR SA4 A3+LSLK CHECK FOR RECALL CONTROL
- MX3 36
- BX6 X3*X4 CLEAR RECALL CONTROL
- BX4 -X3*X4
- SA6 A4
- ZR X4,/MONITOR/RB3 IF NO RECALL CONTROL SET
- BX6 X4
- AX4 18
- TNZ X4,(/IHPFMD/RPP,IHPFMD,/IH819/RPP) IF NOT PP RECALL
- SA4 X6 SIGNAL PP TO REISSUE
- SX3 B1
- LX3 46
- BX6 X3+X4
- SA6 A4
- JP B3 RETURN
- SCB SPACE 4,10
- ** SCB - SELECT CURRENT BUFFER FOR I/O QUEUE.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- * (X2) = ORDINAL OF FORWARD LINKED BUFFER.
- * (X6) = *UNCT* WORD WITH CURRENT *CB* FIELD CLEAR.
- *
- * EXIT (X6) = NEW *UNCT* WORD FOR *PUT* ENTRY.
- *
- * USES A - 4.
- * X - 2, 3, 4, 5, 6, 7.
- SCB LX6 -24 POSITION UNIT QUEUE SIZE
- MX3 -12
- BX7 -X3*X6 EXTRACT QUEUE SIZE
- LX6 24
- SCB1 ZR X7,RB6 IF QUEUE EMPTY
- LX2 CBTLS
- BX5 X6 PRESERVE *PUT* INFORMATION
- TA4 X2+HSLK,CBT
- LX2 12-CBTLS REBUILD *UNCT* WORD
- BX6 X5+X2
- PL X4,RB6 IF NOT *CBT* ENTRY WITH ERRORS
- MX6 -59
- SA4 A4-B1
- ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
- LX6 -1
- NO
- BX5 -X6*X5 CLEAR REQUESTS WAITING FLAG
- LX4 -24
- SX7 X7-1 DECREMENT QUEUE SIZE
- BX2 -X3*X4
- LX6 X5
- NZ X2,SCB1 IF NOT END OF QUEUE
- SX2 X5+
- EQ SCB1 CHECK START OF QUEUE
- TITLE CPU MONITOR BUFFERED I/O HANDLER.
- BFM SPACE 4,25
- ** BFM - *BFMM* MONITOR FUNCTION.
- *
- * ENTRY AT *BFM* IF MONITOR MODE *BFMM* FUNCTION
- * TO BE PROCESSED.
- * AT *BFM3* IF PROGRAM MODE *BFMM* FUNCTION
- * TO BE PROCESSED.
- * REFER TO *BFMM* DOCUMENTATION FOR OUTPUT REGISTER
- * AND FNT DESCRIPTION.
- *
- * EXIT TO /MONITOR/PMR TO SWITCH TO PROGRAM MODE.
- * TO /MONITOR/PPR1 TO EXIT MONITOR MODE FUNCTION.
- * TO /PROGRAM/PRG OR /PROGRAM/PRG1 TO EXIT
- * PROGRAM MODE FUNCTION.
- * REFER TO *BFMM* DOCUMENTATION FOR OUTPUT REGISTER
- * EXIT DISCRIPTION.
- *
- * ERROR TO /MONITOR/HNG IF INCORRECT *BFMM* OPERATION CODE
- * OR IF INVALID SUBFUNCTION OR INVALID MULTIPLE
- * WRITE BUFFER COUNT FOR *BMVI* OPERATION.
- * TO /PROGRAM/HNG IF NEXT TRACK NOT RESERVED WHEN
- * ADVANCING TRACK/SECTOR FOR MULTIPLE WRITE BUFFER
- * REQUEST.
- *
- * CALLS LBM, LMM, SNT.
- * MONITOR MODE *BFMM* ENTRY.
- BFM LX1 -12
- AX1 54
- SX2 X1-BMMX
- PL X2,/MONITOR/HNG IF INVALID OPERATION
- SX2 X1-BMVI
- MX0 12
- LX0 -12
- BX4 X0*X5 GET MULTIPLE WRITE BUFFER COUNT
- BX5 -X0*X5 CLEAR EXTRANEOUS PARAMETERS
- NZ X2,/MONITOR/PMR IF NOT VALIDATE OPERATION
- * PROCESS *BMVI* SUBFUNCTION.
- MX3 -6
- BX2 -X3*X5 GET VALIDATE SUBFUNCTION
- MX0 48
- BX5 X0*X5 SET SUBFUNCTION IF VALIDATE FAILS
- ERRNZ BMRD INDEX MUST BE ZERO
- LX5 -12
- SX1 X5 FNT ORDINAL
- SA3 B7+FLSW GET RA
- LX2 6
- LX5 12
- ZR X2,BFM1 IF READ SUBFUNCTION
- SX6 X2-BMRW*100B-100B
- PL X6,/MONITOR/HNG IF INVALID SUBFUNCTION
- SA7 A5+B1 CLEAR *MB*
- BX5 X5+X4 RESET MULTIPLE WRITE BUFFER COUNT
- SA7 A7+B1 CLEAR *MB+1*
- LX4 18
- SX6 X4-11
- PL X6,/MONITOR/HNG IF BUFFER COUNT TOO LARGE
- BX5 X5+X2 SET WRITE/REWRITE OPERATION
- R= X2,BMWR
- BFM1 NG X4,/MONITOR/PMR IF WRITE BUFFER ALREADY INTERLOCKED
- LX3 -RSHF
- MX7 -RMSK
- BX3 -X7*X3 RA / 100B
- LX3 6
- IX3 X3-X1 ABSOLUTE FNT ADDRESS
- SX1 B1
- IX3 X3+X1 *FST* ADDRESS
- IX1 X3+X1
- ERX1 X1 READ I/O LINK WORD
- BX7 -X0*X1
- ZR X7,/MONITOR/PMR IF NO LINK TO VALIDATE
- BX6 X5
- SA6 A5 UPDATE *BFMM* CALL IN OUTPUT REGISTER
- ERX3 X3 READ *FST*
- BX6 X3
- SB6 BFM2 SET RETURN ADDRESS FOR *INB*
- EQ INB VALIDATE AND INTERLOCK BUFFER
- BFM2 SA5 A5
- LX6 12
- MX7 -24
- BX7 -X7*X6
- ZR X7,/MONITOR/PMR IF BUFFER NOT FOUND
- MX0 -6
- LX0 11-5
- BX1 -X0*X6
- NZ X1,/MONITOR/PPR1 IF REJECT CONDITION
- LX0 47-11
- BX6 -X0*X5
- ZR X6,/MONITOR/PPR1 IF NOT MULTIPLE BUFFER REQUEST
- MX1 1 SET BUFFER INTERLOCKED FLAG
- SX7 B0+ CLEAR RESPONSE
- LX1 41-59
- BX5 X5+X1
- EQ /MONITOR/PMR SWITCH TO PROGRAM MODE
- * PROGRAM MODE *BFMM* ENTRY.
- * SET UP CALL TO BUFFER MANAGER.
- BFM3 BX2 X5
- MX0 -12
- LX2 -12
- AX2 54
- TX3 A5-1,-SP
- SB6 X2-BMFO
- ZR X3,BFM5 IF PSEUDO PP
- SA4 A5+1
- BX6 X0*X4 CLEAR *CHRV* FIELD
- SX4 EPNS
- NG B6,BFM4 IF NOT A FLUSH OPERATION
- BX6 X4+X6
- BFM4 SA6 A4+
- BFM5 LX1 59-41
- MX0 -36
- BX5 -X0*X5
- LX5 -12
- SB6 BFM6 SET RETURN ADDRESS FOR *LBM*
- PL X1,LBM IF CURRENT BUFFER NOT INTERLOCKED
- MX0 -RMSK
- EQ BFM7 CHECK FOR MULTIPLE BUFFER REQUEST
- BFM6 MX0 5
- MX7 -24
- BX2 X0*X6
- LX6 12
- BX7 -X7*X6
- NZ X2,/PROGRAM/PRG1 IF REJECT CONDITION
- MX0 -RMSK
- BFM7 SA5 A5 CHECK FOR MULTIPLE BUFFER REQUEST
- MX6 7
- LX6 47-59
- BX1 X6*X5
- ZR X1,/PROGRAM/PRG1 IF NOT MULTIPLE BUFFER REQUEST
- * PROCESS MULTIPLE BUFFER WRITE REQUEST.
- LX5 -12
- SX2 X5 FNT ORDINAL
- SA3 B7+FLSW GET RA
- LX3 -RSHF
- BX3 -X0*X3
- MX0 48
- LX3 6
- IX3 X3-X2 ABSOLUTE FNT ENTRY ADDRESS
- SX2 B1
- IX6 X3+X2
- ERX3 X6 GET FST ENTRY
- SA6 BAFS SAVE FST ADDRESS
- LX1 59-41
- NG X1,BFM8 IF CURRENT BUFFER INTERLOCKED
- IX6 X6+X2 SAVE BUFFER LINK
- ERX2 X6
- BX2 X0*X2
- AX7 12
- BX7 X7+X2
- EWX7 X6
- BFM8 SX1 X1
- ZR X1,BFM16 IF NO MULTIPLE BUFFER COUNT
- BX6 X3 SAVE ORIGINAL FST ENTRY
- LX3 12
- SA6 BFST
- BX6 -X0*X3 GET EQUIPMENT
- CX2 X6,EST CONVERT EST ORDINAL TO OFFSET
- TA2 X2+EQDE,EST READ EST ENTRY
- BX1 -X0*X2 MST ADDRESS/10B
- LX1 3
- SA2 X1+MDGL GET SECTOR LIMIT
- BX2 -X0*X2
- LX1 18
- BX7 X1+X2
- LX3 -24 GET CURRENT SECTOR
- BX4 -X0*X3
- MX6 -LSLBS CALCULATE MOD 40B OF CURRENT SECTOR
- BX4 -X6*X4
- IX6 X3-X4 CALCULATE FIRST SECTOR IN BUFFER
- SA3 BAFS GET ABSOLUTE FST ADDRESS
- SA7 BDDC SAVE DEVICE DESCRIPTION AND BUFFER COUNT
- LX6 12
- EWX6 X3
- SX5 BMWR*100B SET WRITE OPERATION WITH RECALL ALLOWED
- * CHECK FOR END OF TRACK.
- BFM10 SX1 X7 SECTORS PER TRACK
- ERX3 X3 GET FST ENTRY
- SX4 LSLB LOGICAL SECTORS PER I/O BUFFER
- LX3 -12
- IX6 X3+X4 ADVANCE TO FIRST SECTOR IN NEXT BUFFER
- BX2 -X0*X6 GET CURRENT SECTOR
- IX1 X2-X1
- NG X1,BFM12 IF NOT END OF TRACK
- LX7 -18
- SX1 X7 MST ADDRESS
- LX6 -12
- BX0 -X0*X6 GET CURRENT TRACK
- SB6 BFM11 SET RETURN ADDRESS FOR *SNT*
- EQ SNT SET NEXT TRACK
- BFM11 PL X2,/PROGRAM/HNG IF NEXT TRACK NOT ASSIGNED
- MX0 36 CLEAR CURRENT TRACK AND SECTOR
- BX3 X0*X3
- LX6 12
- BX6 X3+X6 SET NEXT TRACK
- BFM12 SA1 BAFS GET ABSOLUTE FST ADDRESS
- LX6 12
- EWX6 X1 UPDATE FST ENTRY
- LX5 -12
- SB6 BFM13 SET RETURN ADDRESS FOR *LBM*
- SA1 A5
- MX0 -24
- LX1 -12
- BX1 -X0*X1 GET CONTROL POINT AND FNT ORDINAL
- BX5 X5+X1
- EQ LBM CALL I/O BUFFER MANAGER
- * PROCESS I/O BUFFER MANAGER RESPONSE.
- BFM13 MX0 -12
- BX4 -X0*X6 GET BUFFER INDEX
- NG X6,BFM18 IF BUFFER RECALL
- MX7 5
- LX1 X6,B1
- NG X1,BFM15 IF BUFFER BUSY
- BX1 X7*X6 BUFFER MANAGER STATUS
- NZ X1,BFM16 IF BUFFER UNAVAILABLE/INACCESSIBLE DEVICE
- MX7 1
- SA1 BDDC GET BUFFER POSITION COUNTER
- LX7 42-59
- SA5 A5
- IX6 X5-X7 DECREMENT BUFFER COUNT
- MX3 6
- LX3 -12
- IX7 X1+X7 INCREMENT BYTE POSITION
- BX1 X3*X1
- SA2 A5+B1 GET *MB*
- LX1 -42
- SA7 A1
- SB6 X1-5
- NG B6,BFM14 IF ROOM TO STORE LINK IN *MB*
- SA2 A2+1 GET *MB+1*
- SX1 B6+
- BFM14 LX1 2 CALCULATE BYTE INDEX * 12D
- BX5 X3*X6
- SB6 X1
- LX1 1
- SA6 A5
- SB6 X1+B6
- LX4 B6
- BX6 X2+X4
- SA6 A2
- BX6 X5
- SX5 BMWR*100B+1 SET WRITE OPERATION WITH NO RECALL
- SA3 BAFS GET ABSOLUTE FST ADDRESS
- NZ X6,BFM10 IF MORE BUFFERS TO REQUEST
- BFM15 SX1 0
- BFM16 SA3 BAFS GET ABSOLUTE FST ADDRESS
- SX7 B1
- IX3 X3+X7
- ERX2 X3 RETURN FIRST BUFFER ORDINAL IN *OR*
- BX7 -X0*X2
- BX7 X7+X1 RETURN BUFFER MANAGER REPLY STATUS
- LX7 12
- BFM17 SA2 BFST RESTORE ORIGINAL FST
- BX6 X2
- SA1 A3 GET ABSOLUTE FST ADDRESS
- EWX6 X1
- SA7 A5
- EQ /PROGRAM/PRG EXIT
- * PROCESS BUFFER RECALL (FOR SECOND BUFFER ONLY IN MULTIPLE
- * WRITE BUFFER REQUEST).
- BFM18 MX7 -24 RETURN RECALL ORDINAL AND STATUS
- LX6 12
- SA3 BAFS GET ABSOLUTE FST ADDRESS
- SX2 B1
- IX1 X3+X2
- ERX2 X1 RETURN FIRST BUFFER ORDINAL IN *MB*
- BX7 -X7*X6
- BX6 -X0*X2
- SA6 A5+B1
- EQ BFM17 RESTORE FST
- PST SPACE 4,40
- ** PST - *PIOM* SECTOR TRANSFER (SF = 0, 1, 2, 3, 4).
- *
- * ENTRY (A0) = CPU NUMBER.
- * (A5) = PP *OR* ADDRESS.
- * (X5) = (OR).
- * (B2) = EXCHANGE PACKAGE ADDRESS, IF IN MONITOR MODE.
- * (B5) = *PIOM* SUBFUNCTION - 1.
- * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
- * DESCRIPTION.
- * (MB+1) = 1/ MODE, 23/,18/ PROC,18/ DVI.
- * MODE = 1 INDICATES PROGRAM MODE ENTRY.
- * PROC = PROGRAM MODE PROCESSOR ADDRESS.
- * DVI = DEVICE INDICATOR (0=ECS, 1=BUFFERED DEVICE)
- * PP I/O BUFFER RESERVED FOR *PIOM*
- * SUBFUNCTIONS 0, 1, 2.
- *
- * EXIT A0, A5, B5 SAME AS ON ENTRY.
- * (B2) = EXCHANGE PACKAGE ADDRESS, IF IN MONITOR MODE.
- * PARAMETERS IN *OR* AND *MB* UPDATED FOR
- * *PIOM* SUBFUNCTIONS 3, 4.
- * (MB+1) .LT. 0, IF PROGRAM MODE EXIT,
- * OTHERWISE MONITOR MODE EXIT.
- * TO /PROGRAM/HNG, IF SHORT PRU ENCOUNTERED AND
- * NOT READ TO EOR (SF = 3) OR EOF/EOI ENCOUNTERED
- * ON READ TO EOR (SF = 3, SECTOR COUNT = 7777B).
- * TO /ECS/PIOX, IF TRANSFER COMPLETE OR I/O RECALL
- * REQUIRED.
- * TO /ECS/PIOR, IF I/O BUFFER BUSY.
- *
- * CALLS BPF, CLM, HHE, /PROGRAM/HNG, INB, /ECS/PIOP,
- * /ECS/PIOR, /ECS/PIOX, UDP.
- *
- * NOTE *PST* IS ENTERED IN PROGRAM MODE (SF = 3, 4)
- * OR MONITOR MODE (SF = 0, 1, 2). *PST* WILL
- * SWITCH TO PROGRAM MODE IF AN I/O REQUEST
- * IS REQUIRED (SF = 0, 1, 2).
- * MB+2 AND MB+3 ARE USED TO CONTAIN A PSEUDO FNT.
- * BUILD PSEUDO FNT IN MESSAGE BUFFER.
- PST SB6 PST1 *BPF* RETURN ADDRESS
- EQ BPF BUILD PSEUDO FNT IN MESSAGE BUFFER
- * VALIDATE I/O BUFFER LINK.
- PST1 ZR X7,PST3 IF NO I/O BUFFER LINK
- SX2 BMRD VALIDATE READ SUBFUNCTION
- SX1 B5+B1
- SB7 PST2 SET RETURN ADDRESS FOR *CLM*
- LX1 -1
- SB6 CLM1 RETURN ADDRESS FOR *INB*
- NG X1,INB IF READ OPERATION
- SX2 BMWR VALIDATE WRITE BUFFER
- EQ INB INTERLOCK BUFFER
- PST2 ZR X6,PST3 IF BUFFER NOT INTERLOCKED
- SA3 A5+B1
- MX7 1
- SX2 B1+
- LX3 59-6
- BX2 X7+X2
- BX6 -X2*X3
- PL X3,PST5 IF NOT *1MV* RECALL AFTER FLUSH
- BX1 X1-X1 CLEAR STATUS / HOLD WRITE BUFFER
- NG B5,PST38 IF RESERVE WRITE BUFFER SUBFUNCTION
- LX6 6-59
- MX1 60 CLEAR STATUS / CAUSE WRITE BUFFER RELEASE
- SA6 A3 CLEAR *1MV* ACTIVE AND LINK FLAGS
- EQ PST38 RELEASE BUFFER AND EXIT
- PST3 SA3 A5+2
- SB6 PST4 SET PROGRAM MODE RETURN ADDRESS
- PL X3,/ECS/PIOP IF SWITCH TO PROGRAM MODE REQUIRED
- * REENTRY FROM PROGRAM MODE.
- * INITIATE READ OR WRITE.
- PST4 SX0 BMWR*100B ALLOCATE I/O BUFFER FOR WRITE
- ERRNZ BMWR-1 CODE DEPENDS ON VALUE
- SX6 B5+B1
- SA4 A5+B1 GET *STREAMED READ* FLAG
- LX5 6-36 CHECK FOR REWRITE
- BX2 X0*X5 0 = WRITE, 100 = REWRITE
- SB7 PST5 SET RETURN ADDRESS FOR *CLM*
- IX2 X2+X0 100 = WRITE, 200 = REWRITE
- ERRNZ BMRW-BMWR-1 INDEXES MUST BE CONSECUTIVE
- LX6 -1
- PL X6,CLM IF PRU OR DIRECT WRITE OR RESERVE BUFFER
- R= X2,0+BMRD*100B
- NZ B5,CLM IF DIRECT READ
- LX4 59-9
- NG X4,CLM IF READ STREAMING ON PRU READ
- SX2 1+BMRD*100B READ ONE BUFFER IF NO STREAMING
- EQ CLM CALL I/O BUFFER MANAGER
- PST5 SX1 B0 RETURN STATUS = NO ERROR
- MX7 1
- NG B5,PST38 IF RESERVE WRITE BUFFER SUBFUNCTION
- * CALCULATE SECTOR CONTROL WORD ADDRESS.
- PST6 SA4 A5+B1 GET BEGINNING SECTOR
- MX2 -12
- SA1 A5+4 GET I/O BUFFER LINK (CONTROL BUFFER INDEX)
- MX3 -LSLBS MOD 40B OF SECTOR
- LX4 -12
- BX4 -X2*X4
- LX1 CBTLS
- BX5 -X3*X4
- SB7 X5
- MX7 -24
- AX5 CBTLS SECTOR CONTROL WORD INDEX
- TA3 X1+IOLK,CBT BUFFER ADDRESS
- IX1 X1+X5
- BX0 X3
- TA3 X1+PAD1,CBT SECTOR CONTROL WORD
- BX6 X3
- SX1 B7
- BX0 -X7*X0 I/O BUFFER ADDRESS
- LX1 6 MOD 40B OF SECTOR * 100B
- SX7 B7 MOD 40B OF SECTOR
- MX4 -3
- IX0 X0+X1 FWA DATA IN I/O BUFFER
- SX5 10000B
- BX7 -X4*X7 MOD 10B OF SECTOR
- MX3 24
- SB4 X7
- LX5 B4 POSITION MASK BIT TO CURRENT SECTOR FLAG
- SX1 B5
- LX1 -1
- MX4 2
- PL X1,PST7 IF PRU OR DIRECT READ
- NZ X7,PST7 IF NOT FIRST PRU OF CONTROL WORD
- SA1 A5
- LX1 59-36
- NG X1,PST7 IF REWRITE
- LX4 23-59
- BX6 -X4*X6 CLEAR VALID DATA FLAGS
- PST7 GT B5,B1,PST16 IF DIRECT READ OR WRITE
- SA4 A5+B1 GET PP BUFFER INCREMENT
- SB6 A0
- AX4 48
- TX4 X4,ECSB FWA PP BUFFER
- LX0 30 SET UP FOR EXTENDED MEMORY READ/WRITE
- SA4 X4+B1 GET HEADER WORD
- SB4 B7-LSLB+1
- SX7 A4+B1 FWA DATA IN CM
- SB3 100B SET WORD COUNT FOR TRANSFER
- BX0 X0+X7
- SA0 X7
- LX0 30 30/ABSOLUTE FWA, 30/FWA I/O BUFFER DATA
- ZR B5,PST13 IF PRU READ
- * UPDATE SECTOR CONTROL WORD FOR PRU WRITE.
- BX7 X3*X4
- BX6 -X5*X6 CLEAR SHORT PRU FLAG
- LX4 12
- BX1 -X2*X4 SECTOR/TRACK LINKAGE
- LX4 12
- NZ B4,PST8 IF NOT LAST PRU OF CONTROL WORD
- BX6 X2*X6 SET LINKAGE BYTE IN CONTROL WORD
- BX6 X6+X1
- PST8 ZR X1,PST11 IF EOF/EOI
- BX1 -X2*X4 WORD COUNT
- AX1 6
- NZ X1,PST9 IF FULL PRU
- NO
- SA1 A4+B3
- BX6 X6+X5 SET SHORT PRU FLAG
- BX1 -X3*X1
- BX7 X7+X1 MERGE HEADER INTO LAST DATA WORD
- SA7 A1
- PST9 SA6 A3 REWRITE SECTOR CONTROL WORD
- SB4 B1 SET PRU COUNT FOR TRANSFER
- EQ PST26 TRANSFER DATA
- * WRITE EOI SECTOR AFTER DIRECT WRITE WHEN BUFFER FLUSH
- * REQUESTED.
- PST10 SA0 ESMB+1 USE PROGRAM MODE BUFFER FOR EOI DATA
- BX7 X7-X7 CLEAR FNT ENTRY IN EOI SECTOR
- SA4 A5+B1 GET EOI TRACK AND SECTOR
- MX1 12
- SA7 A0
- LX1 -12
- BX7 X1*X4 BUILD FST ENTRY FOR EOI SECTOR
- MX2 -24
- LX4 -12
- BX1 -X2*X4
- BX7 X1+X7
- LX7 12
- SA1 PDTL GET PACKED DATE AND TIME
- SA7 A7+B1
- BX7 X1
- SX1 A0
- SA7 A7+B1
- LX1 30
- IX0 X0+X1
- SB3 B1
- MX1 -6
- SB5 B5+B1
- WE 3 WRITE EOI SECTOR SYSTEM INFORMATION
- RJ HHE HANG ON HALF-EXIT
- SA4 A0-B3 SET TO TRANSFER EOI LINKAGE
- BX7 X7-X7
- SX4 B0
- IX0 X0-X1 ADVANCE DATA TRANSFER ADDRESS
- PST11 BX1 -X2*X4 NEXT SECTOR / TRACK LINKAGE
- SA7 A4+B3 SAVE HEADER WORD AS LAST DATA WORD
- BX6 X6+X5 SET SHORT PRU FLAG
- NZ B4,PST12 IF NOT LAST PRU OF CONTROL WORD
- BX6 X6+X1 MERGE LINKAGE DATA
- PST12 NZ X1,PST9 IF EOF
- SA2 A5+4 GET I/O BUFFER LINK
- SB4 PST9 SET RETURN ADDRESS FOR *IDE*
- LX2 CBTLS
- SX7 B7
- TX3 X2+PAD1,CBT ADDRESS OF FIRST SECTOR CONTROL WORD
- EQ IDE SET FLAGS TO IGNORE DATA AFTER EOI
- * BUILD HEADER WORD FOR PRU READ.
- PST13 BX7 X5*X6 CHECK FOR SHORT PRU
- NZ X7,PST14 IF SHORT PRU
- SA4 A5+B1
- SX1 B3+ WORD COUNT
- LX4 -12 GET CURRENT SECTOR
- BX4 -X2*X4
- LX1 36
- SX7 X4+B1 NEXT SECTOR
- LX7 -12
- BX7 X7+X1
- NZ B4,PST15 IF NOT LAST PRU OF CONTROL WORD
- BX7 -X2*X6 GET LINKAGE BYTE FROM CONTROL WORD
- LX7 -12
- BX7 X7+X1
- EQ PST15 SAVE HEADER WORD
- PST14 SX1 B3-B1 GET HEADER WORD FROM LAST DATA WORD
- BX7 X0 SAVE (X0)
- LX0 30
- SB4 A0 SAVE (A0)
- AX0 30
- SA2 A5+2 GET PROGRAM/MONITOR MODE FLAG
- MX6 1
- BX2 X6*X2
- LX2 1
- SA0 ESMB+X2
- IX1 X0+X1
- SX0 A0
- LX0 30
- BX0 X0+X1
- RE 1 READ HEADER WORD
- RJ HHE HANG ON HALF-EXIT
- SA1 ESMB+X2
- SA0 B4+ RESTORE (A0)
- BX0 X7 RESTORE (X0)
- BX7 X1 MOVE HEADER WORD
- PST15 SA7 A0-B1 SAVE HEADER WORD IN PP BUFFER
- SB4 B1 SET PRU COUNT FOR TRANSFER
- EQ PST29 TRANSFER DATA
- * CALCULATE NUMBER OF PRUS (1 TO LSLB) TO TRANSFER THIS PASS.
- * FOR DIRECT READ OR WRITE.
- PST16 SX1 B7-LSLB
- SB5 B5-B1
- BX1 -X1
- SA4 A5 GET SECTOR COUNT
- SB4 X1
- SB3 B0
- LX4 59-38 CHECK FOR READ TO EOR
- SB6 B0
- NG X4,PST17 IF READ TO EOR
- AX4 24+59-38
- BX2 -X2*X4
- IX7 X2-X1
- PL X7,PST17 IF SECTOR COUNT NOT EXHAUSTED
- ZR X2,PST10 IF WRITE EOI AFTER DIRECT TRANSFER
- SB4 X2+0
- PST17 SX1 100B
- GT B5,B1,PST21 IF DIRECT WRITE
- * PROCESS DIRECT READ.
- PST18 LX5 59-20
- PL X5,PST19 IF NOT END OF DISK SECTOR
- SX5 B1
- SA3 A3+1 GET NEXT SECTOR CONTROL WORD
- LX5 12+59-20
- BX6 X3
- PST19 LX5 -59+20
- BX7 X5*X6 EXTRACT SHORT PRU FLAG
- LX5 1 POSITION SHORT PRU MASK FOR NEXT PRU
- MX2 -12
- ZR X7,PST20 IF FULL PRU
- PL X4,/PROGRAM/HNG IF NOT READ TO EOR
- SX1 B6 GET HEADER WORD FROM LAST DATA WORD
- LX1 6
- SB4 A0+0 SAVE (A0)
- SX1 X1+77B
- BX7 X0 SAVE (X0)
- LX0 30
- SA0 ESMB+1 USE PROGRAM MODE BUFFER
- AX0 30
- IX1 X0+X1
- SX0 A0+0
- LX0 30
- BX0 X0+X1
- RE 1 READ HEADER WORD
- RJ HHE HANG ON HALF-EXIT
- SA1 ESMB+1
- SA0 B4 RESTORE (A0)
- BX0 X7 RESTORE (X0)
- SB4 B6+B1
- LX1 12
- BX7 -X2*X1
- AX1 48 WORD COUNT
- NZ X7,PST20 IF NOT EOF/EOI
- BX2 X1
- SX1 B0 WORD COUNT = 0
- NZ X2,PST20 IF EOF
- SB6 B6-B1 RESET PRU COUNT TO PRECEED EOI
- SB4 B4-B1
- PST20 SB6 B6+B1
- SB3 B3+X1 INCREMENT WORD COUNT OF TRANSFER
- LT B6,B4,PST18 IF MORE PRUS TO CHECK
- SB2 PST24 SET RETURN ADDRESS FOR *UDP*
- EQ UDP UPDATE DIRECT TRANSFER PARAMETERS
- * PROCESS DIRECT WRITE.
- PST21 LX5 59-20
- NG X5,PST23 IF END OF DISK SECTOR
- LX5 -59+20
- PST22 SB6 B6+B1
- BX6 -X5*X6 CLEAR SHORT PRU FLAG
- SB3 B3+X1 INCREMENT WORD COUNT
- LX5 1
- LT B6,B4,PST21 IF MORE PRUS
- SB2 PST24 SET RETURN ADDRESS
- SA6 A3 REWRITE SECTOR CONTROL WORD
- EQ UDP UPDATE DIRECT TRANSFER PARAMETERS
- PST23 SA6 A3 STORE SECTOR CONTROL WORD
- SA4 A5 CHECK REWRITE STATUS
- SA3 A3+B1 READ NEXT SECTOR CONTROL WORD
- LX4 59-36
- SX5 10000B
- BX6 X3
- MX7 2
- NG X4,PST22 IF REWRITE
- LX7 23-59
- BX6 -X7*X6 CLEAR VALID DATA FLAGS
- EQ PST22 CONTINUE PROCESSING
- * *PIOM* DIRECT TRANSFER PARAMETERS UPDATED
- * (TRACK, SECTOR, SECTOR COUNT, SECTORS TRANSFERRED,
- * AND CM ADDRESS FOR TRANSFER).
- PST24 SA0 X5 ABSOLUTE CM ADDRESS OF TRANSFER
- LX0 30
- MX7 -30
- BX0 X7*X0
- BX7 -X7*X5
- BX0 X0+X7
- LX0 30
- SX7 B5-B1
- MX2 -12
- SB5 B5+B1
- ZR X7,PST29 IF DIRECT READ
- SA1 A3+0
- PL X6,PST25 IF ADVANCE TO NEXT TRACK
- SA4 A5+1
- MX7 -3
- LX4 -12
- BX6 -X2*X4
- BX7 -X7*X4
- NZ X7,PST26 IF NOT LAST PRU OF CONTROL WORD
- PST25 BX1 X2*X1
- BX6 X6+X1 SAVE LINKAGE INFORMATION
- SA6 A3 REWRITE SECTOR CONTROL WORD
- * TRANSFER DATA FROM PP BUFFER TO I/O BUFFER OR DIRECT FROM
- * CONTROL POINT FIELD LENGTH TO I/O BUFFER.
- PST26 SX7 B2 SAVE (B2)
- SB2 BTSZ
- SX1 B0
- GE B2,B3,PST28 IF ONE BLOCK OR LESS TO WRITE
- SA1 PSTA GET ADDRESS INCREMENT WORD
- PST27 WE BTSZ
- RJ HHE HANG ON HALF EXIT
- SB2 B2+BTSZ
- SA0 A0+BTSZ INCREMENT ADDRESSES
- PST28 IX0 X0+X1
- LT B2,B3,PST27 IF MORE FULL BLOCKS TO TRANSFER
- SB2 B3-B2
- WE B2+BTSZ WRITE REMAINDER OF BLOCK
- RJ HHE HANG ON HALF-EXIT
- EQ PST32 CHECK FOR TRANSFER COMPLETION
- * TRANSFER DATA FROM I/O BUFFER TO PP BUFFER OR DIRECT FROM
- * I/O BUFFER TO CONTROL POINT FIELD LENGTH.
- PST29 SX7 B2 SAVE (B2)
- SB2 BTSZ
- SX1 B0
- GE B2,B3,PST31 IF ONE BLOCK OR LESS TO READ
- SA1 PSTA GET ADDRESS INCREMENT WORD
- PST30 RE BTSZ
- RJ HHE HANG ON HALF-EXIT
- SB2 B2+BTSZ
- SA0 A0+BTSZ INCREMENT ADDRESSES
- PST31 IX0 X0+X1
- LT B2,B3,PST30 IF MORE FULL BLOCKS TO TRANSFER
- SB2 B3-B2
- RE B2+BTSZ READ REMAINDER OF BLOCK
- RJ HHE HANG ON HALF-EXIT
- * DETERMINE IF TRANSFER COMPLETE.
- PST32 SB7 B7+B4
- SB2 X7 RESTORE (B2)
- SA0 B6 RESTORE (A0) FOR PRU READ/WRITE
- SX7 B1
- SX3 B5
- SB7 B7-LSLB
- LX7 48-0
- SA4 A5 GET PARAMETERS
- LX3 -1
- SX1 IFLS RETURN STATUS = INSUFFICIENT FL
- NG X5,PST38 IF TRANSFER TERMINATED FOR READ TO EOR
- SX1 B0+ RETURN STATUS = NO ERROR
- LE B5,B1,PST34 IF PRU TRANSFER
- SX0 B4 PRUS TRANSFERRED
- LX4 -24
- MX6 -12
- LX0 6
- SX2 B3+ WORD COUNT OF TRANSFER
- BX6 -X6*X4 REMAINING SECTOR COUNT
- IX2 X2-X0
- NG X2,PST34 IF EOR ENCOUNTERED OR EOI WRITTEN
- ZR B3,PST34 IF EOR/EOF/EOI ENCOUNTERED
- LX4 0-37+24 CHECK FOR EOR READ OR WRITE EOI
- MX0 -2
- BX0 -X0*X4
- BX6 X6+X0
- ZR X6,PST34 IF SECTOR COUNT EXHAUSTED
- NZ B7,PST6 IF NOT LAST PRU IN 4K BLOCK
- SB6 PST33 SET RETURN ADDRESS FOR *BPF*
- EQ BPF REBUILD PSEUDO FNT
- PST33 SX2 BMRG*100B RELEASE BUFFER AND GET NEXT BUFFER
- SB7 PST6 SET RETURN ADDRESS FOR *CLM*
- PL X3,CLM IF DIRECT READ
- * NOTE - IF SUPPORT FOR A DIRECT REWRITE OPERATION IS EVER
- * NEEDED, CODE CAN BE ADDED HERE TO CHECK THE REWRITE FLAG
- * AND IF SET, SET FUNCTION *BMRW* INSTEAD OF *BMWR*.
- SX2 BMRF*100B+BMWR FLUSH WRITE BUFFER AND GET NEXT ONE
- EQ CLM CALL I/O BUFFER MANAGER
- * TRANSFER COMPLETE. RELEASE I/O BUFFER.
- PST34 SA5 A5 CHECK FOR BUFFER FLUSH
- MX2 42
- PL X3,PST35 IF PRU READ OR DIRECT READ
- LX7 59-0-48+0
- LX5 59-37
- PL X5,PST35 IF NO BUFFER FLUSH REQUESTED
- SB7 B0+ FORCE FLUSH AND PP BUFFER RELEASE
- BX1 -X1
- PST35 NZ B7,PST38 IF NOT LAST PRU IN 4K BLOCK
- SA3 A5+2 GET PROGRAM MODE FLAG
- BX1 -X2*X1 SAVE RETURN STATUS IN MESSAGE BUFFER
- BX3 X2*X3
- SB6 PST36 SET PROGRAM MODE RETURN ADDRESS
- BX6 X1+X3
- SA6 A3
- PL X3,/ECS/PIOP IF SWITCH TO PROGRAM MODE REQUIRED
- * REENTRY FROM PROGRAM MODE.
- * CALL I/O BUFFER MANAGER TO RELEASE READ BUFFER OR TO
- * RELEASE WRITE BUFFER AND FLUSH THE BUFFER TO DISK.
- PST36 SX4 B5
- SB7 PST37 SET RETURN ADDRESS FOR *CLM*
- LX4 -1
- SX2 BMRB*100B RELEASE READ BUFFER
- PL X4,CLM IF PRU READ OR DIRECT READ
- SX2 BMRF*100B RELEASE WRITE BUFFER AND FLUSH TO DISK
- EQ CLM CALL I/O BUFFER MANAGER
- PST37 SA1 A4+B1 RESTORE RETURN STATUS
- SX1 X1
- EQ /ECS/PIOX EXIT
- * RELEASE I/O BUFFER ASSIGNMENT.
- PST38 SA2 A5+4 GET I/O BUFFER LINK
- NO
- LX2 CBTLS
- + TA3 X2+LSLK,CBT ** RELEASE BUFFER (UPDATE IN ONE WORD)
- IX6 X3-X7 **
- SA6 A3 **
- EQ /ECS/PIOX EXIT
- PSTA VFD 30/BTSZ,30/BTSZ ADDRESS INCREMENTS
- ESMB BSS 1 MONITOR MODE EXTENDED MEMORY WORD BUFFER
- BSS 3 PROGRAM MODE EXTENDED MEMORY WORD BUFFER
- PBF SPACE 4,15
- ** PBF - *PIOM* BUFFER FLUSH (SF=5). PROGRAM MODE.
- *
- * ENTRY (A0) = CPU NUMBER.
- * (A5) = PP *OR* ADDRESS.
- * (B7) = CP ADDRESS.
- * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
- * DESCRIPTION.
- *
- * EXIT A0, A5, B7 SAME AS ON ENTRY.
- * TO /PROGRAM/PRG, AFTER BUFFER FLUSH INITIATED.
- *
- * USES A - 1, 7.
- * B - 6.
- * X - 1, 2, 3, 4, 5, 6, 7.
- *
- * CALLS BPF, LBM.
- PBF MX7 -12
- SX1 BMFL SELECT BUFFER FLUSH FUNCTION
- BX6 -X7*X5 EXTRACT FNT ORDINAL
- SX7 EPNS ALLOW FLUSH ON *OFF* DEVICE
- SX2 B7 CP NUMBER
- LX2 18-7
- BX5 X2+X6
- LX1 -6
- TX4 A5-1,-SP
- SB6 PBF2 SET RETURN ADDRESS FOR *LBM*
- BX5 X5+X1
- EQ LBM CALL I/O BUFFER MANAGER
- * THE BUFFER INDEX IS NOT CLEARED FOR A DIRECT ACCESS FILE
- * SO THAT A DETERMINATION CAN BE MADE ON THE NEXT I/O OPERATION
- * AS TO WHETHER THE BUFFER HAS BEEN WRITTEN TO THE DEVICE.
- PBF2 SA1 FNTA CLEAR BUFFER INDEX
- SX2 PMFT*100B
- ERX3 X1 READ FNT
- SX6 7700B
- BX2 X2-X3
- BX7 X7-X7
- BX6 X6*X2
- ZR X6,/PROGRAM/PRG1 IF DIRECT ACCESS FILE
- R= X2,FUTL CLEAR BUFFER INDEX IN FST
- IX2 X1+X2
- ERX1 X2
- MX3 48
- BX6 X3*X1
- EWX6 X2
- EQ /PROGRAM/PRG1 EXIT AND CLEAR OUTPUT REGISTER
- BPF SPACE 4,20
- ** BPF - BUILD PSEUDO FNT IN PP MESSAGE BUFFER.
- *
- * ENTRY REFER TO *PIOM* FOR DESCRIPTION OF *MB*.
- * (A5) = *OR* ADDRESS.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (MB+2) = 12/EQUIPMENT,12/0,12/TRACK,12/SECTOR,12/0.
- * (MB+3) = 48/0,12/I/O BUFFER LINK.
- * (X6) = *FST*.
- * (X7) = I/O BUFFER LINK, IF NONZERO.
- *
- * USES A - 1, 4, 6, 7.
- * X - 1, 4, 6, 7.
- BPF SA4 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
- MX1 -24
- LX1 12
- MX6 12
- BX1 -X1*X4 TRACK AND SECTOR
- LX4 12
- MX7 0
- BX6 X6*X4 EQUIPMENT
- LX4 59-7-12
- BX6 X6+X1
- SA6 A5+3 SAVE PSEUDO FNT IN MESSAGE BUFFER
- PL X4,BPF1 IF NO I/O BUFFER LINK
- TX1 A5-1,-FP CALCULATE PP INDEX
- AX1 3 PP INDEX INTO *PLT*
- TA1 X1,PLT READ PP I/O BUFFER LINK
- BX7 X1
- BPF1 SA7 A6+B1 SAVE I/O BUFFER LINK IN PSEUDO FNT
- JP B6 RETURN
- CLM SPACE 4,35
- ** CLM - CALL I/O BUFFER MANAGER.
- *
- * ENTRY (B7) = RETURN ADDRESS.
- * (A5) = *OR* ADDRESS.
- * (X2) = 48/0,6/ OP,6/ BC.
- * OP = I/O BUFFER MANAGER OPERATION.
- * BC = BUFFER COUNT (USED FOR ONLY *BMRD* AND *BMRF*
- * OPERATIONS).
- * FOR *BMRD*, BC = 1 IF NON-STREAMED PRU READ.
- * FOR *BMRF*, BC = *BMWR* IF WRITE.
- * BC = *BMRW* IF REWRITE.
- * (MB+1) .LT. 0, IF PROGRAM MODE.
- * (MB+2) = PSEUDO FNT EQUIPMENT, TRACK, SECTOR.
- * (MB+3) = PSEUDO FNT I/O BUFFER LINK (CONTROL BUFFER
- * INDEX) FOR OP = 4, 5, 6.
- *
- * EXIT A0, A5, B2 SAME AS ON ENTRY.
- * (B5) = *PIOM* SUBFUNCTION - 1.
- * (A4) = *MB* ADDRESS.
- * (X5) = (OR).
- * (X6) = BUFFER ORDINAL.
- * = 0 IF NO BUFFER INTERLOCKED.
- * (MB) = I/O BUFFER LINK FLAG UPDATED.
- * (MB+3) = I/O BUFFER LINK UPDATED.
- * BUFFER LINK FOR THIS PP UPDATED IN *PLT*.
- * TO /ECS/PIOR, IF I/O BUFFER BUSY.
- * TO /ECS/PIOX, IF RECALL REQUIRED, I/O ERROR, ADDRESS
- * ERROR OR INACCESSIBLE DEVICE.
- *
- * USES A - 3, 4, 6, 7.
- * B - 5, 6.
- * X - ALL.
- *
- * CALLS LBM, /ECS/PIOR, /ECS/PIOX.
- CLM SX1 A5+2 PSEUDO FNT ADDRESS
- LX2 -12
- BX5 X1+X2
- SB6 CLM1 SET *LBM* EXIT ADDRESS
- EQ LBM CALL BUFFER MANAGER
- * CHECK BUFFER STATUS. SAVE I/O BUFFER LINK.
- * ENTRY FROM *INB* IN MONITOR MODE.
- CLM1 UX0,B5 X5
- SA4 A5+B1
- AX0 42
- MX1 1
- SB5 X0-1 *PIOM* SUBFUNCTION - 1
- SX7 X6 BUFFER ORDINAL (IF INTERLOCKED)
- MX0 5
- BX2 X0*X6 BUFFER MANAGER STATUS
- SA7 A5+4 UPDATE PSEUDO FNT
- LX1 7-59
- SX6 X6 BUFFER ORDINAL (0 IF NOT INTERLOCKED)
- BX7 -X1*X4 CLEAR PP BUFFER RESERVED FLAG
- ZR X6,CLM2 IF BUFFER NOT INTERLOCKED
- TX3 A5-1,-FP
- AX3 3
- BX7 X1+X4 SET PP BUFFER RESERVED FLAG
- TA6 X3,PLT STORE PLT ENTRY
- CLM2 SA7 A4 UPDATE *CHRV* IN MESSAGE BUFFER
- MX4 1
- NZ X2,CLM3 IF BUFFER MANAGER STATUS NONZERO
- JP B7 EXIT
- CLM3 SX1 -RCLS SET RECALL STATUS
- NG X2,/ECS/PIOX IF RECALL
- LX2 59-58
- SX3 B5+B1 *PIOM* SUBFUNCTION
- NG X2,/ECS/PIOR IF BUFFER BUSY
- LX3 -1
- PL X3,CLM4 IF WRITE REQUEST
- LX4 48-59
- CLM4 BX1 X6
- ZR X6,CLM5 IF BUFFER NOT INTERLOCKED
- LX1 CBTLS
- + TA3 X1+LSLK,CBT **** PERFORM IN ONE WORD ****
- IX6 X3-X4 **** PERFORM IN ONE WORD ****
- SA6 A3 **** PERFORM IN ONE WORD ****
- CLM5 LX3 X2,B1
- LX2 X3,B1
- PL X3,CLM6 IF NOT I/O ERROR
- SX4 B1
- LX4 6
- BX7 -X4*X7
- SA7 A7 CLEAR *1MV* FLUSH FLAG
- SA1 A5+2 CHECK PROGRAM MODE FLAG IN (MB+1)
- SA3 FCBI BUFFER WITH ERROR (PROGRAM MODE)
- NG X1,CLM5.1 IF PROGRAM MODE
- SA3 FCBM BUFFER WITH ERROR (MONITOR MODE)
- CLM5.1 MX0 -6
- LX3 CBTLS
- TA1 X3+HSLK,CBT
- LX1 -48
- BX1 -X0*X1 ERROR CODE FROM DRIVER
- BX1 -X1 CAUSE PP I/O BUFFER RELEASE
- EQ /ECS/PIOX EXIT
- CLM6 SX1 -ADDE
- PL X2,/ECS/PIOX IF ADDRESS ERROR
- SX1 -LNRE SET *LOGICAL NOT READY* ERROR STATUS
- EQ /ECS/PIOX EXIT
- IDE SPACE 4,10
- ** IDE - IGNORE DATA AFTER EOI WRITE.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (X3) = FWA CONTROL BUFFER.
- * (X7) = MOD 40B OF SECTOR CONTAINING EOI.
- *
- * USES A - 2, 7.
- * X - 1, 2, 7.
- IDE BSS 0 ENTRY
- SX1 X7
- AX7 CBTLS
- IX2 X3+X7
- SA2 X2 CONTROL WORD CONTAINING EOI
- SX7 B1
- LX1 -2
- BX1 -X1*X7 SET SECOND SECTOR FLAG ONLY OR NO FLAG
- IDE1 LX1 22-0 POSITION VALID DATA FLAGS
- BX7 X2+X1
- SA7 A2+ REWRITE CONTROL WORD
- SX7 A2-PAD4
- IX7 X7-X3
- ZR X7,/MONITOR/RB4 IF LAST CONTROL WORD COMPLETED
- SX1 3 SET BOTH FLAGS
- SA2 A2+1 GET NEXT CONTROL WORD
- EQ IDE1 COMPLETE REMAINING CONTROL WORDS
- UDP SPACE 4,30
- ** UDP - UPDATE *PIOM* DIRECT TRANSFER PARAMETERS.
- *
- * ENTRY (A5) = PP *OR* ADDRESS.
- * (B2) = RETURN ADDRESS.
- * (B3) = WORD COUNT OF TRANSFER.
- * (B4) = NUMBER OF SECTORS TO TRANSFER.
- * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
- * DESCRIPTION.
- *
- * EXIT PARAMETERS IN *OR* AND *MB* ADVANCED
- * BY SPECIFIED SECTOR AND WORD COUNT.
- * ADVANCES TO NEXT TRACK IF NECESSARY.
- * (B3) = WORD COUNT OF TRANSFER, UPDATED IF TRANSFER
- * PREMATURELY TERMINATED.
- * (B4) = SECTOR COUNT OF TRANSFER, UPDATED IF TRANSFER
- * PREMATURELY TERMINATED.
- * (X6) .LT. 0, IF NO ADVANCE TO NEXT TRACK.
- * (X6) .GT. 0, NEXT TRACK.
- * (X5) = ABSOLUTE CM ADDRESS TO BEGIN TRANSFER, AND
- * INSUFFICIENT FL FLAG (IF BIT 59 SET).
- * TO /PROGRAM/HNG, IF NEXT TRACK NOT RESERVED,
- * IF SECTOR COUNT TRANSFER ATTEMPTED BEYOND FL,
- * OR IF LWA SPECIFICATION INVALID FOR READ TO EOR.
- *
- * USES A - 0, 1, 2, 4, 5, 7.
- * B - 3, 4, 6.
- * X - 1, 2, 4, 5, 6, 7.
- UDP BSS 0 ENTRY
- TX4 A5-1,-FP
- LX4 PPXES-PPCES
- MX1 -12
- TA4 X4+ACPP,FPX GET CP/PCP ASSIGNMENT
- SA5 A5+ GET *OR* PARAMETERS
- LX4 -24
- SX7 X4+ CP/PCP ADDRESS
- BX4 X5 CHECK FOR READ TO EOR
- SA2 X7+FLSW GET FL OF CP/PCP
- LX4 59-38
- BX7 -X1*X2
- LX7 6 FL
- SA0 77B
- BX2 X7 SET MAXIMUM LWA+1 TRANSFER = FL
- PL X4,UDP2 IF NOT READ TO EOR
- SX1 X5+B3 RELATIVE CM FWA TRANSFER + WORD COUNT
- LX5 -18
- SX1 X1-1 LWA OF TRANSFER
- SX6 X5 LWA SPECIFICATION
- LX5 18
- ZR X6,UDP1 IF NO LWA SPECIFICATION
- NG X6,/PROGRAM/HNG IF INVALID LWA SPECIFICATION
- IX2 X7-X6
- NG X2,/PROGRAM/HNG IF LWA SPECIFICATION .GT. FL
- BX2 X6 SET MAXIMUM LWA+1 TRANSFER
- UDP1 IX1 X1-X2
- NG X1,UDP2 IF TRANSFER DOES NOT EXCEED MAXIMUM
- BX6 -X1 TERMINATE TRANSFER AT MAXIMUM ADDRESS
- SB3 X6+B3
- SB3 B3-1
- SX6 B3+A0 RECALCULATE SECTOR COUNT
- AX6 6
- SB4 X6
- UDP2 SX6 X5+B3 RELATIVE FWA TRANSFER + WORD COUNT
- MX2 -18
- IX7 X7-X6
- BX6 -X2*X6
- NG X7,/PROGRAM/HNG IF TRANSFER BEYOND FL
- BX7 X2*X5 ADVANCE RELATIVE CM ADDRESS
- BX7 X7+X6
- BX5 -X2*X5
- SA2 A2 GET RA OF CONTROL POINT
- MX6 -RMSK
- LX2 -RSHF
- BX2 -X6*X2
- LX2 6
- IX5 X5+X2
- MX6 1
- BX1 -X1*X6 SET INSUFFICIENT FL FLAG
- SX2 B3+A0 COMPUTE SECTOR COUNT
- BX5 X5+X1
- AX2 6
- LX7 -24
- NG X4,UDP3 IF READ TO EOR
- IX7 X7-X2 DECREMENT SECTOR COUNT
- UDP3 LX7 24
- SA4 A5+B1 GET *MB* PARAMETERS
- SA7 A5+ UPDATE *PIOM* *OR* PARAMETERS
- LX4 12
- MX6 -12
- IX7 X4+X2 ADVANCE TOTAL SECTORS TRANSFERRED
- BX7 -X6*X7 CLEAR POSSIBLE OVERFLOW
- BX4 X6*X4 CLEAR OLD SECTORS TRANSFERRED FIELD
- BX4 X4+X7
- LX4 -24
- IX7 X4+X2 ADVANCE CURRENT SECTOR
- MX2 -12
- LX4 -24
- BX6 -X2*X4 EST ORDINAL
- CX1 X6,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST GET EST ENTRY
- BX1 -X2*X1 MST ADDRESS / 10B
- LX1 3
- SA1 X1+MDGL GET SECTOR LIMIT
- BX6 -X2*X1
- BX1 -X2*X7
- IX6 X1-X6
- NG X6,UDP4 IF NOT END OF TRACK
- BX6 -X2*X4 EQUIPMENT
- LX4 12-2
- CX1 X6,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST READ EST ENTRY
- MX6 -9
- BX1 -X2*X1 MST ADDRESS / 10B
- BX4 -X6*X4 TRT WORD INDEX
- LX1 3
- AX7 12 CLEAR CURRENT SECTOR
- SA1 X1+TRLL SET FWA OF TRT
- IX1 X1+X4
- MX6 -2
- SA1 X1+ READ TRT WORD
- BX6 -X6*X7 TRT BYTE INDEX
- SX4 12
- IX6 X6*X4
- SB6 X6
- LX1 B6
- PL X1,/PROGRAM/HNG IF NO NEXT TRACK
- LX1 12
- BX6 -X2*X1 GET NEXT TRACK
- BX7 X2*X7 CLEAR TRACK
- BX7 X7+X6 SET NEXT TRACK
- LX7 12
- UDP4 LX7 12 UPDATE *PIOM* *MB* PARAMETERS
- SA7 A4
- JP B2 RETURN
- DIB SPACE 4,15
- ** DIB - DROP I/O BUFFERS.
- *
- * ENTRY (B5) = FIRST FREE TRACK POINTER.
- * (B6) = FWA TRT.
- * (A5) = PP *OR* ADDRESS.
- * (X3) = TRACK AND PRU INCREMENT.
- * (X4) = -3777B.
- * (X6) = NUMBER OF TRACKS AND PRU-S DROPPED.
- * (X7) = TRACK POINTER.
- *
- * EXIT ABOVE REGISTERS RESTORED AS ON ENTRY.
- * (B7) .NE. 0 TO INDICATE DEVICE.
- *
- * USES A - 1, 3, 6, 7.
- * B - 2, 5, 6.
- * X - 1, 2, 3, 4, 5, 6, 7.
- *
- * CALLS LBM.
- DIBA CON 0 PSEUDO FNT (EQUIPMENT, TRACK, SECTOR)
- DIB1 SB5 B2 FIRST FREE TRACK POINTER
- SA3 SCRA TRACK AND PRU INCREMENT
- SB6 B7 FWA TRT
- SA1 A3+B1 TRACK POINTER
- BX7 X1
- MX4 -11
- SA1 A1+B1 NUMBER OF TRACKS AND PRU-S DROPPED
- BX6 X1
- EQ /PROGRAM/DTC5.1 RETURN TO DROP REMAINING TRACKS
- DIB SA5 A5+ CHECK FOR PROGRAM MODE
- SB2 B5 SAVE (B5)
- LX5 59-58
- SA7 B1+SCRA SAVE (W6)
- PL X5,/PROGRAM/DTC5.1 IF NOT PROGRAM MODE
- SB7 B6 SAVE (B6)
- SA6 A7+B1 SAVE (X6)
- BX6 X3
- SX3 B1
- SA6 A7-B1 SAVE (X3)
- LX4 -12
- SA1 A5 BUILD PSEUDO FNT
- LX3 35-0
- LX7 2+24
- SX5 BMDB DROP I/O BUFFERS
- LX1 12
- BX1 -X4*X1 EQUIPMENT
- SX2 DIBA-1 PSEUDO FNT ADDRESS
- LX5 -6
- BX7 X1+X7
- SB6 DIB1 RETURN ADDRESS FOR *LBM*
- BX7 X7+X3
- BX5 X5+X2
- SA7 X2+B1
- * EQ LBM CALL I/O BUFFER MANAGER
- LBM SPACE 4,45
- ** LBM - I/O BUFFER MANAGER.
- *
- * ENTRY (X5) = 6/OP, 6/PA, 24/0, 6/CP, 18/FNTA
- * OP = OPERATION CODE.
- * BMRD = READ BUFFER.
- * BMWR = WRITE BUFFER.
- * BMRW = REWRITE BUFFER.
- * BMVI = VALIDATE AND INTERLOCK BUFFER.
- * BMRG = RELEASE READ BUFFER AND GET NEXT.
- * BMRB = RELEASE READ BUFFER.
- * BMFL = FLUSH BUFFER.
- * BMRF = RELEASE AND FLUSH WRITE BUFFER.
- * BMFW = FLUSH ALL WRITE BUFFERS.
- * BMTR = TERMINATE SHARED DEVICE READ
- * ACCESS.
- * BMTW = TERMINATE SHARED DEVICE WRITE
- * ACCESS.
- * BMDB = DROP ALL BUFFERS FOR FILE.
- * BMDD = DROP ALL BUFFERS ON DEVICE.
- * BMCR = COMPLETE SHARED DEVICE READ ACCESS
- * REQUEST.
- * BMCW = COMPLETE SHARED DEVICE WRITE ACCESS
- * REQUEST.
- * PA = OPERATION CODE DEPENDENT PARAMETER.
- * FOR *BMRD* - BUFFER COUNT.
- * 0 = USE DEFAULT BUFFER COUNT.
- * BUFFER COUNT IF .NE. 0.
- * FOR *BMWR* - RECALL ALLOWED FLAG.
- * 0 = RECALL ALLOWED.
- * 1 = RECALL NOT ALLOWED.
- * FOR *BMVI* - OPERATION CODE TO BE
- * EXECUTED IF BUFFER CANNOT BE
- * INTERLOCKED IN MONITOR MODE.
- * *BMRD* = INTERLOCK FOR READ.
- * *BMWR* = INTERLOCK FOR WRITE.
- * FOR *BMRF* - WRITE OPERATION CODE TO BE
- * EXECUTED ON NEXT BUFFER AFTER
- * FLUSH OF CURRENT BUFFER.
- * 0 = NO WRITE OPERATION.
- * *BMWR* = WRITE BUFFER.
- * *BMRW* = REWRITE BUFFER.
- * FOR *BMFW* - RESTART 819 I/O FLAG.
- * 0 = DO NOT RESTART 819 I/O.
- * RESTART 819 I/O IF .NE. 0.
- * FOR *BMCR*, *BMCW* - STATUS CODE.
- * 0 = NORMAL COMPLETION.
- * 1 = *BRT* ENTRY EVICTED BY *MTE*.
- * 2 = OTHER MACHINE CANNOT RELEASE
- * WRITE ACCESS.
- * CP = CONTROL POINT NUMBER IF PSEUDO-PP CALL.
- * = 0 IF PP CALL.
- * FNTA = FNT OFFSET IF PSEUDO-PP CALL.
- * = PSEUDO FNT ADDRESS IF PP CALL.
- * = EST ORDINAL IF OP = *BMFW* OR *BMDD*.
- * = 0 IF *BMFW* TO PROCESS ALL EQUIPMENTS.
- * (B6) = EXIT ADDRESS.
- *
- * EXIT (X6) = 5/ST, 43/0, 12/BI
- * ST = STATUS.
- * BIT 59 SET IF RECALL.
- * BIT 58 SET IF BUFFER BUSY.
- * BIT 57 SET IF I/O ERROR.
- * BIT 56 SET IF INACCESSIBLE DEVICE.
- * BIT 55 SET IF ADDRESS ERROR.
- * BI = BUFFER INDEX.
- * (FNTA) = ABSOLUTE FNT ADDRESS.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * A - 1, 2, 3, 6, 7.
- * B - 3, 6.
- *
- * CALLS DAB, FAW, FLB, RDB, REB, REN, RFB, RWB, WTB.
- LBM SB3 SCRB SET SUBROUTINE CALL STACK POINTER
- SX6 B6 SAVE RETURN ADDRESS
- MX1 -6 GET FUNCTION CODE
- SA6 RETA
- LX5 6
- BX7 -X1*X5 GET PRIMARY SUBFUNCTION
- LX5 6 GET BUFFER COUNT/SECONDARY SUBFUNCTION
- SA7 OPRC SAVE OPERATION CODE
- SB6 X7
- BX6 -X1*X5
- LX5 -12
- SA6 OPAR SAVE SUBFUNCTION PARAMETER
- MX1 -24
- SA6 BCNT
- BX6 -X1*X5
- SA6 RPRM
- SX7 X6 GET FNT RELATIVE ADDRESS
- AX6 18 GET CP NUMBER
- ZR X6,LBM3 IF PP CALL
- BX1 X6 GET CP RA
- LX1 7
- SA1 X1+FLSW
- MX2 -RMSK
- LX1 -RSHF
- BX1 -X2*X1
- LX1 6
- IX7 X1-X7 FORM ADDRESS IN NEGATIVE FL
- LBM3 SA7 FNTA SAVE FNT ADDRESS OR EST ORDINAL
- SX6 B6-BMFW
- ZR X6,LBM6 IF FLUSHING ALL WRITE BUFFERS
- SX6 B6-BMDD
- ZR X6,LBM6 IF DROPPING ALL BUFFERS
- SX1 B1 GET FNT WORD 1
- IX1 X7+X1
- ERX1 X1
- LX1 -12
- MX7 -LSLBS
- BX4 -X7*X1
- MX5 -12
- BX7 -X5*X1
- SA7 OLSC
- IX7 X7-X4 SET LOGICAL SECTOR TO START OF 4K BUFFER
- LX1 -12 GET LOGICAL TRACK
- SA7 LSEC
- BX7 -X5*X1
- LX1 -24 GET EST ORDINAL
- SA7 LTRK
- MX2 -9
- BX1 -X2*X1 EST ORDINAL
- CX2 X1,EST CONVERT EST ORDINAL TO OFFSET
- SX6 B1
- TA2 X2+EQDE,EST READ EST ENTRY
- TX4 A5-1,-SP
- SA3 CHRV
- ZR X4,LBM4 IF PSEUDO PP
- SA3 A5+1
- LBM4 SX7 1
- LX7 57-0
- BX7 X7*X2
- ZR X7,LBM5 IF NOT SHARED DEVICE
- SX7 X1+ SET EST ORDINAL TO INDICATE SHARED DEVICE
- LBM5 SA7 SDEO
- BX7 -X5*X2 MST ADDRESS/10B
- LX6 5-0
- LX7 3
- BX6 X6*X3 GET *READSYS* BIT FROM *CHRV*
- BX2 X7
- LX6 55-5
- SA6 SFRF SET/CLEAR SYSTEM FILE READ FLAG
- SA7 MSTA SAVE MST ADDRESS
- SA2 X2+DILL
- MX7 -6
- BX7 -X7*X2
- SA7 AILE ALGORITHM INDEX FOR *LDAM* EQUIPMENT
- SA1 FNTA GET FNT WORD 2
- SX7 B1+B1
- IX1 X1+X7
- ERX1 X1
- BX7 -X5*X1 GET BUFFER INDEX
- SA7 BIDX
- SA3 A2+BDLL-DILL UNPACK READ AHEAD PARAMETERS
- SX7 77B
- BX6 X7*X3
- AX3 6
- SA6 RBTH READ BUFFER THRESHOLD
- BX6 X7*X3
- AX3 6
- SA6 DBAT BUFFER ALLOCATION TRIGGER
- SA2 BCNT
- BX6 X7*X3
- SA6 DCNT
- NZ X2,LBM6 IF BUFFER COUNT SUPPLIED
- SA6 BCNT
- LBM6 SA1 A5 REREAD OUTPUT REGISTER
- MX7 -6
- BX6 X6-X6
- BX7 -X7*X1 CHANNEL NUMBER, IF SELECTED BY CALLER
- SA7 CHAN
- SA6 FCBI
- SA6 NCHV
- SA6 DTSF CLEAR DATA STREAMING FLAG
- PX7 X6 INITIALIZE BEST SYSTEM DEVICE ACTIVITY
- SA6 CHEA
- SA7 BSDA
- SA6 SYDI
- TNO /BUFIO/LBS,BIOMMF
- JP B6+LBMA PROCESS FUNCTION
- * ENTER FUNCTION PROCESSOR.
- * (B3) = SUBROUTINE CALL STACK POINTER.
- LBMA BSS 0
- EQ RDB READ BUFFER
- ERRNZ BMRD
- EQ WTB WRITE BUFFER
- ERRNZ BMWR-1
- EQ RWB REWRITE BUFFER
- ERRNZ BMRW-2
- EQ * VERIFY/INTERLOCK MUST BE CALLED DIRECTLY
- ERRNZ BMVI-3
- EQ REB RELEASE READ BUFFER AND GET NEXT BUFFER
- ERRNZ BMRG-4
- EQ REN RELEASE READ BUFFER
- ERRNZ BMRB-5
- EQ FLB FLUSH BUFFER
- ERRNZ BMFL-6
- EQ RFB RELEASE AND FLUSH BUFFER
- ERRNZ BMRF-7
- EQ FAW FLUSH ALL WRITE BUFFERS
- ERRNZ BMFW-10B
- TEQ (/BUFIO/RRA,BIOMMF,/PROGRAM/HNG)
- ERRNZ BMTR-11B
- TEQ (/BUFIO/RWA,BIOMMF,/PROGRAM/HNG)
- ERRNZ BMTW-12B
- EQ DAB DROP ALL BUFFERS
- ERRNZ BMDB-13B
- EQ DBD DROP ALL BUFFERS ON DEVICE
- ERRNZ BMDD-14B
- TEQ (/BUFIO/CRR,BIOMMF,/PROGRAM/HNG)
- ERRNZ BMCR-15B
- TEQ (/BUFIO/CWR,BIOMMF,/PROGRAM/HNG)
- ERRNZ BMCW-16B
- * PROCESS NORMAL COMPLETION.
- LBMX SA3 PUTO COUNT BUFFER REQUEST
- SX7 B1+
- LX3 PUTLS
- SX6 B0+ CLEAR STATUS
- + TA1 X3+ACST,PUT **** PERFORM IN ONE WORD ****
- IX7 X1+X7 **** PERFORM IN ONE WORD ****
- SA7 A1 **** PERFORM IN ONE WORD ****
- * EXIT BUFFER MANAGER WITH STATUS FROM *X6*.
- LBMXS SA2 FCBI
- ZR X2,LBM9 IF NO BUFFER FOR RESPONSE
- BX1 X2
- LX2 CBTLS
- TA3 X2+HSLK,CBT GET DRIVER STATUS
- MX4 1
- BX2 X4*X3 GET I/O ERROR FLAG
- LX2 57-59
- BX6 X6+X2 MERGE STATUS AND ERROR FLAG
- SX4 5
- LX4 55-0
- BX2 X4*X6 I/O ERROR AND ADDRESS ERROR FLAGS
- TX5 A5-1,-SP
- ZR X5,LBM7 IF PSEUDO PP
- SA3 NCHV
- SA4 A5+B1
- LX4 59-6
- NZ X3,LBM7 IF NO *CHRV* DATA PRESENT
- NG X4,LBM8 IF *1MV* RECALL AFTER FLUSH
- LBM7 NZ X2,LBM9 IF I/O OR ADDRESS ERROR
- LBM8 BX6 X6+X1 MERGE STATUS AND BUFFER ORDINAL
- LBM9 SA1 RETA GET RETURN ADDRESS
- SB6 X1
- BX7 X7-X7 CLEAR CONTROL BUFFER INTERLOCK
- SA7 INLB
- SA7 MSTA CLEAR MST ADDRESS FOR *CDAM*
- SA5 A5+
- JP B6 RETURN
- PARM BSS 0 PARAMETER AREA
- AILE BSS 1 ALGORITHM INDEX FOR *LDAM* EQUIPMENT
- BAFS BSS 1 *BFMM* ABSOLUTE FST ADDRESS
- BCNT BSS 1 BUFFER COUNT PARAMETER
- BDDC BSS 1 *BFMM* DEVICE DESCRIPTORS AND BUFFER COUNT
- BFST BSS 1 *BFMM* ORIGINAL FST ENTRY
- BIDX BSS 1 BUFFER INDEX PARAMETER
- BSDA BSS 1 BEST SYSTEM DEVICE ACTIVITY
- BSDI BSS 1 INDEX OF BEST SYSTEM DEVICE
- CAFL BSS 1 ROUTINE *CHA* - FORWARD LINK STORAGE
- CETS BSS LLCV+1 ROUTINE *CHA* - EVICT TABLE STORAGE
- CHAD BSS 1 ROUTINE *CHA* - HASH ADDRESS STORAGE
- CHAN BSS 1 CHANNEL SELECTED BY CALLER
- CHEA BSS 1 CURRENT HASH ENTRY ADDRESS
- CLST BSS 1 CURRENT LIST
- CSBS BSS 1 ROUTINE *CHA* SCRATCH
- DBAT BSS 2 DATA BUFFER ALLOCATION TRIGGER
- DCNT EQU DBAT+1 DEFAULT BUFFER COUNT
- DTSF BSS 1 DATA STREAMING FLAG SET BY *REB*
- FBLB BSS 1 FLUSH ALL WRITE BUFFERS LINK BYTE
- FCBI BSS 1 FIRST CONTROL BUFFER (PROGRAM MODE)
- FCBM BSS 1 FIRST CONTROL BUFFER (MONITOR MODE)
- FNTA BSS 1 FNT ADDRESS
- HTA BSS 1 HASH TABLE BASE ADDRESS
- LSEC BSS 1 LOGICAL SECTOR
- LTRK BSS 1 LOGICAL TRACK
- MSTA BSS 1 MST ADDRESS
- NCHV BSS 1 *CHRV* PRESENT FLAG
- OLSC BSS 1 ORIGINAL LOGICAL SECTOR
- OPAR BSS 1 OPERATION CODE PARAMETER
- OPRC BSS 1 BUFFER MANAGER OPERATION CODE
- PUTO BSS 1 24/SUSL, 18/RLSN, 18/PUTO
- * SUSL = SINGLE UNIT SECTOR LIMIT
- * RLSN = RELATIVE SECTOR NUMBER IN UNIT
- * PUTO = *PUT* ORDINAL
- RBCT BSS 2 READ BUFFER COUNT
- RBTH EQU RBCT+1 READ BUFFER THRESHOLD
- RETA BSS 1 RETURN ADDRESS (USED IN ROUTINE *LBM*)
- RPRM BSS 1 RECALL PARAMETER
- SDEO BSS 1 EST ORDINAL IF SHARED DEVICE
- SDUR CON 0 SHARED DEVICE UNABLE TO RELEASE ACCESS
- SDWR CON 0 SHARED DEVICE WRITE ACCESS REQUESTED
- SFRF BSS 1 SYSTEM FILE READ FLAG
- SYDI BSS 1 SYSTEM DEVICE TABLE INDEX
- PARML EQU *-PARM PARAMETER BLOCK LENGTH
- INLB CON 0 CONTROL BUFFER INTERLOCK CELL
- SPACE 4,10
- ** SCRATCH AREA.
- SCRA BSS 14B *DTKM* REGISTER SAVE AREA
- SCRB BSS 14B *LBM* PROGRAM MODE REGISTER AREA
- TITLE FUNCTION PROCESSORS.
- CDA SPACE 4,15
- ** CDA - CHECK DEVICE ACCESSIBILITY.
- *
- * ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
- * (B5) = EXIT ADDRESS.
- * (X5) = -7777B.
- * (MSTA) = MST ADDRESS.
- *
- * EXIT (X6) = 0 IF DEVICE MAY BE ACCESSED.
- * = 3/0, 1/1, 56/0 IF DEVICE MUST NOT BE ACCESSED.
- * TO *LBMXS* IF DEVICE IS INACCESSIBLE.
- *
- * USES A - 2, 3, 4.
- * X - 2, 3, 4, 6.
- CDA BSS 0 ENTRY
- SA4 A5+1
- TX3 A5-1,-SP
- NZ X3,CDA0 IF NOT PSEUDO PP
- SA4 CHRV
- CDA0 SA3 MSTA
- BX6 X6-X6
- LX4 59-5
- SA2 X3+DALL GET DEVICE STATUS
- SA3 INWL
- LX2 59-55
- LX3 59-15
- PL X2,CDA2 IF DEVICE IS ACCESSIBLE
- NG X4,CDA2 IF SYSTEM FILE READ
- NG X3,CDA2 IF DEADSTART SEQUENCING NOT COMPLETE
- SX3 X2+B1
- LX4 59-1-59+5
- ERRNZ EPAD-2 CODE DEPENDS ON VALUE
- NG X4,CDA2 IF CALLER MAY ACCESS DOWN DEVICE
- LX3 59-2
- LX4 59-2-59+1
- NG X3,CDA1 IF DEVICE IS DOWN
- NG X4,CDA2 IF CALLER MAY ACCESS OFF/SUSPECT DEVICE
- TX3 A5-1,-FP
- LX3 PPXES-PPCES
- TA3 X3+ACPP,FPX
- SX3 X3 CONTROL POINT ADDRESS
- SA3 X3+JCIW
- SA4 A3+SEPW-JCIW
- LX3 -24
- BX3 -X5*X3
- SX3 X3-LSSI-1
- PL X3,CDA2 IF SUBSYSTEM
- SA3 A3+TFSW-JCIW
- LX4 59-56
- LX3 -48
- NG X4,CDA2 IF *UTL=* ENTRY POINT IS PRESENT
- BX3 -X5*X3
- CX4 X3,EJT CONVERT EJT ORDINAL TO OFFSET
- TA4 X4+SCHE,EJT
- LX2 59-57-59+55
- LX4 59-34
- ERRNZ UCTM-2 CODE DEPENDS ON VALUE
- NG X4,CDA2 IF UNCONDITIONAL JOB TERMINATION IS SET
- SA3 OPRC
- NG X2,CDA1 IF DEVICE IS OFF
- SX2 X3-BMWR
- ZR X2,SBB IF WRITE OPERATION ON SUSPECT DEVICE
- SX2 X3-BMRW
- ZR X2,SBB IF REWRITE OPERATION ON SUSPECT DEVICE
- SX2 X3-BMFO
- PL X2,CDA2 IF OPERATION ALLOWED ON SUSPECT DEVICE
- CDA1 SX6 B1 SET *INACCESSIBLE* STATUS
- LX6 56
- EQ LBMXS EXIT
- CDA2 JP B5 EXIT
- DAB SPACE 4,15
- ** DAB - DROP ALL BUFFERS.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT CONTROL GIVEN TO LBMX.
- *
- * USES A - 2, 3, 6, 7.
- * B - 6.
- * X - 0, 1, 2, 3, 6, 7.
- *
- * CALLS CHA, DCC, DCH, LCC.
- DAB BSS 0 ENTRY
- SX7 B1 INDICATE PP HAS NO *CHRV* DATA
- SA7 NCHV
- SX7 -B1 SET LOCATE HASH TABLE ENTRY
- SB6 DAB1 RETURN ADDRESS FOR *CHA*
- EQ CHA CALCULATE HASH ADDRESS
- DAB1 ZR X1,LBMX IF HASH TABLE BUSY
- SA2 X1 GET HASH ENTRY
- MX7 -12
- DAB2 ZR X2,LBMX IF NO ENTRIES TO PROCESS
- BX6 -X7*X2
- BX0 -X7*X2
- SA6 INLB SET *CBT* INTERLOCK
- LX6 CBTLS
- MX7 -48
- TA2 X6+IOLK,CBT GET I/O INTERLOCK FROM *CBT*
- SA3 A2+B1 GET HASH LINK WORD FROM *CBT*
- ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
- BX6 X6-X6
- NG X2,DAB6 IF I/O INTERLOCK SET
- BX6 X3 SAVE HASH LINK WORD
- SA3 A3+B1
- ERRNZ LSLK-HSLK-1 CODE DEPENDS ON VALUE
- SA6 DABA
- BX6 -X7*X2 CLEAR I/O FLAGS
- BX7 -X7*X3 CLEAR ACCESS COUNT
- SA6 A2
- SA7 A3
- SB6 DAB3 RETURN ADDRESS FOR *DCH*
- EQ DCH DELINK *CBT* FROM HASH LINK
- DAB3 BX1 X0
- SX2 B1
- LX1 CBTLS
- LX2 57
- TA1 X1+IOLK,CBT
- BX7 -X2*X1 CLEAR WRITE FLAG
- SA7 A1
- SB6 DAB4 RETURN ADDRESS FOR *DCC*
- EQ DCC DELINK *CBT* FROM LIST LINK
- DAB4 SB6 DAB5 RETURN ADDRESS FOR *LCC*
- TX1 EMTB
- EQ LCC LINK *CBT* TO EMPTY LIST
- DAB5 SA3 DABA FIND NEXT *CBT* ON HASH LINK
- BX6 X6-X6
- DAB6 AX3 24
- MX7 -12
- SA6 INLB CLEAR *CBT* INTERLOCK
- BX2 -X7*X3 NEXT *CBT* ORDINAL
- EQ DAB2 LOOP FOR NEXT *CBT*
- DABA BSS 1 CURRENT *HSLK* WORD
- DBD SPACE 4,15
- ** DBD - DROP ALL BUFFERS ON SPECIFIED DEVICE.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT TO *LBMX* IF ALL BUFFERS DROPPED.
- * TO *SBB* IF NOT ALL BUFFERS DROPPED.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 4, 6.
- * B - 4, 5, 6.
- *
- * CALLS DCC, DCH, LCC.
- DBD BSS 0 ENTRY
- * SET FIRST PUT ORDINAL.
- SA1 FNTA GET EST ORDINAL
- MX0 -12
- CX2 X1,EST
- TA1 X2+EQDE,EST
- BX1 -X0*X1
- LX1 3 MST ADDRESS
- SA3 A1+EQAE-EQDE
- MX2 -4
- LX3 -18
- BX3 -X2*X3 PARTITION NUMBER
- SX2 HATLE
- IX6 X2*X3 HASH TABLE PARTITION OFFSET
- SA6 DBDC
- SA1 X1+DILL
- SB4 LBMX SET EXIT ADDRESS FOR ALL BUFFERS DROPPPED
- LX1 -24
- BX6 -X0*X1
- SA6 DBDA SET FIRST PUT ORDINAL
- * SET HASH TABLE ADDRESS AND SAVE NEXT PUT ORDINAL.
- DBD1 SA1 DBDA GET PUT ORDINAL
- ZR X1,RB4 IF ALL UNITS PROCESSED, EXIT
- LX1 PUTLS
- TA2 X1+HSCT,PUT
- MX0 -12
- BX6 -X0*X2
- SA6 A1 SAVE NEXT PUT ORDINAL
- MX0 -18
- LX2 -24
- BX6 -X0*X2
- SA3 DBDC GET HASH TABLE PARTITION OFFSET
- SB5 -B1 INITIALIZE HASH TABLE INDEX
- IX6 X6+X3 ADD HASH TABLE PARTITION OFFSET
- SA6 DBDB SAVE HASH TABLE ADDRESS
- * GET NEXT HASH TABLE ENTRY.
- DBD2 SA1 DBDB GET HASH TABLE ADDRESS
- SB5 B5+1 ADVANCE HASH TABLE INDEX
- SX2 B5-HATLE
- ZR X2,DBD1 IF END OF HASH TABLE
- SA1 X1+B5 GET HASH ENTRY
- MX7 -12
- BX7 -X7*X1 SET FIRST BUFFER ORDINAL
- * DROP INACTIVE BUFFERS.
- DBD3 SA7 INLB SET BUFFER INTERLOCK
- BX0 X7 NEXT BUFFER ORDINAL
- LX7 CBTLS SET CBT OFFSET
- ZR X0,DBD2 IF END OF BUFFERS IN ENTRY
- TA2 X7+IOLK,CBT GET I/O INTERLOCK AND WRITE FLAG
- TA3 X7+HSLK,CBT GET HASH LINK
- TA4 X7+LSLK,CBT GET ACTIVITY COUNT
- SX1 5000B
- MX6 12
- LX1 48
- MX7 -12
- BX2 X1*X2 I/O INTERLOCK AND WRITE FLAG
- LX3 -24
- BX4 X6*X4 ACTIVITY COUNT
- BX7 -X7*X3 SET NEXT BUFFER ORDINAL
- BX6 X2+X4
- ZR X6,DBD4 IF NO ACTIVITY REMAINS
- SB4 SBB SET BUFFER BUSY EXIT
- EQ DBD3 CHECK NEXT BUFFER
- DBD4 SB6 DBD5 SET *DCH* RETURN ADDRESS
- EQ DCH DELINK BUFFER FROM HASH TABLE
- DBD5 SB6 DBD6 SET *DCC* RETURN ADDRESS
- EQ DCC DELINK BUFFER FROM CURRENT LIST
- DBD6 SB6 DBD3 SET *LCC* RETURN ADDRESS
- TX1 EMTB
- EQ LCC LINK BUFFER TO EMPTY LIST
- DBDA BSS 1 NEXT PUT ORDINAL
- DBDB BSS 1 HASH TABLE ADDRESS
- DBDC BSS 1 HASH TABLE PARTITION OFFSET
- FAW SPACE 4,15
- ** FAW - FLUSH ALL WRITE BUFFERS.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT CONTROL GIVEN TO LBMX.
- *
- * USES A - 1, 2, 3, 6.
- * B - 5, 6.
- * X - 0, 1, 2, 3, 5, 6.
- *
- * CALLS CDA, DCC, LCC.
- FAW BSS 0 ENTRY
- TX6 DWTB SET DATA WRITTEN AS CURRENT LIST
- SA6 CLST
- TA1 WRTB GET FIRST WRITE BUFFER
- SX6 X1+ SAVE LINK BYTE
- SA6 FBLB
- FAW1 SA1 FBLB READ NEXT CONTROL BUFFER
- ZR X1,FAW5 IF ALL BUFFERS FLUSHED
- SB6 X1
- SX6 X1 SET CONTROL BUFFER INTERLOCK
- MX5 -12
- LX1 CBTLS
- SA6 INLB
- TA1 X1+FSTC,CBT EST ORDINAL
- LX1 12
- SA2 A1+LSLK-FSTC GET LINK TO NEXT BUFFER
- BX1 -X5*X1 EST ORDINAL
- BX0 X2
- CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
- TA3 X3+EQDE,EST
- SB5 FAW1.1 SET *CDA* EXIT ADDRESS
- BX6 -X5*X3
- LX6 3
- SA6 MSTA STORE MST ADDRESS FOR *CDA*
- EQ CDA CHECK DEVICE ACCESSIBILITY
- FAW1.1 SA3 FNTA
- MX2 12
- BX2 X2*X0
- LX0 -24
- BX1 X1-X3
- BX6 -X5*X0 NEXT BUFFER ORDINAL
- SX0 B6
- SA6 FBLB
- NZ X2,FAW1 IF BUFFER CURRENTLY BEING ACCESSED
- ZR X3,FAW2 IF FLUSHING ALL BUFFERS
- NZ X1,FAW1 IF NOT SELECTED EQUIPMENT
- FAW2 SB6 FAW3 RETURN ADDRESS FOR ROUTINE *DCC*
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- FAW3 TX1 DWTB LINK BUFFER TO DATA WRITTEN LIST
- SB6 FAW4
- EQ LCC LINK CONTROL BUFFER
- FAW4 BX6 X0 INITIATE I/O ON BUFFER
- TA6 IORQ
- XJ
- EQ FAW1 PROCESS NEXT WRITE BUFFER
- FAW5 SA1 OPAR
- ZR X1,LBMX IF BUFFER COUNT = 0
- TNO /BUFIO/LBMX,IHPFMD EXIT IF NOT 819
- SX6 3 RESTART 819 I/O
- LX6 36
- TA6 IORQ
- XJ
- EQ LBMX RETURN
- FLB SPACE 4,15
- ** FLB - FLUSH BUFFER TO DISK.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT CONTROL GIVEN TO LBMX.
- * TO /PROGRAM/ HNG IF CONTROL BUFFER NOT FOUND.
- *
- * X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 6, 7.
- * B - 6.
- *
- * CALLS DCC, LCC, SRR.
- FLB BSS 0 ENTRY
- SA2 BIDX
- ZR X2,LBMX IF NO CONTROL BUFFER
- BX6 X2 INTERLOCK BUFFER
- LX2 CBTLS
- SA6 INLB
- TA3 X2+LSLK,CBT CHECK ACTIVITY COUNT
- MX4 12
- BX3 X4*X3
- NZ X3,FLB7 IF BUFFER INTERLOCKED
- * ENTRY FROM *RFB*.
- * BUFFER IS WRITE INTERLOCKED IF ENTERED FROM *RFB*.
- FLB1 TA3 X2+IOLK,CBT CHECK I/O ACTIVE
- NG X3,FLB6 IF INTERLOCK SET
- LX3 59-57
- PL X3,FLB6 IF NOT WRITE DATA
- BX0 X6
- TX2 A5-1,-SP
- SA3 A5+1
- NZ X2,FLB1.1 IF NOT PSEUDO PP
- SA3 CHRV
- FLB1.1 TA6 IORQ
- LX3 59-4
- PL X3,FLB2 IF NOT DEVICE VERIFICATION
- SB6 FLB2 SET *SRC* RETURN ADDRESS
- EQ SRC SET RECALL CONTROL
- FLB2 XJ INITIATE I/O
- SB6 FLB4 RETURN ADDRESS FOR ROUTINE *DCC*
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- FLB4 SB6 FLB5 LINK TO DATA WRITTEN LIST
- TX1 DWTB
- EQ LCC LINK CONTROL BUFFER
- FLB5 BX1 X0 GET ACCESS COUNT WORD
- LX1 CBTLS
- TA2 X1+LSLK,CBT
- MX3 12 CLEAR WRITE INTERLOCK
- BX6 -X3*X2
- SA6 A2+
- FLB6 SA1 OPAR
- ZR X1,FLB7 IF NO WRITE REQUEST
- SX1 X1-BMWR
- SX7 B0 CLEAR PARAMETER
- SA7 A1
- ZR X1,WTB IF WRITE
- EQ RWB REWRITE
- * THE BUFFER INDEX IS RETURNED HERE FOR THOSE ROUTINES WHICH
- * NEED TO CHECK IF THE BUFFER FLUSH HAS COMPLETED.
- FLB7 TX2 A5-1,-SP
- SA1 BIDX
- SA3 A5+B1
- BX6 X1
- SA6 FCBI
- ZR X2,LBMX IF PSEUDO PP
- LX3 59-4
- SX6 B1
- PL X3,LBMX IF NOT DEVICE VERIFICATION OPERATION
- LX6 6-0
- LX3 4-59
- BX6 X6+X3 SET BUFFER FLUSH FLAG
- SA6 A3
- EQ SRR SET RECALL RESPONSE
- INB SPACE 4,30
- ** INB - INTERLOCK BUFFER.
- *
- * MONITOR MODE ONLY.
- *
- * NOTE - FOR PERFORMANCE REASONS, *INB* IS CALLED DIRECTLY BY
- * *BFMM* AND *PIOM* TO AVOID UNNECCESSARY BUFFER MANAGER
- * START UP AND SHUT DOWN OVERHEAD.
- *
- * ENTRY (X2) = SUBFUNCTION.
- * (X6) = *FST*.
- * (X7) = BUFFER INDEX TO VALIDATE.
- * (B6) = EXIT ADDRESS.
- *
- * EXIT (X6) = 1/0, 1/B, 1/E, 1/I, 44/0, 12/BI
- * B = 1 IF BUFFER BUSY.
- * E = 1 IF I/O ERROR.
- * I = 1 IF INACCESSIBLE SHARED DEVICE.
- * BI = BUFFER ORDINAL.
- * = 0 IF BUFFER NOT FOUND OR CANNOT BE
- * INTERLOCKED.
- * (B6) = RETURN ADDRESS.
- * (FCBM) = ORDINAL OF BUFFER WITH ERROR.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * B - 3.
- * X - ALL.
- INB BSS 0 ENTRY
- BX1 X7
- BX7 X7-X7 CLEAR BUFFER ORDINAL
- SA7 FCBM
- BX7 X1
- LX1 CBTLS
- TA4 X1+HSLK,CBT
- SA3 INBA
- SB3 X2 SUBFUNCTION
- SX0 B1
- SA2 A4-B1
- ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
- SA1 A2-B1
- ERRNZ IOLK-FSTC-1 CODE DEPENDS ON VALUE
- BX1 X6-X1
- BX1 X3*X1
- SA3 INLB
- NZ X1,INB8 IF FST/CBT MISMATCH
- BX3 X3-X7
- BX6 X7 SAVE BUFFER ORDINAL FOR REPLY
- ZR X3,INB7 IF INTERLOCK SET
- SA3 A4-HSLK+LSLK
- BX5 X2
- LX2 59-57
- PL X4,INB1 IF NO I/O ERROR
- PL X2,INB9 IF NO WRITE DATA IN BUFFER
- INB1 NZ B3,INB4 IF WRITE/REWRITE
- ERRNZ BMRD CODE DEPENDS ON VALUE
- SX1 B1+
- NG X3,INB7 IF WRITE INTERLOCK IS SET
- LX1 48
- IX7 X3+X1 INCREMENT ACCESS COUNT
- NG X5,INB3 IF I/O ACTIVE
- NG X2,INB5 IF BUFFER CONTAINS WRITE DATA
- INB2 SA7 A3
- EQ INB6 COUNT STATUS AND RETURN
- INB3 PL X2,INB7 IF READ BUFFER BEING FILLED
- EQ INB2 ALLOW READ OF WRITE DATA
- INB4 MX1 12
- BX1 X1*X3 GET ACCESS COUNT
- NG X5,INB7 IF I/O INTERLOCK SET
- NZ X1,INB7 IF ACCESS COUNT NOT ZERO
- PL X2,INB4.2 IF WRITE DATA ACCESS FLAG CLEAR
- INB4.1 MX1 1
- BX7 X3+X1 SET WRITE INTERLOCK
- SA7 A3+
- EQ INB6 COUNT STATUS AND RETURN
- INB4.2 TX1 A5-1,-SP
- ZR X1,INB5 IF PSEUDO PP CALL
- SA1 A5+B1
- LX1 59-6
- NG X1,INB4.1 IF *1MV* RECALL AFTER FLUSH
- INB5 SX6 B0+ SET REPLY STATUS
- SX0 B0+ DON-T COUNT ACCESS ATTEMPT
- INB6 MX1 -12
- BX3 -X1*X4
- LX3 PUTLS
- TA1 X3+INST,PUT
- IX7 X1+X0
- SA7 A1 UPDATE BUFFER VALIDATE STATISTICS
- INB6.1 SA5 A5 RESTORE PP OUTPUT REGISTER
- JP B6 RETURN
- INB7 LX0 58-0
- BX6 X6+X0 SET BUFFER BUSY
- EQ INB6.1 EXIT
- INB8 LX0 36 COUNT REJECT
- BX6 X6-X6
- EQ INB6 EXIT WITH BUFFER NOT FOUND
- INB9 NG X5,INB7 IF I/O INTERLOCK IS SET
- LX0 57-0
- BX6 X0 SET I/O ERROR STATUS
- SA7 FCBM SAVE BUFFER ORDINAL FOR CALLER
- EQ INB6.1 EXIT
- INBA DATA 07770000777777400000B *FST* COMPARISON MASK
- RDB SPACE 4,35
- ** RDB - INTERLOCK BUFFER IN READ MODE OR INITIATE READ.
- *
- * ENTRY (BCNT) = COUNT OF BUFFERS TO ALLOCATE IF REQUESTED
- * BUFFER IS READ FROM DISK.
- *
- * EXIT TO *LBMX* IF BUFFER FOUND AND INTERLOCKED.
- * TO *SBB* IF BUFFER FOUND BUT CANNOT BE INTERLOCKED,
- * DATA READ IN PROGRESS AND RECALL CONTROL ALREADY SET
- * ON BUFFER, OR BUFFER CANNOT BE ALLOCATED.
- * TO *SRR* IF READ INITIATED OR IF DATA READ ALREADY IN
- * PROGRESS AND RECALL CONTROL IS NOT ALREADY SET ON
- * THE BUFFER.
- * READ-AHEAD ON ADDITIONAL CONSECUTIVE BUFFERS INITIATED
- * AS NEEDED IF TO RECALL ON READ OF REQUESTED BUFFER.
- *
- * USES A - 1, 2, 3, 6, 7.
- * B - 6.
- * X - ALL.
- *
- * CALLS ANB, CSD, CHA, DCC, LCC, SBB, SNS, SRC, SRR.
- *
- * IF THE BUFFER INDICATED BY *LTRK* AND *LSEC* IS FOUND AND CAN
- * BE INTERLOCKED IN READ MODE, NORMAL STATUS WILL BE RETURNED.
- * BUFFER BUSY STATUS WILL BE RETURNED IF THE BUFFER IS FOUND
- * BUT INTERLOCKED IN WRITE MODE, IF A READ IS IN PROGRESS AND
- * RECALL CONTROL IS ALREADY SET, OR IF THE BUFFER IS NOT FOUND
- * AND CANNOT BE ALLOCATED. IN NONE OF THESE CASES WILL AN
- * ATTEMPT BE MADE TO ALLOCATE ADDITIONAL BUFFERS. IF A READ
- * BUFFER IS ALLOCATED OR IF A READ IS ALREADY IN PROGRESS AND
- * RECALL CONTROL IS NOT ALREADY SET ON THE BUFFER, RECALL
- * CONTROL WILL BE SET AND RECALL STATUS WILL RETURNED. ALSO,
- * ADDITIONAL CONSECUTIVE BUFFERS WILL BE ALLOCATED, IF
- * POSSIBLE, ACCORDING TO THE VALUE OF *BCNT*.
- RDB BSS 0 ENTRY
- SX7 B0 SET BUFFER NOT ALLOCATED
- SA3 BCNT SET BUFFER COUNT TO ALLOCATE
- BX6 -X3
- SA6 RBCT
- TX6 DRDB SET READ AS CURRENT LIST
- SA6 CLST
- * FIND NEXT BUFFER.
- RDB2 SB6 RDB3 *CHA* RETURN ADDRESS
- TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
- RDB3 ZR X2,RDB14 IF FIRST ACCESS TO HASH ENTRY
- NG X2,RDB11 IF BUFFER CANNOT BE ALLOCATED
- ZR X0,RDB14 IF BUFFER NOT FOUND
- ZR X7,RDB4 IF NO BUFFERS ALLOCATED
- SB6 RDB19
- EQ CAT CHECK ALLOCATION TRIGGER
- RDB4 SX6 X0+ SAVE BUFFER ORDINAL FOR RESPONSE
- SA6 FCBI
- SA6 INLB SET CONTROL BUFFER INTERLOCK
- LX6 CBTLS
- TA2 X6+IOLK,CBT READ ACCESS FLAGS WORD
- TA3 X6+LSLK,CBT READ ACCESS WORD COUNT
- NG X2,RDB6 IF I/O INTERLOCK SET
- LX2 59-57
- BX6 X0
- NG X3,SBB IF BUFFER INTERLOCKED IN WRITE MODE
- PL X2,RDB8 IF NO WRITE DATA PRESENT
- TA6 IORQ FLUSH WRITE DATA
- XJ
- EQ RDB8 DELINK BUFFER
- RDB6 LX2 59-57
- PL X2,RDB10 IF READ IN PROGRESS
- RDB8 SA2 A3-LSLK+HSLK
- NG X2,LBMX IF I/O ERROR
- SX5 B1
- LX5 48
- SB6 RDB9 DELINK BUFFER FROM CONTROL BUFFER CHAIN
- IX6 X3+X5
- SA6 A3
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- RDB9 TX1 DRDB LINK BUFFER TO READ CHAIN
- SA2 BCNT CHECK BUFFER COUNT
- SX4 B1 SET READ TRIGGER
- BX3 X0
- SX2 X2-1
- LX4 58-0
- ZR X2,RDB9.1 IF REQUEST WAS FOR ONE BUFFER
- LX3 CBTLS
- + TA2 X3+IOLK,CBT **** PERFORM IN ONE WORD ****
- BX6 X2+X4 **** PERFORM IN ONE WORD ****
- SA6 A2 **** PERFORM IN ONE WORD ****
- RDB9.1 SB6 LBMX SET EXIT ADDRESS
- EQ LCC LINK CONTROL BUFFER
- RDB10 BX5 X0 CHECK RECALL CONTROL
- LX5 CBTLS
- TA2 X5+LSLK,CBT
- MX3 -24
- BX4 -X3*X2
- NZ X4,SBB IF RECALL CONTROL SET
- SA1 RPRM GET RECALL PARAMETER
- SX6 2 SET UP *IOC* CALL
- LX6 24
- BX6 X6+X1
- LX6 12
- BX6 X6+X0
- TA6 IORQ
- XJ SET RECALL CONTROL
- NZ X6,SRR IF FUNCTION WAS ACCEPTED
- BX2 X0
- LX2 CBTLS
- TA3 X2+LSLK,CBT READ ACCESS COUNT
- EQ RDB8 PROCESS RESPONSE
- RDB11 NZ X7,SRR IF BUFFERS ALLOCATED
- EQ SBB SET BUFFER BUSY RESPONSE
- * ALLOCATE ADDITIONAL BUFFERS.
- RDB12 SB6 RDB13 RETURN ADDRESS FOR ROUTINE *SNS*
- EQ SNS SET NEXT SECTOR
- RDB13 NZ X0,SRR IF EOI
- EQ RDB2 ALLOCATE NEXT BUFFER
- RDB14 SA1 SFRF GET SYSTEM FILE READ FLAG
- * SB0 0 (ONE SYSTEM DEVICE)
- NZ X1,RDB20 IF SYSTEM FILE READ
- * SB0 0 (ONE SYSTEM DEVICE)
- SA1 ANBA GET DATA WRITTEN THRESHOLD
- SX6 X1-1 UPDATE THRESHOLD FOR WRITE
- SX1 X6-DWLT
- NG X1,RDB15 IF AT LOWER LIMIT
- SA6 A1+ SAVE NEW THRESHOLD
- RDB15 SB6 RDB16 RETURN ADDRESS FOR ROUTINE *ANB*
- EQ ANB ALLOCATE NEXT BUFFER
- RDB16 ZR X0,RDB11 IF BUFFER NOT AVAILABLE
- NZ X7,RDB17 IF NOT FIRST BUFFER ALLOCATED
- SX7 X0+ SAVE ORDINAL OF FIRST BUFFER ALLOCATED
- SA7 FCBI
- SB6 RDB17 RETURN ADDRESS FOR ROUTINE *SRC*
- EQ SRC SET RECALL CONTROL
- RDB17 SB6 RDB18 CHECK ALLOCATION TRIGGER
- SA2 DTSF CHECK FOR DATA STREAMING
- SX6 B1+
- ZR X2,CAT IF NOT STREAMING DATA
- SA6 DBAT
- EQ CAT CHECK ALLOCATION TRIGGER
- RDB18 TA7 IORQ INITIATE I/O
- XJ
- RDB19 NZ X6,RDB12 IF MORE BUFFERS TO ALLOCATE
- EQ SRR SET RECALL REPLY
- * IF A JOB IS READING THE SYSTEM FILE, AND THE DATA IS
- * NOT ALREADY RESIDENT IN ESM/LCM, THE OTHER SYSTEM DEVICES
- * ARE SEARCHED TO SEE IF THE DATA HAPPENS TO ALREADY BE IN
- * ESM/LCM, BUT READ FROM A DIFFERENT UNIT (THIS METHOD
- * DEPENDS ON THE FACT THAT EVERY COPY OF THE SYSTEM FILE
- * HAS IDENTICAL LOGICAL AND PHYSICAL ADDRESSES FOR EVERY
- * RECORD). IF THE DATA IS FOUND TO NOT RESIDE IN ESM/LCM
- * IN ANY FORM, THE SYSTEM DEVICE WITH THE LEAST ACTIVITY
- * IS USED TO READ THE DATA.
- RDB20 SA1 SYDI SYSTEM DEVICE INDEX
- BX5 X7 SAVE (X7)
- SX6 X1+B1 INCREMENT INDEX
- SA3 RDBB-1+X6
- ZR X3,RDB23 IF END OF TABLE
- SA6 A1
- SA1 X3 *DALL* WORD OF THIS DEVICE
- SA2 BSDA *DALL* OF PREVIOUS BEST SYSTEM DEVICE
- IX2 X1-X2
- BX7 X1
- PL X2,RDB21 IF NO ACTIVITY IMPROVEMENT
- SA6 BSDI SET NEW BEST SYSTEM DEVICE INDEX
- SA7 A2+ SET NEW BEST ACTIVITY
- RDB21 SA1 FNTA FNT ADDRESS
- R= X7,FSTL
- MX4 -48
- TX0 SP
- SA2 RDBA-1+X6 EST ORDINAL
- IX0 X1-X0
- LX2 48
- IX7 X1+X7
- ERX1 X7 READ FST
- BX6 -X4*X1 CLEAR OLD EST ORDINAL
- BX6 X6+X2 ADD NEW EST ORDINAL
- LX4 -12
- EWX6 X7 UPDATE FST
- PL X0,RDB22 IF FNT IN JOB NFL
- SA1 X7-2 READ MB+0
- LX2 -12
- BX6 -X4*X1 CLEAR OLD EST ORDINAL
- BX6 X6+X2 ADD NEW EST ORDINAL
- SA6 A1
- RDB22 SX6 X3-DALL SAVE MST ADDRESS
- SA6 MSTA
- BX7 X5 RESTORE (X7)
- EQ RDB2 CHECK NEXT SYSTEM DEVICE
- RDB23 SA1 BSDI BEST SYSTEM DEVICE INDEX
- SA3 RDBB-1+X1 MST ADDRESS (*DALL* ADDRESS)
- BX7 X7-X7
- BX6 X1
- SA7 SFRF CLEAR SYSTEM FILE READ FLAG
- EQ RDB21 READ SYSTEM FILE FROM SELECTED DEVICE
- RDBA BSS MXSY TABLE OF SYSTEM DEVICE EST ORDINALS
- RDBB BSS MXSY+1 TABLE OF SYSTEM DEVICE MST ADDRESSES
- REB SPACE 4,15
- ** REB - RELEASE EMPTY READ BUFFER AND INTERLOCK NEXT BUFFER.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT TO *RDB* TO INTERLOCK NEXT BUFFER IF *REB* FUNCTION.
- * TO *LBMX* IF *REN* FUNCTION.
- *
- * USES A - 1, 2, 3, 6, 7.
- * B - 6.
- * X - ALL.
- *
- * CALLS ANB, CSD, CHA, DCC, DCH, LCC, SNS, SRC.
- REB BSS 0 ENTRY
- SX7 B0+ CLEAR *REN* FUNCTION FLAG
- * ENTRY FROM *REN* FUNCTION.
- * DECREMENT READ ACCESS COUNT.
- REB1 SA1 BIDX GET CONTROL BUFFER INDEX
- SA7 REBA
- BX0 X1
- BX6 X1 SET CONTROL BUFFER INTERLOCK
- SA6 INLB
- TX7 DRDB SET READ AS CURRENT LIST
- SA7 CLST
- LX6 CBTLS
- MX3 12
- TA2 X6+LSLK,CBT READ ACCESS COUNT WORD
- BX5 X3*X2 GET ACCESS COUNT
- AX5 49
- ZR X5,REB2 IF COUNT = 0 OR 1
- SX4 B1
- LX4 48
- IX6 X2-X4 DECREMENT COUNT
- SA6 A2
- EQ REB4 CHECK READ THRESHOLD
- REB2 BX6 -X3*X2 CLEAR ACCESS COUNT
- SA6 A2
- SA2 A2+IOLK-LSLK
- NO
- LX2 59-55
- NG X2,REB4 IF SYSTEM FILE BUFFER, LEAVE ON CHAIN
- SB6 REB3 RETURN ADDRESS FOR ROUTINE *DCC*
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- REB3 SB6 REB4 LINK TO EMPTY LIST
- TX1 EMTB
- EQ LCC LINK CONTROL BUFFER
- * CHECK FOR READ-AHEAD TRIGGER.
- REB4 SA1 BIDX GET READ THRESHOLD BIT
- LX1 CBTLS
- TA1 X1+IOLK,CBT
- BX0 X1
- BX6 X6-X6 CLEAR CONTROL BUFFER INTERLOCK
- SA6 INLB
- SA1 LSEC SAVE LOGICAL TRACK AND SECTOR
- SA2 LTRK
- BX6 X1
- BX7 X2
- SA6 OLSC
- SA7 BCNT
- LX0 59-58 TEST READ THRESHOLD
- PL X0,REB18 IF NOT READ-AHEAD TRIGGER BUFFER
- BX7 X7-X7
- SA3 RBTH SET BUFFER COUNT TO ALLOCATE
- BX6 -X3
- ERRNZ RBCT+1-RBTH CODE DEPENDS ON VALUE
- SA6 A3-B1
- SA1 REBA
- ZR X1,REB7 IF *REB* FUNCTION
- * FIND LAST CONSECUTIVE BUFFER ON HASH CHAIN.
- REB5 ZR X6,REB18 IF ALL BUFFERS ALLOCATED
- SB6 REB6
- EQ SNS SET NEXT SECTOR
- REB6 NZ X0,REB18 IF END OF LOGICAL TRACK CHAIN
- REB7 SB6 REB8
- TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
- REB8 ZR X2,REB9 IF END OF CONSECUTIVE CHAIN
- NG X2,REB18 IF BUFFER CANNOT BE ALLOCATED
- ZR X0,REB9 IF END OF CONSECUTIVE CHAIN
- SB6 REB5
- EQ CAT CHECK ALLOCATION TRIGGER
- * ALLOCATE ADDITIONAL BUFFERS.
- REB9 SA3 RBTH SET BUFFER COUNT TO ALLOCATE
- BX6 -X3
- ERRNZ RBCT+1-RBTH CODE DEPENDS ON VALUE
- SA6 A3-B1
- REB10 SB6 REB11
- EQ ANB ALLOCATE NEXT BUFFER
- REB11 ZR X0,REB18 IF NO BUFFERS AVAILABLE
- SB6 REB12
- EQ CAT CHECK ALLOCATION TRIGGER
- REB12 TA7 IORQ INITIATE I/O
- XJ
- REB13 ZR X6,REB18 IF ALL BUFFERS ALLOCATED
- SB6 REB14
- EQ SNS SET NEXT SECTOR
- REB14 NZ X0,REB18 IF EOI
- SB6 REB15
- TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
- REB15 ZR X2,REB10 IF FIRST ACCESS TO HASH ENTRY
- NG X2,REB18 IF BUFFER CANNOT BE ALLOCATED
- ZR X0,REB10 IF BUFFER NOT FOUND
- SB6 REB13
- EQ CAT CHECK ALLOCATION TRIGGER
- * CHECK FOR NEXT BUFFER AVAILABLE FOR RESPONSE.
- REB18 SA1 REBA GET FUNCTION FLAG
- NZ X1,LBMX IF *REN* FUNCTION
- SA1 BCNT GET ORIGINAL LTRK
- SA2 OLSC GET ORIGINAL LSEC
- BX6 X1
- BX7 X2
- SA6 LTRK
- SA7 LSEC
- SX6 B1 SET BUFFER COUNT TO ALLOCATE
- SA6 A1
- SA6 DTSF SET DATA STREAMING FLAG
- EQ RDB USE READ FUNCTION CODE
- REBA CON 0 *REN* FUNCTION FLAG
- REN SPACE 4,10
- ** REN - RELEASE READ BUFFER.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT CONTROL GIVEN TO *REB*.
- *
- * USES A - 7.
- * X - 7.
- REN BSS 0 ENTRY
- SX7 1 INDICATE *REN* FUNCTION
- EQ REB1 USE *REB* CODE
- RFB SPACE 4,10
- ** RFB - RELEASE AND FLUSH BUFFER.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT TO *FLB1*.
- *
- * USES A - 2.
- * X - 0, 2.
- RFB BSS 0 ENTRY
- SA2 BIDX GET BUFFER INDEX
- BX6 X2
- LX2 CBTLS
- SA6 INLB INTERLOCK BUFFER
- NZ X2,FLB1 IF BUFFER INDEX
- EQ /PROGRAM/HNG HANG CALLER
- RWB SPACE 4,15
- ** RWB - REWRITE BUFFER.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT CONTROL GIVEN TO LBMX.
- *
- * USES A - 1, 6.
- * X - 1, 6.
- *
- * CALLS WTB.
- RWB BSS 0 ENTRY
- SA1 LSEC FORCE PREREAD
- SX6 X1+1
- SA6 OLSC
- MX6 -1 BYPASS CHECK OF I/O ACTIVE COUNT
- SA6 BCNT
- * EQ WTB USE *WTB* FUNCTION
- WTB SPACE 4,15
- ** WTB - WRITE BUFFER.
- *
- * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
- *
- * EXIT CONTROL GIVEN TO LBMX.
- *
- * USES A - 1, 2, 3, 4, 6, 7.
- * B - 6.
- * X - 0, 1, 2, 3, 4, 6, 7.
- *
- * CALLS ANB, CSD, CHA, CHT, DCC, SBB, SRC, SRP.
- WTB BSS 0 ENTRY
- SA1 ANBA GET DATA WRITTEN THRESHOLD
- TX7 MDWB GET UPPER LIMIT
- SX6 X1+B1 UPDATE THRESHOLD FOR WRITE
- IX7 X6-X7
- PL X7,WTB1 IF AT UPPER LIMIT
- SA6 A1+ SAVE NEW THRESHOLD
- WTB1 SX7 0 CLEAR PUSH STACK
- TX6 WRTB SET WRITE AS CURRENT LIST
- SA6 CLST
- WTB2 SB6 WTB3 *CHA* RETURN ADDRESS
- TEQ (/BUFIO/CSD1,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
- WTB3 ZR X2,WTB12 IF FIRST ACCESS
- NG X2,WTB17 IF BUFFER CANNOT BE ACCESSED OR ALLOCATED
- ZR X0,WTB9 IF CONTROL BUFFER NOT FOUND
- SX6 X0+ BUFFER ORDINAL
- SA6 INLB SET CONTROL BUFFER INTERLOCK
- LX6 CBTLS
- TA2 X6+LSLK,CBT
- MX3 12
- BX3 X3*X2
- NZ X3,SBB IF READ OR WRITE BUFFER
- TA2 X6+IOLK,CBT
- NG X2,WTB8 IF I/O INTERLOCK SET
- SX7 X0+ SAVE BUFFER ORDINAL
- SA7 FCBI
- SB6 WTB4 RETURN ADDRESS FOR ROUTINE *DCC*
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- WTB4 SB6 WTB6 LINK TO WRITE LIST
- TX1 WRTB
- EQ LCC LINK CONTROL BUFFER
- WTB6 BX1 X0 GET ADDRESS OF CONTROL BUFFER
- LX1 CBTLS
- TA2 X1+IOLK,CBT SET WRITE DATA ACCESS FLAG
- MX3 12 CLEAR OLD ACCESS FLAGS
- BX2 -X3*X2
- MX3 1
- LX3 57-59
- BX6 X2+X3
- SA6 A2
- TA2 X1+LSLK,CBT SET WRITE INTERLOCK
- MX3 12
- BX2 -X3*X2
- MX3 1
- BX6 X2+X3
- SA6 A2
- EQ LBMX EXIT
- WTB8 SA3 OPAR
- TA2 X6+LSLK,CBT CHECK RECALL CONTROL
- NZ X3,SBB IF RECALL NOT ALLOWED
- MX3 -24
- BX3 -X3*X2
- NZ X3,SBB IF RECALL CONTROL SET
- BX6 X0
- SA6 FCBI
- SA1 RPRM GET RECALL PARAMETER
- SX6 B1+B1
- LX6 24
- BX6 X6+X1
- LX6 12
- BX6 X6+X0
- TA6 IORQ
- XJ SET RECALL CONTROL
- NZ X6,SRR IF FUNCTION ACCEPTED
- EQ SBB SET BUFFER BUSY RESPONSE
- * CHECK FOR AMOUNT OF ACTIVITY ON DEVICE.
- WTB9 SA2 MSTA CHECK DEVICE ACTIVITY
- SA2 X2+DALL
- SX3 77B
- LX2 12
- BX4 X3*X2
- SX2 X4-DACL
- NG X2,WTB12 IF DEVICE ACTIVITY OKAY
- TX3 A5-1,-SP
- ZR X3,WTB10 IF PSEUDO PP CALL
- SA2 A5+B1
- LX2 59-4
- NG X2,WTB12 IF *1MV* CALL
- WTB10 SA4 BCNT
- PL X4,SBB IF NOT CALLED BY *RWB*
- * ALLOCATE A BUFFER FOR WRITE.
- WTB12 SB6 WTB13 RETURN ADDRESS FOR ROUTINE *ANB*
- EQ ANB ALLOCATE NEXT BUFFER
- WTB13 ZR X0,SBB IF BUFFER NOT AVAILABLE
- SX6 X0+ SAVE BUFFER ORDINAL FOR RESPONSE
- SA6 FCBI
- SA2 LSEC CHECK FOR I/O ON 4K BOUNDARY
- SA3 OLSC
- IX3 X3-X2
- ZR X3,WTB6 IF ON FIRST PRU OF BUFFER
- SB6 WTB14 RETURN ADDRESS FOR ROUTINE *DCC*
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- WTB14 SB6 WTB15 LINK TO READ LIST
- TX1 DRDB
- EQ LCC LINK CONTROL BUFFER
- WTB15 SB6 WTB16 RETURN ADDRESS FOR ROUTINE *SRC*
- EQ SRC SET RECALL CONTROL
- WTB16 SX6 X0+ INITIATE I/O ON BUFFER
- TA6 IORQ
- XJ
- EQ SRR SET RECALL REPLY
- WTB17 SX6 X2+2
- ZR X6,SBB IF SHARED DEVICE BUFFER CANNOT BE ACCESSED
- SX6 B1 SET TO COUNT HASH TABLE FULL
- SB6 SBB EXIT TO SET BUFFER BUSY
- LX6 24
- EQ CHT UPDATE COUNTERS
- ANB TITLE SUBROUTINES.
- ANB SPACE 4,20
- ** ANB - ALLOCATE NEXT BUFFER.
- *
- * ENTRY (X7) = BUFFERS ALLOCATED STACK.
- * (B6) = RETURN ADDRESS.
- * (B3) = SCRATCH AREA *SCRC* ADDRESS.
- * (CHEA) = CURRENT HASH ENTRY ADDRESS.
- * (CLST) = ADDRESS OF CURRENT LIST CONTROL WORD.
- * (SFRF) = SYSTEM FILE READ FLAG.
- *
- * EXIT (X0) = CONTROL BUFFER INDEX ALLOCATED.
- * = 0 IF NO BUFFER AVAILABLE.
- * ALLOCATED CONTROL BUFFER WILL CONTAIN
- * CORRECT PARAMETERS FOR THE REQUEST.
- *
- * USES A - 1, 2, 3, 4, 6.
- * B - 3, 6.
- * X - 0, 1, 2, 3, 4, 5, 6.
- *
- * CALLS CLP, DCC, DCH, LCC, LCH.
- ANB BSS 0 ENTRY
- SA2 PUTO PUT ORDINAL
- BX0 X0-X0 PRESET NO BUFFER FOUND
- LX2 PUTLS
- TA2 X2+UNCT,PUT READ *PUT*
- MX5 6
- SA1 A2+B1
- ERRNZ UNCT+1-HSCT CODE DEPENDS ON VALUE
- MX4 -4
- LX2 -24-8
- BX6 X5*X1 PHYSICAL SECTORS PER I/O BUFFER
- BX3 -X4*X2
- LX6 6
- LX2 59-58+32
- SA6 ANBD
- NZ X3,/MONITOR/RB6 IF TOO MANY REQUESTS ON UNIT
- PL X2,ANB1 IF *RW* FLAG NOT SET
- LX1 59-12-8
- ERRNZ RCTH-400B VALUE MUST BE 400B
- NG X1,/MONITOR/RB6 IF TOO MANY REQUESTS PROCESSED
- ANB1 SX6 B6 SAVE (B6)
- SA6 B3
- SA6 ANBA+1 SET DATA WRITTEN NOT SKIPPED
- SB3 B3+1
- TB6 EMTB INITIALIZE LIST INDEX
- ANB2 SA1 B6 GET LIST BASE WORD
- SX0 X1 GET FIRST CONTROL BUFFER ON LIST
- ZR X0,ANB20 IF LIST IS EMPTY
- ANB3 BX6 X0 SET CONTROL BUFFER INTERLOCK
- SA6 INLB
- LX6 CBTLS
- TA2 X6+LSLK,CBT GET LIST LINK WORD
- MX5 12 GET ACCESS COUNT
- BX4 X5*X2
- NZ X4,ANB19 IF ACCESS COUNT NOT ZERO
- SA4 A2-LSLK+IOLK GET ACCESS FLAGS WORD
- NG X4,ANB19 IF I/O INTERLOCK FLAG IS SET
- LX4 59-57
- PL X4,ANB7 IF NOT WRITE DATA
- * AVOID FLUSH TO DOWN DEVICE.
- SA4 A2+FSTC-LSLK GET EST ORDINAL FROM CONTROL BUFFER
- BX6 X5*X4
- LX6 -48
- CX4 X6,EST CONVERT EST ORDINAL TO OFFSET
- SX6 B1
- TA4 X4+EQDE,EST
- LX4 59-49
- LX3 X4,B1
- PL X4,ANB4 IF DEVICE NOT DOWN
- NG X3,ANB19 IF DEVICE IS DOWN
- * WRITE BUFFER FOUND, FLUSH TO DISK.
- ANB4 TA2 WRTBC,IBST COUNT WRITE BUFFER REALLOCATED (FLUSHED)
- IX6 X2+X6
- SA6 A2
- SX6 X0+
- TA6 IORQ
- XJ
- SB6 ANB5 RETURN ADDRESS FOR ROUTINE *DCC*
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- ANB5 SB6 ANB6 LINK TO DATA WRITTEN LIST
- TX1 DWTB
- EQ LCC LINK CONTROL BUFFER
- ANB6 SX0 B0+ CLEAR BUFFER FOUND
- SA1 ANBA+1
- NZ X1,ANBX IF DATA WRITTEN LIST PROCESSED
- TB6 DWTB DATA WRITTEN LIST WAS SKIPPED INITIALLY
- EQ ANB2 PROCESS DATA WRITTEN LIST
- * UPDATE CONTROL BUFFER FOR NEW REQUEST.
- ANB7 TX2 B6-1,-BLMB INCREMENT SELECTED LIST
- TA2 X2,IBST
- SX6 1
- IX6 X2+X6
- SA6 A2
- SB6 ANB8 RETURN ADDRESS FOR ROUTINE *DCC*
- EQ DCC DELINK CONTROL BUFFER FROM BUFFER LIST
- ANB8 SB6 ANB9 RETURN ADDRESS FOR ROUTINE *DCH*
- EQ DCH DELINK CONTROL BUFFER FROM HASH LINK
- ANB9 SA3 CHEA
- SA2 LSEC GET CURRENT LOGICAL SECTOR
- SA1 X3
- BX5 X1
- NZ X5,ANB11 IF NOT FIRST ENTRY
- SA3 LTRK FORM HASH ENTRY
- LX2 24
- BX5 X2
- LX2 12
- BX5 X5+X2
- LX3 48
- BX6 X5+X3
- SA6 A1+
- EQ ANB14 CREATE NEW HASH ENTRY
- ANB11 MX6 12 CHECK FIRST AND LAST LIMITS
- LX6 36
- BX4 X6*X5
- LX6 12
- BX3 X6*X5
- AX4 24
- AX3 36
- IX6 X4-X2
- PL X6,ANB12 IF LAST LIMIT VALID
- BX4 X2
- EQ ANB13 MODIFY HASH ENTRY
- ANB12 IX6 X2-X3 CHECK FIRST LIMIT
- BX3 X2
- PL X6,ANB14 IF FIRST LIMIT VALID
- ANB13 LX3 36
- LX4 24
- MX6 24
- LX6 48
- BX5 -X6*X5 CLEAR OLD LIMITS
- BX5 X5+X4 ADD NEW LIMITS
- BX6 X5+X3
- SA6 A1
- ANB14 SB6 ANB15 *CLP* RETURN ADDRESS
- EQ CLP CONVERT LOGICAL TO PHYSICAL DISK ADDRESS
- * (X0) = CONTROL BUFFER ORDINAL.
- * (X1) = PHYSICAL CYLINDER NUMBER.
- * (X3) = PHYSICAL UNIT NUMBER.
- * (X4) = 48/, 6/PHYSICAL TRACK, 6/PHYSICAL SECTOR.
- ANB15 BX2 X0 CONTROL BUFFER ORDINAL
- LX2 CBTLS
- LX3 48
- LX1 36
- LX4 24
- BX6 X3+X4
- SA4 LSEC BUILD LOGICAL NEXT SECTOR IN BUFFER
- SX3 LSLB/4
- IX5 X3+X4
- BX6 X6+X1
- BX6 X5+X6
- TA6 X2+PAD1,CBT
- SA2 ANBD PHYSICAL SECTORS PER I/O BUFFER
- MX5 -1
- AX2 1
- BX5 -X5*X2 SECTOR INCREMENT - SECTOR SIZE .EQ. 8K
- AX2 1 SECTOR INCREMENT - SECTORS SIZES .LT. 8K
- LX5 24
- LX2 24
- BX2 X2+X3 MERGE LOGICAL SECTOR INCREMENT
- ERRNZ PSLB-4 CODE PRESETS SECTOR CONTROL WORD WORDS
- IX6 X6+X2 *PAD2*
- SA6 A6+B1
- ERRNZ PAD2-PAD1-1 CODE DEPENDS ON VALUE
- IX6 X6+X2 *PAD3*
- IX6 X6+X5 INCREMENT FOR 8K SECTORS
- SA6 A6+B1
- ERRNZ PAD3-PAD2-1 CODE DEPENDS ON VALUE
- IX6 X6+X2 *PAD4*
- AX6 12 SET NO LINK IN LAST CONTROL WORD
- LX6 12
- SA6 A6+B1
- ERRNZ PAD4-PAD3-1 CODE DEPENDS ON VALUE
- SA1 FNTA BUILD PSEUDO-*FST*
- SX5 B1
- IX1 X1+X5
- ERX1 X1
- SA2 LTRK
- MX3 24
- BX6 X1*X3 EQUIPMENT
- LX2 24
- LX4 12
- BX6 X6+X2 LOGICAL TRACK
- BX6 X6+X4 LOGICAL SECTOR
- SA6 A6+B1 SET *FST* IN CONTROL BUFFER
- ERRNZ FSTC-PAD4-1 INDEXES MUST BE CONSECUTIVE
- SA2 SFRF SET/CLEAR SYSTEM FILE READ FLAG
- BX1 X0
- BX6 X2
- LX1 CBTLS
- MX3 -48
- SA2 A6+B1
- ERRNZ IOLK-FSTC-1 CODE DEPENDS ON VALUE
- SA4 A2+B1
- ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
- BX2 -X3*X2
- BX6 X6+X2
- SA1 CLST LINK TO CURRENT LIST
- SB6 ANB18
- SA6 A2
- BX5 -X3*X4 CLEAR ERROR DATA
- SA3 CHAN
- SA2 CHRV
- TX4 A5-1,-SP
- ZR X4,ANB16 IF PSEUDO PP
- SA2 A5+1
- ANB16 LX2 59-4
- PL X2,ANB17 IF CHANNEL NOT SELECTED BY CALLER
- LX3 54
- SA2 A4-HSLK+PAD4
- BX6 X2+X3 MERGE CHANNEL INTO *PAD4*
- SA6 A2
- SX4 B1+
- LX4 58
- BX5 X4+X5 MERGE CHANNEL SELECTION FLAG INTO *HSLK*
- ANB17 BX6 X5
- SA6 A4
- EQ LCC LINK CONTROL BUFFER
- ANB18 SA2 B3-B1 RESTORE (B6)
- SB3 B3-B1
- SA1 CHEA
- SB6 X2
- EQ LCH LINK CONTROL BUFFER TO HASH CHAIN
- * GET NEXT CONTROL BUFFER ON THREAD.
- ANB19 BX1 X0 GET CONTROL BUFFER ADDRESS
- LX1 CBTLS
- TA2 X1+LSLK,CBT READ LIST LINK WORD
- MX3 -12 GET FORWARD LINK
- AX2 24
- BX0 -X3*X2
- NZ X0,ANB3 IF ANOTHER BUFFER TO CHECK
- TX1 B6,-DWTB
- NZ X1,ANB20 IF NOT PROCESSING DATA WRITTEN LIST
- SA1 ANBA+1
- ZR X1,ANBX IF DATA WRITTEN SKIPPED INITIALLY
- * CHECK NEXT LIST.
- ANB20 SB6 B6+1 UPDATE LIST INDEX
- TX6 B6,-DWTB
- NZ X6,ANB22 IF NOT DATA WRITTEN LIST
- * IF A BUFFER IS ACCESSED, BUT NOT RELEASED/FLUSHED IT CAN
- * STAY ON THE READ OR WRITE LIST INDEFINITELY UNLESS THERE IS
- * REGULAR ALLOCATION FROM BOTH LISTS. THE FOLLOWING LOGIC
- * WILL CAUSE THE OLDEST BUFFER TO BE ALLOCATED IF IT STAYS THE
- * OLDEST FOR AN EXTENDED PERIOD OF TIME.
- SA1 RTCL CURRENT TIME - TIME LAST CHECKED
- SA2 ANBB
- MX5 -36
- BX1 -X5*X1
- IX2 X1-X2
- SX6 3000D CHECK EVERY THREE SECONDS
- IX5 X2-X6
- BX6 X1
- NG X5,ANB21 IF TIME NOT ELAPSED
- SA6 A2 SET NEW TIME
- SA1 B6+B1 CHECK READ LIST
- ERRNZ DRDP-DWTP-1 CODE DEPENDS ON VALUE
- SA2 ANBC
- BX4 X1-X2
- SX5 X1
- SX4 X4
- SB6 A1+ SET READ LIST
- ZR X4,ANB2 IF SAME BUFFER, ALLOCATE FROM READ LIST
- SA1 A1+B1 CHECK WRITE LIST
- ERRNZ DRDP-DWTP-1 CODE DEPENDS ON VALUE
- AX2 18
- BX4 X1-X2
- SX1 X1
- SB6 A1+
- LX1 18 SAVE FIRST BUFFERS ON READ AND WRITE LIST
- SX4 X4+
- BX6 X1+X5
- SA6 A2
- NZ X4,ANB21 IF NOT SAME BUFFER ON WRITE LIST
- AX1 18-CBTLS
- TA2 X1+LSLK,CBT
- MX5 12
- BX6 X5*X2
- NZ X6,ANB21 IF BUFFER IN USE
- SA2 A2+IOLK-LSLK
- NG X2,ANB21 IF I/O INTERLOCK
- SA6 ANBA+1 SET DATA WRITTEN SKIPPED FLAG
- EQ ANB2 FLUSH BUFFER
- ANB21 TA1 DWTB
- BX6 X6-X6
- SB6 A1
- SA2 ANBA GET DATA WRITTEN THRESHOLD
- AX1 36
- IX1 X2-X1
- NG X1,ANB2 IF COUNT .GT. THRESHOLD
- SB6 B6+B1 SKIP DATA WRITTEN LIST
- SA6 A2+B1 SET SKIPPED FLAG
- ANB22 TX1 B6,-WRTB
- PL X1,ANBX IF ALL LISTS HAVE BEEN CHECKED
- TA1 DRDB GET READ COUNT
- TA2 WRTB GET WRITE COUNT
- AX1 36
- AX2 36
- IX1 X1-X2
- NG X1,ANB23 IF WRITE LIST LARGER
- TB6 DRDB
- EQ ANB2 CHECK READ LIST
- ANB23 TB6 WRTB
- EQ ANB2 CHECK WRITE LIST
- * EXIT ALLOCATE BUFFER ROUTINE.
- ANBX SA2 B3-1 RESTORE (B6)
- SB3 B3-B1
- SB6 X2
- JP B6 RETURN
- ANBA CON DWLT DATA WRITTEN LIST TRESHOLD
- CON 0 0 = DATA WRITTEN LIST SKIPPED
- ANBB CON 0 TIME OF LAST FIRST BUFFER CHECK
- ANBC CON 0 24/,18/ WRITE BUFFER,18/ READ BUFFER
- ANBD CON 0 PHYSICAL SECTORS PER I/O BUFFER
- CAT SPACE 4,15
- ** CAT - CHECK READ BUFFER ALLOCATION TRIGGER.
- *
- * ENTRY (X0) = CONTROL BUFFER ORDINAL.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT READ-AHEAD TRIGGER FLAG SET IN CBT IF THRESHOLD
- * REACHED.
- * (X6) = READ BUFFER COUNT DECREMENTED.
- * (X7) = BUFFER ORDINAL.
- *
- * USES A - 2, 3, 6, 7.
- * X - 0, 2, 3, 4, 6, 7.
- CAT BSS 0 ENTRY
- SA3 RBCT READ BUFFER COUNT
- SA2 DBAT
- BX7 X0 SET BUFFER ORDINAL
- IX2 X2+X3
- NZ X2,CAT1 IF NOT TRIGGER BUFFER
- SX4 1
- LX0 CBTLS *CBT* INDEX
- LX4 58-0
- + TA2 X0+IOLK,CBT **** PERFORM IN ONE WORD ****
- BX6 X2+X4 **** PERFORM IN ONE WORD ****
- SA6 A2 **** PERFORM IN ONE WORD ****
- CAT1 SX6 X3+B1 DECREMENT BUFFER COUNT
- SA6 A3
- JP B6 RETURN
- CHT SPACE 4,10
- ** CHT - COUNT HASH TABLE EVICTS AND FULLS.
- *
- * ENTRY (X6) = INCREMENT OF ONE POSITIONED FOR UPDATE.
- * (B6) = EXIT ADDRESS.
- *
- * EXIT PUT UPDATED IF COUNT .LT. 2048.
- *
- * USES A - 1, 6.
- * X - 1, 3, 6.
- CHT BSS 0 ENTRY
- SA1 PUTO
- LX6 11 POSITION INCREMENT TO CHECK OVERFLOW
- LX1 PUTLS
- TA1 X1+ACRJ,PUT CHECK FOR OVERFLOW
- BX3 X6*X1
- LX6 -11
- NZ X3,CHT1 IF COUNTER FULL
- IX6 X1+X6
- SA6 A1
- CHT1 JP B6 RETURN
- CHA SPACE 4,40
- ** CHA - CALCULATE HASH ADDRESS.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- * (X7) = 0 IF BUFFER TO BE INTERLOCKED OR ALLOCATED AND
- * NO BUFFERS ARE ALREADY ALLOCATED.
- * (X7) .GT. 0 IF BUFFER TO BE INTERLOCKED OR ALLOCATED
- * AND BUFFERS ARE ALREADY ALLOCATED.
- * (X7) .LT. 0 IF TO LOCATE HASH TABLE ENTRY ONLY.
- * (MSTA) = *MST* ADDRESS.
- * (LTRK) = LOGICAL TRACK.
- * (LSEC) = LOGICAL SECTOR NUMBER.
- *
- * EXIT (X2) = 0 FIRST ACCESS.
- * .GT. 0 IF ENTRY FOUND.
- * = -1 IF HASH TABLE FULL.
- * (X1) = HASH ENTRY ADDRESS.
- * = 0 IF HASH TABLE BUSY.
- * (X0) = CONTROL BUFFER INDEX.
- * = 0 IF BUFFER NOT FOUND.
- * NOTE - (X0) VALID ONLY IF (X2) .GT. 0.
- * (CHEA) = HASH ENTRY ADDRESS.
- * (HTA) = HASH TABLE ADDRESS.
- * (PUTO) = 24/SUSL, 18/RLSN, 18/PUTO
- * SUSL = SINGLE UNIT SECTOR LIMIT.
- * RLSN = RELATIVE SECTOR NUMBER IN UNIT.
- * (R(LS/SL))
- * PUTO = *PUT* ORDINAL.
- *
- * TO *LBMXS* IF ADDRESS ERROR OR INACCESSIBLE DEVICE.
- *
- * USES A - 1, 2, 3, 4, 6.
- * B - 5, 6.
- * X - 0, 1, 2, 3, 4, 5, 6.
- *
- * CALLS CDA, DCC, DCH, LCC.
- *
- * NOTE HASH ENTRY FORMAT.
- * 12/TRK, 12/FLS, 12/LLS, 12/0, 12/BI.
- * TRK = LOGICAL TRACK.
- * FLS = FIRST LOGICAL SECTOR PRESENT.
- * LLS = LAST LOGICAL SECTOR PRESENT.
- * BI = FIRST CONTROL BUFFER ON HASH CHAIN.
- *
- * HASH ALGORITHM.
- *
- * LCMA = HTA + ( HTM .AND. ( LT * LCC ))
- *
- * LCMA = ADDRESS IN I/O BUFFER OF FIRST ENTRY.
- * HTA = HASH TABLE BASE ADDRESS.
- * HTM = HASH TABLE MASK FROM THE MST.
- * LT = LOGICAL TRACK ADDRESS.
- * LLC = SUBLIST LENGTH FOR HASH TABLE SEARCH.
- *
- * HASH CHAINS ARE BUILT BACKWARDS (HIGHEST LOGICAL SECTOR
- * NUMBERS AT THE BEGINNING OF THE CHAIN) SO THAT SEQUENTIAL
- * ACCESSES DO NOT HAVE TO CHAIN TO THE END TO ADD NEW
- * BUFFERS.
- CHA26 MX6 1 SET *ADDRESS ERROR* STATUS
- LX6 55-59
- EQ LBMXS EXIT WITH ERROR
- CHA BSS 0 ENTRY
- MX5 -12
- NG X7,CHA1 IF LOCATE ENTRY ONLY
- SB5 CHA1 SET *CDA* EXIT ADDRESS
- EQ CDA CHECK DEVICE ACCESSIBILITY
- CHA1 SA1 MSTA MST ADDRESS
- SA4 X1+DILL FETCH *PUT* ORDINAL OF FIRST UNIT
- SA2 A4-DILL+MDGL FETCH SINGLE UNIT SECTOR LIMIT
- AX4 24
- BX6 -X5*X4 *PUT* ORDINAL
- AX2 36
- BX2 -X5*X2 SINGLE UNIT SECTOR LIMIT
- SA3 LSEC LOGICAL SECTOR NUMBER
- CHA1.1 IX3 X3-X2
- NG X3,CHA1.2 IF CORRECT *PUT* ENTRY FOUND
- LX6 PUTLS
- TA1 X6+HSCT,PUT CHECK NEXT *PUT* IN CHAIN
- BX6 -X5*X1 NEXT *PUT* ORDINAL
- ZR X6,CHA26 IF LOGICAL SECTOR TOO LARGE
- EQ CHA1.1 CHECK NEXT *PUT* ENTRY
- CHA1.2 IX3 X3+X2 R(LS/SL) = RLSN
- LX3 18
- LX2 36
- BX6 X6+X3
- BX6 X6+X2
- SA6 PUTO SET PUTO = 24/SUSL, 18/RLSN, 18/PUTO
- LX6 PUTLS FETCH HASH TABLE PARAMETERS
- TA1 X6+HSCT,PUT
- SA3 LTRK LOGICAL TRACK
- MX6 -18
- AX1 24
- BX6 -X6*X1 BASE HASH TABLE ADDRESS
- AX4 12
- BX4 -X5*X4 EST ORDINAL
- CX2 X4,EST CONVERT EST ORDINAL TO OFFSET
- TA4 X2+EQAE,EST GET PARTITION NUMBER FROM EST
- MX2 -4
- LX4 -18
- BX0 -X2*X4
- SX4 HATLE COMPUTE HASH TABLE PARTITION OFFSET
- IX2 X0*X4
- IX6 X6+X2
- SA6 HTA SET HASH TABLE ADDRESS
- AX1 18
- MX4 -9
- BX4 -X4*X1 HASH TABLE MASK
- ERRNZ LLCV-4 CODE DEPENDS ON VALUE
- LX3 2
- BX3 X3*X4
- IX5 X3+X6
- BX6 X5
- SB5 LLCV
- SX0 B0 CLEAR EMPTY HASH ENTRY FLAG
- * SEARCH HASH ENTRIES FOR DATA MATCH.
- CHA1.3 SA1 X5 READ NEXT HASH ENTRY
- ZR X1,CHA5 IF HASH ENTRY IS EMPTY
- MX3 12
- SA2 LTRK CHECK FOR TRACK MATCH
- BX4 X3*X1
- LX4 12
- IX4 X4-X2
- NZ X4,CHA6 IF WRONG TRACK
- LX3 -24
- SA2 LSEC GET REQUESTED LOGICAL SECTOR
- BX4 X3*X1
- AX4 24
- IX4 X4-X2
- NG X4,CHA4.1 IF OUR DATA NOT IN THIS HASH ENTRY
- LX3 12
- BX4 X3*X1
- AX4 36
- IX4 X2-X4
- MX3 -12
- NG X4,CHA4.1 IF OUR DATA NOT IN THIS HASH ENTRY
- * SEARCH CONTROL BUFFERS LINKED TO THIS ENTRY
- * FOR A MATCH WITH THE REQUESTED DATA.
- BX0 -X3*X1 GET CONTROL BUFFER INDEX
- CHA2 BX6 X0
- LX6 CBTLS
- TA4 X6+FSTC,CBT
- AX4 12
- BX4 -X3*X4 ACTUAL SECTOR
- TA1 X6+HSLK,CBT
- IX6 X2-X4
- NG X6,CHA4 IF OUR DATA BEFORE THIS BUFFER
- SA2 A5+B1
- NZ X6,CHA4.1 IF OUR DATA BEYOND THIS BUFFER
- TX4 A5-1,-SP
- BX6 X6-X6
- LX2 59-4
- ZR X4,CHA3 IF PSEUDO PP
- SA4 NCHV
- NZ X4,CHA3 IF NO *CHRV* DATA PRESENT
- PL X2,CHA3 IF NOT DEVICE VERIFICATION CALL
- MX6 -48
- PX4 B0 DEVICE VERIFICATION FLAG
- SA2 CHAN CHANNEL SELECTED BY *1MV*
- BX6 -X6*X1 CLEAR *HSLK* BYTE 0
- BX6 X4+X6 SET DEVICE VERIFICATION FLAG
- SA6 A1+ UPDATE *HSLK*
- SA4 A1-HSLK+PAD4
- MX6 -54
- LX2 54 POSITION CHANNEL
- BX4 -X6*X4 CLEAR CHANNEL FIELD IN *PAD4*
- BX6 X4+X2 MERGE CHANNEL INTO *PAD4*
- SA6 A4+ UPDATE *PAD4*
- SA2 A5+
- LX2 59-42
- BX6 X6-X6
- NG X2,CHA11 IF READ OPERATION
- CHA3 NG X7,CHA4.2 IF LOCATE ENTRY ONLY
- NG X1,CHA11 IF I/O ERROR, EVICT HASH ENTRY
- EQ CHA4.2 SET UP EXIT CONDITIONS
- CHA4 AX1 24
- BX0 -X3*X1 GET FORWARD LINK
- NZ X0,CHA2 IF NOT END OF HASH CHAIN
- CHA4.1 SX0 B0+
- CHA4.2 BX1 X5
- SX2 B1
- EQ CHA24 SAVE HASH ADDRESS AND EXIT
- CHA5 NZ X0,CHA6 IF PREVIOUS EMPTY ENTRY FOUND
- BX0 X5
- CHA6 SX4 B1+ UPDATE HASH ENTRY ADDRESS
- IX5 X5+X4
- SB5 B5-B1
- NZ B5,CHA1.3 IF NOT END OF LIST CONTROL
- SB5 B6+
- NG X7,CHA22 IF LOCATE ENTRY ONLY
- NZ X0,CHA23 IF EMPTY ENTRY FOUND
- NZ X7,CHA22 IF BUFFERS ALLOCATED
- * FIND A HASH ENTRY THAT HAS NO I/O ACTIVITY OR WRITE DATA.
- * IF ONE IS FOUND, EVICT IT AND RETURN FIRST ENTRY STATUS.
- * OTHERWISE SAVE STATUS OF I/O ACTIVITY AND COUNT OF CONTROL
- * BUFFERS ON EACH HASH ENTRY IN TABLE *CETS*.
- BX5 X6 RESET HASH ADDRESS
- SB5 LLCV+1 RESET LIST LENGTH
- BX6 X6-X6 ZERO BUFFER COUNT TABLE
- CHA7 SA6 B5+CETS-1
- SB5 B5-1
- NZ B5,CHA7 IF PRESET NOT COMPLETE
- SB5 LLCV RESET LIST LENGTH
- CHA8 SA1 X5 READ NEXT HASH ENTRY
- MX3 -12
- BX6 X6-X6
- BX0 -X3*X1
- CHA9 BX2 X6 UPDATE BUFFER COUNT
- SA1 B5+CETS-1
- SX6 X1+B1
- SA6 A1
- BX6 X2
- BX1 X0 GET ACCESS FLAGS
- LX1 CBTLS
- TA2 X1+IOLK,CBT
- NG X2,CHA18 IF I/O INTERLOCK
- LX2 59-57
- PL X2,CHA10 IF READ BUFFER
- SX6 B1 SET WRITE BUFFER FLAG
- CHA10 SA2 A2+B1
- ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
- MX3 12 GET FORWARD LINK
- LX2 24
- BX0 X3*X2
- LX0 12
- SA2 A2+LSLK-HSLK
- BX2 X3*X2
- NZ X2,CHA18 IF NOT ZERO ACCESS COUNT
- NZ X0,CHA9 IF ANOTHER BUFFER ON THREAD
- NZ X6,CHA19 IF NOT ALL BUFFERS WERE READ
- SX6 B1 SET EVICTED READ HASH STATUS
- LX6 48
- * EVICT THE HASH TABLE ENTRY POINTED TO BY (X5).
- CHA11 SB5 B6 SAVE B6
- SA2 X5 READ HASH ENTRY
- SA6 CSBS
- CHA12 MX3 -12
- BX0 -X3*X2 GET INDEX
- SX6 X0+ SET CBT INTERLOCK
- SA6 INLB
- LX6 CBTLS
- TA2 X6+HSLK,CBT GET FORWARD HASH LINK
- LX2 -24
- BX6 -X3*X2
- SA6 CAFL
- ERRNZ LSLK-HSLK-1 CODE DEPENDS ON VALUE
- SA1 A2+B1
- LX2 24 REPOSITION *HSLK*
- MX6 12
- BX6 X6*X1
- NZ X6,CHA22 IF ACCESS COUNT NON-ZERO
- SA1 A2-B1
- ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
- BX6 X5
- SA6 CHAD
- BX6 X0
- NG X1,CHA17 IF I/O INTERLOCK SET
- LX1 59-57
- PL X1,CHA14 IF READ BUFFER
- TA6 IORQ INITIATE I/O
- XJ
- SB6 CHA13 *DCC* RETURN ADDRESS
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- CHA13 SB6 CHA17 *LCC* RETURN ADDRESS
- TX1 DWTB
- EQ LCC LINK CONTROL BUFFER
- CHA14 SB6 CHA15 *DCC* RETURN ADDRESS
- EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
- CHA15 SB6 CHA16 *DCH* RETURN ADDRESS
- EQ DCH DELINK CONTROL BUFFER FROM HASH LINK
- CHA16 SB6 CHA17 *LCC* RETURN ADDRESS
- TX1 EMTB
- EQ LCC LINK CONTROL BUFFER
- CHA17 SA3 CHAD GET HASH ADDRESS
- SA2 CAFL GET FORWARD LINK
- BX5 X3
- NZ X2,CHA12 IF ANOTHER BUFFER TO EVICT
- SA2 X5
- SB6 B5+ RESTORE B6
- NZ X2,CHA22 IF ALL BUFFERS NOT EVICTED
- SA4 CSBS
- BX6 X4
- SX0 X5
- SB6 CHA23 SET *CHT* EXIT ADDRESS
- EQ CHT UPDATE STATISTICS
- CHA18 MX6 59 SET I/O ACTIVE FLAG
- SA6 CETS+LLCV
- CHA19 SX1 1 UPDATE HASH ADDRESS
- IX5 X5+X1
- SB5 B5-B1
- NZ B5,CHA8 IF NOT END OF LIST CONTROL
- SA1 CETS+LLCV
- NG X1,CHA22 IF I/O ACTIVE
- * EVICT THE HASH ENTRY WITH THE SMALLEST BUFFER COUNT.
- SB5 LLCV RESET LIST LENGTH
- SX3 B0+ PRESET INDEX AND MINIMUM VALUE
- SX2 LSLB*100B
- CHA20 SA1 X3+CETS
- IX4 X1-X2
- PL X4,CHA21 IF THIS ENTRY NOT SMALLER
- BX6 X3 SAVE NEW INDEX
- BX2 X1 SAVE NEW VALUE
- CHA21 SB5 B5-B1
- SX3 X3+B1
- NZ B5,CHA20 IF TABLE NOT SEARCHED
- SX6 X6-LLCV ADJUST HASH ENTRY ADDRESS IN X5
- IX5 X5+X6
- SX6 B1 SET EVICTED WRITE HASH STATUS
- LX6 36
- EQ CHA11 EVICT WRITE ENTRY
- CHA22 SX2 -B1 SET BUFFER BUSY STATUS
- SX1 B0
- EQ CHA24 PROCESS RESPONSE
- CHA23 SB6 B5 RESTORE (B6)
- BX1 X0 SET FIRST ACCESS STATUS
- SX2 B0+
- CHA24 SX6 X1+ SAVE HASH ENTRY ADDRESS
- SA6 CHEA
- JP B6 EXIT
- CLP SPACE 4,20
- ** CLP - CONVERT LOGICAL TO PHYSICAL.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- * (AILE) = ALGORITHM INDEX.
- * (LTRK) = LOGICAL TRACK.
- * (PUTO) = 24/SUSL, 18/RLSN, 18/PUTO
- * SUSL = SINGLE UNIT SECTOR LIMIT.
- * RLSN = R(LS/SL).
- * PUTO = *PUT* ORDINAL.
- *
- * EXIT (X0) = CONTROL BUFFER ORDINAL.
- * (X1) = PHYSICAL CYLINDER NUMBER.
- * (X3) = PHYSICAL UNIT NUMBER.
- * (X4) = 48/, 6/PHYSICAL TRACK, 6/PHYSICAL SECTOR.
- *
- * USES A - 1, 2, 3, 4.
- * B - 4, 5.
- * X - 1, 2, 3, 4, 5, 6.
- CLP BSS 0 ENTRY
- SA2 PUTO
- SB5 X2 SAVE *PUT* ORDINAL
- AX2 18
- SX3 X2 R(LS/SL)
- AX2 18 SINGLE UNIT SECTOR LIMIT
- SA1 AILE ALGORITHM INDEX
- SA4 LTRK LOGICAL TRACK
- SB4 X1-AIDB
- MX6 -11
- BX4 -X6*X4
- JP B4+TCLP TRANSFER TO PROCESSOR
- * ENTER PROCESSOR WITH -
- *
- * (B5) = *PUT* ORDINAL.
- * (X2) = SUSL.
- * (X3) = R(LS/SL).
- * (X4) = LT - 4000B.
- ** 885-42 CONVERSION (*DB*).
- *
- * ALGORITHM -
- * SL = 1200B
- * LU = LS/SL
- * X = BIT 0 OF LT
- * PC = BITS 1 - 10 OF LT
- * PT = (X*SL+R(LS/SL))/200B
- * PS = (R(X*SL+R(LS/SL))/200B)/4
- CLP3 LX4 -1 SIGN = BIT 0 OF LT = X
- SX1 X4 SET CYLINDER NUMBER
- AX4 59 SIGN EXTEND BIT 0
- BX4 X4*X2 BIT 0 OF LT * SL
- MX6 -7
- IX4 X4+X3 X*SL+R(LS/SL)
- BX6 -X6*X4
- AX4 7 PT
- ERRNZ LSPTDB-200B CODE DEPENDS ON VALUE
- SX2 B5
- AX6 CFSDB PS
- EQ CLP8 COMPLETE PROCESSING
- ** 895 FULL TRACK CONVERSION (*DC*).
- *
- * ALGORITHM -
- * SL = 1300B SECTOR LIMIT
- * LU = LS/SL LOGICAL UNIT
- * X = BIT 0 OF LT
- * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
- * PT = (X*SL + R(LS/SL))/140B PHYSICAL TRACK
- * PS = R((X*SL + R(LS/SL))/140B)/40B PHYSICAL SECTOR
- CLP4 SX5 LSPTDC LOGICAL SECTORS PER PHYSICAL TRACK
- SB4 CFSDC
- EQ CLP6 PERFORM CONVERSION
- ** 819 CONVERSION (*DV* AND *DW*).
- *
- * SL = 1440B
- * LU = LS/SL
- * X = BIT 0 OF LT
- * PC = BITS 1 - 10 OF LT
- * PT = (X*SL+R(LS/SL))/240B
- * PS = (R(X*SL)+R(LS/SL))/240B)/10B
- CLP5 SX5 LSPTDV LOGICAL SECTORS PER PHYSICAL TRACK
- SB4 CFSDV
- * PERFORM CONVERSION WITH -
- *
- * (X3) = R(LS/SL).
- * (X4) = LT - 4000B.
- * (X5) = NUMBER OF LOGICAL SECTORS PER PHYSICAL TRACK.
- * (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
- CLP6 LX4 -1 SIGN = BIT 0 OF LT = X
- SX1 X4 SET CYLINDER NUMBER
- AX4 59 SIGN EXTEND BIT 0
- BX4 X4*X2 BIT 0 OF LT * SL
- * CONTINUE CONVERSION WITH -
- *
- * (X1) = PHYSICAL CYLINDER NUMBER.
- * (X3)+(X4) = LOGICAL SECTOR NUMBER WITHIN CYLINDER.
- * (X5) = NUMBER OF LOGICAL SECTORS PER PHYSICAL TRACK.
- * (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
- CLP7 IX3 X4+X3 X*SL+R(LS/SL)
- PX6 X5
- PX4 X3
- NX6 X6
- SX2 B5+0 MOVE *PUT* ORDINAL
- FX4 X4/X6
- UX4,B5 X4
- LX4 X4,B5 PT
- IX6 X4*X5
- IX6 X3-X6
- AX6 B4 PS
- * COMPLETE PROCESSING WITH -
- *
- * (X1) = PHYSICAL CYLINDER (PC).
- * (X4) = PHYSICAL TRACK (PT).
- * (X6) = PHYSICAL SECTOR (PS).
- * (X2) = *PUT* ORDINAL.
- CLP8 LX2 PUTLS
- LX4 6
- TA3 X2+UNCT,PUT FETCH UNIT NUMBER FROM *PUT*
- MX5 -6
- BX4 X6+X4 MERGE PHYSICAL TRACK AND SECTOR
- AX3 48
- BX3 -X5*X3
- JP B6 RETURN
- ** 887 SMALL (4K BYTE) SECTOR CONVERSION (*DF*).
- *
- * ALGORITHM -
- * SL = 1140B
- * LU = LS/SL
- * X = BIT 0 OF LT
- * PC = BITS 1 - 10 OF LT
- * PT = (X*SL+R(LS/SL))/460B
- * PS = (R(X*SL+R(LS/SL))/460B)/10B
- CLP9 SX5 LSPTDF LOGICAL SECTORS PER PHYSICAL TRACK
- SB4 CFSDF
- EQ CLP6 PERFORM CONVERSION
- ** 887 LARGE (16K BYTE) SECTOR CONVERSION (*DH*).
- *
- * ALGORITHM -
- * SL = 1300B
- * LU = LS/SL
- * X = BIT 0 OF LT
- * PC = BITS 1 - 10 OF LT
- * PT = (X*SL+R(LS/SL))/540B
- * PS = (R(X*SL+R(LS/SL))/540B)/40B
- CLP10 SX5 LSPTDH LOGICAL SECTORS PER PHYSICAL TRACK
- SB4 CFSDH
- EQ CLP6 PERFORM CONVERSION
- ** 9853 (XMD) CONVERSION (*DN*).
- *
- * ALGORITHM -
- * SL = 2140B
- * NN = ((LT*SL+LS)/40B)*10B
- * PC = NN/617B
- * PT = (R(NN/617B))/25B
- * PS = R((R(NN/617B))/25B)
- CLP11 SB4 CFSDN
- SX6 PSPTDN*PTCYDN PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTDN
- * EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- * ENTER COMMON ALGORITHM FOR 9853/583X WITH -
- *
- * (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
- * (X2) = SECTOR LIMIT.
- * (X3) = R(LS/SL).
- * (X4) = LT - 4000B.
- * (X5) = NUMBER OF PHYSICAL SECTORS PER PHYSICAL TRACK.
- * (X6) = NUMBER OF PHYSICAL SECTORS PER CYLINDER.
- CLP12 IX1 X4*X2 LT*SL
- IX4 X1+X3 LT*SL+LS
- PX3 X6
- AX4 B4 NN (CONVERT LOGICAL SECTORS TO PHYSICAL)
- NX3 X3
- PX1 X4
- SA2 MSTA
- FX1 X1/X3 NN / PHYSICAL SECTORS PER CYLINDER
- SA3 X2+SCYL GET STARTING CYLINDER
- UX1,B4 X1
- MX2 -12
- LX3 -24
- LX1 B4 RELATIVE PHYSICAL CYLINDER
- BX2 -X2*X3 CYLINDER OFFSET
- IX3 X1*X6
- IX1 X1+X2 ABSOLUTE PHYSICAL CYLINDER
- SB4 B0
- BX3 -X3
- EQ CLP7 CONVERT PT AND PS
- ** 5832 (1X SSD) CONVERSION (*EA*).
- *
- * ALGORITHM -
- * SL = 240B
- * LU = LS/SL
- * NN = (LT*SL+R(LS/SL))/40B
- * PC = NN/14B
- * PT = R(NN/14B)/3
- * PS = R(R(NN/14B)/3)
- CLP13 SB4 CFSEA
- SX6 PSPTEA*PTCYEA PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEA
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5832 (2X SSD) CONVERSION (*EB*).
- *
- * ALGORITHM -
- * SL = 500B
- * LU = LS/SL
- * NN = (LT*SL+R(LS/SL))/40B
- * PC = NN/30B
- * PT = R(NN/30B)/6
- * PS = R(R(NN/30B)/6)
- CLP14 SB4 CFSEB
- SX6 PSPTEB*PTCYEB PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEB
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5833 (1X/1XP SABRE) CONVERSION (*EC/ED*).
- *
- * ALGORITHM -
- * SL = 1740B
- * LU = LS/SL
- * NN = (LT*SL+R(LS/SL))/40B
- * PC = NN/50B
- * PT = R(NN/50B)/6
- * PS = R(R(NN/50B)/6)
- CLP15 SB4 CFSEC
- SX6 PSPTEC*PTCYEC-SPSCEC PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEC
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5833 (2X/2XP SABRE) CONVERSION (*EE/EF*).
- *
- * ALGORITHM -
- * SL = 3600B
- * NN = (LT*SL+LS)/40B
- * PC = NN/113B
- * PT = R(NN/113B)/13B
- * PS = R(R(NN/113B)/13B)
- CLP16 SB4 CFSEE
- SX6 PSPTEE*PTCYEE-SPSCEE PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEE
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5833 (3XP SABRE) CONVERSION (*EM*).
- *
- * ALGORITHM -
- * SL = 2740B
- * NN = (LT*SL+LS)/40B
- * PC = NN/167B
- * PT = R(NN/167B)/21B
- * PS = R(R(NN/167B)/21B)
- CLP17 SB4 CFSEM
- SX6 PSPTEM*PTCYEM-SPSCEM PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEM
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5833 (4X SABRE) CONVERSION (*EN*).
- *
- * ALGORITHM -
- * SL = 3640B
- * LU = LS/SL
- * NN = (LT*SL+R(LS/SL))/40B
- * PC = NN/232B
- * PT = R(NN/232B)/26B
- * PS = R(R(NN/232B)/26B)
- CLP18 SB4 CFSEN
- SX6 PSPTEN*PTCYEN-SPSCEN PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEN
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5838 (1X/1XP ELITE) CONVERSION (*EG/EH*).
- *
- * ALGORITHM -
- * SL = 3240B
- * NN = (LT*SL+LS)/40B
- * PC = NN/51B
- * PT = R(NN/51B)/5B
- * PS = R(R(NN/51B)/5B)
- CLP19 SB4 CFSEG
- SX6 PSPTEG*PTCYEG-SPSCEG PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEG
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5838 (2X/2XP ELITE) CONVERSION (*EI/EJ*).
- *
- * ALGORITHM -
- * SL = 3100B
- * NN = (LT*SL+LS)/40B
- * PC = NN/115B
- * PT = R(NN/115B)/11B
- * PS = R(R(NN/115B)/11B)
- CLP20 SB4 CFSEI
- SX6 PSPTEI*PTCYEI-SPSCEI PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEI
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5838 (3XP ELITE) CONVERSION (*EK*).
- *
- * ALGORITHM -
- * SL = 3240B
- * NN = (LT*SL+LS)/40B
- * PC = NN/172B
- * PT = R(NN/172B)/16B
- * PS = R(R(NN/172B)/16B)
- CLP21 SB4 CFSEK
- SX6 PSPTEK*PTCYEK-SPSCEK PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEK
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 5838 (4X ELITE) CONVERSION (*EL*).
- *
- * ALGORITHM -
- * SL = 3140B
- * NN = (LT*SL+LS)/40B
- * PC = NN/236B
- * PT = R(NN/236B)/22B
- * PS = R(R(NN/236B)/22B)
- CLP22 SB4 CFSEL
- SX6 PSPTEL*PTCYEL-SPSCEL PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEL
- EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
- ** 47444 (1X/1XP 3.5IN) CONVERSION (*EO/EP*).
- *
- * ALGORITHM -
- * SL = 3240B
- * NN = (LT*SL+LS)/10B
- * PC = NN/274B
- * PT = R(NN/274B)/15B
- * PS = R(R(NN/274B)/15B)
- CLP23 SB4 CFSEO
- SX6 PSPTEO*PTCYEO-SPSCEO PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEO
- EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
- ** 47444 (2X/2XP 3.5IN) CONVERSION (*ES/EU*).
- *
- * ALGORITHM -
- * SL = 3240B
- * NN = (LT*SL+LS)/20B
- * PC = NN/274B
- * PT = R(NN/274B)/15B
- * PS = R(R(NN/274B)/15B)
- CLP24 SB4 CFSES
- SX6 PSPTES*PTCYES-SPSCES PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTES
- EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
- ** 47444 (3XP 3.5IN) CONVERSION (*EV*).
- *
- * ALGORITHM -
- * SL = 3200B
- * NN = (LT*SL+LS)/20B
- * PC = NN/426B
- * PT = R(NN/426B)/23B
- * PS = R(R(NN/426B)/23B)
- CLP25 SB4 CFSEV
- SX6 PSPTEV*PTCYEV-SPSCEV PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEV
- EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
- ** 47444 (4X 3.5IN) CONVERSION (*EW*).
- *
- * ALGORITHM -
- * SL = 3200B
- * NN = (LT*SL+LS)/20B
- * PC = NN/560B
- * PT = R(NN/560B)/31B
- * PS = R(R(NN/560B)/31B)
- CLP26 SB4 CFSEW
- SX6 PSPTEW*PTCYEW-SPSCEW PHYSICAL SECTORS PER CYLINDER
- SX5 PSPTEW
- EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
- * TCLP - TABLE FOR CONVERTING LOGICAL TO PHYSICAL ADDRESSES.
- TCLP BSS 0
- LOC AIDB
- + EQ CLP3 *DB* DEVICES
- ERRNZ *-AIDB INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP4 *DC* DEVICES
- ERRNZ *-AIDC INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP5 *DV* AND *DW* DEVICES
- ERRNZ *-AIDV INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP5 *DV* AND *DW* DEVICES
- ERRNZ *-AIDW INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP9 *DF* DEVICES
- ERRNZ *-AIDF INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP10 *DH* DEVICES
- ERRNZ *-AIDH INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP11 *DN* DEVICES
- ERRNZ *-AIDN INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP13 *EA* DEVICES
- ERRNZ *-AIEA INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP14 *EB* DEVICES
- ERRNZ *-AIEB INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP15 *EC/ED* DEVICES
- ERRNZ *-AIEC INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP16 *EE/EF* DEVICES
- ERRNZ *-AIEE INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP17 *EM* DEVICES
- ERRNZ *-AIEM INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP18 *EN* DEVICES
- ERRNZ *-AIEN INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP19 *EG/EH* DEVICES
- ERRNZ *-AIEG INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP20 *EI/EJ* DEVICES
- ERRNZ *-AIEI INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP21 *EK* DEVICES
- ERRNZ *-AIEK INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP22 *EL* DEVICES
- ERRNZ *-AIEL INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP23 *EO/EP* DEVICES
- ERRNZ *-AIEO INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP24 *ES/EU* DEVICES
- ERRNZ *-AIES INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP25 *EV* DEVICES
- ERRNZ *-AIEV INDEX MUST MATCH POSITION IN TABLE
- + EQ CLP26 *EW* DEVICES
- ERRNZ *-AIEW INDEX MUST MATCH POSITION IN TABLE
- LOC *O
- DCB SPACE 4,15
- ** DCB - DELINK CONTROL BUFFER FROM LINK.
- *
- * ENTRY (X0) = CONTROL BUFFER INDEX.
- * (X1) = WORD POSITION OF LINK.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X6) = BASE ADDRESS OF CONTROL BUFFERS + OFFSET.
- * (X5) = LINK WORD.
- * (X4) = FORWARD LINK INDEX.
- * (X3) = BACKWARD LINK INDEX.
- * (A7) = ADDRESS OF LINK WORD
- *
- * USES A - 2.
- * X - 1, 2, 3, 4, 5, 6, 7.
- DCB BSS 0 ENTRY
- TX6 X1,CBT FORM BASE ADDRESS + WORD POSITION
- BX1 X0 FORM ADDRESS OF CONTROL BUFFER
- LX1 CBTLS
- IX1 X1+X6
- SA2 X1
- MX1 12 GET FORWARD LINK INDEX
- BX5 X2
- LX1 36
- BX4 X1*X5
- LX1 12 GET BACKWARD LINK INDEX
- BX3 X1*X5
- AX3 36
- ZR X3,DCB1 IF BACKWARD LINK IS ZERO
- BX7 X3 FORM ADDRESS OF BACKWARD BUFFER
- LX7 CBTLS
- IX7 X7+X6
- LX1 48
- + SA2 X7 **** PERFORM IN ONE WORD ****
- BX2 -X1*X2 **** PERFORM IN ONE WORD ****
- BX7 X2+X4 **** PERFORM IN ONE WORD ****
- SA7 A2 **** PERFORM IN ONE WORD ****
- DCB1 ZR X4,DCB2 IF FORWARD LINK IS ZERO
- MX1 12
- AX4 24-CBTLS
- IX7 X4+X6
- LX1 48 MODIFY BACKWARD LINK IN FORWARD BUFFER
- LX3 36
- + SA2 X7 **** PERFORM IN ONE WORD ****
- BX2 -X1*X2 **** PERFORM IN ONE WORD ****
- BX7 X2+X3 **** PERFORM IN ONE WORD ****
- SA7 A2 **** PERFORM IN ONE WORD ****
- AX4 CBTLS
- LX3 24
- DCB2 BX1 X0 CLEAR LINK BYTES
- LX1 CBTLS
- IX1 X1+X6
- MX5 36
- + SA2 X1 **** PERFORM IN ONE WORD ****
- LX5 24 **** PERFORM IN ONE WORD ****
- BX7 X5*X2 **** PERFORM IN ONE WORD ****
- SA7 A2 **** PERFORM IN ONE WORD ****
- BX5 X7 LINK WORD
- JP B6 RETURN
- DCC SPACE 4,15
- ** DCC - DELINK CONTROL BUFFER FROM CONTROL BUFFER LINK.
- *
- * ENTRY (X0) = CONTROL BUFFER ORDINAL.
- * (B3) = REGISTER SAVE BUFFER ADDRESS.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X7) PRESERVED.
- *
- * USES A - 1, 2, 7.
- * B - 6.
- * X - 1, 2, 5, 7.
- *
- * CALLS DCB.
- DCC BSS 0 ENTRY
- SA7 B3+B1 SAVE (X7)
- SB3 A7+B1
- SX7 B6+ SAVE (B6)
- SA7 A7-B1
- SX1 LSLK SET CONTROL BUFFER LINK WORD
- BX7 X0 SET CONTROL BUFFER INTERLOCK
- SA7 INLB
- SB6 DCC2 SET RETURN ADDRESS
- EQ DCB DELINK BUFFER
- DCC2 BX1 X0 GET LIST INDEX WORD
- LX1 CBTLS
- IX1 X1+X6
- MX2 -3
- SA1 X1-LSLK+HSLK
- BX5 X1
- AX5 21 GET LIST INDEX
- BX1 -X2*X5
- TA2 X1,BLMB
- MX7 1 DECREMENT COUNT
- LX7 37
- IX7 X2-X7
- NZ X3,DCC3 IF BACKWARD LINK NOT ZERO
- MX5 -18 MODIFY FORWARD POINTER
- BX7 X5*X7
- BX7 X7+X4
- DCC3 NZ X4,DCC4 IF FORWARD LINK NOT ZERO
- MX5 -18 MODIFY BACKWARD POINTER
- LX5 18
- BX7 X5*X7
- LX3 18
- BX7 X7+X3
- DCC4 SA7 A2
- SA1 B3-B1 RESTORE (X7)
- SA2 A1-B1 RESTORE (B6)
- SB3 A1-B1
- BX7 X1
- SB6 X2
- JP B6 RETURN
- DCH SPACE 4,15
- ** DCH - DELINK CONTROL BUFFER FROM HASH LINK.
- *
- * ENTRY (X0) = CONTROL BUFFER ORDINAL.
- * (B3) = REGISTER SAVE BUFFER ADDRESS.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X7) PRESERVED.
- * TO */PROGRAM/HNG* IF NO HASH INDEX OR *PUT* ORDINAL
- * PRESENT.
- *
- * USES A - 1, 2, 3, 7.
- * B - 6.
- * X - 1, 2, 3, 5, 7.
- *
- * CALLS DCB.
- DCH BSS 0 ENTRY
- SA7 B3+B1 SAVE (X7)
- SB3 A7+B1
- SX7 B6 SAVE (B6)
- SA7 A7-B1
- SX1 HSLK SET HASH CHAIN WORD
- SB6 DCH2 SET RETURN ADDRESS
- EQ DCB DELINK BUFFER
- DCH2 MX7 39
- SA1 A7+FSTC-HSLK GET FST INFORMATION
- BX7 X7*X5
- SA7 A7 CLEAR HASH INDEX AND *PUT* ORDINAL
- SX7 B0
- SA7 A1 CLEAR FST INFORMATION
- LX1 -48
- MX7 -12
- NZ X3,RXR IF HASH ENTRY UPDATE NOT NEEDED
- BX1 -X7*X1 EST ORDINAL
- MX7 -9
- LX7 12
- BX3 -X7*X5 GET HASH ENTRY INDEX
- LX3 -12
- CX7 X1,EST CONVERT ORDINAL TO OFFSET
- TA1 X7+EQAE,EST GET PARTITION NUMBER
- MX7 -4
- LX1 -18
- MX2 -12
- BX7 -X7*X1
- SX1 HATLE
- IX7 X1*X7 HASH TABLE PARTITION OFFSET
- BX1 -X2*X5 GET *PUT* ORDINAL
- LX1 PUTLS
- TA1 X1+HSCT,PUT
- IX3 X3+X7 ADJUST HASH TABLE INDEX FOR PARTITION
- AX1 24
- MX2 -18
- BX7 X4
- BX1 -X2*X1
- IX1 X1+X3 FORM HASH ENTRY ADDRESS
- ZR X4,DCH3 IF HASH ENTRY TO BE ZEROED
- SA3 X1 READ HASH ENTRY
- MX2 -12 MODIFY CONTROL BUFFER INDEX
- BX3 X2*X3
- BX7 X3+X4
- DCH3 SA7 X1 REWRITE HASH ENTRY
- SA1 B3-B1 RESTORE (X7)
- SA2 A1-B1 RESTORE (B6)
- SB3 A1-B1
- BX7 X1
- SB6 X2
- JP B6 RETURN
- LCB SPACE 4,15
- ** LCB - LINK CONTROL BUFFER.
- *
- * ENTRY (X0) = NEW BUFFER INDEX.
- * (X1) = 24/0 ,18/BI ,18/OI .
- * BI - OLD BUFFER INDEX.
- * OI - OFFSET INDEX OF LINK (6,7).
- * (B6) = RETURN ADDRESS.
- *
- * USES A - 2, 3, 7.
- * X - 1, 2, 3, 4, 5, 6, 7.
- LCB BSS 0 ENTRY
- TX6 X1,CBT READ OFFSET
- AX1 18 GET OLD BUFFER INDEX
- BX2 X1 FORM ADDRESS OF OLD BUFFER
- LX2 CBTLS
- IX2 X2+X6
- SA3 X2 READ LINK WORD
- MX4 12 SAVE OLD FORWARD LINK
- LX4 36
- BX3 X4*X3
- AX3 24
- LX0 24 SET FORWARD LINK TO NEW BUFFER INDEX
- + SA2 A3 **** PERFORM IN ONE WORD ****
- BX7 -X4*X2 **** PERFORM IN ONE WORD ****
- BX7 X7+X0 **** PERFORM IN ONE WORD ****
- SA7 A2 **** PERFORM IN ONE WORD ****
- LX0 36
- BX2 X0 GET LINK WORD IN NEW BUFFER
- LX2 CBTLS
- IX2 X2+X6
- SA2 X2
- BX5 X1 SET BACKWARD LINK TO OLD BUFFER
- LX5 12
- BX5 X5+X3 SET FORWARD LINK TO OLD FORWARD
- LX5 24
- MX4 24
- LX4 48
- BX7 -X4*X2
- BX7 X7+X5
- SA7 A2
- ZR X3,/MONITOR/RB6 IF ADDING TO END OF CHAIN
- BX2 X3 FORM ADDRESS OF FORWARD
- LX2 CBTLS
- IX2 X2+X6
- MX4 12 MODIFY BACKWARD LINK
- LX0 36
- LX4 48
- + SA3 X2 **** PERFORM IN ONE WORD ****
- BX3 -X4*X3 **** PERFORM IN ONE WORD ****
- BX7 X3+X0 **** PERFORM IN ONE WORD ****
- SA7 A3 **** PERFORM IN ONE WORD ****
- LX0 24
- JP B6 RETURN
- LCC SPACE 4,15
- ** LCC - LINK CONTROL BUFFER TO END OF SPECIFIED CHAIN.
- *
- * EXTRY (X0) = CONTROL BUFFER ORDINAL.
- * (X1) = LIST ADDRESS.
- * (B3) = REGISTER SAVE BUFFER ADDRESS.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X7) PRESERVED.
- *
- * USES A - 2, 3, 6, 7.
- * B - 6.
- * X - 1, 2, 3, 4, 5, 6, 7.
- *
- * CALLS LCB, RXR.
- LCC BSS 0 ENTRY
- SA7 B3+B1 SAVE (X7)
- SB3 A7+B1
- SX7 B6 SAVE (B6)
- SA7 A7-B1
- BX7 X0 SET CONTROL BUFFER INTERLOCK
- SA7 INLB
- BX3 X0 SET NEW LIST INDEX
- LX3 CBTLS
- TA3 X3+HSLK,CBT
- MX4 3
- LX4 24
- BX3 -X4*X3
- TX4 X1,-BLMB
- LX4 21
- BX7 X3+X4
- SA2 X1 READ LIST WORD
- SA7 A3
- NZ X2,LCC2 IF LIST NOT EMPTY
- SX2 B1 SET COUNT = 1
- LX2 18
- BX2 X2+X0 SET LAST
- LX2 18
- BX7 X2+X0 SET FIRST = LAST
- SA7 A2
- BX1 X0 GET ADDRESS OF CONTROL BUFFER WORD 7
- LX1 CBTLS
- SA2 A3+LSLK-HSLK READ CONTROL BUFFER LINK WORD
- MX3 24
- LX3 48 ZERO CONTROL BUFFER LINKS
- BX7 -X3*X2
- SA7 A2
- SA1 B3-B1 RESTORE (X7)
- SB3 A1-B1
- SA2 A1-B1 RESTORE (B6)
- BX7 X1
- SB6 X2
- JP B6 RETURN
- LCC2 SX3 B1 INCREMENT COUNT
- LX3 36
- IX2 X3+X2
- MX3 -18 UPDATE LAST POINTER
- LX3 18
- BX1 -X3*X2 SAVE OLD LAST
- SX5 LSLK ADD CONTROL BUFFER LINK WORD
- IX1 X1+X5
- BX2 X3*X2
- LX0 18
- BX6 X2+X0
- SA6 A2
- LX0 42
- SB6 RXR SET RETURN ADDRESS TO RESTORE ROUTINE
- EQ LCB LINK CONTROL BUFFER (X0) FOLLOWING (X1)
- LCH SPACE 4,15
- ** LCH - LINK CONTROL BUFFER TO HASH CHAIN.
- *
- * ENTRY (X0) = CONTROL BUFFER INDEX.
- * (X1) = HASH ENTRY ADDRESS.
- * (B3) = REGISTER SAVE BUFFER ADDRESS.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X7) PRESERVED.
- *
- * USES A - 1, 2, 3, 4, 7.
- * B - 6.
- * X - 1, 2, 3, 4, 5, 6, 7.
- *
- * CALLS LCB, RXR.
- LCH BSS 0 ENTRY
- SA7 B3+B1 SAVE (X7)
- SB3 A7+B1
- SX7 B6 SAVE (B6)
- SA7 A7-B1
- BX2 X1
- BX1 X0 SET NEW *PUT* ORDINAL AND HASH INDEX
- SA4 PUTO
- LX1 CBTLS
- TA3 X1+HSLK,CBT
- MX5 -21
- BX3 X5*X3
- SX4 X4+
- BX3 X3+X4
- SA4 HTA FORM HASH INDEX
- IX4 X2-X4
- LX4 12
- BX7 X3+X4
- MX5 -12
- SA1 X2 GET CONTROL BUFFER INDEX
- MX6 24
- SA7 A3
- LX6 -12 POSITION ADDRESS MASK
- BX1 -X5*X1
- SX3 X0
- ZR X1,LCH5 IF NO BUFFERS ON HASH THREAD
- LX3 CBTLS
- BX4 X1
- TA3 X3+PAD1,CBT GET DISK ADDRESS FROM NEW BUFFER
- NO
- BX7 X6*X3 EXTRACT CYLINDER, TRACK AND SECTOR
- * FIND POSITION TO INSERT NEW BUFFER.
- LCH2 BX3 X4 SET BUFFER ORDINAL
- SX1 X4+0
- LX3 CBTLS
- TA4 X3+PAD1,CBT
- BX4 X6*X4 ISOLATE CYLINDER, TRACK AND SECTOR
- IX4 X4-X7
- NG X4,LCH4 IF POSITION FOUND
- SA4 A4+HSLK GET FORWARD LINK
- AX4 24
- BX4 -X5*X4
- NZ X4,LCH2 IF NOT END OF CHAIN
- LCH3 SX2 HSLK FORM PARAMETER FOR *LCB*
- SB6 RXR RETURN TO RESTORE REGISTERS
- LX1 18
- BX1 X1+X2
- EQ LCB LINK CONTROL BUFFER
- LCH4 TA4 X3+HSLK,CBT GET BACKWARD LINK
- AX4 36
- BX1 -X5*X4
- NZ X1,LCH3 IF NOT FIRST BUFFER ON HASH LIST
- * UPDATE HASH ENTRY AND ADD BUFFER AT START.
- LCH5 SA1 X2 READ HASH ENTRY
- BX4 -X5*X1
- BX1 X5*X1 SET INDEX = NEW BUFFER
- BX7 X1+X0
- SA7 A1
- LX0 CBTLS READ HASH CHAIN WORD OF NEW BUFFER
- TA2 X0+HSLK,CBT
- BX2 -X6*X2
- LX4 24 SET FORWARD LINK = OLD HASH INDEX
- BX7 X2+X4
- LX4 36+CBTLS POSITION HASH INDEX
- SA7 A2
- LX0 -CBTLS
- ZR X4,RXR IF NO BUFFERS ON CHAIN
- TA2 X4+HSLK,CBT
- LX5 36
- BX2 X5*X2 SET BACKWARD LINK = NEW BUFFER
- LX0 36
- BX7 X2+X0
- LX0 24
- SA7 A2
- * EQ RXR RESTORE (X2) AND (X7) AND RETURN
- ERRNZ *-RXR *RXR* MUST FOLLOW *LCH*
- RXR SPACE 4,15
- ** RXR - RESTORE X2 AND X7 AND EXIT TO (X2).
- *
- * ENTRY (B3) = NEXT AVAILABLE SCRATCH.
- *
- * EXIT REGISTERS X2 AND X7 ARE RESTORED.
- * (B6) RESTORED TO RETURN ADDRESS.
- * RETURN IS TO (X2), NOT TO CALLER.
- * (B3) UPDATED.
- *
- * USES A - 1, 2.
- * B - 3, 6.
- * X - 1, 2, 7.
- RXR BSS 0 ENTRY
- SA1 B3-B1 RESTORE (X7)
- SB3 A1-B1
- SA2 A1-B1 RESTORE (X2)
- BX7 X1
- SB6 X2 GET RETURN ADDRESS
- JP B6 RETURN
- SBB SPACE 4,10
- ** SBB - SET BUFFER BUSY RESPONSE.
- *
- * EXIT (X6) = 1/0, 1/1, 58/0 (BUSY STATUS).
- * PUT STATISTICS UPDATED.
- * CONTROL PASSED TO LBMXS.
- *
- * USES A - 1, 3, 6.
- * X - 1, 3, 4, 6.
- SBB BSS 0 ENTRY
- SA3 PUTO
- SX6 B1
- LX3 PUTLS
- TA1 X3+ACRJ,PUT COUNT BUFFER BUSY
- BX3 X1
- LX1 59-23
- NG X1,SBB1 IF OVERFLOW
- IX7 X3+X6
- SA7 A1
- SBB1 SA1 A1+B1
- ERRNZ ACST-ACRJ-1 CODE DEPENDS ON VALUE
- BX3 X1
- LX1 59-35
- IX7 X3+X6
- NG X1,SBB2 IF OVERFLOW
- SA7 A1+
- SBB2 LX6 58-0 SET BUSY STATUS
- EQ LBMXS EXIT TO LBM
- SIS SPACE 4,10
- ** SIS - SET INACCESSIBLE DEVICE RESPONSE.
- *
- * EXIT TO *LBMXS* WITH DEVICE INACCESSIBLE STATUS.
- *
- * USES X - 6.
- SIS BSS 0 ENTRY
- SX6 B1
- LX6 56-0
- EQ LBMXS EXIT BUFFER MANAGER
- SNS SPACE 4,20
- ** SNS - SET NEXT SECTOR.
- *
- * ENTRY (LSEC) = CURRENT LOGICAL SECTOR.
- * (LTRK) = CURRENT LOGICAL TRACK.
- * (MSTA) = MST ADDRESS.
- * (B3) = REGISTER SAVE BUFFER ADDRESS.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X0) = NON-ZERO IF END OF LOGICAL TRACK CHAIN.
- * (X7) PRESERVED.
- * (LSEC) UPDATED.
- * (LTRK) UPDATED.
- *
- * USES A - 1, 2, 6, 7.
- * B - 6.
- * X - 0, 1, 2, 6.
- *
- * CALLS RXR.
- SNS BSS 0 ENTRY
- SA7 B3+B1 SAVE (X7)
- SB3 A7+B1
- SX7 B6 SAVE (B6)
- SA7 A7-B1
- SA1 LSEC
- SX2 LSLB
- IX6 X1+X2
- SA6 A1
- SA1 LTRK
- BX0 X1 (X0) = CURRENT LOGICAL TRACK
- SA1 MSTA
- MX2 -2
- BX2 -X2*X0 TRT BYTE INDEX
- LX2 2
- SB6 X2
- LX2 1
- SB6 X2+B6 BYTE INDEX*12D
- MX2 -9
- LX0 -2
- BX7 -X2*X0 TRT WORD INDEX
- SA2 X1+TRLL
- IX7 X2+X7
- SA2 X7 READ TRT WORD
- LX2 B6
- MX7 12
- SX0 B0 CLEAR EOI FLAG
- BX7 X7*X2 NEXT TRACK
- NG X7,SNS1 IF CURRENT IS NOT EOI TRACK
- LX7 12
- IX2 X6-X7
- NG X2,RXR IF NEW BUFFER NOT BEYOND EOI
- ZR X2,RXR IF EOI IN NEW BUFFER
- SX0 B1 SET EOI FLAG
- EQ RXR EXIT
- SNS1 SA1 X1+MDGL SECTOR LIMIT
- MX2 -12
- BX1 -X2*X1
- IX2 X6-X1
- NG X2,RXR IF NOT AT SECTOR LIMIT
- LX7 12
- SA7 LTRK SET NEXT TRACK
- LX7 59-11
- MX6 0
- SA6 LSEC RESET LOGICAL SECTOR
- EQ RXR RESTORE X2 AND X7 AND RETURN TO (X2)
- SNT SPACE 4,15
- ** SNT - SET NEXT TRACK.
- *
- * ENTRY (X0) = CURRENT LOGICAL TRACK.
- * (X1) = MST ADDRESS.
- * (B6) = RETURN ADDRESS.
- *
- * EXIT (X6) = NEW LOGICAL TRACK.
- * (X2) = TRT WORD WITH NEXT TRACK IN BITS 48-59.
- *
- * USES A - 2.
- * X - 2, 6.
- SNT BSS 0 ENTRY
- MX2 -2
- BX2 -X2*X0 BYTE INDEX
- SB1 B6 SAVE (B6)
- LX2 2
- SB6 X2
- LX2 1
- SB6 X2+B6 BYTE INDEX * 12D
- MX2 -9
- LX0 -2
- BX6 -X2*X0
- SA2 X1+TRLL
- IX6 X2+X6
- SA2 X6 READ TRT WORD
- LX2 B6
- SB6 B1 RESTORE (B6)
- SB1 1 RESTORE (B1)
- MX6 12
- LX0 2
- BX6 X6*X2 GET NEXT TRACK POINTER
- LX6 12
- JP B6 RETURN
- SRC SPACE 4,10
- ** SRC - SET RECALL CONTROL.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- * (X0) = CONTROL BUFFER INDEX.
- *
- * USES A - 1, 3, 6.
- * X - 1, 2, 3, 4, 6.
- SRC BSS 0 ENTRY
- BX2 X0 GET CONTROL BUFFER ADDRESS
- LX2 CBTLS
- TA3 X2+LSLK,CBT GET RECALL WORD
- SA1 RPRM GET RECALL PARAMETER
- MX4 -24 SET RECALL CONTROL
- BX3 X4*X3
- BX6 X3+X1
- SA6 A3
- JP B6 RETURN
- SRR SPACE 4,10
- ** SRR - SET RECALL RESPONSE.
- *
- * EXIT (X6) = 1/1, 59/0 (RECALL STATUS).
- * PUT STATISTICS UPDATED.
- * CONTROL PASSED TO *LBMXS*.
- *
- * USES A - 1, 3, 6.
- * X - 1, 3, 4, 6.
- SRR BSS 0 ENTRY
- SA3 PUTO
- SX4 B1
- LX3 PUTLS
- MX6 1
- TA1 X3+ACST,PUT COUNT BUFFER PROCESSED AND RECALLED
- LX4 35-0
- BX6 -X1*X6
- BX4 -X1*X4
- LX6 36-59
- LX4 0-35
- BX6 X6+X4
- IX6 X1+X6
- SA6 A1
- MX6 1 SET RECALL STATUS
- EQ LBMXS EXIT
- TITLE CIO MONITOR MODE ROUTINES.
- CPP SPACE 4,10
- ** CPUCIO (PSEUDO-PP) EXCHANGE PACKAGE.
- *
- * CONTAINS 20-WORD EXCHANGE PACKAGE SIMILAR TO
- * THE ONE AT CONTROL POINT N+1, AND THREE EXTRA WORDS
- * TO MAKE UP A SHORT CONTROL POINT AREA.
- CPP EXP P=/BUFIO/PPC,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,A5=(1
- ,,SP),MA=CPP,EM=(,CXPFE),EA=CPP
- * *STSW*.
- VFD 3/ZCPS NULL CPU STATUS
- VFD 57/0
- * CWQW.
- VFD 2/1
- VFD 7/MTCS CPU PRIORITY = *MAGNET-S*
- VFD 1/0
- VFD 1/0 CPU SLICE ACTIVE
- VFD 1/0 RECALL FLAG
- VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
- VFD 2/0
- VFD 9/0 SERVICE CYCLE
- VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
- VFD 1/0 *MTR* BYPASS FLAG
- VFD 2/1 SELECT CPU 0
- VFD 3/0
- VFD 3/PSXT PSEUDO-PP EXCHANGE PACKAGE TYPE
- VFD 18/0 *WQ* LINKAGE
- * CSAW.
- VFD 60/0
- * *CTMW*.
- VFD 60/0
- ACQ SPACE 4,15
- ** ACQ - ASSIGN PSEUDO-PP OR CPUCIO REQUEST QUEUE.
- *
- * ENTRY (X6) = REQUEST.
- * (B3) = NORMAL EXIT ADDRESS.
- * (B4) = EXIT ADDRESS IF NON-ASSIGNABLE REQUEST
- * (B7) = CONTROL POINT AREA ADDRESS.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 4, 6, 7.
- * B - 3, 6.
- *
- * CALLS /MONITOR/AQR, /MONITOR/RCC.
- ACQ TA2 SP
- NZ X2,ACQ1 IF PSEUDO-PP NOT AVAILABLE
- * TO INTERLOCK WITH *MTR*, *ACPP* AND THE PP COUNT MUST BE
- * UPDATED BEFORE THE STORAGE MOVE CHECK.
- SA1 B7+STSW
- SX2 B7
- SX7 B7 SET CP ADDRESS FOR MONITOR FUNCTIONS
- LX2 24 SET ASSIGNED CP ADDRESS
- SX0 B1
- BX7 X7+X2
- LX2 24-7 SET CP NUMBER
- LX0 48
- BX7 X7+X2
- TA7 ACPP,SPX SET CP ASSIGNMENT
- IX7 X1+X0 INCREMENT PP COUNT
- SA7 A1
- SA4 CMCL GET MOVE CONTROL
- MX0 55
- LX2 -12
- LX0 36
- BX6 X0*X6
- BX6 X6+X2 SET CP NUMBER IN IR
- LX2 12
- BX7 X4-X2
- AX7 48
- ZR X7,ACQ0.1 IF STORAGE MOVE REQUESTED / IN PROGRESS
- SA6 A2+ SET PSEUDO-PP IR
- SA1 /CPUCIO/MB
- BX6 X1
- SA1 A1+B1
- ERRNZ /CPUCIO/MB1-/CPUCIO/MB-1 ADDR MUST BE CONSECUTIVE
- SA6 A2+2+4 MB TO MB+4
- BX7 X1
- SA1 A1+B1
- ERRNZ /CPUCIO/MB2-/CPUCIO/MB1-1 ADDR MUST BE CONSECUTIVE
- BX6 X1
- SA6 A6-B1 MB2 TO MB+3
- SB6 CPP EXCHANGE PACKAGE ADDRESS
- SA7 A6-B1 MB1 TO MB+2
- SX6 B3 SAVE RETURN ADDRESS
- SA6 /MONITOR/T2
- SB3 ACQ0 *RCC* RETURN ADDRESS
- EQ /MONITOR/RCC RECALL CPU
- ACQ0 SA1 /MONITOR/T2
- SB3 X1+ RESTORE RETURN ADDRESS
- JP B3 RETURN
- ACQ0.1 TA7 ACPP,SPX CLEAR CP ASSIGNMENT
- BX7 X1 RESTORE PP COUNT
- SA7 A1
- ACQ1 SA3 /CPUCIO/MB SAVE PARAMETER WORD
- R= X2,/MONITOR/CQ
- SB3 B4 SET STORAGE MOVE RETURN ADDRESS
- BX7 X3
- SA7 /MONITOR/AQRA
- EQ /MONITOR/AQR ASSIGN QUEUE REQUEST
- IPP SPACE 4,10
- ** IPP - INITIATE PSEUDO PP CIO PROCESSOR.
- *
- * ENTRY REFER TO CPUCIO SPECIAL PROCESSORS DOCUMENTATION.
- *
- * EXIT TO */CPUCIO/CPCX* IF STANDARD ASSIGNMENT.
- * TO */IHPFMD/RPP1* OR */IH819/PPE1* IF BUFFER
- * MANAGER RECALL.
- * TO */CPUCIO/RPC* IF NOT BUFFERED DEVICE
- * PROCESSOR FUNCTION OR NULL FILE.
- *
- * CALLS ACQ.
- IPP BSS 0 ENTRY
- TNO /BUFIO/IPS,BIOMMF
- IPP0 MX1 -3 GET TERMINATION CONDITION
- LX4 4
- SX2 5714B
- BX1 -X1*X4
- LX4 2
- MX6 1
- BX2 X2*X4
- LX6 55-59
- SX3 X2-/CIO/SKP*100B-/CIO/EOI
- AX2 9
- BX6 X4+X6 SET FUNCTION FLAG
- ZR X3,/CPUCIO/RPC IF *SKIPEI*
- MX4 12
- NZ X2,/CPUCIO/RPC IF BACKWARD SKIP
- ZR X1,/CPUCIO/RPC IF *RPHR*/*WPHR*
- SA6 A4
- ERX1 X0 GET CURRENT TRACK
- LX4 -24
- BX1 X4*X1
- ZR X1,/CPUCIO/RPC IF NULL FILE
- IPP1 SA1 /CPUCIO/IR GET *CIO* CALL
- SB3 IPP2 SET RETURN ADDRESS FOR *ACQ*
- BX6 X1
- SB4 B3
- TJP (/DCP/ACQ,DCPC,/BUFIO/ACQ) ASSIGN PSEUDO PP
- IPP2 SA1 IPPA CHECK FOR BUFFER MANAGER RECALL REQUEST
- NG X1,/CPUCIO/CPCX IF NOT BUFFER MANAGER RECALL REQUEST
- TEQ (/IHPFMD/RPP1,IHPFMD,/IH819/PPE1) PROCESS NEXT REQUEST
- IPPA CON -1
- MNR SPACE 4,10
- ** MNR - *BUFIO* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
- *
- * EXIT TO */MONITOR/PPE* IF *FLPP* INTERRUPT.
- * TO */BUFIO/IOC* IF BUFFER MANAGER REQUEST PRESENT.
- * TO */MONITOR/MNR4* IF NONE FOUND (X0 = 0).
- MNR SA1 B2+3 GET *PSD* FROM EXCHANGE PACKAGE
- TA2 IORQ I/O REQUESTS
- BX0 X0-X0
- LX1 59-39 POSITION TO STEP MODE FLAG
- NZ X2,IOC IF I/O REQUEST PROCESSED
- TNG X1,(/MONITOR/PPE,IH819,/BUFIO/MNR) IF INTERRUPT
- EQ /MONITOR/MNR4 RETURN TO MAIN ROUTINE
- * EXTENSION FOR PSEUDO-PP REQUEST PROCESSING.
- *
- * ENTRY (X3) = MONITOR MODE START TIME.
- *
- * EXIT (A5) = PSEUDO-PP OUTPUT REGISTER ADDRESS.
- * TO */MONITOR/MTRX* IF NO PSEUDO PP REQUEST TO
- * PROCESS.
- * TO */MONITOR/PPR0.1* IF PSEUDO PP REQUEST TO PROCESS.
- * TO */IH819/PPE* OR */BUFIO/MNR* IF BUFFER MANAGER
- * RECALL.
- * (B4) = REQUEST IF EXIT TO *PPR0.1*.
- * (X1) = OUTPUT REGISTER BITS 0 - 47 IF EXIT TO
- * *PPR0.1*.
- MNR1 SA1 B2+3
- TA5 1,SP GET PSEUDO-PP OUTPUT REGISTER
- LX1 59-39
- MX0 4
- TNG X1,(/IH819/PPE,IH819,/BUFIO/MNR1) IF BUFFER RECALL
- BX0 X0*X5
- NZ X0,/MONITOR/MTRX IF REQUEST ALREADY PROCESSED
- UX1 B4,X5
- SB4 B4+1777B
- NZ B4,/MONITOR/PPR0.1 IF REQUEST OUTSTANDING
- EQ /MONITOR/MTRX EXIT
- PCQ SPACE 4,10
- ** PCQ - PROCESS PSEUDO-PP REQUEST QUEUE.
- *
- * ENTRY IF ENTERED AT *PCQ1* -
- * (B3) = RETURN ADDRESS IF PSEUDO-PP NOT AVAILABLE.
- * (B4) = RETURN ADDRESS IF NO OUTSTANDING REQUESTS.
- *
- * CALLS ACQ.
- PCQ SB3 /MONITOR/MTRX *ACQ* RETURN ADDRESS
- SB4 PCQ2
- PCQ1 SA1 CQRL GET NEXT ENTRY
- TA2 SP
- ZR X1,/MONITOR/RB4 IF NO PSEUDO-PP REQUESTS
- NZ X2,/MONITOR/RB3 IF PSEUDO-PP NOT AVAILABLE
- SA4 X1+RECW-RCCW READ PP REQUEST
- MX7 -12+7 CONTROL POINT ADDRESS MASK
- LX7 7
- BX7 -X7*X1
- SB7 X7 CPA
- SA2 X1 DELETE ENTRY FROM QUEUE
- MX0 -4
- BX6 X2
- SA6 A1
- BX6 X6-X6
- SA1 B7+STSW ADD RECALL SLOT TO FREE LIST
- SX3 -420B-RCCW+1
- SA6 A4
- BX7 -X0*X1
- BX1 X0*X1
- SX0 A2-B7 COMPUTE RECALL INDEX
- SA7 A2
- IX0 X0+X3
- SA3 A2+REPW-RCCW GET PARAMETER WORD
- IX7 X0+X1 SET NEW FREE ENTRY AND RECALL COUNT
- SA6 A3+
- BX6 X4
- SA7 A1
- BX7 X3
- SA7 /CPUCIO/MB SET PARAMETER WORD
- EQ ACQ ASSIGN PSEUDO-PP
- PCQ2 SA1 CPP+STSW SET NULL STATUS ON PSEUDO-PP
- MX7 3
- BX6 X7*X1
- ZR X6,/MONITOR/MTRX IF PSEUDO-PP NOT ACTIVE
- BX7 -X7*X1
- SA7 A1
- EQ /MONITOR/BNJ1 BEGIN NEW JOB
- PRQ SPACE 4,10
- ** PRQ - PROCESS REQUEST QUEUE.
- *
- * ENTRY (X1) = BUFFER ORDINAL TO RECALL.
- *
- * CALLS IPP, /CPUCIO/CPC.
- PRQ SA2 BQRL GET FIRST ENTRY
- MX0 12
- LX1 12
- LX0 -36
- PRQ1 SB6 A2
- BX2 -X0*X2
- SX6 X2
- SA2 X2
- ZR X6,IPP2 IF END OF QUEUE
- BX6 X0*X2
- IX6 X6-X1
- NG X6,PRQ1 IF BUFFER NUMBER NOT REACHED
- NZ X6,IPP2 IF NO MATCH
- * ENTRY FOUND, DELETE FROM QUEUE AND RESTART.
- MX0 -12
- BX6 -X0*X2 EXTRACT LINK
- SA3 B6 GET LAST ENTRY
- BX3 X0*X3 CLEAR OLD LINK
- BX6 X6+X3 INSERT NEW LINK
- SA6 A3
- SA4 A2+RECW-RCCW READ RECALL REQUEST
- SX1 A2
- AX1 7
- LX1 7
- SB7 X1 CONTROL POINT AREA ADDRESS
- SA1 B7+STSW
- SX0 A2-B7 ADD FREE ENTRY TO CONTROL POINT
- MX2 -4
- SX0 X0-RCCW+1-420B
- BX7 -X2*X1
- BX6 X6-X6
- BX1 X2*X1
- SA7 A2
- SA6 A4+
- SA3 A2+REPW-RCCW GET PARAMETER WORD
- SA6 A3
- BX6 X3
- SA6 /CPUCIO/MB
- IX7 X1+X0
- BX6 X4
- SA7 A1+
- SA6 /CPUCIO/IR
- TA5 1,FP SIMULATE *MTR* REQUEST
- EQ /CPUCIO/CPC PROCESS CIO REQUEST
- TITLE CIO PROCESSOR.
- SPACE 4,10
- ** CIO PROCESSOR.
- *
- * STANDARD REGISTER DEFINITIONS.
- *
- * (B1) = 1.
- * (B7) = CPA.
- * (A4) = (A5) + 5 = MESSAGE BUFFER + 4.
- * (A5) = PSEUDO OUTPUT REGISTER ADDRESS.
- * (X4) = ABSOLUTE FST ADDRESS.
- * (X5) = ABSOLUTE FET+1.
- *
- *T IR 18/ *CIO*, 1/A, 5/ CP, 18/ SKIP COUNT, 18/ FET ADDRESS
- *
- *T MB 12/ BF5, 12/ BF4, 12/ BF3, 12/ BF2, 12/ BF1
- *
- *T MB+1 12/ BF10, 12/ BF9, 12/ BF8, 12/ BF7, 12/ BF6
- *
- *T MB+2 12/ 0, 24/ *IN*, 24/ *OUT*
- *
- *T MB+3 1/R, 5/0, 6/ FETL, 24/ *FIRST*, 24/ *LIMIT*
- * R SET IF RANDOM FILE.
- * FETL FET LENGTH - 5.
- *
- * FET PARAMETERS ARE TRANSFERRED ONLY IF CIO REQUEST
- * IS NOT RESTARTED FROM PSUEDO PP BUSY RECALL STACK.
- *
- *T MB+4 1/S,5/ RF,6/ RC,5/0,1/F,6/ EC,12/ ORD,4/ LV,8/ XC,12/ IC
- * S SET IF *CIO* RESTARTED FROM RECALL STACK.
- * RF RESTART FLAGS = 1/TIF, 1/0, 1/SDT, 1/BDF, 1/DTF.
- * TIF = TRACK INTERLOCK FLAG.
- * SDT = SKIP DATA TRANSFER FLAG.
- * BDF = BUFFERED DEVICE FUNCTION FLAG.
- * DTF = DATA TRANSFERRED FLAG.
- * RC RECALL STACK REASON CODE.
- * F BUILD FNT ENTRY (FLAG FOR *1MS* ONLY).
- * EC ERROR CODE, IF NONZERO.
- * ORD RELATIVE ADDRESS OF FNT ENTRY IN NFL.
- * LV LEVEL NUMBER (0 - 17B).
- * XC EXTERNAL *CIO* FUNCTION CODE.
- * IC INTERNAL *CIO* FUNCTION CODE (SEE *COMSCIO*).
- *
- *T MB+5 1/E, 23/0, 18/ MSTA, 18/ ST
- * E SET IF WRITE EOI REQUIRED.
- * ST SECTORS PER TRACK ON EQUIPMENT.
- * MSTA MST ADDRESS OF EQUIPMENT.
- SPACE 4,10
- ** GLOBAL DATA.
- ABRA CON 0 ABSOLUTE RA
- CHRV CON 0 MASS STORAGE CONTROL FLAGS
- CLEA CON 0 CURRENT READ LIST ENTRY ABSOLUTE ADDRESS
- CWLA CON 0,0 CONTROL WORD DATA ADDRESS / WORD COUNT
- ERWB BSS 3 EXTENDED READ/WRITE BUFFER
- FMOD CON 0 FILE MODE FOR WRITE
- FSZL CON 0 FILE SIZE LIMIT
- LBIA CON 0 30/ FIRST SECTOR, 30/ CONTROL BUFFER FWA
- NPCB CON 0 NUMBER OF PRUS IN *CIO* BUFFER
- NPTR CON 0 NUMBER OF PRUS TO TRANSFER
- NTKP CON 0 NEXT TRACK POINTER
- PCMS CON 0 PRU CHANGE IN MASS STORAGE ALLOCATION
- PRUC CON 0 PRU COUNT
- PMFF CON 0 PERMANENT FILE FLAG
- RCEV EQU FSZL RECALL EVENT
- SCIE EQU ERWB+1 SECTOR COUNT FROM INITIAL POSITION TO EOI
- SDTW CON 0 SKIP DATA TRANSFER FLAG FOR WRITE
- STLR EQU SDTW SECTOR/TRACK LINKAGE FOR READ
- USCW CON 0 UPDATED SECTOR CONTROL WORD FOR WRITE
- WCCB CON 0 WORD COUNT OF DATA IN *CIO* BUFFER
- WLBR EQU SDTW WRITE I/O BUFFER REQUEST
- FCAC VFD 36/0,8/IMSK,8/IMWT,8/IMRD FUNCTION CHARGE
- FCCM CON 741774B FET CODE CLEAR MASK (FOR READ)
- FCSM CON 20B FET CODE MASK TO SET EOR
- CON 740030B FET CODE MASK TO SET EOF
- CON 741030B FET CODE MASK TO SET EOI
- UACC VFD 12/AISS,12/IOAW,6/40,6/20,24/0 ACCOUNTING UPDATE
- UAMI VFD 12/CDCS,12/ACLW,6/0,6/18,24/0 *UADM* MS PRU CHANGE
- TFSL BSS 0 TABLE OF FILE SIZE LIMITS
- VFD 30/0,30//PFM/DSRNG1*100B
- VFD 30//PFM/DSRNG2*100B,30//PFM/DSRNG3*100B
- VFD 30//PFM/DSRNG4*100B,30//PFM/DSRNG5*100B
- VFD 30//PFM/DSRNG6*100B,30//PFM/DSRNG7*100B
- SPACE 4,10
- ERRNZ /CIO/RDF INDEX MUST BE ZERO
- ERRNZ /CIO/WTF-1 INDEX MUST BE ONE
- ERRNZ /CIO/SKP-2 INDEX MUST BE TWO
- SPACE 4,10
- RB3 EQU /MONITOR/RB3 EXIT TO (B3)
- RB4 EQU /MONITOR/RB4 EXIT TO (B4)
- RB5 EQU /MONITOR/RB5 EXIT TO (B5)
- RB6 EQU /MONITOR/RB6 EXIT TO (B6)
- TITLE CIO PROCESSOR EXIT ROUTINES.
- RCR SPACE 4,15
- ** RCR - REQUEST CIO RECALL.
- *
- * ENTRY (X7) = RECALL REASON CODE.
- * (X6) = I/O BUFFER ORDINAL IF ENTRY AT *RCR3*.
- *
- * EXIT TO *PPCX*.
- *
- * A - 0, 1, 2, 3, 6, 7.
- * B - 6.
- * X - 0, 1, 2, 3, 6, 7.
- *
- * CALLS UAC, WEI.
- * PRU TRANSFER LIMIT.
- RCR SX7 PTLR SET PRU TRANSFER LIMIT REASON CODE
- SX6 -IORT SET I/O TIME RECALL
- SB6 RCR6 SET TO CALL *WEI*
- EQ RCR4 SAVE RECALL TIME AND REASON
- * REQUEST TRACK REJECT.
- RCR1 SX7 TIRR SET TRACK REJECT REASON CODE
- SX6 -TIRT SET TRACK REJECT RECALL TIME
- SB6 RCR6 SET TO CALL *WEI*
- EQ RCR4 SAVE RECALL TIME AND REASON
- * I/O BUFFER BUSY.
- RCR2 SX7 LBBR SET I/O BUFFER BUSY REASON CODE
- SX6 -IORT SET I/O TIME RECALL
- SB6 RCR6 SET TO CALL *WEI*
- EQ RCR4 SAVE RECALL TIME AND REASON
- * I/O BUFFER RECALL.
- RCR3 SX7 LBRR SET I/O BUFFER RECALL REASON CODE
- SB6 RCR6 SET TO CALL *WEI*
- RCR4 LX6 24
- SA2 A4 SET RECALL STACK REASON CODE
- SA6 RCEV SAVE RECALL TIME/EVENT
- MX1 6
- LX1 -6
- BX1 -X1*X2
- LX7 -12
- BX7 X7+X1
- SA7 A4
- JP B6 COMPLETE PROCESSING FOR RECALL
- * SET/CLEAR TRACK INTERLOCK REJECT.
- RCR5 SX7 TIRR SET TRACK INTERLOCK REJECT
- SX6 -TIRT SET TRACK INTERLOCK REJECT TIME
- SB6 RCR8 SET TO ENTER RECALL STACK
- EQ RCR4 SAVE RECALL TIME AND REASON
- * WRITE EOI IF NECESSARY. RELEASE I/O BUFFER INTERLOCKS.
- RCR6 SA0 RCR7 SET RETURN ADDRESS FOR *WEI*
- EQ WEI WRITE EOI/RELEASE BUFFER INTERLOCKS
- * UPDATE ACCOUNTING. CLEAR TRACK INTERLOCK.
- RCR7 SA0 RCR8 SET RETURN ADDRESS FOR *UAC*
- SX7 B1 SET TO NOT RECALL CPU
- SB6 A0 RETURN ADDRESS IF TRACK INTERLOCK REJECT
- EQ UAC UPDATE ACCOUNTING
- * ENTER RECALL STACK.
- RCR8 SA1 A5-B1 GET *CIO* CALL
- SX0 B1+
- BX6 X1
- SA2 A4 GET MESSAGE BUFFER PARAMETERS
- SA6 A5+B1
- SX6 PBMF SET I/O BUFFER RECALL EVENT
- BX7 X2
- SA3 RCEV GET RECALL TIME/EVENT
- SA7 A6+B1
- BX6 X6+X3
- LX2 0-58
- SX1 RECM SET TO ENTER RECALL STACK
- PL X3,PPCX IF I/O BUFFER RECALL
- SX6 PBMF SET I/O BUFFER RECALL EVENT
- BX6 -X3+X6
- BX2 X2*X0 TRACK INTERLOCK RESTART FLAG
- IX6 X6-X0 SET TIMED RECALL
- ERRNZ PBMF-PTMF-1 INDEXES MUST BE CONSECUTIVE
- IX6 X6-X2 SET TIMED RECALL / NO ROLLOUT
- ERRNZ PTMF-PTRF-1 INDEXES MUST BE CONSECUTIVE
- EQ PPCX EXIT
- RPC SPACE 4,10
- ** RPC - REQUEST PP CIO.
- *
- * ENTRY (X7) = ERROR CODE, IF NONZERO.
- * (X0) = RA IF ENTRY AT *RPC3*.
- *
- * EXIT TO *PPCX*.
- *
- * ERROR TO *RCR5* IF TRACK INTERLOCK CLEAR REJECT.
- *
- * USES A - 0, 1, 2, 6, 7.
- * B - 6.
- * X - 1, 2, 3, 5, 6, 7.
- *
- * CALLS UAC, WEI.
- RPC3 SA2 A5+5 CALCULATE FST ADDRESS
- MX6 -12
- LX2 -24
- BX6 -X6*X2
- IX6 X0-X6
- R= X4,FSTL
- IX4 X6+X4 ABSOLUTE FST ADDRESS
- * EQ RPC BUILD PP REQUEST
- RPC SA2 A4 SET ERROR CODE
- LX7 36
- SA1 A5-B1 GET *CIO* CALL
- MX6 -59
- BX7 X7+X2
- MX3 -42
- SX2 3R1MS CHANGE TO *1MS* CALL
- BX7 -X6*X7 CLEAR RECALL STACK FLAG
- LX2 -18
- BX6 -X3*X1
- SA7 A4
- BX6 X6+X2
- SA6 A5-B1
- SA0 RPC1 SET RETURN ADDRESS FOR *WEI*
- BX6 X3*X1
- BX6 X6-X2
- NZ X6,WEI IF *WEI* NOT YET CALLED
- RPC1 SA0 RPC2 SET RETURN ADDRESS FOR *UAC*
- SB6 RCR5 RETURN ADDRESS IF TRACK INTERLOCK REJECT
- SX7 B1 SET NO RECALL OF CPU
- EQ UAC UPDATE ACCOUNTING
- RPC2 SA1 A5-B1 GET *CIO* CALL
- SA2 A4 GET MESSAGE BUFFER PARAMETERS
- BX6 X1
- LX7 X2
- SA6 A5+B1
- SX1 RPPM REQUEST PP
- SA7 A6+B1
- SX6 B1+B1 SET NO REJECT ON PP CALL
- EQ PPCX EXIT
- CMP SPACE 4,15
- ** CMP - COMPLETE MASS STORAGE PROCESSING.
- *
- * ENTRY (B2) = FET STATUS FOR READ/SKIP.
- *
- * EXIT TO *PPCX*.
- *
- * ERROR TO *RCR5* IF TRACK INTERLOCK CLEAR REJECT.
- *
- * USES A - 0, 1, 2, 3, 6, 7.
- * B - 4, 6.
- * X - 1, 2, 3, 6, 7.
- *
- * CALLS UAC, WEI.
- CMP5 SA1 SSTL
- LX1 59-16
- NG X1,CMP IF *CIO* LOGGING DISABLED
- SA2 A4 GET MESSAGE BUFFER PARAMETERS
- LX2 59-54
- SX7 /CIOERR/UCF *UNNECESSARY CIO FUNCTION*
- PL X2,RPC IF NO DATA PREVIOUSLY TRANSFERRED
- * EQ CMP COMPLETE FUNCTION
- CMP SA2 A4 GET MESSAGE BUFFER PARAMETERS
- SA0 CMP2 SET RETURN ADDRESS FOR *WEI*
- LX2 59-6
- NG X2,WEI IF WRITE
- ZR B2,WEI IF NOT EOR/EOF/EOI
- SX1 B2
- AX1 2
- SA1 FCSM-1+X1 GET CODE SET MASK
- LX2 59-7-59+6
- SX3 B1 GET FET+0
- IX7 X5-X3
- ERX3 X7
- NG X2,CMP1 IF SKIP
- SA2 FCCM GET CODE CLEAR MASK
- BX3 -X2*X3
- CMP1 BX6 X3+X1
- EWX6 X7
- EQ WEI RELEASE BUFFER INTERLOCK
- * CHARGE FOR *CIO* OPERATION.
- CMP2 SA2 A4 GET MESSAGE BUFFER PARAMETERS
- MX6 48
- BX6 X6*X2
- LX2 -6
- MX1 -4
- BX1 -X1*X2
- SA6 A4
- LX1 3
- SB4 X1
- SA1 FCAC GET FUNCTION CHARGES
- AX1 B4
- MX6 -8
- BX6 -X6*X1
- SA1 UACC INCREMENT ACCOUNTING
- IX6 X6+X1
- LX2 59-6+6
- MX7 1
- SA6 A1
- PL X2,CMP3 IF NOT WRITE
- SA1 PRUC GET PRU COUNT
- LX2 59-54-59+6
- SX1 X1
- BX3 X7*X2
- BX1 X1+X3
- ZR X1,CMP3 IF NO DATA TRANSFERRED
- ERX3 X4 SET FILE WRITTEN ON FLAG
- LX2 59-10-59+54
- BX1 -X2*X7 SET WRITTEN SINCE OPEN IF NOT REWRITE
- LX7 6-59
- BX7 X7+X3
- LX1 7-59
- BX7 X7+X1
- EWX7 X4
- SX2 BMFL*100B FLUSH WRITE BUFFER IF REWRITE
- SB4 CMP3 SET RETURN ADDRESS FOR *CIM*
- ZR X1,CIM IF REWRITE
- CMP3 SA0 CMP4 SET RETURN ADDRESS FOR *UAC*
- SB6 RCR5 RETURN ADDRESS IF TRACK INERLOCK REJECT
- MX7 1 SET TO RECALL CPU, PREVENT *UADM* ISSUE
- EQ UAC UPDATE ACCOUNTING
- CMP4 ERX1 X4 SET FST NOT BUSY
- SX7 B1
- IX3 X5-X7 SET FET COMPETE
- BX6 X1+X7
- ERX1 X3
- EWX6 X4 STORE FST
- BX7 X1+X7
- SX6 B4 SET *UADM* PARAMTER WORD COUNT
- EWX7 X3 STORE FET AFTER FST
- BX6 X6+X2 SET RECALL CPU FLAG
- SX1 UADM SET EXIT FUNCTION
- * EQ PPCX EXIT
- PPCX SPACE 4,10
- ** PPCX - CIO PROCESSOR EXIT.
- *
- * ENTRY (A5) = ADDRESS OF PSEUDO OUTPUT REGISTER.
- * (X1) = EXIT FUNCTION (DPPM, RECM, RPPM).
- * (X6) = FUNCTION PARAMETERS.
- *
- * EXIT TO MONITOR MODE *CPUMTR* TO DROP CPU.
- * P REGISTER RESET TO *PPC* FOR NEXT CIO CALL
- * (XJ MUST IMMEDIATELY PRECEED *PPC* ENTRY POINT).
- PPCX LX1 -12 STORE EXIT FUNCTION IN OUTPUT REGISTER
- LX6 36
- BX6 X6+X1
- SA6 A5
- PPCX1 XJ EXIT TO CPUMTR AND DROP CPU
- PPCX2 SA1 A5 CHECK OUTPUT REGISTER
- AX1 48
- NZ X1,PPCX2 IF OUTPUT REGISTER NOT CLEARED
- * EQ PPC PROCESS *CIO* REQUEST
- TITLE CIO PROCESSOR MAIN ROUTINE.
- PPC SPACE 4,20
- ** PPC - PSEUDO PP CIO FUNCTION PROCESSOR (ENTRY).
- *
- * EXIT (X6) = BUFFER SPACE/DATA IN PRUS FOR READ/WRITE.
- * (X7) = BUFFER SPACE/DATA WORD COUNT FOR READ/WRITE.
- * TO *CMP3* IF PREVIOUS TRACK INTERLOCK CLEAR REJECT
- * ON COMPLETE FUNCTION.
- * TO *RCR5* IF SET TRACK INTERLOCK REJECT.
- * TO *RDF* IF READ FUNCTION.
- * TO *RDF3* IF SKIP FUNCTION.
- * TO *WTF* IF WRITE FUNCTION.
- *
- * ERROR TO *RPC3* IF INCORRECT FET ADDRESS OR PARAMETER.
- * TO *RPC* IF OTHER USER ERROR.
- *
- * USES A - 0, 1, 2, 3, 4, 6, 7.
- * B - 2, 3, 4, 6, 7.
- * X - ALL.
- *
- * CALLS CBS, CRA, SRA, /MONITOR/VFA, /MONITOR/VFP.
- *
- * MACROS MONITOR.
- * VALIDATE FET ADDRESS.
- PPC SA2 UACC CLEAR ACCOUNTING CHARGE
- MX7 36
- BX7 X7*X2
- SA1 A5-B1 GET *CIO* CALL
- BX6 X6-X6
- SA7 A2
- MX3 5
- SA6 A5+B1 CLEAR *MB*
- LX3 36-55
- SA6 A6+B1 CLEAR *MB+1*
- BX3 X3*X1 CP NUMBER
- SA6 A5+6 CLEAR DATA CHANGE/WRITE EOI FLAGS
- SB2 B0 INDICATE NO FET ADDRESS
- LX3 -36+7
- SA6 PRUC CLEAR PRU COUNT
- SB3 RPC3 SET ERROR EXIT ADDRESS FOR *VFA*/*VFP*
- SB6 PPC1 SET RETURN ADDRESS FOR *VFP*
- SB7 X3 CONTROL POINT ADDRESS
- SA6 A6-B1 CLEAR MASS STORAGE PRU CHANGE
- ERRNZ PRUC-PCMS-1 INDEXES MUST BE CONSECUTIVE
- SX7 /CIOERR/ARG *FET ADDRESS OUT OF RANGE*
- EQ /MONITOR/VFA VERIFY FET ADDRESS
- * VALIDATE FET PARAMETERS.
- PPC1 SA4 A5+5 GET MESSAGE BUFFER PARAMETERS
- MX2 -24
- BX5 -X2*X5 ABSOLUTE FET+1
- PL X4,PPC3 IF NOT RESTART FROM RECALL STACK
- MX2 -2
- SA6 A4-B1 SAVE FET LENGTH - 5 AND RANDOM FLAG
- SB6 PPC2 SET RETURN ADDRESS FOR *VFP*
- BX6 -X2*X4 GET FET PARAMETER VALIDATION FLAGS
- SX1 B0
- SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
- NZ X6,/MONITOR/VFP IF FET PARAMETER VALIDATION REQUIRED
- PPC2 SA2 A4-B1 GET FET LENGTH - 5 AND RANDOM FLAG
- BX7 X1+X2 SAVE FIRST AND LIMIT
- SA6 A2-B1 SAVE IN AND OUT
- SA7 A2
- PPC3 SA2 A4
- MX3 -24
- BX0 -X3*X0
- BX6 X0
- SA6 ABRA ABSOLUTE RA
- MX6 -12
- BX3 -X6*X2 INTERNAL FUNCTION CODE
- LX2 -24
- BX1 -X6*X2 FNT ORDINAL
- SX4 X1-FSTL
- IX4 X0-X4 ABSOLUTE FST ADDRESS
- LX2 59-58+24
- ZR X3,CMP3 IF TRACK INTERLOCK CLEAR REJECT
- * INTERLOCK TRACK FOR PERMANENT FILE.
- SX1 B1
- IX1 X4-X1
- ERX1 X1 CHECK FILE TYPE
- MX6 -6
- LX1 -6
- BX6 -X6*X1
- LX1 -9
- MX7 -2
- SX6 X6-PMFT
- BX7 -X7*X1 CHECK ACCESS MODE
- SA6 PMFF
- SA7 FMOD
- NG X2,PPC5 IF TRACK INTERLOCK ALREADY SET
- NZ X6,PPC5 IF NOT DIRECT ACCESS PERMANENT FILE
- LX7 59-1
- PL X7,PPC5 IF NOT M, A, RM, OR RA MODE
- ERX1 X4 SET EQUIPMENT AND FIRST TRACK
- SX6 STIS*10000B SET TRACK INTERLOCK SUBFUNCTION
- MX2 24
- BX1 X2*X1
- LX1 -12
- BX6 X6+X1
- MONITOR STBM
- AX1 36
- MX7 1
- ZR X1,PPC4 IF TRACK INTERLOCK SET
- + EQ RCR5 ENTER RECALL STACK
- PPC4 SA2 A4 SET TRACK INTERLOCK FLAG
- LX7 58-59
- BX7 X2+X7
- SA7 A4
- * PRESET FOR RANDOM READ/WRITE/SKIP.
- PPC5 ERX1 X4 GET EQUIPMENT
- MX7 -12
- LX1 12
- BX7 -X7*X1
- MX6 -12
- CX2 X7,EST CONVERT EST ORDINAL TO OFFSET
- TA2 X2+EQDE,EST READ EST ENTRY
- BX7 -X6*X2 MST ADDRESS / 10B
- LX7 3
- SA3 X7+MDGL GET SECTOR LIMIT
- BX6 -X6*X3
- LX7 18
- BX7 X7+X6
- SA7 A4+B1 SAVE EQUIPMENT CHARACTERISTICS
- SA2 A4 GET MESSAGE BUFFER PARAMETERS
- SA1 A4-B1 GET RANDOM FILE FLAG
- LX2 59-54
- BX1 -X1+X2
- MX6 -24
- NG X1,PPC9 IF PRIOR DATA TRANSFER OR NOT RANDOM FILE
- LX2 59-7-59+54
- SB4 PPC9 SET RETURN ADDRESS FOR *SRA*
- SX1 5
- NG X2,SRA IF RANDOM SKIP
- IX1 X5+X1
- ERX1 X1
- LX2 59-6-59+7
- BX3 -X6*X1
- ZR X3,PPC9 IF RANDOM ADDRESS NOT SET
- PL X2,CRA IF RANDOM READ
- SB4 PPC8 SET RETURN ADDRESS FOR *CRA*
- LX2 59-10-59+6
- NG X2,CRA IF REWRITE FUNCTION
- LX1 59-29 CHECK WRITE-IN-PLACE FLAG
- MX7 1
- PL X1,PPC6 IF NOT REWRITE
- BX7 X7+X2 SET REWRITE FLAG
- LX7 10-59
- SA7 A4
- EQ CRA CONVERT RANDOM ADDRESS
- * PROCESS RANDOM WRITE AT EOI.
- PPC6 SX1 X3-2 CHECK RANDOM ADDRESS VALUE
- SX7 /CIOERR/RWT *INDEX ADDRESS OUT OF RANGE*
- NG X1,RPC IF RANDOM INDEX RETURN ADDRESS .LT. 2
- SA2 B7+FLSW GET *FL*
- MX6 -12
- BX2 -X6*X2
- LX2 6
- IX1 X3-X2
- PL X1,RPC IF RANDOM INDEX RETURN ADDRESS .GE. FL
- SA0 X3 SAVE RELATIVE ADDRESS OF RANDOM INDEX WORD
- BX3 X3-X3 SKIP TO EOI
- SB4 PPC7 SET RETURN ADDRESS FOR *CRA*
- EQ CRA CONVERT RANDOM ADDRESS
- PPC7 SA2 ABRA GET RANDOM INDEX RETURN WORD
- SX6 A0
- IX2 X2+X6
- ERX1 X2
- MX6 36
- BX6 X6*X1
- BX6 X6+X3
- EWX6 X2 RETURN RANDOM INDEX
- EQ PPC9 CHECK BUFFER SPACE
- PPC8 ERX1 X4 SET LAST OPERATION COMPLETE WRITE
- MX6 56
- BX6 X6*X1
- SX2 6
- BX6 X6+X2
- EWX6 X4
- * THE FOLLOWING LOGIC ACCOMPLISHES TWO PURPOSES.
- *
- * 1) IT CAUSES THE LAST BUFFER ACCESSED TO BE FLUSHED IF
- * IT CONTAINS WRITE DATA, AND IT IS NOT GOING TO BE ACCESSED
- * FURTHER FOR WRITING.
- *
- * 2) FOR *PMFT* FILES IT WILL RECALL THE NEW REQUEST IF IT
- * IS FOR OTHER THAN A WRITE ACCESS TO THE LAST BUFFER
- * ACCESSED, AND THE LAST BUFFER ACCESSED CONTAINS WRITE DATA
- * WHICH HAS NOT BEEN FLUSHED TO DISK. EVEN IF THE BUFFER IS
- * ON THE UNIT I/O QUEUE THE REQUEST WILL BE RECALLED. THIS
- * IS DONE SO THAT ALL UPDATES TO *PMFT* FILES WILL OCCUR IN
- * ORDER OF USER REQUEST. THIS IS NECESSARY FOR USER FILE
- * RECOVERY AFTER A SYSTEM INTERRUPT OCCURS WHICH REQUIRES A
- * LEVEL 0 DEADSTART.
- PPC9 R= X1,FUTL-FSTL CHECK I/O BUFFER LINK
- IX1 X4+X1
- ERX1 X1
- MX6 -12
- BX7 -X6*X1
- ZR X7,PPC14 IF NO I/O BUFFER LINK
- LX7 CBTLS CHECK IF THIS FUNCTION ON SAME BUFFER
- ERX1 X4
- TA2 X7+FSTC,CBT READ CONTROL BUFFER FST
- MX0 21
- BX1 X1-X2
- LX0 -3
- BX0 X0*X1
- SA3 A2+B1
- ERRNZ IOLK-FSTC-1 CODE ASSUMES CONSECUTIVE WORDS
- NZ X0,PPC15 IF BUFFER MAY NOT BE FOR THIS FILE
- SA2 INBA
- PPC10 LX3 59-57
- BX0 X2*X1
- PL X3,PPC13 IF BUFFER DOES NOT CONTAIN WRITE DATA
- NZ X0,PPC11 IF NEW REQUEST NOT FOR THIS BUFFER
- SA2 A4
- LX2 59-6
- SB6 WTF
- NG X2,CBS IF WRITE TO THE SAME BUFFER
- PPC11 SX2 BMFL*100B FLUSH WRITE BUFFER
- SB4 PPC12 SET RETURN ADDRESS FOR *CIM*
- LX3 57-59
- PL X3,CIM IF I/O INTERLOCK NOT SET
- PPC12 SA1 PMFF
- ZR X1,RCR2 IF DIRECT ACCESS PERMANENT FILE
- PPC13 ZR X0,PPC14 IF REQUEST FOR THIS BUFFER
- R= X0,FUTL-FSTL CLEAR BUFFER LINK
- IX0 X4+X0
- ERX1 X0
- MX6 48
- BX6 X6*X1
- EWX6 X0
- PPC14 SA2 A4 GET MESSAGE BUFFER PARAMETERS
- BX7 X7-X7 SET *CHRV*
- SA7 CHRV
- LX2 59-7
- NG X2,RDF3 IF SKIP FUNCTION
- LX2 59-6-59+7
- SB6 RDF SET *CBS* EXIT ADDRESS
- PL X2,CBS IF READ FUNCTION
- SB6 WTF SET RETURN ADDRESS FOR *CBS*
- EQ CBS CHECK BUFFER SIZE
- PPC15 MX7 12
- LX7 -12
- BX6 X7*X2
- NZ X6,PPC13 IF FIRST TRACK DEFINED IN CONTROL BUFFER
- SA2 INBA
- BX6 -X7*X0 COMPARE ONLY EQUIPMENT
- ZR X6,PPC10 IF BUFFER MAY BE FOR THIS FILE
- EQ PPC13 CLEAR BUFFER INDEX
- TITLE CIO READ PROCESSOR.
- RDF SPACE 4,10
- ** RDF - READ/SKIP FORWARD FUNCTION PROCESSOR.
- *
- * ENTRY AT *RDF* FROM *PPC* VIA *CBS* IF READ FUNCTION.
- * AT *RDF3* FROM *PPC* IF SKIP FORWARD FUNCTION.
- * (X6) = BUFFER SIZE IN PRUS, IF ENTRY AT *RDF*.
- * (X7) = WORD COUNT OF DATA REMAINING IN BUFFER,
- * IF ENTRY AT *RDF*.
- *
- * EXIT TO *CMP* FOR COMPLETED FUNCTION.
- * TO *CMP5* IF UNNECESSARY READ FUNCTION.
- * TO *RCR* IF PRU TRANSFER LIMIT.
- *
- * ERROR EXIT TO *RPC* IF ERROR DETECTED.
- *
- * USES A - 0, 1, 2, 3, 6, 7.
- * B - 2, 4, 6.
- * X - 1, 2, 3, 6, 7.
- *
- * CALLS BRD, CBS, CIM, CPT, CRD, CSP, RBI, ULA, ULP.
- RDF NZ X6,RDF1 IF ROOM IN BUFFER
- SB2 B0 SET TERMINATION CONDITION NOT REACHED
- SA2 A4 GET MESSAGE BUFFER PARAMETERS
- LX2 59-10
- PL X2,CMP5 IF NOT *READSKP*
- LX2 59-56-59+10
- NG X2,RDF1 IF SKIP DATA TRANSFER FLAG SET
- SX6 14B CLEAR TERMINATION TO SET PRU STOP
- LX2 -59+56
- BX6 -X6*X2
- SA6 A4+
- SX7 B1+ RESET 1 PRU IN BUFFER
- SA7 NPCB
- RDF1 ERX1 X4 GET FST ENTRY
- LX1 59-11
- SA2 A4
- LX2 59-5
- SB5 RDF3 SET RETURN ADDRESS FOR *ULP*
- PL X1,RDF2 IF NOT SYSTEM SECTOR OPERATION
- MX6 -59
- BX6 -X6*X1 CLEAR SYSTEM SECTOR OPERATION FLAG
- SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST*
- PL X2,RPC IF NOT CONTROL WORD READ
- LX6 11-59
- EWX6 X4
- RDF2 LX2 59-4-59+5
- PL X2,RDF3 IF NOT *RPHRLS*/*READLS* FUNCTION
- SA1 A4-B1 GET FET LENGTH
- LX1 1
- SX7 /CIOERR/FPE *FET PARAMETER ERROR*
- AX1 49
- ZR X1,RPC IF NO LIST ADDRESS WORD IN FET
- SX1 4
- IX1 X5+X1
- ERX1 X1
- BX7 X7-X7 SET INITIAL CONVERSION FLAG
- LX1 59-23
- SA7 ULPA
- PL X1,ULP IF NOT CONTINUATION OF PREVIOUS OPERATION
- * INTERLOCK I/O BUFFER READ BUFFER.
- RDF3 ERX2 X4 READ FST
- SA1 PRUC CHECK FOR PRU TRANSFER LIMIT
- LX2 -48
- MX6 -12
- SX1 X1+LSLB
- BX3 -X6*X2 EST ORDINAL
- AX1 12
- NZ X1,RCR IF PRU TRANSFER LIMIT
- CX1 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA3 X1+EQDE,EST READ EST ENTRY
- SX1 B1
- LX7 X3,B1
- TA3 SYFO*FNTG+FSTG,FNT READ SYSTEM FILE FST
- LX2 48
- BX3 X3-X2
- PL X7,RDF3.1 IF NOT SYSTEM DEVICE
- SA2 CHRV
- SX7 40B
- LX3 -36
- BX7 X2+X7 SET *READSYS* FLAG IN *CHRV*
- BX3 -X6*X3
- NZ X3,RDF3.1 IF NOT SYSTEM FILE READ
- SA7 A2
- RDF3.1 IX1 X4+X1
- SA2 LBIA
- ERX1 X1 READ FNT LINK WORD
- ZR X2,RDF4 IF NO BUFFER INTERLOCKED
- BX6 -X6*X1 I/O BUFFER LINK
- SX2 B1 SET INTERLOCK VALUE
- SB6 RDF5 SET RETURN ADDRESS FOR *CSP*
- NZ X6,CSP IF LINK SET IN FNT
- SA0 RDF4 SET RETURN ADDRESS FOR *RBI*
- EQ RBI RELEASE BUFFER INTERLOCK
- RDF4 SX2 BMVI*100B+BMRD VALIDATE I/O BUFFER
- SB4 CPT SET RETURN ADDRESS FOR *CIM*
- EQ CIM CALL I/O BUFFER MANAGER
- RDF5 SB4 CPT SET RETURN ADDRESS FOR *CIM*
- SX2 BMRG*100B RELEASE BUFFER AND GET NEXT BUFFER
- NG X7,CIM IF SECTOR NOT IN SAME BUFFER
- SX7 X7-LSLB
- PL X7,CIM IF SECTOR NOT IN SAME BUFFER
- EQ CPT EXIT TO CALCULATE PRUS TO TRANSFER
- * REENTRY FROM *CPT*.
- * PROCESS DATA.
- RDF6 SA3 LBIA GET TRACK LINKAGE
- SA1 X3+PAD4
- MX3 -12
- BX6 -X3*X1 SAVE TRACK LINKAGE
- LX6 48
- SA2 A4
- SA6 STLR
- ZR B3,RDF11 IF EOI ONLY
- LX2 59-56
- SA1 A5+3 GET *IN*
- SX6 B6 WORD COUNT OF TRANSFER
- NG X2,RDF9 IF SKIP DATA TRANSFER
- SB6 RDF8 SET *BRD* EXIT ADDRESS
- AX1 24
- LX2 59-5-59+56
- NG X2,CRD IF *READCW*
- LX2 59-10-59+5
- PL X2,BRD IF NOT *READSKP*
- LX2 -59+10
- SX3 14B
- BX3 X3*X2
- NZ X3,BRD IF NOT ON PARTIAL SECTOR
- SX7 /CIO/EOR RESET EOR STOP
- MX3 1
- BX7 X7+X2
- LX3 56-59
- BX7 X7+X3 SET SKIP DATA TRANSFER FLAG
- SA3 WCCB GET WORD COUNT OF *CIO* BUFFER
- SA7 A4
- IX2 X3-X6
- PL X2,BRD IF ENOUGH ROOM IN BUFFER FOR SHORT PRU
- SX6 X3+ GET WORD COUNT OF *CIO* BUFFER
- EQ BRD COMPLETE FILL OF *CIO* BUFFER
- * REENTRY FROM *BRD*/*CRD*.
- * UPDATE *IN* POINTER IN FET AND MESSAGE BUFFER.
- RDF8 SX6 X1 UPDATE *IN* IN FET
- SX2 B1
- SA1 A5+3 UPDATE *IN* IN MESSAGE BUFFER
- IX2 X5+X2
- EWX6 X2
- SX1 X1+ *OUT*
- LX6 24
- BX6 X6+X1
- SA6 A1+
- * UPDATE CURRENT TRACK AND SECTOR IN FST.
- * UPDATE PRU COUNT.
- RDF9 SA2 NPTR GET PRU COUNT OF TRANSFER
- ERX1 X4 UPDATE CURRENT TRACK AND SECTOR IN FST
- LX1 -12
- IX6 X1+X2 ADVANCE CURRENT SECTOR
- SA1 NPCB DECREMENT BUFFER SPACE PRU COUNT
- IX7 X1-X2
- MX3 -LSLBS
- BX3 -X3*X6 MOD *LSLB* OF SECTOR
- NZ X3,RDF10 IF NOT LAST PRU IN CONTROL BUFFER
- SA3 STLR GET SECTOR/TRACK LINKAGE
- PL X3,RDF10 IF NOT END OF TRACK
- MX1 36
- BX6 X1*X6 CLEAR CURRENT SECTOR
- LX3 24
- BX6 X6+X3 SET NEXT TRACK
- RDF10 LX6 12
- SA3 PRUC INCREMENT PRU COUNT
- EWX6 X4
- IX6 X3+X2
- SA7 A1
- SA6 A3
- SA2 A4 GET TERMINATION STATUS
- * CHECK FOR PRU/EOR/EOF/EOI TERMINATION.
- RDF11 ERX1 X4 SET STATUS IN FST
- MX6 56
- BX6 X6*X1
- SX3 B2
- BX6 X6+X3
- EWX6 X4
- SX7 14B
- BX7 X7*X2
- IX1 X3-X7
- PL X1,RDF14 IF TERMINATION CONDITION REACHED
- * CHECK FOR BUFFER FULL TERMINATION.
- RDF12 SA2 A4
- SA1 NPCB CHECK BUFFER SPACE
- LX2 59-56
- SX6 X1+
- NG X2,RDF3 IF SKIP DATA TRANSFER
- SB6 RDF13 SET RETURN ADDRESS FOR *CBS*
- ZR X6,CBS IF NO MORE ROOM IN BUFFER
- RDF13 NZ X6,RDF3 IF MORE ROOM IN BUFFER
- SA2 A4
- LX2 59-10
- SB2 0 PREVENT SETTING FET TERMINATION STATUS
- PL X2,CMP IF NOT *READSKP*
- SX6 14B CLEAR TERMINATION TO SET PRU STOP
- LX2 10-59
- BX6 -X6*X2
- SA6 A4
- SX7 B1 RESET 1 PRU IN BUFFER
- SA7 NPCB
- EQ RDF3 PROCESS PARTIAL SECTOR
- * PRU/EOR/EOF/EOI STOP ENCOUNTERED.
- * ADVANCE *READLS*/*RPHRLS*.
- RDF14 SB5 ULA SET RETURN ADDRESS FOR *ULP*
- LX2 59-4
- SX7 B1
- NG X2,ULP IF *READLS*/*RPHRLS*
- SB4 B2-/CIO/EOF
- LX2 59-10-59+4
- PL X2,CMP IF NOT SKIP/*READSKP*
- LX2 59-7-59+10
- NG X2,RDF15 IF NOT *READSP*
- * PROCESS *READSKP* FUNCTION.
- LX2 0-20-59+7+60 GET LEVEL NUMBER
- MX1 56
- BX1 X1+X2
- MX7 1
- NZ X1,CMP IF *READSKP* TO EOR COMPLETE
- GE B4,CMP IF *READSKP* TO EOF COMPLETE
- LX7 56-59
- LX2 20-0 SET SKIP DATA TRANSFER FLAG
- BX7 X7+X2
- SA7 A4
- EQ RDF3 CONTINUE SKIP FOR *READSKP*
- * ADVANCE SKIP FUNCTION.
- RDF15 SA1 A5-B1 DECREMENT SKIP COUNT
- GT B4,CMP IF EOI ENCOUNTERED
- LX1 -18
- IX7 X1-X7
- SX1 X7
- LX7 18
- SA7 A1
- NZ X1,RDF3 IF SKIP FUNCTION NOT COMPLETE
- EQ CMP EXIT
- BRD SPACE 4,15
- ** BRD - BUFFER READ DATA.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- * (X0) = FWA DATA IN I/O BUFFER.
- * (X1) = *IN*.
- * (X6) = WORD COUNT TO TRANSFER.
- *
- * EXIT (X1) = ADVANCED *IN* POINTER.
- * (X6) = 0, IF NO DATA TRANSFERRED.
- *
- * USES A - 0, 2.
- * B - 4, 5.
- * X - 0, 2, 3, 6, 7.
- *
- * CALLS ABP.
- BRD ZR X6,RB6 IF NO DATA TO TRANSFER
- SA2 ABRA ABSOLUTE RA
- LX0 -30
- IX2 X1+X2 ABSOLUTE *IN*
- SA0 X2
- BX0 X0+X2
- LX0 30 30/ABSOLUTE *IN*, 30/FWA I/O BUFFER DATA
- SX7 X6 WORD COUNT OF TRANSFER
- SB4 BRD1 SET RETURN ADDRESS FOR *ABP*
- EQ ABP ADVANCE *IN*
- BRD1 NG X7,BRD4 IF NO SECOND PART TO TRANSFER
- IX6 X6-X7 NUMBER OF WORDS IN FIRST PART
- SX3 X2 RELATIVE *FIRST*
- SB4 X6 SET TRANSFER SIZE
- SB5 BTSZ
- BX2 X2-X2
- GE B5,B4,BRD3 IF ONE BLOCK OR LESS TO READ
- SA2 PSTA ADDRESS INCREMENT WORD
- BRD2 RE BTSZ
- RJ HHE HANG ON HALF-EXIT
- SB5 B5+BTSZ INCREMENT ADDRESSES
- SA0 A0+BTSZ
- BRD3 IX0 X0+X2
- LT B5,B4,BRD2 IF MORE BLOCKS TO TRANSFER
- SB5 B4-B5
- RE B5+BTSZ
- RJ HHE HANG ON HALF-EXIT
- MX2 -30
- SX6 B5+BTSZ SET WORD COUNT OF LAST BLOCK
- BX0 -X2*X0 CLEAR CM ADDRESS FIELD
- IX0 X0+X6 ADVANCE I/O BUFFER ADDRESS
- SA2 ABRA ABSOLUTE *RA*
- IX3 X3+X2 ABSOLUTE *FIRST*
- SA0 X3
- LX3 30
- BX0 X0+X3
- BX6 X7 SET BLOCK SIZE OF SECOND BLOCK
- BRD4 SB4 X6 SET TRANSFER SIZE
- SB5 BTSZ
- BX2 X2-X2
- GE B5,B4,BRD6 IF .LE. ONE BLOCK TO TRANSFER
- SA2 PSTA
- BRD5 RE BTSZ
- RJ HHE HANG ON HALF-EXIT
- SB5 B5+BTSZ
- SA0 A0+BTSZ INCREMENT ADDRESSES
- BRD6 IX0 X0+X2
- LT B5,B4,BRD5 IF MORE FULL BLOCKS TO TRANSFER
- SB5 B4-B5
- RE B5+BTSZ
- RJ HHE HANG ON HALF-EXIT
- JP B6 RETURN
- CRD SPACE 4,15
- ** CRD - CONTROL WORD READ DATA.
- *
- * ENTRY (B2) = READ STATUS.
- * (X0) = FWA OF DATA IN I/O BUFFER.
- * (X1) = *IN*.
- * (X6) = WORD COUNT OF TRANSFER.
- * (NPTR) = NUMBER OF PRUS TO TRANSFER.
- *
- * EXIT TO *RDF8*.
- *
- * USES A - 2, 3, 7.
- * B - 3, 4, 6.
- * X - 0, 2, 3, 6, 7.
- *
- * CALLS ABP, BRD.
- CRD BX3 X6 SAVE WORD COUNT, INITIALIZE PRU COUNT
- LX3 30
- CRD1 SX6 1 INCREMENT PRU COUNT
- BX7 X3
- IX3 X3+X6
- SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
- SX6 X3
- IX2 X2-X6
- NG X2,RDF8 IF NO MORE PRUS TO TRANSFER
- AX7 30+6 CALCULATE REMAINING WORD COUNT
- IX2 X7-X6
- SX6 100B SET FULL BLOCK WORD COUNT
- PL X2,CRD2 IF FULL BLOCK TO TRANSFER
- LX7 30+6
- IX6 X3-X7
- AX6 30 WORD COUNT OF TRANSFER
- NZ X6,CRD2 IF DATA TO TRANSFER
- SX2 B2-/CIO/EOF
- NZ X2,CRD2 IF NOT EOF
- SX7 14B
- SA2 A4
- BX2 X7*X2
- SX2 X2-/CIO/EOF
- ZR X2,RDF8 IF TERMINATE ON EOF
- * PROCESS HEADER CONTROL WORD.
- CRD2 BX7 X6 WORD COUNT
- SX2 B1
- LX2 36+6 PRU SIZE
- LX7 2
- IX7 X7+X6 BYTE COUNT
- BX7 X7+X2
- SA2 ABRA *RA*
- IX2 X1+X2
- EWX7 X2 STORE HEADER CONTROL WORD IN BUFFER
- SB4 BRD SET RETURN ADDRESS FOR *ABP*
- IX7 X0+X6 SAVE ADVANCED I/O BUFFER DATA ADDRESS
- SA7 CWLA
- BX7 X3 SAVE SECTOR COUNT
- SA7 A7+B1
- SX7 B1 SET TO ADVANCE *IN* BY 1 WORD
- SB6 CRD3 SET RETURN ADDRESS FOR *BRD*
- EQ ABP ADVANCE *IN*
- * PROCESS TRAILER CONTROL WORD.
- CRD3 ERX2 X4 BUILD TRAILER CONTROL WORD
- MX7 -24
- SA3 CWLA+1 RESTORE SECTOR COUNT
- LX2 -12
- BX7 -X7*X2 CURRENT TRACK AND SECTOR
- SX0 X3-1 GET PRU COUNT
- IX0 X7+X0
- LX2 12+3
- MX7 9
- BX7 X7*X2 EQUIPMENT
- LX7 -27
- MX2 4
- NZ X6,CRD4 IF DATA TRANSFERRED
- SB3 B2-/CIO/EOF
- NZ B3,CRD4 IF NOT EOF
- LX2 -8
- BX7 X7+X2
- CRD4 BX7 X7+X0
- SA2 ABRA *RA*
- IX2 X1+X2
- EWX7 X2 STORE TRAILER CONTROL WORD
- SX7 B1
- SA2 A3-B1 GET ADVANCED I/O BUFFER DATA ADDRESS
- SB4 CRD1 SET RETURN ADDRESS FOR *ABP*
- BX0 X2
- EQ ABP ADVANCE *IN*
- ULA SPACE 4,10
- ** ULA - UPDATE LIST ACCOUNTING.
- *
- * ENTRY (CLEA) = ABSOLUTE ADDRESS OF CURRENT LIST ENTRY.
- * (X3) = RANDOM ADDRESS FOR CURRENT ENTRY.
- *
- * EXIT TO *RDF12* TO CONTINUE DATA TRANSFER.
- * (ULPA) = CURRENT RANDOM ADDRESS.
- * (ULPA+1) = CURRENT FST.
- *
- * USES A - 1, 2, 3, 6.
- * X - 0, 1, 2, 3, 6.
- ULA ERX1 X4 GET FST
- BX6 X3 SAVE CURRENT RANDOM ADDRESS
- SA6 ULPA
- SA2 CLEA
- BX6 X1 SAVE FST
- SA6 A6+B1
- SX1 B1 GET PREVIOUS RANDOM ADDRESS
- IX1 X2-X1
- MX0 -24
- ERX1 X1
- BX1 -X0*X1
- SA2 PRUC SAVE OLD PRU COUNT
- SX6 X2
- LX6 30
- SX2 X2
- BX6 X6+X2
- SA6 A2
- IX1 X3-X1 CURRENT POSITION - PREVIOUS POSITION
- NG X1,ULA1 IF BACKWARD POSITIONING
- SX1 X1-IMPL-1 CHECK IF NEW POSITIONING ABOVE THRESHOLD
- NG X1,RDF12 IF NOT ABOVE THRESHOLD
- ULA1 SA2 UACC INCREMENT ACCOUNTING CHARGE
- SX6 IMRL
- IX6 X2+X6
- SA6 A2
- EQ RDF12 CONTINUE DATA TRANSFER
- ULP SPACE 4,10
- ** ULP - UPDATE LIST POINTER.
- *
- * ENTRY (B5) = EXIT ADDRESS.
- *
- * EXIT (CLEA) = ABSOLUTE ADDRESS OF CURRENT LIST ENTRY.
- * TO *CMP* IF END OF LIST ENCOUNTERED.
- *
- * ERROR TO *RPC* IF INCORRECT LIST ADDRESS.
- *
- * USES A - 1, 2, 6, 7.
- * B - 2, 6.
- * X - 0, 1, 2, 6, 7.
- *
- * CALLS CRA.
- ULP SX0 4 GET LIST POINTER
- IX0 X5+X0
- ERX1 X0
- SA2 B7+FLSW GET FL
- MX6 -12
- BX2 -X6*X2
- LX2 6
- SB6 X1
- SX7 /CIOERR/FPE *FET PARAMETER ERROR*
- LE B6,B1,RPC IF LIST POINTER .LE. 1
- BX6 X1 CHECK FOR CONTINUATION
- LX6 59-23
- NG X6,ULP1 IF CONTINUATION
- SX6 B1 PREVENT ADVANCE OF LIST POINTER
- IX1 X1-X6
- LX6 23-0
- BX1 X1+X6 SET CONTINUATION FLAG
- ULP1 SX6 1 ADVANCE LIST ADDRESS
- IX6 X1+X6
- EWX6 X0
- SX6 X6
- IX2 X6-X2
- PL X2,RPC IF LIST POINTER .GE. FL
- SA2 ABRA ABSOLUTE *RA*
- IX7 X2+X6
- SA7 CLEA SAVE CURRENT LIST ENTRY ABSOLUTE ADDRESS
- ERX2 X7 GET RANDOM ADDRESS
- MX7 -24
- SA1 ULPA
- BX3 -X7*X2
- IX6 X3-X1 CURRENT - PREVIOUS RANDOM ADDRESS
- ZR X3,ULP2 IF END OF LIST
- SB4 ULP2.1 SET RETURN ADDRESS FOR *CRA*
- ZR X1,CRA IF INITIAL CALL
- SA2 A1+B1 GET FST
- MX0 -12
- LX2 -12 EXTRACT SECTOR NUMBER SAVED IN FST
- BX1 -X0*X2
- IX7 X1+X6 FST SECTOR + RANDOM ADDRESS INCREMENT
- SA1 A4+B1 GET SECTORS PER TRACK
- SX6 X1
- IX1 X7-X6
- NG X7,CRA IF NEW RANDOM ADDRESS BEFORE THIS TRACK
- PL X1,CRA IF NEW RANDOM ADDRESS AFTER THIS TRACK
- LX2 -12 EXTRACT CURRENT TRACK
- BX0 -X0*X2
- EQ SFP SET UPDATED FST POSITION
- ULP2.1 R= X1,FUTL-FSTL
- IX0 X4+X1
- ERX1 X0
- MX6 -12
- BX7 -X6*X1
- ZR X7,ULP2.2 IF NO BUFFER INDEX
- LX7 CBTLS
- ERX2 X4
- TA3 X7+FSTC,CBT
- BX2 X2-X3
- SA3 INBA
- BX2 X3*X2
- BX6 X6*X1
- ZR X2,ULP2.2 IF ACCESSING THE SAME BUFFER
- EWX6 X0 CLEAR BUFFER INDEX
- ULP2.2 JP B5 EXIT
- * PROCESS END OF LIST.
- ULP2 MX7 1
- ERX1 X0 CLEAR CONTINUATION FLAG
- LX7 23-59
- BX7 -X7*X1
- EWX7 X0
- SB2 /CIO/EOF SET EOF RETURN FOR FET
- EQ CMP EXIT
- ULPA CON 0 PREVIOUS RANDOM ADDRESS
- CON 0 FST FOR PREVIOUS RANDOM ADDRESS
- TITLE CIO WRITE PROCESSOR.
- WTF SPACE 4,20
- ** WTF - WRITE FUNCTION PROCESSOR.
- *
- * ENTRY (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER THIS PASS.
- * (X7) = (WCCB) = WORD COUNT OF DATA IN BUFFER IF WRITE,
- * ROOM REMAINING IN BUFFER IF READ.
- *
- * EXIT TO *CMP* IF FUNCTION COMPLETE.
- * TO *CMP5* IF UNNECESSARY WRITE FUNCTION.
- * TO *RCR* IF TRANSFER LIMIT.
- * TO *RCR1* IF TRACK LIMIT.
- * TO *RCR2* IF INSUFFICIENT I/O BUFFERS TO
- * CONTINUE TRANSFER.
- *
- * ERROR EXIT TO *RPC* IF ERROR DETECTED.
- *
- * USES A - 0, 1, 2, 3, 6, 7.
- * B - 2, 3, 4, 6.
- * X - 0, 1, 2, 3, 6, 7.
- *
- * CALLS BWD, CBS, CIM, CMS, CPT, CRA, CSP, CWD, SNT, SRA.
- *
- * MACROS MONITOR.
- WTF SA3 A4 GET MESSAGE BUFFER PARAMETERS
- SX2 54B
- BX1 X2*X3 TERMINATION CONDITION AND *WRITECW* FLAG
- ERX2 X4 GET FST ENTRY
- SB4 X1-/CIO/EOI
- LX1 59-5
- SB2 B4-/CIO/EOF+/CIO/EOI
- SB6 WTF3 SET RETURN ADDRESS FOR *SNT*
- NZ X7,WTF1 IF DATA IN BUFFER
- NG X1,CMP5 IF *WRITECW* WITH NO DATA
- NZ B2,WTF1 IF NOT EOF OPERATION
- SX1 6
- BX1 X1*X2
- SX1 X1-2
- MX7 1
- ZR X1,WTF1 IF LAST OPERATION IS INCOMPLETE WRITE
- LX7 56-59 SET SKIP FLAG
- BX3 X3+X7
- WTF1 NZ X6,WTF2 IF AT LEAST ONE FULL SECTOR IN BUFFER
- ZR B4,CMP5 IF BUFFERED WRITE
- WTF2 SA1 A4+B1 GET MST ADDRESS
- LX2 -24
- MX7 -12
- AX1 18
- BX0 -X7*X2 CURRENT TRACK
- EQ SNT SET NEXT TRACK
- WTF3 ERX1 X4
- SA6 NTKP SAVE OLD EOI SECTOR/NEXT TRACK POINTER
- MX0 1
- LX1 -12
- BX7 -X7*X1 CURRENT SECTOR
- LX0 10-59
- LX1 59-1+12-60
- BX7 X6-X7
- BX6 -X0*X3 CLEAR REWRITE FLAG
- NG X2,WTF4 IF NOT EOI TRACK
- ZR X7,WTF5 IF POSITIONED AT EOI
- SX2 -1
- WTF4 BX6 X3
- PL X1,WTF5 IF LAST OPERATION NOT WRITE
- BX6 X3+X0 SET REWRITE FLAG
- WTF5 SA1 FMOD GET FILE MODE
- SB5 X1-1
- ZR X1,WTF6 IF NO RESTRICTIONS
- SX7 /CIOERR/IFM *ILLEGAL MODIFICATION*
- BX0 X0*X6
- ZR B5,WTF5.1 IF UPDATE MODE
- PL X2,WTF6 IF POSITIONED AT EOI
- EQ B5,B1,RPC IF APPEND MODE
- WTF5.1 ZR X0,RPC IF NOT REWRITE FOR UPDATE OR MODIFY MODE
- * SET FILE SIZE LIMIT.
- WTF6 SA6 A4
- BX3 X2 PRESERVE EOI FLAG
- SX2 B1 GET FILE SIZE INDEX FROM FNT
- IX2 X4+X2
- ERX2 X2
- MX7 -3
- LX2 -30
- BX7 -X7*X2
- LX7 -1
- LX6 59-56
- SA2 TFSL+X7 GET MAXIMUM FILE SIZE IN PRUS
- PL X7,WTF7 IF VALUE IN UPPER PART OF WORD
- LX2 30
- WTF7 AX2 30
- BX7 X2
- SA7 FSZL SAVE FILE SIZE LIMIT
- PL X6,WTF7.1 IF NOT *WRITEF* WITH NO DATA
- SX6 B0+
- SA6 WCCB CLEAR DATA WORD COUNT
- SA6 NPCB CLEAR DATA PRU COUNT
- WTF7.1 SB4 WTF7.2
- SB4 -B4
- NG X3,SRA IF NOT POSITIONED AT EOI
- ZR X7,WTF7.5 IF NO FILE SIZE LIMIT
- SB4 WTF7.4
- SB4 -B4 PREVENT FST/FET UPDATE
- EQ SRA CALCULATE CURRENT POSITION RANDOM ADDRESS
- WTF7.2 SB4 WTF7.3 SET RETURN ADDRESS FOR *CRA*
- BX7 X3 SAVE CURRENT POSITION RANDOM ADDRESS
- SB4 -B4 PREVENT FST/FET UPDATE
- SA7 SCIE
- SX3 B0+
- EQ CRA CALCULATE EOI RANDOM ADDRESS
- WTF7.3 SA1 SCIE NUMBER OF SECTORS AFTER CURRENT POSITION
- IX7 X3-X1
- SA7 A1
- EQ WTF8 PROCESS WRITE
- WTF7.4 SA2 FSZL SET FILE SIZE
- SX1 B2
- IX7 X7+X1 SECTOR COUNT THROUGH END OF TRACK
- LX7 30
- BX6 X2+X7
- SX7 B0
- SA6 A2
- WTF7.5 SA7 SCIE SET CURRENT POSITION = EOI ((SCIE) = 0)
- * CALCULATE NUMBER OF SECTORS FOR WRITE OPERATION.
- WTF8 SA2 A4 GET TERMINATION CONDITION
- MX1 -2
- SA0 WTF11 SET RETURN ADDRESS FOR *CMS*
- LX2 -2
- BX1 -X1*X2
- SB6 WTF9 SET RETURN ADDRESS FOR *CBS*
- SB3 X1-/CIO/EOI/4
- ZR B3,CBS IF BUFFERED WRITE
- SA3 NPCB GET NUMBER OF SECTORS IN *CIO* BUFFER
- SB2 X1
- SB2 X3+B2 SECTOR COUNT = FULL PRUS+EOR+EOF+EOI
- EQ CMS COMPUTE MOD 40B OF CURRENT SECTOR
- WTF9 SA2 A4+
- SB2 X6 SECTOR COUNT = FULL PRUS
- LX2 59-5
- PL X2,WTF10 IF NOT *WRITECW*
- BX6 X7
- LX2 59-10-59+5
- NG X2,WTF10 IF REWRITE
- SB2 B2+10B COMPENSATE FOR SHORT SECTORS
- WTF10 NZ X6,CMS IF DATA IN BUFFER
- EQ CMP COMPLETE PROCESSING
- * CALCULATE NUMBER OF I/O BUFFERS NEEDED FOR WRITE.
- WTF11 PX6 X2
- SB2 X1+B2 MOD 40B OF CURRENT SECTOR + SECTOR COUNT
- SA2 A4
- LX2 59-10
- NG X2,WTF12 IF REWRITE
- SB2 B2+LSLB ROUND UP NUMBER OF BUFFERS AND COUNT EOI
- WTF12 SX1 B2+
- PX1 X1
- NX6 X6
- FX1 X1/X6
- UX1,B6 X1
- LX1 B6
- SB6 X1 NUMBER OF I/O BUFFERS NEEDED
- SA1 A4+B1 GET SECTORS PER TRACK
- SX7 X1
- SA1 LBIA CHECK IF BUFFER INTERLOCKED
- AX7 LSLBS
- SB3 X7 NUMBER OF I/O BUFFERS PER TRACK
- SB4 11
- GE B6,B4,WTF12.1 IF MORE THAN 11 BUFFERS NEEDED
- LE B6,B3,WTF12.2 IF NOT MORE THAN ONE TRACK OF BUFFERS
- SB4 B3
- EQ WTF13 RESTRICT TO ONE TRACK WORTH OF BUFFERS
- WTF12.1 LE B4,B3,WTF13 IF NOT MORE THAN ONE TRACK OF BUFFERS
- SB4 B3+
- EQ WTF13 RESTRICT TO ONE TRACK WORTH OF BUFFERS
- WTF12.2 SB4 B6+
- GT B6,B1,WTF13 IF MORE THAN 1 BUFFER NEEDED
- SB4 1
- NZ X1,CPT IF BUFFER ALREADY INTERLOCKED
- SX7 BMVI*100B+BMRW
- NG X2,WTF14 IF REWRITE OF ONE BUFFER
- WTF13 SX7 BMVI*100B+BMWR
- ZR X1,WTF14 IF NO INTERLOCKED BUFFER
- MX1 1 SET CURRENT BUFFER INTERLOCKED FLAG
- LX1 41-59
- BX7 X7+X1
- WTF14 SX2 B4-B1
- SX1 LSLB LOGICAL SECTORS PER I/O BUFFER
- IX0 X2*X1 CHECK IF PRU COUNT OVERFLOW
- LX2 42
- IX0 X0+X1
- SA1 PRUC
- IX1 X1+X0
- AX1 12
- NZ X1,RCR IF PRU COUNT WILL EXCEED 12 BITS
- BX7 X7+X2 SET NUMBER OF I/O BUFFERS TO REQUEST
- SA7 WLBR
- * CALCULATE NUMBER OF I/O BUFFERS ON REMAINDER OF
- * CURRENT TRACK.
- SA2 A4+B1 GET SECTORS PER TRACK
- SX7 X2
- IX1 X7-X3 SECTOR LIMIT - FIRST SECTOR IN BUFFER
- PX1 X1
- FX1 X1/X6
- UX1,B6 X1
- LX1 B6
- SB6 X1+ NUMBER OF I/O BUFFERS REMAINING ON TRACK
- GE B6,B4,WTF20 IF SUFFICIENT ROOM ON CURRENT TRACK
- MX0 -12
- ERX3 X4 GET CURRENT TRACK
- LX2 -18
- SX1 X2 MST ADDRESS
- SB6 WTF15 SET RETURN ADDRESS FOR *SNT*
- LX3 -24
- BX0 -X0*X3
- EQ SNT SET NEXT TRACK
- WTF15 SA3 B7+ACLW CHECK FOR JOB PRU LIMIT
- NG X2,WTF20 IF NEXT TRACK ASSIGNED
- ZR B5,WTF20 IF UPDATE MODE
- MX2 -18
- SX7 /CIOERR/PRL *PRU LIMIT*
- BX2 -X2*X3
- SA3 FSZL FILE SIZE LIMIT
- ZR X2,RPC IF JOB PRU LIMIT
- * CHECK FILE SIZE LIMIT.
- ZR X3,WTF18 IF UNLIMITED
- BX2 X3
- AX2 30
- SA1 A4+B1 SECTORS PER TRACK
- SX1 X1
- NZ X2,WTF17 IF FILE SIZE ALREADY CALCULATED
- SB4 WTF16 SET RETURN ADDRESS FOR *SRA*
- SB4 -B4 PREVENT SETTING RANDOM INDEX IN FET
- EQ SRA CALCULATE NUMBER OF SECTORS ON FILE
- WTF16 SA3 FSZL FILE SIZE LIMIT
- SX1 B2
- IX6 X7+X1 SECTOR COUNT THRU END OF CURRENT TRACK
- LX6 30
- BX3 X3+X6
- WTF17 MX6 -30
- BX6 -X6*X3
- LX1 30 ADD IN SECTORS FOR NEW TRACK
- IX7 X1+X3
- SA7 A3+
- AX7 30
- IX6 X7-X6
- SX7 /CIOERR/FTL *FILE TOO LONG*
- PL X6,RPC IF FILE SIZE LIMIT EXCEEDED
- * REQUEST ADDITIONAL TRACK.
- WTF18 ERX1 X4 GET EQUIPMENT AND CURENT TRACK
- MX6 -12
- LX1 12
- BX6 -X6*X1
- LX1 12
- MX0 12
- BX1 X0*X1
- BX6 X1+X6
- LX6 36
- SX7 B1 REQUEST ONE TRACK
- BX6 X6+X7
- MX0 -5
- MONITOR RTCM
- MX6 -12 CHECK TRACK ASSIGNMENT
- BX7 -X6*X1
- NZ X7,WTF19 IF TRACK ASSIGNED
- * PROCESS TRACK LIMIT.
- + NG X1,RCR1 IF *RTCM* REJECT
- EQ RPC CALL PP CIO TO COMPLETE REQUEST
- * INCREMENT MASS STORAGE PRU COUNT.
- WTF19 SA1 A4+B1 GET SECTORS PER TRACK
- SX1 X1
- SA2 PCMS
- IX6 X2+X1
- SA6 A2
- MX7 1
- LX7 10-59
- SA2 A4 CLEAR REWRITE FLAG
- BX7 -X7*X2
- SA7 A4+
- * CALL I/O BUFFER MANAGER.
- WTF20 SA2 WLBR GET NUMBER OF I/O BUFFERS TO REQUEST
- SB4 WTF21 SET RETURN ADDRESS FOR *CIM*
- EQ CIM CALL I/O BUFFER MANAGER
- WTF21 SA2 A5+B1 CHECK IF MULTIPLE BUFFERS INTERLOCKED
- BX7 X7-X7
- NZ X2,CPT IF MORE THAN ONE BUFFER ASSIGNED
- SA2 WLBR
- SA0 WTF21.1 SET RETURN ADDRESS FOR *CMS*
- AX2 41
- ZR X2,CPT IF ONLY ONE BUFFER REQUESTED
- LX2 -1
- NG X2,WTF21.2 IF NEXT BUFFER REQUIRED
- EQ CMS CALCULATE MOD 40B OF CURRENT SECTOR
- WTF21.1 SX1 X1-LSLB+LSLB/4
- NG X1,CPT IF CAN WRITE MORE DATA TO CURRENT BUFFER
- WTF21.2 SA2 A4 CHECK FOR REWRITE
- LX2 59-10
- PL X2,RCR2 IF NOT REWRITE
- EQ CPT CALCULATE PRU-S TO TRANSFER
- * REENTRY FROM *CPT*.
- * CHECK IF ROOM FOR BLOCK WRITE AND EOI.
- WTF23 ERX1 X4 GET CURRENT SECTOR
- LX1 -12
- MX7 -12
- BX1 -X7*X1
- IX7 X1+X6 LAST SECTOR POSITION + 1 TO TRANSFER
- SA1 A4 CHECK FOR REWRITE
- MX6 1
- LX1 59-10
- SB4 B6 SAVE WORD COUNT
- BX6 -X6*X1
- PL X1,WTF24 IF NOT REWRITE
- SA1 NTKP GET NEXT TRACK POINTER
- IX1 X1-X7
- PL X1,WTF25 IF NOT OVERWRITTING EOI SECTOR
- NZ B5,WTF24 IF NOT UPDATE MODE
- SX7 /CIOERR/IFM *INCORRECT MODIFICATION*
- EQ RPC CALL *1MS*
- WTF24 SA1 A4+B1 SET WRITE EOI FLAG
- LX6 10-59
- SA6 A4+ CLEAR REWRITE FLAG
- MX6 1
- BX6 X1+X6
- SA6 A4+1
- SA1 LBIA GET FIRST SECTOR OF CURRENT BUFFER
- AX1 30
- IX6 X7-X1 MOD 40B OF LAST SECTOR TO TRANSFER + 1
- SA1 A5+1 CHECK FOR MORE BUFFERS INTERLOCKED
- SX6 X6-LSLB
- NG X6,WTF25 IF NOT OVERWRITE OF LAST SECTOR IN BUFFER
- ZR X1,WTF8 IF MUST SAVE ROOM FOR EOI
- * ADVANCE CURRENT TRACK/SECTOR.
- WTF25 ERX1 X4 GET FST ENTRY
- MX6 48
- LX1 -12
- BX6 X6*X1
- SA2 A4+B1 GET SECTOR LIMIT
- BX6 X6+X7 SAVE ADVANCED SECTOR
- SX1 X2
- IX1 X7-X1
- NG X1,WTF28 IF NOT AT END OF TRACK
- LX2 -18 GET SECTOR LIMIT
- SX1 X2 MST ADDRESS
- BX7 X0 SAVE I/O BUFFER DATA ADDRESS
- LX6 -12
- MX0 -12
- BX0 -X0*X6 CURRENT TRACK
- SB6 WTF26 SET RETURN ADDRESS FOR *SNT*
- EQ SNT SET NEXT TRACK
- WTF26 PL X2,WTF26 IF NEXT TRACK NOT ASSIGNED
- SA6 NTKP SAVE NEXT TRACK POINTER
- BX0 X6
- SB6 WTF27 SET RETURN ADDRESS FOR *SNT*
- EQ SNT SET NEXT TRACK
- WTF27 SA1 A6
- BX0 X7 RESTORE I/O BUFFER DATA ADDRESS
- SA6 A6+ SAVE OLD EOI SECTOR/NEXT TRACK POINTER
- BX7 X1
- MX6 48
- ERX1 X4 GET FST ENTRY
- LX1 -24
- BX1 X6*X1
- BX1 X1+X7 SET CURRENT TRACK
- LX1 12
- BX6 X6*X1 CLEAR CURRENT SECTOR
- * SET LINK IN HEADER IF LAST PRU IN SECTOR USED.
- * INCREMENT TOTAL PRU COUNT.
- * DECREMENT CIO BUFFER PRU COUNT AND WORD COUNT.
- WTF28 SA2 USCW GET UPDATED SECTOR CONTROL WORD
- MX1 2
- LX1 23-59 CLEAR DATA FLAGS
- BX2 -X1*X2
- MX1 -LSLBS CHECK IF LAST PRU IN BUFFER USED
- BX1 -X1*X6 MOD *LSLB* OF CURRENT SECTOR
- LX6 12
- SB6 X1
- BX1 X6
- BX6 X2
- MX2 48
- NZ B6,WTF29 IF NOT WRITING LAST PRU IN BUFFER
- BX6 X2*X6 SET NEXT TRACK/SECTOR IN HEADER
- BX6 X6+X7
- WTF29 SA6 X3 STORE HEADER
- SX3 B2-/CIO/EOR
- MX6 56
- SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
- BX6 X6*X1 SET LAST OPERATION INCOMPLETE WRITE
- LX2 6
- SB6 X2-100B
- SX2 2
- BX6 X6+X2
- LX7 36 BUILD EOF TRAILER
- NG X3,WTF31 IF FULL BLOCK TRANSFER
- SX1 B6+77B
- NZ X3,WTF30 IF EOF TRANSFERRED
- SX3 B4-B6 CALCULATE WORD COUNT OF SHORT PRU
- LX7 12
- LX3 -24
- BX7 X7+X3
- WTF30 SA7 ERWB PLACE TRAILER IN EXTENDED WRITE BUFFER
- SB6 A0+ SAVE (A0)
- BX7 X0 SAVE (X0)
- LX0 30
- SA0 A7 FWA TO BEGIN TRANSFER FROM
- AX0 30
- SX3 A7
- IX1 X0+X1
- LX3 30
- BX0 X1+X3 30/FWA FROM, 30/FWA I/O BUFFER DATA TO
- WE 1 TRANSFER ONE WORD
- RJ HHE HANG ON HALF-EXIT
- BX0 X7 RESTORE (X0)
- SA0 B6 RESTORE (A0)
- LX2 1 SET LAST OPERATION COMPLETE WRITE
- BX6 X6+X2
- WTF31 SA2 A2 GET NUMBER OF PRUS TO TRANSFER
- EWX6 X4
- SA1 PRUC INCREMENT TOTAL PRU COUNT
- SA3 WCCB DECREMENT CIO BUFFER WORD COUNT
- IX6 X1+X2
- SA6 A1
- SA1 NPCB DECREMENT CIO BUFFER PRU COUNT
- SX7 B4
- IX7 X3-X7
- IX6 X1-X2
- PL X6,WTF32 IF MORE PRUS IN CIO BUFFER
- BX6 X6-X6
- WTF32 SA6 A1
- SA7 A3
- SA1 SDTW SKIP DATA TRANSFER FLAG FOR WRITE
- SA2 A4
- BX7 X2+X1 ADD SKIP FLAG
- SA7 A4
- LX2 59-5
- SA1 A5+3 GET *OUT*
- SX6 B4 SET WORD COUNT TO TRANSFER
- SX1 X1
- NG X2,CWD IF *WRITECW*
- SB6 WTF33 SET RETURN ADDRESS FOR *BWD*
- EQ BWD BUFFER WRITE DATA
- * REENTRY FROM *BWD*/*CWD*.
- * DATA TRANSFERRED FROM CIO BUFFER TO I/O BUFFER.
- * UPDATE *OUT* POINTER IN FET AND MESSAGE BUFFER.
- WTF33 SX3 B1+B1 UPDATE *OUT* IN FET
- SX6 X1
- MX2 36
- IX3 X5+X3
- SA1 A5+3 UPDATE *OUT* IN MESSAGE BUFFER
- SB6 WTF34 SET RETURN ADDRESS FOR *CSP*
- EWX6 X3
- BX2 X2*X1 *IN*
- BX6 X6+X2
- SA6 A1
- EQ CSP CALCULATE SECTOR POSITION
- * CHECK IF CURRENT SECTOR IN SAME I/O BUFFER.
- WTF34 SX2 BMRF*100B RELEASE AND FLUSH WRITE BUFFER
- SB4 WTF36 SET RETURN ADDRESS FOR *CIM*
- NG X7,CIM IF SECTOR NOT IN SAME BUFFER
- SX7 X7-LSLB
- PL X7,CIM IF SECTOR NOT IN SAME BUFFER
- SB6 CPT CALCULATE PRUS TO TRANSFER
- WTF35 SA2 A4 CHECK IF TERMINATION CONDITION REACHED
- SX6 14B
- BX6 X6*X2
- SB3 X6
- SB2 B2-B3
- PL B2,CMP IF TERMINATION CONDITION REACHED
- JP B6 CONTINUE WRITE PROCESSING
- WTF36 SA2 A4 CHECK FOR REWRITE
- LX2 59-10
- PL X2,WTF36.1 IF NOT REWRITE
- SA1 PMFF
- SB6 RCR2 EXIT ADDRESS IF OPERATION NOT COMPLETE
- ZR X1,WTF35 IF DIRECT ACCESS PERMANENT FILE
- WTF36.1 ZR X6,WTF37 IF NEXT BUFFER NOT INTERLOCKED
- SB6 CPT CALCULATE PRUS TO TRANSFER
- NG X2,WTF35 IF REWRITE
- SA1 A5+1
- NZ X1,WTF35 IF ADDITIONAL I/O BUFFERS INTERLOCKED
- WTF37 SB6 WTF8 REQUEST MORE I/O BUFFERS
- EQ WTF35 CHECK FOR TERMINATION CONDITION
- BWD SPACE 4,15
- ** BWD - BUFFER WRITE DATA.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- * (X0) = FWA TO TRANSFER DATA IN I/O BUFFER.
- * (X1) = *OUT*.
- * (X6) = WORD COUNT TO TRANSFER.
- *
- * EXIT (X1) = ADVANCED *OUT* POINTER.
- * (B5) = FILE MODE - 1.
- *
- * USES A - 0, 1, 2.
- * B - 4, 5.
- * X - 0, 2, 3, 6, 7.
- *
- * CALLS ABP.
- BWD ZR X6,RB6 IF NO DATA TO TRANSFER
- SA2 ABRA ABSOLUTE *RA*
- LX0 -30
- IX2 X1+X2 ABSOLUTE *OUT*
- SA0 X2
- BX0 X0+X2
- LX0 30 30/ABSOLUTE *OUT*, 30/FWA I/O BUFFER DATA
- SX7 X6
- SB4 BWD1 SET RETURN ADDRESS FOR *ABP*
- EQ ABP ADVANCE *OUT*
- BWD1 NG X7,BWD4 IF NO SECOND PART TO TRANSFER
- IX6 X6-X7 NUMBER OF WORDS IN FIRST PART
- SX3 X2 RELATIVE *FIRST*
- SB4 X6 SET TRANSFER SIZE
- SB5 BTSZ
- BX2 X2-X2
- GE B5,B4,BWD3 IF ONE BLOCK OR LESS TO WRITE
- SA2 PSTA ADDRESS INCREMENT WORD
- BWD2 WE BTSZ
- RJ HHE HANG ON HALF-EXIT
- SB5 B5+BTSZ INCREMENT ADDRESSES
- SA0 A0+BTSZ
- BWD3 IX0 X0+X2
- LT B5,B4,BWD2 IF MORE BLOCKS TO TRANSFER
- SB5 B4-B5
- WE B5+BTSZ
- RJ HHE HANG ON HALF-EXIT
- MX2 -30
- SX6 B5+BTSZ SET WORD COUNT OF LAST BLOCK
- BX0 -X2*X0 CLEAR CM ADDRESS FIELD
- IX0 X0+X6 ADVANCE I/O BUFFER ADDRESS
- SA2 ABRA ABSOLUTE *RA*
- IX3 X3+X2 ABSOLUTE *FIRST*
- SA0 X3
- LX3 30
- BX0 X0+X3
- BX6 X7 SET BLOCK SIZE OF SECOND BLOCK
- BWD4 SB4 X6 SET TRANSFER SIZE
- SB5 BTSZ
- BX2 X2-X2
- GE B5,B4,BWD6 IF .LE. ONE BLOCK TO TRANSFER
- SA2 PSTA
- BWD5 WE BTSZ
- RJ HHE HANG ON HALF-EXIT
- SB5 B5+BTSZ
- SA0 A0+BTSZ INCREMENT ADDRESSES
- BWD6 IX0 X0+X2
- LT B5,B4,BWD5 IF MORE FULL BLOCKS TO TRANSFER
- SB5 B4-B5
- WE B5+BTSZ
- RJ HHE HANG ON HALF-EXIT
- SA2 FMOD RESTORE FILE MODE
- SB5 X2-1
- JP B6 RETURN
- CWD SPACE 4,15
- ** CWD - CONTROL WORD WRITE DATA.
- *
- * ENTRY (X0) = FWA TO TRANSFER DATA IN I/O BUFFER.
- * (X1) = *OUT*.
- * (X6) = WORD COUNT TO TRANSFER.
- *
- * EXIT TO *WTF33*.
- * (X1) = ADVANCED *OUT* POINTER.
- *
- * USES A - 2, 3, 7.
- * B - 4, 6.
- * X - 0, 2, 3, 6, 7.
- *
- * CALLS ABP, BWD.
- CWD SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
- SA3 WCCB DECREMENT WORD COUNT OF *CIO* BUFFER
- LX2 1 COUNT CONTROL WORDS
- IX7 X3-X2
- SA7 A3
- BX3 X6 WORD COUNT OF TRANSFER
- SA2 NPTR
- ZR X2,WTF33 IF TRANSFER COMPLETE
- SX6 B1
- IX7 X2-X6
- SA7 A2
- SX7 B1 SKIP OVER HEADER CONTROL WORD
- SB4 CWD2 SET RETURN ADDRESS FOR *ABP*
- EQ ABP ADVANCE *OUT*
- CWD2 LX6 6 SET FULL BLOCK WORD COUNT
- IX7 X0+X6 SAVE ADVANCED I/O BUFFER DATA ADDRESS
- SA7 CWLA
- IX3 X3-X6
- PL X3,CWD3 IF FULL BLOCK
- IX6 X3+X6 SET SHORT BLOCK WORD COUNT
- CWD3 BX7 X3 SAVE WORD COUNT
- SB6 CWD4
- SA7 A7+B1
- EQ BWD WRITE DATA
- CWD4 SA2 CWLA GET ADVANCED I/O BUFFER DATA ADDRESS
- SA3 A2+B1 GET WORD COUNT
- BX0 X2 RESET (X0)
- SA2 NPTR WORD COUNT OF TRANSFER
- SB4 WTF33 SET EXIT ADDRESS
- SX7 B1
- ZR X2,ABP IF TRANSFER COMPLETE, ADVANCE OUT
- IX7 X2-X7 DECREMENT PRUS
- SA7 A2
- SB4 CWD2 SET RETURN ADDRESS
- SX7 B1+B1 SKIP TRAILER AND HEADER CONTROL WORDS
- SX6 B1
- EQ ABP ADVANCE *OUT*
- SCW SPACE 4,30
- ** SCW - SCAN CONTROL WORDS FOR *WRITECW*.
- *
- * ENTRY (B2) = MAXIMUM PRUS TO TRANSFER THIS PASS.
- * (B4) = MOD 10B OF CURRENT SECTOR.
- * (X0) = I/O BUFFER DATA FWA.
- * (X3) = ADDRESS OF CONTROL WORD.
- *
- * EXIT TO *CMP* IF TRANSFER TERMINATED DUE TO INSUFFICIENT
- * DATA IN CIO BUFFER.
- * TO *CPT* IF MORE DATA AVAILABLE AFTER INSUFFICIENT
- * DATA DETECTED.
- * TO *WTF23* IF PRUS TO TRANSFER.
- * (B2) = STATUS (0 = FULL BLOCK, 4 = EOR, 10B = EOF).
- * (B6) = WORD COUNT OF TRANSFER.
- * (X0) AND (X3) RESTORED TO SAME AS ON ENTRY.
- * (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER
- * THIS PASS (1 TO 10B).
- *
- * ERROR TO *RPC* IF BUFFER CONTROL WORD ERROR.
- *
- * USES A - 0, 2, 3, 6, 7.
- * B - 2, 3, 4, 6.
- * X - 0, 1, 2, 3, 6, 7.
- *
- * CALLS ABP, CBS.
- SCW SA2 X3 GET HEADER WORD
- BX6 X2
- SA6 USCW SAVE UPDATED SECTOR CONTROL WORD
- LX0 30
- SA2 A5+B1
- SB3 B4-LSLB/4
- SA0 B4 MOD 10B OF CURRENT SECTOR
- NZ X2,SCW0 IF NEXT BUFFER RESERVED
- SB2 -B3 LIMIT TRANSFER TO PRESERVE ROOM FOR EOI
- SCW0 BX0 X3+X0 SAVE (X3) AND (X0)
- SA3 A5+3 GET *OUT*
- BX6 X6-X6 CLEAR NUMBER OF PRUS TO TRANSFER
- SX1 X3
- SCW1 SA2 WCCB GET WORD COUNT OF *CIO* BUFFER
- LX3 X6,B1
- LX6 6
- IX3 X3+X6 NUMBER OF WORDS TO TRANSFER
- LX6 -6
- SB4 X2
- IX3 X2-X3
- SA2 ABRA ABSOLUTE *RA*
- ZR X3,SCW7 IF NO MORE DATA IN BUFFER
- IX2 X2+X1
- MX7 -12
- ERX2 X2 GET HEADER CONTROL WORD
- BX2 -X7*X2 BYTE COUNT
- SX7 X2-500B
- NZ X7,SCW4 IF NOT FULL BLOCK
- SX3 X3-102B
- NG X3,SCW7 IF NOT ENOUGH DATA IN BUFFER
- SX6 X6+B1 INCREMENT NUMBER OF SECTORS TO TRANSFER
- SB6 A0
- SA2 USCW UPDATE SECTOR CONTROL WORD
- SB4 LSLB/4
- NE B6,B4,SCW1.1 IF PRU NOT IN NEXT CONTROL WORD
- BX7 X2 STORE SECTOR CONTROL WORD IN BUFFER
- SB6 B0
- SA7 X0
- SA2 A7+B1 GET NEXT SECTOR CONTROL WORD
- SX3 B1 INCREMENT SECTOR CONTROL WORD ADDRESS
- SA0 B0+
- IX0 X0+X3
- SCW1.1 SX7 10000B BUILD SECTOR MASK
- LX7 B6
- SA0 A0+B1
- BX7 -X7*X2 CLEAR SHORT PRU FLAG
- SX3 B2+
- IX3 X3-X6
- SA7 USCW SAVE UPDATED SECTOR CONTROL WORD
- SX7 102B SET NUMBER OF WORDS TO ADVANCE
- SB4 SCW1 SET RETURN ADDRESS FOR *ABP*
- NZ X3,ABP IF MORE PRUS TO TRANSFER
- SCW2 LX6 6
- SB6 X6 WORD COUNT TO TRANSFER
- SB2 B0 SET FULL BLOCK INDICATOR
- LX6 -6
- SCW3 MX1 -30
- BX3 -X1*X0 RESTORE (X0) AND (X3)
- SA6 NPTR SAVE NUMBER OF PRUS TO TRANSFER
- AX0 30
- EQ WTF23 RETURN TO MAIN WRITE LOOP
- SCW4 PL X7,SCW6 IF BYTE COUNT .GT. 500B
- SX7 5
- PX7 X7
- PX2 X2
- NX7 X7
- FX7 X2/X7
- UX7,B6 X7
- LX7 B6
- SX2 X7+2
- IX3 X3-X2
- NG X3,SCW7 IF NOT ENOUGH DATA IN BUFFER
- SB3 X7
- SA2 USCW GET UPDATED SECTOR CONTROL WORD
- SB4 LSLB/4
- SX3 B1
- SB6 A0
- NE B6,B4,SCW4.1 IF PRU NOT IN NEXT CONTROL WORD
- BX7 X2 STORE SECTOR CONTROL WORD IN BUFFER
- SA0 B0
- SA7 X0
- SA2 A7+B1 GET NEXT SECTOR CONTROL WORD
- IX0 X0+X3
- SB6 B0
- SCW4.1 LX3 12
- LX3 B6
- BX7 X2+X3 SET SHORT PRU FLAG
- SA7 USCW SAVE UPDATED SECTOR CONTROL WORD
- LX6 6
- SB6 X6+B3 WORD COUNT OF TRANSFER
- LX6 -6
- SX6 X6+B1 INCREMENT NUMBER OF SECTORS TO TRANSFER
- SB2 /CIO/EOR SET EOR STATUS
- NZ B3,SCW3 IF DATA IN BLOCK
- SB4 SCW5 SET RETURN ADDRESS FOR *ABP*
- SX7 1 SET NUMBER OF WORDS TO ADVANCE
- EQ ABP ADVANCE *OUT*
- SCW5 SA2 ABRA *RA*
- IX2 X2+X1
- MX7 -4
- ERX2 X2 GET TRAILER CONTROL WORD
- MX7 -4
- LX2 12
- BX7 X7+X2
- NZ X7,SCW3 IF NOT LEVEL 17B
- SB2 /CIO/EOF SET EOF STATUS
- EQ SCW3 RESTORE ENTRY CONDITIONS
- SCW6 SX7 /CIOERR/BLE *BUFFER CONTROL WORD ERROR*
- EQ RPC CALL PP CIO
- * PROCESS INSUFFICIENT DATA IN CIO BUFFER.
- SCW7 NZ X6,SCW2 IF SECTORS TO TRANSFER
- SB6 SCW8 SET RETURN ADDRESS FOR *CBS*
- EQ CBS CHECK BUFFER SPACE
- SCW8 SX1 B4
- IX7 X1-X7
- NG X7,CPT IF MORE DATA IN BUFFER
- EQ CMP COMPLETE WRITE PROCESSING
- TITLE CIO PROCESSOR SUBROUTINES.
- ABP SPACE 4,15
- ** ABP - ADVANCE BUFFER POINTERS.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (X1) = *IN* OR *OUT* POINTER TO BE ADVANCED.
- * (X7) = NUMBER OF WORDS TO TRANSFER.
- *
- * EXIT (X1) = ADVANCED *IN* OR *OUT* POINTER.
- * (X2) = *FIRST* POINTER IN BITS 0 - 17.
- * (X7) = NUMBER OF WORDS TO TRANSFER AFTER WRAP-AROUND
- * IF .GT. 0.
- *
- * USES A - 2.
- * X - 1, 2, 7.
- ABP SA2 A4-B1 GET *FIRST* AND *LIMIT*
- SX2 X2 *LIMIT*
- IX2 X2-X1 NUMBER OF WORDS IN BUFFER BEFORE WRAP
- IX1 X1+X7 ADVANCE *IN* OR *OUT* POINTER
- IX7 X7-X2 NUMBER OF WORDS TO TRANSFER AFTER WRAP
- SA2 A4-1 GET *FIRST*
- LX2 -24
- SX2 X2
- NG X7,RB4 IF NO WRAP AROUND
- SX1 X2 SET *IN* OR *OUT* = *FIRST*
- IX1 X1+X7 ADVANCE *IN* OR *OUT* POINTER
- NZ X7,RB4 IF DATA IN SECOND PART
- SX7 -B1 INDICATE NO SECOND PART OF TRANSFER
- JP B4 RETURN
- CBS SPACE 4,15
- ** CBS - CHECK BUFFER SPACE.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- *
- * EXIT (X6) = (NPCB) = BUFFER SIZE IN PRUS.
- * (X7) = (WCCB) = WORD COUNT OF DATA IN BUFFER
- * IF WRITE, ROOM REMAINING IN BUFFER IF READ.
- *
- * ERROR TO *RPC* IF BUFFER ARGUMENT ERROR.
- *
- * USES A - 1, 2, 3, 6, 7.
- * B - 2, 3.
- * X - 0, 1, 2, 3, 6, 7.
- CBS SX2 B1+B1 GET *OUT* FROM FET
- IX2 X5+X2
- ERX2 X2
- SB2 X2
- SA2 A4 GET MESSAGE BUFFER PARAMETERS
- SX6 B2
- SA3 A4-B1 GET FIRST AND LIMIT FROM MESSAGE BUFFER
- LX2 59-6
- SA1 A3-B1 GET *IN* FROM MESSAGE BUFFER
- SX0 X3 LIMIT
- AX3 24
- SX3 X3 FIRST
- SB3 X3
- PL X2,CBS1 IF READ
- SB2 X1 GET *OUT* FROM MESSAGE BUFFER
- SX1 1 GET *IN* FROM FET
- IX1 X5+X1
- ERX1 X1
- SX1 X1+
- BX6 X1
- LX1 24
- CBS1 IX7 X6-X3 REVALIDATE IN OR OUT POINTER
- NG X7,CBS5 IF POINTER .LT. FIRST
- IX7 X6-X0
- PL X7,CBS5 IF POINTER .GE. LIMIT
- AX1 24
- IX0 X0-X3 LIMIT - FIRST
- LX1 24
- SX3 B2
- BX7 X1+X3 UPDATE MESSAGE BUFFER *IN* AND *OUT*
- SA7 A3-B1
- LX1 -24
- IX7 X1-X3 *IN* - *OUT*
- SX1 X1+1 *IN* + 1
- NG X2,CBS2 IF WRITE FUNCTION
- IX7 X3-X1 *OUT* - *IN* - 1
- CBS2 PL X7,CBS3 IF NO BUFFER WRAP REQUIRED
- IX7 X0+X7
- CBS3 SA7 WCCB SAVE WORD COUNT
- BX6 X7 CALCULATE BUFFER SIZE IN PRUS
- LX2 59-5-59+6
- AX6 6
- PL X2,CBS4 IF NOT *READCW*/*WRITECW*
- SX6 102B
- PX1 X7
- PX6 X6
- NX6 X6
- FX6 X1/X6
- UX6 B2,X6
- LX6 B2
- CBS4 SA6 NPCB SAVE BUFFER SIZE IN PRUS
- JP B6 RETURN
- CBS5 SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
- EQ RPC CALL PP CIO
- CIM SPACE 4,25
- ** CIM - CALL I/O BUFFER MANAGER.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (X2) = 12/0,6/NBI,1/I,29/0,6/OP,6/BC.
- * NBI = NUMBER OF ADDITIONAL WRITE BUFFERS
- * TO INTERLOCK.
- * I = SET IF CURRENT WRITE BUFFER INTERLOCKED.
- * OP = I/O BUFFER MANAGER OPERATION.
- * BC = BUFFER COUNT (OP = BMRD) OR
- * INTERLOCK MODE (OP = BMVI).
- *
- * EXIT (X6) = FWA CONTROL BUFFER IF INTERLOCKED.
- * (LBIA) = INTERLOCKED BUFFER ADDRESS IF NONZERO.
- *
- * ERROR TO *RCR2* IF I/O BUFFER BUSY.
- * TO *RCR3* IF I/O BUFFER RECALL.
- * TO *RPC* IF I/O ERROR, ADDRESS ERROR OR INACCESSIBLE
- * DEVICE.
- *
- * USES A - 0, 1, 2, 3, 6, 7.
- * B - 3.
- * X - 0, 1, 2, 3, 6, 7.
- *
- * CALLS CMS.
- *
- * MACROS MONITOR.
- CIM SA3 A4 GET FNT ORDINAL
- MX0 -12
- LX3 -24
- BX6 -X0*X3
- SA3 LBIA
- BX7 X7-X7
- SA7 A3 CLEAR BUFFER INTERLOCK ADDRESS
- SX1 B7 GET CONTROL POINT NUMBER
- LX1 18-7
- BX6 X1+X6
- LX6 12
- BX6 X6+X2
- MONITOR BFMM
- SX2 X2+
- SB3 X2-BMFO*100B
- SX2 B1 GET FNT+2 WORD
- LX1 -12
- IX2 X4+X2
- BX6 -X0*X1 I/O BUFFER LINK
- ERX1 X2
- BX7 X0*X1
- BX7 X7+X6
- EWX7 X2
- BX7 X1
- SA1 A5+
- LX1 -12
- NG B3,CIM0 IF NOT A FLUSH OPERATION
- SX6 B0+
- CIM0 NG X1,CIM2 IF RECALL STATUS
- LX3 X1,B1
- BX7 X7-X7
- NG X3,RCR2 IF I/O BUFFER BUSY
- AX3 56
- SA1 A5+B1 CHECK FOR MULTIPLE WRITE BUFFERS
- SB3 X3+ SAVE BUFFER MANAGER STATUS
- SA0 CIM1 SET RETURN ADDRESS FOR *CMS*
- NZ X6,CMS IF LINK RETURNED
- ZR X1,CIM1.1 IF NO ALTERNATE BUFFER
- BX6 -X0*X1
- BX7 X0*X1
- LX7 -12
- SA7 A1
- ERX1 X2
- BX1 X0*X1
- BX7 X1+X6 SET I/O BUFFER LINK IN FNT
- EWX7 X2
- SA1 A5+B1
- SA2 A1+B1
- NZ X1,CMS IF MORE ALTERNATE BUFFERS
- BX7 X1
- SA7 A2
- BX7 X2
- SA7 A1
- EQ CMS CALCULATE FIRST SECTOR OF BUFFER
- CIM1 LX6 CBTLS SET INTERLOCKED BUFFER ADDRESS
- LX3 30
- TX6 X6,CBT
- BX6 X6+X3
- SA6 A3+
- BX7 X7-X7
- CIM1.1 NZ B3,RPC IF INACCESSIBLE DEVICE OR ERROR
- JP B4 RETURN
- * CHECK FOR RECALL ON FIRST OR SECOND I/O BUFFER.
- CIM2 SA1 A5+B1
- ZR X1,RCR3 IF RECALL ON FIRST BUFFER
- EWX7 X2
- ZR X3,RCR3 IF FIRST BUFFER NOT INITIALLY INTERLOCKED
- BX7 X3 RESET INTERLOCKED BUFFER ADDRESS
- SA7 A3
- BX7 X7-X7 CLEAR ORDINAL FROM MESSAGE BUFFER
- SA7 A5+B1
- EQ RCR3 ENTER RECALL STACK
- CMS SPACE 4,15
- ** CMS - CALCULATE MOD 40B OF CURRENT SECTOR.
- *
- * ENTRY (A0) = RETURN ADDRESS.
- *
- * EXIT (X1) = MOD 40B OF CURRENT SECTOR.
- * (X2) = LSLB = 40B.
- * (X3) = FIRST SECTOR IN CURRENT I/O BUFFER.
- *
- * USES A - 1.
- * B - 6.
- * X - 0, 1, 2, 3.
- CMS ERX1 X4 GET CURRENT SECTOR
- MX0 -12
- SX2 LSLB LOGICAL SECTORS PER I/O BUFFER
- LX1 -12
- BX1 -X0*X1
- SB6 A0+ GET RETURN ADDRESS
- BX3 X1
- MX1 -LSLBS CALCULATE MOD 40B OF CURRENT SECTOR
- BX1 -X1*X3
- IX3 X3-X1 CALCULATE FIRST SECTOR
- JP B6 RETURN
- CPT SPACE 4,20
- ** CPT - CALCULATE PRUS TO TRANSFER.
- *
- * EXIT TO *CMP* IF NO PRUS TO WRITE.
- * TO *RDF6* IF READ OPERATION.
- * TO *WTF23* IF PRUS TO WRITE.
- * TO *RPC* IF PRU SIZE ERROR.
- * (B2) = STATUS (0 = FULL BLOCK, 4 = EOR,
- * 10B = EOF, 14B = EOI).
- * (B6) = WORD COUNT OF TRANSFER.
- * (X0) = FWA DATA IN I/O BUFFER.
- * (X2) = (USCW) = SECTOR CONTROL WORD (UPDATED FOR
- * WRITE).
- * (X3) = ADDRESS OF LAST ACCESSED SECTOR CONTROL WORD.
- * (B3) = (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER.
- * (SDTW) = 0, EXCEPT BIT 56 IS SET FOR SKIP DATA
- * TRANSFER FLAG ON WRITE OPERATION.
- * (USCW) = LAST ACCESSED SECTOR CONTROL WORD.
- *
- * USES A - 1, 2, 6, 7.
- * B - 2, 3, 4, 6.
- * X - 1, 2, 6, 7.
- *
- * CALLS CBS, CSA, SCW.
- CPT12 ZR X6,CMP IF NO DATA IN BUFFER
- CPT SB4 CPT1 SET RETURN ADDRESS FOR *CSA*
- EQ CSA CALCULATE SECTOR ADDRESS IN I/O BUFFER
- CPT1 SA2 A4
- SB2 X7-LSLB COMPLEMENT OF MAXIMUM PRUS TO TRANSFER
- BX7 X7-X7 CLEAR SKIP FLAG DATA TRANSFER ON WRITE
- SB2 -B2 MAXIMUM PRUS TO TRANSFER
- SA7 SDTW
- LX2 59-6
- SB4 B3+ MOD 10B OF CURRENT SECTOR
- SA1 NPCB GET NUMBER OF PRUS IN BUFFER
- PL X2,CPT4 IF READ/SKIP
- LX2 59-5-59+6
- SB3 X1
- NG X2,SCW IF *WRITECW*
- SB6 -B2
- SX7 X1+B6
- NG X7,CPT2 IF WILL NOT REACH LAST SECTOR IN BUFFER
- SA1 A5+B1
- SB3 B2
- NZ X1,CPT2 IF ANOTHER BUFFER RESERVED
- SB6 LSLB/4 LIMIT TRANSFER TO SAVE SPACE FOR EOI
- LE B3,B6,CPT2 IF NO SWITCH OF SECTOR CONTROL WORD
- SB3 B6-B4 DO NOT ALLOW SWITCH OF CONTROL WORDS
- SB2 B6-B4
- CPT2 SX7 B5 SAVE (B5)
- PX7 X7,B3 SAVE (B3)
- SB5 LSLB/4
- CPT2.1 SB6 B5-B4 (B6) = REMAINING PRUS IN CONTROL WORD
- GE B3,B6,CPT2.2 IF MULTIPLE SECTOR CONTROL WORDS
- SB6 B3 SET PRUS
- CPT2.2 SB3 B3-B6 DECREMENT PRUS
- MX1 1
- SB6 B6-B1
- SA2 X3 READ SECTOR CONTROL WORD
- AX1 B6 MASK TO CLEAR SHORT PRU FLAGS
- SB6 B6+B4 SKIP PRUS ALREADY WRITTEN
- SB6 B6+B1
- LX1 B6
- LX1 12
- BX2 -X1*X2 CLEAR SHORT PRU FLAGS
- ZR B3,CPT2.3 IF ALL PRUS PROCESSED
- MX1 2 IGNORE DATA FLAGS
- LX1 23-59
- BX6 -X1*X2
- SX3 X3+B1 INCREMENT TO NEXT SECTOR CONTROL WORD
- SA6 A2 STORE SECTOR CONTROL WORD
- SB4 B0
- EQ CPT2.1 UPDATE NEXT WORD
- CPT2.3 SB5 X7 RESTORE (B5)
- UX7,B3 X7 RESTORE (B3)
- SX7 14B GET TERMINATION CONDITION
- SA1 A4
- BX7 X7*X1
- SX7 X7-/CIO/EOI
- SB4 WTF23 SET RETURN ADDRESS
- NZ X7,CPT3 IF EOR/EOF OPERATION
- NZ B3,CPT8 IF SECTORS TO TRANSFER
- SB6 CPT12 SET RETURN ADDRESS FOR *CBS*
- EQ CBS CHECK BUFFER SPACE
- * PROCESS SHORT BLOCK FOR EOR/EOF WRITE.
- CPT3 SB2 B2-B3
- ZR B2,CPT8 IF MAXIMUM PRU TRANSFER
- MX7 1
- LX6 X7,B6
- LX6 13
- SB2 B6-LSLB/4
- NZ B2,CPT3.1 IF NOT END OF SECTOR CONTROL WORD
- MX1 4 CLEAR PARITY ERROR AND IGNORE DATA FLAGS
- LX1 23-59
- BX6 -X1*X2
- SX3 X3+B1 INCREMENT TO NEXT SECTOR CONTROL WORD
- SA6 A2 STORE SECTOR CONTROL WORD
- SA2 A2+B1 READ NEXT SECTOR CONTROL WORD
- SX6 10000B
- CPT3.1 BX2 X2+X6 SET SHORT PRU FLAG IN HEADER
- SB3 B3+B1 INCREMENT NUMBER OF PRUS TO TRANSFER
- SA1 WCCB GET WORD COUNT OF *CIO* BUFFER
- SB6 X1 NUMBER OF WORDS TO TRANSFER
- SA1 A4
- SB2 /CIO/EOF SET EOF STATUS
- LX1 59-56
- LX7 56-59
- NG X1,CPT9 IF PROCESSING EOF FOR *WRITEF*
- SB2 /CIO/EOR SET EOR STATUS AND SKIP FLAG
- SA7 SDTW SET SKIP FLAG
- EQ CPT9 EXIT
- * PROCESS READ AND SKIP OPERATIONS.
- CPT4 LX2 59-56-59+6
- SX7 B1 BUILD SHORT PRU MASK
- LX7 12-1+59-19
- LX7 B4
- NG X2,CPT6 IF SKIP DATA TRANSFER
- LX2 0-2-59+56
- MX6 -2
- BX6 -X6*X2 GET TERMINATION CONDITION
- NZ X6,CPT5 IF NOT *RPHRLS*
- SB2 B1 LIMIT TRANSFER TO ONE PRU
- CPT5 SB4 -B2
- SX6 X1+B4
- PL X6,CPT6 IF ENOUGH ROOM IN BUFFER FOR ALL PRUS
- SB2 X1+ TERMINATE TRANSFER ON FULL BUFFER
- CPT6 SA2 X3
- SB3 B2
- SB4 RDF6 SET RETURN ADDRESS
- * SCAN SHORT PRU FLAGS FOR EOR/EOF/EOI.
- CPT7 LX7 1-59+19 CHECK EOR FLAG
- BX1 X7*X2
- NZ X1,CPT10 IF SHORT PRU
- SB2 B2-B1
- LX7 59-19
- ZR B2,CPT8 IF ALL PRUS CHECKED
- PL X7,CPT7 IF NOT END OF SECTOR CONTROL WORD
- SA2 A2+B1 READ NEXT SECTOR CONTROL WORD
- SX7 B1
- SX3 A2
- LX7 12-1+59-19
- EQ CPT7 CHECK NEXT SECTOR CONTROL WORD
- CPT8 SX6 B3
- LX6 6
- SB6 X6
- SB2 B0
- CPT9 SX6 B3 SAVE NUMBER OF PRUS TO TRANSFER
- BX7 X2 SAVE SECTOR CONTROL WORD
- SA6 NPTR
- SA7 USCW
- JP B4 EXIT
- * PROCESS SHORT PRU ON READ/SKIP OPERATION.
- CPT10 SB3 B3-B2 NUMBER OF FULL PRUS
- SX6 B3
- LX6 6
- SB6 X6 WORD COUNT OF FULL PRUS
- MX7 -12
- SX1 X6+77B GET HEADER WORD FROM LAST DATA WORD
- IX1 X0+X1
- BX6 X0 SAVE (X0)
- SB2 A0 SAVE (A0)
- SA0 ERWB READ HEADER WORD
- SX0 A0+
- LX0 30
- BX0 X0+X1
- RE 1 TRANSFER ONE WORD OF DATA
- RJ HHE HANG ON HALF-EXIT
- SA0 B2 RESTORE (A0)
- BX0 X6 RESTORE (X0)
- SA1 ERWB GET HEADER WORD
- LX1 12
- SB3 B3+B1 TERMINATE TRANSFER ON SHORT PRU
- BX7 -X7*X1
- AX1 48
- ZR X7,CPT11 IF EOF/EOI
- SX6 X1-100B
- SB6 B6+X1 ADD WORD COUNT OF SHORT PRU
- SX7 /CIOERR/DRE DEVICE ERROR
- PL X6,RPC IF PRU SIZE ERROR CALL *1MS*
- NG X1,RPC IF PRU SIZE ERROR CALL *1MS*
- SB2 /CIO/EOR SET EOR STATUS
- EQ CPT9 EXIT
- CPT11 SB2 /CIO/EOF SET EOF STATUS
- NZ X1,CPT9 IF EOF
- SB2 /CIO/EOI SET EOI STATUS
- SB3 B3-1 RESET PRU COUNT TO PRECEED EOI
- EQ CPT9 EXIT
- CSA SPACE 4,15
- ** CSA - CALCULATE SECTOR ADDRESS IN I/O BUFFER.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- *
- * EXIT (X0) = FWA DATA IN I/O BUFFER.
- * (X3) = ADDRESS OF SECTOR CONTROL WORD IN I/O
- * BUFFER.
- * (X6) = (B3) = MOD 10B OF CURRENT SECTOR.
- * (X7) = CURRENT SECTOR - FIRST SECTOR IN BUFFER.
- *
- * USES A - 2.
- * B - 3, 6.
- * X - 0, 2, 3, 6, 7.
- *
- * CALLS CSP.
- CSA SB6 CSA1 SET RETURN ADDRESS FOR *CSP*
- EQ CSP CALCULATE CURRENT SECTOR POSITION
- CSA1 SX0 X3+IOLK
- SA2 X0+
- IX3 X3+X6 SECTOR CONTROL WORD ADDRESS
- MX6 -24
- BX0 -X6*X2 FWA I/O BUFFER
- MX6 -3
- BX6 -X6*X7 MOD 10B OF CURRENT SECTOR
- SB3 X6
- LX7 6
- IX0 X0+X7 FWA CURRENT SECTOR IN I/O BUFFER
- LX7 -6
- JP B4 RETURN
- CSP SPACE 4,15
- ** CSP - CALCULATE SECTOR POSITION IN I/O BUFFER.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- *
- * EXIT (X1) = CURRENT SECTOR.
- * (X3) = FWA CONTROL BUFFER.
- * (X6) = (B3) = SECTOR CONTROL WORD INDEX IN CONTROL
- * BUFFER.
- * (X7) = CURRENT SECTOR - FIRST SECTOR IN BUFFER.
- *
- * USES A - 1, 3.
- * B - 3.
- * X - 1, 2, 3, 6, 7.
- CSP SA3 LBIA GET FWA INTERLOCKED I/O BUFFER
- ERX1 X4 GET CURRENT SECTOR
- MX6 -12
- BX2 X3
- LX1 -12
- AX2 30
- BX1 -X6*X1
- IX7 X1-X2 CURRENT SECTOR - FIRST SECTOR
- MX2 -24
- BX3 -X2*X3
- SX6 X7 INCREMENT FOR SECTOR CONTROL WORD
- AX6 CBTLS
- SB3 X6
- JP B6 RETURN
- IMF SPACE 4,15
- ** IMF - ISSUE CPU MONITOR FUNCTION.
- *
- * ENTRY (B6) = RETURN ADDRESS.
- * (X1) = FUNCTION CODE.
- * (X6) = FUNCTION PARAMETERS.
- *
- * EXIT (X1) = FUNCTION REPLY.
- * (X6) = 0.
- *
- * ERROR ADVANCE EXIT TO (B6)+1 IF FUNCTION REJECT.
- *
- * USES A - 1, 6.
- * B - 6.
- * X - 1, 6.
- IMF LX1 -12 ENTER REQUEST IN PSEUDO OUTPUT REGISTER
- BX6 X6+X1
- SA6 A5+
- XJ
- IMF1 SA1 A5+ CHECK OUTPUT REGISTER
- NG X1,IMF2 IF REQUEST REJECTED
- LX1 59-56
- NG X1,IMF2 IF REQUEST REJECTED
- LX1 56-59
- MX6 12
- BX6 X6*X1
- NZ X6,IMF1 IF NOT CLEARED
- JP B6 RETURN
- IMF2 SB6 B6+B1 ADVANCE EXIT FOR FUNCTION REJECT
- JP B6 RETURN
- SRA SPACE 4,15
- ** SRA - SET RANDOM ADDRESS FOR CURRENT TRACK/SECTOR.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (B4) = COMPLEMENT OF RETURN ADDRESS IF NOT TO
- * CALL *RRI*.
- *
- * EXIT TO *CRA*.
- * (X3) = 12/ CURRENT TRACK, 36/ 0, 12/ CURRENT SECTOR.
- *
- * USES A - 1.
- * X - 1, 3, 6.
- SRA ERX1 X4 GET CURRENT TRACK AND SECTOR
- MX6 -12
- LX1 -12
- BX3 -X6*X1
- LX1 -12
- BX6 -X6*X1
- LX6 -12
- BX3 X3+X6
- * EQ CRA COMPUTE RANDOM ADDRESS
- CRA SPACE 4,25
- ** CRA - CONVERT/COMPUTE RANDOM ADDRESS.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (B4) = COMPLEMENT OF RETURN ADDRESS, IF TO RETURN
- * RANDOM ADDRESS WITHOUT UPDATING FST/FET.
- * (X3) = 0 IF POSITION TO EOI AND RETURN RANDOM
- * ADDRESS FOR EOI.
- * (X3) .GT. 0 IF RANDOM ADDRESS TO BE CONVERTED
- * AND POSITIONED TO.
- * (X3) .LT. 0 IF RETURN RANDOM ADDRESS FOR SPECIFIED
- * TRACK AND SECTOR (12/TRACK, 36/0, 12/SECTOR).
- *
- * EXIT TO *SFP* FOR UPDATE OF FST CURRENT TRACK AND SECTOR
- * TO POSITION FOR RANDOM ADDRESS.
- * TO *RRI* TO SET RANDOM INDEX IN FET.
- * (B2) = SECTORS PER TRACK.
- * (X3) = RANDOM ADDRESS OF POSITION.
- * (X7) = SECTORS ON FILE BEFORE CURRENT TRACK FOR *SRA*
- * CALL.
- *
- * ERROR TO *RPC* IF INCORRECT RANDOM ADDRESS.
- *
- * USES A - 1, 2, 6.
- * B - 2, 3, 4, 6.
- * X - 0, 1, 2, 3, 6, 7.
- CRA ERX1 X4 GET FST ENTRY
- MX6 12
- LX1 24
- MX7 -2
- BX0 X6*X1 EXTRACT CURRENT TRACK
- LX1 -12
- ZR X0,CRA12 IF FILE NOT USED
- BX1 X6*X1 EXTRACT FIRST TRACK
- SA2 A4+B1 GET MST ADDRESS AND SECTORS PER TRACK
- SB6 B0 PRESET TRACK COUNT
- LX2 -18
- SA2 X2+TRLL SET TRT BASE ADDRESS
- SB3 X2-4000B/4
- SA2 A4+1 SET SECTORS PER TRACK
- NZ X3,CRA3 IF NOT SKIP TO EOI
- * PROCESS SKIP TO EOI.
- CRA1 BX0 X6*X1 EXTRACT LINK
- LX0 10
- SB6 B6+B1
- SA1 B3+X0 READ TRT WORD
- LX0 2
- BX2 -X7*X0 EXTRACT BYTE
- LX2 2 BYTE * 4
- LX3 X2,B1 BYTE * 8
- IX2 X3+X2 BYTE * 12
- SB2 X2+
- LX1 X1,B2 POSITION TRACK BYTE
- NG X1,CRA1 IF NOT END OF TRACK CHAIN
- BX7 X1
- SA1 A4+B1 GET SECTORS PER TRACK
- SX3 B6-1
- AX7 48
- SX1 X1
- IX3 X3*X1
- IX3 X3+X7
- CRA2 SB2 X1
- PL B4,SFP IF SETTING FST
- SB3 -B4
- JP B3
- * PROCESS POSITION TO RANDOM ADDRESS.
- CRA3 NG X3,CRA7 IF RETURNING RANDOM ADDRESS
- SX6 X2
- SX2 X2 SECTORS PER TRACK
- * IX2 X3/X2 SECTORS / SECTORS PER TRACK
- PX2 X2
- PX3 X3
- NX2 X2
- FX2 X3/X2
- UX3 X3
- UX2,B6 X2
- LX2 B6
- IX6 X2*X6 CALCULATE SECTOR NUMBER IN LAST TRACK
- IX6 X3-X6
- SA6 CRAA
- MX6 12
- SB6 X2+B1
- * SCAN TRT.
- CRA4 BX0 X6*X1 EXTRACT TRACK
- LX1 12
- LX0 10
- BX1 -X7*X1 EXTRACT BYTE POSITION
- LX1 2 BYTE * 4
- LX2 X1,B1 BYTE * 8
- IX2 X1+X2 BYTE * 12
- SA1 B3+X0 READ TRT WORD
- SB6 B6-1 DECREMENT TRACK COUNT
- SB2 X2
- LX1 X1,B2
- ZR B6,CRA5 IF TRACK REACHED
- NG X1,CRA4 IF NOT END OF TRACK CHAIN
- CRA5 SA2 CRAA GET SECTOR NUMBER IN LAST TRACK
- LX0 2 POSITION CURRENT TRACK
- BX6 X6*X1 EXTRACT EOI SECTOR OR NEXT TRACK
- SX7 /CIOERR/RAD * RANDOM ADDRESS NOT ON FILE.*
- LX6 -48
- IX6 X6-X2 EOI SECTOR - SECTOR NUMBER IN LAST TRACK
- NG X6,RPC IF ADDRESS NOT ON FILE
- SA1 A4+B1 GET SECTORS PER TRACK
- BX7 X2
- EQ CRA2 EXIT
- * PROCESS RETURN RANDOM ADDRESS.
- CRA7 SX6 X3 SAVE SECTOR
- BX3 X3-X6 CLEAR SECTOR
- SA6 CRAA
- SX2 B0
- MX6 12
- EQ CRA9 ENTER LOOP
- CRA8 LX0 10
- SB6 B6+B1 INCREMENT TRACK COUNT
- SA1 B3+X0 READ TRT WORD
- LX0 2
- BX2 -X7*X0 EXTRACT BYTE
- LX2 2 BYTE * 4
- LX0 X2,B1 BYTE * 8
- IX2 X0+X2 BYTE * 12
- CRA9 SB2 X2
- LX1 X1,B2 POSITION TRACK BYTE
- BX0 X6*X1 EXTRACT LINK
- BX2 X3-X0 COMPARE TRACK
- ZR X2,CRA11 IF TRACK FOUND
- NG X1,CRA8 IF NOT EOI
- * IF THIS FALL THROUGH CASE IS TAKEN, THE TRT MUST BE MASHED.
- CRA10 SX7 /CIOERR/RAD * RANDOM ADDRESS NOT ON FILE.*
- EQ RPC CALL PP CIO
- CRA11 SA1 A4+B1 GET SECTORS PER TRACK
- SA2 CRAA GET SECTOR NUMBER ON THIS TRACK
- SX6 B6
- SX1 X1
- IX7 X1*X6 TRACKS * SECTORS PER TRACK
- IX3 X2+X7 RANDOM ADDRESS
- SB3 -B4
- PL B4,RRI IF SET RANDOM ADDRESS IN FET
- JP B3 RETURN
- CRA12 NZ X3,CRA10 IF RANDOM ADDRESS SPECIFIED
- R= X3,FSMS SET RANDOM ADDRESS
- SB3 -B4
- PL B4,RRI IF SET RANDOM ADDRESS IN FET
- JP B3 RETURN
- CRAA CON 0 TEMPORARY
- SFP SPACE 4,15
- ** SFP - SET FST POSITION FOR RANDOM POSITIONING.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (X0) = VALUE TO SET FOR CURRENT TRACK.
- * (X3) = RANDOM ADDRESS TO BE SET IN FET+6.
- * (X7) = VALUE TO SET FOR CURRENT SECTOR.
- *
- * EXIT TO *RRI*.
- *
- * USES A - 1, 6.
- * X - 0, 1, 2, 6, 7.
- SFP ERX1 X4 GET FST ENTRY
- MX6 -24
- LX1 -12
- BX2 -X6*X1 PREVIOUS TRACK AND SECTOR
- BX6 X6*X1
- BX6 X6+X7 SET CURRENT SECTOR
- LX6 -12
- BX6 X6+X0 SET CURRENT TRACK
- LX6 24
- EWX6 X4
- * EQ RRI SET RANDOM INDEX IN FET
- RRI SPACE 4,10
- ** RRI - RETURN RANDOM INDEX TO FET.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (X3) = RANDOM INDEX.
- *
- * USES A - 1, 6.
- * X - 1, 2, 6.
- RRI SA1 A4-B1 GET RANDOM FILE FLAG
- PL X1,RB4 IF NOT RANDOM FILE
- BX6 X3 STORE RANDOM INDEX IN FET+6
- SX2 5
- IX2 X5+X2
- LX6 30
- EWX6 X2
- JP B4 RETURN
- RBI SPACE 4,10
- ** RBI - RELEASE I/O BUFFER INTERLOCK.
- *
- * ENTRY (A0) = RETURN ADDRESS.
- * (X2) = INTERLOCK VALUE (1 FOR READ/SKIP,
- * 4000B FOR WRITE).
- *
- * USES A - 3, 6.
- * B - 4.
- * X - 2, 3, 6.
- RBI SA3 LBIA CHECK IF I/O BUFFER INTERLOCKED
- SB4 A0 SET RETURN ADDRESS
- LX2 48
- ZR X3,RB4 IF NO BUFFER INTERLOCKED
- SX6 B0+
- SA6 A3+ CLEAR BUFFER INTERLOCK ADDRESS
- SA6 CHRV CLEAR CONTROL FLAGS
- + SA3 X3+LSLK **** PERFORM IN ONE WORD ****
- IX6 X3-X2 **** PERFORM IN ONE WORD ****
- SA6 A3 **** PERFORM IN ONE WORD ****
- + NG X6,* IF DATA INTEGRITY ERROR - STOP
- JP B4 RETURN
- UAC SPACE 4,15
- ** UAC - UPDATE ACCOUNTING AND RELEASE TRACK INTERLOCK.
- *
- * ENTRY (A0) = RETURN ADDRESS.
- * (B6) = RETURN ADDRESS IF CLEAR TRACK INTERLOCK REJECT.
- * (X7) .LT. 0 IF *UADM* TO BE ISSUED BY *PPCX*.
- * (X7) BIT 0 = 0 IF TO RESTART CPU FOR NON-AUTO
- * RECALL *CIO* CALL.
- *
- * EXIT (X2) = RECALL CPU FLAG IF *UADM* TO BE ISSUED LATER.
- * (X6) = (B4) = NUMBER OF *UADM* PARAMETER WORDS IN
- * MESSAGE BUFFER IF *UADM* TO BE ISSUED LATER.
- *
- * USES A - 0, 1, 2, 3, 6.
- * B - 4, 6.
- * X - 0, 1, 2, 3, 6, 7.
- *
- * MACROS MONITOR.
- * CHARGE FOR PRUS TRANSFERRED.
- * UPDATE CURRENT RANDOM INDEX IN FET+6 FOR RANDOM FILE.
- UAC SA3 PRUC GET PRU COUNT
- SX0 X3
- LX0 IMPT
- SA1 UACC INCREMENT ACCOUNTING
- ZR X0,UAC1 IF NO DATA TRANSFERRED
- IX6 X1+X0
- SA6 A1
- MX1 1 SET DATA TRANSFERRED FLAG
- LX1 54-59
- SA2 A4 GET MESSAGE BUFFER PARAMETERS
- BX6 X2+X1
- SA6 A4+
- SA1 A4-1 GET RANDOM FILE FLAG
- ZR X5,UAC1 IF NO FET ADDRESS
- PL X1,UAC1 IF NOT RANDOM FILE
- SX1 5
- LX0 -IMPT
- IX1 X5+X1
- AX3 30
- IX0 X0-X3
- ERX2 X1 UPDATE RANDOM INDEX IN FET
- LX0 30
- IX6 X2+X0
- EWX6 X1
- * CLEAR TRACK INTERLOCK.
- UAC1 SA3 A4 CHECK TRACK INTERLOCK
- LX3 59-58
- PL X3,UAC3 IF TRACK NOT INTERLOCKED
- ERX1 X4 GET EQUIPMENT AND FIRST TRACK
- SX6 CTIS*10000B CLEAR TRACK INTERLOCK
- MX2 24
- BX1 X2*X1
- LX1 -12
- BX6 X6+X1
- SX3 B6+ SAVE RETURN ADDRESS FOR REJECT
- MONITOR STBM
- AX1 36
- MX6 -59 CLEAR TRACK INTERLOCK FLAG
- ZR X1,UAC2 IF TRACK INTERLOCK CLEARED
- + SA0 X3 SET REJECT RETURN ADDRESS
- SX7 X7 FORCE *UADM* TO BE ISSUED
- EQ UAC3 DO NOT CLEAR TRACK INTERLOCK FLAG
- UAC2 SA3 A4 GET MESSAGE BUFFER PARAMETERS
- LX6 58-59
- BX6 -X6*X3 CLEAR TRACK INTERLOCK FLAG
- SA6 A4
- * BUILD *UADM* PARAMETER WORDS FOR ACCOUNTING CHARGE
- * AND FILE SIZE CHANGES.
- UAC3 SA1 UACC GET ACCOUNTING CHARGE
- MX0 -24
- LX7 49-0
- BX3 -X0*X1
- BX6 X1
- SA1 A5-1 GET AUTO RECALL FLAG
- MX2 1
- LX1 49-41
- LX2 49-59
- BX2 -X7*X2
- BX2 -X1*X2
- LX7 0-49
- SB4 B0+
- ZR X3,UAC4 IF NO ACCOUNTING UPDATE REQUIRED
- SA6 A5+B1
- SB4 B1
- UAC4 SA3 PCMS
- ZR X3,UAC5 IF NO PRU INCREMENT/DECREMENT
- SA1 UAMI GET MASS STORAGE CHANGE PARAMETERS
- SB4 B4+1
- BX6 X1+X3
- SA6 A5+B4
- PL X3,UAC5 IF TRACKS REQUESTED
- SX6 CICS-CDCS INCREMENT MASS STORAGE PRU-S
- LX6 48
- IX1 X1+X6
- BX6 -X3+X1
- SA6 A5+B4
- UAC5 SB6 A0 SET RETURN ADDRESS
- SX6 B4 SET *UADM* PARAMETER COUNT
- ZR B4,RB6 IF *UADM* NOT REQUIRED
- NG X7,RB6 IF *UADM* TO BE ISSUED LATER
- BX6 X6+X2 SET RECALL CPU FLAGS
- LX6 12
- SX3 1
- BX6 X6+X3 SET NO DROP FLAG
- LX6 24
- MONITOR UADM,B6
- WEI SPACE 4,10
- ** WEI - WRITE EOI/RELEASE BUFFER INTERLOCKS.
- *
- * ENTRY (A0) = RETURN ADDRESS.
- *
- * EXIT TO *RBI*.
- *
- * USES A - 1, 2, 3, 6.
- * B - 4, 6.
- * X - 0, 1, 2, 3, 6, 7.
- *
- * CALLS CIM, CSA, CSP, IDE, RBI.
- *
- * MACROS MONITOR.
- WEI SA2 A4+ GET MESSAGE BUFFER PARAMETERS
- SB4 0
- LX2 59-6
- MX3 -12
- PL X2,WEI8 IF NOT WRITE FUNCTION
- WEI1 SB4 B4+B1
- SA1 A5+B4 GET MULTIPLE WRITE BUFFER ORDINALS
- ZR X1,WEI3 IF NO MORE WRITE BUFFERS
- WEI2 BX6 -X3*X1
- LX6 CBTLS
- MX0 1
- AX1 12
- + TA2 X6+LSLK,CBT **** PERFORM IN ONE WORD ****
- IX7 X2-X0 **** PERFORM IN ONE WORD ****
- SA7 A2 **** PERFORM IN ONE WORD ****
- NZ X1,WEI2 IF MORE BUFFERS TO RELEASE
- LE B4,B1,WEI1 IF MORE INTERLOCK WORDS
- WEI3 SA1 NTKP GET OLD EOI SECTOR
- SB4 WEI4 SET RETURN ADDRESS FOR *CSA*
- SA2 A4+B1 CHECK IF EOI WRITE REQUIRED
- BX0 X1 SAVE CURRENT SECTOR
- NG X2,CSA IF WRITE EOI REQUIRED
- SA2 PCMS GET MASS STORAGE PRU CHANGE
- ZR X2,WEI7 IF NO *RTCM* ISSUED
- EQ WEI5 RESET EOI IN TRT
- WEI4 SA2 X3+
- SB6 X6
- MX6 2
- SX7 X7-30B
- ERRNZ LSLB-40B CODE DEPENDS ON BUFFER SIZE
- LX6 23-59
- BX2 -X6*X2 CLEAR DATA FLAGS
- NG X7,WEI4.1 IF NOT IN LAST CONTROL WORD OF BUFFER
- MX6 48
- BX6 X6*X2 CLEAR LINK
- WEI4.1 SX7 10000B BUILD SHORT PRU MASK
- LX7 B6
- BX6 X2+X7
- SA6 X3 STORE HEADER
- SX6 1
- IX2 X4-X6 STORE FNT ENTRY IN EOI SECTOR
- ERX2 X2
- BX6 X2
- SA6 ERWB SET UP BUFFER FOR WRITE
- ERX2 X4 STORE FST ENTRY IN EOI SECTOR
- BX6 X2
- SA6 A6+B1
- SB4 A0 SAVE (A0)
- SA2 PDTL STORE PACKED DATE AND TIME IN EOI SECTOR
- BX7 X2
- SA7 A6+B1
- SA0 A6-B1 FWA TO BEGIN TRANSFER FROM (*ERWB*)
- SX6 A0
- LX6 30
- BX0 X0+X6 30/FWA FROM, 30/FWA I/O BUFFER DATA (TO)
- WE 3
- RJ HHE HANG ON HALF-EXIT
- MX7 -6
- BX6 X6-X6
- IX0 X0-X7
- SA6 A0
- WE 1
- RJ HHE HANG ON HALF-EXIT
- SA0 B4 RESTORE (A0)
- SB4 WEI5 RETURN ADDRESS FOR *IDE*
- BX0 X1 SAVE CURRENT SECTOR
- SB6 IDE *CSP* RETURN ADDRESS
- EQ CSP CALCULATE SECTOR POSITION
- WEI5 ERX2 X4 GET EQUIPMENT AND CURRENT TRACK
- SB7 X6+ RESTORE (B7)
- MX6 12
- MX7 11
- BX6 X6*X2 EQUIPMENT
- LX7 -25
- BX7 X7*X2 CURRENT TRACK
- LX6 -12
- BX6 X6+X7
- * SET THE CHECKPOINT BIT FOR THE DEVICE WHEN EXTENDING *LIFT*
- * OR *PMFT* FILES. CHECKPOINT IS SET FOR *LIFT* TO ENSURE
- * THAT THE DEVICE IS CHECKPOINTED AFTER THE INDIRECT ACCESS
- * PERMANENT FILE CHAIN IS EXTENDED BY *CPUPFM*. EQUIVALENT
- * LOGIC IS NOT NEEDED IN *1MS* BECAUSE INDIRECT ALLOCATION
- * AND DEVICE CHECKPOINTING IS COMPLETELY MANAGED WITHIN *PFM*
- * FOR NON-BUFFERED DEVICES.
- SX2 B1 CHECK FILE TYPE
- IX2 X4-X2
- ERX2 X2
- LX2 -6
- MX7 -6
- BX2 -X7*X2
- SX7 X2-LIFT
- ZR X7,WEI5.1 IF *LIFT* FILE
- SX7 X2-PMFT
- NZ X7,WEI6 IF NOT *PMFT* FILE
- WEI5.1 MX7 1 SET DEVICE CHECKPOINT
- LX7 -12
- BX6 X6+X7
- WEI6 LX0 12 EOI SECTOR
- BX6 X6+X0
- MONITOR DTKM DROP TRACKS AND SET EOI
- SA2 PCMS UPDATE MASS STORAGE PRU CHANGE
- IX6 X2-X1
- SA6 A2
- WEI7 MX2 1 SET INTERLOCK VALUE
- LX2 12
- EQ RBI RELEASE BUFFER INTERLOCK
- WEI8 SA3 LBIA CHECK I/O BUFFER INTERLOCKED
- SB4 A0+
- ZR X3,RB4 IF NO BUFFER INTERLOCKED
- SX1 B1 GET I/O BUFFER LINK
- IX1 X4+X1
- ERX1 X1
- MX6 -12
- BX6 -X6*X1
- SX2 B1 SET INTERLOCK VALUE
- ZR X6,RBI IF NO LINK IN FNT ENTRY
- SB6 WEI9 SET RETURN ADDRESS FOR *CSP*
- EQ CSP CALCULATE SECTOR POSITION
- WEI9 SA1 CHRV ALLOW ACCESS TO OFF/SUSPECT DEVICE
- SX2 EPNS
- BX6 X2+X1
- SA6 A1
- SX2 BMRB*100B RELEASE READ BUFFER
- NG X7,CIM IF NEXT SECTOR NOT IN SAME BUFFER
- SX7 X7-LSLB
- PL X7,CIM IF NEXT SECTOR NOT IN SAME BUFFER
- SX2 B1+ SET INTERLOCK VALUE
- EQ RBI RELEASE BUFFER INTERLOCK
- ENDBLK
- BLOCK IHPFMD,(NON-819 INTERRUPT HANDLER.)
- BIO SPACE 4,15
- ** BIO - PROCESS *BIOM* MONITOR FUNCTION.
- *
- * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
- * (X5) = OUTPUT REGISTER.
- *
- * USES X - ALL.
- * A - ALL.
- * B - 3, 4, 5.
- *
- * CALLS /BUFIO/DLB, /BUFIO/SBR,
- * /MONITOR/HNG, /MONITOR/PPRX.
- BIO LX5 -24 POSITION *PUT* ORDINAL
- MX0 -12
- BX6 -X0*X5
- AX1 36 EXTRACT SUB-FUNCTION
- ZR X6,/MONITOR/HNG IF INVALID *PUT* ORDINAL
- TX2 X6-1,-NRUN
- PL X2,/MONITOR/HNG IF INVALID *PUT* ORDINAL
- LX6 PUTLS
- SX3 A5 OUTPUT REGISTER ADDRESS
- TA4 X6+PILL,PUT
- BX7 -X0*X4 CHECK UNIT INTERLOCK
- IX2 X7-X3
- ZR X1,TBIO IF *SUIS* REQUEST
- ERRNZ SUIS CODE DEPENDS ON VALUE
- NZ X2,/MONITOR/HNG IF NOT ASSIGNED THIS PP
- SX6 A4-PILL+UNCT
- SB4 X1-TBIOL
- SA6 PUTA SAVE *PUT* ADDRESS
- LX5 -48
- MX2 -11
- JP TBIO+TBIOL+B4 EXIT TO PROCESSOR
- * ENTER PROCESSOR WITH -
- *
- * (A4) = ADDRESS OF *PILL* WORD.
- * (A6) = ADDRESS OF *PUTA*.
- * (X0) = 48 BIT MASK.
- * (X2) = 49 BIT MASK.
- * (X4) = *PILL* WORD OF *PUT* ENTRY.
- * (X5) = PP OUTPUT REGISTER SHIFTED LEFT -12.
- * (X6) = *PUT* ADDRESS OF *UNCT* WORD.
- * (X7) = BYTE 4 OF *PILL* WORD.
- TBIO BSS 0
- BSS 0 FORCE UPPER
- SUIS EQU *-TBIO
- SUIS EQU //SUIS ENSURE SUBFUNCTION CORRECT
- LX7 36
- MX0 1
- EQ BIO10 SET UNIT INTERLOCK
- BSS 0 FORCE UPPER
- DCBS EQU *-TBIO
- DCBS EQU //DCBS ENSURE SUBFUNCTION CORRECT
- SX7 BIO24
- TEQ (/PROBE/IOS,PROBE,/IHPFMD/BIO20) UPDATE *PROBE* TABLE
- BSS 0 FORCE UPPER
- SETS EQU *-TBIO
- SETS EQU //SETS ENSURE SUBFUNCTION CORRECT
- SA3 X6
- LX3 -12
- EQ BIO30 SET ERROR STATUS IN *CBT*
- BSS 0 FORCE UPPER
- IDSS EQU *-TBIO
- IDSS EQU //IDSS ENSURE SUBFUNCTION CORRECT
- SX7 BIO40
- EQ BIO20 INHIBIT DATA STREAMING
- BSS 0 FORCE UPPER
- CETS EQU *-TBIO
- CETS EQU //CETS ENSURE SUBFUNCTION CORRECT
- SA1 X6
- BX2 -X0*X1
- EQ BIO60 CLEAR ERROR STATUS FROM I/O QUEUE
- BSS 0 FORCE UPPER
- TBIOL EQU *-TBIO
- * SET UNIT INTERLOCK.
- BIO10 NZ X7,/MONITOR/PPR1 IF *PUT* ENTRY INTERLOCKED
- BX6 X4+X3
- SA6 A4 SET INTERLOCKING PPOR ADDRESS
- SA2 A4-PILL+UNCT
- BX6 X0+X2 SET UNIT INTERLOCK FLAG
- SA6 A2
- EQ /MONITOR/PPR1 EXIT
- * DELINK CONTROL BUFFER(S) / INHIBIT DATA STREAMING.
- BIO20 SA7 PADD SAVE PROCESSOR ADDRESS
- BX6 -X2*X5
- ERRNZ CBCT-PUTA-2 CODE DEPENDS ON VALUES
- SA6 A7+B1 BUFFER COUNT
- BIO21 SA4 CBCT DECREMENT BUFFER COUNT
- SX6 X4-1
- ZR X4,BIO27 IF REQUEST COMPLETE
- SA1 PUTA
- SA2 X1 FETCH *UNCT* WORD FROM *PUT*
- MX0 -12
- BX5 X2 PRESERVE (X2) FOR *DLB*
- SA6 A4
- SA3 A4-B1 RETRIEVE PROCESSOR ADDRESS
- AX5 12
- SB4 X3
- BX7 -X0*X5 EXTRACT CURRENT CONTROL BUFFER ORDINAL
- SX6 B1
- LX7 CBTLS
- ZR X7,/MONITOR/HNG IF I/O QUEUE EMPTY
- TA4 X7+IOLK,CBT
- JP B4 EXIT TO PROCESSOR
- * DELINK CONTROL BUFFER(S).
- BIO24 SA3 STAT
- NZ X3,BIO25 IF CALLED VIA *SETS* SUBFUNCTION
- SA3 A4+B1 READ *HSLK* WORD
- ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
- MX0 -48
- BX7 -X0*X3 CLEAR ERROR DATA
- SA7 A3
- BIO25 SA3 A4-IOLK
- LX4 -57 EXTRACT WRITE FLAG
- BX7 X6*X4 WRITE FLAG
- ERRNZ HSCT-1 CODE DEPENDS ON VALUE
- SA4 X1+B1
- IX7 X1+X7 ACCUMULATOR ADDRESS + WRITE FLAG
- ERRNZ RDST+1-WTST INDICES MUST BE CONSECUTIVE
- SA1 X7+RDST ACCUMULATOR WORD
- AX4 54 PHYSICAL SECTORS PER BUFFER
- SB3 BIO26 *DLB* RETURN ADDRESS
- IX6 X1+X4 INCREMENT ACCUMULATOR
- LX6 59-35
- NG X6,/BUFIO/DLB IF ACCUMULATOR OVERFLOW
- LX6 35-59
- SA6 A1 UPDATE ACCUMULATOR
- EQ /BUFIO/DLB DELETE BUFFER
- BIO26 SB3 BIO21 *SBR* RETURN ADDRESS
- EQ /BUFIO/SBR SET BUFFER RECALL
- BIO27 SA5 A5 CHECK INTERLOCK FLAG
- LX5 59-23
- PL X5,BIO29 IF NOT CLEARING UNIT INTERLOCK
- BIO28 SA4 PUTA
- MX1 -59 SET MASKS
- MX0 -12
- SA3 X4-UNCT+PILL FETCH PP INTERLOCK WORD
- BX6 X0*X3
- SA6 A3 CLEAR PP INTERLOCK
- SA4 X4+
- BX6 -X1*X4 CLEAR UNIT BUSY
- SA6 A4
- BIO29 BX7 X7-X7 CLEAR OUTPUT REGISTER IMAGE
- SA2 STAT SET REPLY STATUS
- SA7 A2
- BX7 X2
- SA7 A5
- EQ /MONITOR/PPRX RETURN
- * PROCESS I/O ERROR.
- BIO30 BX2 -X0*X3 EXTRACT CURRENT *CBT* ORDINAL
- LX2 CBTLS *CBT* INDEX
- TA4 X2+HSLK,CBT
- MX7 -48
- LX5 12
- BX7 -X7*X4 CLEAR *HSLK* ERROR PROCESSING DATA
- LX3 -24
- BX3 -X0*X3 EST ORDINAL
- CX1 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST
- BX6 -X0*X5 EXTRACT ERROR CODE
- MX2 2
- SA3 A5-B1 READ INPUT REGISTER
- BX2 X2*X4
- LX1 24+3 POSITION SECONDARY CHANNEL BYTE
- SB3 X6-DDFE
- BX3 -X0*X3
- NG X2,BIO35 IF I/O ERROR FLAG ALREADY SET
- LX4 1
- LX6 48
- NG X4,BIO32 IF DEVICE VERIFICATION CALL
- LX0 48+3
- MX4 3 FORM CHANNEL MASK
- BX0 X4+X0
- BX5 -X0*X1 CHECK SECONDARY CHANNEL ACCESSIBLE
- SB5 X5-4
- LX1 -12
- BX4 -X0*X1 PRIMARY CHANNEL DATA
- SB4 X4-4
- AX4 48+3 PRIMARY CHANNEL
- BX1 X4-X3
- AX5 48+3 SECONDARY CHANNEL
- ZR X1,BIO31 IF CALLER ON PRIMARY CHANNEL
- NZ B4,BIO32 IF PRIMARY CHANNEL UNAVAILABLE
- SX3 X4 SELECT PRIMARY CHANNEL
- EQ BIO32 CONTINUE
- BIO31 NZ B5,BIO32 IF SECONDARY CHANNEL UNAVAILABLE
- SX3 X5+ SELECT SECONDARY CHANNEL
- BIO32 LX3 54 CHANNEL
- MX0 1 I/O ERROR FLAG
- BX0 X2+X0 I/O ERROR + FORCED CHANNEL SELECTION FLAGS
- LX4 X2,B1 POSITION FORCED CHANNEL SELECTION
- SA1 A4-HSLK+PAD4
- MX5 -54
- BX6 X6+X0 COMBINE FLAGS AND ERROR CODE
- BX1 -X5*X1 CLEAR CHANNEL FIELD
- BX6 X7+X6 MERGE ERROR DATA INTO *HSLK*
- SA6 A4+
- BX7 X1+X3 MERGE CHANNEL INTO *PAD4*
- SA7 A1+
- NG X4,BIO33 IF DEVICE VERIFICATION CALL
- NZ B3,BIO28 IF ERROR NOT DIAGNOSTIC FAILURE
- BIO33 SA5 A5 REREAD OUTPUT REGISTER
- SX7 B1
- LX7 23-0 FORCE CLEARING OF *PUT* INTERLOCK
- BX6 X5+X7
- SA6 A5
- MX2 -11
- LX7 36-23 SET REPLY STATUS
- SX5 B1
- SA7 STAT
- JP TBIO+DCBS DELINK CURRENT CONTROL BUFFER
- BIO35 SA4 A4-HSLK+IOLK
- LX6 48 POSITION ERROR CODE
- BX6 X2+X6 ERROR CODE + FORCED CHANNEL SELECTION
- LX3 54 POSITION CHANNEL
- SA1 A4-IOLK+PAD4
- BX6 X6+X7 MERGE ERROR DATA INTO *HSLK*
- MX5 -54
- BX1 -X5*X1 CLEAR CHANNEL FIELD
- BX7 X1+X3 MERGE CHANNEL INTO *PAD4*
- LX4 59-57
- SA6 A4-IOLK+HSLK UPDATE *HSLK*
- SA7 A1+ UPDATE *PAD4*
- PL X4,BIO33 IF READ OPERATION
- SB3 B3+DDFE-PARE
- ZR B3,BIO33 IF MEDIA ERROR
- BX3 X6
- LX3 59-58
- NG X3,BIO33 IF DEVICE VERIFICATION REQUEST
- SA3 PUTA
- LX4 57-59-24 POSITION FORWARD LINK FOR I/O QUEUE
- SA1 X3+ FETCH *UNCT* WORD FROM *PUT*
- BX2 -X0*X4
- LX0 12
- SB6 BIO37
- BX3 -X0*X1 CURRENT CBT ORDINAL
- LX3 CBTLS-12
- TA3 X3+LSLK,CBT
- MX6 -6
- MX5 -24
- LX6 18
- BX5 -X5*X3 RECALL DATA
- BX6 -X6*X3 RECALL CONTROL POINT NUMBER
- ZR X5,BIO36 IF RECALL NOT SET
- ZR X6,BIO33 IF PP IN RECALL
- BIO36 BX6 X0*X1 CLEAR CURRENT BUFFER ORDINAL
- EQ /BUFIO/SCB SELECT CURRENT BUFFER
- BIO37 SA6 A1+
- SX7 B1 SET REPLY STATUS
- LX7 36-0
- SA7 STAT
- EQ BIO28 CLEAR *PUT* INTERLOCK
- * INHIBIT DATA STREAMING.
- BIO40 LX6 53-0
- BX6 X6+X4 SET INHIBIT FLAG
- SA6 A4+
- EQ BIO21 PROCESS NEXT REQUEST
- * CLEAR ERROR STATUS FROM UNIT I/O QUEUE.
- BIO60 ZR X2,BIO28 IF QUEUE EMPTY
- MX5 -48
- LX2 CBTLS
- BIO61 TA4 X2+HSLK,CBT CLEAR ERROR STATUS
- BX6 -X5*X4
- SA6 A4 UPDATE *CBT* ENTRY
- SA3 A4-B1
- ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
- LX3 -24
- BX2 -X0*X3 EXTRACT FORWARD LINK
- LX2 CBTLS
- NZ X2,BIO61 IF NOT END OF QUEUE
- BX3 -X0*X1
- LX1 -12 POSITION *UNCT* WORD
- BX4 -X0*X1
- NZ X4,BIO28 IF CURRENT *CB* PRESENT
- BX6 X1+X3
- LX6 12 SET CURRENT *CB* = FIRST
- SA6 A1
- EQ BIO28 CLEAR *PUT* INTERLOCK
- PUTA BSS 3 *PUT* ADDRESS OF *UNCT* WORD
- PADD EQU PUTA+1 PROGRAM TRANSFER ADDRESS
- CBCT EQU PADD+1 CONTROL BUFFER COUNT
- STAT CON 0 REPLY STATUS
- RPP SPACE 4,15
- ** RPP - RECALL PSEUDO-PP.
- *
- * ENTRY (A3) = CONTROL BUFFER ADDRESS.
- * (A5) = OUTPUT REGISTER ADDRESS.
- *
- * EXIT (X5) = OUTPUT REGISTER.
- * TO *BIO*.
- *
- * USES X - 1, 5, 7.
- * A - 1, 5, 7.
- * B - 7.
- *
- * CALLS /BUFIO/PRQ.
- RPP TX1 A3,-CBT COMPUTE CONTROL BUFFER ORDINAL
- SX7 A5 SAVE PP OR ADDRESS
- AX1 CBTLS
- SA7 /BUFIO/IPPA
- EQ /BUFIO/PRQ PROCESS REQUEST QUEUE
- RPP1 SA5 /BUFIO/IPPA RESTORE (A5)
- SX7 -B1 RESET *IPPA*
- SA5 X5
- SA7 /BUFIO/IPPA
- EQ BIO21 PROCESS NEXT REQUEST
- ENDBLK
- BLOCK IH819,(INTERRUPT HANDLER - 819/CYBER 176.)
- SPACE 4,10
- ** DATA.
- NRQT BSS MMXC/2+1 NEXT REQUEST(S)
- RTCI BSS 1 INTERRUPT START TIME
- PPE SPACE 4,15
- ** PPE - EXTENSION FOR BUFFER MANAGER RECALL.
- *
- * ENTRY (A1) = ADDRESS OF *PSD*.
- * (X1) = CONTENTS OF *PSD*.
- *
- * EXIT TO */MONITOR/MTRX* IF NO MORE REQUESTS TO PROCESS.
- * TO *PRQ* IF TO PROCESS PSEUDO PP REQUEST.
- *
- * CALLS /BUFIO/PRQ.
- PPE MX2 -57 CLEAR STEP CONDITION
- BX6 -X2*X1
- SX7 B7
- LX6 39-59
- SA7 /BUFIO/IPPA SAVE (B7)
- SA6 A1+
- PPE1 SA2 BMRI
- ZR X2,PPE2 IF NO REQUESTS PRESENT
- SX7 X2-1
- SA1 TBMR+X7 GET REQUEST
- SA7 A2 UPDATE REQUEST INDEX
- EQ /BUFIO/PRQ PROCESS REQUEST QUEUE
- PPE2 SA1 /BUFIO/IPPA RESTORE (B7)
- SX7 -B1
- SB7 X1
- SA7 A1 RESET SAVE WORD
- EQ /MONITOR/MTRX EXIT
- XJ2 SPACE 4,10
- ** XJ2 - EXTENSION TO CHECK STEP CONDITION ON RA+1 REQUEST
- *
- * ENTRY (B2) = EXCHANGE PACKAGE ADDRESS
- *
- * EXIT TO */BUFIO/PPE* IF STEP MODE SET
- * TO */MONITOR/XJ2* IF STEP MODE NOT SET
- XJ2 SA1 B2+3 GET *PSD*
- LX1 59-39
- PL X1,/MONITOR/MTR IF NOT STEP MODE
- EQ PPE PROCESS BUFFER MANAGER RECALL
- TBMR SPACE 4,10
- ** BUFFER MANAGER RECALL REQUESTS ARE PASSED FROM THE 819
- * INTERRUPT HANDLER IN THE FOLLOWING TABLE. THERE IS A
- * POINTER (INDEX) TO THE NEXT AVAILABLE ENTRY IN *BMRI*,
- * WHICH IS ADJUSTED EACH TIME THE TABLE IS ACCESSED.
- TBMR BSS BMRL BUFFER MANAGER RECALL REQUEST TABLE
- BMRI CON 0 REQUEST INDEX
- RIO SPACE 4,10
- ** RIO - RESTART 819 I/O.
- *
- * EXIT TO /BUFIO/IOCX.
- *
- * USES X - 1, 2, 5, 6, 7.
- * A - 1, 2, 5, 6, 7.
- * B - 6, 7.
- *
- * CALLS IOA.
- RIO SA1 RIOA PRESET *IOA* FOR RECOVERY PROCESS
- SA2 IOA3
- BX6 X1
- BX7 X2
- SA6 A2
- SA7 A1
- SX7 B0+ PRESET *CCT* INDEX
- SA7 RIOB
- RIO1 LX7 CCTLS
- SB7 B0 INITIALIZE UNIT NUMBER
- TA5 X7+CCNT,CCT SET *CCT* ENTRY ADDRESS
- SB6 7 SET UNIT COUNT
- BX7 X5
- EQ IOA1 ENTER *IOA* TO PROCESS CHANNEL
- RIO2 SA1 RIOB GET *CCT* INDEX
- SX7 X1+B1
- SA7 A1
- SX1 X7-NCCT
- NG X1,RIO1 IF NOT END OF *CCT*
- SA1 RIOA RESTORE *IOA*
- BX6 X1
- SA6 IOA3
- EQ /BUFIO/IOCX RETURN
- RIOA EQ RIO2 *IOA* RETURN ADDRESS
- RIOB CON 0 *CCT* INDEX
- CLU SPACE 4,10
- ** CLU - CLEAR UNIT FLAGS.
- *
- * ENTRY (A2) = *PUT* ENTRY ADDRESS.
- * (B2) = CHANNEL NUMBER.
- *
- * USES X - ALL.
- * A - 2, 4, 5, 6, 7.
- * B - 3, 5.
- *
- * CALLS INR, SAA.
- CLU SX6 B2 CHANNEL NUMBER
- MX0 -59
- LX6 CCTLS/2
- MX7 6
- TA4 X6,CCT READ CHANNEL CONTROL TABLE
- SA2 A2 GET *PUT* ENTRY
- LX7 -6
- SA5 A4+B1 READ CHANNEL CONTROL TABLE
- ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
- BX3 X7*X2 UNIT NUMBER
- BX6 -X0*X4 CLEAR CHANNEL BUSY
- LX3 12
- SX1 B1
- SB5 X3-60D
- IX6 X6-X1 DECREMENT ACTIVE COUNT
- AX0 B5
- MX1 -12
- BX7 -X0*X5 CLEAR UNIT REQUESTED FLAG
- LX1 12
- SA7 A5
- BX0 -X1*X2 CURRENT REQUEST
- SB3 CLU2 *INR* RETURN ADDRESS
- LX1 12
- BX3 -X1*X4 RETRY REQUEST
- BX6 X1*X6 CLEAR RETRY REQUEST
- LX3 -24+PUTLS
- SA6 A4
- LX1 -12
- MX6 18
- LX6 -6
- BX6 X6*X2 CLEAR UNIT REQUEST QUEUE
- NZ X0,CLU1 IF ANOTHER REQUEST PRESENT
- SA6 A2
- ZR X3,CLU2 IF NO RETRY REQUEST
- TA4 X3,PUT GET *PUT* ENTRY
- NG X4,CLU2 IF UNIT BUSY
- MX5 1
- BX0 -X1*X4 CURRENT REQUEST
- BX6 X4+X5 SET UNIT BUSY
- ZR X0,CLU2 IF NO CURRENT REQUEST
- SA6 A4
- CLU1 LX0 -12
- EQ INR INITIATE REQUEST
- CLU2 SB3 IOLX *SAA* RETURN ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- DCS SPACE 4,20
- ** DCS - DECODE STATUS.
- *
- * XP SLAVE INPUT.
- *
- * ENTRY (A0) = CM BUFFER ADDRESS.
- * (A1) = PARTNER XP ADDRESS.
- * (A2) = *PUT* ENTRY ADDRESS.
- * (A3) = CONTROL BUFFER ADDRESS.
- * (B2) = CHANNEL NUMBER.
- * (B4) = PARTNER CHANNEL NUMBER.
- *
- * EXIT TO *CLU*.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 5, 6, 7.
- * B - 3, 4, 6, 7.
- *
- * CALLS /MONITOR/APQ, /BUFIO/DLB, /BUFIO/SBR.
- DCS RO B2 RELEASE FLPP DRIVER
- SA4 A0 READ FIRST WORD OF CM BUFFER
- SA5 A0+B1 SECOND WORD
- RI B2 RESET I/O BUFFER POINTERS
- RI B4
- LX4 59-57
- SB6 DCSA *819 PRTY*
- NG X4,CLU IF COMPLETION STATUS
- SA2 A2 READ *PUT* ENTRY
- ERRNZ UNCT INDEX MUST BE ZERO
- MX0 -3
- LX0 54
- SX4 B0+
- BX7 -X0*X2 READ RECOVERY INDEX
- NZ X7,DCS4 IF READ RECOVERY TO PROCESS
- MX1 -48
- LX5 59-5
- SX6 NRDE
- SB3 DCS2 *DLB* RETURN ADDRESS
- NG X5,DCS1 IF *NOT READY* CONDITION
- SX6 DSTE SET *DEVICE STATUS* ERROR CODE
- DCS1 LX6 48 POSITION ERROR CODE
- BX2 X0*X2 CLEAR READ RECOVERY INDEX
- BX3 X5
- SA4 A0
- SA5 A3+HSLK
- LX4 59-42
- BX7 -X1*X5
- MX1 1
- BX7 X1+X7 SET ERROR FLAG
- BX7 X6+X7 MERGE ERROR CODE INTO *HSLK*
- SA7 A5
- SA5 A5-HSLK+IOLK
- PL X4,/BUFIO/DLB IF BUFFER DOES NOT CONTAIN WRITE DATA
- NG X3,DCS3 IF DISK NOT READY
- PL X5,DCS2 IF BUFFER DELETED BY *WRT*
- EQ /BUFIO/DLB DELETE BUFFER
- DCS2 SB3 DCS3 *SRC* RETURN ADDRESS
- SB7 B0+ EXCHANGE PACKAGE INDEX
- EQ /BUFIO/SBR SET BUFFER RECALL
- DCS3 SA4 A0+B1 READ CM BUFFER
- SB6 DCSB *819 ABT*
- LX4 59-5
- PL X4,DCS4 IF NOT DISK NOT READY
- SB6 DCSC *819 NRDY*
- DCS4 SA5 B6 SET MESSAGE IN SYSTEM CONTROL POINT
- SX1 A1 SAVE (A1), (A2), (B4)
- SX2 A2
- LX1 18
- BX6 X5
- SA5 A2 GET *PUT* ENTRY
- MX7 -6 GET EST ORDINAL (LOWER 6 BITS)
- LX5 -36
- BX5 -X7*X5
- MX7 -3
- BX7 -X7*X5
- AX5 3
- LX5 6
- BX7 X5+X7
- LX7 12
- IX6 X6+X7
- BX7 X1+X2
- TA6 MS2W,SCA
- NG X4,CLU IF DISK NOT READY
- SA5 A0+ GET BLOCK WORD COUNT
- SA7 DCSD
- SX6 B4
- SA4 A2 READ *PUT* ENTRY
- ERRNZ UNCT INDEX MUST BE ZERO
- SA6 A7+B1
- MX7 -11
- SX3 5
- BX2 -X7*X5 WORD COUNT
- SX1 B2 MASTER FLPP CHANNEL NUMBER
- SX2 X2+9+4 BYTE COUNT OF STATUS PACKET
- LX1 21-1
- IX3 X2/X3 WORD COUNT OF STATUS PACKET
- MX7 -9
- LX4 -36
- SA2 DCSE 18/*1MD*,42/0
- BX7 -X7*X4 EST ORDINAL
- LX7 12
- BX7 X7+X1
- TA4 EMB GET *EMB* HEADER 1 (FLAGS, *IN*)
- BX7 X7+X5
- SA1 A4+B1 GET *EMB* HEADER 2 (*OUT*, *LIMIT*)
- LX4 -12 POSITION *IN*
- SA7 A0
- MX0 -12
- SX3 X3+B1 ADD ONE FOR HEADER
- BX6 -X0*X1 *LIMIT*
- LX1 -12
- BX5 -X0*X4 *IN*
- BX1 -X0*X1 *OUT*
- SB3 DCS6 *APQ* RETURN ADDRESS IF *EMB* FULL
- * THE FOLLOWING CODE EMULATES THE ERROR MESSAGE BUFFER
- * HANDLING FOUND AND DOCUMENTED IN COMMON DECK *COMPIMB*.
- * (X0) = -7777
- * (X1) = *OUT*
- * (X2) = *1MD* INPUT REGISTER/*EMB* TERMINATOR
- * (X3) = MESSAGE LENGTH INCLUDING HEADER (*ML*).
- * (X4) = *EMB* HEADER 1 (SHIFTED -12)
- * (X5) = *IN*
- * (X6) = *LIMIT*
- DCS4.1 IX7 X5-X1 *IN* - *OUT*
- NG X7,DCS4.2 IF *IN* .LT. *OUT*
- IX7 X5+X3 *IN* + *ML*
- IX7 X7-X6 *IN* + *ML* - *LIMIT*
- NG X7,DCS4.3 IF MESSAGE FITS BETWEEN *IN* AND *LIMIT*
- BX7 X2 SET TERMINATOR IN *EMB*
- ZR X1,DCS5 IF *OUT* .EQ. *FIRST* - DO NOT RESET *IN*
- TA7 X5+2,EMB
- MX5 0 RESET *IN*
- EQ DCS4.1 RECHECK MESSAGE FIT
- DCS4.2 IX7 X7+X3 *IN* + *ML* - *OUT*
- PL X7,DCS5 IF MESSAGE WILL NOT FIT - CALL *1MD*
- DCS4.3 SB4 X5+B1
- IX7 X5+X3 UPDATE *IN*
- SB4 B4+X3
- BX5 X0*X4 REMOVE OLD *IN*
- SB6 X3-1
- IX7 X5+X7 MERGE IN UPDATED *IN*
- SB3 DCS7 *APQ* RETURN ADDRESS
- LX7 12
- SA7 A4+ UPDATE *EMB* HEADER 1
- DCS4.9 SA5 A0+B6 MOVE ERROR DATA TO BUFFER
- SB6 B6-B1
- BX7 X5
- SA7 A4+B4
- SB4 B4-B1
- PL B6,DCS4.9 IF NOT END OF MOVE
- LX3 12 SET WORD COUNT IN HEADER
- SX7 MLDY+4000B SET 819 DRIVER MAINTENANCE LOG CODE
- BX7 X7+X3
- SA7 A4+B4 STORE HEADER IN BUFFER
- DCS5 LX4 59-1-59+11
- NG X4,/MONITOR/RB3 IF *1MD* ALREADY ACTIVE
- BX6 X2
- TB7 SCA SYSTEM CONTROL POINT ADDRESS
- SB6 DCS5.1 *CAL* RETURN ADDRESS - NO LIMIT
- EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
- DCS5.1 SA4 A4 GET BUFFER CONTROL WORD
- SX2 B1+B1 SET *1MD* CALLED FLAG
- BX7 X2+X4
- SA7 A4
- SB4 B0 SET LIBRARY SEARCHED NEEDED
- EQ /MONITOR/APQ ASSIGN *1MD*
- DCS6 TA5 EMB SET DATA LOST FLAG
- SX6 B1+
- LX6 36
- BX6 X5+X6
- SA6 A5+
- DCS7 SA4 DCSD RESTORE (A1), (A2), (B4)
- SA5 A4+B1
- SA2 X4
- SB4 X5
- AX4 18
- SA1 X4+
- EQ CLU CLEAR UNIT FLAGS
- DCSA DATA C*819PTY00*
- DCSB DATA C*819ABT00*
- DCSC DATA C*819NRY00*
- DCSD BSS 2 REGISTER SAVE AREA
- DCSE VFD 18/3R1MD,42/0 *1MD* INPUT REGISTER/*EMB* TERMINATOR
- FNR SPACE 4,15
- ** FNR - FIND NEXT REQUEST.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- * (B4) = CHANNEL NUMBER.
- * (B7) = 0 IF READ, 1 IF WRITE.
- * (A3) = CONTROL BUFFER ADDRESS.
- *
- * EXIT (X7) = NEGATIVE IF NO MORE REQUESTS ON THIS CYLINDER.
- * (X7) = 0 IF CONTINUOUS REQUEST (NO POSITIONING).
- * (X7) = TRACK AND SECTOR OF NEXT REQUEST.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * A - 3, 4, 5, 6, 7.
- FNR SA4 A3+IOLK READ CONTROL BUFFER
- MX6 -12
- SX1 B4 CHANNEL
- LX4 -24
- BX4 -X6*X4 LINK TO NEXT REQUEST
- ZR X4,FNR2 IF END OF QUEUE
- LX4 CBTLS
- SX2 B1
- TA4 X4+IOLK,CBT READ NEXT CONTROL BUFFER
- SX7 B7 READ/WRITE FLAG
- LX2 57
- LX7 57
- BX5 X2*X4 EXTRACT WRITE DATA FLAG
- AX1 CCTLS/2
- BX7 X7-X5
- NZ X7,FNR2 IF NOT MATCHING MODES (READ/WRITE)
- SA5 A4+PAD1-IOLK READ PHYSICAL ADDRESS
- SA3 A3 READ CURRENT PHYSICAL ADDRESS
- ERRNZ PAD1 INDEX MUST BE ZERO
- SX7 A5
- SA7 NRQT-1+X1 SET NEXT REQUEST
- LX5 24
- LX3 24
- BX7 X5
- BX2 X3-X5
- AX7 48
- AX3 48
- BX6 -X6*X2
- IX3 X7-X3
- NZ X6,FNR2 IF NOT SAME CYLINDER
- BX7 X7-X7 SET CONTINUOUS REQUEST FOUND
- SX3 X3-PSLB
- LX5 6
- ZR X3,FNR1 IF CONTINUOUS SECTORS
- MX1 -6
- SX7 B1+B1 SET *SWITCH* FUNCTION
- BX1 -X1*X5 TRACK
- LX7 4
- LX5 6
- BX7 X1+X7
- MX1 -6
- LX7 5
- BX1 -X1*X5 SECTOR
- BX7 X7+X1
- FNR1 LX7 48
- MX3 1 SET I/O LINKUP
- LX3 56-59
- BX6 X4+X3
- SA6 A4
- JP B3 RETURN
- FNR2 SX5 B4+ SET *STOP* FOR NEXT REQUEST
- MX7 1
- AX5 CCTLS/2
- SA7 NRQT-1+X5
- JP B3 RETURN
- INR SPACE 4,10
- ** INR - INITIATE REQUEST.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- * (X0) = CONTROL BUFFER ORDINAL.
- *
- * USES X - ALL.
- * A - 2, 3, 4, 5, 6, 7.
- * B - 5, 7.
- INR LX0 CBTLS
- MX7 -12
- TA5 X0+HSLK,CBT
- BX2 -X7*X5 *PUT* ORDINAL
- SA3 A5+FSTC-HSLK
- LX2 PUTLS
- LX3 12
- TA2 X2+UNCT,PUT
- BX3 -X7*X3 EST ORDINAL
- LX2 12
- CX5 X3,EST CONVERT EST ORDINAL TO OFFSET
- MX3 -6
- BX3 -X3*X2
- MX1 12
- SB7 X3 UNIT NUMBER
- LX1 3
- MX4 3 FORM CHANNEL MASK
- LX2 -6
- BX1 X1-X4
- TA5 X5+EQDE,EST READ EST ENTRY
- LX5 24+3
- BX6 X1*X5 EXTRACT ALTERNATE CHANNEL
- SB5 X6-4
- AX6 48+3-CCTLS/2 CHANNEL CONTROL TABLE INDEX
- LX5 -12
- BX5 X1*X5 EXTRACT PRIMARY CHANNEL
- SX1 X5-4
- AX5 48+3-CCTLS/2 CHANNEL CONTROL TABLE INDEX
- TA3 X5+CREQ,CCT
- NZ B5,INR2 IF ALTERNATE ACCESS UNAVAILABLE
- TA4 X5+CREQ,CCT
- SB5 X1 SAVE PRIMARY CHANNEL STATUS
- BX1 -X7*X3
- NZ B5,INR1 IF PRIMARY ACCESS UNAVAILABLE
- BX7 -X7*X4 ACTIVE REQUESTS - SECOND CHANNEL
- IX7 X1-X7
- NG X7,INR2 IF FIRST CHANNEL HAS FEWEST REQUESTS
- INR1 SA3 A4+ USE SECOND CHANNEL
- INR2 NG X3,INR3 IF CHANNEL BUSY
- TX4 A3-CREQ,-CCT COMPUTE CHANNEL NUMBER
- MX6 -3
- AX4 CCTLS/2
- BX6 -X6*X2 READ RECOVERY INDEX
- MX1 1
- IX6 X0+X6 OFFSET FOR READ RECOVERY
- SB5 X4 CHANNEL NUMBER
- TA5 X0+IOLK,CBT GET READ/WRITE FLAG
- TA4 X6+PAD1,CBT READ PHYSICAL ADDRESS
- LX1 54-59
- LX5 54-57
- SX6 B7 UNIT NUMBER
- BX5 X5*X1 READ/WRITE FLAG
- MX7 12
- LX6 48
- LX7 -12
- BX5 X5+X6 FCN, UNIT
- BX6 X7*X4 CYLINDER
- LX7 -36
- LX4 -24
- BX6 X6+X5 FCN, UNIT, CYL
- BX4 X7*X4 TRACK, SECTOR
- SX5 B5 CHANNEL NUMBER
- BX6 X6+X4 FCN, UNIT, CYL, TRACK, SECTOR
- LX5 7
- SA6 /MONITOR/MCU+X5 STORE REQUEST
- * INITIATE REQUEST.
- MX1 48
- SX7 B7 UNIT NUMBER
- TX6 A2-UNCT,-PUT SET *PUT* ENTRY PENDING
- LX1 12
- LX6 12-PUTLS
- BX3 X1*X3 CLEAR PENDING REQUEST
- SA7 A6+B1
- BX6 X6+X3 INSERT NEW PENDING REQUEST
- RI B5 RESET I/O BUFFER POINTERS
- MX3 1
- RO B5 SET RECORD FLAG TO *FLPP*
- BX6 X6+X3 SET CHANNEL BUSY
- SB5 B5+B1
- SA6 A3
- RI B5 RESET BUFFER POINTERS (PARTNER CHANNEL)
- JP B3 RETURN
- INR3 TX7 A2-UNCT,-PUT SET RETRY REQUEST
- MX1 48
- LX7 24-PUTLS
- LX1 24
- LX2 -6
- MX4 -59
- BX3 X1*X3 CLEAR RETRY REQUEST
- BX6 -X4*X2 CLEAR UNIT BUSY
- BX7 X7+X3 INSERT NEW RETRY REQUEST
- SA6 A2
- SA7 A3
- JP B3 RETURN
- IOA SPACE 4,20
- ** IOA - I/O ACCEPT.
- *
- * MASTER INPUT.
- *
- * ENTRY (A0) = CM BUFFER ADDRESS.
- * (B4) = CHANNEL NUMBER.
- * ((A0)+1) = UNIT NUMBER.
- *
- * EXIT (X0) = CONTROL BUFFER ORDINAL.
- * TO *INR*.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * A - 2, 4, 5, 6, 7.
- * B - 3, 5, 6, 7.
- *
- * CALLS INR, SAA.
- IOAX MJ EXIT
- IOA TB7 READ REAL TIME CLOCK
- SX1 B4
- SX7 B7
- LX1 CCTLS/2
- SA4 A0+B1 GET UNIT NUMBER
- MX6 48
- SA7 RTCI SAVE REAL-TIME CLOCK
- TA3 X1+CREQ,CCT READ CHANNEL REQUEST CONTROL
- SB7 X4 UNIT NUMBER
- SA5 A3+B1
- ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
- MX7 -59
- PL X3,IOAX IF CHANNEL NOT BUSY
- LX6 12
- BX3 -X7*X3 CLEAR CHANNEL BUSY
- SX2 B1
- BX3 X6*X3 CLEAR PENDING REQUEST
- RI B4 RESET I/O BUFFER POINTERS
- SB6 B7-60
- IX5 X5+X2 INCREMENT TOTAL REQUEST COUNT
- IX6 X3+X2 INCREMENT ACTIVE REQUEST COUNT
- AX7 B6
- RI B2 RESET I/O BUFFER POINTERS
- BX7 X7+X5 SET UNIT REQUEST FLAG
- SA6 A3
- SA7 A5+
- SB6 7
- * *IOA* IS ENTERED HERE BY *RIO* TO INITIATE REQUESTS ON
- * ALL CHANNELS IN USE WHEN FLUSHING WRITE BUFFERS DURING
- * RECOVERY. EXIT IS ACCOMPLISHED BY CODE MODIFICATION.
- IOA1 MX2 -3
- SX6 B7+1 INCREMENT UNIT NUMBER
- BX4 -X2*X6
- SB7 X4
- LX3 X7,B7 UNIT REQUEST FLAG
- PL X3,IOA4 IF NO REQUEST ISSUED
- IOA2 SB6 B6-1
- NZ B6,IOA1 IF NOT END OF UNITS
- IOA3 SB3 IOAX *SAA* RETURN ADDRESS
- * EQ RIO2 (BUFFER RECOVERY IN PROGRESS)
- EQ SAA SET ACCOUNTING ADJUSTMENT
- IOA4 SB5 B7-4
- SX3 A5+CUN1-CCNT
- NG B5,IOA5 IF UNITS 0 - 3
- SX3 X3+CUN2-CUN1
- IOA5 SA2 X3 GET *PUT* ORDINAL
- SX6 B7 COMPUTE BYTE OFFSET
- ZR X2,IOA2 IF NO UNITS DEFINED
- MX4 -2
- SX5 12
- BX4 -X4*X6
- IX6 X4*X5
- SB5 X6
- MX4 -12
- AX2 B5
- BX6 -X4*X2 *PUT* ORDINAL
- ZR X6,IOA2 IF NO UNIT DEFINED
- LX6 PUTLS
- TA2 X6+UNCT,PUT READ *PUT* ENTRY
- NG X2,IOA2 IF UNIT BUSY
- MX4 1
- MX5 -12
- BX6 X4+X2 SET UNIT BUSY
- LX2 -12
- BX0 -X5*X2
- ZR X0,IOA2 IF EMPTY QUEUE
- SA6 A2
- SB3 IOA3 *INR* RETURN ADDRESS
- EQ INR INITIATE REQUEST
- IOL SPACE 4,25
- ** IOL - I/O LINKUP.
- *
- * XP SLAVE INPUT.
- *
- * ENTRY (A1) = PARTNER XP ADDRESS.
- * (A0) = CM BUFFER ADDRESS.
- * (B2) = CHANNEL NUMBER (PARTNER).
- * (B4) = CHANNEL NUMBER.
- * ((A0)) = *FLPP* REPLY.
- *
- * EXIT (A2) = *PUT* ENTRY ADDRESS.
- * (A3) = CONTROL BUFFER ADDRESS.
- * (X0) = LCM BUFFER ADDRESS.
- * (X2) = *PUT* ENTRY.
- * TO *RDD* (READ) OR *WRT* (WRITE).
- *
- * USES X - ALL.
- * A - 2, 3, 5, 6, 7.
- * B - 3, 5, 7.
- *
- * CALLS DCS, RDD, SAA, WRT.
- IOLX MJ EXIT
- IOL TB7 READ REAL-TIME CLOCK
- SX2 B2 CHANNEL NUMBER
- SX7 B7
- LX2 CCTLS/2
- SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- TA3 X2+CREQ,CCT READ CHANNEL CONTROL TABLE
- MX6 -12
- BX7 -X6*X3 ACTIVE REQUESTS
- ZR X7,IOLX IF NO ACTIVE REQUESTS
- MX4 1
- LX6 12
- BX7 X3+X4 SET CHANNEL BUSY
- BX3 -X6*X3 PENDING REQUEST
- ZR X3,IOL1 IF NO PENDING REQUEST ISSUED
- MX6 36
- AX3 12-PUTLS
- LX6 12
- TA2 X3+UNCT,PUT READ *PUT* ENTRY
- BX7 X6*X7 CLEAR RETRY REQUEST
- LX3 24-PUTLS
- BX7 X3+X7 INSERT NEW RETRY REQUEST
- BX6 -X4*X2 CLEAR UNIT BUSY
- SA6 A2
- IOL1 SB3 IOL2 *SAA* RETURN ADDRESS
- SA2 B0 SET I/O LINKUP SEQUENCE
- RO B4 SIGNAL *FLPP*
- SA7 A3
- EQ SAA SET ACCOUNTING ADJUSTMENT
- IOL2 MJ EXIT
- * SECOND I/O LINKUP INTERRUPT, OR STATUS REPLY.
- *
- * (A2) = 0 IF I/O LINKUP SEQUENCE.
- * (A2) = *PUT* ENTRY ADDRESS, IF STATUS REPLY.
- IOL3 TB3 READ REAL-TIME CLOCK
- SX6 A2+
- SX7 B3
- SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- NZ X6,DCS IF STATUS REPLY
- SA2 A0+ GET *FLPP* REPLY
- SX5 A3+B1
- ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
- MX3 12
- RI B4
- BX0 X3*X2
- RI B2 RESET I/O BUFFER POINTERS
- LX2 18
- SX3 4
- SB5 X2 FUNCTION
- LX2 6
- BX3 X3*X2
- ZR X3,IOL4 IF UNITS 0-3
- SX5 X5+B1
- ERRNZ CUN2-CUN1-1 INDEXES MUST BE CONSECUTIVE
- IOL4 SA5 X5+B1 READ UNIT LIST
- ERRNZ CUN1-CCNT-1 INDEXES MUST BE CONSECUTIVE
- MX3 -2 COMPUTE UNIT OFFSET
- SX4 12
- BX3 -X3*X2
- IX3 X3*X4
- SB7 X3
- AX5 B7 POSITION *PUT* ORDINAL
- MX4 -12
- BX3 -X4*X5
- LX3 PUTLS
- MX1 -24
- TA2 X3+UNCT,PUT READ *PUT* ENTRY
- LX2 -12
- BX4 -X4*X2 CURRENT
- LX2 12
- LX4 CBTLS
- TA5 X4+IOLK,CBT
- TA3 X4+PAD1,CBT SET CONTROL BUFFER ADDRESS
- PL X5,IOL6 IF I/O INTERLOCK CLEAR
- SX3 B1
- LX5 -57
- BX3 X5*X3
- SX4 B5 FUNCTION
- IX4 X4-X3
- NZ X4,IOL6 IF FUNCTIONS DO NOT MATCH
- MX3 1
- BX7 X7-X7
- BX6 X3+X5 SET I/O LINKUP
- SA7 A0 SET *GO* TO *FLPP*
- LX6 57
- SA6 A5
- NZ X0,DCS IF ABORT DURING I/O LINKUP
- RO B2 SIGNAL MASTER *FLPP*
- IOL5 OB7 B2
- ZR B7,IOL5 IF MASTER HAS NOT ACCEPTED
- BX0 -X1*X6 I/O BUFFER ADDRESS
- NZ B5,WRT IF WRITE
- EQ RDD READ
- IOL6 NZ X0,DCS IF ABORT DURING I/O LINKUP
- EQ * HANG
- RAB SPACE 4,20
- ** RAB - READ ABORT PROCESSOR.
- *
- * XP SLAVE INPUT.
- *
- * ENTRY (A0) = CM BUFFER ADDRESS.
- * (A1) = PARTNER XP ADDRESS.
- * (A2) = *PUT* ENTRY ADDRESS.
- * (A3) = CONTROL BUFFER ADDRESS.
- * (B4) = CHANNEL NUMBER.
- * (B5) = READ RECOVERY INDEX.
- * (X0) = LCM BUFFER ADDRESS.
- *
- * EXIT TO *DCS*.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * A - 2, 3, 4, 5, 6, 7.
- * B - 6, 7.
- RAB SA5 A1 RESET MASTER XP
- SA4 A0 GET STATUS
- SX3 IOA NEW (P)
- MX6 -36
- LX3 36
- BX6 -X6*X5 CLEAR OLD (P)
- LX4 59-58
- BX6 X6+X3 INSERT NEW (P)
- MX7 1
- SA6 A5
- MX1 -3
- PL X4,DCS IF NOT A READ ERROR
- SA5 A1+5 READ MASTER XP
- BX5 -X1*X5 (B5) = READ RECOVERY INDEX
- SA2 A2 READ *PUT* ENTRY
- ERRNZ UNCT INDEX MUST BE ZERO
- LX1 -6
- SB7 X5
- BX2 X1*X2
- GT B7,B5,RAB1 IF MASTER NEXT
- SX5 B5
- RAB1 SB6 X5-1
- SB7 X5-PSLB
- LX5 54
- SA4 A3+B6 ADDRESS OF SECTOR IN ERROR
- MX1 2
- LX1 23-59
- BX6 X1*X4 CLEAR VALID DATA FLAGS
- BX6 -X6
- BX6 X1*X6
- BX6 X6+X4
- SA6 A4
- NG B7,RAB2 IF NOT LAST SECTOR
- BX5 X5-X5 CLEAR NEW READ RECOVERY INDEX
- RAB2 BX7 X5+X2 SET NEW READ RECOVERY INDEX
- SA7 A2
- SX7 B4+ CLEAR POSSIBLE CONTINUATION REQUEST
- AX7 CCTLS/2
- MX6 1
- SA6 NRQT-1+X7
- EQ DCS DECODE STATUS
- RDD SPACE 4,15
- ** RDD - READ DISK.
- *
- * ENTRY (A0) = CM BUFFER ADDRESS.
- * (A1) = PARTNER XP ADDRESS.
- * (A2) = *PUT* ENTRY ADDRESS.
- * (A3) = CONTROL BUFFER ADDRESS.
- * (X0) = LCM BUFFER ADDRESS.
- * (X2) = *PUT* ENTRY.
- *
- * USES X - ALL.
- * A - ALL.
- * B - 3, 5, 6, 7.
- *
- * CALLS /BUFIO/DLB, FNR, RAB, SAA, /BUFIO/SBR, SCB.
- RDD SA1 A1 SET UP PARTNER XP
- SA4 A1+2
- MX6 -3
- LX2 6
- SX7 RDD3 ENTRY ADDRESS FOR MASTER XP
- SA5 A4+B1
- BX2 -X6*X2 RECOVERY INDEX
- MX3 42
- LX7 36
- LX3 18
- SB5 X2 RECOVERY INDEX
- BX4 X3*X4 CLEAR (A2)
- BX5 X3*X5 CLEAR (A3)
- SX6 A2
- SX3 A3
- LX6 18
- LX3 18
- BX6 X4+X6 INSERT NEW (A2)
- SA6 A4
- SA4 A1+5
- BX6 X5+X3 INSERT NEW (A3)
- SB7 B5-PSLB+1
- SA6 A5
- MX3 42
- MX5 -36
- SX6 X2+B1 RECOVERY INDEX FOR PARTNER
- BX4 X3*X4 CLEAR (B5)
- BX1 -X5*X1 CLEAR (P)
- BX6 X6+X4 INSERT NEW (B5)
- BX7 X7+X1 INSERT NEW (P)
- SA6 A4+
- LX2 9
- SA7 A1+
- IX0 X0+X2 OFFSET LCM ADDRESS BY RECOVERY INDEX
- NZ B7,RDD1 IF NOT LAST SECTOR
- MX7 1
- SA7 A0
- RDD1 SX4 1000B
- SB3 RDD2 *SAA* RETURN ADDRESS
- IX6 X0+X4
- RO B2 SIGNAL MASTER
- SA6 A1+10B SET NEW (X0)
- EQ SAA SET ACCOUNTING ADJUSTMENT
- RDD2 MJ EXIT
- * FIRST INTERRUPT.
- RDD3 TB7 READ REAL-TIME CLOCK
- IB3 B4 CHECK FOR FULL BUFFER
- SA4 A0 READ HEADER
- MX5 2
- SB6 200B
- SX7 B7
- LX5 -12
- SB3 B3-B6
- BX6 X5*X4 UNIT NUMBER
- SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- NG B3,RAB IF READ ABORT
- SA0 A0+B1
- BX4 -X5*X4 CLEAR UNIT
- WE 177B
- + LX6 2
- SX2 177B
- BX6 X6+X4 INSERT UNIT NUMBER
- IX0 X0+X2 INCREMENT LCM ADDRESS
- SA0 A0+177B INCREMENT CM ADDRESS
- SA6 A3+B5 SET HEADER IN CONTROL BUFFER
- SB3 RDD4 *SAA* RETURN ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- RDD4 MJ EXIT
- * SECOND INTERRUPT.
- TB7 READ REAL-TIME CLOCK
- SX2 200B
- SX7 B7
- WE 200B
- + SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- SA0 A0-B6 RESET CM ADDRESS
- IX0 X0+X2 INCREMENT LCM ADDRESS
- SB3 RDD5 *SAA* RETURN ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- RDD5 MJ EXIT
- * THIRD INTERRUPT.
- TB7 READ REAL-TIME CLOCK
- BX7 X7-X7 *GO* FOR NEXT SECTOR
- SB3 PSLB-2 CHECK FOR NEXT TO LAST SECTOR
- WE 200B
- + SX6 B7
- IX0 X0+X2 INCREMENT LCM ADDRESS
- SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- SA0 A0+B6 INCREMENT CM ADDRESS
- NE B3,B5,RDD6 IF NOT NEXT TO LAST SECTOR
- SB7 B0 SET READ PROCESSING FOR *FNR*
- SB3 RDD6 *FNR* RETURN ADDRESS
- EQ FNR FIND NEXT REQUEST
- RDD6 SB3 RDD7 *SAA* RETURN ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- RDD7 MJ EXIT
- * FOURTH INTERRUPT.
- TB7 READ REAL-TIME CLOCK
- SX2 B6
- - WL 200B
- SX6 B7
- SA0 A0-B6 RESET CM ADDRESS
- SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- RDD8 IB3 B4
- SA5 A0
- NE B3,B1,RDD8 IF LAST WORD NOT PRESENT
- IX0 X0+X2 INCREMENT LCM ADDRESS
- SB5 B5+2 INCREMENT SECTOR COUNT
- SX2 B1
- WX5 X0 WRITE LAST WORD TO BUFFER
- SX4 1000B
- IX0 X0+X2
- SA7 A0+ SEND CONTROL WORD TO *FLPP*
- SB3 PSLB+1
- RI B4 RESET I/O BUFFER POINTERS
- IX0 X0+X4 INCREMENT LCM BUFFER ADDRESS
- RO B4
- MX7 -57
- EQ B3,B5,RDD9 IF LAST SECTOR
- SB3 RDD2 *SAA* RETURN ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- RDD9 SA2 A2 READ *PUT* ENTRY
- ERRNZ UNCT INDEX MUST BE ZERO
- LX7 -3
- SB3 RDD10 *DLB* RETURN ADDRESS
- BX2 -X7*X2 CLEAR RECOVERY INDEX
- EQ /BUFIO/DLB DELETE BUFFER
- RDD10 SB3 RDD11 *SRC* RETURN ADDRESS
- SB7 B0+ SET INPUT XP
- EQ /BUFIO/SBR SET BUFFER RECALL
- RDD11 SX2 B4 GET NEXT REQUEST
- SA5 A1+5 CLEAR PARTNER SECTOR COUNT
- AX2 CCTLS/2
- MX0 42
- SA4 NRQT-1+X2
- BX6 X0*X5 CLEAR (B5)
- MX1 -24
- SA6 A5
- SA3 X4 READ NEXT CONTROL BUFFER
- SX7 X4 CONTROL BUFFER ADDRESS
- BX2 X4
- SA5 A1+3
- LX0 18
- SA4 X4+IOLK
- LX7 18
- BX5 X0*X5 CLEAR (A3)
- BX6 -X1*X4 LCM BUFFER ADDRESS
- BX7 X5+X7 INSERT NEW (A3)
- SA4 A2+RDST UPDATE READ STATISTICS
- SX5 PSLB PHYSICAL SECTOR COUNT
- SA6 A1+10B SET NEW (X0)
- SA7 A5+
- SX0 1000B
- SB7 59-35
- SB5 B1
- IX7 X4+X5 INCREMENT ACCUMLATOR
- IX0 X0+X6 LCM BUFFER ADDRESS
- LX1 X7,B7
- SB3 RDD13 *RXB* *SCB* RETURN ADDRESS
- NG X1,RDD12 IF ACCUMULATOR OVERFLOW
- SA7 A4+ UPDATE ACCUMULATOR
- RDD12 NG X2,RXP IF NOT CONTINUING ON NEXT REQUEST
- EQ SCB SET CURRENT BUFFER
- RDD13 SB3 RDD2 *SAA* RETURN ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- RPP SPACE 4,10
- ** RPP - REQUEST PSEUDO-PP.
- *
- * ENTRY (A4) = FWA OF CONTROL BUFFER + *LSLK*.
- * (B3) = RETURN ADDRESS.
- * (B4) = CHANNEL NUMBER.
- * (B7) = 0 IF INPUT XP, 20B IF OUTPUT XP.
- *
- * USES X - 3, 4, 5, 6, 7.
- * A - 5, 6, 7.
- RPP SX4 B4 COMPUTE XP ADDRESS
- LX4 5
- SX4 X4+B7
- SX3 B1
- SA5 /MONITOR/MCU+X4+3 READ PSD
- LX3 39
- BX6 X3+X5 SET STEP MODE FLAG
- SA6 A5+
- TX7 A4-LSLK,-CBT COMPUTE CONTROL BUFFER ORDINAL
- SA5 BMRI GET REQUEST QUEUE INDEX
- AX7 3
- SX6 X5+B1 INCREMENT INDEX
- SA7 TBMR+X5 SET REQUEST IN QUEUE
- SA6 A5+
- JP B3 RETURN
- RXP SPACE 4,10
- ** RXP - RESET EXCHANGE PACKAGES.
- *
- * ENTRY (A1) = PARTNER XP ADDRESS.
- * (B3) = RETURN ADDRESS.
- * (B4) = CHANNEL NUMBER.
- *
- * USES X - 2, 3, 4, 6, 7.
- * A - 4, 7.
- * B - 3.
- *
- * CALLS SAA.
- RXP SX2 B4 CHANNEL NUMBER
- SX3 B1
- SX7 IOA
- BX3 X3*X2
- MX6 -36
- SB3 IOL2 *SAA* RETURN ADDRESS
- SA4 A1+
- NZ X3,RXP1 IF IN SLAVE
- SX7 IOL3
- SB3 IOAX *SAA* RETURN ADDRESS
- RXP1 LX7 36
- BX6 -X6*X4
- BX7 X7+X6 INSERT NEW (P)
- SA7 A4
- ERRNZ SAA-* SUBROUTINES MUST BE CONSECUTIVE
- * EQ SAA
- SAA SPACE 4,10
- ** SAA - SET ACCOUNTING ADJUSTMENT.
- *
- * ENTRY (B3) = RETURN ADDRESS.
- * (RTCI) = REAL-TIME CLOCK AT INTERRUPT.
- *
- * USES X - 3, 4, 5, 6.
- * A - 4, 5, 6.
- * B - 7.
- SAA SA4 RTCI REAL-TIME CLOCK AT INTERRUPT
- SA5 CL+CPBT PROGRAM MODE BASE TIME OF ACTIVE JOB
- TB7 READ REAL-TIME CLOCK
- MX6 -18
- SX3 B7
- BX4 -X6*X4
- BX6 -X6*X3
- IX6 X6-X4 COMPUTE ACCOUNTING ADJUSTMENT
- SX6 X6+80D ADJUST FOR NON-TIMED CODE
- IX6 X5+X6 ADJUST START TIME
- SA6 A5
- JP B3 RETURN
- SCB SPACE 4,10
- ** SCB - SET CURRENT BUFFER.
- *
- * ENTRY (A2) = *PUT* ENTRY ADDRESS.
- * (A3) = CONTROL BUFFER ADDRESS.
- * (B3) = RETURN ADDRESS.
- *
- * USES X - 2, 5, 6.
- * A - 2, 6.
- SCB SA2 A2 *PUT* ENTRY
- MX6 48
- TX5 A3,-CBT COMPUTE CONTROL BUFFER ORDINAL
- LX6 12
- LX5 12-CBTLS
- BX6 X6*X2 CLEAR CURRENT
- BX6 X5+X6 INSERT NEW CURRENT
- SA6 A2
- JP B3 RETURN
- WRT SPACE 4,15
- ** WRT - WRITE DISK.
- *
- * ENTRY (A0) = CM BUFFER ADDRESS.
- * (A1) = PARTNER XP ADDRESS.
- * (A2) = *PUT* ENTRY ADDRESS.
- * (A3) = CONTROL BUFFER ADDRESS.
- * (X0) = LCM BUFFER ADDRESS.
- * (X2) = *PUT* ENTRY.
- *
- * USES X - ALL.
- * A - 0, 2, 3, 4, 5, 6, 7.
- * B - 3, 5, 6, 7.
- *
- * CALLS /BUFIO/DLB, FNR, SAA, SCB, /BUFIO/SBR.
- WRT SA4 A1+20B+2 SET UP PARTNER XP
- MX6 42
- SA3 A3 READ CONTROL BUFFER
- ERRNZ PAD1 CODE DEPENDS ON VALUE
- MX1 2
- LX6 18
- SA5 A4+B1
- LX1 49-59
- MX7 -48
- BX4 X6*X4 CLEAR (A2)
- BX1 X1*X3 UNIT NUMBER
- BX7 -X7*X3 CLEAR FLAGS
- LX1 -2
- BX5 X6*X5 CLEAR (A3)
- BX7 X1+X7 INSERT UNIT NUMBER
- SX6 A2
- SA7 A0 SET HEADER WORD IN SECTOR
- LX6 18
- SA0 A0+B1
- SX7 A3
- BX6 X6+X4 INSERT NEW (A2)
- LX7 18
- SA6 A4
- BX7 X7+X5 INSERT NEW (A3)
- SX3 377B
- - RL 377B FILL CM BUFFER
- SA7 A5
- IX6 X0+X3
- SA4 A1+20B+5
- SA6 A1+20B+10B SET (X0)
- MX5 42
- SA0 A0-B1 RESET CM BUFFER ADDRESS
- BX7 X5*X4 CLEAR (B5) = READ RECOVERY INDEX
- SB3 IOL2 *SAA* RETURN ADDRESS
- SA7 A4
- RO B2 SIGNAL MASTER FLPP
- EQ SAA SET ACCOUNTING ADJUSTMENT
- WRTX MJ EXIT
- * FIRST INTERRUPT.
- WRT1 TB7 READ REAL-TIME CLOCK
- SB3 WRT2 *SAA* RETURN ADDRESS
- SX7 B7
- SB6 200B ADDRESS INCREMENT
- SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- SX2 B6+
- - RL 200B
- IX0 X0+X2 INCREMENT LCM ADDRESS
- SA0 A0+B6 INCREMENT CM ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- WRT2 MJ EXIT
- * SECOND INTERRUPT.
- TB7 READ REAL-TIME CLOCK
- SB3 WRT3 *SAA* RETURN ADDRESS
- SX7 B7
- SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- - RL 200B
- IX0 X0+X2 INCREMENT LCM ADDRESS
- SA0 A0-B6 RESET CM ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- WRT3 MJ EXIT
- * THIRD INTERRUPT.
- TB7 READ REAL-TIME CLOCK
- RX6 X0 READ LAST WORD
- SB3 PSLB-1
- SX7 B7
- SB5 B5+B1 INCREMENT SECTOR COUNT
- SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- SB7 B1 *FNR* CONTROL
- SX7 B1
- SA6 A0 LAST WORD OF SECTOR TO BUFFER
- IX0 X0+X7
- EQ B3,B5,WRT6 IF NEXT TO LAST SECTOR
- SB3 B3+B1
- BX7 X7-X7 *GO*
- NE B3,B5,WRT7 IF NOT LAST SECTOR
- SB3 WRT4 *DLB* RETURN ADDRESS
- SA2 A2 *PUT* ENTRY
- ERRNZ UNCT INDEX MUST BE ZERO
- EQ /BUFIO/DLB DELETE BUFFER
- WRT4 SB3 WRT5 *SRC* RETURN ADDRESS
- SB6 200B RESET B6
- SB7 20B SET OUTPUT XP
- EQ /BUFIO/SBR SET BUFFER RECALL
- WRT5 SA5 A2+WTST UPDATE WRITE STATISTICS
- SX6 PSLB PHYSICAL SECTOR COUNT
- SX7 B4 CHANNEL NUMBER
- IX6 X5+X6 INCREMENT ACCUMULATOR
- AX7 1
- LX6 59-35
- SA4 NRQT-1+X7 CHECK FOR CONTINUATION
- SB5 B0+ CLEAR READ RECOVERY INDEX
- NG X6,WRT5.1 IF ACCUMULATOR OVERFLOW
- LX6 35-59
- SA6 A5 UPDATE ACCUMULATOR
- WRT5.1 NG X4,WRT10 IF END OF TRANSFER
- SA3 X4
- SX6 A1 SET NEW CONTROL BUFFER INDEX IN XP
- SA5 X4+IOLK
- MX7 54
- MX2 -24
- BX3 X7*X6
- BX0 -X2*X5
- BX7 X7-X7 PRESET *CONTINUE*
- MX2 42
- SA5 X3+40B+3
- SB3 WRT7 *SCB* RETURN ADDRESS
- SX3 A3
- LX2 18
- LX3 18
- BX6 X2*X5 CLEAR (A3)
- BX6 X6+X3 INSERT NEW (A3)
- SA6 A5
- EQ SCB SET CURRENT BUFFER
- WRT6 SB3 WRT7 *FNR* RETURN ADDRESS
- EQ FNR FIND NEXT REQUEST
- WRT7 SA0 A0+1
- SX2 177B
- RE 177B
- + SB3 WRT8 *SAA* RETURN ADDRESS
- IX0 X0+X2 INCREMENT LCM ADDRESS
- SX2 B6
- SA0 A0+177B INCREMENT CM ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- WRT8 MJ EXIT
- * FOURTH INTERRUPT.
- TB7 READ REAL-TIME CLOCK
- MX1 2
- SA5 A3+B5 GET HEADER FOR NEXT SECTOR
- MX3 -48
- LX1 -10
- SX6 B7
- - RL 200B
- SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- BX1 X1*X5 UNIT NUMBER
- BX3 -X3*X5
- LX1 -2
- SA0 A0-B6 RESET CM ADDRESS
- BX3 X1+X3 INSERT UNIT NUMBER
- IX0 X0+X2
- WRT9 OB3 B4
- ZR B3,WRT9 IF LAST WORD STILL PRESENT
- BX7 X7+X3
- SA7 A0
- RO B2 RESET I/O BUFFER POINTERS
- SA4 A1+2 RESET PARTNER XP
- SA5 A1+3
- BX6 X0
- SX2 A2
- SA6 A1+10B SET (X0) IN PARTNER XP
- LX2 18
- MX1 42
- SX3 A3
- LX1 18
- LX3 18
- BX4 X1*X4 CLEAR (A2)
- BX5 X1*X5 CLEAR (A3)
- BX6 X4+X2 INSERT NEW (A2)
- BX7 X5+X3 INSERT NEW (A3)
- SA6 A4
- SA7 A5
- MX1 42
- SA4 A1+5
- SX6 B5
- SB3 WRTX *SAA* RETURN ADDRESS
- BX4 X1*X4 CLEAR (B5)
- BX6 X4+X6 INSERT NEW (B5)
- SA6 A4
- EQ SAA SET ACCOUNTING ADJUSTMENT
- WRT10 SB3 WRT11 *SAA* RETURN ADDRESS
- EQ SAA SET ACCOUNTING ADJUSTMENT
- WRT11 MJ EXIT
- TB7 READ REAL-TIME CLOCK
- RO B2 INDICATE TRANSFER COMPLETE TO *FLPP*
- SX7 B7+
- SB3 WRTX *SAA* RETURN ADDRESS
- SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- EQ SAA SET ACCOUNTING ADJUSTMENT
- ENDBLK
- BLOCK DCP,(DUAL CPU OPERATION.)
- PCXF SPACE 4,15
- ** PCXF - PROCESS CPU EXCHANGE REQUEST.
- *
- * ENTRY
- *T, X0 42/,18/ PCXF
- * (X5) = MONITOR MODE ENTRY TIME IF 180 MACHINE.
- *
- * EXIT TO */MONITOR/PMN4*.
- *
- * USES X - 1, 2, 3, 4, 7.
- * A - 1, 7.
- * B - 3.
- PCX SA1 CL+CACX+A0 READ REQUEST WORD
- NX3,B3 X1 SET PPU NUMBER
- SX4 B1
- ZR X1,/MONITOR/MTRX IF NO REQUESTS PRESENT
- LX4 47
- SX2 B3 SET OUTPUT REGISTER OFFSET
- AX3 X4,B3
- BX7 X1-X3
- LX2 3
- SA7 A1
- TX0 X2+1,FP SET OUTPUT REGISTER ADDRESS
- EQ /MONITOR/PMN4 PROCESS FUNCTION
- ACQ SPACE 4,10
- ** ACQ - *ACQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
- *
- * ENTRY JOB ACTIVE IN THIS CPU.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * USES X - 1.
- * A - 1.
- * B - 6.
- *
- * EXIT TO *ACQ* VIA *CCC*.
- ACQ BSS 0 ENTRY
- SA1 B7+CWQW
- SB6 /BUFIO/ACQ SET EXIT ADDRESS
- EQ CCC CHECK CACHE MACHINE CPU SELECTION
- APQ SPACE 4,10
- ** APQ - *APQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
- *
- * ENTRY JOB ACTIVE IN THIS CPU.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * USES X - 1.
- * A - 1.
- * B - 6.
- *
- * EXIT TO *APQ* VIA *CCC*.
- APQ BSS 0 ENTRY
- SA1 B7+CWQW
- SB6 /MONITOR/APQ SET EXIT ADDRESS
- EQ CCC CHECK CACHE MACHINE CPU SELECTION
- CCA SPACE 4,15
- ** CCA - DUAL CPU CACHE MACHINE *CCAM* PROCESSOR.
- *
- * ENTRY JOB ACTIVE IN THIS CPU IF CPU 1.
- * (B3) = *JAV* RETURN ADDRESS.
- * (B7) = OLD CONTROL POINT ADDRESS.
- * (X6) = OLD CONTROL POINT *STSW*.
- * (B6) = NEW CONTROL POINT ADDRESS.
- * (X0) .GE. 0 IF OLD CP/PCP IS SYSTEM CP OR PCP.
- *
- * EXIT TO */MONITOR/JAV* IF OLD CP JOB ADVANCE TO BE CHECKED.
- * TO *PPRX* IF OLD CP JOB ADVANCE NOT TO BE CHECKED.
- * (B7) = OLD CONTROL POINT ADDRESS.
- *
- * USES X - 1, 2.
- * A - 1.
- * B - 4, 6.
- CCA BSS 0 ENTRY
- TX2 B6,-SCA
- PL X0,CCA1 IF OLD CP/PCP IS SYSTEM CP OR PCP
- SB4 CCA1 SET *CPA* RETURN ADDRESS
- EQ CPA CHECK OLD CP ACTIVITY
- CCA1 SA1 B6+CWQW
- SB6 /MONITOR/JAV SET TO CHECK ADVANCE ON OLD CP
- NG X0,CCA2 IF OLD CP/PCP IS NOT SYSTEM CP OR PCP
- SB6 /MONITOR/PPRX SET TO NOT CHECK ADVANCE ON OLD CP
- CCA2 PL X2,/MONITOR/RB6 IF NEW CP/PCP IS SYSTEM CP OR PCP
- * EQ CCC CHECK NEW CP CPU SELECTION
- CCC SPACE 4,15
- ** CCC - CHECK CPU SELECTION FOR DUAL CPU CACHE MACHINE.
- *
- * ENTRY JOB ACTIVE IN THIS CPU.
- * (B6) = EXIT ADDRESS.
- * (X1) = *CWQW*.
- * (A1) = ADDRESS OF *CWQW*.
- *
- * EXIT ASSIGNMENT OF CPU 1 PROHIBITED.
- * CPU SWITCH REQUESTED IF EXECUTING IN CPU 1.
- *
- * USES X - 1, 2, 7.
- * A - 1, 7.
- CCC BSS 0 ENTRY
- SX7 B1
- SX2 A0
- LX7 24-0
- BX7 X1+X7 DISALLOW ASSIGNMENT OF CPU 1
- SA7 A1
- ZR X2,/MONITOR/RB6 IF JOB IN CPU 0
- MX7 1
- SA1 CSWL+A0
- BX7 X7+X1 SET CPU SWITCH REQUEST
- SA7 A1
- JP B6 EXIT TO SPECIFIED ROUTINE
- CPA SPACE 4,15
- ** CPA - CHECK PP AND TAPE ACTIVITY FOR DUAL CPU CACHE MACHINE.
- *
- * ENTRY (B4) = RETURN ADDRESS.
- * (X6) = *STSW*.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT CPU ASSIGNMENT FLAGS RESTORED FROM USER CPU SELECTION
- * IF NO PP OR TAPE ACTIVITY.
- * (X6) = *STSW*.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * USES X - 1, 3, 7.
- * A - 1, 3, 7.
- CPA BSS 0 ENTRY
- TX1 B7,-SCA
- PL X1,/MONITOR/RB4 IF SYSTEM CP OR PCP
- SX7 360B
- MX1 4
- LX1 48-56
- BX7 X7+X1
- BX7 X7*X6
- NZ X7,/MONITOR/RB4 IF REMAINING PP OR TAPE ACTIVITY
- SA1 B7+JCIW
- SA3 B7+CWQW
- MX7 58
- LX7 24
- LX1 24-36
- BX3 X7*X3 CLEAR CPU ASSIGNMENT FLAGS
- BX1 -X7*X1 CPU SELECTION
- BX7 X3+X1 RESET CPU ASSIGNMENT FLAGS
- SA7 A3+
- JP B4 RETURN
- CPE SPACE 4,10
- ** CPE - CPU SELECTION.
- *
- * ENTRY (B6) = EXIT ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- *
- * USES A - 4.
- * B - 4.
- * X - 4, 6.
- CPE BSS 0 ENTRY
- SB4 A0-CPAL-1 CHECK IF JOB IS ACTIVE IN THE OPPOSITE CPU
- TX6 B7,-SCA CHECK FOR SYSTEM CONTROL POINT
- SA4 -B4
- ZR X6,CPE1 IF SYSTEM CONTROL POINT
- AX4 24
- SB4 X4+
- EQ B4,B7,SAX IF JOB ACTIVE IN OPPOSITE CPU
- CPE1 JP B6 RETURN
- CPS SPACE 4
- ** CPS - CPU SELECTION.
- *
- * ENTRY FROM PPR.
- CPS BSS 0 ENTRY
- SB4 A0-CPAL-1 CHECK IF JOB IS ACTIVE IN THE OPPOSITE CPU
- TX6 B7,-SCA CHECK FOR SYSTEM CONTROL POINT
- SA4 -B4
- ZR X6,CPS1 IF SYSTEM CONTROL POINT
- AX4 24
- SB4 X4+
- EQ B4,B7,SAX IF JOB ACTIVE ON OPPOSITE CPU
- ** EXIT TO PROCESSOR WITH -
- * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
- * (X2) = *ACPP*.
- * (X3) = PROCESOR CONTROL WORD.
- * (X5) = OUTPUT REGISTER.
- * (X7) = 0.
- * (A2) = *ACPP* ADDRESS.
- * (B6) = PROCESSOR ADDRESS.
- * (B7) = CONTROL POINT ADDRESS.
- CPS1 TJP (/PROBE/PPR,PROBE,B6) PROCESS REQUEST
- DCP SPACE 4,20
- ** DCP - DUAL CPU *DCPM* FUNCTION PROCESSOR.
- *
- * EXIT TO /MONITOR/DCP3.
- *
- * ENTRY (X3) = *CWQW*.
- * (A3) = *CWQW* ADDRESS.
- * (X4) = 42 BIT MASK LEFT JUSTIFIED.
- *
- * EXIT TO */MONITOR/DCP3*.
- * (X3) = *CWQW*.
- * (A3) = *CWQW* ADDRESS.
- * (X4) = 42 BIT MASK LEFT JUSTIFIED.
- *
- * USES X - 2, 6.
- * A - 2, 6.
- * B - 4.
- * CLEAR *WQ* POINTER FROM PENDING CPU SWITCH REQUEST.
- DCP SA2 CSWL CPU 0 SWITCH REQUEST
- LX2 -24
- SB4 X2
- SB4 A3-B4
- ZR B4,DCP1 IF SWITCH REQUEST FOR THIS JOB
- SA2 A2+B1 CPU 1 SWITCH REQUEST
- LX2 -24
- SB4 X2+
- SB4 A3-B4
- NZ B4,/MONITOR/DCP3 IF NOT SWITCH REQUEST FOR THIS JOB
- DCP1 BX6 X4*X2 CLEAR *WQ* POINTER FROM SWITCH REQUEST
- LX6 24
- SA6 A2+
- EQ /MONITOR/DCP3 REMOVE *WQ* ENTRY
- SJC SPACE 4,20
- ** SJC - DUAL CPU CACHE MACHINE *SJCM* FUNCTION PROCESSOR.
- *
- * ENTRY (X6) = *CWQW* WITH NEW CPU SELECTION.
- * (A2) = *JCIW* ADDRESS.
- * (X2) = *JCIW*.
- * (X5) = NEW CPU SELECTION LEFT SHIFTED 24 BITS.
- * (X3) = CPU SELECTION MASK LEFT SHIFTED 24 BITS.
- *
- * EXIT TO /MONITOR/SJC3.
- * (X6) = *CWQW* WITH NEW CPU SELECTION.
- * (A2) = *JCIW* ADDRESS.
- * (X2) = *JCIW*.
- * (X5) = NEW CPU SELECTION LEFT SHIFTED 24 BITS.
- * (X3) = CPU SELECTION MASK LEFT SHIFTED 24 BITS.
- *
- * USES X - 6, 7.
- SJC BSS 0 ENTRY
- * THE ASSIGNMENT OF CPU 1 IS PROHIBITED IN CASE THE PP ISSUING
- * THE *SJCM* FUNCTION IS ASSIGNED TO A SUBSYSTEM WHILE OTHER
- * PP-S ARE ASSIGNED. WHEN THE REQUESTING PP DROPS, THE *DPPM*
- * PROCESSOR WILL RESET THE *CWQW* CPU ASSIGNMENT FLAGS FROM THE
- * *JCIW* CPU SELECTION IF NO OTHER ACTIVITY IS PRESENT.
- SJC BSS 0 ENTRY
- SX7 1 DISALLOW ASSIGNMENT OF CPU 1
- LX7 24-0
- BX6 X6+X7
- EQ /MONITOR/SJC3 RETURN TO MAIN *SJCM* PROCESSOR
- BNJ SPACE 4,15
- ** BNJ - EXTENSION TO *BNJ* FOR DUAL CPU MACHINES.
- *
- * ENTRY (X6) = 42 BIT MASK LEFT JUSTIFIED.
- *
- * EXIT TO */MONITOR/BNJ16*.
- * (X3) = *CWQW* OF NEW JOB (DELINKED FROM *WQ*).
- * (A3) = *CWQW* ADDRESS OF NEW JOB.
- * (B4) = PRIORITY WITH FLAGS OF NEW JOB.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 7.
- * B - 3, 4, 5, 6.
- *
- * CALLS /MONITOR/ACS.
- BNJ BSS 0 ENTRY
- * SEARCH *WQ* FOR JOB THAT CAN USE THIS CPU AND UPDATE *WQ*
- * LINKAGE.
- * SEARCH LOOP REPLICATED FOR PERFORMANCE.
- SA1 WQRL GET *WQ* POINTER
- SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
- BNJ1 SA3 X1 GET NEXT ENTRY
- LX7 B6,X3
- PL X7,BNJ2 IF JOB CAN USE THIS CPU
- SA1 X3 GET NEXT ENTRY
- LX7 B6,X1
- NG X7,BNJ1 IF JOB CANNOT USE THIS CPU
- BX7 -X6*X1 EXTRACT *WQ* LINK
- BX3 X6*X3
- BX7 X3+X7 MERGE LINK IN PREVIOUS ENTRY
- SA7 A3 UPDATE *WQ* LINKAGE
- SA3 A1+ GET SELECTED ENTRY
- EQ BNJ3 CLEAR *WQ* LINK IN SELECTED ENTRY
- BNJ2 BX7 -X6*X3 EXTRACT *WQ* LINK
- BX1 X6*X1
- BX7 X1+X7 MERGE LINK IN PREVIOUS ENTRY
- SA7 A1 UPDATE *WQ* LINKAGE
- BNJ3 UX0,B4 X3 UNPACK PRIORITY
- BX7 X6*X3 CLEAR *WQ* LINK IN SELECTED ENTRY
- ZR B4,BNJ3 IF NOT VALID *WQ* ENTRY FOR SELECTION
- SA7 A3+
- BX3 X7
- LX7 59-49
- NG X7,BNJ11 IF ACTIVE CPU SLICE
- * SEARCH *WQ* FOR FIRST ENTRY AT OR BELOW PRIORITY OF NEW JOB
- * AND ADVANCE CPU SERVICE CYCLE.
- * SEARCH LOOP REPLICATED FOR PERFORMANCE.
- SA1 WQRL GET *WQ* POINTER
- SX7 3
- SB3 BNJ5 SET *ACS* RETURN ADDRESS
- LX7 48
- BX7 X3+X7 SET PRIORITY FLAGS FOR COMPARISON
- SX5 A3 SET NEW JOB *CWQW* ADDRESS
- UX0,B6 X7 UNPACK PRIORITY WITH FLAGS
- BNJ4 SA4 X1 GET NEXT ENTRY
- UX0,B5 X4 UNPACK *WQ* ENTRY PRIORITY
- LE B5,B6,/MONITOR/ACS IF ENTRY .LE. NEW JOB
- SA1 X4 GET NEXT ENTRY
- UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
- GT B5,B6,BNJ4 IF ENTRY .GT. NEW JOB
- SX0 X4
- BX4 X1
- SX1 X0+
- EQ /MONITOR/ACS ADVANCE SERVICE CYCLE
- * UPDATE SERVICE CYCLE OF JOB IN OTHER CPU IF SAME PRIORITY AS
- * NEW JOB.
- BNJ5 SB3 A0-CPAL-1
- SA1 -B3 GET OTHER CPU *CPAL*
- LX1 -24
- SA2 X1+STSW
- LX2 59-56
- MX6 -58
- NG X2,BNJ6 IF SUB-CP ACTIVE
- LX1 24 SET EXCHANGE PACKAGE ADDRESS
- BNJ6 SA1 X1+CWQW GET OTHER CPU JOB *CWQW*
- LX6 48-58
- BX1 -X6*X1 CLEAR PRIORITY FLAGS
- UX0 B5,X1 UNPACK PRIORITY OF OTHER CPU JOB
- NE B5,B6,BNJ7 IF NOT SAME PRIORITY
- SA7 A1+B1 SET SERVICE CYCLE AND CLEAR ACCUMULATORS
- ERRNZ CSAW-CWQW-1
- * DETERMINE IF SETTING CPU SLICE ACTIVE HAS CHANGED THE ORDER
- * OF *WQ*.
- BNJ7 LX4 59-49
- PL X4,BNJ11 IF ALL ENTRIES HAD INACTIVE SLICE
- SA1 WQRL
- SB5 1000B INITIALIZE PREVIOUS ENTRY PRIORITY
- BNJ8 SX2 A1 SET PREVIOUS ENTRY ADDRESS
- SA1 X1
- SB3 B5 SET PREVIOUS ENTRY PRIORITY
- UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
- LT B5,B6,BNJ11 IF PRIORITY .LT. NEW JOB PRIORITY
- LE B5,B3,BNJ8 IF ENTRY IN ORDER WITH PREVIOUS
- * FIND END OF *WQ* ENTRIES TO MOVE AND DELINK FROM QUEUE.
- BNJ9 SX4 A1 SET PREVIOUS ENTRY ADDRESS
- SA1 X1+
- UX0,B3 X1 UNPACK *WQ* ENTRY PRIORITY
- EQ B3,B5,BNJ9 IF SAME PRIORITY AS PREVIOUS
- SA2 X2
- MX6 42
- BX7 X6*X2 CLEAR OLD LINK
- SX0 A1+
- BX7 X7+X0 MERGE NEW LINK
- SA7 A2+
- * FIND POSITION IN *WQ* TO INSERT ENTRIES AND RELINK INTO
- * QUEUE.
- SA1 WQRL
- BNJ10 SX7 A1 SET PREVIOUS ENTRY ADDRESS
- SA1 X1+
- UX0,B3 X1 UNPACK *WQ* ENTRY PRIORITY
- LE B5,B3,BNJ10 IF POSITION NOT FOUND
- SA4 X4 GET LAST ENTRY TO MOVE
- BX2 -X6*X2 ADDRESS OF FIRST ENTRY TO MOVE
- SX0 A1
- SA1 X7
- BX4 X6*X4 CLEAR OLD LINK
- BX7 X4+X0 MERGE NEW LINK
- SA7 A4
- BX7 X6*X1 CLEAR OLD LINK
- BX7 X7+X2 MERGE NEW LINK
- SA7 A1
- * SEARCH *WQ* FOR JOB THAT CAN PREEMPT JOB IN OTHER CPU.
- * SEARCH LOOP REPLICATED FOR PERFORMANCE.
- BNJ11 SB3 A0-CSWL-1
- SA4 -B3 GET OTHER CPU *CSWL*
- SA2 A4+TSCL-CSWL GET OTHER CPU *TSCL*
- NG X4,/MONITOR/BNJ16 IF SWITCH REQUEST FOR OTHER CPU
- SA1 WQRL GET *WQ* POINTER
- SB6 A0-59+24 SET OTHER CPU SELECTION BIT SHIFT COUNT
- UX0,B3 X2 UNPACK PRIORITY OF JOB IN OTHER CPU
- SB6 -B6 SET SELECTION BIT FOR OTHER CPU
- BNJ12 SA2 X1+ GET NEXT ENTRY
- UX0,B5 X2 UNPACK *WQ* ENTRY PRIORITY
- LX7 B6,X2
- LE B5,B3,/MONITOR/BNJ16 IF ENTRY .LE. OTHER CPU JOB
- PL X7,BNJ13 IF JOB CAN USE OTHER CPU
- SA1 X2+ GET NEXT ENTRY
- UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
- LX7 B6,X1
- LE B5,B3,/MONITOR/BNJ16 IF ENTRY .LE. OTHER CPU JOB
- NG X7,BNJ12 IF JOB CANNOT USE OTHER CPU
- BNJ13 MX7 1
- BX7 X4+X7
- SA7 A4+ REQUEST SWITCH OF OTHER CPU
- EQ /MONITOR/BNJ16 SET ACTIVE CPU STATUS
- RCC SPACE 4,30
- ** RCC - EXTENSION TO *RCC* FOR DUAL CPU MACHINES.
- *
- * ENTRY (X1) = THIS CPU RECALL SLICE EXPIRATION TIME.
- * (X2) = CURRENT MILLISECOND CLOCK.
- * (X3) = *CWQW* OF RECALLED JOB.
- * (X4) = *CSWL* FOR THIS CPU.
- * (X7) = 24 BIT MASK LEFT JUSTIFIED.
- * (A3) = *CWQW* ADDRESS OF RECALLED JOB.
- * (A4) = ADDRESS OF *CSWL* FOR THIS CPU.
- * (B3) = EXIT ADDRESS.
- * (B4) = RECALLED JOB PRIORITY AND FLAGS.
- * (B5) = THIS CPU JOB PRIORITY AND FLAGS.
- *
- * EXIT TO */MONITOR/RCC12* TO CHECK RECALL SLICE EXPIRATION
- * FOR THIS CPU.
- * TO */MONITOR/RCC13* TO UPDATE *CWQW* AND REQUEST CPU
- * SWITCH.
- * TO */MONITOR/RCC14* TO UPDATE *CWQW* AND CLEAR *MTR*
- * BYPASS FLAG.
- * (X3) = *CWQW* OF RECALLED JOB.
- * (X4) = *CSWL* OF CPU FOR SWITCH REQUEST IF EXIT TO
- * *RCC13*.
- * (A3) = *CWQW* ADDRESS OF RECALLED JOB.
- * (A4) = *CSWL* ADDRESS OF CPU FOR SWITCH REQUEST IF
- * EXIT TO *RCC13*.
- * (B3) = EXIT ADDRESS.
- *
- * USES X - 0, 1, 4, 6.
- * B - 6.
- * A - 1, 4.
- RCC SB6 A0-59+24 SET OTHER CPU SELECTION BIT SHIFT COUNT
- SB6 -B6
- LX0 X3,B6
- PL X0,RCC1 IF JOB CAN USE OTHER CPU
- SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
- LX0 B6,X3
- NO
- NG X0,/MONITOR/RCC14 IF JOB CANNOT USE THIS CPU
- * CHECK PRIORITY OF JOB WITH SELECTION FOR THIS CPU.
- GT B4,B5,/MONITOR/RCC13 IF NEW JOB .GT. THIS CPU JOB
- LT B4,B5,/MONITOR/RCC14 IF NEW JOB .LT. THIS CPU JOB
- EQ /MONITOR/RCC12 CHECK RECALL SLICE EXPIRED
- * GET PARAMETERS FOR JOB IN OTHER CPU.
- RCC1 SB6 A0-TSCL-1
- IX6 X2-X1 CHECK THIS CPU RECALL SLICE EXPIRED
- SA1 -B6 GET OTHER CPU PARAMETERS
- SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
- LX0 B6,X3
- UX1,B6 X1 GET PRIORITY OF JOB IN OTHER CPU
- BX1 -X7*X1
- IX1 X2-X1 CHECK OTHER CPU RECALL SLICE EXPIRED
- PL X0,RCC2 IF JOB CAN USE THIS CPU
- * CHECK PRIORITY OF JOB WITH SELECTION FOR OTHER CPU.
- SA4 A1+CSWL-TSCL
- NG X4,/MONITOR/RCC14 IF OTHER CPU SWITCH REQUEST PENDING
- GT B4,B6,/MONITOR/RCC13 IF NEW JOB .GT. OTHER CPU JOB
- LT B4,B6,/MONITOR/RCC14 IF NEW JOB .LT. OTHER CPU JOB
- NG X1,/MONITOR/RCC14 IF CPU RECALL SLICE NOT EXPIRED
- EQ /MONITOR/RCC13 SWITCH OTHER CPU
- * CHECK PRIORITY OF JOB WITH NO CPU SELECTION.
- RCC2 GT B4,B5,RCC4 IF NEW JOB .GT. THIS CPU JOB
- GT B4,B6,RCC5 IF NEW JOB .GT. OTHER CPU JOB
- LT B4,B5,RCC3 IF NEW JOB .LT. THIS CPU JOB
- PL X6,/MONITOR/RCC13 IF THIS CPU RECALL SLICE EXPIRED
- RCC3 LT B4,B6,/MONITOR/RCC14 IF NEW JOB .LT. OTHER CPU JOB
- NG X1,/MONITOR/RCC14 IF CPU RECALL SLICE NOT EXPIRED
- EQ RCC5 SWITCH OTHER CPU IF NO CURRENT REQUEST
- RCC4 LE B4,B6,/MONITOR/RCC13 IF NEW JOB .LE. OTHER CPU JOB
- GE B6,B5,/MONITOR/RCC13 IF OTHER CPU JOB .GE. THIS CPU
- RCC5 SA4 A1+CSWL-TSCL
- NG X4,/MONITOR/RCC14 IF OTHER CPU SWITCH REQUEST PENDING
- EQ /MONITOR/RCC13 SWITCH OTHER CPU
- SAX SPACE 4
- ** SAX - SET ALTERNATE CPU EXCHANGE.
- *
- * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
- *
- * EXIT TO PPRX.
- *
- * CALLS SPB.
- SAX TB3 A0-1,-CX SET ALTERNATE CPU
- SX0 B1
- SA1 -B3
- SB3 /MONITOR/PPRX *SPB* EXIT ADDRESS
- TJP (/PROBE/ACE,PROBE,/MONITOR/SPB) SET PPU REQUEST BIT
- EXPACS SPACE 4,10
- ** IXP1 - CPU 1 IDLE EXCHANGE PACKAGE.
- IXP1 EXP P=2,RA=IDL1,FL=5,MA=IXP1,X1=77777777777777777777B
- * *STSW*.
- VFD 3/BCPS *B* CPU STATUS
- VFD 57/0
- * *CWQW*.
- VFD 2/1
- VFD 7/IDCS CPU PRIORITY
- VFD 1/0
- VFD 1/1 CPU SLICE ACTIVE
- VFD 1/0 RECALL FLAG
- VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
- VFD 2/0
- VFD 9/0 SERVICE CYCLE
- VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
- VFD 1/0 *MTR* BYPASS FLAG
- VFD 2/2 SELECT CPU 1
- VFD 3/0
- VFD 3/DIXT DUAL CPU EXCHANGE PACKAGE TYPE
- VFD 18/0 *WQ* LINKAGE
- * *CSAW*.
- VFD 60/0
- * *CTMW*.
- VFD 60/0
- ** IDL1 - CPU 1 IDLE PROGRAM.
- IDL1 CON 0 (RA) FOR IDLE PROGRAM
- CON 0 (RA+1) FOR IDLE PROGRAM
- + CX2 X1 DELAY (60 BITS)
- * EQ 2 LOOP WITHOUT DELAY (CACHE MACHINE)
- CX2 X1 DELAY (60 BITS)
- EQ 2 LOOP
- SPACE 4
- ** SCX1 - SUB-CONTROL POINT EXCHANGE PACKAGE - CPU 1.
- *
- * NOTE - THIS EXCHANGE PACKAGE IS ALSO USED FOR THE CODE WHICH
- * INITIATES THE CPU1 IDLE PACKAGE ON A CACHE MACHINE.
- * THE VALUES PRESET FOR *A0* AND *B0* ARE REQUIRED BY
- * MICROCODE ON A DUAL CPU CACHE MACHINE.
- SCX1 EXP P=IIP,FL=(,MCM),A0=1,B0=210B
- IIP SPACE 4,10
- ** IIP - INITIATE IDLE PACKAGE FOR DUAL CPU CACHE MACHINE.
- *
- * EXIT (X1) = ZERO (THIS IS REQUIRED BY *STL*).
- IIP BSS 0 ENTRY
- SA2 EIBP SET *MTR* EXCHANGE PACKAGE ADDRESS
- MX7 42
- LX7 32
- BX2 X7*X2
- SX6 /MONITOR/MXP
- LX6 32
- BX6 X2+X6
- SA6 A2
- SB2 IXP1
- XJ B2 START CPU1 IDLE PACKAGE
- SPACE 4,10
- ENDBLK
- BLOCK MMF,(MULTI-MAINFRAME PROCESSING ROUTINES.)
- ARM SPACE 4
- ** ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
- * *ARMF* IS CALLED ONCE EVERY SECOND BY *MTR* TO DO THE
- * FOLLOWING.
- * 1) STATUS FLAG REGISTER BITS.
- * 2) WRITE REAL TIME CLOCK TO EXTENDED MEMORY.
- * 3) DETERMINE STATUS OF OTHER MAINFRAMES BY INTERROGATING
- * THEIR EXTENDED MEMORY CLOCKS (EVERY 2 SECONDS).
- * 4) CHECK FOR INTER-MAINFRAME MESSAGE REQUEST.
- *
- * ENTRY
- *T X0 24/,12/ S,6/,18/ ARMF
- * (B7) = S = 0 IF MAINFRAMES TO BE STATUSED.
- * EXITS TO *ART* IF NORMAL PROCESSING.
- * EXITS TO *EPR* IF DOWN MACHINE OR MESSAGE PROCESSING TO BE
- * DONE IN PROGRAM MODE.
- ARM TSX2 (402B,ESM,6B) STATUS FLAG REGISTER
- LX2 21
- SX4 B1
- SX6 TMMF
- LX4 17 POSITION BIT TO STATUS
- LX6 36
- SB3 A0 SAVE CPU NUMBER
- BX0 X2+X4
- SX5 .COMI CHECK COMMUNICATION PROCESSING
- ARM1 RE /ECS/FRWC
- BX6 X4+X6
- + AX4 1
- BX0 X2+X4
- NZ X4,ARM1 IF MORE BITS TO STATUS
- SA6 EFRL STORE FLAG REGISTER BITS
- BX5 X5*X6
- TX0 ECCM EXTENDED MEMORY CLOCK LOCATION
- SA0 PDTL
- SX3 A0
- LX3 30
- BX0 X0+X3
- LX5 58-PMRF-COMI POSITION PROGRAM MODE REQUEST BIT (PMRF)
- WE 1 WRITE EXTENDED MEMORY CLOCK
- PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
- NZ B7,ARM16 IF MAINFRAMES NOT TO BE STATUSED
- TX0 ETLT*100B+SMET,ECLT
- TX0 X0,TCNT
- SA0 MBUF
- SX3 A0+
- LX3 30
- BX0 X0+X3
- SB7 MXMF
- * CHECK STATUS OF OTHER MACHINES.
- RE MXMF READ EXTENDED MEMORY CLOCKS
- PER /MMF/ARM16,/ECS/PER PARITY ERROR PROCESSING
- ARM2 ZR B7,ARM16 IF END OF MACHINES
- SA3 TMMF-1+B7
- SB7 B7-B1
- SB4 X3
- SA1 MBUF+B7 READ CURRENT CLOCK VALUE
- SA2 ARMA+B7 LAST CLOCK VALUE
- BX2 X1-X2
- SX7 B1
- ZR X2,ARM4 IF CLOCK NOT CHANGING
- * PROCESS MACHINE WITH CLOCK CHANGING.
- BX6 X1
- SA6 A2 STORE NEW CLOCK VALUE
- EQ B4,B1,ARM2 IF IN ACTIVE STATE
- SB4 X3-MFDA-1
- PL B4,ARM2 IF PROCESSING DOWN MACHINE
- * SET MACHINE AS CURRENTLY BEING ACTIVE IN *MFST*.
- SA0 A3+
- SX3 A3+
- TX0 B7+ETLT*100B+MFET,ECLT
- TX0 X0,TCNT
- LX3 30
- BX0 X0+X3
- RE 1
- + SA3 A0 SET STATE
- MX2 42
- BX3 X2*X3
- BX7 X7+X3
- SA7 A3
- EQ ARM2 PROCESS NEXT MACHINE
- * ADVANCE MACHINE STATE.
- ARM3 IX7 X7+X3
- SA7 A3
- EQ ARM2 PROCESS NEXT MACHINE
- * MACHINE CLOCK IS NOT CHANGING.
- ARM4 ZR B4,ARM2 IF DOWN STATE
- EQ B4,B1,ARM3 IF ACTIVE STATE - ADVANCE TO *MFD1*
- SB4 X3-MFD1
- ZR B4,ARM3 IF *MFD1* STATE - ADVANCE TO *MFD2*
- EQ B4,B1,ARM6 IF *MFD2* STATE
- SB4 X3-MFDA
- ZR B4,ARM7 IF *MFDA* STATE
- NE B4,B1,ARM2 IF WAITING FOR *1MR* COMPLETE
- * *MFCD* - CALL *1MR* TO RELEASE TRACK INTERLOCKS.
- SA1 ARMB SET PP CALL
- SX0 B7
- IX6 X1+X0
- TB7 SCA SET SYSTEM CONTROL POINT
- PX0 X0,B3 SAVE CPU NUMBER
- SB4 B0 SET LIBRARY SEARCH NEEDED
- SB3 ARM5 SET EXIT ADDRESS
- EQ /MONITOR/APQ ASSIGN PP
- ARM5 SB7 X0 RESTORE MACHINE INDEX
- UX0,B3 X0
- SX7 B1+
- ZR X1,ARM2 IF PP NOT ASSIGNED - PROCESS NEXT MACHINE
- SA3 TMMF+B7 RESTORE (X3)
- EQ ARM3 ADVANCE STATE
- * *MFD2* - MACHINE IS DOWN FOR TWO STATUSES.
- ARM6 BX1 X3
- LX1 59-46
- PL X1,ARM3 IF NOT LOW SPEED PORT MACHINE
- MX7 12
- SA1 ARMD SET MESSAGE
- BX4 X7*X3
- LX4 -18
- BX7 X1+X4
- TA7 MS2W,SCA
- SA1 A1+B1
- BX7 X1
- SA7 A7+B1
- SA1 A1+B1
- LX4 -24
- BX7 X1+X4
- SA7 A7+1
- EQ ARM2 PROCESS NEXT MACHINE
- * *MFDA* - DOWN ACKNOWLEGED STATE PROCESSOR.
- ARM7 SA1 ARMC SET MESSAGE *MACHINE XX DOWN.*
- MX7 12
- BX4 X7*X3
- LX4 12
- BX7 X1+X4
- TA7 MS2W,SCA
- SA1 A1+B1
- BX7 X1
- SA7 A7+B1
- SX4 B1
- LX4 B7
- SX5 B7+B1 SET MACHINE MASK FIELD BEING PROCESSED
- SB4 CIRI
- ** SET *CIRI* INTERLOCK WHICK CONTROLS THE RELEASEING OF
- * A DOWN MACHINES FLAG REGISTER AND DEVICE INTERLOCKS.
- * IF THE *CIRI* INTERLOCK IS HELD BY THE DOWN MACHINE
- * THE INTERLOCK WILL BE RELEASED AND ANOTHER ATTEMPT
- * WILL BE MADE TO OBTAIN THE INTERLOCK.
- ARM8 SB6 ARM9 SET *SFR* RETURN
- EQ /ECS/SFR SET *CIRI* FLAG BIT
- ARM9 SA0 MBUF
- TX0 ETLT*100B+FRET,ECLT SET ADDRESS OF FLAG WORDS
- TX0 X0,TCNT
- SX3 A0+
- LX3 30
- BX0 X3+X0
- RE 18
- PER /MMF/ARM16,/ECS/PER PARITY ERROR PROCESSING
- TSX0 (402B,ESM,6B) STATUS FLAG REGISTER
- LX0 21
- BX0 X0+X4
- ZR X7,ARM11 IF INTERLOCK OBTAINED
- * CHECK *CIRI* INTERLOCK HELD BY DOWN MACHINE.
- SA2 A0+B4 READ FLAG WORD
- AX2 12
- BX2 X4*X2
- ZR X2,ARM15 IF HELD BY RUNNING MACHINE
- SB6 ARM8 SET *CFR* RETURN
- EQ /ECS/CFR CLEAR *CIRI* INTERLOCK
- * CLEAR *TRTI* INTERLOCK IF HELD BY DOWN MACHINE.
- ARM10 SX2 X4+.TRTI CLEAR MACHINE MASK AND *TRTI* FLAG BITS
- TSX0 (403B,ESM,7B)
- LX0 21
- BX0 X0+X2
- ARM11 RE /ECS/FRWC
- EQ ARM10 IF *TRTI* HELD BY DOWN MACHINE
- SB4 18
- SB7 -B1 SET FIRST CALL TO *SSD*
- MX7 -12
- SB6 ARM12 SET *CFR* RETURN
- SB5 ARM13 SET *SSD* RETURN
- * CLEAR FLAG REGISTER BITS.
- ARM12 SB4 B4-B1
- SA0 MBUF
- SA3 A0+B4 READ FLAG WORD
- NG B4,/PROGRAM/SSD IF END OF FLAG BITS
- BX3 X3-X5
- BX3 -X7*X3
- ZR X3,/ECS/CFR IF INTERLOCK HELD BY DOWN MACHINE
- EQ ARM12 CLEAR BITS
- * CLEAR DEVICE INTERLOCKS HELD BY DOWN MACHINES.
- ARM13 SX2 A0 SET BUFFER ADDRESS
- SX4 X4+SDGL
- LX2 30
- BX0 X2+X4 FORM EXTENDED MEMORY ADDRESS
- MX4 -6
- NG B7,ARM14 IF END OF SHARED DEVICES
- RE 1
- PER /PROGRAM/SSD,/ECS/PER PARITY ERROR PROCESSING
- SA2 A0 READ *SDGL*
- BX7 -X4*X2
- AX7 1
- BX3 X7-X5
- NZ X3,/PROGRAM/SSD IF NOT INTERLOCKED BY DOWN MACHINE
- BX7 X4*X2
- SA7 A2 CLEAR INTERLOCK
- WE 1
- PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
- EQ /PROGRAM/SSD SEARCH FOR SHARED DEVICE
- ARM14 SB7 X5-1 RESTORE (B7)
- SX0 B1+
- SA3 TMMF+B7 ADVANCE STATE
- IX7 X3+X0
- SA7 A3
- ARM15 SA1 EFRL RESTORE (X5)
- SX5 .COMI
- BX5 X5*X1
- LX5 58-PMRF-COMI
- SB4 CIRI
- SB6 ARM2
- EQ /ECS/CFR CLEAR FLAG BIT AND ADVANCE MACHINE
- ARM16 SA0 B3 RESTORE CPU NUMBER
- BX0 X5
- NZ X5,/MONITOR/EPR IF PROGRAM MODE PROCESSING TO PERFORM
- EQ /MONITOR/.ARTF ADVANCE RUNNING TIME
- ARMA BSS MXMF MACHINE CLOCK TEMPORARIES
- ARMB VFD 18/0L1MR,6/0,12/0,6/CDV,18/1
- ARMC CON 10HMACHINE XX-2RXX
- CON 6L DOWN.
- ARMD CON 10HIF XX DOWN-2RXX*1BS30
- CON 10H ENTER *DO
- CON 10HWN,MID=XX*-2RXX*1BS6
- TMMF BSS 0 MAINFRAME STATE TABLE
- DUP MXMF,1
- DATA 0
- TITLE PPU REQUEST PROCESSOR.
- SFI SPACE 4,15
- ** SFI - SET *FATI* INTERLOCK.
- *
- * *AFAM* EXTENSION TO SET *FATI* FLAG REGISTER INTERLOCK AND
- * READ *FAT* ENTRY FROM EXTENDED MEMORY.
- *
- * ENTRY (X2) = *FAT* INDEX.
- *
- * EXIT (X1) = GLOBAL COUNT WORD FROM *FAT*.
- * (B3) = CPU NUMBER.
- * TO *REJ*, IF UNABLE TO SET *FATI* INTERLOCK.
- * TO *AFA1*, IF SUCCESSFUL READ OF *FAT* ENTRY.
- * TO *PMR*, IF PARITY ERROR IN READING *FAT*.
- SFI TSX0 (400B,ESM,4B) SELECT
- SX1 .FATI
- LX0 21
- SB3 A0
- BX0 X0+X1
- LX2 FATS POSITION *FAT* INDEX
- RE /ECS/FRWC SET *FATI* INTERLOCK
- EQ /PROGRAM/REJ
- * THIS WORD IS CHANGED BY *AFAM* PRESET.
- SFIA SA0 MBUF SET CM ADDRESS FOR READ
- TX0 X2+FAST*100B,TCNT SET FAST ATTACH TABLE ADDRESS
- SX1 A0+
- LX1 30
- BX0 X0+X1
- RE 2+MXMF
- PER /MMF/SFI1,/ECS/PER PARITY ERROR PROCESSING
- SA0 A0+B1 ADJUST ADDRESS TO GLOBAL COUNT WORD
- SX1 B1
- IX0 X0+X1
- LX1 30
- IX0 X0+X1
- SA1 A0 READ GLOBAL WORD FROM EXTENDED MEMORY
- EQ /MONITOR/AFA1 CONTINUE
- * PARITY ERROR PROCESSOR.
- SFI1 SB6 /PROGRAM/REJ SET *SFR* RETURN
- SB5 /MONITOR/PPRX SET *REJ* RETURN
- SB4 COMI SET PARITY ERROR RECOVERY NEEDED
- JP /ECS/SFR SET FLAG BIT
- CFI SPACE 4,10
- ** CFI - CLEAR *FATI* INTERLOCK.
- *
- * *AFAM* EXTENSION TO UPDATE LOCAL MACHINE COUNTS, CLEAR
- * *FATI* FLAG REGISTER INTERLOCK AND WRITE *FAT* ENTRY TO
- * EXTENDED MEMORY.
- *
- * ENTRY (XO) = *FAT* ADDRESS IN EXTENDED MEMORY.
- * (X7) = 1/1, 59/0
- * (B3) = CPU NUMBER.
- *
- * EXIT (X7) = 0.
- * TO *ECH*, IF UNRECOVERED WRITE ERROR OR REJECT IN
- * CLEARING FLAG INTERLOCK.
- * TO *AFA6*, IF SUCCESSFUL WRITE OF *FAT* ENTRY.
- CFI LX7 1-59 GET NON-ROLLABLE BIT
- BX5 X7*X6
- SA3 B4+ READ LOCAL WORD FROM CM
- TA2 A6,MIN READ LOCAL WORD FROM ECS
- IX6 X3-X4
- BX3 -X7*X6
- IX6 X3+X5
- SA6 A3
- IX6 X2-X4
- * WRITE UPDATED ENTRY BACK TO ECS.
- BX2 -X7*X6
- IX6 X2+X5
- BX7 X7-X7
- SA6 A2+ STORE LOCAL WORD TO BE WRITTEN TO ECS
- WE 1+MXMF
- PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
- * RELEASE FLAG REGISTER INTERLOCK.
- CFI1 TSX0 (403B,ESM,7B)
- LX0 21
- SX2 .FATI
- BX0 X0+X2 SET FLAG REGISTER FUNCTION
- SA0 B3 RESTORE CPU NUMBER
- RE /ECS/FRWC CLEAR *FATI* INTERLOCK
- RJ /ECS/ECH HANG ON HALF EXIT
- EQ /MONITOR/AFA6 RETURN
- AFAP SPACE 4,10
- ** AFAP - *AFAM* PRESET.
- *
- * *AFAM* PRESET IS EXECUTED ON THE FIRST *AFAM* CALL.
- * THIS IS REQUIRED SINCE THE *FAT* TRACK IS NOT KNOWN UNTIL
- * AFTER *0MF* HAS EXECUTED TO ALLOCATE IT.
- AFAP MX6 -18 RESET MONITOR MODE ADDRESS
- BX3 X6*X3
- SX6 /MONITOR/.AFAM
- IX6 X6+X3
- MX4 -11
- SA6 TPPR+AFAM-CPUM
- TA3 ALGL,EMS SET FAST ATTACH TABLE ADDRESS
- SX6 2020B
- TLX6 0,TNSC
- BX4 -X4*X3
- IX6 X6*X4
- SA3 SFIA READ INSTRUCTION WORD
- IX6 X3+X6
- SA6 A3
- EQ /MONITOR/.AFAM ENTER PROCESSOR
- SPACE 4
- ** MBUF - SCRATCH BUFFER FOR USE IN MONITOR MODE.
- MBUF BSS 18
- TITLE MMF PROGRAM MODE PROCESSING ROUTINES.
- QUAL PROGRAM
- CLM SPACE 4
- ** CLM - CHECKPOINT LOCAL MST TO ECS.
- *
- * ENTRY (A3) = MST ADDRESS OF SHARED DEVICE.
- * (B5) = EXIT ADDRESS.
- *
- * EXIT ENTIRE LOCAL AREA OF MST WRITTEN TO ECS.
- *
- * USES X - 0, 4.
- * B - 3.
- * A - 4.
- CLM SA4 A3+SDGL READ ECS ADDRESS OF MST
- SB3 A0 SAVE CPU NUMBER
- AX4 36
- * ENTER HERE FROM *CDI*.
- CLM0 SA0 A3+GLGL START OF LOCAL MST
- TX0 X4+GLGL-LLLL,MSL ECS ADDRESS OF LOCAL AREA
- MX4 -24
- BX0 -X4*X0
- SX4 A0+
- LX4 30
- BX0 X4+X0
- WE LLLL
- PER /PROGRAM/CLM1,/ECS/PER IGNORE UNRECOVERED MRT ERROR
- CLM1 SA0 B3 RESTORE CPU NUMBER
- JP B5 EXIT
- CDI SPACE 4,15
- ** CDI - CLEAR DEVICE INTERLOCK.
- *
- * ENTRY (X1) = FIRST WORD OF TRT TO UPDATE IN ECS.
- * (X3) = 1.
- * (X4) = ADDRESS OF MST IN ECS.
- * (X5) = LAST WORD + 1 OF TRT TO UPDATE IN ECS.
- * (X6) = SDGL WORD OF MST.
- * (X7) = STATUS TO RETURN O OUTPUT REGISTER.
- * (B4) = TRT LINK WORD TO UPDATE.
- * (B5) = EXIT ADDRESS.
- * (B6) = FIRST WORD ADDRESS OF TRT IN CM.
- * (A4) = ADDRESS OF SDGL WORD OF MST.
- *
- * EXIT (OR) = (X7)
- CDI1 MX2 -6 CLEAR DEVICE INTERLOCK
- SB3 A0 SAVE CPU NUMBER
- LX3 6
- BX6 X2*X6
- MX2 -24
- BX4 -X2*X4
- NG X5,CDI3 IF NO UPDATE OF TRT
- SA0 X1+B6 SET FIRST WORD TO WRITE TO ECS
- IX0 X3+X4
- LT B4,B6,CDI2 IF NO LINK WORD
- SX2 A0-B4
- NG X2,CDI2 IF LINK WORD IN UPDATING REGION
- SA0 B4 START UPDATE AT LINK WORD
- CDI2 SX1 A0-B6 FIRST WORD TO UPDATE
- IX5 X5-X1 LAST - FIRST
- IX0 X0+X1
- SB4 X5 SET WORD COUNT
- SX2 A0
- LX2 30
- BX0 X2+X0
- MX2 -10
- BX2 -X2*X5
- SX2 X2-1000B-1
- + PL X2,* IF WORD COUNT .GT. 1000
- WE B4 UPDATE TRT IN ECS
- RJ /ECS/ECH HANG ON WRITE ERROR
- CDI3 IX6 X3+X6 SET UP-TO-DATE COPY FOR THIS MACHINE
- SA0 A3
- SA6 A4
- SX6 A0
- LX6 30
- BX0 X4+X6
- WE SDGL+1
- RJ /ECS/ECH HANG ON WRITE ERROR
- SA7 A5 STORE OUTPUT REGISTER
- EQ CLM0 WRITE LOCAL MST
- SDI SPACE 4,25
- ** SDI - SET DEVICE INTERLOCKED.
- * THE DEVICE INTERLOCK CONTROLS THE UPDATING OF THE TRT AND
- * MST WORDS TDGL, ACGL AND SDGL.
- *
- * ENTRY (X3) = (TDGL).
- * (X4) = ECS ADDRESS OF MST.
- * (X6) = DEVICE INTERLOCK BITS FROM *SDGL*.
- * (B3) = CTR EXIT ADDRESS. NOTE - EXIT IS TO CTR2.
- * (B5) = PRG IF IN PROGRAM MODE.
- * (B6) = 0 IF NO INTERLOCKING TO PERFORM.
- * (B6) .GT. 0 IF TO INTERLOCK AND UPDATE MST/TRT.
- * (A3) = CM ADDRESS OF MST.
- * (A4) = ADDRESS OF *ACGL* WORD IN MST.
- *
- * EXIT (X0) = 12/TRT LENGTH + 2000B, 48/ECS ADDRESS OF MRT.
- * (X5) = -7777B
- * (B4) = TRT LENGTH.
- *
- * USES X - 0, 1, 2, 4, 5, 6, 7.
- * A - 1, 2, 4, 6.
- * B - 3, 4, 5, 6.
- *
- * NOTE - (A0) IS SET TO 2 FOR PROGRAM MODE MONITOR.
- SDI AX3 24
- MX2 -24
- BX4 -X2*X4
- TSX2 (400B,ESM,4B)
- LX2 21
- BX3 -X5*X3 TRT LENGTH
- MX7 -FRRC FLAG REGISTER RETRY COUNT
- ZR B6,SDI8 IF NO READ OF MST/TRT
- SB6 PRG ZERO IF CALLED FOR PROGRAM MODE
- SX5 A0+ SAVE CPU NUMBER
- SA0 SDIA ENSURE (A0) .LT. FL FOR FLAG OPERATION
- NZ X6,SDI10 IF DEVICE INTERLOCKED BY THIS MACHINE
- TX6 .TRTI,MMK
- * SET *TRTI* FLAG REGISTER INTERLOCK.
- SDI1 LX7 -1 DECREMENT RETRY COUNT
- BX0 X2+X6 SET FLAG REGISTER FUNCTION
- NG X7,SDI10 IF FAILED TO INTERLOCK FLAG REGISTER
- RE /ECS/FRWC
- EQ SDI1 RETRY
- * READ MST FROM ECS.
- SX0 A0+
- LX0 30
- BX0 X4+X0 SET ADDRESS OF MST IN ECS
- NE B5,B6,SDI2 IF MONITOR MODE
- SX5 B1+B1 SET (A0) FOR PROGRAM MODE
- RE SDGL+1 READ MST (PROGRAM MODE)
- PER /PROGRAM/SDI11,/PROGRAM/PER PARITY ERROR PROCESSING
- EQ SDI3
- SDI2 RE SDGL+1 READ MST (MONITOR MODE)
- PER /PROGRAM/SDI9,/ECS/PER PARITY ERROR PROCESSING
- * SWITCH REQUEST TO PROGRAM MODE ON ERROR
- * CHECK DEVICE INTERLOCK.
- SDI3 SA2 SDIA+SDGL
- MX7 -6
- BX4 -X7*X2
- NZ X4,SDI9 IF MST/TRT INTERLOCK SET
- SA4 A4 READ SDGL WORD FROM CM MST
- BX7 X2-X4
- ZR X7,SDI7 IF NO UPDATE OF MST/TRT NEEDED
- AX7 36
- BX2 X1
- + NE B5,B6,SDI9 IF MONITOR MODE - CANNOT READ TRT
- NZ X7,* IF BAD ECS ADDRESS
- SB6 SDI4 *CMP* *MSR* RETURN ADDRESS
- SA0 PBUF SET CM ADDRESS OF TRANSFER
- SX5 B3 SAVE RETURN ADDRESS
- SB7 X3 TRT LENGTH
- SA1 A3+TRLL GET FWA OF TRT
- SB3 X1-MECB
- SX3 X0+TRST*100B START OF TRT IN ECS
- SB3 A0-B3
- * TRT READ LOOP.
- SDI4 SB4 MECB MAXIMUM ECS TRANSFER SIZE
- SX1 A0
- LX1 30
- BX0 X3+X1 ECS ADDRESS OF TRT READ
- SB7 B7-B4 DECREMENT WORD COUNT
- SX3 X3+B4 INCREMENT ECS ADDRESS OF TRT
- SB3 B3-B4 INCREMENT FOR *CMP* *MSR*
- PL B7,SDI5 IF NOT LAST SHORT BLOCK TO READ
- SB4 B7+B4 SET SHORT BLOCK WORD COUNT
- BX1 X2 RESTORE (X1)
- LT B4,B1,SDI6 IF END OF TRANSFER
- SDI5 RE B4 READ TRT BLOCK
- PER /PROGRAM/SDI11,/PROGRAM/PER PARITY ERROR PROCESSING
- SX0 A0 STARTING ADDRESS OF MOVE
- SX1 B3 DIFFERENCE
- TJP (/CME/MSR,CME,/PROGRAM/CMP,CMU,/MONITOR/MSR)
- SDI6 SB5 PRG RESET (B5)
- SA2 SDIA+ACGL COPY MST FROM BUFFER
- SA4 SDIA+SDGL
- BX6 X2
- SA2 A2-B1
- SA6 A3+B1
- ERRNZ ACGL-1
- SB3 X5 RESTORE RETURN ADDRESS
- LX3 X2
- BX7 X2
- LX3 24
- SX5 B1+B1 SET (A0) TO 2 FOR PROGRAM MODE
- SA7 A3
- AX3 48 SET LENGTH OF TRT
- * WRITE INTERLOCKED MST TO ECS.
- SDI7 TX6 MIL SET MST INTERLOCKS
- BX7 X4+X6
- AX4 36
- SA7 A3+SDGL
- MX7 -24
- BX4 -X7*X4
- SX7 A3
- LX7 30
- BX0 X4+X7
- SA0 A3
- WE SDGL+1
- RJ /ECS/ECH HANG ON WRITE ERROR
- * CLEAR TRTI INTERLOCK.
- TSX2 (402B,ESM,6B) STATUS FLAG REGISTER TO INSURE SET
- TX6 MMK
- LX2 21
- BX0 X2+X6
- SX6 X6+.TRTI
- RE /ECS/FRWC STATUS FLAG BIT (HALF EXIT EXPECTED)
- SA0 X5 RESTORE CPU NUMBER
- MX5 -12
- PL X5,* IF FLAG BIT NOT SET
- TSX2 (403B,ESM,7B)
- LX2 21
- BX0 X2+X6
- RE /ECS/FRWC CLEAR FLAG REGISTER INTERLOCK
- RJ /ECS/ECH HANG ON HALF EXIT
- SDI8 TX0 1000B,MRT
- SB4 X3
- IX0 X0+X4 SET MRT ADDRESS
- PX0 X0,B4 PACK TRT LENGTH IN (X0)
- EQ CTR2 RETURN
- * CLEAR FLAG REGISTER AND EXIT.
- SDI9 TSX0 (403B,ESM,7B)
- LX0 21
- BX0 X0+X6
- RE /ECS/FRWC CLEAR FLAG REGISTER INTERLOCK
- RJ /ECS/ECH HANG ON HALF EXIT
- SDI10 SA0 X5 RESTORE (A0)
- EQ B5,B6,REJ IF PROGRAM MODE - REJECT REQUEST
- SA5 A5
- BX7 X5
- EQ /MONITOR/PMR SWITCH REQUEST TO PROGRAM MODE
- * PARITY ERROR PROCESSING - EXECUTED ONLY IN PROGRAM MODE.
- SDI11 TSX2 (403B,ESM,7B) CLEAR TRTI INTERLOCK
- TX6 .TRTI,MMK
- LX2 21
- BX0 X2+X6
- SB3 X5 CPU NUMBER FOR *SFR* TO RESTORE
- RE /ECS/FRWC CLEAR FLAG BIT
- + SB6 REJ SET *SFR* RETURN
- SB5 PRG SET *REJ* RETURN
- SB4 COMI FLAG BIT TO SET
- EQ /ECS/SFR SET BIT TO REQUEST PARITY ERROR PROCESSING
- FRRC EQU 10 FLAG REGISTER RETRY COUNT
- SDIA BSS SDGL+1 MST READ BUFFER
- SMU SPACE 4,20
- ** SMU - STORE MRT UPDATE.
- *
- * THIS ROUTINE IS CALLED WHEN CHANGING AN MRT BIT. IT WRITES
- * THE CHANGED MRT WORD TO EXTENDED MEMORY.
- *
- * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X4) = CALLER FLAG.
- * .LT. 0, IF CALLED BY *DTC*.
- * .EQ. 0, IF CALLED BY *STBM*.
- * .GT. 0, IF CALLED BY *RTC*.
- * (A3) = MST ADDRESS (*TDGL*).
- * (A6) = MRT WORD.
- * (B3) = MRT FWA.
- *
- * EXIT (X6) = 0.
- * (X1) = FWA OF TRT TO UPDATE, IF *STBM* CALL.
- * (X5) = LWA + 1 OF TRT TO UPDATE, IF *STBM* CALL.
- *
- * USES X - 0, 1, 2, 6.
- * A - 1.
- SMU SX1 A6-B3 MRT OFFSET
- UX0 X0
- SX6 A0 SAVE CPU NUMBER
- IX0 X0+X1 ADD MRT OFFSET
- SX1 A6+
- LX1 30
- BX0 X1+X0
- SA0 A6+
- SX1 A2+ SAVE (A2) IF PARITY ERROR
- WE 1 WRITE MRT WORD
- PER /PROGRAM/SMU1 PARITY ERROR PROCESSOR
- SMU1 SA2 X1 RESTORE (A2)
- SA0 X6+ RESTORE (A0)
- BX6 X6-X6
- NG X4,DTC5 IF CALLED BY *DTC*
- NZ X4,RTC13 IF CALLED BY *RTC*
- SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
- SX5 X1+B1
- EQ CCP1 CHECK FOR CHECKPOINT REQUESTED
- SSD SPACE 4,16
- ** SSD - SEARCH FOR SHARED DEVICE.
- *
- * ENTRY (B5) = EXIT ADDRESS.
- * (B7) .LT. 0 IF FIRST CALL TO INITIALIZE SHARED SEARCH.
- * (B7) = LAST SHARED DEVICE FOUND IF NOT INITIAL CALL.
- *
- * EXIT (X3) = TDGL WORD OF MST.
- * (X4) = ECS ADDRESS OF MST/TRT.
- * (B7) = EST ORDINAL OF SHARED DEVICE.
- * (B7) .LT. 0 IF SHARED DEVICE NOT FOUND.
- * (A3) = ADDRESS OF TDGL WORD OF MST.
- * (A4) = ADDRESS OF SDGL WORD OF MST.
- *
- * USES X - 3, 4.
- * B - 7.
- * A - 3, 4.
- SSD PL B7,SSD1 IF NOT INITIAL CALL TO SSD
- TB7 ESTL
- SSD1 SB7 B7-B1
- NG B7,SSD2 IF END OF EST - SHARED DEVICE NOT FOUND
- SX4 B7
- CX3 X4,EST CONVERT EST ORDINAL TO OFFSET
- TA3 X3+EQDE,EST READ EST ENTRY
- MX4 -12
- PL X3,SSD1 IF NOT MASS STORAGE
- BX3 -X4*X3
- LX3 3 MST ADDRESS
- SA4 X3+SDGL
- SA3 X3
- ERRNZ TDGL
- AX4 36
- ZR X4,SSD1 IF NOT SHARED DEVICE
- NG X4,SSD1 IF ISD
- SSD2 JP B5 RETURN
- TITLE EXTENDED MEMORY ERROR RECOVERY PROCESSING.
- PMR SPACE 4,10
- ** PMR - PROCESS EXTENDED MEMORY ERROR RECOVERY.
- PMR SA1 /ECS/MC ASSIGN *1MC* TO PROCESS ERROR DATA
- SB3 PMR1 *APS* RETURN ADDRESS
- EQ APS ASSIGN *1MC*
- PMR1 BX7 X7-X7 INITIALIZE *1MC* BUFFER
- SB3 B0
- SA7 PMRA CLEAR ERROR ENCOUNTERED
- ZR X1,DPE IF *1MC* NOT ASSIGNED ENTER PROCESSOR
- SA7 X1+1
- EQ DPE PROCESS MST/TRT PARITY ERRORS
- * RELEASE *1MC* UPON COMPLETION OF ERROR RECOVERY.
- PMRX SB4 COMI CLEAR EM ERROR PROCESSING REQUEST
- ZR X1,PMR2 IF NO *1MC* BUFFER
- SA1 X1 SET BUFFER COMPLETE
- MX6 1
- BX6 X6+X1
- SA6 A1
- PMR2 SB6 PRG *CFR* EXIT ADDRESS
- SA1 PMRA
- ZR X1,/ECS/CFR IF NO ERRORS LEFT, CLEAR FLAG BIT
- EQ PRG EXIT
- PMRA CON 0
- DPE SPACE 4,10
- ** DPE - SHARED DEVICE ERROR PROCESSING.
- *
- * THIS ROUTINE SCANS ALL SHARED DEVICES CHECKING TO SEE IF
- * THE UP-TO-DATE COPY OF THE MST/TRT ARE HELD BY THIS MACHINE.
- * IF THEY ARE THE CM TABLES ARE COMPARED WITH THE EXTENDED
- * MEMORY COPY. ANY DIFFERENCES ARE REPORTED VIA *1MC* AND THE
- * CORRECT DATA IS WRITTEN TO EXTENDED MEMORY.
- *
- * ENTRY (X1) = *1MC* BUFFER ADDRESS.
- * TRTI FLAG BIT SET.
- DPE SB6 DPE1 *SFR* RETURN ADDRESS
- SB4 TRTI
- JP /ECS/SFR SET *TRTI* FLAG BIT
- DPE1 NZ X7,PMRX IF UNABLE TO SET INTERLOCK
- SB7 -1 INITIALIZE DEVICE SEARCH
- SB5 DPE2 SET *SSD* RETURN
- EQ SSD SEARCH FOR SHARED DEVICE
- DPE2 NG B7,DPE7 IF END OF SHARED DEVICES
- SA0 PBUF READ *SDGL* WORD
- SX0 X4+SDGL
- SX7 A0
- LX7 30
- SA4 A4
- BX0 X0+X7
- AX3 24
- MX6 -12
- RE 1
- EQ DPE6 ERROR IN READING *SDGL*
- * PROCESS TRT ERRORS.
- + SA2 A3+TRLL SET FWA OF TRT
- SB6 X2
- BX3 -X6*X3
- SB4 B6+X3 SET LWA OF TRT
- SA2 A0
- IX2 X2-X4 COMPARE *SDGL* WORDS
- AX4 36
- NZ X2,DPE5 IF NOT UP-TO-DATE TABLES FOR THIS DEVICE
- SX0 X4+TRST*100B SET TRT ADDRESS FOR THIS MACHINE
- SB5 DPE3 *DRE* RETURN ADDRESS
- JP DRE1 DETECT ERROR IN TRT
- * PROCESS MST ERRORS.
- DPE3 SX0 X4
- SB6 A3 FWA OF MST
- SB4 A3+GLGL LWA+1 OF MST TO BE PROCESSED
- SB5 DPE4 *DRE* RETURN ADDRESS
- EQ DRE1 PROCESS MST ERRORS
- * SET CHECKPOINT BIT.
- DPE4 SX6 B1
- SB5 DPE2 SET *SSD* RETURN
- LX6 50
- + SA2 A3+STLL **** PERFORM IN ONE WORD ****
- BX6 X6+X2 **** PERFORM IN ONE WORD ****
- SA6 A2 **** PERFORM IN ONE WORD ****
- JP SSD CHECK NEXT DEVICE
- * CHECK FOR ERROR IN MST/TRT.
- DPE5 BX0 X4+X7 SET MST ADDRESS
- RE SDGL
- SA6 PMRA NOTE ERROR IN MST READ
- + SX2 TRST*100B ADVANCE TO TRT
- IX0 X0+X2
- RE MECB READ FIRST PART OF TRT
- SA6 PMRA NOTE ERROR IN TRT READ
- SX2 MECB
- IX0 X0+X2
- RE MECB READ SECOND PART OF TRT
- SA6 PMRA NOTE ERROR IN TRT READ
- + EQ SSD SEARCH FOR NEXT SHARED DEVICE
- DPE6 SA6 PMRA SET ERROR ENCOUNTERED
- EQ SSD SEARCH FOR NEXT SHARED DEVICE
- DPE7 SB6 FPE *CFR* RETURN ADDRESS
- SB4 TRTI
- JP /ECS/CFR CLEAR *TRTI* FLAG BIT
- FPE SPACE 4
- ** FPE - FAST ATTACH TRACK PARITY ERROR PROCESSING.
- *
- * THIS ROUTINE RECOVERS FROM PARITY ERRORS IN THE FAT BY
- * REGENERATING THE DATA FOR GLOBAL FAST ATTACH FILES.
- * EACH MACHINE MUST PERFORM THE REGENERATION, SINCE THE
- * LOCAL COUNT WORD OF THE FAT IS KNOWN ONLY TO INDIVIDUAL
- * MACHINES.
- FPE SB6 FPE1 *SFR* RETURN ADDRESS
- SB4 FATI
- JP /ECS/SFR SET *FATI* FLAG BIT
- FPE1 NZ X7,PMRX IF UNABLE TO INTERLOCK
- TA3 -FNTE,FNT INITIALIZE SYSTEM FNT SEARCH
- * SEARCH FNT FOR GLOBAL FAST ATTACH ENTRY.
- FPE2 TX6 A3+FNTE,-FNTLWA
- SA3 A3+FNTE GET NEXT FNT ENTRY
- ZR X6,FPE10 IF END OF FNT
- MX4 -6
- AX3 6
- BX2 -X4*X3 FILE TYPE
- SB4 X2-FAFT
- AX3 6
- NZ B4,FPE2 IF NOT FAST ATTACH FILE
- BX7 -X4*X3
- LX7 FATS
- ZR X7,FPE2 IF NO FAT INDEX
- * READ FAT ENTRY TO CHECK FOR ERRORS.
- TA2 ALGL,EMS COMPUTE FAT ADDRESS
- MX0 -11
- BX2 -X0*X2
- ZR X2,FPE10 IF FAT TRACK NOT YET ALLOCATED
- SX6 2020B PRESERVE LINKAGE WITHIN TRACK
- TLX6 0,TNSC
- IX0 X6*X2
- IX0 X0+X7 ADD FAT INDEX
- TX0 X0+FAST*100B,TCNT
- SA0 PBUF
- SX2 A0
- LX2 30
- BX0 X0+X2
- BX6 X4*X3
- RE 2+MXMF
- SA6 PMRA NOTE ERROR IN READ
- * PROCESS FILE NAME WORD OF FAT.
- + LX6 12
- SA6 A0 STORE CORRECT FILE NAME
- SA0 A0+1 SET SCRATCH CELL ADDRESS
- SX5 -B1 INITIALIZE MACHINE INDEX
- SB6 A6 FWA OF BUFFER TO COMPARE
- SB4 B6+B1 LWA OF BUFFER TO COMPARE
- SB5 FPE3 *DRE* RETURN ADDRESS
- EQ DRE1 DETECT ERRORS IN FILE NAME
- * PROCESS LOCAL COUNT WORDS.
- FPE3 SX6 B1 ADVANCE FAT ADDRESS
- IX0 X0+X6
- FPE4 SX5 X5+1
- SX3 X5-MXMF
- PL X3,FPE6 IF END OF LOCAL COUNT WORDS
- SA2 /MMF/TMMF+X5 READ MACHINE STATE
- BX6 X6-X6
- SX2 X2
- ZR X2,FPE5 IF MACHINE NOT PRESENT
- TX3 X5+1,-MIN
- NZ X3,FPE3 IF NOT THIS MACHINE
- SA2 A3+B1 GET FST ENTRY
- ERRNZ FSTG-FNTG-1 CODE DEPENDS ON VALUE
- MX3 -36
- BX6 -X3*X2 FORM ENTRY FOR THIS MACHINE
- TX4 MID MERGE MACHINE ID IN ENTRY
- LX4 -12
- BX6 X6+X4
- FPE5 SA6 PBUF
- SB6 A6 FWA TO CHECK
- SB4 A6+B1 LWA + 1 TO CHECK
- SB5 FPE4 *DRE* RETURN ADDRESS
- EQ DRE1 CHECK LOCAL COUNT WORD
- * CHECK FAMILY NAME WORD.
- FPE6 SA2 A3+B1
- LX2 12
- MX4 -9
- BX3 -X4*X2 EST ORDINAL
- CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA4 X4+EQDE,EST READ EST ENTRY
- MX3 -12
- BX4 -X3*X4
- SB5 FPE7 *DRE* RETURN ADDRESS
- LX4 3
- SA4 X4+PFGL
- BX6 X3*X4
- SA6 PBUF STORE FAMILY NAME + DEVICE NUMBER
- SB6 A6 FWA TO CHECK
- SB4 A6+B1 LWA + 1 TO CHECK
- EQ DRE1 CHECK FAMILY NAME WORD
- FPE7 SX4 B1 ACCUMULATE GLOBAL COUNTS
- SA2 A3+B1 READ FST
- MX6 12
- LX6 -12
- BX6 X6*X2 EXTRACT FIRST TRACK
- MX3 -36
- IX0 X0-X4
- MX5 MXMF
- FPE8 IX0 X0-X4
- PL X5,FPE9 IF END OF LOCAL WORDS
- LX5 1
- RE 1
- EQ FPE2 QUIT ON ERROR
- SA2 A0+
- BX2 -X3*X2
- IX6 X6+X2
- EQ FPE8 LOOP
- FPE9 SA6 PBUF STORE COMPUTED ENTRY
- SB6 A6 FWA TO CHECK
- SB4 A6+B1 LWA + 1 TO CHECK
- SB5 FPE2 *DRE* RETURN ADDRESS
- EQ DRE1 CHECK GLOBAL COUNT WORD
- * CLEAR FAT ENTRY AND EXIT.
- FPE10 SB6 PMRX *CFR* RETURN ADDRESS
- SB4 FATI
- JP /ECS/CFR CLEAR FLAG BIT
- TITLE SUBROUTINES.
- DRE SPACE 4
- ** DRE - DETECT / REPORT AND RECOVER EXTENDED MEMORY ERRORS.
- *
- * ENTRY (X0) = FWA OF ECS WORDS TO CHECK.
- * (X1) = COMMUNICATION BUFFER ADDRESS.
- * (B4) = LWA OF CM BUFFER TO COMPARE WITH ECS.
- * (B5) = EXIT ADDRESS.
- * (B6) = FWA OF CM BUFFER TO COMPARE WITH ECS.
- * (A0) = SCRATCH WORD FOR EXTENDED MEMORY READ.
- DRE SB3 B0 REPORTED INDEX
- ZR X1,DRE1 IF NO BUFFER ASSIGNED
- BX7 X7-X7 INITIALIZE BUFFER
- SA7 X1+1
- DRE1 SA2 B6+ READ GOOD DATA
- MX7 -24
- BX0 -X7*X0
- SX7 A0+
- LX7 30
- BX0 X7+X0
- BX6 X2 GOOD DATA
- SX3 701B UNRECOVERED WITH GOOD AND BAD DATA
- RE 1
- EQ DRE2 IF ERROR DETECTED
- SX3 301B RECOVERED WITH GOOD AND BAD DATA
- SA2 A0+ READ POSSIBLE BAD DATA
- BX2 X2-X6
- CX2 X2
- ZR X2,DRE3 IF DATA VERIFIES
- DRE2 MX7 -24
- BX0 -X7*X0 ECS ADDRESS
- SX7 B6 CM ADDRESS OF GOOD DATA
- LX7 30
- BX0 X7+X0
- SX7 A0 SAVE (A0)
- SA0 B6+ ADDRESS OF GOOD DATA
- WE 1 RESTORE GOOD DATA
- PER /ECS/ECH1 HANG ON UNRECOVERED WRITE ERROR
- SA0 X7+ RESTORE (A0)
- ZR X1,DRE3 IF NO BUFFER ASSIGNED
- GT B3,B1,DRE3 IF TWO ERRORS REPORTED
- SB3 B3+B1 INCREMENT ERROR INDEX
- SA2 X7 BAD DATA
- LX3 -18 STATUS
- LX7 24 CM ADDRESS
- BX7 X7+X3
- MX3 -24
- BX0 -X3*X0 ECS ADDRESS
- BX7 X7+X0
- SA7 A7
- BX7 X2
- SA7 A7+B1 BAD DATA
- SA6 A7+B1 GOOD DATA
- BX7 X7-X7
- SA7 A6+B1
- DRE3 SX6 B1+ ADVANCE ADDRESSES
- SB6 B6+B1
- IX0 X0+X6
- LT B6,B4,DRE1 IF NOT END OF WORDS TO CHECK
- JP B5 RETURN
- STE SPACE 4
- ** STE - ECS SYSTEM TABLE ERROR.
- *
- * ENTRY (B5) = EXIT ADDRESS IF ENTERED AT STE1.
- *
- * EXIT NONE.
- *
- * USES X - 1, 6.
- * B - NONE.
- * A - 1, 6.
- STE SB5 PRG SET EXIT ADDRESS
- STE1 SX1 STEM *SYSTEM ECS TABLE ERROR.*
- JP /MONITOR/MSC SEND MESSAGE TO SYSTEM CONTROL POINT
- STEM DATA C*SYSTEM ECS TABLE ERROR.*
- ENDBLK
- BLOCK LSPMMF,(MULTI-MAINFRAME VIA LOW SPEED PORT TO EM.)
- AFA SPACE 4,10
- ** AFA - PASS *AFAM* FUNCTION TO *MTE*.
- *
- * ENTRY (A2) = FNT ADDRESS, FNT IS NOT BUSY.
- * (A5) = OUTPUT REGISTER ADDRESS.
- AFA SA2 A2 SET FILE BUSY
- SX6 B1
- BX6 X2+X6
- SA6 A2
- EQ QPR QUEUE PP REQUEST TO *MTE*
- CDI SPACE 4,20
- ** CDI - CLEAR DEVICE INTERLOCK.
- *
- * CHECK FOR ALL QUEUED DEVICE REQUESTS BEING COMPLETE, AND
- * REQUEST *MTE* TO WRITE THE MST/TRT/MRT TO EXTENDED MEMORY.
- *
- * ENTRY (X1) = FIRST WORD OF TRT TO UPDATE.
- * (X5) = LAST WORD + 1 OF TRT TO UPDATE.
- * (X6) = *SDGL* MST WORD WITH BIT 0 CLEARED.
- * (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
- * (B4) = TRT LINK WORD TO UPDATE.
- * (B5) = EXIT ADDRESS.
- * (B6) = START OF TRT.
- * (A3) = ADDRESS OF MST IN CM.
- * (A5) = OUTPUT REGISTER ADDRESS.
- CDI BSS 0 ENTRY
- BX2 X2-X2
- NG X5,CDI3 IF NO UPDATE OF TRT TO EXTENDED MEMORY
- * SET FIRST WORD OF TRT TO WRITE TO EXTENDED MEMORY.
- SB4 B4-B6
- SB6 X1
- NG B4,CDI2 IF NO LINK WORD
- SB3 X5
- GE B4,B6,CDI1 IF LINK WORD IS NOT FIRST WORD TO WRITE
- SX1 B4+ SET FIRST WORD
- CDI1 GE B3,B4,CDI2 IF LINK WORD IS NOT LAST WORD TO WRITE
- SX5 B4+1
- * UPDATE LAST WORD OF TRT TO WRITE TO EXTENDED MEMORY.
- CDI2 LX5 36
- LX1 48
- BX2 X5+X1
- CDI3 MX1 1 SET PROGRAM MODE BIT IN OUTPUT REGISTER
- LX1 -1
- BX7 X7+X1
- SA7 A5
- * CLEAR MST/TRT CURRENT FLAG AND REQUEST *CDIF* OF *MTE*.
- SA4 A3+MCLL READ *MCLL*
- LX4 47-35 POSITION MRT WRITE FLAG
- SX1 B1
- LX1 47-0
- BX4 X1*X4
- BX2 X2+X4
- SX1 A5 ADD OUTPUT REGISTER ADDRESS
- LX1 24
- BX2 X1+X2
- MX7 54 CLEAR MST/TRT CURRENT IN CM
- BX6 X7*X6
- SA6 A3+SDGL
- SX0 A3+ SET MST ADDRESS
- SX6 CDIF CLEAR DEVICE INTERLOCK FUNCTION FOR *MTE*
- LX0 12-3
- BX2 X2+X6 MERGE *MCLL* INFORMATION
- BX6 X0+X2
- SB4 B5 SAVE RETURN ADDRESS
- SB5 CDI4 *QPR* RETURN ADDRESS
- EQ QPR3 QUEUE REQUEST
- CDI4 SX7 B0+ CLEAR *MCLL*
- SA7 A3+MCLL
- JP B4 RETURN
- CME SPACE 4,15
- ** CME - CHECK FOR *MTE* DEVICE INTERLOCK REQUEST NEEDED.
- *
- * THIS ROUTINE IS CALLED BY MST/TRT MANIPULATION FUNCTIONS
- * WHICH EXECUTE IN PROGRAM MODE. IF THE REQUEST IS FOR A
- * LSPMMF DEVICE AND THE MST/TRT NEED TO BE INTERLOCKED IN
- * EM, THEN THE FUNCTION IS QUEUED TO *MTE* FOR PROCESSING.
- * IF THE MST/TRT ARE INTERLOCKED IN EM, THEN THE FUNCTION IS
- * PASSED TO PROGRAM MODE TO EXECUTION. THIS AVOIDS GOING TO
- * PROGRAM MODE TO PASS REQUESTS TO *MTE*.
- * ENTRY FOR *VMSM*.
- CME0 SX3 X1
- AX3 12
- NZ X3,/MONITOR/PMR IF NOT SUBFUNCTION *VEIS*
- ERRNZ VEIS CODE DEPENDS ON VALUE
- * ENTRY FOR *DLKM* AND *RTCM*.
- CME LX1 24 POSITION EQUIPMENT FIELD
- MX3 -9
- BX3 -X3*X1 EST ORDINAL
- CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA4 X4+EQDE,EST READ EST ENTRY
- LX4 59-57
- PL X4,/MONITOR/PMR IF NOT SHARED
- LX4 -59+57
- MX6 -5
- TX0 X3,-ESTL
- MX3 -12
- BX3 -X3*X4 MST ADDRESS / 10B
- BX0 X4*X0
- LX3 3
- PL X0,/MONITOR/HNG1 IF NOT MASS STORAGE OR OUT OF EST
- SA4 X3+SDGL CHECK SHARED STATUS
- AX4 1
- BX6 -X6*X4
- NZ X6,/MONITOR/PMR IF INTERLOCKED IN EXTENDED MEMORY
- ZR X4,/MONITOR/PMR IF NO EXTENDED MEMORY ADDRESS PRESENT
- * ENTRY FOR *DTKM* (QUEUE *MTE* REQUEST).
- CME1 TX2 A5-1,-FP COMPUTE PP REQUEST BIT
- SX3 B1
- AX2 3
- SB6 X2
- LX6 X3,B6
- SB5 /MONITOR/PPRX SET RETURN ADDRESS
- SX2 A4+MCLL-SDGL
- * SET INTERLOCK BIT FOR THIS PP IF NO REQUESTS PENDING.
- + SA2 X2 **** PERFORM IN ONE WORD ****
- NZ X2,/PROGRAM/REJ IF SET **** PERFORM IN ONE WORD ****
- SA6 A2 **** PERFORM IN ONE WORD ****
- EQ QPR2 PASS REQUEST TO *MTE*
- ECS SPACE 4,10
- ** ECS - *ECSM* EXTENSION FOR LOW SPEED PORT MMF MODE.
- *
- * *ECSM* SUBFUNCTIONS ARE PROCESSED EITHER BY *CPUMTR* OR BY
- * *MTE* AS SHOWN BY THE FOLLOWING TABLE.
- *
- * *MTE* *CPUMTR*
- *
- * RRES READ RELATIVE USER EXTENDED MEMORY
- * WRES WRITE RELATIVE USER EXTENDED MEMORY
- * RECS READ SYSTEM EM (LINK DEVICE).
- * WECS WRITE SYSTEM EM (LINK DEVICE).
- * SFRS SET FLAG REGISTER BIT (LINK DEVICE).
- * CFRS CLEAR FLAG REGISTER BIT (LINK DEVICE).
- * PELS PROCESS EM LIST FUNCTION ABSOLUTE.
- * PELS PROCESS EM LIST FUNCTION RELATIVE.
- * BIT 20 OF OR INDICATES RELATIVE LIST.
- ECS MX2 -24
- BX2 -X2*X1
- AX2 21
- SB3 X2
- LE B3,B1,/ECS/ECS IF READ/WRITE RELATIVE EM
- SB4 PELS
- LT B3,B4,QPR IF LINK DEVICE FUNCTION - PASS TO *MTE*
- NE B3,B4,/ECS/ECS IF INVALID FUNCTION
- LX1 59-19
- PL X1,QPR IF NOT RELATIVE ADDRESS LIST
- LX1 19-59
- EQ /ECS/ECS PROCESS RELATIVE LIST
- SDI SPACE 4,10
- ** SDI - SET DEVICE INTERLOCK.
- *
- * ENTRY (X3) = *TDGL* WORD OF MST.
- * (X5) = -7777B.
- * (X6) = INTERLOCK FIELD (LOWER 6 BITS) OF *SDGL*.
- * (B5) = EXIT ADDRESS, IF NEED TO READ MST/TRT.
- * (B6) = 0, IF NOT TO INTERLOCK MST/TRT.
- * (A4) = ADDRESS OF *SDGL* WORD OF MST.
- *
- * EXIT (B4) = TRT LENGTH.
- SDI LX3 24
- SX0 B1
- LX0 58
- BX0 X0+X3
- LX3 12 SET TRT LENGTH
- BX3 -X5*X3
- SB4 X3
- ZR B6,/PROGRAM/CTR2 IF NOT TO INTERLOCK DEVICE
- TX2 A5-1,-FP COMPUTE PP REQUEST BIT
- SX3 B1
- AX2 3
- SB6 X2
- LX6 X3,B6
- SX2 A4+MCLL-SDGL
- * SET INTERLOCK BIT FOR THIS PP IF NO REQUEST PENDING.
- + SA2 X2 **** PERFORM IN ONE WORD ****
- NZ X2,SDI1 IF SET **** PERFORM IN ONE WORD ****
- SA6 A2 **** PERFORM IN ONE WORD ****
- EQ SDI2 REREAD *SDGL*
- SDI1 BX2 X6-X2
- NZ X2,/PROGRAM/REJ IF INTERLOCK OWNED BY ANOTHER PP
- SDI2 SA4 A4 REREAD MST/TRT CURRENT FLAG
- MX7 -6
- BX7 -X7*X4
- LX7 59-0
- NG X7,/PROGRAM/REJ IF INTERLOCK SET
- ZR X7,QPR1 IF MST/TRT NOT VALID IN CM
- * SET MST INTERLOCK.
- + SA4 A4 **** PERFORM IN ONE WORD ****
- BX6 X3+X4 **** PERFORM IN ONE WORD ****
- SA6 A4 **** PERFORM IN ONE WORD ****
- BX6 X6-X4
- NZ X6,/PROGRAM/CTR2 IF INTERLOCK OBTAINED
- EQ /PROGRAM/REJ REJECT REQUEST
- QPR SPACE 4,15
- ** QPR - QUEUE PP REQUEST TO *MTE*.
- *
- * THIS ROUTINE PASSES REQUESTS TO *MTE* FOR PROCESSING.
- *
- * NOTE - THIS ROUTINE MUST BE INTERRUPTABLE ON EACH WORD
- * BOUNDARY SINCE IT MAY BE ENTERED FROM BOTH MONITOR AND
- * PROGRAM MODE.
- *
- * ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
- * (B5) = EXIT ADDRESS, IF ENTERED AT *QPR1*.
- * (X6) = 36/,12/ PM,12/ FN, IF ENTERED AT *QPR3*.
- * PM = FUNCTION PARAMETER.
- * OUTPUT REGISTER ADDRESS FOR *SDIF*/*AFAF*.
- * MST ADDRESS / 10B FOR *CDIF*.
- * FN = *MTE* FUNCTION CODE.
- QPR SB5 /MONITOR/PPRX SET RETURN ADDRESS
- EQ QPR2 SKIP CLEARING PROGRAM MODE BIT
- QPR1 SA5 A5 CLEAR PROGRAM MODE
- MX7 5
- BX7 -X7*X5
- SA7 A5
- QPR2 SX6 A5 SET FUNCTION FOR *MTE*
- R= X1,PPRF
- LX6 12
- BX6 X6+X1
- * ENTER HERE IF (B5) SET AND NOT TO CLEAR PROGRAM MODE BIT.
- QPR3 SX1 QE
- SX5 77B
- ERRNZ MXQP-100B CODE DEPENDS ON LENGTH OF TABLE
- + SA1 X1 **** PERFORM IN ONE WORD ****
- IX7 X1+X5 **** PERFORM IN ONE WORD ****
- BX7 X5*X7 **** PERFORM IN ONE WORD ****
- SA7 A1 **** PERFORM IN ONE WORD ****
- SA6 MTET+X1
- JP B5 RETURN
- VMS SPACE 4,15
- ** VMS - VALIDATE MASS STORAGE.
- *
- * WHEN *VMSM* DETERMINES THAT A DEVICE VALIDATION ERROR EXISTS
- * IT LEAVES THE DEVICE INTERLOCKED. IT MUST NOT LEAVE THE
- * PP MASK BIT SET IN *MCLL*. THIS BIT BEING SET WOULD PREVENT
- * THE MST/TRT FROM BEING WRITTEN BACK TO EXTENDED MEMORY WHEN
- * *DSD* ISSUES A *VMSM* IN RESPONSE TO A *VALIDATE* COMMAND.
- *
- * ENTRY (A3) = ADDRESS OF *TDGL* MST WORD.
- *
- * EXIT TO /PROGRAM/PRG.
- VMS SA2 A3+MCLL-TDGL CLEAR BITS FOR ALL PP-S
- MX6 -20
- BX6 X6*X2
- SA6 A2
- EQ /PROGRAM/CSM1 CHECK FOR STORAGE MOVE
- TMMF SPACE 4,10
- TMMF BSS 0 MAINFRAME STATE TABLE
- DUP MXMF,1
- DATA 0
- MTET BSS 0 PP REQUEST LIST
- DUP MXQP,1
- DATA 0
- QE CON MXQP-1 END OF QUEUE POINTER (PP NUMBER)
- MTIN DATA 0 SHARED DEVICE REQUEST QUEUE *IN* POINTER
- MTOT DATA 0 SHARED DEVICE REQUEST QUEUE *OUT* POINTER
- MTBT BSS 0 SHARED DEVICE REQUEST QUEUE
- DUP MXQP,1
- DATA 0
- SMU SPACE 4,25
- ** SMU - FLAG MRT UPDATE TO *MTE*.
- *
- * THIS ROUTINE IS CALLED WHEN CHANGING AN MRT BIT. IT SETS
- * THE MRT UPDATED FLAG IN *MCLL* WHICH CAUSES *MTE* TO WRITE
- * THE MRT TO EXTENDED MEMORY.
- *
- * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X4) = CALLER FLAG.
- * .LT. 0, IF CALLED BY *DTC*.
- * .EQ. 0, IF CALLED BY *STBM*.
- * .GT. 0, IF CALLED BY *RTC*.
- * (A3) = MST ADDRESS (*TDGL*).
- * (A6) = MRT WORD.
- * (B3) = MRT FWA.
- *
- * EXIT (X6) = 0.
- * (X1) = FWA OF TRT TO UPDATE, IF *STBM* CALL.
- * (X5) = LWA + 1 OF TRT TO UPDATE, IF *STBM* CALL.
- *
- * USES X - 1, 6.
- * A - 1, 6.
- SMU SA1 A3+MCLL-TDGL UPDATE *MCLL*
- SX6 B1
- LX6 35
- BX6 X1+X6
- SA6 A1+
- BX6 X6-X6
- NG X4,/PROGRAM/DTC5 IF CALLED BY *DTC*
- NZ X4,/PROGRAM/RTC13 IF CALLED BY *RTC*
- SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
- SX5 X1+B1
- EQ /PROGRAM/CCP1 CHECK FOR CHECKPOINT REQUESTED
- ENDBLK
- BLOCK ISD,(INDEPENDENT SHARED DEVICE PROCESSING.)
- CHR SPACE 4,40
- ** CHR - CHECK FOR HELPER PP REQUIRED.
- *
- * *CHR* WILL EXIT TO A FUNCTION PROCESSOR, REJECT THE FUNCTION,
- * QUEUE IT, OR ISSUE A *BOTM* FUNCTION TO INITIATE A HELPER,
- * DEPENDING ON THE DEVICE STATUS AND THE REQUEST.
- *
- * - IF THE DEVICE IS NOT ISHARED OR THE CENTRAL MEMORY COPY OF
- * THE TABLES ARE CURRENT, THE FUNCTION WILL BE PROCESSED.
- *
- * - IF THE DEVICE IS NOT REMOVABLE, IS INACCESSIBLE, AND THE
- * FUNCTION BEING PROCESSED IS *DTKM*, THE *DTKM* FUNCTION
- * WILL BE QUEUED FOR LATER PROCESSING AND FUNCTION COMPLETE
- * STATUS WILL BE RETURNED TO THE CALLER.
- *
- * - IF THE DEVICE IS INACCESSIBLE, THE FUNCTION BEING PROCESSED
- * CANNOT BE QUEUED FOR LATER PROCESSING (NOT *DTKM* OR *DTKM*
- * ON A REMOVABLE DEVICE), AND RETURN ON INACCESSIBLE IS
- * SELECTED, THE INACCESSIBLE STATUS WILL BE RETURNED TO THE
- * CALLER.
- *
- * - IF *1RU* IS ACTIVE AND OTHER FUNCTIONS ARE PENDING, THE
- * REQUEST WILL BE QUEUED.
- *
- * - IF *1RU* IS ACTIVE AND NO OTHER FUNCTIONS ARE PENDING, THE
- * FUNCTION WILL BE REJECTED.
- *
- * ENTRY (X5) = REQUEST.
- *
- * EXIT (X1) = UNPACKED REQUEST.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 5, 6.
- * B - 3, 4, 5 (SEE NOTE).
- *
- * NOTE - *B5* IS ONLY USED WHEN A FUNCTION IS REJECTED.
- * OTHERWISE, IT MUST BE PRESERVED AS AN ENTRY CONDITION
- * FOR *CTR1*.
- CHR BSS 0 ENTRY
- SA3 CHRA GET FUNCTION INDEX
- UX1,B4 X5 GET THE FUNCTION NUMBER
- MX6 -9
- LX1 -36 GET THE EST ORDINAL
- SB4 B4+1777B-CPUM
- BX6 -X6*X1
- AX3 B4
- CX7 X6,EST CONVERT EST ORDINAL TO OFFSET
- TX6 X6,-ESTL
- TA4 X7+EQDE,EST
- CX3 X3
- MX7 -12
- SB4 X3+
- SA3 A3-B4 GET FUNCTION PARAMETERS
- SX0 1
- LX0 56-0
- BX0 X0*X4 REMOVABLE DEVICE FLAG
- LX0 58-56
- BX3 -X0*X3 CLEAR *DTKM* FLAG IF REMOVABLE DEVICE
- BX7 -X7*X4 GET THE MST ADDRESS
- BX6 X6*X4
- LX4 59-52
- LX7 3
- NG X4,CHR2 IF *ISHARED* DEVICE
- CHR1 SB4 X3 GET FUNCTION PROCESSOR ADDRESS
- UX1 X5 RESTORE PARAMETERS
- JP B4 PROCESS THE REQUEST
- CHR2 PL X6,CHR13 IF NOT MASS STORAGE OR OUT OF EST
- SA2 X7+STLL GET PROHIBIT TRT UPDATE BIT
- SA4 X7+SDGL GET TABLES-CURRENT BIT
- LX2 59-LPTU
- BX6 X3*X2 *1RU* HELPER .AND. PROHIBIT TRT UPDATE
- SA2 X7+DALL GET SUSPECT BIT
- NG X6,CHR1 IF *1RU* NOT NEEDED
- LX2 59-55
- LX1 59-45+36
- NG X2,CHR10 IF DEVICE IS SUSPECT
- * INITIATE PP HELPER PROGRAM.
- CHR3 AX3 30 POSITION *BOTM* PARAMETERS
- SX1 B1
- SA2 A2+MCLL-DALL
- PL X3,CHR8 IF HELPER IS NOT *1RU*
- TX7 A5-1+10B,-FP GET PP BIT
- SX6 A2
- AX7 3
- SA6 CHRB
- SA3 A3 RESTORE PROCESSOR ADDRESS
- SB4 X7
- MX7 12+1 GET OR ADDRESS AND LONG-TERM INTERLOCK
- LX1 B4
- BX7 X7*X2
- BX6 X2+X1 SET REQUEST-IN-PROGRESS
- LX1 21
- BX6 -X1*X6 CLEAR SET-REISSUE
- NZ X7,CHR9 IF *1RU* ACTIVE OR *SDIS* IN EFFECT
- SX2 B1 SET LATENCY ACTIVITY BIT
- AX5 36 GET EST ORDINAL
- BX6 X6+X2
- SX2 3R1RU BUILD *1RU* CALL
- SA6 A2
- MX6 -9
- SB3 CHR4 *APQ* RETURN ADDRESS
- BX6 -X6*X5
- LX2 -18
- SB4 -B1 RETURN IF UNASSIGNABLE
- TB7 0,SCA
- BX6 X2+X6
- EQ /MONITOR/APQ ATTEMPT TO ASSIGN *1RU*
- CHR4 SA2 CHRB GET *MCLL* ADDRESS
- SX3 /MONITOR/LA1RU*100B+/MONITOR/LA1BP SET *BOTM* PARAMS
- SA2 X2
- ZR X1,CHR6 IF NOT ASSIGNED
- SX1 X1+B1 GET *1RU-S* OUTPUT REGISTER ADDRESS
- TX7 A5-1+22*10B,-FP GET CALLER-S BIT
- LX1 48
- AX7 3
- BX6 X2+X1
- SX1 B1
- SB4 X7
- LX1 B4
- CHR5 SA5 A5 SET STORAGE MOVABLE BIT
- MX7 1
- BX6 X6+X1 SET SET-REISSUE
- LX7 56-59
- SA6 A2
- BX7 X5+X7
- JP PPR1 LEAVE REQUEST PENDING
- CHR6 SX7 A5 SET PP OUTPUT REGISTER ADDRESS
- SB5 CHR7 *IBF* REJECT RETURN ADDRESS
- LX7 48
- BX6 X2+X7
- SA6 A2
- JP /MONITOR/IBF ISSUE *BOTM* FUNCTION
- CHR7 SA1 CHRB GET *MCLL* ADDRESS
- SA1 X1 GET *MCLL*
- MX2 22+12
- LX2 22 CLEAR REQUESTS-IN-PROGRESS/LATENCY BITS
- BX6 -X2*X1
- SA6 A1+
- EQ PPRX EXIT
- CHR8 SB5 PPRX SET *IBF* REJECT RETURN ADDRESS
- EQ /MONITOR/IBF ISSUE *BOTM* FUNCTION
- CHR9 SA4 A2+SDGL-MCLL GET TABLES-CURRENT BIT
- MX7 -42 GET ACTIVITY BITS
- BX7 -X7*X2
- ZR X7,CHR12 IF TABLES ARE BEING REWRITTEN
- LX4 59-58
- SA6 A2 SET REQUEST IN PROGRESS BIT
- PL X4,CHR5 IF TABLES ARE NOT CURRENT
- EQ CHR1 PROCESS REQUEST
- * CHECK CALLER FOR ACCESSIBILITY TO SUSPECT DEVICE.
- CHR10 TX4 A5-1,-FP
- LX4 PPXES-PPCES
- LX7 X3,B1 POSITION *DTKM* BIT
- TA4 X4+ACPP,FPX
- MX6 -36
- SB7 X4 CP ADDRESS
- NG X7,QDT IF *DTKM* FUNCTION
- SA4 B7+JCIW GET SUBSYSTEM ID
- BX6 -X6*X4
- SA4 B7+SEPW GET *UTL=* BIT
- SX2 X2+B1 CHECK FOR *DOWN* STATE
- AX6 24
- LX2 59-2
- SX6 X6-LSSI-1
- LX4 59-56
- BX7 -X6+X4
- SA4 A2+SDGL-DALL
- NG X2,CHR11 IF DEVICE IS DOWN
- NG X7,CHR3 IF SUBSYSTEM OR *UTL=* ENTRY POINT IS SET
- CHR11 NG X1,CHR14 IF RETURN-ON-INACCESSIBLE REQUESTED
- SB5 CHR12
- SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
- BX7 X5 RESTORE REQUEST
- EQ /ISD/CDI CLEAR *MCLL* BITS AND RETURN
- CHR12 SB5 PPRX SET *REJ* RETURN ADDRESS
- EQ /PROGRAM/REJ REJECT REQUEST
- CHR13 SB5 PPRX SET *HNG* RETURN ADDRESS
- EQ HNG1 HANG PP
- CHR14 SA3 /MONITOR/TFPL-1+/MONITOR/LA3RX GET *3RX* PLD POINTER
- SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
- SB5 B0 SET DIRECT RETURN FROM *CDI*
- SB4 X3+ *3RX* PLD ADDRESS
- SB3 CHR15 SET *CDI* RETURN ADDRESS
- NZ B4,/ISD/CDI IF PLD NOT BEING MODIFIED
- EQ CHR12 REJECT REQUEST
- CHR15 SA5 A5+ GET ORIGINAL OUTPUT REGISTER
- MX6 1
- BX7 X6*X7
- BX7 X6-X7 SET *MSD* SUBSYSTEM STATUS
- SB3 PPRX SET *EFP* RETURN ADDRESS
- UX5 X5 SET OUTPUT REGISTER PARAMETERS
- EQ /MONITOR/EFP CALL *3RX* AND EXIT
- CHR SPACE 4,10
- ** IFT - ISHARED FUNCTION TABLE GENERATOR.
- *
- * *IFT* DEFINES THE FUNCTION PROCESSOR, PP HELPER, AND
- * BOOTSTRAP PROGRAM FOR EACH ISHARED FUNCTION. IT ALSO BUILDS
- * A MICRO WHICH WILL CREATE A BIT MAP OF THE ISHARED FUNCTIONS.
- *
- * FUNC IFT BOOT,HELPER,PROCR
- *
- * ENTRY *BOOT* = BOOTSTRAP PROGRAM NAME.
- * *HELPER* = HELPER PP NAME.
- * *PROCR* = *CPUMTR* PROCESSOR FOR FUNCTION.
- PURGMAC IFT
- MACRO IFT,FUNC,BOOT,HELPER,PROCR
- P ERRPL .1-FUNC FUNCTIONS MUST BE IN ASCENDING ORDER
- P ERRNG LA1RU-LA_HELPER ASSUMED BY *PROHIBIT TRT UPDATE* TEST
- LOC FUNC
- .1 SET FUNC
- .A IFC EQ,$HELPER$1RU$
- .B IFC EQ,$FUNC$DTKM$
- VFD 1/1,1/1,10/,6/0,6/LA_HELPER,6/LA_BOOT,1/1,11/,18/PROCR
- .B ELSE
- VFD 1/1,1/0,10/,6/0,6/LA_HELPER,6/LA_BOOT,1/1,11/,18/PROCR
- .B ENDIF
- .A ELSE
- VFD 1/0,11/,6/0,6/LA_HELPER,6/LA_BOOT,1/0,11/,18/PROCR
- .A ENDIF
- LOC *O
- .1 DECMIC FUNC-CPUM
- .M MICRO 1,,$1S".1"+".M"$
- IFT ENDM
- QUAL MONITOR
- .M MICRO 0,,
- .1 SET 0
- ** TABLE OF ISHARED MONITOR FUNCTIONS.
- *
- *T 1/R, 1/D, 10/ ,18/ *IBF* PARAMETERS ,1/R, 11/ ,18/ PROCESSOR.
- *
- * R 1 = HELPER PP IS *1RU*.
- * D 1 = FUNCTION IS *DTKM*.
- AFAM IFT 1BP,1FA,.AFAM
- DLKM IFT 1BP,1RU,PMR
- DTKM IFT 1BP,1RU,.DTKM
- RTCM IFT 1BP,1RU,PMR
- STBM IFT 1BP,1RU,/PROGRAM/CTR1
- VMSM IFT 1BP,1RU,PMR
- QUAL *
- CHRA CON ".M" ISHARED FUNCTION BIT MAP
- CHRB CON ** CURRENT MST *MCLL* ADDRESS
- AMM SPACE 4,10
- ** AMM - ACTIVATE MONITOR MODE (PROGRAM MODE).
- *
- * ENTRY (X0) = PP REQUEST.
- * (B3) = EXIT ADDRESS.
- *
- * USES X - 6.
- * A - 6.
- QUAL PROGRAM
- AMM SX6 -2 SET *MTR*-LIKE REQUEST TO MONITOR MODE
- SA6 PX
- MJ EXCHANGE TO MONITOR MODE
- JP B3 RETURN
- QUAL *
- CDI SPACE 4,35
- ** CDI - CLEAR DEVICE INTERLOCK EXTENSION FOR ISHARED DEVICES.
- *
- * *CDI* CLEARS THE PP-S REQUEST-IN-PROGRESS AND SET-REISSUE-BIT
- * BITS. IF THE REQUEST ORIGINATED FROM THE PP THAT IS RUNNING
- * *1RU*, *CDI* ALSO CLEARS THE LATENCY ACTIVITY BIT. IF ALL
- * THE ACTIVITY BITS IN *MCLL* ARE CLEARED, *CDI* CLEARS THE
- * TABLES-CURRENT FLAG IN *SDGL*. SINCE CLEARING TABLES-CURRENT
- * CAN BE DONE IN MONITOR MODE, WITH OR WITHOUT THE *CPUMTR*
- * INTERLOCK SET, AND CAN ALSO BE DONE IN PROGRAM MODE, INSURING
- * THE INTEGRITY OF *SDGL* REQUIRES RESTRICTIONS ON THE CHANGES
- * THAT CAN BE MADE TO *SDGL* FROM THE TIME IT IS FETCHED BY
- * *CDI* IN THE *PROGRAM* BLOCK AND STORED BY *CDI* IN THE *ISD*
- * BLOCK.
- * THE CODE AT *CDI2* ASSUMES THAT THE ONLY CHANGES THAT WILL BE
- * MADE ARE THE CLEARING OF BITS, NAMELY THE *CPUMTR* INTERLOCK
- * AND THE TABLES-CURRENT BITS.
- *
- * ENTRY (A4) = *SDGL* ADDRESS.
- * (A5) = OUTPUT REGISTER ADDRESS.
- * (X6) = BIT 0 OF *SDGL* MASK.
- * 0, IF CLEARING PROGRAM/MONITOR MODE INTERLOCK.
- * 1, IF PRESERVING INTERLOCK.
- * (X7) = OUTPUT REGISTER IF TO EXIT TO *CSM*.
- * (B5) = *CSM* RETURN ADDRESS IF .NE. 0.
- * (B3) = RETURN ADDRESS IF (B5) .EQ. 0.
- *
- * EXIT TO *CSM* IF (B5) .NE. 0 ON ENTRY.
- * TO (B3) RETURN ADDRESS IF (B5) .EQ. 0 ON ENTRY.
- *
- * USES X - 1, 2, 3, 4, 5, 6.
- * A - 3, 4, 6.
- * B - 6.
- CDI BSS 0
- SA3 A4+MCLL-SDGL CLEAR ACTIVITY BITS
- TX2 A5-1+10B,-FP GET PP BIT
- MX5 59 SAVE PROGRAM/MONITOR MODE INTERLOCK
- AX2 3
- BX4 X5+X6
- MX1 12 CHECK FOR CALL FROM *1RU*
- BX1 X1*X3
- SB6 X2+
- LX1 12
- SX3 A5
- LX2 X5,B6
- BX3 X1-X3
- LX6 X5,B6 CLEAR SET-REISSUE
- LX2 21
- NZ X3,CDI1 IF NOT FROM *1RU*
- BX6 X6*X5 CLEAR LATENCY ACTIVITY BIT
- CDI1 BX6 X6*X2 CLEAR REQUEST-IN-PROGRESS
- MX2 -42
- LX5 6
- + SA3 A3 **** PERFORM IN ONE WORD ****
- BX6 X6*X3 **** PERFORM IN ONE WORD ****
- SA6 A3 **** PERFORM IN ONE WORD ****
- SA3 A4 **** PERFORM IN ONE WORD ****
- BX2 -X2*X6 CHECK FOR NO OUTSTANDING FUNCTIONS
- BX6 X4
- LX4 X3,B1 CHECK TABLES CURRENT
- SX3 B0 MST/TRT UPDATE COUNTER INCREMENT
- PL X4,CDI2 IF TABLES ARE NOT CURRENT
- ZR X1,CDI2 IF *1RU* IS NOT ACTIVE
- NZ X2,CDI2 IF FUNCTIONS REMAIN
- PX6 X6 CLEAR TABLES CURRENT BIT
- BX3 -X5 INCREMENT MST/TRT UPDATE COUNTER
- CDI2 SA4 A4 **** PERFORM IN ONE WORD ****
- BX6 X6*X4 **** PERFORM IN ONE WORD ****
- IX6 X6+X3 **** PERFORM IN ONE WORD ****
- SA6 A4 **** PERFORM IN ONE WORD ****
- NZ B5,/PROGRAM/CSM1 IF EXIT VIA *CSM*
- JP B3 RETURN
- CTR SPACE 4,10
- ** CTR - *CTR* ISHARED PROCESSING.
- CTR3 BX0 X3 SET TRT LENGTH
- AX0 24
- BX0 -X5*X0
- SB4 X0
- BX0 X0-X0
- PX0 X0,B4
- ZR B6,/PROGRAM/CTR2 IF NO INTERLOCK
- EQ /PROGRAM/CTR1.1 INTERLOCK MST
- MNR SPACE 4,10
- ** *MNR* EXTENSION FOR ISHARED PROCESSING.
- *
- * PROCESS *MTR*-LIKE FUNCTION.
- *
- * ENTRY (X3) = MONITOR MODE START TIME.
- MNR5 NE B3,B1,/MONITOR/MNR5 IF NOT *MTR*-LIKE REQUEST
- SA1 B2+10B GET CALLER-S *X0* REGISTER
- BX5 X3 SET MONITOR MODE START TIME FOR *PMN*
- BX0 X1
- SA1 X1+
- SB3 X0-MXPF
- NG B3,/MONITOR/PMN1 IF NOT PP REQUEST
- MX7 -7-48 CLEAR PROGRAM MODE BIT
- BX7 -X7*X1
- SA7 A1+
- EQ /MONITOR/PMN4 PROCESS PP FUNCTION
- QDT SPACE 4,25
- ** QDT - QUEUE DROPPABLE TRACKS.
- *
- * *QDT* COMPLETES *DTKM* REQUESTS BY PLACING THEM IN A QUEUE
- * WHEN THE FOLLOWING CONDITIONS ARE MET.
- * - THE PP ISSUING THE FUNCTION IS ASSIGNED TO A JOB.
- * - THE JOB IS NOT BEING STORAGE MOVED.
- * - THE *DTKM* IS NOT SETTING *EOI*.
- * - THE QUEUE IN THE JOB-S NFL IS NOT FULL.
- *
- * ENTRY (A2) = ADDRESS OF *DALL* WORD IN THE MST.
- * (A3) = ADDRESS OF FUNCTION PARAMETERS.
- * (X1) = LOWER 48 BITS OF *OR* WITH BIT 45 MOVED TO 59.
- * (X3) = FUNCTION PARAMETERS.
- * (X5) = OUTPUT REGISTER.
- * (B7) = CONTROL POINT AREA ADDRESS.
- *
- * EXIT TO *CHR10* WITH *DTKM* BIT CLEARED, IF REQUEST CANNOT
- * BE QUEUED.
- * TO *CHR12* TO REJECT REQUEST IF CONTROL POINT BEING
- * MOVED.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 4, 6.
- * B - 3, 4, 6, 7.
- QDT BSS 0 ENTRY
- SA4 SMRL
- SX6 B7+
- LX6 -7 CP NUMBER
- MX7 -12
- BX6 X4-X6
- BX6 -X7*X6
- ZR X6,CHR12 IF CONTROL POINT MOVING
- SA4 B7+FLSW GET RA AND NFL
- TX6 B7,-SCA
- ZR X6,QDT3 IF SYSTEM CONTROL POINT
- BX7 X5 CHECK REQUEST
- MX6 -36
- ZR B7,QDT3 IF SYSTEM CONTROL POINT
- LX7 59-35
- BX6 -X6*X4 GET RA/100
- PL X7,QDT3 IF SET *EOI* REQUEST
- SX7 QFBN
- AX4 48 GET NFL
- AX6 12
- ZR X4,QDT3 IF INSUFFICIENT NFL
- LX6 6 RA
- IX7 X6-X7 ABSOLUTE ADDRESS OF *QFBN* QUEUE
- SX6 -QFBL
- QDT1 SX6 X6+B1 SEARCH FOR EMPTY ENTRY
- IX4 X7-X6
- ERX4 X4
- BX3 X4-X5
- NZ X4,QDT2 IF ENTRY NOT AVAILABLE
- SB7 X6-1 SAVE ORDINAL OF AVAILABLE ENTRY
- QDT2 LX3 0-45 IGNORE THE REQUEST FLAGS
- AX3 3
- ZR X3,QDT3 IF REQUEST IS ALREADY IN THE TABLE
- NG X6,QDT1 IF MORE ENTRIES TO CHECK
- NG B7,QDT4 IF ENTRY IS AVAILABLE
- QDT3 SA3 A3 RESTORE FUNCTION PARAMETERS
- MX6 -59 CLEAR *DTKM* BIT
- LX6 58-59
- BX3 -X6*X3
- EQ CHR10 REQUEST CANNOT BE QUEUED
- QDT4 SX4 B7+B1 SET REQUEST IN *QFBN* QUEUE
- BX6 X5
- IX4 X7-X4
- EWX6 X4
- * COMPUTE NUMBER OF SECTORS DROPPED.
- SA2 A2+TRLL-DALL SET TRT BASE ADDRESS
- MX6 12
- LX1 24-59+45 POSITION FIRST TRACK
- MX7 -2
- SB6 B0 PRESET TRACK COUNT
- SB3 X2-4000B/4 PRESET TRT FWA
- QDT5 BX0 X6*X1 EXTRACT LINK
- LX0 10
- SB6 B6+B1
- SA1 B3+X0 READ TRT WORD
- LX0 2
- BX2 -X7*X0 EXTRACT BYTE
- LX2 2 BYTE * 4
- LX3 X2,B1 BYTE * 8
- IX2 X3+X2 BYTE * 12
- SB4 X2+
- LX1 X1,B4 POSITION TRACK BYTE
- NG X1,QDT5 IF NOT END OF TRACK CHAIN
- SA2 A2+MDGL-TRLL GET SECTORS PER TRACK
- SX3 B6-B1 NUMBER OF FULL TRACKS
- SA4 A2+SDGL-MDGL SET *SDGL* ADDRESS
- MX7 -12
- AX1 48 SECTORS IN LAST TRACK
- BX2 -X7*X2
- SX6 1 SET TO PRESERVE INTERLOCK
- IX3 X3*X2
- SB5 PPR1 SET EXIT ADDRESS
- IX7 X3+X1
- EQ CDI CLEAR PP ACTIVITY BITS
- RTC SPACE 4,10
- ** RTC - RTCM ISD PROCESSING.
- * SET INTERMEDIATE RESPONSE FOR ISHARED DEVICE.
- RTC SX3 B4
- CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA4 X4+EQDE,EST READ EST ENTRY
- LX4 59-52
- PL X4,/PROGRAM/CTR IF NOT ISHARED DEVICE
- SX0 A5 REISSUE FUNCTION
- SB3 /PROGRAM/PRG RETURN ADDRESS
- EQ /PROGRAM/AMM ACTIVATE MONITOR MODE
- SMD SPACE 4,10
- ** SMD - SMDM ISHARED PROCESSING.
- * CTCS - CLEAR TABLES-CURRENT FLAG
- SUBFUN SMDM,(CTCS,C1AS)
- SX7 X2-CTCS
- SA2 A3+MCLL-TDGL
- ZR X7,SMD1 IF *CTCS*
- MX6 -48 CLEAR *1RU* OUTPUT REGISTER ADDRESS
- BX6 -X6*X2
- SA6 A2+
- SMD1 SA4 A4 GET *SDGL*
- SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
- EQ /ISD/CDI CLEAR WAITING FOR LATENCY
- SMU SPACE 4,25
- ** SMU - SET MRT-UPDATED FLAG.
- *
- * *SMU* SETS THE TRT- AND MRT-UPDATED FLAGS IN *SDGL*. THIS
- * CAUSES *1RU* TO WRITE THE TRT AND MRT TO THE DEVICE. *SMU*
- * ALSO COPIES THE (MST/RT UPDATE COUNTER + 1) FROM *SDGL* TO
- * THIS MAINFRAME-S *DIT* ENTRY.
- *
- * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ 0.
- * (X4) = CALLER FLAG.
- * .LT. 0, IF CALLED BY *DTC*.
- * .EQ. 0, IF CALLED BY *STBM*.
- * .GT. 0, IF CALLED BY *RTC*.
- * (A3) = MST ADDRESS (*TDGL*).
- * (B3) = MRT FWA.
- *
- * EXIT (X6) = 0.
- *
- * USES X - 0, 1, 6.
- * A - 1, 6.
- * B - 3.
- SMU MX6 2 SET TRT- AND MRT-UPDATE FLAGS
- LX0 12 POSITION TRT LENGTH
- LX6 -2
- + SA1 A3+SDGL-TDGL **** PERFORM IN ONE WORD ****
- BX6 X1+X6 **** PERFORM IN ONE WORD ****
- SA6 A1 **** PERFORM IN ONE WORD ****
- * SET THE UPDATE COUNTER IN THE *DIT*.
- SA1 A3+DULL-TDGL GET MAINFRAME INDEX
- SX0 X0-2000B+7 GET MRT LENGTH
- AX6 6 POSITION THE MST/TRT UPDATE COUNTER
- AX0 3
- SB3 B3+X0 FWA OF DIT
- SX0 B1
- IX6 X6+X0
- MX0 -4
- LX1 -24
- BX1 -X0*X1 MAINFRAME INDEX - 1
- SA1 X1+B3 DIT ENTRY FOR THIS MAINFRAME
- MX0 -30
- BX6 -X0*X6
- LX1 -18
- BX1 X0*X1 CLEAR THE OLD COUNTER VALUE
- BX6 X1+X6
- LX6 18
- SA6 A1
- SX6 B0+
- NG X4,/PROGRAM/DTC5 IF CALLED BY *DTC*
- NZ X4,/PROGRAM/RTC13 IF CALLED BY *RTC*
- EQ /PROGRAM/CCP1 CHECK FOR CHECKPOINT REQUESTED
- STB SPACE 4,15
- ** STB - STBM ISHARED PROCESSING.
- * SET THE LONG-TERM DEVICE INTERLOCK IN *MCLL*.
- *
- * ENTRY (A3) = MST ADDRESS (*TDGL*).
- *
- * EXIT (X6) = 1.
- * TO */ISD/CDI*.
- *
- * USES X - 2, 6, 7.
- * A - 2, 6.
- STB2 SA2 A3+MCLL-TDGL SET LONG-TERM INTERLOCK
- SX6 B1
- MX7 -42 GET ACTIVITY BITS
- LX6 47-0
- BX7 -X7*X2
- BX6 X6+X2
- CX7 X7
- AX7 1
- ZR X7,STB3.1 IF NO OTHER REQUESTS ARE PENDING
- SA4 A4 CLEAR THE MST/TRT INTERLOCK
- MX6 59
- BX6 X6*X4
- SA6 A4+
- EQ /PROGRAM/REJ REJECT REQUEST
- STB3 SA2 A3+MCLL-TDGL SET LONG-TERM INTERLOCK
- SA1 B2+17B GET ORIGINAL RESPONSE FROM PROGRAM MODE XP
- SX6 B1
- LX6 47-0
- BX6 X6+X2
- BX7 X1
- STB3.1 SA6 A2
- SX6 B1 PRESERVE MST/TRT INTERLOCK
- EQ /ISD/CDI EXIT
- * CLEAR THE LONG-TERM DEVICE INTERLOCK IN *MCLL*.
- *
- * ENTRY (A3) = MST ADDRESS (*TDGL*).
- *
- * EXIT TO *CHR*.
- *
- * USES X - 2, 5, 6.
- * A - 2, 5, 6.
- * B - 3.
- STB4 SA2 A3+MCLL-TDGL CLEAR LONG-TERM INTERLOCK
- SX6 B1
- SA5 A5 RESTORE INPUT REGISTER
- LX6 47-0
- SB6 B0 DO NOT GET INTERLOCK
- BX6 -X6*X2
- SA6 A2
- SB3 STB5 SET *CTR* EXIT ADDRESS
- EQ CHR INITIATE *1RU*
- STB5 UX4,B3 X0 SET *SMU* EXIT FLAG
- SB3 B6+B3 *MRT* FWA
- EQ SMU SET MRT UPDATE FLAG
- VMS SPACE 4,10
- ** VMS - *VMSM* EXTENSION FOR *ISHARED* DEVICES.
- *
- * *VMS* DECIDES WHETHER *1RU* NEEDS TO BE CALLED FOR THIS
- * SUBFUNCTION.
- VMS SX3 X5 GET SUBFUNTION
- AX3 12
- NZ X3,/MONITOR/PMR IF *1RU* IS NOT REQUIRED
- ERRNZ VEIS CODE ASSUMES VALUE
- EQ CHR CHECK FOR HELPER REQUIRED
- * SET/CLEAR LONG-TERM INTERLOCK IN *MCLL*.
- * ENTRY (X3) = 1, IF (X7) = 0.
- * (X7) = RESPONSE.
- * (A3) = ADDRESS OF MST WORD *TDGL*.
- * (A5) = OUTPUT REGISTER ADDRESS.
- * (B5) = RETURN ADDRESS.
- VMS1 SA4 A3+SDGL-TDGL
- PL X4,VMS3 IF NOT AN ISHARED DEVICE
- SA2 A5 GET THE ORGINAL FUNCTION
- SX4 X2 GET THE SUBFUNCTION
- AX2 36 GET THE EST ORDINAL
- AX4 12
- SX2 X2+STBM*1S12-VMSM*1S12 CHANGE FUNCTION CODE TO *STBM*
- SX6 SLTS SET LONG-TERM INTERLOCK
- LX2 24
- BX6 X2+X6
- NZ X7,VMS2 IF VALIDATION ERRORS
- BX4 X4-X3
- ERRNZ VEQS-1 CODE ASSUMES VALUE
- NZ X4,/PROGRAM/CDI IF NOT *VEQS* SUBFUNCTION
- IX6 X6+X3 CLEAR DEVICE INTERLOCK
- ERRNZ SLTS+1-CDIS CODE ASSUMES VALUE
- VMS2 LX6 12
- SA6 A5
- SX0 A5 ISSUE *STBM*
- SB3 B5 RETURN ADDRESS
- EQ /PROGRAM/AMM ACTIVATE MONITOR MODE
- VMS3 NZ X7,/PROGRAM/CSM1 IF VALIDATION ERRORS
- EQ /PROGRAM/CDI CLEAR DEVICE INTERLOCK
- SPACE 4,10
- ** DEFINE TAGS FROM MAIN BLOCK.
- HNG EQU /MONITOR/HNG
- HNG1 EQU /MONITOR/HNG1
- PPRX EQU /MONITOR/PPRX
- PPR1 EQU /MONITOR/PPR1
- ENDBLK
- BLOCK ISDMMF,(SHARED DEVICE PROCESSING - MMF, LSPMMF OR ISD.)
- CMB SPACE 4,15
- ** CLEAR MRT BIT. (DROP TRACKS)
- * CALLED IN PROGRAM MODE.
- *
- * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X4) = -3777B.
- * (X7) = 2/ TRT BYTE, 40/, 18/ TRT WORD.
- * (A3) = ADDRESS OF *TDGL* MST WORD.
- * (B6) = TRT FWA.
- *
- * EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X4) = -3777B.
- * (A6) = MRT WORD.
- * (B3) = MRT FWA.
- CMB LX7 -3 SET MRT ADDRESS AND BIT NUMBER
- BX5 X4*X7 MRT BIT NUMBER
- SX6 B1
- LX5 5
- SB3 X5
- LX6 X6,B3 POSITION MRT BIT
- UX1,B3 X0 UNPACK LENGTH OF TRT
- SB3 B3+B6
- SA1 B3+X7 READ MRT WORD
- BX6 -X6*X1 CLEAR BIT
- BX5 X6-X1
- SA6 A1
- LX7 3
- BX6 X6-X6
- NZ X5,CMB1 IF MRT BIT SET FOR THIS MACHINE
- SA1 A5 TEST ALLOWING DROP TRACKS FOR OTHER MF
- LX1 59-46
- PL X1,/PROGRAM/HNG IF NOT ALLOWED TO DROP THIS FILE
- CMB1 TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
- SMB SPACE 4,15
- ** SET MRT BIT. (REQUEST TRACKS)
- * CALLED IN PROGRAM MODE.
- *
- * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X4) = TRACK NUMBER.
- * (A3) = ADDRESS OF *TDGL* MST WORD.
- *
- * EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X4) = TRACK NUMBER.
- * (A6) = MRT WORD.
- * (B3) = MRT FWA.
- SMB MX6 -5
- BX6 -X6*X4
- SB3 X6 MRT BIT NUMBER
- SX6 B1
- LX6 X6,B3 POSITION MRT BIT
- UX1,B3 X0 UNPACK TRT LENGTH
- SA1 A3+TRLL-TDGL SET FWA OF TRT
- SB3 X1+B3 (B3) = START OF MRT
- SX1 X4-4000B
- LX1 -5
- SA1 B3+X1 (A1) = MRT WORD ADDRESS
- BX6 X1+X6
- SA6 A1+
- SA0 /PROGRAM/TMSK-1 SCRATCH WORD
- TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
- STB SPACE 4,10
- * STBM SET/CLEAR MRT BIT.
- * CALLED IN PROGRAM MODE.
- *
- * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X1) = 2/ TRT BYTE, 40/, 18/ TRT WORD.
- * (X4) = 0.
- * (A3) = ADDRESS OF *TDGL* MST WORD.
- * (B3) = RESERVATION BIT SHIFT COUNT (0=*STFS*/*CTFS*).
- * (B6) = TRT FWA.
- *
- * EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
- * (X4) = 0.
- * (A6) = MRT WORD.
- * (B3) = MRT FWA.
- * (B4) .LT. TRT FWA.
- * (X1) = FWA OF TRT TO UPDATE, IF NO MRT UPDATE.
- * (X5) = LWA + 1 OF TRT TO UPDATE, IF NO MRT UPDATE.
- STB10 UX6,B4 X0
- ZR B3,STB12 IF FLAW REQUEST (NO MRT PROCESSING)
- LX1 2
- SX6 B3-6
- AX6 59
- MX3 -5
- BX3 -X3*X1 MRT BIT POSITION
- AX1 5 MRT WORD
- SB3 X3
- SX3 B1
- LX3 X3,B3 POSITION MRT BIT
- NZ X5,STB11 IF STIS/SPFS OPTION
- BX6 -X6
- STB11 SB3 B4+B6
- BX6 X6*X3 NON ZERO IF SETTING MRT BIT
- SA1 B3+X1
- BX1 -X3*X1 CLEAR OLD BIT
- BX6 X1+X6 MERGE NEW BIT
- SA6 A1
- TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
- STB12 SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
- SX5 X1+B1
- EQ /PROGRAM/CCP1 RELEASE INTERLOCK
- ENDBLK
- BLOCK BIOMMF,(SHARED BUFFERED DEVICE PROCESSING.)
- QUAL BUFIO
- MTE SPACE 4,10
- ** MTE - PROCESS *MTEM* FUNCTION.
- *
- * PARAMETERS ARE VALIDATED AND THE FUNCTION PASSED
- * TO *MTE*.
- MTE BSS 0 ENTRY
- MX3 -12
- AX1 36
- SB4 X1-MXMTEM
- PL B4,/MONITOR/HNG IF INVALID SUBFUNCTION
- BX2 -X3*X5 ISOLATE PARAMETER
- LX5 -12 POSITION FOR NEXT PARAMETER
- JP TMTE+TMTEL+B4 JUMP TO PROCESS FUNCTION
- * SUBFUNCTION TABLE.
- TMTE BSS 0
- LOC 0
- + LX5 -12 (CBRS) - CLEAR BAT READ ACCESS
- BX4 -X3*X5 ISOLATE MACHINE INDEX
- EQ MTE1 VALIDATE MACHINE INDEX/EST ORDINAL
- + LX5 -12 (CBWS) - CLEAR BAT READ/WRITE ACCESS
- BX4 -X3*X5
- EQ MTE1 VALIDATE MACHINE INDEX/EST ORDINAL
- + BX4 -X3*X5 (CEMS) - CLEAR EXTENDED MEMORY TRACK
- LX5 -12
- EQ MTE3 VALIDATE TRACK/SECTORS
- + BX4 -X3*X5 (EBRS) - ENABLE BRT PROCESSING
- EQ /LSPMMF/QPR QUEUE *MTE* REQUEST
- + EQ MTE2 (SEPS) - SET ERROR PROCESSING INTERLOCK
- + EQ MTE2 (CEPS) - CLEAR ERROR PROCESSING INTERLOCK
- + EQ /LSPMMF/QPR (SRIS) - SET RECOVERY ERROR INTERLOCK
- + EQ /LSPMMF/QPR (CRIS) - CLEAR RECOVERY ERROR INTERLOCK
- + EQ MTE2 (RBPS) - RELEASE BAT/BST PERMISSIONS
- + EQ /LSPMMF/QPR (GRIS) - GET RECOVERY INTERLOCK STATUS
- + EQ MTE2 (SRPS) - SET RESTORE PARITY INTERLOCK
- + EQ MTE2 (CRPS) - CLEAR RESTORE PARITY INTERLOCK
- + EQ MTE2 (GBDS) - GET *BDT* ENTRY
- TMTEL BSS 0
- LOC *O
- MTE1 SX4 X4-MXMF
- PL X4,/MONITOR/HNG IF INVALID MACHINE INDEX
- MTE2 CX4 X2,EST
- TA4 X4+EQDE,EST READ EST ENTRY
- BX1 X4
- LX4 59-57
- PL X4,/MONITOR/HNG IF NOT SHARED
- LX4 59-53-59+57
- PL X4,/MONITOR/HNG IF NOT BUFFERED
- TX0 X2,-ESTL
- BX0 X1*X0
- PL X0,/MONITOR/HNG IF NOT MASS STORAGE OR OUT OF EST
- MX0 -12 GET MST ADDRESS
- BX0 -X0*X1
- LX0 3
- SA1 X0+MDGL GET *DAT* POINTER
- MX0 -8
- LX1 -48
- BX1 -X0*X1
- ZR X1,/MONITOR/HNG IF DEVICE IS NOT IN *DAT*
- EQ /LSPMMF/QPR QUEUE FUNCTION FOR *MTE*
- MTE3 SX2 X2-4000B
- NG X2,/MONITOR/HNG IF INVALID TRACK TO CLEAR
- BX3 -X3*X5 FIRST SECTOR TO CLEAR
- IX3 X3+X4 COMPUTE LAST SECTOR TO CLEAR
- SA2 MMFL GET LINK DEVICE EST ORDINAL
- MX0 -9
- LX2 -36
- BX2 -X0*X2
- CX4 X2,EST
- TA4 X4+EQAE,EST READ EST ENTRY
- LX4 -24
- MX0 -2
- BX4 -X0*X4 EXTENDED MEMORY SHIFT COUNT
- SB3 X4
- SX1 20B
- LX1 B3,X1 SECTOR LIMIT
- IX1 X3-X1
- PL X1,/MONITOR/HNG IF LAST SECTOR PAST TRACK END
- EQ /LSPMMF/QPR QUEUE FUNCTION FOR *MTE*
- LBS SPACE 4,10
- ** LBS - *LBM* EXTENSION FOR SHARED DEVICES.
- *
- * ENTRY (B6) = BUFFER MANAGER OPERATION CODE.
- *
- * EXIT TO BUFFER MANAGER FUNCTION PROCESSOR.
- *
- * USES X - 0, 1, 2, 6.
- * A - 1, 2, 6.
- LBS BSS 0 ENTRY
- SA2 RTCL
- SA1 SDWR
- MX0 -36
- BX2 -X0*X2
- ZR X1,LBS1 IF NO WRITE ACCESS REQUEST
- BX1 -X0*X1
- IX1 X2-X1
- NG X1,LBS1 IF TIMEOUT NOT ELAPSED
- SX6 B0+ CLEAR STATUS
- SA6 A1+
- LBS1 SA1 SDUR
- ZR X1,LBS2 IF NO UNABLE TO RELEASE ACCESS STATUS
- BX1 -X0*X1
- IX1 X2-X1
- NG X1,LBS2 IF TIMEOUT NOT ELAPSED
- SX6 B0+ CLEAR STATUS
- SA6 A1+
- LBS2 JP B6+LBMA PROCESS FUNCTION
- CRR SPACE 4,10
- ** CRR - COMPLETE *MTE* REQUEST FOR READ ACCESS.
- *
- * EXIT TO *LBMX*.
- *
- * USES X - 0, 1, 2, 4, 5, 6, 7.
- * A - 1, 2, 6.
- * B - 4, 5.
- *
- * CALLS SBP.
- CRR BSS 0 ENTRY
- SX5 2 SET NEW STATUS
- SX7 7 SET STATUS TO CHECK
- * ENTRY FROM *CWR*.
- CRR1 SA1 SDEO
- SB5 CRR2 SET *SBP* RETURN ADDRESS
- ZR X1,/PROGRAM/HNG IF NOT SHARED DEVICE
- EQ SBP SET BST PARAMETERS
- CRR2 NG X2,/PROGRAM/HNG IF BST PROCESSING DISABLED
- SA2 OPAR GET COMPLETION STATUS
- BX7 X7*X4
- SX7 X7-1
- MX0 -1
- NZ X7,/PROGRAM/HNG IF INCORRECT STATUS FOR RESPONSE
- SB5 X2-1
- BX4 X0*X4 CLEAR REQUEST IN PROGRESS FLAG
- NG B5,CRR3 IF NORMAL COMPLETION
- SX5 B0
- ZR B5,CRR3 IF *BRT* ENTRY EVICTED BY *MTE*
- GT B5,B1,/PROGRAM/HNG IF INCORRECT RESPONSE STATUS
- LX1 48
- LX3 36
- SX7 B1+B1
- BX6 X1+X3 SET EST ORDINAL AND TRACK
- SA1 SDUR
- SA2 RTCL
- MX0 -36
- BX7 X7*X4
- NZ X7,/PROGRAM/HNG IF READ ACCESS CURRENTLY PRESENT
- SX7 SDUD
- NZ X1,CRR3 IF STATUS WORD IN USE
- BX2 -X0*X2 SET TIMEOUT
- IX2 X2+X7
- BX6 X6+X2 SET UNABLE TO RELEASE ACCESS STATUS
- SA6 A1
- CRR3 SX1 60
- SB4 -B4
- BX4 X4+X5 SET NEW STATUS
- SB4 X1+B4 SHIFT COUNT TO RESTORE ENTRY
- LX6 B4,X4 UPDATE BST ENTRY
- SA6 A4+
- EQ LBMX EXIT BUFFER MANAGER
- CWR SPACE 4,10
- ** CWR - COMPLETE *MTE* REQUEST FOR WRITE ACCESS.
- *
- * EXIT TO *CRR1*.
- *
- * USES X - 5, 6.
- CWR BSS 0 ENTRY
- SX5 6 SET NEW STATUS
- SX7 5 SET STATUS TO CHECK
- EQ CRR1 EXIT TO READ ACCESS PROCESSOR
- RRA SPACE 4,15
- ** RRA - RELEASE READ ACCESS.
- *
- * EXIT TO *LBMX* IF ALL BUFFERS FLUSHED OR RELEASED.
- * TO *SIS* IF WRITE ERROR ON BUFFER FLUSH.
- * TO *SBB* IF ALL BUFFERS NOT FLUSHED OR RELEASED.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 3, 4, 6.
- * B - 4, 5, 6.
- *
- * CALLS CHA, DCC, DCH, LCC, SBP.
- RRA BSS 0 ENTRY
- SX7 6 SET TO CLEAR READ AND WRITE ACCESS
- * SET BST INTERLOCK AND FIND HASH TABLE ENTRY.
- * ENTRY FROM *RWA*.
- RRA1 SA1 SDEO
- SB5 RRA2 SET RETURN ADDRESS
- ZR X1,/PROGRAM/HNG IF NOT SHARED DEVICE
- EQ SBP SET BST PARAMETERS
- * IN SOME CASES, *MTE* WILL REISSUE A *BMTR* OR *BMTW* REQUEST
- * THAT HAD BEEN PREVIOUSLY COMPLETED SUCCESSFULLY BY *CPUMTR*.
- * THIS IS NOT CONSIDERED AN ERROR CONDITION.
- RRA2 SX6 A4+
- BX2 X7*X4
- PX6 B4,X6
- ZR X2,LBMX IF REQUEST PREVIOUSLY PROCESSED
- SA6 RRAA SAVE BST POINTERS
- * FIND HASH TABLE ENTRY.
- RRA3 SA7 RRAB SAVE ACCESS INFORMATION
- SB6 RRA4 SET *CHA* RETURN ADDRESS
- SX7 -1 SET LOCATE HASH TABLE ENTRY
- EQ CHA CALCULATE HASH ADDRESS
- RRA4 SA3 RRAB
- BX7 X3 RESET ACCESS INFORMATION
- ZR X1,RRA13 IF HASH TABLE ENTRY NOT FOUND
- SA3 X1 GET HASH TABLE ENTRY
- LX3 24
- * GET BUFFER STATUS.
- RRA5 LX3 -24
- MX0 -12
- BX6 -X0*X3 NEXT BUFFER ORDINAL
- BX0 -X0*X3
- SA6 INLB SET/CLEAR BUFFER INTERLOCK
- LX6 CBTLS SET BUFFER ADDRESS
- ZR X6,RRA13 IF END OF BUFFERS
- TA2 X6+IOLK,CBT GET I/O INTERLOCK AND WRITE STATUS
- SA3 A2+B1 GET HASH LINK
- ERRNZ HSLK-IOLK-1
- SA4 A3+B1 GET ACTIVITY COUNT
- ERRNZ LSLK-HSLK-1
- MX1 1
- BX1 X1*X2 I/O INTERLOCK FLAG
- BX6 X3
- SA6 RRAC SAVE HASH LINKAGE
- MX6 12
- BX4 X6*X4 ACTIVITY COUNT
- LX2 59-57
- BX4 X1+X4
- SX6 X0
- PL X2,RRA8 IF NO WRITE DATA IN BUFFER
- * FLUSH AND RELINK WRITE BUFFER.
- MX1 1
- BX7 X7+X1 INDICATE WRITE BUFFER FOUND
- NZ X4,RRA7 IF I/O INTERLOCK OR ACTIVITY PRESENT
- TA6 IORQ SET I/O REQUEST
- + XJ FLUSH BUFFER
- SB6 RRA6 SET *DCC* RETURN ADDRESS
- EQ DCC DELINK BUFFER FROM CURRENT LIST
- RRA6 SB6 RRA11 SET *LCC* RETURN ADDRESS
- TX1 DWTB
- EQ LCC LINK BUFFER TO DATA WRITTEN LIST
- RRA7 PL X3,RRA11 IF NO WRITE ERROR
- SX1 B1
- LX1 57-0
- BX7 X7+X1 SET WRITE ERROR
- EQ RRA11 SET BUFFER NOT RELEASED
- * DELINK READ BUFFER FROM HASH TABLE.
- RRA8 SX1 X7-4
- ZR X1,RRA11 IF RELEASING WRITE ACCESS
- NZ X4,RRA11 IF I/O INTERLOCK OR ACTIVITY PRESENT
- SB6 RRA9 SET *DCH* RETURN ADDRESS
- EQ DCH DELINK BUFFER FROM HASH TABLE
- RRA9 SB6 RRA10 SET *DCC* RETURN ADDRESS
- EQ DCC DELINK BUFFER FROM CURRENT LIST
- RRA10 SB6 RRA12 SET *LCC* RETURN ADDRESS
- TX1 EMTB
- EQ LCC LINK BUFFER TO EMPTY LIST
- * SET BUFFER NOT RELEASED.
- RRA11 SX1 1
- LX1 58-0
- BX7 X7+X1 INDICATE BUFFER NOT RELEASED
- * ADVANCE TO NEXT BUFFER.
- RRA12 SA3 RRAC RESTORE *HSLK* INFORMATION
- EQ RRA5 PROCESS NEXT BUFFER
- * CHECK FOR MULTI-UNIT EQUIPMENT.
- RRA13 SA1 PUTO
- MX0 -12
- BX2 -X0*X1 CURRENT PUT ORDINAL
- LX2 PUTLS
- TA2 X2+HSCT,PUT
- BX2 -X0*X2 NEXT PUT ORDINAL
- ZR X2,RRA14 IF END OF UNITS
- SA2 LSEC
- AX1 36 SINGLE UNIT SECTOR LIMIT
- IX6 X2+X1 ADVANCE SECTOR TO NEXT UNIT
- SA6 A2+
- EQ RRA3 PROCESS NEXT UNIT
- * CLEAR ACCESS FLAGS IN BST IF ALL BUFFERS RELEASED OR FLUSHED.
- * IF ANOTHER MACHINE IS WAITING FOR WRITE ACCESS TO THE TRACK
- * AND NO ACTIVITY REMAINS ON THIS MACHINE, THE TIMEOUT DELAY IN
- * *SDWR* IS SET TO *SDMD* MILLISECONDS FROM THE CURRENT TIME.
- * THIS IS TO ALLOW *MTE* ON THE MACHINE REQUESTING WRITE ACCESS
- * TIME TO PROCESS THE REQUEST.
- RRA14 SA4 RRAA
- BX1 X7
- LX1 3
- SX7 X7 STATUS FLAGS TO CLEAR
- SX1 X1 CURRENT BUFFER ACCESS STATUS
- BX2 X1*X7
- UX4,B4 X4 RESET BST PARAMETERS
- NZ X2,RRA15 IF NOT ALL BUFFERS RELEASED/FLUSHED
- SA4 X4 GET BST ENTRY
- LX4 B4
- SB5 60
- BX4 -X7*X4 CLEAR READ/WRITE ACCESS
- SB4 B5-B4
- LX6 X4,B4
- SA6 A4 UPDATE BST ENTRY
- SX1 X7-6
- NZ X1,LBMX IF NOT RELEASING READ ACCESS
- SA1 SDWR
- SA3 LTRK
- SA4 SDEO
- AX1 36
- LX4 12
- BX4 X4+X3
- BX6 X4-X1
- NZ X6,LBMX IF NO WAIT REQUEST FOR TRACK
- SA2 RTCL
- MX0 -36
- LX1 36
- SX7 SDMD
- BX6 X1+X7
- BX2 -X0*X2
- IX6 X6+X2 SET TIME DELAY
- SA6 A1 UPDATE REQUEST
- EQ LBMX EXIT WITH NORMAL STATUS
- * PROCESS ERROR RETURN.
- RRA15 LX1 59-0
- MX0 -36
- NG X1,SIS IF WRITE ERROR ON FLUSH
- SX1 X7-6
- NZ X1,SBB IF NOT RELEASING READ ACCESS
- SA1 SDWR
- SA2 RTCL
- SA3 LTRK
- SA4 SDEO
- NZ X1,SBB IF STATUS WORD IN USE
- SX7 SDWD SET TIME DELAY
- BX2 -X0*X2
- LX3 36
- LX4 48
- IX7 X2+X7 SET TIMEOUT
- BX6 X4+X3 MERGE EST ORDINAL AND TRACK
- BX6 X6+X7 MERGE TIMEOUT
- SA6 A1+ SET WRITE ACCESS REQUESTED
- EQ SBB RETURN BUFFER BUSY STATUS
- RRAA BSS 1 BST PARAMETERS
- RRAB BSS 1 ACCESS MASK
- RRAC BSS 1 CURRENT *HSLK* WORD
- RWA SPACE 4,10
- ** RWA - RELEASE WRITE ACCESS.
- *
- * EXIT TO *RRA1* TO PROCESS FUNCTION.
- *
- * USES X - 7.
- RWA BSS 0 ENTRY
- SX7 4 SET TO CLEAR WRITE ACCESS
- EQ RRA1 EXIT TO PROCESS FUNCTION
- CSD SPACE 4,25
- ** CSD - CHECK SHARED DEVICE ACCESS.
- *
- * ENTRY (B6) = *CHA* RETURN ADDRESS.
- * (X7) = BUFFERS ALLOCATED FLAG.
- *
- * EXIT TO *CHA* IF NOT SHARED DEVICE OR IF SHARED DEVICE AND
- * BUFFER CAN BE ACCESSED.
- * TO *CHA* RETURN ADDRESS IF SHARED DEVICE AND BUFFER
- * CANNOT BE ACCESSED IN REQUESTED MODE.
- * TO *SIS* IF BUFFER ON MACHINE HOLDING WRITE ACCESS
- * CANNOT BE FLUSHED (DEVICE INACCESSIBLE).
- * (X2) = -2 (REQUIRED FOR EXIT TO *CHA* CALLER WHEN
- * BUFFER CANNOT BE ACCESSED IN REQUESTED
- * MODE).
- * (X7) = BUFFERS ALLOCATED FLAG.
- *
- * USES X - 0, 1, 2, 3, 4, 5, 6.
- * A - 1, 2, 6.
- * B - 4, 5.
- *
- * CALLS SBP.
- CSD BSS 0 ENTRY
- * ENTRY FOR READ ACCESS.
- SX5 2 SET TO CHECK READ ACCESS
- EQ CSD2
- * ENTRY FOR WRITE ACCESS.
- CSD1 SX5 4 SET TO CHECK WRITE ACCESS
- * CHECK ACCESS TO SHARED DEVICE.
- CSD2 SA1 SDEO GET EST ORDINAL IF SHARED DEVICE
- ZR X1,CHA IF NOT SHARED DEVICE
- SB5 CSD3 SET *SBP* RETURN ADDRESS
- EQ SBP SET BST PARAMETERS
- CSD3 NG X2,CHA IF BST PROCESSING DISABLED
- SA2 SDWR
- LX1 48
- LX3 36
- MX0 24
- BX6 X1+X3 FORMAT EST ORDINAL AND TRACK FOR REQUEST
- BX1 X5*X4
- BX2 X0*X2
- AX5 2
- BX2 X2-X6
- ZR X2,CSD4 IF WRITE ACCESS REQUESTED ON OTHER MACHINE
- NZ X1,CHA IF REQUESTED ACCESS PRESENT
- SA2 SDUR
- BX2 X0*X2
- BX2 X2-X6
- ZR X2,SIS IF UNABLE TO RELEASE WRITE ACCESS
- * MAKE *MTE* REQUEST.
- SX0 B1
- BX1 X0*X4
- NZ X1,CSD4 IF *MTE* REQUEST ALREADY IN PROGRESS
- SA1 /LSPMMF/MTIN READ *IN*
- SA2 A1+B1 READ *OUT*
- ERRNZ /LSPMMF/MTOT-/LSPMMF/MTIN-1
- LX5 35-0
- BX6 X6+X5 SET READ/WRITE FLAG IN REQUEST
- BX4 X4+X0 SET *MTE* REQUEST FLAG
- MX0 -6
- SX3 X1+B1
- BX3 -X0*X3 NEW *IN*
- BX2 X2-X3
- ZR X2,CSD4 IF REQUEST QUEUE FULL
- SA6 X1+/LSPMMF/MTBT ENTER REQUEST
- SX6 X3
- SA6 A1 UPDATE *IN*
- * UPDATE BST ENTRY.
- SX1 60
- SB4 -B4
- SB4 X1+B4 SHIFT COUNT TO RESTORE ENTRY
- LX6 X4,B4
- SA6 A4
- * EXIT TO CALLER OF *CHA*.
- CSD4 SX2 -2 SET ACCESS REJECTED STATUS
- JP B6 EXIT TO *CHA* CALLER
- IPP SPACE 4,10
- ** IPS - *IPP* PREPROCESSOR FOR SHARED DEVICES.
- *
- * ENTRY SEE *CPUCIO* SPECIAL PROCESSOR DOCUMENTATION.
- *
- * EXIT TO *IPP0* IF REQUEST CAN BE PROCESSED BY PSEUDO-PP.
- * TO */CPUCIO/RPC* IF REQUEST CANNOT BE PROCESSED BY
- * PSEUDO-PP.
- *
- * USES X - 1, 2.
- IPS BSS 0 ENTRY
- BX1 X3
- LX1 59-57
- PL X1,IPP0 IF NOT SHARED DEVICE
- EQ B3,B1,/CPUCIO/RPC IF WRITE FUNCTION
- ERRNZ /CIO/WTF-1
- SX1 1
- IX1 X0-X1 FNT ADDRESS
- ERX1 X1 READ FNT ENTRY
- MX2 -6
- LX1 0-6
- BX2 -X2*X1 FILE TYPE
- LX1 59-16-0+6
- SX2 X2-PMFT
- NZ X2,IPP0 IF NOT DIRECT ACCESS PERMANENT FILE
- PL X1,IPP0 IF NOT M, A, RM, OR RA MODE
- EQ /CPUCIO/RPC CALL PP CIO
- SBP SPACE 4,15
- ** SBP - SET BST PARAMETERS.
- *
- * ENTRY (B5) = RETURN ADDRESS.
- *
- * EXIT (X2) .LT. 0 IF BST PROCESSING DISABLED.
- * (X3) = LOGICAL TRACK.
- * (X4) = BST WORD WITH ENTRY RIGHT JUSTIFIED.
- * (A4) = BST WORD ADDRESS.
- * (B4) = SHIFT COUNT TO POSITION ENTRY.
- *
- * USES X - 2, 3, 4, 6.
- * A - 2, 3, 4.
- * B - 4.
- SBP BSS 0 ENTRY
- SA2 MSTA GET MST ADDRESS
- SA2 X2+BDLL
- SA3 LTRK GET TRACK
- LX2 -24
- SB4 X2 SET BST ADDRESS
- NG X2,RB5 IF BST PROCESSING DISABLED
- SX4 X3-4000B
- MX6 -4
- BX6 -X6*X4 ENTRY ORDINAL IN WORD
- AX4 4 BST WORD OFFSET
- SA4 B4+X4 READ BST ENTRY
- SX6 X6+B1 ENTRIES TO SHIFT TO RIGHT JUSTIFY ENTRY
- SB4 X6
- LX6 1
- SB4 X6+B4 SHIFT COUNT TO POSITION ENTRY
- LX4 B4 POSITION TO ENTRY
- JP B5 RETURN
- QUAL *
- ENDBLK
- BLOCK CPUCIO,(CPUCIO PROCESSOR.)
- TITLE CPUCIO GLOBAL DATA.
- SPACE 4,10
- ** GLOBAL DATA.
- * THE FOLLOWING DATA IS ORDER DEPENDENT.
- IR BSS 1 *CIO* CALL
- MB BSS 1 *CIO* PARAMETERS
- MB1 BSS 1 12/0, 24/IN, 24/OUT
- MB2 BSS 1 1/R,5/0,6/FET LENGTH,24/FIRST,24/LIMIT
- MB3 BSS 1 FUNCTION FLAGS
- ERRNZ /CIO/RDF CODE DEPENDS ON INTERNAL CODE FOR READ
- ERRNZ /CIO/WTF-1 CODE DEPENDS ON INTERNAL CODE FOR WRITE
- ERRNZ FSTL-1 CODE DEPENDS ON POSITION OF FST
- ERRNZ FUTL-FSTL-1 CODE DEPENDS ON POSITION OF WORD
- TITLE CPUCIO EXIT ROUTINES.
- PMV SPACE 4,10
- ** PMV - PROCESS *MAGNET* MOVING.
- PMV SB5 PMV1 SER *SRC* RETURN ADDRESS
- EQ SRC SET *RCLP* IN RA+1
- PMV1 SB5 MVPR SET RECALL STACK REASON CODE
- * EQ RCR SET REQUEST IN RECALL QUEUE
- RCR SPACE 4,10
- ** RCR - REQUEST *CIO* RECALL.
- *
- * ENTRY (B5) = RECALL STACK REASON CODE.
- * (IR) = *CIO* CALL.
- * (MB) = *CIO* MESSAGE BUFFER PARAMETERS.
- *
- * EXIT TO *CPCX*.
- *
- * CALLS /MONITOR/AQR.
- RCR SA4 IR GET *CIO* CALL
- SX7 B5 RECALL STACK REASON CODE
- MX3 6
- SA1 MB *CIO* PARAMETER WORD
- LX7 -12
- BX6 X4
- LX3 -6
- BX1 -X3*X1
- R= X2,/MONITOR/RQ
- BX7 X7+X1
- SA1 RTCL
- SA7 /MONITOR/AQRA SAVE PARAMETER WORD
- MX3 -36
- SA4 RCRA GET RECALL TIME PARAMETERS
- BX1 -X3*X1
- LX1 12
- IX0 X1+X4
- SA1 B7+STSW
- SB3 CPCX SET RETURN ADDRESS FOR *AQR*
- LX1 59-24
- PL X1,/MONITOR/AQR IF ROLLOUT NOT SET
- BX2 X7
- * ROLLOUT SET ON CONTROL POINT -
- * PLACE REQUEST IN CPA RECALL AREA, BUT NOT IN QUEUE.
- *
- * ENTRY (A1) = ADDRESS OF *STSW*.
- * (X1) = *STSW* LEFT-SHIFTED 59-24
- * (X2) = PARAMETER WORD.
- * (X6) = PP REQUEST.
- * (B3) = RETURN ADDRESS.
- * (B7) = CONTROL POINT AREA ADDRESS.
- RCR1 LX1 24-59
- MX7 -4
- SB4 B7+RCCW-1
- BX4 -X7*X1 NEXT FREE RECALL SLOT
- BX7 X7*X1
- SA3 B4+X4 READ NEXT FREE RECALL SLOT
- MX4 1
- SA6 A3+RECW-RCCW STORE REQUEST
- SX3 X3+20B
- BX6 X2+X4 SET RECALL BIT
- IX7 X7+X3
- SA6 A3+REPW-RCCW STORE PARAMETER WORD
- SA7 A1 UPDATE STSW
- JP B3 RETURN
- RCRA VFD 12/PTMF,36/IORT,12/0 RECALL TIME PARAMETERS
- RET SPACE 4,10
- ** RET - RETURN FILE.
- RET BSS 0
- BX1 X3
- LX1 59-56
- BX3 X1*X3
- PL X3,RPC IF NOT REMOVABLE MASS STORAGE
- * FORCE AUTORECALL TO PREVENT TWO FILE RETURNS ON A REMOVABLE
- * DEVICE FROM OCCURRING SIMULTANEOUSLY. THIS PREVENTS EACH
- * RETURN FROM DECIDING THAT ITS NOT THE LAST FILE ON THE DEVICE
- * AND, THUS, NOT DECREMENTING THE RESOURCE COUNT.
- SA1 IR
- MX2 1
- LX2 41-59
- BX6 X2+X1
- SA6 A1
- * EQ RPC REQUEST PP CIO
- RPC SPACE 4,15
- ** RPC - REQUEST PP CIO.
- *
- * ENTRY (X7) = 18/*TAPQ* INDEX, 42/REQUEST PARAMETERS.
- * (IR) = *CIO* CALL.
- * (MB) = *CIO* MESSAGE BUFFER PARAMETERS.
- * (MB1) = FET LENGTH - 5, FIRST AND LIMIT.
- * (MB2) = IN AND OUT.
- *
- * EXIT TO *CPCX*.
- *
- * CALLS /MONITOR/APQ.
- RPC SA1 IR GET *CIO* CALL
- MX0 -6
- SA4 A1+B1 CLEAR RECALL STACK FLAG
- BX0 -X0*X7
- SB3 CPCX SET RETURN ADDRESS FOR *APQ*
- MX6 -59
- MX2 -42 PRESERVE ERROR CODE AND PARAMETERS
- BX6 -X6*X4
- BX4 -X2*X7
- LX4 36
- BX6 X6+X4
- SA6 A4
- SA6 /MONITOR/APQA
- ZR X0,RPC1 IF NO ERROR
- MX2 1 FORCE AUTO RECALL ON ERROR
- LX2 41-59
- BX6 X1+X2
- SA6 A1+ REWRITE INPUT REGISTER
- BX1 X6
- * INDEX INTO TABLE *TAPQ* TO BUILD PP REQUEST.
- RPC1 AX7 42 *TAPQ* OFFSET
- SA2 TAPQ+X7
- MX6 18
- SB4 X2 PP FAST LOAD ADDRESS FROM *TAPQ*
- BX1 -X6*X1
- BX6 X6*X2
- BX6 X6+X1
- SA1 B7+STSW CHECK IF ROLLOUT REQUESTED
- LX1 59-24
- TPL X1,(/DCP/APQ,DCPC,/MONITOR/APQ) IF ROLLOUT NOT SET
- SA2 /MONITOR/APQA
- EQ RCR1 SET REQUEST IN CPA
- TAPQ SPACE 4,10
- ** TAPQ - TABLE OF PP REQUEST CRITERIA.
- *
- * ENTRY ONE WORD.
- *
- *T 18/PP CALL, 42/PP FAST LOAD PARAMETER ADDRESS
- TAPQ BSS 0
- LOC 0
- VFD 18/3L1MS,42//MONITOR/LA1MS
- VFD 18/3L1MI,42//MONITOR/LA1MI
- VFD 18/3L1ML,42//MONITOR/LA1ML
- VFD 18/3L1OD,42//MONITOR/LA1OD
- LOC *O
- TAPQL EQU *-TAPQ PP REQUEST TABLE LENGTH
- SRC SPACE 4,10
- ** SRC - SET *RCLP* AND CLEAR RECALL STATUS IN REQUEST.
- *
- * ENTRY (B5) = EXIT ADDRESS.
- * (IR) = *CIO* CALL.
- *
- * USES X - 1, 2, 3, 6.
- * A - 1, 2, 6.
- SRC BSS 0
- SA1 IR
- LX1 59-41
- MX6 -59
- PL X1,SRC1 IF NOT AUTO RECALL
- BX6 -X6*X1 CLEAR AUTO RECALL
- LX6 41-59
- SA2 /MONITOR/RC *RCLP* REQUEST
- SA6 A1
- SX3 X6 EXTRACT FET ADDRESS
- SA1 B7+FLSW GET RA
- BX6 X2+X3
- MX2 -RMSK
- AX1 RSHF
- BX3 -X2*X1
- SX1 B1 STORE *RCLP* IN RA + 1
- LX3 6
- IX3 X3+X1
- EWX6 X3
- SRC1 JP B5 RETURN
- CPCX SPACE 4,15
- ** CPCX - CPUCIO EXIT PROCESSOR.
- *
- * ENTRY (A0) = CPU NUMBER.
- * (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
- * (B1) = 1.
- * (B2) = USER EXCHANGE PACKAGE AREA.
- * (B7) = CPA.
- * (IR) = *CIO* CALL.
- *
- * EXIT TO */MONITOR/.DPPM* IF PP REQUEST COMPLETE AND
- * DROP OPTION SELECTED.
- * TO */MONITOR/MTR* IF RA+1 CALL WITHOUT AUTO RECALL
- * FLAG SET.
- * TO */MONITOR/MTRX* IF RECALLED REQUEST OR IF RA+1 CALL
- * WITHOUT AUTO RECALL WHEN JOB NOT ACTIVE IN CPU.
- * TO */MONITOR/PPR1* IF PP REQUEST COMPLETE AND
- * DROP OPTION NOT SELECTED.
- * TO */MONITOR/SIS* IF RA+1 CALL WITH AUTO RECALL
- * WHEN JOB ACTIVE IN CPU.
- CPCX TX1 10B,SP
- SX2 A5
- MX0 -18
- BX2 -X0*X2
- IX1 X2-X1
- ZR X1,/MONITOR/MTRX IF RECALLED REQUEST
- NG X1,CPCX1 IF PP *RPPM* REQUEST
- SA1 IR
- MX0 3
- LX1 59-41
- PL X1,/MONITOR/MTR IF NO AUTO RECALL
- SA1 B7+STSW GET CPU STATUS
- NO
- BX0 X0*X1
- ZR X0,/MONITOR/MTRX IF NULL CPU STATUS
- PL X1,/MONITOR/SIS IF JOB ACTIVE IN CPU
- EQ /MONITOR/MTRX EXIT
- CPCX1 SA5 A5
- LX5 59-37
- NG X5,/MONITOR/.DPPM IF DROP OPTION SELECTED
- SX7 B1 RETURN RESPONSE
- LX7 36
- EQ /MONITOR/PPR1
- TITLE CPUCIO MAIN ROUTINE.
- CPC SPACE 4,10
- ** CPC - CPUCIO PROCESSOR (MONITOR MODE ENTRY POINT).
- *
- * ENTRY (A0) = CPU NUMBER.
- * (B1) = 1.
- * (B2) = USER EXCHANGE PACKAGE AREA.
- * (B7) = CPA.
- * (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
- * (IR) = *CIO* CALL.
- * (MB) = *CIO* PARAMETER WORD IF RESTART.
- * = 0 IF INITIAL *CIO* CALL.
- *
- * EXIT TO */CIO819/IPP1* IF PSEUDO PP CONTINUATION FUNCTION.
- * TO EQUIPMENT FUNCTION PROCESSOR (SEE *TFPJ* TABLE).
- *
- * ERROR EXIT TO *RPC* IF ERROR DETECTED.
- *
- * CALLS /MONITOR/VFA, /MONITOR/VFP.
- * VALIDATE FET ADDRESS.
- CPC SA4 MB CHECK IF CONTINUATION FUNCTION
- MX1 -59
- BX4 -X1*X4 IGNORE RECALL STACK FLAG
- SX6 B0+
- MX1 -54
- LX4 59-55
- CPC1 TNG X4,(/BUFIO/IPP1,BUFIO,/CPUCIO/CPC1) IF BUFFERED I/O
- LX4 59-53-59+55
- BX4 -X1*X4 IGNORE RECALL STACK REASON CODE
- SA6 A4+B1 CLEAR FET PARAMETER WORDS
- SA1 A4-B1 GET FET ADDRESS
- SA6 A6+B1
- SA6 A6+B1
- SX7 /CIOERR/ARG *FET ADDRESS OUT OF RANGE*
- SB3 RPC SET ERROR EXIT ADDRESS FOR *VFA*
- SB6 CPC3 SET RETURN ADDRESS FOR *VFA*
- ZR X4,/MONITOR/VFA IF INITIAL CALL
- SB6 CPC2 SET RETURN ADDRESS FOR *VFA*
- EQ /MONITOR/VFA VALIDATE FET ADDRESS
- CPC2 SA4 A4
- MX2 -12
- SA6 MB2 SAVE FET LENGTH - 5 AND RANDOM FILE FLAG
- LX4 -24
- BX2 -X2*X4 FNT ORDINAL
- SX2 X2-FSTL
- IX0 X0-X2 ABSOLUTE FST ADDRESS
- LX4 24
- EQ CPC16 VERIFY FET PARAMETERS
- CPC3 SA6 MB2 SAVE FET LENGTH - 5 AND RANDOM FILE FLAG
- MX4 -12
- LX2 -36
- SX6 B1+
- BX2 -X4*X2 NFL/100B
- IX3 X5-X6 FET+0
- MX6 -2
- ERX3 X3
- IX5 X5-X6 FET+4
- MX6 42
- SX7 /CIOERR/FLN *FILE NAME ERROR*
- BX1 X6*X3
- LX2 6
- ZR X1,RPC IF NO FILE NAME
- * CHECK FNT POINTER FROM FET.
- SX7 FNTN
- ERX1 X5 GET FNT POINTER FROM FET
- IX0 X0-X7
- LX1 12
- BX1 -X4*X1 FNT ORDINAL
- IX4 X2-X1
- IX1 X1-X7
- IX2 X2-X7
- PX2 X2
- NG X1,CPC4 IF FNT POINTER TOO SMALL
- NG X4,CPC4 IF FNT POINTER TOO LARGE
- IX0 X0-X1 ABSOLUTE FNT ADDRESS
- ERX4 X0 GET FNT ENTRY
- BX4 X3-X4
- BX4 X6*X4
- IX6 X1+X7 FNT ORDINAL
- ZR X4,CPC7 IF FILE NAME MATCH
- IX0 X0+X1
- * LOCATE FNT ENTRY.
- CPC4 SX7 LENF COMPUTE ADDRESS OF LAST FNT ENTRY
- PX4 X7
- NX4 X4
- FX2 X2/X4
- UX2 X2,B6
- LX2 B6
- IX2 X7*X2
- BX6 X3
- IX4 X0-X2
- EWX6 X4 STORE FILE NAME FOR MATCH
- MX6 42
- CPC5 ERX1 X0
- IX0 X0-X7
- ERX2 X0
- BX1 X1-X3
- BX1 X6*X1
- ZR X1,CPC6 IF FOUND
- BX2 X2-X3
- IX0 X0-X7
- BX2 X6*X2
- NZ X2,CPC5 IF NOT FOUND
- CPC6 IX1 X0+X7
- BX6 X6-X6 CLEAR FILE NAME FROM END OF FNT
- IX0 X4-X1
- EWX6 X4
- ZR X0,CPC8 IF FILE NOT FOUND
- SA2 B7+FLSW GET RA
- BX0 X1
- MX7 -48
- LX2 -12
- ERX1 X5 SET FNT ORDINAL IN FET
- SX2 X2
- BX7 -X7*X1
- LX2 6
- IX6 X2-X0 FNT ORDINAL
- LX6 -12
- BX7 X6+X7
- EWX7 X5
- LX6 12
- * CHECK FILE BUSY.
- CPC7 SX2 B1
- ERRNZ FSTL-1 CODE DEPENDS ON VALUE
- IX0 X0+X2 ABSOLUTE FST ADDRESS
- ERX1 X0 CHECK FILE BUSY
- BX4 X2*X1
- SX7 /CIOERR/FSQ *I/O SEQUENCE ERROR*
- ZR X4,RPC IF FILE BUSY
- BX7 X1-X2 SET FILE BUSY
- EWX7 X0
- * IDENTIFY *CIO* REQUEST.
- CPC8 LX3 -14 GET LEVEL NUMBER
- MX4 -4
- BX1 -X4*X3
- MX4 -8
- LX3 13 GET EXTERNAL CIO FUNCTION CODE
- BX3 -X4*X3
- LX1 8
- BX1 X1+X3
- SX2 B1
- LX6 12
- AX3 1
- BX4 -X3*X2
- SB3 X3-600B/4
- BX6 X6+X1
- LX6 12
- SX2 30
- LX3 -4
- IX4 X2*X4
- SX1 X3-3
- SA6 MB SAVE FNT ORDINAL AND EXTERNAL CODE
- SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
- NG X1,CPC9 IF 0XX, 1XX, OR 2XX FUNCTION CODE
- SX2 B1+B1
- IX3 X3-X2 MAP 3XX INTO 1XX FUNCTION CODE
- ZR X1,CPC9 IF 3XX FUNCTION CODE
- LX2 1
- IX3 X3-X2 MAP 6XX INTO 0XX FUNCTION CODE
- MX1 -3
- BX1 -X1*X3
- NZ X1,RPC IF NOT 6XX FUNCTION CODE
- CPC9 LX3 3
- SA3 TCIC+X3 GET INTERNAL CODE AND FUNCTION FLAGS
- SB6 X4
- LX3 B6
- LX3 -18
- MX2 48
- BX1 X1+X3
- PL X1,RPC IF NOT LEGAL 3XX/6XX FUNCTION CODE
- BX1 X2+X3
- BX4 -X2*X3 INTERNAL CIO FUNCTION CODE
- ZR X1,RPC IF ILLEGAL FUNCTION CODE
- LX7 X3 SAVE FUNCTION FLAGS
- LX3 59-56 CHECK IF FNT REQUIRED
- SA7 MB3
- MX7 1
- BX1 -X3*X7
- LX7 6-59
- BX1 X1+X0
- SB5 RPC
- ZR X1,SRC IF FNT REQUIRED AND NOT FOUND
- NZ B3,CPC10 IF NOT 600 FUNCTION CODE
- SX4 X4+/CIO/EOI SET EOI TERMINATION CONDITION
- * PROCESS SKIP COUNT AND LEVEL NUMBER.
- CPC10 BX3 X6
- AX3 20 GET LEVEL NUMBER
- MX7 56
- BX3 X7+X3
- SA1 A6-B1
- MX2 42
- LX2 18
- BX7 X2*X1 CLEAR SKIP COUNT
- BX2 -X2*X1
- SX1 1754B
- BX1 X1*X4 FUNCTION CODE AND TERMINATION CONDITION
- SB3 X1-/CIO/SKP*100B-/CIO/PRU
- ZR B3,CPC12 IF BACKSPACE PRU FUNCTION
- SB3 X1-/CIO/SKP*100B-/CIO/EOR
- ZR B3,CPC11 IF SKIP RECORD FUNCTION
- SX2 B1+
- NZ X3,CPC14 IF NOT LEVEL 17B
- SB3 X1-/CIO/WTF*100B-/CIO/EOR
- ZR B3,CPC13 IF WRITER/REWRITER
- SX3 X1-/CIO/RDF*100B-40B-/CIO/EOI
- NZ X3,CPC14 IF NOT *READCW*
- SX4 X4+/CIO/EOF-/CIO/EOI STOP ON EOF
- EQ CPC14 UPDATE PARAMETER WORD
- CPC11 NZ X3,CPC12 IF NOT LEVEL 17B
- SX4 X4+/CIO/EOF-/CIO/EOR SET EOF STOP
- CPC12 MX3 1 SET SKIP DATA TRANSFER FLAG
- LX3 56-59
- BX6 X6+X3
- LX2 -18
- SX3 X2
- NZ X3,CPC14 IF SKIP COUNT SPECIFIED
- SX3 B1 SET SKIP COUNT = 1
- LX3 18
- BX7 X7+X3
- SA7 A1+
- ZR X2,CPC14 IF SKIP COUNT NOT INDEFINITE
- SX3 /CIO/EOI SET STOP ON EOI FOR FORWARD SKIP
- BX4 X4+X3
- BX7 X4
- MX2 7
- LX7 59-11
- PL X7,CPC14 IF FORWARD SKIP
- SX4 X4+/CIO/REW*100B-/CIO/SKP*100B-/CIO/EOI SET REWIND
- SX3 50B/2
- LX2 19-59
- BX6 -X2*X6
- LX3 12
- BX6 X6+X3
- EQ CPC14 UPDATE FET+0
- CPC13 SX4 X4+/CIO/EOF-/CIO/EOR SET WRITEF/REWRITEF FUNCTION
- LX2 14-0
- IX6 X6+X2 SET EXTERNAL FUNCTION CODE
- CPC14 BX6 X6+X4 SET INTERNAL CODE IN PARAMETER WORD
- SA6 A6
- LX6 -12
- MX7 -8
- BX6 -X7*X6 UPDATE EXTERNAL CODE IN FET
- SX3 4
- LX6 1
- IX5 X5-X3 GET FET+0
- ERX2 X5
- MX7 46
- BX7 X7*X2 CLEAR ABNORMAL TERMINATION FIELD
- IX7 X7+X6
- EWX7 X5
- SX6 B1
- IX5 X5+X6 FET+1
- * CHECK FILE ACCESS.
- SA4 A6
- ZR X0,CPC16 IF NO FNT ENTRY
- IX2 X0-X6
- ERX2 X2 GET FNT ENTRY
- AX1 6
- LX2 59-14
- SB5 X1 INTERNAL FUNCTION CODE
- PL X2,CPC15 IF NOT EXECUTE-ONLY FILE
- SA1 B7+EOCW CHECK LAST FILE EXECUTED
- SA3 B7+SEPW CHECK SPECIAL ENTRY POINTS
- MX7 12
- LX4 24
- BX1 X1-X4
- LX3 59-55
- BX1 X1*X7
- LX4 -24
- ZR X1,CPC15 IF PROGRAM LOADED FROM THIS FILE
- NG X3,CPC15 IF LDR= PROGRAM
- SA1 MB3 GET FUNCTION FLAGS
- SX7 /CIOERR/EXO *I/O ON EXECUTE-ONLY FILE*
- LX1 59-54
- PL X1,RPC IF FUNCTION INVALID ON EXECUTE ONLY FILE
- CPC15 SX1 B5-/CIO/OVW
- LX2 59-12-59+14
- ZR X1,CPC15.1 IF OVERWRITE FUNCTION
- NE B5,B1,CPC16 IF NOT WRITE FUNCTION
- CPC15.1 SX7 /CIOERR/IWR *WRITE ON READ ONLY FILE*
- NG X2,RPC IF WRITE LOCKOUT SET
- * VERIFY FET PARAMETERS.
- CPC16 MX1 -2 GET VALIDATION FLAGS
- BX6 -X1*X4
- ZR X6,CPC18 IF NO VALIDATION REQUIRED
- SB6 CPC17 SET RETURN ADDRESS FOR *VFP*
- SB3 RPC SET ERROR EXIT ADDRESS FOR *VFP*
- SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
- EQ /MONITOR/VFP VERIFY FET PARAMETERS
- CPC17 SA2 MB2 GET FET LENGTH - 5 AND RANDOM FLAG
- SA3 A2+B1 GET FUNCTION FLAGS
- BX7 X1+X2
- SA6 A2-B1 SAVE IN AND OUT
- LX3 59-55 CHECK FOR REWIND OPERATION
- SA7 A2 SAVE FIRST, LIMIT, AND FET LENGTH
- SX2 B1
- PL X3,CPC18 IF NOT REWIND OPERATION
- SX7 B4+ FIRST
- IX1 X5+X2 FET+2
- EWX7 X1 SET IN = FIRST
- IX1 X1+X2 FET+3
- EWX7 X1 SET OUT = FIRST
- ZR X0,CPC18 IF NO FNT ENTRY
- ERX1 X0 GET FST ENTRY
- LX2 11 CLEAR SYSTEM SECTOR PROCESSING BIT
- MX7 12 GET EST ENTRY
- BX7 X7*X1
- LX7 12
- CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
- TA4 X4+EQDE,EST
- MX7 -11
- LX4 -12
- BX7 -X7*X4
- SB6 X7-2RMT
- ZR B6,CPC18 IF *MT* EQUIPMENT
- SB6 X7-2RNT
- ZR B6,CPC18 IF *NT* EQUIPMENT
- BX7 -X2*X1
- EWX7 X0
- * VALIDATE SECURITY ACCESS LEVEL OF FILE AND JOB.
- CPC18 ZR X0,CPC18.4 IF NO FNT ENTRY
- TB6 OSSM GET O/S SECURITY MODE
- ZR B6,CPC18.4 IF UNSECURED SYSTEM
- GT B5,B1,CPC18.4 IF NOT READ OR WRITE FUNCTION
- SX2 B1
- SA1 B7+JSCW GET JOB ACCESS LEVEL
- IX2 X0+X2
- LX1 15
- ERX2 X2 GET FILE ACCESS LEVEL
- MX6 -3
- LX2 -24
- BX7 -X6*X1
- SA4 B7+SEPW CHECK FOR SSJ=
- BX6 -X6*X2
- IX7 X7-X6
- LX4 59-50
- ZR X7,CPC18.4 IF JOB AND FILE AT SAME ACCESS LEVEL
- SA3 B7+JCIW CHECK FOR SUBSYSTEM
- NG X4,CPC18.4 IF JOB HAS SSJ= PRIVILEGES
- LX3 -24
- MX4 -12
- BX3 -X4*X3
- MX4 57
- SX3 X3-LSSI-1
- PL X3,CPC18.4 IF SUBSYSTEM
- SX3 B1
- IX3 X0-X3
- EQ B5,B1,CPC18.1 IF WRITE FUNCTION
- PL X7,CPC18.4 IF READ FROM FILE AT LOWER LEVEL
- BX1 X4*X1 RAISE JOB LEVEL TO FILE LEVEL
- BX7 X1+X6
- LX7 -15
- SA7 A1
- EQ CPC18.4 GET DEVICE TYPE
- CPC18.1 NG X7,CPC18.4 IF WRITE TO FILE AT HIGHER LEVEL
- LX1 59-53-15
- ERX3 X3 GET FNT ENTRY
- MX6 -6
- NG X1,CPC18.4 IF USER ALLOWED TO WRITE TO LOWER LEVEL
- LX3 -6
- BX6 -X6*X3 GET FILE TYPE FROM FNT
- SX6 X6-PMFT
- ERX3 X0 GET EQUIPMENT FROM FST
- SX7 /CIOERR/WDP *WRITEDOWN PROHIBITED.*
- ZR X6,RPC IF DIRECT ACCESS PERMANENT FILE
- MX6 -9
- LX3 12
- BX3 -X6*X3
- LX1 53-59+15
- MX6 -3
- BX1 -X6*X1
- ZR X3,CPC18.3 IF NO EQUIPMENT ASSIGNED
- CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
- TA3 X4+EQDE,EST GET EST ENTRY
- MX6 -11 GET EQUIPMENT MNEMONIC
- LX6 12
- BX6 -X6*X3
- LX6 -12
- SB6 X6-2RMT
- ZR B6,RPC IF TAPE EQUIPMENT
- SB6 X6-2RNT
- ZR B6,RPC IF TAPE EQUIPMENT
- SB6 CPC18.2 SET *VAE* RETURN ADDRESS
- EQ /MONITOR/VAE0 VALIDATE EQUIPMENT ACCESS LEVEL
- CPC18.2 SX7 /CIOERR/LNF *ACCESS LEVEL NOT VALID FOR FILE*
- NG X6,RPC IF JOB LEVEL NOT VALID FOR EQUIPMENT
- CPC18.3 MX7 57 RAISE FILE TO JOB ACCESS LEVEL
- SX3 B1+
- BX7 X7*X2
- IX3 X0+X3
- BX7 X7+X1
- LX7 24
- EWX7 X3
- * GET DEVICE TYPE.
- CPC18.4 SA1 TFCP
- MX6 -11
- BX4 X4-X4
- MX3 -12
- ZR X0,CPC19 IF NO FNT ENTRY
- ERX2 X0
- LX2 12
- BX4 -X3*X2 EST ORDINAL
- ZR X4,CPC19 IF EQUIPMENT NOT ASSIGNED
- CX3 X4,EST CONVERT EST ORDINAL TO OFFSET
- TA3 X3+EQDE,EST READ EST ENTRY
- LX3 -12
- BX4 -X6*X3 DEVICE TYPE
- LX3 12
- PL X3,CPC19 IF NOT MASS STORAGE
- BX2 X3
- LX2 59-53
- NG X2,CPC20 IF BUFFERED DEVICE
- * DETERMINE FUNCTION PROCESSOR.
- CPC19 SA1 A1+1
- BX2 -X6*X1
- BX7 X2-X4
- ZR X7,CPC20 IF EQUIPMENT FOUND
- NZ X2,CPC19 IF MORE ENTRIES TO CHECK
- NG X3,CPC20 IF MASS STORAGE EQUIPMENT
- SA1 A1+1 GET ALL OTHER EQUIPMENT ENTRY
- CPC20 BX6 X3
- NG X3,CPC21 IF MASS STORAGE
- LX6 59-58
- CPC21 ERX2 X5 SET DEVICE TYPE IN FET
- MX7 1
- BX7 -X6*X7 NON-ALLOCATABLE FLAG
- MX6 -48
- LX4 -12
- BX6 -X6*X2
- SA2 MB3 GET FUNCTION FLAGS
- BX7 X7+X4
- LX2 59-53
- BX6 X6+X7
- SX4 B1
- NG X2,CPC22 IF DEVICE TYPE NOT TO BE RETURNED
- EWX6 X5
- LX6 59-39
- PL X6,CPC22 IF FILE ACCESS LEVEL NOT TO BE RETURNED
- IX4 X0+X4
- MX6 -3
- ERX4 X4 GET FILE ACCESS LEVEL
- SX7 3
- IX7 X5+X7 GET FET + 4
- LX4 -24
- ERX2 X7
- BX4 -X6*X4
- LX2 -36
- BX2 X6*X2
- BX6 X2+X4 RETURN FILE ACCESS LEVEL IN FET + 4
- LX6 36
- EWX6 X7
- CPC22 SA2 MB3 GET FUNCTION FLAGS
- MX7 2
- LX2 59-58
- BX2 X7*X2
- BX7 X7*X1
- MX6 -4
- BX2 X7*X2
- SA4 MB GET INTERNAL FUNCTION CODE
- LX1 -12
- LX4 -6
- NZ X2,TFPJ+/TFPJ/RUD IF FUNCTION NOT VALID ON EQUIPMENT
- BX2 -X6*X4
- SB3 X2
- SB6 B3+B3
- BX7 X7-X7
- SB6 B6+B6 FUNCTION CODE * 4
- AX1 B6
- BX1 -X6*X1 INDEX INTO *TFPJ* JUMP TABLE
- SB6 X1
- JP TFPJ+B6 EXIT TO PROCESSOR
- TFPJ BSS 0 TABLE OF FUNCTION PROCESSOR JUMPS
- QUAL TFPJ
- IPP EQU *-/CPUCIO/TFPJ
- TEQ (/BUFIO/IPP,BUFIO,/CPUCIO/TFPJ+/TFPJ/IPP) PSEUDO PP
- BSS 0
- OPE EQU *-/CPUCIO/TFPJ
- SA1 /CPUCIO/MB2 READ RANDOM FILE FLAG
- EQ /CPUCIO/OPE PROCESS OPEN
- BSS 0
- RET EQU *-/CPUCIO/TFPJ
- NZ X0,/CPUCIO/RET FNT/FST PRESENT
- EQ /CPUCIO/RWF SET CRI AND COMPLETE FET
- BSS 0
- PMT EQU *-/CPUCIO/TFPJ
- EQ /CPUCIO/PMT PROCESS MAGNETIC TAPE
- BSS 0
- POD EQU *-/CPUCIO/TFPJ
- EQ /CPUCIO/POD PROCESS OPTICAL DISK
- BSS 0
- RPC EQU *-/CPUCIO/TFPJ
- EQ /CPUCIO/RPC CALL PP CIO
- BSS 0
- RWF EQU *-/CPUCIO/TFPJ
- EQ /CPUCIO/RWF PROCESS REWIND FUNCTION
- BSS 0
- TIO EQU *-/CPUCIO/TFPJ
- PL X4,/CPUCIO/TIO IF NOT CONTROL WORDS
- EQ /CPUCIO/TFPJ+/TFPJ/RUD CONTROL WORDS NOT VALID
- BSS 0
- CCI EQU *-/CPUCIO/TFPJ
- SX7 B1+B1 *TAPQ* TABLE OF PP REQUESTS INDEX
- LX7 42-0
- EQ /CPUCIO/RPC CALL PP CIO
- BSS 0
- RUD EQU *-/CPUCIO/TFPJ
- SX7 /CIOERR/RUD *REQUEST UNDEFINED ON DEVICE*
- EQ /CPUCIO/RPC CALL PP CIO
- BSS 0
- IEQ EQU *-/CPUCIO/TFPJ
- SX7 /CIOERR/IEQ *ILLEGAL EQUIPMENT ON FILE*
- EQ /CPUCIO/RPC CALL PP CIO
- RTE EQU *-/CPUCIO/TFPJ
- SX4 1 SET FST STATUS (EQUIVALENT TO TAPE)
- EQ /CPUCIO/RWF0 PROCESS REWIND FUNCTION FOR *TEEQ*
- BSS 0
- QUAL *
- TFCP SPACE 4,20
- ** TFCP - TABLE OF FUNCTION CODE PROCESSORS.
- *
- *T 1/S, 1/T, 10/, 36/ TFPJI, 12/ DT
- * DT DEVICE TYPE (0 = ANY DEVICE).
- * S IF SET, MASS STORAGE ONLY FUNCTION IS NOT ALLOWED
- * ON THIS EQUIPMENT.
- * T IF SET, MAGNETIC TAPE ONLY FUNCTION IS NOT
- * ALLOWED ON THIS EQUIPMENT.
- * TFPJI *TFPJ* TABLE INDICES TO PROCESS *CIO* FUNCTIONS -
- * 4/OV,4/EV,4/RT,4/RW,4/CL,4/OP,4/SK,4/WT,4/RD
- * OV *TFPJ* TABLE INDEX FOR *OVERWRITE* PROCESSOR.
- * EV *TFPJ* TABLE INDEX FOR *EVICT* PROCESSOR.
- * RT *TFPJ* TABLE INDEX FOR *RETURN/UNLOAD* PROCESSOR.
- * RW *TFPJ* TABLE INDEX FOR *REWIND* PROCESSOR.
- * CL *TFPJ* TABLE INDEX FOR *CLOSE* PROCESSOR.
- * OP *TFPJ* TABLE INDEX FOR *OPEN* PROCESSOR.
- * SK *TFPJ* TABLE INDEX FOR *SKIP* PROCESSOR.
- * WT *TFPJ* TABLE INDEX FOR *WRITE* PROCESSOR.
- * RD *TFPJ* TABLE INDEX FOR *READ* PROCESSOR.
- *
- * NOTE - FUNCTION PROCESSOR JUMP INDEXES MUST BE IN SAME
- * ORDER AS INTERNAL *CIO* FUNCTION CODES.
- ERRNZ /CIO/RDF
- ERRNZ /CIO/WTF-1
- ERRNZ /CIO/SKP-2
- ERRNZ /CIO/OPE-3
- ERRNZ /CIO/CLO-4
- ERRNZ /CIO/REW-5
- ERRNZ /CIO/RET-6
- ERRNZ /CIO/EVI-7
- ERRNZ /CIO/OVW-10B
- TFCP BSS 0
- QUAL TFPJ
- VFD 1/0,1/1,10/0 BUFFERED MASS STORAGE
- VFD 4/RPC,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/IPP,4/IPP,4/IPP
- VFD 12/3777B
- * TABLE SEARCH STARTS HERE FOR ALL BUT BUFFERED MASS STORAGE.
- VFD 1/1,1/0,10/0 OPTICAL DISK
- VFD 4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD
- VFD 12/2ROD
- VFD 1/1,1/0,10/0 7-TRACK TAPE
- VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
- VFD 12/2RMT
- VFD 1/1,1/0,10/0 9-TRACK TAPE
- VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
- VFD 12/2RNT
- VFD 1/1,1/0,10/0 CARTRIDGE TAPE
- VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
- VFD 12/2RCT
- VFD 1/1,1/0,10/0 ACS CARTRIDGE TAPE
- VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
- VFD 12/2RAT
- VFD 1/1,1/1,10/0 *TE* PSEUDO-EQUIPMENT
- VFD 4/RUD,4/RPC,4/RPC,4/RTE,4/RPC,4/RUD,4/RUD,4/RUD,4/RUD
- VFD 12/2RTE
- VFD 1/1,1/1,10/0 TERMINAL
- VFD 4/RUD,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/RPC,4/TIO,4/TIO
- VFD 12/2RTT
- VFD 1/0,1/1,10/0 NULL EQUIPMENT
- VFD 4/RPC,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/RPC,4/RPC,4/RPC
- VFD 12/2RNE
- VFD 1/1,1/1,10/0 COMMUNICATION COUPLER
- VFD 4/RUD,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI
- VFD 12/2RCC
- VFD 1/0,1/1,10/0 ALL OTHER MASS STORAGE
- VFD 4/RPC,4/RET,4/RET,4/RWF,4/RPC,4/OPE,4/RPC,4/RPC,4/RPC
- VFD 12/0
- VFD 1/1,1/1,10/0 ALL OTHER NON-MASS STORAGE
- VFD 4/IEQ,4/RET,4/RET,4/RWF,4/RPC,4/IEQ,4/IEQ,4/IEQ,4/IEQ
- VFD 12/0
- QUAL *
- TCIC SPACE 4,10
- ** TCIC - TABLE OF CIO INTERNAL FUNCTION CODES.
- *
- * 30 BITS PER ENTRY -
- *T 12/ IC, 1/E, 1/M, 1/T, 1/F, 1/R, 1/X, 1/D, 11/0
- * IC = INTERNAL CIO CODE (DEFINED IN *COMSCIO*).
- * = 7777B IF ILLEGAL REQUEST CODE.
- * E = 1, IF EXTENDED FUNCTION LEGAL (3XX/6XX CIO CODE).
- * M = 1, IF MASS STORAGE ONLY FUNCTION.
- * T = 1, IF MAGNETIC TAPE ONLY FUNCTION.
- * F = 1, IF FUNCTION REQUIRES FNT ENTRY.
- * R = 1, IF REWIND OPERATION (SET *IN* = *OUT* = *FIRST*).
- * X = 1, IF FUNCTION LEGAL ON EXECUTE ONLY FILE.
- * D = 1, IF FUNCTION DOES NOT RETURN DEVICE TYPE TO FET.
- *
- * REFER TO *ICTE* MACRO FOR PARAMETER DESCRIPTION.
- TCIC BSS 0
- QUAL CIO
- * THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
- * CODES CORRESPONDING TO THE 000XXXX00 AND 110XXXX00
- * BINARY EXTERNAL CIO FUNCTION CODES.
- ICTE RDF,(PRU,VFL,VIO,RFE,XF) RPHR (000), READEI (600)
- ICTE WTF,(PRU,VFL,VIO,RFE) WPHR (004)
- ICTE RDF,(EOR,VFL,VIO,RFE) READ (010)
- ICTE WTF,(EOI,VFL,VIO,RFE) WRITE(014)
- ICTE RDF,(EOR,VFL,VIO,SKO,RFE) READSKP (020)
- ICTE WTF,(EOR,VFL,VIO,RFE) WRITER (024)
- ICTE UNUSED (030)
- ICTE WTF,(EOF,VFL,VIO,RFE) WRITEF (034)
- ICTE SKP,(EOR,SKO,BKW,EXF,XF) BKSP (040), SKIPB (640)
- ICTE SKP,(PRU,SKO,BKW,EXF) BKSPRU (044)
- ICTE REW,(VFL,BKW,IOF,EXF) REWIND (050)
- ICTE REW,(VFL,BKW,IOF,EXF) REWIND (054)
- ICTE RET,(UNL,EXF,NDT) UNLOAD (060)
- ICTE UNUSED (064)
- ICTE RET,(EXF,NDT) RETURN (070)
- ICTE UNUSED (074)
- * THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
- * CODES CORRESPONDING TO THE 001XXXX00 AND 011XXXX00
- * BINARY EXTERNAL CIO FUNCTION CODES.
- ICTE OPE,(VFL,RFE,XF) OPEN READ/REEL NR(100/300)
- ICTE OPE,(VFL,RFE) OPEN WRITENR (104)
- ICTE OPE,(VFL,MTO) POSMF (110)
- ICTE EVI,(UNL,EXF) EVICT (114)
- ICTE OPE,(VFL,RFE) OPEN NR/ALTERNR (120)
- ICTE UNUSED (124)
- ICTE CLO,(EOR,XF) CLOSE(R) NR (130/330)
- ICTE UNUSED (134)
- ICTE OPE,(VFL,BKW,RFE,XF) OPEN READ (140)/REEL (340)
- ICTE OPE,(VFL,BKW,RFE) OPEN WRITE (144)
- ICTE CLO,(VFL,BKW,EOR,XF) CLOSE(R) REWIND(150/350)
- ICTE UNUSED (154)
- ICTE OPE,(VFL,BKW,RFE) OPEN ALTER (160)
- ICTE UNUSED (164)
- ICTE CLO,(BKW,EOR,XF) CLOSE(R) UNLOAD(170/370)
- ICTE CLO,(BKW,EOR,XF) CLOSE(R) RETURN (174/374)
- * THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
- * CODES CORRESPONDING TO THE 010XXXX00 BINARY EXTERNAL
- * CIO FUNCTION CODES.
- ICTE RDF,(EOI,VFL,VIO,CRW,RFE) READCW (200)
- ICTE WTF,(EOI,VFL,VIO,CRW,RFE) WRITECW (204)
- ICTE RDF,(EOR,VFL,VIO,LST,RFE,MSO) READLS (210)
- ICTE WTF,(EOI,VFL,VIO,RWO,RFE,MSO) REWRITE (214)
- ICTE UNUSED (220)
- ICTE WTF,(EOR,VFL,VIO,RWO,RFE,MSO) REWRITER(224)
- ICTE RDF,(PRU,VFL,VIO,LST,RFE,MSO) RPHRLS (230)
- ICTE WTF,(EOF,VFL,VIO,RWO,RFE,MSO) REWRITEF (234)
- ICTE SKP,(EOR,SKO,EXF) SKIPF/SKIPFF/SKIPEI (240)
- ICTE OVW,(EOI,MSO) OVERWRITE (244)
- ICTE RDF,(EOF,VFL,VIO,RFE) READNS (250)
- ICTE OVW,(EOI,MSO,NDT) OVERWRITE RETURN (254)
- ICTE RDF,(EOF,VFL,VIO,NRW,MTO) READN (260)
- ICTE WTF,(EOI,VFL,VIO,NRW,MTO) WRITEN (264)
- ICTE UNUSED (270)
- ICTE UNUSED (274)
- QUAL *
- TITLE CPUCIO SPECIAL PROCESSORS.
- SPACE 4,10
- ** CPUCIO SPECIAL PROCESSORS.
- *
- * STANDARD REGISTER DEFINITIONS.
- *
- * (B1) = 1.
- * (B2) = USER EXCHANGE PACKAGE AREA.
- * (B7) = CPA.
- * (A0) = CPU NUMBER.
- * (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
- *
- *T IR 18/ *CIO*, 1/A, 5/ CP, 18/ SKIP COUNT, 18/ FET ADDRESS
- *
- *T MB 1/S,5/ RF,6/ RC,5/0,1/F,6/ EC,12/ ORD,4/ LV,8/ XC,12/IC
- * S SET IF *CIO* RESTARTED FROM RECALL STACK
- * RF RESTART FLAGS = 1/TIF, 1/0, 1/SDT, 1/BDF, 1/DTF.
- * TIF = TRACK INTERLOCK FLAG.
- * SDT = SKIP DATA TRANSFER FLAG.
- * BDF = BUFFERED DEVICE FUNCTION FLAG.
- * DTF = DATA TRANSFERRED FLAG.
- * RC RECALL STACK REASON CODE.
- * F CREATE FNT ENTRY FLAG. IF SET, *1MS* CREATES
- * AN FNT ENTRY AND RESTARTS CPUCIO.
- * EC ERROR CODE IF NONZERO.
- * ORD RELATIVE ADDRESS OF FNT ENTRY IN NFL.
- * LV LEVEL NUMBER (0 - 17B).
- * XC EXTERNAL *CIO* FUNCTION CODE.
- * IC INTERNAL *CIO* FUNCTION CODE (SEE *COMSCIO*).
- *
- *T MB1 12/ 0, 24/ *IN*, 24/ *OUT*
- *
- *T MB2 1/R, 5/0, 6/ FETL, 24/ *FIRST*, 24/ *LIMIT*
- * R SET IF RANDOM FILE.
- * FETL FET LENGTH - 5.
- *
- * INITIAL ENTRY CONDITIONS.
- *
- * (X0) = ABSOLUTE FST ADDRESS, IF NONZERO.
- * (X3) = *EQDE* WORD OF EST ENTRY.
- * (X4) = (MB) LEFT SHIFTED BY -6.
- * (X5) = ABSOLUTE FET+1 ADDRESS.
- * (X6) = -17B.
- * (X7) = 0.
- * (A4) = MB.
- * (B3) = *COMSCIO* INTERNAL FUNCTION CODE (4 BITS).
- CMF SPACE 4,10
- ** CMF - COMPLETE FET.
- *
- * EXIT TO *CPCX*.
- CMF SX4 B1 SET FET COMPLETE
- IX5 X5-X4 ADDRESS OF FET+0
- SA1 IR CLEAR AUTO RECALL BIT
- ERX2 X5 READ FET+0
- BX6 X2+X4
- LX4 41
- BX7 -X4*X1
- EWX6 X5
- SA7 A1
- EQ CPCX RETURN
- OPE SPACE 4,20
- ** OPE - PROCESS NON-RANDOM OPEN.
- *
- * ENTRY (X1) = (MB2).
- *
- * EXIT TO *RPC* IF RANDOM REQUEST ON MASS STORAGE.
- * TO *RWF* IF NON-RANDOM AND REWIND REQUEST.
- * TO *CMF* IF NON-RANDOM AND NOT REWIND.
- OPE BX6 X3*X1
- NG X6,RPC IF RANDOM FILE AND MASS STORAGE
- MX7 18
- SX6 3
- IX2 X5+X6
- ERX1 X2 READ FET+4
- LX7 -24 CLEAR PRU SIZE FIELD
- SX6 B1
- BX1 -X7*X1
- LX6 24 SET PRU SIZE = 100
- BX7 X1+X6
- ERX1 X0 READ FST
- LX4 -5 EXTRACT REWIND BIT
- SX6 B1
- EWX7 X2 STORE FET+4
- BX4 -X4*X6 COMPLEMENT OF REWIND BIT
- LX6 7 CLEAR FILE WRITTEN SINCE LAST OPEN BIT
- BX1 -X6*X1
- LX6 1
- BX1 X1+X6 SET FILE OPENED BIT
- BX6 X1+X4 COMPLETE FST IF NOT REWIND
- EWX6 X0 WRITE FST
- ZR X4,RWF IF REWIND
- EQ CMF COMPLETE FET
- POD SPACE 4,10
- ** POD - PROCESS OPTICAL DISK REQUESTS
- *
- * EXIT TO *RPC* TO INITIATE OPTICAL DISK DRIVER *1OD*
- *
- POD SX7 3 INDEX INTO TABLE(TAPQ) OF PP REQUESTS
- LX7 42-0
- EQ RPC ISSUE CALL FOR *1OD*
- PMT SPACE 4,10
- ** PMT - PROCESS MAGNETIC TAPE REQUEST.
- *
- * EXIT TO *CPCX* IF REQUEST TRANSFERRED TO *MAGNET*
- * SUCCESSFULLY.
- * TO *RCR* IF *CIO* REQUEST TO BE PUT IN RECALL.
- *
- * ERROR EXIT TO *RPC* IF ERROR DETECTED.
- *
- * CALLS /MONITOR/RCC1, /MONITOR/RSC, SRC.
- * CHECK *MAGNET* AVAILABLE.
- PMT SB4 B3-/CIO/RET
- PL B4,PMT0 IF RETURN/UNLOAD/EVICT FUNCTION
- SX1 B1
- IX1 X0-X1 ABSOLUTE FNT ADDRESS
- ERX1 X1 CHECK IF TAPE ASSIGNED FOR CE DIAGNOSTICS
- LX1 59-17
- SX7 /CIOERR/ASD *ASSIGNED FOR DIAGNOSTICS*
- NG X1,RPC IF *CIO* FUNCTION NOT ALLOWED ON TAPE
- PMT0 BX4 X0 SAVE ABSOLUTE FST ADDRESS
- MX0 -12
- SX1 MTSI *MAGNET* SUBSYSTEM IDENTIFICATION
- SX7 /CIOERR/TNA *TAPES NOT AVAILABLE*
- SB3 PMT1 SET RETURN ADDRESS FOR *RSC*
- EQ /MONITOR/RSC GET *MAGNET* RA AND FL
- PMT0.1 PL B4,PMT1.1 IF RETURN/UNLOAD/EVICT FUNCTION
- EQ RPC PROCESS ERROR
- VFD 12/PMT0.1-PMT1,18/0,12/PMT0.1-PMT1,18/PMV
- PMT1 ERX1 X4 GET FST ENTRY
- NO
- LX1 24
- BX2 -X0*X1 UDT ADDRESS
- ZR X2,PMT0.1 IF NO UDT ADDRESS
- SX7 X2+/MTX/UCIC+1
- IX7 X7-X6
- SX2 X2+/MTX/UFRQ
- IX0 X3+X2 ABSOLUTE *UFRQ* ADDRESS
- + PL X7,* IF OUTSIDE *MAGNET*-S FL
- SB6 A2-STSW SAVE *MAGNET* CPA
- ERX2 X0 CHECK IF I/O REQUEST IN PROGRESS
- LX1 -24
- SX7 /CIOERR/FSQ *I/O SEQUENCE ERROR*
- NG X2,PMT0.1 IF TAPE LOST BY MAGNET
- NZ X2,RPC IF UDT ALREADY BUSY
- PMT1.1 SX7 B0+ INDICATE NO ERROR
- PL B4,RPC IF RETURN/UNLOAD/EVICT FUNCTION
- * BUILD *MAGNET* PARAMETER WORDS *UFRQ* - *UCIC*.
- SA1 MB2 GET FET LENGTH, FIRST, LIMIT
- SA3 B7+FLSW GET FL
- MX4 12
- BX7 -X4*X1
- LX3 -12
- BX1 X4*X1 FET LENGTH - 5
- SX6 /MTX/UCIC-/MTX/UFRQ
- BX3 X4*X3
- LX1 1
- IX6 X0+X6 *UCIC* ABSOLUTE ADDRESS
- BX7 X7+X3
- SA2 IR GET *CIO* CALL
- EWX7 X6 WRITE *UCIC*
- AX1 7
- MX6 -18
- SX7 X2 FET ADDRESS
- LX2 -18
- BX7 X7+X1
- BX6 -X6*X2 SKIP COUNT
- AX1 42
- LX6 24
- SB3 X1-10+5
- BX7 X7+X6
- AX1 1
- SA3 MB GET INTERNAL AND EXTERNAL FUNCTION CODES
- SB5 X1
- MX1 -12
- LX3 -24
- BX1 -X1*X3 FNT ADDRESS
- LX3 12
- SB4 X1 SAVE FNT ADDRESS
- MX1 -8
- BX6 X4*X3 INTERNAL CODE
- LX2 59-41+18
- BX7 X7+X6
- BX1 -X1*X3 EXTERNAL CODE
- LX3 -8
- MX6 -4
- LX1 -11
- BX6 -X6*X3 LEVEL NUMBER
- LX6 32
- MX3 1
- BX1 X6+X1
- BX2 X3*X2 AUTO RECALL FLAG
- BX1 X1+X2
- SA2 A3+B1 GET IN AND OUT
- SX6 X2 OUT
- AX2 24 IN
- LX4 -12
- IX2 X2-X6
- LX3 58-59
- ZR X2,PMT2 IF BUFFER EMPTY
- BX1 X1+X3
- PMT2 ERX2 X5 GET FET+1
- LX3 47-59-58+59
- BX6 -X3*X2 CLEAR RANDOM FLAG
- MX2 -30
- PL B3,PMT3 IF FET LENGTH .GE. 10D
- LX3 41-59-47+59
- BX6 -X3*X6 CLEAR EXTENDED LABEL OPTION
- PMT3 BX4 X4*X6 FET OPTIONS
- EWX6 X5
- R= X3,/MTX/UCIA-/MTX/UFRQ
- BX6 X1+X4
- ZR B5,PMT4 IF FET LENGTH .LE. 6
- SX1 5
- IX1 X5+X1 FET+6
- ERX1 X1
- BX1 -X2*X1 UNUSED BIT COUNT AND MLRS FIELD
- BX6 X6+X1
- PMT4 SA1 B7+STSW
- SA2 B6+CWQW
- IX4 X0+X3 *UCIA* ABSOLUTE ADDRESS
- IX5 X4+X3 *UCIB* ABSOLUTE ADDRESS
- ERRNZ /MTX/UCIB-/MTX/UCIA-1
- EWX7 X4 WRITE *UCIA*
- EWX6 X5 WRITE *UCIB*
- SX6 /MTX/CIO
- SX7 B4+ FNT ADDRESS
- LX6 48
- BX6 X6+X7
- SX7 20B
- EWX6 X0 WRITE *UFRQ*
- IX7 X1+X7 INCREMENT TAPE ACTIVITY
- SB3 PMT5 SET RETURN ADDRESS FOR *RCC*
- LX2 59-46
- SA7 A1
- PL X2,/MONITOR/RCC IF TO RECALL *MAGNET* CPU
- PMT5 SB5 CPCX SET EXIT ADDRESS
- JP SRC SET *RCLP* IF AUTO-RECALL SPECIFIED
- RWF SPACE 4,10
- ** RWF - REWIND FILE.
- *
- * EXIT TO *CMF*.
- RWF SX4 5
- * ENTERED HERE FOR *REWIND* ON *TE* FILE.
- * (X4) = DESIRED FST STATUS = 1.
- RWF0 ZR X0,RWF2 IF NO FST ENTRY
- MX6 12
- ERX1 X0 GET FST ENTRY
- LX6 -24
- PL X3,RWF1 IF NOT MASS STORAGE
- BX2 X6*X1 CURRENT TRACK
- R= X3,FSMS SET CURRENT SECTOR = FIRST SECTOR
- ZR X2,RWF1 IF FILE NOT USED
- BX2 -X6*X1 SET CURRENT TRACK = FIRST TRACK
- LX1 -12
- BX1 X6*X1 FIRST TRACK
- BX1 X2+X1
- LX6 -12
- BX1 -X6*X1 SET CURRENT SECTOR = FIRST SECTOR
- LX3 12
- BX1 X1+X3
- RWF1 MX7 54
- BX6 X7*X1 SET EOR STATUS IN FST
- BX6 X6+X4
- EWX6 X0 SET FILE NOT BUSY
- RWF2 SA2 MB2 GET RANDOM FILE FLAG
- PL X2,CMF IF NOT RANDOM FILE, COMPLETE FET
- SX1 B1
- LX1 30
- IX3 X5+X4 FET+6
- ERX2 X3 GET FET+6
- MX7 -30
- BX7 -X7*X2
- BX7 X7+X1
- EWX7 X3
- EQ CMF COMPLETE FET
- TIO SPACE 4,10
- ** TIO - TERMINAL I/O.
- *
- * EXIT TO *RPC* TO INITIATE TERMINAL I/O DRIVER *1MI*.
- * TO *RWF* IF WRITE WITH NO DATA.
- * TO *ROC1* TO ROLLOUT DETACHED INTERACTIVE USER JOB
- * REQUESTING I/O. *RPPM* REQUEST COMPLETED IF PP
- * REQUESTED INTERACTIVE I/O.
- *
- * ERROR EXIT TO *RPC* TO INITIATE *1MS*.
- TIO SA2 B7+TFSW CHECK JOB CONNECTION STATUS
- MX1 12
- BX1 X1*X2
- LX1 12
- CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- TA2 X2+JSNE,EJT GET JOB EJT ENTRY
- LX2 -7
- BX3 -X6*X2
- SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
- ERRNZ NICS CODE ASSUMES *NICS* = 0
- SX4 X3-DTCS
- SA1 B7+TIOW CHECK I/O IN PROGRESS
- SA2 B7+TINW
- BX6 X2
- AX6 18
- BX6 X1+X6
- SX6 X6
- ZR B3,TIO2 IF TERMINAL READ REQUEST
- * PROCESS TERMINAL WRITE REQUEST.
- ZR X3,TIO1.1 IF JOB NOT INTERACTIVE
- SA2 A4+B1 READ MB1
- SX7 X2 *OUT*
- AX2 24 *IN*
- BX2 X2-X7
- ZR X2,RWF IF WRITE WITH NO DATA
- ZR X4,TIO3 IF DETACHED JOB
- NZ X6,TIO6 IF TIOW/TINW BUSY
- SA2 IR
- SX4 X2 FET ADDRESS
- BX6 X1+X4 SET OUTPUT FET POINTER
- SA6 A1+ REWRITE TIOW
- * EXIT TO *RPC* TO INITIATE TERMINAL I/O DRIVER *1MI*.
- TIO1 ERX3 X0 SET FST NOT BUSY
- SX7 B1
- BX6 X3+X7
- EWX6 X0
- LX7 42 SET *1MI* FAST LOAD TABLE INDEX
- EQ RPC REQUEST TERMINAL I/O DRIVER
- * PROCESS TERMINAL OUTPUT BY NON-INTERACTIVE JOB.
- TIO1.1 ERX3 X0 SET FST NOT BUSY
- SX7 B1
- BX6 X3+X7
- EWX6 X0
- IX6 X5+X7 SET OUT = IN
- ERX3 X6 READ IN
- IX7 X6+X7
- BX6 X3
- EWX6 X7 WRITE OUT
- EQ CMF COMPLETE FET
- * PROCESS TERMINAL READ REQUEST.
- TIO2 ZR X3,RPC IF JOB NOT INTERACTIVE
- ZR X4,TIO3 IF DETACHED JOB
- NZ X6,TIO6 IF TIOW/TINW BUSY
- SA1 IR SET INPUT FET ADDRESS
- SX6 X1
- LX6 18
- BX6 X2+X6
- SA6 A2 REWRITE TINW
- EQ TIO1 INITIATE TERMINAL I/O
- * PROCESS DETACHED JOB TERMINATION.
- TIO3 SA1 B7+EOJW JOB TERMINATION OPTIONS
- MX6 -3
- LX1 0-57
- BX1 -X6*X1
- SB4 X1
- SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
- NE B4,B1,RPC IF DETTACHED JOB TO BE TERMINATED
- ERRNZ SUJT-1 CODE DEPENDS ON VALUE
- ERX3 X0 SET FST NOT BUSY
- SX7 B1
- BX7 X3+X7
- EWX7 X0
- SB3 TIO4 RETURN ADDRESS FOR *AQR*
- SA1 IR GET *CIO* CALL TO BE QUEUED
- SX7 DTSR JOB SUSPENSION REASON CODE
- BX6 X1
- LX7 -12
- SA7 /MONITOR/AQRA SET PARAMETER WORD FOR *AQR*
- EQ /MONITOR/REC2 QUEUE *CIO* REQUEST
- * ASSURE DROP OPTION ON *RPPM* FUNCTION REQUEST.
- TIO4 TX1 10B,SP
- MX0 -18
- SX2 A5
- BX2 -X0*X2
- IX1 X2-X1
- SX5 B1+
- ERRNZ ROSU-10B CHECK *ROCM* SUSPENSION POSITION
- LX5 39-0+12
- SB6 -1 INDICATE *CPUCIO* CALL TO *ROCM*, *DCPM*
- BX2 X2-X2 REQUIRED BY *ROCM*
- PL X1,/MONITOR/ROC4 IF NOT *RPPM* REQUEST
- SX7 B1
- SA1 A5 SELECT DROP OPTION ON *RPPM* REQUEST
- LX7 36 *RPPM* COMPLETION STATUS
- LX1 59-37
- PL X1,TIO5 IF NO DROP OPTION SELECTED
- SX7 4000B+DPPM FORCE *DPPM* FUNCTION REQUEST
- LX7 48
- TIO5 SA7 A5 REWRITE OUTPUT REGISTER
- EQ /MONITOR/ROC4 ROLLOUT JOB
- TIO6 SA1 IR SET TIOW/TINW BUSY IN REQUEST
- SX7 B1
- LX7 35-0
- BX7 X1+X7
- SA7 A1 REWRITE INPUT REGISTER
- EQ TIO1 START UP *1MI*
- ENDBLK
- BLOCK MCE,(MEMORY CLEARING ROUTINES.)
- MCE SPACE 4,10
- ** THIS BLOCK IS LOADED IF THE MEMORY CLEARING OPTION
- * IS ENABLED IN THE IPRDECK. THE BASIC PURPOSE IS TO
- * CLEAR STORAGE UPON RELEASE IN ADDITION TO UPON ASSIGMENT.
- CST SPACE 4,20
- ** CST - EXCEPTION PROCESSOR FOR SPECIAL MEMORY CLEAR REQUEST.
- *
- * THIS ROUTINE IS CALLED TO BUILD THE *CSTM* REQUEST FROM THE
- * *RSTM* REQUEST THAT IS STORED IN MB+5.
- *
- * ENTRY (MB+5) = 12/ RSTM, 12/ NEW FL, 3/,1/NFL REQUEST
- * 7/,1/ ECS REQUEST, 24/
- *
- * EXIT TO /MONITOR/CST0 WITH REBUILT REQUEST -
- * (X5) = 12/ CSTM, 4/1, 1/ECS REQUEST, 1/1,
- * 18/ WORD COUNT, 24/ FWA
- *
- * USES X - ALL.
- * A - 1, 2, 3.
- * B - 3.
- *
- * CALLS /CME/CSM, /0CME/CSM.
- CST SA2 A5+6 GET *MB+5*
- SA3 B7+ECSW GET ECS FL CONTROL
- MX0 -12
- MX5 1
- LX2 59-24
- BX1 X5*X2 EXTRACT ECS REQUEST FLAG
- NG X2,CST1 IF CLEARING ECS FL
- SA3 B7+FLSW GET CM FL CONTROL
- LX2 59-32-59+24
- NG X2,CST4 IF CLEARING NFL
- LX2 59-24-59+32
- CST1 LX2 24-59+24
- BX6 -X0*X2 NEW FL
- BX4 -X0*X3 OLD FL
- IX4 X4-X6 WORD COUNT
- CST2 LX4 24
- LX1 43-59
- LX5 42-59
- BX6 X4+X6 START BUILDING REQUEST
- BX5 X1+X5
- NZ X1,CST3 IF ECS FL
- LX6 6 MULTIPLY REQUEST BY 100B
- CST3 BX1 X5+X6 SET RELATIVE/ECS REQUEST FLAG(S)
- SX6 CSTM*100B+4B SET UP FOR RE-ENTRY
- LX6 -18
- BX5 X6+X1
- BX1 X5
- EQ /MONITOR/CST0 RESTART *CSTM* PROCESSOR
- CST4 LX2 32-59+24
- LX3 12
- BX4 -X0*X2 NEW NFL
- BX6 -X0*X3 OLD NFL
- IX4 X6-X4 WORD COUNT
- BX6 -X6 COMPLEMENT FWA
- LX6 6
- MX3 -24
- BX6 -X3*X6
- LX6 -6
- EQ CST2 COMPLETE BUILDING OF REQUEST
- CST5 LX4 59-44-59+42
- NO
- TPL X4,(/CME/CSM,CME,/0CME/CSM) IF NOT SPECIAL REQUEST
- SB3 /MCE/CST6 *CSM* RETURN ADDRESS
- TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
- CST6 SA1 A5+6 GET *RSTM* REQUEST
- SX7 B1
- LX7 29
- BX7 X7+X1 SET COMPLETION BIT
- EQ /MONITOR/PPR1 EXIT
- CST SPACE 4,15
- ** CSTX - EXIT PROCESSOR FOR PROGRAM MODE *CSTM*.
- *
- * THIS PROCESSOR IS CALLED TO CHECK SPECIFICATION OF THE
- * SPECIAL REQUEST OPTION TO DETERMINE IF THE *RSTM* REQUEST
- * THAT MIGHT BE IN *MB+5* MUST BE RESTORED.
- *
- * ENTRY (X7) = 0.
- *
- * EXIT TO /PROGRAM/PRG1
- *
- * USES X - 3, 7.
- * A - 3.
- CSTX SA3 A5 CHECK REQUEST OPTION(S)
- LX3 59-44
- PL X3,/PROGRAM/PRG1 IF NOT SPECIAL REQUEST
- SA3 A5+6 GET MB+5
- SX7 B1
- LX7 29
- BX7 X7+X3 SET REQUEST COMPLETED
- EQ /PROGRAM/PRG1 EXIT
- CUE SPACE 4,15
- ** CUE - CLEAR USER ECS.
- *
- * THIS ROUTINE IS CALLED TO CLEAR USER ECS IN ORDER
- * TO MAINTAIN SECURED MEMORY (MEMORY CLEARING ENABLED).
- *
- * ENTRY (X1) = WORD COUNT.
- * (X2) = ABSOLUTE FWA.
- * (B3) = RETURN ADDRESS.
- *
- * USES X - 0, 1, 4, 6.
- * A - 0, 4.
- * B - 4.
- CUE TSX0 (LCCB-1,CP176,1-1)
- SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
- NZ X0,CUE1 IF NOT CYBER 990 TYPE MAINFRAME
- SA4 ECRL GET RAE FOR ZERO UEM BLOCK
- LX4 0-12
- MX0 -24
- BX0 -X0*X4
- TLX0 9-21+60,UESC
- CUE1 SA0 /PROGRAM/UBUF SET FWA OF CM BUFFER
- TLX0 (0,CP176,21)
- SB4 /PROGRAM/MECB SET WORD COUNT
- TLX0 (3,ESM170,0)
- SX6 A0
- TLX0 (4,UEM180,0)
- LX6 30
- BX0 X0+X6
- + RE B4 CLEAR CM BUFFER
- * NOTE - HALF EXIT WILL BE TAKEN ON EXTENDED MEMORY READ
- * BECAUSE OF OUT-OF-RANGE ADDRESS SPECIFIED TO CAUSE
- * ZEROES TRANSFER TO CM.
- SB0 0 (HALF-EXIT EXPECTED)
- BX0 X6+X2 ECS ADDRESS
- SX4 B4+ ADDRESS INCREMENT/DECREMENT
- CUE2 WUE PROGRAM CLEAR USER EM
- * SB0 0 (IGNORE HALF-EXIT)
- + IX1 X1-X4 DECREMENT WORD COUNT
- IX0 X0+X4 INCREMENT ECS ADDRESS
- NZ X1,CUE2 IF NOT COMPLETE
- JP B3 RETURN
- MEC SPACE 4,15
- ** MEC - EXTENSION FOR USER ECS STORAGE MOVE.
- *
- * THIS PROCESSOR DETERMINES IF VACATED EXTENDED MEMORY FIELD
- * LENGTH MUST BE CLEARED FOLLOWING A STORAGE MOVE.
- *
- * ENTRY (B7) = CP/PCP ADDRESS.
- *
- * EXIT TO /PROGRAM/MEC2.1
- *
- * USES X - 0, 1, 2, 3, 4.
- * A - 1, 2, 3.
- * B - 3.
- *
- * CALLS CUE.
- MEC TSA3 (UEML,UEM,ZERL)
- SA1 SMRL
- SA2 B7+ECSW
- SB3 /PROGRAM/MEC2.1 *CUE* RETURN ADDRESS
- TX0 B7+CPAS,-SCA
- MX4 -12
- LX3 12
- BX3 -X4*X3 UEM BASE ADDRESS IF UEM PRESENT
- LX4 24
- BX4 -X4*X1 DIRECT MOVE HOLE POINTER
- NZ X0,MEC1 IF NOT LAST CONTROL POINT
- PL X1,MEC2 IF UPWARD MOVE
- MEC1 ZR X4,/PROGRAM/MEC2.1 IF NOT DIRECT MOVE
- BX1 X2
- LX1 48 WORD COUNT = FLE
- MEC2 AX2 RSHF
- MX0 -RMSK
- AX1 48
- BX2 -X0*X2
- LX3 9
- TLX2 9,UESC
- TLX1 9,UESC WORD COUNT
- IX2 X2+X3 OLD RA = FWA
- EQ CUE CLEAR USER ECS
- MST SPACE 4,15
- ** MST - EXTENSION FOR MEMORY CLEARING AFTER STORAGE MOVE.
- *
- * THIS PROCESSOR DETERMINES IF VACATED FIELD LENGTH MUST BE
- * CLEARED FOLLOWING A STORAGE MOVE.
- *
- * ENTRY (B7) = CP/PCP ADDRESS.
- *
- * EXIT TO /PROGRAM/MST3.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 1, 2.
- * B - 3.
- *
- * CALLS /CME/CSM, /0CME/CSM.
- MST SA2 B7+FLSW
- SA1 SMRL
- SB3 MST2 *CSM* RETURN ADDRESS
- SX6 B7-CPAS
- TX7 B7+CPAS,-SCA
- MX4 -12
- BX3 -X4*X2 FL
- LX4 24
- ZR X6,MST1 IF CP 1 MOVING
- BX4 -X4*X1 DIRECT MOVE HOLE POINTER
- NZ X7,MST0.1 IF NOT LAST CP MOVING
- PL X1,MST0.2 IF UPWARD MOVE
- MST0.1 ZR X4,MST2 IF NOT DIRECT MOVE
- LX3 48
- IX1 X2+X3 WORD COUNT = (FL + NFL)
- MST0.2 AX1 48
- AX2 RSHF
- MX0 -RMSK
- LX1 6
- BX3 -X0*X2 RA/100B
- AX2 48-RSHF NFL/100B
- IX2 X3-X2
- LX2 6 FWA TO CLEAR (RA - NFL)
- TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
- MST1 PL X1,MST2 IF NOT DOWNWARD MOVE
- AX1 48
- AX2 RSHF
- LX1 6
- MX0 -RMSK
- BX1 -X1 WORD COUNT
- BX2 -X0*X2 RA/100B
- IX2 X2+X3 (LWA+1)/100B
- LX2 6
- IX2 X2-X1 (LWA+1) - WORD COUNT
- TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
- MST2 TA1 CMMS,SDA PRESET MOVE COUNT FOR REENTRY
- EQ /PROGRAM/MST3 COMPLETE STORAGE MOVE
- PRS SPACE 4,20
- ** PRS - PRESET EXTENSION TO CLEAR MEMORY AT DEADSTART.
- *
- * THIS ROUTINE IS CALLED TO CLEAR ALL UNASSIGNED FIELD LENGTH
- * DURING DEADSTART IF MEMORY CLEARING IS ENABLED.
- *
- * ENTRY (PRSA) = RECOVERY LEVEL.
- * (A0) = LWA+1 OF *CPUMTR*.
- *
- * EXIT (0) = LWA+1 OF *CPUMTR* (TO BE PICKED UP BY *STL*).
- * TO *CPSL* (IN LOW CORE).
- *
- * USES X - 0, 1, 2, 3, 4, 6.
- * A - 0, 1, 2, 3, 4, 6.
- * B - 3, 7.
- *
- * CALLS /CME/CSM, /0CME/CSM, /MCE/CUE.
- PRS SA2 PRSA GET RECOVERY LEVEL
- SX6 A0+77B LWA+1 OF *CPUMTR* (FWA TO CLEAR)
- SA1 1*200B+FLSW
- AX6 6
- SX2 X2-3
- NZ X2,PRS1 IF NOT LEVEL 3 RECOVERY
- MX0 -12
- BX6 -X0*X1 FL/100B
- AX1 RSHF
- MX0 -RMSK
- BX1 -X0*X1
- IX6 X1+X6 RA + FL
- PRS1 SA6 PRSB START ADDRESS
- SB3 PRS3 *CSM* RETURN ADDRESS
- PRS2 SA1 A1+200B NEXT CONTROL POINT
- SA2 PRSB CURRENT ADDRESS
- MX0 -RMSK
- AX1 RSHF
- BX4 -X0*X1 RA/100B
- AX1 48-RSHF NFL/100B
- IX4 X4-X1 FWA OF USER FL (RA - NFL)
- IX1 X4-X2 WORD COUNT
- LX2 6
- LX1 6
- ZR X1,PRS3 IF NO MEMORY TO CLEAR
- TPL X1,(/CME/CSM,CME,/0CME/CSM) IF NO OVERLAP
- EQ PRS4 BYPASS UPDATE OF CURRENT ADDRESS
- PRS3 SA1 A1 FIELD LENGTH CONTROL
- MX0 -12
- BX3 -X0*X1 FL/100B
- AX1 RSHF
- MX0 -RMSK
- BX1 -X0*X1 RA/100B
- IX6 X1+X3
- SA6 A2 UPDATE CURRENT ADDRESS
- PRS4 SX1 A1+
- TX1 X1-FLSW,-SCA
- NZ X1,PRS2 IF NOT LAST USER CONTROL POINT
- TEQ (/MCE/PRS5,UEC,/MCE/PRS9) PROCESS USER ECS
- PRS5 SA2 PRSA
- SA1 1*200B+ECSW
- SB7 A0 SAVE (A0)
- MX0 -12
- SX3 X2-3
- NZ X3,PRS9 IF NOT LEVEL 3 RECOVERY
- BX2 -X0*X1 FL/*UEBS*
- AX1 RSHF
- MX0 -RMSK
- BX1 -X0*X1 RA/*UEBS*
- IX6 X2+X1
- SA6 PRSB START ADDRESS
- SB3 PRS7 *CUE* RETURN ADDRESS
- PRS6 SA1 A1+200B NEXT CONTROL POINT
- SA2 PRSB CURRENT ADDRESS
- MX0 -RMSK
- AX1 RSHF
- BX4 -X0*X1 RA/*UEBS*
- IX1 X4-X2 WORD COUNT
- TSA3 (UEML,UEM,ZERL)
- MX0 -12
- AX3 48
- BX3 -X0*X3 UEM BASE ADDRESS IF UEM PRESENT
- LX3 9
- TLX2 9,UESC
- IX2 X2+X3
- TLX1 9,UESC
- ZR X1,PRS7 IF NO MEMORY TO CLEAR
- PL X1,CUE IF NO OVERLAP
- EQ PRS8 BYPASS UPDATE OF CURRENT ADDRESS
- PRS7 SA1 A1 FIELD LENGTH CONTROL
- MX0 -12
- BX3 -X0*X1 FL/1000B
- AX1 RSHF
- MX0 -RMSK
- BX1 -X0*X1 RA/1000B
- IX6 X1+X3
- SA6 A2 UPDATE CURRENT ADDRESS
- PRS8 SX1 A1+
- TX1 X1-ECSW,-SCA
- NZ X1,PRS6 IF NOT LAST CONTROL POINT
- SA0 B7+ RESTORE (A0)
- PRS9 SX6 A0 SET LWA+1 OF *CPUMTR*
- SA6 B0
- EQ CPSL BRANCH TO STOP
- PRSA BSS 1 RECOVERY LEVEL
- PRSB BSS 1 CURRENT ADDRESS
- ENDBLK
- BLOCK NVE,(NVE ROUTINES.)
- SPACE 4,10
- MT EQU /MONITOR/MT
- XJ1 SPACE 4,15
- ** XJ1 - EXCHANGE PROCESSOR.
- *
- * ENTRY (B2) = EXCHANGE PACKAGE ADDRESS.
- *
- * EXIT (X0) .LT. 0 IF EXCHANGE NEEDED.
- * TO */CME/XJ3* TO EXCHANGE TO PROGRAM.
- *
- * USES X - 1, 2, 6, 7.
- * A - 1, 2, 6, 7.
- * B - 3.
- XJ1 BSS 0 ENTRY
- SB3 A0+
- NZ B3,/CME/XJ3 IF SECOND CPU
- TB3 A0,DSCB
- SA1 B3+/DST/D7JP JOB PRIORITY
- SA2 B3+/DST/D8JP TASK PRIORITY
- MX7 -16
- BX6 X6-X6
- ZR X2,/CME/XJ3 IF NO TASK PRESENT
- BX1 -X7*X1
- SA6 /MONITOR/IP CLEAR PRIORITY INCREASE
- RC X6 READ MICROSECOND COUNTER
- AX6 14
- BX2 -X7*X2
- MX7 -4
- BX6 -X7*X6 EXTRACT SUB-PRIORITY
- BX1 X1+X6
- IX7 X1-X2 COMPARE PRIORITIES
- PL X7,/CME/XJ3 IF NO EXCHANGE NEEDED
- AX2 8
- ZR X2,/CME/XJ3 IF NO EXCHANGE NEEDED
- SA1 PPXL
- ZR X1,XJ11 IF NO PP EXCHANGE REQUESTED/PENDING
- SA1 XJ1A RESIDUAL COUNTDOWN
- NZ X1,XJ12 IF NOS/VE BYPASS LIMIT NOT REACHED
- SA2 VEBL NOS/VE BYPASS LIMIT
- MX6 -12
- BX6 -X6*X2
- SA6 A1 INITIALIZE COUNTDOWN
- XJ11 MX0 1
- JP /CME/XJ3 EXCHANGE
- XJ12 SX6 X1-1 DECREMENT COUNTDOWN
- SA6 A1
- JP /CME/XJ3 NO EXCHANGE TO NOS/VE FOR NOW
- XJ1A CON 0 NOS/VE BYPASS COUNTDOWN
- SVS SPACE 4,15
- ** SVS - SET SCHEDULING DATA.
- *
- * ENTERED AT *SVS1* FROM */MONITOR/SPR*.
- *
- * EXIT WORD *D7JP* IN *DSCB* SET UP.
- * 24/ JSN,12/ EJT ORDINAL,8/ TRAP VALIDATION,16/PRIORITY
- * (*MLST*) MOVED TO *NVE* BUFFER IF DATA TO BE MOVED.
- *
- * USES X - 0, 2, 4, 5, 6, 7.
- * A - 2, 4, 6, 7.
- * B - 3, 4, 5, 6.
- SYSCOM
- SVS BSS 0 ENTRY
- SA4 B2+CWQW GET CPU PRIORITY
- SB6 /MONITOR/BNJ20 SET *BNJ* RETURN ADDRESS
- UX4,B5 X4 UNPACK CPU PRIORITY AND FLAGS
- SX5 B5+ SET CPU PRIORITY
- MX0 -12
- * ENTRY FROM */MONITOR/SPR*.
- * (B6) = RETURN ADDRESS.
- * (X5 BITS 3 - 9) = CPU PRIORITY.
- * (X0) = 77...770000B.
- SVS1 BSS 0 ENTRY
- SB3 A0+
- NZ B3,/MONITOR/RB6 IF SECOND CPU
- TB3 A0,DSCB
- SA2 /MONITOR/IP SUB-PRIORITY
- SA4 B7+JCIW GET SUBSYSTEM ID
- SX6 X2+
- AX4 24-0
- SA2 SSTL
- BX7 -X0*X4
- SX7 X7-NVSI NVE SUBSYSTEM ID
- MX0 3
- LX2 59-44
- ZR X7,SVS2 IF NVE SUBSYSTEM
- NG X2,SVS4 IF HARDWARE FAULT INJECTION IS DISABLED
- SVS2 LX0 16-57 SET *V1*, *V2*, AND *V3* BITS
- BX6 X0+X6
- NZ X7,SVS4 IF NOT NVE SUBSYSTEM
- TA2 NVESS *SSCT* WORD CONTAINING *NVE* BYTE
- TLX2 0,NVEOS
- PL X2,SVS4 IF *NVE* NOT YET ACTIVATED
- SA2 B3+/DST/D7ST GET POINTER TO *MLST*
- MX0 -18
- LX2 -18
- BX7 -X0*X2 *MLST* ADDRESS
- ZR X7,SVS4 IF NO *MLST*
- SA4 X7 PICK UP THE FLAG/COUNT WORD
- ZR X4,SVS4 IF NO ACTIVE ENTRIES IN *MLST*
- SX0 MLBR *NVE* BUFFER POINTER
- SA2 B2+B1 GET RA FROM EXCHANGE PACKAGE
- AX2 36-0
- IX0 X0+X2
- ERX2 X0 PICK UP MESSAGE LINK BUFFER POINTER
- MX0 -18
- BX0 -X0*X2
- ZR X0,SVS4 IF NO BUFFER ADDRESS
- SX7 X4+B1 TOTAL WORDS TO TRANSFER
- SA2 B2+2 GET FLC FROM EXCHANGE PACKAGE
- AX2 36-0
- IX2 X2-X7 SUBTRACT OUT TRANSFER WORD COUNT
- IX2 X2-X0 SUBTRACT OUT BUFFER ADDRESS
- NG X2,SVS4 IF BUFFER EXTENDS BEYOND FL
- SA2 B2+B1 GET RA AGAIN
- SB4 X7 WORDS TO TRANSFER
- AX2 36-0
- BX7 X4
- IX0 X0+X2 ABSOLUTE BUFFER ADDRESS
- EWX7 X0 ACTIVE WORD COUNT TO FIRST WORD OF BUFFER
- BX7 X7-X7
- SA7 A4 CLEAR ACTIVE WORD COUNT
- SVS3 SB4 B4-B1 DECREMENT LOOP COUNTER
- SA2 B4+A4 GET WORD FROM *MLST*
- BX7 X2
- SX2 B4
- IX2 X2+X0
- EWX7 X2 STORE WORD IN *NVE* BUFFER
- GT B4,B1,SVS3 IF MORE ACTIVE WORDS TO MOVE
- SVS4 SA2 B7+SSCW CHECK FOR *NVE* CONNECTION
- SB5 X5-IDCS*10B-10B
- NG B5,SVS8 IF IDLE PACKAGE
- AX5 6 FORM NORMALIZED PRIORITY
- MX0 -12
- SVS5 ZR X2,SVS6 IF NO CONNECTIONS
- BX7 -X0*X2 CHECK NEXT BYTE
- BX2 X0*X2
- LX7 -6
- SX7 X7+LSSI-NVSI
- LX2 12
- NZ X7,SVS5 IF JOB NOT CONNECTED TO *NVE*
- SX2 B1 SET *V3* VALIDATION BIT
- LX2 18-0
- SVS6 SX7 X5-MPRS/10B
- LX5 8
- BX6 X6+X2 ADD VALIDATION BIT
- BX6 X6+X5 ADD PRIORITY
- ZR X7,SVS8 IF SYSTEM CP OR STORAGE MOVE PACKAGE
- NZ X5,SVS7 IF NOT MAINTENANCE JOB
- SX4 1S8 SET PRIORITY OF 1
- BX6 X6+X4
- SVS7 SA2 B7+TFSW FORM UNIQUE ID FROM JSN AND EJT ORDINAL
- AX2 48
- MX7 -12
- BX7 -X7*X2
- BX2 X7
- LX7 -36
- BX6 X7+X6 ADD EJT ORDINAL
- CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
- TA4 X4+JSNE,EJT READ EJT
- MX0 6*4
- BX4 X0*X4
- BX6 X4+X6 ADD JSN
- SVS8 SA6 B3+/DST/D7JP WRITE *D7JP* WORD
- JP B6 RETURN
- CPT SPACE 4,15
- ** CPT - EXTENSION FOR *NVE*.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (B6) = 200B IF ENTERED AT *CPT1* (*BNJ* CALL).
- *
- * EXIT TO /MONITOR/CPT1.
- * TO /CME/CPT1 IF SECOND CPU.
- * (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
- * (MT+A0) = 0 IF RA+1 PROCESS AND NOT CPU SWITCH.
- * (MT+A0) = -ACAD2 IF NOT RA+1 PROCESS OR IF CPU SWICH.
- * (CL+CPBT+A0) RESET TO CURRENT CLOCK.
- * (CL+CMST+A0) UPDATED.
- *
- * USES X - 0, 1, 2, 3, 5, 6, 7.
- * A - 1, 3, 6, 7.
- * B - 4, 6.
- CPT BSS 0 ENTRY
- SB6 B0+ DO NOT SET CPU SWITCH FLAG
- * ENTRY FROM /MONITOR/*BNJ*.
- CPT1 BSS 0 ENTRY
- SX1 A0+
- NZ X1,/CME/CPT1 IF SECOND CPU
- SA1 CL+CMST+A0 GET MONITOR MODE PARAMETERS
- SA3 MT+A0 GET MONITOR MODE ACCUMULATED TIME
- RT X0,40B READ AND CLEAR PIT
- RC X6 READ CLOCK
- UX1,B4 X1
- SB6 B4+B6 SET CPU SWITCH STATUS
- PX7 B6,X6 SET FUNCTION WITH STATUS AND NEW BASE TIME
- SA7 A1 UPDATE MONITOR MODE STATUS
- SX7 B0 SET TO CLEAR MONITOR MODE ACCUMULATOR
- ZR B6,CPT3 IF RA+1 PROCESS AND NOT CPU SWITCH
- ERRNZ CCPF CODE DEPENDS ON VALUE
- TX7 -ACAD2 - (EXCHANGE JUMP TIME)
- ZR B4,CPT3 IF RA+1 PROCESS
- * COMPUTE MONITOR MODE TIME SINCE LAST BASE TIME.
- PL X3,CPT2 IF *MT* NOT PREVIOUSLY ADJUSTED BY *CPT*
- SX3 B0+
- CPT2 IX5 X6-X1 MONITOR MODE TIME INCREMENT
- IX3 X3+X5 ADD INCREMENT TO ACCUMULATED TIME
- IX3 X3-X7 ADD EXCHANGE JUMP TIME
- * COMPUTE PROGRAM MODE CPU TIME USED.
- *
- * IF MONITOR MODE WAS NOT ENTERED TO PROCESS AN RA+1 CALL OR IF
- * A CPU SWITCH IS PENDING, THE MONITOR MODE ACCUMULATOR FOR THE
- * CPU WILL BE RESET WITH A VALUE OF *-ACAD2*. SINCE EXIT FROM
- * MONITOR MODE ADDS AN INCREMENT OF *ACAD* (TWICE THE VALUE OF
- * *ACAD2*) TO THE ACCUMULATOR, THE RESULT IN THIS CASE WILL BE
- * TO ACCOUNT ONLY FOR THE EXCHANGE JUMP BACK TO PROGRAM MODE.
- * *CPT* WILL ALREADY HAVE ACCOUNTED FOR THE EXCHANGE JUMP INTO
- * MONITOR MODE.
- CPT3 MX2 28
- SA7 A3 RESET MONITOR MODE ACCUMULATOR
- BX0 -X2-X0 170 MODE TIME USED
- IX0 X0-X3 DEDUCT MONITOR MODE TIME
- SA6 CL+CPBT+A0 RESET PROGRAM MODE BASE TIME
- PL X0,/MONITOR/CPT1 IF NO UNDERFLOW ON ADJUSTMENT
- SX0 B0
- EQ /MONITOR/CPT1 ENTER MAIN *CPT* PROCESSOR
- AVP SPACE 4,15
- ** AVP - ASSIGN VIRTUAL PP.
- *
- * ENTRY (X6) = PP CALL.
- * (B4) = -1 (PRIORITY PP REQUEST).
- *
- * EXIT TWO COPIES OF *1VP* ARE ASSIGNED. THESE MUST BE IN
- * PARTNER PP-S. IF NO SUCH PAIR IS AVAILABLE, THEN NO
- * ASSIGNMENT IS MADE.
- *
- * USES X - 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 6, 7.
- * B - 3, 5.
- *
- * CALLS APQ.
- AVP SA2 PPAL DETERMINE IF A PARTNER PAIR IS FREE
- SB5 7
- SX4 B1 INITIALIZE MASK
- BX7 X4
- LX4 45-0 FIRST BANK = PP 2
- LX7 30-0 SECOND BANK = PP 22
- AVP1 BX3 X4+X7
- BX1 X3*X2
- BX1 X1-X3
- SB5 B5-B1
- ZR X1,AVP3 IF PAIR IS AVAILABLE
- LX4 -1 ADVANCE FIRST BANK PP
- LX7 1 ADVANCE SECOND BANK PP
- PL B5,AVP1 IF MORE PP-S TO CHECK
- SX7 B0+
- EQ /MONITOR/PPR1 SET REPLY
- AVP3 SB3 AVP4 *APQ* RETURN ADDRESS
- SA7 /MONITOR/APQC SET PP TO SELECT
- BX7 X4 SAVE PARTNER PP MASK
- SA7 AVPA
- MX4 5 ADD CONTROL POINT TO PP CALL
- LX4 40-59
- SX7 B7
- LX7 36-7
- BX6 -X4*X6
- BX6 X7+X6
- SA6 AVPB SAVE PP CALL FOR SECOND ASSIGNMENT
- EQ /MONITOR/APQ1.1 ASSIGN FIRST PP
- AVP4 BX7 X7-X7
- NG X1,/MONITOR/PPR1 IF LIBRARY LOCKED
- BX7 X1
- SA7 AVPC SAVE INPUT REGISTER ADDRESS
- SA1 AVPB GET PP CALL
- BX6 X1
- SA2 AVPA GET SECOND PP SELECTION MASK
- BX7 X2
- SA7 /MONITOR/APQC
- SB3 AVP5 *APQ* RETURN ADDRESS
- SB4 -1
- EQ /MONITOR/APQ1.1 ASSIGN SECOND PP
- AVP5 LX1 24 POSITION SECOND *IR* ADDRESS
- SA2 AVPC ADD FIRST *IR* ADDRESS
- LX2 36
- BX7 X1+X2
- EQ /MONITOR/PPR1 STORE OUTPUT REGISTER
- AVPA CON 0 SECOND PP SELECTION MASK
- AVPB CON 0 PP CALL
- AVPC CON 0 FIRST PP INPUT REGISTER ADDRESS
- UAD SPACE 4,10
- ** UAD - *UADM* EXTENSION FOR *FRAS* SUBFUNCTION.
- *
- * ENTRY (X0) = MASK(48).
- * (X2) = 12/ FRAS, 48/ DESIRED *FRC* VALUE.
- *
- * EXIT (MS, ST - ST+1) UPDATED.
- * (/CME/RTCA - /CME/RTCC) UPDATED.
- UAD MX6 0 RELEASE *1MB* TO NOTIFY *DFT* OF REQUEST
- LX0 -12
- SA6 A5+
- BX7 X0*X2 EXTRACT DESIRED *FRC* VALUE
- BX4 X4-X4
- RC X5 READ CURRENT *FRC* VALUE
- IX2 X7-X5 CALCULATE *FRC* INCREMENT
- * WAIT FOR *FRC* TO BE ADVANCED BY *DFT*.
- UAD1 RC X3 READ CURRENT *FRC* VALUE
- IX1 X3-X7
- NG X1,UAD1 IF *FRC* UPDATE HAS NOT OCCURRED YET
- * ADJUST *FRC*-BASED VALUES.
- SA1 CL+CPBT UPDATE CPU BASE TIME(S)
- IX6 X1+X2
- SA3 A1+B1
- SA1 CL+CMST+A0 UPDATE MONITOR MODE BASE TIME
- IX7 X3+X2
- SA6 A3-B1
- IX6 X1+X2
- SA6 A1
- SA1 /CME/RTCA UPDATE *RTC* PARAMETERS IN *CME* BLOCK
- SA7 A3
- IX6 X1+X2
- SA3 A1+B1
- IX7 X3+X2
- SA6 A1
- SA7 A3
- SA1 RTCL GET MTR-UPDATED *RTCL* IMAGE
- BX6 X1
- SA6 A7+B1
- EQ /MONITOR/PPRX EXIT - *OR* PREVIOUSLY CLEARED
- ENDBLK
- BLOCK PROBE,(DATA GATHERING PROBE.)
- SPACE 4,10
- *CALL COMSPDT
- ACE SPACE 4,10
- ** ACE - SET ALTERNATE CPU EXCHANGE.
- *
- * ENTRY (B3) = EXIT ADDRESS.
- * (X0) = 1 IF BIT TO BE SET.
- * (X0) = 0 IF BIT TO BE CLEARED.
- * (X1) = REQUEST WORD.
- * (A1) = ADDRESS OF REQUEST WORD.
- *
- * EXIT ENTRY CONDITIONS PRESERVED.
- * *TACE* TABLE UPDATED.
- * EXIT TO /MONITOR/SPR.
- *
- * USES A - 3, 6.
- * X - 3, 6.
- ACE SA3 PRBP
- PL X3,ACE1 IF *PROBE* TABLES INTERLOCKED
- SX6 A0
- IX3 X3+X6
- SX6 B1+
- SA3 X3+TACE INCREMENT COUNTER
- IX6 X3+X6
- SA6 A3
- ACE1 JP /MONITOR/SPB EXIT
- CIO SPACE 4,10
- ** CIO - *CIO* REQUESTS.
- *
- * ENTRY SEE */MONITOR/CPR* ENTRY CONDITIONS.
- *
- * EXIT TO */MONITOR/CIO* WITH ENTRY CONDITIONS PRESERVED.
- * APPROPRIATE DATA REGION ITEMS UPDATED.
- *
- * USES A - 2, 4, 6.
- * X - 0, 2, 3, 4, 6.
- CIO SA4 PRBP
- PL X4,/CPUCIO/CPC IF PROBE TABLE INTERLOCKED
- SX3 X5
- SX1 B4
- SX6 B1
- IX0 X3-X1
- PL X0,CIO2 IF FET ADDRESS .GE. FL
- SA2 B3 GET RA
- IX2 X3+X2 ABSOLUTE REQUEST ADDRESS
- ERX2 X2
- LX2 -2
- SX0 177B INDEX MASK FOR *CIO* FUNCTION
- BX2 X0*X2
- BX0 X6*X2
- AX2 1
- ZR X0,CIO1 IF INCREMENTING UPPER COUNTER
- LX6 30
- CIO1 IX4 X2+X4
- SA2 X4+TCIO INCREMENT COUNTER
- IX6 X2+X6
- SA6 A2+
- CIO2 MX0 48 RESTORE EXIT CONDITIONS
- SX2 B3
- EQ /CPUCIO/CPC PROCESS CIO REQUEST
- IOS SPACE 4,10
- ** IOS - I/O STATISTICS FOR BUFFERED I/O.
- *
- * ENTRY (X0) = 48 BIT MASK.
- * (X2) = 49 BIT MASK.
- * (A5) = PP OUTPUT REGISTER ADDRESS.
- *
- * EXIT TO *BIO20*.
- *
- * USES X - 0, 1, 3, 4, 6.
- * A - 3, 4, 6.
- * B - 3, 4.
- IOS SA3 PRBP
- PL X3,/IHPFMD/BIO20 IF *PROBE* TABLE INTERLOCKED
- SA3 A5 READ PP OUTPUT REGISTER
- BX6 -X2*X3 EXTRACT CBT COUNT
- ZR X6,/IHPFMD/BIO20 IF NO CBT COUNT
- LX3 -24
- SB3 47
- BX1 -X0*X3 EXTRACT PUT ORDINAL
- PL X3,/IHPFMD/BIO20 IF NOT CLEARING *PUT* INTERLOCK
- SX4 X6-177B
- NX6 X6,B4 DETERMINE *IOST* INDEX
- SB3 B3-B4
- SB4 59-29
- NG X4,IOS1 IF CBT COUNT IN RANGE
- SB3 7
- IOS1 TA4 IOSP,BDT FWA OF *IOST*
- SX0 B1+
- LX1 PUTLS
- IX4 X1+X4 FWA OF *IOST* ENTRY
- SA4 X4+B3 READ *IOST* COUNTER
- LX3 59-11-36
- NG X3,IOS2 IF WRITE OPERATION
- LX0 30
- SB4 B0
- IOS2 IX6 X4+X0 UPDATE *IOST* TABLE
- LX4 X6,B4
- NG X4,/IHPFMD/BIO20 IF COUNTER OVERFLOW
- SA6 A4
- EQ /IHPFMD/BIO20 RETURN
- MNR SPACE 4,10
- ** MNR - PROGRAM MODE MTR FUNCTIONS.
- *
- * ENTRY SEE */PROGRAM/MNR* EXIT CONDITIONS.
- *
- * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
- * APPROPRIATE DATA REGION ITEMS UPDATED.
- *
- * USES A - 3, 6.
- * X - 3, 4, 6.
- MNR SA3 PRBP
- SX4 B1+
- PL X3,MNR1 IF PROBE TABLE INTERLOCKED
- SX3 X3+TMNR
- + SA3 X3+B4 *** PERFORM IN ONE WORD ***
- IX6 X3+X4 *** PERFORM IN ONE WORD ***
- SA6 A3+ *** PERFORM IN ONE WORD ***
- MNR1 JP B6 RETURN
- PMN SPACE 4,10
- ** PMN - MTR FUNCTIONS.
- *
- * ENTRY SEE */MONITOR/PMN* EXIT CONDITIONS.
- *
- * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
- * APPROPRIATE DATA REGION ITEMS UPDATED.
- *
- * USES A - 1, 4, 6.
- * X - 1, 4, 6.
- PMN SX6 X0+
- SA4 PRBP
- SX1 A0
- PL X4,PMN2 IF PROBE TABLE INTERLOCKED
- IX4 X6+X4
- SX6 B1
- ZR X1,PMN1 IF CPU 0
- LX6 30
- PMN1 SA1 X4+TMTR-1 INCREMENT COUNTER
- IX6 X1+X6
- SA6 A1
- PMN2 TJP (/TRACE/PMN,TRACE,B6) EXIT
- PPR SPACE 4,10
- ** PPR - PPU FUNCTION REQUESTS.
- *
- * ENTRY SEE */MONITOR/PPR* EXIT CONDITIONS.
- * (A3) = PROCESSOR CONTROL WORD ADDRESS.
- *
- * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
- * APPROPRIATE DATA REGION ITEMS UPDATED.
- *
- * USES A - 4, 6.
- * B - 6.
- * X - 0, 4, 6.
- PPR SA4 PRBP
- SX0 A0+
- SX6 B1
- ZR X0,PPR1 IF CPU 0
- LX6 30
- PPR1 PL X4,PPR2 IF PROBE TABLE INTERLOCKED
- SB6 X4+TPPU-TPPR
- SA4 A3+B6 INCREMENT COUNTER
- SB6 X3 SET PROCESSOR ADDRESS
- IX6 X4+X6
- SA6 A4
- PPR2 TJP (/TRACE/PPR,TRACE,B6) EXIT
- PRG SPACE 4,10
- ** PRG - PROGRAM MODE PPU REQUESTS.
- *
- * ENTRY SEE */PROGRAM/PRG* EXIT CONDITIONS.
- *
- * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
- * APPROPRIATE DATA REGION ITEMS UPDATED.
- *
- * USES A - 3, 7.
- * X - 3, 6, 7.
- PRG BX6 X3 SAVE ENTRY CONDITIONS
- SA3 PRBP
- SX7 B1
- PL X3,PRG1 IF PROBE TABLE INTERLOCKED
- SX3 X3+TPRG-CPUM
- + SA3 X3+B4 *** PERFORM IN ONE WORD ***
- IX7 X3+X7 *** PERFORM IN ONE WORD ***
- SA7 A3+ *** PERFORM IN ONE WORD ***
- PRG1 BX3 X6 RESTORE EXIT CONDITIONS
- BX7 X7-X7
- TJP (/TRACE/PPR,TRACE,B6) EXIT
- SPL SPACE 4,10
- ** SPL - SEARCH PERIPHERAL LIBRARY.
- *
- * ENTRY SEE */MONITOR/SPL* EXIT CONDITIONS.
- *
- * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
- * APPROPRIATE DATA REGION ITEMS UPDATED.
- *
- * USES A - 2, 7.
- * X - 2, 3, 4, 7.
- SPL SA2 PRBP
- BX3 X7 SAVE ENTRY CONDITIONS
- SX7 A1
- PL X2,SPL2 IF PROBE TABLE INTERLOCKED
- R= A2,PLDP
- AX2 36
- IX7 X7-X2
- SX4 B1
- BX2 X4*X7
- LX7 -1
- ZR X2,SPL1 IF INCREMENTING UPPER COUNTER
- LX4 30
- SPL1 SA2 PRBP
- SX2 X2+TSPL
- IX2 X7+X2
- SA2 X2 INCREMENT COUNTER
- IX7 X4+X2
- SA7 A2
- SPL2 BX7 X3 RESTORE ENTRY CONDITIONS
- JP B6 RETURN
- ENDBLK
- BLOCK TRACE,(TRACE/TRAP PACKAGE.)
- SETFLD SPACE 4,10
- ** SETFLD - SET UP FIELD VALIDATION REGISTERS.
- *
- * ENTRY (A1) = TRPA.
- * (X1) = (TRPA).
- *
- * EXIT (X1) POSITIONED TO TRAP-ON-ANY-NON-ZERO-VALUE FLAG.
- * (X2) = VALUE TO CHECK AGAINST, AFTER APPLYING MASK.
- * (X3) = WORD ADDRESS.
- * (X6) = POSITIONED MASK.
- * (B5) = LOW BIT OF FIELD.
- *
- * USES X - 1, 2, 3, 6.
- * A - 2.
- * B - 4, 5.
- SETFLD MACRO
- LIST M
- SX3 X1 GET WORD ADDRESS
- LX1 59-41 FLAG TO TRAP ON ANY NONZERO VALUE
- SA2 A1+B1 LOW BIT, MASK LENGTH
- SB5 X2 LOW BIT
- AX2 24
- SB4 X2 GET MASK LENGTH - 1
- MX6 1 CREATE MASK
- AX6 B4
- SB4 B4+B1 POSITION MASK
- LX6 B4
- SA2 A2+B1 GET VALUE
- BX2 X6*X2 APPLY MASK TO VALUE
- LIST *
- ENDM
- MTRP SPACE 4,10
- ** *DSDI* POINTER WORDS.
- *
- * THESE WORDS ARE USED BY *DSDI* DIRECTIVE *TBDUMP* TO LOCATE
- * THE TRACE BUFFERS AND ASSOCIATED INFORMATION IN THE TRACE
- * BLOCK. IF THE ORDER OR CONTENT OF THESE WORDS IS CHANGED,
- * *DSDI* MUST BE EXAMINED FOR POSSIBLE CHANGES AS WELL.
- MTRP VFD 24/0,18/PMNC+PMNCL,18/PMNC *MTR* TRACE BUFFER
- VFD 42/0,18/PMNA *MTR* FUNCTION LIST
- VFD 24/0,18/PMND,18/PMNE ABS/CPA ADDRESS LISTS
- VFD 24/0,18/PPRC+PPRCL,18/PPRC *PPU* TRACE BUFFER
- VFD 42/0,18/PPRA *PPU FUNCTION LIST
- TRACE SPACE 4
- *CALL COMSDSL
- TRP SPACE 4,10
- ** TRP - TRAP ON ERROR CONDITION.
- *
- * ENTRY CALLED AT *MTRX*.
- *
- * EXIT TO */MONITOR/MTRX*+1.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 6, 7.
- * B - 3, 4, 5, 6, 7.
- TRP SA1 SSTL
- TB3 MCT
- TB5 SC
- LX1 59-13
- SX0 B5+B5 2 * SYSTEM CP
- NG X1,/MONITOR/MTRX+1 IF SYSTEM DEBUG MODE DISABLED
- SA2 TRPA
- * VALIDATE CM ALLOCATION.
- LX2 59-44
- SX7 B7 SAVE (B7)
- PL X2,TRP7 IF MCT VALIDATION NOT SELECTED
- SA1 SMRL
- NZ X1,TRP7 IF MEMORY MANAGEMENT OPERATION OCCURRING
- TB6 -200B,PCPA
- SA7 TRPB
- SB7 B0+
- TRP1 TB4 -2,NMCT
- SX1 B1+B1 INITIAL MCT OFFSET (START AT CP 1)
- SX2 B0 INITIAL PREVIOUS INDEX
- TRP2 MX5 12
- SB4 B4-B1
- ZR B4,TRP5 IF END OF MCT
- SA3 B3+X1 MCT ENTRY
- BX4 X5*X3 BACKWARD LINK
- AX4 48-1
- BX4 X4-X2
- NZ X4,TRP52 IF BACKWARD LINK INCORRECT
- LX5 -12
- BX2 X1 NEW PREVIOUS INDEX
- BX1 X5*X3 FORWARD LINK
- AX1 36-1
- MX7 -24
- BX5 -X7*X3 HOLE(N-1)
- BX3 X2
- LX7 12
- LX3 7-1
- IX6 X2-X0
- NG X6,TRP3 IF CP
- LX6 7-1
- SX3 B6+X6
- TRP3 SA4 X3+STSW
- SX3 X3+FLSW
- LX4 59-53
- SA3 X3+B7 CURRENT *FLSW*/*ECSW*
- NG X4,TRP53 IF ACTIVITY UNDERFLOW
- BX4 X1
- LX4 7-1
- IX6 X1-X0
- NG X6,TRP4 IF CP
- LX6 7-1
- SX4 B6+X6
- TRP4 SX4 X4+FLSW
- SA4 X4+B7 NEXT *FLSW*/*ECSW*
- BX6 -X7*X4 RA(N) SHIFTED LEFT 12
- BX7 -X7*X3 RA(N-1) SHIFTED LEFT 12
- IX6 X6-X7 RA(N) - RA(N-1) SHIFTED LEFT 12
- NG X6,TRP51 IF RA-S OUT OF ORDER
- LX6 -12
- IX6 X6-X5 RA(N) - RA(N-1) - HOLE(N-1)
- MX5 12
- BX7 X5*X4 NFL(N)
- LX7 -48
- IX6 X6-X7 RA(N) - RA(N-1) - HOLE(N-1) - NFL(N)
- MX5 -12
- BX7 -X5*X3 FL(N-1)
- IX6 X6-X7 SUBTOTAL - FL(N-1)
- ZR X6,TRP2 IF ALL IS WELL
- EQ TRP55 HANG DUE TO MISPOSITIONED HOLE
- TRP5 TB4 1,MCT
- EQ B3,B4,TRP6 IF EM ALREADY VALIDATED
- SA1 ECRL
- SB3 B4+
- SB7 ECSW-FLSW
- NZ X1,TRP1 IF EM PRESENT
- TRP6 SA1 TRPB RESTORE (B7)
- SB7 X1+
- * VERIFY EJT/PCPA INTEGRITY.
- TRP7 SA1 TRPA
- TB3 1,EJTM MAXIMUM EJT ORDINAL
- LX1 59-42
- PL X1,TRP11 IF NOT SELECTED
- MX6 -5
- TX7 SC SYSTEM CONTROL POINT NUMBER
- MX4 -12
- TRP8 SB3 B3-B1 DECREMENT EJT INDEX
- ZR B3,TRP9 IF END OF SCAN
- SX1 B3
- CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- TA2 X2+JSNE,EJT
- BX5 X4*X2
- ZR X5,TRP8 IF VACANT ENTRY
- LX2 -1
- BX0 -X6*X2 JOB STATUS
- SX5 X0-EXJS
- NG X2,TRP8 IF JOB INTERLOCK SET
- SA3 A2+SCHE-JSNE
- LX3 -12
- BX3 -X4*X3
- NZ X5,TRP8 IF NOT EXECUTING JOB
- IX3 X3-X7
- PL X3,TRP56 IF INVALID CONTROL POINT NUMBER
- EQ TRP8 CONTINUE
- * VALIDATE PCPA-S.
- TRP9 TB3 SC
- MX4 -5
- TB4 -1,NMCT
- TB6 -200B,PCPA
- SB5 B4-B3 NUMBER OF PCP-S
- MX7 12
- TRP10 ZR B5,TRP11 IF ALL PCP-S CHECKED
- SX6 B5
- SB5 B5-B1 DECREMENT PCP ORDINAL
- LX6 7
- SX6 B6+X6 PCPA ADDRESS
- SA1 X6+TFSW
- BX1 X7*X1 EJT ORDINAL
- ZR X1,TRP10 IF VACANT PCP
- LX1 -48
- CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- TA1 X2+JSNE,EJT
- LX1 59-0
- BX2 -X4*X1 JOB STATUS
- NG X1,TRP10 IF JOB INTERLOCKED
- SX2 X2-PCJS
- NZ X2,TRP57 IF INCORRECT JOB STATUS
- SA2 A1+B1
- ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
- LX2 12
- BX2 X7*X2
- LX2 -48
- SX3 B3
- IX2 X3-X2
- PL X2,TRP57 IF INCORRECT PCP NUMBER
- EQ TRP10 CONTINUE
- * CHECK FOR DEAD JOBS.
- TRP11 SA2 TRPA
- SA1 DSSL
- LX2 59-43
- PL X2,TRP14 IF DEAD JOB CHECK NOT SELECTED
- LX1 59-2
- NG X1,TRP14 IF DEADSTART IN PROGRESS
- SA1 /MONITOR/JAVA
- SX6 B7
- SA6 TRPB SAVE (B7)
- BX6 X1
- SA6 TRPC SAVE *JAVA* INSTRUCTION WORD
- SA2 TRPD
- SB3 TRP12 SET *JAV* NON-FAILURE EXIT ADDRESS
- BX6 X2
- SA6 A1 SET *JAV* FAILURE EXIT
- TRP12 SB5 B5-B1
- ZR B5,TRP13 IF END OF SCAN
- SX1 B5
- LX1 7
- SB7 X1
- EQ /MONITOR/JAV CHECK FOR DEAD JOB
- TRP13 SA1 TRPB RESTORE (B7)
- SA2 TRPC RESTORE *JAVA* INSTRUCTION WORD
- SB7 X1
- BX6 X2
- SA6 /MONITOR/JAVA
- * VALIDATE NFL.
- TRP14 SA1 TRPA
- TB3 SC
- LX1 59-45
- PL X1,TRP19 IF NFL VALIDATION NOT SELECTED
- SB4 B0
- SX7 QFBN
- SB6 B0+
- TRP15 SB3 B3-B1
- ZR B3,TRP18 IF THROUGH WITH CP-S OR PCP-S
- MX0 12
- SX6 B3+B6
- SA1 CMCL
- BX1 X0*X1
- LX1 12
- BX3 X1-X6
- ZR X3,TRP15 IF STORAGE MOVE IN PROGRESS
- LX6 7
- SX6 X6+B4 ADD BIAS FOR PCPA
- SA1 X6+TFSW
- SA2 X6+FLSW
- BX1 X0*X1
- BX4 X0*X2
- ZR X1,TRP15 IF CP/PCP NOT ACTIVE
- ZR X4,TRP15 IF NO NFL ASSIGNED
- LX1 12
- CX6 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- TA1 X6+JSNE,EJT
- LX1 59-6
- NG X1,TRP15 IF JOB ADVANCE SET
- AX2 12 COMPUTE RA
- SX2 X2
- LX2 6 RA
- IX2 X2-X7 FWA OF QUEUED FUNCTION BUFFER
- SX6 -QFBL
- TRP16 SX6 X6+B1 READ NEXT ENTRY
- IX4 X2-X6
- ERX4 X4
- ZR X4,TRP17 IF ZERO ENTRY
- AX4 48 CHECK ENTRY
- SX4 X4-DTKM
- NZ X4,TRP58 IF NOT *DTKM*
- TRP17 NG X6,TRP16 IF NOT END OF BUFFER
- EQ TRP15 CHECK NEXT CP/PCP
- TRP18 NZ B4,TRP19 IF THROUGH CHECKING PCP-S
- TB4 NMCT
- TB6 SC
- SB3 B4-B6 NUMBER OF PCPS+1
- TB4 -CPAS,PCPA PCPA BIAS
- EQ TRP15 CHECK PCP-S
- * VALIDATE CM FIELD.
- TRP19 SA1 TRPA
- BX2 X1
- LX2 59-47
- PL X2,TRP20 IF CM VALIDATION NOT SELECTED
- SETFLD
- RJ CFD CHECK FIELD
- NZ X3,TRP50 IF ERROR
- * VALIDATE CPA FIELD.
- TRP20 SA1 TRPA
- BX2 X1
- LX2 59-46
- PL X2,/MONITOR/MTRX+1 IF CPA VALIDATION NOT SELECTED
- SETFLD
- TX5 SC SET OFFSET
- SB3 X3
- SB4 B3
- SB6 7
- TRP21 SX5 X5-1
- ZR X5,TRP22 IF THROUGH CHECKING CP-S OR PCP-S
- LX3 X5,B6
- SX3 X3+B4 ADD WORD ADDRESS AND PCPA BIAS
- RJ CFD CHECK FIELD
- NZ X3,TRP50 IF ERROR
- EQ TRP21 CHECK NEXT CP/PCP
- TRP22 NE B3,B4,/MONITOR/MTRX+1 IF THROUGH CHECKING PCP-S
- TB4 -CPAS,PCPA SET PCPA BIAS
- TX3 NMCT
- TX5 SC
- SB4 B4+B3 ADD WORD ADDRESS TO BIAS
- IX5 X3-X5 NUMBER OF PCPS+1
- EQ TRP21 CHECK PCPA-S
- * TRAP CONTROL WORDS.
- TRPA VFD 12/TRCM DSD OUTPUT REGISTER FROM *TRCM*
- VFD 1/0 CM FIELD VALIDATION
- VFD 1/0 CPA FIELD VALIDATION
- VFD 1/0 NFL VALIDATION
- VFD 1/0 MCT VALIDATION
- VFD 1/0 DEAD JOB CHECK
- VFD 1/0 EJT/PCPA VALIDATION
- VFD 1/0 TRAP ON NONZERO VALUE FLAG (FIELD VAL.)
- VFD 17/0 UNUSED
- VFD 24/0 ADDRESS OF WORD TO TRAP/TRACE
- VFD 30/0 UNUSED
- VFD 6/0 LENGTH OF FIELD (FIELD VAL.)
- VFD 18/0 UNUSED
- VFD 6/0 LOW BIT OF FIELD TO CHECK (FIELD VAL.)
- CON 0 VALUE TO CHECK (FIELD VAL.)
- * MISCELLANEOUS CELLS.
- TRPB CON 0 (B7) SAVE AREA
- TRPC CON 0 *JAV* INSTRUCTION WORD SAVE AREA
- TRPD EQ TRP54 *JAV* FAILURE INSTRUCTION
- * DISPLAY MESSAGE AND HANG SYSTEM.
- TRP50 SB4 MSGB FIELD ERROR
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP51 SB4 MSGC RA-S MISORDERED
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP52 SB4 MSGD MCT LINKAGE ERROR
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP53 SB4 MSGE ACTIVITY UNDERFLOW
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP54 SB4 MSGF DEAD JOB FOUND
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP55 SB4 MSGG MISPOSITIONED HOLE
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP56 SB4 MSGH EJT ERROR
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP57 SB4 MSGI PCPA ERROR
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP58 SB4 MSGJ NFL ERROR
- EQ TRP59 DISPLAY MESSAGE AND HANG
- TRP59 RJ /MONITOR/SVR SAVE ALL REGISTERS
- RJ /CPB/RAR RESTORE ALL REGISTERS
- SA1 B4
- SA2 MSGA
- BX6 X2
- TB5 MS2W,SCA
- SA6 B5
- BX7 X1
- SA7 B5+B1
- SA1 B4+B1
- BX6 X1
- SA6 A7+B1
- + EQ * HANG
- MSGA DATA 10LTRAP HIT -
- MSGB DATA C*FIELD ERROR*
- MSGC DATA C*RA-S MISORDERED*
- MSGD DATA C*MCT LINKAGE ERROR*
- MSGE DATA C*ACTIVITY UNDERFLOW*
- MSGF DATA C*DEAD JOB*
- MSGG DATA C*MISPOSITIONED HOLE*
- MSGH DATA C*EJT ERROR*
- MSGI DATA C*PCPA ERROR*
- MSGJ DATA C*NFL QFBN ERROR*
- CFD SPACE 4,10
- ** CFD - CHECK FIELD.
- *
- * ENTRY (X1) .LT. 0 IF TRAPPING ON ANY NONZERO VALUE.
- * (X2) = VALUE TO CHECK AGAINST.
- * = 0 IF TRAPPING ON ANY NONZERO VALUE.
- * (X3) = WORD ADDRESS.
- * (X6) = MASK.
- * (B5) = LOW BIT POSITION OF FIELD.
- *
- * EXIT (X3) = NON-ZERO IF FIELD ERROR.
- *
- * USES X - 3.
- * A - 3.
- CFD SUBR ENTRY/EXIT
- ERX3 X3 GET WORD
- AX3 B5
- BX3 X6*X3 ISOLATE FIELD CONTENTS
- BX3 X2-X3 COMPARE
- NG X1,CFDX IF TRAPPING ON ANY NONZERO VALUE
- ZR X3,CFD1 IF ERROR IN FIELD
- SX3 -1
- CFD1 SX3 X3+1
- EQ CFDX RETURN
- PMN SPACE 4,10
- ** PMN - MTR FUNCTIONS.
- *
- * ENTRY SEE */MONITOR/PMN* EXIT CONDITIONS.
- *
- * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
- *
- * USES X - 1, 3, 4, 6, 7.
- * A - 1, 3, 4, 6, 7.
- PMN SA1 SSTL
- SX6 X0
- LX1 59-13
- NG X1,/MONITOR/RB6 IF SYSTEM DEBUG MODE DISABLED
- SA4 PMNA CHECK IF THIS FUNCTION TO BE TRACED
- NG X4,PMN2 IF ALL FUNCTIONS TO BE TRACED
- PMN1 ZR X4,/MONITOR/RB6 IF TRACE NOT SELECTED FOR THIS ONE
- MX1 -12
- BX1 -X1*X4
- BX1 X1-X6
- AX4 12
- NZ X1,PMN1 IF NOT A MATCH
- * CREATE TRACE BUFFER ENTRY.
- PMN2 SX1 X6-ARTF
- ZR X1,/MONITOR/RB6 IF *ARTF* FUNCTION
- SA1 PMNB GET *IN* POINTER
- SA4 PDTL SAVE TIME STAMP ENTRY
- MX3 -24
- BX3 -X3*X4
- SA4 =3L***
- LX3 18
- BX6 X4+X3
- SA4 RTCL
- MX3 -18
- BX3 -X3*X4
- BX6 X6+X3
- SA6 X1
- BX7 X0 SAVE REQUEST
- SA4 PMND GET LIST OF ABSOLUTE ADDRESSES TO SAVE
- SA7 A6+B1
- SX3 X4
- ERX3 X3
- BX6 X3
- SA6 A7+B1 SAVE FIRST WORD
- AX4 24
- ERX4 X4
- BX7 X4
- SA7 A6+B1 SAVE SECOND WORD
- TA3 -1,MCT
- SX1 B0+
- PMN3 SA3 A3+B1 GET NEXT MCT ENTRY
- BX6 X3
- SA6 A7+1
- SA3 A3+1
- BX7 X3
- SA7 A6+B1
- SX7 X1+
- TX4 1,SC
- IX6 X1-X4
- LX7 7
- NG X6,PMN4 IF NOT A PCP
- LX6 7
- TX7 X6,PCPA
- PMN4 SA4 PMNE GET ADDRESSES OF CPA WORDS TO STORE
- LX4 -24
- SX3 X4 GET SECOND ADDRESS
- AX4 36 GET FIRST ADDRESS
- IX4 X4+X7
- SA4 X4
- BX6 X4
- SA6 A7+B1 SAVE FIRST CPA WORD
- IX4 X3+X7
- SA4 X4
- BX6 X4
- SA6 A6+B1 SAVE SECOND CPA WORD
- SA4 X7+TFSW
- BX6 X4
- AX4 48
- SA6 A6+B1 STORE *TFSW* IN TRACE BUFFER ENTRY
- CX7 X4,EJT CONVERT EJT ORDINAL TO OFFSET
- TA4 X7+JSNE,EJT
- BX7 X4
- SA7 A6+B1 STORE *JSNE* IN TRACE BUFFER ENTRY
- SX1 X1+B1
- TX4 NMCT
- IX4 X1-X4
- NG X4,PMN3 IF NOT END OF MCT
- SX1 PMNC+PMNCL
- SX6 A7+B1
- TX4 NMCT
- LX7 X4,B1 *NMCT* * 2
- LX4 2 *NMCT* * 4
- IX4 X4+X7 *NMCT* * 6
- SX7 B0+
- IX4 X6+X4
- SX4 X4+TBUFE
- IX4 X4-X1
- NG X4,PMN5 IF NOT AT TRACE BUFFER LIMIT
- SX6 PMNC
- PMN5 SA6 A1 UPDATE *IN* POINTER
- BX7 X7-X7 RESTORE (X7)
- JP B6 EXIT TO FUNCTION PROCESSOR
- PMNA CON 0 MTR FUNCTION TRACE LIST
- PMNB CON PMNC TRACE BUFFER *IN* POINTER
- PMNC BSS 0 TRACE BUFFER
- TBUF DUP 10
- LOC 0
- CON 0 TIME STAMP
- CON 0 (X0)
- CON 0 VARIABLE - SEE *PMND*
- CON 0 VARIABLE - SEE *PMND*
- TBUFE BSS 0
- LOC *O
- MCT DUP NCPS+2+20B ALLOW MAXIMUM CP-S AND 20B PCP-S
- CON 0,0 MCT
- CON 0 VARIABLE - SEE *PMNE*
- CON 0 VARIABLE - SEE *PMNE*
- CON 0 *TFSW*
- CON 0 *JSNE*
- MCT ENDD
- SPACE 4
- ERRNG PMNCL-6*NCPS-6*NPPS-4-TBUFE BUFFER TOO SMALL
- TBUF ENDD
- PMNCL EQU *-PMNC TRACE BUFFER TABLE LENGTH
- PMND VFD 12/0,24/SMRL,24/CMCL ADDRESSES OF ABS WORDS TO SAVE
- PMNE VFD 12/0,24/STSW,24/FLSW ADDRESSES OF CPA WORDS TO SAVE
- PPR SPACE 4,10
- ** PPR - PP FUNCTION REQUESTS.
- *
- * ENTRY SEE */MONITOR/PPR* EXIT CONDITIONS.
- *
- * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
- *
- * USES X - 0, 2, 4, 6, 7.
- * A - 2, 4, 6, 7.
- PPR SA4 SSTL
- BX0 X5
- LX4 59-13
- NG X4,PPR4 IF SYSTEM DEBUG MODE DISABLED
- SA4 PPRA CHECK IF THIS FUNCTION TO BE TRACED
- NG X4,PPR2 IF ALL FUNCTIONS TO BE TRACED
- AX0 48
- PPR1 ZR X4,PPR4 IF THIS FUNCTION NOT TO BE TRACED
- MX6 -12
- BX6 -X6*X4
- BX6 X6-X0
- AX4 12
- NZ X6,PPR1 IF NOT A MATCH
- PPR2 SA2 PPRB GET *IN* POINTER
- SA4 PDTL GET TIME STAMP
- MX7 -24
- BX7 -X7*X4
- SA4 =3L***
- LX7 18
- BX6 X4+X7
- SA4 RTCL
- MX7 -18
- BX7 -X7*X4
- BX6 X6+X7
- SA6 X2
- SA2 A5-B1 PP INPUT REGISTER
- BX7 X2
- SA7 A6+B1
- BX6 X5 PP OUTPUT REGISTER
- SA2 A5+B1 MB + 0
- BX7 X2
- SA6 A7+B1
- SA4 A2+B1 MB + 1
- SA7 A6+B1
- BX6 X4
- SA2 A4+B1 MB + 2
- SA6 A7+B1
- BX7 X2
- SA4 A2+B1 MB + 3
- SA7 A6+B1
- BX6 X4
- SA2 A4+B1 MB + 4
- SA6 A7+B1
- BX7 X2
- SA4 A2+B1 MB + 5
- SA7 A6+B1
- BX6 X4
- SA6 A7+B1
- SA2 PMND GET LIST OF ABSOLUTE ADDRESSES TO SAVE
- SX4 X2 GET FIRST ADDRESS
- AX2 24 GET SECOND ADDRESS
- ERX4 X4
- ERX2 X2
- BX7 X4
- BX6 X2
- SA7 A6+B1
- SA6 A7+B1
- SX4 PPRC+PPRCL
- SX6 A6+B1
- IX4 X6-X4
- SA2 A5-1
- NG X4,PPR3 IF NOT AT TRACE BUFFER LIMIT
- SX6 PPRC
- PPR3 SA6 PPRB UPDATE *IN* POINTER
- BX7 X7-X7 RESET (X7)
- LX2 -36+7 RESET (X2)
- PPR4 SX4 7600B RESTORE (X4)
- JP B6 EXIT TO FUNCTION PROCESSOR
- PPRA CON 0 PPU FUNCTION TRACE LIST
- PPRB CON PPRC TRACE BUFFER *IN* POINTER
- PPRC BSS 0 TRACE BUFFER
- TBUF DUP 20D
- CON 0 TIME STAMP
- CON 0 PP INPUT REGISTER
- CON 0 PP OUTPUT REGISTER
- CON 0,0,0,0,0,0 PP MESSAGE BUFFER
- CON 0 VARIABLE - SEE *PMND*
- CON 0 VARIABLE - SEE *PMND*
- TBUF ENDD
- PPRCL EQU *-PPRC TRACE BUFFER LENGTH
- TRC SPACE 4,10
- ** TRC - PROCESS TRAP/TRACE REQUEST.
- *
- * ENTRY SEE */PPR/TRCM*.
- *
- * EXIT TPRA/PPRA/PMNA/PMND/PMNE SET UP.
- *
- * USES X - 2, 3, 5, 6.
- * A - 3, 6.
- TRC BSS 0 ENTRY
- LX5 0-37
- SA3 A5+B1 GET MB+0
- MX2 -4
- BX2 -X2*X5
- ZR X2,TRC1 IF NOT *TRACE,XXX*
- BX6 X3
- AX2 1
- SA3 X2+TRCA GET LIST POINTER FOR *TRACE* REQUESTS
- SA6 X3+
- EQ TRC2 RETURN
- TRC1 BX6 X1
- SA6 TRPA SAVE *DSD* OR
- BX6 X3
- SA6 A6+B1 SAVE MB+0
- SA3 A3+B1
- BX6 X3
- SA6 A6+B1 SAVE MB+1
- TRC2 JP /MONITOR/PPR1 EXIT
- TRCA CON PMNE *TRACE,SET,CPA* ADDRESS LIST
- CON PMND *TRACE,SET,ABS* ADDRESS LIST
- CON PPRA *TRACE,PPU* FUNCTION LIST
- CON 0 (UNUSED)
- CON PMNA *TRACE,MTR* FUNCTION LIST
- ENDBLK
- BLOCK CPB,(CPUMTR BREAKPOINT PACKAGE)
- BKP SPACE 4,10
- ** BKP - *CPUMTR* BREAKPOINT.
- *
- * THE DSD COMMAND *CPB,BKP,/B/N* IS USED TO SET A BREAKPOINT.
- * *DSD* SAVES THE WORD AT THE INDICATED ADDRESS IN THE BREAK-
- * POINT TABLE AND REPLACES IT WITH A *RJ BKP*. WHEN THE
- * SPECIFIED LOCATION IS HIT, THE *RJ* TAKES THE CPU TO THIS
- * ROUTINE, WHERE ALL REGISTERS ARE STORED IN THE EXCHANGE
- * PACKAGE DISPLAY AREA. *CPUMTR* THEN LOOPS, WAITING FOR
- * /CPB/CPFG TO BECOME ZERO. THE *DSD* COMMAND *CPB,GO.*
- * ZEROES THIS WORD, ALLOWING *CPUMTR* TO RESTORE ALL
- * REGISTERS AND CONTINUE EXECUTION.
- *
- * THIS ROUTINE IS VALID IN PROGRAM AND MONITOR MODE.
- *
- * ENTRY (CALLED ON *CPUMTR* BREAKPOINT).
- *
- * EXIT (ALL REGISTERS RESTORED).
- BKP1 SA1 /MONITOR/BXP
- SA2 CHTP CHECK *DSD* ACTIVE
- LX6 18+18
- BX7 X6+X1 INSERT *P* INTO EXCHANGE PACKAGE
- SX6 B1
- SA7 A1
- AX2 12
- SA3 X2+B1 FETCH DISPLAY CHANNEL STATUS
- MX2 -6
- AX3 12
- BX3 -X2*X3
- IX3 X3-X6
- NZ X3,BKP3 IF CHANNEL NOT RESERVED TO *DSD*
- SA6 /MONITOR/BXP+CPFG
- BKP2 SA3 A3 CHECK *DSD* ACTIVE
- AX3 12
- SA1 /MONITOR/BXP+CPFG CHECK BREAKPOINT FLAG
- BX3 -X2*X3
- BX1 X3-X1
- ZR X1,BKP2 IF FLAG NOT CLEARED AND *DSD* HAS CHANNEL
- SA2 /MONITOR/BXP
- SA3 BKPB (NO / NO / EQ ** )
- SX6 0
- TA6 MS2W,SCA CLEAR MESSAGE
- AX2 36
- BX6 X2+X3 CONSTRUCT RETURN ADDRESS
- SA6 BKP
- BKP3 RJ RAR RELOAD ALL REGISTERS
- BKP PS ENTRY/EXIT
- RJ /MONITOR/SVR SAVE ALL REGISTERS
- SA1 =C$CPUMTR BREAKPOINT HIT$
- SA2 A1+B1
- SA3 A2+B1
- BX6 X1
- BX7 X2
- SA2 BKP GET RETURN ADDRESS
- SA1 /MONITOR/BXP+CPBA BREAKPOINT ADDRESS
- TA6 MS2W,SCA
- BX6 X3
- SA7 A6+B1
- SA6 A7+B1
- AX2 30
- SX6 X2-1 RETURN ADDRESS - 1
- BX7 X6-X1 CHECK FOR SAME ADDRESS
- SX6 X6+B1
- NZ X7,BKP1 IF NOT AT BREAKPOINT ADDRESS
- SA2 /MONITOR/BXP+CPBW
- SA7 A2 CLEAR BREAKPOINT WORD
- SA7 A1 ZERO BREAKPOINT ADDRESS
- SX6 X6-1
- BX7 X2 RESET BREAKPOINT WORD
- SA7 X6
- EQ BKP1 CHECK *DSD* ACTIVE
- BKPB NO PROTOTYPE RETURN INSTRUCTION
- NO
- EQ ** (RETURN ADDRESS INSERTED HERE)
- RAR SPACE 4,10
- ** RAR - RELOAD ALL REGISTERS.
- *
- * ENTRY REGISTER DATA AT */MONITOR/BXP*.
- *
- * EXIT ALL REGISTERS RELOADED.
- RAR PS ENTRY/EXIT
- SB7 /MONITOR/BXP
- SB1 1 SET REGISTER ARRAY FOR *B0* - *B7*, *A0*
- SB4 3
- MX0 42
- SA3 B7 FETCH *A0*
- AX3 18
- SA2 B7+7
- RAR1 SA1 B4+RARB GET RESET INSTRUCTION
- BX2 -X0*X2
- BX3 -X0*X3
- IX6 X2+X1 *B7*/*B5*/*B3*/*B1* TO RESET INSTRUCTION
- SB2 B2-2
- LX6 30
- IX6 X6+X3 *AO*/*B6*/*B4*/*B2* TO RESET INSTRUCTION
- SA6 B4+RARA STORE RESET INSTRUCTION
- SB4 B4-B1
- SA3 A2-B1 FETCH *B6*/*B4*/*B2*
- SA2 A3-B1 FETCH *B5*/*B3*/*B1*
- PL B4,RAR1 IF MORE TO GO
- SA1 B7+7 *A7*
- AX1 18
- SA2 X1 OLD VALUE AT *A7*
- BX7 X2
- SA3 A1-B1 *A6*
- AX3 18
- SA4 X3 OLD VALUE AT *A6*
- LX6 X4
- SA7 X1+777777B RESTORE *A7*
- SA6 X3+777777B RESTORE *A6*
- SA1 B7+17B *X7*
- SA2 A1-B1
- BX7 X1 RESTORE *X7*
- LX6 X2 RESTORE *X6*
- SA3 A3-B1 *A5*
- SA1 A2-B1 *X5*
- AX3 18
- SA5 X3+777777B RESTORE *A5*
- SA3 A3-B1 *A4*
- SA2 A1-B1 *X4*
- AX3 18
- BX5 X1 RESTORE *X5*
- SA4 X3+777777B RESTORE *A4*
- SA3 A3-B1 *A3*
- SA1 A2-B1 *X3*
- BX4 X2 RESTORE *X4*
- SA2 A3-B1 *A2*
- AX2 18
- AX3 18
- SA3 X3+777777B RESTORE *A3*
- SA2 X2+777777B RESTORE *A2*
- BX3 X1 RESTORE *X3*
- SA1 A1-B1 *X2*
- BX2 X1 RESTORE *X2*
- SA1 A1-B1 *X1*
- UX0 B1,X1 START UNPACKING *X1*
- LX0 11
- UX1 B2,X0 CONTINUE UNPACK
- LX1 11
- UX0 B3,X1
- LX0 11
- UX1 B4,X0
- MX0 60
- SA0 X0+777777B -0 TO *A0*
- LX1 11
- UX0 B5,X1
- SA1 A1-1 *X0*
- LX0 11
- SB7 X0+777777B SIGN OF *X1* TO *B7*
- UX0 B6,X0 COMPLETE UNPACK
- BX0 X1 RESTORE *X0*
- NO
- SA1 A1-7 *A1*
- AX1 18
- SA1 X1+777777B RESTORE *A1*
- SX1 B7-B0 RESTORE SIGN OF *X1*
- PX1 B6,X1 START REPACKING *X1*
- AX1 11
- PX1 B5,X1
- AX1 11
- PX1 B4,X1
- AX1 11
- PX1 B3,X1
- AX1 11
- PX1 B2,X1
- AX1 11
- PX1 B1,X1 COMPLETE RESTORATION OF *X1*
- RARA DATA 0,0,0,0
- EQ RAR RETURN
- RARB SB2 A0+0 RESET INSTRUCTIONS
- SB1 A0+0
- SB4 A0+0
- SB3 A0+0
- SB6 A0+0
- SB5 A0+0
- SA0 A0+0
- SB7 A0+0
- SPACE 4,10
- ENDBLK
- BLOCK SCP,(SYSTEM CONTROL POINT FACILITY.),MONITOR
- TITLE SCP MAIN ROUTINES.
- SSC SPACE 4,10
- *** *SSC*.
- * A SUBSYSTEM CALL FROM A USER CONTROL POINT (UCP) WHICH
- * USES THE SYSTEM CONTROL POINT FACILITY. THIS UCP CALL IS SENT
- * TO THE APPROPIATE SUBSYSTEM DETERMINED BY THE SUBSYSTEM
- * IDENTIFICATION (SID). THE SUBSYSTEM IS CHECKED TO SEE IF
- * IT HAS ATTAINED *SYSTEM CONTROL POINT* (SCP) STATUS, THAT IS
- * THE SUBSYSTEM IDENTIFICATION WORD (SSIW) IS INITIALIZED. IF
- * NOT THE *SUBSYSTEM NOT PRESENT* STATUS IS RETURNED. ALSO,
- * THE SUBSYSTEM RECEIVING BUFFER (SSCR) IS EXAMINED TO SEE
- * WHETHER OR NOT THE SUBSYSTEM IS READY TO RECEIVE REQUESTS.
- * IF UNABLE TO THE *SUBSYSTEM BUSY* STATUS IS RETURNED.
- *
- *T 18/ *SSC*,1/,1/R,4/,18/ SID,18/ ADDR
- *
- * ADDR = ADDRESS OF A PARAMETER BLOCK.
- * R = 1 IF AUTO-RECALL SELECTED.
- * SID = SUBSYSTEM IDENTIFICATION.
- * IF ZERO, SCP IS READY TO ACCEPT REQUESTS
- * FROM UCPS.
- * IF NONZERO, *ADDR* IS THE FIRST WORD OF A BLOCK
- * OF DATA TO BE PROCESSED BY THE SCP.
- *
- *T ADDR 24/ RSUB,12/ RINS,6/WCNT,4/RCDC,2/RT,11/ ES,1/C
- *T ADDR+1 60/ SUBSYSTEM SPECIFIED PARAMETERS
- *T ADDR+N 60/ LAST WORD OF PARAMETER BLOCK
- *
- * C = 1, WHEN REQUEST HAS BEEN COMPLETED.
- * ES = ERROR AND STATUS INFORMATION -
- *
- * BIT DESCRIPTION
- *
- * 1 0 = SUBSYSTEM PRESENT.
- * 1 = SUBSYSTEM NOT RUNNING.
- * 2 0 = SUBSYSTEM ACCEPTED REQUEST.
- * 1 = SUBSYSTEM TOO BUSY TO ACCEPT REQUEST.
- * 3 0 = SUBSYSTEM IS DEFINED.
- * 1 = SUBSYSTEM IS UNDEFINED.
- * 4 - 5 RESERVED FOR CDC.
- * 6 - 11 OTHER ERRORS -
- * 00 = NO OTHER ERROR.
- * 01-17 = RESERVED FOR CDC SYSTEM ERRORS.
- * 20-67 = RESERVED FOR CDC SUBSYSTEM ERRORS.
- * 70-77 = RESERVED FOR INSTALLATIONS.
- *
- * RT = STATUS RETURN DIRECTIVE -
- *
- * BIT DESCRIPTION
- *
- * 12 0 = IF SUBSYSTEM BUSY, HALT PROGRAM UNTIL
- * REQUEST CAN BE POSTED TO SUBSYSTEM.
- * 1 = IF SUBSYSTEM BUSY, SET BIT 2 IN ES AND
- * ALLOW PROGRAM TO CONTINUE.
- * 13 0 = ABORT PROGRAM ON ALL ERRORS.
- * 1 = ABORT PROGRAM ONLY ON FATAL ERRORS.
- * RCDC = RESERVED FOR CDC.
- * WCNT = WORD COUNT - 1 OF PARAMETER BLOCK.
- * RINS = RESERVED FOR INSTALLATION.
- * RSUB = RESERVED FOR SUBSYSTEM.
- SSC SX7 B0+ CLEAR COMMUNICATION BUFFER ADDRESS WORD
- SA7 APQA
- SA7 SSFG CLEAR *STSW* STATUS
- SA7 SSTA CLEAR FST ADDRESS FOR *SST* CALLS
- SX6 X4-3RSSF
- SX7 X4-3RSST
- ZR X6,SSF IF *SSF*
- SX4 X4-3RSSC
- ZR X7,SST IF *SST*
- NZ X4,APJ IF NOT *SSC*
- * CHECK CALL ARGUMENTS.
- SB5 X5 CHECK ADDR WITHIN RANGE
- LX5 -18 EXTRACT SUBSYSTEM ID
- LE B5,B1,CPE IF ADDR .LE. 1
- SB4 B4-B5
- SX7 -B4
- LE B4,B1,CPE IF ADDR+1 .GE. FL
- SX6 B5 CHECK COMPLETE BIT
- SA3 B3
- IX4 X3+X6
- ERX3 X4
- BX6 X0*X3 CLEAR ERROR STATUS FIELD
- LX3 -1
- NG X3,CPE IF COMPLETE BIT ALREADY SET
- EWX6 X4
- SX2 X5 SET SSID
- SA4 B7+SSCW SUBSYSTEM CONTROL WORD
- ZR X2,SSC11 IF SPECIAL SUBSYSTEM INITIALIZATION CALL
- SB4 SSC1 RETURN ADDRESS FOR *CSC*
- BX3 X4
- EQ CSC CHECK SUBSYSTEM CONNECTION
- SSC1 SX1 X5
- PX5 X1,B6 SAVE SHIFT COUNT AND SSID
- SA2 B7+AACW CHECK VALIDATION OF CP AS UCP
- SX6 EC01 * TOO MANY SCP CONNECTIONS.*
- LX6 6
- SX6 X6+B1 SET COMPLETION BIT
- ZR B6,SSC3.1 IF REQUEST TO 6TH SUBSYSTEM (*SSCW* FULL)
- LX2 59-11
- MX3 -3
- LX4 B6 POSITION *SSCW*
- BX6 -X3*X4 NUMBER OF REQUESTS
- SX6 X6-MAXR
- SB3 SSC4 RETURN ADDRESS
- ZR X6,SSC10 IF MAXIMUM NUMBER OF REQUESTS
- NG X2,RSC IF VALIDATED
- SA2 B7+SEPW CHECK FOR *SSJ=* ENTRY POINT
- LX2 59-50
- NG X2,RSC IF *SSJ=* ENTRY POINT
- * ABORT UNAUTHORIZED UCP WITH NO EXIT OR REPRIEVE PROCESSING.
- * *1MA* CALLED TO ISSUE *ILLEGAL USER ACCESS* ERROR MESSAGE
- * AND SET *SYET* ERROR FLAG.
- SSC2 MX0 1 FORCE UCP INTO RECALL
- SA2 RA1 RA+1 ADDRESS
- ERX5 X2
- LX0 40-59
- BX6 X5+X0
- EWX6 X2
- LX0 18-59-40+59 SET *1MA* MESSAGE INDEX
- SX2 B1+B1 SET *1MA* FUNCTION CODE
- SX5 B7 SET UCP CP ADDRESS
- EQ SSC15 CALL *1MA* TO ISSUE MESSAGE AND SET ERROR
- * PROCESS SUBSYSTEM NOT PRESENT.
- SSC3 SX6 ES1+1 * SUBSYSTEM NOT PRESENT.*
- SSC3.1 SA1 RA RA OF USER
- SX3 B5 PARAMETER ADDRESS
- IX3 X3+X1 ABSOLUTE ADDRESS
- ERX1 X3 SET ERROR STATUS AND COMPLETION BIT
- BX6 X6+X1 MERGE ERROR STATUS
- LX1 59-13 CHECK ABORT DESIRED
- BX7 X7-X7
- EWX6 X3
- PL X1,CPE IF ABORT
- EQ MTRP EXIT TO STORE OUTPUT REGISTER
- * RETURN FROM *RSC* WITH -
- *
- * (A2) = SUBSYSTEM *STSW* WORD IN CP AREA.
- * (B5) = RELATIVE ADDRESS OF USER PARAMETER AREA.
- * (X0) = -7777B.
- * (X3) = SUBSYSTEM RA.
- * (X5) = SHIFT COUNT AND SUBSYSTEM IDENTIFICATION.
- * (X6) = SUBSYSTEM FL.
- * (X7) = -(NUMBER OF WORDS ALLOWED FOR PARAMETER AREA.)
- *
- * *RSC* ERROR EXIT ADDRESSES -
- + VFD 12/SSC3-SSC4,18/SSC12,12/SSC10-SSC4,18/SSC10
- SSC4 SX4 SSIW CHECK SUBSYSTEM IDENTIFICATION WORD
- IX4 X4+X3
- ERX4 X4
- BX4 X4-X5
- SX1 X4
- NZ X1,SSC3 IF SUBSYSTEM NOT INITIALIZED AS SCP
- SA4 A2-STSW+EECW GET REPRIEVE STATUS
- LX4 59-58
- LX1 X4,B1
- PL X4,SSC4.1 IF NOT EXTENDED REPRIEVE MODE
- NG X1,SSC10 IF INTERRUPT HANDLER ACTIVE
- SSC4.1 SA4 A2-STSW+SSOW GET OUTSTANDING CONNECTION COUNT
- SX1 SSCR
- IX1 X1+X3
- ERX1 X1 READ SUBSYSTEM RECEIVING BUFFER POINTER
- BX2 X0+X4
- SB6 X6 (B6) = SUBSYSTEM FL
- SA4 B7+SEPW CHECK FOR SSJ= ENTRY POINT
- LX6 X1,B1
- LX4 59-50
- PL X6,SSC5 IF NO RESTRICTION ON UCP ACCESS
- * ALLOW PRIVILEGED PROGRAM UCP ONLY (SSJ= ENTRY POINT OR
- * SUBSYSTEM).
- NG X4,SSC5 IF SSJ= ENTRY POINT
- SA4 B7+JCIW CHECK FOR SUBSYSTEM
- LX4 36
- BX4 -X0*X4
- ZR X4,SSC2 IF NOT AUTHORIZED UCP
- SSC5 SB3 X1 RECEIVING BUFFER ADDRESS
- ZR X2,SSC10 IF MAXIMUM NUMBER OF REQUESTS OUTSTANDING
- AX1 18
- NG X1,SSC10 IF SUBSYSTEM NOT READY FOR DATA
- BX2 -X0*X1 LENGTH OF PARAMETER AREA (LP)
- ZR B3,SSC10 IF NO SUBSYSTEM RECEIVING BUFFER POINTER
- LE B3,B1,SSC13 IF AP OUT OF RANGE
- SB4 X1-HDRL (B4) = LP - HDRL
- AX1 18 EXTRACT XP
- SA4 RA
- SX6 B5
- IX4 X6+X4
- ERX4 X4 READ VARIABLE LENGTH WORD COUNT
- MX6 -6
- SB3 B3+HDRL DATA ADDRESS
- PL B4,SSC6 IF NOT VARIABLE LENGTH WORD COUNT
- LX4 -18
- BX4 -X6*X4 VARIABLE LENGTH OF BUFFER (WC)
- SX6 X4+HDRL
- IX6 X6-X2
- PL X6,CPE IF WC .GT. LP
- SB4 X4+B1 (B4) = VARIABLE LENGTH WORD COUNT
- SSC6 SX4 B4-MAXB-1
- SX6 B4+X7
- SX7 B3-B6
- PL X6,CPE IF PARAMETER BLOCK BEYOND UCP FL
- SX2 X7+B4
- BX4 X4*X2
- SX1 X1+
- SX2 B5+ FWA OF PARAMETER BLOCK
- PL X4,SSC13 IF LP .GE. FL(SS) OR LP .GT. MAXIMUM
- ZR X1,SSC8 IF NO XP TO MOVE
- * MOVE EXCHANGE PACKAGE.
- PX2 X2,B4 SAVE (B4)
- IX0 X1+X3 ABSOLUTE ADDRESS OF XP MOVE
- SB4 20B NUMBER OF WORDS TO TRANSFER
- SB5 X1+B4 LWA+1 OF XP MOVE
- SX6 B2 ADDRESS OF EXCHANGE PACKAGE
- GE B5,B6,SSC13 IF XP MOVE BEYOND FL
- SB6 SSC7 *MSM* *MSR* RETURN ADDRESS
- IX1 X6-X0 COMPUTE INCREMENT
- SX0 B2 FWA TO TRANSFER
- TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
- SSC7 UX2,B4 X2 (B4) = LENGTH OF PARAMETER BLOCK
- SB5 X2+ (B5) = FIRST WORD OF PARAMETER BLOCK
- * MOVE PARAMETER BLOCK.
- SSC8 SA1 RA USER RA
- SX6 B5
- IX0 X6+X1 FWA OF TRANSFER
- SX1 B3+
- IX1 X3+X1 FWA OF DATA BUFFER
- IX1 X0-X1
- SB6 SSC9 *MSM* *MSR* RETURN ADDRESS
- TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
- * STORE HEADER INFORMATION.
- SSC9 SA1 B7+TFSW GET EJT ORDINAL
- SA4 B7+SEPW
- MX0 -12
- SX6 10000B
- LX1 12
- LX4 12-52
- BX1 -X0*X1
- BX6 X6*X4
- CX4 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- BX1 X6+X1 MERGE *DMP=* FLAG AND EJT ORDINAL
- TA4 X4+JSNE,EJT GET JOB SEQUENCE NUMBER
- SX6 4000B
- MX7 24
- BX7 X7*X4
- BX6 X4+X6 SET SCP CONNECTION FLAG
- SA6 A4
- BX7 X7+X1
- SX1 B3-B1
- IX1 X1+X3
- EWX7 X1 STORE SECOND HEADER WORD
- UX2,B3 X5 (B3) = SHIFT COUNT, (X2) = SSID
- SX6 B1
- SA5 RA1
- ERX5 X5 READ (RA+1)
- IX1 X1-X6
- SX6 X5 ADDRESS OF UCP PARAMETER BLOCK
- EWX6 X1 STORE FIRST HEADER WORD
- * SET CPU INTERLOCK BIT.
- SX1 SSCR
- IX7 X1+X3
- ERX1 X7
- MX0 1
- BX6 X0+X1
- TIC DCPC INVALIDATE OTHER CPU CACHE IF PRESENT
- EWX6 X7
- * UPDATE CPA-S.
- SX3 B1
- SA4 A2-STSW+SSOW INCREMENT NUMBER OF OUTSTANDING REQUESTS
- IX7 X4+X3
- SA1 B7+SSCW
- SA7 A4
- LX1 B3 POSITION WAIT RESPONSE INDICATORS
- SX6 X2-LSSI ADD SUBSYSTEM INDEX TO *SSCW*
- LX6 6
- BX6 X1+X6
- IX6 X3+X6 INCREMENT WAIT RESPONSE INDICATORS
- SB6 60
- SB3 B6-B3
- LX6 B3
- BX7 X5
- SA6 A1
- MX0 -36
- LX7 59-40 CHECK AUTO RECALL DESIRED
- SA1 RC BUILD *RCLP* REQUEST
- BX5 -X0*X5
- AX7 59
- BX6 X1+X5
- BX6 X7*X6 CLEAR (RA+1) IF RECALL NOT SELECTED
- SB3 SSC9.1 *RCC* RETURN ADDRESS
- SA1 RA1
- EWX6 X1
- MX1 -3
- SA2 A2+ CHECK CPU STATUS
- LX2 3
- BX2 -X1*X2
- SX2 X2-XCPS
- NZ X2,SSC9.2 IF NOT *X* STATUS
- SA7 T1 SAVE (X7)
- SB6 A2-STSW SET EXCHANGE PACKAGE ADDRESS
- EQ RCC RECALL SCP
- SSC9.1 SA1 T1 RESTORE (X7)
- BX7 X1
- SSC9.2 NG X7,MTR IF RECALL DESIRED
- EQ MTRX EXIT
- * PROCESS SUBSYSTEM BUSY.
- SSC10 SA1 RA
- SX2 B5
- IX2 X2+X1 CHECK RECALL DESIRED
- ERX1 X2
- SX4 ES2+1 * SUBSYSTEM BUSY.*
- BX6 X1+X4
- LX1 59-12
- BX7 X7-X7
- PL X1,SXS IF RECALL DESIRED
- EWX6 X2
- EQ MTRP EXIT
- * PROCESS SPECIAL SUBSYSTEM INITIALIZATION CALL.
- SSC11 SB6 SSC12 SET RETURN ADDRESS FOR *RSI*
- EQ RSI RETURN SUBSYSTEM INFORMATION
- * PROCESS ILLEGAL SUBSYSTEM IDENTIFICATION.
- SSC12 SX7 ES3+1 *SUBSYSTEM ID ILLEGAL.*
- EQ SSC12.1 SET ERROR STATUS
- * RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
- + SX7 B1+ SET COMPLETION BIT
- SB6 X3+11 SET SUBSYSTEM ACTIVE FLAG IN *SSCT*
- LX6 X7,B6
- BX6 X2+X6
- SA6 A2+
- SSC12.1 SA1 RA SET RETURN CODE
- SX2 B5
- IX2 X2+X1
- ERX1 X2
- BX6 X1+X7
- MX7 0
- EWX6 X2
- EQ MTRP EXIT
- * ABORT SUBSYSTEM FOR ILLEGAL XP, AP, OR LP PARAMETERS.
- *
- * (B5) = ADDRESS OF UCP PARAMETER AREA.
- * (X3) = SUBSYSTEM RA.
- * (A2) = *STSW* WORD IN SUBSYSTEM CP AREA.
- SSC13 SX6 B5 SAVE UCP PARAMETER ADDRESS
- LX3 30 SAVE SCP RA
- BX6 X3+X6
- SX0 B0 FORCE SCP ABORT
- SA6 T2
- SX5 A2-STSW SUBSYSTEM CP ADDRESS
- SX2 2 SET *1MA* FUNCTION CODE
- * CALL *1MA*. (ALSO ENTERED HERE FROM *SSF*.)
- *
- * (X0) = 36/0, 6/INDX, 18/ADDR
- * INDX = SUBSYSTEM INDEX, OR MESSAGE INDEX IF ADDR = 0.
- * ADDR = RELATIVE ADDRESS OF SUBSYSTEM PARAMETER WORD.
- * = 0, IF *CPUMTR* REQUESTING ABORT.
- * (X2) = *1MA* FUNCTION CODE.
- * (X5) = CP ADDRESS.
- SSC15 SA4 X5+STSW CHECK ROLLOUT REQUESTED
- SX6 3R1MA BUILD *1MA* REQUEST
- BX7 X0 SAVE *1MA* PARAMETER
- SA7 T1
- LX6 59-17
- SB3 SSC17 SET RETURN ADDRESS
- LX2 24
- BX6 X6+X0
- LX4 59-24
- BX6 X6+X2
- NG X4,SSC19 IF ROLLOUT REQUESTED
- SX0 B7 SAVE CONTROL POINT ADDRESS
- SB7 X5
- SB4 -1 PROHIBIT QUEUING
- MX1 1 SET CHECK ACTIVITY FLAG
- BX0 X0+X1
- SB6 SSC16 SET RETURN IF NOT AT ACTIVITY LIMIT
- EQ CAL CHECK ACTIVITY LIMIT
- SSC16 SX0 X0 CLEAR CHECK ACTIVITY FLAG
- TJP (/DCP/APQ,DCPC,/MONITOR/APQ) ASSIGN PP
- SSC17 SB5 B7+ SAVE CPA ADDRESS
- SB7 X0 RESTORE (B7)
- BX7 X7-X7
- NG X0,SSC19 IF TOO MUCH ACTIVITY
- NZ X1,SSC17.2 IF PP ASSIGNED
- MX7 1 SETUP TO QUEUE THE REQUEST
- SA2 APQA
- SB7 B5 RESTORE CONTROL POINT ADDRESS
- BX7 X7+X2
- SX2 NPQ
- SA7 AQRA
- SB3 SSC17.1
- EQ AQR QUEUE AS A NO ROLL REQUEST
- SSC17.1 SB7 X0+ RESTORE (B7)
- SX7 B0+
- SSC17.2 SA1 T1 CHECK *1MA* PARAMETER
- NZ X1,SSC18 IF NOT SCP ABORT
- SA3 T2 GET UCP PARAMETER ADDRESS AND SCP RA
- SA1 RA GET UCP RA
- SX2 X3
- AX3 30
- IX2 X1+X2
- ERX1 X2 SET ERROR STATUS IN UCP PARAMETER BLOCK
- ERRNZ ES1-2 CODE DEPENDS ON VALUE OF *ES1*
- MX6 -2
- BX6 -X6+X1
- EWX6 X2
- SX2 SSIW CLEAR SUBSYSTEM IDENTIFICATION WORD
- IX2 X3+X2
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- EWX7 X2
- SSC18 SA2 RA1
- ERX5 X2 GET CALL ADDRESS
- MX6 -36
- BX0 -X6*X5
- LX5 59-40
- SA4 RC BUILD *RCLP* REQUEST
- SA1 B5+STSW UPDATE *STSW*
- SA3 SSFG
- BX6 X1+X3
- SA6 A1
- PL X5,MTRP IF NOT AUTO RECALL
- BX7 X4+X0 SET *RCLP* REQUEST
- EWX7 X2
- EQ MTR ENTER RECALL STATUS
- SSC19 SA1 APQA CLEAR BUFFER INTERLOCK
- SA2 RA1
- ZR X1,SSC20 IF NO BUFFER
- BX6 X6-X6
- SA6 X1
- SSC20 SA4 SSTA
- ERX1 X2 GET RA+1 REQUEST
- ZR X4,SXS IF NO FNT INTERLOCK TO CLEAR
- LX1 17-59 POSITION REQUEST NAME
- SX1 X1-3RSST
- ZR X1,SST9 IF *SST* REQUEST
- EQ SXS SET *X* STATUS
- * THE FOLLOWING CHECKS ARE MADE TO INSURE THAT THESE TAGS
- * ARE BENEATH RA+100B OF SUBSYSTEM FL.
- ERRNG 77B-SSIW
- ERRNG 77B-SSCR
- SSF SPACE 4,10
- *** *SSF*.
- * PROCESS SUBSYSTEM FUNCTION CALLS.
- *
- *T 18/ *SSF*,1/ ,1/R,4/ ,18/0,18/ ADDR
- *
- *T ADDR 6/ RC,12/ FP,18/ UCPA,18/ SCPA,6/ FC
- *T ADDR+1 24/ JSEQ,23/0,1/D,12/ JEJT
- *T ADDR+2 1/U,1/S,10/ 0,24/ EUCPA,24/ ESCPA
- *
- * FC FUNCTION CODE -
- * 02 SEND DAYFILE MESSAGE AND/OR ABORT USER.
- * 04 UPDATE USER JOB ACCOUNTING.
- * 06 COMPLETE USER REQUEST.
- * 10 READ USER JOB MEMORY.
- * 12 RETURN USER JOB STATUS.
- * 14 WRITE USER JOB MEMORY.
- * 16 EXIT FROM SYSTEM CONTROL POINT STATUS.
- * 24 ALLOW USER SWAPPING.
- * 26 SWAP IN USER JOB.
- * 30 SET LONG TERM CONNECTION.
- * 32 CLEAR LONG TERM CONNECTION.
- * 34 ALLOW MULTIPLE REQUEST CAPABILITY.
- * 40 EXTENDED READ USER JOB CM/ECS.
- * 42 EXTENDED MULTIPLE REQUEST PROCESSING.
- * 44 EXTENDED WRITE USER JOB CM/ECS.
- * 46 RETURN USER JOB IDENTIFICATION.
- * 50-66 RESERVED FOR CDC.
- * 70-76 RESERVED FOR INSTALLATIONS.
- * SCPA A DATA ADDRESS WITHIN THE SUBSYSTEM MEMORY.
- * UCPA A DATA ADDRESS WITHIN A USER JOB MEMORY.
- * FP A PARAMETER MEANINGFUL TO A PARTICULAR FUNCTION.
- * RC SYSTEM REPLY - (SEE *COMSSCP*)
- * 34-37 RESERVED FOR INSTALLATIONS.
- * 40 AT LEAST ONE ERROR ENCOUNTERED IN LIST.
- * 41 JOB IDENTIFIER IS INVALID.
- * 42 SCP CM/ECS ADDRESS OUT OF RANGE.
- * 43 UCP CM/ECS ADDRESS OUT OF RANGE.
- * 44 USER JOB IS SWAPPED OUT.
- * 45 USER JOB IS NOT IN THE SYSTEM.
- * 46 SWAP IN REQUEST TEMPORARILY PROHIBITED.
- * 47-55 RESERVED FOR CDC.
- * 56 ECS ABORT/PARITY ERROR.
- * 57 CONNECTION PREVIOUSLY ESTABLISHED.
- * 60 CONNECTION REJECTED.
- * 61 CONNECTION NOT PREVIOUSLY ESTABLISHED.
- * 62 WORD TRANSFER TOO LONG.
- * 63 UCP NOT ESTABLISHED WITH SUBSYSTEM.
- * 64 SUBSYSTEM IS ESTABLISHED WITH RECEIVER.
- * 65 ATTEMPT TO SET ILLEGAL ERROR FLAG.
- * 66 ILLEGAL DAYFILE PROCESSING FLAG.
- * 67-73 RESERVED FOR CDC.
- * 74-77 RESERVED FOR INSTALLATIONS.
- * JEJT JOB EJT ORDINAL.
- * D IF SET, UCP MUST BE *DMP=* PROGRAM, OTHERWISE UCP MUST
- * NOT BE *DMP=* PROGRAM.
- * JSEQ JOB SEQUENCE NUMBER.
- * EUCPA UCP CM OR ECS ADDRESS, FOR SF.XRED (40) AND
- * SF.XWRT (44) FUNCTIONS ONLY.
- * ESCPA SCP CM OR ECS ADDRESS, FOR SF.XRED (40) AND
- * SF.XWRT (44) FUNCTIONS ONLY.
- * U IF SET, EUCPA IS UCP ECS ADDRESS, OTHERWISE EUCPA
- * IS UCP CM ADDRESS.
- * S IF SET, ESCPA IS SCP ECS ADDRESS, OTHERWISE ESCPA
- * IS SCP CM ADDRESS.
- SSF BSS 0 ENTRY
- * CHECK CALL ARGUMENTS.
- SA2 B7+JCIW CHECK SUBSYSTEM CALL
- SB6 X5 CHECK ADDR WITHIN RANGE
- LX2 -24
- LE B6,B1,CPE IF ADDR .LE. 1
- SA3 B3 RA OF SUBSYSTEM
- SX1 SSIW SUBSYSTEM IDENTIFICATION WORD
- IX1 X3+X1
- ERX1 X1
- BX7 -X0*X1 SUBSYSTEM IDENTIFICATION FROM RA+SSIW
- GE B6,B4,CPE IF ADDR .GE. FL
- BX4 -X0*X2 SUBSYSTEM IDENTIFICATION FROM CPA
- SX1 B6
- IX6 X3+X1
- ERX3 X6 READ (ADDR)
- SA6 T1 ABSOLUTE *ADDR*
- BX7 X4-X7
- SX4 X4-LSSI-1
- NZ X7,CPE IF SUBSYSTEM CODE NOT INITIALIZED
- NG X4,CPE IF CALLER NOT SUBSYSTEM
- MX2 -18
- BX4 -X2*X1
- SX6 MSFO*10B SET MAXIMUM SFCALL OVERHEAD
- SA6 SSFE
- * CHECK USER JOB.
- * (X0) = -7777B.
- * (X3) = SFCALL FUNCTION WORD.
- * (X4) = LIST PROCESSING FLAG.
- * (B3) = (RA).
- * (B4) = SUBSYSTEM FL.
- SSF1 MX7 -6 CHECK FUNCTION CODE (FC) FOR LEGALITY
- SA1 SSFB CHECK IF SCPA VALIDITY CHECKING NEEDED
- BX7 -X7*X3
- SA2 SSFE DECREMENT REMAINING MONITOR TIME
- LX3 59-0
- SB5 X7 FUNCTION CODE (FC)
- TX6 X2,-SFFO
- SA6 A2
- LX1 X1,B5
- NG X3,CPE IF COMPLETION BIT ALREADY SET
- SX6 B5-EXIT
- SX2 B5-REGR
- ZR X6,S16 IF *SF.EXIT* REQUEST
- LX3 59-41-59+0 EXTRACT FUNCTION PARAMETER
- BX7 -X0*X3 FP
- LX3 -6-12-6 EXTRACT SCPA
- PX7,B5 X7 SAVE FC AND FP
- SB6 X3 SCPA
- LE B5,B1,CPE IF ILLEGAL FC
- SB5 X7+B6
- PL X1,SSF3 IF NO SCPA CHECKING REQUIRED
- * CHECK SCPA OUT OF RANGE.
- NZ X2,SSF2 IF NOT *SF.REGR*
- ZR B6,SSF3 IF NO MESSAGE ADDRESS SPECIFIED
- SB5 B6+MESL CHECK MESSAGE LENGTH
- SSF2 LE B6,B1,SSF20 IF SCPA .LE. 1
- NG B5,SSF20 IF (SCPA + FP) EXCEED 17 BITS
- GT B5,B4,SSF20 IF SCPA LWA .GT. FL
- * CHECK OTHER USER JOB INFORMATION.
- SSF3 NG X4,SSF4 IF LIST PROCESSING IN EFFECT
- SB6 SSF21 SET RETURN ADDRESS IF INVALID EJT ORDINAL
- SB5 SSF3.1 SET NORMAL RETURN ADDRESS FOR *CUI*
- EQ CUI CHECK UCP IDENTIFICATION
- SSF3.1 NZ X6,SSF18 IF NO MATCH ON JOB SEQUENCE NUMBER
- SX6 A1 SAVE UCP EJT ENTRY ABSOLUTE ADDRESS
- ERX3 X3 READ PARAMETER WORD
- SA6 SSFF
- NZ X2,SSF14 IF UCP NOT AT CONTROL POINT
- SA2 CMCL CHECK FOR STORAGE MOVE
- AX2 48
- LX2 7
- BX2 X5-X2
- ZR X2,SXS IF UCP JOB MOVING
- LX3 -6
- LX5 18
- BX4 X4+X5 SAVE UCP CPA
- LX1 59-6
- NG X1,SSF14.1 IF JOB ADVANCE SET
- BX5 X3 SAVE REGISTERS
- SB5 B4
- SA2 B7+JCIW GET SSID
- LX2 -24
- BX2 -X0*X2
- LX4 -18
- SA3 X4+SSCW
- SB4 SSF3.2 RETURN ADDRESS FOR *CSC*
- EQ CSC CHECK SUBSYSTEM CONNECTION
- SSF3.2 LX4 -18 SAVE SHIFT COUNT
- SX1 B6+
- BX3 X5 RESTORE (X5)
- BX4 X4+X1
- SB4 B5+ RESTORE (B4)
- LX4 36
- * CHECK IF SWPO HAS BEEN ISSUED BY REQUESTING SCP.
- * IF SO RETURN *ROLLED OUT* STATUS (RC=44).
- SSF4 UX1,B5 X7 EXTRACT FC
- SX5 B5-SWPI
- ZR X5,SSF5 IF SF.SWPI FUNCTION
- BX5 X5-X5
- LX4 -18
- SA2 X4+SSCW GET UCP CONTROL WORD
- LX4 -18
- SB6 X4
- LX4 36
- ZR B6,SSF5 IF NO CONNECTION
- LX5 X2,B6 POSITION ROLLOUT ALLOWED FLAG
- LX5 59-4
- * CHECK UCPA OUT OF RANGE
- SSF5 SA2 SSFC CHECK IF UCPA VALIDITY CHECKING NEEDED
- LX2 X2,B5
- LX1 X2,B1
- SX6 B5-ENDT CHECK FOR SF.ENDT FUNCTION
- LX3 -18
- SB6 X3 UCPA
- LX3 18
- NZ X6,SSF6 IF NOT SF.ENDT REQUEST
- SX6 B6
- NG B6,SSF8 IF SPECIAL SF.ENDT (UCPA .LT. 0)
- NG X5,SSF15 IF SF.SWPO ISSUED, RETURN RC44 STATUS
- ZR B6,SSF8 IF SPECIAL SF.ENDT (UCPA = 0)
- BX7 X0*X7 CLEAR FUNCTION PARAMETER FIELD
- SSF6 NG X5,SSF15 IF SF.SWPO ISSUED, RETURN RC44 STATUS
- PL X2,SSF8 IF NO UCPA CHECKING REQUIRED
- PL X1,SSF7 IF NOT EXTENDED UCPA
- MX5 2
- BX5 X5*X4 CALCULATE EXTENDED ADDRESS WORD BIAS
- SX1 B1+B1
- LX5 2
- BX1 X5-X1 0 = LIST, 1 = XLST, 2 = XRED/XWRT
- SB6 X1
- ZR X1,CPE IF SF.XRED/SF.XWRT IN SF.LIST
- SA5 B3 RA
- SX1 X4+B6
- IX6 X5+X1
- ERX1 X6 GET EXTENDED UCPA ADDRESS
- SA6 T2
- NG X1,SSF8 IF EUCPA IS ECS ADDRESS
- LX1 -24 VALIDATE EXTENDED UCP CM ADDRESS
- SB6 X1
- SSF7 LX4 -18
- SA5 X4+FLSW GET UCP RA AND FL
- LX4 18
- BX2 -X0*X5 FL/100
- MX0 -RMSK
- AX5 RSHF
- LE B6,B1,SSF11 IF UCP ADDRESS OUT OF RANGE
- BX6 -X0*X5 UCP RA/100
- MX0 -12
- LX2 6 FL
- SX5 X7+B6 UCPA LWA + 1
- LX6 6
- IX2 X2-X5 FL - (LWA+1)
- NG X5,SSF11 IF (UCPA + FP) EXCEED 17 BITS
- SX1 B6
- IX6 X1+X6 X6 = UCPA ABSOLUTE
- NG X2,SSF11 IF UCPA OUT OF RANGE
- * EXIT TO FUNCTION PROCESSOR.
- SSF8 LX4 -36
- SB6 X4 SHIFT COUNT
- MX5 -3
- LX4 18
- SA2 X4+SSCW GET SCP CONTROL WORD OF UCP
- LX4 18
- LX2 B6
- BX1 -X5*X2 WAIT RESPONSE INDICATOR FOR THIS SUBSYSTEM
- SX5 B5-2 CHECK FUNCTION CODE
- LX5 -2
- SX3 X3+ EXTRACT SCPA
- SB5 X5-MXSF
- PL B5,CPE IF ILLEGAL FUNCTION CODE
- NZ B6,SSF8.1 IF VALID *SSCW*
- SX1 B0+ CLEAR WAIT RESPONSE INDICATORS
- SX2 B0+ CLEAR *SSCW*
- SSF8.1 JP B5+SSFA+MXSF PROCESS FUNCTION
- SPACE 4
- * EXIT TO FUNCTION PROCESSOR WITH -
- *
- * (T2) = ABSOLUTE ADDRESS OF EXTENDED ADDRESS WORD.
- * IF EXTENDED ADDRESS FUNCTION.
- * (A2) = *SSCW* ADDRESS IN UCP CPA.
- * (T1) = ABSOLUTE ADDRESS OF FUNCTION PARAMETER WORD.
- * ((B3)) = SUBSYSTEM RA.
- * (B4) = SUBSYSTEM FL.
- * (B5) = JUMP POSITION IN TABLE.
- * (B6) = SUBSYSTEM INDICATOR SHIFT COUNT.
- * (X0) = -7777B.
- * (X1) = WAIT RESPONSE INDICATORS FOR THIS UCP.
- * (X2) = *SSCW* WORD OF UCP CPA SHIFTED TO SCP BYTE.
- * (X3) = SCPA (RELATIVE ADDRESS).
- * (X4) = LIST PROCESSING FLAG.
- *T 1/L,1/E,1/A,3/0,18/ INDX,18/ CPA,18/ SFA
- * L = SET IF LIST PROCESSING IN EFFECT (SF.LIST
- * OR SF.XLST FUNCTION).
- * E = SET IF EXTENDED LIST PROCESSING IN EFFECT
- * (SF.XLST WITH 2 WORDS PER LIST ENTRY).
- * A = SET IF NO ADVANCE ON FUNCTIONS IN LIST.
- * INDX = SHIFT COUNT.
- * CPA = UCP CONTROL POINT ADDRESS.
- * SFA = CURRENT FUNCTION RELATIVE ADDRESS.
- * OR LIST ENTRY).
- * (X6) = UCPA ABSOLUTE.
- * (X7) = 12/FC,30/ ,18/FP
- * FC = FUNCTION CODE.
- * FP = FUNCTION PARAMETER WORD.
- *
- * FUNCTION JUMP TABLE. TWO FUNCTIONS PER WORD.
- SSFA BSS 0
- LOC 0
- + PL X5,S02 SF.REGR (02)
- EQ SSF19 SF.TIM (04) - NOT IMPLEMENTED
- + PL X5,S06 SF.ENDT (06)
- EQ S10 SF.READ (10)
- + PL X5,S12 SF.STAT (12)
- EQ S10 SF.WRIT (14)
- + PL X5,S16 SF.EXIT (16)
- EQ CPE SF.INUF (20) - NOT IMPLEMENTED
- + PL X5,CPE SF.RTUF (22) - NOT IMPLEMENTED
- EQ S24 SF.SWPO (24)
- + PL X5,S24 SF.SWPI (26)
- EQ S30 SF.SLTC (30)
- + PL X5,S30 SF.CLTC (32)
- EQ S34 SF.LIST (34)
- + PL X5,CPE SF.RERN (36) - NOT IMPLEMENTED
- EQ S40 SF.XRED (40)
- + PL X5,S42 SF.XLST (42)
- EQ S40 SF.XWRT (44)
- PL X5,S46 SF.CPID (46)
- EQ CPE (50) - NOT IMPLEMENTED
- LOC *O
- MXSF EQU *-SSFA
- * FUNCTION 02 - SEND MESSAGE TO USER JOB.
- S02 MX6 -4
- SA1 A2-SSCW+JCIW CHECK SUBSYSTEM CONNECTED WITH UCP
- BX7 -X6*X2
- LX1 36
- ZR X7,SSF16 IF UCP NOT ESTABLISHED WITH SUBSYSTEM
- BX2 -X0*X1 CHECK IF UCP IS A SUBSYSTEM
- SX1 X2-LSSI-1
- NG X1,S022 IF UCP NOT A SUBSYSTEM
- * NOTE - IF TWO SUBSYSTEMS ARE CONNECTED TO ONE ANOTHER,
- * THE UCP CANNOT ISSUE AN SF.REGR REQUEST ON THE SCP.
- SB5 B4 SAVE REGISTERS
- BX5 X3
- SA3 B7+SSCW
- SB4 S021 RETURN ADDRESS FOR *CSC*
- EQ CSC CHECK SUBSYSTEM CONNECTION
- S021 SA3 A3 CHECK SCP CONNECTED TO UCP
- LX3 B6
- MX6 -4
- BX2 -X6*X3
- BX3 X5 RESTORE REGISTERS
- SB4 B5
- ZR B6,S022 IF NOT CONNECTED
- SX5 RC64 * UCP IS ESTABLISHED WITH RECEIVER.*
- NZ X2,SSF12 IF SUBSYSTEM (SCP) ESTABLISHED WITH UCP
- S022 SX5 A1-JCIW UCP CP ADDRESS
- EQ SSF9 FORMAT 1MA REQUEST
- * FUNCTION 06 - COMPLETE USER REQUEST.
- S06 ZR X3,S062 IF NO UCP ACCOUNT PROCESSING
- SB5 X3 VALIDATE ADDRESS
- SA5 B3 RA OF SCP
- LT B5,B1,SSF20 IF SCPA .LT. 0
- SB5 B5+4 ADD PARAMETER BLOCK LENGTH
- GT B5,B4,SSF20 IF PARAMETER BLOCK OUTSIDE FL
- IX2 X5+X3 SET ABSOLUTE PARAMETER BLOCK ADDRESS
- SA6 S06A SAVE UCPA ABSOLUTE
- MX7 -18 GET UCP CP ADDRESS
- LX7 18
- BX7 -X7*X4
- AX7 18
- BX6 X4 SAVE LIST PROCESSING FLAG
- SA6 S06B
- SX6 B3 SAVE SUBSYSTEM RA ADDRESS
- LX6 18
- SX4 B4 SAVE SUBSYSTEM FL
- BX6 X6+X4
- LX6 18
- SX4 B6 SAVE SHIFT COUNT
- BX6 X6+X4
- SA6 S06C
- SX6 B7 SAVE SCP CP ADDRESS
- SA6 S06D
- BX5 X1 SAVE WAIT RESPONSE INDICATORS
- SB7 X7 SET UCP CP ADDRESS
- SB3 S061 SET EXIT ADDRESS
- EQ IAA INCREMENT AUC ACCUMULATOR
- S061 SA2 B7+SSCW RESTORE REGISTERS
- SA3 S06D
- SB7 X3
- SA3 S06C
- SB6 X3
- AX3 18
- SB4 X3
- AX3 18
- SB3 X3
- SA4 S06B
- SA1 S06A
- BX6 X1
- BX1 X5
- MX0 -12
- LX2 B6
- NE B5,B0,SSF22 IF EXCESSIVE AUC INCREMENT
- S062 SX3 B1
- IX7 X2-X3 DECREMENT WAIT RESPONSE INDICATORS
- PL X6,S063 IF ONLY ONE FUNCTION TO SET COMPLETE
- LX3 3
- BX5 X3*X2 LONG TERM CONNECTION INDICATOR
- LX5 -3
- IX1 X1+X5 COUNT OF CONNECTION INDICATORS
- LX3 X1
- BX7 X0*X2 CLEAR ALL CONNECTION INDICATORS
- S063 ZR X1,SSF16 IF NO CONNECTION INDICATORS SET
- MX5 -4
- BX1 -X5*X7 NEW CONNECTION INDICATORS
- NZ X1,S064 IF STILL CONNECTIONS TO THIS SCP
- BX7 X0*X2 CLEAR ALL CONNECTION INDICATORS
- S064 SB5 60
- SB5 B5-B6
- LX7 B5 UPDATE *SSCW*
- SA7 A2+
- SA1 B7+SSOW UPDATE OUTSTANDING CONNECTION COUNT
- IX7 X1-X3
- BX5 X5-X5 REPLY CODE (NO ERRORS)
- SA7 A1+
- SB5 A2-SSCW UCP CONTROL POINT ADDRESS
- SB6 -B5
- ZR X6,SSF12 IF NO COMPLETION BIT TO SET
- NG X6,SSF12 IF NO COMPLETION BIT TO SET
- ERX1 X6 SET COMPLETION BIT
- BX7 X3+X1
- EWX7 X6
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- EQ SSF12 COMPLETE REQUEST
- S06A CON 0 SAVE UCPA ABSOLUTE
- S06B CON 0 SAVE LIST PROCESSING FLAG
- S06C CON 0 SAVE B REGISTERS
- S06D CON 0 SAVE SCP CP ADDRESS
- * FUNCTIONS 10 AND 14 - READ/WRITE DATA.
- S10 ZR X1,SSF16 IF NO WAIT RESPONSE INDICATORS SET
- SX5 B5+MXSF-WRIT/4+1
- SX7 X7 WORD COUNT
- SA1 B3 RA OF SCP
- LX6 30
- IX1 X1+X3 ABSOLUTE SCPA
- IX6 X6+X1 30/UCPA ABS, 30/SCPA ABS
- SX1 X7-MAXB-1 CHECK TRANSFER SIZE
- NG X1,S401 IF TRANSFER SIZE NOT TOO LARGE
- SX5 RC62 * WORD TRANSFER TOO LONG.*
- EQ SSF12 SET COMPLETE BIT AND ERROR CODE
- * FUNCTIONS 40 AND 44 - EXTENDED READ/WRITE DATA.
- S40 ZR X1,SSF16 IF NO WAIT RESPONSE INDICATORS SET
- SX5 B5+MXSF-XWRT/4+1 CHECK FOR READ OR WRITE FUNCTION
- SX7 X7 WORD COUNT
- SA2 T2
- ERX2 X2 VALIDATE SCPA CM ADDRESS
- LX1 X2,B1
- BX3 X1*X2
- SB5 X2+ ESCPA
- NG X3,CPE IF BOTH ECS ADDRESSES
- SX3 X2
- TNG X1,(/SCPUEC/SFE1,UEC,/MONITOR/SSF20) IF SCP ECS
- SB6 B5+X7 VALIDATE SCP EXTENDED CM ADDRESS
- LE B5,B1,SSF20 IF ESCPA .LE. 1
- SA1 B3
- LX6 30
- IX1 X1+X3 ABSOLUTE SCP CM ADDRESS
- IX6 X6+X1 UCP/SCP
- GT B6,B4,SSF20 IF ESCPA + FP .GT. FL
- TNG X2,(/SCPUEC/SFE,UEC,/MONITOR/SSF11) IF UCP ECS
- S401 SB6 S402 SET RETURN ADDRESS FOR *CWT*
- EQ CWT CALCULATE WORD TRANSFER SIZE
- S402 BX2 X4 SAVE LIST FLAG
- NZ X5,S403 IF SF.READ
- LX6 30 REVERSE PARAMETERS FOR WRITE
- S403 MX5 30
- BX1 -X5*X6 ADDRESS TO MOVE TO
- LX6 30
- BX0 -X5*X6 ADDRESS TO MOVE FROM
- IX1 X0-X1 DIFFERENCE
- SB6 S404 SET *MSM*/*MSR* RETURN ADDRESS
- SX5 B4 SAVE TRANSFER SIZE
- TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
- * RESTORE REGISTERS. UPDATE REMAINING WORD COUNT AND
- * SCP/UCP ADDRESSES FOR EXTENDED MODE READ/WRITE.
- *
- * (X2) = LIST PROCESSING FLAG.
- * (X3) = SCP FL.
- * (X5) = TRANSFER SIZE.
- S404 TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- BX4 X2 RESTORE LIST PROCESSING FLAG
- SB4 X3 RESTORE SUBSYSTEM FL
- SA1 B3 RA
- SX2 X4 RELATIVE ADDRESS
- IX2 X2+X1
- ERX1 X2 GET FUNCTION PARAMETER WORD
- MX2 -6
- BX2 -X2*X1 FUNCTION CODE
- MX0 -12
- SX2 X2-XRED CHECK FOR EXTENDED MODE READ/WRITE
- NG X2,SSF19 IF NOT EXTENDED READ/WRITE
- LX1 18 DECREMENT WORD COUNT
- IX6 X1-X5
- BX3 -X0*X6 CHECK IF TRANSFER COMPLETE
- SA2 T2
- ERX2 X2 ADVANCE UCP AND SCP ADDRESSES
- LX6 -18
- IX7 X2+X5
- SA2 B3 RA
- SX0 X4 REL ADDRESS
- IX2 X2+X0
- EWX6 X2
- MX0 -12
- LX5 24
- IX7 X7+X5
- SA2 T2
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- EWX7 X2
- MX2 1
- ZR X3,SSF19 IF TRANSFER COMPLETE
- LX2 -2
- BX4 X4+X2 SET NO ADVANCE ON LIST
- EQ SSF19 SET COMPLETE BIT AND NO ERROR
- * FUNCTION 12 - RETURN STATUS OF USER JOB.
- *
- * ENTER HERE TO COMPLETE FUNCTION 46 (SF.CPID) SUBFUNCTION TO
- * RETURN APPLICATION ACCESS LEVEL TO A PRIVILEGED USER.
- * (B4) = 1.
- S12 MX6 -4 RETURN LONG TERM CONNECTION, WAIT RESPONSE
- SA1 SSFF GET UCP EJT ENTRY ADDRESS
- SA1 X1+SCLE GET JOB ORIGIN
- LX1 -48
- BX1 -X6*X1
- BX5 -X6*X2 1/LONG TERM CONNECTION, 3/WAIT RESPONSE
- * CHECK FOR PRIVILEGED PROGRAM AND PRIVILEGED USER.
- * A PRIVILEGED PROGRAM IS ONE WITH AN SSJ= ENTRY POINT
- * OR A SUBSYSTEM. A PRIVILEGED USER IS A SYSTEM
- * ORIGIN JOB OR A USER WITH SYSTEM ORIGIN PRIVILEGES
- * WHEN THE SYSTEM IS IN *DEBUG* MODE.
- BX7 X3
- SX3 X1-SYOT CHECK FOR SYSTEM ORIGIN JOB
- SA1 B3 RELATIVE ADDRESS
- IX7 X7+X1 SCPA
- SA2 A2+JCIW-SSCW CHECK FOR SUBSYSTEM IDENTIFICATION
- SA1 A2+SEPW-JCIW CHECK FOR SSJ= ENTRY POINT
- LX2 36
- BX6 -X0*X2
- SA2 A2+AACW-JCIW CHECK FOR SYSTEM ORIGIN PRIVILEGES
- LX1 59-50
- SX6 X6-LSSI-1
- BX1 -X6+X1
- PL X1,S121 IF NOT SUBSYSTEM AND NOT SSJ=
- SX5 X5+40B SET PRIVILEGED PROGRAM STATUS
- S121 ZR X3,S122 IF *SYOT* JOB
- SA1 SSTL CHECK FOR *DEBUG* MODE
- LX2 59-4
- LX1 59-12
- BX3 X1*X2 CHECK FOR *SYOT* PRIVILEGES AND *DEBUG*
- BX3 -X3
- S122 NG X3,S123 IF NOT PRIVILEGED USER
- SX5 X5+20B SET PRIVILEGED USER STATUS
- S123 EQ B4,B1,S124 IF SF.CPID SUBFUNCTION
- SA1 B3 RA
- SX2 X4 RELATIVE ADDRESS
- IX2 X2+X1
- ERX1 X2 RETURN STATUS INFORMATION
- LX1 18
- BX1 X0*X1
- BX6 X1+X5
- LX6 -18
- EWX6 X2
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- EQ SSF19 SET COMPLETE BIT AND NO ERROR
- * COMPLETE FUNCTION 46 (SF.CPID) WITH *FP* = 1.
- S124 SB4 X5 SAVE PRIVILEGES
- SB3 A2 SAVE PRIVILEGES ADDRESS
- SB6 CPE SET ERROR ADDRESS FOR *CUI*
- SB5 S125 SET RETURN ADDRESS FOR *CUI*
- EQ CUI GET JSN
- S125 SA2 B3+ RESTORE PRIVILEGES ADDRESS
- MX6 24
- BX6 X6*X1 JSN
- SA1 A2+AALW-AACW ADD APPLICATION ACCESS LEVEL
- MX3 -6
- BX1 -X3*X1
- BX6 X6+X1
- SX5 B4 SET PRIVILEGES
- LX5 6
- BX6 X6+X5
- EWX6 X7
- EQ SSF19 SET COMPLETE BIT AND NO ERROR
- * FUNCTION 16 - EXIT FROM SYSTEM CONTROL POINT STATUS.
- S16 SB6 S16 SET RETURN ADDRESS FOR *RSI*
- EQ RSI RETURN SUBSYSTEM IDENTIFICATION
- * RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
- + SX6 B1 CLEAR SUBSYSTEM ACTIVE FLAG
- SB6 X3+11
- LX6 B6
- BX6 -X6*X2
- SA1 B7+SSOW CHECK FOR OUTSTANDING CONNECTION
- SA6 A2
- SA3 B3
- SX6 SSIW
- IX3 X3+X6
- BX6 X6-X6
- BX5 -X0*X1
- EWX6 X3 CLEAR SUBSYSTEM IDENTIFICATION WORD
- ZR X5,SSF19 IF SCP HAS NO OUTSTANDING CONNECTIONS
- SA5 B3+B1 ADDRESS OF RA+1
- MX7 1
- ERX3 X5 READ RA+1
- LX7 40-59
- BX7 X7+X3
- SX2 4 SET *1MA* FUNCTION CODE
- EWX7 X5
- SX3 -B1 INDICATE NO DATA FOR MESSAGE BUFFER
- SX5 B7 SCP CPA
- EQ SSF9 CALL *1MA*
- * FUNCTION 24 AND 26 - SET/CLEAR ROLLOUT ALLOWED.
- S24 SX3 1S4 SET ROLLOUT ALLOWED BIT
- ZR X2,SSF16 IF NOT CONNECTED
- BX7 X3+X2
- LX2 X1
- SB5 B5+MXSF-SWPO/4+1
- SA1 A2+STSW-SSCW
- BX5 X5-X5 REPLY CODE COMPLETE, NO ERRORS
- ZR B5,S241 IF SWAPOUT ALLOWABLE (SF.SWPO) REQUEST
- LX1 59-29
- NG X1,SSF14.1 IF USER JOB IN PROCESS OF ROLLOUT
- BX6 -X3*X7 CLEAR ROLLOUT ALLOWED INDICATOR
- SB5 60
- SB5 B5-B6
- LX6 B5
- SA6 A2
- EQ SSF12 COMPLETE REQUEST
- S241 ZR X2,SSF16 IF NO WAIT RESPONSE INDICATORS SET
- SA1 A2+FLSW-SSCW READ UCP STATUS WORD IN CP AREA
- BX2 -X0*X1
- SB5 60
- SB5 B5-B6
- LX7 B5
- SA7 A2 SET ROLLOUT ALLOWED INDICATOR
- MX6 -RMSK
- AX1 RSHF
- BX6 -X6*X1
- LX6 6
- ZR X2,SSF12 IF UCP HAS NO FL
- SA1 RC *RCLP*
- BX3 X1
- SX1 B1
- IX6 X6+X1
- ERX1 X6 READ (RA+1)
- BX3 X3-X1
- AX3 36
- NZ X3,SSF12 IF UCP NOT IN RECALL ON *CALLSS* REQUEST
- SB5 5
- MX1 1
- LX1 -1 LONG TERM CONNECTION MASK
- SX3 176B SUBSYSTEM ID MASK
- BX1 X1+X3
- MX3 5 ROLLOUT AND WAIT RESPONSE MASK
- LX7 7
- S242 BX7 -X1*X7 CLEAR LTC FLAG
- PL X7,S243 IF NO ROLLOUT ALLOWED
- BX7 -X3*X7 CLEAR ROLLOUT AND WAIT RESPONSE
- S243 LX7 12
- SB5 B5-B1
- NZ B5,S242 IF MORE BYTES TO CHECK
- NZ X7,SSF12 IF ANY WAIT RESPONSE INDICATORS SET
- SX6 B1
- SA1 A2+JCIW-SSCW CHECK IF UCP IS SUBSYSTEM
- LX1 36
- BX7 -X0*X1
- SB5 X7-LSSI-1
- PL B5,SSF12 IF UCP IS A SUBSYSTEM
- SX5 A2-SSCW UCP CP ADDRESS
- LX6 29-0
- BX3 X3-X3
- SA6 SSFG
- EQ SSF9 CALL *1MA*
- * FUNCTIONS 30 AND 32 - SET/CLEAR LONG TERM CONNECTION.
- S30 SX6 1S3
- BX7 X6*X2 LONG TERM CONNECTION INDICATOR
- PL X5,S301 IF CLEAR LTC FUNCTION
- SX3 B1+
- ZR X1,SSF16 IF WAIT RESPONSE NOT SET
- SX5 RC57 * CONNECTION PREVIOUSLY ESTABLISHED.*
- NZ X7,SSF12 IF LTC ALREADY SET
- EQ S302 CONTINUE
- S301 SX3 -1
- SX5 RC61 * CONNECTION NOT PREVIOUSLY ESTABLISHED.*
- ZR X7,SSF12 IF LTC ALREADY CLEAR
- S302 LX5 X1
- SA1 B7+SSOW INCREMENT/DECREMENT CONNECTION COUNT
- IX7 X1+X3
- BX6 X6-X2 SET/CLEAR LONG TERM CONNECTION
- SA7 A1
- LX7 X6
- NZ X5,S303 IF WAIT RESPONSE REMAINING FOR SCP
- BX6 X0*X7 CLEAR CONNECTIONS TO THIS SCP
- S303 SB5 60
- SB5 B5-B6
- LX6 B5 UPDATE *SSCW*
- SA6 A2
- EQ SSF19 COMPLETE
- * FUNCTION 42 - EXTENDED LIST PROCESSING (2 WORDS PER
- * LIST ENTRY).
- S42 MX2 1 SET EXTENDED LIST PROCESSING FLAG
- LX2 -1
- BX4 X2+X4
- * EQ S34 INITIATE LIST PROCESSING
- * FUNCTION 34 - PROCESS LIST OF REQUESTS.
- S34 SX5 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
- NG X4,SSF12 IF NESTED SF.LIST FUNCTION
- SX5 RC42 * SCPA NOT WITHIN SUBSYSTEM FL.*
- UX7 X7 EXTRACT FUNCTION PARAMETER WORD (FP)
- MX2 1 SF.LIST PROCESSING IN PROGRESS FLAG
- ZR X7,SSF12 IF NO ENTRIES IN LIST
- SA1 B3+ RA
- IX1 X3+X1
- SX5 X3
- ERX1 X1 READ FILE SF.XXXX PARAMETER WORD
- BX4 X2+X4
- MX6 -54
- SA3 T1
- BX7 X3
- ERX3 X3 CLEAR LIST REPLY CODE
- MX2 42 SAVE RELATIVE ADDRESS OF FIRST LIST ENTRY
- BX6 -X6*X3
- BX4 X2*X4
- LX3 X1
- BX5 -X2*X5
- EWX6 X7
- BX4 X4+X5
- EQ SSF1 PROCESS FIRST FUNCTION IN LIST
- * FUNCTION 46 - RETURN USER JOB IDENTIFICATION.
- S46 SB5 X3+2 VALIDATE SCPA CM ADDRESS
- GE B5,B4,SSF20 IF SCPA LWA .GE. FL
- SB4 X7
- ZR B4,S461 IF *FP* EQUALS 0
- NE B4,B1,SSF19 IF *FP* NOT EQUAL TO 1
- EQ S12 VALIDATE SCPA
- S461 SA1 A2-SSCW+PFCW FIND USER FAMILY NAME
- LX1 -12
- MX2 -12
- BX2 -X2*X1
- CX1 X2,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST READ EST ENTRY
- BX1 -X0*X1
- LX1 3
- SA1 X1+PFGL READ FAMILY NAME FROM MST
- MX2 42
- BX6 X2*X1
- SA1 B3 RA
- IX5 X1+X3 ABSOLUTE SCPA
- EWX6 X5 RETURN FAMILY NAME
- SA1 A2+UIDW-SSCW USER NUMBER FROM CP AREA
- SX3 B1
- IX5 X5+X3
- BX6 X2*X1
- EWX6 X5 RETURN USER NUMBER
- IX5 X5+X3
- SA1 A2-SSCW+AACW GET ACCESS WORD
- MX6 -1
- LX1 0-18
- BX6 -X6*X1 PROVIDE *NVE* ACCESS WORD BIT
- EWX6 X5 RETURN VALIDATION WORD
- EQ SSF19 SET COMPLETE BIT AND NO ERROR
- SPACE 4,10
- * THESE FUNCTIONS ARE PROCESSED BY 1MA.
- * FUNCTION 02 - SEND DAYFILE MESSAGE AND/OR ABORT USER JOB.
- * FUNCTION 16 - EXIT FROM SCP STATUS.
- * FUNCTION 24 - SWAP OUT USER JOB.
- *
- * (B3) = (RA).
- * (T1) = ABSOLUTE ADDRESS OF SF.XXXX FUNCTION.
- * (X3) .LT. 0, IF NO DATA TO BE PASSED IN MESSAGE BUFFER.
- * = 0, IF ONLY FUNCTION PARAMETER WORD AND UCP JOB
- * IDENTIFIER TO BE PASSED IN MESSAGE BUFFER.
- * = MESSAGE ADDRESS (RELATIVE TO SCP) IF MESSAGE TO
- * BE PASSED IN MESSAGE BUFFER IN ADDITION TO
- * FUNCTION PARAMETER WORD AND UCP JOB IDENTIFIER.
- * (X5) = CP ADDRESS.
- * (X4) = LIST PROCESSING FLAG.
- SSF9 SA1 B3 ADDRESS OF RA
- BX7 X1
- SA1 T1
- IX7 X1-X7 RELATIVE ADDRESS OF PARAMETER WORD
- SA1 B7+JCIW GET SSID
- LX1 -24
- BX6 -X0*X1
- SX0 X6-LSSI SET INDEX FOR *1MA*
- LX0 18
- BX0 X7+X0
- NG X3,SSC15 IF NO DATA TO PASS
- SB3 SSF9.1 SET *ACB* RETURN ADDRESS
- EQ ACB ASSIGN COMMUNICATION BUFFER
- SSF9.1 ZR X1,SXS IF NO BUFFER AVAILABLE
- BX7 X1 SET PARAMETER WORD
- SB6 X1
- SA7 APQA
- SA1 T1
- SX7 B1
- IX7 X1+X7
- SA1 RA GET RA
- SX4 X4 LIST PROCESSING FLAG
- IX1 X4+X1 ABSOLUTE ADDRESS OF CURRENT SFCALL
- ERX1 X1 CURRENT SFCALL FUNCTION
- BX6 X1
- SA6 B6+B1 STORE IN COMMUNICATION BUFFER
- ERX4 X7 JOB IDENTIFIER
- LX7 X4
- SX2 B1+B1 SET *1MA* FUNCTION CODE
- SA7 A6+B1
- ZR X3,SSC15 IF NO MESSAGE FOR MESSAGE BUFFER
- SA4 RA GET RA
- IX7 X4+X3
- ERX4 X7
- SB6 MESL SET MESSAGE LENGTH
- * SET MESSAGE INTO MONITOR COMMUNICATION BUFFER.
- SSF10 BX6 X4
- SB6 B6-B1
- SA6 A6+B1
- SX4 B1
- IX7 X7+X4
- ERX4 X7
- NZ B6,SSF10 IF MORE DATA TO PASS
- EQ SSC15 CALL *1MA*
- SSF11 SX5 RC43 * UCP CM/ECS ADDRESS OUT OF RANGE.*
- SB6 B1 INDICATE NO ERROR
- MX0 -12
- * EQ SSF12
- * COMPLETE.
- *
- * (T1) = ABSOLUTE ADDRESS OF FUNCTION PARAMETER WORD.
- * (X0) = -7777B.
- * (X4) = LIST PROCESSING FLAG.
- * (X5) = REPLY CODE.
- * (B6) = -CPA, IF SF.ENDT REQUEST.
- * = -1, IF FATAL ERROR.
- * .GE. 0 IF NO ERROR CONDITION.
- SSF12 SA3 T1
- ERX1 X3 SET COMPLETION AND RETURN STATUS
- MX6 -54
- LX5 54 RC
- SX2 B1
- BX7 -X6*X1 CLEAR STATUS
- SB5 X4 SAVE LAST FUNCTION ADDRESS
- PL X4,SSF13 IF LIST PROCESSING NOT IN EFFECT
- * PROCESS NEXT FUNCTION IN LIST.
- BX3 X1
- SX7 X4 RELATIVE ADDRESS
- SA1 B3+ RA
- IX7 X7+X1
- SA7 T2
- ERX1 X7 GET CURRENT ENTRY IN LIST
- BX7 X3
- LX3 X4
- LX3 2
- NG X3,SSF13 IF NO ADVANCE ON LIST FUNCTION
- LX7 -6
- BX3 X2*X3 GET EXTENDED LIST INDICATOR
- IX3 X3+X2 LIST ADDRESS INCREMENT
- IX7 X7+X3 POINT SCPA TO NEXT ENTRY IN LIST
- LX7 6+18
- IX7 X7-X2 DECREMENT NUMBER OF FUNCTIONS LEFT IN LIST
- BX1 -X6*X1 CLEAR STATUS
- IX4 X4+X3 ADVANCE LIST ABSOLUTE ADDRESS
- BX3 -X0*X7 NUMBER OF ENTRIES REMAINING IN LIST
- BX1 X5+X1 SET STATUS IN SF.XXXX
- BX6 X1+X2 SET SF.XXXX COMPLETE BIT
- LX7 -18
- SX5 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
- SA1 T2
- EWX6 X1
- LX5 54
- NG X6,SSF13 IF ERRORS ENCOUNTERED
- SX5 B0+
- ZR X3,SSF13 IF NO MORE ENTRIES IN LIST
- SA1 SSFE CHECK IF MONITOR MODE TIME EXHAUSTED
- TX3 X1,-SFFO SFCALL FUNCTION OVERHEAD
- NG X3,SSF13 IF MONITOR MODE TIME EXHAUSTED
- SA1 B3
- SX3 X4
- IX1 X3+X1 RA + RELATIVE LIST ADDRESS
- ERX3 X1 READ NEXT ENTRY
- SA1 T1
- EWX7 X1 UPDATE SF.LIST FUNCTION WORD
- PL B6,SSF1 IF NOT FATAL ERROR OR SF.ENDT
- SSF13 BX6 X5+X7 INSERT REPLY CODE
- BX6 X2+X6 SET COMPLETION BIT
- SA1 T1
- BX7 X7-X7
- EWX6 X1
- PL B6,MTRP IF NO ERROR
- SA1 B3
- SX2 B5
- IX1 X2+X1
- ERX1 X1 GET FUNCTION JUST PROCESSED
- SB6 -B6
- LE B6,B1,CPE IF FATAL ERROR
- * THE *SF.ENDT* REQUEST ENTERS HERE TO CHECK TO SEE IF THE
- * UCP IS IN RECALL ON THIS REQUEST.
- SA3 B3+B1
- EWX7 X3 CLEAR (RA+1)
- SA2 RC CHECK *RCLP* REQUEST
- BX7 X1
- AX1 18+6
- SA4 B6+FLSW READ UCP RA
- SX3 X1 GET UCPA
- BX2 X3+X2
- BX3 -X0*X4
- MX0 -RMSK
- AX4 RSHF
- BX4 -X0*X4
- MX0 -12
- LX4 6
- ZR X3,MTRX IF NO UCP FL
- LX0 18
- SX3 B1
- IX3 X3+X4
- ERX3 X3 READ UCP (RA+1)
- BX3 X0*X3
- BX6 X2-X3
- LX7 59-42
- NZ X6,MTRX IF NO RECALL FOR THIS REQUEST
- SA1 B6+STSW CHECK CPU STATUS
- MX2 -3
- LX1 3
- BX2 -X2*X1
- SX2 X2-XCPS
- NZ X2,MTRX IF NOT *X* STATUS
- SB3 MTRX SET *RCC* RETURN ADDRESS
- EQ RCC RECALL CPU
- SSF14 UX3,B5 X7 GET FUNCTION CODE
- LX1 59-6
- SX3 B5-SWPI
- NZ X3,SSF14.1 IF NOT SF.SWPI
- NG X1,SSF14.1 IF JOB ADVANCE SET
- LX1 59-0-59+6
- NG X1,SSF14.1 IF JOB EJT INTERLOCK SET
- SX3 X2-SIJS+EXJS
- LX1 0-59
- LX3 1
- SX7 X2-ROJS+EXJS
- ZR X7,SSF14.2 IF UCP JOB STATUS = SCHEDULER ROLLOUT
- SX7 X2-TOJS+EXJS
- ZR X7,SSF14.2 IF UCP JOB STATUS = TIMED/EVENT ROLLOUT
- SX7 X2-SOJS+EXJS
- ZR X7,SSF14.2 IF UCP JOB STATUS = SCP ROLLOUT
- SX5 RC46 *SWAP-IN REQUEST TEMPORARILY PROHIBITED.*
- NZ X3,SSF12 IF UCP JOB STATUS NOT SCP ROLLIN
- SSF14.1 SX5 RC44 * USER JOB SWAPPED OUT.*
- SB6 B1+ INDICATE NO FATAL ERROR
- EQ SSF12 SET REPLY CODE
- SSF14.2 IX6 X1-X3 CHANGE JOB STATUS TO SCP ROLLIN
- SA5 B3 GET RA
- SA3 T1 GET ABSOLUTE ADDRESS OF PARAMETER BLOCK
- SA2 B7+JCIW GET SUBSYSTEM IDENTIFICATION
- SA6 A1
- LX2 36
- IX6 X3-X5 RELATIVE ADDRESS OF PARAMETER WORD
- BX2 -X0*X2
- LX6 12
- SA1 A1+B1 CHANGE SCHEDULING DATA IN EJT ENTRY
- ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
- MX3 30
- BX6 X6+X2
- BX1 X3*X1
- BX6 X6+X1
- SA6 A1
- MX6 59
- SA1 A1+SCLE-SCHE CLEAR FORCED ROLLOUT FLAG
- LX6 53-0
- SB5 B7 (B5) = CP ADDRESS FOR *SSC*
- BX6 X6*X1
- SA6 A1
- EQ SSC18 EXIT
- SSF15 SA1 SSFC CHECK CONNECTIONS REQUIRED FOR FUNCTION
- UX2,B5 X7
- LX1 B5
- PL X1,SSF14.1 IF NO CONNECTION CHECKING NECESSARY
- LX4 -18
- SA2 X4+SSCW GET UCP CONTROL WORD
- LX4 -18
- SB6 X4 SHIFT COUNT
- LX4 36
- MX6 -4
- LX2 B6
- BX6 -X6*X2
- ZR B6,SSF16 IF NO CONNECTION
- NZ X6,SSF14.1 IF CONNECTIONS ESTABLISHED
- SSF16 SX5 RC63 * UCP NOT ESTABLISHED WITH SUBSYSTEM.*
- EQ SSF12 SET REPLY CODE
- SSF18 SX5 RC45 * USER JOB IS NOT IN SYSTEM.*
- EQ SSF12 SET REPLY CODE
- SSF19 BX5 X5-X5 RC = COMPLETE, NO ERRORS
- SB6 B1
- EQ SSF12 COMPLETE REQUEST
- SSF20 SX5 RC42 * SCP CM/ECS ADDRESS OUT OF RANGE.*
- SB6 -B1 SET FATAL ERROR
- MX0 -12
- EQ SSF12 COMPLETE REQUEST
- SSF21 SX5 RC41 * JOB IDENTIFIER INVALID.*
- EQ SSF12 COMPLETE REQUEST
- SSF22 SX5 RC67 * EXCESSIVE ACCUMULATOR INCREMENT.*
- EQ SSF12 COMPLETE REQUEST
- * TABLE OF FUNCTIONS WHICH REQUIRE SCPA VALIDITY CHECKING.
- *
- * 2 BITS PER SFCALL FUNCTION - 1/A, 1/R
- * A IF SET, SCPA VALIDATION IS REQUIRED.
- * R RESERVED.
- *
- * NOTE - INSTALLATION RESERVED SFCALL FUNCTIONS (70-76)
- * SHOULD USE ADDITIONAL VALIDATION WORD.
- SSFB BSS 0
- POS 60-REGR SF.REGR
- VFD 1/1
- POS 60-READ SF.READ
- VFD 1/1
- POS 60-WRIT SF.WRIT
- VFD 1/1
- POS 60-LIST SF.LIST
- VFD 1/1
- POS 60-XLST SF.XLST
- VFD 1/1
- POS 60-CPID SF.CPID
- VFD 1/1
- POS 1
- VFD 1/0 AVOID *PASS* INSTRUCTIONS
- BSS 0 FORCE UPPER
- * TABLE OF FUNCTIONS WHICH REQUIRE UCPA VALIDITY CHECKING.
- *
- * 2 BITS PER SFCALL FUNCTION - 1/A, 1/B
- * A IF SET, UCPA VALIDATION IS REQUIRED.
- * B IF SET, UCPA TO BE VERIFIED IS EXTENDED ADDRESS.
- *
- * NOTE - INSTALLATION RESERVED SFCALL FUNCTIONS (70-76)
- * SHOULD USE ADDITIONAL VALIDATION WORD.
- SSFC BSS 0
- POS 60-ENDT SF.ENDT
- VFD 1/1
- VFD 1/0
- POS 60-READ SF.READ
- VFD 1/1
- VFD 1/0
- POS 60-WRIT SF.WRIT
- VFD 1/1
- VFD 1/0
- POS 60-XRED SF.XRED
- VFD 1/1
- VFD 1/1
- POS 60-XWRT SF.XWRT
- VFD 1/1
- VFD 1/1
- POS 1
- VFD 1/0 AVOID *PASS* INSTRUCTIONS
- BSS 0 FORCE UPPER
- SSFE CON 0 SFCALL REMAINING MONITOR MODE TIME
- SSFF CON 0 UCP EJT ENTRY ABSOLUTE ADDRESS
- SSFG CON 0 *STSW* FLAGS FOR FUNCTION 24
- EJECT
- SST SPACE 4,10
- *** *SST*
- * PROCESS FILE SWITCHING.
- *
- *T 18/ *SST*,1/ ,1/R,10/ ,12/ SS,18/ ADDR
- *
- * SS SUBSYSTEM IDENTIFICATION OF PARTNER (FCN = 1 OR 2).
- *
- *T ADDR 12/ FNTR,12/ FNTS,18/ RSV,6/ FCN,11/ ST,1/C
- *T ADDR+1 24/ JSN,24/ 0,12/ JEJT
- *
- * C COMPLETION BIT.
- * FCN FUNCTION CODE -
- * CUSU = 1 CALLER UCP - SCP TO UCP SWITCH.
- * CUUS = 2 CALLER UCP - UCP TO SCP SWITCH.
- * CSUS = 3 CALLER SCP - UCP TO SCP SWITCH.
- * CSSU = 4 CALLER SCP - SCP TO UCP SWITCH.
- * FNTR FNT ORDINAL IN RECEIVER-S FNT (RETURNED PARAMETER).
- * (SET TO PARTNER CPA BY *CPUMTR* FOR *1MA*.)
- * FNTS FNT ORDINAL IN SOURCES FNT.
- * JEJT PARTNERS EJT ORDINAL (FCN = 3 OR 4).
- * JSN JOB SEQUENCE NUMBER FOR PARTNER (FCN = 3 OR 4).
- * RSV RESERVED FOR CDC.
- * ST RETURN STATUS CODE -
- * 00 SWITCH COMPLETED NORMALLY.
- * 01 FILE BUSY.
- * 02 PARTNER ROLLED OUT.
- * 03 INCORRECT FILE TYPE.
- * 04 PARTNERS IDENTIFICATION NOT KNOWN.
- * 05 NO SPACE IN RECEIVER-S NFL.
- * 06 LOCAL FILE LIMIT (MAXIMUM NFL).
- * 07 FILE *FNTS* NOT FOUND.
- * GET FUNCTION CODE.
- SST SB6 X5 CHECK *ADDR* WITHIN RANGE
- LE B6,B1,CPE IF *ADDR* .LE. 1
- MX2 -6
- GT B6,B4,CPE IF *ADDR* .GE. FL
- SX3 X5
- SA1 B3 RA
- IX6 X3+X1
- ERX1 X6 GET (ADDR)
- SA6 T1 SAVE ABSOLUTE ADDRESS OF PARAMETER BLOCK
- LX1 59-0
- NG X1,CPE IF COMPLETION BIT ALREADY SET
- LX1 49 VALIDATE FUNCTION CODE
- BX3 -X2*X1
- SB5 X3-FCNM
- ZR X3,CPE IF *FCN* INVALID
- SX7 X3-1 FUNCTION CODE - 1
- SX3 X3-CSUS
- PL B5,CPE IF *FCN* INVALID
- PL X3,SST2 IF CALL FROM SCP
- * PROCESS REQUEST FROM UCP TYPE CALLER.
- LX5 -18 GET SUBSYSTEM CODE
- BX1 -X0*X5
- LX5 18
- SX2 X1-LSSI-1
- NG X2,CPE IF NOT SUBSYSTEM
- SA2 B7+AACW CHECK VALIDATION OF CALLER AS UCP
- LX2 59-11
- BX4 X1 SAVE SSID
- SB3 SST1 SET EXIT ADDRESS FOR *RSC*
- NG X2,RSC IF VALIDATED, RETURN SUBSYSTEM CONTROL
- EQ CPE UNAUTHORIZED UCP
- * RETURN FROM *RSC* WITH -
- * (A2) SUBSYSTEM CPA + STSW.
- * (B7) CALLER-S CPA.
- * (X0) -7777B.
- * (X3) SUBSYSTEM RA.
- * (X4) SUBSYSTEM ID.
- * (X6) SUBSYSTEM FL.
- * (X7) FUNCTION CODE - 1.
- * *RSC* ERROR EXIT ADDRESSES -
- + VFD 12/SST7-SST1,18/SST7,12/SST10-SST1,18/SST1
- SST1 SX1 SSIW CHECK SUBSYSTEM IDENTIFICATION
- IX1 X3+X1
- ERX1 X1
- SB6 A2-STSW SCP CPA
- BX1 X1-X4 COMPARE WITH SUBSYSTEM IDENTIFICATION
- SX2 SSCR
- IX2 X2+X3
- ERX3 X2 SUBSYSTEM RECEIVING BUFFER
- BX1 -X0*X1
- LX3 1
- NZ X1,CPE IF SUBSYSTEM NOT INITIALIZED
- SB4 B7 UCP CPA
- SA1 B4+JCIW CHECK IF UCP IS SUBSYSTEM
- LX1 36
- PL X3,SST1.1 IF NO RESTRICTIONS ON UCP ACCESS
- * VALIDATE PERMISSION STATUS.
- SA2 B4+SEPW READ SPECIAL ENTRY POINT WORD
- BX1 -X0*X1
- LX2 59-50
- NG X2,SST1.1 IF SSJ= ENTRY POINT
- ZR X1,CPE IF NOT AUTHORIZED UCP
- SST1.1 SA3 T1 GET ABSOLUTE ADDRESS OF PARAMETER BLOCK
- SX2 B1
- IX2 X2+X3
- SA1 B6+TFSW GET SCP EJT ORDINAL
- LX1 12
- BX7 -X0*X1
- EWX7 X2
- EQ SST3 CONTINUE PROCESSING
- * PROCESS REQUEST FROM SCP TYPE CALLER.
- * ENSURE THAT CALLER IS SUBSYSTEM AND
- * THAT SUBSYSTEM IDENTIFICATION WORD MATCHES CALLER.
- SST2 SA2 B7+JCIW CHECK SUBSYSTEM CALL
- LX2 -24 GET SUBSYSTEM IDENTIFICATION
- BX4 -X0*X2
- SA1 RA
- SX7 SSIW READ SUBSYSTEM IDENTIFICATION WORD
- IX1 X1+X7
- ERX1 X1
- BX7 -X0*X1 SUBSYSTEM CODE
- BX7 X4-X7
- SX2 X4-LSSI-1
- NZ X7,CPE IF SUBSYSTEM NOT INITIALIZED
- NG X2,CPE IF CALLER IS NOT A SUBSYSTEM
- * VALIDATE *JSN* AND *JEJT* FROM (*ADDR*+1).
- SB6 CPE SET ERROR RETURN FOR *CUI*
- SB5 SST2.1 SET NORMAL RETURN FOR *CUI*
- EQ CUI CHECK UCP IDENTIFICATION
- SST2.1 BX7 X6 SAVE JOB SEQUENCE NUMBER MATCH STATUS
- SX6 RC04 * PARTNERS IDENTIFICATION NOT KNOWN.*
- SB4 X5 UCP CPA
- NZ X7,SST6 IF JOB SEQUENCE NUMBER MISMATCH
- SX6 RC02 * PARTNER ROLLED OUT.*
- NZ X2,SST6 IF UCP NOT AT CONTROL POINT
- SA2 CMCL CHECK FOR STORAGE MOVE
- AX2 48
- LX2 7
- BX2 X2-X5
- ZR X2,SXS IF UCP MOVING, SET *X* STATUS
- SA2 X5+STSW
- SB6 X5 PARTNERS CPA
- LX2 59-24
- NG X2,SST6 IF ROLLOUT REQUESTED ON UCP
- * CONTINUE PROCESSING ALL FUNCTIONS.
- *
- * (X3) = ABSOLUTE ADDRESS OF STATUS WORD.
- * (X4) = SSID.
- * (B4) = UCP CPA.
- * (B6) = CPA OF PARTNER.
- * (B7) = CPA OF CALLER.
- * CHECK LONG TERM CONNECTION.
- SST3 BX2 X4 SSID
- BX5 X3 SAVE REGISTERS
- SB5 B6
- SB3 B4
- SA3 B4+SSCW
- SB4 SST3.1 RETURN ADDRESS FOR *CSC*
- EQ CSC CHECK SUBSYSTEM CONNECTION
- SST3.1 ZR B6,CPE IF NOT CONNECTED
- SA3 A3
- LX3 B6
- SB6 B5
- SB4 B3
- LX3 59-3
- PL X3,CPE IF NO LONG TERM CONNECTION
- BX3 X5
- ERX2 X3 READ (ADDR)
- * VALIDATE *FNTS* ADDRESS.
- LX2 59-12
- SB5 B6 GET PARTNER FL STATUS WORD
- NG X2,SST4 IF FCN = 1 OR 3
- SB5 B7+ GET CALLER FL STATUS WORD
- SST4 LX2 59-35-59+12
- SA1 B5+FLSW
- BX4 -X0*X2 FNTS
- LX1 12
- SB4 X4
- BX2 -X0*X1 NFL SIZE
- LX2 6
- SB5 X2
- MX6 -RMSK
- GE B4,B5,CPE IF *FNTS* OUT OF RANGE
- SB5 FNTN
- LE B4,B5,CPE IF *FNTS* BELOW RANGE
- LX1 -24 SHIFT TO RA
- BX1 -X6*X1
- LX1 6
- IX4 X1-X4 READ *FNTS*
- SX6 RC07 * FILE NOT FOUND.*
- ERX2 X4
- ZR X2,SST6 IF FNT EMPTY
- * VALIDATE *FNTS* FILE TYPE.
- MX6 -6
- LX2 0-6
- BX1 -X6*X2
- SB4 X1+
- SX6 RC03
- SB5 59
- SA1 SLFT SET VALID FILE TYPES MASK
- SB4 B5-B4 SET SHIFT BIAS
- LX1 X1,B4
- PL X1,SST6 IF FILE TYPE NOT VALID
- * CHECK FILE BUSY STATUS.
- R= X6,RC01 * FILE BUSY.*
- IX4 X4+X6
- ERRNZ RC01-1
- ERX1 X4
- LX1 59-0
- PL X1,SST6 IF FILE *FNTS* BUSY
- LX1 1 SET FILE BUSY
- BX7 -X6*X1
- ERRNZ RC01-1
- R= X6,RC00 NORMAL RETURN
- ERX2 X3 GET FUNCTION CODE
- LX2 59-12
- NG X2,SST5 IF FCN = 1 OR 3
- EWX7 X4 UPDATE FST
- BX7 X4 SAVE FST ADDRESS FOR *1MA* CALL REJECT
- SA7 SSTA
- SST5 ERX2 X3 GET PARAMETER WORD
- SX1 B6 PARTNER-S CP ADDRESS
- MX7 -48
- LX1 -12
- BX2 -X7*X2 CLEAR *FNTR* FIELD
- BX7 X0*X2 CLEAR STATUS FIELD
- BX7 X1+X7 INSERT CP ADDRESS (FOR *1MA*)
- BX7 X6+X7 INSERT RETURN STATUS
- ZR X6,SST8 IF NO ERROR CODE RETURNED
- SX6 B1 SET COMPLETION BIT
- BX6 X6+X7
- EWX6 X3
- BX7 X7-X7 CLEAR RA+1
- EQ MTRP RETURN TO CALLER
- * ERROR PROCESSING.
- SST6 SB6 B0 NO *FNTR* (CPA) ENTRY ON ERROR
- LX6 1
- EQ SST5 COMPLETE PROCESSING
- SST7 EQ CPE ERROR EXIT FROM *RSC*
- * CALL *1MA* TO PROCESS FILE SWITCH.
- SST8 EWX7 X3
- SB3 SST8.1 *ACB* RETURN ADDRESS
- EQ ACB ASSIGN COMMUNICATION BUFFER
- SST8.1 ZR X1,SST9 IF NO BUFFER AVAILABLE
- BX6 X1 SET PARAMETER WORD
- SA7 X1+B1 SET (*ADDR*) IN BUFFER
- SA6 APQA
- SA5 RA1 GET (RA+1)
- ERX5 X5
- SX1 B1 GET (*ADDR*+1)
- IX3 X3+X1
- ERX1 X3
- MX0 -18
- BX0 -X0*X5 EXTRACT *ADDR*
- BX7 X1
- SA7 A7+B1 SET (*ADDR*+1) IN BUFFER
- SX5 B7+ SET CPA
- SX2 3 *1MA* FUNCTION CODE
- EQ SSC15 CALL *1MA*
- SST9 ERX2 X4 RESET FILE NOT BUSY
- SX6 B1
- BX6 X2+X6
- EWX6 X4
- SST10 EQ SXS SET *X* STATUS
- * *SST* REQUEST LEGAL FILE TYPES.
- QFFT DECMIC QFFT QUEUE FILE
- PMFT DECMIC PMFT DIRECT ACCESS PERMANENT FILE
- LOFT DECMIC LOFT LOCAL FILE
- LIFT DECMIC LIFT
- SLFT CON 1S"QFFT"+1S"PMFT"+1S"LOFT"+1S"LIFT"
- SSTA CON 0 FST ADDRESS
- TITLE SCP SUBROUTINES.
- CSC SPACE 4,20
- ** CSC - CHECK SUBSYSTEM CONNECTION.
- *
- * CSC WILL DETERMINE IF THE UCP IS CURRENTLY CONNECTED TO
- * THE SPECIFIED SUBSYSTEM AS A UCP, BASED ON WORD *SSCW*.
- *
- * ENTRY (X0) = -7777B.
- * (X2) = SSID.
- * (X3) = *SSCW* WORD TO CHECK.
- * (B4) = RETURN ADDRESS.
- *
- * EXIT (B6) = SHIFT COUNT TO SHIFT *SSCW* SO THAT THE
- * BYTE FOR THE SPECIFIED SUBSYSTEM IS IN THE
- * BOTTOM. IF THE UCP IS NOT CONNECTED TO THE
- * SPECIFIED SUBSYSTEM, THE SHIFT COUNT IS
- * FOR AN EMPTY BYTE, IF THERE IS ONE.
- * (B6) = 0, IF THE UCP IS CURRENTLY CONNECTED TO 5
- * SCP-S, NONE OF WHICH IS THE SPECIFIED ONE.
- *
- * USES X - 1, 2, 3, 6.
- * B - 6.
- CSC BSS 0 ENTRY
- SB6 60 INITIALIZE SHIFT COUNT
- SX6 B0+
- SX2 X2-LSSI SUBSYSTEM INDEX
- CSC1 BX1 -X0*X3
- LX3 -12
- ZR X1,CSC3 IF NO CONNECTION IN THIS BYTE
- AX1 6
- IX1 X1-X2
- ZR X1,/MONITOR/RB4 IF SPECIFIED SUBSYSTEM
- CSC2 SB6 B6-12
- NZ B6,CSC1 IF MORE TO CHECK
- SB6 X6
- JP B4 RETURN
- CSC3 NZ X6,CSC2 IF EMPTY BYTE ALREADY FOUND
- SX6 B6+
- EQ CSC2 CONTINUE
- CUI SPACE 4,25
- ** CUI - CHECK UCP IDENTIFICATION.
- *
- * ENTRY (B5) = RETURN ADDRESS IF NO ERROR.
- * (B6) = RETURN ADDRESS IF INVALID EJT ORDINAL.
- * (X0) = -7777B.
- * (T1) = ABSOLUTE ADDRESS OF PARAMETER BLOCK.
- *
- * EXIT (A1) = ABSOLUTE ADDRESS OF UCP EJT ENTRY.
- * (X0) = -7777B.
- * (X1) = *JSNE* WORD OF UCP EJT ENTRY.
- * (X2) = UCP JOB STATUS - EXJS (IF A *DMP=* PROGRAM IS
- * EXECUTING AND THE *DMP=* FLAG IS NOT SET IN THE
- * REQUEST, THE UCP JOB STATUS WILL BE FLAGGED AS
- * MXJS TO INDICATE JOB ROLLED OUT).
- * (X3) = ABSOLUTE ADDRESS OF PARAMETER BLOCK.
- * (X5) = UCP CONTROL POINT ADDRESS IF (X2) = 0.
- * (X6) .NE. 0 IF SPECIFIED JSN DOES NOT MATCH JSN IN
- * SPECIFIED EJT ORDINAL OR IF THE *DMP=* FLAG IS
- * SET AND A *DMP=* PROGRAM IS NOT EXECUTING.
- *
- * USES A - 1, 2, 3.
- * B - 6.
- * X - 0, 1, 2, 3, 5, 6.
- CUI BSS 0 ENTRY
- SA3 T1 GET UCP IDENTIFICATION
- SX1 B1
- IX1 X3+X1
- ERX2 X1
- BX1 -X0*X2 UCP EJT ORDINAL
- TX6 X1,-EJTM
- ZR X1,RB6 IF NO EJT ORDINAL
- PL X6,RB6 IF EJT ORDINAL EXCEEDS MAXIMUM
- CX6 X1,EJT CONVERT EJT ORDINAL TO OFFSET
- TA1 X6+JSNE,EJT GET UCP EJT ENTRY
- MX6 24
- BX0 X2
- BX2 X6*X2 JOB SEQUENCE NUMBER FROM CALL
- SB6 B5 SET NORMAL RETURN ADDRESS
- BX5 X6*X1 JOB SEQUENCE NUMBER FROM EJT ENTRY
- ZR X5,CUI1 IF EJT ENTRY NOT IN USE
- BX6 X2-X5
- SA2 A1+SCHE-JSNE
- NZ X6,CUI1 IF JOB SEQUENCE NUMBER DOES NOT MATCH
- LX0 59-12
- LX2 59-32
- BX0 X0-X2
- MX6 -6
- PL X0,CUI0.1 IF NO *DMP=* CONFLICT
- PL X2,CUI1 IF *DMP=* REQUEST ON NON-*DMP=* PROGRAM
- SX2 MXJS INDICATE *DMP=* ROLLOUT STATUS
- EQ CUI0.2 SET EXIT CONDITIONS
- CUI0.1 LX2 0-12-59+32
- BX0 -X6*X1
- BX5 -X6*X2 CP NUMBER IF *EXJS* STATUS
- AX2 X0,B1 JOB STATUS
- CUI0.2 LX5 7 CP ADDRESS IF *EXJS* STATUS
- SX2 X2-EXJS
- SX6 B0 SET NO ERROR
- CUI1 MX0 -12
- JP B6 RETURN
- CWT SPACE 4,10
- ** CWT - CALCULATE WORD TRANSFER SIZE (CM OR ECS).
- *
- * THE ENTIRE BLOCK WILL BE TRANSFERRED IF .LE. *MAXB* WORDS
- * ARE REQUESTED, IF THE REMAINING *SFCALL* MONITOR MODE TIME
- * IS SUFFICIENT, OR IF THE REQUESTED DATA TRANSFER SIZE IS
- * WITHIN 40B WORDS OF THE AMOUNT THAT CAN BE TRANSFERRED IN
- * THE REMAINING TIME. OTHERWISE, THE DATA TRANSFER SIZE WILL
- * BE SET TO THE MAXIMUM OF *MAXB* AND THE REMAINING TIME
- * TRANSFER SIZE (IN MULTIPLE OF 10B).
- *
- * ENTRY (X7) = WORD COUNT.
- * (B6) = EXIT ADDRESS IF CM TRANSFER.
- * = COMPLEMENT OF EXIT ADDRESS IF ECS TRANSFER.
- * (B4) = SCP FL.
- * (SSFE) = SFCALL REMAINING MONITOR MODE TIME.
- *
- * EXIT (X3) = SCP FL.
- * (B4) = WORD TRANSFER SIZE.
- * (SSFE) = MONITOR MODE TIME REMAINING AFTER TRANSFER.
- *
- * USES X - 1, 2, 3, 7.
- * A - 1, 7.
- * B - 4, 6.
- CWT SX3 B4+ SAVE SCP FL
- SA1 SSFE GET REMAINING MONITOR MODE TIME
- TB4 SFCS SET CM TRANSFER RATE SHIFT
- PL B6,CWT1 IF CM TRANSFER
- TB4 SFES SET ECS TRANSFER RATE SHIFT
- SB6 -B6 SET RETURN ADDRESS
- CWT1 SX2 X7-MAXB-1
- NG X2,CWT2 IF .LE. *MAXB* WORDS TO BE TRANSFERRED
- AX1 B4 TRANSFER SIZE FOR REMAINING TIME
- AX1 3 ROUND DOWN TO MULTIPLE OF 10B
- LX1 3
- IX2 X7-X1
- NG X2,CWT2 IF TIME TO COMPLETE TRANSFER
- AX2 5
- ZR X2,CWT2 IF WITHIN 40B WORDS OF COMPLETION
- SX7 MAXB TRANSFER AT LEAST *MAXB* WORDS
- IX2 X1-X7
- NG X2,CWT2 IF TRANSFER MINIMUM WORDS
- LX7 X1
- CWT2 BX2 X7 CALCULATE TRANSFER TIME
- SA1 A1
- LX2 B4
- SB4 X7 SET TRANSFER SIZE
- IX7 X1-X2 DECREMENT REMAINING MONITOR MODE TIME
- SA7 A1
- JP B6 RETURN
- SCB SPACE 4,10
- ** SCB - SET COMPLETION BIT SPECIFIED BY *ADDRESS*.
- *
- * SCB SETS THE COMPLETION BIT FOR AN SF.XXXX FUNCTION OR
- * AN SF.XXXX FUNCTION WITHIN A LIST.
- *
- * ENTRY (A2) = SUBSYSTEM *STSW* WORD.
- * (A5) = PPU OR ADDRESS.
- * (X3) = SUBSYSTEM RA.
- * (X5) = PPU OUTPUT REGISTER.
- * (B3) = SUBSYSTEM FL.
- * (B5) = RELATIVE ADDRESS OF COMPLETION BIT WORD.
- *
- * EXIT TO *PPRX* OR *PPR1* TO COMPLETE PP REQUEST.
- SCB GE B5,B3,SCB3 IF WORD TO SET COMPLETE OUTSIDE SCP FL
- AX5 18
- SX4 B1
- MX0 -6
- SX1 B5
- IX7 X3+X1
- ERX1 X7 SET COMPLETION BIT
- SA7 T1 SAVE ABSOLUTE ADDRESS
- BX5 -X0*X5 REPLY CODE
- BX7 X4+X1
- SX6 X1-LIST CHECK LIST PROCESSING IN EFFECT
- MX2 -54
- BX0 -X0*X6
- LX5 -6
- BX1 -X2*X7
- LX7 -6
- BX6 X5+X1
- ZR X0,SCB0 IF LIST PROCESSING IN EFFECT
- SX0 X0-XLST+LIST
- NZ X0,SCB2 IF NOT EXTENDED LIST PROCESSING
- SX0 B1+
- SCB0 ZR X5,SCB1 IF NO ERROR ENCOUNTERED
- SX6 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
- LX6 54
- BX1 X1+X6
- SCB1 SB6 X7
- BX5 X4+X5 REPLY CODE AND COMPLETION BIT FOR SF.XXXX
- GE B6,B3,SCB3 IF WORD TO SET COMPLETE OUTSIDE SCP FL
- SX6 B6
- IX6 X6+X3
- ERX3 X6 FUNCTION PARAMETER WORD
- SA6 T2 SAVE ABSOLUTE ADDRESS
- IX0 X0+X4 LIST ADDRESS INCREMENT
- LX0 6
- BX2 -X2*X3
- IX6 X0+X1 POINT TO NEXT FUNCTION IN LIST
- BX7 X2+X5 SET COMPLETION BIT AND REPLY CODE
- LX4 42
- SA3 T2
- EWX7 X3
- IX6 X6-X4 DECREMENT NUMBER OF FUNCTIONS IN LIST
- SCB2 BX7 X7-X7 CLEAR OUTPUT REGISTER, NO ERRORS
- SA3 T1
- EWX6 X3
- EQ PPR1 EXIT TO STORE OUTPUT REGISTER
- * EXIT FOR INVALID SCP PARAMETERS. (ALSO ENTERED HERE
- * FROM *SSR*.)
- SCB3 SA2 A2-STSW+TFSW GET SCP EJT ORDINAL
- MX0 -12
- LX2 12
- BX2 -X0*X2
- CX1 X2,EJT CONVERT EJT ORDINAL TO OFFSET
- TA1 X1+JSNE,EJT GET SCP JOB SEQUENCE NUMBER
- SX7 X2+5*10000B STATUS = SCP INVALID PARAMETERS
- MX0 24
- BX1 X0*X1
- BX7 X7+X1
- LX7 24
- SA7 A5 STORE PP OUTPUT REGISTER
- EQ PPRX EXIT
- SSR SPACE 4,10
- ** SSR - SET SPECIAL RECEIVING BUFFER.
- *
- * SSR SETS UP A DATA TRANSFER TO THE SCP RECEIVING BUFFER
- * POINTED TO BY *SSCR* WITHIN THE SUBYSTEM FL.
- *
- * ENTRY (A2) = SUBSYSTEM *STSW* WORD.
- * (A5) = PPU OR ADDRESS.
- * (X0) = -7777B.
- * (X5) = PPU OUTPUT REGISTER.
- * (X3) = SUBSYSTEM RA.
- * (X7) = NOT READY FOR DATA STATUS (2).
- * (B3) = SUBSYSTEM FL.
- *
- * EXIT (X7) = NEW PP OUTPUT REGISTER.
- * TO *HNG* IF WORD COUNT EXCEEDS MESSAGE BUFFER LENGTH.
- * TO *PPR1* IF NOT READY FOR DATA.
- * TO *SCB3* IF BUFFER ADDRESS OUTSIDE SCP FL.
- * TO *TDA2.3* IF TRANSFER COMPLETE.
- * TO *TDA3* IF IDENTIFICATION WORD NOT INITIALIZED.
- SSR SX1 SSIW CHECK SUBSYSTEM IDENTIFICATION WORD
- SX2 X1+B1 SUBSYSTEM RECEIVING BUFFER POINTER WORD
- ERRNZ SSIW+1-SSCR CODE DEPENDS ON VALUE
- IX1 X1+X3
- MX4 6 EXTRACT WORD COUNT
- ERX1 X1
- LX5 -24 COMPARE SUBSYSTEM IDENTIFICATIONS
- BX4 X4*X5
- BX5 X1-X5
- LX4 6
- IX1 X2+X3
- ERX1 X1
- SB5 X4
- BX2 -X0*X5
- LX5 X1
- SX1 B1
- SX4 X4-7 VALIDATE THE WORD COUNT
- NZ X2,TDA3 IF IDENTIFICATION WORD NOT INITIALIZED
- PL X4,HNG IF WC .GT. MESSAGE BUFFER
- SA4 A5+B1
- LX4 59-20
- PL X4,SSR1 IF NOT SUBSYSTEM ABORTED *TDAM* CALL
- SA4 RC CHECK RCLP REQUEST
- IX1 X3+X1
- ERX1 X1 RA+1 OF SCP RECEIVING NOTIFICATION
- BX6 X4-X1
- AX6 18 COMPARE SUBSYSTEM IDENTIFIERS
- SA4 A5+2
- BX6 X6-X4
- SX1 X1 ADDRESS OF RECALL WORD
- NZ X6,SSR1 IF RECEIVER NOT IN RECALL ON ABORTED SCP
- IX4 X3+X1 ABSOLUTE ADDRESS OF RECALL WORD
- ERX1 X4
- SX6 ES1+1 SUBSYSTEM NOT PRESENT STATUS
- BX6 X1+X6
- EWX6 X4
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- SSR1 NG X5,PPR1 IF NOT READY FOR DATA
- SB6 X5
- MX6 1
- ZR B6,PPR1 IF NOT READY FOR DATA
- LE B6,B1,SCB3 IF BUFFER ADDRESS INVALID
- SX0 X5+
- SB6 X5+B5 CHECK ADDRESS OUT OF RANGE
- IX0 X0+X3 ABSOLUTE ADDRESS OF RECEIVING BUFFER
- GT B6,B3,SCB3 IF BUFFER ADDRESS OUTSIDE SCP FL
- SA4 A5+B1 MOVE 2 WORDS OF DATA TO RECEIVING BUFFER
- BX6 X6+X5 SET CPU INTERLOCK BIT
- LX7 X4
- SA4 A4+B1
- EWX7 X0
- BX7 X4
- SX1 B1
- IX0 X1+X0
- SB5 B5-2
- EWX7 X0
- LE B5,B0,SSR3 IF ALL WORDS MOVED
- SSR2 SA4 A4+B1 MOVE REMAINING WORDS
- IX0 X0+X1
- SB5 B5-1
- BX7 X4
- EWX7 X0
- GT B5,B0,SSR2 IF MORE WORDS TO MOVE
- SSR3 BX7 X7-X7
- SX1 SSCR
- IX1 X1+X3
- TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
- EWX6 X1 SUBSYSTEM RECEIVING BUFFER POINTER WORD
- EQ TDA2.3 RESTART SCP CPU
- ENDBLK
- BLOCK SCPUEC,(SCP FACILITY ECS INTERFACE.)
- SFE SPACE 4,10
- ** SFE - SFCALL SF.READ/SF.WRIT ECS TRANSFER.
- *
- * SF.READ - TRANSFER DATA FROM UCP CM TO SCP ECS (WRITE ECS)
- * OR TRANSFER DATA FROM UCP ECS TO SCP CM (READ ECS).
- *
- * SF.WRIT - TRANSFER DATA FROM SCP CM TO UCP ECS (WRITE ECS)
- * OR TRANSFER DATA FROM SCP ECS TO UCP CM (READ ECS).
- *
- * ENTRY (A0) = CPU NUMBER (0 OR 1).
- * (X0) = -7777B.
- * (X2) = EXTENDED ADDRESS WORD.
- * (X4) = LIST PROCESSING FLAG.
- * (X5) = 0, IF SF.WRIT OR SF.XWRT, .LT. 0 IF SF.READ
- * OR SF.XRED.
- * (X6) = UCP/SCP ABSOLUTE CM ADDRESS.
- * (X7) = WORD COUNT.
- * ((B3)) = SCP RA.
- * (B4) = SCP FL.
- * (B7) = SCP CPA.
- *
- * EXIT TO */MONITOR/S404* IF ECS TRANSFER COMPLETE.
- * (A0) = CPU NUMBER.
- * (X2) = LIST PROCESSING FLAG.
- * (X3) = SCP FL.
- * (X5) = TRANSFER SIZE.
- *
- * TO */MONITOR/CPE* IF NOT IN CPU 0 FOR ECS TRANSFER.
- * (A0) UNCHANGED.
- *
- * TO */MONITOR/SSF11* IF UCP ECS ADDRESS ILLEGAL.
- * (A0), (B4) UNCHANGED.
- *
- * TO */MONITOR/SSF20* IF SCP ECS ADDRESS ILLEGAL.
- * (A0), (B4) UNCHANGED.
- *
- * TO */MONITOR/SSF12* IF ECS ABORT OR PARITY ERROR.
- * (A0), (X0), (B4) RESTORED.
- * (X5) = REPLY CODE.
- * (B6) .GT. 0 TO INDICATE NOT FATAL OR FORCED ERROR.
- *
- * USES A - 0, 1.
- * B - 4, 5, 6.
- * X - ALL.
- *
- * CALLS /MONITOR/CWT.
- *
- * MACROS PER, RUE, WUE.
- * PROCESS UCP ECS TO/FROM SCP CM TRANSFER.
- SFE LX4 -18 GET UCP CONTROL POINT ADDRESS
- SA1 X4+ECSW GET UCP ECS RA AND FL
- LX4 18
- LX2 -24
- SB5 /MONITOR/SSF11-/MONITOR/SSF20 SET ADDRESS ERROR EXIT
- EQ SFE2 VALIDATE UCP ECS ADDRESS
- * PROCESS UCP CM TO/FROM SCP ECS TRANSFER.
- SFE1 SB5 B0 SET ADDRESS ERROR EXIT BIAS
- SA1 B7+ECSW GET SCP ECS RA AND FL
- BX5 -X5 SET WE FOR SF.READ, RE FOR SF.WRIT
- * VALIDATE SCP OR UCP ECS ADDRESS.
- SFE2 BX3 -X0*X1 SCP OR UCP ECS FL/*UEBS*
- LX1 -12
- BX1 -X0*X1 SCP OR UCP ECS RA/*UEBS*
- TLX3 9,UESC
- MX0 -24
- TLX1 9,UESC
- BX2 -X0*X2 SCP OR UCP RELATIVE ECS ADDRESS
- IX3 X3-X2 CHECK BLOCK LWA .GT. ECS FL
- IX0 X2+X1 SCP OR UCP ABSOLUTE ECS ADDRESS
- SB6 SFE3 SET RETURN ADDRESS FOR *CWT*
- IX3 X3-X7
- SB6 -B6 INDICATE ECS TRANSFER
- PL X3,/MONITOR/CWT IF ECS ADDRESS LEGAL
- JP B5+/MONITOR/SSF20 EXIT TO SET ERROR CODE
- SFE3 SB5 A0 SAVE CPU NUMBER
- SA0 X6 SET SCP OR UCP CM ADDRESS
- TNZB5 /MONITOR/CPE,NOTDCE IF NOT CPU 0
- MX2 -24
- BX0 -X2*X0
- SB6 SFE5 SET RETURN ADDRESS
- BX6 -X2*X6
- LX6 30
- BX0 X6+X0
- BX2 X4 SAVE LIST PROCESSING FLAG
- PL X5,SFE4 IF WRITE ECS
- RUE MONITOR READ (B4) WORDS FROM USER ECS
- PER /SCPUEC/SFE6,/ECS/PER IF PARITY ERROR
- EQ SFE5 RESTORE REGISTERS AND EXIT
- SFE4 WUE MONITOR WRITE (B4) WORDS TO USER ECS
- PER /SCPUEC/SFE6,/ECS/PER IF PARITY ERROR
- SFE5 SA0 B5 RESET CPU NUMBER
- SX5 B4 SET TRANSFER LENGTH
- EQ /MONITOR/S404 EXIT
- SFE6 SX5 RC56 * ECS ABORT/PARITY ERROR.*
- SA0 B5 RESET CPU NUMBER
- MX0 -12
- SB4 X3 RESTORE SCP FL
- SB6 B1 INDICATE NO ERROR
- EQ /MONITOR/SSF12 SET COMPLETE BIT AND ERROR CODE
- ENDBLK
- BLOCK SUBCP,(SUB-CONTROL POINT PROCESSING.),MONITOR
- BCE SPACE 4,15
- ** BCE - BEGIN CONTROL POINT EXECUTIVE.
- *
- * ENTRY (B7) = CONTROL POINT ADDRESS.
- *
- * EXIT TO *ESC0*.
- *
- * USES X - 0, 2, 4.
- * A - 2.
- * B - 3.
- *
- * CALLS CPT.
- BCE SB3 BCE1 *CPT* RETURN ADDRESS
- TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
- ,/CPT)
- BCE1 SA2 B7+STSW
- MX4 1
- SX0 B1 SET CP EXEC AS NEXT JOB
- LX4 56-59 SUB-CP BIT
- EQ ESC0 END SUB-CONTROL POINT
- ESC SPACE 4,25
- ** ESC - END SUB-CONTROL POINT.
- *
- * CLEAR SUB-CONTROL POINT ACTIVE STATUS, RELATIVIZE SUB-CONTROL
- * POINT EXCHANGE PACKAGE, AND RETURN CONTROL TO NEW JOB OR
- * CONTROL POINT EXECUTIVE.
- *
- * IF ENTERED AT *ESC*, THE CPU WILL BE SWITCHED TO A NEW JOB
- * ON EXIT TO *BNJ*. IF ENTERED AT *ESC0*, CONTROL WILL BE
- * RETURNED TO THE CONTROL POINT EXECUTIVE.
- *
- * ENTRY (X2) = STSW OF CONTROL POINT.
- * (X4) = SUB CONTROL POINT ACTIVE BIT.
- * (A2) = ADDRESS OF STSW IN CONTROL POINT AREA.
- * (X1 BITS 0-17) = CONTROL POINT ADDRESS IF ENTERED AT
- * *ESC*.
- *
- * EXIT TO *BNJ3* TO START NEW JOB IF ENTERED AT *ESC*.
- * (CPAL+A0) SET WITH USER EXCHANGE PACKAGE ADDRESS IF
- * ENTERED AT *ESC*.
- * TO *BNJ20* TO RESTART CONTROL POINT EXECUTIVE IF
- * ENTERED AT *ESC0*.
- *
- * USES X - 1, 2, 3, 4, 5, 6, 7.
- * A - 2, 3, 4, 6, 7.
- * B - 2, 3, 6, 7.
- ESC SB3 B0+ SET NEW JOB AS NEXT ONE
- SB7 X1+ SET CONTROL POINT ADDRESS
- * ENTRY FROM *BCE*.
- ESC0 BX7 -X4*X2 CLEAR SUBCP ACTIVE BIT
- SA7 A2
- * RELATIVIZE SUB-CONTROL POINT P, RA, AND RAX.
- SA3 B7+4 READ RAX(CP)
- SA4 B2+4 READ RAX(S)
- MX2 24
- BX3 X2*X3
- IX7 X4-X3
- SA3 B7+B1 READ RA(CP)
- SA7 A4+
- SA4 B2+1 READ RA(S)
- BX1 X2*X3
- IX7 X4-X1
- SA7 A4+
- SA3 RTCL CHECK FOR TIME LIMIT
- SA4 ACPL+A0
- BX3 -X2*X3
- BX4 -X2*X4
- AX1 36
- IX4 X3-X4
- SA3 A2-2 READ X6
- SX5 B1 READ RA+1
- IX5 X5+X1
- ERX2 X5
- MX6 -18
- BX7 -X6*X2
- IX1 X7+X1 ADDRESS OF USER EXCHANGE PACKAGE
- UX3,B6 X3 CHECK ERROR FLAG
- NZ B3,ESC1 IF TO RETURN TO CP EXECUTIVE
- NZ B6,ESC1 IF ERROR FLAG
- NG X4,ESC2 IF NOT TIME LIMIT
- SB6 TLET
- * TERMINATE SUB-CONTROL POINT ACTIVITY.
- ESC1 SA4 A3-16B+12B READ START TIME
- PX7 X3,B6
- BX6 X4
- SA4 B7+CPTW
- IX6 X4-X6 COMPUTE TIME USED
- SA6 A3+B1
- SA7 A3+
- BX7 X7-X7 CLEAR RA+1
- EWX7 X5
- ZR B3,ESC3 IF NOT TO RETURN TO CP EXECUTIVE
- * EXIT TO CONTROL POINT EXECUTIVE.
- SA2 B7+1 GET CONTROL POINT RA
- SX3 B7
- SX7 B7 SET EXCHANGE PACKAGE ADDRESS
- LX3 24
- BX7 X3+X7 SET CONTROL POINT ADDRESS
- MX6 24
- SA7 CPAL+A0 UPDATE *CPAL*
- SX3 B2 SET EXCHANGE ADDRESS
- BX6 X6*X2 SET CONTROL POINT RA
- IX1 X3-X1 SET EXCHANGE PACKAGE MOVE DIFFERENTIAL
- SA6 ACPL+A0 UPDATE *ACPL*
- SB2 B7 SET CP EXECUTIVE EXCHANGE ADDRESS
- EQ /MONITOR/BNJ20 COPY EXCHANGE PACKAGE
- * SET REMAINING TIME IN RA+1.
- ESC2 LX4 18 SET REMAINING TIME REQUESTED IN XJP CALL
- LX6 18
- BX6 X6*X2 CLEAR OLD TIME
- BX6 -X4+X6 SET NEW TIME
- EWX6 X5
- * EXIT TO BEGIN NEW JOB.
- ESC3 SA3 CPAL+A0 SET *CPAL* FOR EXCHANGE PACKAGE COPY
- MX6 36
- BX7 X6*X3
- BX7 X7+X1 INSERT USER EXCHANGE PACKAGE ADDRESS
- SA7 A3
- EQ /MONITOR/BNJ3 SELECT NEXT JOB
- TITLE CPU REQUEST PROCESSORS.
- SSE SPACE 4,10
- ** SSE - SET SUBCONTROL POINT ERROR.
- *
- * ENTRY (X7) = ERROR FLAG.
- * (B7) = CP ADDRESS.
- *
- * EXIT TO *SEF1* IF NOT ALLOWABLE SUBCP ERROR.
- * TO *BCE* IF SUBCP ERROR ALLOWED.
- *
- * USES X - 1, 2, 6.
- * B - 3.
- * A - 2, 6.
- SSE SA2 SSEA
- SB3 X7
- LX1 X2,B3
- PL X1,SEF1 IF ERROR NOT ALLOWED
- SA2 B7+16B SET ERROR IN X6 OF XP
- PX6 X2,B3
- SA6 A2
- EQ BCE BEGIN CONTROL POINT EXECUTIVE
- SSEA BSS 0 ALLOWABLE SUBCP ERROR FLAGS
- POS 60-ARET
- VFD 1/1
- POS 60-PSET
- VFD 1/1
- POS 60-TLET
- VFD 1/1
- BSS 0
- XJP SPACE 4,25
- *** *XJP*.
- * INITIATE SUB-CONTROL POINT.
- *
- *T 18/ *XJP*,6/ ,18/ TIML,18/ ADDR
- * TIML CPU TIME LIMIT FOR SUB-CONTROL POINT IN MILLISECONDS.
- * ADDR ADDRESS OF SUB-CONTROL POINT EXCHANGE PACKAGE.
- *
- * RESPONSE AFTER CONTROL RETURNED TO CALLER.
- *T, X2 60/ CPTW BEFORE SUBCP INITIATION.
- *T, X6 12/ 200B+EF,48/ RA OF SUBCP.
- *T, X7 60/ CPU TIME USED BY SUBCP.
- * THIS TIME HAS THE ACCOUNTING MULTIPLIERS APPLIED
- * AND IS IN QUARTER NANO SECONDS.
- * EF ERROR FLAG CAUSED BY SUB-CONTROL POINT.
- *
- * IF AN ERROR IS ENCOUNTERED DURING PROCESSING OF THE
- * *XJP* REQUEST, CERTAIN VALUES MAY HAVE ALREADY BEEN
- * ALTERED BY CPUMTR. THESE INCLUDE:
- * RA, EM, AND RAX IN THE SUB-CP EXCHANGE PACKAGE.
- * X2, AND X6 OF THE REQUESTING PROGRAM.
- XJP SB5 X5 ADDR
- MX0 24
- SB6 X5+20B
- LE B5,B1,CPE IF ILLEGAL ADDRESS
- GE B6,B4,CPE IF ILLEGAL ADDRESS
- NG B6,CPE IF ILLEGAL ADDRESS
- SA4 A0+TXJP READ EXCHANGE PACKAGE ADDRESS AND (MA)
- * MOVE EXCHANGE PACKAGE TO SUB CONTROL POINT EXCHANGE AREA.
- SA5 B3 RA
- SX6 B5 EXCHANGE ADDRESS
- IX5 X5+X6 ABSOLUTE ADDRESS OF SUBCP XP
- ERX3 X5 READ P
- LX2 36 POSITION RA
- BX6 X3
- SX3 B1
- IX5 X5+X3 RA ADDRESS
- ERX3 X5 READ RA
- SA6 X4
- IX7 X2+X3 RA(S) + RA(CP)
- BX3 X0*X3
- LX3 24
- PX6 X3
- SA7 X4+B1
- IX1 X1-X3 FL(CP) - RA(S)
- SX3 B1
- IX5 X5+X3 FL ADDRESS
- ERX3 X5 FL(S)
- SA6 B2+16B SET EXIT CONDITION IN (X6)
- BX2 X0*X3
- BX7 X3
- LX2 24
- SA7 A7+B1
- IX1 X1-X2 FL(CP) - RA(S) - FL(S)
- SX3 B1
- IX5 X5+X3
- ERX3 X5 EM
- SX7 B1 CLEAR COPY FLAG
- LX7 56-0
- TSX2 UEM SET COPY FLAG IF REQUIRED
- BX3 -X7*X3
- LX2 56-0
- BX7 X2+X3
- SA2 B2+4 READ RAX(CP)
- SX3 B1
- IX5 X5+X3
- ERX3 X5 RAX(S)
- NG X1,CPE IF RA(S) + FL(S) .GT. FL(CP)
- SA1 A2+B1 FLX(CP)
- BX2 X0*X2
- BX1 X0*X1
- IX6 X2+X3 RAX(S) + RAX(CP)
- BX3 X0*X3
- SA7 A7+B1
- IX1 X1-X3 FLX(CP) - RAX(S)
- SX3 B1
- IX5 X5+X3
- ERX3 X5 FLX(S)
- SA6 A7+B1
- BX7 X3
- BX3 X0*X3
- LX4 36
- IX1 X1-X3 FLX(CP) - RAX(S) - FLX(S)
- SX3 B1
- IX5 X5+X3
- ERX3 X5 MA
- LX1 24
- NG X1,CPE IF RAX(S) + FLX(S) .GT. FLX(CP)
- BX3 -X0*X3
- SA7 A6+B1
- BX7 X4+X3
- MX6 -11B SET LENGTH OF MOVE
- SA7 A7+B1
- SX3 B1
- IX5 X5+X3
- ERX3 X5
- BX3 -X0*X3
- BX3 X4+X3
- * MOVE REMAINDER OF EXCHANGE PACKAGE.
- XJP1 BX7 X3
- AX6 1
- SA7 A7+B1
- SX3 B1
- IX5 X5+X3
- ERX3 X5
- NZ X6,XJP1 IF NOT END OF MOVE
- SA3 B7+STSW SET SUBCP ACTIVE BIT
- SX7 B1
- LX7 56
- BX7 X7+X3
- SA7 A3
- SB3 XJP2 *CPT* RETURN ADDRESS
- TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
- ,/CPT)
- XJP2 SA2 RA1 CHECK FOR INITIAL CALL
- SX1 B1
- ERX5 X2
- LX1 41
- BX7 X1+X5
- BX1 X1*X5
- EWX7 X2 SET NON-INITIAL CALL FLAG
- NZ X1,XJP3 IF NOT INITIAL CALL
- SA6 B2+12B SET (X2) TO START TIME
- XJP3 SA2 A0+TXJP
- SA1 RTCL
- SX7 B7 CONTROL POINT ADDRESS
- LX5 -18
- MX0 -36
- LX7 24
- MX6 -18
- SA4 X2+B1 RA(S)
- BX7 X7+X2 SET CP AND EXCHANGE PACKAGE ADDRESSES
- BX1 -X0*X1 MILLISECOND CLOCK
- BX5 -X6*X5 REQUESTED TIME LIMIT
- SA7 CPAL+A0 UPDATE *CPAL*
- IX5 X5+X1
- BX4 X0*X4 SUBCP RA
- SX3 B2 SET OLD EXCHANGE ADDRESS
- BX6 X5+X4
- SX1 B2-B7 SET EXCHANGE PACKAGE MOVE DIFFERENTIAL
- SA6 ACPL+A0 UPDATE *ACPL*
- SB2 X2+ SET SUBCP EXCHANGE ADDRESS
- EQ /MONITOR/BNJ20 CHECK EXCHANGE PACKAGE COPY
- TXJP SPACE 4,10
- ** TXJP - TABLE OF SUB-CONTROL POINT EXCHANGE PACKAGES.
- *
- * INDEXED BY CPU NUMBER.
- TXJP VFD 42/0,18/SCX
- VFD 42/0,18//DCP/SCX1
- SPACE 4
- ** SCX - SUB-CONTROL POINT EXCHANGE PACKAGE.
- SCX EXP
- ENDBLK
- BLOCK CSE,(CLEAR CM STORAGE VIA ECS.),PROGRAM
- CSE SPACE 4,10
- ** CSE - CLEAR CM STORAGE VIA ECS. (PROGRAM MODE)
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
- * (X5) = PPU OUTPUT REGISTER.
- *
- * USES X - 0, 1, 2, 3, 5.
- * A - 0, 1, 2, 3.
- * B - 3, 4, 5.
- CSE TA2 EEN GET ECS EST ENTRY
- LX2 59-49
- TNG X2,(/PROGRAM/CSC,CMU,/PROGRAM/CSP) IF EM OFF OR DOWN
- * ENTRY FOR CME MAINFRAMES.
- * THE UEM FAKE READ IS USED ON ALL CYBER 170-8X5
- * MAINFRAMES WHEN NO EXTERNAL ECS DEVICE IS DEFINED.
- * NOTE THAT EVEN WHEN EXTERNAL ECS IS DEFINED ON A
- * CYBER 170-865/875, THE SMU DOES NOT ACCESS THE DEVICE
- * IF A FAKE READ IS ISSUED, SO NO CHECK IS NEEDED FOR EM
- * DEVICE LOGICALLY TURNED OFF.
- CSE1 LX5 59-43
- TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEAR USER ECS
- LX5 -24-59+43
- SB3 X5 (B3) = 0 IF LIST PRESENT
- NZ B3,CSE2 IF NOT LIST OPTION
- SA1 A5+B1 GET LIST ENTRY
- CSE2 SA0 X1
- MX5 -21
- TSX0 (LCCB-1,CP176,1-1)
- SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
- NZ X0,CSE3 IF NOT A 990
- SA3 ECRL GET RAE FOR ZERO UEM BLOCK
- LX3 0-12
- MX0 -24
- BX0 -X0*X3
- TLX0 9-21+60,UESC
- CSE3 BX5 -X5*X1 GET CM ADDRESS
- AX1 24
- SB5 X1
- TLX0 (0,CP176,21)
- TLX0 (3,ESM170,0)
- TLX0 (4,UEM180,0)
- LX5 30
- BX0 X0+X5 COMBINE CM AND EM ADDRESSES
- SB4 MECB SET WORD CLEAR COUNT
- SX5 B4
- LX5 30
- CSE4 GE B5,B4,CSE5 IF MORE THAN 400B WORDS LEFT
- SB4 B5+ PICK UP REMAINDER
- CSE5 RE B4 CLEAR MEMORY FROM EM
- SB0 B0+ HALF EXIT FOR FAKE READ
- SB5 B5-B4 DECREMENT WORD COUNT
- SA0 A0+B4 INCREMENT ADDRESS
- IX0 X0+X5
- GT B5,CSE4 IF MORE WORDS TO CLEAR
- TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
- SA1 A1+1 GET NEXT LIST ENTRY
- NZ X1,CSE2 IF NOT END OF LIST
- TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
- ENDBLK
- BLOCK UEC,(USER ECS PROCESSING ROUTINES.)
- SPACE 4
- ** ASSEMBLE CONSTANTS.
- MECB EQU 400B
- SPACE 4
- ** MONITOR/UEC BLOCK EQUIVALENCES.
- CPE EQU /MONITOR/CPE
- MTRX EQU /MONITOR/MTRX
- SFL2 EQU /MONITOR/SFL2
- UMT1 EQU /MONITOR/UMT1
- UMTA EQU /MONITOR/UMTA
- MFX SPACE 4,10
- ** MFX - CHANGE FL FOR USER EXTENDED MEMORY.
- *
- * ENTRY (X0) = INCREMENT.
- * (B3) = ADDRESS OF CP USING CURRENT CPU.
- * (B6) = EXCHANGE PACKAGE ADDRESS.
- * (B7) = CP/PCP ADDRESS.
- *
- * USES X - 1, 2, 3, 4, 6, 7.
- * A - 1, 2, 3, 4, 6, 7.
- MFX BSS 0 ENTRY
- SA3 B7+ECSW READ FL CONTROL WORD
- TX6 UEM
- SA4 B7+3 SET UEM ENABLED FLAG
- LX6 56-0
- BX6 X4+X6
- SA6 A4
- IX7 X3+X0
- SA7 A3+ UPDATE FLX IN FL CONTROL WORD
- SA1 B6+4
- MX2 -36
- SA4 A1+B1
- BX4 -X2*X4
- MX2 -12
- BX6 -X2*X7 PICK UP INCREMENTED CP FLE
- TLX6 0,UESC
- TLX6 (36+3,ESM170,36+9)
- MX2 -24 MASK FOR RAE FROM *ECSW*
- BX7 X6+X4
- SA7 A4 WRITE UPDATED FLE TO EXCHANGE PACKAGE
- AX3 RSHF
- ZR X6,MFX1 IF FLX = 0
- BX6 -X2*X3
- MFX1 SA4 UMTA
- SA3 UEML FETCH UEM PRESENT STATUS
- TA2 X4+1,MCT
- IX7 X2-X0 ADJUST UNASSIGNED XM ABOVE CP/PCP
- BX4 X3
- SA7 A2 UPDATE MCT ENTRY
- MX2 -36
- LX4 59-1
- BX7 -X2*X1 XP RAX = *ECSW* RAX + UEM BASE ADDRESS
- MX2 12
- NG X4,MFX2 IF UEM PRESENT
- SX3 B0
- MFX2 BX3 X2*X3 EXTRACT UEM BASE ADDRESS
- LX3 -3
- TLX6 36+9,UESC
- IX6 X3+X6
- TLX6 (60-6,ESM170,0)
- IX6 X7+X6
- ZR B7,SFL2 IF SYSTEM EXTENDED MEMORY REQUEST
- SA6 A1+
- EQ SFL2 CHECK CPU ACTIVITY
- MRX SPACE 4,10
- ** MRX - CHANGE RA FOR USER EXTENDED MEMORY.
- *
- * ENTRY (X0) = INCREMENT.
- * (B4) = EXIT ADDRESS FOR *UMT*.
- * (B7) = CP/PCP ADDRESS.
- *
- * USES X - 2, 7.
- * B - 5.
- * A - 2, 7.
- MRX BSS 0 ENTRY
- SA2 B7+ECSW READ FL CONTROL WORD
- LX0 12
- IX7 X2+X0 INCREMENT RAX
- SB5 1
- LX0 -12 RESTORE INCREMENT
- SA7 A2
- EQ UMT1 UPDATE MEMORY CONTROL TABLE
- EJECT
- TITLE USER ECS PROGRAM MODE ROUTINES.
- QUAL PROGRAM
- MECB SPACE 4,10
- ** DEFINE BLOCK SIZE FOR USER ECS OPERATIONS.
- MECB EQU 400B
- CEC SPACE 4,10
- ** CEC - CLEAR USER ECS STORAGE.
- * SET THE SPECIFIED AREA OF USER ECS TO ZERO. THIS ROUTINE IS
- * EXECUTED IN PROGRAM MODE AND UTILIZES THE PROGRAM MODE
- * BUFFER FOR CLEARING ECS.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- *
- * EXIT CLEAR OUTPUT REGISTER.
- *
- * USES X - 0, 1, 2, 3, 4, 6, 7.
- * A - 0, 1, 2, 3, 7.
- * B - 4, 6.
- *
- * MACROS PER, WUE.
- CEC TSX0 (LCCB-1,CP176,1-1)
- SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
- NZ X0,CEC1 IF NOT CYBER 990 TYPE MAINFRAME
- SA2 ECRL GET RAE FOR ZERO UEM BLOCK
- LX2 0-12
- MX0 -24
- BX0 -X0*X2
- TLX0 9-21+60,UESC
- CEC1 SA0 PBUF SET FWA OF CM BUFFER
- TLX0 (0,CP176,21)
- SB4 MECB SET WORD COUNT
- TLX0 (3,ESM170,0)
- TLX0 (4,UEM180,0)
- SA2 A5
- SX1 A0
- LX1 30
- BX0 X0+X1
- + RE B4 CLEAR CM BUFFER
- * NOTE - HALF EXIT WILL BE TAKEN ON EXTENDED MEMORY READ
- * BECAUSE OF OUT-OF-RANGE ADDRESS SPECIFIED
- * TO CAUSE ZEROES TRANSFER TO CM.
- SB0 B0+
- SX0 X2 ECS ADDRESS/1000B
- LX2 59-42
- TLX0 9,UESC
- MX6 -RMSK
- PL X2,CEC2 IF ABSOLUTE ADDRESS
- SA3 B7+ECSW GET RAE
- LX3 -RSHF
- BX4 -X6*X3
- TLX4 9,UESC RAE*(UEBS)
- IX0 X4+X0
- CEC2 LX2 -24-59+42
- SX3 X2 BLOCK COUNT
- ZR X3,HNG IF ZERO BLOCK COUNT
- TLX3 9,UESC WORD COUNT
- BX0 X1+X0
- SX6 B4+
- SB6 CEC4 SET RETURN ADDRESS
- CEC3 WUE PROGRAM WRITE (B4) WORDS TO USER EM
- PER /PROGRAM/CEC5
- CEC4 IX3 X3-X6 DECREMENT WORD COUNT
- IX0 X0+X6 INCREMENT ECS ADDRESS
- NZ X3,CEC3 IF MORE TO CLEAR
- * STORAGE CLEARED, CLEAR PPU OR AD EXIT.
- CEC5 BX7 X7-X7
- TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
- MEC SPACE 4,8
- ** MEC - MOVE ECS STORAGE.
- *
- * ENTRY (B7) = CP/PCP ADDRESS.
- *
- * USES X - ALL.
- * B - 5.
- * A - ALL.
- *
- * CALLS PER.
- MEC BSS 0 ENTRY
- * INITIALIZE MOVE PARAMETERS.
- SA2 B7+ECSW GET RAE AND FLE
- TSA1 (UEML,UEM,ZERL) GET UEM BASE ADDRESS
- SA5 SMIN
- MX0 -12
- MX6 -RMSK
- BX4 -X0*X2
- LX1 12
- AX2 RSHF
- BX1 -X0*X1
- BX2 -X6*X2
- LX1 9 UEM BASE ADDRESS IF UEM PRESENT
- TLX2 9,UESC
- TLX4 9,UESC FLE IN WORDS
- IX2 X1+X2 RAE WORD ADDRESS
- TLX5 9,UESC INCREMENT IN WORDS
- BX3 X5
- SX6 -MECB WORD COUNT
- IX0 X2+X4
- IX0 X0+X6 SET FWA ECS TO READ FROM (RA+FL-BLOCK SIZE)
- SA0 UBUF CM BUFFER ADDRESS
- PL X5,MEC1 IF MOVING CP UP ( TOWARDS HIGH CORE )
- LX1 X0
- BX6 -X6
- LX0 X2 SET FWA ECS TO RAE FOR LOWER MOVE
- BX2 X1
- MEC1 IX6 X6-X3
- SX5 A0+
- LX5 30
- BX0 X5+X0
- MX5 -24
- * MAIN MOVE LOOP.
- MEC2 RE MECB READ ECS
- RJ MEC3 IF EXTENDED MEMORY ERROR
- IX4 X0-X2
- IX0 X0+X3 SET FWA ECS TO WRITE TO
- WE MECB WRITE ECS
- RJ MEC3 IF EXTENDED MEMORY ERROR
- IX0 X0+X6 SET NEXT ADDRESS TO READ FROM
- BX1 -X5*X4
- NZ X1,MEC2 IF MORE BLOCKS TO MOVE
- * MOVE COMPLETED.
- TNO /MCE/MEC,MCE IF MEMORY CLEARING ENABLED
- MEC2.1 TA2 EMMS,SDA GET EM MOVE COUNT
- SA5 SMIN GET MOVE INCREMENT
- SA1 B7+ECSW GET *ECSW*
- TSA3 (UEML,UEM,ZERL) GET UEM BASE ADDRESS
- SA4 B7+4 GET EXCHANGE PACKAGE RAE
- SX7 B1
- MX0 -RMSK
- MX6 12
- LX0 12
- IX7 X7+X2 COUNT MOVE
- LX5 RSHF
- SA7 A2 UPDATE EM MOVE COUNT
- IX7 X1+X5 SET NEW RA IN *ECSW*
- BX3 X6*X3
- SA7 A1 UPDATE *ECSW*
- BX7 -X0*X7
- LX3 24 UEM BASE ADDRESS IF UEM PRESENT
- TLX7 0,UESC
- MX0 -36
- IX7 X7+X3
- BX4 -X0*X4
- TLX7 (24+3,ESM170,24+9)
- BX6 X4+X7
- BX7 X7-X7 CLEAR REPLY
- SA6 A4 UPDATE EXCHANGE PACKAGE RAE
- EQ SMPX RETURN
- * PROCESS EXTENDED MEMORY ERROR.
- MEC3 PS ENTRY/EXIT
- SX1 400B WORD COUNT
- RJ /ECS/RSE REPORT STORAGE MOVE EXTENDED MEMORY ERROR
- SA1 SMRL SET EXTENDED MEMORY ERROR STATUS
- SX7 B1
- LX7 36
- SB5 MEC3 *MSC* RETURN ADDRESS
- BX7 X1+X7
- SA7 A1
- SX1 MSEA * EXTENDED MEMORY ERROR - STORAGE MOVE.*
- EQ /MONITOR/MSC ISSUE ERROR MESSAGE
- TEC SPACE 4,10
- ** TEC - PERFORM USER ECS TRANSFER FOR *ECXM* FUNCTION.
- *
- * USES X - ALL.
- * B - 3, 4, 5, 6, 7.
- * A - 0, 1, 2, 4, 6, 7.
- *
- * MACROS PER, RUE, WUE.
- TEC SA4 A5+B1 READ PARAMETERS
- AX2 24
- MX6 48
- SB7 X2 SET CP/PCP ADDRESS
- SX0 X4 ECS ADDRESS/1000B
- LX4 12 GET WORD COUNT
- BX3 -X6*X4
- LX0 9 ECA*1000B
- LX4 24 GET CM ADDRESS
- SB3 X3 SET WC FOR ECS TRANSFER
- BX4 -X6*X4
- MX7 1
- SA2 B7+ECSW GET CP/PCP RAE,FLE
- LX7 -12
- BX7 X7+X2 SET *ECXM* STORAGE MOVE INTERLOCK
- SA7 A2
- BX7 -X6*X2 FLE
- LX2 -RSHF
- BX2 -X6*X2 RAE
- TLX7 9,UESC FLE*(UEBS)
- IX3 X0+X3 ECA+WC
- TLX2 9,UESC RAE
- IX0 X2+X0 RAE+ECA=ABSOLUTE ECS ADDRESS
- SA2 B7+FLSW
- IX1 X7-X3 FLE - (ECA + WC)
- BX7 -X6*X2 CM FL
- MX6 -RMSK
- AX2 RSHF
- BX2 -X6*X2 CM RA
- LX7 6 FL*100B
- LX4 6 CMA*100B
- SX3 X4+B3 CMA + WC
- IX7 X7-X3 FL-(CMA+WC)
- BX7 X1+X7
- NG X7,HNG IF CMA OR ECA OUT OF RANGE
- LX2 6 RA*100B
- IX4 X2+X4 RA+CMA
- BX7 X7-X7
- SA0 X4 SET ABSOLUTE FWA OF CM BUFFER
- LX4 30
- BX0 X4+X0
- SB5 X5+ SAVE RESPONSE ADDRESS
- SB4 MECB
- SB6 TEC3 SET RETURN ADDRESS
- LX5 59-18
- SA7 A5 CLEAR PP OUTPUT REGISTER NOW
- TEC1 GE B3,B4,TEC2 IF NOT LAST SHORT BLOCK
- SB4 B3+
- TEC2 NG X5,TEC4 IF WRITE
- RUE PROGRAM READ (B4) WORDS FROM USER ECS
- PER /PROGRAM/TEC6 PARITY ERROR PROCESSOR
- TEC3 EQ B3,B4,TEC5 IF END OF BLOCK
- SB3 B3-B4 DECREMENT WORD COUNT
- SX2 B4 INCREMENT ADDRESSES
- SA0 A0+B4
- IX0 X0+X2
- LX2 30
- IX0 X0+X2
- EQ TEC1 LOOP FOR NEXT TRANSFER
- TEC4 WUE PROGRAM WRITE (B4) WORDS TO USER ECS
- PER /PROGRAM/TEC6 PARITY ERROR PROCESSOR
- TEC5 NE B3,B4,TEC3 IF NOT END OF BLOCK
- SA1 B7+ECSW CLEAR *ECXM* STORAGE MOVE INTERLOCK
- MX6 59
- LX6 47-0
- BX6 X6*X1
- SA6 A1
- SA7 B5 SET RESPONSE
- EQ PRG EXIT
- TEC6 MX7 12 RETURN ERROR STATUS
- LX7 -12
- EQ TEC5 RETURN
- UBUF SPACE 4,10
- * USER ECS STORAGE MOVE BUFFER.
- UBUF BSS MECB
- SPACE 4
- QUAL UEC
- ENDBLK
- BLOCK VMS,(VALIDATE MASS STORAGE.)
- VMSM SPACE 4,10
- ** VMSM - VALIDATE MASS STORAGE.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- VMS SX4 X1
- AX4 12
- SB3 VMS1 *CTR* RETURN ADDRESS
- ZR X4,/PROGRAM/CTR IF INTERLOCKING MST/TRT
- AX4 1
- SB6 B0
- ZR X4,/PROGRAM/CTR IF VALIDATE WITH NO INTERLOCK
- SB3 VMS8 *CTR* RETURN ADDRESS
- EQ /PROGRAM/CTR
- * VALIDATE EQUIPMENT.
- VMS1 BX2 -X5*X3 AVAILABLE TRACKS
- MX0 -4 (X0) = PRESERVED BIT MASK
- SA4 A3+B1 READ PRESERVED FILE COUNT
- SA1 B6 READ FIRST WORD OF TRT
- AX3 24
- AX4 24
- BX3 -X5*X3 TRT LENGTH
- BX4 -X4+X5 - PRESERVED FILE COUNT
- SB4 X3 (B4) = LENGTH OF TRT
- LX0 8
- SB2 B6+X3 (B2) = LWA+1 OF TRT, *VTC* ENTRY CONDITION
- LX3 2
- SB5 X4 (B5) = - PRESERVED FILE COUNT
- IX7 X2-X3
- MX4 -4 (X4) = RESERVATION BIT MASK
- SB3 X7 (B3) = - TRACKS RESERVED
- * COUNT RESERVATION AND PRESERVED FILE BITS.
- VMS2 SB7 X4 (B7) = -15 = LOOP COUNTER
- BX7 X7-X7
- SB4 B7+B4
- BX6 X6-X6
- PL B4,VMS3 IF NOT LAST SHORT LOOP
- SB7 B7-B4 SET TO SHORT LOOP WORD COUNT
- VMS3 LX7 4
- BX5 -X0*X1 EXTRACT PRESERVED FILE BITS
- SB7 B7+B1
- BX6 X6+X5
- BX5 -X4*X1 EXTRACT RESERVATION BITS
- LX6 4
- SA1 A1+B1
- BX7 X7+X5
- NZ B7,VMS3 IF NOT END OF LOOP
- CX6 X6 COUNT PRESERVED FILE BITS
- CX7 X7 COUNT RESERVATION BITS
- SB5 B5+X6
- SB3 B3+X7
- GT B4,B0,VMS2 IF NOT END OF TRT
- SX3 B1
- MX0 -8
- SA4 A3+PUGL CHECK FOR CATALOGS ON DEVICE
- BX7 X7-X7
- ZR B3,VMS4 IF RESERVATION BIT COUNT OK
- BX7 X7+X3 SET ERROR FLAG
- VMS4 LX7 -1
- ZR B5,VMS5 IF PRESERVATION BIT COUNT OK
- BX7 X7+X3 SET ERROR FLAG
- VMS5 BX2 -X0*X4 EXTRACT DEVICE MASK
- LX7 -4
- ZR X2,VMS7 IF NO CATALOGS ON DEVICE
- * VALIDATE PERMIT, LABEL-CATALOG, IAF TRACK CHAINS.
- SB7 B1+B1
- SA2 A4-B7 READ FIRST TRACK OF CHAINS
- MX4 -11
- AX2 12
- SB3 VMS6 *VTC* RETURN ADDRESS
- LX7 4
- MX0 -2
- * VALIDATE INDIRECT ACCESS FILE CHAIN.
- VMS6 AX2 12
- LX7 -1
- BX6 -X0*X2
- BX1 -X4*X2
- SB7 B7-1
- NZ X2,VTC IF MORE CHAINS TO VALIDATE
- * RETURN STATUS, INTERLOCK DEVICE IF ERRORS.
- VMS7 SX3 B1 SET *CDI* ENTRY CONDITIONS
- BX1 X1-X1
- SX5 B1
- SB4 B0
- SB5 /PROGRAM/PRG
- TZR X7,(/ISD/VMS1,ISD,/PROGRAM/CDI) IF NO ERRORS
- LX3 4
- SA2 A3+B1 SET DEVICE ERROR IDLE
- BX6 X2+X3
- LX7 5+36
- SA6 A2
- TEQ (/LSPMMF/VMS,LSPMMF,/ISD/VMS1,ISD,/PROGRAM/CSM1) EXIT
- * VALIDATE TRACK CHAIN.
- VMS8 AX3 24 SET TRT LENGTH
- SB3 VMS9
- BX3 -X5*X3
- MX4 -11
- SB2 B6+X3 (B2) = LWA + 1 OF TRT
- MX0 -2
- BX7 X7-X7
- SB7 B1
- EQ VTC1 VALIDATE TRACK CHAIN
- VMS9 LX7 36 RETURN STATUS
- SA7 A5
- EQ /PROGRAM/PRG EXIT
- VTC SPACE 4,15
- ** VTC - VALIDATE TRACK CHAIN.
- * VTC VALIDATES A TRACK CHAIN TO INSURE ALL TRACKS ARE RESERVED,
- * NO CIRCULAR CHAIN EXISTS AND ALL TRACKS ARE WITHIN THE TRT.
- *
- * ENTRY ENTER AT VTC1 IF NOT TO CHECK PRESERVED FILE BIT.
- * (X0) = -3
- * (X1) = FIRST TRACK.
- * (X2) = TRACK IF ENTERED AT VTC.
- * (X4) = -3777B
- * (X6) = BITS 0 AND 1 OF TRACK IF ENTERED AT VTC.
- * (B2) = LWA + 1 OF TRT.
- * (B3) = EXIT ADDRESS.
- * (B6) = FWA OF TRT.
- * (B7) = 0 IF CHECKING CATALOG CHAIN.
- * (A3) = ADDRESS OF TDGL IN MST.
- *
- * EXIT (X7) = BIT 0 SET IF ERROR DETECTED IN CHAIN.
- *
- * USES X - 1, 3, 5, 6, 7.
- * B - 4, 5, 7.
- * A - 1.
- VTC AX1 2
- SB4 X6+48 PRESERVATION BIT SHIFT COUNT
- SA1 B6+X1
- LX6 X1,B4
- PL X6,VTC6 IF PRESERVATION BIT NOT SET
- BX1 -X4*X2
- * ENTER HERE IF NOT CHECKING PRESERVATION BIT.
- VTC1 SX3 B6-B2 SET NUMBER OF TRACKS
- BX1 -X4*X1
- LX3 2
- SB4 X1
- * TRACK VALIDATION LOOP.
- VTC2 BX1 -X4*X1 TRACK
- SX3 X3+B1
- BX6 -X0*X1 BYTE NUMBER
- SB5 X1
- NZ B7,VTC3 IF NOT CHECKING CATALOG CHAIN
- NE B4,B5,VTC5 IF TRACKS NON-CONTIGUOUS
- VTC3 SX1 B5
- SB5 X6+56 RESERVATION BIT SHIFT COUNT
- LX6 2 TRACK LINK SHIFT COUNT * 4
- SB4 X1+B1
- AX1 2
- SA1 B6+X1 READ TRT WORD
- LX5 X1,B5 POSITION RESERVATION BIT
- SB5 X6
- LX6 1 TRACK LINK SHIFT COUNT * 8
- BX5 X5*X3
- SB5 B5+X6 TRACK LINK SHIFT COUNT * 12
- SX6 A1-B2 CHECK OUT OF TRT
- LX1 X1,B5 POSITION TRACK LINK BIT
- BX6 X6*X5
- AX1 48
- PL X6,VTC6 IF NOT RESERVED, OUT OF TRT, OR CIRCULAR
- NG X1,VTC2 IF TRACK LINKED
- NZ B7,VTC4 IF NOT CHECKING CATALOG CHAIN
- SA1 A3+ALGL
- SX5 B6-B2 TRT LENGTH
- LX1 -12
- LX5 2 SET NUMBER OF TRACKS
- BX1 -X4*X1 CATALOG TRACK COUNT FROM MST
- IX5 X3-X5 NUMBER OF TRACKS IN CATALOG CHAIN
- CX3 X1
- IX6 X1-X5
- SB4 X3
- PL X6,VTC6 IF NOT ENOUGH CATALOG TRACKS
- NE B4,B1,VTC6 IF CATALOG TRACK COUNT NOT POWER OF TWO
- VTC4 JP B3 RETURN
- VTC5 SA1 A3+PUGL CHECK CATALOG CHAIN CONTIGUOUS/OVERFLOW
- LX1 59-17
- PL X1,VTC3 IF CATALOG CHAIN NON-CONTIGUOUS
- SA1 A3+ACGL
- LX1 59-57
- NG X1,VTC3 IF CATALOG TRACK OVERFLOW
- VTC6 SX3 B1 RETURN ERROR STATUS
- BX7 X3+X7
- JP B3 RETURN
- ENDBLK
- BLOCK EUE,(ECS AND USER ECS PROCESSING ROUTINES.),ECS
- ECSM SPACE 4
- ** ECSM - ECS TRANSFER.
- *
- * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
- *
- * USES X - 0, 1, 2, 3, 4, 5, 6.
- * B - 3, 4, 5, 6.
- * A - 0, 1, 2, 3, 6.
- *
- * CALLS CFR, EAB, SFR.
- *
- * MACROS PER, RUE, WUE.
- ECS SB3 A0 SAVE CPU NUMBER
- LX5 59-23
- PL X5,ECS2 IF OPTIONS 0 - 3
- LX1 -42
- LX2 X5,B1
- SB4 X1 LIST SIZE/BIT NUMBER
- LX5 X2,B1
- NG X2,ECS1 IF OPTION 6 OR 7
- SB6 ECSX *SFR*/*CFR* RETURN ADDRESS
- TPL X5,(/ECS/SFR,EEC,/MONITOR/HNG) IF *SFRS* FUNCTION
- TEQ (/ECS/CFR,EEC,/MONITOR/HNG) PROCESS *CFRS* FUNCTION
- ECS1 NG X5,/MONITOR/HNG IF OPTION 7
- LX5 1 NEGATIVE = WRITE ECS, POSITIVE = READ ECS
- MX2 1
- BX3 X2*X5
- LX2 -1
- BX2 X2*X5
- LX2 2
- SB5 X2 0 = ABS SYSTEM ECS, 1 = ABS USER ECS
- LX1 18
- SA1 X1 GET FIRST LIST ENTRY
- SX4 B4 INDICATE LIST SUBFUNCTION
- ZR B4,/MONITOR/HNG IF NO ENTRIES IN LIST
- MX5 -18
- SX2 A1+B4 CM ADDRESS OF DATA BUFFER
- BX2 -X5*X2
- BX5 X3+X2
- SX2 B0+
- EQ ECS11 PRESET LIST REGISTERS
- ECS2 LX1 -24 CM ADDRESS OF BUFFER
- MX3 -17
- LX5 2 NEGATIVE = WRITE ECS, POSITIVE = READ ECS
- SX4 B1
- BX4 -X5*X4
- MX2 1
- BX5 X2*X5
- LX4 1
- SB5 X4 0 = ABS SYSTEM ECS, 2 = RELATIVE USER ECS
- BX3 -X3*X1
- LX1 -18
- MX6 -RMSK
- PL X1,ECS3 IF ABSOLUTE CM ADDRESS
- SA2 B7+FLSW ABSOLUTIZE CM BUFFER ADDRESS
- AX2 RSHF
- BX2 -X6*X2 RA/100
- LX2 6
- IX3 X3+X2
- ECS3 BX5 X5+X3
- LX1 42
- SX4 B0+ INDICATE NOT LIST SUBFUNCTION
- SB4 B1+ BIAS FOR WORD COUNT
- MX3 -21 ADDRESS MASK
- ECS4 MX6 -21
- BX0 -X3*X1 ECS ADDRESS
- MX3 -6
- LX1 -42
- BX1 -X3*X1 WORD COUNT
- SB4 X1+B4 WORD COUNT OF TRANSFER
- BX1 -X6*X5 CM ADDRESS OF BUFFER
- SA0 X1
- TX3 MECNF MACHINE ECS FL / 1000B
- TLX3 60-0,-UESC
- ZR B5,ECS6 IF ABSOLUTE SYSTEM ECS ADDRESS
- EQ B5,B1,ECS5 IF ABSOLUTE USER ECS ADDRESS
- SA3 B7+ECSW GET ECS RA AND FL
- MX2 -12
- BX6 -X2*X3
- AX3 RSHF
- TLX6 9,UESC
- MX2 -RMSK
- BX3 -X2*X3
- SX2 B4-B1
- TLX3 9,UESC
- IX2 X0+X2
- IX2 X2-X6
- IX0 X0+X3 ABSOLUTIZE ECS ADDRESS
- PL X2,EAB3 IF ECA + WC .GT. FLX
- ECS5 TA3 ECSW,SCA SET LWA+1 USER ECS / 1000B
- MX2 -12
- BX6 -X2*X3
- AX3 RSHF
- MX2 -RMSK
- BX3 -X2*X3
- IX3 X3+X6
- ECS6 TLX3 9,UESC
- SX2 B4-B1
- LX1 30
- IX2 X0+X2 LWA OF TRANSFER
- BX0 X1+X0
- IX2 X2-X3
- SX3 B1+
- SX6 A1 SAVE LIST ENTRY ADDRESS
- SA6 ECSA
- BX6 X6-X6
- PL X2,EAB10 IF ILLEGAL ADDRESS
- SB6 ECS10 SET RETURN ADDRESS
- NZ B5,ECS8 IF USER EXTENDED MEMORY READ/WRITE
- NG X5,ECS7 IF WRITE SYSTEM ECS
- + RE B4 READ (B4) WORDS FROM SYSTEM ECS
- PER EAB PROCESS EXTENDED MEMORY ERROR
- EQ ECS10 COMPLETE PROCESSING
- ECS7 WE B4 WRITE (B4) WORDS TO SYSTEM ECS
- PER EAB PROCESS EXTENDED MEMORY ERROR
- EQ ECS10 COMPLETE PROCESSING
- ECS8 NG X5,ECS9 IF WRITE USER ECS
- RUE MONITOR READ (B4) WORDS FROM USER ECS
- PER EAB PROCESS EXTENDED MEMORY ERROR
- EQ ECS10 COMPLETE PROCESSING
- ECS9 WUE MONITOR WRITE (B4) WORDS TO USER ECS
- PER EAB PROCESS EXTENDED MEMORY ERROR
- ECS10 ZR X4,ECSX IF NOT PROCESSING LIST
- SA1 ECSA GET LIST ENTRY ADDRESS
- SA6 X1+ SET/CLEAR ERROR FLAGS
- SX2 B4+ ADVANCE CM BUFFER ADDRESS
- SA1 A6+B1 GET NEXT LIST ENTRY
- IX4 X4-X3
- ZR X4,ECSX IF END OF LIST
- ECS11 IX5 X5+X2
- SB4 B0+
- TMX3 (36,ESM170,39)
- EQ ECS4 PROCESS NEXT LIST ENTRY
- ECSA CON 0 LIST ENTRY ADDRESS
- EAB SPACE 4,20
- ** EAB - ECS ABORT PROCESSOR. (MONITOR MODE)
- *
- * ENTRY (X0) = ECS ADDRESS OF ERROR.
- * (X3) = 1.
- * (X4) = 0 IF NOT PROCESSING LIST.
- * (X5) .LT. 0 IF WRITE ECS, OTHERWISE READ ECS.
- * (X6) = 0.
- * (X7) = 0 OR ERROR STATUS.
- * (B3) = CPU NUMBER.
- * (B4) = WORD COUNT OF TRANSFER.
- * (A0) = CM ADDRESS OF TRANSFER.
- * (A5) = OUTPUT REGISTER ADDRESS.
- *
- * EXIT (X6) = ERROR FLAGS FOR LIST ENTRY.
- * TO *ECS10* IF PROCESSING LIST.
- * TO *PPRX* IF FUNCTION COMPLETE.
- *
- * USES A - 0, 7.
- * B - 6, 7.
- * X - 0, 1, 2, 6, 7.
- * PROCESS EXTENDED MEMORY ERROR.
- EAB NZ X4,EAB4 IF PROCESSING LIST
- MX7 12 SET ERROR STATUS
- LX7 -12
- EAB1 MX6 -24
- BX0 -X6*X0
- BX7 X7+X0
- EAB2 SA0 B3 RESTORE CPU NUMBER
- SA7 A5 STORE RESPONSE
- EQ /MONITOR/PPRX EXIT
- * PROCESS INVALID RELATIVE ADDRESS.
- EAB3 SX7 B1 SET ERROR STATUS
- LX7 36
- EQ EAB1 RETURN ERROR STATUS
- * PROCESS EXTENDED MEMORY ERROR DURING LIST PROCESSING.
- EAB4 SX1 B1
- LX1 30
- BX1 X3+X1
- SB6 B4
- EAB5 SB7 B4-B6
- SB6 B6-B1
- NG X5,EAB8 IF WRITE ECS
- + RE 1 RETRY READ ONE WORD AT A TIME
- EQ EAB9 PROCESS EXTENDED MEMORY ERROR
- EAB6 SA0 A0+B1
- IX0 X0+X1
- NZ B6,EAB5 IF NOT END OF BUFFER
- EAB7 MX7 12 INDICATE TRANSFER ABORTED
- LX7 -12
- EQ ECS10 CONTINUE PROCESSING LIST
- EAB8 WE 1 RETRY WRITE ONE WORD AT A TIME
- EQ EAB9 PROCESS EXTENDED MEMORY ERROR
- EQ EAB6 CONTINUE RETRY FOR ENTIRE BUFFER
- EAB9 LX2 X3,B7
- BX6 X6+X2 SET ERROR FLAG FOR THIS WORD
- EQ EAB6 CONTINUE RETRY FOR ENTIRE BUFFER
- * PROCESS INVALID ECS ADDRESS IN LIST.
- EAB10 ZR X4,/MONITOR/HNG IF ILLEGAL ADDRESS AND NOT LIST
- MX6 60 RETURN ERROR STATUS IN ALL BITS
- MX7 12 INDICATE TRANSFER ABORTED
- LX7 -12
- EQ ECS10 CONTINUE PROCESSING LIST
- ECSX EQU EAB2 EXIT ADDRESS FOR *ECS*
- ENDBLK
- BLOCK ECS,(ECS PROCESSING ROUTINES.)
- PIOM SPACE 4,10
- ** PIO - *PIOM* PP I/O CPU TRANSFERS (MONITOR MODE).
- *
- * ENTRY (A0) = CPU NUMBER.
- * (A5) = *OR* ADDRESS.
- * (B2) = EXCHANGE PACKAGE ADDRESS.
- * (B7) = CP ADDRESS.
- * (B5) = SUBFUNCTION - 1.
- * (X2) = MASK OF -12.
- * (X5) = (OR).
- * (X7) = 0.
- * SEE *PIOM* DOCUMENTATION FOR *OR*, *MB* AND *MB*+1
- * DESCRIPTION.
- *
- * EXIT A0, A5, B2, B7 SAME AS ON ENTRY.
- * TO /MONITOR/HNG, FOR FOLLOWING CONDITIONS -
- * (1) ILLEGAL SUBFUNCTION
- * (2) BUFFER PREVIOUSLY RESERVED FOR SUBFUNCTION 0
- * (RESERVE WRITE BUFFER)
- * (3) PP BUFFER RESERVED BUT NOT INTERLOCKED
- * TO THIS PP.
- * (4) PP BUFFER NOT PREVIOUSLY RESERVED FOR
- * SUBFUNCTION 2 (WRITE PRU).
- * (5) BUFFERED I/O REQUEST WITHOUT
- * *BUFIO* BLOCK PRESENT.
- * (6) FUNCTION FLAG SELECTION NOT LEGAL FOR THIS
- * SUBFUNCTION.
- * TO /BUFIO/PBF, FOR SUBFUNCTION 5 (I/O BUFFER FLUSH),
- * AFTER SWITCH TO PROGRAM MODE.
- * TO /PROGRAM/PDT, FOR ECS DIRECT TRANSFER,
- * AFTER SWITCH TO PROGRAM MODE.
- * TO /BUFIO/PST, FOR BUFFERED DEVICE DIRECT TRANSFER,
- * AFTER SWITCH TO PROGRAM MODE.
- * TO /BUFIO/PST, IF BUFFERED I/O PRU TRANSFER.
- PIO TX1 A5-1,-FP
- SA3 CMCL
- LX1 PPXES-PPCES
- SA4 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
- TA1 X1+ACPP,FPX GET CP ASSIGNMENT
- SA7 A4+1
- SB4 FLBS-1
- BX3 X1-X3
- TSB6 (/BUFIO/PBF,BUFIO,/PROGRAM/HNG)
- AX3 48
- SX1 REIS RETURN STATUS = *PAUSE* REQUIRED
- ZR X3,PIOX IF STORAGE MOVE REQUIRED
- EQ B5,B4,PIOP IF I/O BUFFER FLUSH
- GE B5,B4,/MONITOR/HNG IF ILLEGAL SUBFUNCTION
- LX4 24 POSITION EST ORDINAL
- BX0 -X2*X4
- LX4 -12 POSITION PP I/O BUFFER
- CX1 X0,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST READ EST ENTRY
- BX1 -X2*X1 GET MST ADDRESS FOR EQUIPMENT
- LX1 3
- SA1 X1+DILL GET BUFFERED DEVICE FLAG
- SX0 B1+
- BX3 -X2*X4 PP I/O BUFFER INCREMENT
- LX1 0-22
- BX6 X0*X1
- SA6 A4+B1 SAVE DEVICE INDICATOR IN MESSAGE BUFFER
- SA1 PFFV VALIDATE FUNCTION FLAGS
- SB3 B5+B1
- SB6 B3+B3
- LX5 18
- SB6 B6+B3
- SB6 B6+B6
- LX1 B6
- BX1 X1*X5
- MX6 6
- BX6 X6*X1
- LX5 -18
- NZ X6,/MONITOR/HNG IF ILLEGAL FUNCTION FLAGS
- BX6 X4
- LX6 59-6-12
- NG X6,PIO6 IF RECALL AFTER FLUSH
- BX6 X2*X4 CLEAR PP I/O BUFFER INCREMENT
- LX4 59-0-12
- LX6 -12
- PL X4,PIO4 IF PP I/O BUFFER NOT RESERVED
- * VALIDATE PP I/O BUFFER INTERLOCK.
- SX1 A5
- TA3 X3,ECSB CHECK PP I/O BUFFER INTERLOCK
- NG B5,/MONITOR/HNG IF RESERVE WRITE BUFFER SUBFUNCTION
- IX1 X3-X1
- BX6 -X0*X6 CLEAR PP I/O BUFFER RESERVED FLAG
- NZ X1,/MONITOR/HNG IF NOT RESERVED TO THIS PP
- LE B5,B1,PIO6 IF NOT DIRECT TRANSFER
- * RELEASE PP I/O BUFFER AND SWITCH TO PROGRAM MODE
- * FOR DIRECT TRANSFER (SF = 3, 4).
- SA7 A3 CLEAR PP I/O BUFFER INTERLOCK
- SA6 A4
- PIO2 LX4 59-8-59+0
- SA1 A4+B1 GET DEVICE INDICATOR
- NG X4,PIO3 IF NOT INITIAL CALL
- LX0 8
- BX6 X0+X6
- SA6 A4+
- PIO3 SB6 /PROGRAM/PDT
- ZR X1,PIOP IF ECS REQUEST
- TSB6 (/BUFIO/PST,BUFIO,/PROGRAM/HNG)
- EQ PIOP SWITCH TO PROGRAM MODE
- * RESERVE PP I/O BUFFER (SF = 0, 1).
- PIO4 GT B5,B1,PIO2 IF DIRECT TRANSFER
- EQ B5,B1,/MONITOR/HNG IF SECTOR WRITE
- TX1 B0,ECSBL GET PP I/O BUFFER LENGTH
- SX7 A5
- BX6 X0+X6 SET PP I/O BUFFER RESERVED FLAG
- PIO5 SX1 X1-ECBL
- NG X1,PIOR IF NO PP BUFFER AVAILABLE
- TA3 X1,ECSB CHECK BUFFER INTERLOCK
- NZ X3,PIO5 IF BUFFER RESERVED
- LX1 -12
- BX6 X6+X1 SET PP I/O BUFFER INCREMENT
- SA7 A3 SET PP BUFFER INTERLOCK
- SA6 A4
- * PROCESS ECS PRU TRANSFER.
- PIO6 TA1 EQDE,EEN CHECK TRACK COUNT
- BX1 -X2*X1
- LX1 3
- SA1 X1+TDGL
- LX4 0-12-59+0+60
- SB6 A0 SAVE (A0)
- BX3 -X2*X4 SECTOR
- LX1 12
- BX6 -X2*X1 TRACK COUNT
- SA1 A4+B1
- TNZ X1,(/BUFIO/PST,BUFIO,/MONITOR/HNG) IF BUFFERED
- NG B5,PIOX IF RESERVE BUFFER SUBFUNCTION
- TB3 0,-TCNT
- SX0 X3+B3
- PL X0,PIO6.1 IF SECTOR .GT. LIMIT
- LX6 1
- LX4 -11
- LX7 X3
- BX0 -X2*X4 TRACK * 2
- LX7 6 SECTOR * 100B
- IX1 X0-X6
- PL X1,PIO6.1 IF TRACK .GT. LIMIT
- SA0 A3+1 LINKAGE WORD ADDRESS
- BX6 -X2*X4
- TLX0 9,TNSC TRACK * WORDS PER TRACK
- IX7 X7-X3 SECTOR * 77B
- TLX6 3,TNSC TRACK * SECTORS PER TRACK
- TX7 X7,TCNT
- IX0 X0+X6 TRACK * WORDS + LINKAGE WORDS
- SX1 -DSTE SET *DEVICE ERROR* STATUS
- IX0 X0+X3 HEADER ADDRESS = TRACK * WORDS + SECTOR
- SX2 A0
- LX2 30
- BX0 X2+X0
- EQ B5,B1,PIO7 IF WRITE SECTOR SUBFUNCTION
- RE 1 READ HEADER WORD
- PER PIOX3 PROCESS ECS PARITY ERROR
- SX1 PARE SET *PARITY ERROR* STATUS
- SA0 A0+B1 INCREMENT ADDRESSES
- IX0 X0+X7 TRACK*WORDS + SECTOR*100B + TCNT
- SX2 B1+
- LX2 30
- IX0 X0+X2
- RE 100B READ SECTOR OF DATA
- PER PIOX3 PROCESS ECS PARITY ERROR
- SA0 B6 RESTORE (A0)
- BX1 X1-X1 RETURN STATUS = NO ERROR
- EQ PIOX EXIT
- PIO6.1 SX1 -ADDE SET *ADDRESS ERROR* STATUS
- EQ PIOX RETURN ERROR STATUS
- PIO7 WE 1 WRITE HEADER WORD
- PER PIOX3 PROCESS ECS PARITY ERROR
- BX2 X5
- SX1 PARE SET *PARITY ERROR* STATUS
- LX2 59-37 RELEASE PP BUFFER IF FLUSH BIT SET
- SA0 A0+B1 INCREMENT ADDRESSES
- AX2 59
- IX0 X0+X7 DATA ADDRESS=TRACK*2020B+SECTOR*100B+20B
- BX1 X1-X2
- SX3 B1+
- LX3 30
- IX0 X0+X3
- WE 100B WRITE SECTOR OF DATA
- PER PIOX3 PROCESS ECS PARITY ERROR
- SA0 B6 RESTORE (A0)
- BX1 X2 RETURN STATUS = NO ERROR
- EQ PIOX EXIT
- PFFV VFD 6/4,6/7,6/4,6/3,6/5,30/0 FUNCTION FLAG VALIDATIONS
- PIOX SPACE 4,10
- ** PIOX - EXIT FROM *PIOM*.
- *
- * ENTRY (A5) = PP *OR* ADDRESS.
- * (A0) = CPU NUMBER, IF ENTRY AT *PIOX*, *PIOX1*,
- * OR *PIOX2* FROM MONITOR MODE.
- * (B6) = CPU NUMBER, IF ENTRY AT *PIOX3*.
- * (X0) = ADDRESS OF UNRECOVERED ECS PARITY ERROR,
- * IF ENTRY AT *PIOX3*.
- * (X1) = RETURN STATUS.
- * (X1) = COMPLEMENT OF RETURN STATUS,
- * IF PP BUFFER TO BE RELEASED.
- * (X5) = (OR), IF ENTRY AT *PIOX1*, *PIOX2*, OR *PIOX3*.
- * (MB+1) .LT. 0, IF PROGRAM MODE EXIT.
- PIOX3 MX2 30 RETURN ECS PARITY ERROR ADDRESS
- BX6 X2*X5
- BX0 -X2*X0
- BX6 X6+X0
- SA6 A5+
- SA0 B6+ RESTORE (A0)
- PIOX SA5 A5+
- MX2 -36
- LX1 -24
- BX5 -X2*X5
- PL X1,PIOX2 IF NO RELEASE OF PP BUFFER
- BX1 -X1
- PIOX1 SA4 A5+B1
- BX7 X7-X7
- MX2 12
- BX3 X2*X4 PP I/O BUFFER INCREMENT
- BX4 -X2*X4 CLEAR PP I/O BUFFER INCREMENT
- LX4 59-0
- PL X4,PIOX2 IF NO PP BUFFER ASSIGNED
- LX3 12
- MX2 -59
- BX6 -X2*X4 CLEAR BUFFER RESERVATION FLAG
- LX6 0-59
- TX3 X3,ECSB FWA PP BUFFER
- SA6 A4
- SA7 X3
- PIOX2 SX6 B1
- BX7 X5+X1
- SX3 A5+B1
- LX6 46-0
- + SA3 X3+B1 **** PERFORM IN ONE WORD ****
- BX6 X6*X3 **** PERFORM IN ONE WORD ****
- BX6 X7+X6 **** PERFORM IN ONE WORD ****
- SA6 A3 **** PERFORM IN ONE WORD ****
- NG X3,/PROGRAM/PRG1 IF EXIT FROM PROGRAM MODE
- EQ /MONITOR/PPR1 EXIT FROM MONITOR MODE
- PIOR SPACE 4,10
- ** PIOR - REISSUE *PIOM* REQUEST.
- *
- * ENTRY (A5) = PP *OR* ADDRESS.
- * (B5) = *PIOM* SUBFUNCTION - 1.
- * (MB+1) .LT. 0, IF EXIT FROM PROGRAM MODE.
- *
- * EXIT TO /ECS/PIOX1, IF PP BUFFER NOT TO BE RELEASED.
- * TO /ECS/PIOX2, IF PP BUFFER TO BE RELEASED.
- PIOR SA5 A5 SET BIT 59 OF *OR* FOR REISSUE
- MX1 1
- EQ B5,B1,PIOX2 IF WRITE PRU FUNCTION
- EQ PIOX1 RELEASE PP BUFFER
- PIOP SPACE 4,10
- ** PIOP - SWITCH TO PROGRAM MODE *PIOM*.
- *
- * ENTRY (A0) = CPU NUMBER.
- * (A5) = PP *OR* ADDRESS.
- * (B6) = PROGRAM MODE PROCESSOR ADDRESS.
- *
- * EXIT TO /PROGRAM/PMR.
- PIOP SX6 B6 SAVE PROGRAM MODE RETURN ADDRESS
- SA3 A5+2 SET PROGRAM MODE FLAG
- LX6 18
- MX1 1
- BX6 X6+X3
- SA5 A5
- BX6 X6+X1
- SA6 A3
- EQ /MONITOR/PMR SWITCH TO PROGRAM MODE
- TITLE ECS PROGRAM MODE ROUTINES.
- QUAL PROGRAM
- PDT SPACE 4,10
- ** PDT - *PIOM* ECS DIRECT TRANSFER (SF = 3, 4).
- *
- * ENTRY IN PROGRAM MODE ONLY.
- * REFER TO *PIP* EXIT CONDITIONS.
- *
- * EXIT TO /PROGRAM/HNG, IF ILLEGAL SECTOR OR A SHORT SECTOR
- * WAS ENCOUNTERED AND NOT READING TO EOR.
- * TO /ECS/PIOX, IF UNRECOVERED HARDWARE ERROR, ADDRESS
- * ERROR OR TRANSFER COMPLETE.
- PDT11 SX1 ADDE SET *ADDRESS ERROR* STATUS
- EQ /ECS/PIOX RETURN ERROR
- PDT SA5 A5 VALIDATE *OR* PARAMETERS
- SB7 X5
- TA4 EQDE,EEN CHECK TRACK COUNT
- MX0 -12
- BX4 -X0*X4
- LX4 3
- SA4 X4 + TDGL
- ERRNZ TDGL
- LX5 -18
- LX4 12
- BX0 -X0*X4 TRACK COUNT
- SX6 X5
- NG B7,HNG IF ILLEGAL ADDRESS
- LX0 1
- MX2 -12
- SA4 A5+B1 FETCH *MB* PARAMETERS
- NG X6,HNG IF ILLEGAL SECTOR COUNT / LWA+1
- LX4 -12
- BX3 -X2*X4 CURRENT SECTOR
- SB7 B1+B1
- LX4 -11
- SB3 X3
- BX4 -X2*X4 CURRENT TRACK * 2
- IX0 X0-X4
- TB6 TCNT
- NG X0,PDT11 IF TRACK .GT. LIMIT
- BX0 X4
- SX7 B5-B7
- GE B3,B6,PDT11 IF ILLEGAL SECTOR
- SA2 RWEI+X7 GET ECS TRANSFER INSTRUCTION
- TLX0 4-1,TNSC TRACK * SECTOR LIMIT
- TA0 TKLB,TCNT = *TKLW*
- TLX4 10-1,TNSC
- BX7 X2
- IX0 X0+X4 WORDS/TRACK + LINK WORDS
- LX5 59-38+18
- AX6 24-18
- SA7 PETA STORE READ / WRITE INSTRUCTION
- SX1 DSTE SET *DEVICE ERROR* STATUS
- SX7 B0+ CLEAR EOR READ INDICATOR
- SA7 PAS4
- EQ B5,B7,PDT1 IF READ REQUEST
- SB4 B6-B3 SECTOR COUNT TO END OF TRACK
- SB2 A0-B6 (B2) = *TKLB*
- SX2 A0+
- LX2 30
- BX0 X2+X0
- RE B6 PRESERVE LINKAGE WITHIN TRACK
- PER /ECS/PIOX PROCESS PARITY ERROR
- SB3 B0
- IX0 X0+X3
- SA0 B2+X3
- MX7 -24
- BX0 -X7*X0
- SX2 A0
- LX2 30
- BX0 X2+X0
- WE B4 TRANSFER LINKAGE WORDS THRU ECS
- PER /ECS/PIOX PROCESS PARITY ERROR
- ZR X3,PDT6 IF FILE ON TRACK BOUNDARY
- SB3 B6 SET LINKAGE BUFFER OFFSET
- SA0 A0+B6
- BX0 -X7*X0
- SX2 A0
- LX2 30
- BX0 X2+X0
- RE B4 ASSEMBLE LINKAGE BUFFER
- PER /ECS/PIOX PROCESS PARITY ERROR
- PDT1 PL X5,PDT6 IF NOT READ TO EOR
- MX6 59 (X6) = -1
- SB4 B6 SET TO READ LINKAGE
- BX2 X4
- SB2 60-7
- EQ PDT3 SEARCH FOR EOR
- PDT2 SB3 B0+ RESET LINKAGE INDEX
- LX1 42-59
- MX7 -11-4
- AX1 48-4
- PL X1,HNG IF BAD SECTOR LINKAGE
- BX2 -X7*X1
- SX0 X2+ TRACK * 20B
- SA6 A1
- TLX0 0,TNSC COMPUTE LINK WORDS PER TRACK
- TLX2 6,TNSC COMPUTE WORDS PER TRACK
- SX1 -DSTE SET *DEVICE ERROR* STATUS
- IX0 X0+X2 LINKAGE ADDRESS
- PDT3 MX5 -24
- BX0 -X5*X0
- SX5 A0+
- LX5 30
- BX0 X5+X0
- RE B4 READ LINKAGE
- PER /ECS/PIOX PROCESS PARITY ERROR
- PDT4 EQ B3,B6,PDT2 IF END OF TRACK
- TA1 B3+TKLB,TCNT CHECK SECTOR LINKAGE
- SB3 B3+B1 ADVANCE SECTOR NUMBER
- BX0 X1
- LX1 59-42
- SX6 X6+B1 ADVANCE SECTOR COUNT
- BX7 X7-X7
- AX0 48-0
- ZR X0,PDT4.1 IF EOF OR EOI TRACK
- NG X1,PDT4 IF NOT EOR
- AX7 X1,B2 SHORT SECTOR WORD COUNT
- PDT4.1 TLX2 36-10,-TNSC POSITION EOR TRACK
- SX5 B3-B1
- IX7 X2+X7
- LX5 18 POSITION EOR SECTOR
- BX7 X7+X5
- SA7 A2-B7 SAVE WORD COUNT + EOR TRACK AND SECTOR
- ERRNZ PAS4+2-RWEI CODE DEPENDS ON VALUE
- NE B3,B6,PDT5 IF NEXT SECTOR WITHIN TRACK
- LX1 42-59
- MX7 -11-4
- SB3 B0 SET NEXT SECTOR
- AX1 48-4
- BX2 -X7*X1 EXTRACT NEXT TRACK
- LX2 36-4
- PDT5 SX5 B3 SAVE FILE POSITION AFTER EOR
- AX2 36-12
- BX7 X2+X5
- SA7 A7+B1
- PDT6 SB2 X3 CURRENT SECTOR
- BX5 X6 SECTOR COUNT
- SX1 B1
- BX6 X6-X6
- ZR X3,PDT7 IF CURRENT POSITION ON TRACK BOUNDARY
- SX6 B6-B2 SECTOR COUNT FOR PASS 1
- IX2 X5-X6
- PL X2,PDT7 IF PASS 1 .GE. TOTAL REQUEST
- BX6 X5
- SX1 B0
- PDT7 IX2 X5-X6 SECTORS REMAINING AFTER PASS 1
- BX7 X2
- SA6 PAS1
- TLX7 3,-TNSC TRACK COUNT FOR PASS 2
- AX7 7
- IX1 X1+X7
- SA7 A6+B1
- TLX7 4,TNSC
- IX7 X2-X7 SECTOR COUNT FOR PASS 3
- TLX4 60-10,-TNSC
- BX2 X1+X7
- SA7 A6+B7
- NZ X2,PDT8 IF PASS 2 AND/OR PASS 3 SET
- SA7 A6 CLEAR PASS 1
- SA6 A6+B7 SET PASS 3 = PASS 1
- PDT8 TX1 A5-1,-FP
- SB4 MECB BLOCK TRANSFER SIZE
- LX1 PPXES-PPCES
- BX6 X5 SECTOR COUNT
- TA1 X1+ACPP,FPX GET CP/PCP ASSIGNMENT
- SA5 A5+
- MX2 -12
- AX1 24
- SA3 X1+FLSW GET RA AND FL OF CP/PCP
- BX1 -X2*X3 FL/100B
- LX3 -RSHF
- MX2 -RMSK
- BX3 -X2*X3 RA/100B
- LX1 6 FL
- BX7 X5 OUTPUT REGISTER
- LX3 6 RA
- SB2 X5 RELATIVE CM ADDRESS
- LX7 59-38
- BX2 X6
- SB6 X1 FL
- SA0 X3+B2 ABSOLUTE CM ADDRESS
- SX0 X5
- IX3 X3+X0
- SX0 X6+
- PL X7,PDT10 IF NOT READ TO EOR
- SA1 PAS4
- SX0 X1+
- ZR X0,PDT9 IF NO SHORT SECTOR
- SX2 X2+B1 ADVANCE SECTOR COUNT
- IX5 X5+X1 ADVANCE CM ADDRESS
- PDT9 AX7 59-38+18
- SB2 X7
- GT B2,B6,PET7 IF LWA+1 OF TRANSFER .GT. FL
- BX0 X0-X0
- ZR B2,PDT10 IF LWA+1 OF TRANSFER NOT SPECIFIED
- SB6 X7 CHANGE FL CHECK
- PDT10 LX6 6 WORD COUNT = SECTOR COUNT * 100B
- IX5 X5+X6 ADVANCE CM ADDRESS IN *OR*
- LX0 24
- SB2 X5
- GT B2,B6,PET7 IF LWA+1 OF TRANSFER .GT. FL
- IX7 X5-X0 DECREMENT SECTOR COUNT IN *OR*
- SA1 A5+B1
- NG B2,HNG IF ILLEGAL LWA+1 SPECIFICATION
- LX2 48
- SA7 A5
- MX5 12
- IX6 X1+X2 UPDATE SECTORS TRANSFERED IN *MB*
- BX6 X5*X6 CLEAR POSSIBLE OVERFLOW INTO *CHRV*
- BX2 -X5*X1 CLEAR OLD SECTOR COUNT
- BX6 X6+X2 MERGE NEW SECTOR COUNT
- SX5 B7+B7
- TLX5 0,TNSC
- SB6 X5 BLOCK COUNT
- ERRNZ 2000B/MECB-4 CODE DEPENDS ON VALUE
- SA6 A1+
- SX7 PET2 SET RETURN FROM READ/WRITE PROCESSOR
- SA7 PETB
- SA2 PAS2
- MX7 12
- SB2 X2 TRACK COUNT FOR PASS 2
- LX7 -36
- SA2 A2-B1
- BX5 X7*X6 EXTRACT CURRENT SECTOR
- AX5 12-6
- ZR X2,PET IF NO PASS 1
- SB2 B2+B1
- BX6 -X7*X6 CLEAR CURRENT SECTOR
- SB6 X2 SECTOR COUNT FOR PASS 1
- SB4 100B BLOCK TRANSFER SIZE
- SA6 A6
- * PROCESS ECS TRANSFER.
- PET ZR B2,PET3 IF END OF FULL TRACK TRANSFERS
- TX0 X5,TCNT
- TLX4 4,TNSC TRACK * LINKAGE WORDS PER TRACK
- IX0 X0+X4
- LX4 6 TRACK * WORDS PER TRACK
- IX0 X0+X4
- PET1 MX7 -24
- BX0 -X7*X0
- BX7 X3
- LX7 30
- BX0 X0+X7
- SX1 PARE SET *PARITY ERROR* STATUS
- SB6 B6-B1 DECREMENT BLOCK COUNT
- PETA RE B4 READ ECS BLOCK
- * WE B4 (WRITE ECS BLOCK)
- PER /ECS/PIOX PROCESS PARITY ERROR
- SX7 B4
- IX3 X7+X3 ADVANCE CM ADDRESS
- SA0 X3
- IX0 X0+X7 ADVANCE ECS ADDRESS
- NZ B6,PET1 IF NOT END OF TRANSFER
- SA1 PETB
- BX5 X5-X5 SET NEXT SECTOR = 0
- SB4 X1 RETURN ADDRESS
- JP B4 EXIT TO POST PROCESSOR
- * SET NEXT TRACK.
- PET2 TLX4 60-10,-TNSC REPOSITION TRACK NUMBER
- MX6 -2
- BX7 -X6*X4 TRT BYTE INDEX
- AX2 B7,X4 TRT WORD INDEX
- SB4 MECB WORD COUNT PER ECS ACCESS
- TA4 TRLL,EMS CALCULATE TRT ADDRESS
- IX4 X2+X4
- SA2 X4 READ TRT WORD
- SB2 B2-B1 DECREMENT TRACK COUNT
- LX7 2 BYTE INDEX * 4
- LX4 B1,X7 BYTE INDEX * 8
- IX4 X7+X4 BYTE INDEX * 12
- SB6 X4 SET SHIFT COUNT
- MX6 -11
- LX4 B6,X2 POSITION NEXT TRACK
- AX4 48
- PL X4,HNG IF NO NEXT TRACK
- SX1 B7+B7
- TLX1 0,TNSC
- SB6 X1 BLOCK COUNT
- ERRNZ 2000B/MECB-4 CODE DEPENDS ON VALUE
- BX4 -X6*X4 REMOVE TRACK BIT
- EQ B5,B7,PET IF READ REQUEST
- MX6 1
- LX4 48
- SA0 B3+TKLB ADDRESS OF LINKAGE BUFFER
- BX1 X6+X4
- LX6 1-18 WORD COUNT = 100B
- SX7 2020B
- TLX7 0,TNSC
- IX0 X0-X7 ECS ADDRESS FOR SECTOR LINKAGE
- BX6 X1+X6
- R= X1,ERRS RETURN STATUS = UNRECOVERABLE ERROR
- TA6 A0-1,TCNT
- MX7 -24
- BX0 -X7*X0
- SX7 A0
- SB7 B4
- LX7 30
- BX0 X0+X7
- TB4 0,TCNT
- WE B4
- PER /ECS/PIOX PROCESS PARITY ERROR
- SB3 B0+
- AX4 48 REPOSITION TRACK NUMBER
- SA0 X3 RESTORE CM ADDRESS
- SB4 B7
- SB7 B1+B1
- PET3 NZ B2,PET IF MORE TRACKS
- MX6 12
- SA2 A5+B1 FETCH *MB* PARAMETERS
- LX6 -24
- SX7 X4+4000B
- BX6 -X6*X2 CLEAR TRACK
- SB4 100B
- SA2 PAS3 CHECK PASS 3
- SB6 X2+ PASS 3 SECTOR COUNT
- LX7 24
- BX6 X6+X7 SET CURRENT TRACK
- LX2 12
- IX6 X6+X2 UPDATE CURRENT SECTOR
- SX7 PET6 SET RETURN FROM PASS 3
- SA7 PETB
- SA6 A5+1
- PET4 SB2 B1
- NZ B6,PET IF PASS 3 PRESENT
- SA1 A2+B1 FETCH PASS 4
- ZR X1,/ECS/PIOX IF NOT READ TO EOR
- BX7 X7-X7
- SA7 A1 CLEAR PASS 4 INDICATOR
- SB4 X1 SET WORD COUNT
- AX1 18
- BX4 X1
- SB6 B1 SET BLOCK COUNT FOR FINAL READ
- SX5 X1 SECTOR NUMBER FOR FINAL READ
- MX7 24
- SA1 A1+B1 FETCH FILE POSITION AFTER EOR
- SX2 B1
- LX7 -24
- BX6 -X7*X6 REMOVE CURRENT TRACK AND SECTOR
- LX2 35
- LX1 12
- BX2 X2+X1 ADD TRACK BIT
- LX5 6 SECTOR * 100B
- BX6 X6+X2 SET FILE POSITION AFTER EOR
- AX4 18 TRACK NUMBER FOR FINAL READ
- SX7 PET4 SET RETURN FROM FINAL READ
- SA7 PETB
- SA6 A6 STORE *MB* PARAMETERS
- NZ B4,PET IF NOT EMPTY SECTOR
- BX1 X1-X1 RETURN STATUS = NO ERROR
- JP /ECS/PIOX EXIT - FUNCTION COMPLETE
- PET6 EQ B5,B7,PET4 IF READ REQUEST
- LX6 -12
- MX2 -12
- BX0 X4
- AX4 10-4
- BX2 -X2*X6 EXTRACT CURRENT SECTOR
- IX0 X0+X4 ECS ADDRESS OF LINKAGE
- SX2 X2+B3
- BX7 X7-X7
- SA3 X2+TKLB SAVE LINKAGE WORD
- SA0 B3+TKLB
- SX1 DSTE SET *DEVICE ERROR* STATUS
- SA7 A3+ SET EOI IN LINKAGE BLOCK
- SX7 A0
- LX7 30
- BX0 X7+X0
- LX6 X3
- TB4 0,TCNT
- WE B4
- PER /ECS/PIOX PROCESS PARITY ERROR
- BX1 X1-X1 RETURN STATUS = NO ERROR
- SA6 A3 RESTORE LINKAGE WORD
- JP /ECS/PIOX EXIT - FUNCTION COMPLETE
- PET7 SA5 A5 CHECK REQUEST
- R= X1,IFLS SET STATUS = INSUFFICIENT FL FOR LOAD
- LX5 59-38
- NG X5,/ECS/PIOX IF READ TO EOR
- JP HNG HANG PP
- PETB BSS 1 RETURN ADDRESS
- PAS1 CON 0 PASS 1 SECTOR COUNT
- PAS2 CON 0 PASS 2 TRACK COUNT
- PAS3 CON 0 PASS 3 SECTOR COUNT
- PAS4 CON 0,0 PASS 4 WORD COUNT (READ TO EOR ONLY)
- RWEI RE B4
- PER /ECS/PIOX PROCESS PARITY ERROR
- + WE B4
- PER /ECS/PIOX PROCESS PARITY ERROR
- SPACE 4,10
- * TRACK LINKAGE BUFFERS.
- *
- * SPACE IS ALLOCATED FOR A MAXIMUM TRACK SIZE (200B SECTORS).
- * *CPUMLD* WILL REDUCE THE BLOCK *LWA* FOR SMALLER TRACK SIZES.
- * *TKLW* IS NOW REFERENCED BY *TKLB+TCNT*.
- TKLB BSS 0
- .A SET 1
- .B DUP 200B
- VFD 12/.A,12/100B,36/0
- .A SET .A+1
- .B ENDD
- BSS 200B *TLKW*
- QUAL ECS
- ENDBLK
- BLOCK EEC,(EXTERNAL ECS PROCESSING ROUTINES.),ECS
- SPACE 4,10
- ** ASSEMBLY CONSTANTS.
- FRWC EQU 1 FLAG REGISTER FUNCTION WORD COUNT
- CFR SPACE 4
- ** CFR - CLEAR FLAG REGISTER BIT.
- *
- * ENTRY (B3) = CPU NUMBER TO BE RESTORED TO (A0).
- * (B4) = BIT NUMBER TO CLEAR.
- * (B6) = EXIT ADDRESS.
- *
- * EXIT (A0) = CPU NUMBER = (B3).
- *
- * USES X - 0, 2.
- * A - 0.
- CFR SA0 ZERL SET WORD TO WRITE TO ECS
- TX0 B4+ETLT*100B+FRET,ECLT
- TX0 X0,TCNT
- SX2 A0+
- LX2 30
- BX0 X0+X2
- WE 1 CLEAR WHO HAS BIT INTERLOCKED
- RJ ECH HANG ON WRITE ERROR
- SX2 B1+
- TSX0 (403B,ESM,7B)
- LX0 21
- LX2 X2,B4 POSITION FLAG BIT
- BX0 X0+X2
- RE FRWC CLEAR FLAG REGISTER BIT
- RJ ECH HANG ON HALF EXIT
- SA0 B3 RESTORE CPU NUMBER
- JP B6 RETURN
- SFR SPACE 4
- ** SFR - SET FLAG REGISTER BIT.
- *
- * ENTRY (B3) = CPU NUMBER TO BE RESTORED TO (A0).
- * (B4) = BIT NUMBER TO SET.
- * (B6) = EXIT ADDRESS.
- *
- * EXIT (X7) = 12/0,12/7777B,36/0 IF BIT ALREADY SET.
- * (X7) = 0 IF BIT NOT PREVIOUSLY SET.
- * (A0) = CPU NUMBER = (B3).
- *
- * USES X - 0, 2, 7.
- * A - 0.
- SFR SX2 B1
- TSX0 (400B,ESM,4B)
- LX0 21 SET FLAG REGISTER FUNCTION
- LX2 X2,B4 POSITION BIT TO SET
- BX0 X0+X2
- SA0 MMFL ENSURE (A0) .LT. FL FOR FLAG OPERATION
- SX2 A0
- MX7 12
- LX2 30
- LX7 -12
- RE FRWC TEST AND SET FLAG BIT
- EQ SFR1 IF BIT PREVIOUSLY SET
- TX0 B4+ETLT*100B+FRET,ECLT
- TX0 X0,TCNT
- SX7 B0
- BX0 X2+X0
- WE 1 WRITE INDICATION OF WHICH MACHINE HAS INTER
- RJ ECH HANG ON WRITE ERROR
- SFR1 SA0 B3 RESTORE CPU NUMBER
- JP B6 RETURN
- TITLE EXTERNAL ECS PARITY ERROR PROCESSING.
- SPACE 4,10
- ** MC - INPUT REGISTER FOR ECS PARITY ERROR PROCESSING ROUTINE.
- MC VFD 18/0L1MC
- TVFD 6/,SC
- TVFD 12/,EEM
- VFD 24/0
- ECH SPACE 4,10
- ** ECH - EXTENDED MEMORY ERROR HANG.
- *
- * ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
- * INSTRUCTION IN THE CASE OF A FLAG REGISTER CLEAR FUNCTION.
- * IN THE CASE OF AN WRITE ERROR REPORTING IS DONE BY *RPE*
- * WHICH THEN EXITS TO *ECH1* IF THE ERROR IS UNRECOVERED.
- ECH PS ENTRY
- ECH1 SX1 ECHM SET ERROR MESSAGE ADDRESS
- SB5 ECH2 SET *MSC* RETURN
- EQ /MONITOR/MSC SEND MESSAGE TO SYSTEM CONTROL POINT
- ECH2 EQ * HANG CPUMTR
- PER SPACE 4
- ** PER - PROCESS ECS PARITY ERROR. (MONITOR MODE)
- *
- * ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
- * INSTRUCTION.
- *
- * EXIT RETURNS TO CALLER IF ERROR RECOVERED ON RETRY.
- * (X0) = ADDRESS OF ECS PARITY ERROR, IF UNRECOVERED.
- *
- * USES X - NONE.
- * B - NONE.
- * A - 1, 2, 6, 7.
- *
- * CALLS RPE.
- PERX SB7 X1+ RESTORE (B7)
- SA1 A1+1 RESTORE (X1)
- PER PS 0 ENTRY/EXIT
- SA7 PERA SAVE REGISTERS
- BX7 X5
- SX5 B7
- SB7 PERX *RPE* RETURN ADDRESS
- EQ RPE
- PERA BSS 9 REGISTER SAVE BUFFER
- RPE SPACE 4
- ** RPE - RECOVER AND REPORT ECS PARITY ERROR.
- * THE WORD COUNT FOR ECS READ/WRITES MUST BE EXPRESSED AS
- * A CONSTANT OR AS A CONSTANT + (B4).
- *
- * ENTRY (X5) = VALUE TO BE RESTORED TO B7.
- * (X7) = VALUE TO BE RESTORED TO X5.
- * (B7) = EXIT ADDRESS.
- * (B7)+1 = WORD RETURN JUMPED TO FROM ECS INSTRUCTION.
- * (A7) = FIRST WORD ADDRESS OF REGISTER SAVE BUFFER.
- * (X0) = ADDRESS OF ECS PARITY ERROR, IF UNRECOVERED.
- *
- * EXIT (X1) = VALUE TO BE RESTORED TO B7.
- RPE SA6 A7+B1 SAVE REGISTERS - (X6)
- LX6 X4
- SA7 A6+B1 SAVE (X5)
- SA6 A7+B1 SAVE (X4)
- BX7 X3
- LX6 X2
- SA7 A6+B1 SAVE (X3)
- SA6 A7+B1 SAVE (X2)
- SX7 A0
- MX2 -18
- SX3 B3
- BX7 -X2*X7
- SX4 B4
- BX3 -X2*X3
- LX7 18
- BX4 -X2*X4
- BX7 X3+X7
- SX3 B6
- BX6 -X2*X5
- LX7 18
- BX3 -X2*X3
- LX6 18
- BX7 X7+X4
- SX4 B5
- SA7 A6+B1 SAVE (A0), (B3), (B4)
- BX4 -X2*X4
- BX6 X6+X3
- LX6 18
- BX6 X6+X4
- SA6 A7+B1 SAVE (B7), (B6), (B5)
- BX7 X1
- SA7 A6+B1 SAVE (X1)
- SA1 B7+B1 FIND ECS INSTRUCTION
- SB6 PERX
- AX1 30
- SA2 X1-1 READ INSTRUCTION
- AX2 30
- SX3 X2 SET CONSTANT PORTION OF WORD COUNT
- LX2 59-20 POSITION REGISTER PORTION OF WORD COUNT
- PL X2,RPE1 IF (B4) NOT USED IN WORD COUNT
- SX3 X3+B4
- RPE1 SA1 MC
- BX1 X1+X3 MERGE WORD COUNT IN CALL
- MX6 -3
- BX6 -X6*X2 EXTRACT READ/WRITE PORTION OF INSTRUCTION
- LX6 18
- BX5 X1+X6 *1MC* CALL
- BX1 X5
- BX6 X5
- SA6 RPEA SAVE *1MC* CALL
- SB3 RPE2 *APS* RETURN ADDRESS
- NE B6,B7,/PROGRAM/APS IF IN PROGRAM MODE
- SX7 B7 SAVE (B7)
- SB3 RPE1.1 *CAL* *ACB* RETURN ADDRESS
- BX1 X1-X1 PRESET NO BUFFER AVAILABLE
- SA7 /MONITOR/T1
- SB6 /MONITOR/ACB *CAL* RETURN ADDRESS
- TB7 SCA SET SYSTEM CONTROL POINT ADDRESS
- EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
- RPE1.1 ZR X1,RPE1.3 IF NO BUFFER AVAILABLE
- SB3 RPE1.2 *APQ* RETURN ADDRESS
- BX7 X1
- BX6 X5 *1MC* CALL
- SA7 /MONITOR/APQA PARAMETER WORD
- SB4 B0 SET LIBRARY SEARCH NEEDED
- EQ /MONITOR/APQ ASSIGN PP
- RPE1.2 SA1 /MONITOR/APQA GET BUFFER ADDRESS
- RPE1.3 SA2 /MONITOR/T1 RESTORE (B7)
- SB7 X2+ RESTORE (B7)
- RPE2 SA2 RPEA *1MC* PP CALL
- SB5 X2 WORD COUNT
- LX2 -2
- BX5 X0
- SB4 X2 READ/WRITE FLAG
- SB3 B0+ SET NO ERRORS REPORTED
- ZR X1,RPE6 IF NO BUFFER ASSIGNED
- SX6 B0+ INITIALIZE BUFFER
- SA6 X1+4
- SA6 X1+7
- SA6 X1+1
- * RETRY WITH SINGLE WORD TRANSFERS.
- RPE6 LX0 30 READ DATA
- ERX2 X0
- SX3 501B SET UNRECOVERED WITH GOOD DATA PRESENT
- LX0 30
- BX6 X2 POSSIBLE BAD DATA (READ OPERATION)
- * GOOD DATA (WRITE OPERATION)
- NG B4,RPE8 IF WRITE
- SX3 601B SET UNRECOVERED WITH BAD DATA PRESENT
- RE 1
- EQ RPE7 IF ERROR
- LX0 30
- ERX2 X0 VERIFY DATA
- LX0 30
- BX7 X2-X6
- SX3 301B RECOVERED WITH GOOD AND BAD DATA
- CX7 X7
- ZR X7,RPE9 IF DATA VERIFIES
- RPE7 GT B3,B1,RPE9 IF TWO ERRORS REPORTED
- LX3 -18
- SB3 B3+B1 INCREMENT ERRORS REPORTED
- ZR X1,RPE9 IF NO BUFFER ASSIGNED
- LX3 -18
- MX4 -24
- LX0 30
- BX7 -X4*X0 CM ADDRESS OF TRANSFER
- LX0 30
- BX4 -X4*X0 ECS ADDRESS OF TRANSFER
- LX7 24
- BX3 X3+X4
- BX7 X7+X3
- SA7 A6 STATUS WORD
- SA6 A7+B1 BAD DATA
- BX7 X2
- BX6 X6-X6
- SA7 A6+B1 GOOD DATA
- SA6 A7+B1
- EQ RPE9 CONTINUE ONE-WORD TRANSFER
- RPE8 WE 1
- EQ RPE7
- RPE9 SA0 A0+B1 INCREMENT ADDRESSES
- SX3 B1
- SB5 B5-B1
- IX0 X0+X3
- LX3 30
- IX0 X0+X3
- GT B5,B0,RPE6 IF MORE WORDS TO CHECK
- ZR X1,RPE9.2 IF NO BUFFER ASSIGNED
- NZ B3,RPE9.1 IF NOT ALL ERRORS RECOVERED
- MX0 -24
- BX7 -X0*X5 ECS ADDRESS
- SX3 B1 RECOVERED WITH NO GOOD OR BAD DATA
- LX5 -30
- LX3 -18
- BX0 -X0*X5 CM ADDRESS
- BX6 X3+X7
- LX0 24
- LX5 30
- BX6 X6+X0
- SA6 A6+ STATUS WORD
- RPE9.1 SA1 X1 SET BUFFER FULL FLAG
- MX6 1
- BX6 X1+X6
- SA6 A1
- RPE9.2 ZR B3,RPE12 IF ERROR RECOVERED
- * SET UNRECOVERED ERROR EXIT ADDRESS.
- SA1 TPER-1
- MX4 18
- SA2 B7+1
- LX4 -12
- SB5 RPE12 *MSC* RETURN ADDRESS
- RPE10 SA1 A1+B1
- BX6 X1-X2
- BX7 X4*X6
- LX1 30
- NZ X7,RPE10 IF EXIT ADDRESS NOT FOUND
- BX7 X6-X1
- SA7 A2 STORE JUMP TO EXIT ADDRESS
- SX1 ECEM
- JP /MONITOR/MSC SET *EXTENDED MEMORY ERROR.* MESSAGE
- * RESTORE REGISTERS.
- RPE12 SA1 B7+4
- SA2 A1+B1
- BX0 X5 RESTORE (X0)
- BX7 X1 RESTORE (X7)
- LX6 X2 RESTORE (X6)
- SA1 A2+B1 RESTORE (X5)
- SA2 A1+B1 RESTORE (X4)
- BX5 X1
- SA1 A2+B1 RESTORE (X3)
- LX4 X2
- BX3 X1
- SA2 A1+B1 RESTORE (X2)
- SA1 A2+B1
- SB4 X1 RESTORE (B4)
- AX1 18
- SB3 X1 RESTORE (B3)
- AX1 18
- SA0 X1 RESTORE (A0)
- SA1 A1+B1
- SB5 X1 RESTORE (B5)
- AX1 18
- SB6 X1 RESTORE (B6)
- AX1 18
- JP B7
- RPEA BSS 1 *1MC* PP CALL WORD
- ECHM CON 10H HUNG -
- ECEM DATA C* EXTENDED MEMORY ERROR.*
- RSE SPACE 4,10
- ** RSE - REPORT STORAGE MOVE EXTENDED MEMORY ERROR.
- *
- * ENTRY (A0) = CM ADDRESS.
- * (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
- * (X1) = WORD COUNT.
- RSE PS ENTRY/EXIT
- SA6 RSEA SAVE (X6)
- BX6 X0
- SA6 A6+B1 SAVE (X0)
- BX6 X2
- SA6 A6+B1 SAVE (X2)
- BX6 X3
- SA6 A6+B1 SAVE (X3)
- BX6 X4
- SA6 A6+B1 SAVE (X4)
- BX6 X5
- SA6 A6+B1 SAVE (X5)
- SX6 A0+
- SA6 A6+1 SAVE (A0)
- BX5 X1 WORD COUNT
- SA1 SMRL
- LX1 59-37
- NG X1,RSE5 IF PREVIOUS ERROR
- SB3 RSE1 *ACB* RETURN ADDRESS
- EQ /MONITOR/ACB ASSIGN COMMUNICATION BUFFER
- RSE1 ZR X1,RSE5 IF NO BUFFER ASSIGNED
- SB4 X5
- LX5 24
- BX6 X5+X1
- SA6 RSEB DATA FOR *1MC* CALL
- SX6 B1
- SA2 SMRL SET EXTENDED MEMORY ERROR DURING MOVE
- LX6 37
- BX6 X6+X2
- SA6 A2
- SB3 B0 INITIALIZE NO ERRORS
- BX6 X6-X6
- SA6 X1+B1
- RSE2 SX3 601B UNRECOVERED WITH BAD DATA
- LX0 30
- ERX2 X0 READ BAD DATA
- LX0 30
- RE 1
- EQ RSE6 IF ERROR
- LX0 30
- ERX4 X0 READ GOOD DATA
- LX0 30
- SX3 301B RECOVERED WITH GOOD AND BAD DATA
- BX5 X4-X2
- CX5 X5
- NZ X5,RSE6 IF COMPARE ERROR
- RSE3 SX3 B1
- IX0 X0+X3 INCREMENT ECS ADDRESS
- LX0 30
- IX0 X0+X3 INCREMENT CM ADDRESS
- SA0 X0+
- LX0 30
- SB4 B4-B1
- NZ B4,RSE2 IF MORE WORDS TO CHECK
- NZ B3,RSE4 IF ERRORS REPORTED
- SA2 RSEA+1 (X0)
- MX0 -24
- BX5 -X0*X2 ECS ADDRESS
- SX3 B1 RECOVERED - NO GOOD OR BAD DATA
- LX2 -30
- LX3 -18
- BX0 -X0*X2 CM ADDRESS
- BX6 X3+X5
- LX0 24
- BX6 X6+X0
- SA6 A6 SET STATUS WORD IN BUFFER
- RSE4 SA1 X1 SET BUFFER COMPLETE
- MX6 1
- BX6 X6+X1
- SA6 A1
- RSE5 SA1 RSEA RESTORE REGISTERS
- BX6 X1 RESTORE (X6)
- SA1 A1+B1
- BX0 X1 RESTORE (X0)
- SA2 A1+B1 RESTORE (X2)
- SA3 A2+B1 RESTORE (X3)
- SA4 A3+B1 RESTORE (X4)
- SA1 A4+B1
- BX5 X1 RESTORE (X5)
- SA1 A1+B1
- SA0 X1 RESTORE (A0)
- EQ RSE RETURN
- RSE6 GT B3,B1,RSE3 IF TWO ERRORS REPORTED
- SB3 B3+B1
- MX6 -24
- BX7 -X6*X0 ECS ADDRESS
- LX0 30
- BX6 -X6*X0 CM ADDRESS
- LX0 30
- LX3 -18
- LX6 24
- BX7 X7+X3
- BX6 X6+X7
- SA6 A6 STATUS WORD
- BX6 X2 BAD DATA
- BX7 X4 GOOD DATA
- SA6 A6+B1
- SA7 A6+B1
- BX6 X6-X6
- SA6 A7+B1
- EQ RSE3 PROCESS NEXT WORD
- RSEA BSS 7 REGISTER SAVE AREA
- RSEB BSS 1 *1MC* CALL DATA
- TSM SPACE 4,10
- ** TSM - EXTENSION FOR EXTERNAL ECS PARITY ERROR PROCESSING
- * DURING STORAGE MOVE.
- *
- * EXIT (X4) = RESTORED TO (SMRL) SHIFTED IF ENTRY AT *TSM4*.
- * TO */MONITOR/BNJ1* IF ENTRY AT *TSM8*.
- * TO */MONITOR/TSM1* IF ENTRY AT *TSM4*.
- *
- * USES X - 1, 2, 4, 6, 7.
- * A - 1, 2, 4, 6, 7.
- * B - 3, 4, 6.
- *
- * CALLS /MONITOR/APQ,/MONITOR/CAL.
- TSM4 SA2 RSEB GET ERROR DATA
- SA1 MC
- SB4 B0 SET LIBRARY SEARCH NEEDED
- BX7 X2
- SA7 /MONITOR/APQA PARAMETER WORD (BUFFER ADDRESS)
- AX2 24
- BX6 X1+X2
- SB6 TSM5 *CAL* RETURN ADDRESS - NO LIMIT
- SB3 TSM6 *CAL* RETURN ADDRESS - IF LIMIT
- EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
- TSM5 SB3 TSM7 *APQ* RETURN ADDRESS
- EQ /MONITOR/APQ ASSIGN PP
- TSM6 SA1 /MONITOR/APQA CLEAR BUFFER INTERLOCK
- BX6 X6-X6
- SA6 X1
- TSM7 SA4 SMRL RESTORE (X4)
- NO
- LX4 59-37
- EQ /MONITOR/TSM2 RE-ENTER MAIN PROCESSING
- * ERROR OCCURED DURING STORAGE MOVE OF USER ECS.
- * JOB MUST NOT BE RESTARTED, AND *MTR* WILL SET AN
- * ERROR FLAG ON THE JOB AND ABORT IT.
- TSM8 SX6 B1 SET XM ERROR RESPONSE
- LX6 36
- SA6 SMRL SET RESPONSE
- EQ /MONITOR/BNJ1 BEGIN NEW JOB
- TITLE EXTERNAL ECS PROGRAM MODE ROUTINES.
- QUAL PROGRAM
- MSE SPACE 4
- ** MSE - MOVE STORAGE THROUGH ECS.
- *
- * ENTRY (B7) = CP/PCP ADDRESS.
- *
- * EXIT TO *MST2* TO UPDATE REFERENCE ADDRESS.
- *
- * USES X - 0, 1, 3, 4, 5, 6, 7.
- * B - 2, 3, 4, 5.
- * A - 1, 5, 6, 7.
- MSE TA1 EEN CHECK ECS STATUS
- SB4 BTRI
- LX1 59-49
- NO
- NG X1,MST IF EXTENDED MEMORY OFF OR DOWN
- SB6 MSE1 SET *SFR* RETURN
- TNO /ECS/SFR,MMF SET *BTRI* INTERLOCK
- MSE1 NZ X7,MST IF UNABLE TO INTERLOCK FLAG REGISTER
- SA5 SMIN
- SA2 B7+FLSW GET FL STATUS WORD
- MX1 -12
- BX4 -X1*X2
- LX5 6
- LX2 -12
- NO
- LX4 6 FL
- BX3 -X1*X2
- LX2 12+12
- LX3 6 RA
- BX2 -X1*X2
- LX2 6 NFL
- SB5 X5+ SET MOVE INCREMENT
- IX3 X3-X2 SUBTRACT NFL SIZE FROM RA
- TX0 SMLT*100B,ECLT
- TX0 X0,TCNT
- IX4 X4+X2 ADD NFL SIZE TO FIELD LENGTH
- MX6 30
- SB4 X4
- LX5 30
- SB6 30
- SX2 100B
- NG X5,MSE3 IF DOWNWARD MOVE
- IX3 X3+X4
- IX3 X3-X2
- BX2 -X2
- SA0 X3
- LX4 X3,B6
- BX0 X4+X0
- * MOVE 100B WORDS THROUGH ECS.
- MSE2 WE 100B WRITE 100B WORDS
- EQ MSE4 IF EXTENDED MEMORY ERROR
- SA0 A0+B5 SET ADDRESS PLUS INCREMENT
- IX0 X0+X5
- RE 100B
- EQ MSE4 IF EXTENDED MEMORY ERROR
- IX3 X3+X2
- SB4 B4-100B DECREMENT WORD COUNT
- MSE3 LX4 X3,B6
- BX0 -X6*X0
- BX0 X4+X0
- SA0 X3
- NZ B4,MSE2 IF NOT END OF MOVE
- SB4 BTRI SET FLAG BIT TO CLEAR
- SB6 MST2 SET *CFR* RETURN
- TEQ (/ECS/CFR,MMF,/PROGRAM/MST2)
- * COMPLETE MOVE WITHOUT ECS.
- MSE4 SX4 B1+
- LX5 30 MOVE DIFFERENTIAL
- IX1 X3-X4
- SX6 MST DISABLE STORAGE MOVE THROUGH ECS
- SA6 TMNR+MSTF
- NG X5,MSE6 IF DOWNWARD MOVE
- BX4 -X4
- IX1 X1-X2
- MSE6 IX1 X1+X4
- ERX2 X1
- SB4 B4-B1
- IX7 X1+X5
- BX6 X2
- EWX6 X7
- NZ B4,MSE6 IF MOVE NOT COMPLETE
- SX1 100B WORD COUNT
- RJ /ECS/RSE REPORT STORAGE MOVE EXTENDED MEMORY ERROR
- SB5 MST2 *MSC* RETURN ADDRESS
- SX1 MSEA * EXTENDED MEMORY ERROR - STORAGE MOVE.*
- EQ /MONITOR/MSC ISSUE ERROR MESSAGE
- MSEA DATA C* EXTENDED MEMORY ERROR - STORAGE MOVE.*
- PER SPACE 4
- ** PER - PROCESS ECS PARITY ERROR. (PROGRAM MODE)
- *
- * ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
- * INSTRUCTION.
- *
- * EXIT RETURNS TO CALLER IF ERROR RECOVERED ON RETRY.
- *
- * USES X - NONE.
- * B - NONE.
- * A - 1, 2, 6, 7.
- *
- * CALLS RPE.
- PERX SB7 X1+ RESTORE (B7)
- SA1 A1+1 RESTORE (X1)
- PER PS 0 ENTRY/EXIT
- SA7 PERA SAVE REGISTERS
- BX7 X5
- SX5 B7
- SB7 PERX *RPE* RETURN ADDRESS
- EQ /ECS/RPE
- PERA BSS 9 REGISTER SAVE BUFFER
- TITLE ECS PARITY ERROR PROCESSING PARAMETERS.
- QUAL ECS
- TPER SPACE 4
- ** TPER - TABLE OF PROCESSORS FOR UNRECOVERED ERRORS.
- * ENTRY 1 WORD.
- *
- *T 12/,18/ ADD,12/,18/ EXIT
- * ADD ADDRESS + 1 OF ECS INSTRUCTION.
- * EXIT UNRECOVERED ERROR EXIT ADDRESS.
- TPER BSS 0
- TPER HERE
- CON 0
- ENDBLK
- BLOCK SUE,(SIMULTANEOUS UEM/ESM.)
- SPACE 4,10
- CME$ EQU 1 DEFINE CME INSTRUCTION BLOCK
- RUM SPACE 4,10
- ** RUM - READ USER ECS DATA FROM UEM TO CM.
- *
- * ENTRY AT *RUM* IF PROGRAM MODE.
- * AT *RUM1* IF MONITOR MODE.
- * (B4) = WORD COUNT TO TRANSFER.
- * (B6) = RETURN ADDRESS FOR *RUE* MACRO, OR
- * COMPLEMENT OF RETURN ADDRESS FOR *WUE* MACRO.
- * (X0) = 30/ ABSOLUTE CM ADDRESS, 30/ UEM ADDRESS.
- *
- * EXIT X0, X1, X2, X3, X4, X6, X7, B4, B5, B6 RESTORED.
- *
- * USES A - 2, 3, 6, 7.
- * B - 4, 5, 6.
- * X - 0, 1, 2, 3, 4, 6, 7.
- *
- * CALLS /CME/PSM.
- RUM SA7 PMRG+4 SAVE PROGRAM MODE REGISTERS
- EQ RUM2 SAVE REGISTERS
- RUM1 SA7 MMRG+4 SAVE MONITOR MODE REGISTERS
- * SAVE X0, X1, X4, X6, X7, B4, B5, B6, X2, X3
- * IN PROGRAM OR MONITOR MODE BUFFER.
- RUM2 SA6 A7-B1
- SX7 B4
- BX6 X4
- SA7 A7+B1
- SA6 A6-B1
- SX7 B5
- LX6 X1
- SA7 A7+B1
- MX4 -12
- SX7 B6
- SA7 A7+B1
- SA6 A6-B1
- BX7 X2
- SA2 UEML GET UEM BASE ADDRESS
- BX6 X0
- LX2 12
- SA7 A7+B1
- LX7 X3
- BX2 -X4*X2
- SA6 A6-B1
- LX2 9
- SA7 A7+B1
- IX0 X0+X2 ABSOLUTIZE UEM ADDRESS
- PL B6,RUM3 IF TRANSFER DATA FROM UEM TO CM
- LX0 30 TRANSFER DATA FROM CM TO UEM
- SB6 -B6
- SX7 B6+ SAVE RETURN ADDRESS
- SA7 A7-2
- RUM3 MX2 30
- BX1 X2*X0 ADDRESS TO TRANSFER TO
- SB6 RUM7 SET RETURN ADDRESS
- BX0 -X2*X0 ADDRESS TO TRANSFER FROM
- SB5 RUM4 SET RETURN ADDRESS
- LX1 30
- IX1 X0-X1
- EQ /CME/PSM PRESET TRANSFER
- * TRANSFER 10B WORD BLOCKS THROUGH REGISTERS.
- RUM4 ERX2 X0
- IX0 X0+X4
- ERX3 X0
- IX0 X0+X4
- ERX6 X0
- IX0 X0+X4
- ERX7 X0
- IX0 X0+X4
- EQ B4,B1,RUM6 IF ONLY ONE BLOCK TO TRANSFER
- RUM5 EWX2 X1
- IX1 X1+X4
- ERX2 X0
- IX0 X0+X4
- SB4 B4-1
- EWX3 X1
- IX1 X1+X4
- ERX3 X0
- IX0 X0+X4
- EWX6 X1
- IX1 X1+X4
- ERX6 X0
- IX0 X0+X4
- EWX7 X1
- IX1 X1+X4
- ERX7 X0
- IX0 X0+X4
- EWX2 X1
- IX1 X1+X4
- ERX2 X0
- IX0 X0+X4
- EWX3 X1
- IX1 X1+X4
- ERX3 X0
- IX0 X0+X4
- EWX6 X1
- IX1 X1+X4
- ERX6 X0
- IX0 X0+X4
- EWX7 X1
- IX1 X1+X4
- ERX7 X0
- IX0 X0+X4
- GT B4,B1,RUM5 IF MORE 10B WORD BLOCKS TO TRANSFER
- RUM6 EWX2 X1
- IX1 X1+X4
- ERX2 X0
- IX0 X0+X4
- EWX3 X1
- IX1 X1+X4
- ERX3 X0
- IX0 X0+X4
- EWX6 X1
- IX1 X1+X4
- ERX6 X0
- IX0 X0+X4
- EWX7 X1
- IX1 X1+X4
- ERX7 X0
- EWX2 X1
- IX1 X1+X4
- EWX3 X1
- IX1 X1+X4
- EWX6 X1
- IX1 X1+X4
- EWX7 X1
- * RESTORE REGISTERS.
- RUM7 SA2 A6
- SA3 A6+B1
- BX0 X2
- LX1 X3
- SA2 A3+B1
- SA3 A2+B1
- BX4 X2
- LX6 X3
- SA2 A3+B1
- SA3 A2+B1
- BX7 X2
- SB4 X3
- SA2 A3+B1
- SA3 A2+B1
- SB5 X2
- SB6 X3
- SA2 A3+B1
- SA3 A2+B1
- JP B6 RETURN
- WUM SPACE 4,10
- ** WUM - WRITE USER ECS DATA FROM CM TO UEM.
- *
- * ENTRY AT *WUM* IF PROGRAM MODE.
- * AT *WUM1* IF MONITOR MODE.
- * (B4) = WORD COUNT TO TRANSFER.
- * (B6) = RETURN ADDRESS.
- * (X0) = 30/ ABSOLUTE CM ADDRESS, 30/ UEM ADDRESS.
- *
- * EXIT TO *RUM* IF PROGRAM MODE.
- * TO *RUM1* IF MONITOR MODE.
- WUM SB6 -B6 INDICATE TRANSFER FROM CM TO UEM
- EQ RUM TRANSFER DATA FOR PROGRAM MODE
- WUM1 SB6 -B6 INDICATE TRANSFER FROM CM TO UEM
- EQ RUM1 TRANSFER DATA FOR MONITOR MODE
- SPACE 4,10
- MMRG BSS 10 MONITOR MODE X0,X1,X4,X6,X7,B4,B5,B6,X2,X3
- PMRG BSS 10 PROGRAM MODE X0,X1,X4,X6,X7,B4,B5,B6,X2,X3
- ENDBLK
- BLOCK ECSBUF,(ECS BUFFER SPACE.),PROGRAM
- SPACE 4
- PBUF BSS 21B PROGRAM MODE BUFFER
- ENDBLK
- BLOCK MMFBUF,(MMF BUFFER SPACE.),PROGRAM
- * THIS BUFFER IS SHARED BY MMF AND USER ECS SUBROUTINES.
- * THE BUFFER WILL BE ALLOCATED IF EITHER MMF OR USER ECS IS
- * DEFINED OR IF BOTH ARE DEFINED.
- SPACE 4
- BSS MECB-21B
- ENDBLK
- BLOCK EXPACS,(EXCHANGE PACKAGES.),MONITOR
- .EXPACS BSS 0 FWA OF BLOCK
- MXP SPACE 4
- ** MXP - PPU MONITOR EXCHANGE PACKAGE.
- MXP EXP P=PMN,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,B2=MXP,EM=(,
- ,XPFE)
- BXP SPACE 4,10
- ** BXP - BREAKPOINT EXCHANGE PACKAGE.
- BXP BSS /CPB/CPBAL REGISTERS / BREAKPOINT DATA
- ORG BXP+/CPB/CPBA
- VFD 60/0 CLEAR PREVIOUS BREAKPOINT ADDRESS
- + RJ /CPB/BKP BREAKPOINT PROTOTYPE
- - VFD 30/0
- ORG BXP+/CPB/CPBAL
- IXP SPACE 4,10
- ** IXP - IDLE EXCHANGE PACKAGE.
- IXP EXP P=2,RA=/PROGRAM/IDL,FL=5,MA=IXP,EM=EEMC,EA=IXP,X1=77B
- * *STSW*.
- VFD 3/ACPS *A* CPU STATUS
- VFD 57/0
- * *CWQW*.
- VFD 2/1
- VFD 7/IDCS CPU PRIORITY
- VFD 1/0
- VFD 1/1 CPU SLICE ACTIVE
- VFD 1/0 RECALL FLAG
- VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
- VFD 2/0
- VFD 9/0 SERVICE CYCLE
- VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
- VFD 1/0 *MTR* BYPASS FLAG
- VFD 2/1 SELECT CPU 0
- VFD 3/0
- VFD 3/MIXT MAIN IDLE PACKAGE EXCHANGE PACKAGE TYPE
- VFD 18/0 *WQ* LINKAGE
- * *CSAW*.
- VFD 60/0
- * *CTMW*.
- VFD 60/0
- SPACE 4
- ** PXP - PPU EXCHANGE PACKAGES.
- * COPIED ONCE FOR EACH PPU EXCEPT 0 AND 1.
- * (A5) = PPU OUTPUT REGISTER ADDRESS.
- PXP EXP P=PPR,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,B2=PXP,A5=(2
- ,1B,FP),EM=(,XPFE)
- VFD 60/10RPPU EXPACK
- ERRNZ MXP-.EXPACS-/EXPACS/MXP *COMSMSC* MUST BE CHANGED
- ERRNZ BXP-.EXPACS-/EXPACS/BXP *COMSMSC* MUST BE CHANGED
- ERRNZ IXP-.EXPACS-/EXPACS/IXP *COMSMSC* MUST BE CHANGED
- ERRNZ PXP-.EXPACS-/EXPACS/PXP *COMSMSC* MUST BE CHANGED
- LBAT SPACE 4,10
- ** LBAT - LOADED *CPUMTR* BLOCK ADDRESS TABLE.
- *
- * ONE ENTRY FOR EACH BLOCK LOADED. SPACE IS ALLOCATED FOR THE
- * MAXIMUM POSSIBLE NUMBER OF BLOCKS.
- *
- *T W0 VFD 42/ 0,18/ FWA *CPUMTR* MAIN BLOCK
- *T WN VFD 42/ NAME,18/ FWA ADDITIONAL ENTRIES
- *T VFD 60/ 0 END OF TABLE
- *
- * NAME NAME OF BLOCK LOADED.
- * FWA ABSOLUTE CM ADDRESS OF BLOCK.
- LBAT BSS /DSL/CPBL
- SPACE 4,10
- ENDBLK
- BLOCK XP176,(CYBER 176 EXCHANGE PACKAGES.),MONITOR
- MCU SPACE 4
- ** MCU - DEAD START EXCHANGE PACKAGE.
- MCU EXP P=CXJ,FL=(,MCM),EM=EEMC+20B,MA=IXP
- CXP SPACE 4
- ** CXP - CLOCK EXCHANGE PACKAGE.
- CXP EXP P=CXJ,FL=(,MCM),FLX=(,MEC),B1=1,B2=CXP,EM=(,EXPFEB),X0=
- ,400000B,MA=CXP
- EEA SPACE 4
- ** EEA - ERROR EXIT EXCHANGE PACKAGE.
- EEA EXP P=EXP+1,B1=1,FL=(,MCM),B2=EEA,EM=(,EXPFEB),MA=EEA,EA=40
- ,0000B,X0=77770000777777777777B,X4=1
- SPACE 4,10
- BSS 20B
- ENDBLK
- BLOCK XP819,(CYBER 176/FLPP INTERRUPT PACKAGES.),IH819
- XP819 SPACE 4,10
- MCU EQU /MONITOR/MCU
- XP819 SPACE 4,10
- ** CHANNEL 2 INPUT PACKAGE.
- C2I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C2I,A0=
- ,(MCU+400B),A1=C3I,B2=3,B4=2
- SPACE 4,10
- ** CHANNEL 2 OUTPUT PACKAGE.
- C2O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C2O,A0
- ,=(MCU+400B),A1=C3O,B2=3,B4=2
- SPACE 4,10
- ** CHANNEL 3 INPUT PACKAGE.
- C3I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C3I,A0=
- ,(MCU+400B),A1=C2I,B2=2,B4=3
- SPACE 4,10
- ** CHANNEL 3 OUTPUT PACKAGE.
- C3O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C3O,A0
- ,=(MCU+400B),A1=C2O,B2=2,B4=3
- SPACE 4,10
- ** CHANNEL 4 INPUT PACKAGE.
- C4I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C4I,A0=
- ,(MCU+1000B),A1=C5I,B2=5,B4=4
- SPACE 4,10
- ** CHANNEL 4 OUTPUT PACKAGE.
- C4O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C4O,A0
- ,=(MCU+1000B),A1=C5O,B2=5,B4=4
- SPACE 4,10
- ** CHANNEL 5 INPUT PACKAGE.
- C5I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C5I,A0=
- ,(MCU+1000B),A1=C4I,B2=4,B4=5
- SPACE 4,10
- ** CHANNEL 5 OUTPUT PACKAGE.
- C5O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C5O,A0
- ,=(MCU+1000B),A1=C4O,B2=4,B4=5
- SPACE 4,10
- ** CHANNEL 6 INPUT PACKAGE.
- C6I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C6I,A0=
- ,(MCU+1400B),A1=C7I,B2=7,B4=6
- SPACE 4,10
- ** CHANNEL 6 OUTPUT PACKAGE.
- C6O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C6O,A0
- ,=(MCU+1400B),A1=C7O,B2=7,B4=6
- SPACE 4,10
- ** CHANNEL 7 INPUT PACKAGE.
- C7I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C7I,A0=
- ,(MCU+1400B),A1=C6I,B2=6,B4=7
- SPACE 4,10
- ** CHANNEL 7 OUTPUT PACKAGE.
- C7O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C7O,A0
- ,=(MCU+1400B),A1=C6O,B2=6,B4=7
- ENDBLK
- BLOCK PRESET,(PRESET.)
- PRSB EQU * DEFINE BEGINNING OF *PRESET* BLOCK
- *CALL COMSMST
- QUAL DEFINE SYMBOLS USED GLOBALLY
- LPTU EQU /PRESET/LPTU
- QUAL *
- *CALL COMS1DS
- PRS SPACE 4
- ** PRS - PRESET MONITOR.
- *
- * PRESET IS OVERLAYED BY PPU EXCHANGE PACKAGES.
- *
- * ENTRY (X4) = MACHINE CM FL.
- * (X5) = MACHINE ECS FL.
- * (EFRL) = 30/,6/ LS,12/,12/ LT.
- * LS = 40, IF TO INITIALIZE LINK DEVICE.
- * LS = 20, IF TO PRESET LINK DEVICE.
- * LT = LABEL TRACK OF LINK DEVICE.
- *
- * EXIT (0) = RUNNING LENGTH OF CPUMTR.
- * (ACPL) = EXCHANGE ADDRESS FOR CPU 0.
- * (ACPL+1) = EXCHANGE ADDRESS FOR CPU 1.
- PRS SB1 1 (B1) = 1
- RJ DBL DETERMINE BLOCKS LOADED
- RJ SSP SET SYSTEM PARAMETERS
- RJ SAC SET ADDRESS CONSTANTS
- RJ SDT SET DATE AND TIME
- * COPY SYSTEM EXCHANGE PACKAGE TO CP AREA.
- SB2 17B
- TB3 SCA
- PRS1 SA1 SXP+B2
- BX6 X1
- SA6 B3+B2
- SB2 B2-1
- PL B2,PRS1
- RJ CIR CLEAR INTERLOCKS
- RJ SCM SET CPU MULTIPLIERS
- RJ SJB SETUP JOB CONTROL BLOCKS
- RJ SCS SET CPU STATUS
- RJ CLE CLEAR EXTENDED MEMORY
- RJ IBO INITIALIZE BUFFERED I/O
- RJ SCD SET CHANNEL DATA
- RJ SDT SET DATE AND TIME AGAIN
- * INITIALIZE OPTICAL DISK SCANNER TIMER.
- SA1 OSTP READ *OSTP*
- MX2 48
- BX6 X2*X1 CLEAR SCAN INTERVAL COUNTER
- SX2 63 SET LONG TIMER AT DEAD START
- IX6 X6+X2
- SA6 A1 REWRITE *OSTP*
- * CLEAR SYSTEM CONTROL POINT MESSAGES.
- SX6 B0+
- TA6 SNSW,SCA
- TA6 MS2W,SCA
- * TERMINATE CPU WAIT AND RECALL QUEUES.
- SX6 /MONITOR/WT TERMINATE *WQ*
- SA6 WQRL
- SX6 PTMF BUILD RECALL ENTRY
- MX2 36
- LX6 -12
- LX2 -12
- BX0 X2+X6
- SX6 3REND PP NAME
- SB3 PRSX SET *AQR* RETURN ADDRESS
- LX6 -18
- R= X2,/MONITOR/RQ SET QUEUE TYPE
- TB7 SCA SET SYSTEM CONTROL POINT
- EQ /MONITOR/AQR ASSIGN QUEUE REQUEST
- SPACE 4
- ** SXP - SYSTEM JOB EXCHANGE PACKAGE. (PROGRAM MODE MONITOR)
- * COPIED TO SYSTEM CONTROL POINT.
- SXP EXP P=/PROGRAM/PRG,FL=(,MCM),RAX=(,RXX),FLX=(,MECPRG),MA=(,
- ,SCA),B1=1,EM=(,PXPFE),EA=(,SCA)
- TITLE PRESET SUBROUTINES.
- SAC SPACE 4,10
- ** SAC - SET ADDRESS CONSTANTS.
- SAC PS ENTRY/EXIT
- MX0 -6
- SA5 REL FIRST ENTRY
- MX4 1
- SAC1 SA1 X5 READ DATA WORD
- LX5 6 SET POSITION
- BX2 -X0*X5
- LX5 6 SET FIELD WIDTH
- BX3 -X0*X5
- LX5 18 SET RELOCATION VALUE ADDRESS
- SB3 X3
- SA3 X5 READ RELOCATION VALUE
- UX5,B5 X5 GET NUMBER OF CONDITIONS
- SB4 B3-B1 GENERATE MASK
- SB2 X2 SET MASK SHIFT COUNT
- AX6 X4,B4
- SB3 B2-B3
- LX6 X6,B2 POSITION MASK
- AX5 48
- BX7 X6*X1 EXTRACT ORIGINAL FIELD
- BX2 X3-X5
- SA5 A5+B1 READ NEXT WORD
- ZR B5,SAC4 IF NO CONDITIONAL VALUE SETTING
- BX2 X5
- BX7 X7-X7 CLEAR ORIGINAL VALUE
- EQ B5,B1,SAC3 IF THIS IS THE LAST CONDITION
- SAC2 NZ X3,SAC3 IF THE CONDITION IS MET
- SA5 A5+B1 GET THE NEXT CONDITION
- SB5 B5-B1
- SA3 X5+
- GT B5,B1,SAC2 IF NOT THE LAST CONDITION
- SAC3 ZR X3,SAC4 IF CONDITION NOT MET
- AX5 30
- BX2 X5
- SAC4 SA5 A5+B5 GET FIRST WORD OF NEXT ENTRY
- LX3 X2,B3 SHIFT VALUE
- BX1 -X6*X1 CLEAR FIELD
- BX2 -X6+X3
- IX3 X7+X2 RELOCATE FIELD
- BX2 X6*X3
- BX7 X1+X2 STORE RELOCATED WORD
- SA7 A1
- * CHECK IF THIS BLOCK WAS LOADED BY CPUMLD.
- SAC5 NZ X5,SAC1 IF NOT END OF LIST
- SA5 A5+B1
- MX2 42
- ZR X5,SAC IF END OF BLOCK LISTS
- SA1 BLKT
- SAC6 ZR X1,SAC7 IF BLOCK NOT LOADED
- BX3 X2*X1
- BX5 X2*X5
- SA1 A1+B1
- BX3 X5-X3
- NZ X3,SAC6 IF NO MATCH ON BLOCK NAME
- SA5 A5+B1
- EQ SAC5 SET ADDRESS CONSTANTS FOR THIS BLOCK
- * BLOCK WAS NOT LOADED - IGNORE ANY RELOCATION ADDRESSES.
- SAC7 SA5 A5+1
- NZ X5,SAC7 IF NOT END OF BLOCK TABLE
- EQ SAC5 PROCESS NEXT BLOCK TABLE
- * RELOCATION VALUES.
- OB VFD 42/0,18/ORG
- CX VFD 42/0,18/CL+CACX
- ACAD CON 2 ADJUSTMENT FOR ACCOUNTING OVERHEAD
- ACAD2 CON 1 ACAD/2
- CMCF CON 0 CENTRAL MEMORY COPY FLAG
- DCPC CON 0 DUAL CPU MACHINE WITH CACHE
- DP CON 0 DAYFILE POINTERS FWA
- DSCB CON 0 *DSCB* ADDRESS
- ECCM CON 0 LOCATION OF ECS CLOCK FOR THIS MACHINE
- ECLT CON 0 LOCATION OF EXTENDED MEMORY LABEL TRACK
- ECSB CON 17000B PP/ECS BUFFER
- ECSBL CON ECBL PP ECS I/O BUFFERS LENGTH
- EEAD CON 0 ERROR EXIT ADDRESS FOR CYBER 176
- EEN CON 0 ECS EST ADDRESS
- EJT CON 0 FWA EJT
- EJTM CON 0 MAXIMUM NUMBER OF ENTRIES IN EJT
- EMS CON 0 MST ADDRESS OF ECS EQUIPMENT
- EEM CON 0 EXTENDED MEMORY EST ORDINAL (CPU ACCESS)
- ESM170 CON 0 170 ESM MODE FLAG
- ESM CON 0 ESM MODE FLAG
- EST CON 6500B FWA EST
- ESTL CON 100B EST LENGTH
- EMB CON 0 FWA OF ERROR MESSAGE BUFFER
- EVT CON 0 FWA EVENT TABLE
- EXPA CON 0 EXCHANGE PACKAGE ADDRESS FOR CYBER 176
- CCMB CON 1 CLEAR CM BUFFER (0=LARGE MEMORY CYBER 990)
- FNT CON 6600B FWA OF FNT
- FNTLWA CON 7600B LWA OF FNT
- FNTM CON 400B MAXIMUM NUMBER OF ENTRIES IN SYSTEM FNT
- FP CON 0 ADDRESS OF FIRST PP COMMUNICATION AREA
- FPC CON 0 ADDRESS OF FIRST CPP COMMUNICATION AREA
- FP8 CON 0 ADDRESS OF FIRST PP COMMUNICATION AREA/8
- FPX CON 0 ADDRESS OF FIRST EXTENDED PP COMM. BLOCK
- JCB CON 0 FWA OF JOB CONTROL BLOCK TABLE
- MCM CON 200000B MACHINE FL
- MCT CON 0 FWA OF MEMORY CONTROL TABLE
- NMCT CON 0 NUMBER OF MCT ENTRIES
- RAE CON 0 XM BASE ADDRESS
- RAEX CON 0 XM BASE ADDRESS SHIFTED
- RXX CON 0 RAE/100 IN EXPANDED MODE, ELSE RAE
- MEC CON 1000000B MACHINE FLX
- MCMS CON 2000B MACHINE FL SHIFTED
- MECS CON 0 MACHINE FLX FLAG BIT SHIFTED
- MECNF CON 0 MACHINE FLE / 1000B
- MECPRG CON 57000000B MACHINE FLX (PROGRAM MODE)
- MESC CON 0 EM ADDRESSING SHIFT COUNT (-3,-4,-5,-6)
- MID CON 2RAA MACHINE ID
- MIN CON 0 MACHINE INDEX
- MMK CON 0 MACHINE MASK
- MIL CON 0 MIN*2+1 (MST INTERLOCKS)
- MRT CON 0 MRT ADDRESS (MIN * 100B)
- MSL CON 0 MST LOCAL AREA OFFSET (MIN * 6)
- MSA CON 0 MASS STORAGE ALLOCATION AREA ADDRESS
- MDWB CON 0 MAXIMUM DATA WRITTEN BUFFER COUNT
- NCME CON 1 1 IF NOT CME MACHINE, 0 IF CME MACHINE
- NDCPC CON 1 NOT A DUAL CPU MACHINE WITH CACHE
- NTRACE CON 1 NON-ZERO IF TRACE DISABLED
- OSSM CON 0 OPERATING SYSTEM SECURITY MODE
- BDT CON 0 FWA - BDT
- IBST CON 0 FWA - IBST NOTE - THESE ADDRESSES
- PLT CON 0 FWA - PLT MUST BE CONSECUTIVE
- CCT CON 0 FWA - CCT SO THAT THEY MATCH
- PUT CON 0 FWA - PUT THE ORDER IN *BDT*.
- FTT CON 0 FWA - FTT
- HAT CON 0 FWA - HAT
- CBT CON 0 FWA - CBT
- BLMB CON 0 BUFFER LIST MANAGEMENT POINTERS
- EMTB CON 0 EMPTY BUFFER LIST
- DWTB CON 0 DATA WRITTEN LIST
- DRDB CON 0 DATA READ LIST
- WRTB CON 0 WRITE BUFFER LIST
- IORQ CON ZERL I/O REQUEST
- NIOB CON 0 NUMBER OF I/O BUFFERS
- NRUN CON 0 NUMBER OF BUFFERED DEVICE UNITS
- MXM CON 0 MAXIMUM MEMORY - CM + ECS/ESM/UEM
- NOTDCE CON 1 DUAL CPU USER ECS TRANSFER NOT ALLOWED
- NOTUEM CON 0 NON-UEM FLAG
- UEM CON 0 UEM FLAG
- UEM180 CON 0 FLAG FOR 180 IN EXTENDED MODE WITH UEM
- XUEM CON 0 USER EM IN EXTERNAL EXTENDED MEMORY FLAG
- CXPFE CON EEMC CPUCIO PSEUDO PP XP FLAGS AND EXIT MODE
- EXPFEB CON 7027B 176 CHANNEL EXCHANGE PACKAGE FLAGS
- EXPFEC CON 0
- PXPFE CON EEMC-1 PROGRAM MODE XP FLAGS AND EXIT MODE
- XPFE CON EEMC MONITOR MODE XP FLAGS AND EXIT MODE
- PCPA CON 0 FWA OF PSEUDO CONTROL POINT AREA
- NPCP CON 0 NUMBER OF PCP-S
- PCM2 CON 0 (LAST PCP NUMBER + 1) * 200B
- SCA CON 6000B ADDRESS OF SYSTEM CONTROL POINT
- SC CON 30B SYSTEM CONTROL POINT NUMBER
- SDA CON 0 FWA OF STATISTICAL DATA AREA
- SFCS CON 4 SFCALL CM TRANSFER RATE SHIFT
- SFES CON 3 SFCALL ECS TRANSFER RATE SHIFT
- SFFO CON 70D*10B SFCALL FUNCTION OVERHEAD (MICROSEC*10B)
- SMXF CON 0 STORAGE MOVE XP MODIFICATION FLAG
- SP CON 0 PSEUDO-PP INPUT REGISTER ADDRESS
- SPX CON 0 PSEUDO-PP EXTENDED COMM. BLOCK ADDRESS
- SSCT CON 0 FWA TABLE OF SUBSYSTEM CONTROL POINTS
- NVESS CON 0 *SSCT* WORD CONTAINING *NVE* BYTE
- NVEOS CON 0 OFFSET OF *NVE* BYTE IN *SSCT* WORD
- TNSC CON 0 TRACK SHIFT COUNT
- TCNT CON 20B TRACK SIZE
- TM64 VFD 42/0,18/MP64
- TM66 VFD 42/0,18/MP66
- T173 VFD 42/0,18/MP73
- T175 VFD 42/0,18/MP75
- T176 VFD 42/0,18/MP76
- T810 VFD 42/0,18/MP10
- T815 VFD 42/0,18/MP15
- T825 VFD 42/0,18/MP25
- T830 VFD 42/0,18/MP30
- T835 VFD 42/0,18/MP35
- T840 VFD 42/0,18/MP40
- T845 VFD 42/0,18/MP45
- T850 VFD 42/0,18/MP50
- T855 VFD 42/0,18/MP55
- T860 VFD 42/0,18/MP60
- T865 VFD 42/0,18/MP86
- T875 VFD 42/0,18/MP87
- T961 VFD 42/0,18/MP961
- T963 VFD 42/0,18/MP963
- T990 VFD 42/0,18/MP90
- UESC CON 0 USER EM SHIFT COUNT
- ** THE FOLLOWING LOCATIONS DEFINE CONDITIONS WHICH ARE PRESENT.
- TDBL BSS 0 TABLE OF BLOCKS FOR LOAD
- CME VFD 60/0LCME NON ZERO IF CME BLOCK PRESENT
- CMU VFD 60/0LCMU NON-ZERO IF CMU PRESENT
- CMUMTR VFD 60/0LCMUMTR NON-ZERO IF CMUMTR BLOCK PRESENT
- CPB VFD 60/0LCPB NON-ZERO IF CPUMTR BREAKPOINT PRESENT
- CPP VFD 60/0LCPP NON-ZERO IF CPP-S ARE PRESENT
- CP176 VFD 60/0LCP176 NON-ZERO IF 176 CPU PRESENT
- CP830 VFD 60/0LCP830 NON-ZERO IF CYBER 810/830 WITH 20 PP-S
- DCP VFD 60/0LDCP NON-ZERO IF DUAL CPU PRESENT
- ECS VFD 60/0LECS NON-ZERO IF ECS PRESENT
- EEC VFD 60/0LEEC NONZERO IF EXTERNAL ECS PRESENT
- EUE VFD 60/0LEUE NONZERO IF ECS OR USER ECS PRESENT
- BIOMMF VFD 60/0LBIOMMF
- BUFIO VFD 60/0LBUFIO NON-ZERO IF BUFFERED I/O IN USE
- IH819 VFD 60/0LIH819 NON-ZERO IF 819 DEVICES IN USE
- IHPFMD VFD 60/0LIHPFMD NON-ZERO IF 885-42 DEVICES IN USE
- ISD VFD 60/0LISD NON-ZERO IF INDEPENDENT SHARED DEVICES
- ISDMMF VFD 60/0LISDMMF NON-ZERO IF ISD OR MMF
- LSPMMF VFD 60/0LLSPMMF NON-ZERO IF ONLY LSP ACCESS TO MMF LINK
- MMF VFD 60/0LMMF NON-ZERO IF MMF VIA CPU ACCESS
- NVE VFD 60/0LNVE NON-ZERO IF *DSCB* PRESENT
- PCP VFD 60/0LPCP NON-ZERO IF PSEUDO-CONTROL POINTS PRESENT
- SUBCP VFD 60/0LSUBCP NON-ZERO IF SUB-CONTROL POINTS ALLOWED
- SCP VFD 60/0LSCP NON-ZERO IF SYSTEM CONTROL POINT PRESENT
- SUE VFD 60/0LSUE NONZERO IF SIMULTANEOUS UEM/ESM PRESENT
- PROBE VFD 60/0LPROBE NON-ZERO IF PROBE ENABLED
- MCE VFD 60/0LMCE NON-ZERO IF MEMORY CLEARING ENABLED
- TRACE VFD 60/0LTRACE NON-ZERO IF TRACE ENABLED
- UEC VFD 60/0LUEC NON-ZERO IF USER ECS IS PRESENT
- VMS VFD 60/0LVMS NON-ZERO IF MASS STORAGE VALIDATION ENABLED
- TDBLL CON 0 END OF TABLE
- ECM CON 0 NON-ZERO IF ECS PREFERRED FOR STORAGE MOVE
- * WHICH IS ECS SIZE .GT. 256K OR NO CMU
- SCM SPACE 4,10
- ** SCM - SET CP TIME MULTIPLIERS.
- * ENTRY (CPUL) = CPU FLAGS.
- * EXIT (/MONITOR/CPTA) = CPU 0 MULTIPLIER (S0).
- * (/MONITOR/CPTA+1) = CPU 1 MULTIPLIER (S1).
- *
- * THE MULTIPLIERS ARE USED BY /MONITOR/CPT WHEN
- * CALCULATING CP TIME (CP = S0*CP0 + S1*CP1). IF A
- * MULTIPLIER IS DEFINED AS 0.0 OR 1.0, AN INTEGER ZERO (60/0)
- * IS STORED AND THE MULTIPLY IS NOT PERFORMED. A MULTIPLY
- * BY 0.0 WOULD NEGATE CP ACCUMULATION AND PREVENT TIME-SLICING.
- * A MULTIPLY BY 1.0 IS REDUNDANT. /MONITOR/CPT PERFORMS A ZERO
- * CHECK BEFORE PERFORMING THE MULTIPLY.
- SCM PS ENTRY/EXIT
- MX0 0
- BX4 X4-X4
- SA1 IPRL RETRIEVE IPRDECK PARAMETERS FROM CPM ENTRY
- MX2 -6
- LX1 6
- BX3 -X2*X1
- LX1 6
- BX2 -X2*X1
- ZR X2,SCM1 IF NO CPU0 PARAMETER
- SX0 TIPR-1+X2 ADDRESS OF CPU0 VALUE
- MX4 30
- LX0 30 POSITION FOR CPU0
- SCM1 ZR X3,SCM2 IF NO CPU1 VALUE
- SX3 TIPR-1+X3 ADDRESS OF CPU1 VALUE
- BX0 X3+X0
- MX2 -18
- BX4 -X2+X4
- SCM2 ZR X4,SCM4 IF NO IPRDECK CHANGES
- SB3 TCPML NUMBER OF ENTRIES TO MODIFY
- SCM3 SB3 B3-B1
- SA1 TCPM+B3 RETRIEVE ENTRY
- BX6 -X4*X1 CLEAR ADDRESSES TO BE REPLACED
- BX6 X0+X6 INSERT NEW ADDRESSES
- SA6 A1 REPLACE ENTRY
- NZ B3,SCM3 IF NOT END OF ENTRIES
- SCM4 SA1 MABL FORM INDEX INTO MULTIPLIER TABLE
- MX2 -2
- LX1 59-47
- NG X1,SCM7 IF NOT CYBER 170-8X5
- SX7 4000 SET MULTIPLIERS FOR MICRO SECOND COUNTER
- SA7 /MONITOR/CPTA
- SA7 /MONITOR/CPTA+1
- LX1 59-42-59+47
- PL X1,SCM6 IF CYBER 170-865/875
- SA1 TMNBA GET *TCPM* INDEX
- ZR X1,SCM IF INDEX NOT FOUND
- EQ SCM8 PROCESS CPU MULTIPLIER
- SCM6 LX1 0-38-59+42 GET 865/875 FLAG
- SX6 B1+
- BX1 X6*X1
- SX1 X1+TCPMH-TCPM
- EQ SCM8 PROCESS CPU MULTIPLIER
- SCM7 LX1 0-37-59+47
- MX2 -1
- BX3 -X2*X1 CPU 1 PRESENT FLAG
- LX1 1-40-0+37
- LX2 1-0
- BX6 -X2*X1 INSTRUCTION STACK PRESENT FLAG
- BX3 X3+X6
- LX1 2-42-1+40
- LX2 2-1
- BX6 -X2*X1 CYBER 170 FLAG
- BX3 X6+X3
- MX2 -3
- BX3 -X3 COMPLEMENT FLAGS
- BX1 -X2*X3
- SX6 X1-TCPML
- PL X6,SCM IF INDEX OUT OF RANGE
- TX3 EXPA
- ZR X3,SCM8 IF NOT A CYBER 176
- SX1 7 SET CYBER 176 INDEX
- SX7 110 SET CONVERSION FACTOR TO CONVERT CLOCK
- SA7 /MONITOR/CPTA CYCLES TO QUARTER NANOSECONDS
- SA7 /MONITOR/CPTA+1
- SCM8 SA1 TCPM+X1 GET TABLE ENTRY
- SX2 X1 (X2) = CPU 1 MULTIPLIER ADDR
- AX1 30 (X1) = CPU 0 MULTIPLIER ADDR
- * SET CPU 0 MULTIPLIER (S0).
- ZR X1,SCM9 IF NO CPU 0 MULTIPLIER
- SA1 X1+ GET MULTIPLIER
- SA3 SCMA
- BX6 X1-X3
- SA3 A3+B1
- ZR X6,SCM9 IF NULTIPLIER = 0.0
- BX6 X1-X3
- ZR X6,SCM9 IF MULTIPLIER = 1.0
- SA3 /MONITOR/CPTA BIAS CONSTANTS WITH CPU 0 MULTIPLIER
- PX3 X3
- NX3 X3
- RX7 X3*X1
- UX7,B3 X7
- LX7 B3
- SA7 A3+
- * SET CPU 1 MULTIPLIER (S1).
- SCM9 ZR X2,SCM10 IF NO CPU 1 MULTIPLIER
- SA2 X2+ GET MULTIPLIER
- SA3 SCMA
- BX6 X2-X3
- SA3 A3+B1
- ZR X6,SCM10 IF MULTIPLIER = 0.0
- BX6 X2-X3
- ZR X6,SCM10 IF MULTIPLIER = 1.0
- SA3 /MONITOR/CPTA+1 BIAS CONSTANT WITH CPU 1 MULTIPLIER
- PX3 X3
- NX3 X3
- RX7 X3*X2
- UX7,B3 X7
- LX7 B3
- SA7 A3
- * SET MULTIPLIER FOR APPLICATION USAGE ACCOUNTING.
- SCM10 SA4 ACPL CHECK FOR CPU 0
- SA3 SCMB
- NG X4,SCM11 IF CPU 0 OFF
- ZR X1,SCM IF CPU 0 MULTIPLIER = 0.0
- BX7 X1-X3
- ZR X7,SCM IF CPU 0 MULTIPLIER = 1.0
- BX6 X1
- EQ SCM12 CALCULATE INVERSE MULTIPLIER
- SCM11 ZR X2,SCM IF CPU 1 MULTIPLIER = 0.0
- BX7 X2-X3
- ZR X7,SCM IF CPU 1 MULTIPLIER = 1.0
- BX6 X2
- SCM12 RX6 X3/X6 CALCULATE RECIPROCAL OF CPU MULTIPLIER
- SA6 /MONITOR/ACTC SET APPLICATION ACCOUNTING MULTIPLIER
- EQ SCM EXIT
- SCMA CON 0.0
- SCMB CON 1.0
- TCPM SPACE 4
- ** TABLE OF ADDRESSES FOR CPU 0 (S0) AND CPU 1 (S1) MULTIPLIERS.
- *
- * ENTRY FORMAT.
- * 30/ ADDR OF CPU 0 MULTIPLIER,30/ ADDR OF CPU 1 MULTIPLIER
- *
- * INDEX TO ENTRY FOR CYBER 176 IS 7.
- * INDEX TO ENTRY FOR CYBER 170-815/825/835/855 IS
- * 12D + CYBER 865/875 FLAG (0 OR 1).
- * INDEX FOR ALL OTHER CYBER 6000 AND CYBER 170
- * MAINFRAMES IS CALCULATED BY THE FORMULA -
- * 1/ X,1/ Y,1/ Z
- * X = CYBER 170.
- * Y = CPU 0 HAS INSTRUCTION STACK
- * Z = CPU 1 EXISTS.
- * X, Y, AND Z ARE EXTRACTED FROM CM WORD *MABL*.
- TCPM BSS 0 FWA
- TVFD 30/,TM64 6200/6400
- VFD 30/0
- TVFD 30/,TM64 6500
- TVFD 30/,TM64
- TVFD 30/,TM66 6600
- VFD 30/0
- TVFD 30/,TM66 6700
- TVFD 30/,TM64
- TVFD 30/,T173 CYBER 172/173
- VFD 30/0
- TVFD 30/,T173 CYBER 174
- TVFD 30/,T173
- TVFD 30/,T175 CYBER 175
- VFD 30/0
- TVFD 30/,T176 CYBER 176
- VFD 30/0
- TCPMA TVFD 30/,T815 CYBER 170-815
- VFD 30/0
- TCPMB TVFD 30/,T825 CYBER 170-825
- VFD 30/0
- TCPMC TVFD 30/,T835 CYBER 170-835
- VFD 30/0
- TCPMD TVFD 30/,T845 CYBER 170-845
- VFD 30/0
- TCPME TVFD 30/,T855 CYBER 170-855
- VFD 30/0
- TCPMF TVFD 30/,T810 CYBER 180-810
- TVFD 30/,T810
- TCPMG TVFD 30/,T830 CYBER 180-830
- TVFD 30/,T830
- TCPMI TVFD 30/,T840 CYBER 180-840
- VFD 30/0
- TCPMJ TVFD 30/,T850 CYBER 180-850
- VFD 30/0
- TCPMK TVFD 30/,T860 CYBER 180-860
- TVFD 30/,T860
- TCPMH TVFD 30/,T865 CYBER 170-865
- TVFD 30/,T865
- TVFD 30/,T875 CYBER 170-875
- TVFD 30/,T875
- TCPMN TVFD 30/,T961 CYBER 180-960-11
- VFD 30/0
- TCPMO TVFD 30/,T963 CYBER 180-960-31/32
- TVFD 30/,T963
- TCPMM TVFD 30/,T990 CYBER 180-990
- TVFD 30/,T990
- TCPML EQU *-TCPM NUMBER OF ENTRIES
- TMNB SPACE 4,10
- ** TMNB - TABLE OF CYBER 180 MODEL NUMBERS.
- *
- * *TMNB* IS USED TO DETERMINE THE INDEX INTO
- * THE *TCPM* TABLE BASED ON THE MODEL NUMBER
- * ASSOCIATED WITH THE CYBER 180 PROCESSOR.
- * *TMNB* ALSO CONTAINS THE ACCOUNTING ADJUSTMENT
- * FOR THE ASSOCIATED PROCESSORS.
- *
- *T 12/ ACCT ADJ,18/ *TCPM* INDEX,30/ MODEL NUMBER
- TMNB BSS 0
- VFD 12/38,18/TCPMF-TCPM,30/0#14 CYBER 180-810
- VFD 12/38,18/TCPMA-TCPM,30/0#11 CYBER 170-815
- VFD 12/38,18/TCPMA-TCPM,30/0#15 CYBER 180-815S
- VFD 12/34,18/TCPMB-TCPM,30/0#10 CYBER 170-825
- VFD 12/34,18/TCPMB-TCPM,30/0#12 CYBER 170-825
- VFD 12/34,18/TCPMB-TCPM,30/0#16 CYBER 180-825S
- VFD 12/34,18/TCPMG-TCPM,30/0#13 CYBER 180-830
- VFD 12/28,18/TCPMC-TCPM,30/0#20 CYBER 170-835
- VFD 12/28,18/TCPMI-TCPM,30/0#34 CYBER 180-840
- VFD 12/28,18/TCPMD-TCPM,30/0#37 CYBER 180-840S
- VFD 12/24,18/TCPMD-TCPM,30/0#31 CYBER 170-845
- VFD 12/24,18/TCPMD-TCPM,30/0#35 CYBER 180-845S
- VFD 12/24,18/TCPMJ-TCPM,30/0#33 CYBER 180-850
- VFD 12/20,18/TCPME-TCPM,30/0#30 CYBER 170-855
- VFD 12/20,18/TCPME-TCPM,30/0#36 CYBER 180-855S
- VFD 12/20,18/TCPMK-TCPM,30/0#32 CYBER 180-860
- VFD 12/18,18/TCPMN-TCPM,30/0#3B CYBER 180-960-11
- VFD 12/12,18/TCPMO-TCPM,30/0#3A CYBER 180-960-31/32
- VFD 12/06,18/TCPMM-TCPM,30/0#40 CYBER 180-990
- VFD 12/06,18/TCPMM-TCPM,30/0#41 CYBER 180-990 MODEL B
- VFD 12/06,18/TCPMM-TCPM,30/0#44 CYBER 180-994
- CON 0 END OF TABLE
- TMNBA CON 0 *TCPM* INDEX SET BY *SSP*
- * HARDWARE DETECTABLE CPU HEAD TYPES.
- MP64 CON "CP64M" 6200/6400
- MP66 CON "CP66M" 6600
- MP73 CON "C173M" CYBER 172/173
- MP75 CON "C175M" CYBER 175
- MP76 CON "C176M" CYBER 176
- MP10 CON "C810M" CYBER 180-810
- MP15 CON "C815M" CYBER 170-815
- MP25 CON "C825M" CYBER 170-825
- MP30 CON "C830M" CYBER 180-830
- MP35 CON "C835M" CYBER 170-835
- MP40 CON "C840M" CYBER 180-840
- MP45 CON "C845M" CYBER 170-845
- MP50 CON "C850M" CYBER 180-850
- MP55 CON "C855M" CYBER 170-855
- MP60 CON "C860M" CYBER 180-860
- MP86 CON "C865M" CYBER 170-865
- MP87 CON "C875M" CYBER 170-875
- MP961 CON "C961M" CYBER 180-960-11
- MP963 CON "C963M" CYBER 180-960-31/32
- MP90 CON "C990M" CYBER 180-990
- TIPR SPACE 4
- * SELECTABLE (VIA IPRDECK ENTRY CPM) CPU HEAD TYPES.
- *
- * THIS LIST MUST BE IN THE SAME ORDER AS THE LIST IN *COMSSRU*.
- TIPR BSS 0
- LOC 1
- CON "CP62M" 6200
- CON "CP64M" 6400
- CON "CP65M" 6500
- CON "CP66M" 6600
- CON "CP67M" 6700
- CON "CP71M" CYBER 71
- CON "CP72M" CYBER 72
- CON "CP73M" CYBER 73
- CON "CP74M" CYBER 74
- CON "C171M" CYBER 171
- CON "C172M" CYBER 172
- CON "C173M" CYBER 173
- CON "C174M" CYBER 174
- CON "C175M" CYBER 175
- CON "C176M" CYBER 176
- CON "C720M" CYBER 170-720
- CON "C730M" CYBER 170-730
- CON "C740M" CYBER 170-740
- CON "C750M" CYBER 170-750
- CON "C760M" CYBER 170-760
- CON "C810M" CYBER 180-810
- CON "C815M" CYBER 170-815
- CON "C825M" CYBER 170-825
- CON "C830M" CYBER 180-830
- CON "C835M" CYBER 170-835
- CON "C840M" CYBER 180-840
- CON "C845M" CYBER 170-845
- CON "C850M" CYBER 180-850
- CON "C855M" CYBER 170-855
- CON "C860M" CYBER 180-860
- CON "C865M" CYBER 170-865
- CON "C875M" CYBER 170-875
- CON "C961M" CYBER 180-960-11
- CON "C963M" CYBER 180-960-31/32
- CON "C990M" CYBER 180-990
- CON "ICM1M" INSTALLATION DEFINED - 1
- CON "ICM2M" INSTALLATION DEFINED - 2
- CON "ICM3M" INSTALLATION DEFINED - 3
- CON "ICM4M" INSTALLATION DEFINED - 4
- CON "ICM5M" INSTALLATION DEFINED - 5
- ERRNZ *-TIPRL TABLE SIZE CHANGED
- LOC *O
- SCD SPACE 4,10
- ** SCD - SET CHANNEL DATA.
- *
- * THIS SUBROUTINE RECONSTRUCTS THE CHANNEL ACCESS BYTE IN EACH
- * MST ENTRY, CLEARS THE IDLE FLAG IN EACH CHANNEL STATUS TABLE
- * ENTRY AND ENSURES THAT ALL CHANNEL STATES ARE EITHER *UP* OR
- * *DOWN*.
- *
- * CALLS /MONITOR/RCB, /MONITOR/SCH.
- SCD PS ENTRY/EXIT
- SX7 3 CHANNEL STATE MASK
- SB4 NOPE
- SA2 ESTP
- MX0 -12
- AX2 12
- BX2 -X0*X2 LAST MASS STORAGE ORDINAL + 1
- SB7 X2-1
- SCD1 LT B7,B4,SCD4 IF END OF EST SCAN
- SX1 B7
- SB7 B7-B1 DECREMENT EST ORDINAL
- SB5 48
- SB2 B5+B1
- CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
- TA3 X3+EQDE,EST READ EST ENTRY
- PL X3,SCD1 IF NOT MASS STORAGE
- SCD2 SB5 B5-12
- SB3 B5-12
- SB6 SCD1 *RCB* EXIT ADDRESS
- EQ B3,B0,SCD3 IF BOTH CHANNELS PROCESSED
- SB3 B2-B5
- LX6 X3,B3
- AX6 59
- BX6 X6*X7 =0 IF *UP*/*IDLE*, =3 IF *DOWN*
- SB6 SCD2 *SCH* EXIT ADDRESS
- EQ /MONITOR/SCH SET CHANNEL STATE
- SCD3 BX5 -X0*X3
- LX5 3 MST ADDRESS
- EQ /MONITOR/RCB RECONSTRUCT CHANNEL ACCESS BYTE IN MST
- SCD4 SA2 CHTP
- SA3 SCDA IDLE FLAG MASK
- SB6 CTALL CHANNEL TABLE LENGTH
- SB7 B0
- AX2 12
- SCD5 SA4 X2+B7 READ NEXT CHANNEL TABLE WORD
- SB7 B7+B1 ADVANCE CHANNEL TABLE INDEX
- BX7 -X3*X4 CLEAR IDLE FLAGS
- SA7 A4
- EQ B7,B6,SCD IF END OF CHANNEL TABLE
- EQ SCD5 PROCESS NEXT CHANNEL TABLE WORD
- SCDA CON 01000100010001000100B IDLE FLAG MASK
- SCS SPACE 4
- ** SCS - SET CPU STATUS.
- *
- * EXIT (A0) = NEXT EXCHANGE ADDRESS.
- SCS PS ENTRY/EXIT
- SA2 ACPL SET CPU 0 IDLE
- SA3 A2+B1
- BX6 X2+X3
- SX7 B1
- BX1 X3
- PL X6,SCS2 IF 2 CPU,S
- SX7 B0
- SB4 TPPR CLEAR CPU SELECTION BITS
- SB5 TPPRL
- SX4 B1
- LX4 58-0
- TJP (/PRESET/SCS0,SUBCP,/PRESET/SCS1) CHECK SUBCP
- SCS0 SA3 /MONITOR/TXJP DISABLE SUBCONTROL POINT XP FOR CPU1
- BX6 X3
- SA6 A3+B1
- SCS1 SA3 B4
- BX6 -X4*X3
- SB4 B4+B1
- SA6 A3
- NE B4,B5,SCS1 IF NOT END OF TABLE
- SCS2 TA3 CWQW,SCA SET CPU SELECTION FOR PROGRAM MODE
- LX7 24-0
- BX7 X3+X7
- SA7 A3
- SX3 /MONITOR/IXP
- SX4 MIXT
- BX6 X2+X3
- NG X6,SCS3 IF CPU 0 TURNED OFF
- NG X1,SCS4 IF 1 CPU
- SA6 A2
- LX4 42
- BX6 X4+X3 SET EXCHANGE PACKAGE TYPE AND ADDRESS
- SA3 SCA
- LX3 24
- BX6 X6+X3 SET SYSTEM CONTROL POINT
- SA6 CPAL
- SA3 SCSC ENABLE DUAL-CP EXTENSIONS
- BX7 X3
- SA3 A3+B1
- ERRNZ SCSD-SCSC-1
- SA7 /MONITOR/BNJ15
- NO
- BX7 X3
- SA7 /MONITOR/RCCB
- SX3 /DCP/IXP1
- SX4 DIXT
- SCS3 SA2 A2+1 SET CPU 1 IDLE PACKAGE
- BX6 X2+X3
- SCS4 SA6 A2
- LX4 42
- BX6 X4+X3 SET EXCHANGE PACKAGE TYPE AND ADDRESS
- SA3 SCA
- LX3 24
- BX6 X6+X3 SET SYSTEM CONTROL POINT
- SA6 A2+CPAL-ACPL
- SA1 DCPC
- ZR X1,SCS5 IF NOT DUAL CPU MACHINE WITH CACHE
- SA1 EIBP SET EXCHANGE PACKAGE ADDRESS
- MX7 42
- LX7 32
- SX6 /DCP/SCX1 EXCHANGE PACKAGE FOR IDLE PROGRAM STARTUP
- BX1 X7*X1
- LX6 32
- BX6 X1+X6
- SA6 A1
- SA1 SCSE SET IDLE PACKAGE PROGRAM FOR CPU1
- BX6 X1
- SA6 /DCP/IDL1+2
- SCS5 SA0 /MONITOR/PXP
- EQ SCS RETURN
- SCSC EQ /DCP/BNJ
- SCSD EQ /DCP/RCC
- SCSE EQ 2 LOOP WITHOUT DELAY
- SDT SPACE 4,20
- ** SDT - SET DATE AND TIME FROM *CTI*-SUPPLIED VALUES.
- *
- * IN ORDER TO PROVIDE A VALID DATE AND TIME ON THE DISPLAY
- * AS SOON AS POSSIBLE, THIS ROUTINE IS CALLED AT THE BEGINNING
- * OF *CPUMTR* PRESET. BECAUSE OF THE LENGTH OF TIME REQUIRED
- * TO EXECUTE *CPUMTR* PRESET, THIS ROUTINE WILL BE CALLED AGAIN
- * AT THE END OF *CPUMTR* PRESET TO MAINTAIN CLOCK PRECISION.
- *
- * THIS CODE IS DERIVED FROM THE *FTN5* COMPILER OBJECT
- * CODE PRODUCED FOR A FORTRAN VERSION OF THE ALGORITHM
- * DEVELOPED IN *CYBIL* FOR NOS/VE.
- *
- * ENTRY (TIML) = *CTI*-SUPPLIED PACKED BASE TIME (FIRST CALL).
- * (DTEL) = *CTI*-SUPPLIED PACKED BASE DATE (FIRST CALL).
- * (PDTL) = *CTI*-SUPPLIED *FRC* BASE VALUE (FIRST CALL).
- *
- * EXIT (DTEL) = CURRENT DISPLAY CODE DATE.
- * (TIML) = CURRENT DISPLAY CODE TIME.
- *
- * USES X - ALL.
- * A - 1, 2, 3, 4, 5, 6, 7.
- * B - 2, 7.
- *
- * MACROS EDATE, ETIME.
- SDT SUBR ENTRY/EXIT
- * SAVE *CTI*-SUPPLIED VALUES ON INITIAL CALL.
- SA1 SDTB
- NZ X1,SDT0 IF NOT FIRST CALL TO *SDT*
- SA1 TIML SAVE *CTI*-SUPPLIED PACKED BASE TIME
- SA2 DTEL SAVE *CTI*-SUPPLIED PACKED BASE DATE
- BX6 X1
- LX7 X2
- SA1 PDTL SAVE *CTI*-SUPPLIED *FRC* BASE VALUE
- SA6 SDTA
- SA7 SDTB
- BX6 X1
- SA6 SDTC
- * CHECK MAINFRAME TYPE.
- SDT0 SA1 MABL
- LX1 59-47
- NG X1,SDTX IF NOT A CME MAINFRAME
- * INITIALIZE *RTC* VARIABLES.
- SA3 /CME/RTCC INITIALIZE REAL TIME CLOCK
- RC X6 GET CURRENT *FRC* VALUE
- BX7 X3
- SA6 /CME/RTCA INITIALIZE WHOLE MILLISECOND BASE TIME
- SA7 RTCL
- SA6 /CME/RTCB INITIALIZE WHOLE SECOND BASE TIME
- LX1 59-42-59+47
- PL X1,SDTX IF CYBER 865/875
- * CALCULATE ELAPSED TIME SINCE CTI-SUPPLIED DATE/TIME.
- SA5 SDTC GET CTI-SUPPLIED *FRC* VALUE
- IX6 X6-X5
- PL X6,SDT1 IF CTI *FRC* VALID (.LT. CURRENT *FRC*)
- SX6 0 USE CTI-SUPPLIED DATE/TIME INTACT
- SDT1 SA6 FRC
- SA4 =500000 ROUND UP TO NEAREST WHOLE SECOND
- SA3 =1000000.0
- IX0 X6+X4
- PX7 X0
- FX0 X7/X3
- UX7,B2 X0
- * CALCULATE CURRENT TIME.
- SA5 =60.0 ADVANCE SECONDS
- LX0 B2,X7
- PX7 X0
- FX6 X7/X5
- UX7,B2 X6
- SA5 SDTA CONVERT PACKED DECIMAL SECONDS AND MINUTES
- BX6 X5
- BX4 X5
- MX3 -4
- LX6 56
- LX4 44
- BX2 -X3*X6
- BX6 -X3*X4
- BX4 X2
- LX7 B2,X7 UPDATE *FRC* TO BE ELAPSED MINUTES
- SX1 60
- LX4 2
- IX2 X4+X2
- BX4 X6
- LX4 2
- IX6 X4+X6
- DX4 X7*X1
- LX2 1
- IX0 X0-X4 CALCULATE NUMBER OF SECONDS TO ADVANCE
- BX4 X5
- BX5 -X3*X5
- LX4 48
- LX6 1
- IX2 X5+X2
- BX5 -X3*X4
- IX6 X5+X6
- SA7 FRC
- IX7 X0+X2
- SA6 MN
- SA7 SS
- IX7 X7-X1
- NG X7,SDT2 IF NO MINUTE CHANGE
- SA7 A7
- SX0 B1
- IX7 X0+X6
- SA7 A6
- SDT2 SA5 FRC ADVANCE MINUTES
- SA4 =60.0
- PX0 X5
- FX7 X0/X4
- SA4 SDTA CONVERT PACKED DECIMAL HOURS
- BX0 X4
- LX0 32
- UX2,B2 X7
- BX7 -X3*X0
- SX0 60
- LX6 B2,X2 UPDATE *FRC* TO BE ELAPSED HOURS
- BX2 X7
- DX1 X6*X0
- LX2 2
- IX7 X2+X7
- SA2 MN
- LX4 36
- IX1 X5-X1 CALCULATE NUMBER OF MINUTES TO ADVANCE
- BX5 -X3*X4
- LX7 1
- IX7 X5+X7
- SA6 A5
- IX6 X2+X1
- SA7 HH
- SA6 A2
- IX6 X6-X0
- NG X6,SDT3 IF NO HOUR CHANGE
- SX0 B1
- IX7 X0+X7
- SA6 A6
- SA7 A7
- SDT3 SA5 FRC ADVANCE HOURS
- SA4 =24.0
- PX0 X5
- FX7 X0/X4
- SA4 SDTB CONVERT PACKED DECIMAL DAYS
- BX0 X4
- LX0 56
- UX2,B2 X7
- BX7 -X3*X0
- SX0 24
- LX6 B2,X2 UPDATE *FRC* TO ELAPSED DAYS
- BX2 X7
- DX1 X6*X0
- LX2 2
- IX7 X2+X7
- SA2 HH
- BX3 -X3*X4
- IX4 X5-X1 CALCULATE NUMBER OF HOURS TO ADVANCE
- LX7 1
- IX7 X3+X7
- SA6 A5
- IX6 X2+X4
- SA7 DD
- SA6 A2
- IX6 X6-X0
- NG X6,SDT4 IF NO DAY CHANGE
- SA6 A6
- SX0 B1
- IX6 X0+X7
- SA6 A7
- * CALCULATE CURRENT DATE.
- SDT4 SA5 SDTB ADVANCE DATE
- BX0 X5
- LX0 32
- MX7 -4 CONVERT PACKED DECIMAL MONTH AND YEAR
- BX4 X5
- BX3 -X7*X0
- LX4 44
- BX0 X3
- BX2 -X7*X4
- LX0 2
- BX4 X2
- BX1 X5
- IX3 X0+X3
- LX4 2
- LX1 36
- IX0 X4+X2
- BX4 -X7*X1
- LX3 1
- LX5 48
- IX6 X4+X3
- BX4 -X7*X5
- LX0 1
- SA6 YY
- IX6 X4+X0
- SA6 MM
- * CALCULATE CURRENT MONTH AND DAY.
- SA5 MM
- SA4 YY
- SA3 DD
- SA2 FRC
- IX3 X3+X2
- * ADJUST YEAR, MONTH, DAY UNTIL DAY FITS WITHIN MONTH.
- SDT5 MX7 -2 CHECK FOR LEAP YEAR
- SX6 28
- BX7 -X7*X4
- NZ X7,SDT5.1 IF NOT LEAP YEAR
- SX6 29
- SDT5.1 SA6 DAYS+1 RESET NUMBER OF DAYS IN FEBRUARY
- SDT6 SA1 X5+DAYS-1 ADJUST ELAPSED DAYS BY DAYS IN MONTH
- IX2 X1-X3
- PL X2,SDT7 IF DAYS FIT WITHIN CURRENT MONTH
- SX5 X5+B1 ADVANCE MONTH
- IX3 X3-X1 DECREMENT ELAPSED DAYS
- SB7 X5-13
- NG B7,SDT6 IF NOT YEAR ROLLOVER
- SX5 B1 RESET MONTH TO JANUARY
- SX4 X4+B1 ADVANCE YEAR
- EQ SDT5 RECHECK FOR LEAP YEAR
- * CONVERT CALCULATED VALUES TO DISPLAY WALL CLOCK DATE/TIME.
- SDT7 SX1 X4-70 BIAS YEAR BY 1970
- PL X1,SDT8 IF YEAR BEFORE 2000
- SX1 X1+100 ADJUST BIAS FOR YEARS 2000 - 2033
- SDT8 LX1 12 PACK DATE
- LX5 6
- BX1 X1+X5
- BX1 X1+X3
- EDATE X1 CONVERT PACKED DATE TO DISPLAY CODE
- SA6 DTEL
- SA1 HH PACK TIME
- LX1 12
- SA2 MN
- LX2 6
- SA3 SS
- BX1 X1+X2
- BX1 X1+X3
- ETIME X1 EDIT TIME
- SA6 TIML
- EQ SDTX RETURN
- SDTA CON 0 *CTI*-SUPPLIED PACKED BASE TIME
- SDTB CON 0 *CTI*-SUPPLIED PACKED BASE DATE
- SDTC CON 0 *CTI*-SUPPLIED BASE *FRC* VALUE
- * DATE/TIME CELLS.
- YY BSS 1 YEAR
- MM BSS 1 MONTH
- DD BSS 1 DAY
- HH BSS 1 HOUR
- MN BSS 1 MINUTE
- SS BSS 1 SECOND
- FRC BSS 1 FREE RUNNING CLOCK
- * ARRAY CONTAINING THE NUMBER OF DAYS IN EACH MONTH.
- DAYS DATA 31,28,31,30,31,30,31,31,30,31,30,31
- *DAYS DATA 31,29,31,30,31,30,31,31,30,31,30,31 (LEAP YEAR)
- SJB SPACE 4,10
- ** SJB - SETUP JOB CONTROL BLOCK TABLE.
- *
- * EXIT JCB SET UP FOR ALL SERVICE CLASSES.
- *
- * USES X - 4.
- * B - 3.
- *
- * CALLS /MONITOR/CCP.
- SJB SUBR ENTRY/EXIT
- SX4 MXJC SET MAXIMUM SERVICE CLASS
- SB3 SJB1 SET RETURN ADDRESS
- SJB1 SX4 X4-1
- ZR X4,SJBX IF ALL SERVICE CLASSES PROCESSED
- EQ /MONITOR/CCP CONVERT CPU SCHEDULING PARAMETERS
- SSP SPACE 4,10
- ** SSP - SET SYSTEM PARAMETERS.
- SSP7.9 SA1 BIOL
- AX1 24
- SX7 X1
- ZR X7,SSP IF NO BUFFERED I/O
- SB6 X1+CBTP LAST ENTRY
- SA7 BDT
- MX3 -18
- SX7 X7+BDTL
- SA2 X1-1
- SSP8 SA2 A2+B1 NEXT ENTRY
- BX6 X7+X2
- LX2 -24
- SA7 A7+B1
- SA6 A2
- BX4 -X3*X2
- IX7 X7+X4
- SX4 A2-B6
- NZ X4,SSP8 IF MORE ENTRIES TO PROCESS
- SX6 X1+EMTP
- SX7 X1+DWTP
- SA6 EMTB
- SA7 DWTB
- SX6 X6-1
- SA6 BLMB
- SX6 X1+DRDP
- SX7 X1+WRTP
- SA6 DRDB
- SA7 WRTB
- SA2 X1+CBTP GET NUMBER OF I/O BUFFERS
- SA4 X1+PUTP
- SX7 X1+IORQP
- LX2 12
- MX3 -12
- SA7 IORQ
- BX6 -X3*X2
- LX4 12
- SA6 NIOB
- BX7 -X3*X4
- AX6 2 SET MAXIMUM DATA WRITTEN TO 1/4 OF TOTAL
- SA7 NRUN
- SA6 MDWB
- SSP PS ENTRY/EXIT
- SA2 EMBP
- LX2 -24 SET *EMB* POINTER
- SX7 X2
- SA7 EMB
- * SET CONTROL POINT AND PSEUDO-CONTROL POINT PARAMETERS.
- SA1 PCPP
- SX6 X1 SET PCP AREA ADDRESS
- MX0 -12
- ERRNZ MCTP-PCPP CODE DEPENDS ON VALUE
- AX1 24
- BX7 -X0*X1 NUMBER OF MCT ENTRIES
- SA6 PCPA
- AX1 12 POSITION TO MCT ADDRESS
- BX6 X1
- SA7 NMCT SET MCT ENTRY COUNT
- SA6 MCT
- SA1 NCPL SET SYSTEM CONTROL POINT NUMBER
- AX1 36
- BX6 -X0*X1
- SX6 X6+B1
- SA6 SC
- SX2 X6+B1 NUMBER OF CP-S (INCLUDING CP-0)
- LX6 7
- SA6 SCA SET SYSTEM CONTROL POINT ADDRESS
- IX6 X7-X2 CALCULATE PCP COUNT
- SA6 NPCP
- LX7 7
- SA7 PCM2 SET MAXIMUM PCP OFFSET
- * SET PP CONFIGURATION PARAMETERS.
- SA2 PPCP SET FIRST PP COMMUNICATION ADDRESS
- BX7 -X0*X2
- SA7 FP
- BX6 X7 SET FIRST PP COMMUNICATION ADDRESS/8
- AX6 3
- SA6 FP8
- LX2 -36
- SX6 X2
- SX3 X2
- SA6 FPX SET EXTENDED PP COMMUNICATION BLOCKS FWA
- SA1 PPUL SET CPP-S COMMUNICATION ADDRESS
- SX2 X1 GET NUMBER OF PHYSICALLY PRESENT CPP-S
- AX2 12D
- LX1 -24
- BX1 -X0*X1
- SX6 20D NUMBER OF PP-S IN 2 BARREL SYSTEM
- SB2 X1-11D
- PL B2,SSP.0 IF NOT 2 BARRELS
- SX6 10D
- SSP.0 LX6 3
- IX6 X6+X7
- SA6 FPC ADDRESS OF CPP COMMUNICATION AREA
- ZR X2,SSP0.1 IF NO CPP-S
- LX2 3
- IX6 X2+X6
- SSP0.1 SA6 SP ADDRESS OF PSEUDO PP COMMUNICATION AREA
- IX7 X6-X7
- LX7 PPXES-PPCES
- IX7 X3+X7
- SA7 SPX SET PSEUDO PP EXTENDED BLOCK ADDRESS
- SX7 0 CLEAR INPUT REGISTER
- SA7 X6+
- * SET CENTRAL AND EXTENDED MEMORY CONFIGURATION PARAMETERS.
- SA1 CFGL GET HARDWARE ECS/ESM MODE
- SX6 B1+
- AX1 22
- BX6 X6*X1
- SA6 ESM SET ESM MODE IF BIT IS SET
- SA1 MABL CHECK FOR 8XX
- ZR X6,SSP0.11 IF NOT ESM MODE
- LX1 59-47
- NG X1,SSP0.10 IF NOT CYBER 8XX
- LX1 59-42-59+47
- NG X1,SSP0.11 IF NOT CYBER 865/875
- SSP0.10 SA6 ESM170 SET 170 ESM MODE
- SSP0.11 BX6 X4 SET FL
- AX6 36
- BX7 X5 SET FLX
- LX7 -36
- SA6 MCM
- SA1 MEFL GET EXPANDED ADDRESSING FLAG
- SA7 MEC
- SA7 MXM SET MAXIMUM MEMORY
- AX6 6 SET FL SHIFTED
- SA6 MCMS
- LX1 59-31
- MX4 37
- SA3 EEC
- BX4 X4*X7
- BX7 X4-X7
- PL X1,SSP0.12 IF NOT EXPANDED ADDRESSING
- SA6 ESM170 SET EXPANDED ADDRESSING INDICATOR
- LX7 6
- SSP0.12 AX4 9
- AX7 9 SET FLE / 1000B
- SA7 MECNF
- BX7 X4+X7 SET FLX FLAG BIT SHIFTED
- SA7 MECS
- MX4 -2 SET EXTENDED MEMORY SHIFT COUNT
- LX1 0-29-59+31
- BX7 -X4*X1
- SA7 TNSC
- SB4 X7
- SX7 X7-6 (0 TO 3)-6 = (-6 TO -3)
- MX4 -3 SET USER EM SHIFT COUNT
- SA7 MESC
- LX1 0-33-0+29 POSITION USER EM SHIFT COUNT
- BX7 -X4*X1
- SA7 UESC STORE USER EM SHIFT COUNT
- SX1 20B
- LX7 B4,X1
- SA7 TCNT SET TRACK SIZE
- SA1 MABL
- LX1 59-47
- NG X1,SSP0.3 IF NOT CME
- LX6 6 SET MAXIMUM MEMORY
- SA6 MXM
- SX6 B0+ CLEAR THE NON-CME INDICATOR
- SA6 NCME
- SA1 MABL
- LX1 59-42
- MX7 -8
- PL X1,SSP0.15 IF 170 - 865/875
- SA1 EABL+CPEI GET PROCESSOR DESCRIPTOR POINTER
- LX1 18
- SA4 X1 ISOLATE MODEL NUMBER
- AX4 28
- SX2 TMNB
- SA1 X1+3 GET CYBER 990 LARGE MEMORY INDICATOR
- LX1 59-12
- PL X1,SSP0.14 IF NOT A LARGE MEMORY CYBER 990
- SX6 B0+
- SA6 CCMB
- SA1 MEC SET PROGRAM MODE FLE TO MACHINE FLE
- BX6 X1
- SA6 MECPRG
- SSP0.14 SA1 X2
- ZR X1,SSP0.16 IF END OF TABLE
- SX2 X2+B1
- BX6 X1-X4
- BX6 -X7*X6
- NZ X6,SSP0.14 IF NO MATCH ON MODEL NUMBER
- AX1 30 SET *TCPM* INDEX
- SX7 X1
- SA7 TMNBA
- MX7 -12
- AX1 18 SET ACCOUNTING ADJUSTMENT
- BX7 -X7*X1
- AX6 X7,B1
- SA7 ACAD
- SA6 ACAD2
- EQ SSP0.16 SET/CLEAR CM COPY FLAG
- SSP0.15 SA4 UEML SET USER EM IN EXTERNAL EM FLAG
- SX2 B1+B1
- BX6 X2*X4
- SA6 XUEM
- SSP0.16 SX6 EEMC+100B CLEAR CM COPY FLAG TO ACCESS EXTERNAL EM
- SX7 EEMC+100B-1
- SX2 B1+B1
- SX4 B1+B1
- NZ X3,SSP0.2 IF EXTERNAL ECS PRESENT
- SX6 EEMC+500B SET CM COPY FLAG TO ACCESS INTERNAL ECS
- SX7 EEMC+500B-1
- SX4 B0+
- SSP0.2 SA1 ESM170 GET ADDRESSING MODE
- ZR X1,SSP0.21 IF NOT EXPANDED ADDRESSING
- SX1 200B SET EXPANDED ADDRESSING FLAG
- BX6 X6+X1
- BX7 X7+X1
- SSP0.21 SA6 XPFE
- SA7 PXPFE
- SA6 CXPFE
- SX6 EEMC-1+400B+100B
- BX6 X6+X1
- SA6 EXPFEC
- SA1 UEML
- BX2 X2*X1
- BX6 -X2*X4
- LX6 59-1
- AX6 18
- SA4 UEC SET STORAGE MOVE XP FLAG IF EXTERNAL UEC
- LX1 12
- BX6 X6*X4
- SA6 SMXF
- ZR X2,SSP0.3 IF UEM NOT PRESENT
- NZ X3,SSP0.3 IF SIMULTANEOUS UEM/ESM
- BX6 -X0*X1
- SA2 MABL CHECK FOR CYBER 180
- LX2 59-42
- SA1 ESM170 PICK UP EXPANDED MODE FLAG
- PL X2,SSP0.22 IF CY170-865/875
- ZR X1,SSP0.22 IF NOT IN EXPANDED MODE
- SA6 UEM180 SET 180 EXPANDED MODE FOR FAKE READ
- SSP0.22 BX2 X6 PRESERVE RAE/1000
- LX6 3 RAE/100
- NZ X1,SSP0.23 IF EXPANDED MODE
- LX6 6 RAE
- SSP0.23 SA6 RXX SET RXX VALUE FOR EXCHANGE PACKAGES
- BX6 X2 RESTORE RAE/1000 TO X6
- SA6 RAEX
- LX6 9
- SA1 MCM INCLUDE UEM IN MAXIMUM MACHINE FL
- SA2 MEC
- SA6 A6-B1
- ERRNZ RAEX-RAE-1 CODE DEPENDS ON CONSECUTIVE LOCATIONS
- IX6 X1+X2
- SA6 MXM
- * SET TABLE POINTERS.
- SSP0.3 SA1 SSTL
- LX1 59-29
- NG X1,SSP0.32 IF TRACE DISABLED
- SX7 B0+
- SA7 NTRACE CLEAR NON-TRACE INDICATOR
- SSP0.32 SA1 ESTP READ EST POINTER
- LX1 24 SET EST FWA
- SX7 X1
- LX1 12 SET EST LENGTH
- BX6 -X0*X1
- SA7 EST
- SA6 ESTL
- LX1 12 SET LAST MASS STORAGE ORDINAL + 1
- BX6 -X0*X1
- SA6 IBOP SAVE IN ROUTINE *IBO*
- SA1 EVTP GET EVENT TABLE POINTER
- AX1 36
- SX6 X1 FWA EVENT TABLE
- SA6 EVT
- SA1 EPBP GET ECS PP BUFFER POINTER
- MX4 -6
- SX6 X1 FWA ECS PP BUFFERS
- SA6 ECSB
- LX1 -18
- SX2 ECBL LENGTH OF EACH PP ECS BUFFER
- BX4 -X4*X1 NUMBER OF PP ECS BUFFERS
- IX6 X4*X2
- SA6 ECSBL SET PP ECS BUFFERS TOTAL LENGTH
- SA1 SSML GET OPERATING SYSTEM SECURITY MODE
- MX6 -6
- LX1 12
- BX6 -X6*X1
- SA6 OSSM
- SA1 EXML GET EXTENDED MEMORY EST ORDINAL
- MX6 -9
- BX6 -X6*X1
- SA6 EEM
- SA1 DFPP SET DAYFILE POINTERS FWA
- LX1 24
- SB6 X6 (B6) = EM EST ORDINAL (CPU ACCESS)
- CX4 X6,EST CONVERT EST ORDINAL TO OFFSET
- IX7 X7+X4
- SX6 X1
- SA6 DP
- SA1 FNTP SET FWA/LWA OF FNT
- MX4 -24
- LX1 24
- BX6 -X4*X1
- BX2 X6
- SA6 FNT
- LX1 12
- BX6 -X0*X1 EXTRACT NUMBER OF ENTRIES IN FNT
- SA6 FNTM
- CX1 X6,FNT LENGTH OF FNT
- IX6 X2+X1
- SA1 X7+ GET MST ADDRESS OF ECS
- NZ B6,SSP0.4 IF ECS EQUIPMENT DEFINED
- SX7 B0 CLEAR ECS EST AND MST ADDRESSES
- BX1 X1-X1
- SSP0.4 SA6 FNTLWA LWA+1 OF SYSTEM FNT
- SA7 EEN
- BX7 -X0*X1
- LX7 3 MST ADDRESS
- SA7 EMS
- SA1 EJTP GET FWA OF EJT
- LX1 24
- BX6 -X4*X1
- SA6 EJT
- LX1 12
- BX6 -X0*X1 MAXIMUM NUMBER OF ENTRIES IN EJT
- SA6 EJTM
- SA1 SDAP SET FWA STATISTICAL DATA AREA
- LX1 24
- BX6 -X4*X1
- SA6 SDA
- SA2 SSCP GET FWA *SSCT* TABLE
- LX2 -12
- BX7 -X4*X2
- SA7 SSCT
- SA2 MABL CHECK FOR CMU
- LX2 59-39
- PL X2,SSP1 IF CMU PRESENT
- BX1 X2 CHECK IF CPU 0 HAS INSTRUCTION STACK
- LX1 59-40-59+39
- NG X1,SSP2 IF NOT STACK MACHINE
- SA4 SFFO DECREASE SFCALL FUNCTION TIME BY 1/2
- AX6 X4,B1
- SA6 A4
- SX7 B1 875 CM TRANSFER RATE SHIFT
- LX1 59-38-59+40
- SA7 SFCS
- NG X1,SSP2 IF AN 875
- SSP1 SX7 2 SET SFCALL CM TRANSFER RATE SHIFT
- SA7 SFCS
- SSP2 SA4 UEML
- LX4 0-1
- SX6 B1
- BX6 X6*X4
- SA6 UEM SET/CLEAR UEM FLAG
- NZ X6,SSP4.1 IF UEM
- SX6 B1 SET NON-UEM FLAG
- SA6 NOTUEM
- ZR B6,SSP5 IF NO EXTERNAL ECS EQUIPMENT
- SA1 MECNF
- SX6 X1-500000/1000B
- SX7 B0+
- PL X6,SSP3 IF ECS SIZE .GE. 500K
- SX6 X1-256000/1000B
- SX7 B1
- PL X6,SSP3 IF ECS SIZE .GE. 256K
- SX7 B1+B1
- SSP3 SA7 SFES SET SFCALL ECS TRANSFER RATE SHIFT
- SA1 CME
- NZ X1,SSP4.1 IF CME AVAILABLE
- PL X6,SSP4 IF ECS SIZE .GE. 256K
- PL X2,SSP4.1 IF CMU PRESENT
- SSP4 SX7 B1+ SET TO USE ECS
- SA7 ECM
- SSP4.1 SA1 UEC
- ZR X1,SSP5 IF USER ECS NOT PRESENT
- BX7 X7-X7
- SA7 NOTDCE ALLOW DUAL CPU USER ECS TRANSFER
- SX7 B1
- LX2 59-47-59+39
- PL X2,SSP5 IF CM EXTENSION PRESENT
- SA1 /PROGRAM/SMPXP+CWQW FORCE INTO CPU-0
- SA7 A7 PREVENT DUAL CPU USER ECS TRANSFER
- LX7 24
- BX7 X1+X7
- SA7 A1
- SSP5 SA1 JBCP SET FWA OF JOB CONTROL BLOCK TABLE
- AX1 36
- BX6 X1
- SA6 JCB
- SA1 DSSL GET RECOVERY MODE
- MX0 -2
- BX7 -X0*X1
- SA7 CIRA SET RECOVERY MODE
- SA2 MCE
- ZR X2,SSP5.1 IF MEMORY CLEARING NOT ENABLED
- SA7 /MCE/PRSA SET RECOVERY LEVEL
- SSP5.1 SA2 MSAP SET DEVICE SELECTION ADDRESS
- AX2 36
- BX6 X2
- SA6 MSA
- SA2 MABL CHECK MAINFRAME TYPE
- MX3 2
- LX2 59-46
- BX2 X3*X2
- BX2 X2-X3
- NZ X2,SSP6 IF NOT CYBER 176 MAINFRAME
- SX6 EEMC+60B-1 SET XP FLAG AND EXIT MODE FOR CYBER 176
- SA6 XPFE
- SA2 EST LOCATE CYBER 176 EXCHANGE PACKAGE AREA
- SA3 ESTL
- CX6 X3,EST LWA+1 OF EST
- IX2 X2+X6
- MX0 4
- SX2 X2+777B
- LX0 4+9
- BX6 X0*X2
- SX7 X6+/MONITOR/EEA-/MONITOR/MCU
- SA6 EXPA
- SA7 EEAD
- SSP6 SA1 MMFL
- LX1 15
- AX1 60-9
- ZR X1,SSP7 IF NOT MMF CONFIGURATION
- RJ ILD INITIALIZE LINK DEVICE
- NZ B6,SSP7 IF ERROR FOUND
- SA1 SFES DECREASE ECS TRANSFER RATE BY 1/2
- SX6 X1+B1
- SA6 A1
- MX0 -12
- SA1 MMFL SET MMF PARAMETERS
- BX6 -X0*X1
- MX4 -MXMF
- LX1 -12
- SA6 MIN SET MACHINE INDEX
- BX7 -X4*X1
- LX2 X6,B1 SET MST INTERLOCKS
- LX6 6
- SA6 MRT SET MRT ADDRESS
- SA7 MMK SET MACHINE MASK
- SX7 X2+B1
- SA7 MIL
- LX1 -36
- BX7 -X0*X1
- SA7 MID SET MACHINE ID
- BX1 X6 COMPUTE MST LOCAL AREA OFFSET
- AX6 1
- IX6 X1+X6
- AX6 4
- SA6 MSL
- SSP7 SA1 EIBP SET FWA OF *EICB*
- SX6 X1
- SA6 DSCB
- ZR X6,SSP7.9 IF NO *EICB*
- RT X1,/DST/EICB TELL *EI* WHERE THE *EICB* IS
- SX7 SVNL SET SYSTEM VERSION NAME POINTER IN *EICB*
- SA7 X6+/DST/D7SV+2
- SX7 SYTL SET SYSTEM TITLE LINE POINTER IN *EICB*
- SA7 X6+/DST/D7SV+3
- LX1 59-58
- PL X1,SSP7.1 IF NOT DUAL CPU MACHINE WITH CACHE
- SX6 B1
- BX7 X7-X7
- SA6 DCPC SET DUAL CPU MACHINE WITH CACHE FLAGS
- SA7 NDCPC
- SSP7.1 SA1 SSTL
- LX1 59-44
- NG X1,SSP7.2 IF HARDWARE FAULT INJECTION IS DISABLED
- SA1 X6+/DST/D7JP SET *V1*, *V2* AND *V3* BITS IN *EICB*
- MX6 3
- LX6 16-57
- BX6 X1+X6
- SA6 A1
- SSP7.2 SA1 SSCT
- SX6 X1-1
- SX1 NVSI-MXSI-1
- SSP7.3 SX1 X1+5
- SX6 X6+1
- NG X1,SSP7.3 IF NOT TO *NVE* ENTRY WORD YET
- SA6 NVESS ADDRESS OF WORD WITH *NVE* ENTRY
- LX1 2
- LX6 X1,B1
- IX1 X1+X6
- SX6 48
- IX6 X6-X1
- SA6 NVEOS SHIFT COUNT GETS *NVE* ENTRY IN BITS 59-48
- EQ SSP7.9 CHECK FOR BUFFERED I/O
- IBO SPACE 4,10
- ** IBO - INITIALIZE FOR BUFFERED I/O.
- *
- * ENTRY (CIRA) = RECOVERY LEVEL.
- *
- * CALLS RBT.
- IBO21 RJ RBT RECOVER BUFFERED I/O TABLES
- IBO PS ENTRY/EXIT
- SA1 BIOL
- AX1 24
- SX1 X1
- ZR X1,IBO IF NO BUFFERED I/O
- SA1 CIRA GET RECOVERY LEVEL
- SX1 X1-3
- ZR X1,IBO21 IF CM RECOVERY
- TA3 NOPE*ESTE-1*ESTE,EST
- SB2 NOPE-1 INITIALIZE EQUIPMENT INDEX
- SA5 IBOP
- SB7 A0 SAVE (A0)
- SB6 X5
- TNO /PRESET/IBO2,IHPFMD IF NO 819 DEVICES
- SX6 100B INITIALIZE CCT FOR 819-S
- SX4 202B
- LX6 36
- LX4 36
- TA6 CCNT,CCT SET UP CCT
- SB3 NCCT-1
- IBO1 IX6 X6+X4
- SB3 B3-B1
- SA6 A6+CCTL
- NZ B3,IBO1 IF NOT COMPLETE
- TX6 NCCT*CCTL,CCT
- SA6 IBOD SET NEW LWA+1 OF *CCT*
- IBO2 SA5 IBOA-1
- SX0 7777B
- IBO3 SA3 A3+ESTE CHECK NEXT EST ENTRY
- SB2 B2+B1
- BX4 X0*X3
- EQ B2,B6,IBO15 IF END OF EST
- PL X3,IBO3 IF NOT MASS STORAGE DEVICE
- LX4 3
- SA1 X4+DILL FETCH DRIVER WORD FROM MST
- LX1 59-22
- PL X1,IBO3 IF NOT BUFFERED DEVICE
- MX0 -11
- LX3 -12
- IBO4 SA5 A5+B1
- ZR X5,IBO2 IF END OF TABLE (NOT BUFFERED DEVICE)
- BX6 X5-X3
- BX6 -X0*X6
- NZ X6,IBO4 IF NO DEVICE MATCH
- BX6 -X0*X3
- BX7 X5
- SA6 IBOK DEVICE CODE
- MX2 -6
- LX1 22-59
- SA7 IBOQ SAVE DRIVER NAME
- BX6 -X2*X1 ALGORITHM INDEX
- SX2 X6-AIAB
- NG X2,IBO4.1 IF NOT DAS DEVICE
- SX2 X6-AIAE
- PL X2,IBO4.1 IF NOT DAS DEVICE
- SA2 A1+STLL-DILL
- PL X2,IBO4.1 IF FORMAT NOT PENDING
- SX6 B0+
- IBO4.1 SA6 IBOF SET DAS FORMAT PENDING FLAG
- SA2 A1+DDLL-DILL
- MX6 -3
- BX7 X2
- LX2 -48
- BX6 -X6*X2 NUMBER OF UNITS - 1
- SX6 X6+B1
- LX3 12-24
- SA7 IBOG UNIT LIST
- LX2 -6
- MX7 -3
- BX7 -X7*X2
- SA7 IBOR EQUIPMENT (CONTROLLER) NUMBER
- BX1 -X0*X3
- LX3 24-36
- SA6 IBOH NUMBER OF UNITS
- BX3 -X0*X3
- LX1 12
- SA2 A5+IBOS-IBOA SET READ AHEAD PARAMETERS
- BX6 X1+X3
- SA6 IBOM CHANNEL LIST
- LX7 X2
- SA2 A1+BDLL-DILL
- MX6 -30
- LX6 18
- BX2 -X6*X2
- BX7 X2+X7
- SA1 A1+ *DILL* WORD OF CURRENT MST
- SA7 A2
- MX0 -12
- LX1 -24
- BX7 -X0*X1 PRIOR PARTITION EST ORDINAL
- SA7 IBOT FLAG WHETHER *PUT* PREVIOUSLY ESTABLISHED
- ZR X7,IBO5 IF NO PRIOR PARTITION
- BX1 X0*X1 CLEAR ORDINAL FIELD
- CX3 X7,EST CONVERT EST ORDINAL TO OFFSET
- TA2 X3+EQDE,EST GET PRIOR PARTITION EST ENTRY
- BX2 -X0*X2
- LX2 3 PRIOR PARTITION MST ADDRESS
- SA2 X2+DILL *DILL* WORD OF PRIOR PARTITION MST
- LX2 -24
- BX2 -X0*X2 *PUT* ORDINAL FROM PRIOR PARTITION MST
- BX7 X1+X2 MERGE AND STORE *PUT* ORDINAL
- LX7 24
- SA7 A1+
- IBO5 SA2 IBOH NUMBER OF UNITS
- ZR X2,IBO2 IF NO MORE UNITS
- SX6 X2-1
- SA6 A2
- SB3 B0 PRESET NO CHANNELS PROCESSED
- SA2 IBOM SET CHANNELS FOR UNIT PROCESSING
- SA1 IBOT
- BX6 X2
- SA6 IBOI
- NZ X1,IBO8 IF *PUT*(S) ALREADY ESTABLISHED
- SA1 IBOB NEXT AVAILABLE PUT ENTRY
- SX6 X1+PUTL
- SA6 A1+
- SA2 IBOG UNIT LIST
- MX6 -6
- BX6 -X6*X2 NEXT UNIT
- SA6 IBOL UNIT NUMBER
- AX2 6
- BX7 X2
- SA7 A2
- SX2 B2 EST ORDINAL
- LX6 48
- LX2 36
- SA4 IBOR EQUIPMENT (CONTROLLER) NUMBER
- BX6 X2+X6
- LX4 54
- BX6 X4+X6
- MX0 -6
- SA6 X1+UNCT UNIT CONTROL WORD OF *PUT*
- SA2 IBOF
- NZ X2,IBO5.1 IF NOT DAS DEVICE WITH FORMAT PENDING
- MX7 1
- LX7 16-59
- SA7 X1+PILL SET *FORMAT* SPECIAL REQUEST FLAG
- IBO5.1 SA1 IBOQ NUMBER OF PARTITIONS AND SECTORS/BUFFER
- SA2 IBOC FWA OF NEXT AVAILABLE HAT ENTRY
- MX3 6
- LX1 42
- SX4 HATLE
- BX3 X3*X1 PHYSICAL SECTORS PER I/O BUFFER
- BX1 -X0*X1 NUMBER OF PARTITIONS
- IX6 X1*X4 *HAT* SPACE FOR ALL PARTITIONS OF DEVICE
- IX7 X2+X6
- LX2 24
- SA7 A2 NEXT FWA OF NEXT AVAILABLE HAT
- SX6 B1
- BX2 X3+X2
- IX6 X4-X6 HASHING MASK
- LX6 42
- BX6 X6+X2
- SA6 A6+HSCT-UNCT HASH TABLE CONTROL
- TX7 A6-HSCT,-PUT COMPUTE PUT ORDINAL
- AX7 PUTLS
- SA3 A3 EST ENTRY
- MX6 -12
- BX3 -X6*X3
- LX3 3 MST ADDRESS
- SA1 X3+DILL *PUT* ORDINAL OF FIRST UNIT IN CHAIN
- LX1 -24
- BX5 -X6*X1
- NZ X5,IBO6 IF MORE UNITS IN CHAIN
- BX7 X7+X1 SET *PUT* ORDINAL IN MST FOR FIRST UNIT
- LX7 24
- SA7 A1
- EQ IBO8 PROCESS CHANNELS
- IBO6 LX5 PUTLS
- TA1 X5+HSCT,PUT CHECK NEXT *PUT* IN CHAIN
- BX5 -X6*X1
- NZ X5,IBO6 IF NOT END OF CHAIN
- BX7 X7+X1 SET CURRENT *PUT* ORDINAL
- SA7 A1
- * PROCESS CHANNELS.
- IBO8 SA2 IBOI
- MX0 -6
- BX1 -X0*X2 EXTRACT ONE CHANNEL
- BX7 X2
- AX7 12 REMOVE CHANNEL FROM LIST
- SA7 IBOI
- ZR B3,IBO9 IF NO CHANNELS PROCESSED
- ZR X2,IBO5 IF NO CHANNEL PRESENT
- IBO9 SA2 IBOD FWA OF NEXT AVAILABLE *CCT*
- TX3 CCT FWA OF *CCT*
- IBO10 BX6 X2-X3
- ZR X6,IBO11 IF END OF CURRENT CCT-S
- SA4 X3+CCNT
- LX4 -36
- BX7 -X0*X4
- BX6 X1-X7
- ZR X6,IBO12 IF CHANNEL MATCH
- SX3 X3+CCTL ADVANCE *CCT* ADDRESS
- TNO /PRESET/IBO10,IHPFMD IF NO 819 DEVICES
- LX4 -6
- BX7 -X0*X4
- BX6 X1-X7
- ZR X6,IBO12 IF CHANNEL MATCH
- EQ IBO10 CONTINUE SEARCH
- IBO11 BX7 X1 CHANNEL
- LX7 36
- SA7 X2+CCNT CREATE NEW *CCT* ENTRY
- SX7 X2+CCTL ADVANCE CCT ADDRESS
- SA7 A2
- SA2 IBOQ DRIVER PP NAME(S)
- SX7 40B
- BX7 X7*X1
- ZR X7,IBO11.1 IF NOT A CONCURRENT CHANNEL
- LX2 18 SET FOR CONCURRENT PP DRIVER
- IBO11.1 AX2 42 REMOVE ALL BUT PP NAME
- LX2 42 (CODE ASSUMES VALID PP NAME)
- BX7 X2+X1 MERGE PP NAME AND CHANNEL NUMBER
- TX2 X3,-CCT
- LX2 30-CCTLS *CCT* ORDINAL
- BX7 X7+X2
- SA7 X3+CUN1
- IBO12 SB3 B3+B1 ADVANCE CHANNEL PROCESSED
- TNO /PRESET/IBO14,IHPFMD IF NO 819 DEVICES
- SA2 IBOL UNIT NUMBER
- TX7 A6-HSCT,-PUT
- AX7 PUTLS *PUT* ORDINAL
- SX1 12 COMPUTE BYTE POSITION
- IX1 X1*X2
- SB4 X1
- SB5 B4-4*12
- NG B5,IBO13 IF UNITS 0 - 3
- SB4 B5
- SX3 X3+CUN2-CUN1
- IBO13 SA1 X3+CUN1
- LX7 B4 POSITION PUT ORDINAL
- BX7 X7+X1
- SA7 A1
- IBO14 LE B3,B1,IBO8 IF BOTH CHANNELS NOT PROCESSED
- EQ IBO5 PROCESS NEXT UNIT
- * INITIALIZE CONTROL BUFFERS.
- IBO15 SA0 IBOE READ IBDT
- TX0 ETLT*100B+IBDT,ECLT
- TX0 X0,TCNT
- SX1 A0
- LX1 30
- BX0 X0+X1
- RE MXMF
- + SA1 A0-B1
- SA2 MMFL
- MX0 12
- SB2 MXMF
- IBO16 SA1 A1+B1 SEARCH FOR ID
- BX3 X1-X2
- BX3 X0*X3
- ZR X3,IBO17 IF ID MATCH
- SB2 B2-B1
- NZ B2,IBO16 IF NOT END OF IBDT
- EQ * HANG - ID NOT FOUND
- IBO17 MX0 -12
- LX1 -12
- BX7 -X0*X1 FWA OF I/O BUFFERS
- TLX7 9,TNSC
- SB6 B1
- SX3 PSLB
- LX3 9
- TB2 1,NIOB
- SB3 IOLK+CBTL
- IBO18 TA7 B3,CBT I/O BUFFER ADDRESS
- SX6 B1
- LX6 21
- SA6 A7+HSLK-IOLK LIST INDEX
- IX7 X7+X3 INCREMENT I/O BUFFER ADDRESS
- SX0 B6-B1
- SB6 B6+B1
- SX6 B6
- LX0 36
- LX6 24
- BX6 X6+X0
- SA6 A6+LSLK-HSLK CONTROL BUFFER LINK(S)
- SB3 B3+CBTL NEXT BUFFER
- LT B6,B2,IBO18 IF MORE BUFFERS
- AX6 36
- LX6 36
- SA6 A6 CLEAR LAST LINK ON LIST
- SX7 B6-B1
- SX2 B1
- LX7 18
- BX2 X7+X2
- LX7 18
- BX7 X2+X7
- TA7 EMTB SET EMPTY LIST CONTROL WORD
- SA0 B7 RESTORE (A0)
- * PROCESS SYSTEM DEVICE(S).
- MX0 -12 SET UP SYSTEM DEVICE TABLES
- SB3 B0
- SX7 NOPE INITIALIZE EST ORDINAL FOR SEARCH
- IBO19 CX1 X7,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST READ EST ENTRY
- PL X1,IBO20 IF NOT MASS STORAGE DEVICE
- BX2 X1
- LX1 59-58
- PL X1,IBO20 IF NOT SYSTEM DEVICE
- SA7 /BUFIO/RDBA+B3 SET EST ORDINAL IN TABLE
- BX6 -X0*X2
- LX6 3
- SX6 X6+DALL
- SA6 /BUFIO/RDBB+B3
- SB3 B3+1 ADVANCE INDEX
- IBO20 SX7 X7+B1 ADVANCE EST ORDINAL
- SA1 IBOP
- IX1 X7-X1
- NG X1,IBO19 IF NOT END OF MASS STORAGE DEVICES
- SX7 B0+
- SA7 /BUFIO/RDBB+B3 TERMINATE TABLE
- GT B3,B1,IBO IF MORE THAN ONE SYSTEM DEVICE
- SA1 IBOO
- BX6 X1
- SA6 /BUFIO/RDB14
- EQ IBO RETURN
- TBLM SPACE 4,10
- ** TBLM - GENERATE TABLE OF BUFFERED I/O PARAMETERS.
- PURGMAC TBLM
- TBLM MACRO EQ
- .A IFGE AI_EQ,AIBB
- .B IFLT AI_EQ,AIBD
- VFD 18/3R"NPP_EQ",18/3R"CPP_EQ",6/PNUN_EQ,6/PSBF_EQ,12/2R_EQ
- IBOS RMT
- VFD 42/0,6/BCT_EQ,6/RAT_EQ,6/RBT_EQ
- IBOS RMT
- .B ENDIF
- .A ENDIF
- ENDM
- ** BUFFERED I/O DEVICE SUPPORT TABLE *IBOA*.
- *
- *T,IBOA 18/ NPP, 18/ CPP, 6/ PUN, 6/ SS, 12/ DM
- *
- *
- * NPP NIO PP DRIVER NAME.
- * CPP CIO PP DRIVER NAME.
- * PUN PARTITIONS PER PHYSICAL DEVICE.
- * SS PHYSICAL SECTOR SIZE RELATIVE TO I/O BUFFER SIZE.
- * DM DEVICE MNEMONIC.
- IBOA BSS 0
- LIST G
- TBL "MSEQ"
- CON 0
- ** BUFFERED I/O DEVICE SUPPORT TABLE *IBOS*.
- *
- *T,IBOS 42/ , 6/ BC, 6/ RT, 6/ RB
- *
- *
- * BC DEFAULT BUFFER COUNT.
- * RT READ-AHEAD THRESHOLD (NTH BUFFER IN).
- * RB DEFAULT READ BUFFER THRESHOLD.
- *
- * NOTE - TABLE *IBOS* PARALLELS TABLE *IBOA*.
- IBOS BSS 0
- IBOS HERE
- LIST *
- PURGMAC TBLM
- IBOB TVFD 60/PUTL,PUT CURRENT LWA+1 OF *PUT*
- IBOC TVFD 60/0,HAT CURRENT LWA+1 OF *HAT*
- IBOD TVFD 60/0,CCT CURRENT LWA+1 OF *CCT*
- IBOE BSS MXMF *IBDT* BUFFER
- IBOF CON 1 ZERO IF 583X DEVICE WITH FORMAT PENDING
- IBOG CON 0 UNIT LIST
- IBOH CON 0 NUMBER OF UNITS
- IBOI CON 0 CHANNELS (DURING UNIT PROCESSING)
- IBOK CON 0 DEVICE TYPE (CODE)
- IBOL CON 0 UNIT NUMBER
- IBOM CON 0 CHANNELS
- IBOO SB0 0 NO OPERATION(S)
- SB0 0
- IBOP CON 0 LAST MASS STORAGE ORDINAL + 1 (*SSP*)
- IBOQ CON 0 SAVE AREA FOR BUFFERED I/O DRIVER NAME
- IBOR CON 0 EQUIPMENT (CONTROLLER) NUMBER
- IBOT CON 0 ZERO IF *PUT* NOT ALREADY ESTABLISHED
- RBS SPACE 4,10
- ** RBS - RECOVER BUFFER STATUS TABLES.
- *
- * EXIT READ ONLY ACCESS AND *MTE* REQUEST FLAGS CLEARED.
- *
- * USES X - 0, 1, 2, 3, 6, 7.
- * A - 1, 3, 7.
- * B - 2, 3, 4.
- RBS PS ENTRY/EXIT
- SA1 BIOMMF
- ZR X1,RBS IF NO SHARED DEVICES PRESENT
- SA1 IBOP
- SB2 NOPE-1
- SB3 X1+ LAST MASS STORAGE ORDINAL + 1
- RBS1 SB2 B2+B1
- EQ B2,B3,RBS IF ALL MASS STORAGE EQUIPMENTS CHECKED
- SX1 B2
- CX2 X1,EST
- TA1 X2+EQDE,EST
- MX0 -12
- SX7 5040B
- BX2 -X0*X1
- LX1 12
- BX1 X7*X1
- IX1 X1-X7
- NZ X1,RBS1 IF NOT SHARED BUFFERED MASS STORAGE DEVICE
- LX2 3 SET MST ADDRESS
- SA1 X2+BDLL GET BST POINTER
- LX1 -24
- SA3 RBSA GET WRITE ACCESS MASK
- SA1 X1-1
- SB4 BSTL
- RBS2 SA1 A1+B1 GET BST WORD
- SB4 B4-B1
- ZR B4,RBS1 IF END OF BST
- BX6 X3*X1
- BX7 X3*X1 PRESERVE WRITE ACCESS
- LX6 -1
- BX7 X7+X6 SET READ ACCESS WITH WRITE ACCESS
- SA7 A1 UPDATE BST
- EQ RBS2 PROCESS NEXT BST WORD
- RBSA DATA 44444444444444440000B
- RBT SPACE 4,10
- ** RBT - RECOVER BUFFERED I/O TABLES.
- *
- * EXIT (EFRL) = 2000B IF ERROR FOUND DURING RECOVERY.
- *
- * CALLS RBS, RCB, VUQ, VWL.
- RBT9 SA1 EFRL SET ABORT FLAG
- SX6 2000B
- BX6 X6+X1
- SA6 A1
- RBT PS ENTRY/EXIT
- TA1 IBSP,BDT INITIALIZE TABLE ADDRESS
- RBT1 SA2 A1+B1 READ NEXT ENTRY
- MX3 6
- LX3 18-54
- BX6 -X3*X1 CLEAR INTERLOCKS
- SA6 A1
- MX7 12
- BX6 X7*X1 NUMBER OF ENTRIES IN CURRENT TABLE (NE)
- MX7 -6
- LX1 18
- LX6 12
- TB3 A1-PUTP,-BDT
- ZR B3,RBT2 IF *PUT* POINTER
- SB3 B3+PUTP-FTTP
- ZR B3,RBT2 IF *FTT* POINTER
- SB3 B3+FTTP-CBTP
- RBT2 NZ B3,RBT3 IF NOT *CBT* POINTER
- SX6 X6+1
- RBT3 BX5 -X7*X1 LENGTH OF ENTRY (LE)
- LX1 18
- MX7 -18
- IX3 X6*X5 NE*LE
- BX4 -X7*X1 TABLE LENGTH (LT)
- IX3 X4-X3
- NZ X3,RBT9 IF (NE*LE) .NE. (LT)
- TB3 A1-CBTP,-BDT
- ZR B3,RBT4 IF LAST ENTRY IN TABLE
- LX1 24
- BX3 -X7*X2 FWA OF NEXT TABLE
- BX5 -X7*X1 FWA OF CURRENT TABLE
- IX6 X5+X4 FWA + LT
- BX7 X6-X3
- NZ X7,RBT9 IF (FWA+LT) .NE. (NEXT FWA)
- SA1 A2
- EQ RBT1 LOOP
- RBT4 RJ VUQ VALIDATE UNIT I/O QUEUES
- RJ VWL VALIDATE WRITE LIST
- RJ RCB RECOVER CBT
- NZ X6,RBT9 IF ERROR FOUND
- RJ RBS RECOVER BUFFER STATUS TABLES
- * CLEAN UP CHANNEL CONTROL TABLE(S).
- TA1 CCTP,BDT GET TABLE DESCRIPTOR
- LX1 -24
- SB2 X1 LENGTH OF TABLE
- SB3 B0 INITIALIZE INDEX
- MX0 -48
- SX6 B0
- RBT5 TA6 B3+CREQ,CCT CLEAR ENTRY
- TA1 B3+CCNT,CCT
- BX7 -X0*X1
- SA7 A1
- SB3 B3+CCTL INCREMENT INDEX
- LT B3,B2,RBT5 IF NOT END OF TABLE
- * CLEAN UP PHYSICAL UNIT AND FUNCTION TIMEOUT TABLES.
- TA1 PUTP,BDT GET TABLE DESCRIPTOR
- LX1 -24
- SB2 X1 LENGTH OF TABLE
- SB3 PUTL INITIALIZE INDEX
- MX0 -54
- TNO RBT5.1,IH819 CLEAR READ RECOVERY INDEX FOR 819-S
- MX0 -57 PRESERVE EQUIPMENT NUMBER FOR 9853/*DAS*
- RBT5.1 MX2 27
- MX3 18
- LX2 24+27
- LX3 12+0
- BX2 X2+X3
- BX7 X7-X7
- RBT6 TA1 B3+UNCT,PUT CLEAR INTERLOCK AND FLAGS
- SX4 B3
- BX6 -X0*X1
- TA3 B3+HSCT,PUT
- AX4 PUTLS-FTTLS
- SA6 A1
- TA7 X4,FTT CLEAR FTT ENTRY
- BX6 X2*X3
- SA6 A3
- SB3 B3+PUTL INCREMENT INDEX
- LT B3,B2,RBT6 IF NOT END OF TABLE
- * CLEAN UP PLT.
- SB2 PLTL LENGTH OF TABLE
- SB3 B0+ INITIALIZE INDEX
- SX7 B0+
- SX6 B0+
- RBT8 TA7 B3,PLT CLEAR TABLE
- TA6 B3+1,PLT
- SB3 B3+2
- LT B3,B2,RBT8 IF NOT END OF TABLE
- EQ RBT RETURN
- RCB SPACE 4,15
- ** RCB - RECOVER CBT.
- *
- * EXIT (X6) = 0 IF NO ERROR.
- * (X6) .NE. 0 IF ERROR DETECTED.
- * BUFFER INTERLOCKS CLEARED.
- * I/0 ACTIVITY FLAGS AND UNIT QUEUE LINKAGE CLEARED.
- * READ BUFFERS DROPPED AND LINKED TO EMPTY LIST.
- * WRITE BUFFERS LINKED TO WRITE LIST.
- *
- * USES X - ALL.
- * A - 0, 1, 2, 3, 4, 6, 7.
- * B - 2, 3, 6, 7.
- *
- * CALLS /BUFIO/DCH, /BUFIO/LCC.
- RCB9 SX6 1 SET ERROR STATUS
- RCB PS ENTRY/EXIT
- * CLEAN UP BUFFER MANAGER LIST POINTERS.
- SX6 B0+
- TA6 EMTB CLEAR EMPTY LIST POINTER
- TA6 DWTB CLEAR DATA WRITTEN LIST POINTER
- TA6 DRDB CLEAR READ LIST POINTER
- TA6 WRTB CLEAR WRITE LIST POINTER
- * DETERMINE BASE ADDRESS OF DATA BUFFERS.
- SB7 A0+ SAVE (A0)
- SA0 IBOE CM BUFFER
- TX0 ETLT*100B+IBDT,ECLT
- TX0 X0,TCNT *IBDT* ADDRESS
- SX1 A0
- LX1 30
- BX0 X0+X1
- RE MXMF READ *IBDT*
- EQ RCB9 RETURN ERROR ON HALF-EXIT
- SA3 A0-B1
- SA4 MMFL GET MACHINE ID
- MX0 12
- SB2 MXMF LENGTH OF *IBDT*
- SA0 B7 RESTORE (A0)
- RCB1 SA3 A3+1 NEXT ENTRY
- BX5 X3-X4 CHECK MACHINE ID
- BX5 X0*X5
- ZR X5,RCB2 IF THIS MACHINE
- SB2 B2-1
- NZ B2,RCB1 IF NOT END OF TABLE
- EQ RCB9 RETURN ERROR
- RCB2 MX0 -12
- LX3 -12
- BX7 -X0*X3
- TLX7 9,TNSC FWA OF I/O BUFFERS
- SB3 RCBA SET REGISTER SAVE BUFFER ADDRESS
- SX1 LSLB*100B
- SX0 B0+ INITIALIZE BUFFER ORDINAL
- IX7 X7-X1 INITIALIZE BUFER ADDRESS
- * CHECK NEXT BUFFER.
- RCB3 SX1 LSLB*100B
- SX0 X0+B1 ADVANCE CBT ORDINAL
- IX7 X7+X1 ADVANCE DATA BUFFER ADDRESS
- BX5 X0
- TX6 X0-1,-NIOB
- LX5 CBTLS SET CBT OFFSET
- ZR X6,RCB IF ALL BUFFERS PROCESSED
- TA1 X5+IOLK,CBT
- TA2 X5+HSLK,CBT
- SX6 B0+
- TA6 X5+LSLK,CBT CLEAR LIST LINKAGE AND FLAGS
- MX6 -48
- LX1 59-57
- BX6 -X6*X2 CLEAR *HSLK* FLAGS
- SA6 A2
- PL X1,RCB5 IF NO WRITE DATA IN BUFFER
- * PROCESS WRITE BUFFER.
- LX1 59-54-59+57
- NG X1,RCB4 IF RECOVERED FLAG SET
- SA2 REML SET ERROR FLAG
- SX6 WLNL *NON-LINKED WRITE BUFFER.*
- BX6 X6+X2
- SA6 A2
- RCB4 LX1 54-54-59+54 RESTORE *IOLK*
- MX3 -24
- BX3 -X3*X1 DATA BUFFER ADDRESS
- BX3 X3-X7
- NZ X3,RCB9 IF DATA BUFFER ADDRESS INCORRECT
- SX6 B1
- LX6 57-0
- BX6 X6+X7 SET WRITE FLAG AND BUFFER ADDRESS
- SA6 A1 UPDATE *IOLK*
- TX1 WRTB SET WRITE LIST
- EQ RCB8 LINK BUFFER TO WRITE LIST
- * PROCESS READ BUFFER.
- RCB5 LX1 59-54-59+57
- PL X1,RCB6 IF RECOVERED FLAG NOT SET
- SA2 REML SET RECOVERY ERROR
- SX6 WLRD *READ DATA ON WRITE LIST.*
- BX6 X2+X6
- SA6 A2
- RCB6 SX6 B0
- TA6 X5+PAD1,CBT CLEAN UP BUFFER
- SA6 A6+B1
- ERRNZ PAD2-PAD1-1
- SA6 A6+B1
- ERRNZ PAD3-PAD2-1
- SA6 A6+B1
- ERRNZ PAD4-PAD3-1
- TA7 X5+IOLK,CBT SET BUFFER ADDRESS
- SB6 RCB7 SET *DCH* RETURN ADDRESS
- EQ /BUFIO/DCH DELINK BUFFER FROM HASH LIST
- RCB7 TX1 EMTB SET EMPTY LIST
- * LINK BUFFER TO WRITE OR EMPTY LIST.
- RCB8 SB6 RCB3 SET *LCC* RETURN ADDRESS
- EQ /BUFIO/LCC SET LIST LINKAGE
- RCBA BSS 2 REGISTER SAVE BUFFER
- VUQ SPACE 4,10
- ** VUQ - VALIDATE UNIT I/O QUEUE(S).
- VUQ PS ENTRY/EXIT
- SA1 REML CLEAR PREVIOUS ERRORS
- MX7 48
- BX7 X7*X1
- SA7 A1
- * SCAN PUT(S), DELETING READ REQUEST(S) FROM QUEUE(S).
- TA1 PUTP,BDT TABLE DESCRIPTOR
- LX1 -24
- SB2 X1 LENGTH OF TABLE(S)
- SB6 PUTL INITIALIZE INDEX
- MX6 -12
- VUQ1 TA2 B6+UNCT,PUT READ QUEUE CONTROL
- BX7 X7-X7
- SA7 A2+PILL-UNCT CLEAR PREVIOUS ERRORS, INTERLOCK, FLAGS
- MX7 24 CLEAR I/O QUEUE
- BX7 X7*X2
- SA7 A2
- LX2 -24
- BX3 -X6*X2
- LX2 24
- BX0 -X6*X2 FIRST
- LX0 CBTLS
- NZ X3,VUQ1.1 IF QUEUE SIZE .NE. 0
- * QUEUE SIZE IS ZERO - VERIFY IT IS EMPTY.
- MX3 -24
- BX2 -X3*X2
- ZR X2,VUQ6 IF FIRST AND CURRENT .EQ. 0
- SA3 A2+PILL-UNCT SET ERROR FLAG
- SX7 IOQS *I/O QUEUE SIZE.*
- LX7 48
- BX7 X7+X3
- SA7 A3
- VUQ1.1 ZR X0,VUQ IF FIRST .EQ. 0
- TA3 X0+IOLK,CBT
- LX3 -36
- BX2 -X6*X3
- NZ X2,VUQ8 IF BACKWARD LINK OF FIRST BUFFER .NE. 0
- VUQ2 TA3 X0+IOLK,CBT READ BUFFER
- LX3 -24
- BX7 X0
- BX0 -X6*X3 NEXT BUFFER
- ZR X0,VUQ3 IF END OF QUEUE
- AX7 CBTLS
- LX0 CBTLS
- TA4 X0+IOLK,CBT CHECK BACKWARD LINK OF NEXT BUFFER
- LX4 -36
- BX4 -X6*X4
- BX2 X4-X7
- NZ X2,VUQ8 IF BACKWARD LINK NOT CORRECT
- VUQ3 LX3 59-57+24
- PL X3,VUQ5 IF NOT WRITE DATA IN BUFFER
- * WRITE DATA FOUND IN BUFFER.
- SA4 A3+HSLK-IOLK GET *PUT* ORDINAL
- SX5 B6
- BX4 -X6*X4
- AX5 PUTLS
- BX4 X5-X4
- NZ X4,VUQ10 IF PUT ORDINAL INCORRECT
- LX3 59-54-59+57
- NG X3,VUQ8 IF RECOVERED FLAG ALREADY SET
- MX7 1
- BX7 X3+X7 SET RECOVERED FLAG
- LX7 54-59
- PL X7,VUQ8 IF I/O INTERLOCK NOT SET
- SA7 A3
- VUQ5 MX6 -12
- NZ X0,VUQ2 IF NOT END OF QUEUE
- VUQ6 SB6 B6+PUTL INCREMENT *PUT* INDEX
- LT B6,B2,VUQ1 IF NOT END OF *PUT*-S
- EQ VUQ RETURN
- VUQ8 SX7 IOQL * I/O QUEUE LINKAGE.*
- VUQ9 LX7 48
- SA3 A2+PILL-UNCT SET ERROR FLAG
- BX7 X7+X3
- SA7 A3
- EQ VUQ6 CHECK NEXT *PUT*
- VUQ10 SX7 IOQP * I/O QUEUE *PUT* ORDINAL.*
- EQ VUQ9 CONTINUE
- VWL SPACE 4,10
- ** VWL - VALIDATE WRITE LIST.
- VWL7 SA1 REML SET ERROR FLAG
- BX7 X7+X1
- SA7 A1
- VWL PS ENTRY/EXIT
- TA2 WRTB WRITE LIST POINTER(S)
- LX2 -36
- SB2 X2 BUFFER COUNT
- ZR B2,VWL IF NO WRITE BUFFERS
- TA1 WRTB
- SX3 X1 FIRST
- SB4 B0 PRESET BUFFER COUNT
- SX5 B0 PRESET BACKWARD LINK
- MX0 -12
- ZR X3,VWL3 IF FIRST BUFFER .EQ. 0
- VWL1 LX3 CBTLS
- TA3 X3+LSLK,CBT READ BUFFER
- LX3 -36
- BX4 -X0*X3
- BX5 X5-X4
- NZ X5,VWL3 IF BACKWARD LINK INCORRECT
- SA5 A3+IOLK-LSLK
- LX5 59-54
- NG X5,VWL3 IF RECOVERED FLAG ALREADY SET
- MX7 1
- BX7 X5+X7 SET RECOVERED FLAG
- LX7 59-57-59+54
- PL X7,VWL4 IF NOT WRITE DATA
- LX7 57-59
- NG X7,VWL5 IF I/O INTERLOCK SET
- SA7 A5
- SB4 B4+B1 COUNT BUFFER
- LX3 12
- BX3 -X0*X3
- TX5 A5-IOLK,-CBT
- AX5 CBTLS
- NZ X3,VWL1 IF FORWARD LINK .NE. 0
- NE B4,B2,VWL6 IF COUNT NOT CORRECT
- LX1 -18
- SX1 X1
- BX5 X1-X5
- ZR X5,VWL IF LAST POINTER CORRECT
- VWL3 SX7 WLLE * WRITE LIST LINKAGE.*
- EQ VWL7 CONTINUE
- VWL4 SX7 WLRD * READ DATA ON WRITE LIST.*
- EQ VWL7 CONTINUE
- VWL5 SX7 WLIB * INTERLOCKED BUFFER ON WRITE LIST.*
- EQ VWL7 CONTINUE
- VWL6 SX7 WLBC * WRITE LIST BUFFER COUNT.*
- EQ VWL7 CONTINUE
- CIR SPACE 4
- ** CIR - CLEAR INTERLOCKS.
- CIRX SA0 B3+ RESTORE (A0)
- CIR PS ENTRY/EXIT
- SA1 CIRA CHECK RECOVERY MODE
- SB2 1000B INTERLOCK RETRY COUNT
- SX1 X1-3
- NZ X1,CIR IF NOT LEVEL THREE RECOVERY
- SB3 A0+ SAVE (A0)
- * CLEAR FLAG REGISTER BITS IF MMF PRESENT.
- TX5 MMK
- SB4 CIRI
- CIR1 SB6 CIR2
- TJP (/ECS/SFR,MMF,/PRESET/CIR11)
- CIR2 SA0 /MMF/MBUF
- TX0 ETLT*100B+FRET,ECLT
- TX0 X0,TCNT
- SX2 A0+
- LX2 30
- BX0 X0+X2
- RE 18
- EQ CIR9 IF PARITY ERROR
- SB6 CIR5
- TSX0 (402B,ESM,6B)
- LX0 21
- BX0 X0+X5
- ZR X7,CIR4 IF INTERLOCK OBTAINED
- SA2 A0+B4
- LX2 6
- SX2 X2
- AX2 6
- TX2 X2,-MIN
- NZ X2,CIR4 IF INTERLOCK HELD BY THIS MACHINE
- SB2 B2-B1 DECREMENT RETRY COUNT
- PL B2,CIR1 IF NOT END OF RETRY COUNT
- JP CIR11
- CIR3 SX2 X5+.TRTI CLEAR TRTI INTERLOCK
- TSX0 (403B,ESM,7B)
- LX0 21
- BX0 X0+X2
- CIR4 RE /ECS/FRWC
- EQ CIR3
- SB4 18
- CIR5 SB4 B4-B1
- SA0 /MMF/MBUF
- SA3 A0+B4
- NG B4,CIR9 IF END OF FLAG BITS
- AX3 12
- BX3 X5*X3
- NZ X3,/ECS/CFR IF INTERLOCK HELD BY THIS MACHINE
- EQ CIR5
- * CLEAR DEVICE INTERLOCKS FOR SHARED DEVICES IN ECS.
- CIR9 TX5 MIN SET MACHINE INDEX
- MX7 -6
- SB7 B0-B1 SET START OF EST SEARCH
- SA0 /MMF/MBUF
- SB5 CIR10 *SSD* RETURN
- JP /PROGRAM/SSD SEARCH FOR SHARED DEVICE
- CIR10 NG B7,CIR11 IF END OF SHARED DEVICES
- SX1 A0+
- SX0 X4+SDGL
- LX1 30
- BX0 X0+X1
- RE 1 READ DEVICE INTERLOCK
- JP /PROGRAM/SSD
- SA1 A0
- BX2 -X7*X1
- AX2 B1
- BX2 X5-X2
- NZ X2,/PROGRAM/SSD IF NOT INTERLOCKED BY THIS MACHINE
- BX6 X7*X1
- SA6 A1
- WE 1 WRITE CLEARED INTERLOCK
- JP /PROGRAM/SSD
- CIR11 SA2 ESTP SET LAST MASS STORAGE ORDINAL + 1
- MX4 -12
- AX2 12
- BX2 -X4*X2
- SB7 X2+
- CIR12 ZR B7,CIR13 IF END OF DEVICES
- SX2 B7-B1
- CX1 X2,EST CONVERT EST ORDINAL TO OFFSET
- TA1 X1+EQDE,EST READ EST ENTRY
- SB7 B7-B1
- BX2 -X4*X1
- PL X1,CIR12 IF NOT MASS STORAGE
- LX2 3
- MX6 12
- SA1 X2+DULL CLEAR INTERLOCKS
- LX6 -12
- BX6 -X6*X1
- SA6 A1
- BX6 X6-X1
- SA1 X2+TDGL
- IX6 X1-X6
- SA6 A1
- EQ CIR12
- * CLEAR INTERLOCKS AND EXIT.
- CIR13 NG B2,CIRX IF NO INTERLOCK TO CLEAR
- SB6 CIRX
- SB4 CIRI
- TJP (/ECS/CFR,MMF,/PRESET/CIRX) CLEAR INTERLOCK IF MMF
- CIRA CON 0 RECOVERY MODE
- CLE SPACE 4,10
- ** CLE - CLEAR ECS.
- *
- * FOR UEM AND ESM, WRITE MEMORY WITH ALL ZEROS. FOR ECS AND
- * LCME, WRITE MEMORY WITH ALL ONES AND REWRITE WITH ALL ZEROS.
- *
- * EXIT (A0) RESTORED.
- * (X0) RESTORED.
- *
- * USES A - 0, 1, 2, 4, 6, 7.
- * B - 2, 4, 5, 6, 7.
- * X - ALL.
- CLE15 SA1 CCMB
- NZ X1,CLE IF NOT LARGE MEMORY 990
- SA0 CLEE
- LX2 X0 SAVE (X0)
- BX6 X6-X6
- SX0 A0 SET BUFFER ADDRESS
- SB6 377B
- LX0 30
- CLE16 SA6 A0+B6 CLEAR BUFFER
- SB6 B6-B1
- PL B6,CLE16 IF MORE TO CLEAR
- WE 400B
- + SA0 B2 RESTORE REGISTERS
- BX0 X2
- SA7 CLEA SET *CLE* RAN INDICATOR
- CLE PS ENTRY/EXIT
- SA1 CLEA
- NZ X1,CLE IF *CLE* HAS BEEN RUN
- SA1 EMS CHECK FOR FULL INITIALIZE PENDING
- MX7 -3
- SB2 A0
- ZR X1,CLE15 IF NO XM EQUIPMENT
- SA1 X1+DILL
- AX1 18 EXTRACT XM TYPE
- BX7 -X7*X1
- SA0 CLEE
- BX6 X0 SAVE (X0)
- SX7 X7-5
- SA6 A0-B1
- NZ X7,CLE1 IF NOT ESM
- SA2 ESM
- SA4 CLEB
- LX2 3+21 FUNCTION TO MATCH *POWER ON* STATUS
- BX0 X4+X2
- RE /ECS/FRWC
- CLE1 SA1 A1+STLL-DILL
- SX7 X7+1
- AX7 60 = 0 FOR ESM/UEM, -0 FOR ECS/LCME
- LX1 59-LIAL
- PL X1,CLE9 IF FULL INITIALIZE NOT SELECTED
- SA2 MECNF
- SX4 400B EXTENDED MEMORY INCREMENT
- LX2 1
- SB4 X2 NUMBER OF 400 WORD BLOCKS TO TEST
- SA1 CLEC
- SB5 B0
- BX6 X1 SET MESSAGE FOR DISPLAY
- SA6 DSCP*CPAS+MS1W
- SA1 A1+1
- SA2 A1+1
- BX6 X1
- MX3 -3
- SA6 A6+B1
- BX6 X2
- SA1 A2+B1
- SA6 A6+B1
- BX6 X1
- SA6 A6+B1
- CLE2 SX0 A0 SET ADDRESSES FOR TRANSFER
- SB6 377B
- LX0 30
- CLE3 SA7 A0+B6 STORE TEST PATTERN IN BUFFER
- SB6 B6-B1
- PL B6,CLE3 IF NOT END OF BUFFER
- CLE4 SX1 B5
- BX6 X2
- LX1 2 EXTENDED MEMORY ADDRESS / 100B
- SB7 B0
- CLE5 BX5 -X3*X1 EXTRACT NEXT DIGIT
- AX1 3
- SX5 X5+1R0-1R
- LX5 B7 CONVERT NUMBER FOR MESSAGE
- SB7 B7+6
- IX6 X6+X5
- NZ X1,CLE5 IF MORE DIGITS
- SA6 DSCP*CPAS+MS1W+2
- WE 400B
- - EQ * (HANG ON HALF-EXIT)
- + SB5 B5+B1 INCREMENT BLOCK COUNT
- IX0 X0+X4
- NE B5,B4,CLE4 IF NOT END OF EXTENDED MEMORY
- CLE6 SX1 B5-B1
- BX6 X2
- LX1 2 EXTENDED MEMORY ADDRESS / 100B
- SB7 B0
- BX7 -X7
- SA7 CLEE INSURE COMPARE ERROR IF NO TRANSFER
- BX7 -X7
- CLE7 BX5 -X3*X1 EXTRACT NEXT DIGIT
- AX1 3
- SX5 X5+1R0-1R
- LX5 B7 CONVERT NUMBER FOR MESSAGE
- SB7 B7+6
- IX6 X6+X5
- NZ X1,CLE7 IF MORE DIGITS
- SB6 377B
- SA6 DSCP*CPAS+MS1W+2
- IX0 X0-X4 DECREMENT EXTENDED MEMORY ADDRESS
- SB5 B5-B1
- RE 400B FILL BUFFER
- - EQ * (HANG ON HALF-EXIT)
- CLE8 SA1 A0+B6
- SB6 B6-1
- BX1 X1-X7
- + NG X1,* IF COMPARE ERROR
- - NZ X1,* IF COMPARE ERROR
- PL B6,CLE8 IF NOT END OF BUFFER
- NZ B5,CLE6 IF NOT END OF EXTENDED MEMORY
- BX7 -X7
- SX6 B0
- PL X7,CLE2 IF BOTH PATTERNS NOT USED
- SA6 DSCP*CPAS+MS1W
- EQ CLE10 PROCESS *IBDT*
- * CHECK FOR CYBER 8XX MACHINE AND LEVEL 1 OR 2 DEADSTART.
- CLE9 SA1 MABL CHECK MACHINE TYPE
- SA4 CIRA GET RECOVERY LEVEL
- LX1 59-47
- NG X1,CLE14 IF NOT CYBER 170-8X5
- SX4 X4-1
- ZR X4,CLE10 IF LEVEL 1 DEADSTART
- SX4 X4-1
- NZ X4,CLE14 IF NOT LEVEL 2 DEADSTART
- * BUILD *IBDT* AND ENTER IN LABEL TRACK.
- CLE10 SA1 EEM CHECK FOR LINK DEVICE
- SA4 MMFL
- MX6 -9 MASK FOR EST ORDINAL
- AX4 36
- BX4 X4-X1
- BX4 -X6*X4
- SB4 1 (B4) = IBDT LIMIT
- SX6 1000B
- NZ X4,CLE11 IF NOT LINK DEVICE
- SB4 MXMF
- CLE11 SA1 TNSC
- SB7 60
- SA2 TCNT EXTENDED MEMORY SECTOR LIMIT
- SB5 X1
- SB7 B7-B5
- SA1 EMS GET TRACK COUNT FROM MST
- LX6 B5
- SA1 X1
- ERRNZ TDGL CODE DEPENDS ON VALUE
- SX4 20B*101B
- AX1 48
- LX4 B5
- SX6 X6-1
- IX1 X1*X4
- IX4 X1+X6
- AX4 9 FWA OF BUFFERS IS END OF DEVICE
- LX4 B7
- SA1 DSDL
- MX0 -12
- SB5 12
- LX6 X0,B5 POSITION MASK
- CLE12 SA1 A1+B1
- MX0 -12
- BX7 X6*X1 CLEAR FWA FIELD
- BX0 -X0*X1 LENGTH
- ZR X0,CLE13 IF NO I/O BUFFERS ON THIS MAINFRAME
- LX1 X4,B5 POSITION FWA
- BX7 X7+X1
- CLE13 SA7 A1
- IX4 X4+X0 NEW FWA
- SB6 A1-DSDL
- NE B4,B6,CLE12 IF NOT END OF *IBDT*
- SA0 DSDL+1 WRITE TO LABEL TRACK
- SA1 ECLT EXTENDED MEMORY LABEL TRACK ADDRESS
- SX0 X1+ETLT*100B+IBDT
- SX1 A0
- IX0 X0+X2
- LX1 30
- BX0 X0+X1
- WE B4
- CLE14 SX6 B1 SET *CLE* RAN INDICATOR
- BX7 X7-X7
- SA6 CLEA
- SA2 CLED RESTORE REGISTERS
- BX0 X2
- SA0 B2
- EQ CLE RETURN
- CLEA CON 0
- CLEB VFD 36/0,3/2,21/377B
- CLEC DATA C*TESTING EXTENDED MEMORY 00*
- CLED CON 0
- CLEE BSS 400B EXTENDED MEMORY PRESET BUFFER
- DBL SPACE 4
- ** DBL - DETERMINE BLOCKS LOADED.
- * *DBL* SETS THE CONDITION WORDS IN *TDBL* WHICH TELL IF A
- * BLOCK HAS BEEN LOADED. THESE CONDITION WORDS ARE USED FOR
- * SETTING THE CONDITIONAL VALUES IN THE *T* INSTRUCTIONS.
- *
- * EXIT TDBL IS SET ACCORDING TO THE BLOCKS LOADED.
- DBL PS ENTRY/EXIT
- SA1 TDBL-1 CONDITION WORDS TO SET
- SB2 BLKT LOADED BLOCK TABLE ADDRESS
- DBL1 SA1 A1+B1
- ZR X1,DBL IF END OF CONDITION WORDS
- SA2 B2-B1
- DBL2 SA2 A2+B1 READ LOADED BLOCKS
- BX6 X2-X1
- AX6 18
- BX7 X7-X7
- ZR X6,DBL1 IF BLOCK PRESENT
- NZ X2,DBL2 IF NOT END OF LOADED BLOCKS
- SA7 A1 CLEAR CONDITION WORD - BLOCK NOT PRESENT
- EQ DBL1
- ILD SPACE 4
- ** ILD - INITIALIZE MULTI-MAINFRAME LINK DEVICE.
- *
- * ENTRY (EFRL) = 30/,6/ LS,12/,12/ LT.
- * LS = 40, IF TO INITIALIZE LINK DEVICE.
- * LS = 20, IF TO PRESET LINK DEVICE.
- * LT = LABEL TRACK OF LINK DEVICE.
- *
- * EXIT ERROR CODES PASSED TO *RMS* IN (EFRL) -
- * 1 = EXTENDED MEMORY LABEL TRACK NOT FOUND.
- * 2 = RECOVERY DS. PREVENTED FOR THIS MACHINE ID.
- * 3 = MACHINE ID IN USE.
- * 4 = MMFL SLOT UNAVAILABLE.
- * 5 = EXTENDED MEMORY READ/WRITE PARITY ERRORS.
- * 6 = PRESET NOT ALLOWED.
- *
- * (B6) = ERROR CODE.
- ILD33 SX6 /LSPMMF/TMMF MERGE MMF TABLE ADDRESS IN *EFRL*
- LX6 36
- MX7 24
- BX7 -X7*X1
- BX6 X6+X7
- SA6 EFRL
- ILD PS ENTRY/EXIT
- SA1 DSSL SET RECOVERY LEVEL
- MX7 -2
- BX7 -X7*X1
- SA1 EFRL GET PRESET, INITIALIZE FLAGS
- SB2 X7
- SB6 B0
- SA2 LSPMMF CHECK FOR LSP LINK DEVICE
- NZ X2,ILD33 IF NO CPU PATH
- MX4 -12
- BX7 -X4*X1 EXTENDED MEMORY LABEL TRACK
- LX1 59-29
- SX6 2020B
- SA3 TNSC
- SB5 X3
- LX6 B5,X6
- MX4 -11
- BX0 -X4*X7
- LX3 X1,B1 POSITION INITIALIZE BIT
- SA0 /PROGRAM/PBUF SET ECS BUFFER ADDRESS
- IX0 X0*X6
- SX2 A0+
- LX2 30
- BX0 X2+X0
- NG X3,ILD2 IF INITIALIZE OF LINK DEVICE
- SA3 ILDA
- * SEARCH FOR LABEL TRACK.
- ILD1 RE 1 READ LABEL SECTOR LINK WORD
- NO IGNORE EXTENDED MEMORY ERROR
- + SA2 A0
- BX2 X2-X3
- ZR X2,ILD2 IF LABEL TRACK FOUND
- SX2 X7+1-LTKL
- IX0 X0+X6 ADVANCE LABEL TRACK ADDRESS
- SX7 X7+B1 ADVANCE LABEL TRACK NUMBER
- NZ X2,ILD1 IF NOT AT LIMIT OF LABEL TRACK SEARCH
- SB6 1
- EQ ILD10 RETURN ERROR STATUS
- ILD2 MX6 -24
- BX6 -X6*X0 SET LABEL TRACK ADDRESS IN PRESET TABLE
- SA7 A1 SET LABEL TRACK NUMBER IN EFRL
- SA6 ECLT
- ILD3 SX2 .PRSI SET PRESET INTERLOCK
- SA3 ESM
- SX0 400B
- NZ X3,ILD3.1 IF ESM ENABLED
- SX0 4B
- ILD3.1 LX0 21
- BX0 X0+X2
- RE /ECS/FRWC
- PL X1,ILD3 IF NOT PRESET
- SA3 MMFL
- BX7 X7-X7
- SB4 B1+B1
- PL X1,ILD11 IF NO PRESET OF LINK DEVICE
- * VALIDATE NO ACTIVITY IN ECS.
- SA4 TCNT
- IX4 X6+X4
- SX0 X4+ETLT*100B+SMET
- SX4 A0
- LX4 30
- BX0 X0+X4
- RE MXMF
- EQ ILD6 PRESET VALID IF EXTENDED MEMORY ERROR
- SA4 RTCL
- SB5 X4+1200 WAIT 1.2 SECONDS
- ILD4 CX4 X4 DELAY
- CX4 X4
- SA4 RTCL
- SB6 X4
- LT B6,B5,ILD4 IF NOT END OF WAIT
- SA0 A0+MXMF
- SB6 5
- SX4 MXMF
- LX4 30
- IX0 X0+X4
- RE MXMF
- EQ ILD9 RETURN EXTENDED MEMORY ERROR STATUS
- SB6 6 *PRESET NOT ALLOWED.*
- SA1 A0
- SB4 A1
- ILD5 SA1 A1-B1 VALIDATE THAT CLOCKS ARE THE SAME
- SA4 A1+MXMF
- SB5 A4
- BX1 X1-X4
- SA0 A1 RESET A0
- NZ X1,ILD9 IF MACHINE ACTIVE
- GT B5,B4,ILD5 IF MORE MACHINES TO CHECK
- SB6 5 SET EXTENDED MEMORY ERROR STATUS
- ILD6 BX1 X0 CLEAR FLAG REGISTER EXCEPT *PRSI*
- BX0 -X2
- MX6 -18
- BX0 -X6*X0
- SA2 ESM
- SX6 403B
- NZ X2,ILD6.1 IF ESM ENABLED
- SX6 7B
- ILD6.1 LX6 21
- BX0 X6+X0
- RE /ECS/FRWC
- EQ ILD9
- BX0 X1 RESTORE X0
- RJ CLE CLEAR ECS
- * CLEAR ENVIRONMENT SECTOR.
- SA3 A3 RESTORE (X3) = *MMFL*
- SB5 77B
- BX7 X7-X7
- ILD7 SA7 A0+B5 CLEAR SECTOR OF DATA
- SB5 B5-B1
- PL B5,ILD7 IF MORE TO CLEAR
- SX1 B1 SET MACHINE INDEX 1
- SX0 X0-SMET
- SX4 A0
- LX4 30
- BX0 X0+X4
- WE IBDT
- EQ ILD9 PROCESS ERROR
- SX1 1 SET MACHINE INDEX
- SB6 5 SET EXTENDED MEMORY ERROR RETURN
- * SX0 X0+MFET
- * WRITE MMFL WORD IN MFET SLOT.
- ILD8 SB5 X1+11 SET MACHINE INDEX
- SX4 B1
- IX0 X0-X4
- LX4 X4,B5 MACHINE MASK
- IX0 X0+X1 ADDRESS IN MFET
- IX4 X4+X1
- BX6 X3+X4 SET MACHINE MASK AND INDEX IN MMFL
- SA0 A3
- SA6 A3
- SX6 X0+SMET-MFET
- MX2 -24
- BX0 -X2*X0
- SX2 A0
- LX2 30
- BX0 X2+X0
- WE 1
- EQ ILD9 EXTENDED MEMORY ERROR
- IX0 X6-X1
- SA0 /MMF/ARMA INITIALIZE MACHINE CLOCK TEMPORARIES
- SX0 X0+B1 ADDRESS OF MACHINE CLOCKS
- MX2 -24
- BX0 -X2*X0
- SX2 A0
- LX2 30
- BX0 X0+X2
- RE MXMF
- EQ ILD9 EXTENDED MEMORY ERROR
- SB6 B0 CLEAR ERROR STATUS
- SA6 ECCM SET MACHINE CLOCK LOCATION
- * CLEAR FLAG REGISTER INTERLOCK AND RETURN IF NO ERROR.
- ILD9 SA2 ESM
- SX0 403B CLEAR FLAG BIT FUNCTION
- NZ X2,ILD9.1 IF ESM ENABLED
- SX0 7B
- ILD9.1 LX0 21
- SX2 .PRSI
- BX0 X0+X2
- RE /ECS/FRWC
- ILD10 SX7 B6 SET ERROR CODE
- SA7 EFRL
- ZR B6,ILD IF NO ERROR
- SX6 B0 CLEAR FURTHER MMF PROCESSING
- SA6 MMF
- EQ ILD RETURN
- * ASSIGN/RECOVER MMFL SLOT IN ENVIRONMENT TABLE.
- ILD11 SA2 TCNT
- IX2 X6+X2
- SX0 X2+ETLT*100B+MFET
- SX1 A0
- LX1 30
- BX0 X1+X0
- SB6 5 EXTENDED MEMORY ERROR FLAG
- MX4 24
- MX1 MXMF-1
- RE MXMF
- EQ ILD9 IF ERROR
- SA2 A0 PRESET STATE TABLE
- BX6 X4*X2
- SA6 /MMF/TMMF+MFST
- ILD11.1 SA2 A2+B1
- BX6 X4*X2
- LX1 1
- SA6 A6+B1
- NG X1,ILD11.1 IF NOT END OF MACHINES
- MX1 -12
- MX4 12
- SB3 MXMF-1
- LE B2,B4,ILD12 IF NOT LEVEL 3 RECOVERY
- * VERIFY MMFL WITH MFET IF LEVEL 3 RECOVERY.
- BX1 -X1*X3 MACHINE INDEX
- MX4 24+12
- SA2 /PROGRAM/PBUF-1+X1 VERIFY ENTRY
- LX4 12
- BX2 X2-X3
- BX2 X4*X2
- ZR X2,ILD8 IF ENTRY VERIFIES
- JP ILD14
- * CHECK IF ENTRY EXISTS OR IF EMPTY SLOT. (LEVEL 0, 1, 2.)
- ILD12 SA2 A0+B3 READ ENTRY
- NZ X2,ILD13 IF NOT EMPTY ENTRY
- SX1 B3+B1 SET EMPTY SLOT FOUND
- ILD13 BX6 X2-X3
- BX5 X4*X6
- ZR X5,ILD15 IF MATCHING MACHINE ID
- SB3 B3-B1 CHECK NEXT ENTRY
- PL B3,ILD12 IF NOT END OF ENTRIES
- * MACHINE ID NOT FOUND - ASSIGN EMPTY ENTRY.
- NZ B2,ILD14 IF NOT LEVEL ZERO
- PL X1,ILD8 IF EMPTY ENTRY FOUND
- SB6 4 *MID SPOT UNAVAILABLE.*
- JP ILD9
- ILD14 SB6 2 *RECOVERY DEADSTART PREVENTED THIS MID.*
- JP ILD9
- * MACHINE ID FOUND - VERIFY IF FOR THIS MACHINE.
- ILD15 SX1 B3+B1 SET MACHINE INDEX
- LX4 -12
- BX6 X4*X2
- NZ B2,ILD16 IF RECOVERY DEADSTART
- ZR X6,ILD8 IF LINK EQUIPMENT NOT PRESENT
- SB6 3 *MACHINE ID IN USE.*
- JP ILD9
- * LINK DEVICE MUST BE PRESENT IN *MFET* FOR RECOVERY DEADSTART.
- ILD16 NZ X6,ILD8 IF LINK EQUIPMENT PRESENT
- JP ILD14 *RECOVERY DEADSTART PREVENTED THIS MID.*
- ILDA VFD 24/37770077B,36/0LLABEL
- SPACE 4,10
- * INSURE PP EXCHANGE PACKAGES AND TABLE OF LOADED BLOCKS FIT.
- PRSO EQU *-PRSB LENGTH OF OVERLAYABLE PRESET CODE
- ERRPL 21D*28D+/DSL/CPBL-PRSO OVERFLOW
- COMMON SPACE 4,10
- * COMMON DECKS.
- QUAL
- *CALL COMCCDD
- *CALL COMCEDT
- QUAL *
- SPACE 4,10
- TITLE NON-OVERLAYED PRESET.
- SPACE 4
- ** PRSX - OVERLAY PRESET WITH PPU EXCHANGE PACKAGES.
- PRSX RJ SPS SET PPU STATUS
- SX6 CL
- SA1 BLKT-1 *CPUMLD* LOADED BLOCKS TABLE
- SA6 A0+B1 SET MAIN BLOCK ADDRESS IN BLOCK TABLE
- SX7 A6
- SA7 CL+CBLP SET *CPUMTR* LOADED BLOCK POINTER
- PRSX1 SA1 A1+B1 MOVE LOADED BLOCK TABLE
- BX6 X1
- SA6 A6+B1
- NZ X1,PRSX1 IF NOT END OF TABLE
- TSX2 (/MONITOR/BXP,CPB,0)
- SA0 A6 UPDATE (A0)
- LX7 36
- SA6 A6-B1 REMOVE *PRESET* FROM BLOCK TABLE
- BX7 X7+X2
- SA7 CMBL STORE BREAKPOINT POINTER WORD
- TNO /MCE/PRS,MCE IF MEMORY CLEARING ENABLED
- SX6 A0 SET LWA+1 OF CPUMTR
- SA6 B0
- EQ CPSL BRANCH TO STOP
- SPS SPACE 4
- ** SPS - SET PPU STATUS.
- *
- * ENTRY (A0) = LAST ADDRESS OF CPUMTR.
- *
- * EXIT (A0) = LAST ADDRESS OF CPUMTR.
- SPS PS ENTRY/EXIT
- * ASSIGN SYSTEM CONTROL POINT PP-S.
- TX1 0,SC SET SYSTEM CP FOR PP ASSIGNMENT
- LX1 36
- SX6 3RMTR
- SX7 3RDSD
- LX6 42
- LX7 42
- BX6 X6+X1
- BX7 X7+X1
- TA6 0,FP ASSIGN *MTR* TO PP 0
- TA7 1*PPCE,FP ASSIGN *DSD* TO PP 1
- SX6 3RSTL
- SX7 3RDIO
- LX6 42
- LX7 42
- BX6 X6+X1
- BX7 X7+X1
- TA6 2*PPCE,FP ASSIGN *STL* TO PP 2
- TA7 10B*PPCE,FP ASSIGN *DIO* TO PP 10
- TA1 STSW,SCA
- SX2 4
- LX2 48
- IX6 X1+X2 INCREMENT SYSTEM CP PP COUNT
- SA6 A1+
- SA1 PPUL READ PPU STATUS
- SB2 20-2 PRESET 20 PPU
- LX1 -24
- SB6 PPCE
- MX3 -12
- BX4 -X3*X1
- SX3 X4-11
- SB3 B1
- MX6 1
- BX7 X7-X7 CLEAR ASSEMBLY
- LX6 -12-1 POSITION TO PP 1
- TA1 1*PPCE,FP SET PPU 1
- PL X3,SPS1 IF MORE THAN 10 PPU
- SB2 10D-2 SET 10 PPU
- * BUILD THE PP ALLOCATION BIT MAP.
- SPS1 SA1 A1+B6 READ NEXT INPUT REGISTER
- AX6 B3,X6 POSITION ALLOCATION BIT
- SB4 B2-10D
- NZ B4,SPS1.1 IF PP NOT PP20
- SB3 -B1 SWITCH SHIFT DIRECTION
- AX6 10D-1 REPOSITION PP AVAILABLE FLAG
- SPS1.1 SB2 B2-B1
- NZ X1,SPS2 IF NOT AVAILABLE
- BX7 X7+X6 MERGE ALLOCATION BIT
- SPS2 NZ B2,SPS1 IF NOT END OF PPU
- SA5 /MONITOR/PXP SET EXCHANGE PACKAGE FIRST WORD
- SB7 A1+B6 SET LAST PPU ADDRESS
- * CALCULATE LENGTH OF ALL EXCHANGE PACKAGES FOR CPP-S
- * AND CPP AVAILABLE COUNT.
- SA2 CPPL
- LX2 0-12
- MX0 -6
- BX2 -X0*X2
- BX0 X0-X0
- ZR X2,SPS2.3 IF NO CPP-S PRESENT
- SB2 X2
- SPS2.1 SA1 A1+B6 READ NEXT INPUT REGISTER
- NZ X1,SPS2.2 IF CPP NOT AVAILABLE
- SX0 X0+B1 INCREMENT CPP AVAILABLE COUNT
- SPS2.2 SB2 B2-B1
- NZ B2,SPS2.1 IF MORE CPP-S TO CHECK
- LX0 12-0
- BX7 X7+X0
- LX2 PPCES
- SB7 B7+X2 ADD IN CPP-S EXCHANGE PACKAGES
- * GENERATE PPU EXCHANGE PACKAGES.
- SPS2.3 SA7 PPAL SAVE ALLOCATION STATUS AND CPP COUNT
- SX6 A0
- SA6 PXPP SET ADDRESS OF FIRST PP EXCHANGE PACKAGE
- BX6 X5
- TB4 2*PPCE,FP PP 2 COMMUNICATION AREA ADDRESS
- SA6 A6+B1
- SA1 A0+20B PRESET (A6)
- BX6 X1
- SA6 A1
- SX4 21B SET EXCHANGE PACKAGE ADDRESS INCREMENT
- SX3 B6 SET A5 INCREMENT
- LX3 18
- SPS3 SB4 B4+B6 INCREMENT PP ADDRESS
- MX7 -21B
- GE B4,B7,SPS5 IF END OF PPU-S
- SPS4 BX6 X5 COPY PREVIOUS EXCHANGE PACKAGE
- AX7 1
- SA6 A6+B1
- SA5 A5+B1
- NZ X7,SPS4 IF NOT END OF EXCHANGE PACKAGE
- SA1 A6-20B+5 INCREMENT (A5)
- IX7 X1+X3
- SA7 A1
- SA1 A1-5+2 INCREMENT (B2)
- IX7 X1+X4
- SA7 A1
- SA2 B4
- LX2 12
- SX2 X2-2R**
- ZR X2,SPS3 IF NO PP PRESENT
- SA0 A6 SET LWA OF EXCHANGE PACKAGES IN USE
- EQ SPS3
- * INITIALIZE EXTENDED PP CONTROL BLOCKS.
- SPS5 TX6 0,SCA
- BX1 X6
- LX1 48-7
- BX7 X1+X6
- LX6 24
- BX6 X6+X7 *ACPP* FOR SYSTEM CP ASSIGNMENT
- MX7 12
- TB4 0,FP START OF PP COMMUNICATION AREA
- TB3 0,FPX START OF EXTENDED PP CONTROL BLOCKS
- SPS6 SA1 B4 READ NEXT INPUT REGISTER
- SA7 B3+DRQP INITIALIZE PENDING DISK REQUEST STATUS
- LX1 12
- ZR X1,SPS7 IF NOT ASSIGNED PP
- SX1 X1-2R**
- ZR X1,SPS7 IF NOT ASSIGNED PP
- SA6 B3+ACPP SET SYSTEM CP ASSIGNMENT
- SPS7 SB4 B4+PPCE
- SB3 B3+PPXE
- LE B4,B7,SPS6 IF NOT PAST PSEUDO-PP
- EQ SPS RETURN
- PRBL EQU *-PRSB LENGTH OF *PRESET* BLOCK
- REL SPACE 4
- ** TERMINATE THE *TREL* BLOCK WHICH CONTAINS THE RELOCATION
- * INFORMATION FOR PRESET.
- USE /TREL/
- CON 0,0
- TRELL EQU *-REL LENGTH OF *TREL* BLOCK
- USE *
- TJMP SPACE 4,10
- ** TERMINATE TJMP BLOCK.
- USE /TJMP/
- CON 0,0
- TJMPL EQU *-TJMP LENGTH OF *TJMP* BLOCK
- USE *
- SPACE 4,10
- ** BLKT - LOADED BLOCK NAME TABLE DECLARATION.
- USE /TBLK/
- BLKT BSS 0 LOADED BLOCK NAME TABLE
- TBLKL EQU /DSL/CPBL MAXIMUM LENGTH OF *TBLK* BLOCK
- USE *
- SPACE 4
- PRSL EQU PRBL+TRELL+TJMPL+TBLKL
- ERRNG /DSL/PRSL*100B-PRSL IF *PRESET* OVERFLOW
- QUAL
- CPUMTR EQU /PRESET/PRS
- SPACE 4
- TTL CPUMTR - CPU MONITOR.
- SAC HERE
- END CPUMTR
cdc/nos2.source/opl871/cpumtr.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator