User Tools

Site Tools


cdc:nos2.source:opl871:cpumtr

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
  1. IDENT CPUMTR
  2. ENTRY CPUMTR
  3. SST PPR,FL,TH,T1,T2,T3,RA
  4. B1=1
  5. LIST F
  6. *COMMENT CPUMTR - CPU MONITOR.
  7. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  8. TITLE CPUMTR - CPU MONITOR.
  9. SPACE 4
  10. *** CPUMTR - CPU MONITOR.
  11. * G. R. MANSFIELD. 70/12/13.
  12. * W. E. GOEBEL. 76/01/21.
  13. * P. T. BARNETT. 80/10/31.
  14. SPACE 4
  15. *** *CPUMTR* WORKS IN CONJUNCTION WITH *MTR* TO DO
  16. * THE FOLLOWING TASKS -
  17. *
  18. * 1) SCHEDULE THE CPU AMONG ELIGIBLE JOBS AT CONTROL POINTS.
  19. * 2) PERFORM REQUESTED OPERATIONS BY PP-S
  20. * (MONITOR FUNCTIONS ABOVE *CPUM*).
  21. * 3) PERFORM REQUESTED OPERATIONS BY JOBS RUNNING AT
  22. * CONTROL POINTS (RA+1 REQUESTS).
  23. * 4) PERFORM REQUESTED OPERATIONS BY *MTR*
  24. * (STORAGE MOVE, ETC.)
  25. * 5) PERFORM DATA TRANSFERS FOR BUFFERED MASS STORAGE DEVICES
  26. * (REFER TO THE *CPUCIO* BLOCK FOR AN EXPLANATION OF THE
  27. * PSEUDO-PP).
  28. *
  29. * *CPUMTR* CODE RUNS IN BOTH MONITOR AND PROGRAM MODE. THE
  30. * CODE USED IN EITHER MODE IS MOSTLY SEPARATE, BUT IN CERTAIN
  31. * RARE CASES, CODE IS SHARED BETWEEN THE TWO. IN BOTH CASES,
  32. * THE CODE EXECUTES AT AN RA OF 0, AND AN FL OF MACHINE FIELD
  33. * LENGTH, GIVING *CPUMTR* FULL ACCESS TO ALL OF CM (AND ECS).
  34. *
  35. * MONITOR MODE CODE EXECUTION IS LIMITED TO FUNCTIONS THAT CAN
  36. * BE DONE QUICKLY OR REQUIRE INTERLOCKING. PROGRAM MODE
  37. * CODE IS USED FOR PROCESSING FUNCTIONS THAT POTENTIALLY CAN
  38. * TAKE A LONG TIME (SUCH AS STORAGE MOVE). PROGRAM MODE
  39. * *CPUMTR* RUNS AT CONTROL POINT N+1, AND HAS A CPU PRIORITY
  40. * OF 100B, HIGHER THAN ANY OTHER JOB IN THE SYSTEM.
  41. SPACE 4,10
  42. ** IMPLEMENTATION NOTES.
  43. *
  44. * *CPUMTR* IS LOADED AND RELOCATED BY *CPUMLD*.
  45. * *CPUMLD* SUPPORTS ONLY THE COMMONLY USED LOADER TABLES,
  46. * INCLUDING 3400 (PIDL), 3600 (ENTR), 4000 (TEXT),
  47. * 4100 (XFILL), 4200 (FILL), 4600 (XFER), AND 7700 (PRFX)
  48. * LOADER TABLES. LOADER TABLES SUCH AS 3700 (XTEXT),
  49. * 4300 (REPL), 4400 (LINK), 4500 (XLINK), AND
  50. * 4700 (XREPL) ARE NOT SUPPORTED BY *CPUMLD*.
  51. * SINCE *BSSZ* INSTRUCTIONS OF 6 OR MORE WORDS GENERATE
  52. * *REPL* TABLES, USE OF *CON* OR *BSS* INSTRUCTIONS
  53. * ARE RECOMMENDED AS AN ALTERNATIVE.
  54. *
  55. * DUE TO THE DEFINITION OF A *CON* INSTRUCTION IN
  56. * COMPASS 3.0, DATA INSTRUCTIONS CONTAINING RELOCATABLE
  57. * ADDRESSES SHOULD USE ONLY THE *VFD* INSTRUCTION.
  58. SPACE 4
  59. **** ASSEMBLY CONSTANTS.
  60.  
  61.  
  62. NPPCP EQU LREC-1 MAXIMUM NUMBER OF PP-S TO A CP
  63. RSHF EQU 12 SHIFT COUNT TO MOVE RA FIELD
  64. OF FLSW TO LOWER BITS
  65. RMSK EQU 24 FIELD WIDTH OF RA IN CONTROL POINT AREA
  66. MCUR EQU 40B MAXIMUM CONSECUTIVE UNIT RESERVE COUNT
  67. SDUD EQU 100 UNABLE TO RELEASE WRITE ACCESS DELAY (MS)
  68. SDWD EQU 100 DEVICE WRITE ACCESS REQUESTED DELAY (MS)
  69. SDMD EQU 4 *MTE* WAIT DELAY FOR WRITE ACCESS (MS)
  70.  
  71. ****
  72. SPACE 4
  73. *CALL COMCMAC
  74. *CALL COMSACC
  75. *CALL COMSCIO
  76. *CALL COMSDFS
  77. QUAL DSL
  78. *CALL COMSDSL
  79. QUAL *
  80. DSCP EQU /DSL/DSCP DEADSTART CONTROL POINT
  81. QUAL DST
  82. *CALL COMSDST
  83. QUAL *
  84. *CALL COMSEJT
  85. *CALL COMSJCE
  86. *CALL COMSLSD
  87. *CALL COMSMMF
  88. *CALL COMSMRT
  89. *CALL COMSMSP
  90. QUAL MTX
  91. *CALL COMSMTX
  92. QUAL *
  93. QUAL PFM
  94. *CALL COMSPFM
  95. QUAL *
  96. *CALL COMSREM
  97. *CALL COMSPRD
  98. *CALL COMSSCD
  99. *CALL COMSSSD
  100. LIST X
  101. *CALL COMSHIO
  102. *CALL COMSMSC
  103. *CALL COMSLFD
  104. *CALL COMSSCP
  105. LIST *
  106. *CALL COMSSRU
  107. QUAL DSL
  108. *CALL COMSDSL
  109. QUAL *
  110. LIST X
  111. *CALL COMS176
  112. *CALL COMSCPS
  113. *CALL COMSMTR
  114. LIST *
  115. TITLE MACRO DEFINITIONS.
  116. NOREF .1,.2,.3
  117. BLOCK SPACE 4,20
  118. ** BLOCK - DEFINE AN OPTIONAL BLOCK OF CPUMTR CODE.
  119. *
  120. *
  121. * BLOCK NAME,(TTLE),Q
  122. * ENTRY *NAME* = NAME OF BLOCK.
  123. * *TTLE* = DESCRIPTION TO APPEAR ON TITLE LINE FOLLOWING
  124. * *CPUMTR - CPU MONITOR *
  125. * *Q* = QUAL TO BE USED FOR BLOCK IF OTHER THAN *NAME*.
  126.  
  127.  
  128. PURGMAC BLOCK
  129.  
  130. BLOCK MACRO NAME,TTLE,Q
  131. _NAME TTL CPUMTR - CPU MONITOR _TTLE
  132. TITLE
  133. QUAL Q NAME
  134. NOREF .1,.2,.3
  135. USE /_NAME/
  136. USE /TREL/
  137. CON 0
  138. VFD 42/0L_NAME,18/0
  139. USE *
  140. USE /TJMP/
  141. CON 0
  142. VFD 42/0L_NAME,18/0
  143. USE *
  144. ENDM
  145. BSSZ SPACE 4,10
  146. ** BSSZ - REDEFINE *BSSZ* PSEUDO INSTRUCTION.
  147. *
  148. * THE REDEFINED *BSSZ* PSEUDO INSTRUCTION WILL ISSUE AN
  149. * ASSEMBLY ERROR IF THE RESULTING BINARY CANNOT BE LOADED
  150. * BY *CPUMLD*.
  151.  
  152.  
  153. BSSZ. OPSYN BSSZ SAVE OLD DEFINITION
  154.  
  155. PURGMAC BSSZ
  156.  
  157. BSSZ MACRO EXP
  158. BSSZ. EXP
  159. ERRPL EXP-6 *CPUMLD* CANNOT LOAD THIS *CPUMTR*
  160. BSSZ ENDM
  161. CFI SPACE 4,10
  162. ** CXI XJ,TAB - CONVERT A TABLE ORDINAL TO AN OFFSET.
  163. *
  164. * CXI XJ,TAB
  165. *
  166. * CONVERT THE ORDINAL FOR TABLE *TAB* IN *XJ* INTO AN OFFSET
  167. * IN *XI*. *XI* AND *XJ* MUST BE DIFFERENT REGISTERS. THE
  168. * VALUE OF *XJ* IS PRESERVED.
  169.  
  170.  
  171. PURGDEF CXX,Q
  172.  
  173. CXX,Q OPDEF I,J,TAB
  174. ERRPL TAB_E-21B TABLE ENTRY TOO LONG
  175. ERRZR I-J REGISTERS MUST BE DIFFERENT
  176. .1 OCTMIC TAB_E
  177. .A".1" SKIP
  178. .A0 ENDIF
  179. ERR TABLE ENTRIES ARE DEFINED AS ZERO LENGTH
  180. .B SKIP
  181. .A1 ENDIF
  182. BX.I X.J
  183. .B SKIP
  184. .A2 ENDIF
  185. LX.I X.J,B1
  186. .B SKIP
  187. .A3 ENDIF
  188. LX.I X.J,B1
  189. IX.I X.I+X.J
  190. .B SKIP
  191. .A4 ENDIF
  192. BX.I X.J
  193. LX.I 2
  194. .B SKIP
  195. .A5 ENDIF
  196. BX.I X.J
  197. LX.I 2
  198. IX.I X.I+X.J
  199. .B SKIP
  200. .A6 ENDIF
  201. LX.I X.J,B1
  202. IX.I X.I+X.J
  203. LX.I 1
  204. .B SKIP
  205. .A7 ENDIF
  206. BX.I X.J
  207. LX.I 3
  208. IX.I X.I-X.J
  209. .B SKIP
  210. .A10 ENDIF
  211. BX.I X.J
  212. LX.I 3
  213. .B SKIP
  214. .A11 ENDIF
  215. BX.I X.J
  216. LX.I 3
  217. IX.I X.I+X.J
  218. .B SKIP
  219. .A12 ENDIF
  220. BX.I X.J
  221. LX.I 2
  222. IX.I X.I+X.J
  223. LX.I 1
  224. .B SKIP
  225. .A13 ENDIF
  226. BX.I X.J
  227. LX.I 2
  228. IX.I X.I+X.J
  229. LX.I 1
  230. IX.I X.I+X.J
  231. .B SKIP
  232. .A14 ENDIF
  233. BX.I X.J
  234. LX.I 1
  235. IX.I X.I+X.J
  236. LX.I 2
  237. .B SKIP
  238. .A15 ENDIF
  239. BX.I X.J
  240. LX.I 1
  241. IX.I X.I+X.J
  242. LX.I 2
  243. IX.I X.I+X.J
  244. .B SKIP
  245. .A16 ENDIF
  246. BX.I X.J
  247. LX.I 3
  248. IX.I X.I-X.J
  249. LX.I 1
  250. .B SKIP
  251. .A17 ENDIF
  252. BX.I X.J
  253. LX.I 4
  254. IX.I X.I-X.J
  255. .B SKIP
  256. .A20 ENDIF
  257. BX.I X.J
  258. LX.I 4
  259. .B ENDIF
  260. ENDM
  261. ENDBLK SPACE 4,10
  262. ** ENDBLK - END AN OPTIONAL BLOCK OF CPUMTR CODE.
  263. *
  264.  
  265.  
  266. PURGMAC ENDBLK
  267.  
  268. ENDBLK MACRO
  269. BSS 0
  270. USE *
  271. QUAL
  272. ENDM
  273. IDIV SPACE 4,10
  274. ** IXI XJ/XK - INTEGER DIVISION.
  275. *
  276. * IXI XJ/XK
  277. * DIVIDE XJ BY XK TO XI.
  278. * DESTROYS XJ, XK, B7.
  279.  
  280.  
  281. PURGDEF IXX/X
  282.  
  283. IXX/X OPDEF I,J,K
  284. PX.J X.J
  285. PX.K X.K
  286. NX.K X.K
  287. FX.I X.J/X.K
  288. UX.I B7,X.I
  289. LX.I X.I,B7
  290. ENDM
  291. MONITOR SPACE 4,10
  292. ** MONITOR - ISSUE PSEUDO OUTPUT REGISTER *CPUMTR* FUNCTION.
  293. *
  294. * MONITOR FC,RAD
  295. * WHERE FC = *CPUMTR* FUNCTION CODE.
  296. * RAD = RETURN ADDRESS, OPTIONAL IF RETURN TO NEXT
  297. * LOCATION AFTER MONITOR CALL.
  298. *
  299. * CALLS /BUFIO/IMF.
  300.  
  301.  
  302. PURGMAC MONITOR
  303. MONITOR MACRO FC,RAD
  304. LOCAL MRA
  305. IFC NE,$_RAD$B6$,1
  306. SB6 RAD MRA
  307. SX1 FC
  308. EQ /BUFIO/IMF ISSUE MONITOR FUNCTION
  309. MRA BSS 0
  310. ENDM
  311. ICTE SPACE 4,10
  312. ** ICTE - INTERNAL CIO FUNCTION CODE TABLE ENTRY.
  313. *
  314. * ICTE FC,(FLAGS)
  315. *
  316. * FC INTERNAL CIO FUNCTION (DEFINED IN *COMSCIO*).
  317. *
  318. * FLAGS FUNCTION FLAGS.
  319. * BKW = BACKWARD OPERATION.
  320. * CRW = *READCW*/*WRITECW* OPERATION.
  321. * EOF = EOF OPERATION - STOP ON EOF FOR READ/SKIP,
  322. * FLUSH EOF FOR WRITE OPERATION.
  323. * EOI = EOI OPERATION - STOP ON EOI FOR READ/SKIP,
  324. * FLUSH DATA FROM BUFFER FOR WRITE OPERATION.
  325. * EOR - EOR OPERATION - STOP OF EOR FOR READ/SKIP,
  326. * FLUSH EOR FOR WRITE OPERATION.
  327. * EXF = FUNCTION LEGAL FOR EXECUTE-ONLY FILE.
  328. * IOF = REWIND OPERATION (SET IN = OUT = FIRST).
  329. * LST = *READLS*/*RPHRLS* OPERATION.
  330. * MSO = MASS STORAGE ONLY FUNCTION.
  331. * MTO = MAGNETIC TAPE ONLY FUNCTION.
  332. * NDT = NO DEVICE TYPE RETURNED TO FET.
  333. * NRW = *READN*/*WRITEN* OPERATION.
  334. * PRU = PRU OPERATION - STOP ON PRU FOR READ/SKIP,
  335. * FLUSH ONLY ONE FULL PRU FOR WRITE.
  336. * RFE = FUNCTION REQUIRES FNT ENTRY.
  337. * RWO = REWRITE OPERATION.
  338. * SKO = SKIP OPERATION.
  339. * UNL = UNLOAD OPERATION.
  340. * VFL = VALIDATE FIRST AND LIMIT FET PARAMETERS.
  341. * VIO = VALIDATE IN AND OUT FET PARAMETERS.
  342. * XF = EXTENDED FUNCTION LEGAL (3XX/6XX CIO CODE).
  343.  
  344.  
  345. ICTE MACRO FC,FLAGS
  346. LOCAL F,FG1,FG2
  347. FG2 SET 0
  348. .A IFC NE,$_FC$$
  349. FG1 SET FC*100B
  350. .B ECHO ,F=(FLAGS)
  351. IFC EQ,$_F$BKW$,1
  352. FG1 SET FG1+4000B
  353. IFC EQ,$_F$CRW$,1
  354. FG1 SET FG1+40B
  355. IFC EQ,$_F$EOF$,1
  356. FG1 SET FG1+EOF
  357. IFC EQ,$_F$EOI$,1
  358. FG1 SET FG1+EOI
  359. IFC EQ,$_F$EOR$,1
  360. FG1 SET FG1+EOR
  361. IFC EQ,$_F$EXF$,1
  362. FG2 SET FG2+100B
  363. IFC EQ,$_F$IOF$,1
  364. FG2 SET FG2+200B
  365. IFC EQ,$_F$LST$,1
  366. FG1 SET FG1+20B
  367. IFC EQ,$_F$MSO$,1
  368. FG2 SET FG2+2000B
  369. IFC EQ,$_F$MTO$,1
  370. FG2 SET FG2+1000B
  371. IFC EQ,$_F$NDT$,1
  372. FG2 SET FG2+40B
  373. IFC EQ,$_F$NRW$,1
  374. FG1 SET FG1+20B
  375. IFC EQ,$_F$PRU$,1
  376. FG1 SET FG1+PRU
  377. IFC EQ,$_F$RFE$,1
  378. FG2 SET FG2+400B
  379. IFC EQ,$_F$RWO$,1
  380. FG1 SET FG1+2000B
  381. IFC EQ,$_F$SKO$,1
  382. FG1 SET FG1+2000B
  383. IFC EQ,$_F$UNL$,1
  384. FG1 SET FG1+2000B
  385. IFC EQ,$_F$VFL$,1
  386. FG1 SET FG1+1
  387. IFC EQ,$_F$VIO$,1
  388. FG1 SET FG1+2
  389. IFC EQ,$_F$XF$,1
  390. FG2 SET FG2+4000B
  391. .B ENDD
  392. .A ELSE
  393. FG1 SET 7777B
  394. .A ENDIF
  395. VFD 12/FG1,12/FG2,6/0
  396. ENDM
  397. JSNMASK SPACE 4,20
  398. ** JSNMASK - DEFINE CHARACTER MASK FOR ONE CHARACTER OF JSN.
  399. *
  400. *
  401. * JSNMASK LO,HI,EX
  402. * ENTRY *LO* = LOWEST CHARACTER TO APPEAR IN THIS POSITION.
  403. * *HI* = HIGHEST CHARACTER TO APPEAR IN THIS POSITION.
  404. * *EX* = CHARACTERS TO BE EXCLUDED FROM THIS POSITION.
  405.  
  406.  
  407. PURGMAC JSNMASK
  408.  
  409. JSNMASK MACRO LO,HI,EX
  410. IFC EQ,$LO$$
  411. .1 DECMIC 1RA DEFAULT LOWEST CHARACTER
  412. ELSE
  413. ERRNG 1R_LO-1RA VALUE IS TOO LOW
  414. .1 DECMIC 1R_LO LOWEST CHARACTER ALLOWABLE
  415. ENDIF
  416. IFC EQ,$HI$$
  417. .2 DECMIC 1RZ DEFAULT HIGHEST CHARACTER
  418. ELSE
  419. ERRNG 1R9-1R_HI VALUE IS TOO HIGH
  420. .2 DECMIC 1R_HI HIGHEST CHARACTER ALLOWABLE
  421. ENDIF
  422. .2 DECMIC ".2"+1 BIT FOR HIGHEST CHARACTER + 1
  423. .3 MICRO 1,, -0-1S".2"+1S".1"
  424. ECHO 4,CH=(EX) CHARACTERS TO EXCLUDE
  425. IFGE 1R_CH,".1",3
  426. IFLT 1R_CH,".2",2
  427. .4 DECMIC 1R_CH
  428. .3 MICRO 1,, ".3"+1S".4"
  429. VFD 60/".3" EXCLUDED CHARACTER MASK
  430. ENDM
  431. PER SPACE 4,10
  432. ** PER - SET ECS PARITY ERROR PROCESSING PARAMETERS.
  433. *
  434. *
  435. * PER X,PROC
  436. * ENTRY *X* = EXIT ADDRESS IN CASE OF UNRECOVERABLE ERROR.
  437. * *PROC* = EXTENDED MEMORY ERROR PROCESSOR.
  438. * IF PROC IS NOT DEFINED THEN EITHER /ECS/PER OR
  439. * /PROGRAM/PER IS USED AS THE PROCESSOR DEPENDING ON
  440. * IF THE CALL IS FROM ECS OR PROGRAM QUAL BLOCK.
  441.  
  442.  
  443. PURGMAC PER
  444.  
  445. PER MACRO X,PROC
  446. LOCAL A
  447. QUAL ECS
  448. A EQU *+1
  449. QUAL *
  450. RJ PROC PER
  451. TPER RMT
  452. VFD 12/,18/A,12/,18/X
  453. TPER RMT
  454. ENDM
  455. TVFD SPACE 4,25
  456. ** TVFD - DEFINE RELOCATABLE -VFD-.
  457. *
  458. *
  459. * TVFD N/V,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
  460. * ENTRY *N* = BIT COUNT
  461. * *V* = BASE VALUE TO WHICH A *VI* WILL BE ADDED.
  462. * IF *C1* IS NOT PRESENT
  463. * *V1* = ADDRESS OF VALUE TO BE ADDED DURING PRESET.
  464. * IF *C1* IS PRESENT THEN
  465. * *VI* = THE VALUE TO BE ADDED DURING PRESET, IF THE
  466. * CORRESPONDING *CI* IS TRUE.
  467. * *CI* = THE ADDRESS OF THE CONDITION WORD IN PRESET
  468. * WHICH TELLS IF THE CORRESPONDING VALUE IS TO BE
  469. * BE USED. IF THE CONDITION WORD IS ZERO, THE
  470. * CORRESPONDING VALUE WILL BE USED. THE *CI*S ARE
  471. * CHECKED IN ORDER, FROM LEFT TO RIGHT, UNTIL A
  472. * TRUE CONDITION IS FOUND. IF NONE OF THE
  473. * CONDITIONS ARE TRUE, *VN* IS USED.
  474. * *VN* = THE DEFAULT VALUE TO BE SET DURING PRESET.
  475. * IT IS THE LAST VALUE SPECIFIED AND MUST NOT
  476. * HAVE A CONDITION ASSOCIATED WITH IT.
  477.  
  478.  
  479. PURGMAC TVFD
  480.  
  481. TVFD MACRO V,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
  482. LOCAL S
  483. * EXTRACT FIELD WIDTH
  484. .1 MICRO 1,,/V
  485. .1 MICCNT .1
  486. * CHECK FOR RELOCATION REQUIRED
  487. .2 MICRO .1+2,, V
  488. .A IFC EQ,$V1$$
  489. VFD ".1"/".2"
  490. .A ELSE
  491. VFD ".1"/S+".2"
  492. S SAC ".1",V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
  493. IF -DEF,S,1
  494. ERRNZ ".2" 0 V MUST BE ZERO IN A CONDITIONAL *VFD*
  495. .A ENDIF
  496. ENDM
  497. SAC SPACE 4,40
  498. ** SAC - SUBSTITUTE ADDRESS CONSTANT.
  499. *
  500. *
  501. * THERE ARE TWO FORMS OF THE *SAC* MACRO. IF TWO PARAMETERS
  502. * ARE SPECIFIED, *SAC* CAUSES A PRESET DETERMINED VALUE TO BE
  503. * ADDED TO A SPECIFIED FIELD. IF MORE THAN TWO PARAMETERS ARE
  504. * SECIFIED, *SAC* CAUSES A SPECIFIED VALUE TO BE SUBSTITUTED
  505. * INTO THE FIELD ACCORDING TO A PRESET DETERMINED CONDITION.
  506. *
  507. * SAC W,V
  508. *
  509. * ENTRY *W* = FIELD WIDTH.
  510. *
  511. * *V* = ADDRESS OF WORD IN PRESET WHOSE VALUE WILL BE
  512. * ADDED TO THE SPECIFIED FIELD.
  513. *
  514. * SAC W,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
  515. *
  516. * ENTRY *W* = FIELD WIDTH.
  517. *
  518. * *VI* = THE VALUE TO BE SUBSTITUTED INTO THE SPECIFIED
  519. * FIELD DURING PRESET, IF THE CORRESPONDING *CI*
  520. * IS TRUE.
  521. *
  522. * *CI* = THE ADDRESS OF THE CONDITION WORD IN PRESET
  523. * WHICH TELLS IF THE CORRESPONDING VALUE IS TO BE
  524. * BE USED. IF THE CONDITION WORD IS NON-ZERO
  525. * (THE CONDITION IS TRUE), THE CORRESPONDING
  526. * VALUE WILL BE USED. THE *CI*S ARE CHECKED IN
  527. * ORDER, FROM LEFT TO RIGHT, UNTIL A TRUE
  528. * CONDITION IS FOUND. IF NONE OF THE CONDITIONS
  529. * ARE TRUE, *VN* IS USED.
  530. *
  531. * *VN* = THE DEFAULT VALUE TO BE SET DURING PRESET.
  532. * IT IS THE LAST VALUE SPECIFIED AND MUST NOT
  533. * HAVE A CONDITION ASSOCIATED WITH IT.
  534.  
  535.  
  536. PURGMAC SAC
  537.  
  538. MACRO SAC,S,W,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
  539. LOCAL N
  540. QUAL PRESET
  541. .1 SET *-*P/60
  542. .2 SET W+*P-*P/60*60
  543. USE /TREL/
  544. .A IFC EQ,$C1$$
  545. .3 MICRO 1,1,$V1$
  546. .B IFC NE,$".3"$-$
  547. + VFD 6/.2,6/W,18/V1,12/2000B,18/.1
  548. .B ELSE
  549. .3 MICRO 2,,$V1$
  550. + VFD 6/.2,6/W,18/".3",12/-2000B,18/.1
  551. .B ENDIF
  552. .A ELSE
  553. + VFD 6/.2,6/W,18/C1,12/2000B+N,18/.1
  554. .B IFLE W,24D
  555. + JP V1 FIRST ALTERNATE
  556. - JP V6 V5 V4 V3 V2 V1
  557. .1 SET 1
  558. .D ECHO ,V=(V2,V3,V4,V5,V6),C=(C2,C3,C4,C5,)
  559. .E IFC NE,$C$$
  560. + JP V NEXT ALTERNATE
  561. - VFD 30/C
  562. .1 SET .1+1
  563. .E ELSE
  564. STOPDUP
  565. IFC EQ,$V$$,1
  566. ERR NO DEFAULT HAS BEEN SPECIFIED
  567. .E ENDIF
  568. .D ENDD
  569. N EQU .1
  570. .B ELSE
  571. + VFD 30/V1 ALTERNATE
  572. - VFD 30/V2 DEFAULT
  573. N EQU 1
  574. .B ENDIF
  575. .A ENDIF
  576.  
  577. .A IFC NE,$S$$
  578. .B IFC EQ,$C1$$
  579. QUAL
  580. S EQU 0
  581. QUAL *
  582. .B ELSE
  583. SAC RMT
  584. QUAL
  585. S EQU V1
  586. QUAL *
  587. RMT
  588. .B ENDIF
  589. .A ENDIF
  590. USE *
  591. QUAL *
  592. ENDM
  593. OPDEFS SPACE 4
  594. ** CONDITIONAL ADDRESS SETTING.
  595. *
  596. * THE CAPABILITY EXISTS TO PRESET THE ADDRESS PORTION OF AN
  597. * INSTRUCTION TO A VALUE DETERMINED DURING DEADSTART OR TO ONE
  598. * OF SEVERAL VALUES DEPENDING ON A *CONDITION* WORD IN THE
  599. * PRESET RELOCATION TABLE.
  600. * IN ORDER TO SET THE ADDRESS PORTION CONDITIONALLY A MACRO
  601. * MUST BE WRITTEN WHICH CALLS THE *SAC* MACRO TO SET THE
  602. * ADDRESS PORTION OF THE INSTRUCTIONS.
  603. *
  604. * AN EXTENSIVE SET OF OPDEFS IS AVAILABLE FOR UNCONDITIONALLY
  605. * PRESETTING THE SET INSTRUCTIONS. THERE ARE MANY FORMS OF THE
  606. * INSTRUCTIONS DEFINED. SOME EXAMPLES ARE -
  607. *
  608. * TA2 MS2W,SCA
  609. * TX3 B7+FLSW,TAG
  610. *
  611. * THE RESULTING INSTRUCTIONS AFTER PRESET WOULD BE -
  612. * SA2 MS2W + CONTENTS OF */PRESET/SCA*
  613. * SX3 B7+FLSW + CONTENTS OF */PRESET/TAG*
  614. *
  615. * IN MOST CASES THE FIRST PARAMETER CAN BE A CONSTANT, A
  616. * REGISTER, THEIR SUM OR DIFFERENCE, OR OMITTED ALTOGETHER.
  617. * THE SECOND PARAMETER (OR ONLY PARAMETER) IS PASSED TO THE
  618. * *SAC* MACRO. REFER TO ITS DOCUMENTATION FOR THE POSSIBLE
  619. * OPTIONS.
  620. *
  621. * A SMALLER COLLECTION OF MACROS PERMITS THE CONDITIONAL
  622. * PRESETTING OF SET INSTRUCTIONS. ANY OR ALL OF THE PARAMETERS
  623. * MAY CONTAIN A VALUE, A B-REGISTER, OR THEIR SUM.
  624. *
  625. * TSX0 (B3+OFFSET,CONDITION,TAG)
  626. *
  627. * THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
  628. * SX0 B3+OFFSET IF CONDITION PRESENT
  629. * SX0 TAG IF CONDITION NOT PRESENT
  630.  
  631.  
  632. TAQ OPDEF I,L
  633. SA.I 0
  634. SAC 18,L
  635. ENDM
  636.  
  637. PURGDEF TBQ
  638.  
  639. TBQ OPDEF I,L
  640. SB.I 0
  641. SAC 18,L
  642. ENDM
  643.  
  644. TXQ OPDEF I,L
  645. SX.I 0
  646. SAC 18,L
  647. ENDM
  648.  
  649. TAQ,Q OPDEF I,K,L
  650. SA.I K
  651. SAC 18,L
  652. ENDM
  653.  
  654. TBQ,Q OPDEF I,K,L
  655. SB.I K
  656. SAC 18,L
  657. ENDM
  658.  
  659. TXQ,Q OPDEF I,K,L
  660. SX.I K
  661. SAC 18,L
  662. ENDM
  663.  
  664. TAAQ,Q OPDEF I,J,K,L
  665. SA.I A.J+K
  666. SAC 18,L
  667. ENDM
  668.  
  669. TBAQ,Q OPDEF I,J,K,L
  670. SB.I A.J+K
  671. SAC 18,L
  672. ENDM
  673.  
  674. TXAQ,Q OPDEF I,J,K,L
  675. SX.I A.J+K
  676. SAC 18,L
  677. ENDM
  678.  
  679. TABQ,Q OPDEF I,J,K,L
  680. SA.I B.J+K
  681. SAC 18,L
  682. ENDM
  683.  
  684. TBBQ,Q OPDEF I,J,K,L
  685. SB.I B.J+K
  686. SAC 18,L
  687. ENDM
  688.  
  689. TXBQ,Q OPDEF I,J,K,L
  690. SX.I B.J+K
  691. SAC 18,L
  692. ENDM
  693.  
  694. TAXQ,Q OPDEF I,J,K,L
  695. SA.I X.J+K
  696. SAC 18,L
  697. ENDM
  698.  
  699. TBXQ,Q OPDEF I,J,K,L
  700. SB.I X.J+K
  701. SAC 18,L
  702. ENDM
  703.  
  704. TXXQ,Q OPDEF I,J,K,L
  705. SX.I X.J+K
  706. SAC 18,L
  707. ENDM
  708.  
  709. TAA,Q OPDEF I,J,L
  710. SA.I A.J+0
  711. SAC 18,L
  712. ENDM
  713.  
  714. TBA,Q OPDEF I,J,L
  715. SB.I A.J+0
  716. SAC 18,L
  717. ENDM
  718.  
  719. TXA,Q OPDEF I,J,L
  720. SX.I A.J+0
  721. SAC 18,L
  722. ENDM
  723.  
  724. TAB,Q OPDEF I,J,L
  725. SA.I B.J+0
  726. SAC 18,L
  727. ENDM
  728.  
  729. TBB,Q OPDEF I,J,L
  730. SB.I B.J+0
  731. SAC 18,L
  732. ENDM
  733.  
  734. TXB,Q OPDEF I,J,L
  735. SX.I B.J+0
  736. SAC 18,L
  737. ENDM
  738.  
  739. TAX,Q OPDEF I,J,L
  740. SA.I X.J+0
  741. SAC 18,L
  742. ENDM
  743.  
  744. TBX,Q OPDEF I,J,L
  745. SB.I X.J+0
  746. SAC 18,L
  747. ENDM
  748.  
  749. TXX,Q OPDEF I,J,L
  750. SX.I X.J+0
  751. SAC 18,L
  752. ENDM
  753.  
  754. OPDEFS SPACE 4,10
  755. ** THE FOLLOWING *ECHO* PSEUDO-OP DEFINES A SET OF MACROS THAT
  756. * PERMITS THE REGISTERS IN THE LIST TO BE SET WITH CONDITIONAL
  757. * VALUES.
  758.  
  759.  
  760. ECHO ,R=(A1,A2,A3,B3,B4,B6,X0,X1,X2,X3,X4,X5,X6,X7)
  761.  
  762. PURGMAC TS_R
  763.  
  764. TS_R MACRO L,M THE *M* SHOULD BE REMOVED LATER
  765. LOCAL T
  766. S_R T+B0
  767. IFC NE,$M$$,4 THIS IS TRANSITIONAL CODE **
  768. IFEQ L,0,1 **
  769. T SAC 21,M "TWOPARS" "SEQNO" **
  770. ELSE 1 **
  771. T SAC 21,L
  772. ENDM
  773.  
  774. ENDD
  775. OPDEFS SPACE 4
  776. ** JUMP MACROS.
  777. *
  778. * A FULL SET OF MACROS IS AVAILABLE FOR THE JUMP INSTRUCTIONS.
  779. * THE FORM OF A CONDITIONAL JUMP INSTRUCTION IS AS FOLLOWS.
  780. *
  781. * TNZ X4,(/ISD/SUB3,ISD,/LSPMMF/SUB2,MMF,/MONITOR/PPRX)
  782. *
  783. * THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
  784. * NZ X4,/ISD/SUB3 JUMP TO SUB3 IF ISD PRESENT
  785. * NZ X4,/LSPMMF/SUB2 JUMP TO SUB2 IF MMF PRESENT
  786. * NZ X4,/MONITOR/PPRX OTHERWISE JUMP TO PPRX
  787. *
  788. * ANY OR ALL OF THE PARAMETERS OF A *TJP* INSTRUCTION MAY ALSO
  789. * CONTAIN A REGISTER OR A REGISTER PLUS OFFSET. THE PARAMETERS
  790. * MAY BE ANY ALLOWED ON THE *JP* INSTRUCTION.
  791. *
  792. * TJP (/PROGRAM/TAG1,MMF,/MONITOR/HNG1)
  793. *
  794. * THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
  795. * JP 0+/PROGRAM/TAG1 JUMP TO TAG1 IF MMF PRESENT
  796. * JP 0+/MONITOR/HNG1 JUMP TO HNG1 IF MMF NOT PRESENT
  797.  
  798.  
  799. TJP MACRO L,M THE *M* SHOULD BE REMOVED LATER
  800. LOCAL S
  801. JP S
  802. IFC NE,$M$$,4 THIS IS TRANSITIONAL CODE **
  803. 0 ERR *TJP* CAN HAVE ONLY ONE PARAMETER **
  804. IFEQ L,0,1 **
  805. S SAC 24,M **
  806. ELSE 1 **
  807. S SAC 24,L
  808. ENDM
  809.  
  810. TEQ MACRO L
  811. LOCAL S
  812. EQ S
  813. S SAC 18,L
  814. ENDM
  815.  
  816. TGE MACRO J,K,L
  817. LOCAL S
  818. .1 MICRO 1,, J
  819. .2 MICRO 1,, K
  820. GE ".1",".2",S
  821. S SAC 18,L
  822. ENDM
  823.  
  824. TGT MACRO J,K,L
  825. LOCAL S
  826. .1 MICRO 1,, J
  827. .2 MICRO 1,, K
  828. GT ".1",".2",S
  829. S SAC 18,L
  830. ENDM
  831.  
  832. TZR MACRO J,L
  833. LOCAL S
  834. .1 MICRO 1,, J
  835. ZR ".1",S
  836. S SAC 18,L
  837. ENDM
  838.  
  839. TNZ MACRO J,L
  840. LOCAL S
  841. .1 MICRO 1,, J
  842. NZ ".1",S
  843. S SAC 18,L
  844. ENDM
  845.  
  846. TPL MACRO J,L
  847. LOCAL S
  848. .1 MICRO 1,, J
  849. PL ".1",S
  850. S SAC 18,L
  851. ENDM
  852.  
  853. TNG MACRO J,L
  854. LOCAL S
  855. .1 MICRO 1,, J
  856. NG ".1",S
  857. S SAC 18,L
  858. ENDM
  859. OPDEFS SPACE 4,10
  860. * THIS INSTRUCTION IS A CONDITIONAL NO-OP.
  861. * IF THE CONDITION WORD *C* IS NON-ZERO, AN *EQ* TO
  862. * THE SPECIFIED ADDRESS (*L*) IS ENTERED INTO THIS
  863. * LOCATION AT PRESET TIME. OTHERWISE, A *SB0 46000B*
  864. * IS ENTERED, MAKING THE INSTRUCTION A NO-OP.
  865.  
  866. TNO MACRO L,C
  867. .1 SET *P
  868. .A IFEQ .1,15
  869. NO
  870. .A ENDIF
  871. VFD 30/0400000000B+L
  872. SAC 30,0400000000B+L,C,6100046000B
  873. ENDM
  874. OPDEFS SPACE 4,10
  875. * THIS INSTRUCTION IS A CONDITIONAL NO-OP.
  876. * IF THE CONDITION WORD *C* IS NONZERO, A *NZ B5*
  877. * TO THE SPECIFIED ADDRESS (*L*) IS ENTERED INTO THIS
  878. * LOCATION AT PRESET TIME. OTHERWISE, A *SB0 46000B*
  879. * IS ENTERED, MAKING THE INSTRUCTION A NO-OP.
  880.  
  881. TNZB5 MACRO L,C
  882. .1 SET *P
  883. .A IFEQ .1,15
  884. NO
  885. .A ENDIF
  886. NZ B5,L
  887. SAC 30,0550000000B+L,C,6100046000B
  888. ENDM
  889. OPDEFS SPACE 4,10
  890. * THESE MACROS PERMIT SETTING THE COUNT IN A SHIFT OR MASK
  891. * INSTRUCTION. THE FORM OF THESE INSTRUCTIONS IS IDENTICAL TO
  892. * THE OTHER CONDITIONAL INSTRUCTIONS.
  893. *
  894. * WHEN USING THE *TAX*, *TLX*, OR *TMX* MACROS IN THE FORM
  895. *
  896. * TLX1 (M,N,CONDITION)
  897. *
  898. * MAKE SURE THAT *M* AND *N* ARE POSITIVE. FOR EXAMPLE
  899. * *TLX0 (-6,0,ESM)* SHOULD BE *TLX0 (60-6,0,ESM)*.
  900.  
  901.  
  902. ECHO ,R=(0,1,2,3,4,5,6,7)
  903.  
  904. TAX_R MACRO J,L
  905. LOCAL S
  906. IFC EQ,*L**,3
  907. AX_R S
  908. S SAC 6,J
  909. ELSE 4
  910. AX_R J
  911. S SAC 6,L
  912. IF -DEF,S,1
  913. ERR ONLY ONE PARAMETER IS PERMITTED ON A CONDITIONAL SHIFT
  914. ENDM
  915.  
  916. ENDD
  917.  
  918. ECHO ,R=(0,1,2,3,4,5,6,7)
  919.  
  920. TLX_R MACRO J,L
  921. LOCAL S
  922. IFC EQ,*L**,3
  923. LX_R S
  924. S SAC 6,J
  925. ELSE 4
  926. LX_R J
  927. S SAC 6,L
  928. IF -DEF,S,1
  929. ERR ONLY ONE PARAMETER IS PERMITTED ON A CONDITIONAL SHIFT
  930. ENDM
  931.  
  932. ENDD
  933.  
  934. TMX3 MACRO L
  935. LOCAL S
  936. MX3 S
  937. S SAC 6,L
  938. ENDM
  939. CME SPACE 4,10
  940. ** THE FOLLOWING MACROS DEFINE INSTRUCTIONS FOR
  941. * READING AND WRITING CENTRAL MEMORY. THESE INSTRUCTIONS
  942. * SHOULD BE USED WHEN ADDRESSING A USER-S FIELD LENGTH,
  943. * OR FOR ANY ADDRESSING OUTSIDE LOW CORE. THESE
  944. * INSTRUCTIONS ARE MODIFIED AT PRESET TIME TO USE
  945. * THE STANDARD *SAI XJ* OPCODE IF RUNNING ON A MAINFRAME
  946. * WITH UP TO 262K OF CENTRAL MEMORY. OTHERWISE, IT IS
  947. * SET TO A NEW OPCODE THAT ALLOWS ADDRESSING OF ADDRESSES
  948. * LARGER THAN 18 BITS. NOTE THAT THE SAME CONVENTIONS
  949. * FOR REGISTER USAGE (I.E. 1,2,3,4,5 FOR READING CM;
  950. * 6,7 FOR WRITING CM) STILL EXIST FOR CODE THAT CAN
  951. * RUN IN EITHER MODE.
  952.  
  953.  
  954. ERRMC MACRO
  955. .A IF -DEF,CME$
  956. ERR INVALID OP-CODE
  957. .A ENDIF
  958. ENDM
  959.  
  960. EXREAD MACRO I,J
  961. .1 MICRO 1,1, J
  962. .A IFC NE,$".1"$X$
  963. ERR ILLEGAL SOURCE OPERAND
  964. .A ENDIF
  965. .2 MICRO 2,2, J
  966. VFD 15/660_I_".2"B
  967. SAC 15,660_I_".2"B,CME,53_I_".2"0B
  968. ENDM
  969.  
  970. EXWRIT MACRO I,J
  971. .1 MICRO 1,1, J
  972. .A IFC NE,$".1"$X$
  973. ERR ILLEGAL SOURCE OPERAND
  974. .A ENDIF
  975. .2 MICRO 2,2, J
  976. VFD 15/670_I_".2"B
  977. SAC 15,670_I_".2"B,CME,53_I_".2"0B
  978. ENDM
  979.  
  980.  
  981. ERX0 MACRO J
  982. ERRMC
  983. EXREAD 0,J
  984. ENDM
  985.  
  986. ERX1 MACRO J
  987. EXREAD 1,J
  988. ENDM
  989.  
  990. ERX2 MACRO J
  991. EXREAD 2,J
  992. ENDM
  993.  
  994. ERX3 MACRO J
  995. EXREAD 3,J
  996. ENDM
  997.  
  998. ERX4 MACRO J
  999. EXREAD 4,J
  1000. ENDM
  1001.  
  1002. ERX5 MACRO J
  1003. EXREAD 5,J
  1004. ENDM
  1005.  
  1006. ERX6 MACRO J
  1007. ERRMC
  1008. EXREAD 6,J
  1009. ENDM
  1010.  
  1011. ERX7 MACRO J
  1012. ERRMC
  1013. EXREAD 7,J
  1014. ENDM
  1015.  
  1016.  
  1017. EWX0 MACRO J
  1018. ERRMC
  1019. EXWRIT 0,J
  1020. ENDM
  1021.  
  1022. EWX1 MACRO J
  1023. ERRMC
  1024. EXWRIT 1,J
  1025. ENDM
  1026.  
  1027. EWX2 MACRO J
  1028. ERRMC
  1029. EXWRIT 2,J
  1030. ENDM
  1031.  
  1032. EWX3 MACRO J
  1033. ERRMC
  1034. EXWRIT 3,J
  1035. ENDM
  1036.  
  1037. EWX4 MACRO J
  1038. ERRMC
  1039. EXWRIT 4,J
  1040. ENDM
  1041.  
  1042. EWX5 MACRO J
  1043. ERRMC
  1044. EXWRIT 5,J
  1045. ENDM
  1046.  
  1047. EWX6 MACRO J
  1048. EXWRIT 6,J
  1049. ENDM
  1050.  
  1051. EWX7 MACRO J
  1052. EXWRIT 7,J
  1053. ENDM
  1054. SPACE 4,10
  1055. ** THE FOLLOWING OPDEF GENERATES AN 016 INSTRUCTION TO READ THE
  1056. * FREE RUNNING COUNTER TO THE SPECIFIED X REGISTER ON A 180
  1057. * MACHINE. ON OTHER MACHINES A *BXI XI-XI* INSRUCTION IS
  1058. * GENERATED TO SET THE X REGISTER TO 0.
  1059.  
  1060.  
  1061. RCX OPDEF P1
  1062. VFD 9/016B,3/P1,3/0
  1063. SAC 15,016_P1_0B,CME,13_P1_P1_P1_B
  1064. ENDM
  1065. SPACE 4,10
  1066. ** DEFINE OPCODES.
  1067.  
  1068.  
  1069. * TRAP INSTRUCTION.
  1070.  
  1071. RTX,Q OPDEF P1,K
  1072. + VFD 9/017B,3/P1,18/K,30/0
  1073. ENDM
  1074.  
  1075.  
  1076. * INVALIDATE CACHE.
  1077. *
  1078. * P1 = 1/ F,59/ ADDR.
  1079. * F = CENTRAL MEMORY/EXTENDED MEMORY INDICATOR (0 IF CM).
  1080. * ADDR = RAC/RAE (RAC IF *F* = 0).
  1081. * P2 = BLOCK LENGTH.
  1082. * K = EI SUBFUNCTION (703B TO INVALIDATE SELECTED CACHE;
  1083. * 40000B TO INVALIDATE ALL CACHE ON THE OTHER CPU).
  1084.  
  1085. ICX,X,Q OPDEF P1,P2,K
  1086. + VFD 9/017B,3/P1,3/P2,15/K,30/0
  1087. ENDM
  1088. OPDEFS SPACE 4,10
  1089. * TIC - CONDITIONALLY INVALIDATE CACHE.
  1090. *
  1091. * THIS INSTRUCTION IS A CONDITIONAL NO-OP. IF THE CONDITION
  1092. * WORD *C* IS NONZERO, AN *IC 40000B* INSTRUCTION (WHICH
  1093. * INVALIDATES ALL CACHE ON THE OTHER CPU) IS ENTERED INTO
  1094. * THIS LOCATION AT PRESET TIME. OTHERWISE, TWO *SB0 46000B*
  1095. * INSTRUCTIONS ARE ENTERED, MAKING THIS WORD A NO-OP.
  1096. *
  1097. * NOTE - WHEN UPDATING A SEQUENCE OF WORDS TERMINATING IN AN
  1098. * INTERLOCK WORD, THIS INSTRUCTION IS NORMALLY ISSUED JUST
  1099. * BEFORE THE LAST WRITE. SINCE THE CACHE INVALIDATE
  1100. * OPERATION TIES UP THE OTHER CPU FOR 5 MICROSECONDS (ON A
  1101. * 960), THIS SEQUENCE OF INSTRUCTIONS ALLOWS THE FINAL WRITE
  1102. * TO PROCEED IN PARALLEL WITH THE PURGE. THIS MINIMIZES
  1103. * CACHE PURGE OVERHEAD WHILE STILL ENSURING DATA INTEGRITY.
  1104.  
  1105.  
  1106. TIC MACRO C
  1107. + VFD 30/0170040000B *IC 40000B*
  1108. SAC 30,0170040000B,C,6100046000B
  1109. VFD 30/0
  1110. SAC 30,0,C,6100046000B
  1111. ENDM
  1112. EXP SPACE 4
  1113. ** EXP - GENERATE EXCHANGE PACKAGE.
  1114.  
  1115.  
  1116. PURGMAC EXP
  1117.  
  1118. EXP MACROE P,A0,B0,RA,A1,B1,FL,A2,B2,EM,A3,B3,RAX,A4,B4,FLX,A5,B5,
  1119. ,MA,A6,B6,EA,A7,B7,X0,X1,X2,X3,X4,X5,X6,X7
  1120. LOCAL A
  1121. MACREF EXP
  1122. A BSS 0
  1123. + VFD 24/P
  1124. VFD 18/A0
  1125. VFD 18/B0
  1126. + VFD 24/RA
  1127. VFD 18/A1
  1128. VFD 18/B1
  1129. + TVFD 24/FL
  1130. TVFD 18/A2
  1131. VFD 18/B2
  1132. IFC EQ,$EM$$
  1133. + TVFD 12/0,EEMC+60B,CP176,EEMC
  1134. ELSE
  1135. TVFD 12/EM
  1136. ENDIF
  1137. VFD 12/
  1138. TVFD 18/A3
  1139. VFD 18/B3
  1140. + VFD 3/
  1141. TVFD 21/RAX
  1142. TVFD 18/A4
  1143. VFD 18/B4
  1144. + TVFD 24/FLX
  1145. TVFD 18/A5
  1146. VFD 18/B5
  1147. + VFD 6/
  1148. TVFD 18/MA
  1149. TVFD 18/A6
  1150. VFD 18/B6
  1151. + VFD 6/
  1152. IFC EQ,$EA$$,2
  1153. TVFD 18/0,EEAD
  1154. ELSE 1
  1155. TVFD 18/EA
  1156. TVFD 18/A7
  1157. VFD 18/B7
  1158. + VFD 60/X0
  1159. VFD 60/X1
  1160. VFD 60/X2
  1161. VFD 60/X3
  1162. VFD 60/X4
  1163. VFD 60/X5
  1164. VFD 60/X6
  1165. VFD 60/X7
  1166. ENDM
  1167. MNR SPACE 4
  1168. *** MNR - GENERATE PPU MONITOR PROGRAM MODE FUNCTION TABLE ENTRY.
  1169. *
  1170. *
  1171. * MNR FCN,A
  1172. * ENTRY *FCN* = FUNCTION CODE NAME.
  1173. * *A* = ENTRY ADDRESS.
  1174.  
  1175.  
  1176. PURGMAC MNR
  1177.  
  1178. MNR MACRO FCN,A
  1179. MACREF MNR
  1180. LOC FCN
  1181. BSS 0
  1182. ORG TMNR+FCN
  1183. VFD 42/
  1184. IFC NE,*A**
  1185. TVFD 18/,A
  1186. ELSE 1
  1187. VFD 18//PROGRAM/.FCN
  1188. USE *
  1189. .FCN BSS 0
  1190. ENDM
  1191. PMN SPACE 4
  1192. ** PMN - GENERATE PPU MONITOR FUNCTION TABLE ENTRY.
  1193. *
  1194. *
  1195. * PMN FCN,A
  1196. * ENTRY *FCN* = FUNCTION CODE NAME.
  1197. * *A* = ENTRY ADDRESS.
  1198.  
  1199.  
  1200. PURGMAC PMN
  1201.  
  1202. PMN MACRO FCN,A
  1203. MACREF PMN
  1204. LOC FCN
  1205. BSS 0
  1206. ORG TPMN-1+FCN
  1207. VFD 42/
  1208. .1 SET 0
  1209. IRP A
  1210. .1 SET .1+1
  1211. IRP
  1212. IFEQ .1,0,1
  1213. VFD 18//MONITOR/.FCN
  1214. IFEQ .1,1,1
  1215. VFD 18//MONITOR/A
  1216. IFGT .1,1,1
  1217. TVFD 18/,A
  1218. USE *
  1219. .FCN BSS 0
  1220. ENDM
  1221. PPR SPACE 4,30
  1222. ** PPR - GENERATE PPU REQUEST PROCESSOR TABLE ENTRY.
  1223. *
  1224. *
  1225. * PPR FCN,MON,PRG,SCP
  1226. * ENTRY *FCN* = FUNCTION CODE NUMBER.
  1227. * *MON* = MONITOR MODE PROCESSOR.
  1228. * *PRG* = PROGRAM MODE PROCESSOR.
  1229. * *SCP* = *DCP*, DROP CPU OPERATION NEEDS ACTIVE CPU.
  1230. * *SCP* = *FEX*, FAST EXIT WITHOUT FULL PARAMETER SETUP.
  1231. * ACTIVE CPU CHECK IS NOT MADE WITH *FEX* OPTION.
  1232. *
  1233. * THE *MON* AND *PRG* ADDRESSES MAY BE CONDITIONAL
  1234. * VALUES THAT ARE SET DURING PRESET. THEY ARE SPECIFIED
  1235. * IDENTICALLY TO THE WAY CONDITIONAL ADDRESSES ARE
  1236. * SPECIFIED IN THE CONDITIONAL JUMP MACROES.
  1237. * FOR EXAMPLE THE FOLLOWING INSTRUCTION SETS THE
  1238. * MONITOR MODE PROCESSOR ADDRESS TO EITHER /MMF/IAU
  1239. * OR /0MMF/IAU DEPENDING ON THE PRESENCE OF MMF.
  1240. *
  1241. * PPR IAUM,(/MMF/IAU,/0MMF/IAU,MMF)
  1242. *
  1243. * THE CORRECT ENTRY ADDRESS IS SET DEPENDING IN THIS CASE
  1244. * UPON THE PRESENCE OF THE MMF BLOCK.
  1245. *
  1246. * NOTE CPUMTR PROGRAM MODE FUNCTIONS MUST ALWAYS
  1247. * BE PROCESSED IN THE SAME CPU, THAT IS CPU-0
  1248. * IF BOTH CPU-S ARE AVAILABLE.
  1249.  
  1250.  
  1251. PURGMAC PPR
  1252.  
  1253. PPR MACRO FCN,A,B,C
  1254. MACREF PPR
  1255. LOC FCN
  1256. BSS 0
  1257. IFC NE,*B**,3
  1258. IFC NE,*C**,2
  1259. IFC NE,*C*FEX*,1
  1260. ERR PROGRAM MODE/CPU SELECTION CONFLICT
  1261. ORG TPPR+FCN-CPUM
  1262. .2 SET 0
  1263. IFC EQ,*C*FEX*,1
  1264. .2 SET 4000B
  1265. IFC EQ,*C*DCP*,1
  1266. .2 SET 2000B
  1267. VFD 12/.2
  1268. .1 SET 0
  1269. IRP B
  1270. .1 SET .1+1
  1271. IRP
  1272. IFEQ .1,0,1
  1273. VFD 18//PROGRAM/HNG
  1274. IFEQ .1,1,1
  1275. VFD 18//PROGRAM/B
  1276. IFGT .1,1,1
  1277. TVFD 18/,B
  1278. VFD 12/0
  1279. .1 SET 0
  1280. IRP A
  1281. .1 SET .1+1
  1282. IRP
  1283. IFEQ .1,0,1
  1284. VFD 18//MONITOR/.FCN
  1285. IFEQ .1,1,1
  1286. VFD 18//MONITOR/A
  1287. IFGT .1,1,1
  1288. TVFD 18/,A
  1289. USE *
  1290. .FCN BSS 0
  1291. PPR ENDM
  1292. SFMACRO SPACE 4,25
  1293. ** SFMACRO - DEFINE THE MACRO TO BUILD A SUBFUNCTION TABLE.
  1294. *
  1295. * F SFMACRO PIF,OPT,BIAS
  1296. *
  1297. * *SFMACRO* DEFINES A MACRO (NAMED BY THE *F* PARAMETER) THAT
  1298. * WILL BUILD SUBFUNCTION TABLE ENTRIES THAT ARE PACKED TWO PER
  1299. * WORD. IF *PAIRED* IS SPECIFIED, THERE IS AN ENTRY FOR EVERY
  1300. * TWO CONSECUTIVE SUBFUNCTION CODES. EACH ENTRY CONSISTS OF AN
  1301. * ADDRESS IN THE LOWER 18 BITS OF THE WORD AND AN OPTION CODE
  1302. * PACKED INTO THE UPPER 12 BITS OF THE WORD. WHEN OPTIONS ARE
  1303. * ALLOWED, THEIR CODES AND VALUES ARE SPECIFIED BY THE *OPT*
  1304. * PARAMETER. THE SECOND ENTRY IS CORRECTLY POSITIONED IN THE
  1305. * WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING THE
  1306. * WORD BY 30 BITS.
  1307. *
  1308. * F = FIRST THREE CHARACTERS OF MONITOR FUNCTION NAME.
  1309. * PIF = PAIRED/INDIVIDUAL FLAG.
  1310. * = *INDIVIDUAL*, IF THERE IS ONE SUBFUNCTION PER ENTRY.
  1311. * = *PAIRED*, IF THERE ARE TWO SUBFUNCTIONS PER ENTRY.
  1312. * OPT = AN OPTIONAL LIST OF OPTIONS TO BE ALLOWED FOR EACH
  1313. * ENTRY. (O=X,P=Y,Q=Z,...)
  1314. * O,P,Q = 1 OR 2 CHARACTER OPTION CODES.
  1315. * X,Y,Z = THE VALUE TO BE USED WHEN CODE IS SPECIFIED.
  1316. * OPTIONS ARE ADDED TOGETHER WHEN MORE THAN ONE IS USED.
  1317. * BIAS = NUMBER OF THE FIRST SUBFUNCTION (DEFAULT = 0).
  1318.  
  1319.  
  1320. PURGMAC SFMACRO
  1321.  
  1322. MACRO SFMACRO,F,PIF,OPT,BIAS
  1323. .A IFC EQ,/PIF/INDIVIDUAL/
  1324. .1 MICRO 1,,$*$ DELETE PAIRED-ONLY LINES
  1325. .A ELSE
  1326. IFC NE,/PIF/PAIRED/,1
  1327. ERR PARAMETER MUST BE *INDIVIDUAL* OR *PAIRED*
  1328. .1 MICRO 0,,$$ INCLUDE PAIRED-ONLY LINES
  1329. .A ENDIF
  1330. .A IFC EQ,/OPT//
  1331. .2 MICRO 1,,$*$ DELETE OPTION-ONLY LINES
  1332. .A ELSE
  1333. .2 MICRO 0,,$$ INCLUDE OPTION-ONLY LINES
  1334. .A ENDIF
  1335. F SFMACR0 ".1",".2",OPT,BIAS
  1336. ENDM
  1337. SFMACR0 SPACE 4,15
  1338. ** SFMACR0 - THE REAL MACRO THAT DOES THE WORK OF *SFMACRO*.
  1339. *
  1340. * F SFMACR0 PIF,OPF,OPT,BIAS
  1341. *
  1342. * F = FIRST THREE CHARACTERS OF MONITOR FUNCTION NAME.
  1343. * PIF = PAIRED/INDIVIDUAL FLAG.
  1344. * = *INDIVIDUAL*, IF THERE IS ONE SUBFUNCTION PER ENTRY.
  1345. * = *PAIRED*, IF THERE ARE TWO SUBFUNCTIONS PER ENTRY.
  1346. * OPF = OPTIONS FLAG.
  1347. * = -*-, IF OPTIONS MAY BE SPECIFIED FOR THE SUBFUNCTIONS.
  1348. * = NULL, IF OPTIONS ARE NOT USED.
  1349. * OPT = SAME AS *SFMACRO* PARAMETER.
  1350. * BIAS = SAME AS *SFMACRO* PARAMETER.
  1351.  
  1352.  
  1353. PURGMAC SFMACR0
  1354.  
  1355. MACRO SFMACR0,F,PIF,OPF,OPT,BIAS
  1356. .A IFC EQ,/PIF/*/
  1357. .1 MICRO 0,,$$ OMIT *SF2* PARAMETER
  1358. .A ELSE
  1359. .B IFC EQ,/PIF//
  1360. .1 MICRO 1,,$SF2,$ INCLUDE *SF2* PARAMETER
  1361. .B ELSE
  1362. ERR PAIRED FLAG MUST BE -*- OR OMITTED
  1363. .B ENDIF
  1364. .A ENDIF
  1365.  
  1366. .A IFC EQ,/OPF//
  1367. .1 MICRO 1,,$".1"OP,$ INCLUDE *OP* PARAMETER
  1368. IRP OPT DEFINE OPTION CODES
  1369. .4 MICRO 1,,=OPT= GET MNEMONIC
  1370. .4 MICCNT .4
  1371. .5 MICRO .4+2,,$OPT$ GET VALUE
  1372. .F_M.".4" EQU ".5"
  1373. IRP
  1374. .A ELSE
  1375. .B IFC NE,/OPF/*/
  1376. ERR OPTIONS FLAG MUST BE -*- OR OMITTED
  1377. .B ENDIF
  1378. .A ENDIF
  1379.  
  1380. PURGMAC F
  1381.  
  1382. F MACRO SF1,".1"BLOCK
  1383. .6 SET SF1
  1384. PIF .6 SET SF1/2
  1385. .7 SET 0_BIAS/2
  1386. PIF .7 SET 0_BIAS/4
  1387. ERRNZ T_F+.6-.6/2-.7-*O SUBFUNCTION OUT OF ORDER
  1388. .6 MICRO 1,17,$/MONITOR/.F_M_SF1$
  1389. PIF ERRNZ SF1/2*2-SF1 FIRST SUBFUNCTION MUST BE EVEN
  1390. PIF IFC NE,/SF2//,3
  1391. PIF .7 MICRO 1,17,$/MONITOR/.F_M_SF2$
  1392. PIF ERRNZ SF1*1+1-SF2 SUBFUNCTIONS MUST BE CONSECUTIVE
  1393. PIF ERRNZ ".6"-".7" SUBFUNCTIONS NOT DEFINED ON SAME *SUBFUN*
  1394.  
  1395. ORG T1
  1396. LOC SF1
  1397. VFD 18/".6"
  1398. .8 SET 2000B
  1399. OPF IRP OP
  1400. OPF .8 SET .8+.F_M.OP OP IS AN UNDEFINED OPTION
  1401. OPF IRP
  1402. .C IFEQ .6,.6/2*2 IF FIRST ENTRY IN WORD
  1403. ORG T_F+.6/2-.7
  1404. VFD 12/..SF1_NO,18/".6"
  1405. .D IFC NE,$BLOCK$$
  1406. SAC 18,".6",BLOCK,/MONITOR/HNG1
  1407. .D ENDIF
  1408. VFD 12/.8,18/..SF1_NA
  1409. .8 MICRO 1,, ..SF1
  1410. ..SF1_NO OCTMIC 4000B
  1411. ..SF1_NA MICRO 1,,$/MONITOR/HNG1$
  1412. RMT
  1413. ..SF1_NO EQU "..SF1_NO"B
  1414. ..SF1_NA EQU "..SF1_NA"
  1415. RMT
  1416. .C ELSE
  1417. ORG T_F+.6/2-.7+1
  1418. ".8"NO OCTMIC .8
  1419. ".8"NA MICRO 1,,$".6"$
  1420. .D IFC NE,$BLOCK$$
  1421. SAC 18,".6",BLOCK,/MONITOR/HNG1
  1422. .D ENDIF
  1423. .C ENDIF
  1424. ENDM
  1425. SFMACRO ENDM
  1426. SUBFUN SPACE 4,15
  1427. ** SUBFUN - DEFINE SUBFUNCTION PROCESSOR.
  1428. *
  1429. * SFA SUBFUN FNC,(SFN)
  1430. * ENTRY SFA = SUBFUNCTION PROCESSOR ENTRY NAME.
  1431. * FNC = FUNCTION NAME.
  1432. * SFN = ONE OR MORE SUBFUNCTION NAMES.
  1433. *
  1434. * THIS MACRO DEFINES A SYMBOL, QUALIFIED BY *MONITOR*, FOR EACH
  1435. * SUBFUNCTION IN THE LIST. THE SYMBOL NAME IS *.FNCSFN*,
  1436. * TRUNCATED TO 8 CHARACTERS. IT IS SET TO THE ADDRESS OF THE
  1437. * PROCESSOR.
  1438.  
  1439.  
  1440. PURGMAC SUBFUN
  1441.  
  1442. MACRO SUBFUN,SFA,FNC,SFN
  1443. SFA BSS 0
  1444. QUAL MONITOR
  1445. IRP SFN
  1446. .1 MICRO 1,8,$.FNC_SFN$
  1447. ".1" BSS 0
  1448. IRP
  1449. QUAL *
  1450. ENDM
  1451. RUE SPACE 4,10
  1452. ** RUE - READ USER ECS.
  1453. *
  1454. * RUE MODE
  1455. *
  1456. * ENTRY *MODE* = *MONITOR* IF CALLED FROM MONITOR MODE,
  1457. * OTHERWISE CALLED FROM PROGRAM MODE.
  1458. * (A0) = CM ADDRESS.
  1459. * (B4) = WORD COUNT TO READ FROM USER ECS.
  1460. * (B6) = RETURN ADDRESS.
  1461. * (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
  1462. *
  1463. * USES A - 2, 3, 6, 7, IF */SUE/RUM* ROUTINE CALLED.
  1464. *
  1465. * CALLS /SUE/RUM, IF SIMULTANEOUS UEM/ESM DEFINED.
  1466.  
  1467.  
  1468. RUE MACRO MODE
  1469. LOCAL S
  1470. + VFD 12/0400B
  1471. SAC 12,0400B,SUE,0114B
  1472. VFD 18/S
  1473. .A IFC EQ,*MODE*MONITOR*
  1474. S SAC 18,/SUE/RUM1,SUE,000000B
  1475. .A ELSE
  1476. S SAC 18,/SUE/RUM,SUE,000000B
  1477. .A ENDIF
  1478. ENDM
  1479. WUE SPACE 4,10
  1480. ** WUE - WRITE USER ECS.
  1481. *
  1482. * WUE MODE
  1483. *
  1484. * ENTRY *MODE* = *MONITOR* IF CALLED FROM MONITOR MODE,
  1485. * OTHERWISE CALLED FROM PROGRAM MODE.
  1486. * (A0) = CM ADDRESS.
  1487. * (B4) = WORD COUNT TO WRITE TO USER ECS.
  1488. * (B6) = RETURN ADDRESS.
  1489. * (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
  1490. *
  1491. * USES A - 2, 3, 6, 7, IF */SUE/WUM* ROUTINE CALLED.
  1492. *
  1493. * CALLS /SUE/WUM, IF SIMULTANEOUS UEM/ESM DEFINED.
  1494.  
  1495.  
  1496. WUE MACRO MODE
  1497. LOCAL S
  1498. + VFD 12/0400B
  1499. SAC 12,0400B,SUE,0124B
  1500. VFD 18/S
  1501. .A IFC EQ,*MODE*MONITOR*
  1502. S SAC 18,/SUE/WUM1,SUE,000000B
  1503. .A ELSE
  1504. S SAC 18,/SUE/WUM,SUE,000000B
  1505. .A ENDIF
  1506. ENDM
  1507. SPACE 4,10
  1508. * DEFINE *QUAL* ORDER IN CROSS REFERENCE.
  1509.  
  1510. QUAL MONITOR
  1511. QUAL PROGRAM
  1512. QUAL PRESET
  1513. QUAL
  1514. TITLE TABLES.
  1515. TMNR SPACE 4,10
  1516. ** NOTE - THE FOLLOWING TABLES *TMNR*, *TPMN*, AND *TPPR*
  1517. * MUST BE CONTIGOUS AND THE UPPER FOUR BITS OF THE ENTRIES
  1518. * IN THE FIRST TWO TABLES MUST BE 0 DUE TO CODE IN ROUTINE
  1519. * */MONITOR/PPR*.
  1520.  
  1521.  
  1522. ** TMNR - TABLE OF *MTR* PROGRAM MODE REQUEST PROCESSORS.
  1523. * ENTRY 1 WORD.
  1524. *
  1525. * INDEXED BY *MTR* PROGRAM MODE FUNCTION.
  1526. *
  1527. *T 4/0,38/,18/ ADDR
  1528. *
  1529. * ADDR ADDRESS OF PROCESSOR.
  1530.  
  1531.  
  1532. QUAL PROGRAM
  1533. USE TMNR
  1534. TMNR BSS 0
  1535. DUP PMXF,1
  1536. VFD 42/0,18//PROGRAM/HNG
  1537.  
  1538. USE *
  1539. QUAL *
  1540. TPMN SPACE 4,10
  1541. ** TPMN - PPU MONITOR REQUESTS.
  1542. * ENTRY = 1 WORD.
  1543. *
  1544. * INDEXED BY PPU MONITOR FUNCTION.
  1545. *
  1546. *T 4/0,38/,18/ ADDR
  1547. *
  1548. * ADDR ADDRESS OF PROCESSOR.
  1549.  
  1550.  
  1551. USE TPMN
  1552. TPMN BSS 0
  1553. DUP MXPF-1,1
  1554. VFD 42/0,18//MONITOR/HNG
  1555.  
  1556. USE *
  1557. TPPR SPACE 4,10
  1558. ** TPPR - PPU REQUEST TABLE.
  1559. * ENTRY = 1 WORD.
  1560. *
  1561. * INDEXED BY MONITOR FUNCTION.
  1562. *
  1563. *T 1/F,1/D,10/,18/ PRG,12/,18/ MTR
  1564. *
  1565. * F *SCP* = *FEX* SPECIFIED.
  1566. * D *SCP* = *DCP* SPECIFIED.
  1567. * PRG PROGRAM MODE PROCESSOR ADDRESS.
  1568. * MTR MONITOR MODE PROCESSOR ADDRESS.
  1569.  
  1570.  
  1571. USE TPPR
  1572. .1 SET CPUM-MXPF+1-PMXF
  1573. IFGT .1,0,2
  1574. DUP .1,1
  1575. VFD 42/0,18//MONITOR/HNG
  1576. TPPR BSS 0
  1577. DUP MXFM-CPUM,1
  1578. VFD 42/0,18//MONITOR/HNG
  1579.  
  1580. TPPRL BSS 0
  1581. USE *
  1582. TREL SPACE 4,10
  1583. ** THE FOLLOWING DECLARATIONS ESTABLISH THE *TREL* USE BLOCK
  1584. * FOR THE *SAC* MACRO. *CPUMLD* LOADS THIS BLOCK (FOLLOWED
  1585. * BY THE *TBLK* BLOCK) AFTER ALL OTHER BLOCKS THAT ARE
  1586. * INCLUDED IN THE LOAD.
  1587.  
  1588.  
  1589. QUAL PRESET
  1590. USE /TREL/
  1591. REL BSS 0
  1592. USE *
  1593. QUAL *
  1594. TJMP SPACE 4,10
  1595. ** ESTABLISH *TJMP* BLOCK
  1596.  
  1597.  
  1598. QUAL PRESET
  1599. USE /TJMP/
  1600. TJMP BSS 0
  1601. USE *
  1602. QUAL *
  1603. TITLE DATA.
  1604. DATA SPACE 4
  1605. ORG BSS 0
  1606. DATA SPACE 4
  1607. ** *CPUMTR* LOW MEMORY LOCATIONS.
  1608.  
  1609.  
  1610. CL BSS 0
  1611.  
  1612. ORG CL+CBLP LOADED BLOCK TABLE POINTER
  1613.  
  1614. VFD 42/0,18//MONITOR/LBAT
  1615.  
  1616. ORG CL+CSXP SYSTEM CP EXCHANGE PACKAGE TABLE ADDRESS
  1617.  
  1618. VFD 42/0,18//MONITOR/MNRA
  1619.  
  1620. ORG CL+CXBP *EXPACS* BLOCK POINTER
  1621.  
  1622. VFD 42/0,18//MONITOR/MXP
  1623.  
  1624. ORG CL+CFPP FAST PP LOADER TABLE POINTERS
  1625.  
  1626. VFD 24/0,6//MONITOR/TPPIL,6//MONITOR/TFPLL,6/0,18//MONITOR/
  1627. ,TFPL
  1628.  
  1629. ORG CL+CMST MONITOR MODE STATUS BY CPU
  1630.  
  1631. VFD 60/0
  1632. VFD 60/0
  1633.  
  1634. ORG CL+CPBT PROGRAM MODE BASE TIME BY CPU
  1635.  
  1636. CON 0
  1637. CON 0
  1638.  
  1639. ORG CL+CACX ALTERNATE CPU EXCHANGE REQUESTS BY CPU
  1640.  
  1641. CON 0
  1642. CON 0
  1643.  
  1644. ORG CL+CMTLL
  1645.  
  1646. QUAL MONITOR
  1647. PX SPACE 4
  1648. ** PX - PROGRAM MODE EXIT REQUEST.
  1649. * (PX) IS SET FOR IN THE FOLLOWING CASES.
  1650. * (PX) = 1 INDICATES THAT PROGRAM MODE MONITOR IS COMPLETE.
  1651. * (PX) = -1 INDICATES A PP IS REQUESTED BY PROGRAM MODE MONITOR.
  1652. * (PX) = -2 INDICATES AN *MTR*-LIKE FUNCTION IS REQUESTED BY
  1653. * PROGRAM MODE MONITOR. (SEE *PMN*.)
  1654.  
  1655.  
  1656. PX CON 0 PROGRAM MODE EXIT REQUEST
  1657. PR SPACE 4
  1658. ** PR - PROGRAM MODE REQUESTS.
  1659. * (PR) CONTAINS A STACK OF REQUESTS FOR PROGRAM MODE
  1660. * EXECUTION.
  1661. *
  1662. *T, PR 1/,11/ MF,20/ PF,1/ PS,27/
  1663. * MF *MTR* PROGRAM MODE REQUESTS.
  1664. * PF PP PROGRAM MODE REQUESTS.
  1665. * PS PSEUDO-PP REQUEST.
  1666.  
  1667.  
  1668. PR CON 0
  1669. SMPR SPACE 4,10
  1670. ** SMPR - STORAGE MOVE PROGRAM REQUEST.
  1671. *
  1672. * WORD *SMPR* CONTAINS THE REQUEST FOR THE STORAGE MOVE
  1673. * (PROGRAM MODE) EXCHANGE PACKAGE. IT WILL CONTAIN EITHER
  1674. * *MSTF*+1 OR *MECF*+1, DEPENDING ON WHETHER THE CURRENT
  1675. * STORAGE MOVE REQUEST IS FOR CM OR ECS/ESM/UEM. IF NO
  1676. * REQUESTS ARE PENDING OR IN PROGRESS, THIS WORD WILL BE
  1677. * ZERO. NOTE THAT THIS MECHANISM CANNOT STACK REQUESTS.
  1678.  
  1679.  
  1680. SMPR CON 0,0
  1681. SMIN EQU SMPR+1 STORAGE MOVE INCREMENT
  1682. DD SPACE 4,10
  1683. ** DD - INPUT REGISTER FOR DAYFILE DUMP PROCESSOR.
  1684.  
  1685.  
  1686. DD VFD 18/3L1DD,42/0
  1687. MP SPACE 4
  1688. ** MP - INPUT REGISTER FOR MONITOR AUXILLARY PROCESSOR.
  1689. * USED FOR ASSIGNING THE MONITOR AUXILLARY PROCESSOR TO
  1690. * PROCESS REQUESTS FOR STORAGE INCREASES.
  1691.  
  1692.  
  1693. MP VFD 18/0L1MA,3/2,39/0
  1694. MT SPACE 4,10
  1695. ** MT - MONITOR MODE TIME. (180 MACHINES).
  1696.  
  1697.  
  1698. MT CON 0,0 MONITOR MODE TIME BY CPU
  1699. SA SPACE 4,10
  1700. ** SA - CPU SLICE TIME ACCUMULATED SINCE CPU SWITCH.
  1701.  
  1702.  
  1703. SA CON 0,0 SLICE TIME ACCUMULATED BY CPU
  1704. SPACE 4
  1705. ** RC - RA+1 AUTO RECALL REQUEST.
  1706.  
  1707.  
  1708. RC VFD 24/0LRCLP,36/0
  1709. AM SPACE 4,10
  1710. ** AM - ACTIVITY MASK FOR PP-S AND TAPE.
  1711.  
  1712.  
  1713. AM CON 00370000000000007760B
  1714. SPACE 4,10
  1715. ** IP - INCREASE PRIORITY ON I/O COMPLETION.
  1716. *
  1717. * IP = 20, GIVES NEXT JOB STARTED EXTRA PRIORITY OVER
  1718. * EQUAL PRIORITY JOB. THIS IS SET BY
  1719. * *DPPM* AND *RCLM* FUNCTIONS.
  1720. *
  1721. * IP = 0, NO CHANGE IN PRIORITY.
  1722.  
  1723.  
  1724. IP CON 0
  1725. SPACE 4
  1726. ** WT - *WQ* TERMINATOR.
  1727. *
  1728. * THE LAST ENTRY IN *WQ* POINTS TO THIS LOCATION.
  1729.  
  1730.  
  1731. WT VFD 12/2000B,48/0
  1732. TPRC SPACE 4,10
  1733. ** PRIORITY CONTROL TABLE.
  1734.  
  1735.  
  1736. TPRC BSS 0
  1737. DUP MPRS+1,1
  1738. CON 0
  1739. SPACE 4,10
  1740. ** THE FOLLOWING ARE USED FOR TEMPORARY STORAGE.
  1741.  
  1742. QUAL MONITOR
  1743. RA BSS 1 ADDRESS OF RA
  1744. RA1 BSS 1 ADDRESS OF RA+1
  1745. ERRNZ RA1-RA-1
  1746.  
  1747. T1 BSS 1
  1748. T2 BSS 1
  1749. T3 BSS 1
  1750. QUAL *
  1751. SPACE 4
  1752. **** THE FOLLOWING ARE CONSTANTS.
  1753.  
  1754.  
  1755. TH CON 0.001P48+1 .001
  1756. CON 1000.P 1000
  1757. TTH CON 0.0001P48+1 .0001
  1758. CON 10000.P 10000
  1759. HTH CON 0.0000001P48+1
  1760. ****
  1761. TTL CPUMTR/MONITOR - MONITOR MODE EXECUTION.
  1762. TITLE MTR - MAIN PROGRAM.
  1763. MTR SPACE 4
  1764. ** MONITOR MODE EXECUTION REGISTER USAGE.
  1765. *
  1766. * INVIOLATE USAGE.
  1767. *
  1768. * (A0) = CPU NUMBER (0 OR 1).
  1769. * (A5) = OUTPUT REGISTER ADDRESS FOR ALL ROUTINES THAT MAY HAVE
  1770. * BEEN ENTERED FROM A POOL PP EXCHANGE.
  1771. * (B1) = 1.
  1772. * (B2) = ADDRESS OF CALLER-S EXCHANGE PACKAGE.
  1773. * (B7) = CONTROL POINT ADDRESS.
  1774. *
  1775. * NOTE - CMU MAY NOT BE USED IN MONITOR MODE ON A DUAL CPU
  1776. * MACHINE WITH ONLY A SINGLE CMU BECAUSE THE CMU MAY BE IN
  1777. * USE ON THE OTHER CPU, CAUSING MONITOR MODE TO WAIT FOR THE
  1778. * CMU TO BECOME FREE.
  1779. *
  1780. * CONVENTIONS.
  1781. *
  1782. * (B3) = SUBROUTINE EXIT ADDRESS.
  1783. MTRX SPACE 4
  1784. ** MTRX - MONITOR EXIT.
  1785. * THE FOLLOWING RULES MUST BE FOLLOWED ON EXIT -
  1786. *
  1787. * 1) ALL EXITS MUST CHECK FOR A POSSIBLE MODE ERROR THAT
  1788. * WAS IN PROCESS (HAD NOT GENERATED AN EXCHANGE) AT THE TIME
  1789. * OF THE EXCHANGE INTERRUPT. IF THIS IS NOT DONE MODE
  1790. * ERRORS WILL NOT BE PROCESSED CORRECTLY ON MACHINES SUCH
  1791. * AS THE CYBER 73.
  1792. *
  1793. * 2) ALL EXITS MUST SET (X0) = 0 AND BRANCH TO */NVE/XJ1*
  1794. * (IF PRESENT) IMMEDIATELY PRIOR TO THE *XJ*. THIS IS A
  1795. * MICROCODE REQUIREMENT.
  1796. *
  1797. * 3) ALL EXITS MUST CHECK FOR A CPU SWITCH REQUEST.
  1798.  
  1799.  
  1800. MTRC SA7 A5+ STORE OUTPUT REGISTER FOR PPU REQUEST
  1801. PPR1 EQU MTRC
  1802. EQ MTRX EXIT MONITOR MODE
  1803.  
  1804. MTRP SA1 RA1 ADDRESS OF RA+1
  1805. NO
  1806. EWX7 X1 SET RA+1
  1807.  
  1808. MTRX TNO /MONITOR/MTRX+1,NTRACE
  1809. *PPRX EQU MTRX
  1810. JP /TRACE/TRP CHECK FOR TRAP CONDITION
  1811. SA2 A0+CSWL CHECK FOR CPU SWITCH REQUEST
  1812. SA3 B2+ CHECK FOR MODE ERROR
  1813. NG X2,BNJ1 IF CPU SWITCH REQUEST
  1814. AX3 36+1 CHECK FOR P = 0 OR 1
  1815. SB4 XJ1 *CJS* RETURN ADDRESS
  1816. ZR X3,MTR2 IF MODE ERROR
  1817.  
  1818. XJ1 SX0 B0+
  1819. TNO /CME/XJ2,CME
  1820. XJ1.1 XJ B2 EXCHANGE TO PROGRAM
  1821.  
  1822. TNO /IH819/XJ2,IH819 CHECK STEP CONDITION
  1823.  
  1824. XJ2 SA1 CPSL
  1825. RC X3 GET MONITOR MODE START TIME IF 180 MACHINE
  1826. PX6 B0,X3
  1827. SA6 CL+CMST+A0 SET CPU CALL AND BASE TIME
  1828. NZ X1,MTR3 IF PP EXCHANGE REQUESTED
  1829. MTR SPACE 4
  1830. * ENTRY FROM CPU PROGRAM.
  1831.  
  1832.  
  1833. MTR SA2 B2+B1 SET RA
  1834. SX7 B1
  1835. TA5 20B,SP SET FAKE RA
  1836. AX2 36 RA
  1837. BX6 X2
  1838. IX7 X2+X7 RA+1
  1839. ERX5 X7 READ RA+1
  1840. SA6 RA STORE RA
  1841. SB3 A6 ADDRESS OF RA ADDRESS
  1842. SA7 A6+B1 STORE RA+1
  1843. ZR X2,MNR IF RA = 0, CHECK MONITOR REQUEST
  1844. NZ X5,CPR PROCESS CPU REQUEST IF (RA+1) " 0
  1845. TEQ (/MONITOR/PPE,CP176,/MONITOR/MTRX) CHECK MODE ERROR
  1846.  
  1847. * PROCESS MODE ERROR.
  1848.  
  1849. MTR2 SA1 CPAL+A0
  1850. SB6 B2 SET EXCHANGE PACKAGE ADDRESS
  1851. AX1 24
  1852. SB7 X1
  1853. JP CJS
  1854.  
  1855. * PROCESS PP PRIORITY EXCHANGE.
  1856.  
  1857. MTR3 SX6 B0 CLEAR EXCHANGE REQUESTED
  1858. SA6 A1
  1859. TA1 PRXS,SDA COUNT EXCHANGE REQUESTS
  1860. SA2 TSCL+A0
  1861. SX0 B1
  1862. IX6 X1+X0
  1863. AX2 48+3
  1864. SA6 A1
  1865. SX2 X2-LSCS-200B
  1866. PL X2,MTR IF SYSTEM PRIORITY
  1867. EQ SXS PLACE CONTROL POINT IN RECALL
  1868. MNR SPACE 4,10
  1869. ** MNR - MONITOR REQUEST PROCESSING.
  1870. *
  1871. * THIS ROUTINE DOES THE START-UP AND EXIT PROCESSING FOR THE
  1872. * VARIOUS PROGRAM-MODE EXCHANGE PACKAGES CONTAINED WITHIN
  1873. * *CPUMTR*.
  1874. *
  1875. * ENTRY (X3) = MONITOR MODE START TIME IF 180 MACHINE.
  1876.  
  1877.  
  1878. MNR SA1 B2+CWQW GET EXCHANGE PACKAGE TYPE
  1879. MX2 -3
  1880. LX1 -18
  1881. BX1 -X2*X1 EXCHANGE PACKAGE TYPE
  1882. SA1 MNRA+X1 GET PROCESSOR ADDRESS
  1883. AX1 18 SHIFT TO PROCESSOR ADDRESS
  1884. SB4 X1
  1885. JP B4 JUMP TO PROCESSOR
  1886.  
  1887. * PROCESS EXIT FROM CONTROL POINT N+1.
  1888.  
  1889. MNR3 SB7 B2 SET CONTROL POINT ADDRESS
  1890. TNO /BUFIO/MNR,BUFIO IF BUFFERED I/O PRESENT
  1891. BX0 X0-X0
  1892. MNR4 SA1 PX PROGRAM MODE EXIT STATUS
  1893. SA2 PR PROGRAM MODE REQUESTS
  1894. BX7 X7-X7
  1895. SA7 A1 CLEAR EXIT STATUS
  1896. ZR X1,MTRX IF PROGRAM MODE NOT COMPLETE
  1897. SB3 X1+3
  1898. TNG X1,(/ISD/MNR5,ISD,/MONITOR/MNR5) IF REQUEST
  1899. ZR X2,BNJ IF NO MORE REQUESTS TO PROCESS
  1900. EQ MTRX RETURN TO PROGRAM MODE
  1901.  
  1902. * PROCESS PP REQUEST FROM CONTROL POINT N+1.
  1903.  
  1904. MNR5 SX1 B0+ PRESET RESPONSE
  1905. SB6 MNR6 *CAL* RETURN ADDRESS - NO LIMIT
  1906. SB3 MNR7 *CAL* RETURN ADDRESS - ACTIVITY LIMIT
  1907. EQ CAL CHECK ACTIVITY LIMIT
  1908.  
  1909. MNR6 SA2 B2+16B PARAMETER WORD IN (X6)
  1910. SA5 B2+17B PP CALL IN (X7)
  1911. SB4 -1
  1912. BX7 X2
  1913. BX6 X5
  1914. SA7 APQA
  1915. EQ APQ ASSIGN PP
  1916.  
  1917. MNR7 BX7 X1
  1918. SA7 A5-B1 RETURN STATUS IN (X6)
  1919. EQ MTRX RETURN
  1920.  
  1921. * PROCESS STORAGE MOVE EXIT PROCESSING.
  1922.  
  1923. MNR8 SA1 SMPR STORAGE MOVE REQUESTS
  1924. NZ X1,MTRX IF NOT YET COMPLETE, RETURN
  1925. EQ TSM TERMINATE STORAGE MOVE
  1926.  
  1927.  
  1928. * THE FOLLOWING TABLE MUST BE MAINTAINED IN THE ORDER OF THE
  1929. * PROGRAM MODE EXCHANGE PACKAGE TYPES DEFINED IN *COMSMTR*.
  1930. *
  1931. * ENTRY FORMAT -
  1932. *
  1933. * 24/ 0,18/ PROCESSOR ADDRESS,18/ EXCHANGE PACKAGE ADDRESS
  1934.  
  1935. MNRA VFD 24/0,18/MNR3 CONTROL POINT N+1
  1936. TVFD 18/0,SCA
  1937.  
  1938. VFD 24/0,18/MNR8,18//PROGRAM/SMPXP STORAGE MOVE XP
  1939.  
  1940. VFD 24/0 FIELD LENGTH VERIFICATION XP
  1941. TVFD 18/0,(/CME/MNR,CME,0)
  1942. TVFD 18/0,(/CME/VFLXP,CME,0)
  1943.  
  1944. VFD 24/0 PSEUDO-PP EXCHANGE PACKAGE
  1945. TVFD 18/0,(/BUFIO/MNR1,BUFIO,/MONITOR/MNR)
  1946. TVFD 18/0,(/BUFIO/CPP,BUFIO,0)
  1947.  
  1948. * ALL FOLLOWING ENTRIES WILL HANG *MNR*.
  1949.  
  1950. VFD 24/0,18/MNR,18/IXP CPU 0 IDLE PACKAGE XP
  1951.  
  1952. VFD 24/0,18/MNR CPU 1 IDLE PACKAGE XP
  1953. TVFD 18/0,(/DCP/IXP1,DCP,0)
  1954.  
  1955. VFD 24/0,18/MNR,18/0 ILLEGAL
  1956.  
  1957. VFD 24/0,18/MNR,18/0 ILLEGAL
  1958.  
  1959. CON 0 END OF TABLE
  1960. TITLE UTILITY SUBROUTINES.
  1961. APP SPACE 4
  1962. AAD SPACE 4
  1963. ** AAD - APPLY ADDER INCREMENT TO SRU ACCUMULATOR.
  1964. *
  1965. * NEW SRU = AD (UNITS) + OLD SRU.
  1966. *
  1967. * ENTRY (X1) = INCREMENT (INTEGER FORMAT).
  1968. * (B3) = EXIT ADDRESS.
  1969. * (B4) = OVERFLOW FLAG.
  1970. *
  1971. * EXIT EXITS THRU ROUTINE *AIO* TO APPLY FINAL
  1972. * INCREMENT TO SRU ACCUMULATOR.
  1973. *
  1974. * USES X - 1, 2, 3, 6.
  1975. * A - 2, 3, 6.
  1976.  
  1977.  
  1978. AAD ZR X1,AIO2 IF NO INCREMENT
  1979. SX2 10000000/200B
  1980. IX1 X1*X2
  1981. LX1 7
  1982. EQ AIO1 (X1) = SRU INCREMENT
  1983. ACB SPACE 4,15
  1984. ** ACB - ASSIGN COMMUNICATION BUFFER.
  1985. *
  1986. * *ACB* ALLOCATES A BUFFER FOR COMMUNICATION BETWEEN
  1987. * *CPUMTR* AND A PP. IT IS THE RESPONSIBILITY OF THE
  1988. * PP TO CLEAR THE FIRST WORD OF ITS ASSIGNED BUFFER
  1989. * WHEN COMPLETE. THIS *RETURNS* THE BUFFER TO THE
  1990. * SYSTEM FOR FURTHER USAGE. *CPUMTR* WILL NOT ASSIGN
  1991. * THE BUFFER TO ANYONE ELSE AS LONG AS THE FIRST WORD
  1992. * OF THE BUFFER IS NON-ZERO.
  1993. *
  1994. * ENTRY (B3) = RETURN ADDRESS.
  1995. * (B3) .LT. 0 IF RETURN TO */PROGRAM/APS1*.
  1996. *
  1997. * EXIT (X1) = ADDRESS OF BUFFER.
  1998. * (X1) = 0 IF NO BUFFER AVAILABLE.
  1999. *
  2000. * USES X - 1, 6.
  2001. * A - 1, 6.
  2002.  
  2003.  
  2004. ACB SX6 B0+ INITIALIZE BUFFER INDEX
  2005. ACB1 SX1 X6-MCBLL
  2006. ZR X1,ACB3 IF END OF BUFFER(S)
  2007. SX1 MCB+X6 ADDRESS OF BUFFER
  2008. SX6 X6+MCBL INCREMENT TO NEXT BUFFER
  2009. + SA1 X1 **** PERFORM IN ONE WORD ****
  2010. NZ X1,ACB1 IF ASSIGNED **** PERFORM IN ONE WORD ****
  2011. SA6 A1 **** PERFORM IN ONE WORD ****
  2012. SX1 A1+ ADDRESS OF BUFFER
  2013. ACB2 NG B3,/PROGRAM/APS1 IF CALLED BY *APS*
  2014. JP B3 RETURN
  2015.  
  2016. ACB3 TA1 CBNS,SDA COUNT BUFFER NOT AVAILABLE
  2017. SX6 B1
  2018. IX6 X1+X6
  2019. SA6 A1
  2020. SX1 B0 SET BUFFER NOT AVAILABLE
  2021. EQ ACB2 RETURN
  2022. MCB SPACE 4,10
  2023. ** MCB - MONITOR COMMUNICATION BUFFER(S).
  2024. *
  2025. * THESE BUFFERS ARE USED BY *CPUMTR* TO PASS INFORMATION
  2026. * TO A PP REQUESTED BY IT (SUCH AS *1MA* AND *1MC*).
  2027. * THE ASSEMBLY CONSTANTS ARE DEFINED IN *COMSMSC*.
  2028. *
  2029. * NMCB = NUMBER OF BUFFER(S).
  2030. * MCBL = LENGTH OF BUFFER.
  2031.  
  2032.  
  2033. MCB BSS 0
  2034. .A DUP NMCB
  2035. CON 0 FWA OF BUFFER - NOT BUSY
  2036. BSS MCBL-1
  2037. .A ENDD
  2038. MCBLL EQU *-MCB TOTAL LENGTH OF BUFFER(S)
  2039. ACS SPACE 4,25
  2040. ** ACS - ADVANCE CPU SERVICE CYCLE.
  2041. *
  2042. * ENTRY (B3) = EXIT ADDRESS.
  2043. * (X1 BITS 0 - 17) = ADDRESS OF FIRST *WQ* ENTRY AT OR
  2044. * BELOW PRIORITY (WITHOUT FLAGS) OF
  2045. * NEW JOB.
  2046. * (X3) = NEW JOB *CWQW* (DELINKED FROM *WQ*).
  2047. * (A3) = ADDRESS OF NEW JOB *CWQW*.
  2048. * (B4) = NEW JOB CPU PRIORITY (WITH FLAGS).
  2049. *
  2050. * EXIT SERVICE CYCLE UPDATED FOR PRIORITY.
  2051. * CPU SCHEDULING ACSUMULATORS AND FLAGS RESET FOR
  2052. * NEW JOB AND ALL *WQ* ENTRIES AT THE SAME CPU
  2053. * PRIORITY.
  2054. * (X7) = *CSAW* FOR NEW SERVICE CYCLE.
  2055. * (B4) = NEW JOB CPU PRIORITY (WITH FLAGS).
  2056. * (B6) = NEW JOB CPU PRIORITY (WITHOUT FLAGS).
  2057. *
  2058. * USES X - 0, 1, 2, 3, 5, 6, 7.
  2059. * A - 1, 2, 6, 7.
  2060. * B - 5, 6.
  2061.  
  2062.  
  2063. ACS BSS 0 ENTRY
  2064.  
  2065. * ADVANCE SERVICE CYCLE FOR PRIORITY AND UPDATE NEW JOB CPU
  2066. * SCHEDULING PARAMETERS.
  2067.  
  2068. SX6 B4
  2069. AX6 3
  2070. SA2 TPRC+X6 GET SERVICE CYCLE FOR PRIORITY
  2071. MX7 6
  2072. SX0 B1
  2073. LX6 3
  2074. LX0 54-0
  2075. SB6 X6 SET PRIORITY WITHOUT FLAGS FOR COMPARISON
  2076. BX6 X7*X2 OLD SERVICE CYCLE
  2077. BX2 -X7*X2
  2078. IX6 X6+X0
  2079. BX7 X7*X6 NEW SERVICE CYCLE
  2080. BX6 X2+X7 MERGE NEW SERVICE CYCLE
  2081. SX2 24B
  2082. SA6 A2+ UPDATE *TPRC* ENTRY
  2083. LX2 45
  2084. BX3 X3+X2 SET SLICE ACTIVE/INCOMPLETE FLAGS
  2085. SX5 A3+
  2086. BX6 X3
  2087. UX0,B4 X3 SET PRIORITY WITH ACTIVE FLAG
  2088.  
  2089. * UPDATE CPU SCHEDULING PARAMETERS FOR ALL *WQ* ENTRIES AT
  2090. * PRIORITY OF NEW JOB.
  2091.  
  2092. ACS1 SA1 X1 GET NEXT *WQ* ENTRY
  2093. SA6 X5 UPDATE PRIORITY FLAGS
  2094. SA7 X5+B1 SET SERVICE CYCLE AND CLEAR ACSUMULATORS
  2095. ERRNZ CSAW-CWQW-1
  2096. SX5 A1
  2097. UX0,B5 X1 UNPACK PRIORITY WITH FLAGS
  2098. BX6 X1+X2 SET SLICE ACTIVE FLAGS
  2099. LE B6,B5,ACS1 IF PRIORITY (NO FLAGS) SAME AS NEW JOB
  2100. JP B3 RETURN
  2101. AIO SPACE 4
  2102. ** AIO - APPLY IO INCREMENT TO SRU ACCUMULATOR.
  2103. *
  2104. * IO = S2*MS + S3*MT + S4*PF + S5*OD
  2105. *
  2106. * NEW SRU = IOM*IO + OLD SRU
  2107. *
  2108. * ENTRY (X1) = INCREMENT (INTEGER FORMAT).
  2109. * (X2) = INCREMENT INDEX.
  2110. * (B3) = EXIT ADDRESS.
  2111. * (B4) = OVERFLOW FLAG.
  2112. *
  2113. * USES X - 0, 1, 2, 3, 4, 6.
  2114. * B - 4, 6.
  2115. * A - 2, 3, 4, 6.
  2116.  
  2117.  
  2118. AIO ZR X1,AIO2 IF NO INCREMENT
  2119. SA2 AIOA+1+X2 INCREMENT MULTIPLIER (S2, S3, S4 OR S5)
  2120. SA3 B7+MP3W IO MULTIPLIER (IOM)
  2121. MX6 -30
  2122. PX1 X1
  2123. BX3 -X6*X3 ISOLATE IOM
  2124. NX1 X1
  2125. PX3 X3
  2126. RX1 X2*X1 IO = (S2, S3, S4, S5) * (MS, MT, PF, OD)
  2127. NX3 X3
  2128. RX1 X3*X1 IOM * IO
  2129. UX1,B6 X1
  2130. LX1 B6 (X1) = SRU INCREMENT
  2131. NE B1,B4,AIO1 IF NOT PF ACCUMULATOR
  2132. SB4 B4+1
  2133.  
  2134. * UPDATE SRU ACCUMULATOR.
  2135. * (X1) = INCREMENT.
  2136. * (B4) = 0B FOR NO OVERFLOW,
  2137. * 1B FOR ADDER OVERFLOW,
  2138. * 2B FOR PF OVERFLOW,
  2139. * 4B FOR TAPE OVERFLOW,
  2140. * 10B FOR MS OVERFLOW,
  2141. * 20B FOR MP OVERFLOW,
  2142. * 40B FOR AUC OVERFLOW,
  2143. * 100B FOR OD OVERFLOW.
  2144.  
  2145. AIO1 SA2 B7+SRUW SRU ACCUMULATOR
  2146. MX0 -42
  2147. BX6 X2
  2148. SA4 B7+MP3W CHECK FOR SRU ACCUMULATION DISABLED
  2149. NG X4,AIO2 IF SRU ACCUMULATION DISABLED
  2150. BX4 -X0*X2 ISOLATE ACCUMULATOR
  2151. SA3 B7+STLW GET SRU LIMIT
  2152. IX4 X4+X1 APPLY INCREMENT
  2153. BX3 -X0*X3 ISOLATE LIMIT VALUE
  2154. IX6 X2+X1
  2155. IX4 X3-X4 COMPARE LIMIT TO NEW VALUE
  2156. SA6 A2
  2157. PL X4,AIO2 IF LIMIT NOT EXCEEDED
  2158. SB4 B4+20000B SET SRU LIMIT FLAG
  2159. AIO2 NZ B4,AIO3 IF OVERFLOW OR LIMIT HAS OCCURRED
  2160. JP B3
  2161.  
  2162. AIO3 SA2 B7+SRUW SET LIMIT FLAGS
  2163. SX0 B4
  2164. BX3 X2
  2165. LX0 43 POSITION FLAGS
  2166. LX3 59-53
  2167. NG X3,RB3 IF RESOURCE LIMITS DISABLED
  2168. BX6 X2+X0
  2169. SA6 A2
  2170. JP B3 EXIT
  2171.  
  2172. AIOA CON "S5SRM","S4SRM","S3SRM","S2SRM" S5,S4,S3,S2
  2173. AMP SPACE 4,10
  2174. ** AMP - ADD MAP PROCESSOR OR OPTICAL DISK INCREMENT.
  2175. *
  2176. * IF OD, EXITS TO *AIO* TO APPLY IO INCREMENT.
  2177. *
  2178. * IF MAP, NEW SRU = M1 * MAP MULTIPLIER * (X1) + OLD SRU
  2179. *
  2180. * ENTRY (X1) = INCREMENT (INTEGER FORMAT)
  2181. * (X2) = 0 IF MAP INCREMENT,
  2182. * 1 IF OD INCREMENT.
  2183. * (B3) = EXIT ADDRESS
  2184. * (B4) = OVERFLOW FLAG
  2185. *
  2186. * EXIT EXITS THRU ROUTINE *AIO* TO APPLY FINAL
  2187. * INCREMENT TO SRU ACCUMULATOR.
  2188. *
  2189. * USES A - 3.
  2190. * B - 4.
  2191. * X - 1, 2, 3, 6.
  2192.  
  2193. AMP ZR X1,AIO2 IF NO INCREMENT
  2194. NZ X2,AMP1 IF OD INCREMENT
  2195. SA3 B7+MPAW GET M1 * MAP MULTIPLIER
  2196. MX6 18
  2197. BX2 X6*X3 ISOLATE MULTIPLIER
  2198. LX2 18
  2199. IX1 X1*X2 M1 * MAP MULTIPLIER * INCREMENT
  2200. ZR B4,AIO1 IF NO OVERFLOW
  2201. SB4 20B SET OVERFLOW FLAG TO MAP
  2202. EQ AIO1 UPDATE SRU ACCUMULATION
  2203.  
  2204. AMP1 SX2 -1 SET INDEX TO *S5*
  2205. ZR B4,AIO IF NO OVERFLOW
  2206. SB4 100B SET OVERFLOW FLAG TO OD
  2207. EQ AIO UPDATE IO SRU ACCUMULATION
  2208.  
  2209. APQ SPACE 4,10
  2210. ** APQ - ASSIGN PP OR IF UNASSIGNABLE ENTER IN REQUEST QUEUE.
  2211. *
  2212. * ENTRY (X6) = PP CALL.
  2213. * (B3) = EXIT ADDRESS.
  2214. * (B4) = INDEX INTO *TFPL* IF LIBRARY SEARCH NOT NEEDED.
  2215. * (B4) = 0 IF LIBRARY SEARCH NEEDED.
  2216. * (B4) .LT. 0 RETURN REQUESTED WHEN PP UNASSIGNABLE.
  2217. * (B7) = CONTROL POINT ADDRESS.
  2218. * NOTE THAT THE CONTROL POINT NUMBER IS ENTERED
  2219. * INTO THE PP CALL BY THIS ROUTINE.
  2220. * (A5) = OUTPUT REGISTER OF REQUESTING PP, IF ANY.
  2221. * (APQA) = PARAMETER WORD.
  2222. * (APQC) = MASK FOR *PPAL* SELECTION.
  2223. *
  2224. * EXIT (X1) = 0 IF PP UNASSIGNABLE AND RETURN REQUESTED.
  2225. * (X1) = -0 IF REJECT FOR STORAGE MOVE.
  2226. * (X1) = *IR* ADDRESS IF PP ASSIGNED.
  2227. *
  2228. * USES X - 1, 2, 3, 4, 7.
  2229. * B - 6.
  2230. * A - 1, 2, 6, 7.
  2231. *
  2232. * PRESERVES X0, B7, B4, B3, A5, A0.
  2233. *
  2234. * CALLS APQ, SPL.
  2235.  
  2236.  
  2237. APQ SA2 PPAL CHECK PP AVAILABILITY
  2238. MX3 20
  2239. LX3 -12
  2240. BX2 X3*X2
  2241. SA3 SCRL CHECK EMERGENCY STEP
  2242. LX3 59-56
  2243. NG X3,APQ8 IF EMERGENCY STEP SET
  2244.  
  2245. * ENTERED HERE FROM *PPQ*.
  2246.  
  2247. APQ1 MX7 20 INITIALIZE PP SELECTION MASK
  2248. LX7 -12
  2249. SA7 APQC
  2250.  
  2251. * CHECK FOR SPECIAL PRE-PROCESSING REQUIRED.
  2252. * EXIT TO *CSP* IF CYBER 810/830.
  2253. * EXIT TO *APQ9* IF CYBER 170.
  2254.  
  2255. TJP (/MONITOR/CSP,CP830,/0CME/APQ9,NCME,/MONITOR/APQ1.0)
  2256. APQ1.0 BX3 X2
  2257. MX4 5
  2258. SA2 CMCL CHECK MOVE REQUESTED
  2259. SX7 B7
  2260. LX4 40-59
  2261. LX7 36-7 MERGE CONTROL POINT NUMBER
  2262. BX6 -X4*X6
  2263. AX2 48
  2264. BX6 X6+X7
  2265. LX2 36
  2266. BX2 X2-X7
  2267. ZR X2,APQ7 IF MOVE REQUESTED
  2268. ZR X3,APQ8 IF NO PP AVAILABLE
  2269.  
  2270. * ENTER HERE FOR SPECIAL *1VP* ASSIGNMENT REQUEST.
  2271.  
  2272. APQ1.1 SB6 APQ2 *SPL* RETURN ADDRESS
  2273. LT B4,B1,SPL IF LIBRARY SEARCH / NO PP RECALL
  2274. SA2 PLDP
  2275. SA1 TFPL-1+B4 GET PP DIRECTORY ADDRESS
  2276. AX2 36
  2277. SX1 X1+
  2278. MX3 1
  2279. ZR X2,APQ7 IF LIBRARY LOCKED
  2280. ZR X1,SPL IF FAST PP LOADER TABLE NOT BUILT
  2281. MX4 18
  2282. SA1 X1 READ DIRECTORY ENTRY
  2283. LX3 41-59
  2284. BX1 -X4*X1
  2285. IX7 X1+X3
  2286. BX7 -X3*X7
  2287. TNO /PROBE/SPL,PROBE
  2288.  
  2289. APQ2 ZR X1,APQ8 IF LIBRARY LOCKED
  2290. SA2 APQC GET SELECTION MASK
  2291. SA1 PPAL ASSIGN NEXT PP
  2292. BX2 X2*X1
  2293. MX3 1
  2294. LX3 -12
  2295. NX2 B6,X2 SELECT NEXT AVAILABLE PP
  2296. SX2 B6
  2297. SX4 B6-11B-1
  2298. AX3 B6,X3
  2299. BX1 X1-X3 CLEAR PP AVAILABLE
  2300. NG X4,APQ2.1 IF NOT SECOND BANK
  2301.  
  2302. * THE PPS IN THE SECOND BANK ARE ASSIGNED IN REVERSE ORDER.
  2303. * PP = (31B-20B+12B+12B-BIT NUMBER) = (35B-BIT NUMBER)
  2304.  
  2305. SX4 35B REVERSE ORDER OF SECOND BANK
  2306. IX2 X4-X2
  2307. APQ2.1 LX2 PPCES
  2308. MX4 48
  2309. R= X3,ASCM
  2310. BX1 X4*X1
  2311. TX2 X2,FP SET PP COMMUNICATION BLOCK ADDRESS
  2312. LX3 48
  2313. BX7 X7+X3
  2314. SA4 APQB-1 PRESET SEARCH OF TABLE
  2315. SA7 X2+B1 SET PP OR (LOAD PARAMETERS)
  2316. MX7 18
  2317. APQ2.2 SA4 A4+B1 GET NEXT TABLE ENTRY
  2318. ZR X4,APQ5 IF END OF TABLE
  2319. SB6 X4 SAVE LOAD PARAMETER ADDRESS
  2320. BX4 X4-X6
  2321. BX4 X7*X4
  2322. NZ X4,APQ2.2 IF PP NAME DOES NOT MATCH
  2323. EQ B4,B6,APQ3 IF *CPUCIO* REQUEST
  2324. TX4 A5-1,-SP
  2325. NZ X4,APQ5 IF NOT PSEUDO-PP REQUEST
  2326. SA4 A5+2 LOAD MB+1
  2327. EQ APQ4 TRANSFER DATA
  2328.  
  2329. APQ3 SA4 /CPUCIO/MB
  2330. APQ4 BX7 X4 MOVE MB TO MB
  2331. SA7 A7+B1
  2332. SA4 A4+B1
  2333. ERRNZ /CPUCIO/MB1-/CPUCIO/MB-1
  2334. BX7 X4 MB1 TO MB+1
  2335. SA7 A7+B1
  2336. SA4 A4+B1
  2337. ERRNZ /CPUCIO/MB2-/CPUCIO/MB1-1
  2338. BX7 X4 MB2 TO MB+2
  2339. SA7 A7+B1
  2340. EQ APQ6 SKIP PARAMETER WORD CHECK
  2341.  
  2342. APQ5 SA4 APQA MOVE PARAMETER WORD
  2343. BX7 X4
  2344. SA7 A7+B1 MOVE TO MB
  2345. APQ6 SX4 B7
  2346. SX7 B7 SET FUNCTION PROCESSING CP ADDRESS
  2347. LX4 24 SET CP ADDRESS
  2348. BX7 X7+X4
  2349. LX4 24-7 SET CP NUMBER
  2350. BX7 X7+X4
  2351. TX4 X2,-FP
  2352. LX4 PPXES-PPCES
  2353. TA7 X4+ACPP,FPX SET CP ASSIGNMENT
  2354. BX7 X1
  2355. MX4 20
  2356. LX4 -12
  2357. BX1 X4*X1
  2358. CX1 X1
  2359. SA6 X2 STORE PP INPUT REGISTER
  2360. BX7 X7+X1
  2361. SA7 A1+
  2362. SA1 B7+STSW INCREMENT PP COUNT
  2363. IX7 X1+X3
  2364. SA7 A1
  2365. SX1 A6 RETURN *IR* ADDRESS
  2366. JP B3 RETURN
  2367.  
  2368. APQ7 BX1 -X1+X1
  2369. NG B4,RB3 IF NO QUEUEING REQUESTED
  2370. APQ8 BX1 X1-X1
  2371. NG B4,RB3 IF NO QUEUEING REQUESTED
  2372. MX4 6
  2373. SA3 APQA
  2374. SX2 PQ
  2375. BX7 X3
  2376. SA7 AQRA
  2377. EQ AQR ASSIGN QUEUE REQUEST
  2378.  
  2379.  
  2380. APQA BSS 1 PARAMETER WORD
  2381.  
  2382. * TABLE OF PP-S REQUIRING SPECIAL PROCESSING FOR *CPUCIO*.
  2383.  
  2384. APQB VFD 18/3L1MS,24/,18/LA1MS
  2385. VFD 18/3L1MI,24/,18/LA1MI
  2386. VFD 18/3L1ML,24/,18/LA1ML
  2387. VFD 18/3L1OD,24/,18//MONITOR/LA1OD
  2388. CON 0 END OF TABLE
  2389.  
  2390. APQC VFD 12/0,20/-0,28/0 *PPAL* SELECTION MASK
  2391. TFPL SPACE 4,10
  2392. ** TFPL - FAST PP LOADER TABLE.
  2393. *
  2394. * THIS TABLE CONTAINS THE ABSOLUTE MEMORY ADDRESS OF THE *PLD*
  2395. * ENTRY FOR THE CORRESPONDING PP PROGRAM. IT IS UPDATED
  2396. * BY *SLL* OR *REC* WHEN A LIBRARY CHANGE OR RELOAD OCCURS.
  2397.  
  2398.  
  2399. TFPL BSS 0
  2400. LOC 1
  2401.  
  2402. LA1MS VFD 17/0,1/1,18/3L1MS,24/0 *1MS* LIBRARY ENTRY ADDRESS
  2403. LA1AJ VFD 17/0,1/1,18/3L1AJ,24/0 *1AJ* LIBRARY ENTRY ADDRESS
  2404. LA1MI VFD 17/0,1/1,18/3L1MI,24/0 *1MI* LIBRARY ENTRY ADDRESS
  2405. LA1RO VFD 17/0,1/1,18/3L1RO,24/0 *1RO* LIBRARY ENTRY ADDRESS
  2406. LA1SJ VFD 17/0,1/1,18/3L1SJ,24/0 *1SJ* LIBRARY ENTRY ADDRESS
  2407. LA1MA VFD 17/0,1/1,18/3L1MA,24/0 *1MA* LIBRARY ENTRY ADDRESS
  2408. LACPM VFD 17/0,1/1,18/3LCPM,24/0 *CPM* LIBRARY ENTRY ADDRESS
  2409. LALDR VFD 17/0,1/1,18/3LLDR,24/0 *LDR* LIBRARY ENTRY ADDRESS
  2410. LA1ML VFD 17/0,1/1,18/3L1ML,24/0 *1ML* LIBRARY ENTRY ADDRESS
  2411. LA1OD VFD 17/0,1/1,18/3L1OD,24/0 *1OD* LIBRARY ENTRY POINTER
  2412. LA1FA VFD 17/0,1/1,18/3L1FA,24/0 *1FA* LIBRARY ENTRY ADDRESS
  2413. LA1RU VFD 17/0,1/1,18/3L1RU,24/0 *1RU* LIBRARY ENTRY ADDRESS
  2414. LA1BP VFD 17/0,1/1,18/3L1BP,24/0 *1BP* LIBRARY ENTRY ADDRESS
  2415. LA3RX VFD 17/0,1/1,18/3L3RX,24/0 *3RX* LIBRARY ENTRY ADDRESS
  2416. LA1CP VFD 17/0,1/1,18/3L1CP,24/0 *1CP* LIBRARY ENTRY ADDRESS
  2417.  
  2418. TMSD EQU *O-1
  2419. LOC 1
  2420. LA6DI VFD 18/1,18/3L6DI,24/0 *6DI* PLD ENTRY ADDRESS
  2421. LA6DJ VFD 18/1,18/3L6DJ,24/0 *6DJ* PLD ENTRY ADDRESS
  2422. LA6DP VFD 18/1,18/3L6DP,24/0 *6DP* PLD ENTRY ADDRESS
  2423. LA6DE VFD 18/1,18/3L6DE,24/0 *6DE* PLD ENTRY ADDRESS
  2424. LA6DX VFD 18/1,18/3L6DX,24/0 *6DX* PLD ENTRY ADDRESS
  2425. LA6DC VFD 18/1,18/3L6DC,24/0 *6DC* PLD ENTRY ADDRESS
  2426. LA6DD VFD 18/1,18/3L6DD,24/0 *6DD* PLD ENTRY ADDRESS
  2427. LA6MX BSS 0 END OF DRIVERS
  2428.  
  2429. LOC *O
  2430.  
  2431. TFPLL EQU *-TFPL FAST PP LOADER TABLE LENGTH
  2432. TPPI SPACE 4,10
  2433. ** TPPI - TABLE OF PRE-PROCESSOR INDICES.
  2434. *
  2435. * THIS TABLE CONTAINS THE PRE-PROCESSOR NAME AND
  2436. * DEFAULT FL/100B CORRESPONDING TO THE INDEX FOR
  2437. * THE *ENEJ* SUBFUNCTION OF THE *EJT* RA+1 CALL.
  2438. * THIS TABLE MUST IMMEDIATELY FOLLOW THE *TFPL*
  2439. * TABLE SO IT CAN BE LOCATED AND REBUILT BY *SLL*
  2440. * AFTER A LIBRARY CHANGE IS MADE.
  2441.  
  2442.  
  2443. TPPI BSS 0
  2444. LOC 0
  2445.  
  2446. VFD 42/4LLDR=,18/0
  2447. VFD 42/4LSORT,18/0
  2448. VFD 42/4LPACK,18/0
  2449.  
  2450. LOC *O
  2451.  
  2452. TPPIL EQU *-TPPI
  2453. AQR SPACE 4,10
  2454. ** AQR - ASSIGN QUEUE REQUEST.
  2455. *
  2456. * ENTRY (X0) = ORDERED QUEUE PARAMETER.
  2457. * (X2) = QUEUE INDEX.
  2458. * = RQ, IMPLIES AN ORDERED QUEUE REQUIRING X0 SET.
  2459. * (X6) = REQUEST.
  2460. * (A5) = OUTPUT REGISTER ADDRESS (PRIORITY PP REQUEST).
  2461. * (B3) = EXIT ADDRESS.
  2462. * (B7) = CONTROL POINT ADDRESS.
  2463. * (AQRA) = PARAMETER WORD.
  2464. *
  2465. * EXIT (A2) = ADDRESS OF QUEUE ENTRY LINKED TO NEW ENTRY.
  2466. *
  2467. * USES X - 1, 2, 3, 4, 6, 7.
  2468. * B - 6.
  2469. * A - 1, 3, 6, 7.
  2470. *
  2471. * PRESERVES B3, A5, B7, A0.
  2472.  
  2473.  
  2474. AQR SA1 B7+STSW ALLOCATE RECALL SLOT
  2475. ZR X6,* IF PP CALL ZERO
  2476. SA2 TAQR+X2 READ PROCESSING PARAMETERS
  2477. MX7 -4
  2478. BX4 -X7*X1 NEXT FREE RECALL SLOT
  2479. *
  2480. * CONTINUING AT THIS POINT WILL YIELD CATASTROPHIC
  2481. * RESULTS AND COVER UP THE AUDIT TRAIL, SO STOP.
  2482. *
  2483. ZR X4,* IF CONFUSED, HANG
  2484. SB6 B7+RCCW-1
  2485. BX7 X7*X1
  2486. SA3 B6+X4 READ NEXT FREE RECALL SLOT
  2487. SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
  2488. SA4 AQRA GET PARAMETER WORD
  2489. MX6 1
  2490. BX6 X4+X6
  2491. SA6 A3+REPW-RCCW
  2492. UX2,B6 X2 SET RECALL ADDER
  2493. SX3 X3+B6
  2494. SB6 X2 SET PROCESSOR ADDRESS
  2495. IX7 X7+X3
  2496. AX2 18 GET START OF QUEUE
  2497. SA7 A1
  2498. MX7 -18
  2499. BX1 X1-X1
  2500. JP B6 JUMP TO PROCESSOR
  2501.  
  2502. * PLACE ENTRY AT END OF QUEUE.
  2503. * USED FOR PQ AND CQ.
  2504. *
  2505. * LOOP IS REPLICATED FOR PERFORMANCE.
  2506.  
  2507. AQR0 MX1 1 SET NO ROLL FLAG
  2508. AQR1 SA2 X2
  2509. BX3 -X7*X2
  2510. ZR X3,AQR1.1 IF END OF QUEUE
  2511. SA2 X2
  2512. BX3 -X7*X2
  2513. NZ X3,AQR1 IF NOT END OF QUEUE
  2514. AQR1.1 BX2 X7*X2
  2515. BX7 X7-X7 CLEAR END OF QUEUE
  2516. BX7 X1+X7
  2517. SA7 A3
  2518. SX7 A3 EXTEND END OF QUEUE
  2519. BX7 X7+X2 INSERT LINK
  2520. SX1 A3 RETURN QUEUE ADDRESS
  2521. SA7 A2+
  2522. JP B3 RETURN
  2523.  
  2524. * ASSIGN ENTRY TO ORDERED QUEUE.
  2525.  
  2526. AQR2 SA2 X2+ FIND FIRST ENTRY
  2527. MX4 -12
  2528. BX0 X4*X0
  2529. AQR3 BX7 -X4*X2 EXTRACT LINKAGE
  2530. SB6 A2
  2531. ZR X7,AQR4 IF END OF QUEUE
  2532. SA2 X7 READ NEXT QUEUE ENTRY
  2533. IX3 X2-X0
  2534. NG X3,AQR3 IF NOT .LT. THIS QUEUE ENTRY
  2535. AQR4 BX7 X7+X0
  2536. SX3 A3 SET RECALL SLOT ADDRESS
  2537. SA2 B6 REPLACE LINK TO NEW RECALL ENTRY
  2538. SA7 A3
  2539. BX2 X4*X2
  2540. BX7 X2+X3
  2541. SA7 A2+
  2542. JP B3 RETURN
  2543.  
  2544. * PLACE ENTRY AT BEGINNING OF QUEUE.
  2545.  
  2546. AQR5 SA2 X2 PLACE ENTRY AT HEAD OF QUEUE
  2547. BX2 -X7*X2
  2548. SX7 A5
  2549. LX7 18
  2550. BX7 X7+X2
  2551. SA7 A3
  2552. SX7 A3
  2553. SA7 A2
  2554. JP B3 RETURN
  2555.  
  2556.  
  2557. AQRA BSS 1
  2558. TAQR SPACE 4,10
  2559. ** TAQR - TABLE OF QUEUE PROCESSING PARAMETERS.
  2560. *
  2561. * ENTRY 1 WORD
  2562. *T, TAQR 12/ 2000+RC,12/,18/ QS,18/ QP
  2563. * RC RECALL COUNT TO INCREMENT *STSW*.
  2564. * QS START OF QUEUE POINTER.
  2565. * QP QUEUE PROCESSOR.
  2566.  
  2567.  
  2568. TAQR BSS 0
  2569. LOC 0
  2570.  
  2571. BQ VFD 12/2420B,12/0,18/BQRL,18/AQR2 BUFFER MANAGER
  2572. RQ VFD 12/2020B,12/0,18/RQRL,18/AQR2 *MTR* RECALL
  2573. NRQ VFD 12/2420B,12/0,18/RQRL,18/AQR2
  2574. CQ VFD 12/2420B,12/0,18/CQRL,18/AQR1 *CPUCIO* REQUEST QUEUE
  2575. PQ VFD 12/2020B,12/0,18/PQRL,18/AQR1 PP REQUEST QUEUE
  2576. NPQ VFD 12/2420B,12/0,18/PQRL,18/AQR0 PP NO ROLL REQUEST
  2577. PRP VFD 12/2420B,12/0,18/PQRL,18/AQR5 PRIORITY PP REQUEST
  2578. LOC *O
  2579. BNJ SPACE 4,25
  2580. ** BNJ - BEGIN NEW JOB.
  2581. *
  2582. * THIS ROUTINE UPDATES THE CPU TIME FOR THE CURRENTLY ACTIVE
  2583. * JOB (OLD JOB) IN THIS CPU AND STARTS THE HIGHEST PRIORITY JOB
  2584. * (NEW JOB) THAT CAN USE THIS CPU.
  2585. *
  2586. * IF ENTERED AT *BNJ*, (B7) IS THE ACTIVE (OLD JOB) CONTROL
  2587. * POINT AND (X7) IS THE CPU STATUS TO SET FOR THE OLD JOB.
  2588. *
  2589. * IF ENTERED AT *BNJ1*, THE OLD JOB CPU STATUS IS ASSUMED TO
  2590. * HAVE BEEN SET PRIOR TO ENTRY IF NOT *A* OR *B* STATUS.
  2591. *
  2592. * IF THE OLD JOB CPU STATUS IS *A* OR *B* ON ENTRY, THE CPU
  2593. * STATUS WILL BE CHANGED TO *W* AND THE JOB WILL BE INSERTED IN
  2594. * *WQ* ACCORDING TO PRIORITY AND CPU SLICE EXPIRATION CRITERIA.
  2595. *
  2596. * EXIT EXCHANGE PACKAGE AT (B2) RESET FOR PPU USE.
  2597. * RUNNING TIME UPDATED.
  2598. *
  2599. * USES X - ALL.
  2600. * B - 3, 4, 5, 6.
  2601. * A - 1, 2, 3, 4, 5, 6, 7.
  2602. *
  2603. * CALLS ACS, CPT, ESC, /DCP/BNJ, MSM, MSR.
  2604.  
  2605.  
  2606. BNJ SA1 B7+STSW
  2607. MX0 3 CLEAR OLD STATUS AND SET NEW
  2608. LX7 -3
  2609. BX1 -X0*X1
  2610. BX7 X7+X1
  2611. SA7 A1+
  2612.  
  2613. * ENTRY IF CPU STATUS ALREADY SET OR IF *W* STATUS TO BE SET.
  2614.  
  2615. BNJ1 SB3 BNJ2 *CPT* RETURN ADDRESS
  2616. SB6 200B SET CPU SWITCH FLAG
  2617. TJP (/NVE/CPT1,NVE,/CME/CPT1,CME,/MONITOR/CP76,CP176,/MONIT
  2618. ,OR/CPT)
  2619. BNJ2 SA2 X1+STSW GET CONTROL POINT *STSW*
  2620. SX6 B0+
  2621. SX4 1
  2622. SA6 SA+A0 CLEAR CPU SWITCH ACCUMULATED TIME
  2623. LX4 56
  2624. BX7 X4*X2
  2625. SB4 X1+ EXCHANGE PACKAGE ADDRESS IF SUB-CP ACTIVE
  2626. TNZ X7,(/MONITOR/ESC,SUBCP,/MONITOR/BNJ2) IF SUB-CP ACTIVE
  2627. LX1 24
  2628. SB4 X1 EXCHANGE PACKAGE ADDRESS IF NOT SUB-CP
  2629.  
  2630. * UPDATE CPU SLICE ACCUMULATORS AND FLAGS FOR OLD JOB.
  2631. * INCREMENT CPU SLICE ACCUMULATOR BY TIME USED.
  2632. * CLEAR EXTENDED CPU SLICE INCOMPLETE FLAG IF .LT. RECALL CPU
  2633. * SLICE REMAINING IN EXTENDED CPU SLICE.
  2634. * CLEAR CPU SLICE ACTIVE FLAG IF .LT. RECALL CPU SLICE
  2635. * REMAINING IN CPU SLICE.
  2636. * CLEAR RECALL FLAG IF RECALL CPU SLICE LIMIT REACHED.
  2637. * CLEAR RECALL SLICE ACCUMULATOR IF RECALL FLAG CLEARED.
  2638.  
  2639. BNJ3 SA3 B4+CWQW GET *WQ* PARAMETERS
  2640. SA1 B4+STSW GET EXCHANGE PACKAGE *STSW*
  2641. SA4 A3+B1 GET CPU SLICE ACCUMULATORS
  2642. ERRNZ CSAW-CWQW-1
  2643. TAX0 (6,CME,11,CP176,0) SCALE CPU TIME FOR ACCUMULATORS
  2644. MX7 -9
  2645. LX7 27
  2646. BX7 -X7*X3 SERVICE PARAMETERS INDEX
  2647. BX2 X1
  2648. SX6 A0+ACPS+WCPS
  2649. AX2 57
  2650. LX7 -27
  2651. SB3 X2 (B3) .GT. 0 IF *A* OR *B* CPU STATUS
  2652. LX6 -3
  2653. SB5 X2 SET STATUS FOR DRIVER RECALL CHECK
  2654. LE B3,B0,BNJ4 IF NOT TO SET *W* STATUS
  2655. BX6 X1-X6 SET *W* STATUS
  2656. SB5 WCPS-7 SET *W* STATUS FOR DRIVER RECALL CHECK
  2657. SA6 A1+
  2658. BNJ4 TA2 X7+CSAT,JCB GET CPU SCHEDULING PARAMETERS
  2659. GT B3,B0,BNJ5 IF *W* STATUS SET (JOB PREEMPTED)
  2660. NZ X0,BNJ5 IF CPU SLICE INCREMENT NOT NULL
  2661. SX0 1 SET VALUE TO INSURE SLICE EXPIRATION
  2662. BNJ5 SX5 X4 CPU SLICE ACCUMULATOR
  2663. SX7 X2 EXTENDED CPU SLICE LIMIT
  2664. IX5 X5+X0
  2665. IX5 X5-X7 CHECK TIME LEFT IN EXTENDED CPU SLICE
  2666. LX3 59-48 POSITION RECALL FLAG
  2667. NG X5,BNJ6 IF .GE. RECALL SLICE LEFT IN EXTENDED
  2668. MX7 6
  2669. SX1 7 SET TO CLEAR ALL CPU SCHEDULING FLAGS
  2670. BX7 X7*X4 SET TO CLEAR ALL ACCUMULATORS
  2671. LX7 -18
  2672. LE B3,B0,BNJ8 IF *W* STATUS NOT SET
  2673. PL X3,BNJ8 IF RECALL FLAG NOT SET
  2674. LX4 -18
  2675. LX2 -18
  2676. SX6 X4 RECALL CPU SLICE ACCUMULATOR
  2677. SX1 X2 RECALL CPU SLICE LIMIT
  2678. IX6 X6+X0
  2679. IX6 X6-X1
  2680. SX1 7 SET TO CLEAR ALL CPU SCHEDULING FLAGS
  2681. PL X6,BNJ8 IF NO TIME REMAINING IN RECALL SLICE
  2682. SX1 5 SET TO CLEAR ALL BUT RECALL FLAG
  2683. EQ BNJ8 UPDATE ACCUMULATORS AND FLAGS
  2684.  
  2685. BNJ6 IX4 X4+X0 INCREMENT CPU SLICE ACCUMULATOR
  2686. LX4 -18
  2687. SX1 6 SET TO CLEAR NORMAL SLICE AND RECALL FLAGS
  2688. SX6 X4 RECALL CPU SLICE ACCUMULATOR
  2689. IX7 X4-X6 CLEAR RECALL CPU SLICE ACCUMULATOR
  2690. LE B3,B0,BNJ8 IF *W* STATUS NOT SET
  2691. LX2 -18
  2692. SX1 X2+ RECALL CPU SLICE LIMIT
  2693. LX2 -18
  2694. PL X3,BNJ7 IF RECALL CPU SLICE NOT ACTIVE
  2695. IX6 X6+X0
  2696. IX6 X6-X1
  2697. PL X6,BNJ7 IF NO TIME REMAINING IN RECALL CPU SLICE
  2698. IX7 X4+X0 INCREMENT RECALL CPU SLICE ACCUMULATOR
  2699. SX1 B0 SET TO PRESERVE ALL FLAGS
  2700. EQ BNJ8 UPDATE ACCUMULATORS AND FLAGS
  2701.  
  2702. BNJ7 SX2 X2 CPU SLICE RECALL EXTENSION
  2703. IX2 X2+X5 CHECK TIME LEFT IN UNEXTENDED CPU SLICE
  2704. MX1 1
  2705. BX2 -X2
  2706. BX1 X1*X2 SET TO CLEAR SLICE ACTIVE IF LIMIT
  2707. LX1 2-59
  2708. SX1 X1+2 SET TO CLEAR RECALL FLAG
  2709.  
  2710. * WRITE ACCUMULATORS AND UPDATE CPU SCHEDULING FLAGS.
  2711.  
  2712. BNJ8 LX7 18 RESTORE *CSAW*
  2713. LX1 58
  2714. SA7 A4 UPDATE CPU SLICE ACCUMULATORS
  2715. BX3 -X1*X3 CLEAR SELECTED SCHEDULING FLAGS
  2716. SX1 B5
  2717. SX6 B1
  2718. AX1 1
  2719. LX6 57-0
  2720. SX1 X1+B1 (X1) = 0 IF *W* OR *X* STATUS
  2721. BX3 X3+X6 SET DRIVER RECALL NOT REQUIRED
  2722. NZ X1,BNJ9 IF NOT *W* OR *X* STATUS
  2723. NG X3,BNJ9 IF *W* STATUS WITH RECALL
  2724. BX3 -X6*X3 CLEAR DRIVER RECALL NOT REQUIRED
  2725.  
  2726. * INITIALIZE TO RESET *WQ* LINKAGE.
  2727.  
  2728. BNJ9 MX6 42
  2729. LX3 48-59 RESTORE *CWQW*
  2730. SX1 B0+
  2731. LE B3,B0,BNJ14 IF *W* STATUS NOT SET
  2732. SA2 WQRL
  2733. UX0,B4 X3 OLD JOB CPU PRIORITY AND FLAGS
  2734. BX4 X3
  2735. LX4 59-49
  2736. SX7 A3+ OLD JOB *CWQW* ADDRESS
  2737. PL X4,BNJ11 IF CPU SLICE INACTIVE
  2738.  
  2739. * INSERT OLD JOB IN *WQ* AS FIRST AT PRIORITY.
  2740. * LOOP REPLICATED FOR PERFORMANCE.
  2741.  
  2742. BNJ10 SA4 X2
  2743. UX0,B5 X4
  2744. GE B4,B5,BNJ13 IF POSITION FOUND
  2745. SA2 X4
  2746. UX0,B5 X2
  2747. LT B4,B5,BNJ10 IF POSITION NOT FOUND
  2748. EQ BNJ12 SET *WQ* LINKAGE
  2749.  
  2750. * INSERT OLD JOB IN *WQ* AS LAST AT PRIORITY.
  2751. * LOOP REPLICATED FOR PERFORMANCE.
  2752.  
  2753. BNJ11 SA4 X2
  2754. UX0,B5 X4
  2755. GT B4,B5,BNJ13 IF POSITION FOUND
  2756. SA2 X4
  2757. UX0,B5 X2
  2758. LE B4,B5,BNJ11 IF POSITION NOT FOUND
  2759.  
  2760. * SET LINKAGE FOR JOB INSERTED IN *WQ*.
  2761.  
  2762. BNJ12 BX1 X6*X4 CLEAR LINK
  2763. BX7 X1+X7 MERGE NEW LINK
  2764. SX1 A2 SET LINK TO NEXT ENTRY
  2765. SA7 A4
  2766. EQ BNJ14 UPDATE LINK
  2767.  
  2768. BNJ13 BX1 X6*X2 CLEAR LINK
  2769. BX7 X1+X7 MERGE NEW LINK
  2770. SX1 A4 SET LINK TO NEXT ENTRY
  2771. SA7 A2
  2772.  
  2773. * UPDATE OLD JOB PRIORITY FLAGS AND *WQ* LINKAGE.
  2774.  
  2775. BNJ14 BX3 X6*X3
  2776. BX7 X3+X1 MERGE LINK
  2777. SA7 A3+ UPDATE *CWQW*
  2778.  
  2779. * SELECT NEW JOB, UPDATE *WQ* POINTER, AND ADVANCE CPU SERVICE
  2780. * CYCLE IF JOB WITH INACTIVE CPU SLICE SELECTED.
  2781.  
  2782. BNJ15 SA1 WQRL SELECT NEXT JOB
  2783. * EQ /DCP/BNJ (DUAL CPU MACHINE)
  2784. SA3 X1 GET *CWQW* ENTRY
  2785. UX0,B4 X3 UNPACK PRIORITY
  2786. ZR B4,BNJ15 IF NOT VALID *WQ* FIRST ENTRY
  2787. BX7 X6*X3 CLEAR *WQ* LINK
  2788. BX6 -X6*X3 EXTRACT *WQ* LINK
  2789. SA7 A3
  2790. SA6 A1 UPDATE *WQ* POINTER
  2791. BX3 X7
  2792. LX7 59-49
  2793. NG X7,BNJ16 IF ACTIVE CPU SLICE
  2794. SB3 BNJ16 SET *ACS* RETURN ADDRESS
  2795. BX1 X6
  2796. EQ ACS ADVANCE CPU SERVICE CYCLE
  2797.  
  2798. * SET ACTIVE CPU STATUS AND CLEAR *MTR* BYPASS FLAG FOR JOB
  2799. * WITH CPU SWITCH REQUEST. THE SWITCH REQUEST MAY HAVE BEEN
  2800. * FOR A JOB OTHER THAN THE SELECTED NEW JOB.
  2801.  
  2802. BNJ16 SA1 A3+STSW-CWQW GET CPU STATUS
  2803. SA2 CSWL+A0
  2804. LX3 -27
  2805. MX6 -9
  2806. SX7 A0+ACPS+WCPS
  2807. MX5 -3
  2808. BX6 -X6*X3 SERVICE PARAMETERS INDEX
  2809. LX3 9
  2810. LX7 -3
  2811. BX5 -X5*X3 EXCHANGE PACKAGE TYPE
  2812. BX7 X1-X7 SET ACTIVE STATUS
  2813. LX2 -36
  2814. SA7 A1 UPDATE CPU STATUS
  2815. SX2 X2
  2816. ZR X2,BNJ17 IF NO *WQ* ENTRY WITH *MTR* BYPASS SET
  2817. SA2 X2 GET *WQ* ENTRY WITH BYPASS FLAG
  2818. SX7 B1
  2819. LX7 26-0
  2820. BX7 -X7*X2 CLEAR *MTR* BYPASS FLAG
  2821. SA7 A2
  2822.  
  2823. * SET CPU SCHEDULING CMR POINTERS.
  2824.  
  2825. BNJ17 SA4 A3+CSAW-CWQW GET *CSAW* ACCUMULATORS
  2826. SA1 RTCL
  2827. TA2 X6+CSJT,JCB GET CPU SCHEDULING SERVICE PARAMETERS
  2828. SA3 BNJA
  2829. MX6 -36
  2830. MX7 -12
  2831. SX0 X4+ CPU SLICE ACCUMULATOR
  2832. BX1 -X6*X1 REAL TIME MILLISECOND CLOCK
  2833. PX0 X0
  2834. BX6 -X7*X2 CPU SLICE LIMIT
  2835. NO (NON - CME MACHINE)
  2836. SAC 15,40003B,CME,46000B
  2837. * FX0 X0*X3 (CME MACHINE)
  2838. LX2 -12
  2839. UX0 X0
  2840. BX2 -X7*X2 RECALL SLICE LIMIT
  2841. IX6 X6-X0 TIME REMAINING IN CPU SLICE
  2842. IX3 X1+X2 MILLISECOND CLOCK AT END OF RECALL SLICE
  2843. IX0 X6-X2
  2844. IX6 X1+X6 MILLISECOND CLOCK AT END OF CPU SLICE
  2845. PX7 B4,X3 MERGE CPU PRIORITY AND RECALL SLICE LIMIT
  2846. PL X0,BNJ18 IF .GE. RECALL SLICE IN UNEXTENDED SLICE
  2847. BX6 X3 SET TO SWITCH CPU AT END OF RECALL SLICE
  2848. BNJ18 SA6 CSWL+A0 SET CPU SWITCH CONTROL
  2849. SA7 TSCL+A0 SET PRIORITY AND RECALL SLICE LIMIT
  2850.  
  2851. * SET CPU PROGRAM CONTROL CMR POINTERS. NOTE THAT THE OLD
  2852. * EXCHANGE PACKAGE ADDRESS IN *CPAL* IS THE ADDRESS IN THE
  2853. * JOB-S FIELD LENGTH TO WHICH THE SUB-CONTROL POINT EXCHANGE
  2854. * PACKAGE WILL BE COPIED IF A SUB-CONTROL POINT WAS ACTIVE.
  2855. * EXIT IS MADE TO *MTRX* WITHOUT UPDATING *CPAL* AND *ACPL* IF
  2856. * THE OLD AND NEW JOBS ARE THE SAME TO AVOID THE OVERHEAD OF
  2857. * AN EXCHANGE PACKAGE COPY AND BECAUSE THE RA VALUE READ FROM
  2858. * THE NEW EXCHANGE PACKAGE AREA WILL NOT BE CORRECT IF MONITOR
  2859. * MODE WAS ENTERED FROM A PP EXCHANGE.
  2860.  
  2861. SA2 CPAL+A0
  2862. SX1 A4-CSAW NEW JOB EXCHANGE PACKAGE ADDRESS
  2863. LX5 42
  2864. SA3 X1+B1 READ RA
  2865. BX7 X1+X5 SET NEW EXCHANGE PACKAGE ADDRESS AND TYPE
  2866. SX4 X1
  2867. ZR X5,BNJ19 IF CONTROL POINT EXCHANGE PACKAGE
  2868. TX4 SCA SET SYSTEM CONTROL POINT ADDRESS
  2869. BNJ19 MX0 -24
  2870. SB7 X4 NEW CONTROL POINT ADDRESS
  2871. MX6 24
  2872. LX4 24
  2873. BX2 -X0*X2 OLD JOB EXCHANGE PACKAGE ADDRESS
  2874. BX6 X6*X3 NEW JOB RA
  2875. IX0 X1-X2
  2876. BX7 X7+X4 MERGE CONTROL POINT ADDRESS
  2877. ZR X0,MTRX IF RESTARTING OLD JOB
  2878. SA6 ACPL+A0 SET RA FOR *MTR* RA+1 CHECK
  2879. SA7 CPAL+A0 SET EXCHANGE PACKAGE POINTERS
  2880. SX3 B2+ OLD EXCHANGE ADDRESS
  2881. SB2 X1 NEW EXCHANGE ADDRESS
  2882. IX1 X3-X2 EXCHANGE PACKAGE MOVE DIFFERENTIAL
  2883. TNO /NVE/SVS,NVE
  2884.  
  2885. * COPY EXCHANGE PACKAGE.
  2886. * ENTRY FROM *XJP* AND *ESC*.
  2887. * RETURN FROM */NVE/SVS*.
  2888. * (B2) = NEW PROGRAM MODE EXCHANGE PACKAGE ADDRESS.
  2889. * (X1) = EXCHANGE PACKAGE MOVE DIFFERENTIAL.
  2890. * (X3) = ADDRESS OF EXCHANGE PACKAGE FOR COPY.
  2891.  
  2892. BNJ20 ZR X1,MTR IF NO EXCHANGE PACKAGE COPY
  2893. TX2 MCMS SET MACHINE FIELD LENGTH
  2894. SB4 20B (B4) = LENGTH OF MOVE
  2895. LX2 36+6
  2896. BX0 X3 FWA OF EXCHANGE COPY
  2897. SB6 BNJ21 *MSM* *MSR* RETURN ADDRESS
  2898. TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
  2899. BNJ21 SX6 B1 RA = 0, B1 = 1
  2900. BX7 X2+X3 FL, B2
  2901. SA6 X3+B1
  2902. SX4 A5 MERGE FLS AND (A5)
  2903. TX6 XPFE
  2904. LX4 18
  2905. SA7 A6+B1
  2906. LX6 48
  2907. TX1 MECS SET MACHINE FLX
  2908. TLX1 (6,ESM170,0)
  2909. TX2 MECNF
  2910. BX1 X1+X2
  2911. SA6 A7+B1
  2912. TLX1 (36+3,ESM170,36+9)
  2913. TX6 RAEX SET RAE BASE ADDRESS
  2914. TLX6 (36+3,ESM170,36+9)
  2915. BX7 X1+X4
  2916. SA6 A6+B1 (RAX)=0
  2917. SA7 A6+B1 FLX, A5
  2918. BX6 X6-X6
  2919. SA6 A7+B1 (MA) = 0
  2920. TEQ (/MONITOR/BNJ30,CP176,/MONITOR/MTR)
  2921.  
  2922.  
  2923. BNJA CON 0.064P48+1 MICROSECONDS/64 TO MILLISECONDS CONVERSION
  2924. CAL SPACE 4,15
  2925. ** CAL - CHECK ACTIVITY LIMIT.
  2926. *
  2927. * *CAL* ADDS UP THE ACTIVITY ON THE CONTROL POINT
  2928. * (PP-S ACTIVE, TAPE ACTIVITY, AND PP-S IN RECALL),
  2929. * AND CHECKS TO SEE IF THEY EXCEED THE ALLOWED LIMIT.
  2930. * IF THE CONTROL POINT IS THE SYSTEM CONTROL POINT,
  2931. * PP-S ACTIVE ARE NOT INCLUDED IN THE SUM.
  2932. *
  2933. * ENTRY (B3) = RETURN ADDRESS IF ACTIVITY LIMIT.
  2934. * (B6) = RETURN ADDRESS IF NO LIMIT.
  2935. *
  2936. * USES X - 2, 3, 4.
  2937. * B - 5.
  2938. * A - 2.
  2939.  
  2940.  
  2941. CAL SA2 B7+STSW GET CONTROL POINT STATUS
  2942. MX3 -4
  2943. LX2 -4
  2944. BX4 -X3*X2 PP RECALL, TAPE ACTIVITY
  2945. TB5 B7,-SCA
  2946. LX2 4-48
  2947. ZR B5,CAL1 IF SYSTEM CONTROL POINT
  2948. BX2 -X3*X2
  2949. IX4 X2+X4 INCLUDE PP ACTIVITY COUNT
  2950. CAL1 SX2 X4-NPPCP
  2951. PL X2,RB3 IF ACTIVITY LIMIT
  2952. JP B6 RETURN
  2953. CIA SPACE 4,20
  2954. ** CIA - CHECK *IAF* ACCESSIBILITY.
  2955. *
  2956. * *CIA* CHECKS IF *IAF* IS ACCESSIBLE BY LOOKING AT THE
  2957. * SUBSYSTEM CONTROL POINT TABLE (SSCT). THE *IAF* STATUS WORD
  2958. * STSW IS ALSO CHECKED FOR AN ERROR FLAG, BECAUSE IAF MUST BE
  2959. * CONSIDERED INACCESSIBLE IF AN ERROR FLAG IS SET SO THAT *PP*S
  2960. * AT IAF-S CONTROL POINT WILL DROP AND ALLOW *1AJ* TO PROCESS
  2961. * THE ERROR FLAG.
  2962. *
  2963. * ENTRY (B3) = RETURN ADDRESS.
  2964. *
  2965. * EXIT (B4) = 0, IF *IAF* IS ACCESSIBLE AND NO ERROR FLAGS
  2966. * ARE SET.
  2967. * .NE. 0, IF *IAF* IS UNACCESSIBLE OR AN ERROR FLAG
  2968. * IS SET.
  2969. * (X2) = SSCT WORD.
  2970. *
  2971. * USES X - 0, 2, 3.
  2972. * A - 2, 3.
  2973. * B - 4.
  2974.  
  2975.  
  2976. CIA SA2 SSCP GET SSCT ADDRESS
  2977. SB4 B1 SET RETURN PARAMETER NON-ZERO
  2978. AX2 12
  2979. SA2 X2+ GET SUBSYSTEM CONTROL POINT TABLE ENTRY
  2980. PL X2,RB3 IF *IAF* NOT ACCESSIBLE
  2981. SA3 VCPT*200B+STSW CHECK FOR ERROR FLAG
  2982. MX0 -12
  2983. LX3 -36
  2984. BX3 -X0*X3
  2985. SB4 X3 INDICATE IF IAF IS ACCESSIBLE
  2986. JP B3 RETURN
  2987. CJS SPACE 4,20
  2988. ** CJS - CHECKS JOB STATUS FOR THE FOLLOWING ITEMS.
  2989. *
  2990. * MODE ERRORS, PROGRAM STOPS, TIME AND SRU LIMITS.
  2991. *
  2992. * ENTRY (B4) = EXIT ADDRESS.
  2993. * (B6) = EXCHANGE PACKAGE ADDRESS TO BE CHECKED.
  2994. * (B7) = CONTROL POINT ADDRESS.
  2995. *
  2996. * EXIT EXITS TO SEF IF ERRORS DETECTED.
  2997. *
  2998. * USES X - 2, 3, 4, 6, 7.
  2999. * A - 2, 3, 4.
  3000.  
  3001.  
  3002. CJS SA3 B6+B1 READ RA
  3003. AX3 36
  3004. SA2 B6 READ P
  3005. SA4 A3+B1 READ FL
  3006. AX2 36
  3007. AX4 36
  3008. IX7 X2+X3 RA + P
  3009. IX6 X2-X4 P - FL
  3010. PL X6,CJS2 IF P .GE. FL
  3011. AX6 X2,B1
  3012. ERX1 X7 READ RA + P
  3013. R= X7,TLET PRESET TIME LIMIT ERROR FLAG
  3014. ZR X6,CJS3 IF P = 0, 1
  3015. CJS1 SA2 B7+SRUW CHECK FOR LIMITS
  3016. MX4 6
  3017. BX6 X4*X1
  3018. LX1 X2,B1
  3019. ZR X6,CJS2 IF PROGRAM STOP
  3020. LX2 59-56
  3021. BX4 X2+X1
  3022. NG X4,CJS5 IF LIMIT
  3023. SA1 B7+STSW READ CP STATUS
  3024. TJP (/MONITOR/CJS7,CP176,B4)
  3025.  
  3026. CJS2 SX7 PSET SET PROGRAM STOP ERROR FLAG
  3027. JP SEF
  3028.  
  3029. CJS3 ZR X2,CJS4 IF NOT SETCORE
  3030. NZ X1,CJS1 IF RA+1 NOT PROCESSED
  3031. CJS4 SA4 A4+B1 CLEAR EXIT MODE BITS
  3032. SA2 MABL CHECK MAINFRAME TYPE
  3033. MX6 2
  3034. ERX3 X3 READ (RA)
  3035. LX2 59-47
  3036. LX6 -7
  3037. AX3 51
  3038. PL X2,CJS4.5 IF CYBER 170-8X5
  3039. BX6 -X6*X4
  3040. SA6 A4
  3041. CJS4.5 R= X7,ARET
  3042. ZR X3,SEF IF ARITHMETIC ERROR
  3043. AX3 54-51 SHIFT OFF MODE FLAG BITS
  3044. NZ X3,SEF IF NOT PARITY ERROR
  3045. NG X2,CJS4.6 IF CYBER 170-8X5
  3046. LX2 20-16
  3047. CJS4.6 PL X2,SEF IF NOT A CYBER 170
  3048. SX7 PEET SET PARITY ERROR
  3049. EQ SEF SET ERROR FLAG
  3050.  
  3051. CJS5 NG X1,CJS6 IF TIME LIMIT
  3052. SX7 SRET SET SRU LIMIT FLAG
  3053. CJS6 SA2 B7+TFSW CHECK FOR INTERACTIVE JOB
  3054. MX6 12
  3055. BX6 X6*X2 EJT ORDINAL
  3056. LX6 12
  3057. CX2 X6,EJT CONVERT EJT ORDINAL TO OFFSET
  3058. MX6 -4
  3059. TA2 X2+JSNE,EJT GET CONNECTION STATUS FROM EJT ENTRY
  3060. AX2 7
  3061. BX2 -X6*X2 CONNECTION STATUS
  3062. SX6 OLCS
  3063. BX6 X2-X6
  3064. ZR X6,RB4 IF ON-LINE INTERACTIVE JOB
  3065. R= X1,DTCS
  3066. BX2 X1-X2
  3067. ZR X2,RB4 IF DETACHED INTERACTIVE JOB
  3068. TA2 SP CHECK PSEUDO-PP IR
  3069. SX4 7600B CONTROL POINT MASK
  3070. SX3 B7
  3071. AX2 36-7
  3072. BX2 X4*X2
  3073. BX3 X2-X3
  3074. ZR X3,RB4 IF PSEUDO-PP ASSIGNED TO THIS C.P.
  3075. EQ SEF SET ERROR FLAG
  3076. CPT SPACE 4,30
  3077. ** CPT - UPDATE CPU TIME AND SRU ACCUMULATOR.
  3078. *
  3079. * CP = S0 * CP0 * SC + S1 * CP1 * SC
  3080. * S0 = SITE DEFINABLE CPU MULTIPLIER FOR CPU 0.
  3081. * S1 = SITE DEFINABLE CPU MULTIPLIER FOR CPU 1.
  3082. * CP0 = CPU TIME USED BY CPU 0 IN MACHINES UNITS.
  3083. * CP1 = CPU TIME USED BY CPU 1 IN MACHINES UNITS.
  3084. * SC = SCALING FACTOR TO CONVERT MACHINES UNITS INTO
  3085. * QUARTER NANOSECONDS.
  3086. * MACHINE UNITS ARE MILLISECONDS FOR CYBER 6000,
  3087. * CYBER 70 AND CYBER 171 - 175 MAINFRAMES.
  3088. * MACHINE UNITS ARE 27.5 NANOSECONDS FOR CYBER 176.
  3089. * MACHINE UNITS ARE MICROSECONDS FOR CYBER 8X5.
  3090. *
  3091. * NEW SRU = CPM*CP + OLD SRU
  3092. *
  3093. * ENTRY (B3) = EXIT ADDRESS.
  3094. *
  3095. * EXIT (X1) = *CPAL* SHIFTED LEFT CIRCULAR 36 BITS.
  3096. * (X6) = UPDATED CP ACCUMULATOR (QUARTER NANO SECONDS)
  3097. * (X0) = CPU TIME SINCE CPU SWITCH IN MACHINE UNITS.
  3098. *
  3099. * USES X - 0, 1, 2, 3, 6, 7.
  3100. * B - 4, 6.
  3101. * A - 1, 2, 3, 6, 7.
  3102.  
  3103.  
  3104. CPT SA1 RTCL READ MACHINE UNITS
  3105. SA2 CL+CPBT+A0 READ BASE TIME
  3106. MX7 -36
  3107. BX6 -X7*X1 MILLISECOND CLOCK
  3108. SA6 A2 SET NEW BASE TIME
  3109. IX0 X6-X2 TIME USED IN MACHINE UNITS
  3110.  
  3111. * ENTER HERE IF OTHER THAN MILLISECOND CLOCK USED.
  3112. * (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
  3113.  
  3114. CPT1 SA1 CPAL+A0
  3115. SA2 SA+A0
  3116. SA3 CPTA+A0
  3117. LX1 -42
  3118. IX6 X2+X0
  3119. IX3 X3*X0 SCALE CPU TIME FOR CPU TYPE
  3120. SX2 X1 EXCHANGE PACKAGE TYPE
  3121. SA6 SA+A0 UPDATE TIME ACCUMULATED SINCE CPU SWITCH
  3122. BX0 X6
  3123. NZ X2,CPT5 IF INTERNAL *CPUMTR* EXCHANGE PACKAGE
  3124.  
  3125. * UPDATE CPU TIME AND SRU ACCUMULATOR.
  3126.  
  3127. LX1 18 POSITION CONTROL POINT ADDRESS
  3128. SA2 CPTW+X1 READ CONTROL POINT ACCUMULATOR
  3129. IX6 X3+X2
  3130. SA6 A2
  3131. SA2 X1+CPLW READ TIME LIMIT WORD
  3132. IX7 X2-X6
  3133. PX3 X3
  3134. NG X7,CPT4 IF TIME LIMIT
  3135. CPT2 SA2 X1+MP3W READ CPM
  3136. NG X2,RB3 IF SRU ACCUMULATION DISABLED
  3137. AX2 30
  3138. PX2 X2
  3139. NX7 X3
  3140. NX2 X2
  3141. SA3 CPTB CONVERT TO MILLIUNITS
  3142. RX2 X2*X7 CPM*CP
  3143. RX2 X2*X3 CPM * CP / 4000000
  3144. SA3 X1+SRUW READ SRU ACCUMULATOR
  3145. UX2,B4 X2
  3146. LX2 B4
  3147. IX7 X3+X2
  3148. SA7 A3
  3149. SA3 X1+STLW READ SRU LIMIT
  3150. MX2 -42
  3151. BX7 -X2*X7
  3152. BX3 -X2*X3
  3153. IX3 X7-X3
  3154. PL X3,CPT3 IF SRU LIMIT
  3155. JP B3 RETURN
  3156.  
  3157. CPT3 SA2 X1+SRUW SET SRU LIMIT FLAG
  3158. SX7 B1
  3159. BX3 X2
  3160. LX7 56
  3161. LX3 59-53
  3162. NG X3,RB3 IF RESOURCE LIMITS DISABLED
  3163. BX7 X2+X7
  3164. SA7 A2
  3165. JP B3 RETURN
  3166.  
  3167. CPT4 SA2 X1+SRUW SET TIME LIMIT FLAG
  3168. BX7 X2
  3169. LX7 59-53
  3170. NG X7,CPT2 IF RESOURCE LIMITS DISABLED
  3171. SX7 B1
  3172. LX7 58
  3173. BX7 X2+X7
  3174. SA7 A2
  3175. EQ CPT2 CHECK SRU LIMIT
  3176.  
  3177. * UPDATE CPU TIME FOR INTERNAL *CPUMTR* EXCHANGE PACKAGE.
  3178.  
  3179. CPT5 LX1 42 POSITION EXCHANGE PACKAGE ADDRESS
  3180. SA2 X1+CTMW UPDATE ACCUMULATOR
  3181. IX6 X2+X3
  3182. LX1 -24 POSITION *CPAL* TO CONTROL POINT
  3183. SA6 A2
  3184. JP B3 RETURN
  3185.  
  3186. CPTA CON 4000000 QUARTER NANOUNITS PER MACHINE UNIT * S0
  3187. CON 4000000 QUARTER NANOUNITS PER MACHINE UNIT * S1
  3188.  
  3189. CPTB DATA 0.25E-6 MILLISECONDS PER QUARTER NANOSECOND
  3190. CPTC CON 4000000.0 QUARTER NANOUNITS PER MILLISECOND
  3191. EFP SPACE 4,20
  3192. ** EFP - EXECUTE FUNCTION POST PROCESSOR OVERLAY.
  3193. *
  3194. * ENTRY (X5) = 12/0, 48/OUTPUT REGISTER RESPONSE.
  3195. * (X7) = OVERLAY CALL PARAMETERS.
  3196. * (B4) = OVERLAY PLD POINTER.
  3197. * (B3) = RETURN ADDRESS.
  3198. *
  3199. * EXIT OUTPUT REGISTER RESPONSE SET IN WORD *SBFP + 0* IN
  3200. * EXTENDED PP COMMUNICATION BLOCK.
  3201. * PARAMETERS SET IN WORD *SBFP + 1* OF EXTENDED PP
  3202. * COMMUNICATION BLOCK.
  3203. * *BOTM* FUNCTION ISSUED TO PP.
  3204. * TO *HNG* IF OVERLAY NOT CM RESIDENT.
  3205. *
  3206. * *BOTM* FUNCTION FORMAT -
  3207. *
  3208. * 12/ *BOTM*,24/ OVERLAY CODE FWA,24/ *SBFP + 2* ADDRESS
  3209. *
  3210. * USES X - 1, 2, 3, 4, 7.
  3211. * A - 1, 3, 4, 7.
  3212.  
  3213.  
  3214. EFP BSS 0 ENTRY
  3215.  
  3216. * SET PARAMETERS AND OUTPUT REGISTER RESPONSE.
  3217. * A *PRLM* WILL BE SET IN THE OUTPUT REGISTER IF THERE IS A
  3218. * MOVE REQUEST FOR THE CP/PCP IN CASE STORAGE MOVE HAD BEEN
  3219. * ENABLED PREVIOUSLY.
  3220.  
  3221. TX3 A5-1,-FP
  3222. SA1 CMCL
  3223. LX3 PPXES-PPCES
  3224. TA3 X3+ACPP,FPX GET CP/PCP ASSIGNMENT
  3225. SA4 B4 GET PLD POINTERS
  3226. SA7 A3+SBFP+1-ACPP SET CALL PARAMETERS
  3227. BX3 X3-X1
  3228. BX7 X5
  3229. AX3 48
  3230. SX1 A7+B1 COMMUNICATION BLOCK POINTER FOR CALL
  3231. NZ X3,EFP1 IF NO MOVE REQUEST FOR CP/PCP
  3232. SX2 PRLM SET PAUSE REQUEST
  3233. LX2 48
  3234. BX7 X7+X2
  3235. EFP1 AX4 24
  3236. SA7 A7-B1 SET OUTPUT REGISTER
  3237.  
  3238. * ISSUE *BOTM* FUNCTION TO PP.
  3239.  
  3240. SX4 X4+1-400000B
  3241. SX7 BOTM
  3242. LX4 24 OVERLAY CODE FWA
  3243. LX7 48
  3244. BX4 X4+X1
  3245. BX7 X7+X4
  3246. SA7 A5+ SET *BOTM* FUNCTION AND PARAMETERS
  3247. JP B3 RETURN
  3248. EPR SPACE 4,15
  3249. ** EPR - ENTER PROGRAM REQUEST.
  3250. * THIS ROUTINE CAN ONLY BE ENTERED FROM CPU-0 IF BOTH
  3251. * CPU-S ARE IN USE. THIS INSURES THAT *PR* IS
  3252. * INTERLOCKED PROPERLY.
  3253. *
  3254. * ENTRY (X0) = REQUEST BIT.
  3255. *
  3256. * USES X - 2, 6.
  3257. * B - 3, 6.
  3258. * A - 2, 6.
  3259. *
  3260. * CALLS RCC.
  3261.  
  3262.  
  3263. EPR SA2 PR SET REQUEST BIT
  3264. SB3 MTRX SET *RCC* RETURN ADDRESS
  3265. TB6 SCA SET EXCHANGE PACKAGE ADDRESS
  3266. BX6 X2+X0
  3267. SA6 A2
  3268. EQ RCC RECALL CPU
  3269. IAA SPACE 4,40
  3270. ** IAA - INCREMENT AUC ACCUMULATOR.
  3271. *
  3272. * PARAMETER BLOCK FORMAT -
  3273. *
  3274. *T ADDR 6/ BC,22/ 0,32/ CP
  3275. *T ADDR+1 10/ 0,10/ MS,10/ 0,10/ MT,10/ 0,10/ PF
  3276. *T ADDR+2 10/ 0,10/ OD,20/ MP,20/ AU
  3277. *T ADDR+3 36/ 0,12/ EM,12/ CM
  3278. *
  3279. * BC = BLOCK CODE = 01B.
  3280. * CP = CP TIME (QUARTER NANOUNITS).
  3281. * MS = MS UNITS.
  3282. * MT = MT UNITS.
  3283. * PF = PF UNITS.
  3284. * OD = OD UNITS.
  3285. * MP = MP UNITS.
  3286. * AU = AUC MILLIUNITS.
  3287. * EM = EXTENDED MEMORY SIZE/1000B.
  3288. * CM = CENTRAL MEMORY SIZE/100B.
  3289. *
  3290. * SRU INCREMENT =
  3291. *
  3292. * M1(CP + M2*IO + M3(CP+IO)CM +
  3293. * M4(CP+IO)EC + MM*MP + AU)
  3294. *
  3295. * = M1((1 + M3*CM + M4*EC)CP +
  3296. * (M2 + M3*CM + M4*EC)IO + MM*MP + AU)
  3297. *
  3298. * = (M1 + M1*M3*CM + M1*M4*EC)CP +
  3299. * (M1*M2 + M1*M3*CM + M1*M4*EC)IO + M1*MM*MP + M1*AU
  3300. *
  3301. * = CPM*CP + IOM*IO + M1M*MP + M1*AU.
  3302. *
  3303. * AUC INCREMENT = SRU INCREMENT / M1.
  3304. *
  3305. * ENTRY (B3) = EXIT ADDRESS.
  3306. * (B7) = CONTROL POINT AREA ADDRESS.
  3307. * (X2) = ABSOLUTE PARAMETER BLOCK ADDRESS.
  3308. *
  3309. * EXIT (B3) = EXIT ADDRESS.
  3310. * (B4) = OVERFLOW FLAG.
  3311. * (B5) = 0, IF NO ERROR.
  3312. * = 1, IF EXCESSIVE INCREMENT.
  3313. * (B7) = CONTROL POINT AREA ADDRESS.
  3314. * (X5) = PRESERVED.
  3315. * TO *AIO1* TO INCREMENT SRU ACCUMULATOR.
  3316. *
  3317. * USES X - 0, 1, 2, 3, 4, 6, 7.
  3318. * A - 1, 2, 3, 6.
  3319. * B - 4, 5, 6, 7.
  3320.  
  3321. IAA BX3 X2 GET PARAMETER BLOCK CODE
  3322. ERX3 X3
  3323. MX6 6
  3324. BX6 X6*X3
  3325. LX6 6
  3326. SB4 X6
  3327. SB5 B0+ SET NO ERROR
  3328. EQ B4,B1,IAA1 IF CODE = 01
  3329. JP B3 EXIT
  3330.  
  3331. IAA1 SA1 B7+MP2W M1*1000
  3332. LX1 36
  3333. MX0 -18
  3334. BX6 -X0*X1 M12
  3335. AX1 18
  3336. BX1 -X0*X1 M1*1000
  3337. SB4 X1 SAVE M1*1000
  3338. SX4 3 GET *EM* AND *CM*
  3339. IX4 X2+X4
  3340. ERX4 X4
  3341. SB6 X6 SAVE M12
  3342. MX6 -12
  3343. BX1 -X6*X4 CM/100B
  3344. AX4 12
  3345. BX7 -X6*X4 EM/1000B
  3346. MX6 -3
  3347. IX1 X1-X6 ROUND CM/100B WITH 7B
  3348. AX1 3 CM = (CM/100B + 7B)/10B
  3349. SB5 X1 SAVE CM/1000B
  3350. ERRNZ MP2W-MP1W-1 CODE DEPENDS ON CONTIGUOUS WORDS
  3351. SA1 A1-B1 GET M13 AND M14
  3352. LX1 36
  3353. BX6 -X0*X1 ISOLATE M14
  3354. IX7 X7*X6 M14 * EM/1000B
  3355. AX1 18
  3356. BX1 -X0*X1 ISOLATE M13
  3357. SX6 B5 CM/1000B
  3358. IX1 X6*X1 CM/1000B * M13
  3359. IX1 X1+X7 M13*CM + M14*EC
  3360. BX7 X1
  3361. MX6 -54 CHECK *CP* SIZE
  3362. BX4 -X6*X3
  3363. MX6 -32 ISOLATE *CP*
  3364. BX3 -X6*X3
  3365. IX6 X4-X3
  3366. NZ X6,IAA7 IF INCREMENT TOO LARGE
  3367. SX6 B4 M1*1000
  3368. IX1 X1+X6 M1*1000 + M13*CM + M14*EC
  3369. PX3 X3
  3370. PX1 X1
  3371. NX4 X3
  3372. NX1 X1
  3373. SA3 CPTB CONVERT TO MILLIUNITS
  3374. RX1 X1*X4 CPM * CP
  3375. RX1 X1*X3 CPM * CP / 4000000
  3376. UX1,B5 X1
  3377. LX1 B5
  3378. SX4 B1+B1 GET *AU* AND *MP*
  3379. IX4 X2+X4
  3380. ERX4 X4
  3381. MX0 -20
  3382. BX6 -X0*X4 *AU*
  3383. SX3 B4
  3384. IX6 X3*X6 M1*1000 * AU
  3385. IX1 X6+X1 CPM*CP + M1*1000*AU
  3386. LX4 20
  3387. BX6 -X0*X4 *OD* (SET FOR IO LOOP INITIAL PASS)
  3388. SA3 B7+MPMW GET M1 * MAP MULTIPLIER
  3389. LX4 20
  3390. BX4 -X0*X4 *MP*
  3391. LX3 20
  3392. BX3 -X0*X3
  3393. IX3 X3*X4 MP * M1M
  3394. IX1 X1+X3 CPM*CP + M1*1000*AU + MP*M1M
  3395. SX3 B6+ M12
  3396. IX7 X7+X3 M12 + M13*CM + M14*EC
  3397. PX7 X7
  3398. NX7 X7
  3399. SX4 B1+ GET *IO* COMPONENTS
  3400. IX4 X4+X2
  3401. ERX4 X4
  3402. SB5 B0+ INITIALIZE INDEX
  3403. LX4 20
  3404. IAA2 MX3 -10
  3405. ZR X6,IAA3 IF NO INCREMENT
  3406. LX3 10
  3407. BX3 -X3*X6
  3408. NZ X3,IAA7 IF INCREMENT TOO LARGE
  3409. PX6 X6
  3410. SA3 B5+AIOA GET MULTIPLIER
  3411. NX6 X6
  3412. RX6 X3*X6 IO = (S2, S3, S4, S5) * (MS, MT, PF, OD)
  3413. RX3 X6*X7 IOM*IO
  3414. UX3,B6 X3
  3415. LX3 B6
  3416. IX1 X1+X3
  3417. IAA3 LX4 -20
  3418. BX6 -X0*X4 ISOLATE INCREMENT
  3419. SB5 B5+1
  3420. SB6 4
  3421. NE B5,B6,IAA2 IF MORE *IO* COMPONENTS
  3422. BX4 X1 DIVIDE BY M1*1000 FOR AUC INCREMENT
  3423. SX3 B4
  3424. SB4 B7 SAVE CONTROL POINT ADDRESS
  3425. IX6 X4/X3 AUC INCREMENT
  3426. SB7 B4 RESTORE CONTROL POINT ADDRESS
  3427. MX0 19 CHECK FOR INCREMENT TOO LARGE
  3428. BX3 X0*X1
  3429. NZ X3,IAA7 IF SRU INCREMENT TOO LARGE
  3430. MX0 31
  3431. BX3 X0*X6
  3432. NZ X3,IAA7 IF AUC INCREMENT TOO LARGE
  3433.  
  3434. * ADD INCREMENT TO AUC ACCUMULATOR.
  3435.  
  3436. SB4 40B PRESET OVERFLOW FLAG
  3437. SA2 B7+AUCW GET AUC ACCUMULATOR
  3438. BX3 -X0*X2
  3439. IX3 X3+X6 ADD INCREMENT
  3440. BX7 X0-X3
  3441. NZ X7,IAA4 IF NOT MAXIMUM
  3442. SX3 B0+ SET ACCUMULATOR = 0
  3443. EQ IAA6 SET NEW ACCUMULATOR VALUE
  3444.  
  3445. IAA4 BX7 X0*X3 CHECK FOR OVERFLOW
  3446. ZR X7,IAA5 IF NO OVERFLOW
  3447. BX3 -X0*X3 INCREMENT TO OVERFLOW VALUE - MAXIMUM
  3448. EQ IAA6 SET NEW ACCUMULATOR VALUE
  3449.  
  3450. IAA5 SB4 B0+ CLEAR OVERFLOW FLAG
  3451. IAA6 BX6 X0*X2 SET NEW VALUE INTO AUCW
  3452. BX6 X6+X3
  3453. SA6 A2
  3454. SB5 B0 SET NO ERROR FOR RETURN
  3455. EQ AIO1 INCREMENT SRU ACCUMULATOR
  3456.  
  3457. IAA7 SB5 B1+ SET EXCESSIVE INCREMENT ERROR
  3458. JP B3 EXIT
  3459. IBF SPACE 4,20
  3460. ** IBF - ISSUE *BOTM* FUNCTION.
  3461. *
  3462. * *IBF* FORMATS AND ISSUES A *BOTM* FUNCTION TO *PPR* TO
  3463. * EXECUTE AN OVERLAY PROGRAM VIA A BOOTSTRAP LOADER. *IBF*
  3464. * ALLOCATES A PP SAVE AREA, MOVES THE PP-S OUTPUT REGISTER AND
  3465. * MESSAGE BUFFER TO IT, PRESETS A THREE-WORD BOOTSTRAP, SETS IT
  3466. * IN THE PP SAVE AREA, AND THEN ISSUES THE *BOTM* TO THE PP.
  3467. *
  3468. * THE PRESETTING USES INFORMATION LOCATED IN THE FOURTH WORD OF
  3469. * THE BOOTSTRAP, DESCRIBED BELOW AS *BS+3*.
  3470. *
  3471. * ENTRY (X3) = 12/ 0, 24/ BP, 12/0, 6/OX, 6/BX.
  3472. * BP = *BOTM* PARAMETERS FOR BYTES 3 AND 4.
  3473. * OX = *TFPL* INDEX OF OVERLAY.
  3474. * BX = *TFPL* INDEX OF BOOTSTRAP.
  3475. * (A5) = *OR* ADDRESS.
  3476. * (B5) = RETURN ADDRESS IF *SYSEDIT* ACTIVE OR NO PP
  3477. * SAVE AREA AVAILABLE.
  3478. * (BS+3) = 12/2000B+PA, 48/ PP.
  3479. * PA = PRESET ALGORITHM.
  3480. * PP = PRESET PARAMETERS.
  3481. * WHEN A PP SAVE AREA IS USED, THIS FIELD
  3482. * MUST BE FORMATTED AS FOLLOWS.
  3483. * 12/ L1, 12/ L2, 12/ F1, 12/ F2.
  3484. * L1 = LENGTH OF THE FIRST BLOCK SAVED.
  3485. * L2 = LENGTH OF THE SECOND BLOCK SAVED.
  3486. * F1 = FIRST BYTE ADDRESS OF FIRST BLOCK.
  3487. * F2 = FIRST BYTE ADDRESS OF SECOND BLOCK.
  3488. * *DSDI* USES THIS INFORMATION.
  3489. *
  3490. * EXIT TO *SPL* IF BOOTSTRAP CAN BE EXECUTED.
  3491. * TO *B5* RETURN ADDRESS VIA *REJ* IF BOOTSTRAP CANNOT
  3492. * BE EXECUTED.
  3493. *
  3494. * USES X - 0, 1, 3, 4, 5, 6, 7.
  3495. * A - 1, 3, 4, 6, 7.
  3496. * B - 4, 6.
  3497. *
  3498. * CALLS MSM, MSR, SPL.
  3499.  
  3500.  
  3501. IBF BSS 0 ENTRY
  3502. MX4 -6
  3503. BX4 -X4*X3
  3504. AX3 6
  3505. SX1 X3
  3506. SA4 X4+TFPL-1 GET BOOTSTRAP *TFPL* ENTRY
  3507. SA1 X3+TFPL-1 GET OVERLAY *TFPL* ENTRY
  3508. SX6 X4
  3509. SX7 X1
  3510. ZR X6,REJ IF BOOTSTRAP ENTRY NOT INITIALIZED
  3511. ZR X7,REJ IF OVERLAY ENTRY NOT INITIALIZED
  3512. LX7 18
  3513. BX6 X6+X7
  3514. SA6 T1 SAVE PLD POINTERS
  3515.  
  3516. * ALLOCATE PP SAVE AREA FOR OVERLAY CALL.
  3517.  
  3518. SA1 PPSP GET PP SAVE AREA POINTER
  3519. MX7 -12
  3520. BX7 -X7*X1 GET NUMBER OF SAVE AREAS
  3521. AX1 12
  3522. SA1 X1-PPSA
  3523. SX0 A5+ SET MOVE SOURCE ADDRESS
  3524. IBF1 SA1 A1+PPSA GET SAVE AREA INTERLOCK WORD
  3525. SX7 X7-1
  3526. NG X7,REJ IF NONE AVAILABLE
  3527. NZ X1,IBF1 IF THIS SAVE AREA IS INTERLOCKED
  3528. SX5 A1+B1 SET MOVE DESTINATION ADDRESS
  3529. TSB4 (7,CME,7,CMUMTR,10B) SET MOVE WORD COUNT
  3530. IX1 X0-X5 SET MOVE DIFFERENCE
  3531. SB6 IBF2 SET RETURN ADDRESS
  3532. TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
  3533.  
  3534. IBF2 SA1 T1
  3535. SX4 X1 RESTORE BOOTSTRAP PLD POINTER
  3536. AX1 18 RESTORE OVERLAY PLD POINTER
  3537.  
  3538. * BUILD BOOTSTRAP CALL.
  3539.  
  3540. R= X0,BOTM BUILD *BOTM* FUNCTION
  3541. AX3 6 POSITION *BOTM* PARAMETERS
  3542. BX0 X0+X3
  3543. SA4 X4 GET BOOTSTRAP PLD ENTRY
  3544. LX0 24 POSITION THE *BOTM* PARAMETERS
  3545. AX4 24 GET BOOTSTRAP FWA
  3546. SB6 X4
  3547. PL B6,HNG IF BOOTSTRAP IS NOT CM RESIDENT
  3548. SA3 X4+4-400000B GET BOOTSTRAP PRESET CONTROL WORD
  3549. SX7 A5 BUILD THE PP SAVE AREA INTERLOCK
  3550. SA4 A3-B1 GET LAST WORD OF BOOTSTRAP
  3551. LX7 48 POSITION OUTPUT REGISTER ADDRESS
  3552. UX6,B6 X3 GET PRESET ALGORITHM AND *BOTM* PARAMETERS
  3553. SA3 A4-B1
  3554. BX7 X7+X6
  3555. SA1 X1+ GET OVERLAY PLD ENTRY
  3556. SA7 X5-1 SET THE PP SAVE AREA INTERLOCK
  3557. SX5 X5+7 FWA OF BOOTSTRAP IN PP SAVE AREA
  3558. AX6 24 POSITION *BOTM* DATA
  3559. BX7 X0+X5
  3560. LX7 24
  3561. IX7 X7+X6
  3562. NZ B6,HNG IF UNUSED PRESET ALGORITHM INDEX
  3563.  
  3564. * EXIT TO THE BOOTSTRAP PRESET CODE WITH THESE VALUES -
  3565. *
  3566. * (A1) = ADDRESS OF OVERLAY-S PLD ENTRY.
  3567. * (A3) = ADDRESS OF SECOND WORD OF BOOTSTRAP.
  3568. * (A4) = ADDRESS OF LAST WORD OF BOOTSTRAP.
  3569. * (B6) = PRESET INDEX.
  3570. * (X1) = OVERLAY-S PLD ENTRY.
  3571. * (X3) = SECOND WORD OF BOOTSTRAP.
  3572. * (X4) = LAST WORD OF BOOTSTRAP.
  3573. * (X5) = FWA OF BOOTSTRAP IN PP SAVE AREA.
  3574. * (X7) = *BOTM* CALL WORD.
  3575.  
  3576.  
  3577. * PRESET ALGORITHM 0.
  3578. *
  3579. * (MB) = OVERLAY LOAD PARAMETERS FROM *SPL*.
  3580. * (MB+1) = *BOTM* CALL WORD.
  3581.  
  3582.  
  3583. BX6 X3
  3584. SA3 A3-B1
  3585. SB6 IBF3 *SPL* RETURN ADDRESS
  3586. SA6 X5+B1
  3587. BX5 X7
  3588. SA7 A5+2 SAVE *BOTM* CALL IN *MB*+1
  3589. BX7 X4
  3590. MX4 18
  3591. SA7 A6+B1
  3592. MX7 6
  3593. BX6 X3
  3594. BX7 X7*X1
  3595. SA6 A6-B1
  3596. LX7 -54
  3597. EQ SPL1.1 BUILD LOAD PARAMETERS
  3598.  
  3599. IBF3 SA7 A5+B1 SAVE LOAD PARAMETERS IN *MB*
  3600. BX7 X5 RESTORE *BOTM*
  3601. EQ PPR1 ISSUE *BOTM*
  3602. JAV SPACE 4,40
  3603. ** JAV - JOB ADVANCE.
  3604. *
  3605. * CONDITIONS REQUIRED FOR ADVANCE-
  3606. *
  3607. * ROLLOUT FLAG SET-
  3608. * 1) NO PP,S ASSIGNED.
  3609. * 2) EJT ENTRY INTERLOCK NOT SET.
  3610. * 3) NO ROLLOUT INHIBITING RECALL REQUESTS.
  3611. * IE. ENTRIES IN BQ OR CQ.
  3612. * 4) EJT ORDINAL IN *TFSW* OF CONTROL POINT.
  3613. * 5) STORAGE MOVE NOT PENDING FOR THIS CP.
  3614. * 6) LEVEL 3 DEADSTART NOT IN PROGRESS.
  3615. *
  3616. * IF ROLLOUT FLAG NOT SET-
  3617. * 1) NO PP,S ASSIGNED.
  3618. * 2) EJT ENTRY INTERLOCK NOT SET.
  3619. * 3) NO CPU ACTIVITY.
  3620. * 4) NO PP IN RECALL.
  3621. * 5) NO TAPE ACTIVITY.
  3622. * 6) NO WAIT RESPONSE/LONG TERM CONNECTION SET. (IF ERROR
  3623. * FLAG IS SET, OR *END* IS IN (RA+1) THIS CONDITION
  3624. * DOES NOT INHIBIT ADVANCE.)
  3625. * 7) EJT ORDINAL IN *TFSW* OF CONTROL POINT.
  3626. * 8) STORAGE MOVE NOT PENDING FOR THIS CP.
  3627. * 9) LEVEL 3 DEADSTART NOT IN PROGRESS.
  3628. *
  3629. * ENTRY (B3) = EXIT ADDRESS.
  3630. * (B7) = CP ADDRESS.
  3631. *
  3632. * EXIT NONE
  3633. *
  3634. * USES X - 1, 2, 3, 4, 6, 7.
  3635. * B - 4.
  3636. * A - 1, 2, 4, 7.
  3637. *
  3638. * CALLS APQ, /PCP/APC, RB3.
  3639.  
  3640.  
  3641. JAV BSS 0 ENTRY
  3642. SA2 DSSL CHECK FOR DEADSTART IN PROGRESS
  3643. SA1 B7+STSW
  3644. MX6 -3
  3645. BX6 -X6*X2
  3646. SX6 X6-7
  3647. ZR X6,RB3 IF A LEVEL 3 DEADSTART IN PROGRESS
  3648. SX6 7377B
  3649. LX6 -12
  3650. BX3 X6*X1
  3651. MX6 12
  3652. NZ X3,RB3 IF ACTIVITY REMAINS
  3653. SA2 SMRL
  3654. MX4 -12
  3655. BX2 -X4*X2
  3656. LX2 7 CONVERT CP NUMBER TO CPA ADDRESS
  3657. SB4 X2
  3658. EQ B4,B7,RB3 IF MOVE PENDING FOR THIS CP
  3659. SX2 7400B
  3660. LX6 12+11
  3661. BX3 X2*X1
  3662. LX1 59-24
  3663. LX2 -4+35 POSITION TO RECALL COUNT
  3664. NG X1,JAV1 IF ROLLOUT SET
  3665. BX4 X6*X1
  3666. BX3 X1*X2 EXTRACT RECALL COUNT
  3667. NZ X4,JAV1 IF ERROR FLAG
  3668. SA4 B7+SSCW
  3669. ZR X4,JAV1 IF NO SUBSYSTEM CONNECTIONS
  3670. SA2 B7+FLSW READ RA/FL
  3671. MX6 -12
  3672. BX4 -X6*X2
  3673. ZR X4,RB3 IF NO FIELD LENGTH
  3674. LX2 -12
  3675. MX6 -RMSK
  3676. BX2 -X6*X2 EXTRACT RA
  3677. SX6 B1
  3678. LX2 6
  3679. IX2 X2+X6
  3680. ERX2 X2 READ (RA+1)
  3681. LX2 18
  3682. SX2 X2-3REND
  3683. NZ X2,RB3 IF NOT END IN RA+1
  3684. JAV1 NZ X3,RB3 IF ACTIVITY REMAINS
  3685. SA4 B7+TFSW GET EJT ORDINAL
  3686. MX6 -12
  3687. LX4 -48
  3688. BX2 -X6*X4 EJT ORDINAL
  3689. CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
  3690. ZR X2,RB3 IF NO JOB AT CP
  3691. TA4 X4+JSNE,EJT
  3692. SX7 101B JOB ADVANCE AND INTERLOCK MASK
  3693. BX6 X7*X4
  3694. BX7 X4+X7 SET JOB ADVANCE AND INTERLOCK
  3695. NZ X6,RB3 IF JOB ADVANCE OR INTERLOCK ALREADY SET
  3696. SA7 A4
  3697. LX1 59-31-59+24
  3698. JAVA TNG X1,(/PCP/APC,PCP,/MONITOR/JAV2) IF PSEUDO-ROLL OK
  3699. * EQ /TRACE/TRP13 (DURING DEAD JOB TRAP EXECUTION)
  3700. JAV2 SX6 3R1AJ
  3701. R= B4,LA1AJ SET *1AJ* INDEX
  3702. LX6 42
  3703. EQ APQ ASSIGN *1AJ*
  3704. PCQ SPACE 4,10
  3705. ** PPQ - PROCESS PP REQUEST QUEUE.
  3706. *
  3707. * ENTRY NONE.
  3708. *
  3709. * EXIT TO MTRX.
  3710. *
  3711. * CALLS APQ.
  3712.  
  3713.  
  3714. PPQ SA1 PQ+TAQR SET START OF QUEUE
  3715. SA2 SCRL CHECK EMERGENCY STEP
  3716. AX1 18
  3717. SX0 X1
  3718. LX2 59-56
  3719. SB3 PPQ2 *APQ* RETURN ADDRESS
  3720. NG X2,MTRX IF EMERGENCY STEP SET
  3721. PPQ1 SA1 X0+ FIND NEXT ENTRY IN QUEUE
  3722. SX1 X1
  3723. SA2 PPAL
  3724. ZR X1,MTRX IF NO PP REQUEST
  3725. SX0 X0
  3726. LX0 36
  3727. BX0 X0+X1
  3728. MX4 20
  3729. LX4 -12
  3730. BX2 X4*X2
  3731. ZR X2,MTRX IF NO PP AVAILABLE
  3732. SA4 X1+REPW-RCCW GET PARAMETER WORD
  3733. MX7 -12+7 CONTROL POINT AREA ADDRESS MASK
  3734. BX6 X4
  3735. SA6 APQA
  3736. SA4 X1+RECW-RCCW READ PP REQUEST
  3737. LX7 7
  3738. BX6 X4
  3739. BX7 -X7*X1
  3740. SB4 -B3 SELECT RETURN IF PP UNASSIGNABLE
  3741. SB7 X7+
  3742. BX1 X1-X1
  3743. EQ APQ1 ASSIGN PP
  3744.  
  3745. PPQ2 SA2 X0 CHECK FOR PRIORITY PP REQUEST
  3746. BX6 X1
  3747. BX3 X2
  3748. MX7 -18
  3749. AX3 18
  3750. BX3 -X7*X3
  3751. NG X2,PPQ2.1 IF A NO ROLL REQUEST
  3752. ZR X3,PPQ3 IF NOT PRIORITY PP REQUEST
  3753. ZR X1,PPQ4 IF PP NOT ASSIGNED
  3754. LX6 36 RETURN ASSIGNMENT ADDRESS
  3755. SA6 X3+
  3756. PPQ2.1 SX3 -400B SET DECREMENT FOR INHIBIT ROLLOUT COUNT
  3757. PPQ3 ZR X1,PPQ1 IF NO PP AVAILABLE
  3758. AX0 36
  3759. SA1 X0 DELETE ENTRY FROM QUEUE
  3760. BX6 -X7*X2
  3761. BX1 X7*X1
  3762. BX6 X1+X6
  3763. SA6 A1
  3764. MX4 -4
  3765. BX6 X6-X6
  3766. SA1 B7+STSW ADD RECALL SLOT TO FREE LIST
  3767. SX3 X3-20B-RCCW+1
  3768. SA6 A2+RECW-RCCW
  3769. SA6 A2+REPW-RCCW
  3770. BX7 -X4*X1
  3771. BX1 X4*X1
  3772. SX4 A2-B7 COMPUTE RECALL INDEX
  3773. SA7 A2
  3774. IX4 X4+X3
  3775. IX7 X4+X1 SET NEW FREE ENTRY AND RECALL COUNT
  3776. SA7 A1+
  3777. EQ PPQ1 PROCESS NEXT QUEUE ENTRY
  3778.  
  3779. PPQ4 BX6 X6-X6
  3780. SA6 X3 RETURN RESPONSE TO WAITING PP
  3781. SX1 B1+
  3782. SX3 -400B SET DECREMENT FOR INHIBIT ROLLOUT COUNT
  3783. EQ PPQ3 DELETE FROM QUEUE
  3784. RB3 SPACE 4,10
  3785. ** RB3 - RETURN TO ADDRESS IN (B3).
  3786. *
  3787. * ENTRY (B3) = EXIT ADDRESS.
  3788.  
  3789.  
  3790. RB3 JP B3 RETURN
  3791. RB4 SPACE 4,10
  3792. ** RB4 - RETURN TO ADDRESS IN (B4).
  3793. *
  3794. * ENTRY (B4) = EXIT ADDRESS.
  3795.  
  3796.  
  3797. RB4 JP B4 RETURN
  3798. RB5 SPACE 4,10
  3799. ** RB5 - RETURN TO ADDRESS IN (B5).
  3800. *
  3801. * ENTRY (B5) = EXIT ADDRESS.
  3802.  
  3803.  
  3804. RB5 JP B5 RETURN
  3805. RB6 SPACE 4,10
  3806. ** RB6 - RETURN TO ADDRESS IN (B6).
  3807. *
  3808. * ENTRY (B6) = EXIT ADDRESS.
  3809.  
  3810.  
  3811. RB6 JP B6 RETURN
  3812. RCC SPACE 4,20
  3813. ** RCC - RECALL CPU.
  3814. *
  3815. * THIS ROUTINE MAKES THE REQUESTED JOB OR EXCHANGE PACKAGE A
  3816. * CANDIDATE FOR THE CPU. A CPU SWITCH REQUEST WILL BE ENTERED
  3817. * IN *CSWL* FOR THE CURRENTLY EXECUTING OR THE ALTERNATE CPU IF
  3818. * THE JOB IN THAT CPU CAN BE IMMEDIATELY PREEMPTED. A SWITCH
  3819. * REQUEST FOR THE CURRENT CPU WILL BE PROCESSED DIRECTLY BY
  3820. * *CPUMTR* ON EXIT FROM MONITOR MODE. A SWITCH REQUEST FOR THE
  3821. * ALTERNATE CPU WILL BE DETECTED AND PROCESSED THE NEXT TIME
  3822. * THE ALTERNATE CPU EXITS FROM MONITOR MODE OR WILL BE
  3823. * INITIATED BY *MTR*.
  3824. *
  3825. * ENTRY (B3) = EXIT ADDRESS.
  3826. * (B6) = EXCHANGE PACKAGE ADDRESS.
  3827. *
  3828. * USES X - 0, 1, 2, 3, 4, 6, 7.
  3829. * B - 4, 5.
  3830. * A - 1, 2, 3, 4, 6, 7.
  3831.  
  3832.  
  3833. RCC BSS 0 ENTRY
  3834. SA1 B6+STSW GET CPU STATUS
  3835. MX4 1 BUILD *W* STATUS
  3836. MX2 -57
  3837. BX6 -X2*X1 CLEAR OLD STATUS
  3838. BX2 X2*X1 STATUS CODE
  3839. LX1 59-24
  3840. LX2 3
  3841. BX6 X6+X4
  3842. SB4 X2+
  3843. SB4 -B4 NEGATIVE STATUS CODE
  3844.  
  3845. * THE FOLLOWING IS A JUMP TABLE INDEXED BY CPU STATUS
  3846. * IN REVERSE ORDER.
  3847.  
  3848. RCCA NG X1,RCC15 IF ROLLOUT SET
  3849. JP RCCA+7+B4 JUMP TO PROCESSOR, LOOP FOR STATUS = 7
  3850.  
  3851. + SA6 A1+ 6 = *I* STATUS, AUTO RECALL
  3852. EQ RCC7 ADD ENTRY TO WQ
  3853.  
  3854. + SA3 B6+CRCW 5 = *X* STATUS, CPU RECALL
  3855. EQ RCC4 DELETE ENTRY FROM *RQ* AND ADD TO *WQ*
  3856.  
  3857. + SA3 B6+CWQW 4 = *W* STATUS, WAITING FOR CPU
  3858. EQ RCC3 DELETE FROM *WQ* AND REINSERT
  3859.  
  3860. + EQ * 3 = ILLEGAL
  3861.  
  3862. + SX1 B1 2 = *B* STATUS, CPU 1 ACTIVE ON JOB
  3863. SX7 B1
  3864. EQ RCC2 SET RECALL FLAG
  3865.  
  3866. + SX1 B0 1 = *A* STATUS, CPU 0 ACTIVE ON JOB
  3867. SX7 B1
  3868. EQ RCC2 SET RECALL FLAG
  3869.  
  3870. + LX1 12+24-59 0 = NULL STATUS, NO ACTIVITY
  3871. AX1 48 EXTRACT ERROR FLAG
  3872. NZ X1,RB3 IF ERROR FLAG
  3873. SA6 A1+ SET *W* STATUS
  3874. EQ RCC7 ENTER IN CPU REQUEST QUEUE
  3875.  
  3876. * SET RECALL FLAG ON ACTIVE JOB TO ENFORCE RECALL CPU SLICE.
  3877.  
  3878. RCC2 SA3 B6+CWQW
  3879. SA1 TSCL+X1
  3880. SX6 12B
  3881. LX6 45
  3882. LX7 48-0
  3883. BX6 X3+X6 SET RECALL AND DRIVER FLAGS IN *CWQW*
  3884. BX7 X1+X7 SET RECALL FLAG IN *TSCL*
  3885. SA6 A3 UPDATE *CWQW*
  3886. SA7 A1 UPDATE *TSCL*
  3887. JP B3 RETURN
  3888.  
  3889. * DELETE ENTRY FROM *WQ*.
  3890.  
  3891. RCC3 SX1 WQRL
  3892. MX6 -18
  3893. SX7 A3 SET *WQ* ENTRY ADDRESS
  3894. EQ RCC5 DELETE QUEUE ENTRY
  3895.  
  3896. * DELETE ENTRY FROM *RQ*.
  3897.  
  3898. RCC4 SX1 RQRL 5 = *X* STATUS, CPU RECALL
  3899. SA6 A1 SET NEW CPU STATUS
  3900. BX7 X7-X7
  3901. MX6 -12
  3902. SA7 A3 CLEAR *RQ* PARAMETERS
  3903. SX7 A3+ SET *RQ* ENTRY ADDRESS
  3904.  
  3905. * DELETE ENTRY FROM *RQ* OR *WQ*.
  3906. * SEARCH LOOP REPLICATED FOR PERFORMANCE.
  3907.  
  3908. RCC5 SA2 X1
  3909. BX1 -X6*X2
  3910. BX0 X7-X1
  3911. SA4 X1
  3912. ZR X0,RCC6 IF ENTRY FOUND
  3913. BX1 -X6*X4
  3914. BX0 X7-X1
  3915. NZ X0,RCC5 IF ENTRY NOT FOUND
  3916. SA2 A4+
  3917. RCC6 BX2 X6*X2 DELETE LINK TO ENTRY
  3918. BX3 -X6*X3 EXTRACT LINK FROM ENTRY
  3919. BX7 X2+X3 SET LINK TO BYPASS ENTRY
  3920. SA7 A2
  3921.  
  3922. * SET RECALL FLAG AND CHECK CPU SLICE RESTART REQUIRED.
  3923.  
  3924. RCC7 SA3 B6+CWQW GET CPU SCHEDULING PARAMETERS
  3925. SA4 B6+CSAW GET SERVICE CYCLE AND ACCUMULATORS
  3926. SX6 12B
  3927. SX0 B1
  3928. LX6 45
  3929. LX0 26-0
  3930. UX7,B4 X3 UNPACK CPU PRIORITY AND FLAGS
  3931. SX1 B4
  3932. BX3 X3+X0 SET *MTR* BYPASS FLAG
  3933. AX1 3 CPU PRIORITY
  3934. BX3 X3+X6 SET RECALL AND DRIVER FLAGS
  3935. SA1 TPRC+X1 GET SERVICE CYCLE FOR PRIORITY
  3936. SA2 WQRL
  3937. LX0 47-26
  3938. BX0 X0*X3 EXTENDED CPU SLICE INCOMPLETE FLAG
  3939. MX7 6
  3940. LX0 49-47
  3941. BX4 X7*X4 CPU SERVICE CYCLE
  3942. BX3 X3+X0 SET SLICE ACTIVE STATUS
  3943. BX7 X7*X1 CURRENT SERVICE CYCLE
  3944. BX1 X4-X7
  3945. ZR X1,RCC8 IF CPU SLICE IN CURRENT SERVICE CYCLE
  3946.  
  3947. * RESTART CPU SLICE IN CURRENT SERVICE CYCLE.
  3948.  
  3949. LX6 1
  3950. SA7 B6+CSAW SET SERVICE CYCLE AND CLEAR ACCUMULATORS
  3951. BX3 X3+X6 SET ACTIVE/INCOMPLETE SLICE FLAGS
  3952.  
  3953. * INSERT JOB IN *WQ* WITH RECALL FLAG.
  3954. * SEARCH LOOP REPLICATED FOR PERFORMANCE.
  3955.  
  3956. RCC8 MX6 42
  3957. SX7 A3+ SET CURRENT JOB WAIT QUEUE ADDRESS
  3958. UX0,B4 X3 GET CPU PRIORITY AND FLAGS
  3959. RCC9 SA4 X2
  3960. UX0,B5 X4
  3961. GT B4,B5,RCC10 IF POSITION FOUND
  3962. SA2 X4
  3963. UX0,B5 X2
  3964. LE B4,B5,RCC9 IF POSITION NOT FOUND
  3965. BX1 X6*X4 CLEAR LINK
  3966. BX7 X1+X7 MERGE NEW LINK
  3967. SX0 A2 SET LINK TO NEXT ENTRY
  3968. SA7 A4
  3969. EQ RCC11 UPDATE LINK
  3970.  
  3971. RCC10 BX1 X6*X2 CLEAR LINK
  3972. BX7 X1+X7 MERGE NEW LINK
  3973. SX0 A4 SET LINK TO NEXT ENTRY
  3974. SA7 A2
  3975.  
  3976. * SET RECALLED JOB *WQ* LINK AND CHECK CPU SWITCH CRITERIA.
  3977. * IF THERE IS A SWITCH REQUEST FOR THE CURRENT CPU ON A DUAL
  3978. * CPU SYSTEM, THE OTHER CPU WILL NOT BE CHECKED BY *RCC* SINCE
  3979. * *BNJ* WILL PERFORM THIS CHECK ON EXIT FROM MONITOR MODE.
  3980.  
  3981. RCC11 SA4 CSWL+A0
  3982. SA1 TSCL+A0
  3983. SA2 RTCL
  3984. BX3 X6*X3 CLEAR POSSIBLE OLD LINK
  3985. BX3 X3+X0 MERGE NEW LINK
  3986. NO
  3987. NO
  3988. NG X4,RCC14 IF PENDING SWITCH REQUEST FOR THIS CPU
  3989. MX7 -36
  3990. UX0,B5 X1 GET THIS CPU ACTIVE JOB PRIORITY
  3991. BX1 -X7*X1
  3992. BX2 -X7*X2
  3993. RCCB GT B4,B5,RCC13 IF NEW JOB .GT. ACTIVE JOB
  3994. * EQ /DCP/RCC (DUAL CPU MACHINE)
  3995. LT B4,B5,RCC14 IF NEW JOB .LT. ACTIVE JOB
  3996. RCC12 IX6 X2-X1
  3997. NG X6,RCC14 IF RECALL SLICE NOT EXPIRED
  3998.  
  3999. * WRITE *CWQW* AND REQUEST CPU SWITCH.
  4000.  
  4001. RCC13 SX1 A3
  4002. MX7 1
  4003. LX1 36
  4004. BX7 X4+X7 SET SWITCH REQUEST FLAG
  4005. BX6 X3
  4006. BX7 X7+X1 SET POINTER TO *WQ* ENTRY WITH BYPASS FLAG
  4007. SA6 A3 WRITE *CWQW*
  4008. SA7 A4 WRITE *CSWL*
  4009. JP B3 RETURN
  4010.  
  4011. * CLEAR *MTR* BYPASS FLAG.
  4012.  
  4013. RCC14 SX7 B1
  4014. LX7 26-0
  4015. BX6 -X7*X3 CLEAR BYPASS FLAG
  4016. SA6 A3 WRITE *CWQW*
  4017. JP B3 RETURN
  4018.  
  4019. * PROCESS RECALL REQUEST WITH ROLLOUT PENDING.
  4020.  
  4021. RCC15 LX1 12+24-59
  4022. SX2 B1
  4023. AX1 48 EXTRACT ERROR FLAG
  4024. LX2 25
  4025. NZ X1,RB3 IF ERROR FLAG SET
  4026. BX6 X2+X6 SET CPU STATUS AT ROLLOUT
  4027. LX2 59-25
  4028. BX6 -X2*X6 CLEAR *W* STATUS
  4029. SA6 A1 SET NULL STATUS
  4030. JP B3 RETURN
  4031. RSC SPACE 4,30
  4032. ** RSC - RETURN SUB-SYSTEM CONTROL POINT ADDRESS.
  4033. *
  4034. * ENTRY (X0) = -7777B
  4035. * (X1) = SUBSYSTEM IDENTIFICATION.
  4036. * (B3) = EXIT ADDRESS.
  4037. * ((B3)-1) = EXIT ADDRESSES FOR ERROR CASES.
  4038. * ((B3)-1) = 12/ A1-XA,18/ A2,12/ A3-XA,18/ A4
  4039. * XA = EXIT ADDRESS = (B3)
  4040. * A1 = EXIT ADDRESS IF SUB-SYSTEM NOT ACTIVE.
  4041. * NOTE - IF THE SUB-SYSTEM FL IS ZERO IT
  4042. * IS TREATED AS A NOT ACTIVE CONDITION.
  4043. * A2 = EXIT ADDRESS IF ILLEGAL SUBSYSTEM ID.
  4044. * A3 = EXIT ADDRESS IF JOB ADVANCE OR DMP= SET.
  4045. * A4 = EXIT ADDRESS IF STORAGE MOVE SET.
  4046. * (B7) = CALLER,S CONTROL POINT ADDRESS.
  4047. *
  4048. * EXIT (X0) = -7777B
  4049. * (X3) = SUB-SYSTEM RA.
  4050. * (X6) = SUB-SYSTEM FL.
  4051. * (A2) = STSW ADDRESS IN SUB-SYSTEM CONTROL POINT AREA.
  4052. *
  4053. * USES X - 1, 2, 3, 6.
  4054. * B - 6.
  4055. * A - 1, 2.
  4056. *
  4057. * CALLS RSI.
  4058.  
  4059.  
  4060. RSC SB6 RSC1 SET RETURN ADDRESS FOR *RSI*
  4061. EQ RSI1 RETURN SUBSYSTEM INFORMATION
  4062.  
  4063. * RETURN FROM *RSI* IF ILLEGAL SUBSYSTEM IDENTIFICATION.
  4064.  
  4065. RSC1 SA1 B3-B1 GET RETURN ADDRESS
  4066. AX1 30
  4067. EQ RSC6 RETURN
  4068.  
  4069. * RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
  4070.  
  4071. + SB6 X3 SHIFT COUNT
  4072. AX2 B6
  4073. LX2 -12
  4074. MX3 -5
  4075. PL X2,RSC4 IF SUBSYSTEM NOT ACTIVE
  4076. SA2 A2+SSCTL GET *SSAT* WORD FOR THIS SUBSYSTEM
  4077. AX2 B6
  4078. BX6 -X0*X2 GET EJT ORDINAL OF SUBSYSTEM
  4079. CX2 X6,EJT CONVERT EJT ORDINAL TO OFFSET
  4080. TA2 X2+JSNE,EJT GET EJT ENTRY
  4081. LX2 -1
  4082. BX6 -X3*X2 GET JOB STATUS
  4083. SX6 X6-EXJS
  4084. LX2 59-6+1
  4085. NZ X6,RSC4 IF SUBSYSTEM NOT AT CONTROL POINT
  4086. NG X2,RSC7 IF JOB ADVANCE SET ON SUBSYSTEM
  4087. SA2 A2+SCHE-JSNE GET CONTROL POINT NUMBER
  4088. AX2 12
  4089. BX6 -X3*X2
  4090. LX6 7 SUBSYSTEM CONTROL POINT ADDRESS
  4091. SA2 X6+JCIW READ JOB CONTROL
  4092. AX2 24
  4093. BX3 X2-X1
  4094. SA1 SMRL CHECK FOR STORAGE MOVE IN PROGRESS
  4095. BX3 -X0*X3
  4096. NZ X3,RSC4 IF SUB-SYSTEM NOT ACTIVE
  4097. BX1 -X0*X1
  4098. LX1 7
  4099. SA2 X6+STSW
  4100. BX1 X1-X6
  4101. ZR X1,RSC5 IF SUBSYSTEM MOVING
  4102. RSC2 SA1 A2+FLSW-STSW GET RA AND FL
  4103. BX6 -X0*X1 EXTRACT FL
  4104. LX1 -RSHF
  4105. ZR X6,RSC4 IF ZERO FL - TREAT AS NOT ACTIVE
  4106. MX3 -RMSK
  4107. BX3 -X3*X1
  4108. LX6 6
  4109. LX3 6
  4110. SA1 A2+SPCW-STSW CHECK DMP= PROCESSING
  4111. AX1 48
  4112. NZ X1,RSC7 IF DMP= IN PROGRESS
  4113. JP B3
  4114.  
  4115. * EXIT IF SUB-SYSTEM NOT ACTIVE.
  4116.  
  4117. RSC4 SA1 B3-B1
  4118. AX1 48
  4119. EQ RSC8 RETURN
  4120.  
  4121. * EXIT IF MOVE FLAG SET.
  4122.  
  4123. RSC5 SA1 B3-B1
  4124. SB6 X6
  4125. EQ B6,B7,RSC2 IF CALLER,S CP .EQ. SUB-SYSTEM,S CP
  4126. RSC6 SB3 X1
  4127. JP B3 RETURN
  4128.  
  4129. * EXIT IF ADVANCE FLAG SET.
  4130.  
  4131. RSC7 SA1 B3-1
  4132. LX1 30
  4133. AX1 48
  4134. RSC8 SB3 B3+X1
  4135. JP B3 RETURN
  4136. RSI SPACE 4,15
  4137. ** RSI - RETURN SUBSYSTEM IDENTIFICATION.
  4138. *
  4139. * ENTRY (X0) = -7777B.
  4140. * (X1) = SUBSYSTEM IDENTIFICATION IF ENTRY AT *RSI1*.
  4141. * (B6) = RETURN ADDRESS IF NOT SUBSYSTEM.
  4142. * RETURN TO (B6)+1 WITH SUBSYSTEM INFORMATION.
  4143. * (B7) = CONTROL POINT ADDRESS OF SUBSYSTEM IF
  4144. * ENTRY AT *RSI*.
  4145. *
  4146. * EXIT (A2) = ADDRESS OF *SSCT* WORD FOR THIS SUBSYSTEM.
  4147. * (X1) = SUBSYSTEM IDENTIFICATION.
  4148. * (X2) = *SSCT* ENTRY FOR THIS SUBSYSTEM.
  4149. * (X3) = SHIFT COUNT TO POSITION TO BYTE IN *SSCT*
  4150. * WORD FOR THIS SUBSYSTEM INFORMATION.
  4151. *
  4152. * USES A - 2.
  4153. * X - 1, 2, 3, 6.
  4154.  
  4155.  
  4156. RSI SA1 B7+JCIW GET SUBSYSTEM IDENTIFICATION
  4157. LX1 36
  4158. BX1 -X0*X1
  4159. RSI1 SX6 X1-LSSI-1
  4160. NG X6,RB6 IF NOT SUBSYSTEM
  4161. SX6 X1-MXSI-1
  4162. PL X6,RB6 IF NOT SUBSYSTEM
  4163. TX3 -1,SSCT GET FWA - 1 OF *SSCT* TABLE
  4164. SB6 B6+1 ADVANCE RETURN ADDRESS
  4165. RSI2 SX6 X6+5
  4166. SX3 X3+1
  4167. NG X6,RSI2 IF *SSCT* WORD NOT REACHED
  4168. LX6 2
  4169. SA2 X3 GET *SSCT* WORD FOR THIS SUBSYSTEM
  4170. LX3 X6,B1
  4171. IX3 X3+X6 SHIFT COUNT FOR SUBSYSTEM BYTE
  4172. JP B6 RETURN
  4173. SCD SPACE 4,10
  4174. ** SCD - SEARCH CENTRAL LIBRARY DIRECTORY.
  4175. *
  4176. * ENTRY (X2) = 42/ ENTRY POINT NAME, 18/
  4177. * (B6) = RETURN ADDRESS.
  4178. *
  4179. * EXIT (X7) = ADDRESS OF PST.
  4180. * (X7) = 0 IF NOT FOUND.
  4181. *
  4182. * USES X - 1, 2, 3, 4, 5, 7.
  4183. * A - 1, 2.
  4184. * B - 4, 5.
  4185.  
  4186.  
  4187. SCD SA1 EPDP READ DIRECTORY ADDRESS
  4188. MX4 42
  4189. SX3 B1
  4190. BX7 X4*X2 ENTRY POINT NAME
  4191. AX1 36
  4192. SA2 LBDP FIND END OF DIRECTORY
  4193. SB4 X1 FWA OF DIRECTORY
  4194. AX2 12
  4195. LX3 41-1
  4196. IX2 X2-X3
  4197. SB5 X2 LWA+1 OF DIRECTORY
  4198. EQ SCD2 ENTER LOOP
  4199.  
  4200. SCD1 BX1 -X4*X1
  4201. ZR X5,SCD4 IF ENTRY POINT FOUND
  4202. SB4 A1+B1 RESET FWA OF SEARCH
  4203. SCD2 SX1 B5-B4 LENGTH OF SEARCH INTERVAL
  4204. AX1 1
  4205. EQ B4,B5,SCD3 IF END OF SEARCH
  4206. SA1 B4+X1 GET DIRECTORY ENTRY
  4207. NO
  4208. BX5 X4*X1 ENTRY POINT NAME
  4209. IX5 X7-X5
  4210. PL X5,SCD1 IF PROGRAM .GE. SAMPLE ENTRY
  4211. SB5 A1+
  4212. SCD3 GT B5,B4,SCD2 IF MORE DIRECTORY TO SEARCH
  4213. SX7 B0+ CLEAR REPLY (ENTRY POINT NOT FOUND)
  4214. JP B6 RETURN
  4215.  
  4216. * ENTRY POINT FOUND.
  4217.  
  4218. SCD4 SA2 PSTP GET FWA OF PST
  4219. AX2 12
  4220. BX2 -X4*X2
  4221. IX7 X1+X2 ADDRESS OF PST ENTRY
  4222. JP B6 RETURN
  4223. SEF SPACE 4,15
  4224. ** SEF - SET ERROR FLAG.
  4225. *
  4226. * ENTRY (B7) = CP ADDRESS.
  4227. * (X7) = ERROR FLAG.
  4228. * JOB ACTIVE IN THIS CPU.
  4229. *
  4230. * EXIT TO *SSE* IF SUBCONTROL POINT ACTIVE.
  4231. * TO *MTRX* IF NEW .LT. CURRENT ERROR FLAG.
  4232. * TO *SNS* IN NORMAL CASE.
  4233. *
  4234. * USES X - 1, 2, 4, 6, 7.
  4235. * A - 1, 6.
  4236. * B - 3, 5.
  4237. *
  4238. * CALLS MSC.
  4239.  
  4240.  
  4241. SEF SA1 B7+STSW READ CP STATUS
  4242. BX6 X1
  4243. LX1 59-56
  4244. SEF1 TNG X1,(/MONITOR/SSE,SUBCP,/MONITOR/SEF1)
  4245. MX2 -12
  4246. LX7 36
  4247. LX2 36
  4248. BX4 -X2*X6 GET OLD ERROR FLAG
  4249. IX4 X7-X4
  4250. ZR X7,SEF2 IF NEW ERROR FLAG IS ZERO
  4251. NG X4,MTRX IF OLD .GT. NEW ERROR FLAG
  4252. SEF2 TB3 SCA
  4253. EQ B7,B3,SEF2.1 IF SYSTEM CONTROL POINT
  4254. IX6 X6+X4
  4255. SA6 A1
  4256. EQ SNS SET NULL CPU STATUS
  4257.  
  4258. SEF2.1 SA1 CPAL+A0
  4259. AX1 42
  4260. SX2 X1-IDXT
  4261. SX1 SABT * SYSTEM ABORT.*
  4262. TPL X2,(/MONITOR/SEF4,NVE,/MONITOR/SEF3) IF IDLE PACKAGE
  4263.  
  4264. SEF3 SB5 MTRX SET EXIT ADDRESS FOR *MSC*
  4265. EQ MSC SET MESSAGE AT SYSTEM CONTROL POINT
  4266.  
  4267. SEF4 SB5 ZERL ABORT AFTER POSTING MESSAGE
  4268. EQ MSC SET MESSAGE AT SYSTEM CONTROL POINT
  4269. SFL SPACE 4,15
  4270. ** SFL - SET FIELD LENGTH.
  4271. *
  4272. * ENTRY (B5) = 0 IF NOT *MTR* CALL.
  4273. * (B6) = EXCHANGE PACKAGE ADDRESS.
  4274. * (B7) = CONTROL POINT ADDRESS IF .NE. 0.
  4275. * (B7) = 0 IF CMR REQUEST FROM *MTR*.
  4276. * (X0) = INCREMENT.
  4277. *
  4278. * EXIT TO *MTRX*.
  4279. *
  4280. * USES X - 0, 1, 2, 3, 4, 6, 7.
  4281. * B - 3, 4.
  4282. * A - 2, 3, 4, 6, 7.
  4283. *
  4284. * CALLS CJS, SJS, SRU.
  4285.  
  4286. SFL BSS 0 ENTRY
  4287. SA2 A0+CPAL FETCH CPU ASSIGNMENT DATA
  4288. SA3 ACML
  4289. SX6 B7
  4290. BX7 -X0 COMPLEMENT INCREMENT
  4291. AX2 24 POSITION CP ADDRESS
  4292. LX7 36-6
  4293. AX6 7-1
  4294. IX7 X3+X7 ADJUST AVAILABLE MEMORY
  4295. SB3 X2+
  4296. SA6 UMTA SET MCT INDEX FOR CP
  4297. SA7 A3+
  4298.  
  4299. * UPDATE EXCHANGE PACKAGE AND CP STATUS.
  4300.  
  4301. SFL1 SA3 B7+FLSW GET FL STATUS WORDS
  4302. AX0 6
  4303. SA4 A3+B1
  4304. TA2 X6,MCT FETCH MCT ENTRY
  4305. MX1 -12
  4306. IX6 X3+X0 UPDATE FIELD LENGTH
  4307. + SA6 A3
  4308. IX7 X4+X0 MODIFY *FLSW* + 1
  4309. BX6 -X1*X6
  4310. SA7 A4 CHANGE CPA WORDS IN 1 WORD OF CODE
  4311. SA3 B6+2
  4312. IX7 X2-X0 ADJUST UNASSIGNED CM ABOVE CP/PCP
  4313. SA7 A2
  4314. ZR B7,SFL2 IF CMR REQUEST
  4315. MX7 -36
  4316. BX4 -X7*X3 CLEAR OLD FL
  4317. LX6 36+6
  4318. BX6 X6+X4 UPDATE EXCHANGE PACKAGE FL
  4319. SA6 B6+2
  4320. SFL2 ZR B5,SFL3 IF NOT *MTR* CALL
  4321. SX6 0
  4322. SA6 SMRL
  4323. ZR B7,MTRX IF CMR REQUEST
  4324. SFL3 NE B3,B7,SFL4 IF CURRENT CPU NOT ACTIVE ON THIS JOB
  4325. SB4 SFL4
  4326. JP CJS CHECK JOB STATUS
  4327.  
  4328. * UPDATE CM USAGE.
  4329.  
  4330. SFL4 SB4 SJS
  4331. NG X0,SRU IF FL DECREASE
  4332. SB4 MTRX
  4333. NZ X0,SRU IF FL INCREASE
  4334. JP MTRX EXIT MONITOR MODE
  4335. SIS SPACE 4,10
  4336. ** SIS - SET *I* STATUS.
  4337. *
  4338. * ENTRY (B7) = CONTROL POINT ADDRESS.
  4339. * JOB ACTIVE IN THIS CPU.
  4340. *
  4341. * EXIT TO *BNJ* BEGIN NEW JOB.
  4342. *
  4343. * USES X - 7.
  4344.  
  4345. SIS BSS 0 ENTRY
  4346. SX7 ICPS SET *I* STATUS FOR *BNJ* ENTRY
  4347. EQ BNJ BEGIN NEW JOB
  4348. SJS SPACE 4,15
  4349. ** SJS - START JOB SCHEDULER.
  4350. *
  4351. * EXIT TO MTRX.
  4352. *
  4353. * USES X - 0, 1, 2, 3, 4, 6, 7.
  4354. * B - 3, 4.
  4355. * A - 1, 2, 3, 7.
  4356. *
  4357. * CALLS APQ.
  4358. *
  4359. * PRESERVES A5, B7, A0.
  4360.  
  4361.  
  4362. SJS SX7 B7+ SAVE CONTROL POINT ADDRESS
  4363. TB7 SCA SET SYSTEM CONTROL POINT ADDRESS
  4364. SA7 T1
  4365. SB6 SJS0 RETURN ADDRESS IF NO ACTIVITY LIMIT
  4366. SB3 SJS3 RETURN ADDRESS IF ACTIVITY LIMIT
  4367. EQ CAL CHECK ACTIVITY LIMIT
  4368.  
  4369. SJS0 SA3 JSCL READ SCHEDULER CONTROL WORD
  4370. SA1 RTCL
  4371. NG X3,SJS3 IF SCHEDULER ACTIVE
  4372. SA2 SJSA READ *1SJ* CALL
  4373. MX7 24
  4374. AX1 36 EXTRACT TIME IN SECONDS
  4375. MX0 -24
  4376. BX7 X7*X2 CLEAR *1SJ* CALL FLAGS
  4377. MX5 1
  4378. SA7 A2
  4379. ERRNZ SJSB-SJSA-1 CODE ASSUMES *SJSB* = *SJSA* + 1
  4380. SA4 A2+B1
  4381. SA7 A4 RESET FORCED *JSCL* RESET FLAG
  4382. BX7 X3+X5 SET SCHEDULER ACTIVE FLAG
  4383. BX6 X2
  4384. ZR X4,SJS0.1 IF FORCED *JSCL* RESET
  4385. BX4 -X0*X3 EXTRACT RECALL TIME
  4386. IX4 X1-X4 *RTCL* - TIME TO RECALL
  4387. NG X4,SJS1 IF NOT TIME TO PERFORM PERIODIC RECALL
  4388. SJS0.1 AX3 24 EXTRACT RECALL TIME PERIOD
  4389. MX0 -12
  4390. BX4 -X0*X3
  4391. IX7 X7+X4 UPDATE TIME TO RECALL
  4392. AX3 12 EXTRACT QFT/EJT SCHEDULING FREQUENCY
  4393. BX4 -X0*X3
  4394. SX3 B1+
  4395. SB3 X4
  4396. LX4 X3,B3 GENERATE FREQUENCY MASK
  4397. IX4 X4-X3
  4398. BX1 X4*X1
  4399. NZ X1,SJS1 IF NOT TIME FOR QFT SCHEDULING
  4400. LX3 24
  4401. BX6 X6+X3
  4402. SJS1 SB3 SJS2 *APQ* RETURN ADDRESS
  4403. SB4 LA1SJ SET LOAD PARAMETER INDEX
  4404. SA7 A3 STORE SCHEDULER CONTROL WORD
  4405. EQ APQ ASSIGN PP
  4406.  
  4407. * NOTE -
  4408. * IN ORDER TO AVOID *DEADLOCK* (SORT OF) PROBLEMS
  4409. * WITH THE *CPUCIO* REQUEST QUEUE, THE QUEUE IS CHECKED
  4410. * PENDING REQUESTS ON EVERY *1SJ* CALL
  4411.  
  4412. SJS2 SB3 SJS3 *PCQ* RETURN ADDRESS
  4413. SB4 SJS3
  4414. TNO /BUFIO/PCQ1,BUFIO PROCESS PSEUDO-PP REQUEST QUEUE
  4415.  
  4416. SJS3 SA1 T1 RESTORE (B7)
  4417. SB7 X1+
  4418.  
  4419. * IF A PRIORITY PP REQUEST IS PENDING, THE ENTRY IS
  4420. * CLEARED AND A REJECT STATUS IS SET TO THE WAITING PP.
  4421.  
  4422. SA3 PQRL CHECK FOR PENDING PRIORITY REQUEST
  4423. ZR X3,MTRX IF NO PP REQUESTS IN QUEUE
  4424. SA1 X3
  4425. MX2 -18
  4426. LX1 -18
  4427. BX3 -X2*X1
  4428. ZR X3,MTRX IF FIRST REQUEST NOT PRIORITY
  4429. BX7 X7-X7 SEND REJECT RESPONSE TO WAITING PP
  4430. SA7 X3
  4431.  
  4432. * DELETE ENTRY FROM QUEUE.
  4433.  
  4434. LX1 18
  4435. MX4 -12
  4436. BX6 -X4*X1 ADDRESS OF NEXT ENTRY
  4437. SA6 A3
  4438. SA7 A1+RECW-RCCW CLEAR ENTRY FROM CONTROL POINT
  4439. SA7 A1+REPW-RCCW
  4440. SX1 A1
  4441. AX1 7
  4442. MX4 -4
  4443. LX1 7 CONTROL POINT ADDRESS
  4444. SA2 X1+STSW ADD ENTRY TO FREE LIST
  4445. SX3 -420B-RCCW+1
  4446. SB4 X1
  4447. BX7 -X4*X2 NEXT FREE ENTRY
  4448. BX2 X4*X2
  4449. SA7 A1
  4450. SX4 A1-B4 COMPUTE RECALL INDEX
  4451. IX4 X4+X3
  4452. IX7 X4+X2
  4453. SA7 A2 UPDATE STSW
  4454. EQ MTRX EXIT
  4455.  
  4456.  
  4457. SJSA VFD 18/3R1SJ,6/0,12/0,12/0,12/0
  4458. SJSB CON 1 ZERO IF FORCED *JSCL* RESET
  4459. SNS SPACE 4,10
  4460. ** SNS - SET NULL STATUS.
  4461. *
  4462. * ENTRY (B7) = CONTROL POINT ADDRESS.
  4463. *
  4464. * EXIT TO *JAV* ADVANCE JOB.
  4465. *
  4466. * CALLS JAV.
  4467.  
  4468.  
  4469. SNS SA4 B7+STSW CLEAR CPU STATUS
  4470. SB3 BNJ1 *JAV* RETURN ADDRESS
  4471. MX7 -57
  4472. BX7 -X7*X4
  4473. SA7 A4+
  4474. EQ JAV ADVANCE JOB
  4475. SPL SPACE 4,20
  4476. ** SPL - SEARCH PERIPHERAL LIBRARY.
  4477. *
  4478. * ENTRY (X6) = PPU REQUEST.
  4479. * (X5) = PP OUTPUT REGISTER IF *SPLM* CALL.
  4480. * (B6) = EXIT ADDRESS.
  4481. * = EXIT ADDRESS + 400000B, IF REQUEST IS FOR CPP.
  4482. *
  4483. * EXIT LIBRARY UNLOCKED.
  4484. * (X1) .GT. 0.
  4485. * (X5) = 0 IF PROGRAM FOUND, ELSE *SFP* *PLD* ENTRY
  4486. * RETURNED.
  4487. * (X7) = PP LOAD PARAMETERS.
  4488. * (A1) = ADDRESS OF PLD ENTRY.
  4489. * (B6) = EXIT ADDRESS.
  4490. *
  4491. * LIBRARY LOCKED (SYSEDIT ACTIVE)
  4492. * (X1) = -0.
  4493. * (X7) = (X5) ON ENTRY WITH BITS 56 AND 57 SET.
  4494. *
  4495. * USES X - 1, 3, 4, 5, 7.
  4496. * B - 5.
  4497. * A - 1, 7.
  4498.  
  4499.  
  4500. SPL SA1 PSTP FIND END OF DIRECTORY
  4501. MX4 18
  4502. AX1 12
  4503. SX3 X1-2
  4504. SA1 PLDP READ START OF DIRECTORY
  4505. BX7 X4*X6 SET PROGRAM NAME
  4506. AX1 36
  4507. SB5 X1 FWA OF LIBRARY
  4508. IX3 X3-X1 LIBRARY LENGTH
  4509. NZ B5,SPL1 IF LIBRARY NOT LOCKED
  4510. SX3 44B REJECT FUNCTION (SET RETRY/MOVABLE FLAGS)
  4511. BX1 -X1+X1
  4512. LX3 -6
  4513. BX7 X5+X3
  4514. TJP (/CPP/SPL1,CPP,B6) RETURN
  4515.  
  4516. SPL1 SX2 B5+X3 RESET LWA OF LIBRARY
  4517. ZR X3,SPL4 IF END OF SEARCH
  4518. AX3 1
  4519. SA1 B5+X3 SAMPLE DIRECTORY ENTRY
  4520. BX5 X4*X1
  4521. IX5 X7-X5
  4522. LX5 18 POSITION SIGN BIT
  4523. NG X5,SPL1 IF PROGRAM .LT. SAMPLE
  4524. SB5 A1+B1 RESET FWA OF SEARCH INTERVAL
  4525. SX3 B5 RESET LENGTH
  4526. IX3 X2-X3
  4527. NZ X5,SPL1 IF PROGRAM NOT FOUND
  4528. LX7 -54
  4529.  
  4530. * ENTER HERE TO BUILD THE LOAD PARAMETERS FOR AN OVERLAY.
  4531.  
  4532. * (X1) = PLD ENTRY.
  4533. * (X4) = 77777700 ... 00B.
  4534. * (X7) = FIRST CHARACTER OF OVERLAY NAME.
  4535. * (B6) = RETURN ADDRESS.
  4536. *
  4537. * NOTE. (X5) WILL NOT BE CHANGED.
  4538.  
  4539.  
  4540. SPL1.1 BX1 -X4*X1
  4541. SX3 B1
  4542. SX7 X7-1R7
  4543. LX3 41
  4544. ZR X7,SPL5 IF *7XX* OVERLAY
  4545.  
  4546. * SET *RT* PARAMETER.
  4547.  
  4548. BX7 -X3*X1 CLEAR CM/MS BIT
  4549. SB5 -B6 SET (B5) POSITIVE IF CPP
  4550. SX2 214B SET *RT* PARAMETER POSSIBILITIES
  4551. BX3 X3*X1
  4552. ZR X3,SPL2 IF MS RESIDENT OVERLAY
  4553. LX1 -24 GET *RPL* ADDRESS
  4554. SB5 A1
  4555. SA1 X1-400000B
  4556. AX2 3 SET NEW *RT* PARAMETER
  4557. BX3 -X4*X1
  4558. SA1 B5 RESTORE THE *PLD* ADDRESS
  4559. AX3 40 ONE = 16-BIT PROGRAM
  4560. SB5 X3
  4561. AX2 B5 SET NEW *RT* PARAMETER
  4562. SPL2 MX3 -4
  4563. BX1 -X4*X1 ENSURE (X1) .GT. 0
  4564. BX2 -X3*X2 *RT* = 14/10/01/00
  4565. LX2 42
  4566. PL B5,SPL3 IF CONCURRENT PP OR CM RESIDENT
  4567. AX1 23-17
  4568. SX3 X1 SET LEADING ZEROS IF 12-BIT OVERLAY
  4569. SPL3 BX2 X3*X2
  4570. BX7 X7+X2
  4571. TJP (/CPP/SPL1,CPP,/PROBE/SPL,PROBE,B6) RETURN
  4572.  
  4573. SPL4 SA1 PSTP READ SFP ENTRY
  4574. SX3 1
  4575. AX1 12
  4576. SA1 X1-2
  4577. LX3 41
  4578. SPL5 IX7 X1+X3 SET *RT* PARAMETER
  4579. BX7 -X3*X7
  4580. TJP (/CPP/SPL1,CPP,/PROBE/SPL,PROBE,B6) RETURN
  4581. SPR SPACE 4,20
  4582. ** SPR - SET CPU PRIORITY.
  4583. *
  4584. * ENTRY (B3) = RETURN ADDRESS.
  4585. * (B7) = CONTROL POINT ADDRESS.
  4586. * (X3) = *CWQW*.
  4587. * (X5) = NEW CPU PRIORITY.
  4588. * (A3) = ADDRESS OF *CWQW*.
  4589. *
  4590. * EXIT NEW CPU PRIORITY SET AND CPU SLICE RESTARTED.
  4591. * TO CALLER VIA *RCC* IF JOB IN *W* STATUS.
  4592. * TO CALLER VIA */NVE/SVS* IF JOB ACTIVE IN CPU AND
  4593. * *NVE* PRESENT.
  4594. *
  4595. * USES X - ALL.
  4596. * A - 1, 2, 3, 6, 7.
  4597. * B - 4, 6.
  4598.  
  4599.  
  4600. SPR BSS 0 ENTRY
  4601. SA4 TPRC+X5 GET SERVICE CYCLE FOR NEW PRIORITY
  4602. SA1 B7+STSW DETERMINE CPU STATUS
  4603. LX5 3
  4604. UX3,B4 X3 UNPACK CPU PRIORITY AND PARAMETERS
  4605. SB4 X5 SET PRIORITY WITHOUT PRIORITY FLAGS
  4606. SX6 B1
  4607. PX3 B4,X3 SET NEW CPU PRIORITY IN *CWQW*
  4608. LX6 47-0
  4609. MX7 6
  4610. BX6 X3+X6 SET EXTENDED CPU SLICE INCOMPLETE FLAG
  4611. BX7 X7*X4
  4612. SA6 A3 UPDATE *CWQW*
  4613. SA7 A3+B1 SET SERVICE CYCLE AND CLEAR ACCUMULATORS
  4614. ERRNZ CSAW-CWQW-1
  4615. MX4 3
  4616. BX1 X4*X1
  4617. LX1 3
  4618. SX4 X1-WCPS
  4619. ZR X1,RB3 IF NULL STATUS
  4620. PL X4,SPR1 IF *W* STATUS OR GREATER
  4621.  
  4622. * SET PRIORITY OF ACTIVE JOB. A CPU SWITCH IS REQUESTED TO
  4623. * FORCE SELECTION OF THE HIGHEST PRIORITY JOB.
  4624.  
  4625. SA2 X1+TSCL-1 GET CPU PRIORITY OF ACTIVE JOB
  4626. SA3 X1+CSWL-1
  4627. SB4 B4+3 SET ACTIVE SLICE AND RECALL FLAGS
  4628. UX6 X6
  4629. PX6 B4,X6
  4630. SA6 A6 REWRITE *CWQW* WITH FLAGS
  4631. UX2 X2
  4632. PX6 B4,X2 SET *TSCL* CPU PRIORITY AND FLAGS
  4633. MX7 1
  4634. BX7 X3+X7
  4635. SA7 A3 REQUEST CPU SWITCH
  4636. SA6 A2 UPDATE *TSCL*
  4637. SB6 B3 SET *SVS* RETURN ADDRESS
  4638. MX0 -12
  4639. TJP (/NVE/SVS1,NVE,/MONITOR/RB3)
  4640.  
  4641. SPR1 NZ X4,RB3 IF NOT *W* STATUS
  4642. SB6 B7+ SET EXCHANGE PACKAGE ADDRESS
  4643. EQ RCC REORDER WAIT QUEUE
  4644. SRU SPACE 4,30
  4645. ** SRU - CALCULATE SRU MULTIPLIERS CPM AND IOM.
  4646. *
  4647. * SRU = M1(CP + M2*IO + M3(CP+IO)CM +
  4648. * M4(CP+IO)EC + MM*MP + AUC) + A1
  4649. *
  4650. * = M1(1 + M3*CM + M4*EC)CP + M1(M2 + M3*CM + M4*EC)IO +
  4651. * M1*MM*MP + M1*AUC + A1
  4652. *
  4653. * = (M1 + M1*M3*CM + M1*M4*EC)CP +
  4654. * (M1*M2 + M1*M3*CM + M1*M4*EC)IO +
  4655. * M1*MM*MP + M1*AUC + A1
  4656. *
  4657. * = CPM*CP + IOM*IO + M1M*MP + M1*AUC + A1.
  4658. *
  4659. * CP = (S0)*CP0 + (S1)*CP1
  4660. * IO = S2*MS + S3*MT + S4*PF
  4661. * CM = (CM FL + 777B) / 1000B (WORDS)
  4662. * EC = (ECS FL) / 1000B
  4663. * MP = MAP ACCUMULATOR
  4664. * AUC = AUC ACCUMULATOR
  4665. * A1 = ADDER ACCUMULATOR (MAINTAINED IN MICROUNITS * 10)
  4666. *
  4667. * ENTRY (B4) = EXIT ADDRESS.
  4668. *
  4669. * USES X - 0, 1, 2, 3, 4, 6, 7.
  4670. * B - 3.
  4671. * A - 1, 3, 4, 6.
  4672. *
  4673. * CALLS CPT
  4674.  
  4675.  
  4676. SRU SA3 B7+ECSW ECS FL
  4677. SA4 B7+FLSW
  4678. MX2 -12
  4679. BX0 -X2*X4
  4680. LX4 12
  4681. BX4 -X2*X4 ADD NEGATIVE FIELD LENGTH
  4682. IX4 X4+X0
  4683. SA1 B7+MP1W M1*M3 AND M1*M4
  4684. TLX3 0,UESC ADJUST EM FL
  4685. MX7 -3
  4686. BX3 -X2*X3
  4687. LX1 18
  4688. MX2 -18
  4689. IX4 X4-X7 ROUND CM FL/100B WITH 7B
  4690. BX6 -X2*X1
  4691. AX4 3 CM = (CM FL/100B + 7B) / 10B
  4692. LX1 18
  4693. IX6 X6*X4 M1*M3*CM
  4694. BX7 -X2*X1
  4695. ERRNZ MP2W-MP1W-1 CODE DEPENDS ON CONTIGUOUS WORDS
  4696. SA4 A1+B1 M1*1000 AND M1*M2
  4697. IX7 X7*X3 M1*M4*EC
  4698. LX4 18
  4699. IX6 X6+X7 M1*M3*CM + M1*M4*EC
  4700. BX3 -X2*X4
  4701. LX4 18
  4702. IX7 X3+X6 M1*1000 + M1*M3*CM + M1*M4*EC (CPM)
  4703. BX4 -X2*X4
  4704. IX4 X4+X6 M1*M2 + M1*M3*CM + M1*M4*EC (IOM)
  4705. LX7 30
  4706. SX6 B4 SAVE EXIT ADDRESS
  4707. SA6 SRUA
  4708. IX4 X7+X4 30/CPM AND 30/IOM
  4709. SB3 SRU1
  4710. TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
  4711. ,/CPT)
  4712.  
  4713. SRU1 SA1 SRUA
  4714. SB4 X1
  4715. SA1 A4+B1
  4716. MX2 1
  4717. BX2 X2*X1
  4718. BX6 X2+X4
  4719. SA6 A1
  4720. JP B4 EXIT
  4721.  
  4722. SRUA CON 0
  4723. STL SPACE 4,15
  4724. ** STL - SET CPU TIME LIMIT.
  4725. *
  4726. * ENTRY (X3)= TIME LIMIT IN MILLISECONDS.
  4727. * IF (X3) .LT. 0, TIME LIMIT IS UNLIMITED.
  4728. * (B7)= CONTROL POINT ADDRESS.
  4729. * (B3)= EXIT ADDRESS.
  4730. *
  4731. * EXIT (X7) = 0.
  4732. *
  4733. * USES X - 1, 2, 6, 7.
  4734. * B - 4.
  4735. * A - 2, 6.
  4736. *
  4737. * CALLS MSB.
  4738.  
  4739.  
  4740. STL SA2 B7+SRUW ENTRY
  4741. MX1 1
  4742. BX6 -X1*X3
  4743. LX1 58-59
  4744. BX7 -X1*X2 CLEAR TIME LIMIT
  4745. SA7 A2+
  4746. NG X3,STL1 IF UNLIMITED REQUEST
  4747. SB4 STL1 SET *MSB* RETURN ADDRESS
  4748. SA2 CPTC MILLISECONDS TO QUARTER NANOUNITS
  4749. EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
  4750.  
  4751. STL1 SA6 B7+CPLW
  4752. SX7 B0+ CLEAR OUTPUT REGISTER
  4753. JP B3 RETURN
  4754. SXR SPACE 4,10
  4755. ** SXR - SET *X* STATUS WITH RECALL CRITERION.
  4756. *
  4757. * ENTRY (X0) = RECALL CRITERION.
  4758. * (B7) = CONTROL POINT ADDRESS.
  4759. *
  4760. * EXIT TO *MTRX* IF CONTROL POINT NOT ACTIVE.
  4761. * TO *BNJ* BEGIN NEW JOB.
  4762. *
  4763. * USES X - ALL.
  4764. * A - 1, 2, 3, 6, 7.
  4765.  
  4766.  
  4767. SXR SA1 B7+STSW GET JOB STATUS
  4768. SA2 RQRL
  4769. SA3 B7+CWQW
  4770. SX6 1
  4771. NG X1,MTRX IF *W* OR *I* STATUS
  4772. LX6 46-0
  4773. AX1 57
  4774. BX6 -X6*X3 CLEAR RECALL NOT REQUIRED FLAG
  4775. ZR X1,MTRX IF NULL STATUS
  4776. SA6 B7+CWQW UPDATE *CWQW*
  4777. MX4 -12
  4778. LX0 12
  4779.  
  4780. * FIND POSITION IN *RQ*. CODE IS REPLICATED FOR PERFORMANCE
  4781. * REASONS.
  4782.  
  4783. SXR1 BX7 -X4*X2
  4784. SA3 X7
  4785. IX6 X3-X0
  4786. BX5 -X4*X3
  4787. PL X6,SXR2 IF POSITION REACHED
  4788. SA2 X5
  4789. IX6 X2-X0
  4790. NG X6,SXR1 IF POSITION NOT REACHED
  4791. BX7 X5
  4792. SA2 A3
  4793. SXR2 SX3 B7+CRCW ADDRESS OF NEW ENTRY
  4794. BX7 X7+X0
  4795. SA7 X3
  4796. BX2 X4*X2
  4797. BX6 X2+X3
  4798. SX7 XCPS
  4799. SA6 A2
  4800. EQ BNJ BEGIN NEW JOB
  4801. SXS SPACE 4
  4802. ** SXS - SET *X* STATUS.
  4803. *
  4804. * ENTRY (B7) = CONTROL POINT ADDRESS.
  4805. *
  4806. * EXIT TO SXR.
  4807.  
  4808.  
  4809. SXS SA1 RTCL GET CURRENT TIME
  4810. SA2 MSCL EXTRACT RECALL TIME DELAY
  4811. MX0 -36
  4812. BX1 -X0*X1
  4813. MX0 -12
  4814. LX2 -36
  4815. BX2 -X0*X2
  4816. SX0 PTMF SET RECALL CRITERION
  4817. IX1 X1+X2
  4818. LX0 36
  4819. BX0 X0+X1
  4820. EQ SXR SET *X* STATUS WITH RECALL CRITERION
  4821. TSM SPACE 4,15
  4822. ** TSM - TERMINATE STORAGE MOVE.
  4823. *
  4824. * EXIT (SMRL) = 0.
  4825. * TO *BNJ1* (VIA *UMT* AND *JAV*).
  4826. * TO *CRA5* IF FIELD LENGTH SWAP.
  4827. *
  4828. * USES X - 0, 1, 2, 4, 5, 6.
  4829. * A - 1, 4, 6.
  4830. * B - 3, 6.
  4831. *
  4832. * CALLS BNJ, JAV, RCC, SCA.
  4833.  
  4834.  
  4835. TSM SA1 SMPXP+STSW CLEAR CPU STATUS ON PSEUDO-CP
  4836. MX2 -57
  4837. BX6 -X2*X1 SET NULL STATUS
  4838. SA6 A1+
  4839. SB3 TSM1
  4840. EQ SCA CONVERT CP/PCP ADDRESS
  4841.  
  4842. TSM1 SA4 A2 READ *SMRL*
  4843. LX4 59-37
  4844. TNG X4,(/ECS/TSM4,EEC,/MONITOR/TSM2) IF ECS ERROR ON MOVE
  4845. TSM2 LX4 37-36
  4846. ERRNZ ICPS-6 CODE DEPENDS ON VALUE
  4847. MX5 2
  4848. TNG X4,(/ECS/TSM8,EEC,/MONITOR/TSM3) IF USER ECS ERROR
  4849. TSM3 LX4 59-47+36-59
  4850. SB3 TSM4 *RCC* RETURN ADDRESS
  4851. AX4 57
  4852. ZR X4,TSM4 IF STATUS PREVIOUS NULL
  4853. SX4 X4+1
  4854. SB6 B7+ EXCHANGE PACKAGE ADDRESS
  4855. NZ X4,RCC IF PREVIOUSLY ACTIVE STATUS
  4856. SA1 B7+STSW
  4857. BX6 X1+X5 SET *I* STATUS
  4858. SA6 A1
  4859.  
  4860. * CPU STATUS IS RESTORED BEFORE *SMRL* IS CLEARED SO THAT ANY
  4861. * PP PROGRAMS SENSING CPU STATUS WILL NOT MISS IT.
  4862.  
  4863. TSM4 SA2 TSMA CHECK BLOCK MOVE STATUS
  4864. SB4 BNJ1
  4865. NZ X2,TSM6 IF FIELD LENGTH SWAP
  4866. TB5 SCA
  4867. GT B7,B5,TSM5 IF PSEUDO-CONTROL POINT
  4868. SB4 JAV SET *UMT* EXIT ADDRESS
  4869. TSM5 SB3 BNJ1 SET *JAV* EXIT ADDRESS
  4870. EQ UMT UPDATE MEMORY CONTROL TABLE
  4871.  
  4872. TSM6 SA1 SMRL GET MOVE PARAMETERS
  4873. BX0 X2
  4874. SX4 X1 EXTRACT MEMORY TYPE FLAG
  4875. AX4 12-1
  4876. MX5 -12
  4877. ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
  4878. SX6 X4+FLSW
  4879. SA1 X6+B7 READ FL CONTROL WORD
  4880. SX2 B7
  4881. BX5 -X5*X1 EXTRACT FIELD LENGTH
  4882. AX4 1
  4883. AX2 7-1
  4884. TB5 X4,MCT SET BASE MCT ADDRESS
  4885. AX1 48
  4886. SA4 X2+B5 READ REQUESTOR-S MCT ENTRY
  4887. IX1 X1+X5
  4888. LX0 1 CONVERT MCT ORDINAL TO INDEX
  4889. IX7 X4+X1 ADJUST REQUESTOR-S HOLE SIZE
  4890. SA4 TSMB GET PRE-MOVE HOLE POINT HOLE SIZE
  4891. SA3 X0+B5 READ HOLE POINT MCT ENTRY
  4892. MX5 12
  4893. IX6 X3-X4 ADJUST HOLE POINT HOLE SIZE
  4894. SA7 X2+B5
  4895. IX4 X4-X1
  4896. AX2 1
  4897. MX7 -24
  4898. BX3 X7*X3
  4899. LX5 -12
  4900. BX3 X3+X4
  4901. EQ CRA5 CHANGE MEMORY TABLE LINKAGE
  4902.  
  4903.  
  4904. TSMA CON 0 HOLE POINT NUMBER IF BLOCK MOVE
  4905. TSMB CON 0 PRE-MOVE HOLE POINT HOLE SIZE
  4906. TITLE CPU REQUEST PROCESSOR.
  4907. CPR SPACE 4
  4908. *** CPU PROGRAM REQUESTS.
  4909. *
  4910. *
  4911. * CPU PROGRAM REQUESTS ARE PASSED THROUGH RELATIVE
  4912. * LOCATION 1. THE FORMAT IS AS FOLLOWS -
  4913. *
  4914. *T 18/ NAME,6/ A,36/ ARG
  4915. *
  4916. * NAME REQUEST NAME
  4917. * A 20B IF AUTO RECALL DESIRED
  4918. * ARG ARGUMENTS
  4919. *
  4920. *
  4921. * IF THE REQUEST IS NOT ONE OF THE FOLLOWING, AND THE
  4922. * NAME OF THE REQUEST BEGINS WITH AN ALPHA CHARACTER,
  4923. * THE REQUEST IS ASSUMED TO BE THE NAME OF A PP PROGRAM, AND
  4924. * THIS PROGRAM IS ASSIGNED TO AN AVAILABLE PP.
  4925. *
  4926. * IF THE REQUEST IS NOT OF THE ABOVE FORMAT, THE JOB IS
  4927. * ABORTED WITH A *MONITOR CALL ERROR.*.
  4928. CPR SPACE 4
  4929. ** CPR - PROCESS CPU REQUEST.
  4930. *
  4931. * ENTRY (X2) = RA.
  4932. * (X5) = (RA+1).
  4933. * (A2) = ADDRESS OF RA IN EXCHANGE PACKAGE.
  4934. * (B3) = ADDRESS OF WORD IN CPUMTR CONTAINING RA.
  4935. * (B7) = CONTROL POINT ADDRESS.
  4936.  
  4937.  
  4938. CPR SA1 A2+B1 GET FL
  4939. BX4 X5
  4940. MX0 -12
  4941. LX4 18
  4942. AX1 36
  4943. SX7 X4-3RRCL
  4944. SB4 X1 SET FL
  4945. NZ X7,CPR2 IF NOT *RCL*
  4946.  
  4947. * PROCESS *RCL* IN LINE DUE TO FREQUENCY OF USE.
  4948.  
  4949. LX4 59-40-18
  4950. SX3 B1
  4951. IX2 X2+X3 RA+1
  4952. NG X4,CPR1 IF AUTO RECALL
  4953. EWX7 X2 CLEAR RA+1
  4954. EQ SXS SET *X* STATUS
  4955.  
  4956. CPR1 SX3 X5-1 RECALL ADDRESS - 1
  4957. SA1 B7+STSW CHECK ACTIVITY
  4958. MX6 -4
  4959. SB5 X5
  4960. LX6 4
  4961. IX4 X2+X3 ADDRESS OF WORD RECALLED ON
  4962. BX7 -X6*X1
  4963. LX6 48-4
  4964. GE B5,B4,CPE IF ILLEGAL ADDRESS
  4965. LE B5,B1,CPE IF ILLEGAL ADDRESS
  4966. BX6 -X6*X1
  4967. ERX1 X4 CHECK WORD RECALLED ON
  4968. BX7 X7+X6
  4969. MX6 -18
  4970. R= X0,PCBF PROCESS COMPLETION BIT
  4971. LX0 36
  4972. LX1 59-0
  4973. BX0 X0+X4
  4974. SA4 B7+SSCW CHECK FOR SUBSYSTEM CONNECTIONS
  4975. ZR X7,CPR1.2 IF NO ACTIVITY
  4976. PL X1,SXR IF BUSY, SET *X* STATUS, RECALL CONDITION
  4977. CPR1.1 BX7 X7-X7
  4978. EWX7 X2 CLEAR RA+1
  4979. EQ MTRX RETURN
  4980.  
  4981. CPR1.2 NG X1,CPR1.1 IF COMPLETION BIT SET
  4982. SA1 B7+DBAW GET K-DISPLAY BUFFER ADDRESSES
  4983. SA2 B7+JCIW CHECK SUBSYSTEM ID
  4984. MX3 -12
  4985. BX7 -X6*X5
  4986. LX3 24
  4987. BX3 -X3*X2
  4988. NZ X3,SXR IF SUBSYSTEM
  4989. NZ X4,SXS IF SUBSYSTEM CONNECTIONS
  4990. BX3 -X6*X1 CHECK K-DISPLAY BUFFERS
  4991. LX6 18
  4992. BX6 -X6*X1
  4993. LX1 59-58
  4994. BX3 X3-X7
  4995. LX6 -18
  4996. BX6 X6-X7
  4997. SX7 RCET
  4998. NG X1,SEF IF K-DISPLAY STATUS NOT TO BE RETURNED
  4999. ZR X3,SXR IF K-DISPLAY ADDRESS MATCHES
  5000. ZR X6,SXR IF K-DISPLAY ADDRESS MATCHES
  5001. EQ SEF SET ERROR FLAG
  5002.  
  5003. CPR2 SX6 X4-3RTIM
  5004. SA3 CMCL CHECK STORAGE MOVE REQUEST
  5005. ZR X6,TIM IF *TIM*
  5006. SX7 B7
  5007. AX3 48
  5008. AX7 7
  5009. BX7 X7-X3
  5010. SA3 B7+STSW CHECK SUBCP ACTIVE
  5011. ZR X7,SXS IF STORAGE MOVE REQUESTED
  5012. LX3 59-56
  5013. BX7 -X0*X4
  5014. CPR3 TNG X3,(/MONITOR/BCE,SUBCP,/MONITOR/CPR3)
  5015. SB5 X4-3RMSG
  5016. ZR X7,CPE IF LAST TWO CHARACTERS OF PP CALL ZERO
  5017. SX7 B1+
  5018. LX7 41-0
  5019. BX5 -X7*X5 CLEAR BIT 41 IN RA+1 CALL
  5020.  
  5021.  
  5022. * IDENTIFY REQUEST BY TREE SEARCH.
  5023. * EXIT TO PROCESSOR WITH
  5024. * (X0) = -7777B
  5025. * (X1) = FL
  5026. * (X2) = RA
  5027. * (X4) = REQUEST WORD SHIFTED 18
  5028. * (X5) = REQUEST WORD
  5029. * (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
  5030. * (B4) = FL
  5031. * (B7) = CONTROL POINT ADDRESS
  5032.  
  5033. ZR B5,MSG IF *MSG*
  5034. SX7 X4-3RCIO
  5035. PL B5,CPR5 IF ABOVE *MSG*
  5036. ZR X7,CIO IF *CIO*
  5037. PL X7,CPR4 IF ABOVE *CIO*
  5038. SB6 X4-3RABT
  5039. ZR B6,ABT IF *ABT*
  5040. SX6 X4-3RAAA
  5041. PL X6,APJ IF LEGAL PROGRAM NAME
  5042. EQ CPE *MONITOR CALL ERROR.*
  5043.  
  5044.  
  5045. CPR4 SX6 X4-3RLDR
  5046. ZR X6,LDR IF *LDR*
  5047. SX7 X4-3RCPM
  5048. PL X6,LDV IF ABOVE *LDR*
  5049. SX6 X4-3REND
  5050. ZR X7,CPM IF *CPM*
  5051. SX7 X4-3REJT
  5052. ZR X6,END IF *END*
  5053. ZR X7,EJT IF *EJT*
  5054. SX7 X4-3RCLO
  5055. NZ X7,APJ IF NOT *CLO*
  5056. EQ CLO CONVERT *CLO* TO *CIO*
  5057.  
  5058.  
  5059. CPR5 SX7 X4-3RRFL
  5060. PL X6,CPR6 IF ABOVE *TIM*
  5061. NG X7,PFL IF BELOW *RFL*
  5062. SX6 X4-3RRSB
  5063. ZR X7,RFL IF *RFL*
  5064. ZR X6,RSB IF *RSB*
  5065. SX7 X4-3RSPC
  5066. ZR X7,SPC IF *SPC*
  5067. PL X6,SIC IF ABOVE *RSB*
  5068. SX6 X4-3RRPV
  5069. ZR X6,RPV IF *RPV*
  5070. EQ APJ
  5071.  
  5072.  
  5073. CPR6 SX7 X4-3RWCL
  5074. SX6 X4-3RXJP
  5075. ZR X7,WCL IF *WCL*
  5076. SX7 X4-3RXJR
  5077. TZR X6,(/MONITOR/XJP,SUBCP,/MONITOR/APJ) IF *XJP*
  5078. ZR X7,XJR IF *XJR*
  5079. SX6 X4-3R0AA
  5080. PL X6,CPE IF ILLEGAL REQUEST
  5081. EQ APJ ASSIGN PPU JOB
  5082. AAR SPACE 4,10
  5083. ** AAR - ASSIGN AUTO RECALL PP REQUEST.
  5084. *
  5085. * ENTRY (X5) = PP REQUEST.
  5086. * (B7) = CONTROL POINT.
  5087.  
  5088.  
  5089. AAR SB4 B0+ SET LIBRARY SEARCH NEEDED
  5090. AAR1 SB6 AAR2 *CAL* RETURN ADDRESS - NO LIMIT
  5091. SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
  5092. EQ CAL CHECK ACTIVITY LIMIT
  5093.  
  5094. AAR2 MX0 1 FORCE AUTO-RECALL
  5095. SX7 B0+ CLEAR RA+1
  5096. LX0 41-59
  5097. SA2 RA1 ADDRESS OF RA+1
  5098. EWX7 X2 CLEAR (RA+1)
  5099. BX6 X0+X5
  5100. SA7 APQA
  5101. SB3 SIS *APQ* RETURN ADDRESS
  5102. EQ APQ ASSIGN PP
  5103. APJ SPACE 4,15
  5104. ** APJ - ASSIGN PPU JOB.
  5105. *
  5106. * ENTRY (X5) = PPU REQUEST WORD.
  5107. * (B7) = CONTROL POINT ADDRESS.
  5108. *
  5109. * EXIT TO *APQ* TO ASSIGN PP.
  5110. * TO *SXS* TO SET X STATUS IF ACTIVITY LIMIT.
  5111. *
  5112. * USES X - ALL.
  5113. * B - 3, 4, 6.
  5114. * A - 1, 2, 7.
  5115. *
  5116. * CALLS CAL.
  5117.  
  5118.  
  5119. APJ BX7 X7-X7 CLEAR PP PARAMETER WORD
  5120. SB4 B0 SET LIBRARY SEARCH NEEDED
  5121. SA7 APQA
  5122. APJ0 SA1 B7+JCIW CHECK FOR SUBSYSTEM OR NON-ROLLABLE JOB
  5123. SX3 B1
  5124. LX1 0-21
  5125. BX4 X3*X1 *DIS* FLAG
  5126. LX3 40-0
  5127. BX6 X3*X5 CHECK FOR AUTO RECALL
  5128. LX1 -24-0+21
  5129. MX2 -12
  5130. BX2 -X2*X1 SUBSYSTEM IDENTIFICATION
  5131. NZ X6,APJ0.1 IF PP CALL WITH AUTO RECALL
  5132. BX6 X2+X4
  5133. NZ X6,APJ2 IF SYSTEM JOB
  5134. BX5 X5+X3 FORCE AUTO RECALL
  5135. APJ0.1 SA1 B7+STSW GET JOB ACTIVITY
  5136. MX6 -8
  5137. SX2 X2-LSSI-1
  5138. LX1 -4
  5139. BX6 -X6*X1 RECALL/TAPE ACTIVITY COUNT
  5140. PL X2,APJ0.2 IF SUBSYSTEM
  5141. LX1 12+4
  5142. MX2 -5
  5143. BX2 -X2*X1 PP COUNT
  5144. IX6 X6+X2
  5145. IX6 X6-X4 ALLOW FOR *DIS*
  5146. APJ0.2 NZ X6,SXS IF PP OR TAPE ACTIVITY
  5147.  
  5148. * ASSIGN PPU JOB.
  5149.  
  5150. APJ1 MX0 1 EXTRACT AUTO RECALL FLAG
  5151. LX0 40-59
  5152. BX0 X0*X5
  5153. LX0 41-40
  5154. SA2 RA1 ADDRESS OF RA+1
  5155. SX7 B0+ CLEAR RA+1
  5156. BX6 X0+X5 MAP AUTO RECALL TO BIT 41
  5157. EWX7 X2 CLEAR (RA+1)
  5158. SB3 SIS *APQ* RETURN ADDRESS
  5159. TNZ X0,(/DCP/APQ,DCPC,/MONITOR/APQ) IF AUTO-RECALL
  5160. SB3 MTRX
  5161. TJP (/DCP/APQ,DCPC,/MONITOR/APQ) ASSIGN PP
  5162.  
  5163. * AVOID FORCED AUTO RECALL
  5164.  
  5165. APJ2 SB6 APJ1 *CAL* RETURN ADDRESS - NO LIMIT
  5166. SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
  5167. EQ CAL CHECK ACTIVITY LIMIT
  5168. AFL SPACE 4,20
  5169. ** AFL - ASSIGN FIELD LENGTH.
  5170. *
  5171. * ENTRY (X1) = CURRENT FIELD LENGTH.
  5172. * (X2) = REQUESTED FIELD LENGTH.
  5173. * (X5) = *1MA* CALL TO BE ISSUED IF NEEDED.
  5174. * (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
  5175. * (B5) = STATUS RESPONSE ADDRESS.
  5176. * (B7) = CONTROL POINT ADDRESS.
  5177. * (A5) = RA+1.
  5178. *
  5179. * EXIT TO MTRX.
  5180. *
  5181. * USES X - 0, 1, 2, 3, 4, 6, 7.
  5182. * A - 2, 3, 4, 6, 7.
  5183. * B - 4, 5, 6.
  5184. *
  5185. * CALLS APJ, SFL.
  5186.  
  5187.  
  5188. AFL SA3 B7+ECSW GET ECS CONTROL WORD
  5189. MX7 -17 SET FIELD LENGTH
  5190. BX0 -X7*X2
  5191. MX4 -12 GET ECS FIELD LENGTH
  5192. SB6 B2 SET EXCHANGE PACKAGE ADDRESS
  5193. BX4 -X4*X3
  5194. BX6 X1 RETAIN CURRENT FL
  5195. ZR X0,AFL3 IF EMPTY REQUEST
  5196. SX3 X0-MCMX
  5197. ZR X4,AFL1 IF NO ECS ASSIGNED
  5198. PL X3,AFL1 IF FL .GE. MCMX
  5199. SX0 MCMX SET FL TO MINIMUM ALLOWED WITH ECS
  5200.  
  5201. * CHECK DIRECTION OF REQUEST.
  5202.  
  5203. AFL1 SX1 X0+77B ROUND UP REQUEST
  5204. NG X1,CPE IF REQUEST TOO LARGE
  5205. AX1 6
  5206. LX1 6
  5207. IX0 X1-X6 CHECK REQUEST
  5208. LX2 59-17
  5209. ZR X0,AFL3 IF NO MEMORY CHANGE
  5210. SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
  5211. PL X0,APJ1 IF MEMORY INCREASE CALL *1MA*
  5212.  
  5213. * CHECK NO-REDUCE STATUS.
  5214.  
  5215. SA4 B7+STSW CHECK ACTIVITY
  5216. SA3 AM
  5217. BX4 X3*X4
  5218. MX7 -12
  5219. ZR X4,AFL2 IF NO PP ACTIVITY
  5220. SA4 B7+JCIW CHECK FOR SUBSYSTEM OR NON-ROLLABLE JOB
  5221. LX4 -24
  5222. BX7 -X7*X4
  5223. LX4 0-21+24 CHECK FOR *DIS* JOB
  5224. SX3 B1
  5225. BX4 X3*X4
  5226. BX4 X4+X7
  5227. ZR X4,SXS IF NOT SYSTEM JOB
  5228. AFL2 SA3 B7+LB1W READ LOADER CONTROL
  5229. LX3 59-53
  5230. BX4 -X3+X2
  5231. TX7 B7+200B,-SCA CHECK CONTROL POINT
  5232. AX4 60
  5233. BX0 X4*X0
  5234. PL X4,AFL3 IF NO CHANGE IN MEMORY
  5235. BX6 X1 SET NEW FIELD LENGTH
  5236. ZR X7,APJ1 IF LAST CONTROL POINT CALL *1MA*
  5237. SA3 SSTL
  5238. LX3 59-58
  5239. PL X3,APJ1 IF MEMORY CLEARING ENABLED
  5240. AFL3 BX7 X7-X7 CLEAR (RA+1)
  5241. SA3 B3+B1
  5242. EWX7 X3
  5243. ZR B5,SFL SET FIELD LENGTH IF NO STATUS RESPONSE
  5244. SX4 B5
  5245. SA3 B3
  5246. IX4 X4+X3
  5247. ERX3 X4 CHECK FOR CMM CLEAR JOB STEP STATUS
  5248. LX6 30
  5249. SX7 B1
  5250. LX3 59-3
  5251. BX6 X6+X7 STORE STATUS RESPONSE
  5252. SB5 B0
  5253. EWX6 X4
  5254. PL X3,SFL IF NOT CMM CLEAR
  5255. SA3 B7+DBAW
  5256. LX7 54
  5257. BX6 -X7*X3
  5258. SA6 A3
  5259. EQ SFL SET FIELD LENGTH
  5260. CIO SPACE 4
  5261. ** CIO - CALL CIO.
  5262. *
  5263. * ENTRY (X7) = 0.
  5264.  
  5265.  
  5266. CIO SB6 CIO1 *CAL* RETURN ADDRESS - NO LIMIT
  5267. SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
  5268. EQ CAL CHECK ACTIVITY LIMIT
  5269.  
  5270. CIO1 SA7 /CPUCIO/MB
  5271. SX0 B1 MOVE AUTO RECALL BIT FROM BIT 40 TO 41
  5272. LX0 40
  5273. SA2 RA1 ADDRESS OF (RA+1)
  5274. BX0 X0*X5 EXTRACT AUTO RECALL BIT
  5275. BX5 -X0*X5
  5276. LX0 41-40
  5277. SB3 A2-B1 RESET ADDRESS OF WORD CONTAINING RA
  5278. BX6 X0+X5
  5279. SA6 A7-B1 STORE REQUEST WORD
  5280. ERRNZ /CPUCIO/IR-/CPUCIO/MB+1 CODE REQUIRES CONTIGUOUS
  5281. EWX7 X2 CLEAR (RA+1)
  5282. TEQ (/PROBE/CIO,PROBE,/CPUCIO/CPC)
  5283. CLO SPACE 4,10
  5284. ** CLO - CLOSE. (CONVERT CALL TO *CIO*)
  5285. *
  5286. * ENTRY (X7) = 0.
  5287.  
  5288.  
  5289. CLO MX2 42
  5290. SX3 3RCIO
  5291. BX4 X2*X4
  5292. BX5 X4+X3
  5293. LX5 42
  5294. EQ CIO PROCESS AS *CIO* REQUEST
  5295. CPE SPACE 4
  5296. ** CPE - PROCESS CPU CALL ERROR.
  5297.  
  5298.  
  5299. CPE SX7 PCET SET ERROR FLAG = *MONITOR CALL ERROR.*
  5300. EQ SEF
  5301. ABT SPACE 4
  5302. *** *ABT*.
  5303. * ABORT JOB.
  5304. *
  5305. *T 18/ *ABT*,42/
  5306.  
  5307.  
  5308. ABT SX7 CPET SET CPU ABORT FLAG
  5309. JP SEF
  5310. CPM SPACE 4
  5311. *** *CPM*.
  5312. * RESIDENT CPM FUNCTIONS.
  5313. *
  5314. * ENTRY (X7) = 0.
  5315. *
  5316. *T 18/ *CPM*,6/,12/ FN,6/,18/ PAR
  5317. * FN FUNCTION NUMBER.
  5318. * PAR PARAMETER.
  5319.  
  5320.  
  5321. CPM SA2 CPMA READ VALID FUNCTION WORD
  5322. LX4 -24-18 EXTRACT FUNCTION
  5323. SX3 X5
  5324. BX4 -X0*X4
  5325. SB4 X4
  5326. IX4 X3-X1 CHECK PARAMETER PAST FL
  5327. AX2 X2,B4
  5328. CX6 X2
  5329. LX6 X6,B1 INDEX * 2
  5330. LX2 59
  5331. SB4 X6
  5332. BX4 X2*X4
  5333. SB5 -B4
  5334. BX6 -X4+X3
  5335. SA2 B3 ADDRESS OF RA
  5336. SB4 LACPM SET *CPM* LOAD PARAMETER INDEX
  5337. NG X6,APJ0 IF BAD PARAMETER OR NON-CPUMTR FUNCTION
  5338. IX3 X2+X3 ABSOLUTE PARAMETER ADDRESS
  5339. SA2 B3+B1
  5340. EWX7 X2 CLEAR RA+1
  5341. MX2 -18
  5342. JP CPMB+B5 JUMP TO PROCESSOR
  5343.  
  5344. * EXIT TO PROCESSOR WITH -
  5345. * (X0) = -7777B.
  5346. * (X1) = FL.
  5347. * (X2) = -777777B.
  5348. * (X3) = PARAMETER ADDRESS.
  5349. * (X7) = 0.
  5350. * (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
  5351. * (B7) = CONTROL POINT ADDRESS.
  5352.  
  5353. * NOTE - FUNCTIONS 73B AND ABOVE MUST BE PROCESSED BY THE PPU
  5354. * CPM PROCESSOR.
  5355. *
  5356. * SET BIT INDICATES VALID CENTRAL FUNCTION.
  5357. * THESE FUNCTIONS MUST BE IN REVERSE ORDER.
  5358.  
  5359. CPMA BSS 0
  5360. POS 65B+1
  5361. VFD 1/1
  5362. POS 64B+1
  5363. VFD 1/1
  5364. POS 63B+1
  5365. VFD 1/1
  5366. POS 62B+1
  5367. VFD 1/1
  5368. POS 61B+1
  5369. VFD 1/1
  5370. POS 55B+1
  5371. VFD 1/1
  5372. POS 51B+1
  5373. VFD 1/1
  5374. POS 50B+1
  5375. VFD 1/1
  5376. POS 45B+1
  5377. VFD 1/1
  5378. POS 43B+1
  5379. VFD 1/1
  5380. POS 37B+1
  5381. VFD 1/1
  5382. POS 33B+1
  5383. VFD 1/1
  5384. POS 32B+1
  5385. VFD 1/1
  5386. POS 25B+1
  5387. VFD 1/1
  5388. POS 24B+1
  5389. VFD 1/1
  5390. POS 16B+1
  5391. VFD 1/1
  5392. BSS 0 FORCE UPPER
  5393.  
  5394. * EACH FUNCTION MUST OCCUPY TWO WORDS OF CODE AND MUST BE IN
  5395. * ORDER OF OCCURENCE.
  5396.  
  5397. * FUNCTION 16.
  5398.  
  5399. + SA1 B7+3 READ EXIT MODE
  5400. LX1 12
  5401. BX6 -X0*X1
  5402. EWX6 X3
  5403. JP MTRX EXIT
  5404.  
  5405. * FUNCTION 24.
  5406.  
  5407. + SA1 B7+JCRW READ JOB CONTROL WORD
  5408. BX6 X1
  5409. EWX6 X3
  5410. JP MTRX EXIT
  5411.  
  5412. * FUNCTION 25.
  5413.  
  5414. ERX1 X3
  5415. BX6 X1
  5416. SA6 B7+JCRW
  5417. JP MTRX EXIT
  5418.  
  5419. * FUNCTION 32.
  5420.  
  5421. + SA1 B7+UIDW RETURN USER NUMBER
  5422. BX6 X2*X1
  5423. EWX6 X3
  5424. JP MTRX EXIT
  5425.  
  5426. * FUNCTION 33.
  5427.  
  5428. + SA1 B7+FLCW READ FIELD LENGTH CONTROL WORD
  5429. BX6 X1
  5430. EWX6 X3
  5431. JP MTRX EXIT
  5432.  
  5433. * FUNCTION 37.
  5434.  
  5435. + SA1 B7+TXSW READ TELEX SUB-SYSTEM
  5436. MX6 -6
  5437. LX1 6
  5438. BX6 -X6*X1
  5439. EWX6 X3
  5440. JP MTRX
  5441.  
  5442. * FUNCTION 43.
  5443.  
  5444. + SA1 B7+SEPW READ SPECIAL ENTRY POINT WORD
  5445. SX2 B1
  5446. SB6 X1
  5447. ZR B6,CPM1 IF NO PARAMETER BLOCK
  5448. EQ CPM4 RESTORE (RA+1)
  5449.  
  5450. * FUNCTION 45.
  5451.  
  5452. + SA1 B7+LB1W READ FIRST LOADER CONTROL WORD
  5453. BX6 X1
  5454. EWX6 X3
  5455. JP MTRX EXIT
  5456.  
  5457. * FUNCTION 50.
  5458.  
  5459. + SA1 MMFL READ MACHINE ID WORD
  5460. LX1 12
  5461. BX6 -X0*X1
  5462. EWX6 X3
  5463. JP MTRX EXIT
  5464.  
  5465. * FUNCTION 51.
  5466.  
  5467. + SX3 B1 FORCE AUTO RECALL
  5468. BX7 X5 RESET RA+1 REQUEST
  5469. SA2 RA1
  5470. LX3 40
  5471. EWX7 X2
  5472. EQ CPM1.3 EXIT
  5473.  
  5474. * FUNCTION 55.
  5475.  
  5476. + SA1 B7+ELCW READ ECS FL CONTROL WORD
  5477. TLX1 0,UESC
  5478. BX6 X1
  5479. EWX6 X3
  5480. JP MTRX EXIT
  5481.  
  5482. * FUNCTION 61.
  5483.  
  5484. + SA4 B7+LOFW READ LIST POINTER
  5485. LX2 24 POSITION MASK
  5486. SX7 B1
  5487. BX4 -X2*X4
  5488. EQ CPM3 SET COMPLETE BIT
  5489.  
  5490. * FUNCTION 62.
  5491.  
  5492. ERX4 X3
  5493. LX4 -30
  5494. BX4 -X2*X4
  5495. IX1 X4-X1 CHECK LIST BASE ADDRESS WITHIN FL
  5496. NG X1,CPM2 IF LIST WITHIN FL
  5497. EQ CPM4 ASSIGN PPU
  5498.  
  5499. * FUNCTION 63.
  5500.  
  5501. SA4 B7+EOJW READ END-OF-JOB CONTROL WORD
  5502. MX6 -6
  5503. LX4 6 RETURN TERMINATION STATUS
  5504. BX6 -X6*X4
  5505. EQ CPM3.1 CONTINUE
  5506.  
  5507. * FUNCTION 64.
  5508.  
  5509. SA4 B7+SEPW CHECK SSJ=
  5510. SA2 B7+JCIW CHECK FOR SUBSYSTEM
  5511. LX4 59-50
  5512. AX2 -24
  5513. EQ CPM3.2 CONTINUE
  5514.  
  5515. * FUNCTION 65.
  5516.  
  5517. + SA1 B7+SEPW
  5518. LX1 59-50
  5519. PL X1,CPM4 IF NOT SSJ=
  5520. EQ CPM3.5 SET/CLEAR UTL= ENTRY POINT
  5521.  
  5522. CPMB BSS 0
  5523.  
  5524. * EXIT FOR FUNCTION 43.
  5525.  
  5526. CPM1 LX2 50-0 BIT MASK
  5527. SB6 X5
  5528. SB6 B6-1
  5529. GT B6,CPM1.1 IF DISABLE/ENABLE SSJ=
  5530. BX6 -X2*X1 CLEAR SSJ=
  5531. LX2 55-50
  5532. BX6 -X2*X6 CLEAR LDR=
  5533. LX2 36-55
  5534. BX6 -X2*X6 CLEAR ENABLE SSJ=
  5535. SA6 A1
  5536. NG B6,MTRX IF ZERO PARAMETER
  5537. LX1 59-48
  5538. LX2 59-36
  5539. NG X1,MTRX IF SSM= ENTRY POINT
  5540. SA1 B7+DBAW
  5541. BX6 -X2*X1
  5542. SA6 A1
  5543. JP MTRX EXIT
  5544.  
  5545. CPM1.1 SB6 B6-B1
  5546. GT B6,CPM1.2 IF ENABLE SSJ=
  5547. BX6 X2*X1 EXTRACT SSJ=
  5548. BX1 -X2*X1 CLEAR SSJ=
  5549. LX2 55-50
  5550. BX1 -X2*X1 CLEAR LDR=
  5551. LX2 36-55
  5552. BX1 -X2*X1 CLEAR ENABLE SSJ=
  5553. LX6 36-50
  5554. BX6 X6+X1 SET ENABLE SSJ=
  5555. SA6 A1
  5556. JP MTRX EXIT
  5557.  
  5558. CPM1.2 SB6 B6-1
  5559. GT B6,CPM4 IF INCORRECT REQUEST
  5560. BX6 X1
  5561. LX6 59-36
  5562. PL X6,CPM4 IF INCORRECT REQUEST
  5563. BX6 X2+X1 SET SSJ=
  5564. LX2 36-50
  5565. BX6 -X2*X6 CLEAR ENABLE SSJ=
  5566. SA6 A1
  5567. JP MTRX EXIT
  5568.  
  5569. * EXIT FOR FUNCTION 51.
  5570.  
  5571. CPM1.3 BX5 X5+X3
  5572. EQ APJ1 ASSIGN PPU
  5573.  
  5574. * EXIT FOR FUNCTIONS 61 AND 62.
  5575.  
  5576. CPM2 LX2 24 POSITION MASK
  5577. SA1 B7+LOFW READ LIST POINTER
  5578. LX4 24
  5579. BX1 X2*X1 CLEAR OLD LIST ADDRESS
  5580. SX7 B1
  5581. BX6 X1+X4
  5582. SA6 A1
  5583. CPM3 LX4 6 RE-POSITION LIST ADDRESS
  5584. BX7 X4+X7 SET COMPLETE BIT
  5585. EWX7 X3
  5586. EQ MTRX EXIT
  5587.  
  5588. * EXIT FOR FUNCTION 63.
  5589.  
  5590. CPM3.1 SA4 B7+TFSW
  5591. LX4 12
  5592. BX4 -X0*X4 EJT ORDINAL
  5593. CX1 X4,EJT CONVERT EJT ORDINAL TO OFFSET
  5594. TA4 X1+SCHE,EJT READ EJT WORD
  5595. SX7 300B
  5596. LX4 6-33
  5597. BX4 X7*X4 JOB TERMINATION STATUS
  5598. BX6 X4+X6 ADD TO REPLY
  5599. EWX6 X3
  5600. JP MTRX EXIT
  5601.  
  5602. * EXIT FOR FUNCTION 64.
  5603.  
  5604. CPM3.2 NG X4,CPM3.3 IF SSJ=
  5605. BX2 -X0*X2
  5606. SX2 X2-LSSI
  5607. NG X2,CPM4 IF NOT SUBSYSTEM
  5608. CPM3.3 BX2 X3 CHECK PARAMETER BLOCK WITHIN FL
  5609. SX4 4 PARAMETER BLOCK LENGTH
  5610. IX3 X3+X4
  5611. SA4 B3 GET RA ADDRESS
  5612. IX4 X1+X4
  5613. IX4 X4-X3
  5614. SX1 B1
  5615. NG X4,CPM4 IF PARAMETER BLOCK PAST FL
  5616. SB3 CPM3.4 SET EXIT ADDRESS
  5617. BX5 X2 SAVE PARAMETER BLOCK ADDRESS
  5618. IX2 X2+X1 SKIP STATUS WORD
  5619. EQ IAA INCREMENT AUC ACCUMULATOR
  5620.  
  5621. CPM3.4 SX6 B5 SET ERROR CODE
  5622. LX6 9
  5623. EWX6 X5
  5624. EQ MTRX EXIT
  5625.  
  5626. * EXIT FOR FUNCTION 65.
  5627.  
  5628. CPM3.5 BX2 -X2*X5 GET SET/CLEAR FLAG
  5629. MX3 1
  5630. LX2 5-0
  5631. LX3 5-59
  5632. BX1 -X3*X1 CLEAR OLD UTL= VALUE
  5633. BX6 X1+X2 MERGE NEW UTL= VALUE
  5634. LX6 50-59 RE-POSITION *SEPW*
  5635. SA6 A1 UPDATE *SEPW*
  5636. EQ MTRX EXIT
  5637.  
  5638.  
  5639. * RESTORE (RA+1).
  5640.  
  5641. CPM4 BX7 X5
  5642. SA1 B3+B1 GET RA+1 ADDRESS
  5643. EWX7 X1
  5644. JP APJ0 ASSIGN PPU
  5645. EJT SPACE 4,10
  5646. *** *EJT*.
  5647. * EXECUTING JOB TABLE UPDATE FUNCTIONS.
  5648. *
  5649. * EXIT JOB ENABLED, OR *1MA* CALL MADE.
  5650. *
  5651. * ERROR TO *CPE* IF ABORT REQUIRED.
  5652. * ERROR CODE RETURNED TO CALLER IF NO ABORT REQUIRED.
  5653. *
  5654. * USES X - 0, 1, 2, 3, 4, 6, 7.
  5655. * A - 1, 2, 3, 4, 6, 7.
  5656. * B - 4, 6.
  5657. *
  5658. * CALLS SCD.
  5659. *
  5660. *T RA+1 18/*EJT*,6/AR,18/0,18/ADDR
  5661. * ADDR = RELATIVE ADDRESS OF PARAMETER BLOCK.
  5662. *
  5663. *ADDR 24/ JSN,12/ FLAGS,6/ PPI,8/ ERR,9/ FCN,1/C
  5664. * 42/ NAME,6/ ERF,12/ EJTO
  5665. * 3/RES,3/JAL,6/ OT,6/ RC,18/ MSG BUF,24/ RES
  5666. * 60/ REC WD 1
  5667. * 60/ REC WD 2
  5668. * 12/ INST,12/ TN,36/ CDC RES
  5669. * 42/ TNAME, 18/ RESERVED
  5670. *
  5671. * JSN = JOB SEQUENCE NUMBER.
  5672. * FLAGS = DTEJ, RCEJ - BIT 0 = CHANGE SERVICE CLASS.
  5673. * ENEJ - BIT 0 - TERMINAL CONTROL DISABLED.
  5674. * RTEJ - BIT 0 = SELECT EJT ENTRIES BY ORIGIN TYPE.
  5675. * BIT 1 = DEFAULT TIMEOUT (CLEAR = 0 TIMEOUT).
  5676. * PPI = PREPROCESSOR INDEX.
  5677. * ERR = ERROR RETURN (0 ON CALL).
  5678. * FCN = FUNCTION CODE.
  5679. * C = COMPLETE BIT (0 ON CALL).
  5680. * NAME = ENEJ - ENTRY POINT NAME.
  5681. * DTEJ, RCEJ, RSEJ - USER NAME.
  5682. * ERF = ERROR FLAG TO SET.
  5683. * EJTO = EXECUTING JOB TABLE ORDINAL.
  5684. * RES = RESERVED FOR CDC.
  5685. * JAL = JOB ACCESS LEVEL LIMIT (RETURNED ON *DTEJ*; 0 ON CALL).
  5686. * OT = ORIGIN TYPE.
  5687. * RC = REASON CODE.
  5688. * MSG BUF = RELATIVE ADDRESS OF BUFFER TO RETURN *MS1W*.
  5689. * REC WD 1 = RECOVERY WORD 1 (NFL WORD RC1N - SEE *PPCOM*).
  5690. * REC WD 2 = RECOVERY WORD 2 (NFL WORD RC2N - SEE *PPCOM*).
  5691. * INST = RESERVED FOR INSTALLATIONS.
  5692. * TN = TERMINAL NUMBER.
  5693. * CDC RES = RESERVED FOR CDC.
  5694. * TNAME = TERMINAL NAME (RETURNED BY *DTEJ* AND *TJEJ*;
  5695. * SPECIFIED ON CALL FOR *RCEJ*).
  5696. *
  5697. * NOTE - ANY CHANGES TO THIS PARAMETER BLOCK SHOULD ALSO
  5698. * BE DOCUMENTED IN *IAFEX* AND *1MA*.
  5699.  
  5700.  
  5701. EJT BSS 0 ENTRY
  5702. SA3 B7+JCIW CHECK SUBSYSTEM IDENTIFICATION
  5703. AX3 24
  5704. BX3 -X0*X3
  5705. ZR X3,CPE IF NOT SUBSYSTEM
  5706. SB6 X5 VALIDATE PARAMETER BLOCK ADDRESS
  5707. LE B6,B1,CPE IF ADDRESS INVALID
  5708. SX3 B6+EJPB
  5709. IX4 X1-X3
  5710. NG X4,CPE IF BEYOND FL
  5711. SX3 B6
  5712. IX6 X2+X3
  5713. SX3 B1
  5714. SA6 T1 SAVE PARAMETER BLOCK FWA
  5715. ERX4 X6 GET FIRST WORD OF PARAMETER BLOCK
  5716. IX6 X6+X3
  5717. SA6 A6+B1
  5718. ERRNZ T2-T1-1 ADDRESSES MUST BE CONSECUTIVE
  5719. MX6 -10 EXTRACT FUNCTION CODE
  5720. BX6 -X6*X4
  5721. LX6 59-0
  5722. NG X6,CPE IF COMPLETE BIT ALREADY SET
  5723. SX7 X6-MXEJ
  5724. PL X7,CPE IF INVALID REQUEST CODE
  5725. ZR X6,CPE IF INVALID REQUEST CODE
  5726. SX7 X6-RCEJ
  5727. ZR X7,EJT1 IF RECOVERY REQUEST
  5728.  
  5729. * VALIDATE EJT ORDINAL AND JSN.
  5730.  
  5731. R= X2,IEER ILLEGAL EJT ORDINAL ERROR CODE
  5732. SA1 A6 READ SECOND WORD OF PARAMETER BLOCK
  5733. ERX1 X1
  5734. TX7 EJTM MAXIMUM EJT ORDINAL
  5735. BX1 -X0*X1 REQUEST EJTO
  5736. IX7 X7-X1
  5737. NG X7,EJT7 IF EJTO OUT OF RANGE
  5738. MX0 24
  5739. BX7 X0*X4 REQUEST JSN
  5740. SX3 X6-RTEJ
  5741. BX7 X7+X1
  5742. NZ X3,EJT0.1 IF NOT *RTEJ*
  5743. ZR X7,EJT1 IF *RTEJ* BY ORIGIN TYPE
  5744. EJT0.1 ZR X1,EJT7 IF EJT ORDINAL = 0
  5745. BX7 X0*X7 ISOLATE REQUEST JSN
  5746. CX3 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  5747. TA3 X3+JSNE,EJT
  5748. BX0 X0*X3 JSN FROM ENTRY
  5749. BX1 X0-X7 COMPARE JSN-S
  5750. ZR X0,EJT7 IF FREE EJT ENTRY
  5751. R= X2,JFER JOB NOT FOUND ERROR CODE
  5752. NZ X1,EJT7 IF JSN MISMATCH
  5753. R= X2,RTER RETRY ERROR CODE
  5754. SX7 X6-SAEJ
  5755. ZR X7,EJT1 IF SET ABORT REQUEST
  5756.  
  5757. * CHECK INTERLOCK AND JOB ADVANCE.
  5758.  
  5759. SX1 B1
  5760. BX0 X1*X3
  5761. BX7 X1+X3 SET ENTRY INTERLOCK
  5762. LX1 6-0 CHECK JOB ADVANCE
  5763. BX1 X1*X3
  5764. BX1 X1+X0
  5765. NZ X1,EJT7 IF JOB ADVANCE OR INTERLOCK SET
  5766. SX1 X6-ENEJ
  5767. ZR X1,EJT2 IF ENABLE JOB REQUEST
  5768. SX4 X6-FJEJ
  5769. MX1 -6
  5770. BX3 -X1*X3
  5771. SB3 EJT0.2 *CAL* *ACB* RETURN ADDRESS
  5772. SB6 ACB *CAL* RETURN ADDRESS - NO LIMIT
  5773. BX1 X1-X1 PRESET NO BUFFER AVAILABLE
  5774. BX0 X2 SAVE ERROR CODE
  5775. NZ X4,CAL IF NOT FREEZE JOB REQUEST
  5776. SX3 X3-SIJS*2
  5777. NZ X3,CAL IF NOT SWAP-IN JOB STATUS
  5778. EQ EJT7 RETURN RETRY ERROR CODE
  5779.  
  5780. EJT0.2 BX2 X0 RESTORE ERROR CODE
  5781. ZR X1,EJT7 IF NO BUFFER ASSIGNED
  5782. SA7 A3 SET ENTRY INTERLOCK
  5783. BX7 X1 COMMUNICATIONS BUFFER ADDRESS
  5784. EQ EJT1.2 CALL *1MA*
  5785.  
  5786. * MAKE *1MA* CALL FOR OTHER FUNCTIONS.
  5787.  
  5788. EJT1 SB3 EJT1.1 *CAL* *ACB* RETURN ADDRESS
  5789. SB6 ACB *CAL* RETURN ADDRESS - NO LIMIT
  5790. BX1 X1-X1 PRESET NO BUFFER AVAILABLE
  5791. BX0 X2 SAVE ERROR CODE
  5792. EQ CAL CHECK ACTIVITY LIMIT
  5793.  
  5794. EJT1.1 BX2 X0 RESTORE ERROR CODE
  5795. ZR X1,EJT7 IF NO BUFFER ASSIGNED
  5796. BX7 X1 COMMUNICATIONS BUFFER ADDRESS
  5797. EJT1.2 SA4 T1 ABSOLUTE ADDRESS OF BLOCK
  5798. SA7 APQA SET BUFFER ADDRESS FOR *APQ*
  5799. ERX4 X4 FIRST WORD OF PARAMETER BLOCK
  5800. BX6 X4
  5801. SA4 T2
  5802. SA6 X1+B1 SET WORD IN BUFFER
  5803. ERX1 X4
  5804. SX3 B1
  5805. IX4 X4+X3
  5806. ERX2 X4
  5807. BX6 X1
  5808. BX7 X2
  5809. SA6 A6+B1
  5810. SA7 A6+B1
  5811. SX4 B1 TRANSFER AUTO RECALL BIT
  5812. LX4 40-0
  5813. SX3 X5 GET ADDR
  5814. BX5 X4*X5
  5815. SA4 EJTA SET UP CALL
  5816. BX4 X4+X3 MERGE ADDR
  5817. SB4 LA1MA SET PROGRAM TO CALL
  5818. SA2 RA1
  5819. LX5 1
  5820. BX7 X7-X7
  5821. BX6 X4+X5 INSERT AUTO-RECALL FLAG
  5822. EWX7 X2 CLEAR RA+1
  5823. SB3 MTRX *APQ* RETURN ADDRESS
  5824. ZR X5,APQ IF NOT AUTO-RECALL
  5825. SB3 SIS *APQ* RETURN ADDRESS
  5826. EQ APQ ASSIGN PP
  5827.  
  5828. * ENEJ - ENABLE JOB FOR SCHEDULING.
  5829.  
  5830. EJT2 MX6 -6 VALIDATE JOB STATUS
  5831. SA1 T2 READ SECOND PARAMETER BLOCK WORD ADDRESS
  5832. BX6 -X6*X3
  5833. R= X2,NDER JOB NOT DISABLED ERROR CODE
  5834. SX0 X6-IOJS*2
  5835. ZR X0,EJT3 IF AWAITING INTERACTIVE I/O
  5836. SX0 X6-DOJS*2
  5837. ZR X0,EJT3 IF DISABLED
  5838. ERX3 X1
  5839. LX6 12 SAVE JOB STATUS
  5840. BX6 X6+X3
  5841. EWX6 X1 REWRITE PARAMETER BLOCK WORD
  5842. EQ EJT7 PROCESS ERROR
  5843.  
  5844. EJT3 ERX1 X1
  5845. MX0 42
  5846. BX2 X0*X1
  5847. SX0 B0
  5848. ZR X2,EJT5 IF NO ENTRY POINT NAME
  5849. SB6 EJT4 SET REENTRY ADDRESS
  5850. EQ SCD SEARCH CENTRAL DIRECTORY
  5851.  
  5852. * IF THE SPECIFIED ENTRY POINT IS NOT FOUND, IT IS ASSUMED
  5853. * THAT THE REQUEST IS FOR A LOCAL FILE LOAD. IN THIS CASE
  5854. * THE FL FOR *LDR=* IS USED.
  5855.  
  5856. EJT4 SA1 TPPI GET FL FOR *LDR=*
  5857. SX0 X1+
  5858. ZR X7,EJT5 IF ENTRY POINT NOT FOUND
  5859.  
  5860. * CALCULATE FL FROM FOUND ENTRY POINT.
  5861.  
  5862. SA1 X7 GET FL FIELD
  5863. MX0 10
  5864. LX0 58
  5865. BX0 X0*X1
  5866. LX0 12
  5867. EJT5 SA4 T1 CHECK PPI FIELD
  5868. ERX4 X4
  5869. MX2 -6
  5870. LX4 42
  5871. BX1 -X2*X4
  5872. SX7 MCMX/100B
  5873. MX6 -12
  5874. ZR X1,EJT6 IF NO PPI SPECIFIED
  5875. SB6 X1-TPPIL
  5876. R= X2,IPER INVALID PPI ERROR CODE
  5877. GT B6,EJT7 IF PPI OUT OF RANGE
  5878. SA1 X1+TPPI GET PREPROCESSOR FIELD LENGTH/100B
  5879. SX1 X1
  5880. IX2 X0-X1
  5881. PL X2,EJT6 IF ENTRY POINT FIELD LENGTH IS LARGER
  5882. BX0 X1 MOVE LARGER FL
  5883. EJT6 SA2 A3+SCLE-JSNE GET USER-S NFL
  5884. BX3 -X6*X2 CURRENT FL
  5885. LX6 12
  5886. BX6 -X6*X2
  5887. ZR X6,EJT6.1 IF ECS NOT ASSIGNED
  5888. IX6 X3-X7
  5889. IX3 X0-X7
  5890. PL X6,EJT6.1 IF CURRENT FL .GE. *MCMX*
  5891. PL X3,EJT6.1 IF FL .GE. *MCMX*
  5892. BX0 X7 SET FL TO *MCMX*
  5893. EJT6.1 IX7 X2+X0 ADD IN SELECTED FL
  5894. SA7 A2
  5895.  
  5896. * CALCULATE ENTRY TIME.
  5897.  
  5898. AX2 54
  5899. CX1 X2,JCB CONVERT JCB ORDINAL TO OFFSET
  5900. TA1 X1+EXQT,JCB
  5901. MX3 -12
  5902. BX2 -X3*X1 INITIAL EXECUTION PRIORITY
  5903. NZ X0,EJT6.2 IF JOB STEP INITATION
  5904.  
  5905. * IF JOB STEP INITATION AFTER I/O, USE INTERACTIVE JOB PRIORITY
  5906. * (TP). OTHERWISE USE INITIAL PRIORITY (IP).
  5907.  
  5908. SA2 A1+MCMT-EXQT
  5909. AX2 36
  5910. BX2 -X3*X2
  5911. EJT6.2 AX1 12
  5912. BX6 -X3*X1 WEIGHTING FACTOR (SHIFT COUNT)
  5913. SB6 X6
  5914. AX1 24
  5915. BX1 -X3*X1 LOWER BOUND SCHEDULING PRIORITY
  5916. IX2 X2-X1
  5917. SA1 RTCL CURRENT TIME
  5918. LX6 X2,B6
  5919. AX1 36
  5920. IX1 X1-X6 ENTRY TIME
  5921. SA2 A3+B1 CLEAR SCHEDULE FIELD
  5922. MX0 30
  5923. BX7 X0*X2
  5924. BX7 X1+X7 MERGE ENTRY TIME
  5925. SA7 A2
  5926. R= X1,ROJS*2
  5927. SX2 B0
  5928. SA3 A3 CHANGE JOB STATUS
  5929. MX0 54
  5930. BX7 X0*X3
  5931. BX7 X7+X1
  5932. SA7 A3 ENABLE JOB
  5933. EJT7 SA3 T1 PARAMETER BLOCK ADDRESS
  5934. ERX4 X3 FIRST WORD OF PARAMETER BLOCK
  5935. SX6 B1 SET PARAMETER BLOCK COMPLETE
  5936. LX2 10-0
  5937. BX4 X4+X6
  5938. SA1 RA1 READ ADDRESS OF RA+1
  5939. BX7 X7-X7
  5940. BX6 X4+X2 SET ERROR CODE
  5941. EWX7 X1
  5942. EWX6 X3
  5943. EQ SJS START JOB SCHEDULER
  5944.  
  5945.  
  5946. EJTA VFD 18/3L1MA,6/0,12/5,24/0
  5947. END SPACE 4
  5948. *** *END*.
  5949. * END JOB.
  5950. *
  5951. *T 18/ *END*,42/
  5952.  
  5953.  
  5954. END EQU SNS SET NULL STATUS
  5955. LDR SPACE 4,10
  5956. *** *LDR*.
  5957. * REQUEST OVERLAY LOAD.
  5958. *
  5959. *T 18/ *LDR*,24/,18/ ADDR
  5960. * REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
  5961.  
  5962.  
  5963. LDR BSS 0 ENTRY
  5964. SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
  5965. EQ AAR1 ASSIGN AS AUTO-RECALL REQUEST
  5966. LDV SPACE 4,10
  5967. *** *LDV*.
  5968. * REQUEST LOADER ACTION.
  5969. *
  5970. *T 18/ *LDV*,6/,36/ 0
  5971. * REQUEST AUTO LOAD OF RELOCATABLE FILE, NAME IN (64B).
  5972. *
  5973. *T 18/ *LDV*,24/,18/ ADDR
  5974. * REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
  5975.  
  5976.  
  5977. LDV BSS 0 ENTRY
  5978. SX6 X4-3RLOD
  5979. SX7 X4-3RMEM
  5980. ZR X6,LOD IF *LOD*
  5981. SX6 X4-3RLDX
  5982. ZR X7,MEM IF *MEM*
  5983. SX7 X4-3RLDV
  5984. ZR X6,LDX IF *LDX*
  5985. NZ X7,APJ IF NOT *LDV*
  5986.  
  5987. * PROCESS *LDV* REQUEST.
  5988.  
  5989. SB5 X5
  5990. ZR B5,LOD IF RELOCATABLE
  5991. SX1 B1 SET AUTO RECALL
  5992. SX6 3RLDR&3RLDV CHANGE CALL TO *LDR*
  5993. LX6 42
  5994. BX2 X5-X6
  5995. LX1 40
  5996. BX5 X2+X1
  5997. SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
  5998. EQ APJ1 ASSIGN PP
  5999. LDX SPACE 4,10
  6000. *** *LDX*.
  6001. * REQUEST OVERLAY LOAD.
  6002. *
  6003. *T 18/ *LDX*,6/ R,18/,18/ ADDR
  6004. * REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
  6005. * AUTORECALL IS NOT FORCED FOR SUBSYSTEMS.
  6006.  
  6007.  
  6008. LDX BSS 0 ENTRY
  6009. SX6 3RLDR&3RLDX CHANGE CALL TO *LDR*
  6010. LX6 42
  6011. BX5 X5-X6
  6012. SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
  6013. EQ APJ0 ASSIGN PP
  6014. LOD SPACE 4,10
  6015. *** *LOD*.
  6016. * REQUEST AUTO LOAD OF RELOCATABLE FILE, NAME IN (64B).
  6017. *
  6018. *T 18/ *LOD*,6/,36/ 0
  6019.  
  6020.  
  6021. LOD BSS 0 ENTRY
  6022. SA4 LODA ENTER *LDR* REQUEST WORDS
  6023. LX1 18 POSITION FIELD LENGTH
  6024. SA2 A4+B1
  6025. BX5 X4
  6026. LX6 X2
  6027. MX7 2
  6028. SA4 B2 READ P, A0, B0
  6029. LX7 42-59 (X7) = 140BS36
  6030. SA3 B3+B0 ADDRESS OF RA
  6031. SX2 X5
  6032. IX3 X3+X2
  6033. SA2 B2+5 READ FLX
  6034. EWX6 X3
  6035. SX6 B1
  6036. IX3 X6+X3
  6037. EWX7 X3
  6038. MX3 42
  6039. LX3 18
  6040. BX4 X3*X4
  6041. AX2 36
  6042. TLX2 (6,ESM170,0)
  6043. BX6 X4+X1 STORE UPDATED (A0)
  6044. LX7 X2
  6045. SA6 B2
  6046. SA7 B2+10B STORE (X0) ECS FIELD LENGTH
  6047. SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
  6048. EQ APJ1 ASSIGN PP
  6049.  
  6050. LODA BSS 0
  6051. CON 0LLDR+1S40+60B
  6052. CON 0LLDR=+100B
  6053. MEM SPACE 4,40
  6054. *** *MEM*.
  6055. * REQUEST MEMORY.
  6056. *
  6057. *T 18/ *MEM*,6/ ,18/ TYPE,18/ ADDR
  6058. * TYPE 0 IF CM, ABORT IF NOT AVAILABLE
  6059. * 1 IF ECS, ABORT IF NOT AVAILABLE
  6060. * 2 IF CM, DO NOT ABORT IF NOT AVAILABLE
  6061. * 3 IF ECS, DO NOT ABORT IF NOT AVAILABLE
  6062. * ADDR ADDRESS OF REQUEST WORD
  6063. *T ADDR 30/ VAL,24/,1/R,1/C,1/,1/0
  6064. *
  6065. * R = CLEAR *CMM* STATUS.
  6066. * C = THIS IS A *CMM* TYPE REQUEST.
  6067. * TYPE CM.
  6068. * IF VAL .GT. 0 THEN
  6069. * VAL = 12/,1/N,17/FL
  6070. * N = NO-REDUCE OVERRIDE.
  6071. * FL = CM FIELD LENGTH.
  6072. * TYPE ECS.
  6073. * IF VAL .GT. 0 THEN
  6074. * VAL = ECS FIELD LENGTH.
  6075. * IF VAL .EQ. -0 RELEASE ALL ECS FIELD LENGTH.
  6076. *
  6077. * TYPE CM OR ECS.
  6078. * IF VAL .EQ. 0 RETURN CURRENT FIELD LENGTH.
  6079. * IF VAL .EQ. -1 RETURN MAXIMUM FIELD LENGTH (MFL).
  6080. *
  6081. * RESPONSE.
  6082. *T ADDR 30/ FL OR MFL,30/1
  6083. *
  6084. * * MONITOR CALL ERROR.* IS RETURNED FOR THE FOLLOWING-
  6085. * 1) ILLEGAL ADDRESS.
  6086. * 2) CLEAR *CMM* STATUS WITH (R) = 1 AND (C) = 0.
  6087. * 3) CLEAR *CMM* STATUS WITH (R) = 1 AND (C) = 1 AND
  6088. * *CMM* JOB STEP STATUS NOT SET.
  6089. *
  6090. * A CMM ERROR WILL BE ISSUED BY *1MA* IF JOB STEP CMM
  6091. * STATUS IS SET AND A MEMORY CHANGE REQUEST IS ISSUED THAT
  6092. * DOES NOT HAVE THE (C) BIT SET.
  6093.  
  6094.  
  6095. MEM MX6 -23
  6096. SB5 X5 SET REQUEST ADDRESS
  6097. SA3 MP
  6098. GE B5,B4,CPE IF ADDRESS .GE. FL
  6099. LE B5,B1,CPE IF ADDRESS .LT. 2
  6100. SA2 B3 GET RA ADDRESS
  6101. BX0 -X6*X5 EXTRACT *1MA* PARAMETERS
  6102. SX6 X5
  6103. IX2 X6+X2
  6104. SX6 B1
  6105. ERX2 X2 READ REQUEST WORD
  6106. LX6 18
  6107. IX5 X0+X6 INCREMENT TYPE FIELD
  6108. MX4 -2
  6109. AX2 2 EXTRACT REQUEST TYPE
  6110. BX4 -X4*X2
  6111. AX2 28
  6112.  
  6113. * (B6) = *CMM* FIELD OF REQUEST WORD - 1.
  6114.  
  6115. SB6 X4-1
  6116. AX7 X2,B1
  6117. LX0 59-18
  6118. SA4 B7+DBAW
  6119. LX6 54-18
  6120. EQ B6,B1,CPE IF *CMM* FIELD = 2 ABORT
  6121. PL X0,MEM1 IF NOT ECS
  6122. LX6 55-54
  6123. PL X2,MEM1 IF NOT (RELEASE ALL ECS OR MFL REQUEST)
  6124. NZ X2,MEM1 IF MFL REQUEST
  6125. SX7 B1+ INDICATE NON STATUS ECS REQUEST
  6126. MEM1 BX5 X5+X3 COMPLETE *1MA* REQUEST
  6127. BX3 X6*X4 EXTRACT CMM JOB STEP STATUS
  6128. SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
  6129. LE B6,B1,MEM4 IF CMM FIELD .NE. 3
  6130.  
  6131. * REQUEST TO CLEAR CMM FLAG. THE CLEAR WILL BE DONE IN CPUMTR
  6132. * ONLY IF IT IS NOT POSSIBLE FOR THE REQUEST TO BE
  6133. * REQUEUED AND REPROCESSED.
  6134.  
  6135. ZR X3,CPE IF JOB STEP CMM FLAG NOT SET ON CLEAR
  6136. NG X0,APJ1 IF ECS STATUS REQUEST
  6137. NZ X7,AFL IF NOT STATUS REQUEST
  6138. BX6 -X6*X4 CLEAR CMM JOB STEP STATUS
  6139. SA6 A4+
  6140.  
  6141. * RETURN CM STATUS.
  6142.  
  6143. MEM2 SX3 B1
  6144. PL X7,MEM3 IF NOT MFL REQUEST
  6145. MX6 12
  6146. SA4 B7+FLCW
  6147. BX1 X6*X4
  6148. LX1 -12-30
  6149. MEM3 LX1 30 STORE RESPONSE
  6150. BX7 X7-X7
  6151. BX6 X1+X3
  6152. SA2 B3 RA ADDRESS
  6153. SA1 B3+B1 RA + 1 ADDRESS
  6154. SX3 B5
  6155. IX2 X3+X2
  6156. EWX7 X1 CLEAR RA+1
  6157. EWX6 X2 STORE RESPONSE
  6158. EQ MTRX EXIT
  6159.  
  6160. * PROCESS CMM REQUEST FIELD = 0, 1.
  6161.  
  6162. MEM4 NZ B6,MEM6 IF CMM FIELD = 0
  6163. BX6 X4+X6 SET CMM JOB STEP STATUS
  6164. SA6 A4
  6165. MEM5 NG X0,APJ1 IF ECS REQUEST
  6166. ZR X7,MEM2 IF STATUS REQUEST
  6167. EQ AFL ASSIGN FIELD LENGTH
  6168.  
  6169. MEM6 ZR X3,MEM5 IF CMM JOB STEP STATUS CLEAR
  6170. ZR X7,MEM5 IF STATUS REQUEST
  6171. MX1 36 ABORT WITH CMM ERROR
  6172. BX5 X1*X5
  6173. EQ APJ0 ASSIGN PP
  6174. MSG SPACE 4,20
  6175. *** *MSG*.
  6176. * SEND MESSSAGE TO SYSTEM.
  6177. *
  6178. *T, 18/ *MSG*,6/ R,12/ MO,6/ AL,18/ ADDR
  6179. * MO MESSAGE OPTION
  6180. * AL ADDRESS LOCATION (0 - USER FL, 40B - NEGATIVE FL).
  6181. * ADDR ADDRESS OF MESSAGE
  6182. *
  6183. * MO MESSAGE WRITTEN TO
  6184. * 0 MASTER DAYFILE, JOB DAYFILE, AND CONTROL POINT
  6185. * MESSAGE BUFFER
  6186. * 1 CONSOLE LINE 1
  6187. * 2 CONSOLE LINE 2
  6188. * 3 JOB DAYFILE AND CONTROL POINT MESSAGE BUFFER
  6189. * 4 ERROR LOG (SYSTEM ORIGIN / SSJ= ONLY)
  6190. * 5 ACCOUNT FILE (SYSTEM ORIGIN / SSJ= ONLY)
  6191. * 6 MASTER DAYFILE (COMMON PRODUCTS COMPATIBILITY)
  6192. * 7 JOB DAYFILE (COMMON PRODUCTS COMPATIBILITY)
  6193. * 10B INTERNAL TO *CPUMTR*
  6194. * 11B MAINTENANCE LOG (SYSTEM ORIGIN / SSJ= ONLY)
  6195. * 12B ACCOUNT FILE WITH JSN (SYOT/SSJ= ONLY)
  6196. * 13B JOB DAYFILE ONLY
  6197. *
  6198. * NOTES AN ILLEGAL MESSAGE OPTION WILL CAUSE MO = 1
  6199. * TO BE SELECTED.
  6200.  
  6201.  
  6202. MSG LX4 18
  6203. BX6 X5 SAVE REQUEST
  6204. SA6 MSGB
  6205. BX3 X5
  6206. SB5 X5 CHECK MESSAGE ADDRESS
  6207. LX3 59-23
  6208. BX4 -X0*X4 EXTRACT MESSAGE OPTION
  6209. SB6 B5-CSBN-1
  6210. MX6 12
  6211. PL X3,MSG1 IF NOT CONTROL STATEMENT MESSAGE
  6212. SX7 B5-MS1W
  6213. NZ X7,MSG0 IF NOT *MS1W*
  6214. SX7 B7 USE CPA ADDRESS AS RA
  6215. SA7 B3
  6216. SB4 200B SET FL TO LENGTH OF CPA
  6217. EQ MSG1 ISSUE MESSAGE
  6218.  
  6219. MSG0 SA1 B3 SET RA TO BEGINNING OF BUFFER
  6220. SX7 CSBN+2
  6221. IX7 X1-X7
  6222. SA7 B3
  6223. PL B6,CPE IF NOT IN CONTROL STATEMENT BUFFER
  6224. SB4 CSBN-INSN+7 SET LENGTH OF BUFFER
  6225. SB5 B6-B1 CHANGE NFL ADDRESS TO BUFFER INDEX
  6226. SB5 -B5
  6227. MSG1 GE B5,B4,CPE IF ILLEGAL MESSAGE ADDRESS
  6228. SB6 B4-5
  6229. LE B5,B1,CPE IF ILLEGAL MESSAGE ADDRESS
  6230. SA1 B3
  6231. SX2 B5
  6232. IX1 X1+X2
  6233. ERX2 X1 READ FIRST WORD OF MESSAGE
  6234. BX7 X6*X2
  6235. LX6 X2
  6236. SX5 B1+
  6237. ZR X2,MSG2 IF NULL MESSAGE
  6238. NZ X7,MSG2 IF MESSAGE PRESENT
  6239. BX7 X2+X5 SET OPERATION COMPLETE
  6240. AX2 30
  6241. SB5 X2
  6242. GE B5,B4,CPE IF ILLEGAL MESSAGE ADDRESS
  6243. EWX7 X1
  6244. LE B5,B1,CPE IF ILLEGAL MESSAGE ADDRESS
  6245. SA1 B3
  6246. SX2 B5
  6247. IX1 X1+X2
  6248. ERX2 X1 READ FIRST WORD OF MESSAGE
  6249. BX6 X2
  6250. MSG2 GT B5,B6,CPE IF MESSAGE ADDRESS + 5 .GT. FL
  6251. SB6 X4-TMSGL
  6252. PL B6,TMSG+1 IF ILLEGAL OPTION ASSUME 1
  6253. JP TMSG+TMSGL+B6
  6254.  
  6255. TMSG BSS 0 MESSAGE PROCESSOR TABLE
  6256.  
  6257. + EQ MSG7 PREPROCESS MASTER DAYFILE MESSAGE
  6258.  
  6259. + SA6 B7+MS1W SET MESSAGE IN LINE 1 OF CONTROL POINT
  6260. EQ MSG3
  6261.  
  6262. + SA6 B7+MS2W SET MESSAGE IN LINE 2 OF CONTROL POINT
  6263. EQ MSG4
  6264.  
  6265. + EQ MSG7 PREPROCESS JOB DAYFILE MESSAGE
  6266.  
  6267. + EQ MSG5 PREPROCESS ERROR LOG MESSAGE
  6268.  
  6269. + EQ MSG5 PREPROCESS ACCOUNT FILE MESSAGE
  6270.  
  6271. + SX4 0
  6272. EQ MSG6 CHANGE MESSAGE OPTION TO MASTER DAYFILE
  6273.  
  6274. + SX4 CPON/10000B
  6275. EQ MSG6 CHANGE MESSAGE OPTION TO JOB DAYFILE
  6276.  
  6277. + EQ MSG7 PREPROCESS JOB DAYFILE MESSAGE
  6278.  
  6279. SX4 BMLN/10000B
  6280. EQ MSG4.0 PREPROCESS MAINTENANCE LOG MESSAGE
  6281.  
  6282. + SX4 AJNN/10000B
  6283. EQ MSG4.1 PREPROCESS ACCOUNT MESSAGE WITH JSN
  6284.  
  6285. + SX4 CDON/10000B
  6286. EQ MSG6 CHANGE MESSAGE OPTION FOR *DFMM*
  6287.  
  6288. TMSGL EQU *-TMSG
  6289.  
  6290. * FIRST CONSOLE MESSAGE.
  6291.  
  6292. MSG3 IX1 X1+X5
  6293. ERX3 X1
  6294. IX1 X1+X5
  6295. ERX2 X1
  6296. LX7 X3
  6297. BX6 X2
  6298. SA7 A6+B1
  6299. SA6 A7+B1
  6300.  
  6301. * SECOND CONSOLE MESSAGE.
  6302.  
  6303. MSG4 IX1 X1+X5
  6304. ERX3 X1
  6305. IX1 X1+X5
  6306. ERX2 X1
  6307. LX7 X3
  6308. BX6 X0*X2 TERMINATE MESSAGE
  6309. SA7 A6+B1
  6310. BX7 X0-X0
  6311. SA6 A7+B1
  6312. EQ MTRP CLEAR RA+1
  6313.  
  6314. * ENTER HERE TO PREPROCESS MAINTENANCE LOG MESSAGE (MO = 11B).
  6315.  
  6316. MSG4.0 SB6 B0
  6317. AX6 48
  6318.  
  6319. * ENTER HERE TO CHANGE MESSAGE OPTION (MO = 12B).
  6320.  
  6321. MSG4.1 SA1 RA1 READ REQUEST
  6322. LX0 24
  6323. ERX5 X1
  6324. BX5 X0*X5 REMOVE CURRENT MESSAGE OPTION
  6325. LX4 24
  6326. BX7 X5+X4 INSERT NEW OPTION
  6327. MX0 -12
  6328. EWX7 X1 RESET REQUEST
  6329. BX5 X7
  6330.  
  6331. * ENTER HERE TO CHECK JOB ORIGIN AND SSJ (MO = 4, 5).
  6332.  
  6333. MSG5 SA3 B7+TFSW GET JOB EJT ORDINAL
  6334. MX1 -12
  6335. LX3 12
  6336. BX3 -X1*X3
  6337. MX4 -4
  6338. CX2 X3,EJT CONVERT EJT ORDINAL TO OFFSET
  6339. + ZR X3,* IF NO EJT ORDINAL
  6340. TA3 X2+SCLE,EJT GET JOB ORIGIN
  6341. LX3 -48
  6342. BX3 -X4*X3
  6343. SX3 X3-SYOT
  6344. ZR X3,MSG8 IF SYSTEM ORIGIN JOB
  6345. SA1 B7+SEPW
  6346. BX7 X7-X7
  6347. LX1 59-50
  6348. NG X1,MSG8 IF SSJ JOB
  6349. ZR B6,MTRX IF MO = BINARY MAINTENANCE LOG
  6350. SX4 CPON/10000B
  6351.  
  6352. * ENTER HERE TO CHANGE MESSAGE OPTION (MO = 6, 7, 13B).
  6353.  
  6354. MSG6 LX0 24
  6355. SA1 RA1 READ REQUEST
  6356. ERX5 X1
  6357. BX5 X0*X5 REMOVE CURRENT MESSAGE OPTION
  6358. LX4 24
  6359. BX5 X5+X4 INSERT NEW OPTION
  6360. MX0 -12
  6361. BX7 X5
  6362. EWX7 X1 RESET REQUEST
  6363.  
  6364. * ENTER HERE TO CHECK MESSAGE LIMIT EXCEEDED (MO = 0, 3).
  6365.  
  6366. MSG7 SA1 B7+ACLW
  6367. LX1 12
  6368. AX1 48
  6369. NZ X1,MSG8 IF MESSAGE LIMIT NOT EXCEEDED
  6370. NG X1,MSG8 IF UNLIMITED USER
  6371. SX7 MLET MESSAGE LIMIT ERROR
  6372. JP SEF SET ERROR FLAG
  6373.  
  6374. MSG8 SA2 B3 RA
  6375. SX4 B5 SAVE RELATIVE FWA
  6376. ZR B6,MSG11 IF BINARY MESSAGE
  6377. SB6 B5+MCML-2
  6378. SX4 B5-1 SET MESSAGE ADDR-1
  6379. SX0 -5 PRESET MASK INDEX FOR CODED MESSAGE
  6380. SA3 MSGA
  6381.  
  6382. * DETERMINE WORD COUNT OF CODED MESSAGE.
  6383.  
  6384. MSG9 SX1 B5
  6385. IX1 X2+X1
  6386. ERX1 X1 READ NEXT WORD
  6387. SB5 B5+B1 ADVANCE MESSAGE ADDRESS
  6388. EQ B5,B6,MSG10 IF MAXIMUM MESSAGE LENGTH
  6389. GT B5,B4,CPE IF ILLEGAL ADDRESS
  6390. ZR X1,MSG10 IF EOM
  6391. BX6 X3*X1 EXTRACT LOW ORDER BITS FROM EACH BYTE
  6392. BX7 -X3*X1
  6393. IX6 X6+X3 NON-ZERO CHARACTER PAIRS PRODUCE CARRY
  6394. LX7 -11
  6395. NO
  6396. IX6 X6+X7 COMPENSATE FOR *5:* (DISPLAY CODE 4000B)
  6397. BX7 -X3*X6
  6398. BX6 -X3-X7 CHECK FOR 5 NON-ZERO BYTES
  6399. ZR X6,MSG9 IF WORD HAS NO EOM BYTE
  6400. PL X7,MSG10 IF EOM IN BYTE 0
  6401. + LX7 12
  6402. SX0 X0+B1 ADVANCE INDEX FOR EOM MASK
  6403. NG X7,* IF EOM BYTE NOT REACHED
  6404. MSG10 SB6 X4+B1 FWA
  6405. SX6 B5-B6 SET MESSAGE LENGTH
  6406. EQ MSG14 GO ISSUE MESSAGE TO DAYFILE
  6407.  
  6408. * CHECK LENGTH OF BINARY MESSAGE.
  6409.  
  6410. MSG11 PL X6,MSG13 IF MESSAGE LENGTH .GE. 0
  6411. MSG12 SX6 MBML-2 SET MAXIMUM MESSAGE LENGTH
  6412. MSG13 SB6 X6-MBML+1
  6413. PL B6,MSG12 IF INVALID MESSAGE LENGTH
  6414. SB5 B5+X6
  6415. SB6 B5+B1
  6416. GE B6,B4,CPE IF EOM BEYOND FL
  6417. SX1 B5
  6418. BX0 X0-X0 DEFINE MASK INDEX
  6419. IX1 X1+X2
  6420. ERX1 X1 READ LAST WORD
  6421. MSG14 IX4 X4+X2 ABSOLUTE FWA
  6422. SA5 RA1
  6423. MX2 1 SET *MSG* FLAG
  6424. ERX5 X5 READ REQUEST
  6425. JP DFM2 ISSUE MESSAGE TO DAYFILE
  6426.  
  6427. MSGA DATA 37773777377737773777B
  6428. MSGB BSS 1 ORIGINAL *MSG* REQUEST
  6429. PFL SPACE 4
  6430. *** *PFL*.
  6431. * SET (P) AND CHANGE FIELD LENGTH.
  6432. *
  6433. *T 18/ *PFL*,6/,18/ P,18/ FL
  6434. * P NEW (P)
  6435. * FL NEW FIELD LENGTH
  6436.  
  6437.  
  6438. PFL SX7 X4-3ROPE
  6439. SB5 X4-3RPFL
  6440. ZR X7,CLO IF *OPE*, CONVERT TO *CIO*
  6441. NZ B5,APJ IF NOT *PFL*
  6442.  
  6443. * PROCESS *PFL* REQUEST.
  6444.  
  6445. MX2 18
  6446. SA3 B2 READ EXCHANGE PACKAGE
  6447. LX2 -6
  6448. BX6 -X2*X3 CLEAR (P)
  6449. LX5 18
  6450. BX4 X2*X5 EXTRACT NEW (P)
  6451. BX5 -X2*X5 REFORMAT *PFL* REQUEST TO *RFL* REQUEST
  6452. BX6 X4+X6 MERGE NEW (P)
  6453. LX5 -18
  6454. SA6 B2 STORE EXCHANGE PACKAGE
  6455. EQ RFL
  6456. RCL SPACE 4,10
  6457. *** *RCL*.
  6458. * PLACE PROGRAM ON RECALL.
  6459. *
  6460. * ENTRY (X7) = 0.
  6461. *
  6462. *T 18/ *RCL*,1/ ,1/0,40/
  6463. * PLACE PROGRAM ON RECALL UNTIL SYSTEM RECALL DELAY HAS
  6464. * EXPIRED.
  6465. *
  6466. *T 18/ *RCL*,1/ ,1/1,22/,18/ STATUS
  6467. * PLACE PROGRAM ON RECALL UNTIL BIT 0 OF (STATUS) IS SET.
  6468. * JOBS WILL BE CHECKED FOR PENDING *RCLP* BY *MTR* PP RECALL.
  6469. *
  6470. * EXIT TO *SXR* IF *RCLP*.
  6471. * TO *SXS* IF *RCL*.
  6472. * TO *CPE* IF BAD ADDRESS ON *RCLP*.
  6473. * TO *MTRX* IF *RCLP* REQUEST COMPLETE.
  6474.  
  6475.  
  6476. * PROCESSED INLINE IN *CPR* DUE TO USAGE.
  6477. RFL SPACE 4,10
  6478. *** *RFL*.
  6479. * REQUEST FIELD LENGTH.
  6480. *
  6481. *T 18/ *RFL*,6/,18/ ADDR,1/N,17/ FL
  6482. * ADDR ADDRESS FOR STATUS RESPONSE
  6483. * N NO-REDUCE OVERRIDE
  6484. * FL FIELD LENGTH
  6485. *
  6486. * IF FL = 0, CURRENT FIELD LENGTH WILL BE RETURNED
  6487. *
  6488. * RESPONSE.
  6489. *T ADDR 12/ 0,18/ FL,30/ 1
  6490.  
  6491.  
  6492. RFL MX6 -18 EXTRACT FL
  6493. SA4 MP READ *1MA* CALL
  6494. BX2 -X6*X5
  6495. SA3 B7+DBAW CHECK IF CMM JOB STEP STATUS SET
  6496. AX5 18
  6497. SB5 X5 SET STATUS ADDRESS
  6498. LX3 59-54
  6499. BX5 X4
  6500. GT B5,B4,CPE IF ADDRESS .GE. FL
  6501. ZR X2,RFL1 IF STATUS REQUEST
  6502. NG X3,RFL2 IF CMM JOB STATUS SET
  6503. RFL1 BX5 X5+X2
  6504. ZR B5,AFL IF NO STATUS REQUEST
  6505.  
  6506. * CONVERT *RFL* TO *MEM* REQUEST.
  6507.  
  6508. LX2 30
  6509. SX5 B5
  6510. BX6 X2
  6511. LE B5,B1,CPE IF ADDRESS .LT. 2
  6512. SA2 B3+
  6513. IX2 X2+X5
  6514. EWX6 X2
  6515. EQ MEM
  6516.  
  6517. RFL2 SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
  6518. EQ APJ1 ASSIGN PP
  6519. RPV SPACE 4,10
  6520. *** *RPV.*
  6521. * REPRIEVE CENTRAL PROGRAM.
  6522. *
  6523. * THIS REQUEST IS TRAPPED IN ORDER TO FORCE AUTO RECALL.
  6524. * THIS ENSURES PROPER INTERLOCKING OF THE CONTROL POINT
  6525. * AREA WHILE ALLOWING FOR EXISTING PROGRAMS THAT MAY
  6526. * CALL *RPV* WITHOUT AUTO RECALL.
  6527.  
  6528.  
  6529. RPV EQU AAR ASSIGN *RPV* AS AUTO RECALL REQUEST
  6530. RSB SPACE 4,50
  6531. *** *RSB*.
  6532. * READ SUB-SYSTEM PROGRAM BLOCK.
  6533. *
  6534. *T 18/ *RSB*,1/ ,1/R,4/ ,6/0,12/ SID,18/ STAT
  6535. * R = 1 IF AUTO RECALL SELECTED.
  6536. * SID = SUBSYSTEM IDENTIFICATION.
  6537. * IF SID = 0, THEN BLOCK IF READ FROM CORE MEMORY OR
  6538. * RELATIVE TO CALLERS CONTROL POINT.
  6539. * STAT = ADDRESS OF STATUS WORD IN FORMAT -
  6540. *
  6541. *T STAT 12/0,12/ WC,18/ ADDR,18/ BUFF
  6542. * WC = NUMBER OF WORDS TO BE READ.
  6543. * ADDR = ADDRESS TO READ FROM IN SUB-SYSTEM.
  6544. * BUFF = ADDRESS OF BUFFER TO RECEIVE DATA.
  6545. *
  6546. *
  6547. * A BLOCK OF DATA OF LENGTH WC WHERE WC < 101B WILL BE
  6548. * TRANSFERRED FROM SUBSYSTEM WITH IDENTIFICATION SID.
  6549. * BEGINNING AT LOCATION ADDR TO A BUFFER IN THE CALLING
  6550. * PROGRAM THAT BEGINS AT LOCATION BUFF. IF ADDR IS NEGATIVE,
  6551. * THE TRANSFER WILL BE FROM THE SUBSYSTEM-S NFL.
  6552. *
  6553. *
  6554. * WHEN SID = 0, THE CONTENTS OF BUFF DETERMINE WHETHER THE
  6555. * READ IS FROM CENTRAL MEMORY RESIDENT OR IS RELATIVE TO
  6556. * THE CALLER-S CONTROL POINT. IF BIT 59 OF BUFF IS ONE,
  6557. * THE READ IS FROM CMR, AND ADDR IS THE ABSOLUTE ADDRESS
  6558. * AT WHICH TO BEGIN THE READ. IF BIT 59 OF BUFF IS ZERO,
  6559. * THEN THE READ IS RELATIVE TO THE CALLER-S CONTROL POINT
  6560. * AND IS EITHER A SELECTIVE OR A BLOCK READ.
  6561. *
  6562. *T BUFF 1/C, 23/ 0, 18/ B, 18/ CPAW
  6563. * C = 1, IF CMR READ.
  6564. * C = 0, IF CONTROL POINT READ.
  6565. * B = 0, SELECTIVE READ.
  6566. * B = 1, BLOCK READ.
  6567. * CPAW = CONTROL POINT AREA WORD TO READ.
  6568. *
  6569. * IF THE READ IS SELECTIVE, BUFF CONTAINS A LIST OF ADDRESSES
  6570. * TO READ. THE LIST TERMINATES AT WC OR WITH A ZERO ENTRY.
  6571. * THE WORD READ IS STORED IN THE BUFF LOCATION CONTAINING ITS
  6572. * ADDRESS. B CAN ONLY BE SPECIFIED IN (BUFF+0).
  6573. * IF THE READ IS A BLOCK READ, WC WORDS, BEGINNING WITH THE
  6574. * ADDRESS SUPPLIED (CPAW), ARE READ AND STORED IN BUFF.
  6575. *
  6576. *
  6577. * THE CALLING PROGRAM MUST HAVE EITHER A SSJ= ENTRY POINT OR A
  6578. * SUBSYSTEM IDENTIFICATION.
  6579. *
  6580. *
  6581. * RESPONSE
  6582. *T STAT 12/ REPLY,12/ WC,18/ ADDR,18/ BUFF
  6583. * REPLY = 4000 TRANSFER SUCCESSFULLY COMPLETED.
  6584. * 2000 SUB-SYSTEM NOT PRESENT.
  6585.  
  6586.  
  6587. RSB BSS 0 ENTRY
  6588. SA2 B7+JCIW CHECK SUBSYSTEM IDENTIFICATION
  6589. SA4 B7+SEPW CHECK FOR SSJ=
  6590. AX2 24
  6591. BX2 -X0*X2
  6592. SX2 X2-LSSI-1
  6593. LX4 59-50
  6594. BX4 -X2+X4
  6595. PL X4,APJ IF CALL CONDITIONS NOT MET
  6596. SB5 X5
  6597. LX5 -18
  6598. LE B5,B1,CPE IF *STAT* .LE. 1
  6599. GE B5,B4,CPE IF *STAT* .GE. FL
  6600. SX1 X5 (X1) = SUBSYSTEM IDENTIFICATION
  6601. SA3 B3 RA
  6602. SX4 B5 RELATIVE STATUS ADDRESS
  6603. IX3 X3+X4 RA + STAT
  6604. BX7 X3
  6605. ERX3 X3 READ (STAT)
  6606. SA7 T1 SAVE STATUS ADDRESS
  6607. SB5 X3 (B5) = *BUFF*
  6608. AX3 18
  6609. LE B5,B1,CPE IF *BUFF* .LE. 1
  6610. SX4 X3 (X4) = *ADDR*
  6611. AX3 18
  6612. SB6 B5+X3 BUFF + WC
  6613. PX5 X6 PRESET NOT PRESENT STATUS
  6614. LE B6,B5,CPE IF WC .LT. 1
  6615. GE B6,B4,CPE IF BUFF + WC .GE. FL
  6616. SB6 100B
  6617. SB4 X3 (B4) = WC
  6618. SA2 B3 RA
  6619. SX6 B5 BUFF
  6620. IX6 X2+X6
  6621. SA6 T2 SAVE BUFFER ADDRESS
  6622. GT B4,B6,CPE IF WC .GT. 100
  6623. SB3 RSB2 *RSC* RETURN ADDRESS
  6624. NZ X1,RSC IF SUB-SYSTEM READ
  6625. SA2 FLSW SET FL TO CMR SIZE
  6626. MX3 0 SET RA TO ZERO FOR LOW CORE UPDATE
  6627. BX6 -X0*X2
  6628. SA1 T2 GET BUFFER ADDRESS
  6629. ERX1 X1
  6630. LX6 6
  6631. SX6 X6+B1 SET FL TO SIZE OF CMR+1
  6632. NG X1,RSB2.1 IF LOW CORE READ
  6633. SX4 X1
  6634. LX1 59-18
  6635. SB6 -200B
  6636. SX3 B7+ SET RA TO START OF CP AREA
  6637. SX6 B1-B6 SET *FL* TO LENGTH OF CP AREA + 1
  6638. NG X1,RSB2.1 IF BLOCK READ OF CONTROL POINT AREA
  6639. LX1 18-59
  6640. MX5 1 COMPLETION STATUS
  6641.  
  6642. * SELECTIVE READ OF CONTROL POINT AREA.
  6643.  
  6644. RSB1 SX1 X1+
  6645. NG X1,CPE IF ADDRESS OUT OF RANGE
  6646. SX7 X1+B6
  6647. PL X7,CPE IF ILLEGAL CONTROL POINT AREA ADDRESS
  6648. SA4 B7+X1 READ CONTROL POINT AREA WORD
  6649. BX6 X4
  6650. SA1 T2 GET BUFFER ADDRESS
  6651. EWX6 X1
  6652. LE B4,B1,RSB3 IF TRANSFER COMPLETE
  6653. SX7 B1
  6654. IX7 X7+X1
  6655. ERX1 X7 READ NEW ADDRESS
  6656. SA7 T2 SAVE
  6657. SB4 B4-B1
  6658. NZ X1,RSB1 IF CONTINUING SELECTIVE READ
  6659. EQ RSB3
  6660.  
  6661. * RSC EXIT ADDRESSES.
  6662.  
  6663. VFD 12/RSB3-RSB2,18/CPE,12/SXS-RSB2,18/SXS
  6664.  
  6665. * READ SUBSYSTEM FL OR NFL.
  6666.  
  6667. RSB2 SA2 A2-STSW+FLSW GET NFL
  6668. AX2 48 NFL/100B
  6669. LX2 6 NFL
  6670. IX3 X3-X2 SET RA TO RA-NFL
  6671. IX4 X4+X2 BIAS *ADDR* BY NFL
  6672. IX6 X6+X2 SET FL TO FL+NFL
  6673.  
  6674. * PERFORM BLOCK READ.
  6675.  
  6676. RSB2.1 SX7 X4+B4 ADDR + WC
  6677. NG X4,CPE IF ADDR .LT. ZERO
  6678. SX4 X4
  6679. IX6 X7-X6
  6680. MX5 1 SET COMPLETION STATUS
  6681. PL X6,CPE IF ADDR + WC .GE. FL
  6682. IX0 X4+X3 FWA OF SUBSYSTEM READ
  6683. SA1 T2 BUFF
  6684. IX1 X0-X1 DIFF
  6685. SB6 RSB3 SET *MSM* *MSR* RETURN
  6686. TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
  6687.  
  6688. * RETURN COMPLETION STATUS.
  6689.  
  6690. RSB3 SA3 T1 STAT ADDRESS
  6691. ERX4 X3 READ STAT
  6692. BX6 X5+X4
  6693. MX7 0
  6694. EWX6 X3 STORE STATUS
  6695. JP MTRP EXIT TO STORE OUTPUT REGISTER
  6696. SIC SPACE 4,40
  6697. *** *SIC*.
  6698. * SEND INTER-CONTROL POINT BLOCK TO SUBSYSTEM PROGRAM.
  6699. *
  6700. * CONTROL IS ALSO TRANSFERRED HERE FOR SYSTEM CONTROL POINT
  6701. * FUNCTIONS *SSC* AND *SSF*.
  6702. *
  6703. *T 18/ *SIC*,1/ ,1/R,4/ ,18/ BUFF,18/ STAT
  6704. * R= 1 IF AUTO RECALL SELECTED.
  6705. * BUFF= ADDRESS OF BUFFER TO BE TRANSFERRED TO SUBSYSTEM.
  6706. * STAT= ADDRESS OF STATUS WORD IN FORMAT -
  6707. *
  6708. *T STAT 18/ BN,12/ SID,30/ 0
  6709. * BN = BUFFER NUMBER (0 OR 1) OF SUBSYSTEM TO TRANSFER TO.
  6710. * SID = DESTINATION SUBSYSTEM IDENTIFICATION.
  6711. *
  6712. * A BLOCK STARTING AT BUFF WILL BE TRANSFERRED TO THE INDICATED
  6713. * SUBSYSTEM. BLOCK LENGTH IS SPECIFIED IN BITS 0-17 OF THE
  6714. * FIRST WORD OF THE BLOCK (BUFF). LENGTH INCLUDES THIS FIRST
  6715. * WORD. THE LENGTH OF THE BLOCK MUST BE LESS THAN 101B WORDS.
  6716. * THE CALLER MUST BE A SUBSYSTEM OR HAVE AN SSJ= ENTRY POINT.
  6717. *
  6718. * RESPONSE.
  6719. *T STAT 18/ BN,12/ SID,30/ REPLY
  6720. * REPLY= 1 IF TRANSFER COMPLETED SUCCESSFULLY.
  6721. * 3 IF DESTINATION SUBSYSTEM IS NOT PRESENT IN THE
  6722. * SYSTEM.
  6723. * 5 IF SUBSYSTEM BUFFER IS FULL, SUBSYSTEM BEING MOVED,
  6724. * OR SUBSYSTEM JOB IS ADVANCING.
  6725. * 7 IF BLOCK LENGTH AS SPECIFIED IN THE FIRST WORD IS
  6726. * LARGER THAN THAT PERMITTED BY THE SUBSYSTEM.
  6727. * 11 IF DESTINATION BUFFER IS UNDEFINED BY SUBSYSTEM.
  6728. *
  6729. * IF AUTO-RECALL IS SELECTED AND CONDITION 5 ABOVE IS PRESENT,
  6730. * THE CALLING PROGRAM IS PLACED IN RECALL STATUS UNTIL THE
  6731. * CONDITION ENDS.
  6732.  
  6733.  
  6734. SIC SX6 X4-3RSIC
  6735. TNZ X6,(/MONITOR/SSC,SCP,/MONITOR/APJ) IF NOT SIC
  6736.  
  6737. * PROCESS *SIC* REQUEST.
  6738.  
  6739. SA2 B7+JCIW CHECK FOR SUBSYSTEM
  6740. SA4 B7+SEPW CHECK *SSJ=*
  6741. AX2 24
  6742. LX4 59-50
  6743. BX2 -X0*X2 SUBSYSTEM ID
  6744. BX4 -X4
  6745. SX2 X2-LSSI-1
  6746. SB5 X5+ SET *STAT* ADDRESS
  6747. BX2 X4*X2
  6748. LX5 -18
  6749. NG X2,APJ IF CALLER NOT SUBSYSTEM OR SSJ= PROGRAM
  6750. LE B5,B1,CPE IF *STAT* .LE. 1
  6751. GE B5,B4,CPE IF *STAT* .GE. FL
  6752. SB6 X5 SET *BUFF* ADDRESS
  6753. SA4 B3 RA
  6754. SX3 B5 STATUS ADDRESS
  6755. IX7 X3+X4
  6756. ERX3 X7 READ (STAT)
  6757. SX5 X5
  6758. SA7 T1 SAVE STATUS ADDRESS
  6759. LE B6,B1,CPE IF *BUFF* .LE. 1
  6760. GE B6,B4,CPE IF *BUFF* .GE. FL
  6761. AX3 30
  6762. BX1 -X0*X3 (X1) = SUBSYSTEM IDENTIFICATION
  6763. IX7 X4+X5
  6764. ERX4 X7 READ (BUFF)
  6765. SA7 T2
  6766. AX3 12
  6767. SB6 B6+X4 LWA + 1 OF *BUFF*
  6768. GE B6,B4,CPE IF BUFF + WC .GE. FL
  6769. SB4 X4+ WORD COUNT
  6770. LT B4,B1,CPE IF WC .LT. 1
  6771. SB5 100B
  6772. BX5 X4 SAVE FIRST WORD OF TRANSFER
  6773. SX7 B1
  6774. SB3 SIC1 *RSC* RETURN ADDRESS
  6775. BX7 X7*X3 CHECK BUFFER NUMBER
  6776. BX3 X3-X7
  6777. GT B4,B5,CPE IF WORD COUNT .GT. 100B
  6778. SX4 ICAN
  6779. ZR X3,RSC IF BUFFER NUMBER .GT. 1
  6780. EQ CPE PROCESS CALL ERROR
  6781.  
  6782. * *RSC* EXIT ADDRESSES.
  6783.  
  6784. VFD 12/SIC7-SIC1,18/CPE,12/SIC8-SIC1,18/SIC8
  6785.  
  6786. SIC1 IX1 X3-X4 BUFFER POINTER WORD ABSOLUTE ADDRESS
  6787. ERX1 X1 READ BUFFER POINTERS
  6788. SB5 X6+ (B5) = SUBSYSTEM FL
  6789. MX0 -6
  6790. NZ X7,SIC2 IF BUFFER 1
  6791. LX1 -24
  6792. SIC2 SB3 X1 BUFFER RELATIVE ADDRESS
  6793. AX1 18
  6794. ZR B3,SIC5 IF BUFFER UNDEFINED
  6795. BX1 -X0*X1
  6796. SB6 X1+B1 BUFER LENGTH
  6797. GT B4,B6,SIC6 IF BLOCK TOO LONG FOR BUFFER
  6798. SB6 B3+B4 BUFFER ADDRESS + WC
  6799. GT B6,B5,SIC7 IF BUFFER OUTSIDE OF FL
  6800. SX1 B3 BUFFER FWA
  6801. IX7 X1+X3 BUFFER ABSOLUTE ADDRESS
  6802. SA7 T3 SAVE SUBSYSTEM BUFFER ADDRESS
  6803. ERX2 X7 READ SUBSYSTEM BUFFER
  6804. NZ X2,SIC8 IF BUFFER FULL
  6805. SB4 B4-B1
  6806. SX0 B1
  6807. IX7 X7+X0 SUBSYSTEM BUFFER + 1
  6808. SA1 T2 BUFFER FWA
  6809. IX0 X1+X0 FWA TO MOVE FROM
  6810. IX1 X0-X7 DIFFERENCE OF ADDRESSES
  6811. SB6 SIC3 *MSM* *MSR* RETURN ADDRESS
  6812. TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
  6813.  
  6814. SIC3 BX7 X5 STORE FIRST WORD
  6815. SX6 B1 COMPLETION STATUS
  6816. SA4 T3
  6817. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  6818. EWX7 X4
  6819.  
  6820. * RETURN COMPLETION STATUS.
  6821.  
  6822. SIC4 SA3 T1
  6823. ERX4 X3 REREAD STATUS WORD
  6824. MX0 30
  6825. BX4 X0*X4
  6826. MX7 0
  6827. BX6 X4+X6
  6828. EWX6 X3
  6829. EQ MTRP EXIT TO CLEAR RA+1
  6830.  
  6831. * PROCESS DESTINATION BUFFER UNDEFINED BY SUBSYSTEM. (11)
  6832.  
  6833. SIC5 SX6 11B
  6834. EQ SIC4
  6835.  
  6836. * PROCESS BLOCK TOO LARGE FOR SUBSYSTEM BUFFER. (7)
  6837.  
  6838. SIC6 SX6 7
  6839. EQ SIC4
  6840.  
  6841. * PROCESS SUBSYSTEM NOT PRESENT IN SYSTEM. (3)
  6842.  
  6843. SIC7 SX6 3
  6844. EQ SIC4
  6845.  
  6846. * PROCESS SUBSYSTEM MOVING, ADVANCING OR BUFFER FULL.
  6847.  
  6848. SIC8 SA5 RA1 RA+1 ADDRESS
  6849. ERX5 X5 CHECK FOR AUTO RECALL
  6850. LX5 59-40
  6851. SX6 5
  6852. PL X5,SIC4 IF AUTO RECALL NOT SPECIFIED
  6853. EQ SXS PLACE CALLER IN AUTO RECALL
  6854. SPC SPACE 4,10
  6855. *** *SPC*.
  6856. * PROCESS SPECIAL PP REQUEST. VALID ONLY FROM SYSTEM JOB.
  6857. *
  6858. *T 18/ *SPC*, 24/, 18/ ADDR
  6859. * ADDR ADDRESS OF PPU REQUEST
  6860.  
  6861.  
  6862. SPC SA1 B7+JCIW
  6863. SB5 X5
  6864. AX1 24
  6865. LE B5,B1,CPE IF ADDRESS .LE. 1
  6866. GE B5,B4,CPE IF ADDRESS PAST FL
  6867. BX3 -X0*X1
  6868. SA4 B3 READ PP REQUEST
  6869. SX6 X5
  6870. IX2 X6+X4
  6871. ERX4 X2
  6872. BX6 X4
  6873. LX4 18
  6874. ZR X3,APJ IF NOT SYSTEM JOB
  6875. SX5 X4-3R1ZZ-1
  6876. SX4 X4-3RAAA
  6877. BX4 -X4*X5
  6878. PL X4,CPE IF ILLEGAL PROGRAM NAME
  6879. SA5 B3+B1 CLEAR (RA+1)
  6880. EWX7 X5
  6881. SB6 SPC1 *CAL* RETURN ADDRESS - NO LIMIT
  6882. BX5 X2 SAVE ADDRESS OF REQUEST
  6883. SB3 MTRX *CAL* RETURN ADDRESS - ACTIVITY LIMIT
  6884. EQ CAL CHECK ACTIVITY LIMIT
  6885.  
  6886. SPC1 EWX7 X5 CLEAR REQUEST WORD
  6887. SB4 B0 SET LIBRARY SEARCH NEEDED
  6888. SA7 APQA
  6889. LX6 18
  6890. SX4 X6-3RCIO
  6891. LX6 -18
  6892. TNZ X4,(/DCP/APQ,DCPC,/MONITOR/APQ) IF NOT *CIO*
  6893. SA6 /CPUCIO/IR
  6894. SA7 /CPUCIO/MB
  6895. EQ /CPUCIO/CPC PROCESS *CIO* REQUEST
  6896. TIM SPACE 4,45
  6897. *** *TIM*.
  6898. * REQUEST SYSTEM TIME.
  6899. *
  6900. *T 18/ *TIM*,6/,12/ OP,6/,18/ ADDR
  6901. * OP TIME OPTION
  6902. * ADDR ADDRESS FOR RESPONSE
  6903. *
  6904. *
  6905. * OP RESPONSE
  6906. *
  6907. * 0 ACCUMULATED CPU TIME
  6908. *T ADDR 3/2,45/ SECONDS,12/ MILISEC.
  6909. *
  6910. * 1 DATE
  6911. *T ADDR 60/ * YY/MM/DD.*
  6912. *
  6913. * 2 CLOCK
  6914. *T ADDR 60/ * HH.MM.SS.*
  6915. *
  6916. * 3 JULIAN DATE
  6917. *T ADDR 24/ 0,36/ * YYDDD*
  6918. *
  6919. * 4 SCOPE FORMAT REAL TIME
  6920. *T ADDR 24/0, 36/ SECONDS*4096
  6921. *
  6922. * 5 REAL TIME
  6923. *T ADDR 24/ SECONDS,36/ MILLISECONDS
  6924. *
  6925. * 6 PACKED DATE/TIME
  6926. *T ADDR 24/ 0,6/ Y-70,6/ MM,6/ DD,6/ HH,6/ MM,6/ SS
  6927. *
  6928. * 7 ACCUMULATED SRUS
  6929. *T ADDR 12/ 2000B,12/ 0,36/ MILLI-UNITS
  6930. *
  6931. * 11 ACCUMULATED CYBER 176 CPU CLOCK CYCLE COUNT FOR JOB.
  6932. *T ADDR 12/ TYPE,48/ CLOCK CYCLE COUNT
  6933. * TYPE = 2000B, IF CLOCK CYCLE COUNT IS AVAILABLE.
  6934. * TYPE = 6000B, IF CLOCK CYCLE COUNT IS NOT AVAILABLE.
  6935. *
  6936. * 12 ACCUMULATED CYBER 176 CPU CLOCK CYCLE COUNT SINCE
  6937. * DEADSTART.
  6938. *T ADDR 12/ TYPE,48/ CLOCK CYCLE COUNT
  6939. * TYPE = 2000B, IF CLOCK CYCLE COUNT IS AVAILABLE.
  6940. * TYPE = 6000B, IF CLOCK CYCLE COUNT IS NOT AVAILABLE.
  6941. *
  6942. * 13 DATE WITH 4-DIGIT YEAR
  6943. *T ADDR 60/ *YYYY/MM/DD*
  6944. *
  6945. * 14 JULIAN DATE WITH 4-DIGIT YEAR
  6946. *T ADDR 18/ 0,42/ *YYYYDDD*
  6947. *
  6948. * 15 JULIAN DATE WITH *ISO* CENTURY CHARACTER
  6949. *T ADDR 24/ 0,36/ *CYYDDD*
  6950. * C = * * FOR 19YY YEARS, *0* FOR 20YY YEARS.
  6951.  
  6952.  
  6953. TIM SB5 X5 CHECK RESPONSE ADDRESS
  6954. LE B5,B1,CPE IF ILLEGAL ADDRESS
  6955. AX5 24
  6956. GE B5,B4,CPE IF ADDRESS OUT OF RANGE
  6957. BX4 -X0*X5 SET OPTION
  6958. SB6 X4-TTIML
  6959. PL B6,TTIM IF UNIDENTIFIED, ASSUME 0
  6960. JP TTIM+TTIML+B6
  6961.  
  6962. TTIM BSS 0
  6963.  
  6964. * OPTION 0 - ACCUMLATED CPU TIME.
  6965.  
  6966. + SB3 TIM3 UPDATE CPU TIME
  6967. TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
  6968. ,/CPT)
  6969.  
  6970. * OPTION 1 - DATE.
  6971.  
  6972. + SA1 DTEL DATE
  6973. EQ TIM1
  6974.  
  6975. * OPTION 2 - CLOCK.
  6976.  
  6977. + SA1 TIML CLOCK
  6978. EQ TIM1
  6979.  
  6980. * OPTION 3 - JULIAN DATE.
  6981.  
  6982. + SA1 JDAL JULIAN DATE
  6983. JP TIM1
  6984.  
  6985. * OPTION 4 - SCOPE FORMAT REAL TIME.
  6986.  
  6987. + SA1 RTCL REAL TIME CLOCK
  6988. JP TIM2
  6989.  
  6990. * OPTION 5 - REAL TIME.
  6991.  
  6992. + SA1 RTCL REAL TIME CLOCK
  6993. EQ TIM1
  6994.  
  6995. * OPTION 6 - PACKED DATE/TIME.
  6996.  
  6997. + SA1 PDTL PACKED DATE
  6998. EQ TIM1
  6999.  
  7000. * OPTION 7 - ACCUMULATED SRUS.
  7001.  
  7002. + SB3 TIM5 UPDATE CPU TIME AND SRU ACCUMULATOR
  7003. TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
  7004. ,/CPT)
  7005.  
  7006. * OPTION 10 - UNIDENTIFIED OPTION.
  7007.  
  7008. + EQ TTIM+0 UNIDENTIFIED OPTION, ASSUME OPTION = 0
  7009.  
  7010. * OPTION 11 - ACCUMULATED CLOCK CYCLE COUNT FOR JOB.
  7011.  
  7012. + SB3 TIM7 ACCUMULATED JOB CLOCK CYCLE COUNT
  7013. TEQ (/MONITOR/CP76,CP176,/MONITOR/TIM6)
  7014.  
  7015. * OPTION 12 - ACCUMULATED CLOCK CYCLE COUNT SINCE DEADSTART.
  7016.  
  7017. + SB3 TIM8 *CPT* RETURN ADDRESS
  7018. TEQ (/MONITOR/CP76,CP176,/MONITOR/TIM6) COMPUTE CP TIME
  7019.  
  7020. * OPTION 13 - DATE WITH 4-DIGIT YEAR.
  7021.  
  7022. + SA1 DTEL DATE
  7023. EQ TIM12 EXPAND TO 4-DIGIT YEAR
  7024.  
  7025. * OPTION 14 - JULIAN DATE WITH 4-DIGIT YEAR.
  7026.  
  7027. + SA1 JDAL JULIAN DATE
  7028. JP TIM14 EXPAND TO 4-DIGIT YEAR
  7029.  
  7030. * OPTION 15 - JULIAN DATE WITH *ISO* CENTURY CHARACTER.
  7031.  
  7032. + SA1 JDAL JULIAN DATE
  7033. JP TIM10 ADD *ISO* CENTURY CHARACTER
  7034.  
  7035. TTIML EQU *-TTIM
  7036.  
  7037. TIM1 SA2 RA1 RA+1
  7038. SX7 B5-B1 REQUEST ADDRESS-1
  7039. BX6 X1 STORE REQUEST
  7040. IX3 X2+X7
  7041. BX7 X7-X7
  7042. EWX6 X3 STORE VALUE REQUESTED
  7043. EWX7 X2 CLEAR RA+1
  7044. EQ MTRX EXIT
  7045.  
  7046. * CONVERT REAL TIME (SCOPE FORMAT).
  7047.  
  7048. TIM2 MX2 -36 EXTRACT MILLISECONDS
  7049. SA3 TH+1 =1000.P
  7050. BX6 -X2*X1
  7051. NX2 X3 NORMALIZE DIVISOR
  7052. LX6 12 MILLISECONDS*4096
  7053. PX7 X6
  7054. FX3 X7/X2 MILLISECONDS*4096/1000.P
  7055. UX6 X3,B4 UNPACK RESULT
  7056. LX1 X6,B4
  7057. EQ TIM1 STORE RESULT
  7058.  
  7059. * CONVERT CPU/REAL TIME.
  7060.  
  7061. TIM3 SB4 TIM4 SET *DSB* RETURN ADDRESS
  7062. SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
  7063. EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
  7064.  
  7065. TIM4 SA2 TH =.001P48+1
  7066. PX1 X6
  7067. DX6 X2*X1 EXTRACT MILLISECONDS
  7068. FX7 X2*X1 EXTRACT SECONDS
  7069. SA3 TH+1 =1000.P
  7070. UX5 X7
  7071. FX4 X3*X6 SCALE MILLISECONDS
  7072. LX5 12 MERGE MILLISECONDS, SECONDS
  7073. BX1 X5+X4
  7074. EQ TIM1
  7075.  
  7076. * SCALE SRUS TO MILLI-UNITS.
  7077.  
  7078. TIM5 SA2 TTH =.0001P48+1
  7079. SA1 B7+SRUW SRU ACCUMULATOR
  7080. MX7 -42
  7081. BX7 -X7*X1
  7082. PX1 X7
  7083. FX1 X2*X1 SCALE
  7084. EQ TIM1 STORE REQUEST
  7085.  
  7086. * CYBER 176 CPU CLOCK COUNT UNAVAILABLE.
  7087.  
  7088. TIM6 MX1 2 INDICATE CLOCK COUNT UNAVAILABLE
  7089. SB3 A5-B1 RESET (B3)
  7090. EQ TIM1 STORE RESULT
  7091.  
  7092. * ADD *ISO* CENTURY CHARACTER TO *JDATE*.
  7093.  
  7094. TIM10 LX1 30
  7095. BX1 X0*X1
  7096. SX6 1R SPACE MARKS YEAR AS 19YY
  7097. NG X1,TIM11 IF YEAR IS 50 OR GREATER
  7098. SX6 1R0 ZERO MARKS YEAR AS 20YY
  7099. TIM11 BX1 X1+X6
  7100. LX1 30
  7101. EQ TIM1 STORE RESULT
  7102.  
  7103. * EXPAND *DATE* FROM * YY/MM/DD.* TO *YYYY/MM/DD*.
  7104.  
  7105. TIM12 LX1 6
  7106. BX1 X0*X1
  7107. SX6 2R19
  7108. NG X1,TIM13 IF YEAR IS 50 OR GREATER
  7109. SX6 2R20
  7110. TIM13 BX1 X1+X6
  7111. LX1 48
  7112. EQ TIM1 STORE RESULT
  7113.  
  7114. * EXPAND *JDATE* FROM *YYDDD* TO *YYYYDDD*.
  7115.  
  7116. TIM14 LX1 30
  7117. BX1 X0*X1
  7118. SX6 2R19
  7119. NG X1,TIM15 IF YEAR IS 50 OR GREATER
  7120. SX6 2R20
  7121. TIM15 BX1 X1+X6
  7122. LX1 30
  7123. EQ TIM1 STORE RESULT
  7124. WCL SPACE 4,15
  7125. *** *WCL*.
  7126. * PLACE PROGRAM ON TIMED RECALL.
  7127. *
  7128. * ENTRY (X7) = 0.
  7129. *
  7130. *T 18/ *WCL*,30/0,12/ DELAY
  7131. * PLACE PROGRAM ON RECALL UNTIL *DELAY* MILLISECONDS
  7132. * HAVE EXPIRED.
  7133. *
  7134. * *DELAY* MUST BE IN THE RANGE OF 10D TO 4095D
  7135. * MILLISECONDS. A VALUE .LT. 10D DEFAULTS TO 10D AND
  7136. * A VALUE .GT. 4095D DEFAULTS TO 4095D. ONLY JOBS
  7137. * WITH *SYOT* OR *SSJ=* ARE ALLOWED TO SPECIFY A VALUE
  7138. * OF *DELAY* THAT IS LESS THAN THE SYSTEM DEFAULT.
  7139.  
  7140.  
  7141. WCL MX0 -18 VALIDATE *DELAY*
  7142. BX3 -X0*X5
  7143. SX1 4095D
  7144. SX4 B1 CLEAR RA+1
  7145. IX2 X2+X4
  7146. EWX7 X2
  7147. IX2 X3-X1 CHECK FOR *DELAY* ABOVE UPPER LIMIT
  7148. MX0 -12
  7149. NG X2,WCL1 IF .LT. UPPER LIMIT
  7150. SX3 X1 SET UPPER LIMIT
  7151. WCL1 SX2 X3-10D CHECK FOR *DELAY* .LT. LOWER LIMIT
  7152. PL X2,WCL2 IF .GT. LOWER LIMIT
  7153. SX3 10D SET LOWER LIMIT
  7154.  
  7155. * VALIDATE CALLER IF *DELAY* .LT. SYSTEM DEFAULT.
  7156.  
  7157. WCL2 SA1 MSCL GET SYSTEM DEFAULT RECALL DELAY
  7158. LX1 24
  7159. BX1 -X0*X1
  7160. IX2 X3-X1
  7161. PL X2,WCL3 IF *DELAY* .GE. SYSTEM DEFAULT
  7162. SA2 B7+SEPW GET SPECIAL ENTRY POINT WORD
  7163. LX2 59-50
  7164. NG X2,WCL3 IF *SSJ=* JOB
  7165. SA2 B7+JOTW CHECK JOB ORIGIN TYPE
  7166. AX2 12
  7167. BX2 -X0*X2
  7168. ERRNG SYOT CODE DEPENDS ON VALUE
  7169. ZR X2,WCL3 IF SYSTEM ORIGIN
  7170. SX3 X1+ SET DELAY TO SYSTEM DEFAULT
  7171. WCL3 SA1 RTCL GET CURRENT TIME
  7172. MX0 -36
  7173. BX1 -X0*X1
  7174. SX0 PTMF SET RECALL CRITERION
  7175. IX1 X1+X3
  7176. LX0 36
  7177. BX0 X0+X1
  7178. EQ SXR SET *X* STATUS WITH RECALL CRITERION
  7179. XJR SPACE 4,15
  7180. *** *XJR*
  7181. * PROCESS EXCHANGE JUMP REQUEST.
  7182. *
  7183. * ENTRY
  7184. *
  7185. *T 18/ *XJR*,6/,12/ FN,6/,18/ ADDR
  7186. * FN FUNCTION CODE
  7187. * ADDR ADDRESS OF EXCHANGE PACKAGE.
  7188. * FN 0 = START JOB WITH EXCHANGE PACKAGE AT *ADDR*.
  7189. * 1 = SAVE CURRENT PACKAGE AT *ADDR*.
  7190.  
  7191.  
  7192. XJR SB5 X5 EXTRACT ADDRESS
  7193. LX5 -24
  7194. SB6 B5+20B
  7195. LE B5,B1,CPE IF ILLEGAL ADDRESS
  7196. SA1 XJRA
  7197. GE B6,B4,CPE IF ILLEGAL ADDRESS
  7198. GE B5,B4,CPE IF ILLEGAL ADDRESS
  7199. BX6 -X0*X5
  7200. AX2 X6,B1
  7201. NZ X2,CPE IF ILLEGAL FUNCTION
  7202. SA3 B3+B1
  7203. MX4 -36
  7204. EWX7 X3 CLEAR (RA+1)
  7205. ZR X6,XJR2 IF FUNCTION 0
  7206.  
  7207. * SAVE EXCHANGE PACKAGE FUNCTION 1.
  7208.  
  7209. SA2 B2 FIRST WORD OF EXCHANGE PACKAGE
  7210. UX1 X1 UNPACK REGISTER REPLACE BITS
  7211. SX0 B2 CONTROL POINT ADDRESS
  7212. SX6 B1
  7213. IX3 X3-X6 RA
  7214. SX7 B5 RELATIVE ADDRESS OF XP
  7215. IX7 X3+X7 ABS ADDRESS
  7216. IX7 X0-X7 DIFFERENCE OF MOVE
  7217. XJR1 BX6 X2
  7218. LX1 1
  7219. IX2 X0-X7
  7220. EWX6 X2 STORE EXCHANGE PACKAGE
  7221. SX2 B1+
  7222. IX0 X0+X2
  7223. ERX2 X0 READ NEXT WORD TO MOVE
  7224. PL X1,XJR1 IF FULL WORD TO MOVE
  7225. SB6 X1
  7226. IX3 X0-X7
  7227. ERX3 X3 READ EXCHANGE PACKAGE
  7228. NG B6,XJR3 IF END OF COPY
  7229. BX2 -X4*X2 REPLACE REGISTERS
  7230. BX3 X4*X3
  7231. IX2 X3+X2
  7232. EQ XJR1 CONTINUE REGISTER COPY
  7233.  
  7234. * STORE EXCHANGE PACKAGE - FUNCTION 0.
  7235.  
  7236. XJR2 SA2 B3 RA
  7237. SX0 B5 RELATIVE ADDRESS
  7238. IX0 X0+X2 ABS ADDRESS
  7239. SX2 B2 CONTROL POINT ADDRESS
  7240. IX7 X0-X2 DIFFERENCE OF MOVE
  7241. ERX2 X0 READ FIRST WORD
  7242. EQ XJR1 COPY EXCHANGE PACKAGE
  7243.  
  7244.  
  7245. XJR3 SX7 B0
  7246. MX0 -12
  7247. EQ MTRX EXIT MONITOR
  7248.  
  7249.  
  7250. XJRA CON 37600200000000000002B BIT SET FOR REGISTER REPLACE
  7251. TITLE PPU MONITOR REQUEST PROCESSOR.
  7252. ** PMN - PPU MONITOR REQUEST PROCESSOR.
  7253. *
  7254. * ENTRY (X0) = REQUEST.
  7255. *
  7256. * ENTERED AT *PMN1* FROM */ISD/PMR*.
  7257. * ENTERED AT *PMN4* FROM */ISD/PMR* AND */DCP/PCX*.
  7258.  
  7259.  
  7260. PMN RC X5 READ CPU CLOCK IF 180 MACHINE
  7261. SX7 B0+
  7262. PX6 B0,X5 PRESET AS RA+1 PROCESS
  7263. SA7 PPXL CLEAR *PP EXCHANGE PENDING*
  7264. SA6 CL+CMST+A0 SET CALL TYPE AND BASE TIME
  7265. TNO /CME/RTC,CME UPDATE REAL TIME CLOCK FROM CPU CLOCK
  7266.  
  7267. * ENTRY FROM /ISD/MNR.
  7268.  
  7269. PMN1 NZ X0,PMN2 IF NOT *CCPF* REQUEST
  7270. ERRNZ CCPF CODE DEPENDS ON VALUE
  7271.  
  7272. * PROCESS *CCPF* FUNCTION - RA+1 CALL DETECTED BY *MTR*.
  7273.  
  7274. SA1 CPAL+A0 SET ACTIVE CP ADDRESS
  7275. AX1 24
  7276. SA2 B2+B1 CHECK ACTIVE RA
  7277. AX2 36
  7278. SB7 X1
  7279. ZR X2,MTRX IF RA=0, EXIT
  7280. TA5 20B,SP SET DUMMY RA
  7281. BX6 X2 RA ADDRESS
  7282. SX7 B1
  7283. IX7 X2+X7 RA+1 ADDRESS
  7284. ERX5 X7 READ (RA+1)
  7285. SA7 RA1 STORE RA+1
  7286. SA6 A7-B1 STORE RA
  7287. SB3 A7-B1 RA
  7288. NZ X5,CPR PROCESS CPU REQUEST IF PRESENT
  7289. EQ MTRX EXIT
  7290.  
  7291. * OTHER REQUESTS.
  7292.  
  7293. PMN2 SX1 X0-MXPF
  7294. PL X1,PMN4 IF PPU REQUEST
  7295. SA3 TPMN-1+X0 SET REQUEST PROCESSOR
  7296. SX7 X0+2000B SET FUNCTION
  7297. LX7 48
  7298. BX6 X7+X5
  7299. SA6 CL+CMST+A0 SET FUNCTION AND BASE TIME
  7300. MX7 24
  7301. BX2 -X7*X0
  7302. AX2 24
  7303. SB6 X3
  7304. SB7 X2 SET CP ADDRESS/PARAMETER
  7305. BX7 X7-X7
  7306.  
  7307. * EXIT TO PROCESSOR WITH-
  7308. * (X0) = REQUEST.
  7309. * (X2) = CP ADDRESS/PARAMETER.
  7310. * (X7) = 0.
  7311. * (B6) = PROCESSOR ADDRESS.
  7312. * (B7) = CP ADDRESS/PARAMETER.
  7313.  
  7314. TJP (/PROBE/PMN,PROBE,B6) PROCESS REQUEST
  7315.  
  7316. * PROCESS PPU REQUEST.
  7317. * ENTRY FROM */ISD/MNR* AND */DCP/PCX*.
  7318. * (X0) = OUTPUT REGISTER ADDRESS.
  7319. * (X5) = MONITOR MODE ENTRY TIME IF 180 MACHINE.
  7320.  
  7321. PMN4 BX3 X5 SET START TIME FOR *PPR*
  7322. SA5 X0+ READ OUTPUT REGISTER
  7323. UX1,B4 X5 UNPACK FUNCTION CODE AND PARAMETERS
  7324. SB4 B4+1777B
  7325. EQ PPR0.1 PROCESS PPU REQUEST
  7326. CSWF SPACE 4,10
  7327. ** CSWF - SWITCH CPU.
  7328. *
  7329. * ENTRY
  7330. *T, X0 42/,18/ CSWF
  7331. *
  7332. * EXIT TO *BNJ1* IF CPU TO BE SWITCHED.
  7333.  
  7334.  
  7335. PMN CSWF
  7336.  
  7337. SA1 TSCL+A0
  7338. SA2 RTCL
  7339. SA3 CSWL+A0
  7340. MX6 -36
  7341. BX1 -X6*X1
  7342. BX2 -X6*X2
  7343. NG X3,BNJ1 IF CPU SWITCH REQUESTED
  7344. IX2 X2-X1
  7345. PL X2,BNJ1 IF RECALL SLICE EXPIRED
  7346. EQ MTRX EXIT
  7347. ARTF SPACE 4
  7348. ** ARTF - ADVANCE RUNNING TIME.
  7349. *
  7350. * ENTRY
  7351. *T X0 42/,18/ ARTF
  7352. *
  7353. * EXIT NONE.
  7354.  
  7355.  
  7356. PMN ARTF
  7357.  
  7358. ART SB3 ART1 SET *CPT* RETURN ADDRESS
  7359. SB6 B0+
  7360. TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
  7361. ,/CPT)
  7362.  
  7363. ART1 SA3 RTCL
  7364. SA2 JSCL
  7365. MX7 -24
  7366. SB4 MTRX
  7367. AX3 36
  7368. BX2 -X7*X2
  7369. SB6 B2
  7370. SB7 X1+
  7371. IX4 X3-X2
  7372. AX1 18
  7373. NG X4,ART3 IF NOT TIME TO CALL *1SJ*
  7374. SB4 SJS
  7375. ART3 ZR X1,CJS IF USER JOB EXECUTING
  7376. JP B4
  7377. CSTF SPACE 4,10
  7378. ** CSLF - CHECK SUBCP TIME LIMIT.
  7379. *
  7380. * ENTRY
  7381. *T,X0 42/,18/ CSLF.
  7382. *
  7383. * EXIT NONE.
  7384.  
  7385.  
  7386. PMN CSLF
  7387.  
  7388. SA1 ACPL+A0
  7389. MX7 -36
  7390. BX1 -X7*X1
  7391. ZR X1,MTRX IF NO SUBCP
  7392. SA3 RTCL
  7393. BX3 -X7*X3
  7394. IX3 X3-X1
  7395. NG X3,MTRX IF NO TIME LIMIT
  7396. SA1 CPAL+A0 SET ACTIVE CP ADDRESS
  7397. SX7 TLET TIME LIMIT
  7398. AX1 24
  7399. SB7 X1 SET CPA ADDRESS
  7400. EQ SEF SET ERROR FLAG
  7401. EPRF SPACE 4,10
  7402. ** EPRF - ENTER PROGRAM MODE REQUEST.
  7403. *
  7404. * ENTRY
  7405. *T, X0 24/,12/ PR,6/,18/ EPRF
  7406. * PR PROGRAM MODE REQUEST NUMBER AS DEFINED IN COMSMTR.
  7407. *
  7408. * EXIT REQUEST BIT SET IN *PR*.
  7409.  
  7410.  
  7411. PMN EPRF
  7412.  
  7413. TZR B7,(/MONITOR/EPR1,SMXF,/MONITOR/EPR3) IF *MSTF*
  7414. ERRNZ MSTF
  7415. PX0 X7 POSITION REQUEST BIT
  7416. AX0 X0,B7
  7417. SB3 B7-MECF
  7418. NZ B3,EPR IF NOT *MECF*
  7419. TSX6 (EEMC-1+300B,ESM170,EEMC-1+100B)
  7420. TX2 MECS SET MAXIMUM MEMORY
  7421. TLX2 (6,ESM170,0)
  7422. TX1 MECNF
  7423. BX2 X1+X2
  7424. LX2 3
  7425. TEQ (/MONITOR/EPR2,SMXF,/MONITOR/EPR3) PROCESS *MECF*
  7426.  
  7427. * MODIFY STORAGE MOVE EXCHANGE PACKAGE IF EXTERNAL
  7428. * USER ECS IS DEFINED ON AN 865/875 MAINFRAME.
  7429. * FOR *MSTF*, CM COPY FLAG SET AND FLE = MACHINE CM FL.
  7430. * FOR *MECF*, CM COPY FLAG CLEAR AND FLE = MACHINE ECS FL.
  7431.  
  7432. EPR1 TSX6 (EEMC-1+700B,ESM170,EEMC-1+500B)
  7433. TX2 MCMS SET MAXIMUM MEMORY
  7434. EPR2 TLX2 (36-18,ESM170,36+6-18)
  7435. SX1 SMIN SET XP A5 = *SMIN*
  7436. LX6 48
  7437. BX7 X1+X2
  7438. SA6 SMPXP+3
  7439. LX7 18
  7440. SA7 SMPXP+5
  7441. EPR3 SB3 EPR4 SET RETURN ADDRESS
  7442. SX7 B7+1 SAVE REQUEST
  7443. SA7 SMPR
  7444. EQ SCA CONVERT CP/PCP ADDRESS
  7445.  
  7446. EPR4 SA2 A2 REREAD *SMRL*
  7447. SX6 B7
  7448. SA6 SMPXP+7 SET CP/PCP ADDRESS IN MOVE XP
  7449. BX7 X2
  7450. MX0 -12
  7451. AX2 24 POSITION BLOCK MOVE STATUS
  7452. SX5 X7
  7453. BX6 -X0*X2 EXTRACT HOLE POINT NUMBER
  7454. AX7 48
  7455. SA6 TSMA
  7456. ZR X6,EPR6 IF NOT FIELD LENGTH SWAP
  7457. MX7 -24
  7458. AX5 12
  7459. LX6 1
  7460. TB5 X5,MCT MCT BASE ADDRESS
  7461. SA3 B5+X6 READ HOLE POINT MCT ENTRY
  7462. SX6 B1
  7463. BX7 -X7*X3 HOLE
  7464. TA3 DMMS,SDA
  7465. SA7 TSMB SAVE PRE-MOVE HOLE SIZE
  7466. SB3 EPR5 SET *SCA* RETURN ADDRESS
  7467. IX6 X3+X6 INCREMENT DIRECT MOVE COUNT
  7468. LX5 1
  7469. ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
  7470. SA6 A3
  7471. SX2 X2
  7472. SB6 X5+FLSW SET FL CONTROL WORD ADDRESS
  7473. SA3 B6+B7
  7474. AX3 12 POSITION RA/RAX
  7475. SX5 X3
  7476. EQ SCP SET CP/PCP ADDRESS OF HOLE
  7477.  
  7478. EPR5 SA4 B6+B7 CALCULATE FWA OF HOLE
  7479. AX3 48-12
  7480. BX1 -X0*X4 EXTRACT FL/FLX
  7481. AX4 12
  7482. IX3 X5-X3 RA/RAX - NFL OF REQUESTOR
  7483. SX4 X4
  7484. IX4 X4+X1 HOLE BEGINS AT RA/RAX + FL/FLX
  7485. IX7 X4-X3
  7486. EPR6 SA7 SMIN SAVE MOVE INCREMENT
  7487. TB7 SCA
  7488. SB6 SMPXP STORAGE MOVE EXCHANGE PACKAGE
  7489. SB3 MTRX *RCC* RETURN ADDRESS
  7490. EQ RCC RECALL CPU
  7491. RCLF SPACE 4,15
  7492. ** RCLF - RECALL CPU FOR SPECIFIED CONTROL POINT.
  7493. *
  7494. * NOTE ANY ADDITIONAL PROGRAMS IN *X* STATUS RECALL WHOSE
  7495. * TIME HAS EXPIRED AND WHICH DIRECTLY FOLLOW THE
  7496. * REQUESTED CONTROL POINT WILL ALSO BE RECALLED.
  7497. *
  7498. * ENTRY
  7499. *T X0 24/,12/ CPA,6/,18/RCLF
  7500. * CPA = CONTROL POINT ADDRESS.
  7501.  
  7502.  
  7503. PMN RCLF
  7504.  
  7505.  
  7506. RCL SA1 B7+CWQW CHECK RECALL STATUS
  7507. SA5 B7+CRCW GET *X* STATUS *RQ* LINK
  7508. SB3 RCL1 SET *RCC* RETURN ADDRESS
  7509. SB6 B7 SET EXCHANGE PACKAGE ADDRESS
  7510. LX1 59-46
  7511. PL X1,RCC IF TO RECALL JOB
  7512. EQ MTRX EXIT
  7513.  
  7514. RCL1 MX0 -7
  7515. BX1 -X0*X5
  7516. SA3 RTCL
  7517. SX2 X1-CRCW
  7518. NZ X2,MTRX IF NO LINK TO *RQ* ENTRY
  7519. SA4 MSCL
  7520. MX0 -12
  7521. LX4 12
  7522. BX1 -X0*X5 EXTRACT ADDRESS OF NEXT RECALL ENTRY
  7523. BX6 -X0*X4 EXTRACT RECALL DELAY REDUCTION LIMIT
  7524. SX4 7600B
  7525. SA2 X1
  7526. MX0 -36
  7527. BX3 -X0*X3 EXTRACT REAL TIME
  7528. AX2 12
  7529. IX3 X3+X6 REAL TIME + DELAY REDUCTION LIMIT
  7530. BX6 -X0*X2 EXTRACT RECALL TIME
  7531. BX1 X4*X5 EXTRACT CP ADDRESS
  7532. IX6 X3-X6 ADJUSTED REAL TIME - RECALL TIME
  7533. NG X6,MTRX IF TIME NOT EXPIRED
  7534. SB7 X1+
  7535. EQ RCL LOOP TO RECALL NEXT JOB
  7536. MFLF SPACE 4,15
  7537. ** MFLF - MODIFY FL.
  7538. *
  7539. * ENTRY
  7540. *T, X0 12/ MI, 6/ FL, 6/ ST, 12/ PN, 12/, 12/ MFLF
  7541. * MI MEMORY INCREMENT.
  7542. * FL FL SELECTION.
  7543. * 0 = NFL CHANGE.
  7544. * 4 = FL CHANGE.
  7545. * 10 = MACHINE FL CHANGE (*MABL*, *ACML*, LAST CP MCT).
  7546. * 11 = MACHINE FL CHANGE (LAST CP MCT ONLY)
  7547. * ST STORAGE MEDIUM.
  7548. * 0 = CM TYPE.
  7549. * 1 = XM TYPE.
  7550. * PN CP/PCP NUMBER.
  7551.  
  7552.  
  7553. PMN MFLF
  7554.  
  7555. BX6 X0
  7556. LX6 59-39
  7557. NG X6,MFL3 IF MACHINE FL CHANGE
  7558. SB4 MFL1 SET RETURN FROM *CPA*
  7559. SX3 77B
  7560. SB3 CPA SET RETURN FROM *SCP*
  7561. EQ SCP SET CP/PCP ADDRESS
  7562.  
  7563. MFL1 AX2 36 POSITION PARAMETERS
  7564. AX0 48
  7565. SA1 ACML GET AVAILABLE FL WORD
  7566. SB5 B1+
  7567. BX7 -X0
  7568. BX3 X3*X2 EXTRACT STORAGE MEDIUM
  7569. LX7 12 POSITION INCREMENT FOR XM UPDATE
  7570. NZ X3,MFL2 IF XM
  7571. LX7 24 POSITION INCREMENT FOR CM UPDATE
  7572. MFL2 IX7 X1+X7 UPDATE AVAILABLE CM/XM
  7573. SA7 A1
  7574. TNZ X3,(/UEC/MFX,UEC,/MONITOR/HNG) IF XM
  7575. MX5 -12
  7576. BX1 -X5*X2 EXTRACT TYPE OF FL
  7577. LX0 6
  7578. AX1 6
  7579. NZ X1,SFL1 IF NOT NFL CHANGE
  7580. SA2 B7+FLSW
  7581. LX0 48-6 POSITION INCREMENT FOR *FLSW*
  7582. SA1 A2+B1
  7583. IX7 X2+X0 ADJUST NFL
  7584. LX0 12+12
  7585. TA3 X6,MCT READ MCT ENTRY
  7586. IX1 X1+X0
  7587. AX3 48-1 INDEX TO BACKWARD LINK
  7588. LX0 12
  7589. IX6 X1-X0 ADJUST RA - NFL
  7590. SA7 A2
  7591. LX0 -24 POSITION INCREMENT FOR MCT
  7592. AX7 12
  7593. SA6 A1 UPDATE *FLSW* + 1
  7594. TA3 X3,MCT
  7595. SB4 MTRX SET RETURN FROM *CRA*
  7596. IX6 X3-X0 ADJUST UNASSIGNED CM BELOW CP/PCP
  7597. SA6 A3
  7598. NG X0,CRA6 IF NFL DECREASE
  7599. MX3 -24
  7600. BX3 -X3*X7 RA/100
  7601. BX1 -X5*X0 INCREMENT / 100
  7602. AX7 36
  7603. LX1 6 INCREMENT (AMOUNT TO CLEAR)
  7604. BX2 -X5*X7 NFL/100
  7605. IX2 X3-X2
  7606. LX2 6 FWA OF NFL
  7607. SB3 CRA6 SET RETURN FROM *CSM*
  7608. TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
  7609.  
  7610. * PROCESS CHANGE IN MACHINE FL (SPECIAL *VER* REQUEST).
  7611.  
  7612. MFL3 BX2 X0 GET MEMORY INCREMENT/DECREMENT
  7613. AX2 48
  7614. BX2 -X2
  7615. LX6 59-36-59+39
  7616. NG X6,MFL4 IF *MABL*/*ACML* NOT TO BE UPDATED
  7617. SA1 MABL ADJUST MACHINE FL
  7618. LX2 12
  7619. IX6 X1+X2
  7620. SA6 A1+
  7621. LX2 24
  7622. SA1 ACML ADJUST AVAILABLE CM
  7623. IX6 X1+X2
  7624. SA6 A1+
  7625. SX2 B0+ CLEAR UNASSIGNED MEMORY AT LAST CP
  7626. MFL4 TX6 -1,SC GET MCT INDEX FOR LAST CP
  7627. LX6 1
  7628. TA1 X6,MCT CHANGE UNASSIGNED MEMORY VALUE FOR LAST CP
  7629. MX6 48
  7630. BX1 X6*X1
  7631. BX2 -X6*X2
  7632. BX6 X1+X2
  7633. SA6 A1+
  7634. EQ MTRX EXIT
  7635. MRAF SPACE 4,10
  7636. ** MRAF - MODIFY RA.
  7637. *
  7638. * ENTRY
  7639. *T, X0 12/ MI, 12/ ST, 12/ PN, 12/, 12/ MRAF
  7640. * MI MEMORY INCREMENT.
  7641. * ST STORAGE MEDIUM.
  7642. * 0 = CM TYPE
  7643. * 1 = XM TYPE
  7644. * PN CP/PCP NUMBER.
  7645.  
  7646.  
  7647. PMN MRAF
  7648.  
  7649. SB3 MRA1
  7650. EQ SCP SET CP/PCP ADDRESS
  7651.  
  7652. MRA1 AX0 36 POSITION PARAMETERS
  7653. MX3 -12
  7654. SB4 MTRX SET EXIT ADDRESS
  7655. BX3 -X3*X0
  7656. AX0 12 POSITION INCREMENT
  7657. TNZ X3,(/UEC/MRX,UEC,/MONITOR/HNG) IF XM REQUEST
  7658. SA2 B7+FLSW READ FL CONTROL WORD
  7659. BX5 X0
  7660. SA1 B7+B1 READ EXCHANGE PACKAGE
  7661. LX2 -RSHF
  7662. IX7 X2+X0 UPDATE RA
  7663. MX6 -RMSK
  7664. BX6 -X6*X7 NEW RA
  7665. MX3 -36
  7666. LX6 36+6 POSITION NEW RA FOR XP
  7667. BX1 -X3*X1
  7668. LX7 RSHF REPOSITION *FLSW*
  7669. SA3 A2+B1
  7670. LX5 24 POSITION INCREMENT
  7671. BX6 X6+X1
  7672. SB5 B0
  7673. + SA7 A2 UPDATE CONTROL POINT AREA
  7674. IX7 X3+X5
  7675. SA6 A1 MODIFY EXCHANGE PACKAGE
  7676. SA7 A3
  7677. EQ UMT1 UPDATE MEMORY CONTROL TABLE
  7678. MSCF SPACE 4
  7679. ** MSCF - MONITOR STEP CONTROL.
  7680. *
  7681. * ENTRY
  7682. *T, X0 30/,12/ P,18/ MSCF
  7683. *
  7684. * P PARAMETER.
  7685. * O = SET MONITOR STEP.
  7686. * 1 = CLEAR MONITOR STEP.
  7687.  
  7688. PMN MSCF
  7689.  
  7690. SA1 MSCA+B7
  7691. GT B7,B1,* IF NOT VALID PARAMETER
  7692. NO
  7693. BX6 X1
  7694. SA6 PPR
  7695. EQ MTRX EXIT
  7696.  
  7697. MSCA EQ MSC2 DISABLE PPU *MXN* PROCESSOR
  7698.  
  7699. MSC1 SA5 A5 ENABLE PPU *MXN* PROCESSOR
  7700. RC X3
  7701. SX6 B0
  7702. UX1,B4 X5
  7703. EQ PPR0 PROCESS REQUEST
  7704.  
  7705. * ENTERED FROM *PPR* WHEN STEP IS SET.
  7706.  
  7707. MSC2 TX7 A5,-SP
  7708. PL X7,MSC1 IF PSEUDO PP
  7709. SA5 A5 INDICATE THAT CPU EXCHANGE HAS OCCURRED
  7710. SX1 B1
  7711. LX1 57
  7712. BX7 X1+X5
  7713. SA7 A5
  7714. EQ MTRX DONT PROCESS REQUEST
  7715. PRQF SPACE 4,10
  7716. ** PRQF - PROCESS RECALL REQUEST.
  7717. *
  7718. * ENTRY
  7719. *T, X0 12/,12/,12/ AD,6/,18/ PRQF
  7720. * AD ADDRESS OF REQUEST TO RECALL.
  7721.  
  7722.  
  7723. PMN PRQF
  7724.  
  7725. SA1 RQ+TAQR
  7726. AX1 18
  7727. MX2 -12
  7728. SX7 X1+
  7729. SA3 B7+
  7730. PRQ1 SA1 X7 FIND NEXT ENTRY IN QUEUE
  7731. BX7 -X2*X1
  7732. SB6 X7+
  7733. ZR X7,MTRX IF ENTRY NOT IN QUEUE
  7734. NE B6,B7,PRQ1 IF NOT THIS ENTRY
  7735. SA4 B7+RECW-RCCW READ RECALL REQUEST
  7736. AX0 24+7 SET CP ADDRESS
  7737. MX6 -5
  7738. BX7 X2*X1 REPLACE LINK IN ENTRY POINTING TO RECALL
  7739. BX0 -X6*X0
  7740. LX0 7
  7741. BX3 -X2*X3
  7742. BX7 X7+X3
  7743. SB7 X0
  7744. SA7 A1+
  7745. SA1 B7+STSW ADD FREE ENTRY TO CONTROL POINT
  7746. SA3 B6+ CHECK RECALL CRITERION
  7747. SX0 A4-B7
  7748. LX3 12
  7749. BX3 -X2*X3
  7750. MX2 -4
  7751. SX3 X3-PTRF
  7752. SX0 X0-RECW+1-20B
  7753. NZ X3,PRQ2 IF ROLLOUT NOT INHIBITED
  7754. SX0 X0-400B
  7755. PRQ2 BX7 -X2*X1
  7756. BX1 X2*X1 CLEAR OLD NEXT FREE ENTRY
  7757. MX6 0 CLEAR RECALLED REQUEST
  7758. SA7 B6
  7759. SA6 A4+
  7760. SA3 A4+REPW-RECW GET PARAMETER WORD
  7761. SA6 A3
  7762. IX7 X1+X0
  7763. BX6 X4
  7764. SA7 A1 UPDATE STSW
  7765. BX7 X3
  7766. LX4 18
  7767. SA7 APQA SET PARAMETER WORD
  7768. SX3 X4-3R1AJ
  7769. SB3 MTRX *APQ* RETURN ADDRESS
  7770. ZR X3,PRQ3 IF *1AJ*
  7771. SX4 X4-3RCIO
  7772. SB4 B0+ SET LIBRARY TO BE SEARCHED
  7773. TA5 1,FP SET *MTR*-S OUTPUT REGISTER ADDRESS
  7774. NZ X4,APQ IF NOT *CIO*
  7775. TA5 10B,SP SET FAKE RA+1
  7776. SA6 /CPUCIO/IR
  7777. SA7 /CPUCIO/MB
  7778. SA1 SMRL CHECK IF CONTROL POINT MOVING
  7779. MX4 -12
  7780. BX3 -X4*X1
  7781. LX3 7
  7782. SB5 X3
  7783. NE B5,B7,/CPUCIO/CPC IF CONTROL POINT NOT MOVING
  7784. SB5 MVPR MOVE IN PROGRESS
  7785. EQ /CPUCIO/RCR REQUEUE *CIO* CALL
  7786.  
  7787. * CHECK FOR NO ACTIVITY IF *1AJ* IS COMING OUT OF RECALL.
  7788.  
  7789. PRQ3 SA1 B7+STSW GET CONTROL POINT ACTIVITY
  7790. SA7 AQRA SAVE PARAMETER WORD IF REQUEUE NEEDED
  7791. MX0 -12
  7792. LX1 12
  7793. BX7 -X0*X1 PP AND CPU ACTIVITY
  7794. LX1 59-24-12
  7795. NG X1,PRQ4 IF ROLLOUT SET
  7796. SA2 B7+JCIW GET DIS FLAG
  7797. SX0 B1
  7798. LX2 0-21
  7799. BX2 X0*X2
  7800. IX7 X7-X2
  7801. PRQ4 LX1 24-59-8
  7802. MX0 -4
  7803. BX1 -X0*X1 PP-S IN RECALL
  7804. IX7 X1+X7
  7805. NZ X7,REC2 IF ACTIVITY, RECALL REQUEST
  7806. SA2 B7+TFSW GET JOB EJT ORDINAL
  7807. MX1 -12
  7808. LX2 12
  7809. BX2 -X1*X2
  7810. CX3 X2,EJT CONVERT EJT ORDINAL TO OFFSET
  7811. + ZR X2,* IF NO EJT ORDINAL
  7812. TA2 X3+JSNE,EJT GET EJT ENTRY
  7813. SX1 B1
  7814. BX3 X1*X2 CHECK JOB INTERLOCK
  7815. NZ X3,REC2 IF JOB INTERLOCK ALREADY SET
  7816. BX7 X2+X1 SET JOB INTERLOCK
  7817. LX1 6-0
  7818. BX7 X7+X1 SET JOB ADVANCE FLAG
  7819. SA7 A2
  7820. R= B4,LA1AJ SET *1AJ* LOAD PARAMETERS
  7821. EQ APQ ASSIGN *1AJ*
  7822. TCSF SPACE 4,10
  7823. ** TCSF - SWITCH CPU ON TIMESLICE.
  7824. *
  7825. * ENTRY
  7826. *T, X0 42/,18/ TCSF
  7827. *
  7828. * EXIT TO *BNJ1* IF CPU TO BE SWITCHED.
  7829.  
  7830.  
  7831. PMN TCSF,.CSWF
  7832. PCXF SPACE 4
  7833. ** PCXF - PROCESS CPU EXCHANGE REQUEST.
  7834. *
  7835. * ENTRY
  7836. *T X0 42/,18/ PCXF
  7837. *
  7838. * EXIT NONE.
  7839.  
  7840.  
  7841. PMN PCXF,(/DCP/PCX,DCP,/MONITOR/HNG)
  7842. ARMF SPACE 4
  7843. ** ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
  7844. * *ARMF* IS CALLED ONCE EVERY SECOND BY PPU MONITOR
  7845. * TO DO THE FOLLOWING.
  7846. * 1) STATUS FLAG REGISTER BITS.
  7847. * 2) WRITE REAL TIME CLOCK TO ECS.
  7848. * 3) DETERMINE STATUS OF OTHER MAINFRAMES BY INTEROGATING
  7849. * THEIR ECS CLOCKS. (DONE EVERY 2 SECONDS)
  7850. *
  7851. * ENTRY
  7852. *T X0 24/,12/ S,6/,18/ ARMF
  7853. * (B7) = S = 0 IF MAINFRAMES NOT TO BE STATUSED.
  7854. *
  7855. * EXIT
  7856. * EXITS TO ART.
  7857.  
  7858.  
  7859. PMN ARMF,(/MMF/ARM,MMF,/MONITOR/HNG)
  7860. UCCF SPACE 4
  7861. ** UCCF - UPDATE CTI CLOCK.
  7862. *
  7863. * ENTRY
  7864. *T X0 42/,18/ UCCF
  7865.  
  7866.  
  7867. PMN UCCF
  7868.  
  7869. * ENTER HERE FROM *ADTF* PROCESSOR.
  7870.  
  7871. UCC1 SA5 INWL CHECK CTI CLOCK UPDATE ACTIVE FLAG
  7872. MX2 1
  7873. LX5 59-3
  7874. NG X5,MTRX IF *1MA* ALREADY CALLED
  7875.  
  7876. * SET CTI CLOCK UPDATE ACTIVE FLAG AND CALL *1MA*.
  7877.  
  7878. TB7 SCA SET SYSTEM CONTROL POINT
  7879. BX7 X2+X5
  7880. SB3 MTRX SET EXIT ADDRESS
  7881. LX7 3-59
  7882. SA1 UCCA SET PP CALL
  7883. BX6 X1
  7884. SA7 A5 SET CTI CLOCK UPDATE ACTIVE FLAG
  7885. SB4 LA1MA SET INDEX INTO *TAPQ* TABLE
  7886. EQ APQ ASSIGN PP
  7887.  
  7888. UCCA VFD 18/0L1MA,6/0,12/6,24/0
  7889. CRAF SPACE 4,10
  7890. ** CRAF - CHANGE RA.
  7891. *
  7892. * ENTRY
  7893. *T, X0 12/ HN, 12/ ST, 12/ PN, 6/ PF, 18/ CRAF
  7894. * HN HOLE POINT NUMBER.
  7895. * ST STORAGE MEDIUM.
  7896. * 0 = CM TYPE
  7897. * 1 = XM TYPE
  7898. * PN CONTROL POINT NUMBER.
  7899. * PF = UPPER 6 BITS OF *RSTM* FLAG BYTE.
  7900.  
  7901.  
  7902. PMN CRAF
  7903.  
  7904. SB6 B7+0 SAVE CP/PCP NUMBER
  7905. SB3 CRA1
  7906. EQ SCP SET CP/PCP ADDRESS
  7907.  
  7908. CRA1 AX0 22-0
  7909. MX7 -2
  7910. BX7 -X7*X0 PSEUDO-ROLLIN, PSEUDO-ROLLOUT FLAGS
  7911. AX0 36-1-22+0 POSITION STORAGE TYPE
  7912. ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
  7913. MX5 -12
  7914. BX4 -X5*X0
  7915. SB5 B7+
  7916. AX0 12+1
  7917. SX4 X4+FLSW
  7918. BX2 X0 SET CP/PCP NUMBER FOR *SCP*
  7919. SB3 CRA2 *SCP* EXIT ADDRESS
  7920. EQ SCP GET CPA/PCPA ADDRESS
  7921.  
  7922. CRA2 SA3 B7+X4 READ FL CONTROL WORD
  7923. BX2 -X5*X3 FL
  7924. BX0 X6
  7925. LX3 -12
  7926. SB4 MTRX SET EXIT ADDRESS
  7927. BX6 X3
  7928. SX1 X3
  7929. ZR X7,CRA3 IF JOB INITIATION/ROLLIN FROM MASS STORAGE
  7930. LX6 12
  7931. LX3 -48+12
  7932. SA6 B5+X4 MOVE FL CONTROL WORD
  7933. BX2 -X5*X3 NFL (0 IF RAE UPDATE)
  7934. SA3 A3+1 SAVE *FLSW*+1
  7935. SB3 A6+1
  7936. SB5 B7
  7937. BX2 -X2 -NFL (-0 IF RAE UPDATE)
  7938. CRA3 IX6 X1+X2 ADJUST RA
  7939. LX6 12
  7940. SA6 B5+X4
  7941. LX4 59-2
  7942. ERRNZ ECSW-25B CODE DEPENDS ON VALUE
  7943. ERRNZ FLSW-23B CODE DEPENDS ON VALUE
  7944. SX1 4000B
  7945. NG X4,CRA4 IF EM REQUEST
  7946. BX6 X6+X1 BUILD *FLSW*+1
  7947. LX6 12
  7948. SA6 A6+1
  7949. ZR X7,CRA4 IF JOB INITIATION/ROLLIN FROM MASS STORAGE
  7950. BX7 X3
  7951. SA7 B3 MOVE OTHER *FLSW*+1
  7952. CRA4 AX4 59 SIGN EXTEND MEMORY TYPE FLAG
  7953. SX3 1
  7954. MX5 12 SET LINK BYTE MASK
  7955. BX6 X3*X4
  7956. SX2 B6
  7957. TB5 X6,MCT
  7958.  
  7959. * STEP 1. MCT ENTRY FOR CP/PCP BELOW HOLE - CHANGE FORWARD
  7960. * LINK TO REQUESTING CP AND CLEAR UNASSIGNED MEMORY.
  7961.  
  7962. SA3 X0+B5 GET MCT ENTRY
  7963. MX7 -24
  7964. LX5 -12
  7965. BX6 X7*X3 REMOVE UNASSIGNED MEMORY
  7966. CRA5 LX2 36
  7967. BX6 -X5*X6
  7968. BX6 X6+X2 CHANGE FORWARD LINK
  7969. SA6 A3
  7970.  
  7971. * STEP 2. MCT ENTRY FOR CP/PCP ABOVE HOLE - CHANGE BACKWARD
  7972. * LINK TO REQUESTING CP.
  7973.  
  7974. BX4 X5*X3 OLD FORWARD LINK
  7975. AX4 36-1
  7976. SA1 X4+B5 GET MCT ENTRY
  7977. LX5 12
  7978. BX1 -X5*X1 REMOVE BACKWARD LINK
  7979. LX2 12
  7980. BX6 X2+X1 BACKWARD LINK TO REQUESTING CP
  7981. SA6 A1
  7982.  
  7983. * STEP 3. MCT ENTRY FOR REQUESTING CP - CHANGE BACKWARD LINK
  7984. * TO CP/PCP OF STEP 1, CHANGE FORWARD LINK TO CP/PCP
  7985. * OF STEP 2 AND SET UNASSIGNED MEMORY FROM HOLE.
  7986.  
  7987. LX2 12+1
  7988. BX3 -X7*X3 UNASSIGNED MEMORY FROM HOLE
  7989. LX0 48-1
  7990. BX3 X0+X3 CHANGE BACKWARD LINK
  7991. SA2 X2+B5
  7992. LX4 36-1
  7993. BX6 X3+X4 CHANGE FORWARD LINK
  7994. SA6 A2
  7995.  
  7996. * STEP 4. MCT ENTRY BELOW REQUESTING CP - CHANGE FORWARD
  7997. * LINK TO CP ABOVE REQUESTOR AND ACCUMULATE ANY
  7998. * UNASSIGNED MEMORY PREVIOUSLY ABOVE REQUESTOR.
  7999.  
  8000. BX3 X5*X2 EXTRACT REQUESTOR-S BACKWARD LINK
  8001. AX3 48-1
  8002. BX1 -X5*X2 REMOVE BACKWARD LINK
  8003. SA4 X3+B5
  8004. LX5 -12 POSITION MASK
  8005. BX4 -X5*X4
  8006. IX6 X4+X1 ADD FORWARD LINK AND UNASSIGNED MEMORY
  8007. SA6 A4
  8008.  
  8009. * STEP 5. MCT ENTRY ABOVE REQUESTING CP - CHANGE BACKWARD
  8010. * LINK TO CP BELOW REQUESTOR.
  8011.  
  8012. BX2 X5*X2 EXTRACT REQUESTOR-S FORWARD LINK
  8013. AX2 36-1
  8014. LX5 12 REPOSITION MASK
  8015. SA4 X2+B5
  8016. BX4 -X5*X4 REMOVE OLD LINK
  8017. LX3 48-1
  8018. BX6 X3+X4 SET NEW BACKWARD LINK
  8019. SA6 A4
  8020. CRA6 SX7 0 INDICATE FUNCTION COMPLETE
  8021. SA7 SMRL
  8022. JP B4 EXIT
  8023. ADTF SPACE 4,10
  8024. ** ADTF - ADVANCE DATE AND TIME.
  8025. *
  8026. * ENTRY
  8027. *T, X0 12/ BA,24/,12/ 0,12/ ADTF
  8028. *
  8029. * BA = 0 IF CALLED TO ADVANCE DATE AND TIME.
  8030. * = BUFFER ADDRESS IF CALLED TO ENTER DATE AND TIME.
  8031. *
  8032. * EXIT NONE.
  8033.  
  8034.  
  8035. PMN ADTF
  8036.  
  8037. MX5 -12
  8038. LX0 -48
  8039. BX0 -X5*X0 BUFFER ADDRESS IF ENTER DATE/TIME CALL
  8040. SA1 X0
  8041. ZR X0,ADT2 IF CALLED TO ADVANCE DATE/TIME
  8042.  
  8043. * ENTER DATE AND TIME.
  8044.  
  8045. SA2 A1+B1
  8046. BX6 X1
  8047. BX7 X2
  8048. SA6 JDAL UPDATE *JDAL*
  8049. ERRNZ PDTL-JDAL-1 CODE DEPENDS ON VALUES
  8050. SA7 A6+B1 UPDATE *PDTL*
  8051. SA1 A2+B1
  8052. BX6 X1
  8053. SA2 A1+B1
  8054. ERRNZ TIML-PDTL-1 CODE DEPENDS ON VALUES
  8055. SA6 A7+B1 UPDATE *TIML*
  8056. BX7 X2
  8057. ERRNZ DTEL-TIML-1 CODE DEPENDS ON VALUES
  8058. SA7 A6+B1 UPDATE *DTEL*
  8059. SA1 A2+B1
  8060. LX1 -48
  8061. BX6 -X5*X1
  8062. ZR X6,ADT1 IF NO DAY LIMIT UPDATE REQUIRED
  8063. SA6 ADTA UPDATE DAY LIMIT
  8064. ADT1 BX7 X7-X7
  8065. SA1 MABL
  8066. LX1 59-47
  8067. SA7 X0 CLEAR *DSD* INTERLOCK
  8068. NG X1,MTRX IF NOT CYBER 180
  8069. LX1 59-42-59+47
  8070. PL X1,MTRX IF NOT CYBER 180
  8071. EQ UCC1 CHECK FOR CTI CLOCK UPDATE REQUIRED
  8072.  
  8073. * ADVANCE DATE AND TIME IN *PDTL*.
  8074.  
  8075. ADT2 SA1 JDAL
  8076. ERRNZ PDTL-JDAL-1 CODE DEPENDS ON VALUES
  8077. SA2 A1+B1 READ *PDTL*
  8078. LX2 -6 LEAVE SECONDS UNCHANGED
  8079. MX7 -6
  8080. BX2 X7*X2 RESET MINUTES
  8081. LX2 -6
  8082. SX0 B1
  8083. SB4 6
  8084. SB3 12
  8085. IX2 X2+X0 ADVANCE HOURS
  8086. BX4 -X7*X2
  8087. SX4 X4-24D
  8088. NG X4,ADT6 IF NOT END OF DAY
  8089. SA4 ADTA
  8090. BX2 X7*X2 RESET HOUR = 0
  8091. SB3 B3+B4
  8092. LX2 -18+12
  8093. IX2 X2+X0 ADVANCE DAY IN *PDTL*
  8094. BX6 -X7*X2
  8095. BX6 X4-X6
  8096. NZ X6,ADT3 IF NOT END OF MONTH
  8097. BX2 X7*X2
  8098. IX2 X2+X0 RESET DAY = 1
  8099. SB3 B3+B4
  8100. LX2 -24+18
  8101. IX2 X2+X0 ADVANCE MONTH IN *PDTL*
  8102. BX4 -X7*X2
  8103. SA3 X4+TDLM SET NEW DAY LIMIT
  8104. SX6 X3+1
  8105. SA6 A4+
  8106. SX4 X4-13D
  8107. NG X4,ADT3 IF NOT END OF YEAR
  8108. BX2 X7*X2
  8109. IX2 X2+X0 RESET MONTH = 1
  8110. SB3 B3+6
  8111. LX2 -30+24
  8112. IX2 X2+X0 ADVANCE YEAR
  8113. SX6 28 RESET FEBRUARY *TDLM* ENTRY
  8114. MX4 -18
  8115. BX1 X4*X1
  8116. SX4 3R000
  8117. BX1 X1+X4 RESET JULIAN DAY
  8118. SX4 3
  8119. BX4 X4*X2
  8120. SX4 X4-2 CORRECT PACKED DATE TO NEAREST LEAP YEAR
  8121. NZ X4,ADT2.1 IF NOT LEAP YEAR
  8122. SX6 X6+B1 ADJUST FOR LEAP YEAR
  8123. ADT2.1 SA6 TDLM+2
  8124.  
  8125. * ADVANCE JULIAN DAY.
  8126.  
  8127. ADT3 SX6 1R0
  8128. SB5 B0+
  8129. ADT4 IX1 X1+X0
  8130. BX4 -X7*X1
  8131. SX4 X4-45B
  8132. NG X4,ADT5 IF NOT DIGIT OVERFLOW
  8133. BX1 X7*X1
  8134. BX1 X1+X6 RESET DIGIT TO DISPLAY CODE 0
  8135. LX1 -6
  8136. SB5 B5+B4
  8137. EQ ADT4 INCREMENT NEXT DIGIT
  8138.  
  8139. ADT5 LX1 X1,B5 RESTORE *JDAL* POSITION
  8140. MX4 -18
  8141. BX4 -X4*X1
  8142. SX4 X4-3R001
  8143. NZ X4,ADT6 IF NO NEED TO ADVANCE JULIAN YEAR
  8144. SB5 B5-18
  8145. PL B5,ADT6 IF JULIAN YEAR ALREADY ADVANCED
  8146. LX1 -18
  8147. SB5 18
  8148. EQ ADT4 ADVANCE YEAR
  8149.  
  8150. * CONSTRUCT *TIML*.
  8151.  
  8152. ADT6 LX6 X2,B3 RESTORE *PDTL* POSITION
  8153. SA6 A2 UPDATE *PDTL*
  8154. BX4 X6
  8155. BX6 X1
  8156. SA6 A1+ UPDATE *JDAL*
  8157. LX4 -12
  8158. BX3 -X7*X4 HOUR FROM *PDTL*
  8159. ERRNZ TIML-PDTL-1 CODE DEPENDS ON VALUES
  8160. SA2 A2+B1 READ *TIML*
  8161. SX1 2R00
  8162. LX2 -24
  8163. BX2 X5*X2 RESET MINUTES IN *TIML*
  8164. BX2 X2+X1
  8165. LX2 -42+24
  8166. BX2 X5*X2 CLEAR HOUR FIELD OF *TIML*
  8167. SB3 -1 CONVERT OCTAL HOUR TO DECIMAL DISPLAY CODE
  8168. SB5 X3+ OCTAL HOUR
  8169. ADT7 SB4 B5
  8170. SB3 B3+B1
  8171. SB5 B4-10D
  8172. PL B5,ADT7 IF CONVERSION TO DECIMAL INCOMPLETE
  8173. SX6 B3 LEFT DIGIT VALUE
  8174. LX6 6
  8175. SX3 B4+ RIGHT DIGIT VALUE
  8176. BX3 X6+X3 COMBINE DIGIT VALUES
  8177. IX3 X3+X1 CONVERT TO DISPLAY CODE
  8178. BX6 X2+X3 MERGE DISPLAY CODE HOURS INTO *TIML*
  8179. LX6 42
  8180. SA6 A2+ UPDATE *TIML*
  8181.  
  8182. * CONSTRUCT *DTEL*.
  8183.  
  8184. ERRNZ DTEL-TIML-1 CODE DEPENDS ON VALUES
  8185. SA2 A6+B1 READ *DTEL*
  8186. LX2 12
  8187. SB6 3
  8188. ADT8 LX2 -18
  8189. BX2 X5*X2 CLEAR 12 BIT FIELD
  8190. LX4 -6 POSITION *PDTL*
  8191. BX3 -X7*X4 *PDTL* 6 BIT VALUE
  8192. NE B6,B1,ADT9 IF NOT CONVERTING YEAR
  8193. SX3 X3+70D BIAS YEAR BY 1970
  8194. ADT9 SB3 -1 CONVERT OCTAL VALUE TO DECIMAL DISPLAY
  8195. SB5 X3+ OCTAL VALUE
  8196. ADT10 SB4 B5
  8197. SB3 B3+B1
  8198. SB5 B4-10D
  8199. PL B5,ADT10 IF CONVERSION TO DECIMAL INCOMPLETE
  8200. SX6 B3-10D
  8201. ZR X6,ADT11 IF CENTURY ROLLOVER
  8202. SX6 B3 LEFT DIGIT VALUE
  8203. LX6 6
  8204. ADT11 SX3 B4 RIGHT DIGIT VALUE
  8205. BX3 X6+X3 COMBINE DIGIT VALUES
  8206. IX3 X3+X1 CONVERT DIGITS TO DISPLAY CODE
  8207. BX2 X2+X3 MERGE DATA INTO *DTEL*
  8208. SB6 B6-B1
  8209. NZ B6,ADT8 IF NOT DONE BUILDING *DTEL*
  8210. LX2 42
  8211. BX6 X2
  8212. SA6 A2 UPDATE *DTEL*
  8213. EQ MTRX EXIT
  8214.  
  8215.  
  8216. ADTA CON 0 DAY LIMIT
  8217.  
  8218.  
  8219. ** TABLE OF DAY LIMITS.
  8220.  
  8221.  
  8222. TDLM EQU *-1
  8223.  
  8224. LOC 1
  8225.  
  8226. CON 31 JANUARY
  8227. CON 28 FEBRUARY
  8228. * CON 29 (LEAP YEAR)
  8229. CON 31 MARCH
  8230. CON 30 APRIL
  8231. CON 31 MAY
  8232. CON 30 JUNE
  8233. CON 31 JULY
  8234. CON 31 AUGUST
  8235. CON 30 SEPTEMBER
  8236. CON 31 OCTOBER
  8237. CON 30 NOVEMBER
  8238. CON 31 DECEMBER
  8239. CON 31 JANUARY (FOR END OF YEAR)
  8240.  
  8241. LOC *O
  8242. SKCF SPACE 4,10
  8243. ** SKCF - SET K DISPLAY COMPLETE BIT.
  8244. *
  8245. * ENTRY
  8246. *T, X0 17/,1/S,6/,12/ CPA,12/,12/ SKCF
  8247. *
  8248. * S SCREEN FLAG.
  8249. * 0 = LEFT SCREEN.
  8250. * 1 = RIGHT SCREEN.
  8251. * CPA CONTROL POINT ADDRESS.
  8252.  
  8253.  
  8254. PMN SKCF
  8255.  
  8256. SA1 B7+TFSW GET EJT ORDINAL
  8257. SA3 SMRL
  8258. MX7 -12
  8259. AX2 7 SET CP NUMBER
  8260. LX1 12
  8261. BX3 -X7*X3 MOVING CP NUMBER
  8262. BX1 -X7*X1 EJT ORDINAL
  8263. BX3 X3-X2
  8264. ZR X1,MTRX IF NO JOB AT CP
  8265. ZR X3,MTRX IF CP MOVING
  8266. CX3 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  8267. LX0 59-42
  8268. SA2 B7+DBAW GET K DISPLAY CONTROL
  8269. TA1 X3+JSNE,EJT GET JOB ADVANCE STATUS
  8270. SA3 B7+FLSW GET RA AND FL
  8271. MX6 -18
  8272. LX4 X2,B1
  8273. LX1 59-6
  8274. BX7 -X7*X3
  8275. AX3 RSHF
  8276. LX7 6 FL
  8277. NG X4,MTRX IF RETURN STATUS NOT SELECTED
  8278. NG X1,MTRX IF JOB ADVANCE SET
  8279. MX4 -RMSK
  8280. PL X0,SKC1 IF PROCESSING LEFT SCREEN
  8281. LX2 -18
  8282. SKC1 BX3 -X4*X3
  8283. BX2 -X6*X2 STATUS WORD RELATIVE ADDRESS
  8284. LX3 6 RA
  8285. IX7 X2-X7
  8286. ZR X2,MTRX IF SCREEN NOT ACTIVE
  8287. PL X7,MTRX IF ADDRESS BEYOND FL
  8288. IX2 X3+X2 STATUS WORD ABSOLUTE ADDRESS
  8289. SA3 B7+CWQW
  8290. ERX1 X2 READ STATUS WORD
  8291. SX6 1
  8292. LX3 59-46
  8293. BX6 X1+X6 SET COMPLETE BIT
  8294. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  8295. EWX6 X2 WRITE STATUS WORD
  8296. NG X3,MTRX IF NOT TO RECALL CPU
  8297. SB6 B7 SET EXCHANGE PACKAGE ADDRESS
  8298. SB3 MTRX SET *RCC* EXIT ADDRESS
  8299. EQ RCC RECALL CPU
  8300. CPA SPACE 4,15
  8301. ** CPA - CHECK CPU ACTIVITY.
  8302. *
  8303. * ENTRY (B4) = EXIT ADDRESS.
  8304. * (B7) = CONTROL POINT ADDRESS.
  8305. *
  8306. * EXIT (X2) = ORIGINAL (X0).
  8307. * (B3) = ADDRESS OF CP USING CURRENT CPU.
  8308. * (B6) = ADDRESS OF EXCHANGE PACKAGE.
  8309. *
  8310. * USES X - 1, 2.
  8311. * A - 1.
  8312. * B - 3, 5, 6.
  8313.  
  8314.  
  8315. CPA BSS 0 ENTRY
  8316. SA1 CPAL+A0 GET CPU ASSIGNMENT DATA
  8317. SB6 B2
  8318. AX1 24 SET CP ADDRESS
  8319. SB3 X1
  8320. BX2 X0 SAVE (X0)
  8321. ZR B7,RB4 IF CMR STORAGE REQUEST
  8322. SB5 A0-CPAL-1
  8323. EQ B3,B7,RB4 IF JOB EXECUTING IN THIS CPU
  8324. SB6 B7
  8325. SA1 B0-B5
  8326. AX1 24 SET CP ADDRESS
  8327. SB5 X1
  8328. NE B5,B7,RB4 IF JOB NOT RUNNING IN OTHER CPU
  8329. EQ MTRX EXIT
  8330. SCA SPACE 4,10
  8331. ** SCA - SET CP/PCP ADDRESS FROM *SMRL*.
  8332. *
  8333. * ENTRY (B3) = EXIT ADDRESS.
  8334. *
  8335. * EXIT (A2) = *SMRL*.
  8336. *
  8337. * USES X - 1, 2.
  8338. * A - 2.
  8339.  
  8340.  
  8341. SCA BSS 0 ENTRY
  8342. SA2 SMRL GET STORAGE MOVE REQUEST
  8343. MX1 -12
  8344. BX2 -X1*X2 EXTRACT CP/PCP NUMBER
  8345. * EQ SCP
  8346. SCP SPACE 4,15
  8347. ** SCP - SET CP/PCP ADDRESS.
  8348. *
  8349. * ENTRY (X2) = CP/PCP NUMBER.
  8350. * (B3) = EXIT ADDRESS.
  8351. *
  8352. * EXIT (X2) = CP/PCP ADDRESS.
  8353. * (X6) = MCT INDEX FOR CP/PCP.
  8354. * (B7) = CP/PCP ADDRESS.
  8355. * (A6) = *UMTA*.
  8356. * (UMTA) = MCT INDEX FOR CP/PCP.
  8357. *
  8358. * USES X - 1, 2, 6.
  8359. * A - 6.
  8360. * B - 7.
  8361.  
  8362.  
  8363. SCP BSS 0 ENTRY
  8364. LX6 B1,X2 SAVE MCT INDEX
  8365. NO
  8366. SA6 UMTA
  8367. TB7 X2,-SC SUBTRACT SYSTEM CP NUMBER
  8368. TX1 PCPA
  8369. GE B7,B1,SCP1 IF PSEUDO CONTROL POINT
  8370. SB7 X2+B1
  8371. BX1 X1-X1 REAL CP BASE ADDRESS
  8372. SCP1 SX2 B7-B1
  8373. LX2 7
  8374. IX2 X1+X2 FORM ABSOLUTE ADDRESS
  8375. SB7 X2
  8376. JP B3 EXIT
  8377. UMT SPACE 4,15
  8378. ** UMT - UPDATE MEMORY CONTROL TABLE.
  8379. *
  8380. * ENTRY (X0) = INCREMENT.
  8381. * (B4) = EXIT ADDRESS.
  8382. * (B5) = 0 IF CHANGING CM.
  8383. * = 1 IF CHANGING XM.
  8384. * (UMTA) = MCT INDEX FOR CP/PCP.
  8385. *
  8386. * EXIT (SMRL) = 0.
  8387. *
  8388. * USES X - 0, 2, 3, 6, 7.
  8389. * A - 2, 3, 6, 7.
  8390. * B - 5.
  8391.  
  8392.  
  8393. UMT BSS 0 ENTRY
  8394. SA3 SMRL GET MOVE PARAMETERS
  8395. SX6 X3
  8396. BX0 X3 MOVE INCREMENT
  8397. AX6 12
  8398. AX0 48
  8399. SB5 X6+ SET MEMORY TYPE
  8400.  
  8401. * ALTERNATE ENTRY POINT WITH PARAMETERS SET.
  8402.  
  8403. UMT1 SA2 UMTA GET MCT INDEX
  8404. TB5 B5,MCT
  8405. SA3 X2+B5
  8406. IX7 X3-X0 ADJUST UNASSIGNED FL ABOVE CP/PCP
  8407. AX3 48-1
  8408. SA2 X3+B5 ADJUST UNASSIGNED FL BELOW CP/PCP
  8409. SA7 A3
  8410. IX6 X2+X0 UPDATE MCT ENTRY FOR CP/PCP MOVED
  8411. BX7 X7-X7
  8412. SA6 A2 UPDATE BACKWARD LINK
  8413. SA7 SMRL
  8414. JP B4 EXIT
  8415.  
  8416.  
  8417. UMTA CON 0 MCT INDEX FOR CP/PCP
  8418. TITLE PPU REQUEST PROCESSOR.
  8419. PPR SPACE 4
  8420. ** PPU REQUEST PROCESSOR REGISTER USAGE.
  8421. *
  8422. *
  8423. * (A5) = OUTPUT REGISTER ADDRESS.
  8424. PPR SPACE 4
  8425. ** PPR - PPU REQUEST PROCESSOR.
  8426. *
  8427. * ENTRY (OR) = REQUEST.
  8428.  
  8429.  
  8430. PPR SA5 A5 READ OUTPUT REGISTER
  8431. RC X3 GET MONITOR MODE START TIME IF 180 MACHINE
  8432. SX6 B0
  8433. UX1,B4 X5 UNPACK FUNCTION CODE AND PARAMETERS
  8434.  
  8435. * ENTRY FROM *MSCF* PROCESSOR.
  8436.  
  8437. PPR0 SA6 PPXL CLEAR *PP EXCHANGE PENDING*
  8438. SB4 B4+1777B
  8439.  
  8440. * ENTRY FROM *PMN* AND */BUFIO/MNR*.
  8441.  
  8442. PPR0.1 PX6 B4,X3
  8443. SX7 B4-MXFM
  8444. SA6 CL+CMST+A0 SET FUNCTION AND BASE TIME
  8445. SA3 X7+TPPR+MXFM-CPUM READ PROCESSOR CONTROL WORD
  8446. PL X7,HNG IF ILLEGAL REQUEST
  8447. SB6 X3+
  8448. TNG X3,(/PROBE/PPR,PROBE,/MONITOR/RB6) IF FAST EXIT
  8449. TX2 A5-1,-FP
  8450. BX7 X7-X7
  8451. LX2 PPXES-PPCES
  8452. TA2 X2+ACPP,FPX
  8453. LX6 X3,B1 CHECK CPU SELECTION
  8454. SB7 X2 SET CP ADDRESS
  8455. TNG X6,(/DCP/CPS,DCP,/MONITOR/HNG) IF CPU SELECTION
  8456. TJP (/PROBE/PPR,PROBE,B6) EXIT TO FUNCTION PROCESSOR
  8457.  
  8458. ** EXIT TO PROCESSOR WITH -
  8459. *
  8460. * IF FAST EXIT (*FEX*) SELECTED - X2, X7, AND B7 ARE NOT SET.
  8461. *
  8462. * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
  8463. * (X2) = *ACPP*.
  8464. * (X3) = PROCESSOR CONTROL WORD.
  8465. * (X5) = OUTPUT REGISTER.
  8466. * (X7) = 0.
  8467. * (A2) = *ACPP* ADDRESS.
  8468. * (B6) = PROCESSOR ADDRESS.
  8469. * (B7) = CONTROL POINT ADDRESS.
  8470. PPRX SPACE 4
  8471. * EXIT TO STORE OUTPUT REGISTER.
  8472.  
  8473.  
  8474. PPR1 EQU MTRC
  8475.  
  8476.  
  8477. PPRX EQU MTRX
  8478. ABTM SPACE 4
  8479. *** ABTM - ABORT CONTROL POINT.
  8480. *
  8481. * ENTRY
  8482. *T, OR 12/ ABTM,12/,12/,12/,12/
  8483. *
  8484. * EXIT
  8485. *T, IR 60/ 0
  8486. *T, OR 60/ 0
  8487. *
  8488. * * PP HUNG.* WILL OCCUR IF ATTEMPT IS MADE TO ABORT THE SYSTEM
  8489. * CONTROL POINT OR AN UNOCCUPIED USER CONTROL POINT.
  8490.  
  8491.  
  8492. PPR ABTM,,,DCP
  8493.  
  8494. SX5 PPET ERROR FLAG = *PPU ABORT.*
  8495. SB6 B0 SET ABORT FLAG
  8496. LX5 36
  8497. SB5 B1 FLAG *CEFM* CALL
  8498. EQ CEF1 CHANGE ERROR FLAG
  8499. ACTM SPACE 4,35
  8500. *** ACTM - ACCOUNTING FUNCTIONS.
  8501. *
  8502. * ENTRY
  8503. *T, OR 12/ ACTM,12/ FN,36/ -
  8504. *
  8505. * FN = 0 (ABCS) - CLEAR SRU ACCUMULATORS.
  8506. * FN = 1 (ABBF) - ACCOUNT BLOCK BEGIN.
  8507. * FN = 2 (ABSF) - COMPUTE SRU MULTIPLIERS CPM AND IOM.
  8508. * FN = 3 (ABCF) - ACCOUNT BLOCK CHANGE/END.
  8509. * FN = 4 (ABEF) - COMPUTE/CONVERT ELAPSED SRUS.
  8510. * FN = 5 (ABVF) - CONVERT ACCUMULATORS.
  8511. * FN = 6 (ABIF) - INCREMENT ACCUMULATOR.
  8512. * FN = 7 (ABUS) - GET RAW CP TIME - USAGE PRICING.
  8513. * FN = 10 (ABOF) - CONVERT OTHER ACCUMULATORS.
  8514. *
  8515. *
  8516. * 0 ABCS - CLEAR SRU ACCUMULATORS.
  8517. *
  8518. * ENTRY
  8519. *T, OR 12/ ACTM,12/ ABCS,36/
  8520. *
  8521. * EXIT
  8522. *T, OR 60/ 0
  8523. *
  8524. * FUNCTION
  8525. * CLEARS SRU ACCUMULATORS IN CPA WORDS *SRJW* AND *SRUW*.
  8526. *
  8527. *
  8528. * 1 ABBF - ACCOUNT BLOCK BEGIN.
  8529. *
  8530. * ENTRY
  8531. *T, OR 12/ ACTM,12/ ABBF,36/ -
  8532. *T, MB 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
  8533. *
  8534. * EXIT
  8535. *T, OR 60/ 0
  8536. *
  8537. * FUNCTION
  8538. * BEGIN ACCOUNT BLOCK BY INSERTING NEW MULTIPLIERS IN CONTROL
  8539. * POINT AREA AND APPLYING THE INITIAL ADDER TO THE SRU
  8540. * ACCUMULATOR. THE MULTIPLIERS CPM AND IOM ARE CALCULATED.
  8541. *
  8542. *
  8543. * 2 ABSF - COMPUTE SRU MULTIPLIERS CPM AND IOM.
  8544. *
  8545. * ENTRY
  8546. *T, OR 12/ ACTM,12/ ABSF,36/ -
  8547. *
  8548. * EXIT
  8549. *T, OR 60/ 0
  8550. *
  8551. * FUNCTION
  8552. * THE MULTIPLIERS CPM AND IOM ARE CALCULATED USING THE
  8553. * CURRENT CM AND ECS FIELD LENGTHS.
  8554. *
  8555. *
  8556. * 3 ABCF - ACCOUNT BLOCK CHANGE/END.
  8557. *
  8558. * ENTRY
  8559. *T, OR 12/ ACTM,12/ ABCF,36/ -
  8560. *T, MB 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
  8561. *
  8562. * EXIT
  8563. *T, OR 60/ 0
  8564. *
  8565. * FUNCTION
  8566. * CHANGE/END ACCOUNT BLOCK BY CLEARING SRU ACCUMULATORS,
  8567. * REPLACING MULTIPLIERS IN CONTROL POINT AREA AND APPLYING THE
  8568. * ADDER TO THE SRU ACCUMULATOR. THE MULTIPLIERS CPM AND IOM
  8569. * ARE CALCULATED.
  8570. *
  8571. *
  8572. * 4 ABEF - COMPUTE/CONVERT ELAPSED SRUS.
  8573. *
  8574. * ENTRY
  8575. *T, OR 12/ ACTM,12/ ABEF,36/ -
  8576. *T, MB+0 60/ OLD SRU ACCUMULATOR
  8577. *T, MB+1 60/ NEW SRU ACCUMULATOR
  8578. *
  8579. * EXIT
  8580. *T, OR 60/ 0
  8581. *T, MB 60/ ELAPSED SRUS IN F10.3 FORMAT
  8582. *
  8583. * FUNCTION
  8584. * ELAPSED SRUS (NEW-OLD) ARE CONVERTED AND PROGRAM MODE IS
  8585. * ENTERED FOR THE CONVERSION BY *RDC*. IF ELAPSED SRUS
  8586. * ARE LESS THAN OR EQUAL TO *MDSR*, ZERO IS RETURNED.
  8587. *
  8588. *
  8589. * 5 ABVF - CONVERT ACCUMULATORS.
  8590. *
  8591. * ENTRY
  8592. *T, OR 12/ ACTM,12/ ABVF,36/ -
  8593. *T, MB+0 60/ SRUW CONTROL POINT AREA WORD
  8594. *T, MB+1 60/ CPTW CONTROL POINT AREA WORD
  8595. *T, MB+2 60/ IOAW CONTROL POINT AREA WORD
  8596. *T, MB+3 60/ MP1W CONTROL POINT AREA WORD
  8597. *
  8598. * EXIT
  8599. *T, OR 60/ 0
  8600. *T, MB+0 60/ SRU ACCUMULATOR IN F10.3 FORMAT
  8601. *T, MB+1 60/ CP ACCUMULATOR IN F10.3 FORMAT
  8602. *T, MB+2 60/ MS ACCUMULATOR IN F10.3 FORMAT
  8603. *T, MB+3 60/ MT ACCUMULATOR IN F10.3 FORMAT
  8604. *T, MB+4 60/ PF ACCUMULATOR IN F10.3 FORMAT
  8605. *T, MB+5 60/ AD ACCUMULATOR IN F10.3 FORMAT
  8606. *
  8607. * FUNCTION
  8608. * THE ACCUMULATORS ARE UNPACKED AND STORED 1 PER WORD IN (MB)
  8609. * AND PROGRAM MODE IS ENTERED FOR CONVERSION BY *RDC*. IF
  8610. * TOTAL SRUS ARE LESS THAN OR EQUAL TO *MCSR*, *MCSR* IS
  8611. * RETURNED AS THE SRU ACCUMULATOR.
  8612. *
  8613. *
  8614. * 6 ABIF - INCREMENT ACCUMULATOR.
  8615. *
  8616. * ENTRY
  8617. *T, OR 12/ ACTM,12/ ABIF,30/ ,3/OP,3/CT
  8618. *T, MB+0 30/ ,30/INCREMENT TO APPLY
  8619. *T, MB+1 60/ ACCUMULATOR VALUE
  8620. *
  8621. * OP = OPERATION FLAG (0 = ADD, 1 = SUBTRACT)
  8622. * CT = REQUEST COUNT (1-3)
  8623. *
  8624. * EXIT
  8625. *T, OR 60/ 0
  8626. *T, MB+0 30/ NO CHANGE,30/ NEW VALUE FIRST OPERATION
  8627. *T, MB+2 30/ NO CHANGE, 30/ NEW VALUE SECOND OPERATION
  8628. *
  8629. * FUNCTION
  8630. * THE SRU ACCUMULATOR VALUE IS FIRST CONVERTED TO AN INTEGER
  8631. * NUMBER AND THEN INTEGER ADDITION OR SUBTRACTION IS
  8632. * PERFORMED. IF THE CONVERTED ACCUMULATOR VALUE IS LESS THAN
  8633. * 1, 1 IS USED. THE UPPER HALF OF THE WORDS CONTAINING
  8634. * THE INCREMENTS WILL BE PRESERVED IN THE UPPER HALF OF THE
  8635. * REPLY.
  8636. *
  8637. *
  8638. * 7 ABUS - GET RAW CP TIME - USAGE PRICING.
  8639. *
  8640. * ENTRY
  8641. *T, OR 12/ ACTM,12/ ABUS,36/ -
  8642. *T, MB+0 60/ CPTW CONTROL POINT AREA WORD
  8643. *T, MB+1 60/ CPJW CONTROL POINT AREA WORD
  8644. *
  8645. * EXIT
  8646. *T, OR 60/ 0
  8647. *T, MB 60/ ELAPSED APPLICATION UNITS IN F10.3 FORMAT
  8648. *
  8649. * FUNCTION
  8650. * ELAPSED CP SECONDS (CPTW-CPJW) IS CALCULATED AND THE
  8651. * CPU 0 MULTIPLIER IS FACTORED, TO OBTAIN RAW CP SECONDS.
  8652. * PROGRAM MODE IS ENTERED FOR CONVERSION BY *RDC*.
  8653. *
  8654. * 10 ABOF - CONVERT OTHER ACCUMULATORS.
  8655. *
  8656. * ENTRY
  8657. *T,OR 12/ ACTM,12/ ABOF,36/ -
  8658. *T,MB+0 60/ MPAW/ODAW CONTROL POINT AREA WORD
  8659. *T,MB+1 60/ AUCW CONTROL POINT AREA WORD
  8660. *
  8661. * EXIT
  8662. *T,OR 60/ 0
  8663. *T,MB+0 60/ MP ACCUMULATOR IN F10.3 FORMAT
  8664. *T,MB+1 60/ AUC ACCUMULATOR IN F10.3 FORMAT
  8665. *T,MB+2 60/ OD ACCUMULATOR IN F10.3 FORMAT
  8666. *
  8667. * FUNCTION
  8668. * THE ACCUMULATORS ARE UNPACKED AND STORED 1 PER WORD
  8669. * IN (MB) AND PROGRAM MODE IS ENTERED FOR CONVERSION
  8670. * BY ROUTINE *RDC*.
  8671.  
  8672.  
  8673. PPR ACTM,,RDC
  8674.  
  8675. AX1 36 GET FUNCTION NUMBER
  8676. SB4 X1-TACTL
  8677. SA1 A5+B1 GET (MB)
  8678. PL B4,HNG IF ILLEGAL FUNCTION
  8679. JP TACT+TACTL+B4 JUMP TO PROCESS FUNCTION
  8680.  
  8681. * OPTION TABLE.
  8682.  
  8683. TACT BSS 0
  8684. LOC 0
  8685.  
  8686. + SB4 B0 (ABCS) - CLEAR SRU ACCUMULATORS
  8687. MX6 0
  8688. EQ ACT1 CLEAR *SRJW* AND *SRUW* FIELDS
  8689.  
  8690. + EQ ACT2 (ABBF) - ACCOUNT BLOCK BEGIN
  8691.  
  8692. + EQ ACT4 (ABSF) - COMPUTE SRU MULTIPLIERS CPM AND IO
  8693.  
  8694. + MX6 0 (ABCF) - ACCOUNT BLOCK CHANGE/END
  8695. EQ ACT1
  8696.  
  8697. + SA2 A1+B1 (ABEF) - COMPUTE/CONVERT ELAPSED SRUS
  8698. MX3 -42
  8699. EQ ACT6
  8700.  
  8701. + SA1 A1+3 (ABVF) - CONVERT ACCUMULATORS
  8702. EQ ACT7
  8703.  
  8704. + SB6 3 (ABIF) - INCREMENT ACCUMULATORS
  8705. EQ ACT10
  8706.  
  8707. + BX6 X1 (ABUS) - GET RAW CP TIME - USAGE PRICING
  8708. MX0 -30
  8709. EQ ACT15
  8710.  
  8711. SA1 A1+B1 (ABOF) - CONVERT OTHER ACCUMULATORS
  8712. MX2 -29
  8713. EQ ACT9.1
  8714.  
  8715.  
  8716. TACTL BSS 0
  8717. LOC *O
  8718.  
  8719. * CLEAR SRU ACCUMULATORS.
  8720. * (X6) = 0.
  8721.  
  8722. ACT1 SA2 B7+SRJW CLEAR SRU ACCUMULATOR SET AT START OF JOB
  8723. SA6 B7+SRUW CLEAR RUNNING ACCUMULATOR
  8724. MX3 30
  8725. BX7 X3*X2
  8726. SA7 A2+
  8727. SX7 B0+
  8728. PL B4,PPR1 IF *ABCS* SUBFUNCTION
  8729.  
  8730. * STORE MULTIPLIERS IN CONTROL POINT AREA.
  8731. * (X1) = 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
  8732.  
  8733. ACT2 SX6 MPSR SET MAP MULTIPLIER
  8734. SA3 B7+MPMW
  8735. MX2 -12
  8736. LX1 12
  8737. MX4 -42
  8738. BX5 -X2*X1 (X5) = M1
  8739. IX6 X6*X5 M1 * MAP MULTIPLIER
  8740. BX4 -X4*X3
  8741. SA3 B7+MP2W
  8742. LX6 42
  8743. BX6 X4+X6
  8744. SA6 B7+MPMW
  8745. SB4 B1+B1 SET LOOP COUNT
  8746. SX4 1000
  8747. ACT3 LX1 12
  8748. IX6 X5*X4 PASS 1 - M1*1000 PASS 2 - M1*M3
  8749. BX4 -X2*X1
  8750. IX7 X5*X4 PASS 1 - M1*M2 PASS 2 - M1*M4
  8751. LX6 42
  8752. MX4 -24
  8753. LX7 24 POSITION MULTIPLIERS
  8754. BX3 -X4*X3
  8755. IX6 X6+X7 COMBINE MULTIPLIERS
  8756. LX1 12
  8757. IX6 X6+X3 INSERT MULTIPLIERS
  8758. BX4 -X2*X1
  8759. SA6 A3+
  8760. SB4 B4-B1 DECREMENT LOOP COUNT
  8761. SA3 A3-B1 PASS 2 - STORE M1*M3 AND M1*M4 IN MP1W
  8762. NZ B4,ACT3 IF PASS 2
  8763.  
  8764. * APPLY ADDER TO SRU ACCUMULATOR.
  8765. * (X1) = 48/ -,12/ ADDER
  8766.  
  8767. SB3 ACT4 SET RETURN ADDRESS
  8768. BX1 X4
  8769. NZ X4,AAD IF ADDER TO APPLY
  8770.  
  8771. * CALCULATE SRU MULTIPLIERS CPM AND IOM.
  8772.  
  8773. ACT4 SB4 ACT5 SET RETURN ADDRESS
  8774. EQ SRU CALCULATE CPM AND IOM
  8775.  
  8776. ACT5 MX7 0 SET TO CLEAR (OR)
  8777. EQ PPR1 EXIT
  8778.  
  8779. * COMPUTE AND CONVERT ELAPSED SRUS.
  8780. * (X1) = OLD SRU ACCUMULATOR. (X2) = NEW SRU ACCUMULATOR.
  8781.  
  8782. ACT6 LX1 12 RESTORE ORIGINAL ACCUMULATOR SIZE
  8783. SA4 ACTA SET MINIMUM DISPLAY VALUE
  8784. BX1 -X3*X1 ISOLATE OLD SRUS
  8785. SX7 10001B PARAMETERS FOR RDC (PROGRAM MODE)
  8786. BX2 -X3*X2 ISOLATE NEW SRUS
  8787. IX6 X2-X1 NEW - OLD
  8788. SA6 A1 STORE ELAPSED SRUS IN (MB)
  8789. IX4 X6-X4 COMPARE TO MINIMUM
  8790. PL X4,ACT9 IF GREATER THAN MINIMUM
  8791. MX7 0 SET TO CLEAR (OR)
  8792. SA7 A5+B1 CLEAR (MB)
  8793. EQ PPR1 EXIT
  8794.  
  8795. * CONVERT ACCUMULATORS.
  8796. * (X1) = (MB+3) - MP1W WORD FROM CONTROL POINT AREA.
  8797.  
  8798. ACT7 MX2 -20 SET ACCUMULATOR MASK
  8799. SB6 3 SET ACCUMULATOR COUNT
  8800. BX6 -X2*X1 ISOLATE AD ACCUMULATOR
  8801. SX7 60201B PARAMETERS FOR *RDC* (PROGRAM MODE)
  8802. SA1 A1-1 GET MS, MT AND PF ACCUMULATORS
  8803. ACT8 SA6 A1+B6 STORE ACCUMULATOR
  8804. BX6 -X2*X1 ISOLATE NEXT ACCUMULATOR
  8805. AX1 20 SHIFT FOR NEXT PASS
  8806. SB6 B6-B1 DECREMENT ACCUMULATOR COUNT
  8807. PL B6,ACT8 IF MORE TO MOVE
  8808. SA1 ACTB SET MINIMUM CHARGE VALUE
  8809. SA2 A5+B1 SRU ACCUMULATOR
  8810. MX6 -42
  8811. BX6 -X6*X2 ISOLATE SRU ACCUMULATOR
  8812. IX6 X6-X1
  8813. PL X6,ACT9 IF GREATER THAN MINIMUM
  8814. BX6 X1
  8815. SA6 A2
  8816.  
  8817. * ENTER PROGRAM MODE FOR CONVERSION BY RDC.
  8818. * (X5) = (OR). (X7) = RDC PARAMETERS.
  8819.  
  8820. ACT9 MX1 12 SET (OR) MASK
  8821. LX7 24 POSITION RDC PARAMETERS
  8822. BX5 X1*X5 ISOLATE (OR) FUNCTION CODE
  8823. IX5 X5+X7 INSERT RDC PARAMETERS
  8824. EQ PMR ENTER PROGRAM MODE
  8825.  
  8826. * CONVERT OTHER ACCUMULATORS.
  8827. * (X1) = (MB+1) - AUCW WORD FROM CONTROL POINT AREA
  8828.  
  8829. ACT9.1 BX6 -X2*X1 ISOLATE AUC ACCUMULATOR
  8830. SA1 A1-B1 GET MP/OD ACCUMULATOR
  8831. SA6 A1+B1
  8832. MX2 -20 SET ACCUMULATOR MASK
  8833. BX7 -X2*X1
  8834. SA7 A1+ STORE MP ACCUMULATOR
  8835. LX1 -20
  8836. BX6 -X2*X1
  8837. SA6 A6+B1 STORE OD ACCUMULATOR
  8838. SX7 30000B PARAMETERS FOR *RDC* (PROGRAM MODE)
  8839. EQ ACT9 PROCESS CONVERSION IN *RDC*
  8840.  
  8841. * INCREMENT ACCUMULATOR.
  8842.  
  8843. ACT10 MX0 -3
  8844. BX2 -X0*X5 REQUEST COUNT
  8845. SB5 X2
  8846. AX5 3
  8847. BX2 -X0*X5 OPERATION FLAG
  8848. SB4 X2+
  8849. MX0 -42
  8850. ZR B5,HNG IF NO REQUEST COUNT
  8851. GT B5,B6,HNG IF ILLEGAL REQUEST COUNT
  8852. GT B4,B1,HNG IF ILLEGAL OPERATION FLAG
  8853. ACT11 MX3 -30
  8854. SA2 A1+B1 GET NEXT PARAMETER
  8855. BX2 -X0*X2
  8856. BX5 -X3*X1
  8857. PX2 X2 CONVERT ACCUMULATOR TO UNITS
  8858. BX1 X3*X1 PRESERVE UPPER HALF
  8859. SA3 HTH
  8860. FX4 X3*X2 .0000001
  8861. UX2 X4
  8862. NZ X2,ACT12 IF ACCUMULATOR NOT LESS THAN 1
  8863. SX2 B1
  8864. ACT12 ZR B4,ACT14 IF ADDITION DESIRED
  8865. IX6 X2-X5
  8866. ACT13 SA6 A1 STORE REPLY IN MESSAGE BUFFER
  8867. EQ B5,B1,PPR1 IF ALL REQUESTS HONORED
  8868. SA1 A2+B1
  8869. SB5 B5-B1
  8870. EQ ACT11 PROCESS NEXT REQUEST
  8871.  
  8872. ACT14 IX6 X2+X5 PERFORM ADDITION
  8873. BX6 X1+X6
  8874. JP ACT13
  8875.  
  8876. * GET RAW CP TIME - USAGE PRICING.
  8877.  
  8878. ACT15 SB4 ACT15.1 SET *MSB* RETURN ADDRESS
  8879. SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
  8880. EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
  8881.  
  8882. ACT15.1 SA2 A1+B1 GET *CPJW* VALUE
  8883. AX6 8
  8884. BX2 -X0*X2
  8885. IX6 X6-X2 CALCULATE NUMBER OF CP QUARTER SECONDS
  8886. NZ X6,ACT16 IF NOT LESS THAN MINIMUM
  8887. SX6 B1+
  8888. ACT16 SX7 10100B PARAMETERS FOR *RDC* (PROGRAM MODE)
  8889. SA2 =250000 CONVERT TO CP MICROSECONDS
  8890. IX6 X6*X2
  8891. SA2 ACTC
  8892. ZR X2,ACT17 IF NO MULTIPLIER CALCULATION REQUIRED
  8893. PX6 X6 FACTOR OUT THE CPU MULTIPLIER
  8894. NX6 X6
  8895. RX6 X6*X2
  8896. UX6,B6 X6
  8897. LX6 X6,B6
  8898. ACT17 SX2 4000 CONVERT TO CP QUARTER NANOSECONDS
  8899. IX6 X6*X2
  8900. SA6 A1
  8901. EQ ACT9 TO CONVERT RAW CP MILLISECOND VALUE
  8902.  
  8903. ACTA CON MDSR*10000 MINIMUM DISPLAY VALUE FOR SRU ACCUMULATOR
  8904. ACTB CON MCSR*10000 MINIMUM CHARGE VALUE FOR SRU ACCUMULATOR
  8905. ACTC CON 0.0 MULTIPLIER FOR APPLICATION ACCOUNTING
  8906. AFAM SPACE 4,10
  8907. *** AFAM - ACCESS FAST ATTACH.
  8908. * AFAM ATTACHES OR RELEASES FAST ATTACH FILES.
  8909. *
  8910. * ENTRY
  8911. *T OR 12/ AFAM,12/ EQ,1/ NR,11/ P1,12/ SF,12/ P2
  8912. * EQ EST ORDINAL OF DEVICE WHERE THE FAST
  8913. * ATTACH FILE RESIDES, IF GLOBAL FAST ATTACH FILE.
  8914. * 0, IF LOCAL FAST ATTACH FILE.
  8915. * NR NON-ROLLABLE OPTION (VALID ONLY ON WRITEABLE MODES
  8916. * FOR *AFAS* SUBFUNCTION).
  8917. * P1 MODE OF ATTACH.
  8918. * P2 FNT ORDINAL.
  8919. * SF SUBFUNCTION CODE AS DEFINED IN COMSCPS.
  8920. * AFAS = 0 = ATTACH FAST ATTACH FILE.
  8921. * RFAS = 1 = RETURN FAST ATTACH FILE.
  8922. *
  8923. * EXIT
  8924. *T, OR 12/ 0,12/ ST,24/ ,4/ WF,6/ ,1/ NR,1/
  8925. * ST = 0 IF FUNCTION COMPLETE.
  8926. * ST = 1 IF FUNCTION CANNOT BE COMPLETED AT THIS TIME.
  8927. * FILE IS ATTACHED IN A CONFLICTING MODE.
  8928. * WF .NE. 0 IF FILE ALREADY ATTACHED IN A WRITABLE MODE (AFAS
  8929. * REJECT ONLY).
  8930. * NR = NON-ROLLABLE FLAG (AFAS REJECT ONLY).
  8931. *
  8932. * *PP HUNG* WILL OCCUR IF -
  8933. * 1) ILLEGAL FUNCTION CODE IS DETECTED.
  8934. * 2) ILLEGAL FNT ORDINAL DETECTED.
  8935. * 3) ILLEGAL MODE NUMBER DETECTED.
  8936. * 4) FILE NOT *FAFT*.
  8937. *
  8938. * THIS FUNCTION MAY BE REJECTED IF -
  8939. * 1) THE GLOBAL FST IS BUSY.
  8940. * WHEN THIS OCCURS BIT 59 OF OR IS SET AND *PPR* WILL
  8941. * RECALL CPUMTR TO RETRY THE REQUEST.
  8942. *
  8943. * NOTE - AFTER AN *AFAS* SUBFUNCTION, IT IS THE RESPONSIBILITY
  8944. * OF THE CALLER TO ENSURE THAT THE TRT ON THIS MAINFRAME
  8945. * IS CURRENT. IN SOME CASES, THIS MAY REQUIRE AN EXPLICIT
  8946. * *STBM/UTRS* REQUEST FOR AN UP-TO-DATE TRT. NOTE THAT WHEN
  8947. * A FILE IS TO BE ACCESSED VIA *CIO* CALLS, CERTAIN ACCESS
  8948. * MODES (M, RM, A, RA) WILL FORCE *STBM* CALLS BEFORE
  8949. * EACH ACCESS. THEREFORE, WHEN *PFM* ATTACHES A FILE IN
  8950. * SUCH A MODE, A TRT UPDATE REQUEST IS NOT NEEDED.
  8951. *
  8952. * NOTE - IF A FAST ATTACH FILE RESIDES ON AN INDEPENDENT
  8953. * SHARED DEVICE, *1FA* PROCESSES THE REQUEST DIRECTLY
  8954. * WITHOUT CALLING *AFAM*. *1FA* MAINTAINS THE COUNTS AND
  8955. * INTERLOCKS IN THE SYSTEM SECTOR INSTEAD OF THE FST.
  8956.  
  8957.  
  8958. PPR AFAM,(/ISD/CHR,ISD,/MMF/AFAP,MMF,/MONITOR/.AFAM)
  8959. LX1 48
  8960. MX4 -12
  8961. BX6 -X4*X1
  8962. LX6 59
  8963. SB6 X6+
  8964. SB5 PPRX SET *REJ* EXIT
  8965. NZ B6,HNG IF ILLEGAL SUBFUNCTION
  8966. LX1 48 POSITION ATTACH MODE
  8967. BX5 -X4*X5 EXTRACT FNT ORDINAL
  8968. TX7 X5,-FNTM ORDINAL - MAXIMUM NUMBER OF ENTRIES
  8969. MX0 -11
  8970. BX3 -X0*X1 MODE OF FAST ATTACH FILE
  8971. SX0 X3-TFASL
  8972. BX7 X7*X0
  8973. PL X7,HNG IF ILLEGAL FNT ORDINAL/ATTACH MODE
  8974. CX2 X5,FNT
  8975. TA2 X2+FNTG,FNT GET FNT ENTRY
  8976. BX0 -X4*X2
  8977. AX0 6
  8978. SA3 TFAS+X3 READ MODE PARAMETERS
  8979. SX0 X0-FAFT
  8980. LX2 -1
  8981. NG X2,REJ IF FILE BUSY
  8982. LX2 -11
  8983. MX5 -6
  8984. BX2 -X5*X2
  8985. NZ X0,HNG IF NOT *FAFT* FILE
  8986. SA1 A2+B1 GET FST ENTRY
  8987. ERRNZ FSTG-FNTG-1 CODE DEPENDS ON VALUE
  8988. SB4 A1 FST ADDRESS
  8989. TNZ X2,(/MMF/SFI,MMF,/LSPMMF/AFA) IF FAT ENTRY IN EM
  8990.  
  8991. * PERFORM UPDATE.
  8992.  
  8993. AFA1 UX3,B6 X3 (B6) = POSITION OF FIELD
  8994. BX2 -X4*X3 (X2) = FIELD MASK
  8995. AX5 X1,B6 POSITION FIELD TO BOTTOM OF WORD
  8996. LX3 -24
  8997. BX5 X2*X5 CURRENT VALUE OF FIELD
  8998. BX4 -X4*X3
  8999. MX7 1
  9000. LX4 X4,B6 INCREMENT SHIFTED TO FIELD POSITION
  9001. NG X6,AFA2 IF DECREMENTING FIELD
  9002. UX3,B5 X3 (B5) = -MASK WIDTH
  9003. LX3 -12
  9004. AX6 X7,B5 FORM BUSY MASK
  9005. BX4 -X4 COMPLEMENT INCREMENT VALUE
  9006. SB5 X3 SET POSITION OF BUSY MASK
  9007. LX6 X6,B5
  9008. BX5 X2-X5
  9009. BX3 -X6*X1 CHECK IF BUSY STATUS
  9010. NZ X3,AFA5 IF FILE BUSY
  9011. AFA2 ZR X5,AFA5 IF OVERFLOW/UNDERFLOW
  9012. SB5 B6-8
  9013. IX6 X1-X4 INCREMENT/DECREMENT FIELD
  9014. SX2 B1+B1
  9015. NZ B5,AFA4 IF NOT WRITABLE MODE
  9016. SA5 A5
  9017. LX5 59-12
  9018. NG X5,AFA3 IF RETURNING FAST ATTACH FILE
  9019. LX5 59-35-59+12
  9020. PL X5,AFA4 IF NON-ROLLABLE BIT NOT REQUESTED
  9021. BX6 X2+X6 SET NON-ROLLABLE BIT
  9022. EQ AFA4 STORE GLOBAL WORD
  9023.  
  9024. AFA3 BX6 -X2*X6 CLEAR NON-ROLLABLE BIT
  9025. AFA4 SA6 A1 STORE GLOBAL WORD
  9026. TNZ X0,(/MMF/CFI,MMF,/MONITOR/HNG) IF FAT ENTRY IN EM
  9027. SX7 B0
  9028. EQ CSM CHECK FOR STORAGE MOVE
  9029.  
  9030. AFA5 LX7 37 POSITION STATUS
  9031. TNZ X0,(/MMF/CFI1,MMF,/MONITOR/HNG) IF EM PROCESSING
  9032. AFA6 ZR X7,CSM IF NO REJECT
  9033. MX4 -12
  9034. BX3 -X4*X1
  9035. BX7 X7+X3
  9036. EQ CSM CHECK FOR STORAGE MOVE
  9037. SPACE 4,15
  9038. ** AFAM PARAMETER TABLE FORMAT.
  9039. * THE FOLLOWING TABLE DEFINES THE PARAMETERS NEEDED TO PERFORM
  9040. * 1) BUSY CHECK.
  9041. * THE BUSY CHECK IS PERFORMED BY DEFINING A FIELD IN THE WORD
  9042. * WHICH MUST BE ZERO FOR THE UPDATE TO TAKE PLACE.
  9043. * 2) OVERFLOW/UNDERFLOW CHECK.
  9044. * 3) INCREMENT/DECREMENT OF FIELDS UPDATED BY *AFAM* FUNCTIONS.
  9045. *
  9046. *T, AFAM 12/ P1,12/ P2,12/ INC,12/ W,12/ MAX
  9047. * P1 POSITION OF FIELD TO INCREMENT + 2000B
  9048. * P2 POSITION OF BUSY MASK
  9049. * INC VALUE TO USE FOR INCREMENT/DECREMENT
  9050. * W 2073B - WIDTH OF BUSY MASK
  9051. * MAX MAXIMUM VALUE OF FIELD (FOR INCREMENT)
  9052. * MAX FIELD MASK (FOR DECREMENT)
  9053.  
  9054.  
  9055. TFAS BSS 0 TABLE OF FAST ATTACH PROCESSING PARAMETERS
  9056. LOC 0
  9057.  
  9058. VFD 12/2000B+8,12/2,12/7,12/2073B-34,12/7 WRITE
  9059. VFD 12/2000B+12,12/8,12/1,12/2073B-4,12/77B READ
  9060. VFD 12/2000B+8,12/2,12/1,12/2073B-16,12/1 APPEND
  9061. VFD 12/2000B+12,12/8,12/1,12/2073B-4,12/77B EXECUTE
  9062. VFD 12/2000B,12/0,12/0,12/2073B-59,12/0 NULL
  9063. VFD 12/2000B+8,12/2,12/3,12/2073B-22,12/3 MODIFY
  9064. VFD 12/2000B+24,12/10,12/1,12/2073B-1,12/7777B R/MODIFY
  9065. VFD 12/2000B+18,12/9,12/1,12/2073B-3,12/77B R/APPEND
  9066. VFD 12/2000B+8,12/8,12/10B,12/2073B-16,12/10B UPDATE
  9067. VFD 12/2000B+2,12/8,12/1,12/2073B-3,12/77B R/UPDATE
  9068. LOC *O
  9069.  
  9070. TFASL EQU *-TFAS
  9071. BFMM SPACE 4,25
  9072. *** BFMM - BUFFERED I/O BUFFER MANAGER CALL.
  9073. *
  9074. * ENTRY
  9075. *T OR 12/ BFMM,6/ NBI,1/I,5/,6/ CP,18/ FNTA,6/ OP,6/ PA
  9076. * NBI NUMBER OF ADDITIONAL WRITE BUFFERS TO
  9077. * INTERLOCK (FOR *BMVI* OPERATION ONLY).
  9078. * MAXIMUM OF 10D ADDITIONAL BUFFERS IS ALLOWED.
  9079. * I CURRENT BUFFER ALREADY INTERLOCKED FLAG
  9080. * (FOR *BMVI* OPERATION ONLY).
  9081. * CP CONTROL POINT NUMBER IF PSEUDO-PP CALL.
  9082. * 0 IF PP CALL.
  9083. * FNTA FNT RELATIVE ADDRESS IN NEGATIVE IF PSEUDO-PP CALL.
  9084. * PSEUDO-FNT ADDRESS IF PP CALL.
  9085. * EST ORDINAL OF EQUIPMENT TO PROCESS IF *BMFW* OR
  9086. * *BMDD* OPERATION.
  9087. * 0 IF *BMFW* TO PROCESS ALL EQUIPMENTS.
  9088. * OP OPERATION CODE.
  9089. * BMRD = READ BUFFER.
  9090. * BMWR = WRITE BUFFER.
  9091. * BMRW = REWRITE BUFFER.
  9092. * BMVI = VALIDATE AND INTERLOCK BUFFER.
  9093. * BMRG = RELEASE READ BUFFER AND GET NEXT BUFFER.
  9094. * BMRB = RELEASE READ BUFFER.
  9095. * BMFL = FLUSH BUFFER.
  9096. * BMRF = RELEASE AND FLUSH WRITE BUFFER.
  9097. * BMFW = FLUSH ALL WRITE BUFFERS.
  9098. * BMTR = TERMINATE SHARED DEVICE READ ACCESS.
  9099. * BMTW = TERMINATE SHARED DEVICE WRITE ACCESS.
  9100. * BMDB = DROP ALL BUFFERS FOR FILE.
  9101. * BMDD = DROP ALL BUFFERS ON DEVICE.
  9102. * BMCR = COMPLETE SHARED DEVICE READ ACCESS REQUEST.
  9103. * BMCW = COMPLETE SHARED DEVICE WRITE ACCESS REQUEST.
  9104. * PA OPERATION CODE DEPENDENT PARAMETER.
  9105. * FOR *BMRD* - BUFFER COUNT.
  9106. * 0 = USE DEFAULT BUFFER COUNT.
  9107. * BUFFER COUNT IF .NE. 0.
  9108. * FOR *BMWR* - RECALL ALLOWED FLAG.
  9109. * 0 = RECALL ALLOWED.
  9110. * 1 = RECALL NOT ALLOWED.
  9111. * FOR *BMVI* - OPERATION CODE TO BE EXECUTED IF BUFFER
  9112. * CANNOT BE INTERLOCKED IN MONITOR MODE.
  9113. * *BMRD* = INTERLOCK FOR READ.
  9114. * *BMWR* = INTERLOCK FOR WRITE.
  9115. * FOR *BMRF* - WRITE OPERATION CODE TO BE EXECUTED ON
  9116. * NEXT BUFFER AFTER FLUSH OF CURRENT BUFFER.
  9117. * 0 = NO WRITE OPERATION.
  9118. * *BMWR* = WRITE BUFFER.
  9119. * *BMRW* = REWRITE BUFFER.
  9120. * FOR *BMFW* - RESTART 819 I/O FLAG.
  9121. * 0 = DO NOT RESTART 819 I/O.
  9122. * RESTART 819 I/O IF .NE. 0.
  9123. * FOR *BMCR*, *BMCW* - STATUS CODE.
  9124. * 0 = NORMAL COMPLETION.
  9125. * 1 = *BRT* ENTRY EVICTED BY *MTE*.
  9126. * 2 = OTHER MACHINE CANNOT RELEASE WRITE ACCESS.
  9127. *
  9128. *T FNT+0 60/
  9129. *T,FNT+1 3/,9/ EQ,12/,12/ CT,12/ CS,12/
  9130. *T,FNT+2 48/,12/ BI
  9131. * EQ EST ORDINAL.
  9132. * CT CURRENT LOGICAL TRACK.
  9133. * CS CURRENT LOGICAL SECTOR.
  9134. * BI BUFFER INDEX FOR OP = BMVI, BMRG, BMRB AND BMRF.
  9135. *
  9136. * EXIT
  9137. *T, OR 36/0, 12/ BI,5/ ST,7/0
  9138. * BI BUFFER INDEX.
  9139. * ST STATUS.
  9140. * BIT 11 SET IF BUFFER RECALL.
  9141. * BIT 10 SET IF BUFFER BUSY.
  9142. * BIT 9 SET IF I/O ERROR.
  9143. * BIT 8 SET IF INACCESSIBLE DEVICE.
  9144. * BIT 7 SET IF ADDRESS ERROR.
  9145. *
  9146. * FOR *BMVI* OPERATION WITH *BMWR* OR *BMRW* SUBFUNCTION,
  9147. * ORDINALS OF ADDITIONAL WRITE BUFFERS INTERLOCKED ARE RETURNED
  9148. * IN *MB* AND *MB*+1 -
  9149. *
  9150. *T, MB 12/ BF5,12/ BF4,12/ BF3,12/ BF2,12/ BF1
  9151. *T, MB+1 12/ BF10,12/ BF9,12/ BF8,12/ BF7,12/ BF6
  9152. * BF(N) BUFFER INDEX OF (N)TH MULTIPLE WRITE
  9153. * BUFFER RESERVED FOR *BMVI* OPERATION (ZERO
  9154. * INDICATES NO (N)TH BUFFER INTERLOCKED).
  9155. *
  9156. *
  9157. * HANG CONDITIONS -
  9158. *
  9159. * 1. INVALID OPERATION CODE.
  9160. * 2. INVALID SUBFUNCTION FOR *BMVI* OPERATION.
  9161. * 3. MULTIPLE WRITE BUFFER COUNT .GT. 10D FOR *BMVI*
  9162. * OPERATION.
  9163. * 4. NEXT TRACK NOT RESERVED WHEN NEEDED FOR MULTIPLE
  9164. * WRITE BUFFER REQUEST.
  9165.  
  9166.  
  9167. PPR BFMM,(/BUFIO/BFM,BUFIO,/MONITOR/HNG),(/BUFIO/BFM3,BUFIO
  9168. ,,/PROGRAM/HNG)
  9169. BIOM SPACE 4,40
  9170. *** BIOM - BUFFERED I/O CONTROL.
  9171. *
  9172. * THIS FUNCTION PROCESSES CPU INTERRUPTS BY DEDICATED BUFFERED
  9173. * DEVICE DRIVERS. NOTE THAT THESE DRIVERS DO NOT USE *PPR* TO
  9174. * ISSUE THE *BIOM* MONITOR FUNCTION, THEREFORE, THE FLAGS IN
  9175. * BITS 59-56 OF THE PP OUTPUT REGISTER ARE NOT RECOGNIZED.
  9176. *
  9177. * ENTRY -
  9178. *T, OR 12/ BIOM, 12/ SF, 12/ PO, 1/ I, 11/ NB, 12/ P1
  9179. *
  9180. * SF SUBFUNCTION -
  9181. * SUIS = 0 = SET UNIT INTERLOCK.
  9182. * DCBS = 1 = DELINK CONTROL BUFFERS.
  9183. * SETS = 2 = SET ERROR STATUS IN *CBT*.
  9184. * IDSS = 3 = INHIBIT DATA STREAMING.
  9185. * CETS = 4 = CLEAR ERROR STATUS FROM I/O QUEUE.
  9186. *
  9187. * PO *PUT* ORDINAL.
  9188. * I CLEAR UNIT INTERLOCK FLAG.
  9189. * NB NUMBER OF CONTROL BUFFERS TO PROCESS.
  9190. * (THE UNIT INTERLOCK FLAG MUST BE SET IF THE *PROBE*
  9191. * TABLE *IOST* IS TO BE UPDATED.)
  9192. * P1 FOR *DCBS* SUBFUNCTION, NUMBER OF CBT-S PROCESSED.
  9193. * FOR *SETS* SUBFUNCTION, ERROR CODE.
  9194. * FOR *PCIS* SUBFUNCTION, CHANNEL NUMBER.
  9195. * FOR OTHER SUBFUNCTIONS, UNUSED.
  9196. *
  9197. * EXIT -
  9198. *T, OR 12/0, 12/ ST, 36/0
  9199. *
  9200. * ST REPLY STATUS - *SUIS*
  9201. * = 0 IF UNIT INTERLOCK SET FOR CALLING PP.
  9202. * = OR ADDRESS OF PP HOLDING UNIT INTERLOCK.
  9203. *
  9204. * REPLY STATUS - *SETS*
  9205. * = 0 IF ERROR RECOVERY ON ALTERNATE CHANNEL.
  9206. * = 1 IF NO ERROR RECOVERY. CALLER IS RESPONSIBLE FOR
  9207. * ISSUING ALL MESSAGES ASSOCIATED WITH THE ERROR.
  9208. *
  9209. * REPLY STATUS - *PCIS*
  9210. * = 0 IF CHANNEL MAY BE DOWNED ON SPECIFIED UNIT.
  9211. * = 1 IF REQUESTS REQUIRING SPECIFIED CHANNEL ARE STILL
  9212. * PENDING ON SPECIFIED UNIT.
  9213. *
  9214. * REPLY STATUS - ALL OTHER SUBFUNCTIONS
  9215. * = 0.
  9216. *
  9217. * *PP HUNG.* WILL OCCUR IF-
  9218. * 1) BUFFER COUNT = 0 ON AN I/O COMPLETE.
  9219.  
  9220.  
  9221. PPR BIOM,(/IHPFMD/BIO,IHPFMD,/MONITOR/HNG),,FEX
  9222. BMIM SPACE 4,10
  9223. *** BMIM - BUFFERED MEMORY INVALIDATION.
  9224. *
  9225. * THIS FUNCTION IS USED TO INVALIDATE BUFFERED MEMORY. IT
  9226. * SHOULD BE USED ONLY ON CYBER 170-835 AND CYBER 170-855
  9227. * MACHINES. IF CACHE IS NOT PRESENT, THE FUNCTION IS IGNORED.
  9228. *
  9229. * ENTRY
  9230. *T, OR 12/ BMIM,12/ SF,12/,12/ MF,12/
  9231. * SF SUBFUNCTION -
  9232. * ICMS = 1 INVALIDATE CACHE MEMORY.
  9233. * MF MODE FLAG -
  9234. * = 0 IF CENTRAL MEMORY.
  9235. * = 1 IF EXTENDED MEMORY.
  9236. *
  9237. * EXIT
  9238. *T, OR 60/0
  9239. *
  9240. * PP HANG CONDITIONS -
  9241. * INVALID SUBFUNCTION.
  9242. * INVALID MODE FLAG ON *ICMS* SUBFUNCTION.
  9243.  
  9244.  
  9245. PPR BMIM
  9246.  
  9247. SA1 MABL GET LOWER CYBER 170-8XX FLAG
  9248. MX4 -4
  9249. LX1 59-47
  9250. NG X1,MTRC IF NOT LOWER CYBER 170-8XX MAINFRAME
  9251. SA1 EABL+CPEI GET PROCESSOR 0 DESCRIPTOR POINTER
  9252. LX1 18
  9253. SA1 X1+/DSL/DEGR/5 GET SECOND WORD OF DESCRIPTOR
  9254. LX1 0-47
  9255. LX1 0-12
  9256. BX1 -X4*X1 CACHE DEGRADATION FLAGS
  9257. NZ X1,PPR1 IF NO CACHE PRESENT
  9258. MX0 -12
  9259. BX3 X5
  9260. LX3 0-36
  9261. BX3 -X0*X3 SUBFUNCTION
  9262. SB4 X3-TBMIL
  9263. ZR X3,HNG IF INVALID SUBFUNCTION
  9264. PL B4,HNG IF INVALID SUBFUNCTION
  9265. JP B4+TBMI+TBMIL-1 ENTER SUBFUNCTION PROCESSOR
  9266.  
  9267. TBMI BSS 0
  9268. LOC 1
  9269.  
  9270. + AX5 12 (ICMS) - INVALIDATE CACHE
  9271. BX3 -X0*X5 MODE FLAG
  9272. EQ BMI1 ENTER *ICMS* PROCESSOR
  9273.  
  9274. TBMIL BSS 0
  9275. LOC *O
  9276.  
  9277. BMI1 SB4 X3-1 CHECK FOR INVALID MODE
  9278. GT B4,B0,HNG IF INVALID MODE
  9279. SA7 A5 COMPLETE FUNCTION
  9280. SB4 B7+FLSW
  9281. ERRNZ ECSW-FLSW-2 CODE ASSUMES *ECSW*=*FLSW*+2
  9282. LX3 1 MODE*2
  9283. SA1 B4+X3 GET *FLSW*/*ECSW*
  9284. BX2 -X0*X1 CM/EM FL
  9285. LX2 6
  9286. LX1 24
  9287. AX1 36 CM/UEM RA
  9288. LX1 6
  9289. ZR X3,BMI2 IF CM MODE
  9290. TLX1 3,UESC RELATIVE UEM ADDRESS
  9291. MX3 1
  9292. BX1 X3+X1 SET EXTENDED MEMORY FLAG
  9293. TLX2 3,UESC UEM FL
  9294. BMI2 IC X1,X2,703B TELL EI TO INVALIDATE CACHE BLOCK
  9295. EQ MTRX EXIT
  9296. CCAM SPACE 4
  9297. *** CCAM - CHANGE CONTROL POINT ASSIGNMENT.
  9298. * ENTERED FROM *TIOM*.
  9299. *
  9300. * ENTRY
  9301. *T, OR 12/ CCAM,1/J,1/R,1/M,1/A,1/,7/ CP,12/ EJTO,24/
  9302. * J IF SET, INDICATES EJT ORDINAL NOT REQUIRED AT NEW
  9303. * CONTROL POINT.
  9304. * R IF SET, (SCHEDULER CALL TO RESERVE CONTROL POINT) SET
  9305. * JOB ADVANCE AND INTERLOCK FLAGS FOR JOB SPECIFIED BY
  9306. * EJT ORDINAL *P* AND SET EJT ORDINAL IN CP AREA WORD
  9307. * *TFSW*. THE FUNCTION WILL BE REJECTED IF THE JOB
  9308. * ADVANCE OR INTERLOCK FLAGS ARE ALREADY SET OR IF THE
  9309. * CP IS OCCUPIED (EJT ORDINAL ALREADY SET).
  9310. * M IF SET, REJECT CHANGE IF MOVE FLAG SET. IF NOT SET
  9311. * AND THE MOVE FLAG IS SET AT THE NEW CP/PCP, A *PRLM*
  9312. * FUNCTION WILL BE ENTERED IN THE OUTPUT REGISTER AFTER
  9313. * THE CHANGE. THIS OPTION WILL BE IGNORED IF THE
  9314. * REQUEST IS TO CLEAR AN ALTERNATE CP/PCP ASSIGNMENT.
  9315. * A IF SET AND *CP* .NE. 0, SET ALTERNATE CP/PCP
  9316. * ASSIGNMENT TO CP OR PCP *CP*. IF SET AND *CP* .EQ. 0,
  9317. * CLEAR ALTERNATE CP/PCP ASSIGNMENT.
  9318. * CP NEW CONTROL POINT OR PSEUDO-CONTROL POINT NUMBER.
  9319. * PSEUDO-CONTROL POINT IS ALLOWED ONLY IF *A* IS SET.
  9320. * IF ZERO, CLEAR ALTERNATE CP/PCP ASSIGNMENT (*A* MUST
  9321. * BE SET).
  9322. * EJTO EJT ORDINAL TO SET. IGNORED IF *R* OPTION NOT SET.
  9323. *
  9324. * EXIT
  9325. *T, OR 12/ 0,48/ PARAMETERS
  9326. * PARAMETERS = 0 IF CONTROL POINT CHANGE MADE
  9327. * PARAMETERS = ENTRY PARAMETERS IF CHANGE NOT MADE
  9328. *
  9329. * HANG CONDITIONS -
  9330. * *J* OPTION SPECIFIED WITH *M* OR *A* OPTION.
  9331. * *R* OPTION SPECIFIED WITHOUT *J* OPTION.
  9332. * *R* OPTION SPECIFIED WITH *M* OR *A* OPTION.
  9333. * CHANGE IS BEING MADE TO CURRENT CONTROL POINT.
  9334. * CHANGE TO AN INVALID CONTROL POINT.
  9335. * CHANGE IS BEING MADE AND ALTERNATE CP/PCP ASSIGNMENT
  9336. * IS IN EFFECT.
  9337. * ALTERNATE CP/PCP SPECIFIED (*A* OPTION) IS THE CURRENT
  9338. * ALTERNATE CP/PCP.
  9339. * INVALID CP/PCP SPECIFIED WITH *A* OPTION.
  9340. * INVALID EJT ORDINAL SPECIFIED WITH *R* OPTION.
  9341.  
  9342.  
  9343. PPR CCAM
  9344.  
  9345. * SET OLD AND NEW CP/PCP POINTERS AND VALIDATE CALL PARAMETERS.
  9346.  
  9347. SA3 A5-B1
  9348. BX7 X1 SET REJECT RESPONSE
  9349. LX1 0-44
  9350. MX0 -4
  9351. SX6 741040B VALID OPTION COMBINATIONS MASK
  9352. BX0 -X0*X1 OPTIONS
  9353. LX2 -24
  9354. SB3 X0+59-17
  9355. SB5 X2 OLD CP/PCP ADDRESS
  9356. LX6 B3
  9357. SX0 37600B
  9358. SX4 7600B
  9359. AX5 36-7
  9360. PL X6,HNG IF INVALID OPTION COMBINATION
  9361. LX3 -36+7
  9362. BX5 X0*X5 NEW CP ADDRESS OR PCP NUMBER * 200B
  9363. BX6 X3 SAVE INPUT REGISTER
  9364. SB4 X5 SAVE NEW CP OR PCP NUMBER * 200B
  9365. BX3 X4*X3
  9366. SB6 X5 NEW CP ADDRESS IF CP
  9367. SB7 X3 CALLING CP ADDRESS
  9368. LX1 59-44-0+44
  9369. SB3 A2 SAVE *ACPP* ADDRESS
  9370. TX0 X5-200B,-SCA
  9371. NG X1,CCA1 IF ALTERNATE CP/PCP REQUEST
  9372. ZR B6,HNG IF NEW CP NUMBER NOT VALID
  9373. PL X0,HNG IF NEW CP NUMBER NOT VALID
  9374. NE B5,B7,HNG IF ALTERNATE CP/PCP ASSIGNMENT
  9375. BX6 -X4*X6
  9376. BX6 X6+X5 SET NEW CP NUMBER IN INPUT REGISTER
  9377. EQ CCA3 CHECK CHANGE TO CURRENT CP
  9378.  
  9379. CCA1 NZ B6,CCA2 IF NOT CLEAR ALTERNATE CP/PCP ASSIGNMENT
  9380. SB4 B7
  9381. SB6 B7
  9382. CCA2 NG X0,CCA3 IF NOT SET ALTERNATE PCP ASSIGNMENT
  9383. TX3 X0-200B,-PCM2
  9384. TB6 X0,PCPA SET PCP ADDRESS
  9385. PL X3,HNG IF INVALID PCP NUMBER
  9386. CCA3 EQ B5,B6,HNG IF CHANGING TO CURRENT CP/PCP
  9387.  
  9388. * CHECK ACTIVITY AT NEW CP/PCP. SINCE THE *CCAM* FUNCTION MAY
  9389. * HAVE BEEN STORAGE MOVABLE FOLLOWING A PREVIOUS EXIT TO *REJ*,
  9390. * EXIT MUST BE MADE TO *CSM* IF A REJECT RESPONSE IS TO BE
  9391. * RETURNED TO THE CALLER.
  9392.  
  9393. SA2 B6+TFSW GET EJT ORDINAL
  9394. LX6 36-7 RESTORE INPUT REGISTER
  9395. LX1 59-47-59+44
  9396. MX0 12
  9397. LX5 X1,B1
  9398. BX3 X0*X2 NEW CP EJT ORDINAL
  9399. PL X5,CCA4 IF NOT RESERVE CP OPTION
  9400. LX1 59-35-59+47
  9401. SA4 B6+STSW
  9402. NZ X3,CSM IF EJT ORDINAL PRESENT
  9403. BX4 X0*X4 PP ACTIVITY
  9404. BX3 X0*X1 SPECIFIED EJT ORDINAL
  9405. NZ X4,CSM IF PP ACTIVITY AT CONTROL POINT
  9406. LX1 59-47-59+35
  9407. ZR X3,HNG IF NO EJT ORDINAL SPECIFIED
  9408. BX2 X3+X2 SET EJT ORDINAL IN *TFSW*
  9409. CCA4 NZ X3,CCA5 IF EJT ORDINAL IS PRESENT
  9410. TX4 B6,-SCA
  9411. ZR X4,CCA5 IF CHANGE TO SYSTEM CP
  9412. PL X1,CSM IF EJT ORDINAL REQUIRED
  9413. CCA5 LX3 12
  9414. CX4 X3,EJT CONVERT EJT ORDINAL TO OFFSET
  9415. MX0 1
  9416. TA4 X4+JSNE,EJT
  9417. LX4 59-6 CHECK JOB ADVANCE FLAG AT NEW CP
  9418. BX0 X0*X5 EXTRACT RESERVE CP OPTION
  9419. PL X4,CCA6 IF JOB ADVANCE NOT SET
  9420. BX3 X1
  9421. LX3 59-44-59+47
  9422. PL X3,CSM IF NOT ALTERNATE CP/PCP OPTION
  9423. EQ B6,B7,CCA6 IF CLEAR ALTERNATE CP/PCP ASSIGNMENT
  9424. BX3 X6
  9425. AX3 42
  9426. SX3 X3-3R1RO
  9427. NZ X3,CSM IF NOT *1RO*
  9428. CCA6 BX4 X4+X0 SET JOB ADVANCE IF RESERVE CP OPTION
  9429. LX4 59-0-59+6
  9430. BX3 X0*X4
  9431. LX1 59-44-59+47
  9432. NG X3,CSM IF JOB INTERLOCK SET AND RESERVE CP OPTION
  9433. SA3 TFPL-1+LA1CP GET *1CP* PLD POINTER
  9434. BX4 X0+X4 SET JOB INTERLOCK IF RESERVE CP OPTION
  9435. LX4 0-59
  9436.  
  9437. * SUSPEND PROCESSING IF *1CP* NOT ACCESSIBLE OR INCORRECT CPU
  9438. * ASSIGNMENT ON DUAL CPU CACHE MACHINE.
  9439.  
  9440. SX5 X3+
  9441. ZR X5,CCA16 IF *PLD* BEING MODIFIED
  9442. SA3 B6+STSW NEW CP STATUS
  9443. TNO /MONITOR/CCA7,NDCPC IF NOT DUAL CPU CACHE MACHINE
  9444. SX0 A0+
  9445. LX7 X3,B1
  9446. NZ X0,CCA7 IF MONITOR MODE IN CPU 1
  9447. NG X3,CCA7 IF NEW CP NOT ACTIVE IN EITHER CPU
  9448. NG X7,/DCP/SAX IF NEW CP IN CPU 1, SET ALTERNATE EXCHANGE
  9449.  
  9450. * UPDATE NEW CP/PCP PP ACTIVITY AND CP/PCP ASSIGNMENT.
  9451.  
  9452. CCA7 SX0 1
  9453. LX0 48-0
  9454. IX7 X3+X0 INCREMENT PP COUNT
  9455. EQ B6,B7,CCA8 IF CLEAR ALTERNATE CP/PCP REQUEST
  9456. SA7 A3+ UPDATE PP COUNT
  9457. CCA8 SX7 B6+
  9458. PL X1,CCA10 IF NOT ALTERNATE CP/PCP REQUEST
  9459. EQ B6,B7,CCA10 IF CLEAR ALTERNATE CP/PCP REQUEST
  9460. TX3 B4-200B,-SCA
  9461. NG X3,CCA9 IF NOT SET ALTERNATE PCP ASSIGNMENT
  9462. SX7 B7+ SET CALLING CP FOR FUNCTION PROCESSING
  9463. CCA9 SX3 1
  9464. LX3 23-0
  9465. BX7 X7+X3 SET ALTERNATE CP/PCP FLAG
  9466. CCA10 SX3 B4
  9467. LX3 48-7 SET NEW CP/PCP NUMBER
  9468. BX7 X3+X7
  9469. SX3 B6
  9470. LX3 24 SET NEW CP/PCP ADDRESS
  9471. BX7 X7+X3
  9472. LX1 59-45-59+44
  9473. SA7 B3 UPDATE *ACPP*
  9474. PL X1,CCA11 IF NOT TO REJECT CHANGE ON STORAGE MOVE
  9475.  
  9476. * CHECK REJECT ON STORAGE MOVE. THIS MUST BE DONE AFTER *STSW*
  9477. * AND *ACPP* HAVE BEEN UPDATED TO INTERLOCK WITH *MTR* STORAGE
  9478. * MOVE PROCESSING. IF THE FUNCTION IS REJECTED, THE ENTRY
  9479. * CONDITIONS MUST BE RESTORED.
  9480.  
  9481. NE B5,B7,CCA11 IF ALTERNATE CP/PCP ASSIGNMENT
  9482. SA3 CMCL
  9483. SX7 B4
  9484. AX7 7 NEW CP/PCP NUMBER
  9485. AX3 48
  9486. IX3 X3-X7
  9487. ZR X3,CCA15 IF MOVE REQUEST FOR NEW CP/PCP
  9488.  
  9489. * UPDATE NEW CP/PCP STATUS FOR *R* OPTION AND UPDATE OLD CP/PCP
  9490. * PP ACTIVITY.
  9491.  
  9492. CCA11 SA3 B5+STSW GET OLD CP/PCP STATUS
  9493. BX7 X2
  9494. SA7 A2 UPDATE *TFSW*
  9495. BX7 X4
  9496. SA7 A4 UPDATE EJT ENTRY
  9497. LX1 59-44-59+45
  9498. SA6 A5-B1 UPDATE INPUT REGISTER
  9499. PL X1,CCA12 IF NOT ALTERNATE CP/PCP REQUEST
  9500. NE B6,B7,CCA13 IF NOT CLEAR ALTERNATE CP/PCP REQUEST
  9501. CCA12 IX6 X3-X0 DECREMENT OLD CP/PCP PP ACTIVITY
  9502. SA6 A3+
  9503. BX3 X6
  9504.  
  9505. * CALL *1CP* TO COMPLETE FUNCTION PROCESSING.
  9506.  
  9507. CCA13 SA1 B3 GET *ACPP* PARAMETERS
  9508. BX6 X3 SAVE *STSW* FOR DUAL CPU CACHE CHECK
  9509. SB4 X5 SET *1CP* PLD ENTRY ADDRESS
  9510. SX5 B0 SET *CCAM* RESPONSE
  9511. MX0 24
  9512. TX7 B6+FLSW+1,-NCME SET FL CONTROL WORD ADDRESS
  9513. LX0 12
  9514. LX7 24
  9515. BX1 X0*X1 SET CP/PCP NUMBER AND CP ADDRESS
  9516. SB3 CCA14 SET *EFP* RETURN ADDRESS
  9517. BX7 X7+X1
  9518. EQ EFP EXECUTE *1CP*
  9519.  
  9520. * CHECK JOB ACTIVITY AT OLD CONTROL POINT.
  9521.  
  9522. CCA14 SB7 B5+ SET OLD CP TO CHECK
  9523. TX0 B5,-SCA
  9524. SB3 PPRX SET *JAV* RETURN ADDRESS
  9525. TNO /DCP/CCA,DCPC IF DUAL CPU CACHE MACHINE
  9526. NG X0,JAV IF OLD JOB NOT SYSTEM CP OR PCP
  9527. EQ PPRX EXIT
  9528.  
  9529. * RESTORE ENTRY CONDITIONS FOR CHANGE REJECTED ON STORAGE
  9530. * MOVE.
  9531.  
  9532. CCA15 SA3 B6+STSW RESET PP ACTIVITY
  9533. SA5 A5 GET OUTPUT REGISTER
  9534. SX1 B5 RECONSTRUCT ORIGINAL *ACPP*
  9535. SX6 B5
  9536. LX1 24
  9537. BX6 X6+X1
  9538. LX1 24-7
  9539. BX6 X1+X6
  9540. SA6 B3 UPDATE *ACPP*
  9541. IX6 X3-X0 DECREMENT PP ACTIVITY
  9542. UX7,B0 X5 CLEAR FUNCTION CODE
  9543. SA6 A3 UPDATE PP ACTIVITY
  9544. EQ CSM CHECK STORAGE MOVE AND EXIT
  9545.  
  9546. * REJECT REQUEST WHEN *1CP* NOT ACCESSIBLE.
  9547.  
  9548. CCA16 SB5 PPRX SET EXIT ADDRESS
  9549. EQ REJ REJECT REQUEST
  9550. CDAM SPACE 4,15
  9551. *** CDAM - CHECK MASS STORAGE DEVICE ACTIVITY.
  9552. *
  9553. * ENTRY
  9554. *T, OR 12/ CDAM,12/ EQ,36/
  9555. * EQ MASS STORAGE EST ORDINAL.
  9556. *
  9557. * EXIT
  9558. *T, OR 12/ 0,12/ ST,36/ 0
  9559. * ST DEVICE ACTIVITY COUNT.
  9560. *
  9561. * HANG CONDITIONS -
  9562. *
  9563. * EST ORDINAL DOES NOT POINT TO MASS STORAGE DEVICE.
  9564.  
  9565.  
  9566. PPR CDAM,,,FEX
  9567.  
  9568. AX1 36 POSITION EST ORDINAL
  9569. CX2 X1,EST
  9570. TA2 X2+EQDE,EST
  9571. PL X2,HNG IF NOT MASS STORAGE
  9572. MX0 -12
  9573. BX6 -X0*X2 EXTRACT MST POINTER
  9574. SX7 B1
  9575. LX6 3 SET MST ADDRESS
  9576. SA4 X6+DILL
  9577. LX4 -24 EXTRACT *PUT* ORDINAL
  9578. BX4 -X0*X4
  9579. ZR X4,CDA1 IF NOT BUFFERED DEVICE
  9580. SA3 /BUFIO/MSTA
  9581. LX4 PUTLS FORM *PUT* INDEX
  9582. BX3 X6-X3
  9583. ZR X3,CDA2 IF BUFFER ASSIGNMENT IN PROGRESS
  9584. TA1 X4+UNCT,PUT
  9585. LX1 -12 CHECK CURRENT *CB* PRESENT
  9586. BX7 -X0*X1
  9587. ZR X7,PPR1 IF DEVICE INACTIVE
  9588. CDA1 SA2 A4-B1
  9589. ERRNZ DALL+1-DILL CODE DEPENDS ON VALUE
  9590. MX0 -6
  9591. LX2 -48 EXTRACT REQUEST COUNT
  9592. BX7 -X0*X2
  9593. CDA2 LX7 36 POSITION RESPONSE
  9594. SA7 A5
  9595. EQ PPRX RETURN
  9596. CEFM SPACE 4,30
  9597. *** CEFM - CHANGE ERROR FLAG.
  9598. *
  9599. * ENTRY
  9600. *T, OR 12/ CEFM,1/E,11/ EF,12/ EJTO,24/ JSN
  9601. * E IF SET, CHANGE ERROR FLAG ON JOB SPECIFIED BY
  9602. * *EJTO* FIELD.
  9603. * IF CLEAR, CHANGE ERROR FLAG ON CONTROL POINT TO
  9604. * WHICH PP IS ASSIGNED.
  9605. * EF ERROR FLAG TO SET.
  9606. * EJTO EJT ORDINAL OF JOB IF *E* SET.
  9607. * JSN JOB SEQUENCE NAME IF *E* OPTION SELECTED.
  9608. *
  9609. * EXIT
  9610. *T, OR 12/ 0,3/ JS,9/ ST,36/
  9611. * JS = CPU STATUS FROM *STSW* IF ERROR FLAG SET ON JOB AT
  9612. * CONTROL POINT.
  9613. * ST = 0, IF ERROR FLAG SET ON SPECIFIED JOB.
  9614. * ST = 1, IF JOB IS MOVING (FOR *E* = 1 OPTION ONLY).
  9615. * ST = 3, IF JOB SPECIFIED BY *EJTO* NOT FOUND.
  9616. *
  9617. * HANG CONDITIONS -
  9618. *
  9619. * 1. IF JOB AT CONTROL POINT WITH EJT ORDINAL = 0.
  9620. * 2. *EJTO* = 0 FOR *E* = 1 OPTION.
  9621. * 3. *EJTO* EXCEEDS MAXIMUM EJT ORDINAL FOR *E* = 1 OPTION.
  9622. * 4. CLEARING ZERO ERROR FLAG.
  9623. * 5. CHANGING ERROR FLAG AT SYSTEM CP OR UNOCCUPIED USER CP.
  9624. * 6. SETTING AN INCORRECT ERROR FLAG.
  9625.  
  9626.  
  9627. PPR CEFM
  9628.  
  9629. SB6 CEF1 SET RETURN ADDRESS FOR *CPE*
  9630. LX1 59-47
  9631. SB5 -B1 FLAG EJT ORDINAL NOT SPECIFIED
  9632. TPL X1,(/DCP/CPE,DCP,/MONITOR/CEF1) IF SET ERROR AT CP
  9633. MX1 24
  9634. LX5 -24
  9635. MX0 -12
  9636. BX2 X1*X5 SPECIFIED JSN
  9637. BX6 -X0*X5 SPECIFIED EJT ORDINAL
  9638. LX5 24
  9639. TX3 X6,-EJTM
  9640. ZR X6,HNG IF NO EJT ORDINAL SPECIFIED
  9641. PL X3,HNG IF EJT ORDINAL EXCEEDS MAXIMUM
  9642. CX3 X6,EJT CONVERT EJT ORDINAL TO OFFSET
  9643. TA3 X3+JSNE,EJT GET EJT ENTRY
  9644. MX7 2
  9645. LX7 36-58 STATUS = JOB NOT FOUND
  9646. SX4 7600B
  9647. BX1 X1*X3 JOB SEQUENCE NUMBER IN EJT
  9648. LX3 7-1
  9649. BX2 X2-X1
  9650. BX0 X4*X3
  9651. NZ X2,PPR1 IF JOB NOT FOUND
  9652. SA3 A3+SCHE-JSNE GET JOB CONTROL POINT NUMBER
  9653. SA2 A3+PRFE-SCHE GET EJT ERROR FLAG
  9654. BX6 X3
  9655. SX0 X0-EXJS*200B
  9656. LX6 59-34
  9657. SB5 B7+ INDICATE SETTING ERROR IN EJT
  9658. SA6 CEFC SAVE JOB TERMINATION STATUS
  9659. NZ X0,CEF2 IF JOB NOT AT CONTROL POINT
  9660. LX3 -12+7
  9661. BX3 X4*X3
  9662. SB5 -2 INDICATE EJT ORDINAL SPECIFIED ON CALL
  9663. SB7 X3 SET CONTROL POINT ADDRESS
  9664. TNO /DCP/CPE,DCP IF DUAL-CPU IN USE
  9665.  
  9666. * SET ERROR AT CONTROL POINT.
  9667. * ENTERED HERE FOR *ABTM* AND *CHGM*.
  9668. * (B6) = 0 IF *ABTM*.
  9669. * (B6) .LT. 0 IF *CHGM*.
  9670. * (B5) .GT. 0 IF *ABTM* OR *CHGM*.
  9671.  
  9672. CEF1 SA4 B7+TFSW GET EJT ORDINAL
  9673. MX0 12
  9674. BX4 X0*X4
  9675. ZR X4,HNG IF SYSTEM CP OR UNOCCUPIED USER CP
  9676. LX4 12
  9677. CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
  9678. TA3 X3+SCHE,EJT
  9679. MX6 -2
  9680. LX3 0-33
  9681. BX3 -X6*X3
  9682. SX6 B0
  9683. ERRNZ NOTM CODE ASSUMES *NOTM* = 0
  9684. IX6 X6-X3
  9685. SA6 CEFC
  9686. SA2 B7+STSW
  9687. SB5 B5+B1
  9688. PL B5,CEF2 IF NOT EJT ORDINAL CALL
  9689. SX7 B1 STATUS = JOB MOVING
  9690. SA3 CMCL CHECK FOR STORAGE MOVE
  9691. LX7 36
  9692. BX3 X0*X3
  9693. LX3 12+7 CPA ADDRESS FOR STORAGE MOVE
  9694. SB4 X3
  9695. EQ B4,B7,PPR1 IF JOB MOVING
  9696. CEF2 MX0 11 GET ERROR FLAG
  9697. LX0 46-59
  9698. BX7 X0*X5 NEW ERROR FLAG
  9699. BX3 X0*X2 OLD ERROR FLAG
  9700. IX6 X7+X3
  9701. ZR X6,HNG IF CLEARING ZERO ERROR FLAG
  9702. BX1 -X0*X2
  9703. ZR X7,CEF4 IF CLEARING ERROR FLAG
  9704. LX2 59-56
  9705. IX0 X7-X3 NEW - OLD
  9706. AX3 36
  9707. BX6 X7
  9708. LX6 -36
  9709. SB4 X3-RSET
  9710. SX3 X6-MXET
  9711. PL X3,HNG IF ILLEGAL ERROR FLAG
  9712. ZR B4,CEF6 IF AN UNPROCESSED *RSET* PRESENT
  9713. GT B5,CEF4 IF *ABTM* OR SETTING ERROR IN EJT
  9714. SA3 CEFB
  9715. SB4 X6
  9716. LX3 B4,X3
  9717. SA4 CEFC
  9718. BX4 X3*X4
  9719. NG X4,CEF6 IF ODET/RRET/OKET AT END OF JOB
  9720. PL X2,CEF4 IF NO SUB-CP ACTIVE
  9721. BX6 X6-X6
  9722. AX7 36
  9723. SA6 A5 CLEAR OUTPUT REGISTER
  9724. EQ SEF SET ERROR FLAG
  9725.  
  9726. CEF4 NG X0,CEF5 IF OLD ERROR FLAG .GT. NEW ERROR FLAG
  9727. BX6 X1+X7 STORE NEW ERROR FLAG
  9728. SA6 A2
  9729. CEF5 ZR X7,PPR1 IF ERROR FLAG CLEARED
  9730. SX5 B1+
  9731. LX5 36-0 SET TO CLEAR ROLLOUT CPU STATUS
  9732. NE B5,B7,.DCPM IF NOT SETTING ERROR FLAG IN EJT ENTRY
  9733. CEF6 BX7 X7-X7 CLEAR OUTPUT REGISTER
  9734. SA7 A5
  9735. EQ PPRX EXIT
  9736.  
  9737.  
  9738. CEFB BSS 0 MASK FOR ODET / RRET / OKET
  9739. POS 60-ODET
  9740. VFD 1/1
  9741. POS 60-RRET
  9742. VFD 1/1
  9743. POS 60-OKET
  9744. VFD 1/1
  9745. VFD $/0
  9746.  
  9747. CEFC CON 0 JOB TERMINATION STATUS
  9748. CHGM SPACE 4,10
  9749. *** CHGM - CONDITIONALLY HANG PP.
  9750. *
  9751. * ENTRY
  9752. *T, OR 12/ CHGM,12/PA,12/EF,12/,12/
  9753. * PA ADDRESS IN PP WHERE ERROR CONDITION DETECTED.
  9754. * EF ERROR FLAG TO SET AT CONTROL POINT OR ZERO.
  9755. *
  9756. * EXIT IF SYSTEM DEBUG MODE ENABLED
  9757. *T, OR 12/ HLTM,48/
  9758. *
  9759. * EXIT IF SYSTEM DEBUG MODE DISABLED
  9760. *T, OR 60/0
  9761.  
  9762.  
  9763. PPR CHGM,,,DCP
  9764.  
  9765. SA5 A5 GET CURRENT OUTPUT REGISTER
  9766. MX6 1 SET MOVABLE FUNCTION FLAG
  9767. LX6 56-59
  9768. BX5 X5+X6
  9769. BX6 X5
  9770. SA6 A5
  9771. SB3 CHG1
  9772. EQ ACB ASSIGN COMMUNICATIONS BUFFER
  9773.  
  9774. CHG1 ZR X1,CHG9 IF NO BUFFER ASSIGNED
  9775. MX0 -12
  9776. LX5 24 GET PP PROGRAM ADDRESS
  9777. BX6 -X0*X5
  9778. LX6 36
  9779. SA4 B7+TFSW GET EJT ORDINAL
  9780. LX4 12
  9781. BX2 -X0*X4
  9782. ZR X2,CHG2 IF NO EJT ENTRY
  9783. CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
  9784. TA3 X4+JSNE,EJT GET EJT ENTRY
  9785. MX2 24
  9786. BX2 X2*X3 JOB SEQUENCE NUMBER IN EJT
  9787. LX2 36
  9788. BX6 X6+X2
  9789. TA3 X4+SCLE,EJT GET JOB SERVICE CLASS
  9790. MX2 6
  9791. BX3 X2*X3
  9792. LX3 6
  9793. BX6 X3+X6
  9794. CHG2 LX5 -24+12 GET FUNCTION BEING PERFORMED
  9795. MX7 -7
  9796. BX7 -X7*X5
  9797. SX7 X7-CHGM
  9798. ZR X7,CHG3 IF *CHGM* FUNCTION
  9799. SX7 3 FLAG PP HUNG
  9800. LX7 48
  9801. IX6 X6+X7
  9802. LX6 -36 SET PP PROGRAM ADDRESS TO ZERO
  9803. BX6 X0*X6
  9804. LX6 36
  9805. EQ CHG4 SET UP *1MA* CALL
  9806.  
  9807. CHG3 SX7 B1
  9808. LX5 -12+36
  9809. BX2 -X0*X5
  9810. LX7 48
  9811. ZR X2,CHG4 IF NO ERROR FLAG
  9812. SX2 X2-SWET
  9813. IX6 X6+X7 FLAG JOB BEING ABORTED
  9814. NZ X2,CHG4 IF NOT *SWET* ERROR, ASSUME JOB STEP ABORT
  9815. IX6 X6+X7 SET JOB ABORTED
  9816.  
  9817. * SET UP *1MA* REQUEST.
  9818.  
  9819. CHG4 SA6 X1+B1 STORE PARAMETER IN COMMUNICATIONS BUFFER
  9820. SA4 A5-B1 GET PP INPUT REGISTER
  9821. BX6 X4
  9822. SA2 A4+B1 GET PP OUTPUT REGISTER
  9823. BX7 X2
  9824. SA6 A6+B1 STORE IN COMMUNICATIONS BUFFER
  9825. SA7 A6+B1
  9826. SA4 A2+B1 GET FIRST WORD OF MESSAGE BUFFER
  9827. BX6 X4
  9828. SA6 A7+B1 STORE IN COMMUNICATIONS BUFFER
  9829. SB4 -B1 SET NO QUEUEING
  9830. SX6 B7 SAVE CONTROL POINT ADDRESS
  9831. SA6 CHGB
  9832. TB7 0,SCA USE SYSTEM CONTROL POINT
  9833. SA2 CHGA GET *1MA* REQUEST
  9834. BX6 X2
  9835. IX6 X6+X1 ADD IN COMMUNICATIONS BUFFER ADDRESS
  9836. SX1 0
  9837. SB3 CHG5
  9838. EQ APQ ASSIGN *1MA* TO SYSTEM CONTROL POINT
  9839.  
  9840. CHG5 NZ X1,CHG6 IF *1MA* ASSIGNED
  9841. SB3 CHG6
  9842. SX2 PQ QUEUE THE REQUEST
  9843. EQ AQR ASSIGN QUEUE REQUEST
  9844.  
  9845. CHG6 SA1 CHGB RESTORE CONTROL POINT ADDRESS
  9846. SA5 A5
  9847. MX7 -7
  9848. LX5 12
  9849. BX7 -X7*X5 GET FUNCTION BEING PERFORMED
  9850. SX7 X7-CHGM
  9851. SB7 X1+
  9852. SB5 PPRX
  9853. NZ X7,HNG2 IF NOT *CHGM*
  9854. SA4 SSTL CHECK FOR SYSTEM DEBUG ENABLED
  9855. SB5 CHG7
  9856. LX4 59-13
  9857. SA5 A5
  9858. PL X4,HNG2 IF SYSTEM DEBUG MODE ENABLED
  9859.  
  9860. * PROCESS AS *HLTM* WHEN SYSTEM DEBUG IS DISABLED.
  9861.  
  9862. SA7 A5+ CLEAR OUTPUT REGISTER
  9863. EQ CHG8 CHECK FOR ERROR FLAG PRESENT
  9864.  
  9865. CHG7 SX1 HLTM CHANGE CHGM FUNCTION TO HLTM FUNCTION
  9866. LX1 48
  9867. MX2 12
  9868. BX7 -X2*X5
  9869. BX7 X7+X1
  9870. SA7 A5+
  9871. CHG8 LX5 0-24
  9872. MX2 -11
  9873. TB4 B7,-SCA
  9874. ZR B4,PPRX IF SYSTEM CONTROL POINT DO NOT SET ERROR
  9875. BX5 -X2*X5 GET ERROR FLAG
  9876. LX5 36 POSITION ERROR FLAG
  9877. ZR X5,PPRX IF NO ERROR FLAG PRESENT, RETURN
  9878. SB6 -1 FLAG DO NOT STORE OUTPUT REGISTER
  9879. EQ CEF1 CHANGE ERROR FLAG
  9880.  
  9881. CHG9 MX1 1 HAVE PP REISSUE FUNCTION
  9882. BX7 X5+X1
  9883. EQ PPR1 RETURN STORING OUTPUT REGISTER
  9884.  
  9885. CHGA VFD 18/0L1MA,6/,12/7,24/
  9886. CHGB CON 0 SAVE OF CONTROL POINT ADDRESS
  9887. CKSM SPACE 4
  9888. *** CKSM - CHECKSUM SPECIFIED AREA.
  9889. * THE SPECIFIED AREA IS CHECKSUMMED, AND THE RESULT IS COMPARED
  9890. * TO THE FIRST WORD OF THE MESSAGE BUFFER. THE RESULT IS
  9891. * ALSO RETURNED TO THE CALLER.
  9892. *
  9893. * ENTRY
  9894. *T, OR 12/ CKSM,7/,17/ WC,7/,17/ FWA
  9895. * WC WORD COUNT.
  9896. * FWA RELATIVE FIRST WORD ADDRESS.
  9897. *
  9898. *T, MB 60/ CHECKSUM COMPARE VALUE
  9899. *
  9900. * EXIT
  9901. *T, OR 12/ 0,36/ 0,12/ STATUS
  9902. * STATUS = 0, IF CHECKSUM COMPARE SUCCESSFUL.
  9903. *
  9904. *T, MB 60/ CALCULATED CHECKSUM
  9905.  
  9906.  
  9907. PPR CKSM,PMR,CKS,FEX
  9908. CPRM SPACE 4,20
  9909. *** CPRM - ASSIGN, LOAD, OR IDLE A CPP.
  9910. *
  9911. * ENTRY
  9912. *T, OR 12/ CPRM,12/ FFFF,12/ 0,12/ 0,12 PPPP
  9913. * FFFF SUBFUNCTION.
  9914. * 0 = ASSIGN CPP.
  9915. * 1 = ASSIGN CPP AND LOAD PP RESIDENT.
  9916. * 2 = RETURN CPP.
  9917. * PPPP CIO BARREL FROM WHICH CPP IS TO BE ASSIGNED
  9918. * (SUBFUNCTION 0 AND 1).
  9919. * 2 = BARREL 0 (CPP 0 THRU 4).
  9920. * 3 = BARREL 1 (CPP 5 THRU 11).
  9921. * (SUBFUNCTION 2).
  9922. * NUMBER OF CPP TO RETURN.
  9923. *
  9924. *T, MB 60/ IR
  9925. * IR INPUT REGISTER FOR CPP BEING ASSIGNED
  9926. * (SUBFUNCTION 0 AND 1).
  9927. * NOT USED FOR SUBFUNCTION 2.
  9928. *
  9929. *T, PW 60/ PW
  9930. * PW THIS WORD WILL BE PLACED INTO MB OF THE
  9931. * ASSIGNED CPP (SUBFUNCTION 0 AND 1).
  9932. * NOT USED FOR SUBFUNCTION 2.
  9933. *
  9934. * EXIT
  9935. *T, OR 12/,12/ ST,12/ RC,12/,12/
  9936. * ST STATUS (SUBFUNCTION 0 AND 1).
  9937. * ADDRESS OF THE ASSIGNED CPP INPUT REGISTER.
  9938. * ZERO IF CPP NOT ASSIGNED, RC FIELD INDICATES REASON.
  9939. * STATUS (SUBFUNCTION 2).
  9940. * ZERO INDICATES CPP DROPPED, RC FIELD NOT VALID.
  9941. * ONE INDICATES ERROR IN REQUEST, RC INDICATES REASON.
  9942. * RC RESPONSE CODE.
  9943. * 0 = CPP ASSIGNED.
  9944. * 1 = CPP NOT ASSIGNED (SUBFUNCTION 2 ONLY).
  9945. * 2 = CPP NOT PRESENT.
  9946. * 3 = CPP NOT AVAILABLE.
  9947. * 4 = INCORRECT CPP NUMBER.
  9948. * 5 = INCORRECT CIO BARREL NUMBER.
  9949. * 6 = MAXIMUM NUMBER (NPPCP) OF PP-S ALREADY ASSIGNED.
  9950. * 7 = IF PERIPHERAL LIBRARY LOCKED (SUBFUNCTION 2 ONLY).
  9951. * 10 = PP PROGRAM NOT FOUND (SUBFUNCTION 2 ONLY).
  9952.  
  9953.  
  9954. PPR CPRM
  9955.  
  9956. TNO /CPP/CPR,CPP IF CPP-S ARE DEFINED
  9957. SX7 10002B SET ERROR CODE ST=1, RC=2
  9958. AX1 36+1
  9959. NZ X1,CPRM1 IF SUBFUNCTION 2
  9960. SX7 B1+B1
  9961. CPRM1 LX7 24-0
  9962. EQ /MONITOR/MTRC STORE (OR) AND EXIT MONITOR MODE
  9963. CSTM SPACE 4
  9964. *** CSTM - CLEAR STORAGE.
  9965. * NOTE - CSTM CLEARS STORAGE FROM LWA TO FWA.
  9966. *
  9967. * ENTRY
  9968. *T, OR 12/ CSTM,3/ 0,1/S,1/E,1/R,18/ WC,24/ FWA
  9969. * WC WORD COUNT OF AREA TO BE CLEARED.
  9970. * FWA FIRST WORD ADDRESS OF AREA TO BE CLEARED.
  9971. * S = 1, IF REQUEST IS SPECIAL FOR *RSTM* FROM *MTR*.
  9972. * 0, IF REQUEST IS NORMAL MONITOR FUNCTION.
  9973. * E = 0, IF FWA IS A CM ADDRESS.
  9974. * = 1, IF FWA IS A USER ECS ADDRESS.
  9975. * R = 0, IF FWA IS AN ABSOLUTE ADDRESS.
  9976. * = 1, IF FWA IS A CP RELATIVE ADDRESS.
  9977. * IF WC IS ZERO FOR A CM REQUEST, AREAS TO BE CLEARED ARE
  9978. * SPECIFIED BY A LIST IN THE MESSAGE BUFFER.
  9979. * LIST IS TERMINATED BY A ZERO WORD.
  9980. * LIST FORMAT NOT APPLICABLE FOR ECS REQUEST.
  9981. *
  9982. * FORMAT OF LIST ENTRY-
  9983. *T, MB 18/0,18/ WC,24/ FWA
  9984. *
  9985. * IF S=1, THE REQUEST IS CLEAR STORAGE TO BE RELEASED BY
  9986. * THE JOB. THE FWA AND WORD COUNT IS TO BE DERIVED FROM
  9987. * THE *RSTM* REQUEST IN MB+5. UPON COMPLETION, THE *RSTM*
  9988. * REQUEST (PLUS THE COMPLETION FLAG) IS TO BE RESTORED
  9989. * IN THE CALLER-S OUTPUT REGISTER SO IT MAY BE COMPLETED.
  9990. *
  9991. * NOTE - WHEN CLEARING ECS, WC IS THE NUMBER OF *UEBS*
  9992. * WORD BLOCKS TO CLEAR,AND FWA IS
  9993. * THE ACTUAL ADDRESS/*UEBS*.
  9994. *
  9995. * EXIT
  9996. *T, OR 60/ 0
  9997.  
  9998.  
  9999. PPR CSTM,,CST
  10000.  
  10001. AX2 24
  10002. LX1 59-44
  10003. SB7 X2+ SET CP/PCP ADDRESS
  10004. TNG X1,(/MCE/CST,MCE,/MONITOR/HNG) IF SPECIAL *RSTM* CALL
  10005. LX1 44-59
  10006.  
  10007. * REENTRY FROM */MCE/CST* AFTER SETUP OF *CSTM* PARAMETERS.
  10008.  
  10009. CST0 BX4 X1 CHECK FOR VALID OPTIONS
  10010. MX0 -12
  10011. SB4 X1 SET FWA
  10012. LX4 59-43
  10013. TNG X4,(/MONITOR/PMR,UEC,/MONITOR/HNG) IF ECS REQUEST
  10014. BX6 X5
  10015. LX5 -24
  10016. SB3 X5+ (B3) = 0 IF LIST PRESENT
  10017. LX5 24
  10018. LX4 59-42-59+43
  10019. PL X4,CST3 IF NOT RELATIVE ADDRESSES
  10020.  
  10021. * CONVERT TO ABSOLUTE ADDRESSES.
  10022.  
  10023. SA2 B7+FLSW READ RA AND FL
  10024. BX1 X5
  10025. BX3 -X0*X2
  10026. LX2 12
  10027. BX6 -X0*X2 EXTRACT NFL
  10028. MX0 -RMSK
  10029. AX2 RSHF+12
  10030. BX2 -X0*X2 RA/100
  10031. LX6 6 NFL
  10032. SB5 X6
  10033. MX0 36
  10034. LX3 6
  10035. SB4 X3 (B4) = FL
  10036. LX2 6 (X2) = RA
  10037. NZ B3,CST2 IF NOT LIST OPTION
  10038. SA1 A5+B1 READ FIRST LIST WORD
  10039. CST2 SX7 X1
  10040. IX6 X7+X2 CONVERT RELATIVE ADDRESS TO ABSOLUTE
  10041. NG X6,HNG IF BAD FWA
  10042. BX3 X0*X1
  10043. BX6 X3+X6
  10044. LX1 -24
  10045. PL X7,CST2.1 IF NOT NFL ADDRESS
  10046. SB6 X7
  10047. SB6 -B6
  10048. GT B6,B5,HNG IF BEYOND NFL
  10049. SB6 X1
  10050. SB6 B6+X7
  10051. LE B6,B0,CST2.2 IF WITHIN NFL
  10052. EQ HNG HANG PP
  10053.  
  10054. CST2.1 SB6 X1
  10055. SB6 B6+X7
  10056. GT B6,B4,HNG IF BEYOND FL
  10057. CST2.2 LX1 24
  10058. NZ B3,CST3 IF NOT LIST OPTION
  10059. SA6 A1 STORE ABSOLUTE ADDRESS
  10060. SA1 A1+1
  10061. NZ X1,CST2 IF MORE WORDS IN LIST
  10062. CST3 ZR B3,PMR IF LIST OPTION
  10063. AX1 24
  10064. BX5 X6
  10065. SB4 X1-100B-1
  10066. SB5 X1-1
  10067. PL B4,PMR IF TOO MANY WORDS FOR MONITOR MODE
  10068. NG B5,HNG IF ILLEGAL WORD COUNT
  10069. MX2 -24 CLEAR STORAGE
  10070. SX1 X1+
  10071. BX2 -X2*X5 FWA
  10072. SB3 PPR1 *CSM* RETURN ADDRESS
  10073. TJP (/MCE/CST5,MCE,/CME/CSM,CME,/0CME/CSM) CLEAR
  10074. DCPM SPACE 4,25
  10075. *** DCPM - DROP CPU.
  10076. * IT SHOULD BE NOTED THAT THE EXCHANGE PACKAGE IS NOT
  10077. * IN THE USER,S CP AREA AT THE TIME THE OUTPUT
  10078. * REGISTER IS CLEARED. TO MAKE SURE THE PACKAGE IS
  10079. * AVAILABLE ANOTHER *CPUMTR* MONITOR FUNCTION SHOULD
  10080. * BE DONE SUCH AS *RCLM*.
  10081. *
  10082. * ENTRY
  10083. *T, OR 12/ DCPM,11/0,1/F,12/,12/,12/
  10084. * F = 1, TO CLEAR CPU STATUS PRESENT AT ROLLOUT.
  10085. *
  10086. * EXIT
  10087. *T, OR 12/ 0,3/ ST,9/0,36/
  10088. * ST CPU STATUS FROM STSW.
  10089. *
  10090. * NOTE WHEN ENTERING THE *DCPM* PROCESSOR FROM ANOTHER
  10091. * ROUTINE THE FOLLOWING ENTRY CONDITIONS MUST BE SET -
  10092. *
  10093. * (B6) .LT. 0 IF NOT TO WRITE OUTPUT REGISTER.
  10094. * (B6) = 0 IF TO RETURN *DPPM* FUNCTION IN OUTPUT
  10095. * REGISTER.
  10096. * (B6) = 1 IF TO CLEAR OUTPUT REGISTER.
  10097. * (B6) .GT. 1 IF TO RETURN CURRENT CPU STATUS IN OUTPUT
  10098. * REGISTER.
  10099. * (X5 BIT 36) = 1 IF TO CLEAR CPU STATUS AT ROLLOUT.
  10100.  
  10101.  
  10102. PPR DCPM,,,DCP
  10103.  
  10104. * SET FUNCTION RETURN. ENTERED HERE FROM *CEFM*, *ROCM*, AND
  10105. * *RPNM*.
  10106.  
  10107. SA1 B7+STSW READ STATUS
  10108. MX0 3
  10109. BX7 X0*X1 CPU STATUS
  10110. GT B6,B1,DCP1 IF TO RETURN CPU STATUS
  10111. SX7 B0+
  10112. EQ B6,B1,DCP1 IF TO CLEAR OUTPUT REGISTER
  10113. SX7 DPPM+4000B RETURN *DPPM* FUNCTION
  10114. DCP1 NG B6,DCP2 IF NOT TO WRITE OUTPUT REGISTER
  10115. TX2 10B,SP
  10116. SX3 A5
  10117. MX4 -18
  10118. BX3 -X4*X3
  10119. IX2 X3-X2
  10120. PL X2,DCP2 IF NOT PP REQUEST
  10121. LX7 -12
  10122. SA7 A5 WRITE OUTPUT REGISTER
  10123.  
  10124. * CLEAR CPU STATUS.
  10125.  
  10126. DCP2 SX3 B1
  10127. LX5 25-36 POSITION CLEAR ROLLOUT CPU STATUS FLAG
  10128. LX3 25-0
  10129. BX7 -X0*X1 CLEAR CPU STATUS
  10130. BX3 X3*X5
  10131. BX7 -X3*X7 CLEAR ROLLOUT CPU STATUS IF SELECTED
  10132. BX1 X0*X1 CPU STATUS ON ENTRY
  10133. SA7 A1 WRITE STATUS
  10134.  
  10135. * CHECK ENTRY CPU STATUS.
  10136.  
  10137. ZR X1,DCP4 IF NULL STATUS ON ENTRY
  10138. PL X1,DCP6 IF ACTIVE JOB
  10139. LX1 1
  10140. NG X1,DCP4 IF *I* STATUS
  10141. LX0 X1,B1
  10142. SA3 B7+CWQW READ *CWQW*
  10143. SX6 1
  10144. LX6 46-0
  10145. BX6 X3+X6 SET NO DRIVER RECALL
  10146. NG X0,DCP2.1 IF *X* STATUS
  10147. MX7 58
  10148. MX4 42
  10149. LX7 48-0
  10150. BX6 X4*X6 CLEAR *WQ* LINKAGE
  10151. SX1 WQRL
  10152. BX6 X7*X6 CLEAR CPU SLICE ACTIVE AND RECALL FLAGS
  10153. SA6 A3 UPDATE *CWQW*
  10154. TJP (/DCP/DCP,DCP,/MONITOR/DCP3)
  10155.  
  10156. DCP2.1 SA6 A3 UPDATE *CWQW* FLAGS
  10157. SA3 B7+CRCW READ *CRCW*
  10158. SX7 B0
  10159. SX1 RQRL
  10160. SA7 A3 CLEAR *RQ* PARAMETERS
  10161. MX4 -12
  10162.  
  10163. * REMOVE *WQ* OR *RQ* ENTRY IF *W* OR *X* STATUS.
  10164.  
  10165. DCP3 ZR X1,DCP4 IF END OF QUEUE
  10166. SA2 X1 FIND LINK TO DELETED ENTRY
  10167. SX6 A3
  10168. BX1 -X4*X2
  10169. BX0 X6-X1
  10170. NZ X0,DCP3 IF NOT FOUND
  10171. BX2 X4*X2 REPLACE LINK TO DELETED ENTRY
  10172. BX3 -X4*X3
  10173. BX6 X2+X3
  10174. SA6 A2
  10175. DCP4 TX2 A5-1,-FP
  10176. SB3 PPRX *JAV* RETURN ADDRESS
  10177. ZR X2,PPRX IF CALL BY *MTR*
  10178. EQ JAV ADVANCE JOB
  10179.  
  10180. * JOB ACTIVE IN THIS CPU - START NEW JOB.
  10181.  
  10182. DCP6 TX1 A5-1,-FP
  10183. SB3 BNJ1 *JAV* RETURN ADDRESS
  10184. ZR X1,BNJ1 IF CALL BY *MTR*
  10185. EQ JAV CHECK FOR JOB ADVANCE
  10186. DEQM SPACE 4,20
  10187. *** DEQM - DROP EQUIPMENT.
  10188. *
  10189. * RELEASE EQUIPMENT FROM JOB ASSIGNMENT.
  10190. *
  10191. * ENTRY
  10192. *T, OR 12/ DEQM,12/ EQ,12/,12/ EJT,12/
  10193. * EQ EST ORDINAL (IF 4000B + EQ, EJT IS PRESENT).
  10194. * EJT EJT ORDINAL TO RELEASE EQUIPMENT FROM.
  10195. *
  10196. * EXIT
  10197. *T, OR 60/ 0
  10198. * COUNTER IN *EACW* DECREMENTED, IF EQUIPMENT WAS
  10199. * ASSIGNED TO CALLER AND IS RELEASED.
  10200. *
  10201. * HANG CONDITIONS -
  10202. *
  10203. * ILLEGAL EST ORDINAL.
  10204. * EQUIPMENT NOT ASSIGNED TO CALLER (OR ALTERNATE EJT ORDINAL).
  10205.  
  10206.  
  10207. PPR DEQM
  10208.  
  10209. LX5 24
  10210. MX2 -9
  10211. BX2 -X2*X5 EST ORDINAL
  10212. MX0 -12
  10213. TX3 X2,-ESTL
  10214. PL X3,HNG IF INVALID EST ORDINAL
  10215. CX3 X2,EST CONVERT EST ORDINAL TO OFFSET
  10216. LX5 59-47-24
  10217. TA3 X3+EQAE,EST READ EQUIPMENT ASSIGNMENT WORD
  10218. LX1 36
  10219. TX4 B7,-SCA
  10220. BX6 X0*X3
  10221. NG X5,DEQ1 IF ALTERNATE EJT SPECIFIED
  10222. MX1 12
  10223. ZR X4,DEQ1 IF PP AT SYSTEM CONTROL POINT
  10224. SA1 B7+TFSW GET JOB EJT
  10225. DEQ1 LX1 12
  10226. BX4 X1-X3 CHECK EQUIPMENT ASSIGNMENT
  10227. SX2 B1
  10228. BX4 -X0*X4
  10229. NZ X4,HNG IF EQUIPMENT ASSIGNED ELSEWHERE
  10230. LX2 48
  10231. SA6 A3
  10232. NG X5,PPR1 IF RELEASE FROM ALTERNATE EJT
  10233. SA4 B7+EACW
  10234. IX6 X4-X2 DECREMENT EQUIPMENT ASSIGNED COUNT
  10235. SA6 A4
  10236. EQ PPR1 RETURN
  10237. DFMM SPACE 4,30
  10238. *** DFMM - PROCESS DAYFILE MESSAGE.
  10239. *
  10240. * ENTRY
  10241. *T, OR 12/ DFMM,12/ BC,6/,6/ MO,24/
  10242. *T, MB 42/, 18/ADDR
  10243. * BC BYTE COUNT OF MESSAGE. THE PP WILL BE HUNG IF
  10244. * *BC* TRANSLATES TO WORD COUNT GREATER THAN 5 FOR
  10245. * CODED MESSAGES AND 6 FOR BINARY MESSAGES.
  10246. * FOR *BMCN* THE (BC) MUST TRANSLATE TO A WORD COUNT
  10247. * THAT IS .LE. 60.
  10248. * BC = 0, SET BUFFER IN *1DD* INPUT REGISTER BUSY.
  10249. * MO MESSAGE OPTION (SEE *PPCOM* FOR LIST OF OPTIONS).
  10250. * BIT 5 OF *MO* SET INDICATES THAT THE CALLING PP
  10251. * CANNOT DUMP THE DAYFILE BUFFER.
  10252. * BIT 4 OF *MO* SET WILL CAUSE THE DAYFILE BUFFER TO
  10253. * BE INTERLOCKED FOR PROCESSING BY THE CALLING PP.
  10254. *
  10255. * MESSAGE BUFFER CONTAINS UP TO AND INCLUDING 5 WORDS
  10256. * OF MESSAGE DATA (6 WORDS FOR BINARY MESSAGE).
  10257. * ADDR FOR *BMCN* THIS IS THE CENTRAL MEMORY ADDRESS WHERE
  10258. * THE *BML* ENTRY IS LOCATED.
  10259. *
  10260. * INTERMEDIATE PROCESSING (USED ON BUFFER BUSY AND FULL)
  10261. *T, OR 12/ CDBM,12/ BC,6/,6/ MO,12/ CP+SF,12/ DI
  10262. * CP = CONTROL POINT ADDRESS.
  10263. * SF = 0 TO WAIT FOR 1 SECTOR OF SPACE IN DAYFILE BUFFER.
  10264. * = 1 TO WAIT UNTIL PP DUMP BUFFER NOT BUSY.
  10265. * DI DAYFILE INDEX.
  10266. * 0 = JOB DAYFILE.
  10267. * 1 = MASTER DAYFILE.
  10268. * 2 = ACCOUNT DAYFILE.
  10269. * 3 = ERRLOG DAYFILE.
  10270. * 4 = MAINLOG DAYFILE.
  10271. *
  10272. * EXIT
  10273. *T, OR 12/ 0,12/ BC,6/,6/ MO,12/ 0,12/ 0
  10274. * MESSAGE COMPLETELY PROCESSED.
  10275. *
  10276. *T, OR 12/ 0,36/,12/ BUSY
  10277. * BUSY = 0, IF BUFFER WAS SET BUSY ON BC = 0 REQUEST.
  10278. *
  10279. *T, OR 12/ 0,12/ BC,6/,6/ MO,12/ LN,12/ DI
  10280. * PP MUST CALL *1DD* TO DUMP THE BUFFER.
  10281. * LN LENGTH OF MASS STORAGE ERROR PROCESSOR AND DIRECT
  10282. * CELLS TO BE SAVED.
  10283. * DI DAYFILE INDEX.
  10284. * 0 = JOB DAYFILE.
  10285. * 1 = MASTER DAYFILE.
  10286. * 2 = ACCOUNT DAYFILE.
  10287. * 3 = ERRLOG DAYFILE.
  10288. * 4 = MAINLOG DAYFILE.
  10289. *
  10290. * NOTE THAT IF AN ALTERNATE PSEUDO-CONTROL POINT ASSIGNMENT IS
  10291. * PRESENT, THE ONLY OPTIONS THAT CAN BE SPECIFIED ARE THOSE
  10292. * THAT ISSUE MESSAGES TO THE SYSTEM DAYFILES WITH THE JSN
  10293. * SUPPLIED BY THE CALLER.
  10294. *
  10295. * HANG CONDITIONS -
  10296. *
  10297. * MESSAGE LENGTH TOO LONG.
  10298. * OPTION SELECTED IS NOT FOR SYSTEM DAYFILE WITH CALLER
  10299. * SUPPLIED JSN AND ALTERNATE PSEUDO-CONTROL POINT
  10300. * ASSIGNMENT IS PRESENT.
  10301.  
  10302.  
  10303. PPR DFMM
  10304.  
  10305. AX2 24
  10306. SB7 X2 SET CP/PCP ADDRESS
  10307. SA2 DSSL CHECK FOR DEADSTART IN PROGRESS
  10308. SX6 A5+ SET DUMMY RA+1
  10309. LX2 59-2
  10310. PL X2,DFM0 IF NOT DEADSTART IN PROGRESS
  10311. TB7 SCA ISSUE MESSAGE AT SYSTEM CONTROL POINT
  10312. DFM0 SA6 RA1
  10313. MX0 36 CLEAR BYTES 3 AND 4 OF OUTPUT REGISTER
  10314. BX7 X0*X5
  10315. AX1 36 POSITION BYTE COUNT
  10316. SA7 A5+
  10317. BX5 X7
  10318. ZR X1,DFM30 IF SET BUFFER BUSY REQUEST
  10319. SB4 4
  10320. SX7 16384/5+1
  10321. SX4 X1+B4 BC+4
  10322. IX6 X7*X4 (BC+4)*16384/5
  10323. SX3 B4+B1 X3 = 5
  10324. AX6 14 ((BC+4)*(16384/5))/16384 = (BC+4)/5
  10325. SX2 X1-27
  10326. SB6 X6 SET WORD COUNT
  10327. SX4 A5+ SET MESSAGE ADDRESS - 1
  10328. MX0 -4
  10329. LX5 -24
  10330. TX2 B7-200B,-SCA
  10331. BX0 -X0*X5 CHECK MESSAGE DESTINATION
  10332. NG X2,DFM0.3 IF NOT ALTERNATE PCP ASSIGNMENT
  10333. SX2 106014B CALLER SUPPLIED JSN OPTIONS MASK
  10334. SB3 X0+59-17
  10335. LX2 B3
  10336. PL X2,HNG IF NOT CALLER SUPPLIED JSN OPTION
  10337. DFM0.3 SB3 X0-BMLN/10000B
  10338. LX5 -36
  10339. NG B3,DFM1 IF NOT MAINTENANCE LOG (*BMLN* OR *BMCN*)
  10340. SX2 X1-31
  10341. ZR B3,DFM1 IF *BMLN* FUNCTION
  10342. SA2 A5+1
  10343. SX4 X2-1 SET MESSAGE ADDRESS - 1
  10344. SX2 X1-60*5+1
  10345. DFM1 PL X2,HNG IF MESSAGE TOO LONG
  10346. IX7 X6*X3 (BC+4)/5*5
  10347. IX0 X1-X7 BC-((BC+4)/5*5) = -REMAINDER
  10348. SX2 0 SET *DFMM* FLAG
  10349. SA1 X4+B6
  10350. NZ B6,DFM2 IF WORD COUNT .NE. 0
  10351. BX0 -X3 SET MASK INDEX FOR NULL MESSAGE
  10352. SX6 B1 SET WORD COUNT
  10353.  
  10354. * BEGIN PROCESSING COMMON TO *DFMM* AND *MSG* REQUESTS.
  10355. *
  10356. * ENTRY (X0) = MASK INDEX FOR LAST WORD OF MESSAGE.
  10357. * (X1) = LAST WORD OF MESSAGE.
  10358. * (X2) = 1/X,59/0 WHERE X = 1 IF *MSG* CALL.
  10359. * (X4) = MESSAGE ADDRESS - 1.
  10360. * (X5) = REQUEST.
  10361. * (X6) = WORD COUNT OF MESSAGE.
  10362.  
  10363. DFM2 BX7 X2+X4 COMBINE CALL FLAG WITH MESSAGE ADDRESS
  10364. SA6 DMWC SAVE WORD COUNT
  10365. SA7 A6+B1
  10366. ERRNZ DMWC+1-DMMA MEMORY REFERENCE OUT OF ORDER
  10367. SA3 X0+TMSK+5 FETCH EOM MASK
  10368. MX4 -4
  10369. BX7 X3*X1
  10370. SX0 X6+B1 ADJUST WORD COUNT TO INCLUDE TIME
  10371. LX5 -24 EXTRACT MESSAGE OPTION
  10372. SA7 A7+B1
  10373. ERRNZ DMMA+1-DMLW MEMORY REFERENCE OUT OF ORDER
  10374. BX3 -X4*X5
  10375. MX1 12
  10376. SB4 X3-TMPOL
  10377. PL B4,DFM8 IF ILLEGAL OPTION (DEFAULT TO 0)
  10378. SA2 X3+TMPO
  10379. DFM3 BX6 X2 SAVE ENTRY FROM MESSAGE OPTION TABLE
  10380. LX5 24 SHIFT REQUEST WORD BACK
  10381. SA6 DMPA
  10382. NG X2,DFM7 IF MESSAGE GOING TO JOB DAYFILE
  10383. MX3 -6
  10384. AX6 36
  10385. BX6 -X3*X6
  10386. SB6 X6 SET DAYFILE INDEX
  10387. LX3 X6,B1 CALCULATE ABSOLUTE ADDRESS
  10388. IX3 X3+X6
  10389. TX6 X3-3,DP
  10390. SA6 DDBA
  10391. ERX3 X6 READ BUFFER POINTERS
  10392. DFM4 SX7 B1
  10393. IX4 X6+X7
  10394. IX7 X7+X4
  10395. ERX4 X4
  10396. ERX1 X7 CHECK BUFFER STATUS
  10397. SB4 X4 OUT POINTER
  10398. LX1 59-1
  10399. AX4 24 BUFFER LENGTH
  10400. SB3 X3 IN POINTER
  10401. ZR X4,DFM16 IF ZERO LENGTH BUFFER
  10402. SA7 DFPA
  10403. PL X1,DFM23 IF BUFFER INTERLOCKED
  10404. SB5 B4-B3 OUT - IN
  10405. LX3 59-35
  10406. NG X3,DFM24 IF MESSAGES WERE LOST
  10407. LX3 35-59
  10408. AX3 36 FIRST POINTER
  10409. SB4 X0+B1 WORD COUNT INCLUDING JOB SEQUENCE NUMBER
  10410. GT B5,B0,DFM5 IF OUT .GT. IN
  10411. SB5 X4+B5
  10412. DFM5 TGE B4,B5,(/CPP/DDB,CPP,/MONITOR/DDB) IF NOT ENOUGH SPACE
  10413. BX7 X5
  10414. LX7 59-28
  10415. PL X7,DFM6 IF NO REQUEST TO SET BUFFER INTERLOCK
  10416. SX7 B1
  10417. LX1 1
  10418. BX7 -X7*X1
  10419. PL X1,DFM23 IF DUMP IN PROGRESS
  10420. LX7 1
  10421. SA1 DFPA
  10422. EWX7 X1 SET BUFFER INTERLOCK
  10423. DFM6 SB4 X2 PREPROCESSOR ADDRESS
  10424. SA1 TIML
  10425. SA2 DMMA
  10426. BX6 X1 TIME VALUE FOR MESSAGE
  10427. SB5 X4 SET LIMIT
  10428. BX4 X6
  10429. JP B4 EXIT TO PREPROCESSOR
  10430.  
  10431. DFM7 TX4 B7,-SCA
  10432. ZR X4,DFM8 IF SYSTEM CONTROL POINT
  10433. SA3 B7+FLSW
  10434. MX1 12
  10435. BX4 X1*X3
  10436. ZR X4,DFM16 IF NO NFL
  10437. MX1 -RMSK
  10438. LX1 12
  10439. BX4 -X1*X3 EXTRACT RA
  10440. AX4 6
  10441. SX6 DAPN
  10442. IX6 X4-X6
  10443. ERX3 X6
  10444. SA6 DDBA
  10445. SX7 DAYN
  10446. IX4 X4-X7 SET ABSOLUTE BUFFER ADDRESS
  10447. SX3 X3
  10448. LX4 36
  10449. BX3 X4+X3 COMBINE BUFFER ADDRESS WITH IN POINTER
  10450. SB6 B0+ SET DAYFILE INDEX FOR JOB DAYFILE
  10451. EQ DFM4 READ REMAINING BUFFER POINTERS
  10452.  
  10453. DFM8 SA5 A5 REREAD REQUEST
  10454. LX1 -24
  10455. SA2 TMPO CHANGE MESSAGE OPTION TO 0
  10456. BX7 -X1*X5
  10457. SA7 A5+
  10458. LX5 -24
  10459. EQ DFM3 PROCESS NEW MESSAGE OPTION
  10460.  
  10461. * ENTRY FOR MESSAGE WITH JOB SEQUENCE NUMBER IN MESSAGE.
  10462. *
  10463. *T MB 24/ JSN, 12/ NONZERO, 12/ NONZERO, 6/ , 6/ SC
  10464. * JSN JOB SEQUENCE NUMBER.
  10465. * SC JOB SERVICE CLASS.
  10466.  
  10467. DFM9 SX1 B1
  10468. IX0 X0-X1
  10469. IX2 X1+X2 INCREMENT ADDRESS
  10470. ERX1 X2 READ NEXT WORD
  10471. MX7 -6
  10472. BX7 -X7*X1 JOB SERVICE CLASS
  10473. EQ DFM12 STORE TIME
  10474.  
  10475. * ENTRY FOR MESSAGE TO BINARY MAINTENANCE LOG.
  10476.  
  10477. DFM10 SX7 X0+1 SET WORD COUNT FOR MESSAGE HEADER
  10478. SA1 PDTL
  10479. MX6 -36
  10480. BX1 -X6*X1
  10481. LX7 48
  10482. BX6 X7+X1
  10483.  
  10484. * ENTRY FOR MESSAGE WITH JOB SEQUENCE NUMBER FROM
  10485. * CONTROL POINT AREA.
  10486.  
  10487. DFM11 SA1 B7+TFSW GET EJT ORDINAL
  10488. MX4 -12
  10489. LX1 12
  10490. BX4 -X4*X1
  10491. CX1 X4,EJT CONVERT EJT ORDINAL TO OFFSET
  10492. TA1 X1+SCLE,EJT GET JOB SERVICE CLASS
  10493. BX7 X1
  10494. AX7 54
  10495. SA1 A1+JSNE-SCLE GET JOB SEQUENCE NUMBER
  10496. NZ X4,DFM12 IF EJT ORDINAL PRESENT
  10497. + TX4 B7,-SCA
  10498. NZ X4,* IF NOT SYSTEM CONTROL POINT
  10499.  
  10500. * STORE TIME AND TRANSLATE JOB SERVICE CLASS.
  10501.  
  10502. DFM12 SX4 B3 STORE TIME IN DAYFILE BUFFER
  10503. IX4 X3+X4
  10504. EWX6 X4
  10505. MX4 24
  10506. SB3 B3+B1 ADVANCE IN
  10507. BX4 X4*X1
  10508. SA1 TJSC+X7 GET JOB SERVICE CLASS TRANSLATION
  10509. LX4 -12
  10510. BX4 X4+X1
  10511. NE B3,B5,DFM13 IF IN .NE. LIMIT
  10512. SB3 0 SET IN = FIRST
  10513.  
  10514. * ENTRY FOR MESSAGE WITH NO JOB SEQUENCE NUMBER.
  10515.  
  10516. DFM13 ZR X0,DFM14 IF MESSAGE TRANSFER COMPLETE
  10517. BX6 X4
  10518. SX1 B3
  10519. IX1 X3+X1
  10520. SX0 X0-1 DECREMENT MESSAGE WORD COUNT
  10521. EWX6 X1
  10522. SB3 B3+B1 ADVANCE IN
  10523. SX4 B1
  10524. IX2 X2+X4
  10525. ERX4 X2 READ NEXT WORD OF MESSAGE
  10526. NE B3,B5,DFM13 IF IN .NE. LIMIT
  10527. SB3 0 SET IN = FIRST
  10528. EQ DFM13 CONTINUE TRANSFER
  10529.  
  10530. DFM14 SA2 DMLW STORE EOM
  10531. BX7 X2
  10532. SA2 DDBA REREAD IN POINTER
  10533. ERX3 X2
  10534. AX3 18 CLEAR IN POINTER
  10535. SX0 B3 SET IN
  10536. LX3 18
  10537. SB3 DFM16 SET RETURN FROM *DDD*
  10538. BX6 X3+X0
  10539. EWX7 X1
  10540. EWX6 X2
  10541. SX6 B1
  10542. IX6 X6+X2
  10543. ERX1 X6
  10544. BX4 X1
  10545. SX1 X1
  10546. AX4 24
  10547. IX7 X0-X1 IN - OUT
  10548. PL X7,DFM15 IF IN .GT. OUT
  10549. IX7 X7+X4 ADD BUFFER LENGTH
  10550. DFM15 BX6 X4-X7 CHECK BUFFER THRESHOLD
  10551. AX6 6
  10552. ZR X6,DDD IF BUFFER FULL
  10553. DFM16 TX4 B7,-SCA CHECK JOB ISSUING MESSAGE
  10554. SA2 DMPA
  10555. LX2 -18 POSITION POST PROCESSOR ADDRESS
  10556. BX7 X7-X7
  10557. SB4 X2
  10558. LX2 18+1
  10559. ZR X4,DFM20 IF JOB AT SYSTEM CONTROL POINT
  10560. SA1 DMMA GET *MSG* CALL FLAG
  10561. JP B4 EXIT TO POST PROCESSOR
  10562.  
  10563. DFM17 SX3 10B
  10564. EQ DFM19 CHANGE MESSAGE REQUEST
  10565.  
  10566. DFM18 SB0 0
  10567. SX3 CPON/10000B
  10568.  
  10569. * CHANGE MESSAGE REQUEST.
  10570.  
  10571. DFM19 LX5 -24 POSITION OUTPUT REGISTER
  10572. MX7 55
  10573. SA4 DMWC READ WORD COUNT
  10574. BX5 X7*X5 REMOVE CURRENT REQUEST
  10575. SA2 X3+TMPO READ MESSAGE OPTION TABLE
  10576. BX7 X5+X3 INSERT NEW MESSAGE OPTION
  10577. MX1 12
  10578. LX7 24
  10579. SX0 X4+B1
  10580. BX5 X5+X3
  10581. SA1 RA1
  10582. EWX7 X1 REWRITE RA+1
  10583. SA7 MSGB UPDATE POSSIBLE *X* STATUS COPY
  10584. EQ DFM3 PROCESS NEXT DAYFILE
  10585.  
  10586. DFM20 PL X2,PPR1 IF MESSAGE NOT SPECIFIED FOR *MS1W*
  10587. SB0 0
  10588.  
  10589. * STORE MESSAGE AT *MS1W* OF CONTROL POINT.
  10590.  
  10591. DFM21 MX0 -12
  10592. SA3 DMMA RETRIEVE MESSAGE ADDRESS
  10593. LX5 59-23
  10594. PL X3,DFM22 IF *DFMM* CALL
  10595. SX1 1
  10596. NG X5,DFM22 IF CONTROL STATEMENT MESSAGE
  10597. SA4 B7+ACLW CHECK USER MESSAGE LIMIT
  10598. LX1 36
  10599. BX2 X4
  10600. LX4 12
  10601. AX4 48
  10602. ZR X4,DFM22 IF UNLIMITED USER
  10603. IX7 X2-X1 DECREMENT USER MESSAGE LIMIT
  10604. SA7 A4
  10605. DFM22 BX4 -X3 KEEP MSG INDICATOR
  10606. SX5 B1
  10607. IX1 X3+X5 NEXT WORD
  10608. ERX2 X1 READ NEXT WORD
  10609. BX6 X2
  10610. JP TMSG+1 MOVE MESSAGE VIA *MSG* PROCESSOR
  10611.  
  10612. * IF CALLING PP CAN DUMP THE BUFFER, REJECT THE REQUEST VIA
  10613. * *CDBM*. OTHERWISE, SIMULATE A COMPLETED REQUEST.
  10614.  
  10615. DFM23 SA2 DMMA CHECK REQUEST
  10616. SX4 B6
  10617. MX1 1
  10618. NG X2,DFM23.1 IF *MSG* CALL
  10619. BX5 X4+X5
  10620. JP DDB2 CHANGE REQUEST TO *CDBM*
  10621.  
  10622. * RESTORE ORIGINAL REQUEST AND SET *X* STATUS.
  10623.  
  10624. DFM23.1 SA1 MSGB GET ORIGINAL REQUEST
  10625. BX6 X1
  10626. SA1 RA1 GET RA+1 ADDRESS
  10627. EWX6 X1
  10628. EQ SXS SET *X* STATUS
  10629.  
  10630. * DAYFILE MESSAGES WERE RECENTLY DISCARDED BECAUSE THE
  10631. * CALLING PP COULD NOT DUMP THE DAYFILE BUFFER. THIS ROUTINE
  10632. * PUTS AN INFORMATIVE MESSAGE IN THE BUFFER, IF ROOM EXISTS.
  10633.  
  10634. DFM24 SX0 X0+DFMAL+1 TEST IF ROOM FOR ERROR MESSAGE
  10635. LX3 35-59 REPOSITION BUFFER POINTERS
  10636. SB5 B4-B3
  10637. AX3 36 FIRST POINTER
  10638. SB4 X0+B1
  10639. GT B5,B0,DFM25 IF OUT .GT. IN
  10640. SB5 X4+B5
  10641. DFM25 TGE B4,B5,(/CPP/DDB,CPP,/MONITOR/DDB) IF NOT ENOUGH SPACE
  10642. MX6 1
  10643. SB5 X4 SET LIMIT
  10644. BX6 -X6*X1
  10645. LX1 59-0-59+1
  10646. PL X1,DFM23 IF DUMP IN PROGRESS
  10647. LX6 1-59
  10648. SA1 DFPA SET BUFFER INTERLOCK
  10649. EWX6 X1
  10650. SA4 DFMA JOB SEQUENCE NAME FOR CODED DAYFILES
  10651. SX4 X2-DFM10 CHECK FOR MESSAGE TO MAINLOG
  10652. SA1 TIML TIME LINE FOR CODED DAYFILES
  10653. NZ X4,DFM25.1 IF NOT MAINLOG
  10654. SX4 4 SET MAINLOG WORD COUNT
  10655. SA1 PDTL
  10656. LX4 48
  10657. BX1 X1+X4
  10658. SA4 DFMB JOB SEQUENCE NAME FOR BINARY DAYFILE
  10659. DFM25.1 SX4 B3+ STORE TIME
  10660. IX4 X3+X4
  10661. BX6 X1
  10662. EWX6 X4
  10663. SA4 A4 REREAD JOB SEQUENCE NAME
  10664. SB3 B3+B1 ADVANCE IN
  10665. NE B3,B5,DFM26 IF IN .NE. LIMIT
  10666. SB3 B0
  10667. DFM26 SX1 B3 WRITE JOB SEQUENCE NUMBER TO BUFFER
  10668. BX6 X4
  10669. IX1 X1+X3
  10670. EWX6 X1
  10671. SA1 A4+B1 ERROR MESSAGE
  10672. SB3 B3+B1 ADVANCE IN
  10673. NE B3,B5,DFM27 IF IN .NE. LIMIT
  10674. SB3 0
  10675. DFM27 SX4 B3 WRITE ERROR MESSAGE TO BUFFER
  10676. BX6 X1
  10677. IX4 X3+X4
  10678. SA1 A1+B1 GET NEXT WORD OF ERROR MESSAGE
  10679. SB3 B3+B1 ADVANCE IN
  10680. NE B3,B5,DFM27.1 IF IN .NE. LIMIT
  10681. SB3 B0
  10682. DFM27.1 EWX6 X4 WRITE FIRST WORD OF MESSAGE TO BUFFER
  10683. SX4 B3
  10684. BX6 X1
  10685. IX4 X3+X4
  10686. SA1 DDBA
  10687. EWX6 X4 WRITE SECOND WORD OF MESSAGE
  10688. SX0 B1
  10689. IX0 X0+X1
  10690. ERX1 X1 CLEAR *MESSAGE LOST* FLAG
  10691. MX6 1
  10692. LX1 59-35
  10693. BX6 -X6*X1
  10694. SB3 B3+B1 ADVANCE IN
  10695. NE B3,B5,DFM28 IF IN .NE. LIMIT
  10696. SB3 B0
  10697. DFM28 LX6 35-59
  10698. SA1 DDBA REREAD *IN* POINTER
  10699. SX4 B3 SET *IN*
  10700. AX6 12
  10701. LX6 12
  10702. BX6 X4+X6
  10703. ERX4 X0 RESTORE *LIMIT*
  10704. EWX6 X1
  10705. SX1 B1
  10706. IX0 X0+X1
  10707. AX4 24
  10708. ERX1 X0
  10709. MX6 1
  10710. LX1 59-1
  10711. LX5 59-28
  10712. BX6 X1+X6
  10713. NG X5,DFM29 IF REQUEST TO SET BUFFER INTERLOCK
  10714. LX6 1-59
  10715. EWX6 X0 CLEAR BUFFER INTERLOCK
  10716. DFM29 SA1 DMWC RESTORE WORD COUNT
  10717. LX5 28-59
  10718. SX0 X1+B1 ADJUST WORD COUNT TO INCLUDE TIME
  10719. EQ DFM6 PROCESS MESSAGE
  10720.  
  10721. * SET BUFFER BUSY FOR *1DD* DIRECT CALL.
  10722.  
  10723. DFM30 SA1 A5-B1 READ INPUT REGISTER
  10724. SX3 X1
  10725. NZ X3,DFM31 IF NOT JOB DAYFILE
  10726. SA3 B7+FLSW GET RA
  10727. MX2 -RMSK
  10728. AX3 RSHF
  10729. BX2 -X2*X3 EXTRACT RA/100B
  10730. LX2 6
  10731. SX3 DAPN-2 SET INTERLOCK ADDRESS
  10732. IX3 X2-X3
  10733. EQ DFM32 CONTINUE PROCESSING
  10734.  
  10735. DFM31 LX2 X3,B1 SET INTERLOCK ADDRESS
  10736. IX2 X2+X3
  10737. TX3 X2-3+2,DP
  10738. DFM32 ERX1 X3
  10739. MX4 -3
  10740. BX6 -X4*X1
  10741. BX5 X6-X4
  10742. SX4 5
  10743. SX7 B1+
  10744. NZ X5,PPR1 IF BUFFER ALREADY DUMPED
  10745. BX6 -X4*X1 SET BUFFER BUSY, CLEAR *1DD* CALLED FLAG
  10746. BX7 X7-X7
  10747. EWX6 X3
  10748. EQ PPR1 CLEAR OUTPUT REGISTER
  10749.  
  10750. DFMA DATA 10H**ERROR**. JOB SEQUENCE NUMBER
  10751. DATA C*MESSAGES LOST.* ERROR MESSAGE
  10752. DFMAL EQU *-DFMA ERROR MESSAGE LENGTH - 1
  10753.  
  10754. DFMB DATA 10H SYS S. SYSTEM JOB JAME
  10755. VFD 12/DM0406,12/DS0114,36/0
  10756. BSSZ DFMB+DFMAL-* FILL REST OF MESSAGE
  10757. DMWC CON 0 MESSAGE WORD COUNT
  10758. DMMA CON 0 MESSAGE ADDRESS
  10759. DMLW CON 0 LAST WORD OF MESSAGE
  10760. DMPA CON 0 PROCESSOR ADDRESS
  10761. DFPA CON 0 BUFFER POINTER ADDRESS
  10762. TMPO SPACE 4,10
  10763. ** TMPO - TABLE OF MESSAGE PROCESSING OPTIONS.
  10764. *
  10765. * INDEXED BY MESSAGE OPTION (MO).
  10766. *
  10767. *T, 6/ DF,12/,6/ DI,18/ PP,18/ PA
  10768. * DF = DESTINATION FLAGS.
  10769. * BITS 0 - 3 = RESERVED.
  10770. * BIT 4 = *MS1W* FLAG FOR SYSTEM CONTROL POINT.
  10771. * BIT 5 = JOB DAYFILE FLAG.
  10772. * DI = DAYFILE INDEX.
  10773. * 0 = JOB DAYFILE.
  10774. * 1 = MASTER DAYFILE.
  10775. * 2 = ACCOUNT DAYFILE.
  10776. * 3 = ERRLOG DAYFILE.
  10777. * 4 = MAINLOG DAYFILE.
  10778. * PP = POST PROCESSOR ADDRESS.
  10779. * PA = PROCESSOR ADDRESS.
  10780.  
  10781.  
  10782. TMPO BSS 0
  10783.  
  10784. VFD 6/20B (00B) - *MS1W* AND JOB/SYSTEM DAYFILES
  10785. VFD 12/
  10786. VFD 6/MSDY+1
  10787. VFD 18/DFM18,18/DFM11
  10788. VFD 6/0 NMSN - JOB/SYSTEM DAYFILES, NOT *MS1W*
  10789. VFD 12/
  10790. VFD 6/MSDY+1
  10791. VFD 18/DFM17,18/DFM11
  10792. VFD 6/0 JNMN - SYSTEM DAYFILE WITH JSN IN MESSAGE
  10793. VFD 12/
  10794. VFD 6/MSDY+1
  10795. VFD 18/MTRP,18/DFM9
  10796. VFD 6/60B CPON - *MS1W* AND JOB DAYFILE
  10797. VFD 12/
  10798. VFD 6/0
  10799. VFD 18/DFM21,18/DFM13
  10800. VFD 6/0 ERLN - ERRLOG
  10801. VFD 12/
  10802. VFD 6/ELDY+1
  10803. VFD 18/MTRP,18/DFM11
  10804. VFD 6/0 ACFN - ACCOUNT FILE
  10805. VFD 12/
  10806. VFD 6/ACDY+1
  10807. VFD 18/MTRP,18/DFM11
  10808. VFD 6/0 EJNN - ERRLOG WITH JSN IN MESSAGE
  10809. VFD 12/
  10810. VFD 6/ELDY+1
  10811. VFD 18/MTRP,18/DFM9
  10812. VFD 6/0 AJNN - ACCOUNT FILE WITH JSN IN MESSAGE
  10813. VFD 12/
  10814. VFD 6/ACDY+1
  10815. VFD 18/MTRP,18/DFM9
  10816. VFD 6/40B (10B) - USED INTERNALLY BY *CPUMTR*
  10817. VFD 12/
  10818. VFD 6/0
  10819. VFD 18/MTRP,18/DFM13
  10820. VFD 6/40B CDON - JOB DAYFILE
  10821. VFD 12/
  10822. VFD 6/0
  10823. VFD 18/MTRP,18/DFM13
  10824. VFD 6/0 MDON - SYSTEM DAYFILE ONLY
  10825. VFD 12/
  10826. VFD 6/MSDY+1
  10827. VFD 18/MTRP,18/DFM11
  10828. VFD 6/0 I1FN - USER OPTION 1
  10829. VFD 12/
  10830. VFD 6/MSDY+1
  10831. VFD 18/DFM18,18/DFM11
  10832. VFD 6/0 I2FN - USER OPTION 2
  10833. VFD 12/
  10834. VFD 6/MSDY+1
  10835. VFD 18/DFM18,18/DFM11
  10836. VFD 6/0 I3FN - USER OPTION 3
  10837. VFD 12/
  10838. VFD 6/MSDY+1
  10839. VFD 18/DFM18,18/DFM11
  10840. VFD 6/0 BMLN - BINARY MAINTENANCE LOG
  10841. VFD 12/
  10842. VFD 6/MLDY+1
  10843. VFD 18/MTRP,18/DFM10
  10844. VFD 6/0 BMCN - BML WITH MESSAGE IN ALT. BUFFER
  10845. VFD 12/
  10846. VFD 6/MLDY+1
  10847. VFD 18/MTRP,18/DFM10
  10848. TMPOL EQU *-TMPO
  10849. TMSK SPACE 4,10
  10850. ** TMSK - TABLE OF MESSAGE TERMINATION MASKS.
  10851.  
  10852.  
  10853. TMSK BSS 0
  10854. VFD 60/0
  10855. VFD 12/-0,48/0
  10856. VFD 24/-0,36/0
  10857. VFD 36/-0,24/0
  10858. VFD 48/-0,12/0
  10859. VFD 60/-0
  10860. TJSC SPACE 4,10
  10861. ** TJSC - TABLE OF JOB SERVICE CLASS TRANSLATIONS.
  10862. *
  10863. * ONE WORD ENTRIES INDEXED BY JOB SERVICE CLASS.
  10864. *T 12/ SPACES, 24/ 0, 6/ SC, 6/ ., 12/ SPACES
  10865. * SC SERVICE CLASS CHARACTER TRANSLATION.
  10866.  
  10867.  
  10868. TJSC BSS 0
  10869. .1 SET 1
  10870. .A DUP MXSC
  10871. .2 MICRO .1,1,$"NMDS"$
  10872. .B IFC NE,$".2"$$
  10873. VFD 12/2H ,24/0,6/1H".2",18/3H.
  10874. .1 SET .1+1
  10875. .B ELSE
  10876. STOPDUP
  10877. .B ENDIF
  10878. .A ENDD
  10879. DDB SPACE 4,15
  10880. ** DDB - DUMP DAYFILE BUFFER.
  10881. *
  10882. * ENTRY (DDBA) = FIRST / IN POINTER ADDRESS.
  10883. * (DFPA) = BUFFER POINTER INTERLOCK ADDRESS.
  10884. * (B6) = DAYFILE INDEX.
  10885. * (B7) = CONTROL POINT ADDRESS.
  10886. * (X5) = REQUEST.
  10887. *
  10888. * USES A - 1, 2, 4, 6, 7.
  10889. * B - 3.
  10890. * X - ALL.
  10891. *
  10892. * CALLS APQ, DDD, PPRX, PPR1, SXS.
  10893.  
  10894.  
  10895. DDB SA4 DDBA CHECK BUFFER STATUS
  10896. SX2 B1+B1
  10897. IX6 X4+X2
  10898. ERX1 X6
  10899. SA2 DMMA CHECK REQUEST
  10900. LX1 59-0
  10901. SX4 B6
  10902. NG X2,DDB4 IF *MSG* REQUEST
  10903. BX5 X4+X5
  10904. PL X1,DDB2 IF DUMP IN PROGRESS
  10905. SA2 DFPP
  10906. MX0 -59
  10907. LX2 59-0
  10908. LX4 X2,B1
  10909. PL X2,DDB1 IF PP DUMP BUFFER IN USE
  10910. BX2 X5 CHECK DUMP FLAG
  10911. LX2 59-29
  10912. BX7 X7-X7
  10913. NG X2,DDB2 IF PP CANNOT DUMP BUFFER
  10914. BX7 -X0*X1
  10915. LX7 1
  10916. MX0 48
  10917. EWX7 X6 SET DAYFILE BUFFER BUSY
  10918. BX6 X0*X4
  10919. SX4 65B PARAMETER FOR PP *1DD* CALL
  10920. MX0 -48
  10921. SX3 A5-B1 PP INPUT REGISTER ADDRESS
  10922. BX5 -X0*X5
  10923. LX4 12
  10924. BX6 X6+X3 SET PP DUMP BUFFER BUSY
  10925. IX7 X5+X4
  10926. SA6 A2
  10927. SA7 A5 HAVE CALLING PP DUMP DAYFILE
  10928. JP PPRX EXIT
  10929.  
  10930. DDB1 BX7 X5 STORE PP OUTPUT REGISTER
  10931. SB3 DDB2 SET RETURN FROM *DDD*
  10932. SA7 A5
  10933. JP DDD ATTEMPT TO DUMP DAYFILE DIRECT
  10934.  
  10935. * CHANGE *DFMM* REQUEST TO *CDBM* IF THE CALLING PP CAN DUMP
  10936. * THE DAYFILE BUFFER. OTHERWISE, DISCARD REMAINING PORTION
  10937. * OF MESSAGE, SET A *MESSAGE LOST* FLAG, AND SIMULATE A
  10938. * COMPLETED REQUEST.
  10939.  
  10940. DDB2 SX0 B7
  10941. NZ X1,DDB3 IF DUMP INITIATED
  10942. SX0 X0+B1
  10943. DDB3 LX0 12 POSITION *CDBM* SUBFUNCTION
  10944. SX2 CDBM&DFMM
  10945. LX5 59-29
  10946. NG X5,DDB3.1 IF CALLING PP CANNOT DUMP BUFFER
  10947. LX5 29-59
  10948. BX5 X5+X0
  10949. LX2 48 CHANGE PP REQUEST TO *CDBM*
  10950. BX7 X5-X2
  10951. JP PPR1 EXIT TO STORE PP OUTPUT REGISTER
  10952.  
  10953. DDB3.1 SA1 DDBA READ BUFFER POINTERS
  10954. MX7 1
  10955. ERX2 X1
  10956. LX7 35-59
  10957. BX7 X2+X7 SET *MESSAGE LOST* FLAG
  10958. EWX7 X1 REWRITE POINTERS
  10959. BX7 X7-X7 CLEAR OUTPUT REGISTER
  10960. EQ PPR1 EXIT
  10961.  
  10962. * NOT ENOUGH SPACE IN BUFFER ON *MSG* REQUEST.
  10963.  
  10964. DDB4 PL X1,DDB8 IF DUMP IN PROGRESS
  10965. SB3 DDB7 SET RETURN ADDRESS IF ACTIVE
  10966. SA2 DD
  10967. LX1 59-2-59+0
  10968. SX0 B7 SAVE (B7)
  10969. BX5 X6
  10970. BX6 X2+X4
  10971. NG X1,DDB8 IF *1DD* ALREADY CALLED
  10972. ZR B6,DDB5 IF JOB DAYFILE
  10973. TB7 0,SCA SET SYSTEM CONTROL POINT
  10974. DDB5 SB6 DDB6
  10975. EQ CAL CHECK ACTIVITY LIMIT
  10976.  
  10977. DDB6 MX2 1 SET *1DD* CALLED
  10978. BX7 X1+X2
  10979. LX7 2-59
  10980. EWX7 X5 STORE BUFFER INTERLOCK WORD
  10981. SB4 B0+ SET FOR DIRECTORY SEARCH
  10982. SB3 DDB7
  10983. EQ APQ ASSIGN PP REQUEST
  10984.  
  10985. DDB7 SB7 X0 RESTORE (B7)
  10986.  
  10987. * RESTORE ORIGINAL REQUEST AND SET *X* STATUS.
  10988.  
  10989. DDB8 SA1 MSGB GET ORIGINAL REQUEST
  10990. BX6 X1
  10991. SA1 RA1 GET RA+1 ADDRESS
  10992. EWX6 X1
  10993. EQ SXS SET JOB ON RECALL
  10994.  
  10995.  
  10996. DDBA CON 0 FIRST / IN POINTER ADDRESS
  10997. DDD SPACE 4,15
  10998. ** DDD - DUMP DAYFILE DIRECT.
  10999. *
  11000. * ENTRY (DDBA) = FIRST / IN POINTER ADDRESS.
  11001. * (A5) = REQUEST ADDRESS.
  11002. * (B3) = RETURN ADDRESS.
  11003. * (B6) = DAYFILE INDEX.
  11004. * (B7) = CONTROL POINT ADDRESS.
  11005. *
  11006. * EXIT (X1) = 0 IF DUMP NOT INITIATED.
  11007. *
  11008. * USES A - 1, 2, 4, 6, 7.
  11009. * B - 3.
  11010. * X - ALL.
  11011. *
  11012. * CALLS APQ.
  11013.  
  11014.  
  11015. DDD SA4 DDBA CHECK BUFFER STATUS
  11016. SX2 B1+B1
  11017. MX6 -3
  11018. IX0 X4+X2
  11019. ERX3 X0
  11020. BX6 -X6*X3
  11021. BX1 X1-X1
  11022. SX6 X6-3
  11023. NZ X6,RB3 IF BUFFER BUSY, INTERLOCKED, OR *1DD* CALL
  11024. SX4 B6
  11025. SA1 B7+TFSW SET EJT ORDINAL
  11026. MX2 -12
  11027. LX1 12
  11028. BX2 -X2*X1
  11029. CX1 X2,EJT CONVERT EJT ORDINAL TO OFFSET
  11030. NZ X2,DDD1 IF EJT ORDINAL PRESENT
  11031. + TX2 B7,-SCA
  11032. NZ X2,* IF NOT SYSTEM CONTROL POINT
  11033. DDD1 TA2 X1+JSNE,EJT GET JOB ADVANCE FLAG
  11034. BX1 X1-X1
  11035. LX2 59-6
  11036. SX7 B3 SAVE EXIT ADDRESS
  11037. SX6 B6 SAVE (B6)
  11038. NG X2,RB3 IF JOB ADVANCE SET
  11039. SA2 B7+STSW
  11040. LX7 18
  11041. LX2 59-24
  11042. BX6 X6+X7
  11043. SX7 B7 SAVE (B7)
  11044. TNG X2,(/CPP/DDD,CPP,/MONITOR/RB3) IF ROLLOUT REQUESTED
  11045. DDD2 SA2 DD BUILD *1DD* CALL
  11046. LX6 18
  11047. BX6 X6+X7
  11048. ZR B6,DDD3 IF JOB DAYFILE
  11049. TB7 0,SCA SET SYSTEM CONTROL POINT
  11050. DDD3 SX7 4 SET *1DD* CALLED FLAG
  11051. SB3 DDD6
  11052. SA6 T1 SAVE PARAMETERS
  11053. SB6 DDD4
  11054. BX6 X2+X4
  11055. BX7 X3+X7
  11056. EQ CAL CHECK ACTIVITY LIMIT
  11057.  
  11058. DDD4 EWX7 X0 STORE BUFFER STATUS WORD
  11059. SB4 B0 SET TO SEARCH DIRECTORY
  11060. SB3 DDD5 SET RETURN ADDRESS
  11061. EQ APQ ASSIGN PP
  11062.  
  11063. DDD5 SX1 B1+ SET DUMP INITIATED
  11064. DDD6 SA4 T1 RESTORE PARAMETERS
  11065. SA5 A5 RESTORE REQUEST
  11066. SB7 X4 RESTORE (B7)
  11067. AX4 18
  11068. SA2 DMMA
  11069. SB6 X4 RESTORE (B6)
  11070. AX4 18
  11071. SB3 X4 RESTORE (B3)
  11072. PL X2,RB3 IF *DFM* CALL
  11073. SA2 RA1
  11074. ERX5 X2
  11075. JP B3 RETURN
  11076. DLKM SPACE 4
  11077. *** DLKM - DELINK TRACKS.
  11078. *
  11079. * ENTRY
  11080. *T, OR 12/ DLKM,12/ EQ,12/ FT,12/ NT,12/ LT
  11081. * EQ EST ORDINAL
  11082. * IF BIT 11 OF EQUIPMENT FIELD IS SET THEN SET THE
  11083. * CHECKPOINT BIT FOR THIS EQUIPMENT UPON COMPLETION OF
  11084. * THE REQUEST.
  11085. * FT TRACK ONTO WHICH NT IS LINKED.
  11086. * NT TRACK TO BE LINKED TO FT.
  11087. * LT LAST TRACK IN CHAIN TO DROP.
  11088. *
  11089. * BIT 11 OF FT MUST BE CLEAR
  11090. * ALL TRACKS FROM FT (NOT INCLUDING FT) TO LT ARE RELEASED.
  11091. * NT IS LINKED TO FT.
  11092. *
  11093. * EXIT.
  11094. *T, OR 36/ 0,24/ PRU
  11095. * PRU = NUMBER OF PRUS RETURNED TO THE SYSTEM.
  11096. *
  11097. * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
  11098. * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
  11099. * BEFORE THE DLKM IS ISSUED TO CPUMTR.
  11100.  
  11101.  
  11102. PPR DLKM,(/ISD/CHR,ISD,/LSPMMF/CME,LSPMMF,/MONITOR/PMR),DLK
  11103. ,,FEX
  11104. DPPM SPACE 4,15
  11105. *** DPPM - DROP PP.
  11106. *
  11107. * ENTRY
  11108. *T, OR 12/ DPPM,12/,12/,12/,12/
  11109. *
  11110. * EXIT.
  11111. *T, IR 60/ 0
  11112. *T, OR 60/ 0
  11113. *
  11114. * HANG CONDITIONS -
  11115. *
  11116. * PP COUNT FIELD OF *STSW* IS ZERO UPON ENTRY.
  11117. * ALTERNATE CONTROL POINT OR PSEUDO-CONTROL POINT ASSIGNMENT
  11118. * PRESENT.
  11119.  
  11120.  
  11121. PPR DPPM,,,FEX
  11122.  
  11123. * ENTRY FROM *JACM*, *RECM*, *RPPM*, *UADM*, AND *CPCX*.
  11124.  
  11125. TX2 A5-1,-FP
  11126. LX2 PPXES-PPCES
  11127. MX0 -5
  11128. TA2 X2+ACPP,FPX GET CP ASSIGNMENT
  11129. TB5 A5-1,-SP
  11130. GT B5,B0,* IF RA+1 ADDRESS (*CPCX* CALL)
  11131. SA1 X2+STSW GET CP STATUS
  11132. SB7 X2 SET CP ADDRESS
  11133. SX7 B1
  11134. LX2 59-23
  11135. LX0 48-0
  11136. NG X2,HNG IF ALTERNATE CP/PCP ASSIGNMENT
  11137. LX7 48-0
  11138. BX3 -X0*X1 PP COUNT
  11139. IX6 X1-X7 DECREMENT PP COUNT
  11140. ZR X3,HNG IF PP COUNT ALREADY ZERO
  11141. SA6 A1
  11142. TNO /MONITOR/DPP1,NDCPC IF NOT DUAL CPU CACHE MACHINE
  11143. SB4 DPP1 SET *CPA* RETURN ADDRESS
  11144. TJP (/DCP/CPA,DCPC,/MONITOR/HNG) CHECK CPU SELECTION
  11145.  
  11146. DPP1 SB3 /BUFIO/PCQ SET EXIT TO PROCESS PSEUDO-PP REQUESTS
  11147. TZR B5,(/MONITOR/DPP4,BUFIO,/MONITOR/HNG) IF PSEUDO-PP
  11148. TX3 A5-1,-FPC
  11149. NG X3,DPP2 IF NOT CPP
  11150. TJP (/CPP/DPP,CPP,/MONITOR/HNG) DROP CPP
  11151.  
  11152. * RETURN PP TO POOL.
  11153.  
  11154. DPP2 SA3 PPAL
  11155. TX4 A5-1,-FP
  11156. MX7 1
  11157. AX4 PPCES PP INDEX
  11158. SB3 PPQ SET EXIT TO PROCESS PP REQUESTS
  11159. SX2 X4-12B
  11160. SX1 35B
  11161. LX7 -12
  11162. NG X2,DPP3 IF NOT SECOND BANK
  11163. IX4 X1-X4
  11164. DPP3 SB6 X4+
  11165. AX7 B6,X7
  11166. BX7 X7+X3 SET PP AVAILABLE BIT
  11167. SX4 B1 INCREMENT FREE PP COUNT
  11168. IX7 X7+X4
  11169. SA7 A3+
  11170.  
  11171. * CLEAR PP ASSIGNMENT.
  11172.  
  11173. DPP4 SA4 A5-B1 SAVE AUTO RECALL BIT
  11174. SX7 B0
  11175. SA7 A2 CLEAR *ACPP*
  11176. SA7 A5-B1 CLEAR INPUT REGISTER
  11177. SA7 A5+B1 CLEAR MB
  11178. SA7 A5 CLEAR OUTPUT REGISTER
  11179. SX7 1S4
  11180. SA7 IP SET INCREASED PRIORITY FOR JOB
  11181.  
  11182. * CHECK JOB STATUS.
  11183.  
  11184. AX6 48
  11185. LX4 59-41
  11186. ZR X6,JAV IF NO CPU/PP ACTIVITY
  11187. PL X4,RB3 IF NOT AUTO RECALL FOR THIS PP
  11188. AX6 9
  11189. SX6 X6+B1
  11190. SB6 B7+ SET EXCHANGE PACKAGE ADDRESS
  11191. NZ X6,RB3 IF NOT *I* STATUS
  11192. EQ RCC RECALL CPU
  11193. DTKM SPACE 4
  11194. *** DTKM - DROP TRACKS.
  11195. *
  11196. * ENTRY
  11197. *T, OR 12/ DTKM,12/ EQ,12/ TK,12/ SC,12/
  11198. * EQ EST ORDINAL
  11199. * IF BIT 11 OF EQUIPMENT FIELD IS SET THEN SET THE
  11200. * CHECKPOINT BIT FOR THIS EQUIPMENT UPON COMPLETION OF
  11201. * THE REQUEST.
  11202. * IF BIT 10 OF THE EQUIPMENT FIELD IS SET THE CALLER IS
  11203. * RELEASING A TRACK CHAIN LOCAL TO ANOTHER MACHINE.
  11204. * TK FIRST TRACK
  11205. * SC SECTOR NUMBER
  11206. *
  11207. * IF BIT 11 OF TK = 1, ALL TRACKS FROM TK TO END OF CHAIN ARE
  11208. * DROPPED.
  11209. * IF BIT 11 OF TK = 0, ALL TRACKS AFTER TK ARE DROPPED, AND
  11210. * SC IS INSERTED IN TRACK BYTE.
  11211. *
  11212. * EXIT
  11213. *T, OR 36/ 0,24/ PRU
  11214. * PRU = NUMBER OF PRUS RETURNED TO THE SYSTEM.
  11215. *
  11216. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  11217. * 1) EQUIPMENT NOT MASS STORAGE OR OUT OF EST.
  11218. * 2) ECS ADDRESS OF MST SET WHEN NOT MULTI-MAINFRAME MODE.
  11219. * 3) IF LAST SECTOR WRITTEN .GE. MAXIMUM SECTOR LIMIT.
  11220. * 4) IF ATTEMPTING TO DROP TRACKS LOCAL TO ANOTHER MACHINE.
  11221. * THIS IS DETECTED BY THE MRT BIT NOT BEING SET FOR
  11222. * THE FIRST TRACK IN THE CHAIN BEING DROPED.
  11223. * 5) THE TRACK IS BEYOND THE DEVICE TRACK LIMITS.
  11224. *
  11225. * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
  11226. * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
  11227. * BEFORE THE DTKM IS ISSUED TO CPUMTR.
  11228.  
  11229.  
  11230. PPR DTKM,(/ISD/CHR,ISD,/MONITOR/.DTKM),DTC,FEX
  11231.  
  11232. * THIS FUNCTION WILL BE PERFORMED IN MONITOR MODE IF THE
  11233. * THE FOLLOWING CONDITIONS ARE MET-
  11234. *
  11235. * 1) DEVICE IS NOT MMF SHARED.
  11236. * 2) *MST* IS NOT INTERLOCKED.
  11237. * 3) REQUEST IS RESETTING EOI IN CURRENT EOI TRACK.
  11238.  
  11239. LX1 59-35
  11240. NG X1,PMR IF DROP ENTIRE CHAIN
  11241. MX2 -9
  11242. BX6 -X2*X1 EXTRACT EST ORDINAL
  11243. CX4 X6,EST
  11244. TA4 X4+EQDE,EST READ EST ENTRY
  11245. SX7 -7777B
  11246. BX4 -X7*X4 MST ADDRESS/10B
  11247. LX4 3
  11248. SA4 X4+SDGL CHECK SHARED DEVICE STATUS
  11249. LX4 -1
  11250. MX3 -5
  11251. NG X4,PMR IF DEVICE INTERLOCKED
  11252. BX3 -X3*X4
  11253. AX4 36-1
  11254. ZR X4,DTC1 IF NON-SHARED DEVICE
  11255. TZR X3,(/LSPMMF/CME1,LSPMMF,/MONITOR/PMR) IF MST NOT READ
  11256. DTC1 BX1 X1-X6 CLEAR EST ORDINAL
  11257. LX1 35-25
  11258. SA4 A4+TRLL-SDGL
  11259. SX4 X4 PREVENT CARRY
  11260. IX4 X4+X1
  11261. SA3 X4 READ TRT WORD
  11262. MX7 2 EXTRACT BYTE POSITION
  11263. BX1 X7*X1
  11264. LX1 2+2 BYTE * 4
  11265. LX2 X1,B1 BYTE * 8
  11266. IX1 X1+X2
  11267. SB4 X1
  11268. LX3 X3,B4
  11269. NG X3,PMR IF EOI TRACK CHANGING
  11270. UX1,B6 X5 SET TO INTERLOCK TRT
  11271. SB3 /PROGRAM/DTC1 SET TO UPDATE EOI
  11272. SX6 B2+ SAVE (B2)
  11273. SB5 PPRX
  11274. SA6 T1
  11275. EQ /PROGRAM/CTR1
  11276. EATM SPACE 4,25
  11277. *** EATM - ENTER/ACCESS EVENT TABLE.
  11278. *
  11279. * ENTRY
  11280. *T, OR 12/ EATM,12/ FN,15/,21/ EVENT
  11281. * FN EEVS = ENTER EVENT.
  11282. * SEIS = SET EVENT TABLE INTERLOCK.
  11283. *
  11284. *T, OR 12/ EATM,12/ FN,18/,1/0,17/ TINT
  11285. * FN UHSS = UPDATE 887 DISK SPIN-UP TIME.
  11286. * TINT TIME INTERVAL BEFORE NEXT EVENT ALLOWED.
  11287. *
  11288. * EXIT
  11289. * FN EEVS, UHSS.
  11290. *T, OR 12/ 0,12/ ST,36/
  11291. * ST 0 IF REQUEST HONORED.
  11292. * 1 IF SUBFUNCTION NOT PROCESSED.
  11293. *
  11294. * FN SEIS.
  11295. *T, OR 12/ 0,12/ COUNT,36/
  11296. * COUNT COUNT OF EVENTS IN TABLE PRESENTLY.
  11297.  
  11298.  
  11299. PPR EATM,,,FEX
  11300.  
  11301. TA1 EVT GET EVENT COUNT
  11302. MX7 1
  11303. BX3 X5 GET SUBFUNCTION
  11304. MX0 -12
  11305. LX3 24
  11306. BX7 X7+X5
  11307. BX3 -X0*X3
  11308. BX6 -X0*X1 ISOLATE COUNT AND INTERLOCK BIT
  11309. SB4 X3-UETMS
  11310. LX6 59
  11311. PL B4,EAT4 IF UPDATE EVENT TIME REQUEST
  11312. NG X6,PPR1 IF INTERLOCK SET, REISSUE REQUEST
  11313. NZ X3,EAT2 IF SET INTERLOCK REQUEST
  11314. SX3 MEVC MAXIMUM NUMBER OF EVENTS
  11315. MX0 -1
  11316. IX3 X3-X6
  11317. ZR X3,EAT3 IF TABLE FULL
  11318. AX4 X6,B1 SET TABLE INDEX
  11319. SB4 12 SET SHIFT COUNT
  11320. SX6 X6+B1 INCREMENT COUNT
  11321. BX3 -X0*X6 SAVE EVEN OR ODD FLAG
  11322. MX0 -21
  11323. SX7 B0+
  11324. ZR X3,EAT1 IF COUNT EVEN
  11325. SB4 36 SET SHIFT COUNT
  11326. EAT1 BX5 -X0*X5
  11327. SX6 B1+B1
  11328. LX5 B4
  11329. IX6 X1+X6
  11330. LX0 B4
  11331. SA6 A1 WRITE NEW COUNT
  11332. TA2 X4,EVT
  11333. BX6 X0*X2
  11334. BX6 X5+X6
  11335. SA6 A2+ WRITE EVENT TO TABLE
  11336. EQ PPR1 CLEAR OR
  11337.  
  11338. EAT2 SX3 B1 SET INTERLOCK
  11339. IX7 X1+X3
  11340. SA7 A1+
  11341. EAT3 LX6 36
  11342. BX7 X6
  11343. EQ PPR1 RETURN EVENT COUNT
  11344.  
  11345. EAT4 SA2 TSVT+B4 READ EVENT TIME
  11346. SX3 X3-UETME
  11347. SA1 RTCL FETCH SECOND COUNTER
  11348. MX0 -24
  11349. LX1 24
  11350. PL X3,HNG IF INVALID SUBFUNCTION
  11351. BX1 -X0*X1
  11352. IX3 X1-X2
  11353. NG X3,EAT5 IF EVENT TIME NOT ELAPSED
  11354. SX5 X5
  11355. IX6 X1+X5 TIME INTERVAL FOR EVENT
  11356. SA6 A2
  11357. BX7 X7-X7
  11358. EQ PPR1 SET REQUEST COMPLETE
  11359.  
  11360. EAT5 SX7 B1 INDICATE TIME NOT ELAPSED
  11361. LX7 36
  11362. EQ PPR1 REJECT REQUEST
  11363.  
  11364.  
  11365. TSVT BSSZ UETME-UETMS SYSTEM EVENT TIMES
  11366. ECSM SPACE 4
  11367. *** ECSM - ECS TRANSFER.
  11368. * 1.) TRANSFER FROM 1 TO 100B WORDS TO/FROM RELATIVE ECS
  11369. * USING A USER SPECIFIED CM BUFFER.
  11370. * 2.) TRANSFER FROM 1 TO 100B WORDS TO/FROM ECS
  11371. * USING A USER SPECIFIED CM BUFFER.
  11372. * 3.) TRANSFER ECS ACCORDING TO A LIST OF ADDRESSES.
  11373. * 4.) PERFORM FLAG REGISTER OPERATIONS.
  11374.  
  11375.  
  11376. *** RRES-WRES - READ/WRITE RELATIVE USER ECS.
  11377. *
  11378. * ENTRY
  11379. *T, OR 12/ ECSM,6/ WC,18/ CMA,3/ SF,21/ ECA
  11380. * WC WORD COUNT - 1.
  11381. * CMA RELATIVE+400000B OR ABSOLUTE CM ADDRESS OF BUFFER.
  11382. * SF *RRES* OR *WRES* SUBFUNCTION CODE.
  11383. * ECA RELATIVE USER ECS ADDRESS.
  11384. *
  11385. * EXIT
  11386. *T, OR 12/ 0,12/ ST,12/,24/ ECD
  11387. * ST 0 FOR TRANSFER COMPLETE.
  11388. * 1 FOR ADDRESS BEYOND RELATIVE FLX.
  11389. * 7777 FOR TRANSFER ABORTED.
  11390. * ECD ABSOLUTE USER ECS ADDRESS WHERE ERROR OCCURRED
  11391. * IF ABORTED.
  11392.  
  11393.  
  11394. *** RECS-WECS - READ/WRITE ABSOLUTE SYSTEM ECS.
  11395. *
  11396. * ENTRY
  11397. *T, OR 12/ ECSM,6/ WC,18/ CMA,3/ SF,21/ ECA
  11398. * WC NUMBER OF WORDS TO TRANSFER - 1.
  11399. * WC = 0 TRANSFER 1 WORD.
  11400. * WC = 1 TRANSFER 2 WORDS.
  11401. * .
  11402. * .
  11403. * WC = 77B TRANSFER 100B WORDS.
  11404. * CMA RELATIVE+400000B OR ABSOLUTE CM ADDRESS OF BUFFER.
  11405. * SF *RECS* OR *WECS* SUBFUNCTION CODE.
  11406. * ECA ABSOLUTE SYSTEM ECS ADDRESS OF TRANSFER.
  11407. *
  11408. * EXIT
  11409. *T, OR 12/ 0,12/ ST,12/,24/ ECD
  11410. * ST 0 FOR TRANSFER COMPLETE.
  11411. * 7777 FOR TRANSFER ABORTED.
  11412. * ECD ABSOLUTE SYSTEM ECS ADDRESS WHERE ERROR OCCURRED
  11413. * IF ABORTED.
  11414.  
  11415.  
  11416. *** SFRS-CFRS - SET/CLEAR FLAG REGISTER BITS.
  11417. * SFRM IS THE TEST AND SET FLAG REGISTER FUNCTION.
  11418. * CFRM IS THE UNCONDITIONAL CLEAR FLAG REGISTER FUNCTION.
  11419. *
  11420. * ENTRY
  11421. *T, OR 12/ ECSM,6/ ECB,18/,3/ SF,21/
  11422. * ECB ECS FLAG REGISTER BIT NUMBER TO SET/CLEAR.
  11423. * SF *SFRS* OR *CFRS* SUBFUNCTION CODE.
  11424. *
  11425. * EXIT
  11426. *T, OR 12/ 0,12/ ST,12/,12/,12/
  11427. * ST 0 IF FUNCTION COMPLETED.
  11428. * ST 7777 IF *SFRS* FUNCTION PERFORMED ON A BIT WHICH WAS
  11429. * ALREADY SET.
  11430.  
  11431.  
  11432. *** PELS - PROCESS ECS ACCORDING TO LIST.
  11433. *
  11434. * ENTRY
  11435. *T, OR 12/ ECSM,6/ WC,18/ CML,3/ SF,1/W,1/U,19/
  11436. * WC NUMBER OF LIST ENTRIES TO PROCESS.
  11437. * CML ABSOLUTE CM FWA OF LIST.
  11438. * SF *PELS* SUBFUNCTION CODE.
  11439. * W SET IF LIST OF ECS WORDS TO BE WRITTEN.
  11440. * CLEAR IF LIST OF ECS WORDS TO BE READ.
  11441. * U SET IF LIST CONTAINS ABSOLUTE USER ECS ADDRESSES.
  11442. * CLEAR IF LIST CONTAINS ABSOLUTE SYSTEM ECS ADDRESSES.
  11443. *
  11444. *T,CML 12/0,6/ CT,18/0,24/ ECS
  11445. * CT WORD COUNT TO TRANSFER (MAXIMUM OF 60D).
  11446. * ECS ABSOLUTE SYSTEM OR USER ECS ADDRESS.
  11447. *
  11448. * THE LIST OF ECS DATA WORDS IMMEDIATELY FOLLOW THE
  11449. * LIST OF ECS ADDRESSES. DATA IS WRITTEN FROM THIS
  11450. * BUFFER OR READ TO THIS BUFFER.
  11451. *
  11452. * EXIT
  11453. *T, OR 12/ 0,12/ ST,36/ 0
  11454. * ST 0 FOR TRANSFER COMPLETE.
  11455. * 7777 FOR TRANSFER ABORTED.
  11456. *
  11457. *T, CML 60/ EF
  11458. * EF ERROR FLAGS INDICATING ECS WORDS ON WHICH
  11459. * ERROR OCCURRED IF TRANSFER ABORTED.
  11460. * BIT 0 SET = ERROR OCCURRED ON ECS WORD
  11461. * AT *ECS* + 0.
  11462. * ...
  11463. * BIT *CT* - 1 SET = ERROR OCCURRED ON ECS WORD
  11464. * AT *ECS* + *CT* - 1.
  11465.  
  11466.  
  11467. PPR ECSM,(/LSPMMF/ECS,LSPMMF,/ECS/ECS)
  11468. ECXM SPACE 4,26
  11469. *** ECXM - TRANSFER EM DATA FOR ROLLIN/ROLLOUT.
  11470. *
  11471. * THIS FUNCTION IS ISSUED BY *MTR* WHEN IT DETECTS AN *RCXM*
  11472. * FUNCTION. *1RI* AND *1RO* ISSUE THE *RCXM* FUNCTION DURING
  11473. * ROLLIN/ROLLOUT OF EM. TO ACHIEVE OPTIMAL PERFORMANCE, THE
  11474. * PP POSTS THE REQUEST IN ITS OUTPUT REGISTER WITHOUT
  11475. * EXCHANGING THE CPU. *MTR* DETECTS THE REQUEST, CHANGES IT TO
  11476. * AN *ECXM* FUNCTION AND PASSES IT TO *CPUMTR* AS A PROGRAM
  11477. * MODE REQUEST.
  11478. *
  11479. * ENTRY
  11480. *T, OR 12/ ECXM,29/ ,1/T,18/ ADDR
  11481. * T FUNCTION TYPE -
  11482. * 0 READ REQUEST.
  11483. * 1 WRITE REQUEST.
  11484. * ADDR RESPONSE ADDRESS.
  11485. *
  11486. *T, MB 12/ WC,12/,12/ CMA,24/ ECA
  11487. * WC WORD COUNT.
  11488. * CMA RELATIVE CM ADDRESS / 100B FOR START OF TRANSFER.
  11489. * ECA RELATIVE EM ADDRESS / 1000B FOR START OF TRANSFER.
  11490. *
  11491. * EXIT
  11492. *T, OR 60/0
  11493. *T, ADDR 60/0 TRANSFER COMPLETED WITHOUT ERROR.
  11494. *T, ADDR 12/0,12/7777,36/0 ERROR(S) IN TRANSFER.
  11495.  
  11496.  
  11497. PPR ECXM,,(/PROGRAM/TEC,/PROGRAM/HNG,UEC)
  11498. HNGM SPACE 4,10
  11499. *** HNGM - HANG PP.
  11500. *
  11501. * ENTRY
  11502. *T, OR 12/ HNGM,48/
  11503. *
  11504. * EXIT
  11505. *T, OR 12/ HNGM,48/
  11506.  
  11507.  
  11508. PPR HNGM,.CHGM
  11509. JACM SPACE 4,25
  11510. *** JACM - JOB ADVANCEMENT CONTROL.
  11511. *
  11512. * ENTRY
  11513. *T, OR 12/ JACM,12/ FLAGS,36/
  11514. *
  11515. * FLAGS *JACM* SUBFUNCTION FLAGS (SEE *COMSCPS*).
  11516. *
  11517. * EXIT
  11518. *T, OR 60/ 0
  11519. *
  11520. * ON EXIT THE JOB ADVANCE AND JOB INTERLOCK FLAGS WILL BE
  11521. * CLEARED UNLESS THE *CCPS* OPTION WAS SELECTED AND A *PEET*
  11522. * ERROR IS PRESENT AT THE CONTROL POINT. IN THAT CASE, THE
  11523. * EJT INTERLOCK FLAGS WILL BE LEFT SET, THE CONTROL POINT
  11524. * AREA FIELDS WILL NOT BE CLEARED, THE EJT ENTRY WILL NOT BE
  11525. * RELEASED, AND THE *FZSI* SUBSYSTEM ID WILL BE SET.
  11526. *
  11527. * THE FOLLOWING CONDITIONS WILL HANG THE PP -
  11528. * UNDEFINED OPTION SPECIFIED.
  11529. * SPECIFIED OPTION COMBINATION NOT VALID.
  11530. * NO JOB PRESENT AT CONTROL POINT.
  11531. * JOB ADVANCE FLAG OR JOB INTERLOCK FLAG CLEAR ON ENTRY.
  11532.  
  11533.  
  11534. PPR JACM
  11535.  
  11536. SA3 B7+TFSW GET EJT ORDINAL
  11537. SX7 753200B SET VALID OPTIONS MASK
  11538. AX1 36
  11539. MX0 -12
  11540. SB3 X1+59-17 SPECIFIED OPTIONS
  11541. SX1 X1-20B
  11542. PL X1,HNG IF UNDEFINED OPTION SPECIFIED
  11543. LX7 B3
  11544. LX3 12
  11545. PL X7,HNG IF SPECIFIED OPTIONS NOT VALID
  11546. BX4 -X0*X3 EJT ORDINAL
  11547. CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
  11548. ZR X4,HNG IF NO JOB PRESENT
  11549. TA3 X3+JSNE,EJT
  11550. SX7 101B
  11551. BX6 X3-X7 TOGGLE JOB INTERLOCK AND JOB ADVANCE
  11552. BX3 X7*X6
  11553. LX5 59-36
  11554. NZ X3,HNG IF JOB ADVANCE OR INTERLOCK CLEAR ON ENTRY
  11555. SA6 A3 UPDATE *JSNE*
  11556. NG X5,JAC3 IF RELEASE CP OPTION SPECIFIED
  11557.  
  11558. * PROCESS NORMAL JOB ADVANCE OR ROLLIN. THE CPU PRIORITY WILL
  11559. * BE SET TO THE NEW SERVICE CLASS PRIORITY IF THE SERVICE CLASS
  11560. * PRIORITY CHANGED WHILE THE JOB WAS ADVANCING OR ROLLED OUT.
  11561.  
  11562. SA2 B7+CWQW
  11563. MX7 -9
  11564. UX6,B5 X2 UNPACK CPU PRIORITY AND PARAMETERS
  11565. LX2 -27
  11566. SX3 B5
  11567. BX2 -X7*X2 SERVICE PARAMETERS INDEX
  11568. AX3 3 REMOVE FLAGS FROM CPU PRIORITY
  11569. TA2 X2+CSJT,JCB
  11570. AX2 48 SERVICE CLASS CPU PRIORITY
  11571. IX7 X2-X3
  11572. ZR X7,JAC1 IF JOB AT SERVICE CLASS PRIORITY
  11573. BX7 X6
  11574. LX7 59-45
  11575. NG X7,JAC1 IF PRIORITY NOT SET FROM SERVICE CLASS
  11576. LX2 3
  11577. SX7 B1
  11578. SB5 X2
  11579. LX7 47-0
  11580. PX6 B5,X6 SET NEW PRIORITY
  11581. BX6 X6+X7 SET INCOMPLETE EXTENDED CPU SLICE
  11582. SA6 B7+CWQW UPDATE CPU PRIORITY AND FLAGS
  11583. SX6 B0+
  11584. SA6 B7+CSAW CLEAR SERVICE CYCLE AND ACCUMULATORS
  11585. JAC1 LX5 59-39-59+36
  11586. SB6 B7 SET EXCHANGE PACKAGE ADDRESS
  11587. SB3 JAC2 SET *RCC* EXIT ADDRESS
  11588. NG X5,RCC IF REQUEST CPU OPTION
  11589. JAC2 LX5 59-37-59+39
  11590. NG X5,.DPPM IF TO DROP PP
  11591. SX7 B0
  11592. EQ PPR1 EXIT TO CLEAR OUTPUT REGISTER
  11593.  
  11594. * CHECK FOR CM/CPU PARITY ERROR AT CONTROL POINT TO BE
  11595. * RELEASED.
  11596.  
  11597. JAC3 SA1 B7+STSW
  11598. SX6 10001B SET *STSW* = 1 PP, SET RECALL STACK INDEX
  11599. SX7 B0
  11600. LX6 -12
  11601. LX1 -36
  11602. SA6 A1 UPDATE *STSW*
  11603. BX1 -X0*X1 ERROR FLAG
  11604. SB4 X1-PEET SET *PEET* ERROR INDICATOR
  11605. SX6 B0
  11606. NZ B4,JAC4 IF NO *PEET* ERROR SET
  11607. SA2 A1 RESET *PEET* ERROR FLAG
  11608. LX1 36
  11609. BX6 X2+X1
  11610. SA6 A1
  11611. SX6 100B
  11612. SA3 A3 GET *JSNE*
  11613. BX6 X3+X6 RESET JOB ADVANCE FLAG
  11614. SA6 A3 UPDATE *JSNE*
  11615. BX6 X4 SET TO PRESERVE EJT ORDINAL
  11616. SX7 FZSI SET *FZSI* ID
  11617. LX6 48
  11618. LX7 24
  11619.  
  11620. * CLEAR CONTROL POINT AREA WORDS.
  11621.  
  11622. JAC4 SA6 B7+TFSW CLEAR (IF NO *PEET* ERROR) EJT ORDINAL
  11623. SA7 B7+JCIW CLEAR (SET IF *PEET* ERROR) JOB CONTROL
  11624. BX7 X7-X7
  11625. BX6 -X6+X6
  11626. SA7 B7+CSSW CLEAR PROCEDURE FILE DISK ADDRESS
  11627. SA7 B7+RFCW CLEAR RESOURCE CONTROL
  11628. SA7 B7+EOJW CLEAR END OF JOB PROCESSING FLAGS
  11629. SA7 B7+SRUW CLEAR LIMIT FLAGS
  11630. ZR B4,JAC5 IF *PEET* ERROR
  11631. SA6 B7+PFCW SET FAMILY TO NULL
  11632. SA7 B7+MS1W CLEAR MESSAGES
  11633. JAC5 SA7 B7+MS2W
  11634. SA7 B7+SSCW CLEAR SCP CONNECTIONS
  11635.  
  11636. * RESET RECALL AREA LINKS.
  11637.  
  11638. SX7 B1
  11639. SX1 B1
  11640. SB5 B7+RCCW-2
  11641. JAC6 SX7 X7+B1
  11642. SX6 X7-LREC
  11643. SA7 B5+X7
  11644. NZ X6,JAC6 IF NOT FINISHED
  11645.  
  11646. * CLEAR RECALL STACK.
  11647.  
  11648. SB5 B5+RECW-RCCW+2
  11649. JAC7 IX7 X7-X1
  11650. SA6 B5+X7
  11651. PL X7,JAC7 IF NOT FINISHED
  11652. LX5 59-38-59+36
  11653. PL X5,JAC9 IF NOT CLEARING EJT ENTRY
  11654. ZR B4,JAC9 IF *PEET* ERROR
  11655. SX1 PEJT SET EJT PROCESSING
  11656. LX4 36 SET EJT ORDINAL
  11657. LX1 24
  11658. BX1 X1+X4
  11659. SB6 JAC8 SET *MTRM* RETURN ADDRESS
  11660. EQ MTM0 RETURN EJT ENTRY TO POOL
  11661.  
  11662. JAC8 SA5 A5+ RESTORE OUTPUT REGISTER
  11663. LX5 59-38
  11664. JAC9 LX5 59-37-59+38
  11665. SX7 B0
  11666. PL X5,PPR1 IF NOT DROP PP OPTION
  11667. EQ .DPPM DROP PP
  11668. LDAM SPACE 4,35
  11669. *** LDAM - LOAD ADDRESS FOR MASS STORAGE DRIVERS.
  11670. *
  11671. * ENTRY
  11672. *
  11673. *T, OR 12/ LDAM,12/ RW,36/
  11674. *T, MB 12/,12/ EQ,12/ LT,12/ LS,12/
  11675. *
  11676. * RW READ/WRITE FLAG, VALID ONLY FOR ISD DEVICES.
  11677. * 0, IF TO ISSUE SEEK ONLY.
  11678. * *RDS2*, IF TO ISSUE READ/SEEK.
  11679. * *WDS2*, IF TO ISSUE WRITE/SEEK.
  11680. * EQ EQUIPMENT.
  11681. * LT LOGICAL TRACK.
  11682. * LS LOGICAL SECTOR.
  11683. *
  11684. * EXIT
  11685. *
  11686. *T, OR 12/ 0,12/ 0,12/ 0,12/ F,12/ RS
  11687. *T, MB 60/ UNCHANGED
  11688. *T, MB+1 12/ LU,6/ RW,6/ PU,12/ PC,12/ PT,12/ PS
  11689. *T, MB+2 60/ 0
  11690. *
  11691. * F STATUS FLAGS.
  11692. * 4 = UNIT SWITCH NEEDED.
  11693. * 11 = REQUEST CHANNEL IF NOT RESERVED.
  11694. * 7777 - ADDE = ADDRESS ERROR.
  11695. * 7777 - NRDE = REDEFINITION REQUESTED.
  11696. * RS REMAINING SECTORS TILL *LDAM* REQUIRED.
  11697. * LU LOGICAL UNIT.
  11698. * RW READ/WRITE FLAG.
  11699. * 0, IF TO ISSUE SEEK ONLY (NON-ISD DEVICES).
  11700. * 1, IF TO ISSUE WRITE/SEEK.
  11701. * 2, IF TO ISSUE READ/SEEK.
  11702. * PU PHYSICAL UNIT.
  11703. * PC PHYSICAL CYLINDER.
  11704. * PT PHYSICAL TRACK.
  11705. * PS PHYSICAL SECTOR.
  11706. *
  11707. *
  11708. * HANG CONDITIONS -
  11709. *
  11710. * ILLEGAL ALGORITHM INDEX.
  11711. * ALGORITHM INDEX FOUND IN THE MST FOR THE EQUIPMENT IS OUT
  11712. * OF RANGE (.GE. AIMX) OR NO PROCESSOR IS DEFINED FOR THE
  11713. * ALGORITHM INDEX.
  11714.  
  11715.  
  11716. PPR LDAM,,,FEX
  11717.  
  11718. SA3 A5+B1 GET PARAMETER WORD
  11719. MX2 -12
  11720. LX3 -12
  11721. BX5 -X2*X3 LS
  11722. LX3 -24
  11723. BX0 -X2*X3 EST ORDINAL
  11724. LX3 12
  11725. CX1 X0,EST CONVERT EST ORDINAL TO OFFSET
  11726. TA1 X1+EQDE,EST READ EST ENTRY
  11727. BX1 -X2*X1 MST/10B
  11728. LX1 3
  11729. SA1 X1+DILL READ ALGORITHM INDEX
  11730. MX0 -6
  11731. BX2 -X0*X1 ALGORITHM INDEX
  11732. SX4 X2-AIIE
  11733. NG X4,LDA1 IF NOT BUFFERED DEVICE
  11734. SX4 X2-AIBD
  11735. PL X4,LDA1 IF NOT BUFFERED DEVICE
  11736. SA4 A1+DALL-DILL
  11737. SX1 3
  11738. LX1 36
  11739. BX6 X1+X4
  11740. SA6 A4+
  11741. LDA1 SA4 A1+DDLL-DILL READ UNIT LIST
  11742. SB3 X2-AIMX
  11743. SA2 TALP+X2 READ PROCESSING PARAMETERS
  11744. SB4 B0+
  11745. PL B3,HNG IF ILLEGAL ALGORITM INDEX
  11746. SB6 X2 SET PROCESSOR ADDRESS
  11747. BX1 X4
  11748. AX2 48
  11749. AX1 48
  11750. IX6 X5-X2
  11751. SB3 B0 PRESET TO LOGICAL UNIT ZERO
  11752. BX7 X7-X7
  11753. NG X6,LDA3 IF FIRST UNIT
  11754. MX7 -3
  11755. PX6 X2
  11756. BX1 -X7*X1
  11757. PX7 X5
  11758. NX6 X6
  11759. FX7 X7/X6 LU = LS / SL
  11760. UX7,B3 X7
  11761. LX7 B3
  11762. IX6 X1-X7
  11763. SB3 X7+
  11764. IX1 X7*X2
  11765. SB3 B3+X7
  11766. PL X6,LDA2 IF NO ADDRESS ERROR
  11767. SB4 7777B-ADDE SET ADDRESS ERROR
  11768. LDA2 SB3 B3+X7
  11769. SB3 B3+B3 LU * 6
  11770. IX5 X5-X1 R(LS/SL)
  11771. AX4 B3 POSITION PU
  11772. LDA3 TX1 A5-1,-FP
  11773. LX1 PPXES-PPCES
  11774. BX0 -X0*X4 EXTRACT PHYSICAL UNIT NUMBER
  11775. TA1 X1+DRQP,FPX GET CURRENT UNIT NUMBER
  11776. AX1 48
  11777. BX1 X1-X7
  11778. NG X1,LDA4 IF NULL ENTRY
  11779. ZR X1,LDA4 IF NO CHANGE IN UNIT
  11780. NZ B4,LDA4 IF ADDRESS ERROR
  11781. SB4 4
  11782. LDA4 LX7 12
  11783. SB3 B1+B1
  11784. BX6 X7+X0
  11785. MX4 -11
  11786. IX7 X2-X5 RS
  11787. LX6 36
  11788. SX1 B3+B1
  11789. BX4 -X4*X3
  11790. SX0 1
  11791. JP B6 EXIT TO PROCESSOR
  11792. LAP SPACE 4
  11793. ** LAP - LOAD ADDRESS PROCESSORS.
  11794. *
  11795. * THE FUNCTION OF AN ADDRESS PROCESSOR IS TO CONVERT
  11796. * LOGICAL DISK ADDRESSES TO THE CORRESPONDING PHYSICAL
  11797. * ADDRESSES FOR A PARTICULAR EQUIPMENT TYPE. EACH ADDRESS
  11798. * PROCESSOR HAS THE FOLLOWING ENTRY AND EXIT CONDITIONS BUT
  11799. * PRODUCES THE PARAMETERS *PC*, *PT* AND *PS* USING AN
  11800. * ALGORITHM UNIQUE TO THE EQUIPMENT TYPE.
  11801. *
  11802. * LT = LOGICAL TRACK.
  11803. * LS = LOGICAL SECTOR.
  11804. * R(A/B) = REMAINDER OF A/B.
  11805. * PC = PHYSICAL CYLINDER.
  11806. * PT = PHYSICAL TRACK.
  11807. * PS = PHYSICAL SECTOR.
  11808. * PU = PHYSICAL UNIT.
  11809. * RS = REMAINING SECTOR COUNT UNTIL POSITION REQUIRED.
  11810. * SL = SECTOR LIMIT.
  11811. * SC = SECTORS FROM BEGINNING OF TRACK TO END OF CYLINDER.
  11812. *
  11813. * ENTRY (X0) = 1.
  11814. * (X1) = 3.
  11815. * (X2) = SL (SINGLE UNIT SECTOR LIMIT).
  11816. * (X4) = LT - 4000B. (LOGICAL TRACK NUMBER)
  11817. * (X5) = R(LS/SL)
  11818. * (X6) = 12/,12/PU,36/0.
  11819. * (X7) = RS (SL-R(LS/SL)) (SECTORS TO NEXT *LDAM*).
  11820. * (A5) = OUTPUT REGISTER ADDRESS.
  11821. * (B3) = 2.
  11822. * (B4) = PRESET RETURN STATUS.
  11823. *
  11824. * EXIT (MB) = 12/,12/ PU,12/ PC,12/ PT,12/ PS
  11825. * (OR) = 12/ 0,12/ F,24/,12/ RS
  11826. *
  11827. * USES ADDRESS PROCESSORS MAY USE ALL REGISTERS EXCEPT -
  11828. * A0, A5, B1, B2, B4, B7.
  11829.  
  11830.  
  11831. SPACE 4,10
  11832. ** COMPLETE ADDRESS PROCESSING.
  11833. *
  11834. * ENTRY (X0) + (X5) = RELATIVE SECTOR NUMBER IN CYLINDER.
  11835. * (X1) = SECTORS PER PHYSICAL TRACK.
  11836. * (X3) = PHYSICAL CYLINDER IN BYTE 2.
  11837. * (X6) = 12/,12/PU,36/0.
  11838. * (X7) = REPLY FOR *OR*.
  11839. * (B4) = RETURN STATUS.
  11840.  
  11841.  
  11842. LDA6 IX0 X0+X5 (X0) = RELATIVE SECTOR IN CYLINDER
  11843. PX4 X1
  11844. PX2 X0
  11845. NX4 X4
  11846. FX2 X2/X4
  11847. UX2,B3 X2
  11848. LX2 B3 (X2) = PHYSICAL TRACK
  11849. IX4 X2*X1
  11850. IX4 X0-X4 (X4) = PS
  11851.  
  11852. * ENTRY (X1) = SECTORS PER PHYSICAL TRACK.
  11853. * (X2) = PHYSICAL TRACK.
  11854. * (X3) = PHYSICAL CYLINDER IN BYTE 2.
  11855. * (X4) = PHYSICAL SECTOR.
  11856. * (X6) = 12/,12/PU,36/0.
  11857. * (X7) = SECTORS TO NEXT *LDAM*.
  11858. * (B4) = RETURN STATUS.
  11859.  
  11860. LDA7 LX2 12
  11861. BX3 X3+X4
  11862. BX6 X6+X2 MERGE PT IN REPLY
  11863. BX6 X6+X3 MERGE PS AND CY IN REPLY
  11864. SX1 B4+ RETURN STATUS
  11865. SA6 A3+1 (MB+1) = PARAMETERS
  11866. NZ B4,LDA8 IF STATUS TO RETURN
  11867. SX1 11B REQUEST CHANNEL STATUS
  11868. LDA8 BX6 X6-X6
  11869. LX1 12
  11870. BX7 X7+X1
  11871. SA6 A6+B1 CLEAR (MB+2)
  11872. SA7 A5 STORE (OR)
  11873. EQ PPRX RETURN
  11874. TBLM SPACE 4,10
  11875. ** TBLM - GENERATE TABLE OF LDAM PARAMETERS.
  11876.  
  11877.  
  11878. PURGMAC TBLM
  11879. TBLM MACRO EQ
  11880. IFNE LDAM_EQ,0,1
  11881. VFD 12/SL_EQ,30/0,18/LA_EQ
  11882. ENDM
  11883. TALP SPACE 4
  11884. ** TALP - TABLE OF ALGORITHM PROCESSING PARAMETERS.
  11885. *
  11886. * ONE WORD ENTRIES INDEXED BY ALGORITHM INDEX.
  11887. *
  11888. *T, TALP 12/ SL,30/,18/ AP
  11889. *
  11890. * SL = SECTOR LIMIT.
  11891. * AP = ALGORITHM PROCESSOR.
  11892.  
  11893.  
  11894. TALP VFD 24/,18/1,18/HNG
  11895.  
  11896. LIST G
  11897. TBL "MSEQ"
  11898. LIST *
  11899. PURGMAC TBLM
  11900. LADI SPACE 4,20
  11901. ** LADI - 7X54/844-21 ADDRESS CONVERSION PROCESSOR.
  11902. *
  11903. * ALGORITHM -
  11904. * SL = 153B SECTOR LIMIT
  11905. * HC = BIT 0 OF LT HALF CYLINDER BIT
  11906. * HT = BIT 1 OF LT HALF TRACK BIT
  11907. * LU = LS/SL LOGICAL UNIT
  11908. * PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
  11909. * PT = (HT+2*R(LS/SL))/30B+HC*11B PHYSICAL TRACK
  11910. * PS = R((HT+2*R(LS/SL))/30B) PHYSICAL SECTOR
  11911. * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
  11912. *
  11913. * EXIT (X0) = HC*330B+HT
  11914. * (X5) = 2*R(LS/SL)
  11915.  
  11916.  
  11917. LADI BX3 -X1*X4 PC
  11918. LX4 -1
  11919. LX3 24-2
  11920. BX0 X0*X4 HT
  11921. PL X4,LAI1 IF IN FIRST HALF OF CYLINDER
  11922. SX0 X0+330B
  11923. LAI1 LX5 1
  11924. LX1 3 30B SECTORS PER PHYSICAL TRACK
  11925. EQ LDA6 COMPLETE ADDRESS CONVERSION
  11926. LADJ SPACE 4,20
  11927. ** LADJ - 7X54/844-4X ADDRESS CONVERSION PROCESSOR.
  11928. *
  11929. * ALGORITHM -
  11930. * SL = 343B SECTOR LIMIT
  11931. * HT = BIT 0 OF LT HALF TRACK BIT
  11932. * LU = LS/SL LOGICAL UNIT
  11933. * PT = (HT+2*R(LS/SL))/30B PHYSICAL TRACK
  11934. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  11935. * PS = R((HT+2*R(LS/SL))/30B) PHYSICAL SECTOR
  11936. * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
  11937. *
  11938. * EXIT (X0) = HT
  11939. * (X5) = 2*R(LS/SL)
  11940.  
  11941.  
  11942. LADJ BX3 -X0*X4 PC
  11943. LX5 1 2*R(LS/SL)
  11944. BX0 X0*X4 HT
  11945. LX3 24-1
  11946. LAJ1 LX1 3 30B SECTORS PER PHYSICAL TRACK
  11947. EQ LDA6 COMPLETE ADDRESS CONVERSION
  11948. LDAK SPACE 4,20
  11949. ** LADK - 7154/844-21 ADDRESS CONVERSION PROCESSOR.
  11950. *
  11951. * ALGORITHM -
  11952. * SL = 160B SECTOR LIMIT
  11953. * LU = LS/SL LOGICAL UNIT
  11954. * PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
  11955. * XX = BITS 0 AND 1 OF LT TRACK NUMBER WITHIN CYLINDER
  11956. * PT = (XX*162B+R(LS/SL))/30B PHYSICAL TRACK
  11957. * PS = R((XX*162B+R(LS/SL))/30B) PHYSICAL SECTOR
  11958. * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
  11959. *
  11960. * EXIT (X0) = XX*162B
  11961. * (X5) = R(LS/SL)
  11962.  
  11963.  
  11964. LADK BX3 -X1*X4 (X3) = PC * 4
  11965. SX2 X2+B3 (X2) = 162B
  11966. BX0 X1*X4 XX
  11967. LX3 24-2
  11968. IX0 X0*X2 XX * 162B
  11969. LX1 3 30B SECTORS PER PHYSICAL TRACK
  11970. EQ LDA6 COMPLETE CONVERSION
  11971. LADL SPACE 4,15
  11972. ** LADL - 7154/844-4X ADDRESS CONVERSION PROCESSOR.
  11973. *
  11974. * ALGORITHM -
  11975. * SL = 343B SECTOR LIMIT
  11976. * LU = LS/SL LOGICAL UNIT
  11977. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  11978. * X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
  11979. * PT = (X*345B+R(LS/SL))/30B PHYSICAL TRACK
  11980. * PS = R((X*345B+R(LS/SL))/30B) PHYSICAL SECTOR
  11981. * RS = SL-R(LS/SL) R*
  11982. * EXIT (X0) = X*345B
  11983. * (X5) = R(LS/SL)
  11984.  
  11985.  
  11986. LADL BX3 -X0*X4 (X3) = PC * 2
  11987. LX4 -1
  11988. LX3 24-1
  11989. AX4 59
  11990. SX0 X2+B3 (X0) = 345B
  11991. BX0 X4*X0
  11992. EQ LAJ1 COMPLETE ADDRESS CONVERSION
  11993. LADM SPACE 4,10
  11994. ** LADM - 7155/885 HALF TRACK ADDRESS CONVERSION.
  11995. *
  11996. * ALGORITHM -
  11997. * SL = 1200B SECTOR LIMIT
  11998. * HT = BIT 0 OF LT HALF TRACK BIT
  11999. * LU = LS/SL LOGICAL UNIT
  12000. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  12001. * PT = (HT+2*R(LS/SL))/40B PHYSICAL TRACK
  12002. * PS = R((HT+2*R(LS/SL))/40B) PHYSICAL SECTOR
  12003. * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
  12004. *
  12005. * EXIT
  12006.  
  12007.  
  12008. LADM BX3 -X0*X4 PC
  12009. LX5 1
  12010. BX0 X0*X4 HT
  12011. LX3 24-1
  12012. LAM1 IX2 X0+X5 RELATIVE SECTOR IN CYLINDER
  12013. MX1 -5
  12014. BX4 -X1*X2 PS
  12015. AX2 5 PT
  12016. EQ LDA7 COMPLETE PROCESSING
  12017. LADQ SPACE 4,10
  12018. ** LADQ - 7155/885 FULL TRACK ADDRESS CONVERSION.
  12019. *
  12020. * ALGORITHM -
  12021. * SL = 1200B SECTOR LIMIT
  12022. * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
  12023. * LU = LS/SL LOGICAL UNIT
  12024. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  12025. * PT = (X*SL+R(LS/SL))/40B PHYSICAL TRACK
  12026. * PS = R((X*SL+R(LS/SL))/40B) PHYSICAL SECTOR
  12027. * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
  12028. *
  12029. * EXIT
  12030.  
  12031.  
  12032. LADQ LX4 -1
  12033. SX3 X4 PC
  12034. AX4 59
  12035. LX3 24
  12036. BX0 X4*X2
  12037. EQ LAM1 COMPLETE CONVERSION
  12038. LADR SPACE 4,10
  12039. ** LADR - CDSS II ADDRESS CONVERSION.
  12040. *
  12041. * ALGORITHM -
  12042. * SL = 3600B SECTOR LIMIT
  12043. * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER TRIAD
  12044. * SO = 1200B*X STARTING SECTOR OFFSET
  12045. * PC = LT+(LT/2)+(LS+SO)/2400B PHYSICAL CYLINDER
  12046. * SC = R((LS+SO)/2400B) SECTOR WITHIN CYLINDER
  12047. * PT = SC/40B PHYSICAL TRACK
  12048. * PS = SC-PT*40B PHYSICAL SECTOR
  12049. * RS = MAGIC SECTORS UNTIL NEXT LDAM
  12050. * EXIT
  12051.  
  12052. LADR AX3 X4,B1 CYLINDER TRIAD (LT/2)
  12053. MX2 -1
  12054. IX3 X4+X3 PC (WHERE TRACK STARTS) (LT+(LT/2))
  12055. BX2 -X2*X4 TRIAD HALF (X)
  12056. SB3 X2
  12057. SX2 2400B SET *LDAM* LIMIT AT END-OF-CYLINDER
  12058. AX4 X2,B3 2400B, 1200B FOR X = 0, 1. EOC SECTOR.
  12059. IX0 X2-X4 0B, 1200B FOR X = 0, 1. SECTOR OFFSET
  12060. IX2 X5-X4 LOGICAL SECTOR - END OF CYLINDER
  12061. NG X2,LAR1 IF SECTOR IS ON FIRST CYLINDER
  12062. SX4 1200B SET *LDAM* LIMIT AT END-OF-TRACK
  12063. LX4 B3 1200B, 2400B FOR X = 0, 1.
  12064. BX5 X2 SECTOR WITHIN SECOND CYLINDER
  12065. SX3 X3+1 PC (WHERE TRACK ENDS)
  12066. SX0 B0+ CLEAR STARTING SECTOR OFFSET
  12067. LAR1 IX7 X4-X5 RS
  12068. LX3 24 PC
  12069. EQ LAM1 COMPLETE CONVERSION
  12070. LADX SPACE 4,10
  12071. ** LADX - 3330-1 FULL TRACK CONVERSION.
  12072. *
  12073. * ALGORITHM -
  12074. * SL = 142B SECTOR LIMIT
  12075. * LU = LS/SL LOGICAL UNIT
  12076. * PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
  12077. * XX = BITS 0 - 1 OF LT TRACK NUMBER WITHIN CYLINDER
  12078. * PT = (XX*144B+R(LS/SL))/25B PHYSICAL TRACK
  12079. * PS = R((XX*144B+R(LS/SL))/25B) PHYSICAL SECTOR
  12080. * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
  12081.  
  12082.  
  12083. LADX BX3 -X1*X4 (X3) = PC * 4
  12084. SX2 X2+B3 (X2) = 144B
  12085. BX0 X1*X4 XX
  12086. IX0 X0*X2 XX * 144B
  12087. LAX1 SX1 25B (X1) = SECTORS PER PHYSICAL TRACK
  12088. LX3 24-2
  12089. EQ LDA6 COMPLETE ADDRESS CONVERSION
  12090. LADY SPACE 4,10
  12091. ** LADY - 3330-11 FULL TRACK CONVERSION.
  12092. *
  12093. * ALGORITHM -
  12094. * SL = 306B SECTOR LIMIT
  12095. * LU = LS/SL LOGICAL UNIT
  12096. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  12097. * X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
  12098. * PT = (X*310B+R(LS/SL))/25B PHYSICAL TRACK
  12099. * PS = R((X*310B+R(LS/SL))/25B) PHYSICAL SECTOR
  12100. * RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
  12101.  
  12102.  
  12103. LADY BX3 -X0*X4 (X3) = PC * 2
  12104. LX4 -1
  12105. LX3 1
  12106. AX4 59
  12107. SX0 X2+B3 (X0) = 310B
  12108. BX0 X4*X0
  12109. EQ LAX1 COMPLETE PROCESSING
  12110. LADZ SPACE 4,10
  12111. ** LADZ - 3350 FULL TRACK CONVERSION.
  12112. *
  12113. * ALGORITHM -
  12114. * SL = 644B SECTOR LIMIT
  12115. * LU = LS/SL LOGICAL UNIT
  12116. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  12117. * X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
  12118. * PT = (X*SL+R(LS/SL))/34B PHYSICAL TRACK
  12119. * PS = R((X*SL+R(LS/SL))/34B) PHYSICAL SECTOR
  12120. * RS = SL-R(LS/SL) REMAINING SECTOR TILL LDAM
  12121.  
  12122.  
  12123. LADZ BX3 -X0*X4 (X3) = PC * 2
  12124. LX4 -1
  12125. SX0 X2 SL
  12126. AX4 59
  12127. LX3 24-1
  12128. BX0 X4*X0
  12129. EQ LA12 COMPLETE ADDRESS CONVERSION
  12130. LAD1 SPACE 4,10
  12131. ** LADA - 33502 FULL TRACK CONVERSION.
  12132. *
  12133. * ALGORITHUM -
  12134. * SL = 1510 SECTOR LIMIT
  12135. * VL = TL/2 VOLUME TRACK LIMIT
  12136. * LU = LS/SL LOGICAL UNIT
  12137. * PC = LT-(VL*(LT/VL)) PHYSICAL CYLINDER
  12138. * X = 0 LOGICAL TRACK WITHIN CYLINDER
  12139. * PT = X*SL+R(LS/SL))/34B PHYSICAL TRACK
  12140. * PS = R((X*SL+R(LS/SL))/34B) PHYSICAL SECTOR
  12141. * PU = (LT/VL)*40B+UNIT PHYSICAL UNIT
  12142.  
  12143.  
  12144. LADA BX3 X4 LT
  12145. SX0 NTDA/2 SET TRACK LIMIT PER VOLUME
  12146. IX1 X4-X0 LT MINUS TRACK LIMIT PER VOLUME
  12147. SX0 40B
  12148. SB3 B0 CLEAR VOLUME FLAG
  12149. SA2 A1 GET LAST VOLUME USED FLAG
  12150. NG X1,LA11 IF ON VOLUME 0
  12151. BX3 X1 SET CYLINDER FOR VOLUME 1
  12152. MX0 0
  12153. SB3 B1+ INDICATE VOLUME ONE
  12154. LA11 LX0 36
  12155. LX2 18
  12156. BX1 X6-X0 SWITCH TO CORRECT VOLUME
  12157. SB6 X2
  12158. SB6 B6-B3
  12159. ZR B6,LA11.1 IF NOT SWITCHING VOLUMES
  12160. SX6 B3
  12161. AX2 18
  12162. LX6 -18
  12163. NZ B4,LA11.1 IF PREVIOUS ERROR
  12164. SB4 4 SET UNIT SWITCH FOR *DSWM*
  12165. BX6 X2+X6
  12166. SA6 A2
  12167. LA11.1 BX6 X1
  12168. LX3 24 POSITION PC
  12169. SX0 B0
  12170. LA12 SX1 34B SECTORS PER PHYSICAL TRACK
  12171. EQ LDA6 COMPLETE ADDRESS PROCESSING
  12172. LADB SPACE 4,15
  12173. ** LADB - 885-42 PARALLEL HEAD DEMA.
  12174. *
  12175. * ALGORITHM -
  12176. * SL = 1200B SECTOR LIMIT
  12177. * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
  12178. * LU = LS/SL LOGICAL UNIT
  12179. * PC = 1 - 11 OF LT PHYSICAL CYLINDER
  12180. * PT = (X*SL+R(LS/SL))/200B PHYSICAL TRACK
  12181. * PS = (R(X*SL+R(LS/SL))/200B)/4 PHYSICAL SECTOR
  12182.  
  12183.  
  12184. LADB BSS 0
  12185. LX4 -1
  12186. SX3 X4 PC
  12187. AX4 59
  12188. LX3 24 PC IN BYTE 2
  12189. BX0 X4*X2
  12190. IX2 X0+X5 RELATIVE SECTOR IN CYLINDER
  12191. MX1 -7
  12192. BX4 -X1*X2
  12193.  
  12194. * ADD CODE HERE TO PULL OFF LOWER 2 BITS OF X4 AS
  12195. * RELATIVE LOGICAL PRU IN LARGE SECTOR.
  12196.  
  12197. AX4 2 PS
  12198. AX2 7 PT
  12199. EQ LDA7 COMPLETE PROCESSING
  12200. LADC SPACE 4,10
  12201. ** LADC - 7165/895 FULL TRACK CONVERSION (*DC*).
  12202. *
  12203. * THIS ALGORITHM RETURNS A SMALL RECORD ADDRESS AND AS SUCH,
  12204. * IT CAN NOT BE USED TO READ LARGE RECORDS.
  12205. *
  12206. * ALGORITHM -
  12207. * SL = 1300B SECTOR LIMIT
  12208. * LU = LS/SL LOGICAL UNIT
  12209. * X = BIT 0 OF LT
  12210. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  12211. * PT = (X*SL + R(LS/SL))/140B PHYSICAL TRACK
  12212. * PS = R((X*SL + R(LS/SL))/140B) PHYSICAL SECTOR
  12213.  
  12214.  
  12215. LADC LX4 -1
  12216. SX3 X4 PC
  12217. AX4 59 X
  12218. LX3 24 POSTION PC IN BYTE 2
  12219. BX4 X4*X2 X*SL
  12220. SX1 140B
  12221. IX5 X4+X5 X*SL + R(LS/SL)
  12222. PX0 X1
  12223. PX4 X5
  12224. NX0 X0
  12225. FX4 X4/X0 (X*SL + R(LS/SL))/140B
  12226. UX4,B3 X4
  12227. LX2 X4,B3 PT
  12228. IX4 X2*X1 (X*SL + R(LS/SL))/140B*140B
  12229. IX4 X5-X4 R((X*SL + R(LS/SL))/140B)
  12230. EQ LDA7 RETURN PHYSICAL DISK ADDRESS
  12231. LADD SPACE 4,10
  12232. ** LADD - 7255/834 FULL TRACK ADDRESS CONVERSION.
  12233. *
  12234. * ALGORITHM -
  12235. * SL = 240B SECTOR LIMIT
  12236. * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
  12237. * LU = LS/SL LOGICAL UNIT
  12238. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  12239. * PT = (X*SL+R(LS/SL))/40B PHYSICAL TRACK
  12240. * PS = R((X*SL+R(LS/SL))/40B) PHYSICAL SECTOR
  12241. * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
  12242.  
  12243.  
  12244. LADD SX1 40B SECTORS PER PHYSICAL TRACK
  12245. LAD1 LX4 -1
  12246. SX3 X4 PHYSICAL CYLINDER
  12247. AX4 59
  12248. LX3 24
  12249. BX0 X4*X2 X*SL
  12250. SA2 A5
  12251. LX2 12
  12252. AX2 48
  12253. ZR X2,LDA6 IF TO ISSUE A SEEK ONLY
  12254. SX4 X2-.RDS2 CHECK FOR *RDS2*
  12255. SX2 B1+B1
  12256. ZR X4,LAD2 IF TO ISSUE A READ/SEEK
  12257. SX2 B1 ISSUE A WRITE/SEEK
  12258. LAD2 LX2 42
  12259. BX6 X2+X6
  12260. EQ LDA6 COMPLETE ADDRESS PROCESSING
  12261. LADG SPACE 4,10
  12262. ** LADG - 7255/836 FULL TRACK ADDRESS CONVERSION.
  12263. *
  12264. * ALGORITHM -
  12265. * SL = 1064B SECTOR LIMIT
  12266. * X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
  12267. * LU = LS/SL LOGICAL UNIT
  12268. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  12269. * PT = (X*SL+R(LS/SL))/57B PHYSICAL TRACK
  12270. * PS = R((X*SL+R(LS/SL))/57B) PHYSICAL SECTOR
  12271. * RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
  12272.  
  12273.  
  12274. LADG SX1 57B SECTORS PER PHYSICAL TRACK
  12275. EQ LAD1 COMPLETE ADDRESS PROCESSING
  12276. LMSM SPACE 4,20
  12277. *** LMSM - LOAD MASS STORAGE DRIVERS.
  12278. *
  12279. * ENTRY
  12280. *
  12281. *T, OR 12/ LMSM,2/ ,1/C,9/ EQ,12/,6/ ,18/ SMSOP
  12282. *T, MB 12/ ,12/ WDSE,12/,12/ ,12/
  12283. *T, MB+1 12/ ,12/ ,12/,7/,5/ MSD,12/ CHRV
  12284. *
  12285. * C *6DC* REQUEST (ONLY IF CPP).
  12286. * EQ EQUIPMENT.
  12287. * SMSOP 3/ WP,12/ UERR,3/ SF
  12288. * WP 4 = WDSE ADDRESS VALID IN CALL.
  12289. * 0 = NO VALID WDSE ADDRESS IN CALL.
  12290. * UERR CALLERS ERROR PROCESSING OPTIONS.
  12291. * SF SUBFUNCTION CODE. *SETMS* OPTION
  12292. * 0 = NORMAL I/O. *IO*
  12293. * 1 = PROTECTED SECTOR I/O. *PIO*
  12294. * 2 = PROTECTED SECTOR I/O, SELECTED CHANNEL. *PIOCH*
  12295. * 3 = READ SYSTEM FILE. *READSYS*
  12296. * 4 = READ STREAM. *READSTR*
  12297. * 5 = RETURN DEVICE STATUS. *STATUS*
  12298. * 6 = NORMAL I/O ON SELECTED CHANNEL. *IOCH*
  12299. * WDSE WRITE ERROR PROCESSING BUFFER ADDRESS.
  12300. * MSD MASS STORAGE DRIVER INDEX.
  12301. * CHRV CHANNEL RESERVATION STATUS.
  12302. *
  12303. * EXIT
  12304. *
  12305. *T, OR 12/ 0,6/ 0,18/ DRA,12/ DRL,12/ 2
  12306. *T, MB 12/ DP,12/ WDSE,12/ 0,12/ RDCT,12/ STSA
  12307. *T, MB+1 12/ S,12/ UERR,12/ SLM,12/ MSD,12/ CHRV
  12308. *T, MB+2 60/ EST
  12309. *
  12310. * DRA LOAD ADDRESS OF DRIVER. ZERO IF NO DRIVER LOAD.
  12311. * DRL LENGTH OF DRIVER IN CM WORDS.
  12312. * DP DEVICE PARAMETER FROM BYTE 2 OF EST WORD *EQAE*.
  12313. * WDSE WRITE ERROR PROCESSING BUFFER, ZERO IF NO VALID
  12314. * ADDRESS PASSED ON CALL.
  12315. * RDCT 0
  12316. * STSA 2, IF DRIVER PRESET NOT TO BE EXECUTED.
  12317. * S 2000 IF FULL TRACK DEVICE.
  12318. * 2001 IF HALF TRACK DEVICE.
  12319. * UERR CALLERS ERROR PROCESSING OPTIONS.
  12320. * WHEN THE *READSYS* OPERATION TYPE IS SPECIFIED, THE
  12321. * *NS* ERROR PROCESSING OPTION IS IMPLIED. ALTHOUGH
  12322. * THE *EPNS* BIT IS NOT FORCED SET BY *READSYS*, *MTR*
  12323. * WILL NOT RETURN THE *LNRE* ERROR FLAG FOR AN OFF OR
  12324. * SUSPECT DEVICE IF THE *READSYS* BIT IS SET IN *CHRV*.
  12325. * SLM SECTOR LIMIT.
  12326. * MSD MASS STORAGE DESIGNATOR BYTE.
  12327. * DRIVER INDEX WILL BE CLEARED FOR SUBFUNCTIONS *PIO*
  12328. * AND *PIOCH*. BIT 2**6 SET IF DEVICE INACCESSIBLE
  12329. * AND JOB NOT *UTL=* OR IN UNCONDITIONAL TERMINATION
  12330. * STATE. BIT 2**11 SET IF JOB NOT SUBSYSTEM, NOT
  12331. * *UTL=*, AND NOT IN UNCONDITIONAL TERMINATION STATE.
  12332. * CHRV CHRV IS UPDATED DEPENDING ON THE SUBFUNCTION.
  12333. * 1000 BIT SET FOR *READSTR* OPTION.
  12334. * 40 BIT SET FOR *READSYS* OPTION ON A SYSTEM DEVICE.
  12335. * 4 BIT SET IF ACCESS SHOULD BE ALLOWED TO A SUSPECT
  12336. * OR OFF DEVICE.
  12337. * 2 BIT SET IF ACCESS SHOULD BE ALLOWED TO A DOWN
  12338. * DEVICE.
  12339. * EST *EQDE* WORD OF EST ENTRY.
  12340. *
  12341. *
  12342. * HANG CONDITIONS -
  12343. *
  12344. * INCORRECT SUBFUNCTION CODE.
  12345. * EST ORDINAL OUTSIDE OF EST.
  12346. * NON-MASS STORAGE EQUIPMENT (AND NOT *RD* EQUIPMENT).
  12347. * *6DC* REQUEST BIT SET BY NONCONCURRENT PP (NPP).
  12348. * *6DC* REQUEST BIT NOT SET BY CONCURRENT PP (CPP).
  12349. * NOT CALLED BY AN NPP AND THERE ARE NO CPPS.
  12350.  
  12351.  
  12352. PPR LMSM
  12353. TB3 A5,-FPC SUBTRACT *IR* ADDRESS OF FIRST CPP
  12354. MX0 -3 EXTRACT SUBFUNCTION CODE
  12355. SX6 X5 SIGN EXTEND WDSE PRESENT BIT
  12356. AX1 3
  12357. BX2 -X0*X5
  12358. MX0 -12
  12359. AX6 18
  12360. TPL B3,(/CPP/LMS13,CPP,/MONITOR/HNG) IF FROM CPP
  12361. BX5 -X0*X1 UERR
  12362. AX1 36-3 EXTRACT EQUIPMENT
  12363. SB4 X1
  12364. TB3 ESTL
  12365. SX4 -B4
  12366. ERRNZ RDEQ CODE ASSUMES *RDEQ* = 0
  12367. GE B4,B3,HNG IF *6DC* REQUEST OR IF OUTSIDE EST
  12368. SB3 X2 (B3) = SUBFUNCTION CODE
  12369. CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
  12370. TA3 EQDE+X3,EST READ EST ENTRY
  12371. BX6 -X0*X6 MASK FOR WDSE EXTRACTION
  12372. BX1 -X0*X3
  12373. BX7 X3
  12374. AX7 59-0
  12375. BX7 X4+X7
  12376. SA2 A5+B1 READ WDSE
  12377. NZ X7,HNG IF NEITHER MASS STORAGE NOR *RD* EQUIPMENT
  12378. BX7 X3
  12379. SA4 A2+B1 READ MESSAGE BUFFER PARAMETERS
  12380. LX6 36
  12381. LX1 3 MST ADDRESS
  12382. BX6 X6*X2 WDSE TO SAVE FOR REPLY
  12383. SA7 A4+B1 STORE EST IN REPLY
  12384. SX2 EPAD&EPNS
  12385. SX7 211B
  12386. BX2 X2*X5 MAP *AD*/*NS* OPTIONS INTO *CHRV*
  12387. BX7 X7*X4 PRESERVE CHANNEL STATUS FROM *CHRV*
  12388. LX5 36
  12389. BX7 X2+X7 COMBINE OLD AND NEW *CHRV* DATA
  12390. SA1 X1+MDGL
  12391. BX7 X7+X5 COMBINE *CHRV* AND *UERR*
  12392. BX2 -X0*X1
  12393. SX5 370000B
  12394. LX2 24 POSITION *SLM*
  12395. BX7 X7+X2
  12396. BX4 X5*X4 OLD DRIVER INDEX
  12397. LX3 59-58
  12398. BX5 X5*X1 NEW DRIVER INDEX
  12399. LX1 59-47+12
  12400. SA2 B7+SEPW CHECK SPECIAL ENTRY POINTS
  12401. BX1 -X0*X1
  12402. AX1 11 POSITION INTERLACE
  12403. LX2 59-56
  12404. SB6 X1
  12405. NG X2,LMS3 IF *UTL=* ENTRY POINT
  12406. SA2 B7+TFSW
  12407. LX2 12
  12408. BX1 -X0*X2
  12409. CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  12410. TA2 X2+SCHE,EJT
  12411. LX2 59-34
  12412. ERRNZ UCTM-2 CODE ASSUMES VALUE
  12413. NG X2,LMS3 IF UNCONDITIONAL JOB TERMINATION
  12414. SA2 B7+JCIW CHECK SUBSYSTEM
  12415. LX2 -24
  12416. BX2 -X0*X2
  12417. SX2 X2-LSSI-1
  12418. MX1 1
  12419. BX2 X1*X2
  12420. LX2 23-59
  12421. BX7 X7+X2 SET SUBSYSTEM STATUS
  12422. SA2 A1+DALL-MDGL
  12423. R= B4,.READSYS
  12424. NE B3,B4,LMS2 IF NOT *READSYS* OPTION
  12425. NG X3,LMS3 IF SYSTEM DEVICE
  12426. SA3 INWL
  12427. LMS2 LX2 59-55
  12428. LX3 59-15
  12429. BX2 X1*X2
  12430. NG X3,LMS3 IF DEADSTART SEQUENCING NOT COMPLETE
  12431. LX2 18-59
  12432. BX7 X7+X2 SET SUSPECT STATUS
  12433. LMS3 SX0 11B
  12434. PX3 X7,B6 SET INTERLACE
  12435. BX1 X1-X1
  12436. NZ B3,LMS12 IF NOT FUNCTION 0
  12437.  
  12438. * CHECK FOR DRIVER LOAD NEEDED.
  12439.  
  12440. LMS4 IX2 X4-X5 OLD INDEX - NEW INDEX
  12441. BX1 X0*X3 *CHRV* CHANNEL STATUS
  12442. SX7 B1+B1 SET STATUS REPLY
  12443. IX2 X1+X2
  12444. ZR X2,LMS4.1 IF CORRECT DRIVER AND NO CHANNEL RESERVE
  12445. BX6 X6+X7 SET TO NOT EXECUTE DRIVER PRESET
  12446. MX0 18+12
  12447. NZ X1,LMS5 IF CHANNEL RESERVED
  12448. BX4 X5 SET NEW DRIVER INDEX
  12449. AX5 12
  12450. SA1 TMSD+X5 READ DRIVER LOAD
  12451. LX0 -18
  12452. SX1 X1 SET PLD ADDRESS
  12453. ZR X1,LMS9 IF LIBRARY LOCKED
  12454. ZR X5,HNG IF ILLEGAL DRIVER INDEX
  12455. SX5 X5-LA6MX
  12456. PL X5,HNG IF ILLEGAL DRIVER INDEX
  12457. SA2 X1
  12458. SX1 B1
  12459. BX2 X0*X2 CLEAR LOAD ADDRESS AND PROGRAM NAME
  12460. LX1 41
  12461. LMS4.1 IX2 X1+X2
  12462. BX6 -X7*X6 SET TO EXECUTE DRIVER PRESET
  12463. BX7 X7+X2
  12464. SA1 A3+B1
  12465. ERRNZ EQDE+1-EQAE CODE DEPENDS ON VALUE
  12466. MX5 12
  12467. LX1 24
  12468. BX5 X5*X1 EXTRACT DEVICE PARAMETER FROM EST
  12469. BX6 X5+X6
  12470. ERRNZ .PIO-1 CODE ASSUMES *.PIO* = 1
  12471. LMS5 NE B3,B1,LMS6 IF NOT *PIO*/*PIOCH* SUBFUNCTION
  12472. SX4 0 CLEAR DRIVER INDEX IN *MSD*
  12473. LMS6 SA6 A5+B1 STORE MB REPLY
  12474. BX6 X3+X4 MERGE DRIVER INDEX
  12475. SA6 A6+B1 STORE MB+1 REPLY
  12476. SA7 A5 STORE OUTPUT REGISTER
  12477. EQ PPRX RETURN
  12478.  
  12479. LMS7 PL X3,LMS8 IF NOT SYSTEM DEVICE
  12480. SX1 40B
  12481. LMS8 BX3 X7+X1
  12482. EQ LMS4 CHECK FOR DRIVER LOAD
  12483.  
  12484. LMS9 SA5 A5 REJECT REQUEST
  12485. MX7 1
  12486. BX7 X5+X7
  12487. SA7 A5
  12488. EQ PPRX RETURN
  12489.  
  12490. LMS10 SX7 B1+B1 SET REPLY STATUS
  12491. BX6 X6+X7 SET NO DRIVER PRESET
  12492. SA6 A5+B1 STORE MB REPLY
  12493. SA7 A5
  12494. EQ PPRX RETURN
  12495.  
  12496. LMS11 SB3 .PIO
  12497. EQ TLMS+.IOCH GO TO *IOCH* PROCESSOR
  12498.  
  12499. LMS12 BX7 X3 SAVE MB+1 IMAGE
  12500. SX1 B0
  12501. JP TLMS+B3 JUMP TO PROCESSOR
  12502.  
  12503. BSS 0
  12504. QUAL
  12505. TLMS EQU *-1 TABLE OF *LMSM* SUBFUNCTION PROCESSORS
  12506. LOC 1
  12507. .PIO SX5 LA6DI*4096 SUBFUNCTION 1 - *PIO*
  12508. EQ /MONITOR/LMS4 LOAD DRIVER
  12509.  
  12510. .PIOCH SX5 LA6DI*4096 SUBFUNCTION 2 - *PIOCH*
  12511. EQ /MONITOR/LMS11 EQUATE THIS SUBFUNCTION TO *PIO*
  12512.  
  12513. .READSYS SA3 A3 SUBFUNCTION 3 - *READSYS*
  12514. LX3 59-58
  12515. EQ /MONITOR/LMS7 SET SYSTEM SEARCH FLAG
  12516.  
  12517. .READSTR SX1 1000B SUBFUNCTION 4 - *READSTR*
  12518. EQ /MONITOR/LMS8 CHECK DRIVER LOAD
  12519.  
  12520. .STATUS BX7 X7+X4 SUBFUNCTION 5 - *STATUS*
  12521. SA7 A4 STORE MB+1 REPLY
  12522. EQ /MONITOR/LMS10 COMPLETE FUNCION
  12523.  
  12524. .IOCH SX1 20B SUBFUNCTION 6 - *IOCH*
  12525. EQ /MONITOR/LMS8 CONTINUE
  12526.  
  12527. + EQ /MONITOR/HNG SUBFUNCTION 7 - INVALID
  12528. LOC *O
  12529. QUAL *
  12530. MTEM SPACE 4,15
  12531. *** MTEM - *MTE* FUNCTION REQUEST PROCESSOR.
  12532. *
  12533. * ENTRY
  12534. *T, OR 12/ MTEM,12/ SF,36/ PARAMETERS
  12535. *
  12536. * SF SUBFUNCTION CODE.
  12537. * CBRS CLEAR BAT READ ACCESS.
  12538. * CBWS CLEAR BAT READ AND WRITE ACCESS.
  12539. * CEMS CLEAR EXTENDED MEMORY TRACK.
  12540. * EBRS ENABLE BRT PROCESSING.
  12541. * SEPS SET *DAS* ERROR PROCESSING INTERLOCK.
  12542. * CEPS CLEAR *DAS* ERROR PROCESSING INTERLOCK.
  12543. * SRIS SET RECOVERY ERROR PROCESSING INTERLOCK.
  12544. * CRIS CLEAR RECOVERY ERROR PROCESSING INTERLOCK.
  12545. * RBPS RELEASE BAT/BST ACCESS PERMISSIONS.
  12546. * GRIS GET RECOVERY INTERLOCK STATUS.
  12547. * SRPS SET *DAS* RESTORE PARITY INTERLOCK.
  12548. * CRPS CLEAR *DAS* RESTORE PARITY INTERLOCK.
  12549. * GBDS GET *BDT* ENTRY.
  12550. *
  12551. *
  12552. * CBRS/CBWS - CLEAR BAT READ/WRITE ACCESS.
  12553. *
  12554. * ENTRY
  12555. *T, OR 12/ MTEM,12/ SF,12/ MI,12/ 0,12/ EQ
  12556. * SF *CBRS*/*CBWS* SUBFUNCTION.
  12557. * MI MAINFRAME INDEX FOR THE MAINFRAME BEING RECOVERED.
  12558. * EQ EST ORDINAL FOR THE DEVICE BEING RECOVERED.
  12559. *
  12560. * EXIT
  12561. *T, OR 12/ 0,48/ UNCHANGED
  12562. *
  12563. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  12564. * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
  12565. * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
  12566. * 3. MACHINE INDEX IS INVALID.
  12567. *
  12568. *
  12569. * EBRS - ENABLE BRT PROCESSING.
  12570. *
  12571. * ENTRY
  12572. *T, OR 12/ MTEM,12/ *EBRS*,12/ 0,12/ BD,12/ BT
  12573. * BD TRACK NUMBER OF BDT IN EXTENDED MEMORY.
  12574. * BT TRACK NUMBER OF BRT IN EXTENDED MEMORY.
  12575. *
  12576. * EXIT
  12577. *T, OR 12/ 0,48/ UNCHANGED
  12578. *
  12579. *
  12580. * CEMS - CLEAR EXTENDED MEMORY TRACK.
  12581. *
  12582. * ENTRY
  12583. *T, OR 12/ MTEM,12/ *CEMS*,12/ FS,12/ NS,12/ TK
  12584. * FS FIRST SECTOR TO CLEAR.
  12585. * NS NUMBER OF SECTORS TO CLEAR.
  12586. * TK EXTENDED MEMORY TRACK TO CLEAR.
  12587. *
  12588. * EXIT
  12589. *T, OR 12/ 0,48/ UNCHANGED
  12590. *
  12591. * *PP HUNG.* WILL OCCUR IF THE LAST SECTOR TO CLEAR
  12592. * IS PAST THE TRACK BOUNDARY OF THE SPECIFIED TRACK.
  12593. *
  12594. *
  12595. * SEPS - SET *DAS* ERROR PROCESSING INTERLOCK.
  12596. *
  12597. * ENTRY
  12598. *T, OR 12/ MTEM,12/ *SEPS*,24/ 0,12/ EQ
  12599. * EQ EST ORDINAL OF DEVICE TO BE PROCESSED.
  12600. *
  12601. * EXIT
  12602. *T, OR 12/ 0,36/ UNCHANGED,12/ ST
  12603. * ST STATUS = 0, IF SUCCESSFUL.
  12604. * = 1, IF REJECT.
  12605. *
  12606. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  12607. * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
  12608. * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
  12609. *
  12610. *
  12611. * CEPS - CLEAR *DAS* ERROR PROCESSING INTERLOCK.
  12612. *
  12613. * ENTRY
  12614. *T, OR 12/ MTEM,12/ *CEPS*,24/ 0,12/ EQ
  12615. * EQ EST ORDINAL OF DEVICE TO BE PROCESSED.
  12616. *
  12617. * EXIT
  12618. *T, OR 12/ 0,36/ UNCHANGED,12/ 0
  12619. *
  12620. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  12621. * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
  12622. * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
  12623. *
  12624. *
  12625. * SRIS - SET RECOVERY ERROR PROCESSING INTERLOCK.
  12626. *
  12627. * ENTRY
  12628. *T, OR 12/ MTEM,12/ *SRIS*,36/ 0
  12629. *
  12630. * EXIT
  12631. *T, OR 12/ 0,36/ UNCHANGED,12/ ST
  12632. * ST STATUS = 0, IF SUCCESSFUL.
  12633. * = 1, IF INCOMPLETE (RECOVERY INTERLOCK IS SET,
  12634. * BUT CONFLICTING *BDT* INTERLOCKS ARE SET).
  12635. * = 2, IF REJECT.
  12636. *
  12637. *
  12638. * CRIS - CLEAR RECOVERY ERROR PROCESSING INTERLOCK.
  12639. *
  12640. * ENTRY
  12641. *T, OR 12/ MTEM,12/ *CRIS*,36/ 0
  12642. *
  12643. * EXIT
  12644. *T, OR 12/ 0,48/ UNCHANGED
  12645. *
  12646. *
  12647. * RBPS - RELEASE BAT/BST ACCESS PERMISSIONS.
  12648. *
  12649. * ENTRY
  12650. *T, OR 12/ MTEM,12/ *RBPS*,24/ 0,12/ EQ
  12651. * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
  12652. *
  12653. * EXIT
  12654. *T, OR 12/ 0,36/ UNCHANGED,12/ ST
  12655. * ST STATUS .EQ. 0, IF SUCCESSFUL.
  12656. * .NE. 0, IF NOT ALL PERMISSIONS WERE RELEASED.
  12657. *
  12658. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  12659. * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
  12660. * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
  12661. *
  12662. *
  12663. * GRIS - GET RECOVERY INTERLOCK STATUS.
  12664. *
  12665. * ENTRY
  12666. *T, OR 12/ MTEM,12/ *GRIS*,36/ 0
  12667. *
  12668. * EXIT
  12669. *T, OR 12/ 0,36/ UNCHANGED,12/ ST
  12670. * ST STATUS = 0, IF NO CONFLICTING *BDT* INTERLOCKS SET.
  12671. * = 1, IF CONFLICTING *BDT* INTERLOCKS STILL SET.
  12672. *
  12673. *
  12674. * SRPS - SET *DAS* RESTORE PARITY INTERLOCK.
  12675. *
  12676. * ENTRY
  12677. *T, OR 12/ MTEM,12/ *SRPS*,24/ 0,12/ EQ
  12678. *T, MB 24/ ,36/ CID
  12679. * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
  12680. * CID SERIAL NUMBER FOR CONTROLLER PERFORMING *RESTORE*.
  12681. *
  12682. * EXIT
  12683. *T, OR 12/ 0,36/ UNCHANGED,12/ ST
  12684. * ST STATUS .EQ. 0, IF SUCCESSFUL.
  12685. * .NE. 0, IF REJECT.
  12686. *
  12687. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  12688. * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
  12689. * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
  12690. *
  12691. *
  12692. * CRPS - CLEAR *DAS* RESTORE PARITY INTERLOCK.
  12693. *
  12694. * ENTRY
  12695. *T, OR 12/ MTEM,12/ *CRPS*,24/ 0,12/ EQ
  12696. * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
  12697. * CID CONTROLLER SERIAL NUMBER (FOR *SRPS*).
  12698. *
  12699. * EXIT
  12700. *T, OR 12/ 0,48/ UNCHANGED
  12701. *
  12702. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  12703. * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
  12704. * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
  12705. *
  12706. *
  12707. * GBDS - GET *BDT* ENTRY.
  12708. *
  12709. * ENTRY
  12710. *T, OR 12/ MTEM,12/ *GCIS*,24/ 0,12/ EQ
  12711. * EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
  12712. *
  12713. * EXIT
  12714. *T, OR 12/ 0,48/ UNCHANGED
  12715. *T, MB 60/ BDT
  12716. * BDT BDT ENTRY FOR SPECIFIED DEVICE (SEE *COMSMMF*).
  12717. *
  12718. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  12719. * 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
  12720. * 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
  12721.  
  12722.  
  12723. PPR MTEM,(/BUFIO/MTE,BIOMMF,/MONITOR/HNG)
  12724.  
  12725.  
  12726. MTRM SPACE 4,35
  12727. *** MTRM - MANAGE TABLE REQUEST PROCESSOR.
  12728. *
  12729. * ENTRY
  12730. *T, OR 12/ MTRM,12/ FPARM,1/ SF,11/ TABLE,24/
  12731. *T, MB 60/ FWORD
  12732. *
  12733. * FPARM FUNCTION PARAMETER.
  12734. * = 0, IF RESERVE TABLE ENTRY FOR USE (REMOVE AN ENTRY
  12735. * FROM POOL OF AVAILABLE ENTRIES FOR THIS TABLE).
  12736. * = ORDINAL, IF NONZERO. TABLE ENTRY SPECIFIED WILL
  12737. * BE RETURNED TO POOL OF AVAILABLE ENTRIES.
  12738. * SF SYSTEM JOB FLAG.
  12739. * IF SET, AND *FPARM* = 0, ONE OF THE *RESERVED FOR
  12740. * SYSTEM JOB* ENTRIES WILL BE ASSIGNED IF THE TABLE
  12741. * IS FULL.
  12742. * TABLE TABLE IDENTIFICATION.
  12743. * *PEJT* IF EJT ENTRY TO BE PROCESSED.
  12744. * *PFNT* IF SYSTEM FNT ENTRY TO BE PROCESSED.
  12745. * *PFOT* IF FAMILY ORDINAL TABLE TO BE PROCESSED.
  12746. * *PQFT* IF QFT ENTRY TO BE PROCESSED.
  12747. * *PODT* IF ORT ENTRY TO BE PROCESSED.
  12748. *
  12749. * FWORD INFORMATION TO STORE IN FIRST WORD OF TABLE
  12750. * ENTRY RESERVED FOR *FPARM* = 0 REQUEST.
  12751. *
  12752. * EXIT
  12753. *T, OR 12/ 0,12/ STAT,12/,24/ ADDR
  12754. *
  12755. * STAT RETURN STATUS.
  12756. * = 0 FOR *FPARM* = ORDINAL OPTION.
  12757. * = 0 FOR *FPARM* = 0 OPTION, IF NO TABLE ENTRY
  12758. * AVAILABLE.
  12759. * = ORDINAL FOR *FPARM* = 0 OPTION, IF THIS TABLE
  12760. * ENTRY HAS BEEN RESERVED FOR USE BY CALLER.
  12761. * ADDR ABSOLUTE ADDRESS OF TABLE ENTRY RESERVED FOR
  12762. * USE FOR *FPARM* = 0 OPTION.
  12763. *
  12764. * *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  12765. * 1. INVALID TABLE IDENTIFICATION.
  12766. * 2. ORDINAL OF ENTRY TO RETURN TO POOL IS INVALID.
  12767. * 3. ENTRY TO RETURN TO POOL IS NOT IN USE (BYTE 0 = 0).
  12768.  
  12769.  
  12770. PPR MTRM,,,FEX
  12771.  
  12772. SB6 PPR1 SET *MTRM* EXIT ADDRESS
  12773.  
  12774. * ENTRY FROM *JACM* AND *RJSM* PROCESSORS.
  12775. * (B6) = RETURN ADDRESS.
  12776.  
  12777. MTM0 AX1 24
  12778. MX3 -11
  12779. MX0 -12
  12780. BX6 -X0*X1 SYSTEM JOB FLAG
  12781. BX2 -X3*X1 TABLE IDENTIFICATION
  12782. AX1 12
  12783. SX2 X2-PFOT
  12784. SX3 X2-TMTDL
  12785. BX3 -X3+X2
  12786. SB3 -B1 DECREMENT NUMBER OF FREE ENTRIES
  12787. NG X3,HNG IF INVALID TABLE IDENTIFICATION
  12788. SA4 TMTD+X2 GET TABLE POINTER AND ENTRY LENGTH
  12789. BX5 -X0*X4
  12790. AX4 12
  12791. BX7 -X0*X4
  12792. SB4 X7 NUMBER OF RESERVED ENTRIES
  12793. AX4 12
  12794. SA4 X4 GET TABLE FWA AND LINKED LIST POINTER
  12795. LX4 -12
  12796. BX2 -X0*X4 COUNT OF AVAILABLE ENTRIES
  12797. LX4 -24
  12798. NZ X1,MTM1 IF RETURN ENTRY TO AVAILABLE POOL
  12799.  
  12800. * REMOVE ENTRY FROM POOL OF AVAILABLE ENTRIES.
  12801.  
  12802. SA3 A4 GET FIRST AVAILABLE ENTRY
  12803. BX7 -X0*X3
  12804. ZR X7,PPR1 IF NO ENTRIES AVAILABLE
  12805. SX1 B4
  12806. IX2 X1-X2
  12807. NG X2,MTM0.1 IF TABLE NOT FULL
  12808. AX6 11
  12809. NZ X6,MTM0.1 IF SYSTEM JOB CALL
  12810. SX7 B0+
  12811. EQ PPR1 CLEAR OUTPUT REGISTER
  12812.  
  12813. MTM0.1 SX4 X4
  12814. IX5 X7*X5
  12815. IX5 X5+X4 ABSOLUTE ADDRESS OF FIRST AVAILABLE ENTRY
  12816. SA2 A5+B1 RESERVE NEXT AVAILABLE ENTRY
  12817. LX7 36
  12818. SA1 X5 GET NEXT LINK
  12819. BX7 X7+X5
  12820. LX6 X2
  12821. BX1 -X0*X1
  12822. EQ MTM4 UPDATE POINTER FOR NEXT AVAILABLE ENTRY
  12823.  
  12824. * RETURN ENTRY TO POOL OF AVAILABLE ENTRIES.
  12825.  
  12826. MTM1 LX4 12
  12827. BX2 -X0*X4 MAXIMUM NUMBER OF ENTRIES
  12828. SX7 A4+
  12829. LX4 -12
  12830. IX2 X1-X2
  12831. PL X2,HNG IF ORDINAL OUT OF RANGE
  12832. MTM2 SA3 X7
  12833. MX2 1
  12834. BX6 -X0*X3
  12835. IX7 X6*X5
  12836. ZR X6,MTM3 IF END OF LINKED LIST
  12837. IX2 X1-X6
  12838. IX7 X7+X4
  12839. MTM3 PL X2,MTM2 IF ORDINAL .GT. NEXT POINTER
  12840. SB4 X5
  12841. IX5 X1*X5
  12842. SB3 B1 INCREMENT NUMBER OF FREE ENTRIES
  12843. IX5 X5+X4 ABSOLUTE ADDRESS OF ENTRY TO RETURN
  12844. BX7 X7-X7
  12845. SA2 X5 CHECK IF ENTRY ALREADY IN POOL
  12846. LX2 12
  12847. BX2 -X0*X2
  12848. ZR X2,HNG IF ENTRY IS NOT IN USE
  12849. MTM4 BX3 X0*X3 ADD/REMOVE ENTRY IN LIST
  12850. SX2 B3
  12851. LX2 12
  12852. + SA6 X5 UPDATE TABLE IN ONE WORD OF CODE
  12853. BX6 X3+X1
  12854. SA6 A3
  12855. SA4 A4
  12856. IX6 X4+X2 INCREMENT/DECREMENT FREE ENTRIES
  12857. SA6 A4
  12858. NZ X7,RB6 IF NOT CLEARING ENTRY
  12859. MTM5 SB4 B4-B1 CLEAR REMAINDER OF ENTRY
  12860. SA7 X5+B4
  12861. GT B4,B1,MTM5 IF MORE WORDS TO CLEAR
  12862. JP B6 EXIT
  12863. TMTD SPACE 4,10
  12864. ** TMTD - TABLE OF MANAGED TABLE DESCRIPTORS.
  12865. *
  12866. * ONE WORD PER ENTRY -
  12867. *T 18/,18/ PTRA,12/ RSEN,12/ ENTL
  12868. * PTRA MANAGED TABLE POINTER ADDRESS.
  12869. * RSEN NUMBER OF ENTRIES RESERVED FOR SYSTEM JOBS.
  12870. * ENTL TABLE ENTRY LENGTH.
  12871.  
  12872.  
  12873. TMTD BSS 0
  12874. LOC 1
  12875. ERRNZ *-PFOT TABLE POSITION DEPENDS ON VALUE
  12876. VFD 18/0,18/FOTP,12/0,12/1 FAMILY ORDINAL TABLE
  12877. ERRNZ *-PFNT TABLE POSITION DEPENDS ON VALUE
  12878. VFD 18/0,18/FNTP,12/0,12/FNTE SYSTEM FNT
  12879. ERRNZ *-PQFT TABLE POSITION DEPENDS ON VALUE
  12880. VFD 18/0,18/QFTP,12/QFTR,12/QFTE QUEUE FILE TABLE
  12881. ERRNZ *-PEJT TABLE POSITION DEPENDS ON VALUE
  12882. VFD 18/0,18/EJTP,12/EJTR,12/EJTE EXECUTING JOB TABLE
  12883. ERRNZ *-PODT TABLE POSITION DEPENDS ON VALUE
  12884. VFD 18/0,18/ORTP,12/0,12/ORTE OPTICAL DISK REQUEST TABLE
  12885. LOC *O
  12886. TMTDL EQU *-TMTD TABLE LENGTH
  12887. PIOM SPACE 4,20
  12888. *** PIOM - PP I/O VIA CPU TRANSFERS.
  12889. *
  12890. * ENTRY
  12891. *
  12892. * FOR PP I/O BUFFER SUBFUNCTIONS (SF = 0, 1, 2) -
  12893. *T, OR 12/ PIOM,6/ SF,6/ FF,24/,12/ CH
  12894. *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
  12895. *
  12896. * FOR DIRECT READ OR WRITE OF SPECIFIED NUMBER OF SECTORS
  12897. * (SF = 3 WITH FF BIT 38 = 0, AND SF = 4) -
  12898. *T, OR 12/ PIOM,6/ SF,6/ FF,12/ SC,6/,18/ CMR
  12899. *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
  12900. *
  12901. * FOR DIRECT READ TO EOR (SF = 3 WITH FF BIT 38 = 1) -
  12902. *T, OR 12/ PIOM,6/ SF,6/ FF,18/ LWR,18/ CMR
  12903. *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
  12904. *
  12905. * FOR WRITE BUFFER FLUSH (SF = 5) -
  12906. *T, OR 12/ PIOM,6/ SF,6/,24/,12/ FNTO
  12907. *
  12908. * FOR CM RESIDENT CODE TRANSFER SUBFUNCTION (SF = 6) -
  12909. *T, OR 12/ PIOM,6/ SF,6/,18/ LWR,18/ CMR
  12910. *T, MB 24/,24/ CMA,12/
  12911. *
  12912. * SF SUBFUNCTION CODE AS DEFINED IN *COMSCPS*.
  12913. * SUBFUNCTIONS 0 THRU 4 APPLY TO ECS/LCM (DE)
  12914. * AND BUFFERED I/O DEVICES (DV, DW, DB, DC, ETC.).
  12915. * SUBFUNCTION 5 APPLIES TO 819 EQUIPMENT ONLY.
  12916. * SUBFUNCTION 6 APPLIES TO CM RESIDENT CODE ONLY.
  12917. * 0 = REBS = RESERVE WRITE BUFFER.
  12918. * 1 = RESS = READ SECTOR.
  12919. * 2 = WESS = WRITE SECTOR.
  12920. * 3 = RDDS = READ DIRECT.
  12921. * 4 = WDDS = WRITE DIRECT.
  12922. * 5 = FLBS = FLUSH 819 I/O LCM BUFFERS.
  12923. * 6 = LCRS = LOAD CM RESIDENT CODE.
  12924. * FF FUNCTION FLAGS.
  12925. * BIT 36 = REWRITE (SF = 2 ONLY).
  12926. * BIT 37 = LAST SECTOR BUFFER FLUSH FOR SECTOR WRITE
  12927. * (SF = 2), WRITE EOI AND FLUSH BUFFER FOR DIRECT
  12928. * WRITE ON BUFFERED DEVICE (SF = 4).
  12929. * BIT 38 = READ TO EOR (SF = 3 ONLY), TERMINATES ON
  12930. * ANY SHORT SECTOR - EOR/EOF/EOI.
  12931. * CH CHANNEL NUMBER TO BE USED IN PROCESSING REQUEST, VALID
  12932. * ONLY WHEN BIT 4 OF *CHRV* IS SET.
  12933. * SC SECTOR COUNT TO BE TRANSFERRED (SF = 3 WITH
  12934. * FF BIT 38 = 0 AND SF =4).
  12935. * LWR LWA+1 OF TRANSFER (SF = 3 WITH FF BIT 38 = 1
  12936. * AND SF = 6). IF ZERO, LWA+1 TRANSFER = FL.
  12937. * CMR RELATIVE CM ADDRESS OF TRANSFER (SF = 3, 4, 6 ONLY).
  12938. * T4 PP I/O BUFFER INCREMENT, IF PP I/O BUFFER RESERVED.
  12939. * T5 EQUIPMENT (EST ORDINAL OF ECS/LCM OR BUFFERED DEVICE).
  12940. * T6 CURRENT TRACK (LOGICAL).
  12941. * T7 CURRENT SECTOR (LOGICAL).
  12942. * CMA ABSOLUTE CM ADDRESS OF CM RESIDENT CODE TO TRANSFER.
  12943. * CHRV CHANNEL RESERVATION INDICATOR.
  12944. * BIT 5 = SYSTEM FILE REQUEST.
  12945. * BIT 6 = PP I/O BUFFER RESERVED (BUFFER
  12946. * INCREMENT IN T4).
  12947. * BIT 7 = BUFFER I/O LINK SET.
  12948. * BIT 8 = DIRECT TRANSFER CONTINUATION (CLEAR IF
  12949. * INITIAL CALL).
  12950. * BIT 9 = STREAM DATA ON PRU READ.
  12951. * FNTO FNT ORDINAL FOR FNT NEEDING A BUFFER FLUSHED.
  12952. *
  12953. * EXIT
  12954. *
  12955. * FOR PP I/O BUFFER SUBFUNCTIONS (SF = 0, 1, 2) -
  12956. *T, OR 12/ 0,6/ ST,6/ EC,6/,30/ EEA
  12957. *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
  12958. *T, MB+1 60/ SAME AS (OR).
  12959. *
  12960. * FOR DIRECT READ OR WRITE OF SPECIFIED NUMBER OF SECTORS
  12961. * (SF = 3 WITH FF BIT 38 = 0, AND SF = 4) -
  12962. *T, OR 12/ 0,6/ ST,6/ EC,12/ SC,6/,18/ CMR
  12963. *T, MB 12/ T4, 12/ T5, 12/ T6, 12/ T7, 12/ CHRV
  12964. *T, MB+1 60/ SAME AS (OR)
  12965. *
  12966. * FOR DIRECT READ TO EOR (SF = 3 WITH FF BIT 38 = 1) -
  12967. *T, OR 12/ 0,6/ ST,6/ EC,18/ LWR,18/ CMR
  12968. *T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
  12969. *T, MB+1 60/ SAME AS (OR)
  12970. *
  12971. * FOR WRITE BUFFER FLUSH (SF = 5) =
  12972. *T, OR 60/ 0
  12973. *
  12974. * FOR CM RESIDENT CODE TRANSFER SUBFUNCTION (SF = 6) -
  12975. *T, OR 12/ 0,6/ ST,6/,18/ LWR,18/ CMR
  12976. *T, MB 30/,18/ CMA,12/
  12977. *
  12978. * ST RETURN STATUS. IF A NONZERO STATUS IS PRESENT, THE
  12979. * ERROR CODE FIELD IS ALWAYS CLEAR.
  12980. * 04XX = *IFLS* = INSUFFICIENT FIELD LENGTH FOR LOAD
  12981. * (SF = 3 WITH FF BIT 38 = 1, OR SF = 6).
  12982. * 60XX = *REIS* = REISSUE FUNCTION (SET IN MB+1 ONLY,
  12983. * I/O OR *PAUSE* IS REQUIRED) (SF = 0, 1, 2, 3, 4).
  12984. * EC ERROR CODE. SEE *COMSMSP* FOR A DESCRIPTION OF MASS
  12985. * STORAGE ERROR CODES.
  12986. * SC REMAINING SECTOR COUNT (SF = 3, 4 ONLY).
  12987. * LWR SAME AS ON ENTRY.
  12988. * CMR RELATIVE CM ADDRESS UPDATED TO LWA+1 TRANSFER
  12989. * (SF = 3, 4, 6 ONLY).
  12990. * EEA ERROR ADDRESS IF ECS/ESM ERROR.
  12991. * T4 PP I/O BUFFER INCREMENT, IF BUFFER RESERVED
  12992. * (SF = 0, 1, 2).
  12993. * NUMBER OF SECTORS TRANSFERRED (SF = 3, 4).
  12994. * T5 EQUIPMENT.
  12995. * T6 TRACK. UPDATED TO NEXT TRACK, IF NECESSARY,
  12996. * FOR DIRECT TRANSFER (SF = 3, 4). NOT ADVANCED
  12997. * PAST EOI TRACK.
  12998. * T7 SECTOR. UPDATED TO NEXT SECTOR, FOR DIRECT
  12999. * TRANSFER (SF = 3, 4). NOT ADVANCED PAST EOI SECTOR.
  13000. * CMA SAME AS ON ENTRY.
  13001. * CHRV BITS UPDATED TO REFLECT CURRENT RESERVATION
  13002. * STATUS.
  13003. *
  13004. * NOTES 1. MB+1 IS USED BY CPUMTR TO KEEP PROGRAM OR
  13005. * MONITOR MODE FLAGS. MB+2 AND MB+3 ARE USED
  13006. * TO CONTAIN A PSEUDO FNT FOR A BUFFERED DISK
  13007. * REQUEST.
  13008. *
  13009. * 2. IF *RCLS* STATUS IS RETURNED, THE PP SHOULD
  13010. * LOOP ISSUING *PAUSE* AND CHECKING MB+1 BYTE 1
  13011. * UNTIL STATUS = *REIS*. BIT 46 OF MB+1 IS SET
  13012. * WHEN A *PAUSE* IS REQUIRED OR PENDING BUFFERED I/O
  13013. * IS COMPLETE. THE *PIOM* FUNCTION SHOULD THEN BE
  13014. * REISSUED TO COMPLETE THE TRANSFER. NOTE THAT A
  13015. * DIRECT TRANSFER IS PREMATURELY TERMINATED IF
  13016. * NONZERO STATUS IS RETURNED.
  13017. *
  13018. * 3. THE PP SHOULD RELEASE THE PP I/O BUFFER AFTER
  13019. * TRANSFER OF SECTOR TO PP IS COMPLETE (SF = 1).
  13020. * DRIVER *ENDMS* PROCESSING SHOULD RELEASE THE
  13021. * PP I/O BUFFER IF IT IS RESERVED. CPUMTR WILL
  13022. * RELEASE THE BUFFER IN THE FOLLOWING CASES -
  13023. * (1) DIRECT TRANSFER IS REQUESTED (SF = 3, 4).
  13024. * (2) BUFFERED I/O IS PENDING (ST = 4000).
  13025. * (3) ADDRESS ERROR, I/O ERROR OR INACCESSIBLE
  13026. * DEVICE.
  13027. * (4) LAST SECTOR BUFFER FLUSH REQUESTED ON
  13028. * WRITE (SF = 2).
  13029. * NOTE THAT THE PP WILL HAVE TO RE-RESERVE AN
  13030. * I/O BUFFER (SF = 0) AND REWRITE THE DATA TO
  13031. * THE BUFFER FOR SF = 2, WHEN BUFFERED I/O IS
  13032. * PENDING (ST = 4000).
  13033. *
  13034. * 4. *PIOM* WILL HANG FOR FOLLOWING CONDITIONS -
  13035. * (1) ILLEGAL SUBFUNCTION CODE.
  13036. * (2) *CHRV* BIT 0 SET INDICATING PP I/O BUFFER
  13037. * RESERVED, BUT BUFFER INTERLOCK DOES NOT
  13038. * CORRESPOND TO THIS PP.
  13039. * (3) SF = 0 AND PP I/O BUFFER PREVIOUSLY
  13040. * RESERVED.
  13041. * (4) SF = 2 AND PP I/O BUFFER NOT PREVIOUSLY
  13042. * RESERVED.
  13043. * (5) SECTOR SPECIFICATION INVALID.
  13044. * (6) EOR, EOF, OR EOI ENCOUNTERED ON DIRECT READ
  13045. * WITH SECTOR COUNT (SF = 3).
  13046. * (7) NEXT TRACK IS NOT RESERVED, WHEN DIRECT
  13047. * TRANSFER HAS TO CROSS LOGICAL TRACK
  13048. * BOUNDARY.
  13049. * (8) LWA+1 LOAD .GT. FL (SF = 3 WITH FF BIT
  13050. * 38 = 1, OR SF = 6).
  13051. * (9) DIRECT TRANSFER OF SPECIFIED NUMBER OF
  13052. * SECTORS ATTEMPTED BEYOND CP FL.
  13053. * (10) FUNCTION FLAG SELECTION IS NOT LEGAL FOR
  13054. * THIS SUBFUNCTION.
  13055. * READ TO EOR FLAG (BIT 38) ALLOWED ONLY
  13056. * FOR SF=3.
  13057. * LAST SECTOR BUFFER FLUSH (BIT 37) ALLOWED
  13058. * ONLY FOR SF = 0, 2, 4.
  13059. * REWRITE FLAG (BIT 36) ALLOWED ONLY FOR
  13060. * SF = 0, 2, 4.
  13061.  
  13062.  
  13063. PPR PIOM,,PIP
  13064.  
  13065. AX1 42 GET SUBFUNCTION CODE
  13066. MX2 -12
  13067. SB4 X1-LCRS CHECK FOR CM RESIDENT CODE LOAD
  13068. SB5 X1-1
  13069. TNZ B4,(/ECS/PIO,ECS,/MONITOR/HNG) IF NOT CM FUNCTION
  13070. EQ PMR SWITCH TO PROGRAM MODE
  13071.  
  13072.  
  13073. ERRNZ REBS CODE DEPENDS ON VALUE
  13074. ERRNZ RESS-1 CODE DEPENDS ON VALUE
  13075. ERRNZ WESS-2 CODE DEPENDS ON VALUE
  13076. ERRNZ RDDS-3 CODE DEPENDS ON VALUE
  13077. ERRNZ WDDS-4 CODE DEPENDS ON VALUE
  13078. ERRNZ FLBS-5 CODE DEPENDS ON VALUE
  13079. PLFM SPACE 4,40
  13080. *** PLFM - PROCESS LOCAL FNT ENTRY.
  13081. *
  13082. * CREATE OR DELETE LOCAL FNT ENTRY IN NEGATIVE FL.
  13083. *
  13084. *T OR 12/ PLFM,6/,1/S,2/,3/SF,24/,12/ ADDR
  13085. *
  13086. *T,MB 42/ FN,18/
  13087. *
  13088. * S CREATE SPECIAL FILE USING ONE OF THE RESERVED FNT
  13089. * ENTRIES. SEE SYMBOL *SRFE* IN *PPCOM* FOR A LIST
  13090. * OF SPECIAL FILES.
  13091. *
  13092. * SF SUBFUNCTION -
  13093. * DLFS (0) DELETE LOCAL FNT ENTRY.
  13094. * DLCS (1) RETURN FILE COUNT.
  13095. * CRFS (2) CREATE LOCAL FNT ENTRY.
  13096. *
  13097. * ADDR NFL ADDRESS OF FNT ENTRY (SF = DLFS, DLCS).
  13098. *
  13099. * FN FILE NAME (SF = CRFS).
  13100. *
  13101. *
  13102. *T OR 12/ 0,12/ ADDR,12/,12/ COUNT,12/ STAT
  13103. *
  13104. * ADDR NFL ADDRESS OF LOCAL FNT ENTRY (SF = CRFS).
  13105. *
  13106. * COUNT NUMBER OF LOCAL FILES REMAINING ON SAME
  13107. * EQUIPMENT (SF = DLCS).
  13108. *
  13109. * STAT RETURN STATUS (SF = CRFS).
  13110. * 0 = FILE CREATED.
  13111. * 1 = FILE ALREADY EXISTS.
  13112. * 2 = LOCAL FILE LIMIT (MAXIMUM NFL REACHED).
  13113. * 4 = NFL INCREASE NEEDED.
  13114. *
  13115. *
  13116. * WHEN DELETING AN FNT ENTRY (SF = DLFS), IF THE NFL
  13117. * ADDRESS OF THE ENTRY MATCHES THE ADDRESS IN THE FIRST BYTE
  13118. * OF *EOCW* IN THE CONTROL POINT AREA, THAT FIELD IS CLEARED.
  13119.  
  13120.  
  13121. PPR PLFM,(/CME/PLF,CME,/0CME/PLF)
  13122. RCLM SPACE 4,10
  13123. *** RCLM - RECALL CPU.
  13124. *
  13125. * ENTRY
  13126. *T, OR 12/ RCLM,12/,12/,12/,12/
  13127. *
  13128. * EXIT
  13129. *T, OR 60/ 0
  13130.  
  13131.  
  13132. PPR RCLM
  13133.  
  13134. SA1 B7+CWQW CHECK RECALL STATUS
  13135. SA7 A5+ CLEAR OUTPUT REGISTER
  13136. SX6 1S4 SET INCREASED PRIORITY FOR JOB
  13137. SA6 IP
  13138. SB3 PPRX SET *RCC* RETURN ADDRESS
  13139. LX1 59-46
  13140. SB6 B7 SET EXCHANGE PACKAGE ADDRESS
  13141. PL X1,RCC IF TO RECALL CPU
  13142. EQ PPRX RETURN
  13143. RCPM SPACE 4
  13144. *** RCPM - REQUEST CPU.
  13145. *
  13146. * ENTRY
  13147. *T, OR 12/ RCPM,12/,12/,12/,12/
  13148. *
  13149. * EXIT
  13150. *T, OR 60/ 0
  13151.  
  13152.  
  13153. PPR RCPM
  13154.  
  13155. * ENTER HERE FROM RLMM FOR JOB STEP START.
  13156.  
  13157. SA1 B7+STSW READ STATUS
  13158. SA3 SMRL
  13159. SB3 PPRX SET *RCC* RETURN ADDRESS
  13160. MX0 -12
  13161. BX0 -X0*X3
  13162. SX5 B7 CONTROL POINT ADDRESS
  13163. LX0 7
  13164. AX1 57
  13165. BX5 X5-X0
  13166. SB6 X1+1
  13167. ZR X5,HNG IF STORAGE MOVE IN PROGRESS
  13168. ZR X1,RCP1 IF NO STATUS
  13169. NZ B6,HNG IF NOT *I* STATUS
  13170. SA2 A5-B1
  13171. LX1 41
  13172. BX6 X1*X2 CLEAR PP AUTO RECALL
  13173. SA6 A2
  13174. RCP1 SA7 A5 CLEAR OUTPUT REGISTER
  13175. SB6 B7 SET EXCHANGE PACKAGE ADDRESS
  13176. EQ RCC RECALL CPU
  13177. RDCM SPACE 4,25
  13178. *** RDCM - REQUEST DATA CONVERSION.
  13179. *
  13180. * ENTRY
  13181. *T, OR 12/ RDCM, 12/ SF, 36/
  13182. *
  13183. * SF = 0 - 6 (RCIS) - CONVERT INTEGER(S) TO F10.3 FORMAT.
  13184. * SF = 7 (RCDS) - CONVERT INTEGER TO F20.3 FORMAT.
  13185. * SF = 10 (RIDS) - INCREMENT PACKED DATE BY SPECIFIED TERM.
  13186. * SF = 11 (REPS) - ENCRYPT PASSWORD.
  13187. *
  13188. *
  13189. * 0 - 6 RCIS - CONVERT INTEGER(S) TO F10.3 FORMAT.
  13190. *
  13191. * CONVERT 30 BIT INTEGER TO DISPLAY CODE IN F10.3 FORMAT.
  13192. * CAUTION - ONLY NINE DIGITS OF ACCURACY ARE RETURNED. VALUES
  13193. * GREATER THAN 999999.999 ARE TRUNCATED TO THE LOW ORDER NINE
  13194. * DIGITS.
  13195. *
  13196. * ENTRY
  13197. *T, OR 12/ RDCM,12/ C,6/ M,6/ W,24/
  13198. * C = NUMBER OF VALUES TO CONVERT (1-6),
  13199. * IF C=0, ONLY THE VALUE IN MB+0 IS CONVERTED.
  13200. * M = WORD CONTAINING QUARTER NANOUNIT COUNT TO BE CONVERTED TO
  13201. * MILLIUNITS. THIS WORD IS A 60 BIT VALUE.
  13202. * MB+M-1 POINTS TO THE WORD REQUIRING CONVERSION.
  13203. * IF C=0, M IS IGNORED.
  13204. * W = WORD CONTAINING SRU ACCUMULATOR (1-6).
  13205. * MB+W-1 POINTS TO THE WORD REQUIRING CONVERSION.
  13206. * IF C=0, W IS IGNORED.
  13207. *
  13208. *T, MB+0 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
  13209. *T, MB+I 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
  13210. *T, MB+5 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
  13211. *
  13212. * EXIT
  13213. *T, OR 60/ 0
  13214. *
  13215. *T, MB+0 60/ CONVERSION
  13216. *T, MB+I 60/ CONVERSION
  13217. *T, MB+5 60/ CONVERSION
  13218. *
  13219. *
  13220. * 7 RDCS - CONVERT INTEGER TO F20.3 FORMAT.
  13221. *
  13222. * CONVERT A 60-BIT INTEGER TO DISPLAY CODE IN F20.3 FORMAT.
  13223. * CAUTION - ONLY 15 DIGITS OF ACCURACY ARE RETURNED. VALUES
  13224. * GREATER THAN 999999999999.999 ARE TRUNCATED TO THE LOW ORDER
  13225. * 15 DIGITS.
  13226. *
  13227. * ENTRY
  13228. *T, OR 12/ RDCM, 12/ RCDS, 6/, 6/ Q, 24/
  13229. * Q = CONVERT QUARTER NANOUNITS TO CYBER 176 CLOCK CYCLES FLAG.
  13230. *
  13231. *T, MB+0 60/ 60-BIT INTEGER
  13232. *
  13233. * EXIT
  13234. *T, OR 60/ 0
  13235. *
  13236. *T, MB+0 60/ CONVERSION (FIRST WORD)
  13237. *T, MB+1 60/ CONVERSION (SECOND WORD)
  13238. *
  13239. *
  13240. * 10 RIDS - INCREMENT CURRENT PACKED DATE BY SPECIFIED TERM.
  13241. *
  13242. * ENTRY
  13243. *T, OR 12/ RDCM, 12/ RIDS, 24/, 12/ TERM
  13244. * TERM - NUMBER OF DAYS TO ADD TO PACKED DATE.
  13245. *
  13246. * EXIT
  13247. *T, OR 60/ 0
  13248. *
  13249. *T, MB+0 42/ 0, 18/ NEW PACKED DATE
  13250. *
  13251. *
  13252. * 11 REPS - ENCRYPT PASSWORD.
  13253. *
  13254. * ENTRY
  13255. *T, OR 12/ RDCM, 12/ REPS, 36/
  13256. *
  13257. *T, MB+0 60/ PASSWORD
  13258. *
  13259. * EXIT
  13260. *T, OR 60/ 0
  13261. *
  13262. *T, MB+0 60/ ENCRYPTED PASSWORD
  13263.  
  13264.  
  13265. PPR RDCM,PMR,RDC,FEX
  13266. RECM SPACE 4,10
  13267. ** RECM - RECALL PP REQUEST.
  13268. *
  13269. * ENTRY
  13270. *T, OR 12/ RECM,1/ ND,11/ RF,36/ RC
  13271. *T, MB 60/ IR
  13272. *T, MB+1 1/Q,59/ PAR
  13273. *
  13274. * IR = INPUT REGISTER OF PP, CONTROL POINT NEED NOT BE SET.
  13275. * ND = SET IF PP IS NOT TO BE DROPPED.
  13276. * RF = RECALL FUNCTION NUMBER AS DEFINED IN *COMSCPS*.
  13277. * RC = RECALL CRITERION, UNIQUE TO EACH RECALL FUNCTION.
  13278. * RF = RC = 0, IF TO SET 1 SECOND TIMED RECALL.
  13279. * Q = RECALL FLAG, SET BY *CPUMTR* WHEN CALL IS QUEUED.
  13280. * PAR = PARAMETER DATA TO BE PASSED TO ASSIGNED PP IN *MB*.
  13281. *
  13282. * EXIT
  13283. *T, OR 12/ 0,48/
  13284. *
  13285. * HANG CONDITIONS -
  13286. * RECALL FUNCTION IS UNDEFINED.
  13287. * NO-DROP OPTION SELECTED WHEN PP CALLED WITH AUTO-RECALL.
  13288. * PP REQUEST (MB) IS ZERO.
  13289. *
  13290. * NOTE -
  13291. * THE AUTO RECALL IN THE CALLING PP-S INPUT
  13292. * REGISTER IS PROPAGATED TO THE RECALLED REQUEST,
  13293. * AND THE AUTO-RECALL BIT (IF ANY) IS CLEARED FROM
  13294. * THE CALLING PP-S INPUT REGISTER IF THE NO-DROP
  13295. * OPTION IS NOT SELECTED.
  13296.  
  13297.  
  13298. PPR RECM
  13299.  
  13300. SA3 A5+2 FETCH PARAMETER WORD
  13301. LX1 59-47
  13302. BX6 X3
  13303. SA6 AQRA
  13304. SB3 REC5 *AQR* RETURN ADDRESS
  13305. SX0 B1
  13306. SA3 A5-B1 READ INPUT REGISTER
  13307. LX0 41
  13308. BX2 X3*X0 EXTRACT AUTO RECALL BIT
  13309. LX3 59-41
  13310. BX6 X3*X1
  13311. NG X6,HNG IF AUTO RECALL AND NO-DROP
  13312. NG X1,REC1 IF NO-DROP PP
  13313. SB3 .DPPM *AQR* RETURN ADDRESS
  13314. LX3 41-59
  13315. BX6 -X0*X3 REMOVE AUTO RECALL BIT
  13316. SA6 A3+
  13317. REC1 MX6 1 CLEAR DROP INHIBIT BIT
  13318. BX1 -X6*X1
  13319. BX0 X1
  13320. SA4 A5+B1
  13321. ZR X4,HNG IF PP CALL ZERO
  13322. BX6 X2+X4 PROPAGATE AUTO-RECALL BIT
  13323. AX1 48
  13324. SB4 X1-TRECL
  13325. PL B4,HNG IF CRITERION OUT OF RANGE
  13326. JP TREC+TRECL+B4
  13327.  
  13328. TREC BSS 0
  13329. LOC 0
  13330.  
  13331. + ZR X0,REC2 IF DEFAULT CALL - (PTMF)
  13332. EQ HNG ILLEGAL CRITERION
  13333.  
  13334. + EQ HNG (PCBF) - ILLEGAL FROM PP
  13335.  
  13336. + SA1 RTCL COMPUTE EXTRACTION TIME
  13337. EQ REC6 (PTRF) - TIMED RECALL / NO ROLLOUT
  13338.  
  13339. + SA1 RTCL COMPUTE EXTRACTION TIME
  13340. EQ REC3 (PTMF) - TIMED RECALL
  13341.  
  13342. + EQ REC7 (PBMF) - BUFFER MANAGER RECALL
  13343.  
  13344. TRECL BSS 0
  13345. LOC *O
  13346.  
  13347. * ENTER HERE FROM *CPUCIO* TO QUEUE *CIO* REQUEST FOR
  13348. * SUSPENDED DETTACHED TERMINAL JOB.
  13349. * ENTER HERE FROM *PRQ* TO REQUEUE *1AJ* WHEN ACTIVITY
  13350. * ON JOB OR JOB INTERLOCK SET.
  13351.  
  13352. REC2 SA2 MSCL GET DEFAULT PP RECALL TIME
  13353. MX0 -12
  13354. AX2 24
  13355. BX2 -X0*X2
  13356. SX0 PTMF SET TIMED RECALL CRITERION
  13357. LX0 36
  13358. IX0 X2+X0
  13359. LX0 12
  13360. SA1 RTCL
  13361. REC3 MX3 -36 ADD TO REAL TIME CLOCK
  13362. BX1 -X3*X1
  13363. LX1 12
  13364. IX0 X0+X1
  13365. REC4 SA1 B7+STSW CHECK FOR ROLLOUT
  13366. R= X2,RQ SET RECALL QUEUE
  13367. LX1 59-24
  13368. PL X1,AQR IF ROLLOUT NOT SET
  13369. LX1 24-59
  13370.  
  13371. * PUT ENTRY IN RECALL AREA BUT NOT IN QUEUE WHEN ROLLOUT SET.
  13372.  
  13373. MX7 -4
  13374. NO
  13375. BX4 -X7*X1 NEXT FREE RECALL SLOT
  13376. SB4 B7+RCCW-1
  13377. BX7 X7*X1
  13378. SA3 B4+X4 READ NEXT FREE RECALL SLOT
  13379. SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
  13380. SA4 AQRA GET PARAMETER WORD
  13381. MX6 1
  13382. BX6 X6+X4 SET RECALL BIT FLAG
  13383. SA6 A3+REPW-RCCW STORE PARAMETER WORD
  13384. SX3 X3+20B
  13385. IX7 X7+X3
  13386. SA7 A1
  13387. JP B3 EXIT
  13388.  
  13389. REC5 BX7 X7-X7 CLEAR *OR*
  13390. SA7 A5
  13391. EQ MTRX EXIT
  13392.  
  13393. REC6 MX3 -36
  13394. BX1 -X3*X1
  13395. LX1 12
  13396. IX0 X0+X1
  13397. R= X2,NRQ INHIBIT ROLLOUT
  13398. EQ AQR ASSIGN QUEUE REQUEST
  13399.  
  13400.  
  13401. REC7 MX3 -12
  13402. SA4 A5-B1
  13403. LX3 12
  13404. BX3 -X3*X0 CBT ORDINAL PASSED IN *RECM* CALL
  13405. AX3 12-CBTLS
  13406. MX2 -5
  13407. TA3 X3+LSLK,CBT
  13408. LX4 -18
  13409. LX2 18
  13410. BX4 -X2*X4 CONTROL POINT NUMBER OF CALLER
  13411. BX3 -X2*X3 CONTROL POINT NUMBER FROM CBT ENTRY
  13412. R= X2,BQ SET BUFFER MANAGER RECALL QUEUE
  13413. BX4 X4-X3 COMPARE CONTROL POINT NUMBERS
  13414. ZR X4,AQR IF RECALL STILL SET FOR THIS JOB
  13415. BX7 X7-X7
  13416. SA6 A5-B1 RESET INPUT REGISTER
  13417. SA1 A5+2 RESTORE MB+4
  13418. SA7 A5 CLEAR OR
  13419. BX7 X1
  13420. SA7 A5+5
  13421. EQ MTRX RESTART PSEUDO-PP
  13422. REQM SPACE 4,25
  13423. *** REQM - REQUEST EQUIPMENT.
  13424. *
  13425. * REQUEST ASSIGNMENT OF EQUIPMENT TO JOB.
  13426. *
  13427. * ENTRY
  13428. *T, OR 12/ REQM,12/ EQ,12/ SF,12/ EJT,12/
  13429. * EQ EST ORDINAL (IF 4000B + EQ, EJT IS PRESENT).
  13430. * SF SUBFUNCTION.
  13431. * = REQS TO REQUEST ACTIVE NON-MS EQUIPMENT.
  13432. * = RDES TO REQUEST DOWN EQUIPMENT.
  13433. * = RVES TO ASSIGN ANY EQUIPMENT.
  13434. * EJT EJT ORDINAL TO ASSIGN EQUIPMENT TO.
  13435. *
  13436. * EXIT
  13437. *T, OR 12/ 0,12/ ST,12/,12/,12/
  13438. * ST .NE. 0 IF EQUIPMENT ASSIGNED.
  13439. * ST = 0 IF EQUIPMENT NOT AVAILABLE.
  13440. * COUNTER IN *EACW* INCREMENTED, IF EQUIPMENT ASSIGNED TO
  13441. * CALLER.
  13442. *
  13443. *
  13444. * HANG CONDITIONS -
  13445. *
  13446. * INCORRECT EST ORDINAL.
  13447. * INCORRECT SUBFUNCTION.
  13448.  
  13449.  
  13450. PPR REQM
  13451.  
  13452. LX5 24
  13453. MX2 -9
  13454. BX0 -X2*X5 EST ORDINAL
  13455. LX5 59-47-24
  13456. TX3 X0,-ESTL
  13457. PL X3,HNG IF INCORRECT EST ORDINAL
  13458. CX2 X0,EST CONVERT EST ORDINAL TO OFFSET
  13459. TA2 X2+EQDE,EST READ EST ENTRY
  13460. LX1 36
  13461. TX4 B7,-SCA
  13462. SA3 A2+B1
  13463. ERRNZ EQDE+1-EQAE CODE DEPENDS ON VALUE
  13464. MX0 -12
  13465. NG X5,REQ1 IF ALTERNATE EJT SPECIFIED
  13466. MX1 12
  13467. ZR X4,REQ1 IF PP AT SYSTEM CONTROL POINT
  13468. SA1 B7+TFSW GET JOB EJT
  13469. REQ1 LX1 12
  13470. BX1 -X0*X1 EJT ORDINAL
  13471. BX6 X1+X3 INSERT EQUIPMENT ASSIGNMENT
  13472. BX3 -X0*X3
  13473. NZ X3,PPR1 IF EQUIPMENT ALREADY ASSIGNED
  13474. LX5 47-59-24
  13475. BX4 -X0*X5 EXTRACT SUBFUNCTION
  13476. LX3 X2
  13477. SB3 X4-1 CHECK SUBFUNCTION
  13478. LX2 59-49
  13479. PL X2,REQ2 IF EQUIPMENT ON OR IDLE
  13480. NO
  13481. LX2 1
  13482. REQ2 GT B3,B1,HNG IF INVALID SUBFUNCTION
  13483. ERRNZ RVES-2 CODE DEPENDS ON VALUE
  13484. PL B3,REQ3 IF NOT *REQS*
  13485. ERRNZ REQS CODE DEPENDS ON VALUE
  13486. BX2 X3+X2
  13487. NO
  13488. NG X2,PPR1 IF EQUIPMENT MASS STORAGE AND/OR DOWN
  13489. REQ3 NZ B3,REQ4 IF NOT SUBFUNCTION *RDES*
  13490. ERRNZ RDES-1 CODE DEPENDS ON VALUE
  13491. PL X2,PPR1 IF EQUIPMENT NOT DOWN
  13492. REQ4 SX7 B1
  13493. LX5 24+59-47
  13494. SA6 A3 STORE EQUIPMENT ASSIGNMENT
  13495. LX7 36
  13496. NG X5,PPR1 IF ALTERNATE EJT SPECIFIED
  13497. SA1 B7+EACW UPDATE ASSIGNED EQUIPMENT COUNT
  13498. SX6 B1
  13499. LX6 48
  13500. IX6 X1+X6
  13501. SA6 A1
  13502. EQ PPR1 RETURN
  13503. RJSM SPACE 4,20
  13504. *** RJSM - REQUEST JOB SEQUENCE NUMBER.
  13505. *
  13506. * ASSIGN A JOB SEQUENCE NUMBER.
  13507. *
  13508. * ENTRY
  13509. *T, OR 12/ RJSM,12/ SF,1/ F,11/ TABLE,12/,12/
  13510. *T, MB 24/,36/ QFT ENTRY VALUE
  13511. * SF = 0 IF REQUESTING QFT ENTRY.
  13512. * IF SF = 0, F = 1 IF SYSTEM JOB CALL (RESERVED QFT ENTRY
  13513. * WILL BE ASSIGNED IF TABLE FULL).
  13514. * TABLE = *PQFT*.
  13515. *
  13516. * EXIT (SF = 0)
  13517. *T, OR RESPONSE FROM *MTRM*
  13518. *T, MB 24/ SEQUENCE NUMBER,36/ QFT ENTRY VALUE
  13519. *
  13520. * EXIT (SF .NE. 0)
  13521. *T, OR 12/ 0,12/ SF,12/ PQFT,24/ SEQUENCE NUMBER
  13522. *T, MB 24/ SEQUENCE NUMBER,36/ QFT ENTRY VALUE
  13523. *
  13524. * *RJSM* HAS BEEN SET UP TO ALLOW A SITE TO AVOID GENERATING
  13525. * POTENTIALLY OFFENSIVE JSN-S BY THE SELECTION OF CHARACTERS
  13526. * WHICH ARE TO BE EXCLUDED FROM EACH CHARACTER POSITION OF
  13527. * JSN-S (VOWELS, FOR EXAMPLE).
  13528.  
  13529.  
  13530. PPR RJSM
  13531.  
  13532. SA4 JSNL FETCH CURRENT SEQUENCE NUMBER
  13533. SA3 A5+B1
  13534. MX0 -24
  13535. BX4 -X0*X4
  13536. BX7 X0*X1
  13537. BX7 X7+X4
  13538. LX4 36
  13539. MX0 -36
  13540. BX6 -X0*X3
  13541. BX6 X4+X6
  13542. BX4 X0*X1 GET SUBFUNCTION
  13543. SA6 A3+ SET SEQUENCE NUMBER IN MB
  13544. NZ X4,RJS1 IF NOT REQUESTING QFT ENTRY
  13545. SB6 RJS1 SET *MTRM* RETURN ADDRESS
  13546. EQ MTM0 REQUEST QFT ENTRY
  13547.  
  13548. RJS1 SA1 JSNL ADVANCE JOB SEQUENCE NUMBER
  13549. MX0 -6
  13550. SA7 A5 WRITE OR
  13551. SA2 RJSA+3 FOURTH CHARACTER EXCLUSION MASK
  13552. SB5 B0+
  13553. RJS2 BX3 -X0*X1 GET CHARACTER
  13554. BX4 X0*X1
  13555. AX3 X3,B5
  13556. SB6 X3+B1 INCREMENT TO NEXT CHARACTER
  13557. RJS2.1 AX7 X2,B6
  13558. LX7 -1
  13559. PL X7,RJS3 IF USABLE CHARACTER
  13560. SB6 B6+B1 SKIP A CHARACTER
  13561. NZ X7,RJS2.1 IF NO OVERFLOW
  13562. LX0 6
  13563. SB6 1RA-1 RESET CHARACTER
  13564. SX5 B5-18
  13565. RJS2.2 SB6 B6+1
  13566. AX7 X2,B6
  13567. LX7 -1
  13568. NG X7,RJS2.2 IF EXCLUDED CHARACTER
  13569. SX7 B6
  13570. LX7 X7,B5
  13571. BX1 X4+X7
  13572. SB5 B5+6
  13573. SA2 A2-B1 NEXT EXCLUSION MASK
  13574. NZ X5,RJS2 IF NOT END OF SEQUENCE NUMBER
  13575. EQ RJS4 WRITE NEXT SEQUENCE NUMBER
  13576.  
  13577. RJS3 SX3 B6+
  13578. LX3 X3,B5
  13579. BX1 X3+X4
  13580. RJS4 BX6 X1
  13581. SA6 A1 WRITE NEXT SEQUENCE NUMBER
  13582. EQ PPRX EXIT
  13583.  
  13584.  
  13585. * DEFINE THE RANGE OF CHARACTERS ALLOWABLE IN EACH CHARACTER
  13586. * POSITION IN JSN-S BY SETTING THE FIRST AND SECOND PARAMETERS
  13587. * OF THE *JSNMASK* MACRO FOR THAT POSITION TO THE LOWEST AND
  13588. * HIGHEST ALLOWABLE CHARACTERS FOR THAT POSITION.
  13589. * THE FIRST PARAMETER MUST BE EQUAL TO OR HIGHER THAN *A*, AND
  13590. * THE SECOND PARAMETER MUST BE EQUAL TO OR LOWER THAN *9*.
  13591. * THE LOW AND HIGH DEFAULTS ARE *A* AND *9*, RESPECTIVELY.
  13592. *
  13593. * TO EXCLUDE A CHARACTER FROM USE IN A PARTICULAR CHARACTER
  13594. * POSITION IN JSN-S, ADD IT TO THE LIST IN THE THIRD PARAMETER
  13595. * OF THE *JSNMASK* MACRO FOR THAT POSITION. TO ALLOW A
  13596. * CHARACTER TO BE USED, OMIT OR REMOVE IT FROM THE LIST.
  13597. *
  13598. * NOTE - IF THE LETTER *A* IS TO BE EXCLUDED, IT WILL ALSO BE
  13599. * NECESSARY TO CHANGE THE INITIAL JSN, WHICH CAN BE FOUND AT
  13600. * LABEL *.JSN* IN THE DECK *SET*.
  13601.  
  13602.  
  13603. RJSA BSS 0 JSN CHARACTER EXCLUSION MASKS
  13604. JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 1ST CHARACTER MASK (X---)
  13605. JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 2ND CHARACTER MASK (-X--)
  13606. JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 3RD CHARACTER MASK (--X-)
  13607. JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 4TH CHARACTER MASK (---X)
  13608. RLMM SPACE 4,25
  13609. *** RLMM - REQUEST LIMIT.
  13610. *
  13611. * ENTRY
  13612. *T,OR 12/ RLMM,12/ FN,18/0,18/VL
  13613. *
  13614. * FN SUBFUNCTION CODE.
  13615. * RLCO CLEAR OVERFLOW FLAGS.
  13616. * RLIT INCREMENT TIME LIMIT.
  13617. * RLIS INCREMENT JOB STEP SRU LIMIT.
  13618. * RLJS START JOB STEP.
  13619. * RLTL SET TIME LIMIT
  13620. * RLSL SET SRU LIMIT
  13621. * RLIA INCREMENT ACCOUNT BLOCK SRU LIMIT.
  13622. *
  13623. * VL VALUE OF INCREMENT OR LIMIT REQUESTED
  13624. * EXIT
  13625. *
  13626. *T,OR 52/ 0,8/ OF FOR SUBFUNCTION RLCO
  13627. * OF OVERFLOW FLAGS IN SRUW BEFORE CLEARING.
  13628. *
  13629. *T,OR 48/ 0,12/ EF FOR SUBFUNCTIONS RLIT AND RLIS
  13630. *
  13631. * EF ERROR FLAG (0 IF NO ERRORS)
  13632. *
  13633. *T,OR 60/ 0 FOR SUBFUNCTION RLJS
  13634.  
  13635.  
  13636. PPR RLMM
  13637.  
  13638. MX3 -18 GET VALUE REQUESTED
  13639. SB3 PPR1 PRESET RETURN ADDRESS
  13640. BX5 -X3*X1
  13641. LX1 24 GET SUBFUNCTION NUMBER
  13642. SB4 X1-TRLML
  13643. MX0 -30
  13644. PL B4,HNG IF ILLEGAL PROCESSOR
  13645. JP TRLM+TRLML+B4 JUMP TO PROCESSOR
  13646.  
  13647.  
  13648. ** EXIT TO PROCESSOR WITH -
  13649. *
  13650. * (X0) = 30/-0,30/0
  13651. * (X3) = 42/-0,18/0
  13652. * (X5) = PARAMETER VALUE
  13653. * (B3) = RETURN ADDRESS
  13654.  
  13655. * SUBFUNCTION TABLE.
  13656.  
  13657. TRLM BSS 0
  13658. LOC 0
  13659.  
  13660. + SA2 B7+SRUW
  13661. EQ RLM1 (RLCO) - CLEAR OVERFLOW FLAGS
  13662.  
  13663. + SA1 B7+CPLW
  13664. EQ RLM2 (RLIT) - INCREMENT TIME LIMIT
  13665.  
  13666. + SA1 B7+STLW
  13667. EQ RLM3 (RLIS) - INCREMENT JOB STEP SRU LIMIT
  13668.  
  13669. + SA2 B7+SRUW
  13670. EQ RLM8 (RLJS) - START JOB STEP
  13671.  
  13672. + SA2 B7+CPJW (RLTL) - SET TIME LIMIT
  13673. EQ RLM11
  13674.  
  13675. + SA1 B7+SRJW (RLSL) - SET SRU LIMIT
  13676. EQ RLM12
  13677.  
  13678. + SA1 B7+STLW
  13679. EQ RLM16 (RLIA) - INCREMENT ACCOUNT BLOCK SRU LIMIT
  13680.  
  13681. TRLML BSS 0
  13682. LOC *O
  13683.  
  13684. * RETURN AND CLEAR OVERFLOW FLAGS
  13685.  
  13686.  
  13687. RLM1 MX3 -9
  13688. LX2 19
  13689. BX7 -X3*X2 ISOLATE FLAGS FOR CALLER
  13690. BX6 X3*X2 CLEAR FLAGS
  13691. LX6 41
  13692. SA6 A2
  13693. JP PPR1 EXIT
  13694.  
  13695. * INCREMENT TIME LIMIT.
  13696.  
  13697. RLM2 BX6 X1
  13698. SB4 RLM2.1 SET *MSB* RETURN ADDRESS
  13699. SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
  13700. EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
  13701.  
  13702. RLM2.1 SX2 1000 CONVERT INCREMENT TO MILLISECONDS
  13703. BX3 X6
  13704. IX5 X2*X5
  13705. SA4 B7+CPJW GET ACCUMULATOR AT JOB STEP START
  13706. SA1 B7+ALMW GET VALIDATION LIMIT
  13707. MX6 -6
  13708. BX4 -X0*X4 JOB START
  13709. LX6 30
  13710. LX4 8 RESTORE FIELD SIZE
  13711. IX3 X3+X5 REQUESTED NEW LIMIT
  13712. BX1 -X6*X1
  13713. BX6 X6+X1
  13714. ZR X6,STL IF UNLIMITED VALIDATION
  13715. LX1 -30+6+3 CONVERT AS COMCCVI BUT CONVERT TO SECONDS
  13716. SX6 X1+KTLI*10B (X6) = VALIDATION LIMIT IN SECONDS
  13717. IX6 X2*X6 CONVERT TO MILLISECONDS
  13718. IX6 X6+X4 VALIDATION LIMIT
  13719. IX1 X6-X3
  13720. PL X1,STL IF VALIDATION .GE. REQUESTED
  13721. SA1 A5-B1 CHECK FOR *1AJ* CALL
  13722. BX7 X3 SAVE NEW LIMIT
  13723. SA2 B7+EECW
  13724. LX1 18
  13725. BX3 X6 SET LIMIT TO VALIDATION LIMIT
  13726. SX6 B1+
  13727. LX6 48
  13728. SX1 X1-3R1AJ
  13729. NZ X1,RLM2.2 IF NOT A *1AJ* CALL
  13730. BX3 X7 SET LIMIT TO NEW LIMIT
  13731. BX6 X6+X2 SET VALIDATION EXTENDED FLAG
  13732. SA6 A2+
  13733. RLM2.2 SA1 B7+SRUW SET VALIDATION LIMIT FLAG
  13734. MX2 1
  13735. BX6 X1+X2
  13736. SA6 A1
  13737. EQ STL SET TIME LIMIT
  13738.  
  13739. * INCREMENT JOB STEP SRU LIMIT.
  13740.  
  13741. RLM3 MX2 -42 GET CURRENT COMPUTED LIMIT
  13742. BX4 -X2*X1
  13743.  
  13744. * CONVERT REQUESTED INCREMENT TO MICRO-UNITS*10.
  13745.  
  13746. SX1 10000000/200B
  13747. LX1 7
  13748. IX3 X1*X5 REQUESTED INCREMENT (MICRO-UNITS*10)
  13749. JP RLM13
  13750.  
  13751. * BEGIN JOB STEP.
  13752.  
  13753. RLM8 MX4 -59 CLEAR TIME LIMIT VALIDATION FLAG
  13754. BX6 -X4*X2
  13755. SA1 B7+MP3W ENSURE SRU ACCUMULATION ENABLED
  13756. SA6 A2
  13757. BX6 -X4*X1
  13758. SA6 A1
  13759. MX4 -42 ISOLATE SRU ACCUMULATOR
  13760. BX4 -X4*X2
  13761. SA1 B7+SRJW SET SRU AT JOB STEP START
  13762. BX2 X4
  13763. AX2 12
  13764. BX6 X0*X1 CLEAR OLD VALUE
  13765. BX6 X2+X6 INSERT NEW ONE
  13766. SA6 A1
  13767. SB3 RLM9 SET RETURN ADDRESS
  13768. LX1 30
  13769. MX6 -3
  13770. BX5 -X3*X1 JOB STEP LIMIT
  13771. BX6 -X6+X5 ADD LOWER THREE BITS FOR CHECK
  13772. BX1 X6+X3
  13773. SX3 -B1 PRESET UNLIMITED JOB STEP LIMIT
  13774. ZR X1,RLM13 IF UNLIMITED JOB STEP LIMIT
  13775. SX2 10000000/200B
  13776. MX3 -18 RESTORE MASK
  13777. LX2 7
  13778. SA1 B7+STLW GET ACCOUNT BLOCK LIMIT
  13779. LX1 18
  13780. BX1 -X3*X1
  13781. IX3 X2*X5 JOB STEP LIMIT (MICRO-UNITS*10)
  13782. IX6 X2*X1
  13783. IX6 X6-X4 ACCOUNT BLOCK LIMIT - ACCUMULATOR
  13784. IX5 X6-X3 REMAINING - NORMAL JOB STEP
  13785. PL X5,RLM13 IF ENOUGH IN ACCOUNT BLOCK FOR JOB STEP
  13786. BX3 X6 USE REMAINING AS JOB STEP LIMIT
  13787. PL X6,RLM13 IF NOT OVER ACCOUNT BLOCK LIMIT
  13788. R= X3,TSLI ALLOW USER TO RAISE LIMIT
  13789. IX3 X3*X2 CONVERT TO MICRO-UNITS*10
  13790. EQ RLM13 SET SRU LIMIT
  13791.  
  13792. RLM9 SA4 B7+CPTW GET CP ACCUMULATOR
  13793. BX6 X4
  13794. SB4 RLM9.1 SET *MSB* RETURN ADDRESS
  13795. SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
  13796. EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
  13797.  
  13798. RLM9.1 BX4 X6
  13799. MX2 30
  13800. SA1 B7+CPJW SET TIME AT JOB STEP START
  13801. AX6 8
  13802. BX2 X2*X1
  13803. BX6 X6+X2
  13804. SA6 A1+
  13805. MX3 -18 GET JOB STEP TIME LIMIT
  13806. AX1 30
  13807. BX5 -X3*X1
  13808. BX1 X3-X5
  13809. SB3 .RCPM *STL* RETURN ADDRESS
  13810. ZR X1,STL IF LIMIT INDEFINITE
  13811. RLM10 SX2 1000 CONVERT LIMIT VALUE TO MILLISECONDS
  13812. IX5 X2*X5
  13813. IX3 X4+X5 NEW COMPUTED TIME LIMIT IN MILLISECONDS
  13814. JP STL SET TIME LIMIT
  13815.  
  13816. * SET TIME LIMIT.
  13817.  
  13818. RLM11 LX2 30
  13819. BX1 X3*X2 CLEAR OLD VALUE
  13820. BX6 X1+X5 INSERT NEW LIMIT VALUE
  13821. LX6 30
  13822. SA6 A2
  13823. BX1 X3-X5
  13824. ZR X1,STL IF INDEFINITE
  13825. BX4 -X0*X6
  13826. LX4 8
  13827. JP RLM10
  13828.  
  13829. * SET SRU LIMIT.
  13830.  
  13831. RLM12 BX4 -X0*X1 SRU ACCUMULATOR AT JOB STEP START
  13832. LX4 12 RESTORE 42 BIT VALUE
  13833. LX1 30
  13834. BX1 X3*X1 CLEAR OLD VALUE
  13835. SX2 10000000/200B
  13836. BX6 X1+X5 INSERT NEW VALUE
  13837. BX1 X3-X5 CHECK FOR INDEFINITE REQUEST
  13838. LX6 30
  13839. SA6 A1+
  13840. ZR X1,RLM13 IF INDEFINITE
  13841. LX2 7
  13842. IX3 X2*X5 CONVERT TO MICRO-UNITS*10
  13843.  
  13844. * SET SRU LIMIT, CLEAR LIMIT FLAGS.
  13845. * (X3) = INCREMENT (MICRO-UNITS*10).
  13846. * (X4) = ACCUMULATOR (MICRO-UNITS*10).
  13847.  
  13848. RLM13 SA2 B7+FPFW GET SRU VALIDATION LIMIT
  13849. MX1 -12
  13850. LX2 11-47
  13851. BX2 -X1*X2
  13852. SX0 B0+ CLEAR SRU VALIDATION LIMIT FLAG
  13853. BX5 -X1-X2
  13854. SX1 10000000/200B
  13855. MX6 42
  13856. LX1 7 MULTIPLY BY 200B
  13857. LX6 -18 PRESET UNLIMITED SRU VALIDATION
  13858. ZR X5,RLM14 IF SRU VALIDATION UNLIMITED
  13859. LX2 6 CONVERT VALIDATION TO SRU-S
  13860. SX6 KSLI*10B-KSLI*10B/100B*100B APPLY REST OF SRU FORMULA
  13861. IX2 X6+X2 VALIDATION IN SRU-S
  13862. IX6 X1*X2 CONVERT TO MICRO-UNITS*10
  13863. IX2 X3+X4 ADD INCREMENT TO LIMIT
  13864. IX1 X6-X2 VALIDATION LIMIT - REQUESTED LIMIT
  13865. PL X1,RLM14 IF WITHIN ALLOWED RANGE
  13866. SA1 A5-B1 CHECK FOR *1AJ* CALL
  13867. LX1 18
  13868. SX1 X1-3R1AJ
  13869. MX0 1 SET SRU VALIDATION LIMIT FLAG
  13870. ZR X1,RLM14 IF *1AJ* ALLOW FULL INCREMENT
  13871. IX3 X6-X4 USE REMAINING VALIDATION AMOUNT
  13872. RLM14 LX0 57-59
  13873. SA1 B7+STLW SET NEW JOB STEP SRU LIMIT
  13874. MX2 18 USED FOR LOW ORDER 42-BIT FIELD
  13875. BX2 X2*X1 CLEAR OLD VALUE
  13876. PL X3,RLM15 IF NOT INFINITE
  13877. IX3 X6-X4 COMPUTE REMAINING VALIDATION AMOUNT
  13878. RLM15 IX5 X3+X4 NEW SRU LIMIT
  13879. BX6 X5+X2 INSERT NEW VALUE
  13880. SA6 A1
  13881. MX5 2
  13882. SA1 B7+SRUW CLEAR SRU LIMIT FLAG
  13883. LX5 57-59
  13884. BX6 -X5*X1
  13885. BX6 X6+X0 CONDITIONAL SET SRU VALIDATION LIMIT FLAG
  13886. SA6 A1
  13887. JP B3
  13888.  
  13889. * INCREMENT ACCOUNT BLOCK SRU LIMIT.
  13890.  
  13891. RLM16 MX2 18
  13892. SX3 10000000/200B
  13893. BX0 X2*X1 EXTRACT ACCOUNT BLOCK SRU LIMIT
  13894. LX3 7
  13895. BX4 -X2*X1 EXTRACT COMPUTED JOB STEP SRU LIMIT
  13896. BX0 -X2+X0
  13897. IX3 X3*X5 REQUESTED INCREMENT (MICRO-UNITS*10)
  13898. ZR X0,RLM13 IF ACCOUNT BLOCK SRU UNLIMITED
  13899. LX5 -18
  13900. IX6 X5+X1 ADD REQUESTED INCREMENT TO LIMIT
  13901. SA6 A1 UPDATE ACCOUNT BLOCK SRU LIMIT
  13902. EQ RLM13 SET SRU LIMIT
  13903. ROCM SPACE 4,35
  13904. ** ROCM - ROLLOUT JOB.
  13905. *
  13906. * ENTRY
  13907. *T, OR 12/ ROCM,1/C,11/ OP,12/ CPN,24/
  13908. * C = 1, IF JOB AT CP/PCP *CPN* TO BE ROLLED.
  13909. * C = 0, IF CP TO WHICH PP IS ASSIGNED TO BE ROLLED. IF AN
  13910. * ALTERNATE CP ASSIGNMENT IS IN EFFECT, THE ALTERNATE CP
  13911. * WILL BE USED. ROLLOUT OF A PCP MUST BE REQUESTED WITH
  13912. * *C = 1* (ALTERNATE PCP ASSIGNMENT WILL NOT BE
  13913. * PROCESSED WITH *C = 0*).
  13914. * OP BIT SELECTION(S) SPECIFYING OPTION(S) REQUESTED
  13915. * (DEFINED IN *COMSCPS*).
  13916. * *ROTE* = BIT 36 SET = TIMED/EVENT ROLLOUT FLAG TO
  13917. * BE SET IN *STSW*.
  13918. * *RODS* = BIT 37 SET = DISABLE JOB FLAG TO BE SET
  13919. * IN *STSW*.
  13920. * *ROSC* = BIT 38 SET = SCP ROLLOUT FLAG TO BE SET
  13921. * IN *STSW*.
  13922. * *ROSU* = BIT 39 SET = SUSPEND JOB FLAG TO BE SET
  13923. * IN *STSW*.
  13924. * *ROPR* = BIT 40 SET = ROLL JOB TO PSEUDO-CONTROL
  13925. * POINT IF POSSIBLE.
  13926. * CPN CP/PCP NUMBER OF JOB TO BE ROLLED IF *C* SELECTED.
  13927. *
  13928. *T, MB 24/,12/ T,12/ EQ,12/ EV
  13929. * T TIMED/EVENT ROLLOUT TIME.
  13930. * EQ TIMED/EVENT EST ORDINAL.
  13931. * EV TIMED/EVENT EVENT DESCRIPTOR.
  13932. * MESSAGE BUFFER PARAMETERS ARE MEANINGFUL ONLY WHEN THE *ROTE*
  13933. * OPTION IS SELECTED.
  13934. *
  13935. * EXIT
  13936. *T, OR 12/ 0,12/ ST,36/
  13937. * ST = 0 IF FUNCTION ACCEPTED, OTHERWISE NON-ZERO.
  13938. *
  13939. * HANG CONDITIONS -
  13940. * INVALID CONNECTION STATUS IN EJT ENTRY.
  13941. * SELECTED ROLLOUT OPTIONS ARE INVALID DUE TO THE JOB-S
  13942. * CONNECTION STATUS.
  13943.  
  13944.  
  13945. ERRNZ ROSR CHECK SCHEDULER ROLLOUT BIT
  13946. ERRNZ ROTE-1 CHECK TIMED/EVENT ROLLOUT BIT
  13947. ERRNZ RODS-2 CHECK DISABLE JOB BIT
  13948. ERRNZ ROSC-4 CHECK SCP ROLLOUT BIT
  13949. ERRNZ ROSU-10B CHECK SUSPEND JOB BIT
  13950. ERRNZ ROPR-20B CHECK PSEUDO-ROLL BIT
  13951.  
  13952.  
  13953. PPR ROCM
  13954.  
  13955. * CHECK CP/PCP NUMBER SPECIFIED, DUAL CPU ACTIVITY, AND JOB
  13956. * PRESENT AT CP/PCP.
  13957.  
  13958. BX7 X1
  13959. LX7 59-47
  13960. PL X7,ROC0.1 IF CP/PCP NOT SPECIFIED BY CALLER
  13961. LX7 59-35-59+47
  13962. AX7 48 SPECIFIED CP/PCP NUMBER
  13963. LX7 7
  13964. TB5 X7-200B,-SCA
  13965. SB7 X7+ CP ADDRESS
  13966. LT B5,ROC0.1 IF CP SPECIFIED
  13967. TB7 B5,PCPA SET PCP ADDRESS
  13968. ROC0.1 SA3 B7+TFSW GET EJT ORDINAL
  13969. BX7 X1 SET REJECT STATUS
  13970. MX0 -12
  13971. LX3 -48
  13972. BX3 -X0*X3
  13973. SB6 ROC0.2 SET *CPE* RETURN ADDRESS
  13974. ZR X3,PPR1 IF NO JOB PRESENT
  13975. TNO /DCP/CPE,DCP IF DUAL CPU PRESENT
  13976.  
  13977. * GET JOB STATE AND CONNECTION STATUS AND PROCESS TIMED/EVENT
  13978. * PARAMETERS.
  13979.  
  13980. ROC0.2 SB4 TROCL
  13981. CX6 X3,EJT CONVERT EJT ORDINAL INTO OFFSET
  13982. TA3 X6+JSNE,EJT
  13983. MX4 -11
  13984. BX3 -X4*X3
  13985. SA4 B7+TERW
  13986. LX3 -7
  13987. BX6 X4
  13988. LX5 59-36
  13989. SB6 X3+ CONNECTION STATUS
  13990. MX1 30
  13991. PL X5,ROC1 IF NOT TIMED/EVENT ROLLOUT
  13992. SA2 A5+1 GET TIMED/EVENT PARAMETERS
  13993. BX4 X1*X4 CLEAR OLD TIMED/EVENT DATA
  13994. MX6 -24
  13995. BX6 -X6*X2 ISOLATE EST ORDINAL AND EVENT DESCRIPTOR
  13996. AX2 24
  13997. BX2 -X0*X2 ISOLATE TIME
  13998. LX2 21
  13999. BX6 X2+X6 MERGE TIME, EST ORDINAL AND EVENT
  14000. BX6 X4+X6 MERGE TIMED/EVENT DATA INTO *TERW*
  14001.  
  14002. * VALIDATE ROLLOUT OPTION FOR CURRENT CONNECTION STATUS.
  14003.  
  14004. ROC1 SA2 B6+TROC
  14005. SX1 EXJS*2
  14006. LX5 59-47-59+36
  14007. AX3 59-6
  14008. BX4 X1-X3
  14009. BX2 X2*X5
  14010. SX1 PCJS*2
  14011. BX3 X1-X3
  14012. MX1 1
  14013. NZ X2,HNG IF INVALID OPTION
  14014. GE B6,B4,HNG IF INVALID CONNECTION STATUS
  14015. PL X5,ROC3 IF CP/PCP NOT SPECIFIED BY CALLER
  14016.  
  14017. * CHECK FOR JOB CONDITIONS INHIBITING ROLLOUT IF CALLER
  14018. * SPECIFIED CP/PCP.
  14019.  
  14020. SB3 PPRX SET *RPC* EXIT ADDRESS
  14021. ZR X4,ROC2 IF *EXJS* AND NOT ADVANCING/INTERLOCKED
  14022. NZ X3,PPR1 IF NOT *PCJS* OR ADVANCING/INTERLOCKED
  14023. ROC2 SA3 CMCL CHECK FOR MOVE IN PROGRESS
  14024. BX2 X5
  14025. LX3 -48
  14026. LX2 -24-59+47
  14027. BX4 X3-X2
  14028. BX4 -X0*X4
  14029. BX3 -X0*X2
  14030. ZR X4,PPR1 IF CP/PCP MOVING
  14031. SA1 B7+JCIW CHECK FOR ROLLOUT INHIBITED
  14032. LX1 59-39
  14033. NG X1,PPR1 IF *CPUPFM* ACTIVE
  14034. TB4 B7,-SCA
  14035. SB4 -B4
  14036. SX7 B0+
  14037. SB6 B1 SET *RPC* ENTRY CONDITION
  14038.  
  14039. * INITIATE ROLLOUT OF PCP.
  14040.  
  14041. ROC3 TA1 STSW,SCA CHECK FOR AVAILABLE RECALL SLOT
  14042. PL B4,ROC3.1 IF NOT PCP ROLL
  14043. MX4 -4
  14044. BX4 -X4*X1
  14045. ZR X4,PPR1 IF NO RECALL SLOTS AVAILABLE
  14046. ROC3.1 SA6 A4 UPDATE *TERW*
  14047. PL B4,ROC4 IF NOT PCP ROLL
  14048. SA7 A5 RELEASE CALLING PP
  14049. SB4 B7 PCPA ADDRESS FOR *RPC*
  14050. SB5 X3 PCP NUMBER
  14051. TEQ (/PCP/RPC,PCP,/MONITOR/HNG) IF PCP ROLL
  14052.  
  14053. * CPUCIO ENTRY FOR DETACHED INTERACTIVE I/O.
  14054. * (B6) = -1.
  14055. * (X5) = ROLLOUT CONTROL OPTIONS.
  14056.  
  14057. ROC4 SA1 B7+STSW
  14058. SX0 B1+ CLEAR EXISTING PSEUDO-ROLLOUT ALLOWED FLAG
  14059. LX0 31-0
  14060. BX1 -X0*X1
  14061. MX0 3 EXTRACT CPU STATUS
  14062. BX6 X1
  14063. BX3 X0*X1
  14064. AX6 24 EXTRACT CURRENT ROLLOUT STATUS
  14065. MX0 -2
  14066. BX0 -X0*X6
  14067. MX2 5
  14068. BX6 -X0
  14069. NZ X0,ROC5 IF ROLLOUT REQUESTED ALREADY SET
  14070. MX6 -1
  14071. ZR X3,ROC5 IF NULL STATUS
  14072. MX6 -2
  14073. ROC5 LX6 24
  14074. LX0 59-0
  14075. BX6 -X6+X1
  14076. BX0 X2*X0
  14077. LX5 59-40-59+47
  14078. BX2 X2*X5 GET ROLLOUT FLAGS
  14079. MX4 -4
  14080. BX2 -X0*X2 DISALLOW PSEUDO-ROLL IF MULTIPLE *ROCM*-S
  14081. LX2 31-59
  14082. BX6 X6+X2
  14083. SA6 A1+
  14084. LX1 -4
  14085. BX3 -X4*X1 REQUESTS IN PQ, RQ, BQ, CQ PLUS TAPES
  14086. LX1 -4
  14087. BX0 -X4*X1 REQUESTS IN BQ AND CQ
  14088. IX3 X3-X0 REQUESTS IN PQ, RQ, AND TAPE ACTIVITY
  14089. ZR X3,ROC11 IF NO REQUESTS IN PQ OR RQ
  14090. MX0 -7
  14091. SX3 RQRL
  14092. MX4 -12
  14093. SB4 B0
  14094.  
  14095. * DELETE REQUESTS FROM RQ AND PQ.
  14096.  
  14097. ROC6 ZR X3,ROC10 IF END OF QUEUE
  14098. SA2 X3 READ NEXT QUEUE ENTRY
  14099. BX3 -X4*X2
  14100. ROC7 BX5 X0*X3
  14101. SB5 X5
  14102. NE B5,B7,ROC6 IF NOT THIS CP
  14103. SA1 X3 READ NEXT ENTRY
  14104. NZ B4,ROC9 IF PROCESSING PQ
  14105. LX1 12
  14106. BX6 -X4*X1
  14107. SX6 X6-PTRF
  14108. LX1 -12
  14109. ZR X6,ROC6 IF ROLLOUT INHIBITED
  14110. BX2 X4*X2 DELINK ENTRY FROM SYSTEM-WIDE QUEUE
  14111. BX3 -X4*X1
  14112. ROC8 BX6 X3+X2
  14113. SA6 A2
  14114. EQ ROC7 CONTINUE
  14115.  
  14116. ROC9 BX6 X4*X1
  14117. NZ X6,ROC6 IF PRIORITY PP REQUEST
  14118. BX2 X4*X2 DELINK ENTRY FROM SYSTEM-WIDE QUEUE
  14119. BX3 -X4*X1
  14120. EQ ROC8 COMPLETE PROCESS
  14121.  
  14122. ROC10 SX3 PQRL
  14123. SB4 B4+1
  14124. EQ B4,B1,ROC6 IF PQ NOT PROCESSED
  14125. ROC11 SX5 B0 SET NO CLEAR OF ROLLOUT CPU STATUS
  14126. NG B6,.DCPM IF *CPUCIO* REQUEST
  14127. SB6 B1 SET TO CLEAR OUTPUT REGISTER
  14128. EQ .DCPM DROP CPU
  14129. SPACE 4,10
  14130. * THE FOLLOWING TABLE CONTAINS AN ENTRY FOR EACH CONNECTION
  14131. * STATUS. EACH ENTRY INDICATES WHAT ROLLOUT CONTROL OPTIONS
  14132. * ARE INVALID FOR JOBS HAVING THE CORRESPONDING CONNECTION
  14133. * STATUS. THE OPTION IS INVALID IF THE FLAG IS SET.
  14134.  
  14135. TROC BSS 0
  14136.  
  14137. VFD 12/ROSU+RODS,48/0 CONNECTION STATUS = *NICS*
  14138. VFD 12/RODS,48/0 CONNECTION STATUS = *DTCS*
  14139. VFD 12/0,48/0 CONNECTION STATUS = *OLCS*
  14140.  
  14141. TROCL EQU *-TROC MAXIMUM CONNECTION STATUS + 1
  14142. ERRNZ TROCL-MXCS ERROR IN TABLE DEFINITION
  14143. RPNM SPACE 4,30
  14144. *** RPNM - READ P REGISTER/BREAKPOINT.
  14145. *
  14146. * READ P REGISTER.
  14147. *
  14148. * ENTRY
  14149. *T, OR 12/ RPNM,30/,18/ 0
  14150. *
  14151. * EXIT
  14152. *T, OR 12/ 0,12/ STAT,12/ CP,24/ P
  14153. *
  14154. * STAT BYTE 0 OF STSW OF THE ACTIVE JOB.
  14155. * CP CONTROL POINT NUMBER OF JOB CURRENTLY ACTIVE ON
  14156. * CPU-0 (UNLESS ASSIGNED JOB IS ACTIVE).
  14157. * P PROGRAM ADDRESS OF ACTIVE JOB.
  14158. *
  14159. * BREAKPOINT.
  14160. *
  14161. * ENTRY
  14162. *T, OR 12/ RPNM,30/ 0,18/ BA
  14163. *
  14164. * BA BREAKPOINT ADDRESS.
  14165. *
  14166. * EXIT
  14167. *T, OR 12/ 0,3/ ST,33/ 0,12/ RV
  14168. *
  14169. * BA IS COMPARED TO THE PROGRAM COUNTER OF THE JOB TO
  14170. * WHICH THE CALLING PP IS ASSIGNED.
  14171. *
  14172. * ST = 0 IF COMPARISON FAILS.
  14173. * ST = CPU STATUS FROM *STSW* IF COMPARISON SUCCEEDS.
  14174. * RV = 1 IF COMPARISON FAILS.
  14175. * RV = 0 IF COMPARISON SUCCEEDS.
  14176.  
  14177.  
  14178. PPR RPNM,,,DCP
  14179.  
  14180. SA3 CPAL+A0 ACTIVE JOB
  14181. SA2 B2 PROGRAM COUNTER OF ACTIVE XP
  14182. AX3 24
  14183. NZ X1,RPN1 IF BREAKPOINT REQUEST
  14184. SA1 X3+STSW CONTROL POINT-S STATUS
  14185. AX2 36 CURRENT PROGRAM COUNTER
  14186. LX3 24 ACTIVE EXCHANGE PACKAGE
  14187. BX2 X3+X2
  14188. MX4 12
  14189. BX1 X4*X1 EXTRACT CONTROL POINT STATUS
  14190. LX1 -12
  14191. BX7 X1+X2 FORM RESPONSE
  14192. EQ PPR1 RETURN
  14193.  
  14194. RPN1 SB5 X3 CP ASSIGNED TO CPU-0
  14195. EQ B5,B7,RPN2 IF JOB IS EXECUTING
  14196. SA2 B7 GET PROGRAM COUNTER FROM CP AREA
  14197. RPN2 SA3 B7+STSW CONTROL POINT STATUS
  14198. AX2 36
  14199. BX0 X2-X1 COMPARE PROGRAM COUNTER TO BA
  14200. LX3 59-56
  14201. SX7 B1 PRESET COMPARISON FAILED
  14202. NG X3,PPR1 IF SUBCONTROL POINT ACTIVE
  14203. NZ X0,PPR1 IF PROGRAM COUNTER DOES NOT MATCH BA
  14204. EQ .DCPM DROP THE CPU
  14205. RPPM SPACE 4,30
  14206. *** RPPM - REQUEST PPU TO BE ASSIGNED.
  14207. *
  14208. * ENTRY
  14209. *T, OR 12/ RPPM, 8/, 1/A, 1/S, 1/D, 1/P, 36/
  14210. *T, MB 60/ IR
  14211. *T, MB+1 1/Q,59/ PAR
  14212. *
  14213. * IR INPUT REGISTER OF PP, CONTROL POINT NEED NOT BE SET.
  14214. * P PP PRIORITY REQUEST.
  14215. * D IF SET, DROP PP.
  14216. * S IF SET, SPECIAL *1VP* REQUEST FOR PARTNER PP-S.
  14217. * THIS REQUEST MUST ALSO BE A PRIORITY REQUEST.
  14218. * A IF SET, ASSIGN PP TO SYSTEM CONTROL POINT.
  14219. * Q RECALL FLAG, SET BY *CPUMTR* WHEN CALL IS QUEUED.
  14220. * PAR PARAMETER DATA TO BE PASSED TO ASSIGNED PP IN *MB*.
  14221. *
  14222. * EXIT
  14223. *T, OR 12/ 0, 12/ ST, 12/ ST2, 24/
  14224. * ST = ADDRESS OF ASSIGNED PPU-S INPUT REGISTER.
  14225. * ST = ADDRESS OF REQUEST IN RECALL STACK IF NOT ASSIGNED.
  14226. * ST = 0 IF RECALL STACK FULL.
  14227. * ST = 0 IF PRIORITY REQUEST AND NO PP AVAILABLE.
  14228. * ST = 1 IF *CIO* REQUEST PROCESSED.
  14229. * ST2 = ADDRESS OF SECOND ASSIGNED PP-S INPUT REGISTER, IF
  14230. * PARTNER PAIR ASSIGNED FOR SPECIAL *1VP* REQUEST.
  14231. *
  14232. * NOTE -
  14233. * THE AUTO RECALL BIT IN THE CALLING PP-S INPUT
  14234. * REGISTER IS PROPAGATED TO THE RECALLED REQUEST
  14235. * AND THE AUTO RECALL BIT IS REMOVED FROM THE
  14236. * CALLING PP-S INPUT REGISTER, IF THE DROP-PP
  14237. * OPTION IS SET.
  14238. *
  14239. * A REJECT STATUS WILL BE RETURNED ON A PRIORITY PP REQUEST
  14240. * IF THERE IS CURRENTLY A PRIORITY REQUEST IN THE QUEUE.
  14241. * THIS LIMITS THE NUMBER OF PRIORITY REQUESTS IN THE QUEUE
  14242. * TO ONE, WHICH WILL ALWAYS BE AT THE TOP, AND WILL BE THE
  14243. * NEXT ENTRY TO BE PROCESSED WHEN A PP BECOMES AVAILABLE.
  14244. * THE PRIORITY PP REQUEST OPTION IS MEANT TO BE USED
  14245. * ONLY BY PP-S THAT REQUIRE KNOWLEDGE OF THE PP TO WHICH
  14246. * ITS REQUEST WAS ASSIGNED (SUCH AS *DSD*, *1MT*, ETC.).
  14247. * USAGE OF THIS OPTION FOR OTHER PURPOSES WILL SERIOUSLY
  14248. * IMPACT PERFORMANCE, AND MAY CAUSE SYSTEM DEADLOCK.
  14249. *
  14250. * * PP HUNG.* WILL OCCUR IF MB = 0.
  14251.  
  14252.  
  14253. PPR RPPM
  14254.  
  14255.  
  14256. * NOTE - THIS SWITCH LOGIC IS ALSO USED IN THE *DCP* BLOCK.
  14257.  
  14258. LX5 59-39
  14259. TX4 A5-1,-SP
  14260. PL X5,RPP0.1 IF NOT FORCED CP ASSIGNMENT
  14261. TB7 SCA SET SYSTEM CONTROL POINT
  14262. RPP0.1 ZR X4,RPP1 IF PSEUDO PP CALL
  14263. TB4 B7,-SCA
  14264. ZR B4,RPP1 IF REQUEST FOR SYSTEM CONTROL POINT
  14265. SB4 A0-CPAL-1
  14266. SA4 -B4
  14267. AX4 24
  14268. SB4 X4+
  14269. NE B4,B7,RPP1 IF NO CPU SWITCH REQUIRED
  14270. TNO /DCP/SAX,DCP
  14271. RPP1 SA4 A5+B1 READ REQUEST
  14272. LX1 59-36
  14273. SB3 RPP7 *APQ* *ACQ* RETURN ADDRESS
  14274. ZR X4,HNG IF PP CALL ZERO
  14275. SB4 B0+ PRESET REQUEST TO BE QUEUED
  14276. PL X1,RPP2 IF NOT PRIORITY PP REQUEST
  14277. SB4 -1 PRESET NO QUEUEING
  14278. RPP2 LX1 36-37
  14279. PL X1,RPP4 IF NO DROP PP
  14280. SX7 B1
  14281. SB3 .DPPM *APQ* *ACQ* RETURN ADDRESS
  14282. SA1 A5-B1 READ INPUT REGISTER
  14283. LX7 41
  14284. BX5 X7*X1 PROPAGATE AUTO RECALL STATUS
  14285. BX4 X4+X5
  14286. BX6 -X7*X1 CLEAR AUTO RECALL BIT FROM *IR*
  14287. SA6 A1
  14288. RPP4 SA1 B7+STSW FETCH CP STATUS WORD
  14289. MX0 -4
  14290. BX6 X4
  14291. LX1 -4
  14292. LX4 18
  14293. BX2 -X0*X1 RECALL COUNT
  14294. LX1 4-48
  14295. BX3 -X0*X1 PP COUNT
  14296. LX1 48-60+59-24
  14297. NZ X7,RPP5 IF DROP OPTION
  14298. TB5 B7,-SCA
  14299. SX0 X2-NPPCP-1
  14300. ZR B5,RPP5 IF SYSTEM CONTROL POINT
  14301. NO
  14302. IX0 X0+X3
  14303. RPP5 PL X0,PPR1 IF LIMIT OF PP-S
  14304. NG X1,RPP10 IF ROLLOUT REQUESTED
  14305. RPP6 SX3 X4-3RCIO
  14306. ZR X3,RPP8 IF *CIO* REQUEST
  14307. SA3 A5+2 MB+1 TO MB
  14308. BX7 X3
  14309. SA7 APQA
  14310. SX3 X4-3R1VP
  14311. NZ X3,APQ IF NOT *1VP* REQUEST
  14312. SA2 A5 CHECK FOR SPECIAL REQUEST
  14313. LX2 59-38
  14314. TNG X2,(/NVE/AVP,NVE,/MONITOR/HNG) IF SPECIAL REQUEST
  14315. EQ APQ ASSIGN PP
  14316.  
  14317. RPP7 ZR X1,RPP9 IF NO PP ASSIGNED AND PRIORITY REQUEST
  14318. BX7 X1 RETURN ASSIGNMENT ADDRESS
  14319. LX7 36
  14320. SA7 A5 STORE *OR*
  14321. EQ MTRX RETURN
  14322.  
  14323. RPP8 SA4 A5+2 SET MESSAGE BUFFER
  14324. SA6 /CPUCIO/IR SET IR
  14325. BX7 X4
  14326. SA7 A6+B1 CLEAR MB
  14327. ERRNZ /CPUCIO/MB-/CPUCIO/IR-1
  14328. EQ /CPUCIO/CPC PROCESS *CIO* REQUEST
  14329.  
  14330. RPP9 BX7 X7-X7
  14331. NG X1,PPR1 IF REJECT ON STORAGE MOVE
  14332. MX0 -18 CHECK FOR PRIORITY REQUEST PENDING
  14333. SA2 PQRL
  14334. SA2 X2
  14335. AX2 18
  14336. BX2 -X0*X2
  14337. NZ X2,PPR1 IF REQUEST ALREADY PENDING
  14338. SB3 MTRX *AQR* RETURN ADDRESS
  14339. SX2 PRP
  14340.  
  14341. * NOTE - PARAMETER WORD IS NOT SAVED IN *REPW*.
  14342.  
  14343. EQ AQR ASSIGN QUEUE REQUEST
  14344.  
  14345. * PUT REQUEST IN CONTROL POINT AREA IF ROLLOUT SET.
  14346.  
  14347. RPP10 TX3 A5-1,-SP
  14348. ZR X3,RPP6 IF PSEUDO-PP REQUESTING
  14349. SX3 X4-3R1AJ
  14350. ZR X3,RPP6 IF *1AJ*
  14351. NG B4,RPP9 IF PRIORITY PP REQUEST
  14352. LX1 24-59
  14353. MX0 -4
  14354. BX4 -X0*X1 NEXT FREE RECALL SLOT
  14355. SB4 B7+RCCW-1
  14356. BX7 X0*X1
  14357. SA3 B4+X4 READ NEXT FREE RECALL SLOT
  14358. SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
  14359. SA4 A5+2 GET MB+1
  14360. SX3 X3+20B
  14361. MX6 1
  14362. IX7 X7+X3
  14363. BX6 X6+X4 SET RECALL FLAG
  14364. SA7 A1 UPDATE STSW
  14365. SA6 A3+REPW-RCCW STORE PARAMETER WORD
  14366. SX1 A3 SET ASSIGNMENT ADDRESS
  14367. JP B3 COMPLETE PROCESSING
  14368. RSJM SPACE 4
  14369. *** RSJM - REQUEST JOB SCHEDULER.
  14370. *
  14371. * ENTRY
  14372. *T, OR 12/ RSJM, 12/,10/,1/R,1/F,12/,12/
  14373. * R IF SET, RESET THE RECALL CYCLE.
  14374. * F IF SET, QFT/EJT SCHEDULING SHOULD BE PERFORMED.
  14375. *
  14376. * EXIT
  14377. *T, OR 60/ 0
  14378.  
  14379.  
  14380. PPR RSJM
  14381.  
  14382. * SET QFT/EJT SCHEDULING FLAG IN SCHEDULER CALL IF SET IN
  14383. * *RSJM* REQUEST.
  14384.  
  14385. SA7 A5 CLEAR OUTPUT REGISTER
  14386. SX0 B1
  14387. SA1 SJSA
  14388. LX0 24-0
  14389. BX6 X0*X5
  14390. BX6 X6+X1
  14391. SA6 A1
  14392. LX0 25-24
  14393. BX6 -X5*X0 ISOLATE FORCED RESET FLAG
  14394. NZ X6,SJS IF FORCED RESET NOT SPECIFIED
  14395. ERRNZ SJSB-SJSA-1 CODE ASSUMES *SJSB* = *SJSA* + 1
  14396. SA6 A6+B1
  14397. EQ SJS
  14398. RTCM SPACE 4,105
  14399. *** RTCM - REQUEST TRACK CHAIN.
  14400. *
  14401. * ENTRY
  14402. *T, OR 12/RTCM, 1/C, 2/, 9/ EQ, 12/ TK, 1/ A, 2/, 3/ AL, 18/ SC
  14403. * C SET CHECKPOINT UPON FUNCTION COMPLETION.
  14404. * EQ EST ORDINAL.
  14405. * IF EQ IS ZERO TK BYTE CONTAINS SELECTION PARAMETER.
  14406. * TK CURRENT TRACK IF EQ IS NON-ZERO
  14407. * TK DEVICE SELECTION PARAMETER AS FOLLOWS. (EQ IS ZERO)
  14408. * 0 = TMPS = SELECT TEMP DEVICE.
  14409. * 1 = INPS = SELECT INPUT FILE DEVICE.
  14410. * 2 = OUTS = SELECT OUTPUT FILE DEVICE.
  14411. * 3 = ROLS = SELECT ROLLOUT DEVICE.
  14412. * 4 = DAYS = SELECT USER DAYFILE DEVICE.
  14413. * 5 = PRIS = SELECT PRIMARY FILE DEVICE.
  14414. * 6 = LOCS = SELECT LOCAL FILE DEVICE.
  14415. * 7 = LGOS = SELECT LGO FILE DEVICE.
  14416. * 10 = SROS = SECONDARY ROLLOUT FILE DEVICE.
  14417. * 11 = R1OS = RESERVED FOR CDC.
  14418. * 12 = R2OS = RESERVED FOR CDC.
  14419. * 13 = TNDS = TEMPORARY NON-SHARED FILE DEVICE.
  14420. * A ACCESS LEVEL SELECTION SPECIFIED.
  14421. * AL ACCESS LEVEL.
  14422. * SC SECTOR COUNT.
  14423. * -1 IF ALL SECTORS ON DEVICE REQUESTED.
  14424. * 0 IF REQUESTING 1 TRACK.
  14425. *
  14426. * A DEVICE ELIGIBLE FOR SELECTION MUST BE *ON*, HAVE ENOUGH
  14427. * SPACE TO SATISFY THE REQUEST, MUST NOT HAVE ERROR IDLE SET,
  14428. * AND, IF ACCESS LEVEL SELECTION IS SPECIFIED, MUST HAVE
  14429. * THE REQUESTED ACCESS LEVEL WITHIN THE DEVICE ACCESS LEVEL
  14430. * RANGE. THE ALGORITHM SEARCHES FOR AN ELIGIBLE DEVICE
  14431. * STARTING WITH THE NEXT EQUIPMENT AFTER THE LAST ELIGIBLE
  14432. * DEVICE. THE PRESENCE OF A COPY OF THE SYSTEM ON A DEVICE
  14433. * IS CONSIDERED AS ADDITIONAL ACTIVITY IN THOSE DECISIONS
  14434. * MADE BASED ON ACTIVITY. THIS IS DONE SUCH THAT A DEVICE
  14435. * WITHOUT A COPY OF THE SYSTEM WILL USUALLY BE GIVEN PREFERENCE
  14436. * OVER A DEVICE WITH THE SYSTEM PROVIDING ACTIVITY IS EQUAL.
  14437. * HOWEVER, NON-SYSTEM DEVICES HAVE NO PREFERENCE OVER
  14438. * SYSTEM DEVICES IN COMPARING ACTIVITIES OF ZERO.
  14439. *
  14440. * THE SELECTION ALGORITHM IS AS FOLLOWS.
  14441. *
  14442. * 1) SELECT ELIGIBLE DEVICE WITH .GT. 1/8 OF SPACE LEFT
  14443. * AND NO ACTIVITY SET.
  14444. * 2) SELECT ELIGIBLE DEVICE WITH .GT. 1/8 OF SPACE LEFT.
  14445. * IF *ROLS* OR *SROS* DEVICE SELECTION, SELECT DEVICE
  14446. * WITH .GT. 1/8 OF SPACE LEFT AND LEAST ACTIVITY.
  14447. * 3) SELECT BEST ELIGIBLE DEVICE OF ALLOCATION TYPE.
  14448. * 4) IF SELECTION TYPE IS *TMPS*, REJECT REQUEST AND EXIT.
  14449. * IF SELECTION TYPE IS NOT *SROS*, SET SELECTION TYPE
  14450. * *TMPS* AND RETURN TO STEP 1. IF SELECTION TYPE IS
  14451. * *SROS*, SET SELECTION TYPE *ROLS* AND RETURN TO STEP
  14452. * 1.
  14453. *
  14454. * EXIT
  14455. *T, OR 12/ 0, 12/ EQ, 12/ TKE, 12/ SCE, 12/ TKF
  14456. *
  14457. * EQ EST ORDINAL ASSIGNED.
  14458. * ( = 4000 IF NO EQUIPMENT ASSIGNED).
  14459. * TKE TRACK NUMBER OF EOI SECTOR.
  14460. * SCE SECTOR NUMBER OF EOI SECTOR.
  14461. * (REJECT REASON CODE IF NO TRACKS ALLOCATED).
  14462. * ( = 1 IF REJECT BECAUSE OF TRACK LIMIT).
  14463. * ( = 2 IF REJECT BECAUSE OF ACCESS LEVEL CONFLICT).
  14464. * TKF FIRST TRACK ASSIGNED.
  14465. * ( = 0 IF NO TRACKS ALLOCATED).
  14466. * BITS 59 AND 57 OF OR WILL BE SET ALONG WITH THE SELECTED
  14467. * EST ORDINAL IF MONITOR SELECTED AN INDEPENDENT
  14468. * SHARED DEVICE.
  14469. *
  14470. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  14471. * 1) EQUIPMENT NOT MASS STORAGE OR OUT OF EST.
  14472. * 2) ECS ADDRESS OF MST SET WHEN NOT MULTI-MAINFRAME MODE.
  14473. * 3) IF CURRENT TRACK IS NOT RESERVED OR IS LINKED.
  14474. * 4) IF DEVICE SELECTION PARAMETER IS OUT OF RANGE.
  14475. *
  14476. * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
  14477. * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
  14478. * BEFORE THE RTCM IS ISSUED TO CPUMTR.
  14479.  
  14480.  
  14481. PPR RTCM,(/ISD/CHR,ISD,/LSPMMF/CME,LSPMMF,/MONITOR/PMR),RTC
  14482. ,,FEX
  14483. SCDM SPACE 4,10
  14484. ** SCDM - SEARCH CENTRAL DIRECTORY.
  14485. *
  14486. * ENTRY
  14487. *T,OR 12/ SCDM, 48/ 0
  14488. *T,MB 42/ EPN, 18/ 0
  14489. * EPN ENTRY POINT NAME.
  14490. *
  14491. * EXIT
  14492. *T,OR 42/ 0, 18/ADDR
  14493. *T,MB 42/ EPN, 18/ 0
  14494. * ADDR ADDRESS OF PST ENTRY.
  14495. * EPN ENTRY POINT NAME.
  14496.  
  14497.  
  14498. PPR SCDM,,,FEX
  14499.  
  14500. SA2 A5+1 GET ENTRY POINT NAME
  14501. SB6 PPR1 SET *SCD* RETURN ADDRESS
  14502. EQ SCD SEARCH CENTRAL DIRECTORY
  14503. SCSM SPACE 4,45
  14504. *** SCSM - SET CHANNEL STATE.
  14505. *
  14506. * ENTRY
  14507. *T, OR 12/ SCSM,12/ EQ,12/ CH1,12/ SF,12/ CH2
  14508. *
  14509. * EQ EST ORDINAL.
  14510. * CH1 CHANNEL 1 DATA.
  14511. * FOR SUBFUNCTIONS *UPSS*, *DWSS*, *SUCS*, *SICS*,
  14512. * *DAPS* AND *EAPS* -
  14513. * CHANNEL NUMBER (INCLUDING CONCURRENCY FLAG).
  14514. * FOR SUBFUNCTION *SCHS* -
  14515. * DATA TO BE STORED IN CHANNEL 1 FIELD.
  14516. * FOR SUBFUNCTION *RVCS* -
  14517. * UNUSED.
  14518. * SF SUBFUNCTION.
  14519. * UPSS = 0 = REINSTATE CHANNEL.
  14520. * DWSS = 1 = REMOVE CHANNEL FROM SYSTEM USE.
  14521. * SCHS = 2 = SET CHANNEL DATA.
  14522. * SUCS = 3 = SET *UP* CHANNEL STATE.
  14523. * SICS = 4 = SET *IDLE* CHANNEL STATE.
  14524. * RVCS = 5 = REVERSE CHANNELS IN MST.
  14525. * DAPS = 6 = DISABLE ACCESS PATH.
  14526. * EAPS = 7 = ENABLE ACCESS PATH.
  14527. * CH2 CHANNEL 2 DATA.
  14528. * FOR SUBFUNCTION *SCHS* -
  14529. * DATA TO BE STORED IN CHANNEL 2 FIELD.
  14530. * FOR SUBFUNCTIONS *UPSS*, *DWSS*, *SUCS*, *SICS*,
  14531. * *RVCS*, *DAPS* AND *EAPS* -
  14532. * UNUSED.
  14533. *
  14534. * EXIT
  14535. *T, OR 12/ 0,12/ ST,36/
  14536. *
  14537. * ST REPLY STATUS.
  14538. *
  14539. * FOR SUBFUNCTION *UPSS* -
  14540. * EQ IF REQUEST HONORED.
  14541. * 0 IF REQUEST REJECTED DUE TO NO PP AVAILABLE
  14542. * FOR BUFFERED DRIVER OR *1MV*.
  14543. *
  14544. * FOR SUBFUNCTION *DWSS* -
  14545. * EQ IF REQUEST HONORED. 4000 BIT SET IF
  14546. * CHANNEL IS GLOBALLY DOWN.
  14547. * 0 IF REQUEST REJECTED DUE TO *1MV* ACTIVE ON
  14548. * DEVICE OR CHANNEL SPECIFIC REQUESTS
  14549. * PRESENT.
  14550. *
  14551. * FOR SUBFUNCTIONS *SCHS*, *SUCS*, *SICS*, *RVCS* AND
  14552. * *EAPS* -
  14553. * EQ THERE ARE NO REJECT CONDITIONS FOR THESE
  14554. * SUBFUNCTIONS.
  14555. *
  14556. * FOR SUBFUNCTION *DAPS* -
  14557. * EQ IF REQUEST HONORED.
  14558. * 0 IF REQUEST REJECTED DUE TO NO ALTERNATE
  14559. * PATH TO NON-DOWN DEVICE.
  14560. *
  14561. * *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
  14562. *
  14563. * 1. UNDEFINED SUBFUNCTION.
  14564. * 2. INVALID EST ORDINAL.
  14565. * 3. NON-MASS STORAGE EST ORDINAL SPECIFIED FOR ANY
  14566. * SUBFUNCTION OTHER THAN *UPSS*, *DWSS*, *SCHS* OR *SUCS*.
  14567. * 4. CHANNEL NOT DEFINED FOR SPECIFIED DEVICE FOR ANY
  14568. * SUBFUNCTION OTHER THAN *SCHS* OR *RVCS*.
  14569.  
  14570.  
  14571. PPR SCSM
  14572.  
  14573. BX7 X1
  14574. LX1 -12
  14575. MX0 -12
  14576. BX2 -X0*X1 SUBFUNCTION
  14577. SB4 X2-TSCSL
  14578. PL B4,HNG IF INVALID SUBFUNCTION
  14579. SB6 X2
  14580. LX1 -12
  14581. BX2 -X0*X1 CHANNEL NUMBER (CHANNEL 1 DATA)
  14582. LX1 -12
  14583. TB5 ESTL
  14584. BX1 -X0*X1
  14585. SB3 X1 EST ORDINAL
  14586. GE B3,B5,HNG IF EST ORDINAL TOO LARGE
  14587. SB5 B3-NOPE
  14588. SB4 B6-SCHS
  14589. CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
  14590. MX6 -6
  14591. TA3 X3+EQDE,EST
  14592. BX5 -X0*X3
  14593. LX5 3 MST ENTRY ADDRESS
  14594. EQ B4,B0,SCS4 IF SUBFUNCTION *SCHS*
  14595. PL B5,SCS0 IF EST ORDINAL IN RANGE
  14596. NZ B3,HNG IF NOT EST ORDINAL ZERO
  14597. BX4 X3
  14598. MX1 -12
  14599. LX4 -12
  14600. BX4 -X1*X4 DEVICE MNEMONIC
  14601. SB5 B6-RVCS
  14602. SB4 X4-2RRD
  14603. ZR B4,HNG IF *RD* PSEUDO-EQUIPMENT
  14604. EQ SCS1 CONTINUE
  14605.  
  14606. SCS0 SB4 B6-SUCS
  14607. SB5 B6-RVCS
  14608. LE B4,B0,SCS1 IF DEVICE MAY BE NON-MASS STORAGE
  14609. ERRNZ DWSS-UPSS-1 CODE DEPENDS ON VALUE
  14610. ERRNZ SCHS-DWSS-1 CODE DEPENDS ON VALUE
  14611. ERRNZ SUCS-SCHS-1 CODE DEPENDS ON VALUE
  14612. PL X3,HNG IF NOT MASS STORAGE DEVICE
  14613. SCS1 ZR B5,SCS3 IF CHANNEL NOT SPECIFIED
  14614. LX3 -24
  14615. BX1 -X0*X3
  14616. SB5 24 SET CHANNEL BYTE SHIFT COUNT
  14617. ZR X1,SCS2 IF CHANNEL 2 NOT PRESENT
  14618. BX4 X2-X1
  14619. BX4 -X6*X4
  14620. ZR X4,SCS3 IF CHANNEL 2 MATCHES SPECIFIED CHANNEL
  14621. SCS2 LX3 -12
  14622. BX4 X2-X3
  14623. SB5 36 ADJUST CHANNEL BYTE SHIFT COUNT
  14624. BX4 -X6*X4
  14625. NZ X4,HNG IF CHANNEL 1 DOESN-T MATCH
  14626. SCS3 SX1 3000B CHANNEL STATE MASK
  14627. LX1 B5 POSITION CHANNEL STATE MASK
  14628. SA3 A3 REREAD EST ENTRY WORD *EQDE*
  14629. BX1 X1*X3 CHANNEL STATE
  14630. SB4 48+1
  14631. SB4 B4-B5
  14632. SCS4 JP TSCS+B6 ENTER SUBFUNCTION PROCESSOR
  14633.  
  14634. * ENTER PROCESSOR WITH -
  14635. *
  14636. * (A3) = ADDRESS OF EST ENTRY WORD *EQDE*.
  14637. * (A5) = PP OUTPUT REGISTER ADDRESS.
  14638. * (B4) = 48+1-B5.
  14639. * (B5) = CHANNEL BYTE SHIFT COUNT.
  14640. * (B6) = SUBFUNCTION.
  14641. * (X0) = MASK OF -12.
  14642. * (X1) = CHANNEL STATE POSITIONED AS IN EST ENTRY.
  14643. * (X2) = CHANNEL NUMBER (CHANNEL 1 DATA).
  14644. * (X3) = EST ENTRY WORD *EQDE*.
  14645. * (X5) = MST ENTRY ADDRESS (IF MASS STORAGE).
  14646. * (X6) = MASK OF -6.
  14647. * (X7) = PP OUTPUT REGISTER WITH BYTE 0 CLEAR.
  14648.  
  14649. TSCS BSS 0
  14650.  
  14651. BSS 0 FORCE UPPER
  14652. UPSS EQU *-TSCS
  14653. UPSS EQU //UPSS ENSURE SUBFUNCTION CORRECT
  14654. SB6 SCS11 *SCH* EXIT ADDRESS
  14655. EQ SCS10 REINSTATE CHANNEL
  14656.  
  14657. BSS 0 FORCE UPPER
  14658. DWSS EQU *-TSCS
  14659. DWSS EQU //DWSS ENSURE SUBFUNCTION CORRECT
  14660. SA4 X5+STLL
  14661. EQ SCS20 REMOVE CHANNEL FROM SYSTEM USE
  14662.  
  14663. BSS 0 FORCE UPPER
  14664. SCHS EQU *-TSCS
  14665. SCHS EQU //SCHS ENSURE SUBFUNCTION CORRECT
  14666. SA4 A5
  14667. BX4 -X0*X4 CHANNEL 2 DATA
  14668. EQ SCS30 SET CHANNEL DATA
  14669.  
  14670. BSS 0 FORCE UPPER
  14671. SUCS EQU *-TSCS
  14672. SUCS EQU //SUCS ENSURE SUBFUNCTION CORRECT
  14673. SB6 PPR1 *SCH* EXIT ADDRESS
  14674. EQ SCS40 SET *UP* CHANNEL STATE
  14675.  
  14676. BSS 0 FORCE UPPER
  14677. SICS EQU *-TSCS
  14678. SICS EQU //SICS ENSURE SUBFUNCTION CORRECT
  14679. SB6 PPR1 *SCH* EXIT ADDRESS
  14680. EQ SCS50 SET *IDLE* CHANNEL STATE
  14681.  
  14682. BSS 0 FORCE UPPER
  14683. RVCS EQU *-TSCS
  14684. RVCS EQU //RVCS ENSURE SUBFUNCTION CORRECT
  14685. SA1 X5+DALL
  14686. EQ SCS60 REVERSE CHANNELS IN MST
  14687.  
  14688. BSS 0 FORCE UPPER
  14689. DAPS EQU *-TSCS
  14690. DAPS EQU //DAPS ENSURE SUBFUNCTION CORRECT
  14691. SX1 B0
  14692. EQ SCS70 DISABLE ACCESS PATH
  14693.  
  14694. BSS 0 FORCE UPPER
  14695. EAPS EQU *-TSCS
  14696. EAPS EQU //EAPS ENSURE SUBFUNCTION CORRECT
  14697. SX1 4000B
  14698. EQ SCS80 ENABLE ACCESS PATH
  14699.  
  14700. BSS 0 FORCE UPPER
  14701. TSCSL EQU *-TSCS
  14702.  
  14703.  
  14704. * SUBFUNCTION *UPSS* - REINSTATE CHANNEL.
  14705.  
  14706. SCS10 LX1 B4
  14707. PL X1,PPR1 IF CHANNEL NOT DOWN ON DEVICE
  14708. SX6 B1
  14709. EQ SCH SET *IDLE* CHANNEL STATE
  14710.  
  14711. SCS11 SB6 PPR1 *RCB* EXIT ADDRESS
  14712. EQ RCB RECONSTRUCT CHANNEL ACCESS BYTE IN MST
  14713.  
  14714.  
  14715. * SUBFUNCTION *DWSS* - REMOVE CHANNEL FROM SYSTEM USE.
  14716.  
  14717. SCS20 LX1 B4
  14718. NG X1,SCS26 IF CHANNEL STATE IS DOWN
  14719. LX4 59-43
  14720. PL X3,SCS24 IF NOT MASS STORAGE
  14721. PL X4,SCS22 IF *1MV* NOT ACTIVE ON DEVICE
  14722. SCS21 SX7 B0 SET REJECT STATUS
  14723. EQ PPR1 EXIT
  14724.  
  14725. SCS22 SA1 X5+DILL
  14726. LX1 -24
  14727. BX1 -X0*X1 *PUT* ORDINAL
  14728. MX6 -6
  14729. LX1 PUTLS
  14730. ZR X1,SCS24 IF NON-BUFFERED DEVICE
  14731. TA4 X1+UNCT,PUT
  14732. SCS23 BX1 -X0*X4 NEXT CBT ORDINAL
  14733. ZR X1,SCS24 IF END OF SCAN
  14734. LX1 CBTLS
  14735. TA4 X1+IOLK,CBT
  14736. SA1 A4-IOLK+HSLK
  14737. LX4 -24
  14738. LX1 59-58
  14739. PL X1,SCS23 IF NOT CHANNEL SPECIFIC REQUEST
  14740. SA1 A4-IOLK+PAD4
  14741. LX1 -54
  14742. BX1 X2-X1
  14743. BX1 -X6*X1
  14744. ZR X1,SCS21 IF REQUEST IS FOR IDLED CHANNEL
  14745. EQ SCS23 CHECK NEXT QUEUE ENTRY
  14746.  
  14747. SCS24 SB6 SCS25 *SCH* RETURN ADDRESS
  14748. SX6 3
  14749. EQ SCH SET *DOWN* CHANNEL STATE
  14750.  
  14751. SCS25 SB6 SCS26 *RCB* RETURN ADDRESS
  14752. EQ RCB RECONSTRUCT MST CHANNEL ACCESS BYTE
  14753.  
  14754. SCS26 TX1 ESTL
  14755. SX3 NOPE-1
  14756. SCS27 SX3 X3+B1 INCREMENT EST ORDINAL
  14757. BX4 X3-X1
  14758. NZ X4,SCS28 IF NOT END OF SCAN
  14759. SX1 B1+ SET GLOBAL DOWN STATUS
  14760. LX1 47-0
  14761. BX7 X7+X1
  14762. EQ PPR1 EXIT
  14763.  
  14764. SCS28 CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
  14765. MX6 -6
  14766. TA4 EQDE+X4,EST
  14767. PL X4,SCS27 IF NOT MASS STORAGE
  14768. LX4 59-47
  14769. LX5 X4,B1
  14770. PL X4,SCS29 IF CHANNEL 1 NOT PRESENT AND ENABLED
  14771. NG X5,SCS29 IF CHANNEL 1 DOWN
  14772. LX4 -48
  14773. BX4 X4-X2
  14774. BX4 -X6*X4
  14775. ZR X4,PPR1 IF CHANNEL IN USE ON DEVICE
  14776. SCS29 LX5 59-35-59+47-1
  14777. LX4 X5,B1
  14778. PL X5,SCS27 IF CHANNEL 2 NOT PRESENT AND ENABLED
  14779. NG X4,SCS27 IF CHANNEL 2 DOWN
  14780. LX5 -48
  14781. BX5 X5-X2
  14782. BX5 -X6*X5
  14783. ZR X5,PPR1 IF CHANNEL IN USE ON DEVICE
  14784. EQ SCS27 CHECK NEXT EST ENTRY
  14785.  
  14786.  
  14787. * SUBFUNCTION *SCHS* - SET CHANNEL DATA.
  14788.  
  14789. SCS30 MX1 -24
  14790. LX1 24
  14791. BX6 X1*X3 CLEAR CHANNEL FIELDS
  14792. LX2 12 POSITION CHANNEL 1 DATA
  14793. BX2 X4+X2 MERGE WITH CHANNEL 2 DATA
  14794. LX2 24
  14795. BX6 X2+X6 MERGE NEW CHANNEL DATA
  14796. SA6 A3 UPDATE EST ENTRY
  14797. SB6 PPR1 SET *RCB* EXIT ADDRESS
  14798. SA3 A3+ REREAD EST ENTRY
  14799. EQ RCB RECONSTRUCT MST CHANNEL ACCESS BYTE
  14800.  
  14801.  
  14802. * SUBFUNCTION *SUCS* - SET *UP* CHANNEL STATE.
  14803.  
  14804. SCS40 SX6 B0+
  14805. EQ SCH SET *UP* CHANNEL STATE
  14806.  
  14807.  
  14808. * SUBFUNCTION *SICS* - SET *IDLE* CHANNEL STATE.
  14809.  
  14810. SCS50 NZ X1,PPR1 IF CHANNEL NOT UP
  14811. SX6 B1+
  14812. EQ SCH SET *IDLE* CHANNEL STATE
  14813.  
  14814.  
  14815. * SUBFUNCTION *RVCS* - REVERSE CHANNELS IN MST.
  14816.  
  14817. SCS60 BX4 -X0*X1
  14818. BX1 X0*X1
  14819. BX6 X4
  14820. AX4 6
  14821. LX6 6
  14822. BX4 X4+X6
  14823. BX4 -X0*X4
  14824. BX6 X4+X1
  14825. SA6 A1
  14826. EQ PPR1 EXIT
  14827.  
  14828.  
  14829. * SUBFUNCTIONS *DAPS* - DISABLE ACCESS PATH.
  14830.  
  14831. SCS70 SB4 B5-12
  14832. LX4 X3,B4
  14833. PL X4,SCS21 IF NO ALTERNATE ACCESS
  14834. LX4 1
  14835. NG X4,SCS21 IF ALTERNATE ACCESS IS DOWN
  14836.  
  14837.  
  14838. * SUBFUNCTIONS *EAPS* - ENABLE ACCESS PATH.
  14839.  
  14840. SCS80 SX6 4000B
  14841. LX6 B5
  14842. BX6 -X6*X3 CLEAR ENABLED BIT
  14843. LX1 B5
  14844. BX6 X1+X6 SET ENABLED FLAG IF SUBFUNCTION *EAPS*
  14845. SA6 A3+ UPDATE EST ENTRY
  14846. EQ PPR1 EXIT
  14847. RCB SPACE 4,10
  14848. ** RCB - RECONSTRUCT CHANNEL ACCESS BYTE IN MST.
  14849. *
  14850. * ENTRY (A3) = EST ENTRY ADDRESS.
  14851. * (B6) = RETURN ADDRESS.
  14852. * (X0) = MASK OF -12.
  14853. * (X3) = *EQDE* WORD OF EST ENTRY.
  14854. * (X5) = MST ENTRY ADDRESS.
  14855. *
  14856. * USES X - 0, 1, 2, 3, 4, 6.
  14857. * A - 2, 3, 6.
  14858. * B - 3, 5.
  14859.  
  14860.  
  14861. RCB SB5 X2
  14862. TB3 EST
  14863. SB3 A3-B3
  14864. NG X3,RCB0 IF MASS STORAGE
  14865. NE B3,B0,RCB5 IF NOT *RD* DEVICE
  14866. ERRNZ RDEQ CODE DEPENDS ON VALUE
  14867. RCB0 MX6 60
  14868. LX3 59-47
  14869. MX1 60
  14870. LX4 X3,B1
  14871. PL X3,RCB1 IF CHANNEL 1 NOT PRESENT AND ENABLED
  14872. NG X4,RCB1 IF CHANNEL 1 DOWN
  14873. LX3 59-41-59+47
  14874. NG X3,RCB1 IF CHANNEL 1 IS CONCURRENT
  14875. AX3 54 CHANNEL 1
  14876. SX6 X3+
  14877. RCB1 LX4 59-35-59+47-1
  14878. LX3 X4,B1
  14879. PL X4,RCB2 IF CHANNEL 2 NOT PRESENT AND ENABLED
  14880. NG X3,RCB2 IF CHANNEL 2 DOWN
  14881. LX4 59-29-59+35
  14882. AX4 54 CHANNEL 2
  14883. NG X4,RCB2 IF CHANNEL 2 IS CONCURRENT
  14884. SX1 X4+
  14885. RCB2 BX3 X1
  14886. SA2 X5+DALL
  14887. LX3 6
  14888. BX4 X3+X6
  14889. PL X4,RCB4 IF BOTH CHANNELS AVAILABLE
  14890. BX4 X1*X6
  14891. PL X4,RCB3 IF SINGLE CHANNEL PRESENT
  14892. SX4 B0+
  14893. RCB3 SX3 X4+
  14894. LX4 6
  14895. BX4 X3+X4
  14896. RCB4 BX4 -X0*X4
  14897. BX1 X0*X2 UPDATE CHANNEL ACCESS BYTE IN MST
  14898. BX6 X1+X4
  14899. SA6 A2
  14900. RCB5 SA3 A3 RESTORE *X3*
  14901. SX2 B5 RESTORE *X2*
  14902. JP B6 EXIT
  14903. SCH SPACE 4,15
  14904. ** SCH - SET CHANNEL STATE.
  14905. *
  14906. * ENTRY (A3) = EST ENTRY ADDRESS.
  14907. * (B5) = CHANNEL BYTE SHIFT COUNT.
  14908. * (B6) = EXIT ADDRESS.
  14909. * (X0) = MASK OF -12.
  14910. * (X3) = WORD *EQDE* OF EST ENTRY.
  14911. * (X6) = CHANNEL STATE TO BE SET.
  14912. *
  14913. * USES X - 1, 4, 6.
  14914. * A - 6.
  14915. * B - 3.
  14916.  
  14917.  
  14918. SCH SX1 3000B CHANNEL STATE MASK
  14919. LX1 B5
  14920. BX4 -X1*X3 CLEAR CURRENT CHANNEL STATE
  14921. SB3 B5+9
  14922. LX6 B3
  14923. BX6 X6+X4 SET NEW CHANNEL STATE
  14924. SA6 A3
  14925. SA3 A3 UPDATED *EQDE*
  14926. JP B6 EXIT
  14927. SCTM SPACE 4,30
  14928. *** SCTM - SET SYSTEM CONTROL PARAMETERS.
  14929. *
  14930. * ENTRY
  14931. *T, OR 12/ SCTM,12/ SF,24/ P2,12/ P1
  14932. *
  14933. * SF SUBFUNCTION CODE.
  14934. * CCSS CONVERT CPU SCHEDULING PARAMETERS.
  14935. *
  14936. * P1 SERVICE CLASS FOR SF = CCSS.
  14937. *
  14938. * P2 RESERVED.
  14939. *
  14940. * EXIT
  14941. *T, OR 12/ 0,12/ ST,36/ 0
  14942. *
  14943. * ST = 0 IF FUNCTION PERFORMED.
  14944. *
  14945. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  14946. *
  14947. * 1) ILLEGAL SUBFUNCTION.
  14948. * 2) SERVICE CLASS OUT OF RANGE (CCSS).
  14949.  
  14950.  
  14951. PPR SCTM
  14952.  
  14953. BX2 X1 GET SUBFUNCTION
  14954. AX2 36
  14955. SB4 X2-TSCTL
  14956. PL B4,HNG IF ILLEGAL SUBFUNCTION
  14957. JP TSCT+TSCTL+B4 JUMP TO PROCESSOR
  14958.  
  14959. * SUBFUNCTION TABLE.
  14960.  
  14961. TSCT BSS 0
  14962. LOC 0
  14963.  
  14964. + MX6 -12
  14965. ERRNZ *-CCSS TABLE POSITION DEPENDS ON VALUE
  14966. BX4 -X6*X1 GET SERVICE CLASS
  14967. EQ SCT1 (CCSS) - CONVERT CPU SCHEDULING PARAMETERS
  14968.  
  14969. TSCTL BSS 0
  14970. LOC *O
  14971.  
  14972.  
  14973. * *CCSS* - CONVERT CPU SCHEDULING PARAMETERS.
  14974.  
  14975. SCT1 ZR X4,HNG IF ZERO SERVICE CLASS
  14976. SX6 X4-MXJC
  14977. PL X6,HNG IF INCORRECT SERVICE CLASS
  14978. SB3 SCT2 SET *CCP* RETURN ADDRESS
  14979. EQ CCP CONVERT CPU SCHEDULING PARAMETERS
  14980.  
  14981. * CHECK CONTROL POINTS FOR JOBS WITH CPU PRIORITY UPDATE
  14982. * REQUIRED. JOBS WITH JOB ADVANCE SET ARE BYPASSED. *JACM*
  14983. * PROCESSING WILL UPDATE THE CPU PRIORITY WHEN JOB ADVANCE IS
  14984. * CLEARED.
  14985.  
  14986. SCT2 SB7 200B INITIALIZE CONTROL POINT ADDRESS
  14987. SCT3 SA1 B7+TFSW GET EJT ORDINAL
  14988. SA3 B7+CWQW GET CPU SCHEDULING PARAMETERS
  14989. MX6 -12
  14990. MX7 -9
  14991. LX1 -48
  14992. LX3 -27
  14993. BX1 -X6*X1 EJT ORDINAL
  14994. BX7 -X7*X3 *JCB* OFFSET
  14995. ZR X1,SCT4 IF CONTROL POINT NOT OCCUPIED
  14996. TA2 X7+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
  14997. LX3 27
  14998. UX0,B4 X3 UNPACK CPU PRIORITY
  14999. SX7 B4+
  15000. LX0 59-45
  15001. AX7 3 JOB CPU PRIORITY WITHOUT FLAGS
  15002. NG X0,SCT4 IF PRIORITY NOT SET FROM SERVICE CLASS
  15003. AX2 48 SERVICE CLASS CPU PRIORITY
  15004. IX6 X7-X2
  15005. ZR X6,SCT4 IF CURRENT PRIORITY MATCHES SERVICE CLASS
  15006. CX6 X1,EJT SET EJT ENTRY OFFSET
  15007. TA1 X6+JSNE,EJT GET JOB ADVANCE STATUS
  15008. SX5 X2 SET CPU PRIORITY
  15009. LX1 59-6
  15010. SB3 SCT4 SET *SPR* RETURN ADDRESS
  15011. PL X1,SPR IF JOB ADVANCE NOT SET
  15012. SCT4 SB7 B7+200B ADVANCE CONTROL POINT ADDRESS
  15013. TX7 B7,-SCA
  15014. NZ X7,SCT3 IF NOT SYSTEM CONTROL POINT
  15015. EQ PPR1 CLEAR OUTPUT REGISTER AND EXIT
  15016. SFBM SPACE 4
  15017. *** SFBM - SET FILE BUSY.
  15018. *
  15019. * ENTRY
  15020. *T, OR 12/ SFBM,12/,12/ EQ,6/,18/ ADDR
  15021. *T, MB 42/ FILE NAME,18/
  15022. * ADDR NFL ADDRESS OF FNT ENTRY.
  15023. * EQ IF EQ .NE. 0, SET IT IN THE EST ORDINAL
  15024. * FIELD OF THE FST IF THE FILE IS NOT BUSY. THE
  15025. * FST IS NOT SET BUSY WHEN THIS OPTION IS USED.
  15026. *
  15027. *
  15028. * EXIT
  15029. *T, OR 12/ 0,12/ ST,36/ 0
  15030. * ST = 0 IF FILE WAS NOT PREVIOUSLY BUSY.
  15031. * ST = 1 IF FILE WAS PREVIOUSLY BUSY.
  15032. * ST = 2 IF COMPARISON FAILED.
  15033. *
  15034. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  15035. * 1) IF ADDRESS BEYOND NFL SIZE
  15036.  
  15037.  
  15038. PPR SFBM
  15039.  
  15040. SA3 B7+FLSW GET NFL/100
  15041. MX0 -RMSK
  15042. AX3 RSHF
  15043. BX2 -X0*X3 RA / 100
  15044. MX0 -18
  15045. AX3 36
  15046. LX3 6
  15047. SB4 X3 NFL SIZE
  15048. BX3 -X0*X1 NFL ADDRESS
  15049. SB6 X1
  15050. GT B6,B4,HNG IF BEYOND NFL SIZE
  15051. LX2 6
  15052. SX7 B1
  15053. IX2 X2-X3 ABSOLUTE ADDRESS FNT
  15054. IX3 X2+X7 ABSOLUTE ADDRESS FST
  15055. ERX4 X3 READ FST
  15056. BX5 X7*X4
  15057. BX6 -X7*X4 CLEAR BUSY BIT
  15058. LX7 36 SET BUSY STATUS
  15059. ZR X5,PPR1 IF BUSY
  15060. MX0 12
  15061. LX1 24
  15062. BX5 X0*X1
  15063. ERX1 X2 READ FNT
  15064. LX7 1 SET NO COMPARE STATUS
  15065. SA4 A5+B1 READ COMPARE WORD FROM MESSAGE BUFFER
  15066. BX4 X1-X4
  15067. LX4 -12
  15068. AX4 6
  15069. NZ X4,PPR1 IF NO COMPARE
  15070. ZR X5,SFB1 IF NO EST ORDINAL CHANGE
  15071. SX7 B1
  15072. BX6 -X0*X6
  15073. BX6 X7+X6
  15074. BX6 X5+X6
  15075. SFB1 EWX6 X3 SET FST BUSY
  15076. BX7 X7-X7 SET RESPONSE
  15077. JP PPR1 EXIT
  15078. SJCM SPACE 4,50
  15079. *** SJCM - SELECT JOB CONTROL PARAMETERS.
  15080. *
  15081. * ENTRY
  15082. *T, OR 12/ SJCM,12/ SF,24/ P2,12/ P1
  15083. *
  15084. * SF SUBFUNCTION CODE.
  15085. * CPRS SET CPU PRIORITY.
  15086. * CPUS SELECT CPU FOR JOB.
  15087. * SCTS SET JOB CONTROL FLAG(S).
  15088. * CCTS CLEAR JOB CONTROL FLAG(S).
  15089. * SSIS SET SUBSYSTEM IDENTIFICATION.
  15090. * SBKS SET PP BREAKPOINT.
  15091. * CBKS CLEAR PP BREAKPOINT.
  15092. * SAPS SET *CPUPFM* ACTIVE.
  15093. * CAPS CLEAR *CPUPFM* ACTIVE.
  15094. * SSPS SET SCHEDULING PARAMETER INDEX.
  15095. *
  15096. * P1 CPU PRIORITY FOR SF = CPRS.
  15097. * 0 = SET CPU PRIORITY TO SERVICE CLASS VALUE.
  15098. *
  15099. * P1 CPU SELECTION FOR SF = CPUS.
  15100. * 0 = USE ANY CPU.
  15101. * 2 = USE CPU 0 ONLY.
  15102. * 1 = USE CPU 1 ONLY.
  15103. *
  15104. * P1 6 BIT MASK FOR SF = SCTS, CCTS.
  15105. * (APPLIED TO *JCIW* BITS 18 - 23).
  15106. *
  15107. * P1 SUBSYSTEM IDENTIFICATION FOR SF = SSIS.
  15108. *
  15109. * P1 CP NUMBER (OPTIONAL) FOR SF = SBKS.
  15110. *
  15111. * P1 SCHEDULING PARAMETER INDEX FOR SF = SSPS.
  15112. *
  15113. * P2 PP NAME (LEFT JUSTIFIED) FOR SF = SBKS.
  15114. *
  15115. * EXIT
  15116. *T, OR 12/ 0,12/ ST,36/ 0
  15117. *
  15118. * ST = 0 IF FUNCTION COMPLETE.
  15119. * ST = 1 IF FUNCTION REJECTED (SF = SBKS, CBKS ONLY).
  15120. * BREAKPOINT DISABLED (*0BK*/*7BK* NOT CM RESIDENT).
  15121. * ATTEMPT TO SET BREAKPOINT WHEN ONE ALREADY SET.
  15122. * ATTEMPT TO CLEAR BREAKPOINT WHEN NONE IS SET.
  15123. * LIBRARY IS LOCKED (*SYSEDIT* RUNNING).
  15124. *
  15125. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  15126. * 1) REQUESTED CPU PRIORITY .GE. *MPRS* (CPRS).
  15127. * 2) REQUESTED CPU PRIORITY .LT. *LJCS* (CPRS).
  15128. * 3) REQUESTED CPU SELECTION .GT. 2 (CPUS).
  15129.  
  15130.  
  15131. PPR SJCM
  15132.  
  15133. MX3 -12
  15134. BX5 -X3*X1 EXTRACT PARAMETER
  15135. LX1 11-47 POSITION TO SUBFUNCTION
  15136. MX6 -6
  15137. SA2 B7+JCIW GET JOB CONTROL WORD
  15138. BX1 -X3*X1 EXTRACT SUBFUNCTION
  15139. BX6 -X6*X5
  15140. SB4 X1-TSJCL
  15141. PL B4,HNG IF ILLEGAL SUBFUNCTION
  15142. JP TSJC+TSJCL+B4 JUMP TO PROCESSOR
  15143.  
  15144. ** EXIT TO PROCESSOR WITH-
  15145. *
  15146. * (A2) = ADDRESS OF *JCIW*.
  15147. * (X2) = CONTENTS OF *JCIW*.
  15148. * (X3) = 48/-0,12/0.
  15149. * (X5) = PARAMETER VALUE.
  15150. * (X6) = LOWER 6 BITS OF PARAMETER VALUE.
  15151. * (X7) = 0.
  15152.  
  15153. * SUBFUNCTION TABLE
  15154.  
  15155. TSJC BSS 0
  15156. LOC 0
  15157.  
  15158. ERRNZ *-CPRS TABLE POSITION DEPENDS ON VALUE
  15159. + SA3 B7+CWQW GET CPU PRIORITY
  15160. EQ SJC1 (CPRS) - SET CPU PRIORITY
  15161.  
  15162. ERRNZ *-CPUS TABLE POSITION DEPENDS ON VALUE
  15163. + SA1 B7+CWQW GET CPU ASSIGNMENT FLAGS
  15164. EQ SJC2 (CPUS) - SELECT CPU FOR JOB
  15165.  
  15166. ERRNZ *-SCTS TABLE POSITION DEPENDS ON VALUE
  15167. + LX6 23-5 POSITION BIT MASK
  15168. BX6 X6+X2 SET REQUESTED BITS
  15169. EQ SJC5 (SCTS) - SET JOB CONTROL FLAG(S)
  15170.  
  15171. ERRNZ *-CCTS TABLE POSITION DEPENDS ON VALUE
  15172. + LX6 23-5 POSITION BIT MASK
  15173. BX6 -X6*X2 CLEAR REQUESTED BITS
  15174. EQ SJC5 (CCTS) - CLEAR JOB CONTROL FLAG(S)
  15175.  
  15176. ERRNZ *-SSIS TABLE POSITION DEPENDS ON VALUE
  15177. + LX3 35-11 POSITION MASK TO BYTE 2
  15178. LX5 35-11 POSITION PARAMETER TO BYTE 2
  15179. EQ SJC4 (SSIS) - SET SUBSYSTEM IDENTIFICATION
  15180.  
  15181. ERRNZ *-SBKS TABLE POSITION DEPENDS ON VALUE
  15182. + SX6 1
  15183. EQ SJC6 (SBKS) - SET PP BREAKPOINT
  15184.  
  15185. ERRNZ *-CBKS TABLE POSITION DEPENDS ON VALUE
  15186. + SX6 -1
  15187. EQ SJC6 (CBKS) - CLEAR PP BREAKPOINT
  15188.  
  15189. ERRNZ *-SAPS TABLE POSITION DEPENDS ON VALUE
  15190. + SX6 1
  15191. EQ SJC12 (SAPS) - SET *CPUPFM* ACTIVE
  15192.  
  15193. ERRNZ *-CAPS TABLE POSITION DEPENDS ON VALUE
  15194. + SX6 B0+
  15195. EQ SJC12 (CAPS) - CLEAR *CPUPFM* ACTIVE
  15196.  
  15197. ERRNZ *-SSPS TABLE POSITION DEPENDS ON VALUE
  15198. + SA2 B7+TFSW GET EJT ORDINAL
  15199. EQ SJC13 (SSPS) - SET SCHEDULING PARAMETER INDEX
  15200.  
  15201. TSJCL BSS 0
  15202. LOC *O
  15203.  
  15204. * SET CPU PRIORITY.
  15205.  
  15206. SJC1 SX0 B1+
  15207. SB3 RZX SET *SPR* RETURN ADDRESS
  15208. LX0 45-0
  15209. ZR X5,SJC1.1 IF SET PRIORITY FROM SERVICE CLASS
  15210. BX3 X3+X0 INDICATE PRIORITY NOT FROM SERVICE CLASS
  15211. SX6 X5-MPRS
  15212. SX7 X5-LJCS
  15213. PL X6,HNG IF PRIORITY NOT VALID
  15214. NG X7,HNG IF PRIORITY NOT VALID
  15215. EQ SPR SET CPU PRIORITY
  15216.  
  15217. SJC1.1 BX3 -X0*X3 INDICATE PRIORITY SET FROM SERVICE CLASS
  15218. MX6 -9
  15219. LX3 -27
  15220. BX1 -X6*X3
  15221. TA1 X1+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
  15222. LX3 27
  15223. AX1 48
  15224. SX5 X1 SERVICE CLASS CPU PRIORITY
  15225. EQ SPR SET CPU PRIORITY
  15226.  
  15227. * SET CPU SELECTION.
  15228.  
  15229. SJC2 SX6 X5-3
  15230. MX3 -2
  15231. LX5 24
  15232. PL X6,HNG IF CPU SELECTION NOT VALID
  15233. LX3 24
  15234. BX6 X3*X1 CLEAR CPU ASSIGNMENT FLAGS
  15235. BX6 X6+X5 MERGE SELECTION FLAGS
  15236. TJP (/DCP/SJC,DCPC,/MONITOR/SJC3)
  15237. SJC3 LX3 36-24
  15238. LX5 36-24
  15239. SA6 B7+CWQW UPDATE *CWQW*
  15240.  
  15241. * SET PARAMETER IN *JCIW*.
  15242.  
  15243. SJC4 BX6 X3*X2 CLEAR OLD PARAMETER
  15244. SB0 0
  15245. BX6 X6+X5 INSERT PARAMETER
  15246.  
  15247. * COMPLETE PROCESSING OF FUNCTION.
  15248.  
  15249. SJC5 BX7 X7-X7 CLEAR OUTPUT REGISTER
  15250. SA6 A2 UPDATE *JCIW*
  15251. EQ PPR1 RETURN
  15252.  
  15253. * SET / CLEAR PP BREAKPOINT.
  15254.  
  15255. SJC6 SA5 A5+ REREAD OUTPUT REGISTER
  15256. SA3 PSTP
  15257. SA2 PLDP FETCH PLD POINTER
  15258. AX3 12
  15259. LX5 24 POSITION NAME
  15260. MX0 18
  15261. SB4 X3-2 LWA+1 PLD
  15262. AX2 36
  15263. BX5 X0*X5 ISOLATE NAME
  15264. SB3 X2
  15265. ZR X2,SJC7 IF NO PLD POINTER (LIBRARY LOCKED)
  15266. SA3 B3-3
  15267. BX1 -X0*X3 *0BK* LOAD INFORMATION
  15268. SA4 A3+B1
  15269. AX3 42
  15270. BX2 -X0*X4 BREAKPOINTED PP STATUS
  15271. SX3 X3-3R"PBK0"
  15272. PL X6,SJC8 IF SETTING BREAKPOINT
  15273. BX5 X0*X4
  15274. NO
  15275. NZ X2,SJC9 IF BREAKPOINT SET
  15276. SB0 0
  15277. SJC7 SX7 B1 FLAG ERROR
  15278. LX7 37
  15279. EQ PPR1 RETURN
  15280.  
  15281. SJC8 NZ X2,SJC7 IF BREAKPOINT ALREADY SET
  15282.  
  15283. SJC9 NZ X3,SJC7 IF *0BK* NOT FOUND
  15284. SJC10 SA2 B3
  15285. GE B3,B4,SJC7 IF PP ROUTINE NOT FOUND
  15286. BX3 X0*X2
  15287. SB3 B3+B1 ADVANCE PLD ADDRESS
  15288. IX3 X3-X5
  15289. NZ X3,SJC10 IF NOT MATCHING NAME
  15290. MX3 -12
  15291. PL X6,SJC11 IF SETTING BREAKPOINT
  15292. BX6 X4
  15293. SA6 A2 RESTORE CORRECT ENTRY
  15294. MX6 1
  15295. SA6 A4 CLEAR OUT BREAKPOINT
  15296. SA6 A6+B1
  15297. EQ PPR1 RETURN
  15298.  
  15299. SJC11 BX1 X5+X1 MERGE NAME AND *0BK* LOAD DATA
  15300. BX6 -X3*X2
  15301. BX6 X6+X1 APPEND PP LOAD ADDRESS
  15302. SA6 A2
  15303. SA1 A5 REREAD OUTPUT REGISTER
  15304. BX6 X2
  15305. SX4 B1
  15306. BX1 -X3*X1 EXTRACT CP NUMBER (IF ANY)
  15307. SA6 A4
  15308. LX4 41
  15309. BX6 -X0*X2 PP LOAD INFORMATION
  15310. LX1 48+7
  15311. IX6 X6+X4 ADD IN RESIDENCY FLAG
  15312. BX6 -X4*X6
  15313. BX6 X1+X6 MERGE IN CPA ADDRESS
  15314. SA6 A4+B1
  15315. EQ PPR1 RETURN
  15316.  
  15317. * SET/CLEAR *CPUPFM* ACTIVE FLAG.
  15318.  
  15319. SJC12 MX7 59 SET/CLEAR *CPUPFM* ACTIVE FLAG
  15320. LX6 39-0
  15321. LX7 39-0
  15322. BX7 X7*X2
  15323. BX6 X7+X6
  15324. EQ SJC5 COMPLETE PROCESSING
  15325.  
  15326. * SET SCHEDULING PARAMETER INDEX.
  15327.  
  15328. SJC13 SX6 X5-MXJC*JCBE
  15329. PL X6,HNG IF INDEX OUT OF RANGE
  15330. LX2 12
  15331. BX2 -X3*X2 EJT ORDINAL
  15332. CX0 X2,EJT
  15333. TA1 X5+EXQT,JCB GET UPPER BOUND SCHEDULING PRIORITY
  15334. TA2 X0+SCHE,EJT GET EJT SCHEDULING DATA
  15335. LX1 -24
  15336. BX2 X3*X2
  15337. BX1 -X3*X1
  15338. BX6 X2+X1 SET SCHEDULING PRIORITY TO UPPER BOUND
  15339. SA3 B7+CWQW GET CPU SCHEDULING PARAMETERS
  15340. SA6 A2 UPDATE *SCHE*
  15341. MX0 -9
  15342. LX3 -27
  15343. BX6 X0*X3
  15344. BX6 X6+X5 SET PARAMETER IN *CWQW*
  15345. LX3 59-45+27
  15346. LX6 27
  15347. SA6 A3 UPDATE *CWQW*
  15348. NG X3,PPR1 IF CPU PRIORITY NOT SET FROM SERVICE CLASS
  15349. TA1 X5+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
  15350. SB3 RZX SET *SPR* RETURN ADDRESS
  15351. AX1 48
  15352. BX3 X6
  15353. SX5 X1 SERVICE CLASS CPU PRIORITY
  15354. EQ SPR SET CPU PRIORITY
  15355. SMDM SPACE 4,30
  15356. *** SMDM - SET MST DATA.
  15357. * THIS FUNCTION PERFORMS MST UPDATING FUNCTIONS THAT DO NOT
  15358. * REQUIRE THE MST TO BE INTERLOCKED.
  15359. *
  15360. * ENTRY
  15361. *T, OR 12/ SMDM,12/ EQ,12/ PA,12/ SF,12/ PB
  15362. *
  15363. * EQ EST ORDINAL.
  15364. * PA PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
  15365. * BEING PERFORMED.
  15366. * PA = BIT NUMBER FOR SF = CLBS/SLBS.
  15367. * PA = ERROR STATUS FOR SF = SERS/CERS.
  15368. * PA = TRACK NUMBER FOR SF = USTS/SFTS/CFTS.
  15369. * PA = STATUS BITS FOR SF = SSTS.
  15370. * PA = BYTE NUMBER FOR SF = ICTS.
  15371. * SF SUBFUNCTION CODE.
  15372. * SLBS = 0 = SET LOCAL BIT. (STLL)
  15373. * CLBS = 1 = CLEAR LOCAL BIT. (STLL)
  15374. * IUCS = 2 = INCREMENT USER COUNT FIELD. (STLL)
  15375. * DUCS = 3 = DECREMENT USER COUNT FIELD. (STLL)
  15376. * SERS = 4 = SET ERROR STATUS. (STLL)
  15377. * CERS = 5 = CONDITIONALLY CLEAR ERROR STATUS. (STLL)
  15378. * IFCS = 6 = INCREMENT FAMILY COUNT. (DULL)
  15379. * DFCS = 7 = DECREMENT FAMILY COUNT. (DULL)
  15380. * TFIS = 10B = TOGGLE FAMILY IDLE STATUS. (DULL)
  15381. * USTS = 11B = UPDATE SYSTEM TABLE TRACK. (DULL)
  15382. * SFTS = 12B = SET FAILING TRACK. (NVGL)
  15383. * CFTS = 13B = CLEAR FAILING TRACK. (NVGL)
  15384. * SSTS = 14B = SET EQUIPMENT STATE. (DALL)
  15385. * ICTS = 15B = INCREMENT ERROR COUNTER. (CTLL/EDLL)
  15386. * CTCS = 16B = CLEAR TABLES-CURRENT (ISHARED). (SDGL)
  15387. * C1AS = 17B = CLEAR *1RU* ACTIVITY (ISHARED). (MCLL)
  15388. * PB PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
  15389. * BEING PERFORMED.
  15390. * PB = BIT MASK FOR BITS TO CHANGE FOR SF = SSTS.
  15391. *
  15392. * EXIT
  15393. *T, OR 12/ 0,12/ ST,36/
  15394. * ST = 0, IF FUNCTION PERFORMED.
  15395. * ST = 1 IF BIT ALREADY SET FOR SLBS.
  15396. * ST = 1 IF MATCHING TRACK NUMBER FOR SFTS.
  15397. * ST = 1 IF NON-MATCHING TRACK NUMBER FOR CFTS.
  15398. * ST = 1 IF DEVICE ASSIGNED AND DOWN FOR SSTS.
  15399. * ST = BYTE 4 OF *DULL* FOR TFIS.
  15400. *
  15401. * *PP HUNG.* WILL OCCUR IF -
  15402. * 1) IF BIT NUMBER OUT OF RANGE. (SLBS/CLBS)
  15403. * 2) IF ERROR CODE OUT OF RANGE. (SERS/CERS)
  15404. SMDM SPACE 4,20
  15405. ** TSMD - TABLE OF SMDM SUBFUNCTION PARAMETERS.
  15406. * THERE IS A *TSMD* ENTRY FOR EVERY TWO CONSECUTIVE SMDM
  15407. * SUBFUNCTION CODES. EACH ENTRY CONTAINS THE RETURN ADDRESS
  15408. * FOR ROUTINE *CTR*. THE SECOND ENTRY IS CORRECTLY POSITIONED
  15409. * IN THE WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING
  15410. * THE WORD BY 30 BITS.
  15411. *
  15412. * THE ENTRIES ARE BUILT BY THE *SMD* MACRO.
  15413. *
  15414. * SMD SF1,SF2,BLOCK
  15415. *
  15416. * SF1,SF2 TWO CONSECUTIVE SUBFUNCTION CODES.
  15417. * BLOCK THE NAME OF THE *CPUMTR* BLOCK THAT CONTAINS
  15418. * THE PROCESSOR WHEN IT IS CONDITIONALLY
  15419. * LOADED. THE DEFAULT ASSUMES THE PROCESSOR IS
  15420. * UNCONDITIONALLY LOADED.
  15421.  
  15422.  
  15423. SMD SFMACRO PAIRED DEFINE THE *SMD* MACRO
  15424.  
  15425. TSMD BSS 0 TABLE OF SMDM OPTION PARAMETERS.
  15426.  
  15427. SMD SLBS,CLBS
  15428. SMD IUCS,DUCS
  15429. SMD SERS,CERS
  15430. SMD IFCS,DFCS
  15431. SMD TFIS,USTS
  15432. SMD SFTS,CFTS
  15433. SMD SSTS,ICTS
  15434. SMD CTCS,C1AS,ISD
  15435.  
  15436. LOC *O
  15437. TSMDL EQU *-TSMD END OF TABLE
  15438.  
  15439.  
  15440. PPR SMDM
  15441.  
  15442. SX4 X1 CHECK SUBFUNCTION
  15443. ERRPL TSMDL-11B CODE ASSUMES NO SUBFUNCTION .GT. 37B
  15444. SB5 PPRX SET ERROR EXIT ADDRESS
  15445. LX4 -14
  15446. SA2 X4+TSMD READ OPTION TABLE
  15447. SB6 X4-TSMDL CHECK LEGALITY OF OPTION
  15448. NG X4,SMD1 IF SECOND ENTRY IN OPTION TABLE WORD
  15449. LX2 30 SHIFT TO SECOND ENTRY
  15450. SMD1 PL B6,HNG IF ILLEGAL OPTION
  15451. SB3 X2 SET *CTR* RETURN
  15452. SB6 B0 SET *CTR* PARAMETER
  15453. NG X2,HNG IF UNUSED SUBFUNCTION
  15454. EQ /PROGRAM/CTR1 CHECK TRACK REQUEST
  15455.  
  15456. * SET LOCAL MST BIT.
  15457.  
  15458. SUBFUN SMDM,(SLBS,CLBS)
  15459. SX7 X1-60
  15460. PL X7,HNG IF BIT NUMBER OUT OF RANGE
  15461. SA4 A3+STLL READ MST WORD
  15462. SX7 B1
  15463. SB3 X1
  15464. BX2 X7*X2 CHECK FOR INCREMENT/DECREMENT
  15465. LX1 X7,B3 POSITION MST BIT
  15466. UX0 X0 GET SHARED STATUS
  15467. BX6 -X1*X4
  15468. NZ X2,SMD2 IF CLEARING BIT
  15469. BX4 X1*X4
  15470. BX6 X6+X1
  15471. ZR X4,SMD2 IF BIT NOT PREVIOUSLY SET
  15472. LX7 36 POSITION REJECT STATUS
  15473. SMD2 SA6 A4 STORE MST WORD
  15474. SA7 A5 STORE OUTPUT REGISTER
  15475. NG X0,PPRX IF NON-SHARED
  15476. TNZ X0,(/PROGRAM/CLM,MMF,/MONITOR/PPRX) IF MMF DEVICE
  15477. EQ PPRX EXIT
  15478.  
  15479. * INCREMENT/DECREMENT USER COUNTS.
  15480.  
  15481. SUBFUN SMDM,(IUCS,DUCS)
  15482. SX3 10000B
  15483. SA4 A3+STLL READ USER COUNT WORD
  15484. SMD3 LX2 -1 POSITION INCREMENT/DECREMENT BIT
  15485. AX2 59
  15486. BX2 X2-X3 (X2) = 1 IF INCREMENT, -1 IF DECREMENT
  15487. LX3 11
  15488. IX6 X4+X2 PERFORM INCREMENT/DECREMENT
  15489. BX7 X4-X6 CHECK FOR OVERFLOW/UNDERFLOW
  15490. BX7 X3*X7
  15491. SB6 B0
  15492. ZR X7,SMD2 IF NO OVERFLOW/UNDERFLOW
  15493. EQ SMD8 RETURN OVERFLOW STATUS
  15494.  
  15495. * SET ERROR STATUS / CONDITIONALLY CLEAR ERROR STATUS.
  15496.  
  15497. SUBFUN SMDM,(SERS,CERS)
  15498. SX7 X1-MXEC
  15499. PL X7,HNG IF ERROR CODE OUT OF RANGE
  15500. SA4 A3+STLL READ ERROR STATUS WORD
  15501. LX2 -1
  15502. MX0 -6
  15503. LX4 -36 POSITION ERROR STATUS
  15504. BX6 X0*X4 CLEAR OLD ERROR STATUS
  15505. PL X2,SMD4 IF *SERS* SUBFUNCTION
  15506. BX7 -X0*X4 COMPARE ERROR STATUS
  15507. BX1 X7-X1
  15508. NZ X1,PPR1 IF NOT CLEARING DIFFERENT STATUS
  15509. SMD4 BX7 X6+X1 MERGE ERROR STATUS
  15510. LX7 36
  15511. EQ SMD6 STORE NEW ERROR STATUS AND EXIT
  15512.  
  15513. * INCREMENT / DECREMENT FAMILY COUNT SUBFUNCTIONS.
  15514.  
  15515. SUBFUN SMDM,(IFCS,DFCS)
  15516. SA4 A3+DULL READ MST WORD
  15517. SX3 B1+ SET INCREMENT/DECREMENT VALUE
  15518. EQ SMD3 INCREMENT/DECREMENT FIELD
  15519.  
  15520. * TOGGLE FAMILY IDLE STATUS.
  15521.  
  15522. SUBFUN SMDM,(TFIS,USTS)
  15523. LX2 -1 TEST FUNCTION CODE
  15524. MX3 1
  15525. SA4 A3+DULL-TDGL
  15526. NG X2,SMD5 IF *USTS* SUBFUNCTION
  15527. LX3 12
  15528. BX6 X4-X3
  15529. MX7 -48
  15530. LX4 36
  15531. BX7 -X7*X4
  15532. SA6 A4 STORE RESULT
  15533. SA7 A5 STORE OUTPUT REGISTER
  15534. EQ PPRX EXIT TO STORE OUTPUT REGISTER
  15535.  
  15536. * UPDATE SYSTEM TABLE TRACK.
  15537.  
  15538. SMD5 LX4 -12
  15539. BX4 X5*X4 CLEAR OLD SYSTEM TABLE TRACK
  15540. BX7 X1+X4 MERGE NEW SYSTEM TABLE TRACK
  15541. LX7 12
  15542. SMD6 SA7 A4 STORE MST WORD
  15543. BX7 X7-X7 CLEAR OUTPUT REGISTER
  15544. EQ PPR1 EXIT AND STORE OUTPUT REGISTER
  15545.  
  15546. * SET / CLEAR FAULTY TRACK.
  15547.  
  15548. SUBFUN SMDM,(SFTS,CFTS)
  15549. MX7 -11 CHECK TRACK WITHIN TRT
  15550. AX3 48
  15551. BX7 -X7*X1 CLEAR UPPER BIT OF REQUESTED TRACK
  15552. IX7 X7-X3
  15553. PL X7,PPR1 IF INCORRECT TRACK NUMBER
  15554. SA4 A3+NVGL-TDGL GET CURRENT TRACK-TO-FLAW
  15555. MX7 1
  15556. LX1 48 POSITION TRACK NUMBER
  15557. LX2 -1
  15558. ERRNZ SFTS-SFTS/2*2 CODE ASSUMES *SFTS* IS EVEN
  15559. ERRZR CFTS-CFTS/2*2 CODE ASSUMES *CFTS* IS ODD
  15560. BX1 X1+X7 ENSURE THAT BIT 11 IS SET IN TRACK NUMBER
  15561. MX6 12
  15562. BX3 X6*X4
  15563. BX6 -X6*X4
  15564. BX3 X3-X1 COMPARE TRACK NUMBER WITH CURRENT TRACK
  15565. SA4 A3+STLL-TDGL
  15566. NG X2,SMD7 IF *CFTS*
  15567. ZR X3,SMD8 IF SETTING SAME TRACK
  15568. SX3 B0
  15569. BX6 X1+X6 SET NEW TRACK
  15570. SMD7 NZ X3,SMD8 IF CLEARING WRONG TRACK
  15571. SA6 A3+NVGL-TDGL
  15572. LX7 50-59 SET CHECKPOINT REQUEST FLAG
  15573. BX7 X4+X7
  15574. EQ SMD6 STORE CHECKPOINT REQUEST FLAG AND RETURN
  15575.  
  15576. * SSTS - SET EQUIPMENT STATE.
  15577.  
  15578. SUBFUN SMDM,(SSTS,ICTS)
  15579. SX2 X2-SSTS
  15580. SA4 A3+DALL-TDGL UPDATE STATE BITS IN *DALL*
  15581. NZ X2,SMD9 IF *ICTS*
  15582. BX7 -X5*X7 GET BIT MASK
  15583. LX1 54-0 GET NEW STATUS
  15584. LX7 54-0
  15585. LX3 X4,B1 SAVE PREVIOUS STATE
  15586. BX3 X3*X4
  15587. BX4 -X7*X4 CLEAR BITS TO SET
  15588. LX3 59-57
  15589. BX7 X4+X1 MERGE BITS TO SET
  15590. PL X3,SMD6 IF PREVIOUS STATE NOT DOWN
  15591. SA1 A5 REREAD OUTPUT REGISTER
  15592. MX3 -9
  15593. LX1 24
  15594. BX3 -X3*X1 EST ORDINAL
  15595. CX2 X3,EST CONVERT EST ORDINAL TO OFFSET
  15596. TA2 X2+EQAE,EST
  15597. BX2 -X5*X2
  15598. ZR X2,SMD6 IF DEVICE NOT ASSIGNED
  15599. SMD8 SX7 B1 SET REJECT STATUS
  15600. LX7 36
  15601. EQ PPR1 EXIT TO RETURN REJECT STATUS
  15602.  
  15603. * ICTS - INCREMENT ERROR COUNTER.
  15604.  
  15605. SMD9 SA2 A3+EDLL-TDGL
  15606. SA4 PDTL
  15607. BX6 X4
  15608. SA6 A2 SET PACKED DATE AND TIME OF LAST ERROR
  15609. SX6 4
  15610. SA4 A2-B1
  15611. ERRNZ EDLL-CTLL-1 CODE DEPENDS ON VALUE
  15612. AX5 1 SET MASK = -3777
  15613. IX2 X6-X1 4 - BYTE NUMBER
  15614. LX3 X2,B1 *2
  15615. IX3 X2+X3 *3
  15616. LX3 2 (4 - BYTE NUMBER) * 12
  15617. SB3 X3
  15618. SX2 B1
  15619. LX5 B3 POSITION MASK
  15620. LX2 B3 POSITION INCREMENT
  15621. BX3 X5*X4 CLEAR COUNTER FIELD
  15622. IX7 X2+X4 INCREMENT COUNTER
  15623. BX7 -X5*X7 MASK OFF OVERFLOW
  15624. BX7 X7+X3 MERGE COUNTER FIELD AND REST OF WORD
  15625. EQ SMD6 UPDATE *CTLL* WORD AND EXIT
  15626. SPLM SPACE 4
  15627. *** SPLM - SEARCH PERIPHERAL LIBRARY.
  15628. *
  15629. * ENTRY
  15630. *T, OR 12/ SPLM,12/,5/0,1/A,18/ PN,12/
  15631. * A IF SET, *PLD* ADDRESS AND PP NAME RETURNED ON EXIT,
  15632. * RATHER THAN LOAD PARAMETERS.
  15633. * PN PP PACKAGE NAME.
  15634. *
  15635. * EXIT
  15636. *T, OR 12/ 0,6/ RT,6/ EQ,12/ TK,12/ SN,12/ LA (MS)
  15637. *T, OR 12/ 0,6/ RT,18/ PA,12/ PL,12/ LA (RPL)
  15638. *T, OR 12/ 0,6/ RT,18/ SA,12/ PL,12/ LA (SFP)
  15639. *T, OR 12/ 0,5/0,1/1,18/ PN,24/ DA
  15640. * EQ EST ORDINAL.
  15641. * SA ADDRESS OF *SFP* IN *RPL*.
  15642. * PA PROGRAM ADDRESS.
  15643. * LA LOAD ADDRESS.
  15644. * PL PROGRAM LENGTH.
  15645. * TK TRACK.
  15646. * SN SECTOR.
  15647. * RT RESIDENCE AND TYPE CODE.
  15648. * 0 = 12-BIT, MS RESIDENT (NPP).
  15649. * 1 = 12-BIT, *RPL* RESIDENT.
  15650. * 2 = *SFP*.
  15651. * 10 = 16-BIT, *RPL* RESIDENT.
  15652. * 14 = 16-BIT, MS RESIDENT (NPP).
  15653. * MS RESIDENT (CPP).
  15654. * PN PP PACKAGE NAME.
  15655. * DA PP PACKAGE *PLD* ADDRESS (0 IF NOT FOUND).
  15656.  
  15657.  
  15658. PPR SPLM,,,FEX
  15659.  
  15660. BX6 X5
  15661. SB6 CSM SET EXIT ADDRESS
  15662. LX6 30 POSITION PROGRAM NAME
  15663. SX1 B1
  15664. BX1 X1*X6
  15665. TZR X1,(/CPP/SPL,CPP,/MONITOR/SPL) IF NOT *PLD*/PP NAME
  15666. SB6 SPM1 SET RETURN ADDRESS
  15667. TEQ (/CPP/SPL,CPP,/MONITOR/SPL) SEARCH PERIPHERAL LIBRARY
  15668.  
  15669. SPM1 NG X1,PPR1 IF LIBRARY LOCKED
  15670. MX4 19
  15671. LX4 1
  15672. BX7 X4*X6 PROGRAM NAME AND ADDRESS FLAG
  15673. LX7 -18
  15674. SX1 A1 RETURN *PLD* ENTRY ADDRESS
  15675. BX7 X7+X1
  15676. EQ CSM CHECK FOR STORAGE MOVE
  15677. STBM SPACE 4,30
  15678. *** STBM - SET TRACK BIT.
  15679. * THIS FUNCTION PERFORMS MST AND TRT UPDATING FUNCTIONS.
  15680. * THE MST/TRT MUST BE INTERLOCKED TO PREVENT A PROGRAM MODE
  15681. * REQUEST FROM WORKING WITH THE SAME MST/TRT.
  15682. *
  15683. * ENTRY
  15684. *T, OR 12/ STBM,1/ CK,1/ RT,10/ EQ,12/ PM,12/ SF,12/
  15685. *
  15686. * CK IF CK = 1 SET CHECKPOINT BIT.
  15687. * RT RETURN TRACK NOT RESERVED STATUS.
  15688. * EQ EQUIPMENT.
  15689. * PM PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
  15690. * BEING PERFORMED.
  15691. * PM = TRACK FOR SF = STFS/CTFS/STIS/CTIS/SPFS/CPFS.
  15692. * PM = IQFT TRACK FOR SIQS SUBFUNCTIONS.
  15693. * PM = BIT NUMBER FOR CGBS/SGBS SUBFUNCTIONS.
  15694. * PM = NEW UNIT/COUNT FOR SOUS/SRCS SUBFUNCTIONS.
  15695. * SF SUBFUNCTION CODE.
  15696. * STFS = 0 = SET TRACK FLAWED STATUS.
  15697. * CTFS = 1 = CLEAR TRACK FLAWED STATUS.
  15698. * STIS = 2 = SET TRACK INTERLOCKED BIT.
  15699. * CTIS = 3 = CLEAR TRACK INTERLOCKED STATUS.
  15700. * SPFS = 4 = SET PRESERVED FILE STATUS BIT.
  15701. * CPFS = 5 = CLEAR PRESERVED FILE STATUS BIT.
  15702. * UTRS = 6 = UPDATE TRT FROM ECS.
  15703. * UITS = 7 = UPDATE ISHARED TABLES.
  15704. * IIQS = 10B = INTERLOCK IQFT TRACK.
  15705. * SIQS = 11B = SET IQFT TRACK.
  15706. * SGBS = 12B = SET GLOBAL MST BIT. (ACGL)
  15707. * CGBS = 13B = CLEAR GLOBAL MST BIT. (ACGL)
  15708. * IPAS = 14B = INCREMENT PF ACTIVITY COUNT. (DULL)
  15709. * DPAS = 15B = DECREMENT PF ACTIVITY COUNT. (DULL)
  15710. * SPIS = 16B = SET PF INTERLOCK. (DULL)
  15711. * CPIS = 17B = CLEAR PF INTERLOCK. (DULL)
  15712. * SIIS = 20B = SET *INSTALL* INTERLOCK. (DULL)
  15713. * CIIS = 21B = CLEAR *INSTALL* INTERLOCK. (DULL)
  15714. * SLTS = 22B = SET LONG-TERM INTERLOCK. (MCLL)
  15715. * CDIS = 23B = CLEAR DEVICE INTERLOCK. (SDGL)
  15716. * SDIS = 24B = SET DEVICE INTERLOCK. (SDGL)
  15717. * SVIS = 26B = SET VERIFICATION INTERLOCK. (DULL)
  15718. * CVIS = 27B = CLEAR VERIFICATION INTERLOCK. (DULL)
  15719. * SOUS = 30B = SET OFFLINE DAS PARITY UNIT. (ACGL)
  15720. * SRCS = 31B = SET REMAINING CYLINDERS. (ACGL)
  15721. *
  15722. * EXIT
  15723. *T, OR 12/ 0,12/ ST,36/
  15724. * ST = 0, IF FUNCTION PERFORMED.
  15725. * ST = 1 IF BIT ALREADY SET FOR STFS/STIS/SPFS/SGBS.
  15726. * ST = 1 IF NO IQFT TRACK OR IQFT TRACK PREVIOUSLY INTERLOCKED
  15727. * FOR *IIQS* OPTION.
  15728. * ST = 1 IF CANNOT HONOR PF REQUEST DUE TO
  15729. * PF SYSTEM INTERLOCK OR TOO MANY PFM,S ACTIVE.
  15730. * ST = 2 IF TRACK NOT RESERVED.
  15731. * ST = IPC FOR *SPIS* SUBFUNCTION WHERE -
  15732. * I = 1/0, SET IF PF INTERLOCK SET BY REQUEST.
  15733. * PC = 6/0, IF NO PFM,S ACTIVE.
  15734. *
  15735. * *PP HUNG.* WILL OCCUR IF -
  15736. * 1) IF TRACK NOT RESERVED. (CTFS/STIS/CTIS/SPFS/CPFS/IIQS)
  15737. * 2) IF TRACK NOT INTERLOCKED. (CTIS)
  15738. * 3) IF TRACK NOT PRESERVED. (CPFS)
  15739. * 4) IF TRACK NOT FLAWED. (CTFS)
  15740. * 5) IF TRACK INFORMATION NOT ZERO. (STFS)
  15741. * 6) IF MST/TRT INTERLOCK NOT SET. (SLTS/CDIS)
  15742. * 7) IF BIT NUMBER OUT OF RANGE. (SGBS/CGBS)
  15743. * 8) IF PARAMETER VALUE TOO LARGE. (SOUS/SRCS)
  15744. *
  15745. * THIS FUNCTION MAY BE REJECTED IF THE MST/TRT IS INTERLOCKED.
  15746. * WHEN THIS OCCURS BIT 59 OF *OR* IS SET AND *PPR* WILL RECALL
  15747. * *CPUMTR* TO RETRY THE REQUEST. THE REQUEST WILL BECOME
  15748. * STORAGE MOVABLE WHEN IT IS REJECTED.
  15749. * BIT 0 OF *SDGL* INTERLOCKS THE MST/TRT BETWEEN MONITOR AND
  15750. * PROGRAM MODE.
  15751. * FOR SHARED DEVICES BITS 1-5 INDICATES WHICH MACHINE HAS
  15752. * THE MST/TRT INTERLOCKED IN EXTENDED MEMORY.
  15753. * FOR INDEPENDENT SHARED DEVICES BITS 1-5 ARE USED BY *1RU*
  15754. * TO INDICATE THE DEVICE IS INTERLOCKED IN THE LABEL.
  15755. * THE MST/TRT INTERLOCK CONTROLS THE UPDATING OF THE TRT
  15756. * AND MST WORDS TDGL AND ACGL.
  15757. *
  15758. * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
  15759. * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
  15760. * BEFORE THE STBM IS PROCESSED BY *CPUMTR*.
  15761. STBM SPACE 4,20
  15762. ** TSTB - TABLE OF STBM SUBFUNCTION PARAMETERS.
  15763. * THERE IS A *TSTB* ENTRY FOR EVERY TWO CONSECUTIVE STBM
  15764. * SUBFUNCTION CODES. EACH ENTRY CONSISTS OF A PARAMETER AND
  15765. * RETURN ADDRESS FOR ROUTINE *CTR*. TWO ENTRIES ARE PACKED
  15766. * IN A WORD SUCH THAT THE LOWER 18 AND UPPER 12 BITS FORM
  15767. * AN ENTRY. THE SECOND ENTRY IS CORRECTLY POSITIONED IN THE
  15768. * WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING THE
  15769. * WORD BY 30 BITS.
  15770. *
  15771. * THE ENTRIES ARE BUILT BY THE *STB* MACRO.
  15772. *
  15773. * STB SF1,SF2,(OPTIONS),BLOCK
  15774. *
  15775. * SF1,SF2 TWO CONSECUTIVE SUBFUNCTION CODES.
  15776. * OPTIONS OPTIONS TO BE PASSED TO *CTR*.
  15777. * *DI* = SET DEVICE INTERLOCK.
  15778. * BLOCK THE NAME OF THE *CPUMTR* BLOCK THAT CONTAINS
  15779. * THE PROCESSOR WHEN IT IS CONDITIONALLY
  15780. * LOADED. THE DEFAULT ASSUMES THE PROCESSOR IS
  15781. * UNCONDITIONALLY LOADED.
  15782.  
  15783.  
  15784. STB SFMACRO PAIRED,(DI=1) DEFINE THE *STB* MACRO
  15785.  
  15786. TSTB BSS 0 TABLE OF STBM OPTION PARAMETERS.
  15787.  
  15788. STB STFS,CTFS,DI
  15789. STB STIS,CTIS,DI
  15790. STB SPFS,CPFS,DI
  15791. STB UTRS,UITS,DI
  15792. STB IIQS,SIQS,DI
  15793. STB SGBS,CGBS,DI
  15794. STB IPAS,DPAS,DI
  15795. STB SPIS,CPIS,DI
  15796. STB SIIS,CIIS,DI
  15797. STB SLTS,CDIS
  15798. STB SDIS,25BS,DI
  15799. STB SVIS,CVIS,DI
  15800. STB SOUS,SRCS,DI
  15801.  
  15802. LOC *O
  15803. TSTBL EQU *-TSTB END OF TABLE
  15804.  
  15805.  
  15806. PPR STBM,,STB
  15807.  
  15808. SX4 X1 CHECK SUBFUNCTION
  15809. ERRPL TSTBL-11B CODE ASSUME NO SUBFUNCTION .GT. 37B
  15810. SB5 PPRX SET ERROR EXIT ADDRESS
  15811. LX4 -14
  15812. SA2 X4+TSTB READ OPTION TABLE
  15813. SB6 X4-TSTBL CHECK LEGALITY OF OPTION
  15814. NG X4,STB1 IF SECOND ENTRY IN OPTION TABLE WORD
  15815. LX2 30 SHIFT TO SECOND ENTRY
  15816. STB1 PL B6,HNG IF ILLEGAL OPTION
  15817. NG X2,HNG IF UNUSED SUBFUNCTION
  15818. SB3 X2 SET *CTR* RETURN
  15819. UX2,B6 X2 SET *CTR* PARAMETER
  15820. TNZ B6,(/ISD/CHR,ISD,/PROGRAM/CTR1) IF INTERLOCK NEEDED
  15821. EQ /PROGRAM/CTR1 CHECK TRACK REQUEST
  15822.  
  15823. * SET GLOBAL MST BIT.
  15824.  
  15825. SUBFUN STBM,(SGBS,CGBS)
  15826. SX7 X1-60
  15827. PL X7,HNG IF BIT NUMBER OUT OF RANGE
  15828. SA4 A3+ACGL READ MST WORD
  15829. SX7 B1
  15830. SB3 X1
  15831. BX2 X7*X2 CHECK FOR INCREMENT/DECREMENT
  15832. LX1 X7,B3 POSITION MST BIT
  15833. BX6 -X1*X4
  15834. NZ X2,STB2 IF CLEARING BIT
  15835. BX4 X1*X4
  15836. BX6 X6+X1
  15837. ZR X4,STB2 IF BIT NOT PREVIOUSLY SET
  15838. LX7 36 POSITION REJECT STATUS
  15839. STB2 SA6 A4 STORE MST WORD
  15840. EQ /PROGRAM/CCP1 EXIT
  15841.  
  15842. * SET/CLEAR IQFT TRACK.
  15843. * SET IQFT TRACK INTERLOCKED.
  15844.  
  15845. SUBFUN STBM,(IIQS,SIQS)
  15846. SA4 A3+ACGL READ MST WORD
  15847. LX4 -12 POSITION OLD IQFT TRACK
  15848. BX3 X1 NEW IQFT TRACK
  15849. LX2 -1
  15850. BX1 -X5*X4 OLD IQFT TRACK
  15851. PL X2,/PROGRAM/STB2 IF *IIQS* SUBFUNCTION
  15852. BX6 X5*X4 CLEAR OLD TRACK
  15853. BX6 X3+X6 MERGE NEW IQFT TRACK
  15854. LX6 12
  15855. EQ STB2 RETURN COMPLETED STATUS
  15856.  
  15857. STB3 SX7 B1
  15858. LX7 36 SET REJECT STATUS
  15859. EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
  15860.  
  15861. * SET DEVICE INTERLOCK.
  15862.  
  15863. SUBFUN STBM,(SDIS,25BS)
  15864. LX2 -1
  15865. UX0 X0
  15866. NG X2,HNG IF UNUSED SUBFUNCTION
  15867. ERRNZ SDIS-SDIS/2*2 CODE ASSUMES *SDIS* IS EVEN
  15868. NZ X0,/PROGRAM/CSM1 IF NOT ISHARED DEVICE
  15869. TEQ (/ISD/STB2,ISD,/MONITOR/HNG1) PROCESS ISHARED DEVICE
  15870.  
  15871. * SET LONG-TERM INTERLOCK (ISHARED ONLY).
  15872. * CLEAR DEVICE INTERLOCK.
  15873.  
  15874. SUBFUN STBM,(SLTS,CDIS)
  15875. SA4 A4 READ *SDGL* WORD
  15876. BX1 X1-X1
  15877. SX5 B4+
  15878. LX2 -1
  15879. LX4 -1
  15880. PL X4,HNG IF DEVICE NOT INTERLOCKED
  15881. NG X0,/PROGRAM/CCP1 IF NON-SHARED DEVICE
  15882. TPL X2,(/ISD/STB3,ISD,/MONITOR/HNG1) IF *SLTS*
  15883. TEQ (/ISD/STB4,ISD,/PROGRAM/CCP1) CLEAR DEVICE INTERLOCK
  15884.  
  15885. * UPDATE TABLES.
  15886.  
  15887. SUBFUN STBM,(UTRS,UITS)
  15888. LX2 -1
  15889. UX4,B3 X0
  15890. PL X2,/PROGRAM/CCP1 IF UTRS
  15891. NZ X4,/PROGRAM/CCP1 IF NOT ISHARED DEVICE
  15892. SB3 B6+B3 *MRT* FWA
  15893. TEQ (/ISD/SMU,ISD,/MONITOR/HNG1) UPDATE ISHARED TABLES
  15894.  
  15895. * INCREMENT / DECREMENT DEVICE PF COUNT.
  15896.  
  15897. SUBFUN STBM,(IPAS,DPAS)
  15898. SX2 X2-IPAS
  15899. NZ X2,STB4 IF NOT INCREMENT
  15900. MX1 2
  15901. SX4 B1
  15902. LX1 42-59
  15903. BX7 X1*X3
  15904. NZ X7,/PROGRAM/CCP1 IF INTERLOCKED OR OVERFLOW
  15905. SA2 A3+DULL-TDGL READ LOCAL COUNT
  15906. LX4 36
  15907. BX7 X1*X2
  15908. NZ X7,HNG1 IF LOCAL INTERLOCK OR OVERFLOW
  15909. EQ STB5 PERFORM INCREMENT
  15910.  
  15911. STB4 MX1 6
  15912. SX4 -B1
  15913. LX1 41-59
  15914. BX7 X1*X3
  15915. ZR X7,HNG1 IF NO GLOBAL COUNT SET
  15916. SA2 A3+DULL-TDGL READ LOCAL COUNT
  15917. LX4 36
  15918. BX7 X1*X2
  15919. ZR X7,HNG1 IF NO LOCAL COUNT
  15920. STB5 IX6 X3+X4 INCREMENT GLOBAL COUNT
  15921. SA6 A3
  15922. IX6 X2+X4 INCREMENT LOCAL COUNT
  15923. SA6 A2
  15924. EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
  15925.  
  15926. * SET / CLEAR UTILITY INTERLOCK.
  15927.  
  15928. SUBFUN STBM,(SPIS,CPIS)
  15929. SX0 X2-SPIS 0 = SET, 1 = CLEAR UTILITY INTERLOCK
  15930. SB4 42
  15931. STB6 SX1 B1
  15932. LX0 B4
  15933. LX1 B4
  15934. BX7 -X3*X0
  15935. NZ X7,HNG1 IF CLEARING CLEARED INTERLOCK
  15936. SA2 A3+DULL-TDGL
  15937. BX6 X1-X3
  15938. NZ X0,STB7 IF CLEARING INTERLOCK
  15939. BX7 X1*X3
  15940. SB3 42
  15941. NZ X7,/PROGRAM/CCP1 IF INTERLOCK PREVIOUSLY SET
  15942. NE B4,B3,STB7 IF NOT *SPIS* SUBFUNCTION
  15943. MX7 7
  15944. LX7 42-59
  15945. STB7 BX7 X7*X3
  15946. SA6 A3
  15947. BX6 X2-X1
  15948. SA6 A2
  15949. EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
  15950.  
  15951. * INSTALL INTERLOCK PROCESSING.
  15952.  
  15953. SUBFUN STBM,(SIIS,CIIS)
  15954. SX0 X2-SIIS 0 = SET INSTALL INTERLOCK
  15955. SB4 43
  15956. EQ STB6 SET / CLEAR INTERLOCK
  15957.  
  15958. * DEVICE VERIFICATION INTERLOCK PROCESSING.
  15959.  
  15960. SUBFUN STBM,(SVIS,CVIS)
  15961. SX0 X2-SVIS 0 = SET VERIFICATION INTERLOCK
  15962. SB4 46
  15963. EQ STB6 SET / CLEAR INTERLOCK
  15964.  
  15965. * SET OFFLINE UNIT NUMBER (*DAS* PARITY DEVICE).
  15966. * SET REMAINING CYLINDERS / 100B (*DAS* PARITY RESTORE).
  15967.  
  15968. SUBFUN STBM,(SOUS,SRCS)
  15969. MX7 54
  15970. BX6 X7*X1
  15971. NZ X6,HNG IF PARAMETER VALUE TOO LARGE
  15972. LX7 36
  15973. LX1 36
  15974. LX2 -1
  15975. NG X2,STB8 IF *SRCS* SUBFUNCTION
  15976. LX7 6
  15977. LX1 6
  15978. STB8 SA4 A3+ACGL-TDGL READ MST WORD
  15979. BX6 X7*X4 CLEAR OLD VALUE
  15980. BX6 X6+X1 SET NEW VALUE
  15981. SA6 A4 STORE MST WORD
  15982. MX7 0
  15983. EQ /PROGRAM/CCP1 EXIT
  15984. TDAM SPACE 4,25
  15985. *** TDAM - TRANSFER DATA TO/FROM JOB - FROM TO MESSAGE BUFFER.
  15986. * IF TRANSFER TO JOB THE FIRST WORD BEING TRANSFERRED TO
  15987. * MUST BE 0.
  15988. *
  15989. * ENTRY
  15990. *T, OR 12/ TDAM,9/0,1/T,1/C,1/R,12/ SID,6/ WC,18/ ADDRESS
  15991. * T = 1, INCREMENT TAPE ACTIVITY IF WRITE COMPLETE.
  15992. * C = 1, SET COMPLETION BIT SPECIFIED BY *ADDRESS*.
  15993. * R = 0 IF READ DATA FROM SUBSYSTEM FL TO PP MESSAGE BUFFER.
  15994. * = 1 IF WRITE DATA FROM PP MESSAGE BUFFER TO SUBSYSTEM FL.
  15995. * SID = SUBSYSTEM IDENTIFICATION.
  15996. * WC = NUMBER OF WORDS TO TRANSFER.
  15997. * = REPLY CODE IF COMPLETION BIT OPTION SELECTED (*C*=1).
  15998. * ADDRESS = RELATIVE ADDRESS OF RECEIVING BUFFER.
  15999. * = 0, SPECIAL SUBSYSTEM RECEIVING BUFFER USED (SSCR).
  16000. *
  16001. * EXIT
  16002. *T, OR 12/ 0, 12/ ST, 12/ EJTO, 24/ JSN
  16003. * ST = 0, OPERATION COMPLETE.
  16004. * ST = 1, MOVE IN PROGRESS.
  16005. * ST = 2, NOT READY FOR DATA.
  16006. * ST = 3, REJECT (WRITE REQUEST TO NON-ZERO FIRST WORD)
  16007. * ST = 4, INACTIVE OR JOB ADVANCE SET.
  16008. * ST = 5, SCP INVALID PARAMETERS.
  16009. * EJTO = EJT ORDINAL OF SCP IF *ST* = 5.
  16010. * JSN = JOB SEQUENCE NUMBER OF SCP IF *ST* = 5.
  16011. *
  16012. * HANG CONDITIONS -
  16013. * SPECIAL BUFFER OR SET COMPLETE BIT SPECIFIED AND SCP
  16014. * FACILITY NOT ENABLED.
  16015. * INCORRECT WORD COUNT.
  16016. * LAST WORD TO BE TRANSFERED NOT IN SUBSYSTEM FL.
  16017. * OVERFLOW INCREMENTING TAPE ACTIVITY.
  16018.  
  16019.  
  16020. PPR TDAM
  16021.  
  16022. LX1 -36
  16023. SB3 TDA1 *RSC* RETURN ADDRESS
  16024. MX0 -12
  16025. SX7 B1 PRESET STORAGE MOVE - JOB ADVANCE STATUS
  16026. SX4 X1 FLAGS
  16027. LX1 12
  16028. SB5 X5 SUBSYSTEM ADDRESS
  16029. LX7 36
  16030. BX1 -X0*X1 SUBSYSTEM IDENTIFICATION
  16031. EQ RSC RETURN SUBSYSTEM LOCATION
  16032.  
  16033. * *RSC* EXIT ADDRESSES.
  16034.  
  16035. VFD 12/TDA3-TDA1,18/HNG,12/TDA3-TDA1,18/PPR1
  16036.  
  16037. TDA1 SX1 ICAN
  16038. IX1 X3-X1
  16039. ERX1 X1 GET INTER-CONTROL POINT COMMUNICATION WORD
  16040. SB4 X4-2 CHECK FOR SET COMPLETION BIT ONLY
  16041. SB3 X6 SUBSYSTEM FL
  16042. LX7 1 SET NOT READY STATUS
  16043. TZR B5,(/MONITOR/SSR,SCP,/MONITOR/HNG) IF SPECIAL BUFFER
  16044. TZR B4,(/MONITOR/SCB,SCP,/MONITOR/HNG) IF SET COMPLETION
  16045. AX5 6
  16046. PL X1,PPR1 IF NOT READY TO RECEIVE DATA
  16047. SX5 X5
  16048. SB3 X6 (B4) = SUB-SYSTEM FL
  16049. AX5 12 (X5) = WORD COUNT
  16050. SX0 B5 RELATIVE ADDRESS TO X0
  16051. IX0 X0+X3 ABSOLUTE SUB SYSTEM ADDRESS
  16052. SX1 X5-7 CHECK FOR LEGAL WORD COUNT
  16053. SX5 X5-1
  16054. BX1 -X5*X1
  16055. SB6 B5+X5
  16056. PL X1,HNG IF ILLEGAL WORD COUNT
  16057. GE B6,B3,HNG IF OUTSIDE SUB-SYSTEM FL
  16058. SX1 A5+1 MESSAGE BUFFER ADDRESS
  16059. AX6 X7,B1
  16060. SB4 X5+1 WORD COUNT
  16061. IX1 X0-X1 DIFFERENCE
  16062. ZR X4,TDA2 IF READ
  16063. SX0 A5+B1 REVERSE TRANSFER
  16064. IX7 X6+X7 SET REJECT STATUS
  16065. IX3 X0+X1 SUB SYSTEM BUFFER
  16066. ERX3 X3
  16067. MX6 60
  16068. BX1 X6-X1 COMPLEMENT DIFFERENCE
  16069. NZ X3,PPR1 IF NON-ZERO FIRST WORD
  16070. NG X3,PPR1 IF NON-ZERO FIRST WORD
  16071.  
  16072. * DATA TRANSFER LOOP.
  16073.  
  16074. TDA2 SB6 TDA2.2 *MSR* RETURN
  16075. SX2 X4+ SAVE FLAGS
  16076. TNO /CME/MSR,CME
  16077. SB6 X1+
  16078. TDA2.1 SB4 B4-B1 DECREMENT WORD COUNT
  16079. SA3 X0+B4
  16080. BX7 X3
  16081. SA7 A3-B6
  16082. NZ B4,TDA2.1 IF MORE TO MOVE, CONTINUE
  16083. TDA2.2 BX7 X7-X7 SET COMPLETION STATUS
  16084. ZR X2,PPR1 IF READ - EXIT TO STORE OUTPUT REGISTER
  16085. LX2 59-2
  16086. PL X2,TDA2.3 IF NOT TO INCREMENT TAPE ACTIVITY
  16087. SA1 B7+STSW
  16088. SX0 360B
  16089. SX6 20B
  16090. BX2 X0*X1 CURRENT TAPE/RECALL ACTIVITY
  16091. IX6 X1+X6 INCREMENT TAPE ACTIVITY
  16092. IX2 X0-X2
  16093. ZR X2,HNG IF ACTIVITY ALREADY AT MAXIMUM
  16094. SA6 A1+ UPDATE TAPE ACTIVITY
  16095.  
  16096. * ENTRY FROM *SSR* TO START SUB-SYSTEM EXECUTIVE.
  16097.  
  16098. TDA2.3 SA1 A2+CWQW-STSW GET RECALL STATUS
  16099. SA7 A5 STORE OUTPUT REGISTER
  16100. LX1 59-46
  16101. SB6 A2-STSW SET JOB EXCHANGE PACKAGE ADDRESS
  16102. NG X1,PPRX IF NOT TO RECALL CPU
  16103. SB3 PPRX *RCC* RETURN ADDRESS
  16104. EQ RCC RECALL CPU
  16105.  
  16106. * EXIT FOR SCP NOT ACTIVE. (ALSO ENTERED HERE FROM *SSR*.)
  16107.  
  16108. TDA3 SX7 B1 RETURN STATUS 4
  16109. LX7 36+2
  16110. EQ PPR1
  16111. TDRM SPACE 4,25
  16112. *** TDRM - INTERLOCK TAPE DRIVER REQUEST.
  16113. *
  16114. * ENTRY
  16115. *T, OR 12/ TDRM,12/ UDTA,10/,1/B,25/
  16116. *
  16117. * UDTA UDT ADDRESS
  16118. * B UNIT BUSY STATUS.
  16119. *
  16120. * EXIT
  16121. *T, OR 12/ 0,48/,12/ STATUS
  16122. *T, MB 60/ FTAB
  16123. *T, MB+1 60/ ASCM
  16124. *
  16125. * STATUS 1 = REQUEST IN PROGRESS SET.
  16126. * 0 = NO DRIVER REQUEST PRESENT, REQUEST ALREADY IN
  16127. * PROGRESS OR COMPLETE, OR REQUEST REQUEUED.
  16128. * FTAB *1MT* FUNCTION TABLE ENTRY IF REQUEST IN PROGRESS SET.
  16129. * ASCM *ASCM* FUNCTION TO LOAD FIRST *1MT* OVERLAY IF REQUEST
  16130. * IN PROGRESS SET AND PLD NOT LOCKED.
  16131. * 0 IF REQUEST IN PROGRESS SET AND PLD INTERLOCKED.
  16132. *
  16133. * HANG CONDITIONS -
  16134. * CALLING PP NOT ASSIGNED TO MAGNET CP.
  16135. * INCORRECT UDT ADDRESS.
  16136.  
  16137.  
  16138. PPR TDRM
  16139.  
  16140. SA2 B7+JCIW
  16141. SA4 B7+FLSW
  16142. AX1 36 SET UDT ADDRESS
  16143. MX0 -12
  16144. ZR X1,HNG IF NO UDT ADDRESS
  16145. LX2 -24
  16146. BX6 -X0*X4
  16147. BX2 -X0*X2 SUBSYSTEM ID
  16148. LX6 6 FL
  16149. MX0 -RMSK
  16150. LX4 -RSHF
  16151. SX6 X6-/MTX/UNITL
  16152. BX4 -X0*X4
  16153. SX2 X2-MTSI
  16154. LX4 6 RA
  16155. NZ X2,HNG IF NOT CALLED BY MAGNET
  16156. IX6 X1-X6
  16157. IX3 X4+X1 UDT ABSOLUTE ADDRESS
  16158. PL X6,HNG IF UDT ENTRY NOT IN FL
  16159. ERX1 X3 GET *UXRQ*
  16160. ERRNZ /MTX/UXRQ
  16161. MX0 12
  16162. BX0 X0*X1 REQUEST STATUS
  16163. NZ X0,PPR1 IF REQUEST ALREADY IN PROGRESS OR COMPLETE
  16164. LX1 -36
  16165. MX0 -6
  16166. BX2 -X0*X1 REQUEST CODE
  16167. SX6 X2-/MTX/MDFN
  16168. PL X6,PPR1 IF NOT *1MT* REQUEST
  16169. SX6 X2+/MTX/TFUN-1
  16170. ZR X2,PPR1 IF NO REQUEST
  16171. IX6 X4+X6 FUNCTION TABLE ENTRY ABSOLUTE ADDRESS
  16172. LX5 53-25
  16173. ERX2 X6 READ FUNCTION TABLE ENTRY
  16174. BX5 X5*X2 BUSY STATUS .AND. REQUEUE ON UNIT BUSY
  16175. LX5 59-53
  16176. LX0 6
  16177. PL X5,TDR2 IF NOT TO REQUEUE REQUEST
  16178.  
  16179. * REQUEUE REQUEST.
  16180.  
  16181. SX2 100B
  16182. BX4 -X0*X1 COUNT OF REQUEUES WITHOUT DELAY
  16183. IX6 X1+X2 INCREMENT REQUEUES WITHOUT DELAY
  16184. SX4 X4-7700B
  16185. BX1 X0*X1 CLEAR REQUEUE COUNT
  16186. ZR X4,TDR1 IF MAXIMUM REQUEUES WITHOUT DELAY
  16187. LX6 36
  16188. EWX6 X3 UPDATE *UXRQ*
  16189. EQ PPR1 EXIT TO SET OUTPUT REGISTER
  16190.  
  16191. TDR1 SX6 /MTX/RBS
  16192. LX1 36
  16193. LX6 48
  16194. BX6 X6+X1 SET REQUEUE ON UNIT BUSY
  16195. EWX6 X3 UPDATE *UXRQ*
  16196. EQ PPR1 EXIT TO SET OUTPUT REGISTER
  16197.  
  16198. * SET REQUEST IN PROGRESS.
  16199.  
  16200. TDR2 BX1 X0*X1 CLEAR REQUEUE COUNT
  16201. SX6 /MTX/RIP
  16202. LX1 36
  16203. LX6 48
  16204. BX7 X2
  16205. BX6 X1+X6 SET REQUEST IN PROGRESS
  16206. SA7 A5+B1 SET FUNCTION TABLE ENTRY
  16207. EWX6 X3 UPDATE *UXRQ*
  16208. MX0 6
  16209. SX6 2L3M
  16210. BX2 X0*X2 OVERLAY NAME THIRD CHARACTER
  16211. LX6 42
  16212. LX2 -12
  16213. BX6 X6+X2 SET OVERLAY NAME
  16214. SB6 TDR3 SET RETURN ADDRESS
  16215. EQ SPL SEARCH FOR OVERLAY
  16216.  
  16217. TDR3 SX6 B0
  16218. R= X2,ASCM
  16219. NG X1,TDR4 IF LIBRARY LOCKED
  16220. NZ X5,TDR4 IF OVERLAY NOT FOUND
  16221. LX2 48
  16222. BX6 X2+X7 SET *ASCM* PARAMETERS
  16223. TDR4 SX7 1 INDICATE REQUEST IN PROGRESS SET
  16224. SA6 A5+2 SET OVERLAY PARAMETERS
  16225. EQ PPR1 EXIT TO SET OUTPUT REGISTER
  16226. TGPM SPACE 4,20
  16227. ** TGPM - PROCESS REQUEST FOR *IAF* POT CHAIN
  16228. *
  16229. * A POT POINTER IS TAKEN OUT OF ONE OF THE *TGPM* QUEUES
  16230. * IN *IAF*. THIS POT POINTER IS RETURNED IN THE OUTPUT
  16231. * REGISTER. IF THERE IS NO POT POINTER IN THE QUEUE, AN
  16232. * ERROR COUNTER IS INCREMENTED AND A REJECT IS RETURNED.
  16233. * IF *IAF* IS UNACCESSIBLE OR ERROR FLAGS ARE SET, THE
  16234. * OUTPUT REGISTER IS CLEARED.
  16235. *
  16236. * ENTRY
  16237. *T,OR 12/ TGPM, 12/ PCL, 36/ 0.
  16238. * PCL POT CHAIN LENGTH.
  16239. *
  16240. * EXIT
  16241. *T,OR 12/ 0, 12/ PP, 36/ 0.
  16242. * PP 7777, IF NO POTS ARE AVAILABLE,
  16243. * 0, IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET,
  16244. * ELSE, THE POT POINTER.
  16245.  
  16246.  
  16247. PPR TGPM
  16248.  
  16249. SB3 TGP1
  16250. EQ CIA CHECK *IAF* ACCESSIBILITY
  16251.  
  16252. TGP1 SA2 VCPT*200B+FLSW
  16253. NZ B4,PPR1 IF *IAF* INACCESSIBLE OR ERROR FLAG SET
  16254. SA3 TGPA GET SHORT POT CHAIN POINTER
  16255. MX0 -RMSK
  16256. AX1 36
  16257. AX2 RSHF
  16258. SB4 X1-VSCL-1
  16259. BX2 -X0*X2
  16260. LX2 6 (X2) = REFERENCE ADDRESS
  16261. PL B4,TGP5 IF LONG POT CHAIN NEEDED
  16262. SB4 -VTLP GET SHORT POT CHAIN QUEUE LIMIT
  16263. SX5 VTSP
  16264. TGP2 IX7 X3+X2
  16265. ERX4 X7
  16266. ZR X4,TGP6 IF NO POT IN *TGPM* QUEUE
  16267. BX6 X6-X6
  16268. EWX6 X7 CLEAR QUEUE ENTRY
  16269. SX6 X3+1 INCREMENT QUEUE POINTER
  16270. SB4 X6+B4
  16271. NG B4,TGP4 IF LIMIT
  16272. BX6 X5 RESET TO BEGINNING OF QUEUE
  16273. TGP4 SA6 A3+
  16274. LX4 36
  16275. BX7 X4
  16276. EQ PPR1 RETURN POT POINTER
  16277.  
  16278. TGP5 SA3 TGPB GET LONG POT CHAIN POINTER
  16279. SX5 VTLP
  16280. SB4 -VTEQ GET LONG POT CHAIN QUEUE LIMIT
  16281. EQ TGP2 CONTINUE
  16282.  
  16283. TGP6 SX5 VTGR COUNT NO POT AVAILABLE
  16284. IX5 X2+X5
  16285. ERX2 X5
  16286. MX7 12 SET ERROR RESPONSE
  16287. SX6 B1
  16288. LX7 -12
  16289. IX6 X6+X2
  16290. EWX6 X5
  16291. EQ PPR1 RETURN ERROR
  16292.  
  16293.  
  16294. TGPA CON VTSP SHORT POT CHAIN QUEUE POINTER
  16295. TGPB CON VTLP LONG POT CHAIN QUEUE POINTER
  16296. TIOM SPACE 4,30
  16297. *** TIOM - TAPE I/O PROCESSOR.
  16298. *
  16299. * UPDATES TAPE ACCOUNTING.
  16300. * THE PP IS CHANGED TO *MAGNET,S* CONTROL POINT.
  16301. * IF COMPLETION CODE .NE. 0, THE SPECIFIED UDT WORD IS CLEARED
  16302. * THE FET IS COMPLETED, AND THE ACTIVITY COUNT IS DECREMENTED.
  16303. *
  16304. * ENTRY
  16305. *T, OR 12/ TIOM,12/ UDT,1/W,11/ AI,6/ AM,18/ CC
  16306. * UDT UNIT DESCRIPTOR TABLE ADDRESS.
  16307. * W READ/WRITE INDICATOR (0 = READ, 1 = WRITE).
  16308. * AI ACCOUNTING INCREMENT.
  16309. * AM ACCOUNTING MULTIPLIER.
  16310. * IF NON-ZERO, AI*AM IS APPLIED TO MT ACCUMULATOR.
  16311. * IF ZERO, AI IS APPLIED TO MT ACCUMULATOR.
  16312. * CC FET COMPLETION CODE IF COMPLETING CIO REQUEST. IF
  16313. * ZERO, THE FET AND FST WILL NOT BE SET COMPLETE AND
  16314. * THE TAPE ACTIVITY WILL NOT BE DECREMENTED. NOTE
  16315. * THAT A NON-ZERO VALUE MUST BE SPECIFIED ON A TAPE
  16316. * RETURN REQUEST TO CAUSE THE TAPE ACTIVITY TO BE
  16317. * DECREMENTED.
  16318. *
  16319. * EXIT
  16320. *T, OR 12/ 0,48/ (UNCHANGED)
  16321. *
  16322. * HANG CONDITIONS -
  16323. * MAGNET NOT PRESENT OR NOT ACCESSIBLE.
  16324. * INCORRECT UDT ADDRESS.
  16325. * NO TAPE ACTIVITY PRESENT.
  16326. * INCORRECT FET ADDRESS.
  16327.  
  16328.  
  16329. PPR TIOM
  16330.  
  16331. * CHECK MAGNET STATUS.
  16332.  
  16333. SX1 MTSI SET MAGNET SUBSYSTEM ID
  16334. SB5 PPRX SET *REJ* RETURN ADDRESS
  16335. SB3 TIO1 SET *RSC* NORMAL RETURN ADDRESS
  16336. SX0 -7777B
  16337. EQ RSC CHECK MAGNET STATUS
  16338.  
  16339. * VALIDATE UDT ADDRESSES AND TAPE ACTIVITY.
  16340.  
  16341. VFD 12/HNG-TIO1,18/HNG,12/HNG-TIO1,18/REJ
  16342.  
  16343. TIO1 SA1 B7+STSW
  16344. SB3 X5 SAVE FET STATUS
  16345. LX5 -36
  16346. BX2 -X0*X5
  16347. SX2 X2+/MTX/UBLC *UBLC* RELATIVE ADDRESS
  16348. IX6 X2-X6
  16349. IX4 X3+X2 *UBLC* ABSOLUTE ADDRESS
  16350. PL X6,HNG IF UDT WORDS NOT IN MAGNET FL
  16351. ERRNG /MTX/UBLC-/MTX/UFRQ VALIDATE *UFRQ* IN FL
  16352. ERRNG /MTX/UBLC-/MTX/UCIA VALIDATE *UCIA* IN FL
  16353. ERX3 X4 READ *UBLC*
  16354. SX6 360B
  16355. BX6 X6*X1
  16356. MX7 11
  16357. ZR X6,HNG IF NO TAPE ACTIVITY PRESENT
  16358.  
  16359. * UPDATE BLOCK COUNT IN UDT.
  16360.  
  16361. LX7 -1
  16362. BX6 X7*X5 BLOCKS TRANSFERRED
  16363. LX6 -12
  16364. PL X5,TIO2 IF UPDATING BLOCKS READ
  16365. LX6 -24
  16366. TIO2 IX6 X3+X6 COUNT BLOCKS READ OR WRITTEN
  16367. EWX6 X4 UPDATE *UBLC*
  16368. ZR B3,TIO4 IF NOT COMPLETING REQUEST
  16369.  
  16370. * DECREMENT TAPE ACTIVITY AND CHECK REQUEST TYPE.
  16371.  
  16372. SX6 /MTX/UBLC-/MTX/UFRQ
  16373. IX4 X4-X6 *UFRQ* ABSOLUTE ADDRESS
  16374. ERX3 X4 READ *UFRQ*
  16375. SX6 20B
  16376. IX6 X1-X6 DECREMENT TAPE ACTIVITY
  16377. SA6 A1
  16378. BX2 -X0*X3 *CIO* REQUEST FNT ADDRESS
  16379. ZR X3,HNG IF NO REQUEST
  16380. SX6 B0
  16381. AX3 48
  16382. EWX6 X4 CLEAR *UFRQ*
  16383. SX3 X3-/MTX/CIO
  16384. SX6 /MTX/UCIA-/MTX/UFRQ
  16385. NZ X3,TIO8 IF NOT *CIO* REQUEST
  16386.  
  16387. * VERIFY FNT AND FET ADDRESS.
  16388.  
  16389. SA1 B7+FLSW
  16390. IX4 X4+X6 *UCIA* ABSOLUTE ADDRESS
  16391. ERX3 X4 READ *UCIA*
  16392. MX7 -18
  16393. BX6 -X0*X1 FL/100B
  16394. LX1 -48
  16395. BX3 -X7*X3 RELATIVE FET ADDRESS
  16396. BX4 -X0*X1 NFL/100B
  16397. SB4 X3+ RELATIVE FET ADDRESS
  16398. LX6 6 FL
  16399. LX4 6 NFL
  16400. SB5 X6+ FL
  16401. IX4 X2-X4
  16402. LE B4,B1,HNG IF INCORRECT FET ADDRESS
  16403. PL X4,HNG IF FNT ADDRESS NOT IN NFL
  16404.  
  16405. * SET FST COMPLETE.
  16406.  
  16407. LX1 36
  16408. MX6 -RMSK
  16409. SX2 X2-FSTL RELATIVE FST ADDRESS
  16410. BX6 -X6*X1
  16411. LX6 6 RA
  16412. IX2 X6-X2 ABSOLUTE FST ADDRESS
  16413. IX3 X6+X3 ABSOLUTE FET ADDRESS
  16414. ERX1 X2 READ FST
  16415. SX6 B1
  16416. BX6 X1+X6 SET FST COMPLETE
  16417. LX1 -36
  16418. BX1 X5-X1
  16419. BX1 -X0*X1
  16420. NZ X1,HNG IF INCORRECT UDT ADDRESS IN FST
  16421. EWX6 X2 UPDATE FST
  16422. GE B4,B5,TIO4 IF FET ADDRESS NOT IN FL
  16423.  
  16424. * SET FET STATUS.
  16425.  
  16426. ERX1 X3 READ FET STATUS
  16427. SX2 B3+
  16428. MX6 -16
  16429. BX2 -X7*X2 COMPLETION STATUS
  16430. EQ B3,B1,TIO3 IF NORMAL COMPLETION
  16431. LX6 2
  16432. BX1 X6*X1 CLEAR STATUS FLAGS
  16433. TIO3 BX6 X1+X2 MERGE COMPLETION STATUS
  16434. EWX6 X3 UPDATE FET STATUS
  16435.  
  16436. * UPDATE ACCOUNTING.
  16437.  
  16438. TIO4 SA3 B7+IOAW
  16439. LX5 -48
  16440. MX1 -11
  16441. BX1 -X1*X5 AI
  16442. LX5 6
  16443. ZR X1,TIO7 IF NO ACCOUNTING INCREMENT
  16444. MX7 -6
  16445. SB4 B0+ SET NO OVERFLOW
  16446. BX7 -X7*X5 AM
  16447. MX6 20
  16448. ZR X7,TIO5 IF AM NOT SPECIFIED
  16449. IX1 X7*X1
  16450. TIO5 LX3 -20 POSITION TAPE ACCUMULATOR
  16451. LX6 20
  16452. BX4 X6*X3 OLD VALUE
  16453. IX4 X4+X1 ADD INCREMENT
  16454. BX3 -X6*X3 CLEAR OLD VALUE
  16455. IX7 X4-X6
  16456. NG X7,TIO6 IF NO OVERFLOW
  16457. SB4 4 SET MT ACCUMULATOR OVERFLOW
  16458. IX4 X4-X6 REMOVE OVERFLOW
  16459. TIO6 BX6 X3+X4 MERGE NEW VALUE
  16460. SB3 TIO7 SET *AIO* RETURN ADDRESS
  16461. LX6 20
  16462. SX2 B1 SET TAPE ACCUMULATOR
  16463. SA6 A3 UPDATE TAPE ACCUMULATOR
  16464. EQ AIO UPDATE SRU ACCUMULATOR
  16465.  
  16466. * RECALL CPU.
  16467.  
  16468. TIO7 SA1 B7+CWQW CHECK RECALL STATUS
  16469. SB6 B7 SET EXCHANGE PACKAGE ADDRESS
  16470. LX1 59-46
  16471. NG X1,TIO8 IF NOT TO RECALL CPU
  16472. SB3 TIO8 *RCC* RETURN ADDRESS
  16473. EQ RCC RECALL CPU
  16474.  
  16475. * RETURN TO MAGNET CONTROL POINT.
  16476.  
  16477. TIO8 TX2 A5-1,-FP
  16478. SX1 ALCS
  16479. LX2 PPXES-PPCES
  16480. LX1 36 SET ALTERNATE CP FLAG
  16481. TA2 X2+ACPP,FPX GET *ACPP*
  16482. SB3 CCAM-1777B
  16483. PX6 B3,X1
  16484. BX5 X1
  16485. SA6 A5 SET *CCAM* REQUEST IN OUTPUT REGISTER
  16486. EQ .CCAM CHANGE CONTROL POINT
  16487. TRCM SPACE 4,35
  16488. ** TRCM - PROCESS TRAP/TRACE REQUEST.
  16489. *
  16490. * UPDATE TRAP/TRACE CONTROL WORDS IN THE TRACE BLOCK.
  16491. *
  16492. * ENTRY
  16493. *T,OR 12/ TRCM,12/ FLAGS,12/ 0,24/ WD1.
  16494. *T,MB+0 12/ 0,24/ WD2,24/ WD3.
  16495. *T,MB+0 12/ FN1,12/ FN2,12/ FN3,12/ FN4,12/ FN5.
  16496. *T,MB+0 30/ 0,6/ LEN,18/ 0,6/ LOW.
  16497. *T,MB+1 60/ VALUE.
  16498. *
  16499. * FLAGS -
  16500. * BIT 47 SET IF *TRAP,MEM*.
  16501. * BIT 46 SET IF *TRAP,CPA*.
  16502. * BIT 45 SET IF *TRAP,NFL*.
  16503. * BIT 44 SET IF *TRAP,MCT*.
  16504. * BIT 43 SET IF *TRAP,DJB*.
  16505. * BIT 42 SET IF *TRAP,EJT*.
  16506. * BIT 41 SET IF TRAPPING ON ANY NONZERO VALUE.
  16507. * BIT 40 SET IF *TRACE,MTR*.
  16508. * BIT 39 SET IF *TRACE,PPU*.
  16509. * BIT 38 SET IF *TRACE,SET,ABS*.
  16510. * BIT 37 SET IF *TRACE,SET,CPA*.
  16511. *
  16512. * WD1 = ABSOLUTE ADDRESS OF WORD TO TRAP ON (*TRAP,MEM*).
  16513. * = ADDRESS IN CPA OF WORD TO TRAP ON (*TRAP,CPA*).
  16514. * WD2, WD3 = ABS OR CPA ADDRESSES TO TRACE (*TRACE,SET*).
  16515. * FN1 - FN5 = FUNCTIONS TO TRACE FOR *TRACE,MTR/PPU*.
  16516. * LEN = LENGTH OF FIELD TO CHECK FOR *TRAP,MEM/CPA*.
  16517. * LOW = LOW BIT OF FIELD TO CHECK FOR *TRAP,MEM/CPA*.
  16518. * VALUE = VALUE TO CHECK AGAINST FOR *TRAP,MEM/CPA*.
  16519.  
  16520.  
  16521. PPR TRCM,(/TRACE/TRC,TRACE,/MONITOR/HNG)
  16522. TSEM SPACE 4,20
  16523. ** TSEM - PROCESS *IAF* REQUEST.
  16524. *
  16525. * THE *IAF REQUEST IS PUT IN THE *IAF* *TSEM* QUEUE.
  16526. * IF THERE IS NO AVAILABLE QUEUE ENTRY FOR THE REQUEST,
  16527. * AN ERROR COUNTER IS INCREMENTED AND A REJECT IS RETURNED.
  16528. * IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET, THE OUTPUT
  16529. * REGISTER IS CLEARED.
  16530. *
  16531. * ENTRY
  16532. *T,OR 12/ TSEM,48/ .
  16533. *T,MB 60/ *IAF* REQUEST.
  16534. *
  16535. * EXIT
  16536. *T,OR 12/ 0, 12/ FLAG, 36/ 0.
  16537. * FLAG 0, IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET,
  16538. * .NE. 0, IF REQUEST COMPLETE.
  16539. * 7777, IF NO AVAILABLE QUEUE ENTRY.
  16540. *
  16541. * IF THE REQUEST IS INVALID, THE SYSTEM WILL HANG.
  16542.  
  16543.  
  16544. PPR TSEM
  16545.  
  16546. SB3 TSE1 SET RETURN ADDRESS
  16547. EQ CIA CHECK *IAF* ACCESSIBILITY
  16548.  
  16549. TSE1 SA3 A5+1
  16550. BX7 X3
  16551. AX3 48
  16552. NZ B4,TSE4 IF IAF INACCESSIBLE OR ERROR FLAG SET
  16553. NG X3,TSE4 IF IAF GOING DOWN
  16554. SB4 X3-2000B
  16555. NG B4,HNG IF INVALID *TSEM* REQUEST
  16556. SB4 X3-VMXR
  16557. PL B4,HNG IF INVALID *TSEM* REQUEST
  16558. SA2 VCPT*200B+FLSW
  16559. SA1 TSEA GET *TSEM* QUEUE POINTER
  16560. MX0 -RMSK
  16561. AX2 RSHF
  16562. BX2 -X0*X2
  16563. LX2 6 (X2) = REFERENCE ADDRESS
  16564. IX6 X1+X2
  16565. ERX4 X6
  16566. SB4 X1+1-VTSP
  16567. NZ X4,TSE3 IF QUEUE ENTRY NOT AVAILABLE
  16568. EWX7 X6 PASS ENTRY TO *IAF*
  16569. SX6 X1+B1
  16570. NG B4,TSE2 IF NOT AT LIMIT
  16571. SX6 VTRP RESET TO BEGINNING OF QUEUE
  16572. TSE2 SA6 A1
  16573. AX7 12 SET REQUEST COMPLETE
  16574. EQ PPR1 RETURN NON-ZERO STATUS
  16575.  
  16576. TSE3 SX5 VTSR COUNT UNAVAILABLE ENTRY
  16577. IX5 X2+X5
  16578. ERX2 X5
  16579. MX7 12
  16580. SX6 B1
  16581. LX7 -12
  16582. IX6 X6+X2 INCREMENT ERROR COUNT
  16583. EWX6 X5
  16584. EQ PPR1 RETURN ERROR CODE
  16585.  
  16586. TSE4 SX7 B0
  16587. PL X3,PPR1 IF NOT A SPECIAL REQUEST
  16588. MX7 1
  16589. NZ X3,TSE5 IF NOT *7777* REQUEST TO SET ACCESSIBILITY
  16590. SX6 VTSP
  16591. BX7 X2+X7 SET IAF ACCESSIBILITY BIT
  16592. SA7 A2
  16593. SA6 TGPA RESET QUEUE POINTERS
  16594. SX7 VTRP
  16595. SX6 VTLP
  16596. SA7 TSEA
  16597. SA6 TGPB
  16598. MX7 1
  16599. LX7 -12
  16600. EQ PPR1 RETURN NON-ZERO STATUS
  16601.  
  16602. TSE5 BX6 -X7*X2 CLEAR IAF ACCESSIBILITY BIT
  16603. SX7 X3+B1
  16604. NZ X7,HNG IF NOT *7776* REQUEST
  16605. SA6 A2
  16606. EQ PPR1 RETURN
  16607.  
  16608.  
  16609. TSEA CON VTRP *TSEM* QUEUE POINTER
  16610. UADM SPACE 4
  16611. *** UADM - UPDATE CONTROL POINT AREA.
  16612. *
  16613. * ENTRY
  16614. *T,OR 12/ UADM,12/ CT,10/,1/ RF,1/ DF,12/,12/
  16615. *
  16616. *T,MB 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
  16617. *T,MB+1 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
  16618. * .
  16619. * .
  16620. * .
  16621. *T,MB+CT-1 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
  16622. *
  16623. * NOTE - REQUESTS ARE PROCESSED IN REVERSE ORDER.
  16624. *
  16625. * CT NUMBER OF REQUESTS IN MESSAGE BUFFER
  16626. * RF SET IF CPU TO BE RECALLED TO CONTROL POINT
  16627. * DF DROP FLAG 0 = DROP
  16628. * 1 = NO DROP
  16629. *
  16630. * SF SUBFUNCTION CODE AS DEFINED IN COMSCPS
  16631. * CICS INCREMENT CONTROL POINT FIELD
  16632. * CIOS INCREMENT CONTROL POINT FIELD BY ONE
  16633. * CDOS DECREMENT CONTROL POINT FIELD BY ONE
  16634. * CDCS DECREMENT CONTROL POINT FIELD
  16635. * LICS INCREMENT LOW CORE FIELD
  16636. * LIOS INCREMENT LOW CORE FIELD BY ONE
  16637. * LDOS DECREMENT LOW CORE FIELD BY ONE
  16638. * LDCS DECREMENT LOW CORE FIELD
  16639. * AISS ACCOUNTING INCREMENT - IO
  16640. * AIAD ACCOUNTING INCREMENT - ADDER
  16641. * AIMP ACCOUNTING INCREMENT - MP
  16642. * CSFS SET CONTROL POINT FIELD
  16643. * FRAS ADJUST *FRC*-BASED VALUES IN *CPUMTR*
  16644. *
  16645. * AD ADDRESS OF WORD IN CP/LOW CORE
  16646. * P LOW ORDER BIT POSITION OF FIELD TO UPDATE
  16647. * W WIDTH OF FIELD TO UPDATE
  16648. * INC 18 BIT POSITIVE VALUE TO INCREMENT/DECREMENT/SET
  16649. *
  16650. * FOR *FRAS* SUBFUNCTION -
  16651. *
  16652. *T,MB+N 12/ FRAS, 48/ DESIRED *FRC* VALUE
  16653. *
  16654. * THE CPU START TIME(S) AND THE WALL CLOCK BASES ARE ADJUSTED
  16655. * BY THE DIFFERENCE BETWEEN THE DESIRED AND CURRENT VALUES OF
  16656. * THE FREE-RUNNING COUNTER. THE REQUESTING PP-S OUTPUT
  16657. * REGISTER IS CLEARED IMMEDIATELY, ALTHOUGH THE MONITOR
  16658. * FUNCTION DOES NOT COMPLETE UNTIL THE FREE-RUNNING COUNTER IS
  16659. * UPDATED (BY *DFT*). THIS IS NECESSARY TO ENSURE THAT NO
  16660. * USER JOB IS CHARGED (OR TIME LIMITED) WHEN THE MICROSECOND
  16661. * CLOCK IS ADVANCED BY AS MUCH AS DAYS, WEEKS, OR MONTHS.
  16662. * NOTE THAT THE DROP-PP OPTION AND ANY FURTHER REQUESTS ARE
  16663. * IGNORED.
  16664. *
  16665. * EXIT
  16666. *T,OR 12/,12/ STAT,12/,12/,12/
  16667. * STAT NON-ZERO IF OVERFLOW/UNDERFLOW
  16668. * BITS INDICATE WHICH REQUESTS GAVE OVERFLOW/UNDERFLOW
  16669. * BIT 0 = MB
  16670. * BIT 1 = MB+1 ETC
  16671. *
  16672. * THE FOLLOWING DESCRIBES THE ACTION TAKEN WHEN OVERFLOW/
  16673. * UNDERFLOW OCCURS.
  16674. *
  16675. * UPDATE OPTION ACTION TAKEN
  16676. * LOW CORE LEAVE FIELD ALONE.
  16677. * CONTROL POINT INCREMENT TO MAXIMUM VALUE - 1.
  16678. * DECREMENT TO ZERO ON UNDERFLOW.
  16679. * SRU UPDATES INCREMENT TO OVERFLOW VALUE - MAXIMUM
  16680. *
  16681. * IF ALL THE BITS ARE SET IN THE FIELD BEFORE THE UPDATE AND
  16682. * THE FIELD WIDTH IS GREATER THAN ONE BIT, THE UPDATE OPTION
  16683. * IS IGNORED. IF ALL THE BITS IN THE FIELD ARE SET AS A
  16684. * RESULT OF THE UPDATE, AN OVERFLOW CONDITION IS RETURNED.
  16685. *
  16686. * *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  16687. * 1) TOO MANY REQUESTS.
  16688. * 2) CONTROL POINT UPDATE AND ADDRESS NOT BETWEEN
  16689. * *STSW* AND *CSBW*.
  16690. * 3) LOW CORE UPDATE AND ADDRESS IS .GE. *CRTL*.
  16691. * 4) ILLEGAL SUBFUNCTION.
  16692. * 5) REQUEST COUNT = 0 AND NOT DROP PP OPTION.
  16693.  
  16694.  
  16695. PPR UADM
  16696.  
  16697. LX1 59-25
  16698. PL X1,UAD0 IF NO RECALL OF THE CPU
  16699. SA3 B7+CWQW CHECK RECALL STATUS
  16700. SB6 B7 SET EXCHANGE PACKAGE ADDRESS
  16701. LX3 59-46
  16702. SB3 UAD0 SET *RCC* RETURN ADDRESS
  16703. PL X3,RCC IF TO RECALL CPU
  16704. UAD0 UX1 X5
  16705. LX1 59-35
  16706. MX2 11
  16707. BX1 -X2*X1 CLEAR BIT FLAGS
  16708. SB4 6
  16709. SB5 X1 REQUEST COUNT
  16710. AX1 48
  16711. ZR B5,UAD10 IF NO REQUESTS PRESENT
  16712. SX7 X1 DROP FLAG
  16713. GT B5,B4,HNG IF TOO MANY REQUESTS
  16714. SB3 UAD7 SET *AIO*/*AAD* RETURN
  16715. UAD1 SA2 A5+B5 READ REQUEST
  16716. MX0 -12
  16717. SB5 B5-B1 DECREMENT REQUEST COUNT
  16718. MX6 -18
  16719. BX1 X0*X2
  16720. LX1 9
  16721. SB6 X1 OPTION CODE
  16722. AX1 58
  16723. SB4 B6-FRAS/10B
  16724. NZ X1,UAD2 IF INCREMENT/DECREMENT OF 1
  16725. TZR B4,(/NVE/UAD,NVE,/MONITOR/HNG) IF *FRAS* REQUEST
  16726. BX3 -X6*X2 SET VARIABLE INCREMENT
  16727. BX1 X1-X3 COMPLEMENT FOR DECREMENT OPTION
  16728. UAD2 LX2 24
  16729. BX5 -X0*X2 DETERMINE WORD ADDRESS
  16730. MX0 -6
  16731. LX2 12
  16732. BX4 -X2+X0 FIELD WIDTH COMPLEMENTED
  16733. AX2 6
  16734. SB4 X4+59
  16735. MX6 1
  16736. BX2 -X0*X2 FIELD POSITION WITHIN WORD
  16737. SX4 X5-STSW
  16738. AX0 X6,B4 FORM COMPLEMENT OF FIELD MASK
  16739. SX3 X5-RCCW
  16740. BX4 -X4*X3
  16741. NZ B6,UAD3 IF NOT LOW CORE UPDATE
  16742. SX4 X5-200B
  16743. SX6 -B7 SET RELATIVE TO ZERO
  16744. IX5 X5+X6
  16745. UAD3 SA3 X5+B7 READ WORD TO UPDATE
  16746. MX5 -1
  16747. PL X4,HNG IF ADDRESS OUT OF RANGE
  16748. SX6 B6-CSFS/10B CHECK SET FIELD
  16749. BX5 X5-X0 SET 1 BIT FIELD WIDTH FLAG
  16750. SB4 X2 FIELD POSITION WITHIN WORD
  16751. NZ X6,UAD4 IF NOT SET CONTROL POINT FIELD
  16752. LX6 X0,B4 CLEAR ANY EXISTING DATA
  16753. BX3 X6*X3
  16754. UAD4 AX4 X3,B4 POSITION FIELD TO BOTTOM OF WORD
  16755. BX6 X4+X0
  16756. AX2 4
  16757. BX4 -X0*X4 CURRENT VALUE OF FIELD
  16758. SB6 B6-1
  16759. ZR X5,UAD5 IF 1 BIT FIELD WIDTH
  16760. ZR X6,UAD7 IF UNLIMITED
  16761. IX6 X4+X1
  16762. BX5 X0+X6
  16763. ZR X5,UAD8 IF FIELD INCREMENTED TO MAXIMUM
  16764. UAD5 IX6 X4+X1 CURRENT VALUE + INCREMENT
  16765. LX4 X1,B4 POSITION INCREMENT/DECREMENT VALUE
  16766. BX5 X0*X6 ERASE FIELD
  16767. NZ X5,UAD8 IF OVERFLOW/UNDERFLOW
  16768. SB4 B0
  16769. SB6 B6-B1
  16770. UAD6 IX6 X4+X3 INCREMENT/DECREMENT FIELD
  16771. SA6 A3
  16772. NG B6,UAD7 IF NO SRU UPDATE
  16773. ZR B6,AIO IF INCREMENTING IO SRU
  16774. SB6 B6-1
  16775. ZR B6,AAD IF INCREMENTING ADDER SRU
  16776. SB6 B6-1
  16777. ZR B6,AMP IF INCREMENTING MAP OR OD SRU
  16778. SB6 B6-3
  16779. NE B6,B1,HNG IF ILLEGAL OPERATION CODE
  16780. UAD7 GT B5,B0,UAD1 IF MORE REQUESTS
  16781. SB6 B1+ MAKE SURE B6 IS NON-ZERO
  16782. ZR X7,.DPPM IF DROP PPU
  16783. EQ PPR1 EXIT
  16784.  
  16785. UAD8 SX4 X7 SET ERROR INDICATION
  16786. LX4 X4,B5
  16787. LX4 36
  16788. BX7 X7+X4
  16789. BX4 X4-X4 NO INCREMENT FOR LOW CORE UPDATE
  16790. NG B6,UAD6 IF LOW CORE OPTION
  16791. SB6 B6-B1
  16792. IX4 X6+X0 INCREMENT TO OVERFLOW VALUE - MAXIMUM
  16793. SX6 X2
  16794. PL B6,UAD9 IF SRU UPDATE
  16795. SX4 -B1
  16796. AX5 59
  16797. IX4 X4-X0 MAXIMUM - 1
  16798. BX4 -X5*X4 X4 CLEARED FOR DECREMENT (UNDERFLOW)
  16799. UAD9 LX0 X0,B4 CLEAR FIELD
  16800. LX4 X4,B4 POSITION NEW VALUE
  16801. BX3 X0*X3
  16802. SB4 B1 SET PF OR ADDER OVERFLOW FLAG
  16803. NG B6,UAD6 IF NOT SRU UPDATE
  16804. ZR X6,UAD6 IF PF OR ADDER UPDATE
  16805. LX6 2
  16806. SB4 X6 OVERFLOW FLAG MT=4, MS=10B
  16807. EQ UAD6
  16808.  
  16809. UAD10 SB6 B1+ MAKE SURE B6 IS NON-ZERO
  16810. ZR X1,.DPPM IF DROP PPU SELECTED
  16811. EQ HNG HANG PPU
  16812. UTEM SPACE 4,10
  16813. *** UTEM - UPDATE TABLE ENTRY.
  16814. *
  16815. * ENTRY
  16816. *T,OR 12/ UTEM,6/0,1/I,1/J,1/0,3/NR,12/,24/ ADDR
  16817. *
  16818. *T,MB 1/V,5/ WI,6/ FS,6/ BP,42/ VALUE
  16819. * .
  16820. * .
  16821. * .
  16822. *T,MB+NR-1 1/V,5/ WI,6/ FS,6/ BP,42/ VALUE
  16823. *
  16824. * NR NUMBER OF REQUESTS IN MESSAGE BUFFER.
  16825. * I INTERLOCK *ADDR* OPTION.
  16826. * I = 0, NR = 0 *ADDR* INTERLOCK (BIT 0) WILL
  16827. * BE SET (REJECT IF ALREADY SET
  16828. * OR *ADDR* ENTRY NOT IN USE).
  16829. * I = 0, NR .NE. 0 *NR* REQUESTS FROM MESSAGE
  16830. * BUFFER WILL BE PROCESSED.
  16831. * I = 1, NR = 0 *ADDR* INTERLOCK WILL BE
  16832. * CLEARED (HANG IF INTERLOCK NOT
  16833. * PREVIOUSLY SET OR *ADDR* ENTRY
  16834. * NOT IN USE).
  16835. * I = 1, NR .NE. 0 *ADDR* INTERLOCK WILL BE SET
  16836. * AFTER PROCESSING *NR* REQUESTS
  16837. * FROM MESSAGE BUFFER (REJECT IF
  16838. * VERIFY FAILURE FROM MESSAGE
  16839. * BUFFER REQUEST OR IF INTERLOCK
  16840. * ALREADY SET OR *ADDR* ENTRY
  16841. * NOT IN USE).
  16842. * J IF SET, JOB ADVANCE CHECK NEEDED ON EJT ENTRY
  16843. * (APPLICABLE ONLY FOR *I* = 1, *NR* = 0 OPTION).
  16844. * ADDR ABSOLUTE FWA TABLE TO VERIFY/UPDATE.
  16845. * V IF SET, CONTENTS OF SPECIFIED FIELD IN TABLE ENTRY
  16846. * WILL BE VERIFIED WITH CONTENTS OF *VALUE* FIELD.
  16847. * IF CLEAR, CONTENTS OF *VALUE* FIELD WILL BE STORED
  16848. * INTO SPECIFIED FIELD IN TABLE ENTRY.
  16849. * WI WORD INDEX INTO TABLE OF ENTRY TO BE
  16850. * VERIFIED/UPDATED.
  16851. * FS SIZE OF FIELD TO BE VERIFIED/UPDATED
  16852. * (1 TO 60D BITS).
  16853. * BP LOW ORDER BIT POSITION OF FIELD TO VERIFY/
  16854. * UPDATE (0 TO 59D).
  16855. * VALUE CONTENTS USED TO VERIFY SPECIFIED FIELD IN TABLE
  16856. * ENTRY (IF *V* SET) OR UPDATE SPECIFIED FIELD IN TABLE
  16857. * ENTRY (IF *V* NOT SET). RIGHTMOST *FS* NUMBER OF
  16858. * BITS OF *VALUE* ARE USED IF *FS* .LE. 42, OTHERWISE
  16859. * 42 BIT CONTENT OF *VALUE* IS USED, RIGHT JUSTIFIED
  16860. * WITH BINARY ZERO FILL.
  16861. *
  16862. * EXIT
  16863. *T,OR 12/ 0,12/ STAT,36/
  16864. *
  16865. *T,MB 1/V,5/ WI,6/ FS,6/ BP,42/ OLD VALUE
  16866. * .
  16867. * .
  16868. * .
  16869. *T,MB+NR-1 1/V,5/ WI,6/ FS,6/ BP,42/ OLD VALUE
  16870. *
  16871. * STAT 0 = OPERATION COMPLETE.
  16872. * 1 = INTERLOCK ALREADY SET (FOR *I* = 0, *NR* = 0
  16873. * OR *I* = 1, *NR* .NE. 0 PROCESSING).
  16874. * 2 = VERIFICATION FAILED (FOR *NR* .NE. 0
  16875. * PROCESSING OF REQUEST WITH *V* SET).
  16876. * NO FURTHER REQUESTS WERE PROCESSED (TO PREVENT
  16877. * UPDATE AFTER VERIFY REQUEST THAT FAILED).
  16878. * 3 = ENTRY TO INTERLOCK IS NOT IN USE (TOP 48 BITS OF
  16879. * *ADDR* = 0 FOR *I* = 0, *NR* = 0 OR *I* = 1,
  16880. * *NR* .NE. 0 PROCESSING).
  16881. *
  16882. * V,WI,FS,BP SAME AS ON ENTRY.
  16883. * OLD VALUE CONTENTS OF SPECIFIED FIELD IN TABLE ENTRY
  16884. * BEFORE UPDATE/VERIFY, RIGHT JUSTIFIED WITH
  16885. * BINARY ZERO FILL (RIGHTMOST 42 BITS OF FIELD
  16886. * IF *FS* .GT. 42).
  16887. *
  16888. * *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
  16889. * 1. *NR* .GT. 6.
  16890. * 2. *FS* = 0.
  16891. * 3. *BP* + *FS* .GT. 60D.
  16892. * 4. *ADDR* INTERLOCK WAS NOT PREVIOUSLY SET FOR CLEAR
  16893. * INTERLOCK REQUEST (*I* = 1, *NR* = 0 PROCESSING).
  16894. * 5. *ADDR* ENTRY NOT IN USE (BYTE 0 = 0) FOR CLEAR INTERLOCK
  16895. * REQUEST (*I* = 1, *NR* = 0 PROCESSING).
  16896. * 6. JOB ADVANCE REQUESTED ON ILLEGAL ENTRY.
  16897.  
  16898.  
  16899. PPR UTEM,,,FEX
  16900.  
  16901. AX1 36
  16902. SX7 B1
  16903. ZR X1,UTE3 IF SET *ADDR* INTERLOCK OPTION
  16904. MX2 -3
  16905. BX3 -X2*X1 NUMBER OF REQUESTS IN MESSAGE BUFFER
  16906. AX1 5
  16907. MX0 -42
  16908. BX1 -X1*X7
  16909. BX7 X1+X3
  16910. ZR X7,UTE3 IF CLEAR *ADDR* INTERLOCK OPTION
  16911. NZ X1,UTE0.1 IF NOT AN INTERLOCK REQUEST
  16912. SA4 X5 READ TABLE ENTRY
  16913. MX6 12
  16914. SX7 B1+ SET RETURN STATUS
  16915. BX6 X6*X4
  16916. LX4 59-0
  16917. NZ X6,UTE0 IF NOT AN EMPTY ENTRY
  16918. SX7 3 SET REPLY
  16919. EQ UTE4 EXIT
  16920.  
  16921. UTE0 NG X4,UTE4 IF ENTRY ALREADY INTERLOCKED
  16922. UTE0.1 SA4 A5+B1 GET MESSAGE BUFFER REQUEST
  16923. SB4 X3
  16924. SB3 6
  16925. SB5 60
  16926. GT B4,B3,HNG IF NUMBER OF REQUESTS .GT. 6
  16927. UTE1 SB4 B4-B1 DECREMENT MESSAGE BUFFER REQUESTS
  16928. BX2 -X0*X4 VALUE TO VERIFY/UPDATE FIELD WITH
  16929. MX6 -6
  16930. BX3 X0*X4
  16931. AX4 42
  16932. BX1 -X6*X4 LOW ORDER BIT POSITION OF FIELD
  16933. AX4 6
  16934. SB3 X1
  16935. BX6 -X6*X4 FIELD SIZE IN BITS
  16936. MX7 1
  16937. SB6 X6
  16938. SB7 B6-B1
  16939. ZR B6,HNG IF FIELD SIZE = 0
  16940. AX7 B7 BUILD FIELD MASK
  16941. SB7 B3+B6
  16942. GT B7,B5,HNG IF FIELD EXCEEDS WORD BOUNDARY
  16943. AX4 6
  16944. LX7 B6 RIGHT JUSTIFY MASK
  16945. MX6 -5
  16946. BX2 X7*X2 FIELD SIZE BITS OF VALUE
  16947. BX4 -X6*X4 TABLE WORD INDEX
  16948. IX4 X5+X4 TABLE ENTRY ABSOLUTE ADDRESS
  16949. SA1 X4 GET TABLE ENTRY
  16950. SB7 B5-B3
  16951. LX1 B7 RIGHT JUSTIFY FIELD IN TABLE ENTRY
  16952. BX6 X7*X1 CONTENTS OF FIELD IN TABLE ENTRY
  16953. BX1 -X7*X1
  16954. BX7 -X0*X6 RETURN OLD VALUE OF FIELD
  16955. BX1 X1+X2 REPLACE FIELD WITH NEW VALUE
  16956. BX7 X3+X7
  16957. SA7 A4
  16958. SX7 B1+B1 RETURN STATUS = 2 IF VERIFY REJECT
  16959. PL X3,UTE5 IF FIELD TO BE UPDATED
  16960. BX6 X6-X2
  16961. NZ X6,UTE4 IF FIELD DOES NOT VERIFY
  16962. UTE2 SA4 A4+B1 GET NEXT REQUEST
  16963. NZ B4,UTE1 IF MORE REQUESTS
  16964. LX7 41-1
  16965. BX7 X7*X5
  16966. ZR X7,PPR1 IF NO *ADDR* INTERLOCK OPTION
  16967. SX7 B1 SET *ADDR* INTERLOCK
  16968. UTE3 SA1 X5 GET TABLE ENTRY INTERLOCK
  16969. MX0 48
  16970. BX0 X0*X1
  16971. BX4 X0+X7
  16972. ZR X4,HNG IF CLEARING INTERLOCK ON UNUSED ENTRY
  16973. MX3 -1
  16974. BX4 -X3*X1 PREVIOUS INTERLOCK VALUE
  16975. BX2 X4+X7
  16976. ZR X2,HNG IF CLEARING ALREADY CLEAR INTERLOCK
  16977. BX1 X3*X1
  16978. BX6 X1+X7
  16979. LX2 X7,B1
  16980. BX3 -X3-X7
  16981. BX7 X7+X2 RETURN STATUS = 3 IF ENTRY NOT IN USE
  16982. ZR X0,UTE4 IF *ADDR* ENTRY NOT IN USE
  16983. BX7 X4*X7 RETURN STATUS = 1 IF SET INTERLOCK REJECT
  16984. BX4 X4*X7 INTERLOCK STATUS .AND. REQUEST BIT
  16985. LX4 59
  16986. NG X4,UTE3.1 IF WORD ALREADY INTERLOCKED
  16987. SA6 X5
  16988. UTE3.1 LX3 40-0 CHECK JOB ADVANCE OPTION
  16989. BX3 X3*X5
  16990. NZ X3,UTE6 IF EJT ENTRY JOB ADVANCE NEEDED
  16991. UTE4 LX7 36 SAVE RETURN STATUS
  16992. SA7 A5
  16993. EQ PPRX EXIT
  16994.  
  16995. UTE5 LX6 X1,B3 REPOSITION TABLE ENTRY
  16996. SA6 X4 STORE UPDATED TABLE ENTRY
  16997. EQ UTE2 PROCESS NEXT REQUEST
  16998.  
  16999. UTE6 MX3 -6
  17000. BX1 -X3*X6
  17001. SB3 PPRX SET EXIT ADDRESS FOR *JAV*
  17002. SX1 X1-EXJS*2
  17003. NZ X1,UTE4 IF JOB NOT AT CONTROL POINT
  17004. SA1 X5+B1 GET CONTROL POINT NUMBER
  17005. ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
  17006. AX1 12
  17007. BX1 -X3*X1
  17008. LX1 7
  17009. TX2 X1,-SCA
  17010. PL X2,HNG IF ILLEGAL CONTROL POINT
  17011. SA7 A5 INDICATE OPERATION COMPLETE
  17012. SB7 X1
  17013. EQ JAV CHECK FOR JOB ADVANCE
  17014. VFLM SPACE 4,15
  17015. *** VFLM - VERIFY FIELD LENGTH.
  17016. *
  17017. * ENTRY
  17018. *T, OR 12/ VFLM, 12/ CP, 36/
  17019. * CP CONTROL POINT.
  17020. * 0 = USE THE CONTROL POINT TO WHICH THE PP IS ASSIGNED.
  17021. *
  17022. * EXIT
  17023. *T, OR 12/0, 12/ ST, 36/
  17024. * ST STATUS
  17025. * 0 = NO DOUBLE-BIT ERRORS ENCOUNTERED.
  17026. * 1 = JOB TO VERIFY FL FAILED.
  17027. * 2 = FIELD LENGTH VERIFICATION ALREADY IN PROGRESS.
  17028.  
  17029.  
  17030. PPR VFLM
  17031.  
  17032. SX7 B1 PRESET RESPONSE
  17033. LX7 36
  17034. TEQ (/CME/VLM,CME,/MONITOR/PPR1)
  17035. VFPM SPACE 4,30
  17036. *** VFPM - VERIFY FET PARAMETERS.
  17037. *
  17038. * ENTRY
  17039. *T, OR 12/ VFPM,12/ VO,18/ ,18/ FA
  17040. * VO FET PARAMETER VALIDATION OPTION.
  17041. * 0 = NO FET PARAMETER VALIDATION.
  17042. * 1 = VALIDATE FIRST AND LIMIT ONLY.
  17043. * 2 OR 3 = VALIDATE FIRST, IN, OUT, AND LIMIT.
  17044. *
  17045. * EXIT
  17046. *T, OR 12/ 0,12/ ST,36/
  17047. * ST STATUS
  17048. * 0 = NO ERROR.
  17049. * 1 = ILLEGAL FET ADDRESS.
  17050. * 2 = BUFFER ARGUMENT ERROR.
  17051. *T, MB+2 12/ 0, 24/ IN, 24/ OUT
  17052. *T, MB+3 1/R, 5/0, 6/ FETL, 24/ FIRST, 24/ LIMIT
  17053. * R SET IF RANDOM FILE.
  17054. * FETL FET LENGTH - 5.
  17055. *
  17056. * FIRST, IN, OUT, LIMIT ARE RETURNED ONLY IF FET PARAMETER
  17057. * VALIDATION IS REQUESTED. ZERO VALUE IS RETURNED FOR THOSE
  17058. * PARAMETERS NOT VALIDATED (FOR OPTION 1, IN=OUT=0 IS RETURNED,
  17059. * FOR OPTION 2/3, FIRST=IN=OUT=LIMIT=0 IS RETURNED).
  17060. * MB+2 AND MB+3 ARE NOT RETURNED IF ERROR IS DETECTED.
  17061.  
  17062.  
  17063. PPR VFPM
  17064.  
  17065. SX7 B1 RETURN STATUS = ILLEGAL FET ADDRESS
  17066. AX2 24
  17067. SB3 PPR1 SET ERROR EXIT ADDRESS FOR *VFA*/*VFP*
  17068. SB7 X2 SET CP/PCP ADDRESS
  17069. LX7 36
  17070. SB6 VFM1 SET RETURN ADDRESS FOR *VFA*
  17071. EQ VFA VERIFY FET ADDRESS
  17072.  
  17073. VFM1 BX0 X6 SAVE FET LENGTH - 5 AND RANDOM FLAG
  17074. SX7 B1+B1 RETURN STATUS = BUFFER ARGUMENT ERROR
  17075. SB6 VFM2 SET RETURN ADDRESS FOR *VFP*
  17076. SA2 A5 GET FET PARAMETER VALIDATION OPTION
  17077. MX6 -6
  17078. SX1 B0
  17079. LX2 -36
  17080. BX6 -X6*X2
  17081. LX7 36
  17082. NZ X6,VFP IF FET PARAMETER VALIDATION NEEDED
  17083. VFM2 BX7 X1+X0 SAVE FIRST AND LIMIT
  17084. SA6 A5+3 SAVE IN AND OUT
  17085. SA7 A6+B1
  17086. BX7 X7-X7 RETURN STATUS = NO ERROR
  17087. SA7 A5
  17088. EQ PPRX EXIT
  17089. VMSM SPACE 4,25
  17090. *** VMSM - VALIDATE MASS STORAGE.
  17091. * LEGAL ONLY WHEN MASS STORAGE VALIDATION IS SELECTED.
  17092. *
  17093. * ENTRY
  17094. *T, OR 12/ VMSM,12/ EQ,12/ TK,12/ SF,12/
  17095. * EQ EST ORDINAL TO PROCESS.
  17096. * TK FIRST TRACK OF CHAIN FOR VTCS OPTION.
  17097. * SF SUBFUNCTION CODE AS DEFINED IN COMSCPS.
  17098. *
  17099. * VEIS VALIDATE EQUIPMENT WITH INTERLOCK.
  17100. * VEQS VALIDATE EQUIPMENT.
  17101. * VTCS VALIDATE TRACK CHAIN.
  17102. *
  17103. * REPLY
  17104. *T, OR 12/,12/ RS,36/
  17105. * RS REPLY STATUS
  17106. * BIT 0 SET = RESERVATION BIT COUNT ERROR.
  17107. * BIT 1 SET = PRESERVED FILE COUNT ERROR.
  17108. * BIT 2 SET = PERMIT CHAIN ERROR.
  17109. * BIT 3 SET = CATALOG CHAIN ERROR.
  17110. * BIT 4 SET = INDIRECT CHAIN ERROR.
  17111. *
  17112. * BIT 0 SET = BAD TRACK CHAIN (VTCS ONLY).
  17113. *
  17114. * *PP HUNG.* WILL OCCUR FOR AN ILLEGAL MASS STORAGE EQUIPMENT.
  17115. *
  17116. * NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
  17117. * THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
  17118. * BEFORE THE VMSM IS ISSUED TO CPUMTR.
  17119. * IF THE *VEIS* SUBFUNCTION IS USED ON AN INDEPENDENT SHARED
  17120. * DEVICE BECAUSE THE MST INTERLOCK WAS PREVIOUSLY LEFT SET,
  17121. * THE *LPTU* FLAG MUST BE SET FIRST TO PREVENT *1RU* FROM
  17122. * HANGING TRYING TO SET THE INTERLOCK.
  17123.  
  17124.  
  17125. PPR VMSM,(/ISD/VMS,ISD,/LSPMMF/CME0,LSPMMF,/MONITOR/PMR ),
  17126. ,(/VMS/VMS,VMS,/PROGRAM/HNG)
  17127. VSAM SPACE 4,30
  17128. *** VSAM - VALIDATE SECURITY ACCESS FUNCTIONS.
  17129. *
  17130. * ENTRY
  17131. *T, OR 12/ VSAM, 12/ FN, 36/
  17132. * FN = 0 (VJAS) - SET JOB ACCESS LEVEL.
  17133. * FN = 1 (VSFS) - SET FILE ACCESS LEVEL.
  17134. * FN = 2 (VAES) - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
  17135. * FN = 3 (VAJS) - VALIDATE ACCESS LEVEL/CATEGORIES FOR JOB.
  17136. * FN = 4 (VJCS) - VALIDATE JOB CREATION PARAMETERS.
  17137. * FN = 5 (VEDS) - VALIDATE EXPIRATION DATE.
  17138. * FN = 6 (VJLS) - VALIDATE JOB ACCESS LEVEL LIMITS.
  17139. *
  17140. *
  17141. * 0 VJAS - SET JOB ACCESS LEVEL.
  17142. *
  17143. * ENTRY
  17144. *T, OR 12/ VSAM, 12/ VJAS, 24/ , 12/ AL
  17145. * AL REQUESTED JOB ACCESS LEVEL.
  17146. *
  17147. * EXIT
  17148. *T, OR 12/ 0, 12/ ST, 36/
  17149. * ST = 0 IF ACCESS LEVEL VALID (FUNCTION COMPLETE).
  17150. *
  17151. * FUNCTION
  17152. * DETERMINE IF THE SPECFIED ACCESS LEVEL IS VALID FOR THE
  17153. * CALLING JOB. IF VALID, SET THE NEW ACCESS LEVEL IN THE
  17154. * CONTROL POINT AREA AND THE EJT ENTRY FOR THE JOB.
  17155. *
  17156. * *PP HUNG.* WILL OCCUR IF AN INVALID ACCESS LEVEL IS
  17157. * SPECIFIED.
  17158. *
  17159. *
  17160. * 1 VSFS - SET FILE ACCESS LEVEL.
  17161. *
  17162. * ENTRY
  17163. *T, OR 12/ VSAM, 12/ VSFS, 12/ , 12/ FA, 12/ AL
  17164. * FA NFL ADDRESS FOR THE FNT ENTRY OF THE FILE.
  17165. * AL REQUESTED FILE ACCESS LEVEL.
  17166. *
  17167. * EXIT
  17168. *T, OR 12/ 0, 12/ ST, 36/
  17169. * ST = 0 IF ACCESS LEVEL VALID (FUNCTION PERFORMED).
  17170. *
  17171. * FUNCTION
  17172. * DETERMINE IF THE SPECIFIED ACCESS LEVEL IS VALID FOR
  17173. * THE CALLING JOB AND THE EQUIPMENT UPON WHICH THE
  17174. * SPECIFIED JOB RESIDES. IF VALID, SET THE NEW ACCESS
  17175. * LEVEL IN THE FNT ENTRY FOR THE FILE.
  17176. *
  17177. * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
  17178. * 1) THE FNT ENTRY FOR THE FILE IS NOT SET BUSY BEFORE
  17179. * CALLING *VSAM*.
  17180. * 2) AN INVALID ACCESS LEVEL IS SPECIFIED.
  17181. *
  17182. *
  17183. * 2 VAES - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
  17184. *
  17185. * ENTRY
  17186. *T, OR 12/ VSAM, 12/ VAES, 12/ EQ, 12/ , 12/ AL
  17187. * EQ EST ORDINAL FOR EQUIPMENT.
  17188. * AL REQUESTED ACCESS LEVEL.
  17189. *
  17190. * EXIT
  17191. *T, OR 12/ 0, 12/ ST, 36/
  17192. * ST = 0 IF ACCESS LEVEL VALID.
  17193. *
  17194. * FUNCTION
  17195. * DETERMINE IF THE SPECIFIED ACCESS LEVEL IS WITHIN
  17196. * THE EQUIPMENT LIMITS (OR, FOR A MASS STORAGE DEVICE,
  17197. * WITHIN THE DEVICE LIMITS) FOR A SPECIFIED EQUIPMENT.
  17198. *
  17199. * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
  17200. * 1) AN INVALID EST ORDINAL IS SPECIFIED.
  17201. * 2) AN INVALID ACCESS LEVEL IS SPECIFIED.
  17202. *
  17203. *
  17204. * 3 VAJS - VALIDATE ACCESS LEVEL AND/OR CATEGORIES FOR JOB.
  17205. *
  17206. * ENTRY
  17207. *T, OR 12/ VSAM, 12/ VAJS, 24/ , 12/ P
  17208. *T, MB 12/ , 12/ AL, 36/ AC
  17209. * P PROCESSING OPTIONS.
  17210. * 1 - ACCESS LEVEL ONLY.
  17211. * 2 - ACCESS CATEGORIES ONLY.
  17212. * 3 - BOTH ACCESS LEVEL AND ACCESS CATEGORIES.
  17213. * AL ACCESS LEVEL.
  17214. * AC ACCESS CATEGORIES.
  17215. *
  17216. * EXIT
  17217. *T, OR 12/ 0, 12/ ST, 36/
  17218. * ST = 0 IF SPECIFIED *AL* AND/OR *AC* WERE VALID.
  17219. *
  17220. * FUNCTION
  17221. * DETERMINE IF THE SPECIFIED ACCESS LEVEL AND/OR
  17222. * ACCESS CATEGORY SET ARE CURRENTLY LEGAL FOR THE
  17223. * CALLING JOB.
  17224. *
  17225. * *PP HUNG.* WILL OCCUR IF AN INVALID ACCESS LEVEL IS
  17226. * SPECIFIED.
  17227. *
  17228. *
  17229. * 4 VJCS - VALIDATE JOB CREATION PARAMETERS.
  17230. *
  17231. * ENTRY
  17232. *T, OR 12/ VSAM, 12/ VJCS, 12/ OT, 12/ UAL, 12/ IJL
  17233. *T, MB 12/ , 12/ ALVAL, 36/ ACVAL
  17234. * OT ORIGIN TYPE FOR JOB.
  17235. * UAL UPPER LIMIT ON ACCESS LEVELS FOR JOB
  17236. * (4000B IF DEFAULT IS TO BE USED).
  17237. * IJL INITIAL JOB ACCESS LEVEL.
  17238. * ALVAL ACCESS LEVEL VALIDATION BITS (FROM VALIDUS).
  17239. * ACVAL ACCESS CATEGORY VALIDATION (FROM VALIDUS).
  17240. *
  17241. * EXIT
  17242. *T, OR 12/ 0, 12/ ST, 12/ AIJL, 12/ RUAL, 12/ RLAL
  17243. *T, MB 12/ , 12/ RALVAL, 36/ RACVAL
  17244. * ST = 0 IF JOB MAY BE CREATED.
  17245. * AIJL ADJUSTED INITIAL JOB ACCESS LEVEL.
  17246. * RUAL RESTRICTED UPPER ACCESS LEVEL LIMIT.
  17247. * RLAL RESTRICTED LOWER ACCESS LEVEL LIMIT.
  17248. * RALVAL RESTRICTED SET OF ACCESS LEVEL BITS.
  17249. * RACVAL RESTRICTED SET OF ACCESS CATEGORY BITS.ATION
  17250. *
  17251. * FUNCTION
  17252. * DETERMINE IF THE NEW JOB CAN BE CREATED WITH THE
  17253. * SPECIFIED VALIDATIONS AND WITHIN THE SPECFIED LIMITS.
  17254. * THE INITIAL JOB ACCESS LEVEL SPECIFIED BY THE CALLER IS
  17255. * THE LOCAL FILE ACCESS LEVEL, IF THE JOB IS BEING CREATED
  17256. * FROM A LOCAL FILE. OTHERWISE, THIS VALUE IS ZERO. THE
  17257. * UPPER LIMIT SPECIFIED BY THE CALLER IS FROM THE JOB CARD
  17258. * (LINE ACCESS LEVEL LIMIT FOR INTERACTIVE JOBS). IF THE
  17259. * DEFAULT IS TO BE USED, 4000B IS SPECIFIED.
  17260. *
  17261. * IF THE JOB CAN BE CREATED, RESTRICT THE ACCESS LEVEL
  17262. * LIMITS AND VALIDATION BITS, AND THE ACCESS CATEGORY
  17263. * VALIDATION BITS, TO BE CONSISTENT AND TO BE WITHIN
  17264. * THE LIMITS FOR THE SPECIFIED JOB ORIGIN TYPE.
  17265. *
  17266. * THE SPECIFIED INITIAL ACCESS LEVEL WILL BE ADJUSTED UPWARDS
  17267. * IF NECESSARY TO THE RESTRICTED LOWER ACCESS LEVEL LIMIT. IF
  17268. * IT IS ALREADY ABOVE THIS LEVEL, IT WILL BE SET TO THE NEXT
  17269. * HIGHEST ACCESS LEVEL IN THE RESTRICTED SET OF ACCESS LEVEL
  17270. * BITS. IF THERE ARE NO VALID LEVELS AT OR ABOVE *IJL*, THE
  17271. * JOB CANNOT BE CREATED.
  17272. * IF THE VALUE 4000B IS SPECIFIED FOR *UAL*, THE RESTRICTED
  17273. * UPPER ACCESS LEVEL LIMIT WILL BE SET TO THE ADJUSTED INITIAL
  17274. * ACCESS LEVEL, CALCULATED AS DESCRIBED ABOVE.
  17275. *
  17276. * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
  17277. * 1) AN INVALID ACCESS LEVEL IS SPECIFIED.
  17278. * 2) AN INVALID ORIGIN TYPE IS SPECIFIED.
  17279. *
  17280. *
  17281. * 5 VEDS - VALIDATE EXPIRATION DATE.
  17282. *
  17283. * ENTRY
  17284. *T, OR 12/ VSAM, 12/ VEDS, 18/ , 18/ EXP
  17285. * EXP EXPIRATION DATE
  17286. *
  17287. * EXIT
  17288. *T, OR 12/ 0, 12/ ST, 36/
  17289. * ST = 0 IF EXPIRATION DATE NOT YET REACHED.
  17290. *
  17291. * FUNCTION
  17292. * DETERMINE IF THE SPECIFIED EXPIRATION DATE HAS BEEN
  17293. * REACHED (IF EXPIRATION DATE .LE. TODAY-S DATE).
  17294. *
  17295. *
  17296. * 6 VJLS - VALIDATE JOB ACCESS LEVEL LIMITS.
  17297. *
  17298. * ENTRY
  17299. *T, OR 12/ VSAM, 12/ VJLS, 12/ OT, 12/ UAL, 12/ LAL
  17300. * OT = ORIGIN TYPE OF JOB.
  17301. * UAL = UPPER ACCESS LEVEL LIMIT FOR JOB.
  17302. * LAL = LOWER ACCESS LEVEL LIMIT FOR JOB.
  17303. *
  17304. * EXIT
  17305. *T, OR 12/ 0, 12/ ST, 36/
  17306. * ST = 0 IF ACCESS LEVEL LIMITS VALID.
  17307. *
  17308. * FUNCTION
  17309. * DETERMINE IF THE SPECIFIED JOB ACCESS LEVEL LIMITS
  17310. * LIE WITHIN THE RANGE OF VALID ACCESS LEVELS FOR
  17311. * THE SPECIFIED ORIGIN TYPE.
  17312. *
  17313. * *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
  17314. * 1) AN INVALID ACCESS LEVEL IS SPECIFIED.
  17315. * 2) AN INVALID ORIGIN TYPE IS SPECIFIED.
  17316.  
  17317.  
  17318. PPR VSAM
  17319.  
  17320. LX1 -36 GET SUBFUNCTION NUMBER
  17321. SB4 X1-TVSAL
  17322. MX0 -12
  17323. PL B4,HNG IF ILLEGAL FUNCTION
  17324. SA3 B7+JCIW CHECK SUBSYSTEM ID
  17325. BX1 -X0*X5 GET SPECIFIED ACCESS LEVEL
  17326. SA2 A5+B1 GET (MB)
  17327. TB5 OSSM GET OPERATING SYSTEM SECURITY MODE
  17328. LX3 -24
  17329. BX3 -X0*X3
  17330. SX7 X3-LSSI-1
  17331. SB4 B4+TVSAL
  17332. JP TVSA+B4 PROCESS FUNCTION
  17333.  
  17334. * EXIT TO SUBFUNCTIONS WITH -
  17335. * (X0) = 48-BIT MASK.
  17336. * (X1) = SPECIFIED ACCESS LEVEL (BYTE 4 OF (OR)).
  17337. * (X2) = FIRST WORD OF MESSAGE BUFFER.
  17338. * (X5) = OUTPUT REGISTER.
  17339. * (X7) .GE. 0 IF THE JOB IS A SUBSYSTEM.
  17340. * (B5) = OPERATING SYSTEM SECURITY MODE.
  17341.  
  17342. * OPTION TABLE.
  17343.  
  17344. TVSA BSS 0
  17345. LOC 0
  17346.  
  17347. + EQ VS01 (VJAS) - SET JOB ACCESS LEVEL
  17348.  
  17349. + EQ VS11 (VSFS) - SET FILE ACCESS LEVEL
  17350.  
  17351. + EQ VS21 (VAES) - VALIDATE *AL* FOR EQUIPMENT
  17352.  
  17353. + EQ VS31 (VAJS) - VALIDATE *AL*/*AC* FOR JOB
  17354.  
  17355. + EQ VS42 (VJCS) - VALIDATE JOB CREATION PARAMETERS
  17356.  
  17357. + EQ VS51 (VEDS) - VALIDATE EXPIRATION DATE
  17358.  
  17359. + EQ VS61 (VJLS) - VALIDATE JOB LIMITS
  17360.  
  17361. TVSAL BSS 0
  17362. LOC *O
  17363.  
  17364. * *VJAS* (0) - SET JOB ACCESS LEVEL.
  17365.  
  17366. VS01 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
  17367. SB6 VS02 SET RETURN ADDRESS
  17368. EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
  17369.  
  17370. VS02 ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
  17371. SA2 B7+JSCW GET CURRENT ACCESS LEVEL
  17372. LX2 -45
  17373. MX0 -3
  17374. BX3 -X0*X2
  17375. IX6 X1-X3 CHECK IF NEW *AL* LESS THAN OLD
  17376. BX3 X2 CHECK IF VALIDATED FOR DOWNGRADE
  17377. LX3 59-55+45
  17378. BX6 -X3*X6
  17379. BX6 X7*X6 CHECK IF THE JOB IS A SUBSYSTEM
  17380. NG X6,VSX3 IF INVALID ACCESS
  17381. BX2 X0*X2 SET NEW ACCESS LEVEL IN *JSCW*
  17382. BX6 X2+X1
  17383. LX6 45
  17384. SA6 A2
  17385. EQ VSX1 RETURN (NORMAL STATUS)
  17386.  
  17387. * *VSFS* (1) - SET ACCESS LEVEL FOR FILE.
  17388.  
  17389. VS11 SB6 VS12 SET RETURN ADDRESS
  17390. EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
  17391.  
  17392. VS12 ZR B5,VS13 IF SYSTEM IN UNSECURED MODE
  17393. ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
  17394. VS13 LX0 12 GET FNT ADDRESS
  17395. BX2 -X0*X5
  17396. SA3 B7+FLSW GET RA
  17397. LX2 -12
  17398. MX0 -24
  17399. LX3 -12
  17400. BX3 -X0*X3
  17401. LX3 6
  17402. IX2 X3-X2 CALCULATE FNT ADDRESS
  17403. SX3 B1
  17404. ERRNZ FSTL-1 CODE DEPENDS ON VALUE
  17405. IX2 X2+X3 *FSTL* ADDRESS
  17406. ERX3 X2 GET *FSTL*
  17407. LX3 59-0
  17408. NG X3,HNG IF FILE NOT SET BUSY
  17409. LX3 12-59+0 GET EST ORDINAL
  17410. MX0 -12
  17411. SB6 VS14 SET RETURN ADDRESS
  17412. BX3 -X0*X3
  17413. EQ VAE VALIDATE ACCESS LEVEL FOR EQUIPMENT
  17414.  
  17415. VS14 ZR B5,VS15 IF SYSTEM IN UNSECURED MODE
  17416. NG X6,VSX3 IF ACCESS LEVEL NOT VALID
  17417. VS15 SX3 B1+ GET CURRENT FILE ACCESS LEVEL
  17418. ERRNZ FUTL-FSTL-1 CODE DEPENDS ON VALUE
  17419. IX2 X2+X3 *FUTL* ADDRESS
  17420. ERX3 X2 GET *FUTL*
  17421. LX3 -24
  17422. MX0 -3
  17423. ZR B5,VS16 IF SYSTEM IN UNSECURED MODE
  17424. BX6 -X0*X3
  17425. IX6 X1-X6 CHECK IF NEW *AL* LESS THAN OLD
  17426. SA4 B7+JSCW
  17427. LX4 59-54 CHECK IF VALIDATED FOR DOWNGRADE
  17428. BX6 -X4*X6
  17429. BX6 X7*X6 CHECK IF THE JOB IS A SUBSYSTEM
  17430. NG X6,VSX3 IF INVALID ACCESS
  17431. VS16 BX3 X0*X3 SET NEW ACCESS LEVEL IN *FUTL*
  17432. BX7 X3+X1
  17433. LX7 24
  17434. EWX7 X2 REWRITE *FUTL*
  17435. EQ VSX1 EXIT (NORMAL STATUS)
  17436.  
  17437. * *VAES* (2) - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
  17438.  
  17439. VS21 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
  17440. LX5 -24 GET EST ORDINAL
  17441. BX3 -X0*X5
  17442. ZR X3,HNG IF INVALID EST ORDINAL
  17443. TX4 X3,-ESTL
  17444. PL X4,HNG IF INVALID EST ORDINAL
  17445. LX5 24
  17446. SB6 VS22 SET RETURN ADDRESS
  17447. EQ VAE VALIDATE ACCESS LEVEL FOR EQUIPMENT
  17448.  
  17449. VS22 NG X6,VSX3 IF ACCESS LEVEL NOT VALID
  17450. EQ VSX1 EXIT (NORMAL STATUS)
  17451.  
  17452. * *VAJS* (3) - VALIDATE ACCESS LEVEL / ACCESS CATEGORY SET.
  17453.  
  17454. VS31 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
  17455. BX4 X1 SAVE SELECTION PARAMETERS
  17456. LX1 59-0
  17457. PL X1,VS33 IF ACCESS LEVEL NOT TO BE CHECKED
  17458. LX0 36
  17459. BX1 -X0*X2 GET SPECIFIED ACCESS LEVEL
  17460. LX1 -36
  17461. SB6 VS32 SET RETURN ADDRESS
  17462. EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
  17463.  
  17464. VS32 ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
  17465. VS33 LX4 59-1
  17466. PL X4,VSX1 IF ACCESS CATEGORY SET NOT TO BE CHECKED
  17467. MX0 -32 GET SPECIFIED ACCESS CATEGORY SET
  17468. BX2 -X0*X2
  17469. SA3 B7+JSCW GET VALID ACCESS CATEGORY SET FOR JOB
  17470. BX3 -X0*X3
  17471. BX6 -X3*X2
  17472. NZ X6,VSX3 IF NONVALID BITS SET IN REQUEST
  17473. EQ VSX1 EXIT (NORMAL STATUS)
  17474.  
  17475. * *VJCS* (4) - VALIDATE JOB CREATION PARAMETERS.
  17476.  
  17477. VS41 BX5 X5-X5 CLEAR OUTPUT REGISTER
  17478. MX0 12 CLEAR ACCESS LEVELS AND CATEGORIES
  17479. BX2 X0*X2
  17480. EQ VS411 EXIT
  17481.  
  17482. VS42 ZR B5,VS41 IF SYSTEM IN UNSECURED MODE
  17483. SB4 X1-7
  17484. GT B4,B0,HNG IF INVALID LOWER ACCESS LEVEL
  17485. LX0 24 GET ORIGIN TYPE
  17486. BX4 -X0*X5
  17487. LX4 -24
  17488. SB4 X4-IAOT
  17489. GT B4,B0,HNG IF INVALID ORIGIN TYPE
  17490. TA4 X4,JCB GET ORIGIN TYPE VALIDATIONS FROM SCT
  17491. LX4 -36
  17492. MX0 -3
  17493. BX3 -X0*X4 ORIGIN TYPE UPPER LIMIT
  17494. LX4 -3
  17495. BX4 -X0*X4 ORIGIN TYPE LOWER LIMIT
  17496. SB4 X4 SET *LAL* TO ORIGIN TYPE LOWER LIMIT
  17497. MX0 -12
  17498. LX0 12
  17499. BX1 -X0*X5
  17500. LX1 -12
  17501. SB3 X1+ SPECIFIED UPPER ACCESS LEVEL (*UAL*)
  17502. BX6 X1 CHECK FOR *DEFAULT UAL* SPECIFICATION
  17503. LX6 59-11
  17504. NG X6,VS44 IF DEFAULT TO BE USED FOR *UAL*
  17505. SB5 X1-7
  17506. GT B5,B0,HNG IF INVALID UPPER ACCESS LEVEL
  17507. IX6 X1-X4
  17508. NG X6,VSX3 IF *UAL* .LT. ORIGIN TYPE LOWER LIMIT
  17509. IX6 X3-X1
  17510. PL X6,VS45 IF *UAL* .LE. ORIGIN TYPE UPPER LIMIT
  17511. VS44 SB3 X3+ SET *UAL* TO ORIGIN TYPE UPPER LIMIT
  17512.  
  17513. * CONSTRUCT RESTRICTED SET OF ACCESS LEVEL VALIDATION BITS.
  17514.  
  17515. VS45 SB5 B3-B4 CONSTRUCT MASK FOR VALID ACCESS LEVELS
  17516. NG B5,VSX3 IF *LAL* .GT. *UAL*
  17517. MX3 1
  17518. AX3 B5
  17519. SB5 B3+36+1 ALIGN MASK
  17520. LX3 B5
  17521. BX6 X3*X2 CONSTRUCT SUBSET OF ACCESS LEVEL BITS
  17522. ZR X6,VSX3 IF NO VALID ACCESS LEVELS IN RANGE
  17523. LX0 24
  17524. BX2 X0*X2
  17525. BX2 X2+X6 (X2) = UPDATED MESSAGE BUFFER WORD
  17526.  
  17527. * CONSTRUCT RESTRICTED SET OF ACCESS CATEGORY VALIDATION BITS.
  17528.  
  17529. SA3 SSML GET SYSTEM ACCESS CATEGORY SET
  17530. MX7 -32
  17531. BX3 -X7*X3
  17532. BX7 X7+X3 CONSTRUCT MASK
  17533. BX2 X7*X2 (X2) = UPDATED MESSAGE BUFFER WORD
  17534.  
  17535. * RESTRICT JOB ACCESS LEVEL LIMITS WITH RESTRICTED SET
  17536. * OF ACCESS LEVEL VALIDATION BITS.
  17537.  
  17538. MX0 -12
  17539. BX4 -X0*X5 SAVE *IJL*
  17540. BX7 X2
  17541. SB6 B4-23 PUT *LAL* BIT IN BIT 59
  17542. SX6 B4 GET LOWER ACCESS LEVEL LIMIT (*LAL*)
  17543. AX7 B6 (CIRCULAR LEFT SHIFT)
  17544. NG X7,VS47 IF VALIDATION BIT SET FOR CURRENT *LAL*
  17545. VS46 LX7 -1 INCREMENT *LAL*
  17546. SX6 X6+B1
  17547. PL X7,VS46 IF VALIDATION BIT NOT SET FOR NEW *LAL*
  17548. VS47 BX5 X0*X5 UPDATE *LAL* IN OUTPUT REGISTER
  17549. BX5 X5+X6
  17550. BX3 X6 SAVE *RLAL*
  17551. VS48 BX7 X2 CHECK UPPER ACCESS LEVEL LIMIT (*UAL*)
  17552. SB4 B3-23 PUT *UAL* BIT IN BIT 59
  17553. AX7 B4 (CIRCULAR LEFT SHIFT)
  17554. NG X7,VS410 IF VALIDATION BIT SET FOR CURRENT *UAL*
  17555. VS49 LX7 1 DECREMENT *UAL*
  17556. SB3 B3-B1
  17557. PL X7,VS49 IF VALIDATION BIT NOT SET FOR NEW *UAL*
  17558. VS410 SX6 B3+ UPDATE *UAL* IN OUTPUT REGISTER
  17559. MX0 -12
  17560. LX0 12
  17561. LX6 12
  17562. BX5 X0*X5
  17563. BX5 X5+X6
  17564. SX6 B3 GET *RUAL*
  17565. SB4 X3 SAVE *RLAL*
  17566. IX0 X3-X4
  17567. PL X0,VS410.2 IF *IJL* .LE. *RLAL*
  17568. BX7 X2
  17569. SB6 X4-23 PUT *IJL* BIT IN BIT 59
  17570. AX7 B6 (CIRCULAR LEFT SHIFT)
  17571. BX3 X4
  17572. NG X7,VS410.2 IF VALIDATION BIT SET FOR CURRENT *IJL*
  17573. VS410.1 LX7 -1 INCREMENT *IJL*
  17574. SX4 X4+B1
  17575. IX0 X6-X4
  17576. BX3 X4
  17577. NG X0,VSX3 IF *AIJL* ABOVE *RUAL*
  17578. PL X7,VS410.1 IF VALIDATION BIT NOT SET FOR *AIJL*
  17579. VS410.2 MX0 -12 SET *AIJL* IN OUTPUT REGISTER
  17580. LX0 24
  17581. LX3 24
  17582. BX5 X0*X5
  17583. BX5 X5+X3
  17584. LX1 59-11
  17585. PL X1,VS411 IF DEFAULT NOT TO BE USED FOR *UAL*
  17586. LX3 -24
  17587. SB3 X3+
  17588. IX1 X6-X3
  17589. ZR X1,VS411 IF *AIJL* = *RUAL*
  17590. LX3 12 RESET *RUAL* TO *AIJL* IN OR
  17591. LX0 -12
  17592. BX5 X0*X5
  17593. BX5 X5+X3
  17594. SB5 B3-B4 RECALCULATE MASK
  17595. MX3 1
  17596. AX3 B5
  17597. SB5 B3+36+1
  17598. LX3 B5
  17599. BX6 X3*X2 RESET RESTRICTED SET OF ACCESS LEVELS
  17600. LX0 24
  17601. BX2 X0*X2
  17602. BX2 X2+X6
  17603. VS411 BX7 X2 UPDATE MESSAGE BUFFER
  17604. SA7 A2
  17605. EQ VSX1 EXIT (NORMAL STATUS)
  17606.  
  17607. * *VEDS* (5) - VALIDATE EXPIRATION DATE.
  17608.  
  17609. VS51 MX0 -18
  17610. SA2 PDTL
  17611. BX1 -X0*X5 EXPIRATION DATE
  17612. LX2 -18
  17613. BX2 -X0*X2 TODAY-S DATE
  17614. IX6 X2-X1
  17615. PL X6,VSX3 IF EXPIRATION DATE HAS BEEN REACHED
  17616. EQ VSX1 EXIT (NORMAL STATUS)
  17617.  
  17618. * *VJLS* (6) - VALIDATE JOB ACCESS LEVEL LIMITS.
  17619.  
  17620. VS61 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
  17621. LX0 24 GET ORIGIN TYPE
  17622. BX4 -X0*X5
  17623. LX4 -24
  17624. SB4 X4-IAOT
  17625. GT B4,B0,HNG IF INVALID ORIGIN TYPE
  17626. TA4 X4,JCB GET LIMITS FOR ORIGIN TYPE FROM SCT
  17627. LX4 -36
  17628. MX0 -3
  17629. BX3 -X0*X4 ORIGIN TYPE UPPER LIMIT
  17630. LX4 -3
  17631. SB4 X1-7
  17632. GT B4,B0,HNG IF INVALID LOWER ACCESS LEVEL
  17633. BX4 -X0*X4 ORIGIN TYPE LOWER LIMIT
  17634. IX6 X3-X1
  17635. NG X6,VSX3 IF *LAL* .GT. ORIGIN TYPE UPPER LIMIT
  17636. IX6 X1-X4
  17637. MX0 -12
  17638. NG X6,VSX3 IF *LAL* .LT. ORIGIN TYPE LOWER LIMIT
  17639. LX0 12 GET SPECIFIED *UAL*
  17640. BX1 -X0*X5
  17641. LX1 -12
  17642. IX6 X3-X1
  17643. SB4 X1-7
  17644. GT B4,B0,HNG IF INVALID UPPER ACCESS LEVEL
  17645. NG X6,VSX3 IF *UAL* .GT. ORIGIN TYPE UPPER LIMIT
  17646. IX6 X1-X4
  17647. NG X6,VSX3 IF *UAL* .LT. ORIGIN TYPE LOWER LIMIT
  17648. * EQ VSX1 EXIT (NORMAL STATUS)
  17649.  
  17650. * *VSAM* EXIT PROCESSING.
  17651.  
  17652. VSX1 SX6 B0+ RETURN NORMAL STATUS
  17653. VSX2 MX0 -36 CLEAR BYTES 0 AND 1 OF OUTPUT REGISTER
  17654. BX7 -X0*X5
  17655. BX7 X7+X6 SET REPLY STATUS
  17656. EQ PPR1 EXIT
  17657.  
  17658. VSX3 SX6 B1 RETURN REJECT STATUS
  17659. LX6 36
  17660. EQ VSX2 SET OUTPUT REGISTER
  17661. TITLE PPU REQUEST PROCESSING SUBROUTINES.
  17662. CCP SPACE 4,20
  17663. ** CCP - CONVERT CPU SCHEDULING PARAMETERS.
  17664. *
  17665. * ON CME MACHINES, CONVERT THE CPU SCHEDULING PARAMETERS IN
  17666. * JCB WORD *CSJT* FROM MILLISECONDS TO *CSAW* UNITS (UNITS OF
  17667. * 64 MICROSECONDS) AND PLACE THE CONVERTED VALUES INTO JCB
  17668. * WORDS *CSAT* AND *CSBT*. ON NON-CME MACHINES, COPY THE
  17669. * PARAMETERS WITHOUT CONVERSION FROM *CSJT* TO *CSAT*/*CSBT*.
  17670. *
  17671. * ENTRY (X4) = SERVICE CLASS.
  17672. * (B3) = RETURN ADDRESS.
  17673. *
  17674. * EXIT PARAMETERS CONVERTED FOR SPECIFIED SERVICE CLASS.
  17675. * (A1) = ADDRESS OF *JCB* *CSBT* WORD.
  17676. *
  17677. * USES X - 0, 1, 2, 6, 7.
  17678. * A - 1, 6.
  17679.  
  17680.  
  17681. CCP BSS 0 ENTRY
  17682. CX1 X4,JCB CONVERT JCB ORDINAL TO OFFSET
  17683. MX0 -12
  17684. TA1 X1+CSJT,JCB GET UNCONVERTED PARAMETERS
  17685. TNO /CME/CCP,CME CONVERT PARAMETERS FOR CME MACHINE
  17686.  
  17687. * COPY PARAMETERS WITHOUT CONVERSION FOR NON-CME MACHINE.
  17688.  
  17689. BX7 -X0*X1 UNEXTENDED CPU SLICE
  17690. LX1 -12
  17691. BX6 -X0*X1 RECALL CPU SLICE
  17692. IX7 X7-X6 UNEXTENDED SLICE - RECALL SLICE
  17693. LX1 -12
  17694. BX2 -X0*X1 CPU SLICE EXTENSION
  17695. IX7 X7+X2 UNEXTENDED SLICE + EXTENSION - RECALL SLICE
  17696. LX6 -18
  17697. BX6 X6+X2
  17698. LX6 36
  17699. BX6 X6+X7
  17700. SA6 A1+B1
  17701. ERRNZ CSAT-CSJT-1 WORDS MUST BE CONTIGUOUS
  17702. LX1 -12
  17703. BX6 -X0*X1 SYSTEM I/O CPU THRESHOLD
  17704. SA1 A6+B1
  17705. ERRNZ CSBT-CSAT-1 WORDS MUST BE CONTIGUOUS
  17706. MX0 42
  17707. BX1 X0*X1
  17708. BX6 X1+X6
  17709. SA6 A1
  17710. JP B3 RETURN
  17711. HNG SPACE 4,15
  17712. ** HNG - HANG PPU.
  17713. *
  17714. * ALL REGISTERS ARE SAVED TO AID IN PROBLEM DIAGNOSIS.
  17715. * LEAVE PPU OUTPUT REGISTER SET, SET PACKED TIME AND DATE IN
  17716. * LAST WORD OF MESSAGE BUFFER, AND DISPLAY MESSAGE.
  17717. * MAY BE CALLED FROM EITHER MONITOR OR PROGRAM MODE WHEN
  17718. * ENTERED AT *HNG1*.
  17719. *
  17720. *
  17721. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  17722. * (B5) = EXIT ADDRESS IF ENTERED AT *HNG1*.
  17723. *
  17724. * USES X - 1, 7.
  17725. * B - 5.
  17726. * A - 1, 7.
  17727.  
  17728.  
  17729. HNG RJ SVR SAVE REGISTERS
  17730. HNG0 SA5 A5+ REREAD PP OUTPUT REGISTER
  17731. SB5 HNGM FLAG WE ARE HANGING PP TO *CHGM*
  17732. EQ .CHGM ASSIGN *1MA* TO ISSUE DAYFILE MESSAGES
  17733.  
  17734. * (B5) = EXIT ADDRESS.
  17735.  
  17736. HNG1 RJ SVR SAVE REGISTERS
  17737. HNG2 SA1 PDTL SET PACKED TIME AND DATE
  17738. SX7 4RHNG//32 ADD *HNG/* TO PACKED DATE/TIME
  17739. PX7 X7
  17740. LX7 5+36
  17741. BX7 X7+X1
  17742. SA1 A5 SET STORAGE MOVABLE FLAG
  17743. SA7 A5+6
  17744. MX7 1
  17745. LX7 56-59
  17746. BX7 X7+X1
  17747. SA7 A5
  17748. SA1 A5-B1 ADD PP NAME TO *PP HUNG* MESSAGE
  17749. MX7 18
  17750. BX7 X7*X1
  17751. SX1 HNGA SET *PP HUNG - XXX* MESSAGE
  17752. SA7 X1+B1
  17753. * EQ MSC SET MESSAGE IN SYSTEM CONTROL POINT
  17754. MSC SPACE 4
  17755. ** MSC - SET MESSAGE IN SYSTEM CONTROL POINT.
  17756. *
  17757. * ENTRY (X1) = MESSAGE ADDRESS.
  17758. * (B5) = EXIT ADDRESS.
  17759. *
  17760. * USES X - 1, 7.
  17761. * A - 1, 7.
  17762.  
  17763.  
  17764. MSC SA1 X1 READ FIRST WORD OF MESSAGE
  17765. BX7 X1
  17766. TA7 MS2W,SCA SET MESSAGE IN SYSTEM CONTROL POINT
  17767. SA1 A1+B1
  17768. BX7 X1
  17769. SA1 A1+B1
  17770. SA7 A7+B1
  17771. BX7 X1
  17772. SA7 A7+B1
  17773. JP B5 EXIT
  17774.  
  17775.  
  17776. HNGA DATA H*PP HUNG - *
  17777. DATA C*XXX* NAME OF HUNG PP
  17778. SABT DATA C* SYSTEM ABORT.*
  17779. PMR SPACE 4
  17780. ** PMR - ENTER PPU PROGRAM MODE REQUEST.
  17781. *
  17782. * ENTRY (X5) = OUTPUT REGISTER.
  17783. *
  17784. * EXIT TO *EPR*.
  17785.  
  17786.  
  17787. PMR TX3 A5-47*10B-1,-FP SET PPU SHIFT COUNT
  17788. BX7 X7-X7
  17789. PX1 X7 DISABLE PPU REQUEST
  17790. SX2 B1 SET REQUEST BIT
  17791. AX3 3
  17792. SB4 X3
  17793. BX7 X1+X5
  17794. AX0 X2,B4
  17795. SA7 A5
  17796. EQ EPR ENTER PROGRAM MODE REQUEST
  17797. RZX SPACE 4,10
  17798. ** RZX - RETURN ZERO OUTPUT REGISTER AND EXIT.
  17799. *
  17800. * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
  17801. *
  17802. * EXIT TO *PPRX*.
  17803. * (OR) = 0.
  17804.  
  17805.  
  17806. RZX BSS 0 ENTRY
  17807. SX7 B0 CLEAR OUTPUT REGISTER
  17808. SA7 A5
  17809. EQ PPRX EXIT
  17810. SPB SPACE 4,15
  17811. ** SPB - SET PPU REQUEST BIT.
  17812. *
  17813. * ENTRY (X0) = 1 IF BIT TO BE SET.
  17814. * (X0) = 0 IF BIT TO BE CLEARED.
  17815. * (X1) = REQUEST WORD.
  17816. * (B3) = EXIT ADDRESS.
  17817. * (A1) = ADDRESS OF WORD.
  17818. *
  17819. * EXIT NONE.
  17820. *
  17821. * USES X - 0, 1, 2, 3, 6.
  17822. * B - 4.
  17823. * A - 6.
  17824. *
  17825. * CALLS NONE.
  17826.  
  17827.  
  17828. SPB BSS 0 ENTRY
  17829. TX2 A5-47*10B-1,-FP SET PPU SHIFT COUNT
  17830. SX3 B1 SET MASK BIT
  17831. AX2 3
  17832. SB4 X2
  17833. AX3 X3,B4 CLEAR PREVIOUS REQUEST
  17834. BX1 -X3*X1
  17835. AX0 X0,B4 SET REQUEST BIT
  17836. BX6 X1+X0
  17837. SA6 A1 STORE REQUEST WORD
  17838. JP B3 EXIT
  17839. SVR SPACE 4,10
  17840. ** SVR - SAVE REGISTERS.
  17841. *
  17842. * EXIT (BXP - BXP+7) = *A* AND *B* REGISTER VALUES.
  17843. * (BXP+8 - BXP+15) = *X* REGISTER VALUES.
  17844. *
  17845. * USES X - 0, 6, 7.
  17846. * A - 6, 7.
  17847. * B - 1, 7.
  17848.  
  17849.  
  17850. SVR PS ENTRY/EXIT
  17851. SB1 B7-B0 HOLD *B7*
  17852. SB7 A7-B0 HOLD *A7*
  17853. SA7 BXP+15 SAVE *X7*
  17854. BX7 X0
  17855. SA7 BXP+8 SAVE *X0*
  17856. BX7 X6
  17857. SA7 BXP+14 SAVE *X6*
  17858. MX0 -18
  17859. SX7 B7-B0 SET *A7*
  17860. BX7 -X0*X7
  17861. SX6 B1-B0 SET *B7*
  17862. LX7 18
  17863. BX6 -X0*X6
  17864. SB1 1 RESET *B1*
  17865. IX6 X7+X6
  17866. SX7 A6-B0 SET *A6*
  17867. SA6 BXP+7 SAVE *A7* AND *B7*
  17868. BX7 -X0*X7
  17869. SX6 B6-B0 SET *B6*
  17870. LX7 18
  17871. BX6 -X0*X6
  17872. IX6 X7+X6
  17873. SA6 A6-B1 SAVE *A6* AND *B6*
  17874.  
  17875. .1 SET 5
  17876. DUP 5
  17877. RN OCTMIC .1,1
  17878. BX7 X"RN"
  17879. SA7 A7-B1 SAVE *X"RN"*
  17880. .1 SET .1-1
  17881. ENDD
  17882.  
  17883. .1 SET 5
  17884. DUP 5
  17885. RN OCTMIC .1,1
  17886. SX6 A"RN"-B0 SET A"RN"
  17887. BX6 -X0*X6
  17888. SX7 B"RN"-B0 SET B"RN"
  17889. LX6 18
  17890. IFNE .1,1,1
  17891. BX7 -X0*X7
  17892. IX6 X6+X7
  17893. SA6 A6-B1 SAVE A"RN" AND B"RN"
  17894. .1 SET .1-1
  17895. ENDD
  17896.  
  17897. SX6 A0-B0 SET *A0*
  17898. BX6 -X0*X6
  17899. LX6 18
  17900. SA6 A6-B1 SAVE *A0*
  17901. EQ SVR RETURN
  17902. VAE SPACE 4,15
  17903. ** VAE - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
  17904. *
  17905. * ENTRY (X1) = ACCESS LEVEL.
  17906. * (X3) = EST ORDINAL OF EQUIPMENT.
  17907. * (B6) = RETURN ADDRESS.
  17908. * (X3) = EST WORD *EQDE* OF EQUIPMENT, IF ENTRY
  17909. * AT *VAE0*.
  17910. * (X4) = OFFSET INTO EST FOR EQUIPMENT, IF ENTRY
  17911. * AT *VAE0*.
  17912. *
  17913. * EXIT (X6) .LT. 0, IF ACCESS LEVEL NOT VALID FOR EQUIPMENT.
  17914. * TO *HNG*, IF ACCESS LEVEL SPECIFIED IS INVALID.
  17915. *
  17916. * USES X - 3, 4, 6.
  17917. * A - 3, 4.
  17918.  
  17919.  
  17920. VAE BSS 0 ENTRY
  17921. CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
  17922. TA3 X4+EQDE,EST GET EST ENTRY
  17923. VAE0 TA4 X4+EQAE,EST
  17924. SX6 8
  17925. LX4 -6 GET EQUIPMENT ACCESS LIMITS
  17926. IX6 X1-X6
  17927. PL X6,HNG IF INVALID ACCESS LEVEL
  17928. PL X3,VAE1 IF NOT MASS STORAGE EQUIPMENT
  17929. MX6 -12
  17930. BX3 -X6*X3 GET MST ADDRESS
  17931. LX3 3
  17932. SA4 X3+PFGL GET DEVICE ACCESS LIMITS
  17933. VAE1 LX4 -6
  17934. MX6 -3
  17935. BX3 -X6*X4 UPPER LIMIT
  17936. LX4 -3
  17937. BX4 -X6*X4 LOWER LIMIT
  17938. IX6 X1-X4
  17939. NG X6,RB6 IF LESS THAN LOWER LIMIT
  17940. IX6 X3-X1 CHECK FOR GREATER THAN UPPER LIMIT
  17941. JP B6 RETURN
  17942. VAJ SPACE 4,15
  17943. ** VAJ - VALIDATE ACCESS LEVEL FOR JOB.
  17944. *
  17945. * ENTRY (X1) = ACCESS LEVEL.
  17946. * (B6) = RETURN ADDRESS.
  17947. * (B7) = CONTROL POINT ADDRESS.
  17948. *
  17949. * EXIT (X6) = 0, IF ACCESS LEVEL NOT VALID FOR JOB.
  17950. * TO *HNG*, IF ACCESS LEVEL SPECIFIED IS INVALID.
  17951. *
  17952. * USES X - 3, 6.
  17953. * A - 3.
  17954. * B - 3.
  17955.  
  17956.  
  17957. VAJ BSS 0 ENTRY
  17958. SB3 X1-7
  17959. GT B3,B0,HNG IF INVALID ACCESS LEVEL
  17960. SA3 B7+JSCW GET SET OF VALID AL-S FOR JOB
  17961. SB3 X1+36+1
  17962. MX6 1
  17963. LX6 B3
  17964. BX6 X6*X3 CHECK SPECIFIED *AL*
  17965. JP B6 RETURN
  17966. VFA SPACE 4,20
  17967. ** VFA - VERIFY FET ADDRESS.
  17968. *
  17969. * ENTRY (B3) = ERROR EXIT ADDRESS.
  17970. * (B6) = RETURN ADDRESS.
  17971. * (B7) = CPA.
  17972. * (X1) = RELATIVE FET ADDRESS IN LOWER 18 BITS.
  17973. * (X7) = ERROR STATUS.
  17974. *
  17975. * EXIT (B4) = FL.
  17976. * (X0) = RA.
  17977. * (X2) = (FLSW) LEFT SHIFTED BY -12.
  17978. * (X5) = ABSOLUTE FET+1 ADDRESS.
  17979. * (X6) = 12/ FET LENGTH - 5, 48/ 0.
  17980. *
  17981. * USES A - 2, 3, 7.
  17982. * B - 4, 5.
  17983. * X - ALL.
  17984.  
  17985.  
  17986. VFA SA2 B7+FLSW
  17987. MX4 -12
  17988. BX3 -X4*X2 FL/100B
  17989. MX5 -18
  17990. LX2 -12
  17991. BX5 -X5*X1 RELATIVE FET ADDRESS
  17992. LX3 6
  17993. SX0 X2 RA/100B
  17994. SB4 X3 FL
  17995. SX3 X3-4
  17996. LX0 6
  17997. IX4 X5-X3
  17998. PL X4,RB3 IF FET ADDRESS .GE. FL - 4
  17999. SB5 X5
  18000. SX5 X5+B1
  18001. LE B5,B1,RB3 IF FET ADDRESS .LE. 1
  18002. IX5 X0+X5 ABSOLUTE FET + 1 ADDRESS
  18003. ERX3 X5 GET FET LENGTH
  18004. MX6 -6
  18005. LX3 -18
  18006. BX6 -X6*X3
  18007. MX1 1 GET RANDOM FILE FLAG
  18008. LX3 18+12
  18009. IX4 X4+X6
  18010. PL X4,RB3 IF LWA+1 FET .GT. FL
  18011. AX7 X6,B1
  18012. BX1 X1*X3
  18013. LX6 48
  18014. ZR X1,RB6 IF NOT RANDOM FILE
  18015. BX6 X6+X1 RETURN RANDOM FILE FLAG
  18016. NZ X7,RB6 IF FET LONG ENOUGH FOR RANDOM PROCESSING
  18017. BX7 X3-X1 CLEAR RANDOM FLAG FROM FET
  18018. LX7 -12
  18019. BX6 X6-X1 REMOVE RANDOM FLAG FROM RESPONSE
  18020. EWX7 X5
  18021. JP B6 RETURN
  18022. VFP SPACE 4,20
  18023. ** VFP - VERIFY FET PARAMETERS.
  18024. *
  18025. * ENTRY (B3) = ERROR EXIT ADDRESS.
  18026. * (B4) = FL.
  18027. * (B6) = RETURN ADDRESS.
  18028. * (X5) = ABSOLUTE FET+1 ADDRESS.
  18029. * (X6) = VALIDATION FLAGS (1 = VALIDATE FIRST/LIMIT,
  18030. * 2 OR 3 = VALIDATE FIRST/IN/OUT/LIMIT).
  18031. * (X7) = ERROR STATUS.
  18032. *
  18033. * EXIT (X1) = 12/ 0, 24/ FIRST, 24/ LIMIT.
  18034. * (X6) = 12/ 0, 24/ IN, 24/ OUT.
  18035. *
  18036. * USES A - 1, 2, 3.
  18037. * B - 4.
  18038. * X - 1, 2, 3, 4, 6.
  18039.  
  18040.  
  18041. VFP MX3 -2
  18042. IX3 X5-X3 FET+4
  18043. ERX1 X5 GET FIRST
  18044. ERX2 X3 GET LIMIT
  18045. MX4 -18
  18046. BX1 -X4*X1
  18047. SX3 B4 FL
  18048. BX4 -X4*X2
  18049. IX3 X3-X4
  18050. NG X3,RB3 IF LIMIT .GT. FL OR LIMIT .LT. 0
  18051. IX3 X1-X4
  18052. PL X3,RB3 IF FIRST .GE. LIMIT OR FIRST .LT. 0
  18053. SB4 X1+
  18054. AX6 1
  18055. SX2 B1
  18056. ZR X6,VFP1 IF NO VALIDATION FOR IN AND OUT
  18057. IX3 X5+X2 FET+2
  18058. IX2 X3+X2 FET+3
  18059. ERX3 X3 GET IN
  18060. ERX2 X2 GET OUT
  18061. SX3 X3
  18062. SX2 X2
  18063. IX6 X3-X1
  18064. IX1 X2-X1
  18065. BX1 X1+X6
  18066. NG X1,RB3 IF IN OR OUT .LT. FIRST
  18067. IX6 X3-X4
  18068. PL X6,RB3 IF IN .GE. LIMIT
  18069. IX1 X2-X4
  18070. LX3 24
  18071. PL X1,RB3 IF OUT .GE. LIMIT
  18072. BX6 X3+X2
  18073. SX1 B4
  18074. VFP1 LX1 24
  18075. BX1 X1+X4
  18076. JP B6 RETURN
  18077. TTL CPUMTR/PROGRAM - PROGRAM MODE EXECUTION.
  18078. TITLE PRG - REQUEST TRANSLATION.
  18079. QUAL PROGRAM
  18080. PRG SPACE 4
  18081. ** PRG - PROCESS PROGRAM MODE REQUEST.
  18082.  
  18083.  
  18084. PRG1 SA7 A5 STORE *OR* FOR PROGRAM MODE REQUEST
  18085. EQ PRG
  18086.  
  18087. PRGX SX6 1 SET REQUEST EXIT
  18088. SA6 PX
  18089. MJ1 XJ * EXIT
  18090.  
  18091. PRG SA1 PR CHECK REQUEST WORD
  18092.  
  18093. * ALL PENDING REQUESTS ARE PROCESSED BEFORE ANY ADDITIONAL
  18094. * REQUESTS ARE PROCESSED.
  18095.  
  18096. SA3 PRGA CHECK PENDING REQUESTS
  18097. BX7 X7-X7
  18098. NZ X3,PRG2 IF PENDING REQUESTS
  18099. BX3 X1 SELECT FROM NEW REQUESTS
  18100. PRG2 ZR X3,PRGX IF NO REQUESTS
  18101. LX3 -11
  18102. PX4 X7 SET BIT 58
  18103. NX1,B4 X3 FIND REQUEST BIT
  18104. AX2 X4,B4 POSITION BIT
  18105. LX3 11
  18106. SX4 B4
  18107.  
  18108. * CLEAR REQUEST BIT.
  18109.  
  18110. + SA1 A1 **** PERFORM IN 1 WORD ****
  18111. BX6 X1-X2 **** PERFORM IN 1 WORD ****
  18112. SA6 A1 **** PERFORM IN 1 WORD ****
  18113.  
  18114. BX6 X3-X2 CLEAR REQUEST
  18115. AX2 48
  18116. SA6 A3
  18117. NZ X2,MNR IF MONITOR REQUEST
  18118.  
  18119. * PROCESS PPU REQUEST.
  18120.  
  18121. LX4 PPCES
  18122. TA5 X4+1-11*PPCE,FP
  18123. LX4 PPXES-PPCES
  18124. TA2 X4+ACPP-11*PPXE,FPX
  18125. UX1,B4 X5 UNPACK REQUEST
  18126. SB7 X2 SET CP ADDRESS
  18127. SA3 TPPR-CPUM+B4 SET PROCESSOR ADDRESS
  18128. LX3 30
  18129. SB6 X3
  18130. TJP (/PROBE/PRG,PROBE,B6) PROCESS REQUEST
  18131.  
  18132. PRGA CON 0 PENDING REQUEST WORD
  18133.  
  18134. ** EXIT TO PROCESSOR WITH -
  18135. * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
  18136. * (X2) = *ACPP*.
  18137. * (X3) = PROCESSOR CONTROL WORD SHIFTED 30 BITS.
  18138. * (X7) = 0.
  18139. * (A2) = *ACPP* ADDRESS.
  18140. * (A5) = OUTPUT REGISTER ADDRESS.
  18141. * (B4) = REQUEST NUMBER.
  18142. * (B6) = PROCESSOR ADDRESS.
  18143. * (B7) = CONTROL POINT ADDRESS.
  18144. TITLE PPU REQUEST PROCESSORS.
  18145. CKS SPACE 4
  18146. ** CKS - CHECKSUM SELECTED AREA.
  18147. *
  18148. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  18149. * (X7) = 0.
  18150.  
  18151.  
  18152. CKS SA2 B7+1 GET RA
  18153. MX6 -17
  18154. AX5 24
  18155. BX5 -X6*X5 LENGTH
  18156. BX1 -X6*X1 FWA
  18157. AX2 36 RA
  18158. IX1 X2+X1 ABSOLUTE FWA
  18159. SX0 B1
  18160. IX5 X5-X0
  18161. SX4 2
  18162. CKS1 ERX2 X1
  18163. LX7 1
  18164. IX3 X1+X0
  18165. IX6 X7+X2
  18166. ERX3 X3
  18167. LX6 1
  18168. IX1 X1+X4
  18169. SX5 X5-2 DECREMENT LENGTH
  18170. IX7 X6+X3
  18171. PL X5,CKS1 IF CHECKSUM NOT COMPLETE
  18172. LX5 -1
  18173. SA3 A5+B1 COMPARE CHECKSUM
  18174. PL X5,CKS2 IF EVEN WORD COUNT
  18175. BX7 X6
  18176. CKS2 BX6 X7-X3
  18177. ZR X6,CKS3 IF COMPARE SUCCESSFUL
  18178. SX6 B1 RETURN RESPONSE
  18179. CKS3 SA7 A3 STORE NEW CHECKSUM
  18180. SA6 A5 STORE OUTPUT REGISTER
  18181. JP PRG
  18182. CST SPACE 4,10
  18183. ** CST - CLEAR STORAGE.
  18184. *
  18185. * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
  18186. * (X2) = *ACPP*.
  18187. *
  18188. * EXIT TO CLEAR STORAGE PROCESSOR.
  18189. *
  18190. * USES X - 2.
  18191. * A - 2, 5.
  18192.  
  18193.  
  18194. CST BSS 0 ENTRY
  18195. AX2 24 SET CP/PCP ADDRESS
  18196. SB7 X2
  18197. TJP (/PROGRAM/CSE1,CME,/PROGRAM/CSE,MECS,/PROGRAM/CSC,CMU,/
  18198. ,PROGRAM/CSP)
  18199. DLKM SPACE 4,18
  18200. ** DLK - DELINK TRACK CHAIN.
  18201. *
  18202. * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
  18203. *
  18204. * EXIT (X1) = FIRST TRACK OF CHAIN TO DROP.
  18205. * (X2) = TRACK WHICH FIRST TRACK IS TO BE LINKED TO.
  18206. * (X3) = TDGL WORD OF MST.
  18207. * (X5) = -7777B.
  18208. * (B3) .LT. 4 FLAG TO DROP TRACKS PROCESSOR.
  18209. * (B6) = FIRST WORD ADDRESS OF TRT.
  18210. * (A3) = ADDRESS OF TDGL WORD IN MST.
  18211. *
  18212. * USES A - 1, 4, 6, 7.
  18213. * B - 3.
  18214. * A - 4, 7.
  18215. *
  18216. * CALLS CTR, DTC.
  18217.  
  18218.  
  18219. DLK SB3 DLK1 SET *CTR* RETURN
  18220. EQ CTR CHECK TRACK REQUEST
  18221.  
  18222. DLK1 AX4 X5,B1 TRACK MASK = -3777B
  18223. MX6 -2
  18224. BX7 -X4*X7 LAST TRACK TO DROP
  18225. BX6 -X6*X7 BYTE NUMBER
  18226. SA4 TMSK+X6 READ TRACK CLEARING MASK
  18227. SB3 X6 RESERVATION BIT SHIFT COUNT
  18228. AX7 2 TRT WORD NUMBER
  18229. BX6 -X5+X4 DISABLE CLEARING RESERVATION AND INTERLOCK
  18230. SA4 B6+X7 READ TRT WORD
  18231. LX7 X4,B3 CHECK LAST TRACK RESERVED
  18232. LX7 56
  18233. PL X7,HNG IF TRACK NOT RESERVED
  18234. BX7 X6*X4 CLEAR LINK IN LAST TRACK
  18235. SA7 A4
  18236. SB3 B0 INDICATE CALLED FROM *DLK*
  18237. EQ DTC1 EXIT TO DROP TRACKS PROCESSOR
  18238. DTC SPACE 4
  18239. ** DTC - DROP TRACK CHAIN.
  18240. *
  18241. * ENTRY (A5) = PPU OUTPUT REQISTER ADDRESS.
  18242. *
  18243. * EXIT (OR) = NUMBER OF SECTORS RETURNED TO SYSTEM.
  18244. *
  18245. * USES X - ALL.
  18246. * B - 2, 3, 4, 5, 6, 7.
  18247. * A - 1, 2, 6, 7.
  18248. *
  18249. * CALLS CCP, CTR.
  18250.  
  18251.  
  18252. DTC SB3 DTC1 SET *CTR* RETURN
  18253. EQ CTR CHECK TRACK REQUEST
  18254.  
  18255.  
  18256. * ENTERED HERE FROM *DLKM* PROCESSOR.
  18257.  
  18258. DTC1 LX3 12 POSITION TRACK COUNT
  18259. AX4 X5,B1 (X4) = TRACK MASK = -3777B
  18260. SA5 A5
  18261. BX7 -X4*X3
  18262. LX5 59-58
  18263. LX3 -24
  18264. PL X5,DTC1.1 IF NOT PROGRAM MODE
  18265. SA7 DTCB
  18266. DTC1.1 MX5 -12
  18267. BX7 -X4*X1
  18268. BX6 X4*X1 DROPPING ALL TRACKS FLAG
  18269. BX3 -X4*X3
  18270. SA1 A3+DILL-TDGL GET 819 DEVICE FLAG
  18271. SB5 X3+B6 FIRST FREE TRACK POINTER
  18272. LX1 0-22
  18273. SX3 B1
  18274. BX1 X3*X1 819 DEVICE FLAG
  18275. LX7 -2
  18276. SB7 X1
  18277. SA1 A3+MDGL-TDGL READ SECTOR LIMITS
  18278. BX1 -X4*X1 SECTOR LIMIT
  18279. LX1 24
  18280. BX3 X3+X1
  18281. NZ X6,DTC3 IF DROPPING ALL TRACKS
  18282.  
  18283. * ENTER SECTOR NUMBER/LINK BYTE IN LAST TRACK.
  18284.  
  18285. BX0 X4*X7 BYTE NUMBER
  18286. LX0 2
  18287. SB2 X0+56 RESERVATION BIT SHIFT COUNT
  18288. LX1 -24
  18289. LX0 2
  18290. IX1 X2-X1 CHECK EOI SECTOR NUMBER
  18291. SB4 X0
  18292. ZR B3,DTC2 IF ENTERED FROM *DLK*
  18293. PL X1,HNG IF ILLEGAL LAST SECTOR WRITTEN
  18294. DTC2 LX0 1
  18295. SB3 B4+X0 LINK BYTE SHIFT COUNT
  18296. SB4 B3-48
  18297. SA1 B6+X7 READ TRT WORD
  18298. AX7 X5,B4 POSITION BYTE CLEARING MASK
  18299. AX2 X2,B4 POSITION SECTOR NUMBER/LINK
  18300. BX7 X7*X1 CLEAR OLD LINK
  18301. SB4 A1 SET LINK ADDRESS
  18302. BX7 X7+X2 MERGE SECTOR LIMIT/LINK
  18303. EQ DTC6 DROP REST OF CHAIN
  18304.  
  18305. * DECREMENT PRESERVED FILE COUNT AND CHECK MRT PROCESSING.
  18306.  
  18307. DTC3 BX2 X4*X7 BYTE NUMBER
  18308. LX2 2
  18309. SA1 X7+B6 READ TRT WORD
  18310. SB2 X2
  18311. LX1 X1,B2 POSITION PRESERVED FILE BIT
  18312. LX1 59-11
  18313. NG X1,DTC9 IF PRESERVED FILE
  18314. ZR X6,DTC5 IF NOT DROPPING ALL TRACKS
  18315. MX1 1 FORCE *MRT* UPDATE
  18316. BX6 X6-X6
  18317. DTC4 PL X1,DTC5 IF NOT TO CLEAR *MRT* BIT
  18318. TPL X0,(/ISDMMF/CMB,ISDMMF,/PROGRAM/HNG) IF SHARED DEVICE
  18319.  
  18320. * DROP TRACK CHAIN.
  18321. * REENTRY HERE FROM */PROGRAM/CMB*.
  18322.  
  18323. DTC5 IX6 X6+X3 INCREMENT TRACKS/PRU-S DROPPED
  18324. TNZ B7,(/BUFIO/DIB,BUFIO,/PROGRAM/HNG) IF BUFFERED DEVICE
  18325.  
  18326. * REENTRY HERE FROM */IO819/DLB*.
  18327.  
  18328. DTC5.1 SA1 DTCB FETCH TRACK LIMIT
  18329. BX2 X7
  18330. BX0 X4*X7 BYTE NUMBER
  18331. LX2 2 TRACK NUMBER
  18332. LX0 2
  18333. IX1 X1-X2
  18334. SA2 TMSK+X0 READ TRACK CLEARING MASK
  18335. SB2 X0+56 RESERVATION BIT SHIFT COUNT
  18336. NG X1,HNG IF TRACK BEYOND DEVICE LIMIT
  18337. LX0 2
  18338. SA1 B6+X7 READ TRT WORD
  18339. SB3 X0
  18340. LX0 1
  18341. SB3 B3+X0 BYTE NUMBER * 12 + 12
  18342. SX0 A1-B5
  18343. BX7 X2*X1 CLEAR TRACK
  18344. PL X0,DTC6 IF NOT FIRST FREE TRACK
  18345. SB5 A1 UPDATE FIRST FREE TRACK POINTER
  18346. DTC6 SA7 A1 STORE TRT WORD
  18347. LX2 X1,B3 POSITION LINK BIT
  18348. LX1 X1,B2 POSITION RESERVATION BIT
  18349. AX2 48
  18350. PL X1,HNG IF NOT RESERVED
  18351. BX7 -X4*X2
  18352. LX7 -2
  18353. NG X2,DTC5 IF NOT END OF CHAIN
  18354.  
  18355. * UPDATE REMAINING TRACK COUNT.
  18356. * UPDATE FIRST FREE TRACK POINTER.
  18357.  
  18358. SA3 A5 LOCATE DEVICE MST
  18359. MX0 -9
  18360. AX3 36
  18361. BX0 -X0*X3 EXTRACT EST ORDINAL
  18362. CX3 X0,EST CONVERT EST ORDINAL TO OFFSET
  18363. MX0 -12
  18364. TA3 X3+EQDE,EST READ EST ENTRY
  18365. BX7 -X0*X3
  18366. LX7 3
  18367. SA3 X7+TDGL READ *TDGL* WORD OF MST
  18368. MX0 -24
  18369. BX7 -X0*X6 NUMBER OF TRACKS DROPPED
  18370. SX1 B5-B6 FIRST FREE TRACK
  18371. IX7 X3+X7 ADD TRACKS TO *TDGL*
  18372. AX6 24 NUMBER OF SECTORS DROPPED
  18373. LX7 -12
  18374. SB5 PRG
  18375. BX7 X4*X7 CLEAR FIRST FREE TRACK POINTER
  18376. AX3 24
  18377. BX7 X7+X1 UPDATE FIRST FREE TRACK
  18378. LX7 12
  18379. BX5 -X4*X3 LENGTH OF TRT
  18380. SA7 A3
  18381. SA2 A3+NVGL-TDGL
  18382. SX3 B1+
  18383. PL X2,DTC8 IF NO FLAW REQUEST
  18384. LX2 12
  18385. BX2 -X4*X2
  18386. LX2 -2
  18387. BX0 -X0+X2
  18388. SA2 B6+X2 READ TRT WORD FOR TRACK
  18389. LX0 2
  18390. SB3 X0
  18391. IX7 X7-X3
  18392. AX3 B3
  18393. BX2 X3-X2
  18394. BX3 X3*X2
  18395. ZR X3,DTC8 IF TRACK RESERVED
  18396. SB3 B3+X0
  18397. SB3 B3+X0
  18398. SB3 B3+B3
  18399. SA7 A3 STORE UPDATED *TDGL*
  18400. LX4 12
  18401. SB3 B3+B3
  18402. AX4 B3
  18403. BX7 -X4+X2
  18404. SA7 A2
  18405. DTC8 SA2 A5+
  18406. BX7 X6 SET REPLY
  18407. LX2 59-58
  18408. NG X2,CCP1 IF PROGRAM MODE
  18409. SA2 /MONITOR/T1 RESTORE (B2)
  18410. SB5 /MONITOR/PPRX SET MONITOR MODE EXIT
  18411. SB2 X2+
  18412. EQ CCP1 CHECK FOR CHECKPOINT REQUEST
  18413.  
  18414. * PROCESS PRESERVED FILE.
  18415.  
  18416. DTC9 LX1 4 POSITION TRACK INTERLOCK
  18417. ZR X6,DTC4 IF NOT DROPPING ALL TRACKS
  18418. SA2 A3+B1 READ MST
  18419. ERRNZ ACGL-1 INDEX MUST BE ONE
  18420. LX5 24
  18421. BX6 -X5*X2 PRESERVED FILE COUNT
  18422. ZR X6,DTC4 IF FILE COUNT IS ZERO
  18423. SX5 B1
  18424. LX5 24
  18425. IX6 X2-X5 DECREMENT PRESERVED FILE COUNT
  18426. SA6 A2
  18427. BX6 X6-X6
  18428. EQ DTC4 RE-ENTER PROCESSING
  18429.  
  18430. DTCA BSS 0 SCRATCH WORD
  18431. CON 0 MUST BE THE WORD BEFORE TMSK
  18432.  
  18433. TMSK BSS 0 TRACK CLEARING MASKS
  18434. VFD 12/0,12/-0,12/-0,12/-0,12/3567B BYTE 0
  18435. VFD 12/-0,12/0,12/-0,12/-0,12/5673B BYTE 1
  18436. VFD 12/-0,12/-0,12/0,12/-0,12/6735B BYTE 2
  18437. VFD 12/-0,12/-0,12/-0,12/0,12/7356B BYTE 3
  18438. DTCB CON 0 DEVICE TRACK LIMIT
  18439. LCC SPACE 4
  18440. ** LCC - *PIOM* LOAD CENTRAL PROGRAM (SF = 6). PROGRAM MODE.
  18441. *
  18442. * ENTRY (A5) = PP OUTPUT REGISTER.
  18443. * (X5) = *PIOM* REQUEST.
  18444. * (B7) = CP ADDRESS.
  18445. *
  18446. * USES X - ALL.
  18447. * B - 3, 4, 5, 6.
  18448. * A - 1, 2, 4.
  18449. *
  18450. * CALLS CMP, MSR.
  18451.  
  18452.  
  18453. LCC SA2 B7+FLSW GET RA AND FL
  18454. MX6 -12
  18455. SB5 X5 GET RELATIVE CM ADDRESS OF LOAD
  18456. BX4 -X6*X2 FL/100B
  18457. LX2 -12
  18458. MX6 -RMSK
  18459. BX2 -X6*X2 RA/100B
  18460. LX5 -18
  18461. SA1 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
  18462. LX4 6
  18463. LX2 6
  18464. SX3 X5 GET LWA+1 OF LOAD
  18465. LX1 -12
  18466. LX5 18
  18467. ZR X3,LCC1 IF NO LWA SPECIFIED FOR LOAD
  18468. IX0 X4-X3
  18469. BX4 X3
  18470. NG X0,HNG IF LWA+1 .GT. FL
  18471. LCC1 BX1 -X6*X1 ABSOLUTE CM ADDRESS
  18472. ERX3 X1
  18473. SB6 X4 FL OR RELATIVE LWA+1 LOAD
  18474. SB4 X3-1 GET PROGRAM LENGTH
  18475. MX6 -36
  18476. SB3 B4+B5 RELATIVE LOAD ADDRESS + LENGTH
  18477. SX3 IFLS RETURN STATUS = INSUFFICIENT FL
  18478. BX5 -X6*X5
  18479. GT B3,B6,LCC2 IF INSUFFICIENT FIELD LENGTH FOR LOAD
  18480. SX0 B1
  18481. IX0 X1+X0 FWA PROGRAM CODE
  18482. SX3 B5
  18483. IX1 X2+X3 CM ADDRESS LOADING TO
  18484. SX2 B4+
  18485. BX3 X3-X3 RETURN STATUS = NO ERROR
  18486. IX5 X5+X2 ADVANCE RELATIVE CM ADDRESS
  18487. IX1 X0-X1
  18488. SB6 LCC2 *CMP* *MSR* RETURN ADDRESS
  18489. TJP (/CME/MSR,CME,/PROGRAM/CMP,CMU,/MONITOR/MSR)
  18490.  
  18491. LCC2 LX3 -24
  18492. BX7 X5+X3
  18493. EQ PRG1 EXIT TO STORE OUTPUT REGISTER
  18494. PIP SPACE 4,15
  18495. ** PIP - *PIOM* PROGRAM MODE PROCESSOR.
  18496. *
  18497. * ENTRY (A5) = PP *OR* ADDRESS.
  18498. * (X5) = (OR).
  18499. * (B7) = CP ADDRESS.
  18500. * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
  18501. * DESCRIPTION.
  18502. * (MB+1) = 1/MODE,23/,18/PROC,18/SUBFUNCTION DATA.
  18503. * MODE = 1 (PROGRAM MODE).
  18504. * PROC = PROGRAM MODE *PIOM* RETURN ADDRESS.
  18505. *
  18506. * EXIT TO *PIOM* PROCESSOR RETURN ADDRESS.
  18507. * (B5) = *PIOM* SUBFUNCTION - 1.
  18508. * A5, B7, X5 SAME AS ON ENTRY.
  18509.  
  18510.  
  18511. PIP AX1 42 GET *PIOM* SUBFUNCTION CODE
  18512. SB4 X1-LCRS
  18513. ZR B4,LCC IF LOAD CM RESIDENT CODE SUBFUNCTION
  18514. SA3 A5+2 GET PROGRAM MODE PROCESSOR ADDRESS
  18515. SB5 X1-1 SUBFUNCTION - 1
  18516. LX3 -18
  18517. SB6 X3
  18518. JP B6 JUMP TO *PIOM* SUBFUNCTION PROCESSOR
  18519. RDC SPACE 4
  18520. ** RDC - REQUEST DATA CONVERSION.
  18521. *
  18522. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  18523. * REFER TO *RDCM* DOCUMENTATION FOR MORE INFORMATION.
  18524. *
  18525. * EXIT TO *PRG*.
  18526. *
  18527. * USES X - 1, 2, 3, 4, 5, 6, 7.
  18528. * B - 1, 2, 3, 4, 5, 6.
  18529. * A - 1, 2, 3, 4, 6, 7.
  18530. *
  18531. * CALLS DSB.
  18532.  
  18533.  
  18534. RDC SA1 A5 PRESET (A1)
  18535. MX4 -6
  18536. SB3 B1 SET WORD COUNT
  18537. LX1 24
  18538. SB6 RCDS CHECK FOR *RCIS*/*RCDS* SUBFUNCTIONS
  18539. ERRNZ RCIS CODE DEPENDS ON VALUE
  18540. BX2 -X4*X1
  18541. LX1 6
  18542. SB5 6 SHIFT COUNT
  18543. BX5 -X4*X1 MILLIUNITS CONVERSION
  18544. LX1 6
  18545. BX1 -X4*X1 VALIDATE WORD COUNT AND SRU POINTER
  18546. MX4 -30 (X4) = DATA MASK
  18547. ZR X2,RDC4 IF 1 WORD TO CONVERT (0 IMPLIES 1)
  18548. SB3 X2 SET SUBFUNCTION / WORD COUNT
  18549. SB4 X1 SET SRU POINTER
  18550. GT B3,B6,RDC9 IF NOT *RCIS*/*RCDS* SUBFUNCTION
  18551. LT B3,B6,RDC1 IF NOT *RCDS* SUBFUNCTION
  18552.  
  18553. * CONVERT INTEGER TO F10.3 FORMAT (*RCDS*).
  18554.  
  18555. MX4 -48 DATA MASK
  18556. SA3 A5+B1 WORD TO CONVERT
  18557. ZR B4,RDC4 IF NO CONVERSION TO CLOCK CYCLES
  18558. SB4 RDC3 SET *DSB* RETURN ADDRESS
  18559. SA2 /MONITOR/CPTA CONVERT QUARTER NANOUNITS TO CLOCK CYCLE
  18560. PX2 X2
  18561. BX6 X3
  18562. NX2 X2
  18563. EQ DSB DIVIDE 60 BIT INTEGER
  18564.  
  18565. * CONVERT INTEGER(S) TO F10.3 FORMAT (*RCIS*).
  18566.  
  18567. RDC1 ZR B4,RDC2 IF NO SRU CONVERSION
  18568. GT B4,B3,HNG IF SRU POINTER .GT. WORD COUNT
  18569. SA2 A5+B4
  18570. MX6 -42
  18571. SA3 /MONITOR/TTH
  18572. BX6 -X6*X2 ISOLATE SRU ACCUMULATOR
  18573. PX6 X6
  18574. FX6 X3*X6 SCALE SRU ACCUMULATOR
  18575. SA6 A2 STORE FOR CONVERSION
  18576. RDC2 ZR X5,RDC4 IF NO NANOUNITS TO MILLIUNITS CONVERSION
  18577. SB4 X5
  18578. SA3 A5+B4 WORD TO CONVERT
  18579. GT B4,B6,HNG IF MILLIUNITS POINTER .GT. WORD COUNT
  18580. SA2 /MONITOR/CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
  18581. SB4 RDC3 SET *DSB* RETURN ADDRESS
  18582. BX6 X3
  18583. EQ MSB MULTIPLY 60 BIT INTEGER
  18584.  
  18585. RDC3 SA6 A3+ STORE QUOTIENT
  18586. SB6 7 RESTORE B6
  18587.  
  18588. * INITIALIZE CONVERSION. (A1) = OR. (B6) = CONVERSION COUNT.
  18589.  
  18590. RDC4 SA2 RDCA (X2) = 0.1P48+1
  18591. SX5 1R. (X5) = DECIMAL POINT
  18592. SA3 RDCB (X3) = 10.0P
  18593. LX5 18
  18594. MX0 -18 (X0) = FRACTION MASK
  18595.  
  18596. * CONVERT ACCOUNTING WORDS.
  18597.  
  18598. RDC5 SA1 A1+B1 CHECK NEXT WORD
  18599. BX6 -X4*X1
  18600. SX7 1000
  18601. ZR X6,RDC8 IF BLANK WORD
  18602. SB4 1R0-1R (B4) = CONVERSION
  18603. SA4 A3+B1 (X4) = BACKGROUND
  18604. PX1 X6
  18605. SB2 9 SET MAXIMUM NUMBER OF DIGITS PER WORD
  18606. IX7 X6-X7
  18607. SB6 -B5
  18608. PL X7,RDC6 IF INTEGER PRESENT
  18609. SB4 B0+
  18610. SA4 A4+1
  18611. RDC6 DX6 X2*X1 EXTRACT REMAINDER
  18612. FX1 X2*X1
  18613. UX7 X1 CHECK QUOTIENT
  18614. SB2 B2-B1 DECREMENT CHARACTER COUNT
  18615. LX4 -6 SHIFT ASSEMBLY
  18616. GT B2,B0,RDC7 IF WORD NOT FULL
  18617. BX7 X7-X7 TERMINATE CONVERSION
  18618. RDC7 SB6 B6+B5 ADVANCE SHIFT COUNT
  18619. FX6 X3*X6 EXTRACT DIGIT
  18620. SX6 X6+B4 CONVERT DIGIT
  18621. IX4 X6+X4
  18622. NZ X7,RDC6 LOOP TO ZERO QUOTIENT
  18623. LX6 X4,B6 RIGHT JUSTIFY ASSEMBLY
  18624. BX4 -X0*X6 EXTRACT FRACTION
  18625. ZR X5,RDC8 IF SECOND PASS FOR F20.3 CONVERSION
  18626. IX7 X4+X5 ADD DECIMAL POINT
  18627. LX6 6
  18628. MX4 36
  18629. BX4 X4*X6 EXTRACT INTEGER
  18630. IX6 X4+X7 ADD INTEGER
  18631. SB6 -B5 RESET SHIFT COUNT
  18632. LE B3,B5,RDC8 IF NOT F20.3 CONVERSION
  18633. SA6 A1+1 STORE WORD FROM FIRST PASS
  18634. SB2 10 RESET NUMBER OF DIGITS PER WORD
  18635. SA4 A3+1 RESET BACKGROUND
  18636. UX7 X1
  18637. SX5 B0+ INDICATE F20.3 FIRST PASS COMPLETE
  18638. BX6 X4
  18639. SB4 1R0-1R RESET CONVERSION OFFSET
  18640. NZ X7,RDC6 IF MORE DIGITS TO CONVERT
  18641. RDC8 SA6 A1 STORE CONVERSION
  18642. BX7 X7-X7
  18643. GT B3,B5,PRG1 IF F20.3 CONVERSION
  18644. SB3 B3-B1 DECREMENT WORD COUNT
  18645. MX4 -30
  18646. NZ B3,RDC5 IF MORE TO CONVERT
  18647. EQ PRG1 EXIT AND STORE *OR*
  18648.  
  18649. * INCREMENT CURRENT PACKED DATE BY SPECIFIED TERM (*RIDS*).
  18650.  
  18651. RDC9 SB6 REPS
  18652. ERRNZ REPS-RIDS-1 CODE DEPENDS ON VALUE
  18653. GT B3,B6,HNG IF ILLEGAL SUBFUNCTION
  18654. EQ B3,B6,RDC17 IF *REPS* SUBFUNCTION
  18655. SA2 PDTL GET CURRENT DATE
  18656. AX2 18
  18657. SA5 A5 GET TERM
  18658. MX0 -12
  18659. BX1 -X0*X5
  18660. MX0 -6 UNPACK DATE
  18661. BX3 -X0*X2
  18662. SB3 X3 DAY
  18663. AX2 6
  18664. BX3 -X0*X2
  18665. SB4 X3 MONTH
  18666. AX2 6
  18667. BX2 -X0*X2
  18668. SB5 X2 YEAR
  18669. MX0 -2 MASK FOR LEAP YEAR
  18670.  
  18671. * ADVANCE YEAR.
  18672.  
  18673. RDC10 SX4 X1-366D (TERM REMAINING) - (DAYS IN LEAP YEAR)
  18674. NG X4,RDC14 IF LESS THAN 1 YEAR REMAINING
  18675. SB5 B5+B1 ADD 1 YEAR TO EXPIRATION DATE
  18676. SX3 B5+B1
  18677. SB6 B1+B1
  18678. BX2 -X0*X3
  18679. ZR X2,RDC11 IF CURRENT YEAR IS A LEAP YEAR
  18680. SX2 X3+B1 YEAR + 1 + LEAP YEAR OFFSET
  18681. BX2 -X0*X2
  18682. NZ X2,RDC13 IF NEXT YEAR IS NOT A LEAP YEAR
  18683. LE B4,B6,RDC13 IF BEFORE LEAP DAY
  18684. SX1 X1-1 SUBTRACT 1 DAY TO OFFSET LEAP DAY
  18685. EQ RDC13 SUBTRACT 1 YEAR FROM TERM
  18686.  
  18687. RDC11 GT B4,B6,RDC13 IF AFTER LEAP DAY
  18688. SX1 X1-1 SUBTRACT 1 DAY TO OFFSET LEAP DAY
  18689. RDC13 SX1 X1-365D SUBTRACT 1 YEAR FROM TERM
  18690. EQ RDC10 CONTINUE PROCESSING
  18691.  
  18692. * ADVANCE MONTH.
  18693.  
  18694. RDC14 SA4 RDCC+B4 GET DAYS IN CURRENT MONTH
  18695. SX7 B4-2
  18696. NZ X7,RDC15 IF CURRENT MONTH NOT FEBRUARY
  18697. SX2 B5+2
  18698. BX7 -X0*X2
  18699. NZ X7,RDC15 IF NOT LEAP YEAR
  18700. SX4 X4+B1 ADD LEAP DAY
  18701. RDC15 SX2 B3+
  18702. IX2 X4-X2 DAYS TO END OF CURRENT MONTH
  18703. IX3 X1-X2 SUBTRACT FROM TERM REMAINING
  18704. NG X3,RDC16 IF NOT ENOUGH TERM REMAINING TO FILL MONTH
  18705. ZR X3,RDC16 IF TERM EXACTLY FILLS CURRENT MONTH
  18706. SB3 B0+
  18707. SB4 B4+B1 INCREMENT MONTH
  18708. BX1 X3 SET NEW TERM
  18709. SX7 B4-13
  18710. NZ X7,RDC14 IF NOT END OF YEAR
  18711. SB5 B5+B1 INCREMENT YEAR
  18712. SB4 B1 SET MONTH TO JANUARY
  18713. EQ RDC14 CONTINUE
  18714.  
  18715. * RETURN NEW PACKED DATE.
  18716.  
  18717. RDC16 SB3 X1+B3 SET DAYS
  18718. SX6 B5 ADD IN YEAR
  18719. LX6 6
  18720. SX6 X6+B4 ADD IN MONTH
  18721. LX6 6
  18722. SX6 X6+B3 ADD IN DAY
  18723. SA6 A5+B1 SET DATE IN MESSAGE BUFFER WORD
  18724. BX7 X7-X7
  18725. EQ PRG1 EXIT AND STORE OUTPUT REGISTER
  18726.  
  18727. * ENCRYPT PASSWORD (*REPS*).
  18728. *
  18729. * THE ENCRYPTION ALGORITHM USED IS A POLYNOMIAL EXPANSION,
  18730. * MODULUS A LARGE PRIME NUMBER, OF THE FORM -
  18731. *
  18732. * E = SUM(A(N) * K**B(N))MOD PRIME
  18733. *
  18734. * WHERE -
  18735. *
  18736. * E = ENCRYPTED PASSWORD.
  18737. * K = UNENCRYPTED (PLAINTEXT) PASSWORD.
  18738. * A(N) = LARGE EXPANSION COEFFICIENT (N=1,6).
  18739. * B(N) = PRIME EXPANSION EXPONENT (N=1,6).
  18740. * PRIME = LARGE PRIME INTEGER IN THE INTERVAL
  18741. * (2**41, 2**42-1).
  18742. *
  18743. * PROGRAMMING NOTES.
  18744. *
  18745. * 1. THIS ALGORITHM MAY BE CUSTOMIZED BY ANY OR ALL
  18746. * OF THE FOLLOWING METHODS -
  18747. *
  18748. * A. CHANGING THE VALUE OF THE PRIME MODULUS,
  18749. * MAINTAINING THE CORRECT RANGE.
  18750. *
  18751. * B. CHANGING THE NUMBER OF TERMS IN THE EXPANSION
  18752. * POLYNOMIAL.
  18753. *
  18754. * C. CHANGING THE VALUES OF THE PRIME EXPONENTS.
  18755. *
  18756. * D. CHANGING THE VALUES OF THE COEFFICIENTS.
  18757. *
  18758. * 2. THE LENGTH OF THE BIT STRING TO BE ENCRYPTED MAY
  18759. * BE ALTERED TO ANY VALUE N .LE. 48D BY ALTERING
  18760. * THE RANGE OF THE PRIME MODULUS TO ANY VALUE *MOD*
  18761. * SUCH THAT -
  18762. *
  18763. * (2**(N-1)) .LE. MOD .LE. (2**(N)-1)
  18764.  
  18765. NTERM EQU 6 NUMBER OF TERMS IN POLYNOMIAL EXPANSION
  18766.  
  18767. ** TEMPORARY STORAGE LOCATIONS USED BY SUBFUNCTION *REPS*.
  18768.  
  18769.  
  18770. RDCD BSS 0 START OF TEMPORARY STORAGE
  18771. EPWD CON 0 ENCRYPTED PASSWORD
  18772. UPWD CON 0 UNENCRYPTED PASSWORD
  18773. TMP1 CON 0 TEMPORARY STORAGE
  18774. TMP2 CON 0 TEMPORARY STORAGE
  18775. TMP3 CON 0 TEMPORARY STORAGE
  18776. RDCDL EQU *-RDCD LENGTH OF TEMPORARY STORAGE
  18777. SPACE 4,10
  18778. * PRIME - PRIME IS CHOSEN TO PROVIDE A LARGE PRIME
  18779. * INTEGER IN THE INTERVAL (2**41,2**42-1).
  18780.  
  18781.  
  18782. PRIM DATA 00000077777777777561B (2**42)-143 PRIME MODULUS
  18783. MOD DATA 17717777777777756100B PACKED/NORMALIZED PRIME MODULUS
  18784. SPACE 4,10
  18785. * EXPT - TABLE OF PRIME EXPONENTS USED BY SUBFUNCTION *REPS*.
  18786.  
  18787.  
  18788. EXPT BSS 0 START OF TABLE
  18789. DATA 1777777777747B (2**37)-25
  18790. DATA 1777755B (2**19)-19
  18791. DATA 3
  18792. DATA 2
  18793. DATA 1
  18794. DATA 0
  18795. EXPTL EQU *-EXPT
  18796. ERRNZ EXPTL-NTERM IMPROPER NUMBER OF EXPONENTS
  18797. SPACE 4,10
  18798. * COFT - TABLE OF COEFFICIENTS USED BY SUBFUNCTION *REPS*.
  18799.  
  18800.  
  18801. COFT BSS 0 START OF TABLE
  18802. DATA 35216
  18803. DATA 14486
  18804. DATA 29891
  18805. DATA 68607
  18806. DATA 41867
  18807. DATA 14951
  18808. COFTL EQU *-COFT
  18809. ERRNZ COFTL-NTERM IMPROPER NUMBER OF COEFFICIENTS
  18810.  
  18811. RDC17 SA1 A5+B1 GET UNENCRYPTED PASSWORD
  18812. MX0 -42
  18813. AX1 18
  18814. BX6 -X0*X1
  18815. SB6 B0+ INITIALIZE ITERATION INDEX
  18816. SA6 UPWD
  18817.  
  18818. * CALCULATE THE EXPONENT Y = (Z**N)MOD PRIME, WHERE
  18819. * Y, Z, AND N ARE 42-BIT INTEGERS.
  18820.  
  18821. RDC18 SA1 UPWD GET UNENCRYPTED PASSWORD
  18822. SA2 EXPT+B6 GET EXPONENT
  18823. BX6 X1 SAVE Z = INTEGER
  18824. LX7 X2 SAVE N = WORKING EXPONENT
  18825. SA6 A1+B1 (TMP1) = Z TERM
  18826. ERRNZ TMP1-UPWD-1 ERROR IF WORDS NOT CONTIGUOUS
  18827. SA7 A6+B1 (TMP2) = N
  18828. ERRNZ TMP2-TMP1-1 ERROR IF WORDS NOT CONTIGUOUS
  18829. SX6 B1 INITIALIZE Y TERM
  18830. SA6 A7+B1 (TMP3) = Y
  18831. ERRNZ TMP3-TMP2-1 ERROR IF WORDS NOT CONTIGUOUS
  18832. ZR X2,RDC23 IF EXPONENT = ZERO
  18833. RDC19 SA3 TMP2 GET N TERM
  18834. SA1 TMP1 GET Z TERM
  18835. AX6 X3,B1 N = N/2
  18836. LX3 59-0
  18837. SA6 A3+ STORE HALVED N TERM
  18838. PL X3,RDC21 IF N TERM WAS EVEN BEFORE HALVING
  18839. SA2 TMP3 GET Y TERM
  18840. SB3 RDC20 SET RETURN ADDRESS
  18841. EQ MPY Y = Z*Y
  18842.  
  18843. RDC20 SA6 TMP3 SAVE NEW Y
  18844. SA3 TMP2 CHECK N
  18845. ZR X3,RDC23 IF CALCULATION COMPLETE
  18846. SA1 TMP1 GET Z TERM
  18847. RDC21 BX2 X1
  18848. SB3 RDC22 SET RETURN ADDRESS
  18849. EQ MPY Z = Z*Z
  18850.  
  18851. RDC22 SA6 TMP1 SAVE NEW Z TERM
  18852. EQ RDC19 LOOP
  18853.  
  18854. * MULTIPLY COEFFICIENT * EXPONENT.
  18855.  
  18856. RDC23 SA2 COFT+B6 GET COEFFICIENT
  18857. SA1 TMP3 GET EXPONENT
  18858. SB3 RDC24 SET RETURN ADDRESS
  18859. EQ MPY MULTIPLY BY COEFFICIENT
  18860.  
  18861. * CALCULATE THE ENCRYPTED PASSWORD.
  18862.  
  18863. RDC24 SA2 EPWD GET ENCRYPTED PASSWORD
  18864. SA3 PRIM GET PRIME MODULUS
  18865. IX6 X2+X6 SUM VALUES
  18866. IX1 X6-X3
  18867. NG X1,RDC25 IF SUM .LT. MODULUS
  18868. BX6 X1
  18869. RDC25 SA6 A2 STORE NEW ENCRYPTED PASSWORD
  18870. SB6 B6+B1 INCREMENT ITERATION INDEX
  18871. SB5 B6-NTERM
  18872. NG B5,RDC18 IF MORE ITERATIONS REQUIRED
  18873.  
  18874. * CLEAR TEMPORARY STORAGE LOCATIONS AND RETURN
  18875. * ENCRYPTED PASSWORD.
  18876.  
  18877. SA1 EPWD GET ENCRYPTED PASSWORD
  18878. SB6 RDCDL-1
  18879. BX6 X1
  18880. LX6 18 LEFT-JUSTIFY OUTPUT
  18881. BX7 X7-X7
  18882. SA6 A5+B1 RETURN ENCRYPTED PASSWORD
  18883. RDC26 SA7 RDCD+B6 CLEAR TEMPORARY STORAGE
  18884. SB6 B6-1
  18885. PL B6,RDC26 IF MORE WORDS TO CLEAR
  18886. EQ PRG1 EXIT AND SET OUTPUT REGISTER
  18887.  
  18888. RDCA CON 0.1P48+1 EXTRACT REMAINDER
  18889. RDCB CON 10.0P EXTRACT DIGIT
  18890. CON 10H
  18891. CON 10H 0000
  18892.  
  18893. RDCC EQU *-1 TABLE OF DAYS IN MONTH
  18894. CON 31 JANUARY
  18895. CON 28 FEBRUARY
  18896. CON 31 MARCH
  18897. CON 30 APRIL
  18898. CON 31 MAY
  18899. CON 30 JUNE
  18900. CON 31 JULY
  18901. CON 31 AUGUST
  18902. CON 30 SEPTEMBER
  18903. CON 31 OCTOBER
  18904. CON 30 NOVEMBER
  18905. CON 31 DECEMBER
  18906. RTC SPACE 4,20
  18907. ** RTC - RESERVE TRACK CHAIN.
  18908. *
  18909. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  18910. *
  18911. * EXIT (X7) = FIRST TRACK IN BYTE 4, IF TRACKS ASSIGNED.
  18912. * (X7) = REASON CODE IN BYTE 3, IF NO TRACKS ASSIGNED.
  18913. *
  18914. * USES X - ALL.
  18915. * B - 2, 3, 4, 5, 6, 7.
  18916. * A - 0, 1, 2, 3, 4, 6, 7.
  18917. *
  18918. * CALLS CCP1, CTR.
  18919.  
  18920.  
  18921. RTC BSS 0 ENTRY
  18922. BX2 X1 CHECK EQUIPMENT SPECIFIED
  18923. MX0 -9
  18924. LX2 24
  18925. BX3 -X0*X2
  18926. SB3 RTC7 SET *CTR* RETURN
  18927. NZ X3,CTR IF EQUIPMENT SPECIFIED
  18928. AX2 48
  18929. SB4 B0 (B4) = FIRST UNRESTRICTED DEVICE
  18930. SB2 X2-MXRS
  18931. PL B2,HNG IF ILLEGAL DEVICE SELECTION
  18932. TA1 X2,MSA READ DEVICE SELECTION BITS
  18933. TA0 EQDE,EST (A0) = FWA OF EST
  18934. UX3,B5 X1 (B5) = CURRENT EQUIPMENT TO CHECK
  18935. MX0 13 (X0) = MASK TO CLEAR CURRENT SELECTION
  18936. SX2 X5 (X2) = SECTORS REQUESTED
  18937. PL X2,RTC0 IF SECTORS REQUESTED FIELD GT 0
  18938. SX6 X2+1 CHECK FOR -1 IN SECTORS REQUESTED FIELD
  18939. MX7 -18
  18940. ZR X6,RTC0 IF ALL AVAILABLE TRACKS REQUESTED
  18941. BX2 -X7*X2 SET SECTORS REQUESTED TO POSITIVE NUMBER
  18942. RTC0 MX7 -12
  18943. SB2 1000B-1777B (B2) = DALL ACTIVITY TO BEAT
  18944. PX6 X7,B0 (X6) = TRACK LIMIT REJECT
  18945. LX5 59-23
  18946. SB3 0-1777B (B3) = DALL ACTIVITY, IMMEDIATE SELECTION
  18947. PL X5,RTC3 IF NO ACCESS LEVEL SELECTION
  18948. TEQ (/PROGRAM/RTC1,OSSM,/PROGRAM/RTC3)
  18949.  
  18950. RTC1 LX5 -59+23-18 EXTRACT ACCESS LEVEL SELECTION REQUIREMENT
  18951. MX6 -3 (X6) = -7 = ACCESS LEVEL REJECT CODE
  18952. BX4 -X5+X6
  18953. SB6 X4 (B6) = - ACCESS LEVEL REQUESTED
  18954. EQ RTC3 ENTER SELECTION LOOP
  18955.  
  18956. RTC2 SA3 X5+PFGL READ DEVICE ACCESS LEVEL LIMITS
  18957. LX3 -6
  18958. BX4 -X6*X3 UPPER ACCESS LEVEL LIMIT
  18959. SX4 X4+B6 NEGATIVE IF ACCESS LEVEL EXCEEDED
  18960. LX3 -3
  18961. BX3 -X6*X3
  18962. SB7 B6-B1
  18963. SX3 X3+B7
  18964. BX4 -X3+X4
  18965. UX6,B7 X6
  18966. PX6 X6,B0 SET DEVICE FOUND (TRACK LIMIT REJECT)
  18967. PL X4,RTC4 IF REQUESTED ACCESS LEVEL WITHIN LIMITS
  18968. PX6 X6,B7 RESET TO PREVIOUS REJECT REASON
  18969.  
  18970. * DEVICE SEARCH LOOP.
  18971.  
  18972. RTC3 AX5 X0,B5 FIND NEXT EQUIPMENT
  18973. BX3 -X5*X1
  18974. PX5 X3
  18975. NX4,B5 X5
  18976. ZR X3,RTC6 IF END OF PASS ON EQUIPMENTS
  18977. IFEQ ESTE,2,1
  18978. SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 2)
  18979. IFEQ ESTE,3,2
  18980. SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 3)
  18981. SB7 B7+B5
  18982. IFEQ ESTE,4,2
  18983. SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 4)
  18984. SB7 B7+B7
  18985. IFEQ ESTE,5,3
  18986. SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 5)
  18987. SB7 B7+B7
  18988. SB7 B7+B5
  18989. IFEQ ESTE,6,3
  18990. SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 6)
  18991. SB7 B7+B5
  18992. SB7 B7+B7
  18993. IFEQ ESTE,7,4
  18994. SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 7)
  18995. SB7 B7+B5
  18996. SB7 B7+B7
  18997. SB7 B7+B5
  18998. IFEQ ESTE,8,3
  18999. SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 8)
  19000. SB7 B7+B7
  19001. SB7 B7+B7
  19002. ERRPL ESTE-9 CODE DOES NOT HANDLE EST SIZE .GT. 8
  19003. SA4 A0+B7 READ EST ENTRY
  19004. BX5 -X7*X4
  19005. LX4 59-54
  19006. LX5 3
  19007. NG X4,RTC3 IF UNAVAILABLE DEVICE
  19008. LE B6,B0,RTC2 IF ACCESS LEVEL VALIDATION REQUIRED
  19009. RTC4 SA3 X5+DALL READ ACTIVITY BYTE
  19010. UX3,B7 X3
  19011. SA4 X5 + TDGL READ TRACK COUNT
  19012. ERRNZ TDGL
  19013. GE B7,B2,RTC3 IF NOT LESS THAN PREVIOUS LEAST ACTIVITY
  19014. SA3 X5+MDGL READ SECTORS PER TRACK
  19015. BX4 -X7*X4
  19016. BX3 -X7*X3
  19017. IX4 X4*X3
  19018. IX4 X4-X2
  19019. SA3 X5+ACGL
  19020. NG X4,RTC3 IF NOT ENOUGH TRACKS
  19021. LX3 59-4
  19022. NG X3,RTC3 IF ERROR IDLE SET
  19023. SB4 B5 SET CURRENT EQUIPMENT AS BEST
  19024. SB2 B7 SET CURRENT ACTIVITY AS BEST
  19025. GT B2,B3,RTC3 IF ACTIVITY PROHIBITS IMMEDIATE SELECTION
  19026. RTC5 SA1 A1 UPDATE LAST EQUIPMENT SELECTED
  19027. PX6 X1,B4
  19028. SA6 A1
  19029. SA5 A5 REREAD OUTPUT REGISTER
  19030. LX7 24
  19031. SX4 B4 MERGE EQUIPMENT IN REQUEST
  19032. BX3 -X7*X5 ORIGINAL DEVICE SELECTION
  19033. BX5 X7*X5
  19034. LX4 36
  19035. AX3 24 CHECK ORIGINAL DEVICE SELECTION
  19036. SX2 X3-ROLS
  19037. SX3 X3-SROS
  19038. IX3 X2*X3
  19039. NZ X3,RTC5.2 IF NEITHER ROLLOUT NOR SECONDARY ROLL
  19040. TA3 ROTS,SDA UPDATE ROLLOUT STATISTICS
  19041. TA2 NROS,SDA
  19042. SX0 B1
  19043. SX1 X5
  19044. IX6 X3+X0 COUNT ROLLOUT
  19045. IX7 X2+X1 COUNT SECTORS ROLLED
  19046. SA6 A3
  19047. SA7 A2
  19048. TX7 A1-SROS,-MSA CHECK FILE ALLOCATION
  19049. NZ X7,RTC5.2 IF NOT SECONDARY ROLLOUT DEVICE
  19050. TA3 SOTS,SDA UPDATE SECONDARY ROLLOUT STATISTICS
  19051. TA2 NSRS,SDA
  19052. IX6 X3+X0 COUNT SECONDARY ROLLOUT
  19053. IX7 X2+X1 COUNT SECONDARY SECTORS ROLLED
  19054. SA6 A3
  19055. SA7 A2
  19056. RTC5.2 BX5 X4+X5
  19057. BX7 X5
  19058. UX1 X5
  19059. SA7 A5 UPDATE OUTPUT REGISTER
  19060. SB3 RTC7 SET *CTR* RETURN
  19061. SB6 B1+ SET *CTR* ENTRY CONDITION
  19062. TEQ (/ISD/RTC,ISD,/PROGRAM/CTR) CHECK TRACK REQUEST
  19063.  
  19064. * PROCESS END OF PASS ON EQUIPMENTS.
  19065.  
  19066. RTC6 UX5,B5 X1 CHECK FOR WRAP ON SELECTION WORD
  19067. AX4 X0,B5
  19068. PX1 X5 INITIALIZE FOR EQUIPMENT WRAP
  19069. SB5 B0
  19070. BX1 X4*X1 CLEAR EQUIPMENTS ALREADY CHECKED
  19071. BX4 X4-X0
  19072. NZ X4,RTC3 IF SECOND PASS ON EQUIPMENTS NEEDED
  19073. SB7 100B-1777B UNRESTRICTED DEVICE THRESHOLD
  19074. LT B2,B7,RTC5 IF UNRESTRICTED EQUIPMENT FOUND
  19075. SA4 A1 REREAD SELECTION
  19076. UX4 X4
  19077. TB7 A1-SROS,-MSA
  19078. NZ B7,RTC6.1 IF NOT SECONDARY ROLLOUT
  19079. TA1 ROLS,MSA
  19080. BX1 -X4*X1 CLEAR DEVICES ALREADY CHECKED
  19081. UX3,B5 X1
  19082. NZ X3,RTC3 IF ROLLOUT DEVICES PRESENT
  19083. RTC6.1 TA1 MSA
  19084. BX1 -X4*X1
  19085. UX3,B5 X1
  19086. NZ X3,RTC3 IF TO TRY TEMP DEVICES
  19087. SA1 A4 RESET DEVICE TO UPDATE EQUIPMENT FOR
  19088. NZ B4,RTC5 IF EQUIPMENT FOUND
  19089. SX7 10000B TRACK LIMIT REJECT CODE
  19090. AX6 12 CHECK REJECT REASON
  19091. NZ X6,RTC6.2 IF NOT ACCESS LEVEL REJECT - EXIT
  19092. LX7 1
  19093. RTC6.2 SB5 PRG
  19094. EQ CSM1 CHECK FOR STORAGE MOVE
  19095.  
  19096. * CHECK TRACKS AVAILABLE.
  19097.  
  19098. RTC7 SA4 A3+MDGL-TDGL READ SECTOR LIMITS
  19099. BX6 -X5*X3 TRACKS AVAILABLE
  19100. BX4 -X5*X4 MINUMUM SECTOR LIMIT
  19101. NZ X7,RTC7.1 IF NOT REQUESTING ONE TRACK
  19102. SX7 B1+ SET ONE SECTOR REQUESTED
  19103. EQ RTC8 COMPUTE REQUESTED TRACKS
  19104.  
  19105. RTC7.1 PL X7,RTC8 IF NOT REQUESTING ALL TRACKS
  19106. SX2 X7+B1
  19107. MX5 -18
  19108. BX7 -X5*X7 SET SECTORS REQUESTED TO POSITIVE NUMBER
  19109. NZ X2,RTC8 IF NOT REQUESTING ALL TRACKS
  19110.  
  19111. IX7 X6*X4 REQUEST ALL TRACKS ON DEVICE
  19112. RTC8 PX2 X4 COMPUTE REQUESTED TRACKS
  19113. PX5 X7
  19114. NX2 X2
  19115. FX2 X5/X2
  19116. UX2,B2 X2
  19117. LX2 X2,B2
  19118. IX5 X2*X4 COMPUTE SECTORS IN LAST TRACK
  19119. IX7 X7-X5
  19120. SA7 RTCA SAVE REMAINDER
  19121. SX5 -1
  19122. ZR X7,RTC9 IF MULTIPLE OF SECTOR LIMIT
  19123. SX2 X2+1 INCREASE TRACK COUNT BY ONE
  19124. RTC9 SB4 X2 REQUESTED TRACKS
  19125. IX3 X3-X2 DECREMENT TRACKS REMAINING
  19126. SX7 B1
  19127. IX6 X6-X2 DECREMENT TRACKS REMAINING
  19128. LX7 47
  19129. NG X6,CCP1 IF TRACKS NOT AVAILABLE
  19130. MX6 -11
  19131. SB7 -48 (B7) = -48 = NORMALIZE BIAS
  19132. LX3 -12
  19133. SB3 B6-B1 FIRST WORD ADDRESS - 1 OF TRT
  19134. BX2 -X6*X3 FIRST FREE TRACK POINTER
  19135. MX5 -4 (X5) = -17B = RESERVATION BIT MASK
  19136. BX3 X6*X3 CLEAR FIRST FREE TRACK POINTER
  19137. SA2 X2+B3 SET START OF TRT SEARCH
  19138. SA0 TMSK-1 SET SCRATCH WORD ADDRESS
  19139. SA4 B0+ SET NO LINK WORD ADDRESS
  19140.  
  19141. * CLEAR LINK BYTE IN CURRENT TRACK.
  19142.  
  19143. ZR X1,RTC10 IF NO CURRENT TRACK
  19144. MX2 -2
  19145. BX0 -X6*X1 CURRENT TRACK
  19146. BX2 -X2*X1
  19147. AX0 2
  19148. SB2 X2+56 RESERVATION BIT SHIFT COUNT
  19149. LX2 2
  19150. SB3 X2
  19151. LX2 1
  19152. SA4 X0+B6 READ TRT WORD OF CURRENT TRACK
  19153. SB3 X2+B3 SET LINK BIT SHIFT COUNT
  19154. LX2 X4,B2 POSITION RESERVATION BIT
  19155. SA0 A4 SET LINK ADDRESS
  19156. LX0 X4,B3 POSITION LINK BIT
  19157. SB3 B3+B7 SET LINK SHIFT COUNT
  19158. BX2 -X0*X2
  19159. AX6 X6,B3 POSITION CLEARING MASK
  19160. MX0 1 SET NO MRT PROCESSING
  19161. PL X2,HNG IF NOT RESERVED OR IF LINKED
  19162. BX6 X6*X4
  19163. SA6 A4
  19164.  
  19165. * SEARCH FOR FIRST FREE TRACK.
  19166.  
  19167. RTC10 SA2 A2+B1 SEARCH FOR FREE TRACK
  19168. BX6 X2+X5
  19169. ZR X6,RTC10 IF NO FREE TRACK
  19170. SX4 A2-B6 COMPUTE TRACK NUMBER
  19171. NX6,B2 X6
  19172. LX4 2
  19173. SB6 4000B-44+X4
  19174. SX4 B6+B2 TRACK NUMBER
  19175. BX3 X3+X4 SAVE FIRST TRACK ASSIGNED
  19176. NG X0,RTC13 IF NO MRT BIT TO SET
  19177. TEQ (/ISDMMF/SMB,ISDMMF,/PROGRAM/HNG) SET MRT BIT
  19178.  
  19179. * TRT SEARCH AND LINK LOOP.
  19180.  
  19181. RTC11 SA2 A2+B1 NEXT TRT WORD
  19182. SB6 B6+4 INCREMENT BASE TRACK NUMBER
  19183. BX6 X2+X5 CHECK TRACKS RESERVED
  19184. RTC12 ZR X6,RTC11 IF ALL TRACKS RESERVED
  19185. NX6,B2 X6 (B2) = BYTE NUMBER + 44
  19186. SX4 B6+B2 TRACK NUMBER
  19187. RTC13 AX6 X7,B2 POSITION RESERVATION BIT
  19188. BX6 X2+X6 RESERVE TRACK
  19189. SA6 A2
  19190. SA1 A0 READ PREVIOUS RESERVATION
  19191. AX6 X4,B3 POSITION LINK BYTE
  19192. BX6 X6+X1 MERGE LINK BYTE
  19193. SX4 B2+B7 BYTE NUMBER - 4
  19194. SA6 A1
  19195. LX4 2
  19196. SB4 B4-B1 DECREMENT TRACK COUNT
  19197. SB3 X4
  19198. SA2 A2 RE-READ RESERVATION WORD
  19199. LX4 1
  19200. SA0 A2 SET LINK ADDRESS
  19201. SB3 X4+B3 SET LINK SHIFT COUNT
  19202. BX6 X2+X5
  19203. NZ B4,RTC12 IF MORE TRACKS REQUESTED
  19204.  
  19205. * UPDATE LAST TRACK BYTE (EOI SECTOR).
  19206.  
  19207. SA1 RTCA GET REMAINDER
  19208. NZ X1,RTC13.1 IF REQUEST NOT MULTIPLE OF SECTOR LIMIT
  19209. SA1 A3+MDGL-TDGL GET SECTOR LIMIT
  19210. MX7 -12
  19211. BX1 -X7*X1 SECTOR LIMIT
  19212. RTC13.1 SX7 B1 COMPUTE REMAINING SECTOR COUNT
  19213. IX1 X1-X7
  19214. AX7 X1,B3 POSITION TO TRACK BYTE IN TRT
  19215. BX7 X7+X2
  19216. SA7 A2 UPDATE TRACK BYTE
  19217. LX1 12
  19218. SX7 B2+B6 TRACK NUMBER
  19219. LX7 24
  19220. BX7 X1+X7 PRESET RESPONSE
  19221.  
  19222. * UPDATE FIRST FREE TRACK AND RETURN FIRST TRACK ASSIGNED.
  19223.  
  19224. MX4 -11
  19225. SA1 A3+TRLL-TDGL SET FWA OF TRT
  19226. SB6 X1
  19227. SB4 A4 SET LINK WORD ADDRESS
  19228. BX1 -X4*X3
  19229. BX6 X4*X3
  19230. SX5 A2-B6 FIRST FREE TRACK
  19231. SX0 X1+4000B FIRST TRACK
  19232. BX7 X0+X7 INSERT INTO RESPONSE TO PP
  19233. BX6 X6+X5 MERGE FIRST FREE TRACK BYTE
  19234. AX1 2
  19235. SB3 A2
  19236. LX6 12
  19237. SA2 A5 RE-READ REQUEST
  19238. LT B4,B3,RTC14 IF LINK WORD BEFORE LAST WORD TO UPDATE
  19239. SX5 B4-B6 UPDATE UP TO LINK WORD
  19240. RTC14 MX4 -9 SET EST ORDINAL
  19241. SA6 A3 STORE UPDATED *TDGL*
  19242. LX4 36
  19243. BX2 -X4*X2
  19244. SX5 X5+B1 SET LWA+1 OF TRT TO UPDATE
  19245. BX7 X2+X7 RETURN FIRST TRACK ASSIGNED
  19246. EQ CCP1 CHECK FOR DEVICE CHECKPOINT REQUESTED
  19247.  
  19248.  
  19249. RTCA CON 0 REMAINDER
  19250. STB SPACE 4
  19251. ** STB - SET TRACK BIT.
  19252. * ENTERED FROM BOTH MONITOR AND PROGRAM MODE.
  19253. *
  19254. * ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
  19255. * STB ENTRY FROM PROGRAM MODE.
  19256. * STB1 ENTRY FROM MONITOR MODE.
  19257. * (B5) EXIT ADDRESS IF ENTERED AT *STB1*.
  19258. *
  19259. * EXIT NONE.
  19260. *
  19261. * USES X - 1, 2, 3, 4, 5, 6, 7.
  19262. * B - 3, 4, 5.
  19263. * A - 3, 4, 6, 7.
  19264. *
  19265. * CALLS CCP, CTR.
  19266.  
  19267.  
  19268. STB SX4 X1
  19269. LX4 -14
  19270. SA2 X4+/MONITOR/TSTB READ OPTION TABLE
  19271. NG X4,STB1 IF SECOND ENTRY IN OPTION TABLE WORD
  19272. LX2 30
  19273. STB1 SB3 X2 SET *CTR* RETURN
  19274. UX2,B6 X2 SET *CTR* PARAMETER
  19275. EQ CTR CHECK TRACK REQUEST
  19276.  
  19277. STB2 SX7 STIS*10000B INTERLOCK IQFT TRACK
  19278. ZR X1,/MONITOR/STB3 IF NO IQFT TRACK
  19279.  
  19280. SUBFUN STBM,(STFS,CTFS,STIS,CTIS,SPFS,CPFS)
  19281. AX4 X5,B1 -3777B MASK
  19282. BX1 -X4*X1 TRACK NUMBER
  19283. MX3 -2
  19284. SX5 B1
  19285. BX3 X3+X1 BYTE NUMBER - 3
  19286. LX7 -13
  19287. SB3 X3 SET RESERVATION BIT SHIFT COUNT
  19288. LX1 -2
  19289. SX2 X7
  19290. AX5 X5,B3 POSITION RESERVATION BIT
  19291. LX2 2
  19292. SA4 B6+X1 READ TRT WORD
  19293. SB3 X2 SET TRACK BIT SHIFT COUNT
  19294. BX2 X5*X4 CURRENT VALUE OF RESERVATION BIT
  19295. LX5 X5,B3 POSITION TRACK BIT
  19296. AX7 59 (X7) = 0 FOR SET, -0 FOR CLEAR OPTION
  19297. BX6 X4-X5 COMPLEMENT TRACK BIT
  19298. BX4 X5*X4 CURRENT VALUE OF TRACK BIT
  19299. BX5 -X7*X5 NON-ZERO IF SET REQUEST
  19300. BX4 X5-X4 ZERO IF BIT ALREADY SET/CLEAR
  19301. ZR B3,STB8 IF FLAW REQUEST
  19302. ZR X2,STB9 IF TRACK NOT RESERVED
  19303. ZR X4,STB7 IF BIT ALREADY SET/CLEAR
  19304. AX4 8
  19305. SX3 B1
  19306. STB4 NZ X4,STB5 IF INCREMENT/DECREMENT OF PF COUNT
  19307. BX7 X7-X7
  19308. SA6 A4 STORE TRT WORD
  19309. NG X0,CCP1 IF NOT SHARED DEVICE
  19310. TEQ (/ISDMMF/STB10,ISDMMF,/MONITOR/HNG1)
  19311.  
  19312. * INCREMENT/DECREMENT PRESERVED FILE COUNT.
  19313.  
  19314. STB5 BX7 X7-X3 (X7) = 1 IF INCREMENT, -1 IF DECREMENT
  19315. LX3 24+11
  19316. SA2 A3+B1 READ *ACGL* WORD
  19317. LX7 24
  19318. IX7 X2+X7 ADJUST COUNT
  19319. BX4 -X3+X7 CHECK FOR OVERFLOW/UNDERFLOW
  19320. ZR X4,STB4 IF OVERFLOW/UNDERFLOW
  19321. STB6 SA7 A2 STORE UPDATED COUNTS
  19322. BX4 X4-X4
  19323. EQ STB4
  19324.  
  19325. STB7 ZR X5,/MONITOR/HNG1 IF CLEARING AN ALREADY CLEARED BIT
  19326. SX7 B1
  19327. SX3 B1
  19328. LX7 36
  19329. MX5 1 SET NO UPDATE OF TRT IN ECS
  19330. EQ CDI RELEASE DEVICE INTERLOCK
  19331.  
  19332. * PROCESS FLAW REQUEST.
  19333.  
  19334. STB8 ZR X4,STB7 IF BIT ALREADY SET/CLEAR
  19335. SA2 X3+TMSK+3
  19336. LX3 2 COMPUTE BYTE SHIFT COUNT
  19337. BX5 -X2*X6 MASK OUT ALL FIELDS FOR THIS TRACK
  19338. SB4 X3
  19339. LX3 1
  19340. SB4 B4+X3
  19341. MX4 -11
  19342. SA2 A3 REREAD *TDGL*
  19343. LX4 12
  19344. BX2 X4*X2 CLEAR FIRST FREE TRACK POINTER
  19345. AX4 X4,B4 POSITION FLAW STATUS BYTE
  19346. BX6 -X4-X6 COMPLIMENT FLAW STATUS
  19347. BX4 -X4*X7
  19348. BX5 X5-X4
  19349. AX5 4 SHIFT OFF RESERVATION BITS
  19350. NZ X5,/MONITOR/HNG1 IF BAD TRACK
  19351. SX3 B1
  19352. BX7 -X7-X3
  19353. IX7 X2+X7
  19354. EQ STB6
  19355.  
  19356. STB9 SA4 A5 CHECK RETURN ON TRACK NOT RESERVED
  19357. SX7 B1+B1
  19358. MX5 1 SET NO TRT UPDATE
  19359. LX4 59-46
  19360. PL X4,/MONITOR/HNG1 IF NO RETURN
  19361. SX3 B1
  19362. LX7 36
  19363. EQ CDI CLEAR DEVICE INTERLOCK
  19364. TITLE PROGRAM MODE SUBROUTINES.
  19365. APS SPACE 4,10
  19366. ** APS - ASSIGN PP (PROGRAM MODE).
  19367. *
  19368. * ENTRY (X1) = PP REQUEST.
  19369. * (B3) = EXIT ADDRESS.
  19370. *
  19371. * EXIT (X1) = ADDRESS OF COMMUNICATION BUFFER.
  19372. * (X1) = 0 IF NO BUFFER AVAILABLE.
  19373. * (X6) = PP REQUEST.
  19374. *
  19375. * USES X - 1, 6, 7.
  19376. * A - 1, 6.
  19377. *
  19378. * CALLS /MONITOR/ACB.
  19379.  
  19380.  
  19381. APS SX6 -B1 SET PP REQUEST TO MONITOR MODE
  19382. BX7 X1 SAVE PP REQUEST
  19383. SA6 PX
  19384. SB3 -B3 SET *APS* CALL TO *ACB*
  19385. EQ /MONITOR/ACB ASSIGN COMMUNICATION BUFFER
  19386.  
  19387. APS1 SB3 -B3 RESET RETURN ADDRESS
  19388. BX6 X1 PARAMETER WORD
  19389. ZR X1,APS2 IF NO BUFFER AVAILABLE
  19390.  
  19391. MJ EXCHANGE TO MONITOR MODE
  19392.  
  19393. ZR X6,APS3 IF NO PP ASSIGNED
  19394. APS2 BX6 X7 RESTORE PP REQUEST
  19395. JP B3 RETURN
  19396.  
  19397. APS3 SA6 X1 RELEASE COMMUNICATION BUFFER
  19398. BX1 X1-X1 CLEAR RESPONSE
  19399. EQ APS2 EXIT
  19400. CCP SPACE 4
  19401. ** CCP - CHECK FOR CHECKPOINT REQUESTED.
  19402. *
  19403. * ENTRY (X7) = STATUS TO RETURN TO OR.
  19404. * (X1) = FIRST WORD OF TRT TO UPDATE. (MSD ONLY)
  19405. * (X5) = LAST WORD + 1 OF TRT TO UPDATE. (MSD ONLY)
  19406. * (B4) = TRT LINK WORD TO UPDATE. (MSD ONLY)
  19407. * (B5) = EXIT ADDRESS.
  19408. * (B6) = STARTING ADDRESS OF TRT.
  19409. * (A3) = ADDRESS OF TDGL WORD OF MST.
  19410. * (A5) = OR ADDRESS.
  19411. * BIT 11 SET IN OR+1 INDICATES CHECKPOINT REQUESTED.
  19412. *
  19413. * EXIT EXITS TO CDI.
  19414. *
  19415. * USES X - 2, 3, 4, 6.
  19416. * A - 2, 6.
  19417.  
  19418.  
  19419.  
  19420. * ENTERED HERE FROM MONITOR MODE.
  19421.  
  19422. CCP1 SA2 A5
  19423. SA4 A3+SDGL-TDGL CHECK FOR ISHARED DEVICE
  19424. SX3 B1
  19425. LX2 12 POSITION CHECKPOINT REQUESTED BIT
  19426. BX2 -X4*X2
  19427. PL X2,CDI IF ISHARED OR NO CHECKPOINT REQUESTED
  19428. SA2 A3+STLL-TDGL READ MST WORD
  19429. SX4 B1+
  19430. LX4 50
  19431. BX6 X2+X4 SET CHECKPOINT BIT
  19432. SA6 A2+
  19433. * EQ CDI CLEAR DEVICE INTERLOCK
  19434. CDI SPACE 4
  19435. ** CDI - CLEAR DEVICE INTERLOCK.
  19436. *
  19437. * ENTRY (X1) = FIRST WORD OF TRT TO UPDATE. (MSD ONLY)
  19438. * (X3) = 1.
  19439. * (X5) = LAST WORD + 1 OF TRT TO UPDATE. (MSD ONLY)
  19440. * (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
  19441. * (B4) = TRT LINK WORD TO UPDATE. (MSD ONLY)
  19442. * (B5) = EXIT ADDRESS.
  19443. * (B6) = START OF TRT.
  19444. * (A3) = ADDRESS OF MST IN CM.
  19445. * (A5) = OUTPUT REGISTER ADDRESS.
  19446. *
  19447. * EXIT (OR) = (X7) = STATUS RESPONSE.
  19448.  
  19449.  
  19450. CDI SA4 A3+SDGL READ SDGL WORD OF MST
  19451. BX6 -X3*X4 RELEASE MST INTERLOCK
  19452. AX4 36
  19453. TNG X6,(/ISD/CDI,ISD,/MONITOR/HNG1) IF ISHARED
  19454. TNZ X4,(/PROGRAM/CDI1,MMF,/LSPMMF/CDI) IF MMF DEVICE
  19455. SA6 A4+ STORE *SDGL*
  19456. * EQ CSM1 CHECK FOR STORAGE MOVE
  19457. CSM SPACE 4,15
  19458. ** CSM - CHECK FOR STORAGE MOVE.
  19459. *
  19460. * ENTRY (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
  19461. * (B5) = EXIT ADDRESS, IF ENTERED AT *CSM1*.
  19462. * (A5) = OUTPUT REGISTER ADDRESS.
  19463. *
  19464. * EXIT OUTPUT REGISTER STORED.
  19465. * (X7) = VALUE STORED IN OUTPUT REGISTER.
  19466. *
  19467. * USES X - 2, 3, 6, 7.
  19468. * A - 2, 3, 7.
  19469. * B - 5.
  19470.  
  19471.  
  19472. * ENTRY WITH RETURN ADDRESS SPECIFIED BY CALLER.
  19473.  
  19474. CSM1 TX6 A5-1,-SP IGNORE PSEUDO-PP
  19475. MX2 12 IGNORE NONZERO OUTPUT REGISTERS
  19476. BX6 -X6+X7
  19477. TX3 A5-1,-FP
  19478. BX2 X2*X6
  19479. LX3 PPXES-PPCES
  19480. NZ X2,CSM2 IF PSEUDO-PP OR FUNCTION PRESENT
  19481. TA3 X3+ACPP,FPX GET CP/PCP ASSIGNMENT
  19482. SA2 CMCL
  19483. BX3 X3-X2
  19484. AX3 48
  19485. NZ X3,CSM2 IF NO MOVE REQUEST FOR CP/PCP
  19486. SX3 PRLM
  19487. LX3 48
  19488. BX7 X3+X7 SET *PRLM* IN OUTPUT REGISTER
  19489. CSM2 SA7 A5 STORE OUTPUT REGISTER
  19490. JP B5 EXIT
  19491.  
  19492. CSM BSS 0 ENTRY
  19493. SB5 PPRX SET RETURN ADDRESS
  19494. EQ CSM1 CHECK FOR STORAGE MOVE
  19495. CTR SPACE 4,35
  19496. ** CTR - CHECK TRACK REQUEST.
  19497. * MAY BE USED FROM PROGRAM OR MONITOR MODE.
  19498. *
  19499. * ENTRY (X1) = REQUEST WORD.
  19500. *T, X1 12/ 0,12/ EQ,12/ TK,12/ ,12/
  19501. * EQ = EST ORDINAL.
  19502. * TK = TRACK NUMBER.
  19503. * (B3) = EXIT ADDRESS.
  19504. * (B5) = EXIT ADDRESS IF ILLEGAL REQUEST FOUND.
  19505. * NEEDED IF ENTERED AT *CTR1*.
  19506. * (B6) = 0 IF NOT TO INTERLOCK MST/TRT.
  19507. * (B6) .NE. 0 IF TO INTERLOCK MST/TRT AND
  19508. * READ TRT FROM ECS. (SHARED DEVICE)
  19509. *
  19510. * EXIT (X0) .LT. 0 IF NOT SHARED DEVICE
  19511. * (X0) = 12/TRT LENGTH + 2000B, 48/ECS ADDRESS OF MRT.
  19512. * (FOR ISD, ECS ADDRESS = 0.)
  19513. * (X1) = BYTE 2 OF REQUEST WORD.
  19514. * (X2) = BYTE 3 OF REQUEST WORD.
  19515. * (X3) = TDGL WORD OF MST.
  19516. * (X5) = -7777B.
  19517. * (X7) = LOWER 18 BITS OF REQUEST WORD. (SIGN EXTENDED)
  19518. * (B6) = ADDRESS OF FIRST WORD OF TRT.
  19519. * (A3) = ADDRESS OF TDGL WORD OF MST.
  19520. * (A4) = ADDRESS OF SDGL WORD OF MST.
  19521. * HANG PPU IF NOT LEGAL MASS STORAGE DEVICE.
  19522. *
  19523. * USES X - 1, 2, 3, 4, 5, 6, 7.
  19524. * B - 5, 6.
  19525. * A - 3, 4.
  19526. *
  19527. * CALLS REJ, SDI.
  19528.  
  19529.  
  19530. CTR SB5 PRG SET EXIT ADDRESS
  19531.  
  19532. * (B5) = EXIT ADDRESS IN CASE OF ERROR DETECTED.
  19533.  
  19534. CTR1 LX1 24 POSITION EQUIPMENT FIELD
  19535. MX3 -9
  19536. MX2 -6
  19537. BX7 -X3*X1 EST ORDINAL
  19538. CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
  19539. MX5 -12
  19540. TA4 X4+EQDE,EST READ EST ENTRY
  19541. TX6 X7,-ESTL
  19542. BX3 -X5*X4 MST ADDRESS/10B
  19543. BX0 X4*X6
  19544. ZR X7,CTR1.0 IF REQUEST FOR *RD* DEVICE
  19545. PL X0,/MONITOR/HNG1 IF NOT *MS* OR OUT OF EST
  19546. CTR1.0 LX3 3
  19547. LX1 24
  19548. SA4 X3+SDGL CHECK SHARED STATUS
  19549. BX6 -X2*X4 MACHINE INTERLOCK FIELD
  19550. AX4 36
  19551. SA3 X3+TDGL
  19552. TNG X4,(/ISD/CTR3,ISD,/MONITOR/HNG1) IF ISHARED
  19553. TNZ X4,(/PROGRAM/SDI,MMF,/LSPMMF/SDI) IF MMF SHARED
  19554. ZR B6,CTR2 IF NOT TO INTERLOCK MST/TRT
  19555.  
  19556. * INTERLOCK MST/TRT.
  19557.  
  19558. CTR1.1 SA4 A4 **** PERFORM IN 1 WORD ****
  19559. SX6 B1 **** PERFORM IN 1 WORD ****
  19560. BX6 X4+X6 **** PERFORM IN 1 WORD ****
  19561. SA6 A4 **** PERFORM IN 1 WORD ****
  19562. BX2 X6-X4
  19563. ZR X2,REJ IF PREVIOUSLY INTERLOCKED
  19564. CTR2 BX2 -X5*X1
  19565. LX1 12
  19566. SA3 A3+TRLL-TDGL SET FWA OF TRT
  19567. SB6 X3
  19568. SX7 X1
  19569. LX1 -24 POSITION BYTE 2
  19570. BX1 -X5*X1
  19571. SA3 A3+TDGL-TRLL RE-READ *TDGL*
  19572. JP B3 RETURN
  19573. HNG SPACE 4
  19574. ** HNG - HANG PPU.
  19575. * LEAVE PPU OUTPUT REGISTER SET, SET PACKED TIME AND DATE IN
  19576. * LAST WORD OF MESSAGE BUFFER, AND DISPLAY MESSAGE.
  19577. *
  19578. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  19579. * (/MONITOR/T1) = (B2) TO BE RESTORED IF MONITOR MODE.
  19580. *
  19581. * EXIT EXITS TO *PRG*.
  19582.  
  19583.  
  19584. HNG RJ /MONITOR/SVR SAVE REGISTERS
  19585. SA2 A5
  19586. LX2 59-58 CHECK MONITOR MODE CALL
  19587. SB5 PRGX
  19588. NG X2,/MONITOR/HNG2 IF IN PROGRAM MODE
  19589. SA2 /MONITOR/T1 RESTORE (B2)
  19590. SB2 X2
  19591. JP /MONITOR/HNG0 HANG PP
  19592. DSB SPACE 4,30
  19593. ** DSB - DIVIDE 60 BIT INTEGER.
  19594. *
  19595. * ENTRY (X6) = DIVIDEND.
  19596. * (X2) = DIVISOR.
  19597. * (B4) = RETURN ADDRESS.
  19598. *
  19599. * EXIT (X6) = QUOTIENT.
  19600. *
  19601. * USES X - 1, 2.
  19602. *
  19603. * CALLS MSB.
  19604.  
  19605.  
  19606. DSB SX1 B1 FORM RECIPROCAL
  19607. PX1 X1
  19608. NX1 X1
  19609. RX2 X1/X2
  19610. EQ MSB MULTIPLY 60 BIT INTEGER
  19611. MPY SPACE 4,15
  19612. ** MPY - CALCULATE THE PRODUCT Z = (X*Y)MOD PRIME.
  19613. *
  19614. * ENTRY (X1) = INTEGER (X).
  19615. * (X2) = INTEGER (Y).
  19616. * (B3) = RETURN ADDRESS.
  19617. *
  19618. * EXIT (X6) = INTEGER RESULT.
  19619. *
  19620. * USES X - ALL.
  19621. * A - 3.
  19622. * B - 5.
  19623.  
  19624.  
  19625. MPY PX1 X1 PACK AND NORMALIZE X AND Y
  19626. PX2 X2
  19627. NX1 X1 (X1) = D1
  19628. NX2 X2 (X2) = D2
  19629.  
  19630. * CALCULATE DX = D1*D2.
  19631.  
  19632. SA3 MOD
  19633. FX7 X1*X2
  19634. DX6 X1*X2
  19635.  
  19636. * CALCULATE IX = DX/MOD.
  19637.  
  19638. BX0 X3
  19639. SX1 B0+
  19640. FX2 X7/X0
  19641. FX5 X2*X0
  19642. FX4 X7-X5
  19643. DX5 X7-X5
  19644. NX4 X4
  19645. FX5 X5+X4
  19646. DX4 X2*X0
  19647. FX4 X6-X4
  19648. FX5 X5+X4
  19649. FX1 X2*X1
  19650. FX4 X5-X1
  19651. FX5 X4/X0
  19652. FX1 X2+X5
  19653. NX1 X1
  19654. DX2 X2+X5
  19655. FX4 X2+X1
  19656. UX4,B5 X4
  19657. LX3 X4,B5
  19658. PX3 X3 (X3) = IX
  19659.  
  19660. * CALCULATE DY = IX*MOD.
  19661.  
  19662. DX1 X3*X0
  19663. FX2 X3*X0
  19664.  
  19665. * CALCULATE Z = DX-DY.
  19666.  
  19667. FX3 X7-X2
  19668. DX4 X7-X2
  19669. FX5 X6-X1
  19670. NX0 X3
  19671. FX1 X4+X5
  19672. FX3 X0+X1
  19673. NX6 X3
  19674. DX5 X0+X1
  19675. NX5 X5
  19676. FX6 X6+X5
  19677. UX6,B5 X6
  19678. LX6 X6,B5 (X6) = Z
  19679. JP B3 RETURN
  19680. MSB SPACE 4,10
  19681. ** MSB - MULTIPLY 60 BIT INTEGER.
  19682. *
  19683. * ENTRY (X6) = 60 BIT INTEGER MULTIPLICAND.
  19684. * (X2) = FLOATING POINT MULTIPLIER.
  19685. * (B4) = RETURN ADDRESS.
  19686. *
  19687. * EXIT (X6) = PRODUCT.
  19688. *
  19689. * USES X - 1, 6, 7.
  19690. * B - 6.
  19691.  
  19692.  
  19693. MSB UX7 X6
  19694. MX1 12
  19695. PX7 X7
  19696. BX1 X1*X6 MULTIPLY TOP 12 BITS OF INTEGER
  19697. NX7 X7
  19698. AX1 12
  19699. RX7 X7*X2
  19700. PX1 X1
  19701. RX1 X1*X2
  19702. UX7,B6 X7
  19703. LX7 B6
  19704. UX1,B6 X1
  19705. SB6 B6+12
  19706. LX1 B6
  19707. IX6 X1+X7 MERGE PARTIAL PRODUCTS
  19708. JP B4 RETURN
  19709. REJ SPACE 4
  19710. ** REJ - REJECT FUNCTION REQUEST.
  19711. *
  19712. * IF STORAGE MOVE IS REQUESTED FOR THE CONTROL POINT OR
  19713. * PSEUDO-CONTROL POINT TO WHICH THE PP IS ASSIGNED, SET THE
  19714. * REISSUE FUNCTION AND ALLOW STORAGE MOVE FLAGS IN THE OUTPUT
  19715. * REGISTER. NOTE THAT ANY MONITOR FUNCTION WHOSE PROCESSOR MAY
  19716. * CALL THE ROUTINE IS NOW STORAGE MOVABLE WHILE THE REQUEST IS
  19717. * PENDING. FUTURE CODE IN PP ROUTINES SHOULD CONSIDER ANY
  19718. * MONITOR FUNCTION AS MOVABLE, ALLOWING FOR THE FOR THE TIME
  19719. * THAT THIS IS ACTUALLY ACHIEVED.
  19720. *
  19721. * ENTRY (B5) = EXIT ADDRESS.
  19722. * (A5) = *OR* ADDRESS.
  19723. *
  19724. * USES X - 4, 5, 7.
  19725. * A - 4, 5, 7.
  19726.  
  19727.  
  19728. REJ TX4 A5-1,-FP
  19729. LX4 PPXES-PPCES
  19730. TA4 X4+ACPP,FPX GET CP/PCP ASSIGNMENT
  19731. MX7 1
  19732. BX5 X4
  19733. SA4 CMCL GET MOVE CONTROL
  19734. BX4 X4-X5
  19735. AX4 48
  19736. SA5 A5+ GET OUTPUT REGISTER
  19737. NZ X4,REJ1 IF NO MOVE REQUEST FOR CP/PCP
  19738. SX4 1 SET STORAGE MOVABLE FUNCTION FLAG
  19739. LX4 56-0
  19740. BX7 X4+X7
  19741. REJ1 BX7 X7+X5 SET REJECTION BIT
  19742. SA7 A5 STORE OR
  19743. JP B5 RETURN
  19744. TITLE MONITOR REQUEST PROCESSORS.
  19745. MNR SPACE 4
  19746. ** MNR - MONITOR REQUEST PROCESSOR.
  19747. *
  19748. * ENTRY (X7) = 0.
  19749. * (B4) = REQUEST NUMBER.
  19750. *
  19751. * EXIT (X7) = 0.
  19752. * (B2) = 2.
  19753. * (B4) = REQUEST NUMBER.
  19754.  
  19755.  
  19756. MNR SA3 TMNR+B4 SET PROCESSOR
  19757. SB2 B1+B1
  19758. SB6 X3 PROCESS REQUEST
  19759. TJP (/PROBE/MNR,PROBE,B6) PROCESS REQUEST
  19760. IDL SPACE 4
  19761. ** IDL - IDLE PROGRAM.
  19762.  
  19763.  
  19764.  
  19765. IDL CON 0 (RA) FOR IDLE PROGRAM
  19766. CON 0 (RA+1) FOR IDLE PROGRAM
  19767. CX2 X1 DELAY (6 BITS)
  19768. CX2 X1 DELAY (6 BITS)
  19769. EQ 2 LOOP
  19770. MST SPACE 4
  19771. ** MST - MOVE STORAGE.
  19772. * MOVE A CONTROL POINT UP OR DOWN.
  19773. *
  19774. * USES X - 1, 2, 3, 4, 5, 6, 7.
  19775. * B - 2, 3, 4, 5.
  19776. * A - 1, 2, 3, 4, 5, 6, 7.
  19777. *
  19778. * CALLS SMP.
  19779.  
  19780.  
  19781. MNR MSTF,(/PROGRAM/MSE,ECM,/PROGRAM/MST)
  19782.  
  19783. MST SA5 A5 GET MOVE INCREMENT
  19784. MX1 -12
  19785. SA2 B7+FLSW
  19786. BX4 -X1*X2
  19787. LX5 6
  19788. LX2 -RSHF
  19789. LX4 6 FL
  19790. SB6 MST2 RETURN ADDRESS
  19791. MX3 -RMSK
  19792. BX3 -X3*X2 RA
  19793. LX2 12+12
  19794. LX3 6 RA
  19795. BX2 -X1*X2
  19796. BX1 -X5 MOVE INCREMENT
  19797. LX2 6 NFL
  19798. IX0 X3-X2 SUBTRACT NFL SIZE FROM RA
  19799. IX4 X4+X2 ADD NFL SIZE TO FL
  19800. SB4 X4
  19801. TJP (/CME/SMI,CME,/PROGRAM/SMC,CMU,/PROGRAM/SMR)
  19802.  
  19803. * INDICATE MOVE COMPLETE.
  19804.  
  19805. MST2 TNO /MCE/MST,MCE IF MEMORY CLEARING ENABLED
  19806. TA1 CMMS,SDA COUNT STORAGE MOVE
  19807. MST3 SX2 B1
  19808. IX6 X1+X2
  19809. SA6 A1
  19810. SA5 A5 GET MOVE INCREMENT
  19811. SA2 B7+FLSW READ FL CONTROL WORD
  19812. MX6 -RMSK
  19813. SA1 B7+B1 READ EXCHANGE PACKAGE
  19814. LX2 -RSHF POSITION TO RA
  19815. IX7 X2+X5 UPDATE RA
  19816. BX6 -X6*X7 NEW RA
  19817. LX7 RSHF RE-POSITION
  19818. SA7 A2+0
  19819. LX6 36+6 POSITION NEW RA
  19820. MX7 24
  19821. BX1 -X7*X1 CLEAR OLD RA
  19822. BX6 X6+X1 INSERT NEW RA
  19823. SA6 A1 UPDATE EXCHANGE PACKAGE
  19824. SA1 A2+B1 CHANGE SECOND FLSW WORD
  19825. LX5 24
  19826. IX7 X1+X5
  19827. SA7 A1+
  19828. * EQ SMPX EXIT
  19829. SMP SPACE 4,10
  19830. ** SMP - STORAGE MOVE PROGRAM MODE EXIT.
  19831. *
  19832. * ENTRY (A5) = ADDRESS OF *SMRL*.
  19833. *
  19834. * EXIT TO REQUEST PROCESSOR.
  19835.  
  19836.  
  19837. SMPX SX7 B0+
  19838. SA7 SMPR CLEAR REQUEST
  19839. XJ
  19840.  
  19841. SMP SA1 SMPR CHECK FOR REQUEST
  19842. SB4 X1-1
  19843. SA3 TMNR-1+X1 GET PROCESSOR ADDRESS
  19844. SB6 X3+
  19845. TJP (/PROBE/MNR,PROBE,B6)
  19846. SMPXP SPACE 4,10
  19847. ** SMPXP - STORAGE MOVE EXCHANGE PACKAGE.
  19848. *
  19849. * THIS EXCHANGE PACKAGE IS USED FOR CM AND UEM STORAGE
  19850. * MOVES. IT RUNS SEPARATE FROM THE SYSTEM CONTROL POINT
  19851. * AT AN EQUAL PRIORITY, BUT ITS CPU RESOURCES ARE ACCOUNTED
  19852. * TO THE SYSTEM CP. UNLIKE THE SYSTEM CP, IT IS NOT FORCED
  19853. * INTO CPU-0, UNLESS ECS IS USED FOR THE CM STORAGE MOVE.
  19854. * THE PRIMARY PURPOSE OF THIS SEPARATE EXCHANGE PACKAGE IS
  19855. * TO ALLOW IT TO TAKE ADVANTAGE OF THE ARCHITECHURE OF THE
  19856. * MAINFRAMES EQUIPPED WITH *CME* (CENTRAL MEMORY EXTENSION).
  19857.  
  19858.  
  19859. SMPXP EXP P=/PROGRAM/SMP,FL=(,MCM),FLX=(,MXM),B1=1,A5=SMIN,MA=SMP
  19860. ,XP,EM=(,EXPFEC),EA=SMPXP
  19861.  
  19862. * STSW.
  19863.  
  19864. VFD 3/ZCPS CPU STATUS
  19865. VFD 57/0
  19866.  
  19867. * CWQW.
  19868.  
  19869. VFD 2/1
  19870. VFD 7/MPRS CPU PRIORITY
  19871. VFD 1/0
  19872. VFD 1/0 CPU SLICE ACTIVE
  19873. VFD 1/0 RECALL FLAG
  19874. VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
  19875. VFD 2/0
  19876. VFD 9/0 SERVICE CYCLE
  19877. VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
  19878. VFD 1/0 *MTR* BYPASS FLAG
  19879. VFD 2/0 NO CPU SELECTION
  19880. VFD 3/0
  19881. VFD 3/SMXT STORAGE MOVE EXCHANGE PACKAGE TYPE
  19882. VFD 18/0 *WQ* LINKAGE
  19883.  
  19884. * CSAW.
  19885.  
  19886. VFD 60/0
  19887.  
  19888. * *CTMW*.
  19889.  
  19890. VFD 60/0
  19891.  
  19892. QUAL
  19893. SMPXP EQU /PROGRAM/SMPXP
  19894. QUAL *
  19895. PMR SPACE 4
  19896. ** PMR - PROCESS INTER-MAINFRAME FUNCTION REQUEST.
  19897. *
  19898. * ENTRY NONE.
  19899. *
  19900. * EXIT NONE.
  19901.  
  19902.  
  19903. MNR PMRF,(/PROGRAM/PMR,MMF,/PROGRAM/HNG)
  19904. MEC SPACE 4,10
  19905. ** MEC - MOVE ECS STORAGE.
  19906. *
  19907. * ENTRY
  19908. *T SM 12/ INC,30/,18/ CP
  19909. * INC = INCREMENT.
  19910. * CP = CONTROL POINT ADDRESS.
  19911. *
  19912. * EXIT
  19913. *T SM 60/0
  19914.  
  19915.  
  19916. MNR MECF,(/PROGRAM/MEC,UEC,/PROGRAM/HNG)
  19917. SPACE 4
  19918. * MONITOR/PROGRAM MODE EQUIVALENCES.
  19919.  
  19920.  
  19921. PX EQU /MONITOR/PX
  19922. PR EQU /MONITOR/PR
  19923. SMPR EQU /MONITOR/SMPR
  19924. SMIN EQU /MONITOR/SMIN
  19925. PPRX EQU /MONITOR/PPRX
  19926.  
  19927. QUAL MONITOR
  19928. CSM EQU /PROGRAM/CSM
  19929. CSM1 EQU /PROGRAM/CSM1
  19930. REJ EQU /PROGRAM/REJ
  19931. TTL CPUMTR - CPU MONITOR.
  19932. TITLE CPUMTR BLOCK ORGANIZATION.
  19933. BLOCKS SPACE 4,10
  19934. ** CPUMTR COMMON BLOCK ORGANIZATION.
  19935. *
  19936. * CPUMTR IS ORGANIZED TO PLACE OPTIONAL CODE INTO COMMON
  19937. * BLOCKS WHICH CAN BE LOADED OR IGNORED AT DEAD START TIME,
  19938. * DEPENDING UPON WHICH FEATURES ARE TO BE USED BY THE OPERATING
  19939. * SYSTEM. WITH THE BLOCK ORGANIZTION A SITE OR MACHINE NOT
  19940. * USING AN OPTIONAL FEATURE SUCH AS ECS OR MULTI-MAINFRAME
  19941. * DOES NOT HAVE TO LOAD THIS CODE INTO CMR WITH CPUMTR.
  19942. * A START OF BLOCK MACRO *BLOCK* AND AN END OF BLOCK MACRO
  19943. * *ENDBLK* ARE USED TO DEFINE A CPUMTR COMMON BLOCK. THESE
  19944. * MACROS PROVIDE THE LOADER AND QUAL BLOCK DEFINITIONS FOR
  19945. * THE CPUMTR BLOCK. EACH BLOCK WILL NORMALLY BE QUALIFIED WITH
  19946. * ITS NAME TO ASSURE PROGRAMMER AWARENESS OF WHICH ROUTINES
  19947. * AND DATA CELLS RESIDE IN WHICH BLOCK.
  19948. * A NULL BLOCK WILL USUALLY BE ASSOCIATED WITH EACH
  19949. * OPTIONAL BLOCK AND WILL BE LOADED WHEN THE OPTIONAL BLOCK
  19950. * IS NOT.
  19951. * WHEN THERE ARE TWO ASSOCIATED BLOCKS, THE CPUMTR LOADER
  19952. * WILL MAKE A DECISION AT DEADSTART TIME AS TO WHICH BLOCK TO
  19953. * LOAD. FOR EXAMPLE IN THE CASE OF ECS TRANSEFER CODE, THE
  19954. * LOADER WOULD CHECK THE ECS FIELD LENGTH TO DETERMINE THE
  19955. * PRESENCE OF ECS. IF THERE IS NO ECS FIELD LENGTH THE NULL
  19956. * ECS TRANSFER BLOCK WOULD BE LOADED.
  19957. BLOCK CMU,(MOVE STORAGE WITH CMU.),PROGRAM
  19958. SMP SPACE 4
  19959. ** NOTE -
  19960. * THE *CMU* MUST NOT BE USED IN MONITOR MODE ON A DUAL-CPU
  19961. * MAINFRAME WITH ONLY ONE *CMU*, BECAUSE IT MAY BE IN USE BY
  19962. * THE OTHER CPU, CAUSING MONITOR MODE TO WAIT FOR IT TO FINISH.
  19963. CSC SPACE 4,10
  19964. ** CSC - CLEAR STORAGE USING *CMU*.
  19965. *
  19966. * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
  19967. * (X5) = OUTPUT REGISTER.
  19968. * (X1) = FUNCTION PARAMETERS FROM OUTPUT REGISTER.
  19969. * (X7) = 0.
  19970. *
  19971. * EXIT ((A5)) = 0.
  19972. *
  19973. * CALLS CEC, CMP1, HNG, PRG.
  19974. *
  19975. * USES X - ALL.
  19976. * A - 3, 4, 7.
  19977. * B - 2, 3, 4, 5, 6.
  19978.  
  19979.  
  19980. MVED EQU 5 MOVE DIFFERENTIAL FOR OVERLAPPING CLEAR
  19981.  
  19982. * *CMP* RETURN PROCESSING.
  19983.  
  19984. CSC3 SX7 B0+
  19985. TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
  19986. CSC4 SA3 A3+B1 READ NEXT LIST ENTRY
  19987. SB5 -MVED RESET (B5)
  19988. SB2 B7-B5 SET SIZE OF INITIAL CLEAR
  19989. NZ X3,CSC1 IF NOT END OF LIST
  19990. TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
  19991.  
  19992. * ENTRY.
  19993.  
  19994. CSC LX5 -24
  19995. SB3 X5 (B3) = 0 IF LIST PRESENT
  19996. SB5 -MVED SET MOVE DIFFERENTIAL
  19997. BX3 X1
  19998. LX5 59-43+24
  19999. SB7 -B1
  20000. MX2 -4
  20001. TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEARING ECS
  20002. SB6 CSC3 *CMP* RETURN ADDRESS
  20003. SB2 B7-B5 SET SIZE OF INITIAL CLEAR
  20004. NZ B3,CSC1 IF NOT LIST
  20005. SA3 A5+B1 READ FIRST LIST WORD
  20006. CSC1 BX6 X3
  20007. AX3 24
  20008. ZR X3,CSC4 IF NOTHING TO CLEAR
  20009. BX4 X2*X3
  20010. NZ X4,CSC2 IF MORE THAN 15 WORDS TO CLEAR
  20011. SB2 X3+B7
  20012. CSC2 SA7 X6+B2 CLEAR PRIMER AREA OR SHORT BLOCK
  20013. SB2 B2-B1
  20014. PL B2,CSC2 IF MORE TO CLEAR
  20015. ZR X4,CSC4 IF SHORT BLOCK
  20016. SB4 X3+B5 SET WORD COUNT
  20017. MX0 -24
  20018. SA4 CMPB ADDRESS INCREMENT
  20019. SX1 -MVED MOVE DIFFERENTIAL
  20020. SB5 CSCA MOVE DESCRIPTOR WORD
  20021. BX6 -X0*X6 FWA
  20022. SB2 X4 100B
  20023. EQ CMP1 ENTER MOVE LOOP
  20024.  
  20025.  
  20026. CSCA CON 0 MOVE DESCRIPTOR WORD
  20027. CMP SPACE 4
  20028. ** CMP - CMU MOVE LOOP FOR USE IN PROGRAM MODE.
  20029. * CMP PROCESSES BOTH UPWARD AND DOWNWARD MOVES WITH NO CHECK
  20030. * FOR OVERLAP. IF AN OVERLAP MAY EXIST AND IS NOT DESIRED
  20031. * *SMC* MUST BE CALLED TO PREVENT AN OVERLAPING MOVE.
  20032. *
  20033. * ENTRY (X0) = ADDRESS TO MOVE FROM.
  20034. * (B4) = WORD COUNT OF MOVE.
  20035. * (X1) = (X0) - ADDRESS TO MOVE TO.
  20036. * (B6) = EXIT ADDRESS.
  20037. *
  20038. * IF ENTERED AT *CMP1* -
  20039. * (X4) = ADDRESS INCREMENT (CMPB).
  20040. * (X6) = ADDRESS TO MOVE FROM.
  20041. * (X1) = (X6) - ADDRESS TO MOVE TO.
  20042. * (A4) = CMPB.
  20043. * (B2) = 100B.
  20044. * (B6) = RETURN ADDRESS.
  20045. *
  20046. * USES X - 0, 1, 4, 6, 7.
  20047. * B - 2, 4, 5.
  20048. * A - 1, 4, 7.
  20049. *
  20050. * PRESERVES B3.
  20051.  
  20052.  
  20053. CMP SA4 CMPB READ ADDRESS INCREMENT
  20054. BX6 X0 SET ADDRESS FOR START OF MOVE
  20055. SB2 X4+ 100B
  20056. SB5 CMPA MOVE DESCRIPTOR WORD
  20057.  
  20058. * ENTERED HERE FROM *SMC*.
  20059.  
  20060. CMP1 MX7 -18 SET ADDRESSES
  20061. BX0 -X1
  20062. IX0 X6+X0
  20063. BX6 -X7*X6
  20064. LX6 30
  20065. BX0 -X7*X0
  20066. BX6 X6+X0
  20067. SA1 A4+B1
  20068.  
  20069. * CMU MOVE LOOP.
  20070.  
  20071. CMP2 GE B4,B2,CMP3 IF .GE. 100B WORDS TO MOVE
  20072. SX1 B4 SET CHARACTER COUNT FOR SHORT BLOCK
  20073. SX0 B4+B4
  20074. LX1 3
  20075. MX7 -4
  20076. IX1 X1+X0
  20077. BX0 -X7*X1 LL
  20078. BX1 X7*X1 LU
  20079. LX0 30-4
  20080. LX1 48-4
  20081. BX1 X1+X0
  20082. CMP3 BX7 X6+X1 MERGE ADDRESSES AND CHARACTER COUNT
  20083. IX6 X6+X4 INCREMENT ADDRESSES
  20084. SA7 B5 STORE DESCRIPTOR WORD
  20085. SB4 B4-B2 DECREMENT WORD COUNT
  20086. IM B5 MOVE STORAGE
  20087. GT B4,B0,CMP2 IF MORE WORDS TO TRANSFER
  20088. JP B6 RETURN
  20089.  
  20090. * THE FOLLOWING WORDS MUST REMAIN IN ORDER.
  20091.  
  20092. CMPA CON 0 INDIRECT MOVE DESCRIPTOR WORD
  20093. CMPB VFD 30/100B,30/100B ADDRESS INCREMENT
  20094. VFD 12/100B*10/20B,48/0 CHARACTER COUNT FOR 100B WORDS
  20095. SMC SPACE 4
  20096. ** SMC - STORAGE MOVE WITH CMU.
  20097. * SMC MOVES BLOCKS OF 100B WORDS UPWARD OR DOWNWARD
  20098. * PREVENTING OVERLAP.
  20099. *
  20100. * ENTRY (X0) = ADDRESS TO MOVE FROM.
  20101. * (B4) = WORD COUNT OF MOVE.
  20102. * (X1) = (X0) - ADDRESS TO MOVE TO.
  20103. * (B6) = EXIT ADDRESS.
  20104. *
  20105. * USES X - 0, 1, 4, 6, 7.
  20106. * B - 2, 4, 5, 6.
  20107. * A - 1, 4, 7.
  20108. *
  20109. * CALLS CMP1.
  20110.  
  20111.  
  20112. SMC SA4 CMPB ADDRESS INCREMENT
  20113. SB5 SMCA MOVE DESCRIPTOR WORD
  20114. BX6 X0
  20115. SB2 X4 100B
  20116. PL X1,CMP1 IF DOWNWARD MOVE - NO OVERLAP
  20117. SX6 X4
  20118. BX4 -X4 COMPLEMENT INCREMENT
  20119. IX6 X0-X6 START MOVE FROM END OF BLOCK
  20120. SX0 B4 WORD COUNT
  20121. IX6 X0+X6
  20122. EQ CMP1 ENTER MOVE LOOP
  20123.  
  20124.  
  20125. SMCA CON 0 MOVE DESCRIPTOR WORD
  20126.  
  20127. ENDBLK
  20128. BLOCK 0CMU,(MOVE STORAGE WITH REGISTERS.),PROGRAM
  20129. SMR SPACE 4
  20130. ** SMR - STORAGE MOVE VIA REGISTERS.
  20131. * SMR MOVES BLOCKS OF 10B WORDS THROUGH A REGISTER MOVE
  20132. * LOOP. BLOCKS WHICH ARE NOT MULTIPLES OF 10B WORDS
  20133. * SHOULD BE MOVED WITH *MSR*.
  20134. *
  20135. * ENTRY (X0) = ADDRESS TO MOVE FROM.
  20136. * (B4) = WORD COUNT OF MOVE.
  20137. * (X1) = (X0) - ADDRESS TO MOVE TO.
  20138. * (B6) = EXIT ADDRESS.
  20139. *
  20140. * USES X - ALL.
  20141. * B - 2, 4, 5, 6.
  20142. * A - 1, 2, 3, 4, 6, 7.
  20143.  
  20144.  
  20145. SMR SB5 X1+ B5 = MOVE DIFFERENCE
  20146. SA1 X0+ A1 = FWA TO MOVE FROM
  20147. SX0 B4-B1 (X0) = WORD COUNT - 1
  20148. SB2 B1 SET DIRECTION OF MOVE
  20149. PL B5,SMR1 IF DOWNWARD MOVE
  20150. SB4 B4-B1
  20151. SA1 A1+B4
  20152. SB2 -1
  20153. SMR1 SX5 -B1
  20154. AX0 3 (X0) = WORD COUNT - 10B
  20155. SA2 A1+B2
  20156. SB2 B2+B2
  20157.  
  20158. * REGISTER MOVE LOOP.
  20159.  
  20160. SMR2 SA3 A1+B2 READ NEXT TWO WORDS
  20161. BX6 X1
  20162. SA4 A2+B2
  20163. LX7 X2
  20164. SA6 A1-B5 STORE TWO WORDS
  20165. IX0 X0+X5 DECREMENT BLOCK COUNT
  20166. SA7 A2-B5
  20167. SA1 A3+B2 READ NEXT TWO WORDS
  20168. SA2 A4+B2
  20169. BX6 X3
  20170. LX7 X4
  20171. SA6 A3-B5 STORE TWO WORDS
  20172. SA7 A4-B5
  20173. SA3 A1+B2 READ NEXT TWO WORDS
  20174. SA4 A2+B2
  20175. BX6 X1
  20176. LX7 X2
  20177. SA6 A1-B5 STORE TWO WORDS
  20178. SA7 A2-B5
  20179. SA1 A3+B2 READ NEXT TWO WORDS
  20180. SA2 A4+B2
  20181. BX6 X3
  20182. LX7 X4
  20183. SA6 A3-B5 STORE LAST TWO WORDS
  20184. SA7 A4-B5
  20185. NZ X0,SMR2 IF NOT END OF MOVE
  20186. SX0 B1+B1
  20187. SMR3 BX6 X1 MOVE THE LAST 10B WORDS
  20188. LX7 X2
  20189. SA6 A1-B5
  20190. SA7 A2-B5
  20191. NG X0,SMR4 IF END OF MOVE
  20192. SA1 A1+B2 READ THE NEXT TWO WORDS
  20193. SA2 A2+B2
  20194. IX0 X0+X5 DECREMENT THE LOOP COUNT
  20195. EQ SMR3 LOOP TO STORE THE NEXT TWO WORDS
  20196.  
  20197. SMR4 JP B6 RETURN
  20198. CSP SPACE 4,10
  20199. ** CSP - CLEAR STORAGE THROUGH THE CPU.
  20200. *
  20201. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  20202. *
  20203. * USES X - 0, 1, 5, 6.
  20204. * B - 3, 4, 5, 6.
  20205. * A - 1, 6, 7.
  20206.  
  20207.  
  20208. CSP LX5 -24
  20209. SB3 X5 (B3) = 0 IF LIST PRESENT
  20210. BX6 X6-X6
  20211. LX5 59-43+24
  20212. TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEARING ECS
  20213. SB4 12B
  20214. SB6 B1+B1
  20215. NZ B3,CSP1 IF NOT LIST OPTION
  20216. SA1 A5+B1 GET LIST ENTRY
  20217. CSP1 BX5 X1
  20218. AX1 24 EXTRACT WORD COUNT
  20219. ZR X1,CSP4 IF NOTHING TO CLEAR
  20220. SB5 X1-1 WORDS TO CLEAR
  20221. LT B5,B4,CSP3 IF LESS THAN 13 WORDS
  20222. SA7 X5+B5
  20223. SB4 B4-B6
  20224. SA6 A7-B1
  20225. SB5 B5-B6 WORDS TO CLEAR
  20226. CSP2 SA7 A7-B6 CLEAR 10 WORD BLOCKS
  20227. SA6 A6-B6
  20228. SA7 A7-B6
  20229. SA6 A6-B6
  20230. SA7 A7-B6
  20231. SB5 B5-B4 DECREMENT WORD COUNT
  20232. SA6 A6-B6
  20233. SA7 A7-B6
  20234. SA6 A6-B6
  20235. GT B5,B4,CSP2 IF STILL 11 OR MORE WORDS TO CLEAR
  20236. CSP3 SA6 X5+B5
  20237. SB5 B5-B1
  20238. PL B5,CSP3 IF STILL MORE TO CLEAR
  20239. TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
  20240. SB4 12B
  20241. CSP4 SA1 A1+1
  20242. NZ X1,CSP1 IF NOT END OF LIST
  20243. TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
  20244.  
  20245. ENDBLK
  20246. BLOCK CME,(CENTRAL MEMORY EXTENSION.)
  20247. SPACE 4,10
  20248. HNG EQU /MONITOR/HNG
  20249. MT EQU /MONITOR/MT
  20250. PPR1 EQU /MONITOR/PPR1
  20251. T1 EQU /MONITOR/T1
  20252. T2 EQU /MONITOR/T2
  20253. T3 EQU /MONITOR/T3
  20254. RA EQU /MONITOR/RA
  20255. RA1 EQU /MONITOR/RA1
  20256. RB6 EQU /MONITOR/RB6
  20257. SPACE 4,10
  20258. * DEFINE CME INSTRUCTION BLOCK.
  20259.  
  20260.  
  20261. CME$ EQU 1
  20262. CCP SPACE 4,10
  20263. ** CCP - *CCP* EXTENSION FOR *CME* MACHINE.
  20264. *
  20265. * ENTRY (B3) = RETURN ADDRESS.
  20266. * (X1) = *JCB* *CSJT* WORD.
  20267. * (A1) = ADDRESS OF *JCB* *CSJT* WORD.
  20268. *
  20269. * EXIT CONVERTED SCHEDULING PARAMETERS SET IN *JCB* ENTRY.
  20270. *
  20271. * USES X - 0, 1, 2, 3, 6, 7.
  20272. * A - 1, 3, 6.
  20273. * B - 4.
  20274.  
  20275.  
  20276. CCP BSS 0 ENTRY
  20277. SA3 CCPA =15.625
  20278. BX7 -X0*X1 UNEXTENDED CPU SLICE
  20279. LX1 -12
  20280. BX6 -X0*X1 RECALL CPU SLICE
  20281. IX7 X7-X6 UNEXTENDED SLICE - RECALL SLICE
  20282. PX6 X6
  20283. NX6 X6
  20284. FX6 X6*X3
  20285. UX6,B4 X6
  20286. LX6 B4 CONVERTED RECALL CPU SLICE
  20287. LX1 -12
  20288. BX2 -X0*X1 CPU SLICE EXTENSION
  20289. IX7 X7+X2 UNEXTENDED SLICE + EXTENSION - RECALL SLICE
  20290. PX2 X2
  20291. NX2 X2
  20292. FX2 X2*X3
  20293. UX2,B4 X2
  20294. LX2 B4 CONVERTED CPU SLICE EXTENSION
  20295. LX6 -18
  20296. BX6 X6+X2
  20297. PX7 X7
  20298. NX7 X7
  20299. FX7 X7*X3
  20300. UX7,B4 X7
  20301. LX7 B4 CONVERTED (*US* + *SE* - *RS*)
  20302. LX6 36
  20303. BX6 X6+X7
  20304. SA6 A1+B1
  20305. ERRNZ CSAT-CSJT-1 WORDS MUST BE CONTIGUOUS
  20306. LX1 -12
  20307. BX6 -X0*X1 SYSTEM I/O CPU THRESHOLD
  20308. PX6 X6
  20309. NX6 X6
  20310. FX6 X6*X3
  20311. UX6,B4 X6
  20312. LX6 B4 CONVERTED SYSTEM I/O CPU THRESHOLD
  20313. SA1 A6+B1
  20314. ERRNZ CSBT-CSAT-1 WORDS MUST BE CONTIGOUS
  20315. MX0 42
  20316. BX1 X0*X1
  20317. BX6 X1+X6
  20318. SA6 A1
  20319. JP B3 RETURN
  20320.  
  20321.  
  20322. CCPA CON 15.625
  20323. CPT SPACE 4,15
  20324. ** CPT - EXTENSION FOR CYBER 180.
  20325. *
  20326. * ENTRY (B3) = EXIT ADDRESS.
  20327. * (B6) = 200B IF ENTERED AT *CPT1* (*BNJ* CALL).
  20328. *
  20329. * EXIT TO /MONITOR/CPT1.
  20330. * (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
  20331. * (MT+A0) = 0 IF RA+1 PROCESS AND NOT CPU SWITCH.
  20332. * (MT+A0) = -ACAD2 IF NOT RA+1 PROCESS OR IF CPU SWICH.
  20333. * (CL+CPBT+A0) RESET TO CURRENT CLOCK.
  20334. * (CL+CMST+A0) UPDATED.
  20335. *
  20336. * USES X - 0, 1, 2, 3, 5, 6, 7.
  20337. * A - 1, 2, 3, 6, 7.
  20338. * B - 4, 6.
  20339.  
  20340.  
  20341. CPT BSS 0 ENTRY
  20342. SB6 B0+ DO NOT SET CPU SWITCH FLAG
  20343.  
  20344. * ENTRY FROM /MONITOR/*BNJ*.
  20345.  
  20346. CPT1 SA1 CL+CMST+A0 GET MONITOR MODE PARAMETERS
  20347. SA2 CL+CPBT+A0 GET PROGRAM MODE BASE TIME
  20348. SA3 MT+A0 GET MONITOR MODE ACCUMULATED TIME
  20349. RC X6 READ CLOCK
  20350. UX1,B4 X1
  20351. SB6 B4+B6 SET CPU SWITCH STATUS
  20352. PX7 B6,X6 SET FUNCTION WITH STATUS AND NEW BASE TIME
  20353. SA6 A2 UPDATE PROGRAM MODE BASE TIME
  20354. SA7 A1 UPDATE MONITOR MODE PARAMETERS
  20355. SX7 B0+ SET TO CLEAR MONITOR MODE ACCUMULATOR
  20356. ZR B6,CPT3 IF RA+1 PROCESS AND NOT CPU SWITCH
  20357. ERRNZ CCPF CODE DEPENDS ON VALUE
  20358. TX7 -ACAD2 - (EXCHANGE JUMP TIME)
  20359. ZR B4,CPT3 IF RA+1 PROCESS
  20360.  
  20361. * COMPUTE MONITOR MODE TIME SINCE LAST BASE TIME.
  20362. *
  20363. * THE MICROSECOND CLOCK ON THE CYBER 170-865 AND 170-875 WILL
  20364. * WRAP APPROXIMATELY EVERY 1.2 HOURS, SINCE IT IS ONLY 32 BITS
  20365. * WIDE. ALL OTHER MODELS IN THE 170-800 SERIES HAVE 48 BIT
  20366. * COUNTERS, WHICH WILL WRAP ONLY ONCE EVERY 9 YEARS OR SO.
  20367. * SINCE THIS COUNTER IS RESET AT DEADSTART, IT IS SAFE TO
  20368. * ASSUME THAT IF A WRAP IS DETECTED, THE COUNTER IS ONLY 32
  20369. * BITS WIDE.
  20370.  
  20371. IX5 X6-X1 TIME SINCE MONITOR MODE BASE TIME
  20372. PL X3,CPT2 IF *MT* NOT PREVIOUSLY ADJUSTED BY *CPT*
  20373. SX3 B0
  20374. CPT2 IX3 X3+X5 ADD CURRENT AND ACCUMULATED TIME
  20375. IX3 X3-X7 ADD EXCHANGE JUMP TIME
  20376. PL X5,CPT3 IF NO OVERFLOW OF COUNTER
  20377. SX0 1
  20378. LX0 32
  20379. IX3 X3+X0
  20380.  
  20381. * COMPUTE PROGRAM MODE CPU TIME USED.
  20382. *
  20383. * IF MONITOR MODE WAS NOT ENTERED TO PROCESS AN RA+1 CALL OR IF
  20384. * A CPU SWITCH IS PENDING, THE MONITOR MODE ACCUMULATOR FOR THE
  20385. * CPU WILL BE RESET WITH A VALUE OF *-ACAD2*. SINCE EXIT FROM
  20386. * MONITOR MODE ADDS AN INCREMENT OF *ACAD* (TWICE THE VALUE OF
  20387. * *ACAD2*) TO THE ACCUMULATOR, THE RESULT IN THIS CASE WILL BE
  20388. * TO ACCOUNT ONLY FOR THE EXCHANGE JUMP BACK TO PROGRAM MODE.
  20389. * *CPT* WILL ALREADY HAVE ACCOUNTED FOR THE EXCHANGE JUMP INTO
  20390. * MONITOR MODE.
  20391.  
  20392. CPT3 IX6 X6-X2 COMPUTE TIME USED
  20393. SA7 MT+A0 RESET MONITOR MODE ACCUMULATOR
  20394. IX0 X6-X3 DEDUCT MONITOR MODE TIME
  20395. PL X0,/MONITOR/CPT1 IF NO UNDERFLOW
  20396. SX0 B0+
  20397. EQ /MONITOR/CPT1 ENTER MAIN *CPT* PROCESSOR
  20398. CSM SPACE 4,15
  20399. ** CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
  20400. *
  20401. * ENTRY (X1) = WORD COUNT.
  20402. * (X2) = FWA.
  20403. * (B3) = RETURN ADDRESS.
  20404. *
  20405. * EXIT (X7) = 0.
  20406. *
  20407. * USES X - ALL.
  20408. *
  20409. * CALLS /MONITOR/RB3.
  20410.  
  20411. CSM MX6 -3 INITIALIZE
  20412. SX0 B1
  20413. BX5 -X6*X1 REMAINDER
  20414. BX7 X7-X7
  20415. AX1 3 10B WORD BLOCK COUNT
  20416. ZR X1,CSM2 IF .LT. 10B
  20417. IX3 X2+X0 FWA+1
  20418. SX6 B0+
  20419. SX4 2
  20420. CSM1 EWX6 X2
  20421. IX1 X1-X0 DECREMENT BLOCK COUNT
  20422. NO
  20423. EWX7 X3
  20424. IX2 X2+X4
  20425. IX3 X3+X4
  20426. EWX6 X2
  20427. EWX7 X3
  20428. IX2 X2+X4
  20429. IX3 X3+X4
  20430. EWX6 X2
  20431. EWX7 X3
  20432. IX2 X2+X4
  20433. IX3 X3+X4
  20434. EWX6 X2
  20435. EWX7 X3
  20436. IX2 X2+X4
  20437. IX3 X3+X4
  20438. NZ X1,CSM1 IF NOT COMPLETE
  20439. CSM2 ZR X5,/MONITOR/RB3 IF COMPLETE
  20440. IX5 X5-X0
  20441. EWX7 X2
  20442. IX2 X2+X0
  20443. EQ CSM2 CLEAR REMAINDER
  20444. MNR SPACE 4,10
  20445. ** MNR - *CME* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
  20446.  
  20447.  
  20448. MNR SA1 B2 EXCHANGE PACKAGE P-ADDRESS
  20449. SA2 B0
  20450. SA3 VFLR
  20451. MX0 24
  20452. BX4 X0*X1
  20453. NZ X2,MNR2 IF WORD ZERO IS NON-ZERO
  20454. BX6 X3
  20455. ZR X4,MNR2 IF P-ADDRESS IS ZERO
  20456. AX6 18
  20457. SX7 B0+ CLEAR RESPONSE
  20458. NZ X6,/MONITOR/MTRX IF REQUEST NOT COMPLETE
  20459. MNR1 SA7 X3 SET RESPONSE
  20460. SA6 A3 CLEAR REQUEST WORD
  20461. SA1 VFLXP+STSW SET NULL STATUS
  20462. MX0 -57
  20463. BX7 -X0*X1
  20464. SA7 A1+
  20465. EQ /MONITOR/BNJ1 BEGIN NEW JOB
  20466.  
  20467. MNR2 SX6 VFL RESET P-ADDRESS
  20468. SX7 B1 SET RESPONSE
  20469. BX1 -X0*X1 CLEAR P-ADDRESS
  20470. LX6 36
  20471. LX7 36
  20472. BX6 X6+X1
  20473. SA6 A1
  20474. BX6 X6-X6 CLEAR REQUEST WORD
  20475. EQ MNR1 EXIT
  20476. MSR SPACE 4,15
  20477. ** MSR - MONITOR MODE STORAGE MOVE THROUGH REGISTERS
  20478. * FOR *CME* MAINFRAMES.
  20479. *
  20480. * ENTRY (X0) = ADDRESS TO MOVE FROM.
  20481. * (X1) = (X0) - ADDRESS TO MOVE TO.
  20482. * (B4) = WORD COUNT.
  20483. * (B6) = RETURN ADDRESS.
  20484. *
  20485. * CALLS PSM.
  20486. *
  20487. * USES X - 0, 1, 4, 6, 7.
  20488. * B - 4, 5.
  20489.  
  20490.  
  20491. MSR SB5 MSR1 *PSM* RETURN ADDRESS
  20492. EQ PSM PRESET STORAGE MOVE
  20493.  
  20494. * (X0) = ADDRESS TO MOVE FROM.
  20495. * (X1) = ADDRESS TO MOVE TO.
  20496. * (X4) = INCREMENT (1 OR -1).
  20497. * (B4) = BLOCK COUNT (WORD COUNT / 10B).
  20498. * (B6) = RETURN ADDRESS.
  20499.  
  20500. MSR1 ERX6 X0 LOAD UP FIRST DATA
  20501. IX0 X0+X4
  20502. ERX7 X0
  20503. IX0 X0+X4
  20504. SB4 B4-1 DECREMENT BLOCK COUNT
  20505. EWX6 X1
  20506. IX1 X1+X4
  20507. ERX6 X0
  20508. IX0 X0+X4
  20509. EWX7 X1
  20510. IX1 X1+X4
  20511. ERX7 X0
  20512. IX0 X0+X4
  20513. EWX6 X1
  20514. IX1 X1+X4
  20515. ERX6 X0
  20516. IX0 X0+X4
  20517. EWX7 X1
  20518. IX1 X1+X4
  20519. ERX7 X0
  20520. IX0 X0+X4
  20521. EWX6 X1
  20522. IX1 X1+X4
  20523. ERX6 X0
  20524. IX0 X0+X4
  20525. EWX7 X1
  20526. IX1 X1+X4
  20527. ERX7 X0
  20528. IX0 X0+X4
  20529. EWX6 X1
  20530. IX1 X1+X4
  20531. EWX7 X1
  20532. IX1 X1+X4
  20533. GT B4,B0,MSR1 IF MORE BLOCKS TO MOVE
  20534. JP B6 RETURN
  20535. PLF SPACE 4,10
  20536. ** PLF - PROCESS LOCAL FNT.
  20537.  
  20538.  
  20539. PLF SA3 B7+FLSW GET RA AND NFL
  20540. MX0 -12
  20541. BX1 -X0*X5 EXTRACT NFL ADDRESS/PARAMETER
  20542. LX5 24
  20543. MX0 -3
  20544. BX2 -X0*X5 EXTRACT SUBFUNCTION
  20545. AX3 RSHF
  20546. LX5 59-41-24
  20547. MX0 -RMSK
  20548. BX4 -X0*X3
  20549. AX3 48-RSHF
  20550. LX4 6 RA
  20551. MX0 -18
  20552. ZR X3,HNG IF NO NFL
  20553. BX6 X4
  20554. LX3 6 NFL
  20555. SA6 RA
  20556. SB6 X2-TPLFL-1
  20557. PL B6,HNG IF ILLEGAL SUBFUNCTION
  20558. JP TPLF+TPLFL+1+B6 JUMP TO PROCESSOR
  20559.  
  20560. * EXIT TO PROCESSOR WITH -
  20561. *
  20562. * (X0) = 42/-0,18/0.
  20563. * (X1) = NFL ADDRESS/PARAMETER.
  20564. * (X3) = NFL SIZE.
  20565. * (X4) = RA.
  20566. * (X5) = *CREATE SPECIAL FILE* FLAG IN LEFT-MOST BIT.
  20567. * (X7) = 0.
  20568. * (RA) = RA.
  20569.  
  20570. TPLF BSS 0
  20571. LOC 0
  20572.  
  20573. + IX2 X3-X1
  20574. EQ PLF14 (DLFS) - DELETE ENTRY
  20575.  
  20576. + IX2 X3-X1
  20577. SX7 B1
  20578. EQ PLF14 (DLCS) - RETURN FILE COUNT
  20579.  
  20580. * EQ PLF1 (CRFS) - CREATE LOCAL FNT ENTRY
  20581.  
  20582. TPLFL BSS 0
  20583. LOC *O
  20584.  
  20585. * SET UP FOR FNT SEARCH.
  20586.  
  20587. PLF1 SA7 T2 CLEAR EMPTY ENTRY POINTER
  20588. SX2 X3-FNTN COMPUTE ADDRESS OF LAST ENTRY
  20589. SX6 LENF
  20590. PX2 X2
  20591. PX3 X6
  20592. NX3 X3
  20593. FX1 X2/X3
  20594. UX1 B6,X1
  20595. LX1 X1,B6
  20596. IX3 X6*X1
  20597. SA1 A5+B1
  20598. SX2 FNTN ALLOW USE OF SPECIAL FILE RESERVED ENTRY
  20599. NG X5,PLF2 IF SPECIAL FILE
  20600. SX2 X2+SRFE*LENF PREVENT USE OF RESERVED ENTRIES
  20601. PLF2 IX6 X4-X2
  20602. SA6 A7+B1 SAVE FWA OF LAST RESERVED ENTRY
  20603. SX3 X3+FNTN
  20604. IX7 X4-X3 ADDRESS OF LAST ENTRY
  20605. BX5 X0*X1 FILE NAME
  20606. SA7 A7-B1
  20607. EWX5 X7 SAVE FILE NAME MATCH
  20608. SX1 FNTN-LENF*2
  20609. SX2 FNTN-LENF
  20610. IX6 X4-X1
  20611. IX7 X4-X2
  20612.  
  20613. * SEARCH FOR MATCHING ENTRY.
  20614.  
  20615. PLF4 SX3 LENF*2 SEARCH INCREMENT
  20616. IX6 X6-X3
  20617. IX7 X7-X3
  20618. ERX1 X6
  20619. ERX2 X7
  20620. BX3 X1-X5
  20621. BX4 X2-X5
  20622. BX3 X0*X3
  20623. BX4 X0*X4
  20624. ZR X3,PLF7 IF FOUND
  20625. ZR X4,PLF6 IF FOUND
  20626. ZR X1,PLF8 IF EMPTY
  20627. PLF4.1 NZ X2,PLF4 IF NOT EMPTY
  20628. SA1 A6
  20629. IX1 X7-X1
  20630. PL X1,PLF4 IF USE OF RESERVED ENTRY NOT ALLOWED
  20631. SA7 T2 SAVE ADDRESS OF EMPTY ENTRY
  20632. PLF4.9 SX3 LENF*2
  20633.  
  20634. * SEARCH FOR MATCH (EMPTY ENTRY FOUND).
  20635.  
  20636. PLF5 IX6 X6-X3
  20637. IX7 X7-X3
  20638. ERX1 X6
  20639. ERX2 X7
  20640. BX1 X1-X5
  20641. BX2 X2-X5
  20642. BX1 X0*X1
  20643. BX2 X0*X2
  20644. ZR X1,PLF7 IF FOUND
  20645. NZ X2,PLF5 IF NOT FOUND
  20646. PLF6 BX6 X7
  20647. PLF7 SA4 T1
  20648. SX7 B0+ CLEAR LAST ENTRY
  20649. EWX7 X4
  20650. BX2 X6-X4
  20651. ZR X2,PLF10 IF LAST ENTRY
  20652. SA3 RA
  20653. IX3 X3-X6
  20654. LX3 36 BYTE 1 OF RESPONSE
  20655. SX7 B1 STATUS = FILE ALREADY EXISTS
  20656. BX7 X3+X7
  20657. EQ PPR1 EXIT
  20658.  
  20659. * EMPTY ENTRY FOUND.
  20660.  
  20661. PLF8 SA1 A6
  20662. IX1 X6-X1
  20663. PL X1,PLF4.1 IF USE OF RESERVED ENTRY NOT ALLOWED
  20664. SA6 T2 SAVE ADDRESS OF EMPTY ENTRY
  20665. EQ PLF4.9 CONTINUE SEARCH
  20666.  
  20667. * NO MATCH FOUND, CREATE ENTRY.
  20668.  
  20669. PLF10 SA4 T2 ADDRESS OF FIRST EMPTY ENTRY
  20670. SA1 RA UPDATE LOCAL FILE COUNT
  20671. SX2 LFCN
  20672. IX2 X1-X2
  20673. ERX6 X2
  20674. SX3 X6-MXLF+SRFE+2 CHECK MAXIMUM FILE COUNT
  20675. ZR X4,PLF11 IF NO FREE ENTRY
  20676. SX7 FNTN+SRFE*LENF
  20677. IX1 X1-X7
  20678. IX1 X4-X1
  20679. MX7 1
  20680. BX7 X7*X1
  20681. LX7 1
  20682. IX6 X6+X7 INCREMENT FILE COUNT IF NOT SPECIAL FILE
  20683. SX3 X6-MXLF+SRFE+1
  20684. PL X3,PLF11 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
  20685. EWX6 X2
  20686. SX7 LOFT*100B SET LOCAL FILE TYPE
  20687. BX7 X5+X7
  20688. EWX7 X4
  20689. R= X5,FSTL
  20690. SX7 4 FST COMPLETE/NOT BUSY
  20691. IX6 X5+X4 ADDRESS OF FST
  20692. EWX7 X6
  20693. SA1 RA
  20694. IX7 X1-X4 NFL ADDRESS
  20695. LX7 36
  20696. EQ PPR1 EXIT WITH RESPONSE
  20697.  
  20698. PLF11 SX7 B1+B1 STATUS = LOCAL FILE LIMIT
  20699. PL X3,PPR1 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
  20700. LX7 1 STATUS = NEED MORE NFL
  20701. EQ PPR1 EXIT
  20702.  
  20703. * DELETE FNT ENTRY.
  20704.  
  20705. PLF14 NG X2,HNG IF NFL ADDRESS OUT OF RANGE
  20706. IX2 X4-X1 ADDRESS OF FNT
  20707. ERX3 X2 READ FNT
  20708. SX6 X1-FNTN-SRFE*LENF-LENF
  20709. R= X1,FSTL
  20710. IX5 X2+X1 ADDRESS OF FST
  20711. ZR X3,HNG IF EMPTY
  20712. MX3 1
  20713. ERX0 X5 READ FST
  20714. NZ X7,PLF17 IF COUNTING FILES
  20715. BX3 -X6*X3
  20716. LX3 1
  20717. BX6 X6-X6 CLEAR FNT/FST
  20718. EWX6 X2
  20719. EWX6 X5
  20720. IX5 X5+X1
  20721. ERRNZ FSTL-1
  20722. ERRNZ LENF-3
  20723. EWX6 X5
  20724. SX6 LFCN DECREMENT FILE COUNT IF NOT SPECIAL FILE
  20725. IX6 X4-X6
  20726. ERX2 X6
  20727. IX1 X2-X3
  20728. NG X1,HNG IF NEGATIVE FILE COUNT
  20729. EWX1 X6 UPDATE *LFCN*
  20730. SA2 B7+EOCW CHECK EXECUTE-ONLY FILE
  20731. SA5 A5
  20732. MX1 12
  20733. LX5 -12
  20734. BX6 X5-X2
  20735. BX6 X1*X6
  20736. NZ X6,PPR1 IF NO MATCH
  20737. BX6 -X1*X2
  20738. SA6 A2 CLEAR EXECUTE ONLY FILE POINTER
  20739. EQ PPR1 RETURN
  20740.  
  20741. * COUNT FILES ON EQUIPMENT SPECIFIED IN FST.
  20742.  
  20743. PLF17 SA2 B7+FLSW FETCH NFL SIZE
  20744. MX7 12
  20745. BX2 X7*X2
  20746. SX6 FNTN
  20747. LX2 6+12 NFL
  20748. IX2 X2-X6
  20749. SX3 LENF COMPUTE ADDRESS OF LAST FNT SLOT
  20750. PX5 X3
  20751. PX2 X2
  20752. NX5 X5
  20753. FX1 X2/X5
  20754. UX1 B6,X1
  20755. LX1 X1,B6
  20756. IX6 X1*X3
  20757. MX7 59 INITIALIZE FILE COUNT
  20758. SX6 X6+FNTN-FSTL
  20759. SA4 RA FETCH REFERENCE ADDRESS
  20760. SX5 B1
  20761. IX6 X4-X6 ADDRESS OF LAST FST SLOT IN NFL
  20762. SX1 FNTN-FSTL-LENF
  20763. IX1 X4-X1 INITIALIZE NFL SCAN
  20764. EWX0 X6
  20765. PLF18 IX1 X1-X3
  20766. ERX4 X1 READ FST ENTRY
  20767. BX2 X4-X0
  20768. AX2 48
  20769. NZ X2,PLF18 IF NOT MATCHING EST ORDINAL
  20770. BX4 X1-X6
  20771. IX7 X7+X5 INCREMENT FILE COUNT
  20772. NZ X4,PLF18 IF NOT END OF NFL
  20773. LX7 12
  20774. EWX4 X6 CLEAR SEARCH OBJECTIVE
  20775. EQ PPR1 EXIT
  20776. PSM SPACE 4,20
  20777. ** PSM - PRESET STORAGE MOVE.
  20778. *
  20779. * ENTRY (X0) = ADDRESS TO MOVE FROM.
  20780. * (X1) = (X0) - ADDRESS TO MOVE TO.
  20781. * (B4) = WORD COUNT.
  20782. * (B5) = RETURN ADDRESS.
  20783. * (B6) = RETURN ADDRESS FOR CALLING ROUTINE.
  20784. *
  20785. * EXIT (X0) = ADDRESS TO MOVE FROM.
  20786. * (X1) = ADDRESS TO MOVE TO.
  20787. * (X4) = INCREMENT (1 OR -1).
  20788. * (B4) = BLOCK COUNT (WORD COUNT / 10B).
  20789. * (B6) = RETURN ADDRESS FOR CALLING ROUTINE.
  20790. *
  20791. * USES X - 0, 1, 4, 6, 7.
  20792. * B - 4.
  20793. *
  20794. * CALLS RB6.
  20795. *
  20796. * THE ADDRESSES ARE ADJUSTED TO PREVENT OVERLAP, IF NECESSARY.
  20797.  
  20798.  
  20799. PSM SX4 B1+ INCREMENT
  20800. SX7 B4 WORD COUNT
  20801. MX6 -3
  20802. BX6 -X6*X7 REMAINDER
  20803. IX7 X0-X1 ADDRESS TO MOVE TO
  20804. PL X1,PSM1 IF DOWNWARD MOVE
  20805. SX1 B4+ WORD COUNT
  20806. IX0 X0+X1 FWA = LWA+1
  20807. IX7 X7+X1
  20808. IX0 X0-X4 FWA = LWA
  20809. IX7 X7-X4
  20810. BX6 -X6 COMPLEMENT REMAINDER
  20811. BX4 -X4 COMPLEMENT INCREMENT
  20812. PSM1 BX1 X7 FWA OF MOVE
  20813. SX7 B4 WORD COUNT
  20814. AX7 3 TRUNCATE WORD COUNT
  20815. SB4 X7 BLOCK COUNT (WORD COUNT / 10B)
  20816. PSM2 ZR X6,PSM3 IF NO REMAINDER
  20817. ERX7 X0 MOVE REMAINDER
  20818. IX0 X0+X4
  20819. EWX7 X1
  20820. IX1 X1+X4
  20821. IX6 X6-X4
  20822. EQ PSM2 LOOP FOR NEXT WORD
  20823.  
  20824. PSM3 ZR B4,RB6 IF MOVE COMPLETE
  20825. JP B5 RETURN
  20826. RTC SPACE 4,15
  20827. ** RTC - UPDATE REAL-TIME CLOCK FROM CPU MICROSECOND CLOCK.
  20828. *
  20829. * READS THE CPU MICROSECOND CLOCK AND UPDATES THE REAL TIME
  20830. * CLOCK (RTCL) WHEN PROCESSING *MTR* REQUESTS.
  20831. *
  20832. * ENTRY (X5) = CPU MICROSECOND CLOCK.
  20833. *
  20834. * EXIT (RTCL) = UPDATED TO NEAREST SECOND AND MILLISECOND.
  20835. * (X5) = CPU MICROSECOND CLOCK AT ENTRY.
  20836. *
  20837. * USES X - 1, 2, 3, 4, 5, 6, 7.
  20838. * A - 1, 2, 3, 5, 6, 7.
  20839. * B - 4.
  20840.  
  20841.  
  20842. RTC SA2 RTCA CPU CLOCK VALUE AT LAST WHOLE MILLISECOND
  20843. SX3 B0+
  20844. IX1 X5-X2 MICROSECONDS SINCE LAST WHOLE MILLISECOND
  20845. PL X1,RTC1 IF NO OVERFLOW
  20846.  
  20847. * SINCE THE 48 BIT CPU CLOCK ON A CYBER 180 WILL OVERFLOW ONLY
  20848. * AFTER APPROXIMATELY 9 YEARS, IT IS SAFE TO ASSUME THAT IF AN
  20849. * OVERFLOW HAS OCCURRED IT IS ON A CYBER 170-865/875, WHICH
  20850. * USES A 32 BIT CPU CLOCK WHICH OVERFLOWS EVERY 1.2 HOURS.
  20851.  
  20852. SX3 B1+ CORRECT FOR OVERFLOW
  20853. LX3 32
  20854. IX1 X1+X3
  20855. RTC1 SX6 1000 ONE MILLISECOND
  20856. IX7 X1-X6
  20857. PX1 X1
  20858. NG X7,/MONITOR/PMN1 IF .LT. ONE MILLISECOND
  20859. BX7 X5
  20860. SA7 RTCE SAVE ENTRY CLOCK VALUE
  20861. PX7 X6
  20862. NX7 X7
  20863. FX7 X1/X7 CALCULATE MILLISECONDS
  20864. UX7 X7,B4
  20865. LX7 B4 INTEGER MILLISECONDS
  20866. IX6 X6*X7
  20867. IX6 X2+X6 MICROSECONDS AT NEW WHOLE MILLISECOND
  20868. BX6 -X3*X6 CLEAR POSSIBLE OVERFLOW (CYBER 865/875)
  20869. SA6 A2
  20870. MX2 24
  20871. SA3 RTCC *RTCL* AT LAST *CPUMTR* UPDATE
  20872. BX1 -X2*X3 ISOLATE OLD *RTCL* COMPONENTS
  20873. BX3 X2*X3
  20874. IX7 X1+X7 CURRENT MILLISECONDS
  20875. SA1 RTCB MICROSECONDS AT LAST WHOLE SECOND
  20876. LX3 24
  20877. BX7 -X2*X7 NEW *RTCL* MILLISECOND COMPONENT
  20878. BX2 X2-X2
  20879. SX4 B1
  20880. IX1 X5-X1 MICROSECONDS SINCE LAST WHOLE SECOND
  20881. SB4 10-1
  20882. PL X1,RTC2 IF NO OVERFLOW
  20883. SX2 B1 CORRECT FOR OVERFLOW
  20884. LX2 32
  20885. IX1 X1+X2
  20886. IX5 X5+X2
  20887. RTC2 SX6 1000000/100B
  20888. LX6 6
  20889. IX6 X1-X6
  20890. NG X6,RTC3 IF LESS THAN ONE SECOND
  20891. NG B4,RTC3 IF MORE THAN A 10 SECOND UPDATE
  20892. BX1 X6
  20893. SB4 B4-B1
  20894. IX3 X3+X4 INCREMENT SECONDS
  20895. NZ X6,RTC2 IF NOT WHOLE SECONDS
  20896. RTC3 IX6 X5-X1 MICROSECONDS AT NEW WHOLE SECOND
  20897. MX1 -24
  20898. BX6 -X2*X6 CLEAR POSSIBLE OVERFLOW (CYBER 865/875)
  20899. SA6 A1
  20900. BX3 -X1*X3 NEW *RTCL* SECONDS COMPONENT
  20901. LX3 36
  20902. BX7 X3+X7 UPDATE REAL TIME CLOCK
  20903. SA7 A3+ SAVE NEW *RTCL* VALUE
  20904. SA7 RTCL
  20905. PL B4,RTC4 IF NOT AN EXCESSIVE UPDATE
  20906. SA1 RTCD COPY OPERATOR MESSAGE
  20907. BX6 X1
  20908. SA1 A1+B1
  20909. TA6 MS2W,SCA
  20910. BX6 X1
  20911. SA1 A1+B1
  20912. SA6 A6+B1
  20913. BX6 X1
  20914. SA6 A6+B1
  20915. RTC4 SA5 RTCE RESTORE ENTRY CLOCK VALUE
  20916. EQ /MONITOR/PMN1 EXIT TO PROCESS *MTR* REQUEST
  20917.  
  20918.  
  20919. RTCA CON 0 MICROSECONDS AT LAST WHOLE MILLISECOND
  20920. RTCB CON 0 MICROSECONDS AT LAST WHOLE SECOND
  20921. RTCC CON 377777000000000000B *RTCL* INITIAL AND PREVIOUS
  20922. RTCD DATA C*CLOCK UPDATE WARNING.*
  20923. RTCE CON 0 CPU CLOCK AT ENTRY
  20924. SMI SPACE 4,15
  20925. ** SMI - PROGRAM MODE STORAGE MOVE USING
  20926. * CM TO CM COPY INSTRUCTION.
  20927. *
  20928. * ENTRY (X0) = ADDRESS FROM MOVE TO.
  20929. * (X1) = (X0) - ADDRESS TO MOVE TO.
  20930. * (B4) = WORD COUNT OF MOVE.
  20931. * (B6) = RETURN ADDRESS.
  20932. *
  20933. * USES X - 0, 1, 2, 3, 4, 6, 7.
  20934. * B - 4, 5.
  20935. *
  20936. * CALLS RB6.
  20937.  
  20938.  
  20939. SMI SB5 400B MAXIMUM WORD COUNT / TRANSFER
  20940. SX7 B4+ WORD COUNT
  20941. GE B4,B5,SMI1 IF WORD COUNT .GE. TRANSFER SIZE
  20942. SB5 B4+ SET TRANSFER SIZE TO WORD COUNT
  20943. SMI1 SX4 B5 WORD COUNT / TRANSFER
  20944. BX2 X0 PRESET FWA OF MOVE
  20945. PL X1,SMI3 IF DOWNWARD MOVE
  20946. IX6 X4+X1
  20947. NG X6,SMI2 IF DIFFERENCE BIG ENOUGH
  20948. BX4 -X1 USE DIFFERENCE AS WORD COUNT
  20949. SMI2 IX6 X7+X0 LWA+1 OF BLOCK TO BE MOVED
  20950. IX2 X6-X4 FWA OF MOVE = LWA+1 - INCREMENT
  20951. EQ SMI4 DETERMINE BLOCK COUNT
  20952.  
  20953. SMI3 IX6 X4-X1
  20954. NG X6,SMI4 IF DIFFERENCE BIG ENOUGH
  20955. BX4 X1 USE DIFFERENCE AS WORD COUNT
  20956.  
  20957. * DETERMINE BLOCK COUNT.
  20958.  
  20959. SMI4 PX0 X4 WORD COUNT / TRANSFER
  20960. PX6 X7 WORD COUNT
  20961. NX0 X0
  20962. FX0 X6/X0
  20963. UX0,B4 X0
  20964. LX6 X0,B4
  20965. IX0 X6*X4 BLOCK COUNT
  20966. IX3 X7-X0 REMAINDER
  20967.  
  20968. * SET UP FOR MOVE.
  20969.  
  20970. IX0 X2-X1 ADDRESS TO MOVE TO
  20971. LX2 30
  20972. BX0 X0+X2 INSERT ADDRESS TO MOVE FROM
  20973. SB5 X4 WORD COUNT / TRANSFER
  20974. PL X1,SMI5 IF DOWNWARD MOVE
  20975. BX4 -X4 COMPLEMENT INCREMENT
  20976. SMI5 MX2 -30 BUILD INCREMENT WORD
  20977. BX7 -X2*X4
  20978. BX4 -X2*X4
  20979. LX7 30
  20980. BX4 X7+X4
  20981. SB4 X6+ BLOCK COUNT
  20982.  
  20983. * MOVE STORAGE (MAIN LOOP).
  20984.  
  20985. SMI6 WE B5 MOVE STORAGE
  20986. + SB4 B4-B1 DECREMENT BLOCK COUNT
  20987. IX0 X0+X4 INCREMENT/DECREMENT ADDRESSES
  20988. GT B4,B0,SMI6 IF NOT COMPLETE
  20989. ZR X3,RB6 IF NO REMAINDER
  20990.  
  20991. * MOVE REMAINDER.
  20992.  
  20993. SB5 X3+ REMAINING STORAGE LENGTH
  20994. PL X4,SMI7 IF DOWNWARD MOVE
  20995. IX0 X0-X4 RESET LAST INCREMENT/DECREMENT
  20996. IX0 X0-X3 DECREMENT REMAINING LENGTH
  20997. LX3 30
  20998. IX0 X0-X3
  20999. SMI7 WE B5 MOVE REMAINDER
  21000. + JP B6 RETURN
  21001. VLM SPACE 4,10
  21002. ** VLM - VERIFY FIELD LENGTH STARTUP PROCESSOR.
  21003. *
  21004. * EXIT TO */MONITOR/RCC1*.
  21005. * (VFLR) = 24/0, 18/ CPA, 18/ PP OR
  21006. * TO */MONITOR/PPR1*, IF *VLFM* IN PROGRESS.
  21007. *
  21008. * USES X - 1, 4, 6, 7.
  21009. * A - 1, 6.
  21010. * B - 3, 6.
  21011.  
  21012.  
  21013. VLM LX1 7-36 GET CONTROL POINT
  21014. SX4 7600B
  21015. BX6 X4*X1
  21016. SA1 VFLR VFL REQUEST WORD
  21017. SX7 2 PRESET RESPONSE
  21018. NZ X6,VLM1 IF CONTROL POINT SPECIFIED
  21019. SX6 B7+
  21020. VLM1 SX4 A5+ OUTPUT REGISTER ADDRESS
  21021. LX6 18
  21022. LX7 36
  21023. SB6 VFLXP EXCHANGE PACKAGE ADDRESS
  21024. SB3 /MONITOR/MTRX *RCC* RETURN ADDRESS
  21025. BX6 X6+X4 ASSEMBLE REQUEST
  21026. NZ X1,PPR1 IF *VFLM* ALREADY IN PROGRESS
  21027. SA6 A1 SET REQUEST
  21028. EQ /MONITOR/RCC RECALL CPU
  21029. VFLXP SPACE 4,10
  21030. ** VFLXP - FIELD LENGTH VERIFICATION EXCHANGE PACKAGE.
  21031. *
  21032. * THIS EXCHANGE PACKAGE IS USED TO VERIFY THE FIELD LENGTH
  21033. * OF A PROGRAM AFTER A MEMORY PARITY ERROR HAS BEEN DETECTED.
  21034. * IT MUST BE SEPARATE FROM THE REST OF THE SYSTEM BECAUSE IT
  21035. * MAY ABORT DUE TO A HARD DOUBLE-BIT ERROR IN THE FIELD LENGTH
  21036. * IN QUESTION.
  21037.  
  21038.  
  21039. VFLXP EXP P=/CME/VFL,FL=(,MCM),FLX=(,MXM),A5=VFLR,B1=1,MA=VFLXP,E
  21040. ,M=(,CXPFE)
  21041.  
  21042. * STSW.
  21043.  
  21044. VFD 3/ZCPS INITIAL CPU STATUS
  21045. VFD 57/0
  21046.  
  21047. * CWQW.
  21048.  
  21049. VFD 2/1
  21050. VFD 7/MPRS CPU PRIORITY
  21051. VFD 1/0
  21052. VFD 1/0 CPU SLICE ACTIVE
  21053. VFD 1/0 RECALL FLAG
  21054. VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
  21055. VFD 2/0
  21056. VFD 9/0 SERVICE CYCLE
  21057. VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
  21058. VFD 1/0 *MTR* BYPASS FLAG
  21059. VFD 2/0 NO CPU SELECTION
  21060. VFD 3/0
  21061. VFD 3/FVXT FL VERIFICATION EXCHANGE PACKAGE TYPE
  21062. VFD 18/0 *WQ* LINKAGE
  21063.  
  21064. * CSAW.
  21065.  
  21066. VFD 60/0
  21067.  
  21068. * *CTMW*.
  21069.  
  21070. VFD 60/0
  21071. VFL SPACE 4,10
  21072. ** VFL - VERIFY FIELD LENGTH.
  21073. *
  21074. * ENTRY (A5) = VFLR.
  21075. *
  21076. * CALLS CSM.
  21077.  
  21078.  
  21079. VFLX XJ RETURN
  21080.  
  21081. * CLEAR CM FL.
  21082.  
  21083. VFL SA5 A5 GET REQUEST
  21084. AX5 18 SHIFT TO CONTROL POINT ADDRESS
  21085. SA2 X5+1 RA
  21086. SA1 X5+2 FL
  21087. AX2 36 FWA TO CLEAR
  21088. AX1 36 WORD COUNT
  21089. SB3 VFL1 *CSM* RETURN ADDRESS
  21090. EQ CSM CLEAR STORAGE
  21091.  
  21092. * CHECK CM FL.
  21093.  
  21094. VFL1 SA5 A5 GET REQUEST
  21095. AX5 18
  21096. SA3 X5+FLSW GET NEGATIVE FL LENGTH
  21097. SA2 X5+1 RA
  21098. SA1 X5+2 FL
  21099. SX4 B1 SET INCREMENT
  21100. AX3 48
  21101. AX2 36 FWA
  21102. AX1 36 WORD COUNT
  21103. LX3 6 NEGATIVE FL OFFSET
  21104. IX2 X2-X3 START FWA AT END OF NFL
  21105. IX1 X1+X3 ADD NFL SIZE TO WORD COUNT
  21106. IX1 X1-X4 PRE-DECREMENT WORD COUNT
  21107. VFL2 ERX3 X2
  21108. NO
  21109. IX1 X1-X4 DECREMENT WORD COUNT
  21110. IX2 X2+X4 INCREMENT ADDRESS
  21111. PL X1,VFL2 IF NOT COMPLETE
  21112. TNO /CME/VFL5,XUEM (865/875 AND USER EM IN EXTERNAL EM)
  21113.  
  21114. * CLEAR UEM FL.
  21115.  
  21116. SA5 A5 GET REQUEST
  21117. AX5 18 SHIFT TO CONTROL POINT ADDRESS
  21118. SA2 X5+4 RAE
  21119. SA1 X5+5 FLE
  21120. AX2 36 FWA TO CLEAR
  21121. AX1 36 WORD COUNT
  21122. TLX2 (6,ESM170,0)
  21123. TLX1 (6,ESM170,0)
  21124. ZR X1,VFL5 IF FLE = 0
  21125. BX7 X7-X7
  21126. SX6 B1+
  21127. VFL2.1 WX7 X2 CLEAR USER EM
  21128. IX1 X1-X6
  21129. IX2 X2+X6
  21130. NZ X1,VFL2.1 IF NOT END OF USER EM
  21131.  
  21132. * CHECK UEM FL.
  21133.  
  21134. VFL3 SA5 A5 GET REQUEST
  21135. AX5 18
  21136. SA2 X5+4 RAE
  21137. SA1 X5+5 FLE
  21138. SX4 B1 SET INCREMENT
  21139. AX2 36 FWA
  21140. AX1 36 WORD COUNT
  21141. TLX2 (6,ESM170,0)
  21142. TLX1 (6,ESM170,0)
  21143. IX1 X1-X4 PRE-DECREMENT WORD COUNT
  21144. VFL4 RX3 X2
  21145. NO
  21146. IX1 X1-X4 DECREMENT WORD COUNT
  21147. IX2 X2+X4 INCREMENT ADDRESS
  21148. PL X1,VFL4 IF NOT COMPLETE
  21149.  
  21150. * SET RESPONSE.
  21151.  
  21152. VFL5 SA5 A5 GET REQUEST
  21153. SX6 X5 EXTRACT PP OUTPUT REGISTER ADDRESS
  21154. SA6 A5
  21155. EQ VFLX RETURN
  21156.  
  21157.  
  21158. VFLR VFD 24/0
  21159. VFD 18/0 CONTROL POINT ADDRESS
  21160. VFD 18/0 PP OUTPUT REGISTER ADDRESS
  21161. XJ2 SPACE 4,10
  21162. ** XJ2 - ACCUMULATE ACCOUNTING ADJUSTMENTS.
  21163. *
  21164. * EXIT TO */MONITOR/XJ1.1*.
  21165. *
  21166. * USES X - 1, 2, 4, 6, 7.
  21167. * A - 1, 2, 6, 7.
  21168. * B - 6.
  21169.  
  21170.  
  21171. XJ2 TNO /NVE/XJ1,NVE
  21172. XJ3 SA1 CL+CMST+A0 MONITOR MODE STATUS
  21173. SA2 MT+A0 MONITOR MODE TIME ACCUMULATOR
  21174. TX7 ACAD EXCHANGE JUMP OVERHEAD FACTOR
  21175. SX6 B0 CLEAR BASE TIME TO FLAG MONITOR MODE EXIT
  21176. UX1,B6 X1 EXTRACT MONITOR MODE BASE TIME
  21177. PX6 B6,X6
  21178. ZR B6,XJ5 IF NOT TO ACCUMULATE MONITOR MODE TIME
  21179. RC X4
  21180. IX7 X2+X7 ADD EXCHANGE FACTOR
  21181. IX5 X4-X1 MONITOR MODE TIME INCREMENT
  21182. PL X5,XJ4 IF NO OVERFLOW
  21183.  
  21184. * NOTE - THE MICROSECOND CLOCK ON THE CYBER 170-865 AND 170-875
  21185. * WILL WRAP APPROXIMATELY EVERY 1.2 HOURS, SINCE IT IS ONLY 32
  21186. * BITS WIDE. ALL OTHER MODELS IN THE 170-800 SERIES HAVE 48
  21187. * BIT COUNTERS, WHICH WILL WRAP ONLY ONCE EVERY 9 YEARS OR SO.
  21188. * SINCE THIS COUNTER IS RESET AT DEADSTART, IT IS SAFE TO
  21189. * ASSUME THAT IF A WRAP IS DETECTED, THE COUNTER IS ONLY 32
  21190. * BITS WIDE.
  21191.  
  21192. SX4 1
  21193. LX4 32
  21194. IX5 X5+X4
  21195. XJ4 IX7 X7+X5
  21196. SA7 MT+A0 UPDATE MONITOR MODE TIME
  21197. XJ5 SA6 A1 UPDATE MONITOR MODE STATUS
  21198. EQ /MONITOR/XJ1.1 EXCHANGE TO PROGRAM
  21199.  
  21200. ENDBLK
  21201. BLOCK 0CME,(NO CENTRAL MEMORY EXTENSION.)
  21202. SPACE 4,10
  21203. HNG EQU /MONITOR/HNG
  21204. PPR1 EQU /MONITOR/PPR1
  21205. T1 EQU /MONITOR/T1
  21206. T2 EQU /MONITOR/T2
  21207. T3 EQU /MONITOR/T3
  21208. RA EQU /MONITOR/RA
  21209. RA1 EQU /MONITOR/RA1
  21210. APQ SPACE 4,10
  21211. ** APQ - CHECK FOR *1LT* ASSIGNMENT.
  21212. *
  21213. * ENTRY (X6) = REQUEST.
  21214. *
  21215. * EXIT (X2) = PP AVAILABILITY MASK.
  21216. * (APQC) = NEW PP ALLOCATION MASK.
  21217. *
  21218. * USES X - 1, 2, 3, 4, 7.
  21219. * A - 1, 7.
  21220. * B - 6.
  21221.  
  21222. APQ9 SX3 3R1LT
  21223. MX1 18
  21224. LX3 -18
  21225. BX3 X3-X6
  21226. BX1 X1*X3
  21227. NZ X1,/MONITOR/APQ1.0 IF NOT *1LT*
  21228. SA1 APQD GET ASSIGNMENT MASK
  21229. MX3 10
  21230. TX4 A5-1,-FP
  21231. LX3 -12
  21232. LX4 -3
  21233. SB6 X4-12B
  21234. PL B6,APQ10 IF SECOND PP CHASSIS
  21235. SB6 X4+
  21236. APQ10 AX4 B6,X1 ADJUST PP MASK
  21237. LX1 B6,X1
  21238. BX4 X3*X4 FIRST PP CHASSIS SELECTION
  21239. LX3 -10
  21240. BX1 X3*X1 SECOND PP CHASSIS SELECTION
  21241. BX7 X4+X1
  21242. BX2 X7*X2 ALLOWABLE PP SELECTION
  21243. SA7 /MONITOR/APQC SET SELECTION MASK
  21244. EQ /MONITOR/APQ1.0 ASSIGN THE PP
  21245.  
  21246. APQD VFD 45/-040120060050020B,15/0
  21247. CSM SPACE 4,15
  21248. ** CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
  21249. *
  21250. * ENTRY (X1) = WORD COUNT.
  21251. * (X2) = FWA.
  21252. * (B3) = RETURN ADDRESS.
  21253. *
  21254. * EXIT (X7) = 0.
  21255. *
  21256. * USES X - 0, 1, 3, 5, 6, 7.
  21257. * A - 3, 6, 7.
  21258. *
  21259. * CALLS /MONITOR/RB3.
  21260.  
  21261.  
  21262. CSM SA3 X2-1 GET FWA - 1
  21263. BX7 X3
  21264. SX0 B1
  21265. SA7 A3 INITIALIZE A7
  21266. MX3 -3
  21267. BX5 -X3*X1 EXTRACT REMAINDER
  21268. SX6 B0
  21269. AX1 3 SET BLOCK COUNT
  21270. BX7 X7-X7
  21271. ZR X1,CSM3 IF .LT. 8 WORDS TO CLEAR
  21272.  
  21273. * CLEAR 8 WORD BLOCKS.
  21274.  
  21275. CSM1 SA6 A7+B1
  21276. IX1 X1-X0 DECREMENT BLOCK COUNT
  21277. SA7 A6+1
  21278. CSM2 SA6 A7+B1
  21279. SA7 A6+B1
  21280. SA6 A7+B1
  21281. SA7 A6+B1
  21282. SA6 A7+B1
  21283. SA7 A6+B1
  21284. NZ X1,CSM1 IF NOT COMPLETE
  21285. CSM3 ZR X5,/MONITOR/RB3 IF COMPLETE
  21286. IX5 X5-X0
  21287. SA7 A7+B1 CLEAR REMAINDER
  21288. NZ X5,CSM3 IF NOT COMPLETE
  21289. JP B3 RETURN
  21290. PLF SPACE 4,10
  21291. ** PLF - PROCESS LOCAL FNT.
  21292.  
  21293.  
  21294. PLF SA3 B7+FLSW GET RA AND NFL SIZE
  21295. MX0 -12
  21296. AX3 12
  21297. BX4 -X0*X3
  21298. AX3 36
  21299. ZR X3,HNG IF NO NFL
  21300. LX4 6
  21301. BX6 X6-X6
  21302. LX3 6 NFL
  21303. SB5 X4 RA
  21304. SA1 B5-FNTN+LENF GET FIRST FNT ENTRY
  21305. BX1 -X0*X5 EXTRACT NFL ADDRESS
  21306. LX5 24
  21307. MX0 -3
  21308. BX2 -X0*X5 EXTRACT SUBFUNCTION
  21309. MX0 -18
  21310. LX5 59-41-24
  21311. SB6 X2-TPLFL-1
  21312. PL B6,HNG IF ILLEGAL SUBFUNCTION
  21313. JP TPLF+TPLFL+1+B6 JUMP TO PROCESSOR
  21314.  
  21315. * EXIT TO FUNCTION PROCESSOR WITH -
  21316. *
  21317. * (X0) = 42/-0,18/0.
  21318. * (X1) = NFL ADDRESS/PARAMETER.
  21319. * (X3) = NFL SIZE.
  21320. * (X5) = REQUEST WORD LEFT-SHIFTED 59-35.
  21321. * (A1) = ADDRESS OF FIRST FNT ENTRY.
  21322. * (B5) = RA.
  21323.  
  21324. TPLF BSS 0
  21325. LOC 0
  21326.  
  21327. + IX4 X3-X1 (DLFS) - DELETE ENTRY
  21328. EQ PLF14
  21329.  
  21330. + SX7 B1 (DLCS) - RETURN FILE COUNT
  21331. IX4 X3-X1
  21332. EQ PLF14
  21333.  
  21334. * EQ PLF1 (CRFS) - CREATE LOCAL FNT ENTRY
  21335.  
  21336. TPLFL BSS 0
  21337. LOC *O
  21338.  
  21339. * SET UP FOR FNT SEARCH.
  21340.  
  21341. PLF1 SA4 A5+B1 FILE NAME
  21342. BX6 X6-X6
  21343. SX2 X3-FNTN COMPUTE ADDRESS OF LAST FNT ENTRY
  21344. SX3 LENF
  21345. PX2 X2
  21346. PX3 X3
  21347. NX3 X3
  21348. FX1 X2/X3
  21349. BX7 X0*X4
  21350. UX1 B6,X1
  21351. SA2 A1-LENF
  21352. SX3 LENF
  21353. LX1 X1,B6
  21354. IX3 X1*X3
  21355. SB6 X3+FNTN
  21356. SB3 LENF*2 SEARCH INCREMENT
  21357. SB6 B5-B6 ADDRESS OF LAST ENTRY
  21358. SA7 B6
  21359. SB4 B5-FNTN ALLOW USE OF SPECIAL FILE RESERVED ENTRY
  21360. NG X5,PLF4 IF SPECIAL FILE
  21361. SB4 B4-SRFE*LENF PREVENT USE OF RESERVED ENTRIES
  21362.  
  21363. * SEARCH FOR MATCH OR EMPTY ENTRY.
  21364. *
  21365. * NOTE - THE SEARCH METHOD USED THROUGHOUT THIS PROCESSOR
  21366. * IS TO STORE THE TARGET ENTRY AT THE END OF THE
  21367. * TABLE, THUS GUARANTEEING A MATCH. ONCE IT IS
  21368. * FOUND, THE LAST ENTRY IS CLEARED, AND THE ADDRESS
  21369. * RETURNED IS CHECKED AGAINST THE LAST ENTRY. IF
  21370. * THEY MATCH, THE SEARCH IS DEEMED UNSUCCESSFUL.
  21371.  
  21372. PLF4 SA1 A1-B3
  21373. SA2 A2-B3
  21374. BX3 X4-X1
  21375. BX7 X4-X2
  21376. BX3 X0*X3
  21377. BX7 X0*X7
  21378. ZR X3,PLF7 IF FOUND
  21379. ZR X7,PLF6 IF FOUND
  21380. ZR X1,PLF8 IF EMPTY
  21381. PLF4.1 NZ X2,PLF4 IF NOT EMPTY
  21382. SX7 A2-B4
  21383. PL X7,PLF4 IF USE OF RESERVED ENTRY NOT ALLOWED
  21384. SX6 A2
  21385. BX6 -X0*X6
  21386.  
  21387. * EMPTY ENTRY FOUND, SEARCH FOR MATCH.
  21388.  
  21389. PLF5 SA1 A1-B3
  21390. SA2 A2-B3
  21391. BX3 X4-X1
  21392. BX7 X4-X2
  21393. BX3 X3*X0
  21394. BX7 X7*X0
  21395. ZR X3,PLF7 IF FOUND
  21396. NZ X7,PLF5 IF NOT FOUND
  21397. PLF6 SA1 A2+
  21398. PLF7 BX7 X7-X7 CLEAR LAST ENTRY
  21399. SX3 A1-B6
  21400. SA7 B6+
  21401. ZR X3,PLF10 IF LAST ENTRY
  21402. SB4 A1
  21403. SX3 B5-B4 NFL ADDRESS
  21404. LX3 36 BYTE 1 OF RESPONSE
  21405. SX7 B1 STATUS = FILE ALREADY EXISTS
  21406. BX7 X7+X3
  21407. EQ PPR1 EXIT
  21408.  
  21409. * EMPTY ENTRY FOUND.
  21410.  
  21411. PLF8 SX7 A1-B4
  21412. PL X7,PLF4.1 IF USE OF RESERVED ENTRY NOT ALLOWED
  21413. SX6 A1 SET ADDRESS OF FREE ENTRY
  21414. BX6 -X0*X6
  21415. EQ PLF5 SEARCH FOR MATCH
  21416.  
  21417. * NO MATCH FOUND, CREATE ENTRY.
  21418.  
  21419. PLF10 SA1 B5-LFCN INCREMENT LOCAL FILE COUNT
  21420. SX2 X1-MXLF+SRFE+2 CHECK MAXIMUM FILE COUNT
  21421. ZR X6,PLF11 IF NO FREE ENTRY FOUND
  21422. SB4 X6
  21423. SX3 B5-B4
  21424. SX3 X3-FNTN-SRFE*LENF-LENF
  21425. MX7 1
  21426. BX7 -X3*X7
  21427. LX7 1
  21428. IX7 X1+X7 INCREMENT FILE COUNT IF NOT SPECIAL FILE
  21429. SX2 X7-MXLF+SRFE+1
  21430. PL X2,PLF11 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
  21431. SA7 A1
  21432. BX4 X0*X4
  21433. SX7 LOFT*100B SET LOCAL FILE TYPE
  21434. BX7 X7+X4
  21435. SA7 X6
  21436. SX7 4 SET FST - OPERATION COMPLETE, NOT BUSY
  21437. SA7 A7+FSTL
  21438. SX7 B5-B4 NFL ADDRESS OF FNT ENTRY
  21439. LX7 36
  21440. EQ PPR1 EXIT WITH RESPONSE
  21441.  
  21442. PLF11 SX7 B1+B1 STATUS = LOCAL FILE LIMIT
  21443. PL X2,PPR1 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
  21444. LX7 1 STATUS = NEED MORE NFL
  21445. EQ PPR1 EXIT
  21446.  
  21447. * DELETE FNT ENTRY.
  21448.  
  21449. PLF14 NG X4,HNG IF NFL ADDRESS OUT OF RANGE
  21450. SB3 X1
  21451. SA2 B5-B3 CLEAR FNT ENTRY
  21452. ZR X2,HNG IF EMPTY FNT SLOT
  21453. MX5 12
  21454. SA4 A2+B1 READ *FST* ENTRY (FOR *DLCS* FILE COUNT)
  21455. NZ X7,PLF17 IF COUNTING FILES
  21456. ERRNZ FSTL-1
  21457. SA6 A2
  21458. SA6 A2+B1
  21459. SA6 A6+B1
  21460. ERRNZ LENF-3
  21461. SX4 X1-FNTN-SRFE*LENF-LENF
  21462. MX6 1
  21463. SA2 B5-LFCN DECREMENT FILE COUNT IF NOT SPECIAL FILE
  21464. BX6 -X4*X6
  21465. LX6 1
  21466. IX6 X2-X6
  21467. NG X6,HNG IF NEGATIVE FILE COUNT
  21468. SA6 A2
  21469. SA2 B7+EOCW CHECK FOR EXECUTE-ONLY FILE
  21470. BX6 -X5*X2
  21471. AX2 48 POSITION FNT ADDRESS
  21472. BX1 X2-X1
  21473. NZ X1,PPR1 IF NOT DELETING EXECUTE-ONLY FNT
  21474. SA6 A2
  21475. EQ PPR1 RETURN
  21476.  
  21477. * COUNT FILES ON EQUIPMENT SPECIFIED IN FST.
  21478.  
  21479. PLF17 SX6 LENF
  21480. SX2 X3-FNTN COMPUTE ADDRESS OF LAST FNT SLOT
  21481. PX3 X6
  21482. PX2 X2
  21483. NX3 X3
  21484. FX1 X2/X3
  21485. SX5 B1
  21486. UX1 B6,X1
  21487. LX1 X1,B6
  21488. IX3 X1*X6
  21489. SA1 B5-FNTN+LENF+FSTL FIRST FNT ENTRY
  21490. SB6 X3+FNTN-FSTL
  21491. BX6 X4 STORE SEARCH OBJECTIVE AT END OF NFL
  21492. SB6 B5-B6
  21493. MX7 59 INITIALIZE FILE COUNT
  21494. SA6 B6
  21495. PLF18 SA1 A1-LENF READ FST ENTRY
  21496. BX2 X4-X1
  21497. AX2 48
  21498. NZ X2,PLF18 IF NOT MATCHING EST ORDINAL
  21499. SX6 A1-B6
  21500. IX7 X7+X5 INCREMENT FILE COUNT
  21501. NZ X6,PLF18 IF NOT END OF NFL
  21502. LX7 12
  21503. SA6 B6 CLEAR SEARCH OBJECTIVE
  21504. EQ PPR1 EXIT
  21505.  
  21506. ENDBLK
  21507. BLOCK CMUMTR,(1 CPU MONITOR MODE CMU MOVE.),MONITOR
  21508. MSM SPACE 4
  21509. ** MSM - MONITOR MODE CMU MOVE.
  21510. *
  21511. * ENTRY (X0) = ADDRESS TO MOVE FROM.
  21512. * (B4) = WORD COUNT OF MOVE.
  21513. * (X1) = (X0) - ADDRESS TO MOVE TO.
  21514. * (B6) = EXIT ADDRESS.
  21515. *
  21516. * USES X - 0, 1, 4, 6, 7. (*MSM* AND *MSR* REGISTER USAGE)
  21517. * B - 4, 5.
  21518. * A - 1, 4, 6, 7.
  21519.  
  21520.  
  21521. MSM SB5 X1 MOVE DIFFERENCE
  21522. SA1 X0 FWA TO MOVE FROM
  21523. SX1 B4 SET CHARACTER COUNT OF BLOCK
  21524. SX0 B4+B4
  21525. LX1 3
  21526. MX6 -4
  21527. IX1 X1+X0
  21528. BX0 -X6*X1 LL
  21529. BX1 X6*X1 LU
  21530. LX0 30-4
  21531. SX6 A1
  21532. LX1 48-4
  21533. BX1 X1+X0
  21534. MX7 -18
  21535. SX0 A1-B5 SET ADDRESS OF MOVE
  21536. BX6 -X7*X6
  21537. BX0 -X7*X0
  21538. LX6 30
  21539. BX0 X1+X0 MERGE CHARACTER COUNT
  21540. BX6 X0+X6
  21541. SA6 MSMA STORE DESRCIPTOR WORD
  21542. IM MSMA
  21543. JP B6 RETURN
  21544.  
  21545. MSMA CON 0 INDIRECT MOVE DESCRIPTOR WORD
  21546.  
  21547. ENDBLK
  21548. BLOCK 0CMUMTR,(REGISTER MOVE.),MONITOR
  21549. MSM SPACE 4
  21550. ** MSR - MONITOR MODE MOVE STORAGE WITH REGISTERS.
  21551. *
  21552. * ENTRY (X0) = ADDRESS TO MOVE FROM.
  21553. * (B4) = WORD COUNT OF MOVE.
  21554. * (X1) = (X0) - ADDRESS TO MOVE TO.
  21555. * (B6) = EXIT ADDRESS.
  21556. *
  21557. * USES X - 0, 1, 4, 6, 7. (*MSM* AND *MSR* REGISTER USAGE)
  21558. * B - 4, 5.
  21559. * A - 1, 4, 6, 7.
  21560.  
  21561.  
  21562. MSR SB5 X1+ MOVE DIFFERENCE
  21563. SA1 X0+ FWA TO MOVE FROM
  21564. SB4 B4-10B
  21565. NG B4,MSR2 IF LESS THAN 10B WORDS TO MOVE
  21566.  
  21567. * REGISTER MOVE LOOP.
  21568.  
  21569. MSR1 BX6 X1
  21570. SB4 B4-10B DECREMENT WORD COUNT
  21571. SA4 A1+B1
  21572. SA6 A1-B5
  21573. LX7 X4
  21574. SA1 A4+B1
  21575. SA7 A4-B5
  21576. BX6 X1
  21577. SA4 A1+B1
  21578. SA6 A1-B5
  21579. LX7 X4
  21580. SA1 A4+B1
  21581. SA7 A4-B5
  21582. BX6 X1
  21583. SA4 A1+B1
  21584. SA6 A1-B5
  21585. LX7 X4
  21586. SA1 A4+B1
  21587. SA7 A4-B5
  21588. BX6 X1
  21589. SA4 A1+B1
  21590. SA6 A1-B5
  21591. LX7 X4
  21592. SA1 A4+B1
  21593. SA7 A4-B5
  21594. PL B4,MSR1 IF MORE 10 WORD BLOCKS TO MOVE
  21595. MSR2 SB4 B4+10B
  21596. EQ MSR4
  21597.  
  21598. MSR3 SB4 B4-B1
  21599. BX6 X1
  21600. SA6 A1-B5
  21601. SA1 A1+B1
  21602. MSR4 GT B4,B0,MSR3 IF MORE WORDS TO MOVE
  21603. JP B6 RETURN
  21604.  
  21605. ENDBLK
  21606. BLOCK CPP,(CONCURRENT PP REQUEST CODE.)
  21607. CPR SPACE 4,10
  21608. ** CPR - *CPRM* FUNCTION PROCESSOR.
  21609. *
  21610. * ENTRY (X1) = CALLING PARAMETERS.
  21611. * (X7) = 0.
  21612. *
  21613. * EXIT (X7) = REASON CODE AND STATUS.
  21614.  
  21615.  
  21616. CPR BSS 0 ENTRY
  21617. AX1 36 GET SUBFUNCTION
  21618. SB5 /MONITOR/PPRX ERROR EXIT ADDRESS
  21619. MX6 -12
  21620. SB4 X1
  21621. SA1 CPPL
  21622. BX6 -X6*X5 GET PARAMETER
  21623. GT B4,B1,CPR8 IF NOT ASSIGN OPERATION
  21624. SB6 X6-2 DETERMINE IF REQUEST IS FOR A LEGAL BARREL
  21625. SX7 5 RC = *INCORRECT CIO BARREL NUMBER*
  21626. NG B6,CPR2 IF INCORRECT BARREL PARAMETER
  21627. GT B6,B1,CPR2 IF INCORRECT BARREL PARAMETER
  21628. SB3 5 SET CPP-S PER BARREL
  21629. ZR B6,CPR1 IF BARREL ZERO REQUESTED
  21630. SX2 X1
  21631. AX2 12
  21632. SX2 X2-6
  21633. NG X2,CPR2 IF BARREL 1 NOT PRESENT
  21634. SB6 50B SET TO SCAN BARREL 1
  21635.  
  21636. * SUBFUNCTION 0 (ASSIGN CPP).
  21637.  
  21638. CPR1 TA3 B6,FPC
  21639. ZR X3,CPR3 IF FREE CPP FOUND
  21640. SB3 B3-1
  21641. SB6 B6+10B
  21642. NZ B3,CPR1 IF MORE CPP-S TO CHECK
  21643. SX7 3 RC = *CPP NOT AVAILABLE*
  21644. CPR2 LX7 24-0 POSITION ERROR CODES
  21645. EQ /MONITOR/MTRC STORE OUTPUT REGISTER AND EXIT MONITOR
  21646.  
  21647. CPR3 EQ B4,B1,CPR5 IF ASSIGN AND LOAD CPP (SUBFUNCTION 1)
  21648. SA2 CPRA CHECK IF CALL FOR NOS/VE PP
  21649. SA4 A5+B1
  21650. BX2 X2-X4
  21651. MX0 18
  21652. BX2 X0*X2
  21653. SB3 B7+
  21654. SB4 CPR4 RETURN ADDRESS
  21655. NZ X2,WPR IF CALL NOT FOR NOS/VE PP
  21656. TB3 SCA SYSTEM CONTROL POINT NUMBER
  21657. EQ WPR WRITE PARAMETER WORDS
  21658.  
  21659. CPR4 SX7 A3
  21660. LX7 36-0 SET ST=INPUT REGISTER AND RC=0
  21661. EQ /MONITOR/MTRC STORE (OR) AND EXIT MONITOR MODE
  21662.  
  21663. * ASSIGN AND LOAD CPP (SUBFUNCTION 1).
  21664.  
  21665. CPR5 SB3 B7 CONTROL POINT ADDRESS
  21666. SB4 CPR6 RETURN ADDRESS
  21667. TB7 SCA SET CONTROL POINT FOR *1MA* CALL
  21668. EQ WPR WRITE PARAMETER WORDS
  21669.  
  21670. CPR6 SA1 A5+B1
  21671. BX6 X1
  21672. SB6 CPR7+400000B RETURN ADDRESS AND CPP FLAG
  21673. EQ /MONITOR/SPL SEARCH PERIPHERAL LIBRARY
  21674.  
  21675. CPR7 BX6 X7
  21676. SX2 B1
  21677. SX7 7 RC = *LIBRARY LOCKED*
  21678. NG X1,CPR9 IF LIBRARY LOCKED
  21679. LX2 48
  21680. SX7 X7+B1 RC = *PROGRAM NOT FOUND*
  21681. NZ X5,CPR9 IF PP PROGRAM NOT FOUND
  21682. BX7 X6+X2
  21683. SA7 A3+B1 SET CPP OUTPUT REGISTER
  21684. SX7 A3 SET ST = CPP INPUT REGISTER, RC = 0
  21685. LX7 36-0
  21686. SA7 A5
  21687. SA1 CPRB SET UP *1MA* CALL
  21688. SX0 A3 *IR* OF CPP
  21689. SX2 A5 *OR* OF CALLING PP
  21690. LX2 12-0
  21691. BX2 X0+X2
  21692. BX6 X1+X2 PP CALL FORMAT
  21693. SB4 /MONITOR/LA1MA SET INDEX INTO *TAPQ* TABLE
  21694. SB3 /MONITOR/MTRX EXIT ADDRESS
  21695. EQ /MONITOR/APQ ASSIGN PP
  21696.  
  21697. * SUBFUNCTION 2 (RETURN CPP).
  21698.  
  21699. CPR8 SB4 B4-2 CHECK SUBFUNCTION
  21700. GT B4,B0,/MONITOR/HNG1 IF INCORRECT SUBFUNCTION
  21701. SX0 X1 VALIDATE THAT CPP EXISTS
  21702. AX0 12
  21703. SX7 4 RC = *INCORRECT CPP NUMBER*
  21704. IX1 X0-X6
  21705. LX6 3 MULTIPLY BY 10B
  21706. NG X1,CPR2 IF CPP DOES NOT EXIST
  21707. TA3 X6,FPC
  21708. MX0 18
  21709. BX3 X0*X3
  21710. SA1 CPRA
  21711. TB3 SCA SYSTEM CONTROL POINT NUMBER
  21712. SX7 10001B RC = *CPP NOT ASSIGNED*
  21713. BX0 X1-X3
  21714. NZ X0,CPR2 IF CPP IS NOT ASSIGNED TO *VER*
  21715. BX7 X7-X7
  21716. CPR9 SA2 B3+STSW
  21717. SA1 PPAL
  21718. SX0 B1
  21719. LX0 48-0
  21720. IX6 X2-X0 DECREMENT PP COUNT AT CP
  21721. SA6 A2
  21722. LX0 12-48
  21723. IX6 X0+X1 INCREMENT AVAILABLE CPP COUNT
  21724. SA6 A1
  21725. BX6 X6-X6 CLEAR INPUT REGISTER
  21726. TX1 A3,-FP
  21727. SA6 A3
  21728. LX1 PPXES-PPCES
  21729. TA6 X1+ACPP,FPX CLEAR CP ASSIGNMENT
  21730. EQ CPR2 EXIT
  21731.  
  21732.  
  21733. CPRA VFD 18/3L*VP,42/0 SIGNIFIES A NOS/VE PP
  21734. CPRB VFD 18/0L1MA,6/0,12/10B,24/0
  21735. DDB SPACE 4,15
  21736. ** DDB - *DDB* EXTENSION FOR CONCURRENT PPS.
  21737. *
  21738. * *DDB* GETS CALLED WHEN IT IS NECESSARY TO DUMP A DAYFILE
  21739. * BUFFER.
  21740. *
  21741. * ENTRY (A5) = REQUEST ADDRESS.
  21742. * (B7) = CONTROL POINT ADDRESS.
  21743. *
  21744. * EXIT TO /MONITOR/DDB3 WITH (X0) = (B7), IF CALLED FROM CPP.
  21745. * TO /MONITOR/DDB IF NOT CALLED FROM CPP.
  21746. *
  21747. * USES X - 0, 2.
  21748. * B - 3.
  21749. *
  21750. * CALLS DDD.
  21751.  
  21752.  
  21753. DDB TX2 A5,-FPC
  21754. NG X2,/MONITOR/DDB IF NOT CALLED FROM A CPP
  21755. TX2 A5,-SP
  21756. PL X2,/MONITOR/DDB IF NOT CALLED FROM A CPP
  21757. SB3 DDB1 SET *DDD* RETURN ADDRESS
  21758. JP /MONITOR/DDD ATTEMPT TO DUMP DAYFILE DIRECT
  21759.  
  21760. DDB1 SX0 B7 WAIT FOR 1 SECTOR OF SPACE
  21761. SX4 B6+ SET DAYFILE INDEX
  21762. BX5 X4+X5
  21763. JP /MONITOR/DDB3 CHANGE FUNCTION TO *CDBM*
  21764. DDD SPACE 4,15
  21765. ** DDD - *DDD* EXTENSION FOR CONCURRENT PP-S.
  21766. *
  21767. * *DDD* GETS CALLED WHEN ATTEMPTING TO INITIATE A DAYFILE
  21768. * BUFFER DUMP BY CALLING *1DD* DIRECTLY AND THE CONTROL POINT
  21769. * INVOLVED HAS ROLLOUT REQUESTED. IF A *CPP* IS REQUESTING THE
  21770. * DUMP, *1DD* WILL BE CALLED. OTHERWISE, IT WILL NOT BE.
  21771. *
  21772. * ENTRY (A5) = REQUEST ADDRESS.
  21773. * (B3) = RETURN ADDRESS FOR */MONITOR/DDD*.
  21774. *
  21775. * EXIT TO */MONITOR/DDD2*, IF CALLED FROM A CPP.
  21776. * TO (B3), IF NOT CALLED FROM A CPP.
  21777. *
  21778. * USES X - 2.
  21779.  
  21780.  
  21781. DDD TX2 A5,-FPC
  21782. NG X2,/MONITOR/RB3 IF NOT CALLED FROM A CPP
  21783. TX2 A5,-SP
  21784. NG X2,/MONITOR/DDD2 IF CALLED FROM A CPP
  21785. JP B3 RETURN
  21786. DPP SPACE 4,10
  21787. ** DPP - *DPPM* EXTENSION FOR CONCURRENT PP-S.
  21788. *
  21789. * ENTRY (A5) = *OR* ADDRESS OF CPP TO DROP.
  21790. * (A2) = ADDRESS OF *ACPP*.
  21791. *
  21792. * EXIT TO *APQ*, TO CALL *1MA* WHICH WILL IDLE THE CPP.
  21793. *
  21794. * USES X - 3, 4, 6, 7.
  21795. * A - 4, 7.
  21796. * B - 3, 4, 7.
  21797.  
  21798.  
  21799. DPP BSS 0 ENTRY
  21800. SX7 3L*MA RESET INPUT REGISTER
  21801. LX7 59-17
  21802. MX4 18
  21803. BX7 X4*X7
  21804. SA7 A5-B1
  21805. SA4 PPAL INCREMENT COUNT OF AVAILABLE CPP-S
  21806. SX3 10000B
  21807. IX7 X4+X3
  21808. SA7 A4
  21809. BX7 X7-X7
  21810. SA7 A2 CLEAR *ACPP*
  21811. SA7 A5+ CLEAR OUTPUT REGISTER
  21812. SB3 DPP1
  21813. EQ /MONITOR/JAV CHECK JOB ADVANCE CONDITIONS
  21814.  
  21815. DPP1 SA2 DPPA SET PP CALL
  21816. SX3 A5-B1 INPUT REGISTER ADDRESS
  21817. BX6 X2+X3
  21818. TB7 SCA SET CONTROL POINT FOR *1MA* CALL
  21819. SB4 /MONITOR/LA1MA SET INDEX INTO *TAPQ* TABLE
  21820. SB3 /MONITOR/MTRX EXIT ADDRESS
  21821. EQ /MONITOR/APQ ASSIGN PP
  21822.  
  21823.  
  21824. DPPA VFD 18/0L1MA,6/0,12/12B,24/0
  21825. LMS SPACE 4,15
  21826. ** LMS - *LMSM* EXTENSION FOR CONCURRENT PPS.
  21827. *
  21828. * ENTRY (X0) = 77777777777777770000B.
  21829. * (X2) = SUBFUNCTION CODE.
  21830. * (X6) = *WDSE* MASK = -0 IF *WDSE* PRESENT.
  21831. *
  21832. * EXIT (X0) = 11B.
  21833. * (X3) = *CHRV* VALUE FROM MB+1.
  21834. * (X4) = OLD DRIVER INDEX.
  21835. * (X5) = *6DC*/*6DD* DRIVER INDEX.
  21836. * (X6) = 12/0, 12/*WDSE* VALUE, 24/0, 12/2.
  21837. * (A3) = MESSAGE BUFFER ADDRESS.
  21838. * (B3) = SUBFUNCTION CODE.
  21839. *
  21840. * USES X - 0, 2, 3, 4, 5, 6, 7.
  21841. * A - 2, 3.
  21842. * B - 3.
  21843.  
  21844.  
  21845. LMS13 SA3 A5+B1 GET *MB*
  21846. SB3 X2 (B3) = SUBFUNCTION CODE
  21847. SA2 A3+B1 GET *MB*+1
  21848. LX5 59-44
  21849. SX4 37B*10000B
  21850. MI X5,LMS14 IF *6DD* REQUEST BIT IS SET
  21851. SX5 /MONITOR/LA6DC*10000B SET NEW DRIVER INDEX
  21852. EQ LMS15 COMPLETE *6DC* LOAD PROCESSING
  21853.  
  21854. LMS14 SX5 /MONITOR/LA6DD*10000B SET *6DD* DRIVER INDEX
  21855. LMS15 BX7 -X0*X2 GET *CHRV* VALUE
  21856. BX0 X6*X0 GET *WDSE* VALUE
  21857. LX0 36
  21858. BX4 X4*X2
  21859. BX0 -X0*X3
  21860. SX6 B1+B1 INHIBIT PRESET IF *6DC* ALREADY LOADED
  21861. LX3 X7
  21862. BX6 X6+X0
  21863. SX0 11B
  21864. EQ /MONITOR/LMS4 CHECK FOR DRIVER LOAD NEEDED
  21865. SPL SPACE 4,10
  21866. ** SPL - *SPLM* EXTENSION FOR CONCURRENT PPS.
  21867. *
  21868. * ENTRY ENTRY CONDITIONS FOR *SPL*.
  21869. *
  21870. * EXIT (B6) = B6 + 400000B, IF REQUEST IS FOR A CPP.
  21871. *
  21872. * USES X - 3, 4.
  21873.  
  21874.  
  21875. SPL TX3 A5,-FPC CHECK FOR CALL FROM CPP
  21876. TX4 A5,-SP
  21877. NG X3,/MONITOR/SPL IF NOT FROM CPP
  21878. PL X4,/MONITOR/SPL IF NOT FROM CPP
  21879. SB6 B6+400000B
  21880. EQ /MONITOR/SPL SEARCH PERIPHERAL LIBRARY
  21881.  
  21882. SPL1 PL B6,SPL2 IF REQUEST WAS FOR AN NPP
  21883. SB6 B6-400000B
  21884. SPL2 TJP (/PROBE/SPL,PROBE,B6) RETURN
  21885. TITLE SUBROUTINES.
  21886. WPR SPACE 4,15
  21887. ** WPR - WRITE PARAMETER WORDS INTO CPP-S COMMUNICATION AREA.
  21888. *
  21889. * ENTRY (A3) = *IR* ADDRESS OF ASSIGNED CPP.
  21890. * (A5) = *OR* ADDRESS OF CALLING PP.
  21891. * (B3) = CONTROL POINT ADDRESS.
  21892. * (B4) = RETURN ADDRESS.
  21893. *
  21894. * EXIT TO *CPR2*, IF PP LIMIT EXCEEDED.
  21895. * *MB* OF CALLING PP WRITTEN INTO CPP-S *IR*.
  21896. * *MB+1* OF CALLING PP WRITTEN INTO CPP-S *MB*.
  21897. *
  21898. * USES X - 0, 1, 2, 4, 6, 7.
  21899. * A - 1, 2, 4, 7.
  21900. * B - 6.
  21901.  
  21902.  
  21903. WPR SA4 B3+STSW
  21904. SX7 6 RC = *MAXIMUM PP-S ALREADY ASSIGNED*
  21905. TX2 B3,-SCA
  21906. MX0 -5
  21907. LX4 0-48
  21908. ZR X2,WPR1 IF CALL FOR SYSTEM CONTROL POINT
  21909. BX0 -X0*X4
  21910. SB6 X0-NPPCP-1
  21911. PL B6,CPR2 IF PP LIMIT EXCEEDED
  21912. WPR1 SX0 B1
  21913. IX7 X4+X0 INCREMENT PP COUNT
  21914. LX7 48-0
  21915. SA7 A4
  21916. SA2 PPAL
  21917. LX0 12-0
  21918. IX7 X2-X0 DECREMENT AVAILABLE CPP COUNT
  21919. SA7 A2
  21920. SA1 A5+B1
  21921. SX2 B3 ADD CONTROL POINT NUMBER
  21922. LX2 36-0-7
  21923. BX7 X1+X2
  21924. SA2 A1+B1
  21925. BX6 X2
  21926. SA7 A3
  21927. SA6 A3+2 WRITE PARAMETER WORD INTO NEW CPP-S MB
  21928.  
  21929. * IF NOT CALLED TO THE SYSTEM CONTROL POINT, AN ALTERNATE
  21930. * ASSIGNMENT TO THE SYSTEM CONTROL POINT WILL BE SET TO ALLOW
  21931. * A STORAGE MOVE OF THE CALLING JOB WHILE THE CPP DEADSTART IS
  21932. * IN PROGRESS.
  21933.  
  21934. TX7 B3,-SCA
  21935. ZR X7,WPR2 IF CALLED TO SYSTEM CP
  21936. SX7 B1
  21937. LX7 23-0 SET ALTERNATE CP FLAG
  21938. WPR2 TX1 SCA
  21939. BX7 X7+X1
  21940. LX1 24
  21941. TX2 A3,-FP
  21942. BX7 X7+X1
  21943. LX1 24-7
  21944. LX2 PPXES-PPCES
  21945. BX7 X7+X1
  21946. TA7 X2+ACPP,FPX SET CP ASSIGNMENT
  21947. JP B4 RETURN
  21948.  
  21949.  
  21950. ENDBLK
  21951. BLOCK PCP,(PSEUDO-CONTROL POINT CODE.)
  21952. APC SPACE 4,20
  21953. ** APC - ASSIGN PSEUDO-CONTROL POINT.
  21954. *
  21955. * ENTRY (X1) = *STSW* LEFT SHIFTED 59-31.
  21956. * (X2) = EJT ORDINAL.
  21957. * (X4) = EJT *JSNE* WORD.
  21958. * (A1) = *STSW* ADDRESS.
  21959. * (B7) = CPA ADDRESS.
  21960. *
  21961. * EXIT (B3) = UNCHANGED.
  21962. * (B5) = PCP NUMBER IF ROLLOUT TO PCP POSSIBLE.
  21963. * (B6) = -1 IF COMPOUND ROLLOUT.
  21964. * = 0 IF SIMPLE PSEUDO-ROLLOUT.
  21965. * (B7) = CPA ADDRESS (UNCHANGED).
  21966. * TO *RPC* TO INITIATE ROLLOUT TO PCP.
  21967. * TO /MONITOR/*JAV2* IF ROLLOUT TO PCP NOT POSSIBLE.
  21968. *
  21969. * USES X - ALL.
  21970. * B - 3, 4, 5, 6.
  21971. * A - 1 - 6.
  21972. *
  21973. * CALLS RPC.
  21974.  
  21975.  
  21976. APC BSS 0 ENTRY
  21977.  
  21978. * CHECK JOB FOR CONDITIONS PREVENTING PSEUDO-ROLLOUT.
  21979.  
  21980. SX6 X2+
  21981. SA2 B7+SRUW
  21982. SA3 B7+FLIW
  21983. SA6 APCC SAVE EJT ORDINAL
  21984. MX0 -12
  21985. AX1 36-32
  21986. SX6 4000B
  21987. BX1 -X0*X1 ERROR FLAG
  21988. MX7 -36
  21989. LX2 11-41 POSITION ACCUMULATOR OVERFLOW FLAG
  21990. BX3 -X7*X3 PENDING FL OR FLE INCREASE
  21991. BX2 X4+X2
  21992. IX1 X1+X3
  21993. BX2 X6*X2 SET OVERFLOW AND SCP CONNECTION STATUS
  21994. IX2 X1+X2
  21995. ZR X2,APC2 IF NO CONDITIONS PREVENTING PSEUDO-ROLLOUT
  21996.  
  21997. * ROLL OUT JOB TO MASS STORAGE IF PSEUDO-ROLLOUT NOT POSSIBLE.
  21998.  
  21999. APC1 SA1 B7+STSW
  22000. MX6 -1
  22001. LX6 31-0
  22002. BX6 X6*X1 CLEAR PSEUDO-ROLLOUT ALLOWED FLAG
  22003. SA6 A1
  22004. EQ /MONITOR/JAV2 CALL *1AJ* FOR MASS STORAGE ROLLOUT
  22005.  
  22006. * SAVE REGISTERS AND INITIALIZE PCP SEARCH.
  22007.  
  22008. APC2 SA1 PCPP
  22009. SX6 A5+ SAVE (A5)
  22010. TX3 SC SYSTEM CP NUMBER
  22011. SB4 X1+TFSW PCPA FWA + *TFSW*
  22012. SA6 APCB
  22013. SX7 B3+ SAVE (B3)
  22014. SB5 X3+1 FIRST PCP NUMBER
  22015. SX6 77777B INITIALIZE LOWEST PRIORITY
  22016. SA1 CMCL
  22017. SA7 APCA
  22018. TX2 NPCP NUMBER OF PCP-S
  22019. LX1 -48
  22020. BX1 -X0*X1 MOVING CP/PCP NUMBER
  22021.  
  22022. * SEARCH FOR AVAILABLE PCP.
  22023.  
  22024. APC3 SX2 X2-1 DECREMENT PCP INDEX
  22025. NG X2,APC4 IF END OF SCAN
  22026. BX3 X2
  22027. LX3 7 PCP INDEX * 200B
  22028. SA4 B4+X3 READ THIS PCP-S *TFSW* WORD
  22029. LX4 -48
  22030. BX4 -X0*X4 EJT ORDINAL
  22031. ZR X4,APC5 IF FREE PCP
  22032. SX3 B5+X2 PCP NUMBER
  22033. BX3 X3-X1
  22034. ZR X3,APC3 IF PCP MOVING
  22035. CX5 X4,EJT CONVERT EJT ORDINAL TO OFFSET
  22036. TA5 X5+JSNE,EJT
  22037. SA3 A4+STSW-TFSW
  22038. LX5 59-0
  22039. AX3 48
  22040. NG X5,APC3 IF PCP JOB INTERLOCKED
  22041. SA5 A5+SCLE-JSNE
  22042. AX5 54 SERVICE CLASS
  22043. CX4 X5,JCB CONVERT JCB ORDINAL TO OFFSET
  22044. NZ X3,APC3 IF ACTIVITY AT PCP
  22045. TA4 X4+EXQT,JCB
  22046. LX4 -12
  22047. BX7 -X0*X4 WEIGHTING FACTOR (WF)
  22048. SB3 X7
  22049. LX4 -36+12
  22050. BX4 -X0*X4 LOWER BOUND PRIORITY (LB)
  22051. SA3 RTCL
  22052. AX3 36 REAL TIME SECONDS (RT)
  22053. SA5 A5+SCHE-SCLE
  22054. LX5 36
  22055. AX5 36 ENTRY TIME (ET)
  22056. IX3 X3-X5 RT - ET
  22057. AX3 X3,B3 (RT - ET) / WF
  22058. IX4 X3+X4 PRIORITY = LB + (RT - ET) / WF
  22059. IX5 X4-X6
  22060. PL X5,APC3 IF HIGHER PRIORITY THAN CURRECNT LOWEST
  22061. SX6 X4 SET NEW LOWEST PRIORITY PCP JOB
  22062. SB6 B5+X2 SET NEW LOWEST PRIORITY PCP NUMBER
  22063. EQ APC3 CONTINUE SCAN
  22064.  
  22065. * PROCESS NO PCP AVAILABLE. INITIATE COMPOUND ROLLOUT OF
  22066. * LOWEST PRIORITY PCP JOB IF THAT JOB-S PRIORITY IS LOWER THAN
  22067. * THAT OF THE CP JOB.
  22068.  
  22069. APC4 SA3 B7+TFSW
  22070. TA1 PCNS,SDA
  22071. SX7 B1
  22072. IX7 X1+X7 INCREMENT *NO PCP* COUNTER
  22073. SA7 A1
  22074. LX3 -48
  22075. BX4 -X0*X3 CP JOB-S EJT ORDINAL
  22076. CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
  22077. TA3 X3+SCHE,EJT
  22078. BX3 -X0*X3 CP JOB-S SCHEDULING PRIORITY
  22079. IX3 X6-X3
  22080. PL X3,APC7 IF LOWEST PCP PRIORITY .GE. CP JOB-S
  22081. SX4 B6-B5 PCP INDEX
  22082. LX4 7
  22083. TB4 X4,PCPA PCPA ADDRESS FOR *RPC*
  22084. SB5 B6 PCP NUMBER FOR *RPC*
  22085. SB6 -B1 INDICATE *APC* CALL
  22086. EQ APC6 INITIATE COMPOUND ROLLOUT
  22087.  
  22088. * INITIATE ROLLOUT TO UNOCCUPIED PCP.
  22089.  
  22090. APC5 SA1 APCC GET EJT ORDINAL
  22091. SB6 B0+ INDICATE SIMPLE PSEUDO-ROLLOUT TO *RPC*
  22092. TB4 X3,PCPA *PCPA* ADDRESS FOR *RPC*
  22093. LX1 48
  22094. AX3 7 PCP INDEX
  22095. BX6 X1
  22096. SB5 B5+X3 PCP NUMBER
  22097. SA6 B4+TFSW RESERVE PCP
  22098.  
  22099. * RESTORE REGISTERS AND INITIATE PSEUDO-ROLLOUT OR COMPOUND
  22100. * ROLLOUT.
  22101.  
  22102. APC6 SA1 APCA RESTORE (B3)
  22103. SA2 A1+B1 RESTORE (A5)
  22104. ERRNZ APCB-APCA-1 CODE DEPENDS ON VALUE
  22105. SB3 X1
  22106. SA5 X2
  22107. EQ RPC INITIATE PSEUDO OR COMPOUND ROLLOUT
  22108.  
  22109. * RESTORE REGISTERS AND INITIATE ROLLOUT TO MASS STORAGE.
  22110.  
  22111. APC7 SA1 APCA RESTORE (B3)
  22112. SA2 A1+B1 RESTORE (A5)
  22113. ERRNZ APCB-APCA-1 CODE DEPENDS ON VALUE
  22114. SB3 X1
  22115. SA5 X2
  22116. EQ APC1 INITIATE ROLLOUT TO MASS STORAGE
  22117.  
  22118.  
  22119. APCA CON 0 (B3) SAVE AREA
  22120. APCB CON 0 (A5) SAVE AREA
  22121. APCC CON 0 EJT ORDINAL
  22122. RPC SPACE 4,20
  22123. ** RPC - INITIATE PSEUDO-ROLLOUT OR PCP ROLLOUT.
  22124. *
  22125. * ENTRY (B3) = EXIT ADDRESS.
  22126. * (B4) = PCPA ADDRESS.
  22127. * (B5) = PCP NUMBER.
  22128. * (B6) = -1 IF COMPOUND ROLLOUT.
  22129. * = 0 IF SIMPLE PSEUDO-ROLLOUT.
  22130. * .GT. 0 IF SIMPLE PCP ROLLOUT.
  22131. * (B7) = CPA ADDRESS IF SIMPLE PSEUDO-ROLLOUT OR
  22132. * COMPOUND ROLLOUT.
  22133. * = PCPA ADDRESS IF SIMPLE PCP ROLLOUT.
  22134. *
  22135. * EXIT (B3) = UNCHANGED.
  22136. * TO *APQ*.
  22137. *
  22138. * USES X - ALL.
  22139. * A - 1, 2, 3, 6.
  22140. * B - 4, 6, 7.
  22141. *
  22142. * CALLS APQ.
  22143.  
  22144.  
  22145. RPC BSS 0 ENTRY
  22146. SX5 B1 *1RO* FUNCTION CODE - 2
  22147. SX7 B1
  22148. GT B6,B0,RPC1 IF SIMPLE PCP ROLLOUT
  22149. TA1 POTS,SDA
  22150. SX5 -B6
  22151. IX6 X1+X7 INCREMENT PSEUDO-ROLLOUT COUNTER
  22152. SA6 A1+
  22153. EQ B6,B0,RPC2 IF SIMPLE PSEUDO-ROLLOUT
  22154. RPC1 TA1 PCTS,SDA INCREMENT PCP ROLLOUT COUNTER
  22155. SA3 B4+TFSW GET PCP EJT ORDINAL
  22156. IX6 X1+X7
  22157. LX3 -48
  22158. SA6 A1+
  22159. MX0 -12
  22160. BX3 -X0*X3 PCP JOB EJT ORDINAL
  22161. CX6 X3,EJT CONVERT EJT ORDINAL TO OFFSET
  22162. TA3 X6+JSNE,EJT READ PCP EJT ENTRY
  22163. BX6 X3+X7 SET JOB INTERLOCK
  22164. SA6 A3
  22165. RPC2 SA2 RPCA
  22166. SX4 B5+ PCP NUMBER
  22167. LX5 24
  22168. IX2 X2+X5 SET *1RO* FUNCTION CODE
  22169. BX6 X2+X4 MERGE PCP NUMBER INTO *1RO* CALL
  22170. SB6 B6-B1
  22171. SB4 /MONITOR/LA1RO SET *1RO* FAST PP LOAD TABLE INDEX
  22172. NG B6,/MONITOR/APQ IF NOT SIMPLE PCP ROLLOUT
  22173. TB7 SCA SET SYSTEM CONTROL POINT ASSIGNMENT
  22174. EQ /MONITOR/APQ ASSIGN PP
  22175.  
  22176.  
  22177. RPCA VFD 18/3L1RO,6/0,12/2,24/0 *1RO* REQUEST
  22178.  
  22179. ENDBLK
  22180. BLOCK CP830,(CYBER 810/830 RESIDENT CODE.),MONITOR
  22181. CSP SPACE 4,20
  22182. ** CSP - CHECK FOR SPECIAL PP PROGRAM.
  22183. *
  22184. * ON CYBER 810/830 MAINFRAMES WITH 20 PPS, CERTAIN PROGRAMS
  22185. * ARE ASSIGNED ONLY TO BARREL 1.
  22186. *
  22187. * ENTRY (X6) = PP CALL.
  22188. * (X2) = AVAILABLE PP FLAGS.
  22189. * (B7) = CP ADDRESS.
  22190. *
  22191. * EXIT (X2) = UPDATED AVAILABLE PP FLAGS.
  22192. * (APQC) = PP SELECTION MASK.
  22193. *
  22194. * USES X - 2, 3, 4, 7.
  22195. * A - 4, 7.
  22196.  
  22197.  
  22198. CSP BSS 0 ENTRY
  22199. SA4 CSPB PRESET TABLE SEARCH
  22200. MX3 18
  22201. BX3 X3*X6 GET PACKAGE NAME
  22202. LX3 18
  22203. MX7 -18 GET PP ROUTINE
  22204. BX7 -X7*X4
  22205. IX7 X3-X7
  22206. ZR X7,CSP2 IF *1AJ* CALL
  22207. PL X7,CSP1 IF SYSTEM CALL (*1XX* PP NAME)
  22208. SA4 CSPA-1 PRESET ALTERNATE TABLE SEARCH
  22209.  
  22210. * CHECK FOR SPECIAL PP-S.
  22211.  
  22212. CSP1 SA4 A4+B1 READ NEXT ENTRY
  22213. MX7 -18 GET PP ROUTINE
  22214. BX7 -X7*X4
  22215. IX7 X3-X7
  22216. NG X7,APQ1.0 IF PACKAGE NAME NOT IN TABLE
  22217. NZ X7,CSP1 IF NO MATCH
  22218.  
  22219. * ASSIGN SPECIFIED BARREL.
  22220.  
  22221. CSP2 MX7 20
  22222. LX7 -12
  22223. BX7 X7*X4
  22224. BX2 X7*X2
  22225. SA7 APQC
  22226. EQ APQ1.0 RETURN TO *APQ*
  22227. CSP SPACE 4,10
  22228. **** LIST OF PP ROUTINES AND ASSOCIATED BARREL.
  22229. *
  22230. *T 12/ 0, 20/ B, 10/ 0, 18/ PP.
  22231. * B - BARREL TO LOAD PP ROUTINE.
  22232. * PP - PP ROUTINE NAME.
  22233. *
  22234. * NOTE - BOTH LISTS MUST BE IN ASCENDING ALPHABETICAL ORDER.
  22235.  
  22236.  
  22237. * SPECIAL SYSTEM ROUTINES.
  22238.  
  22239. CSPA VFD 12/0,20/BARREL1,10/0,18/3LCPD *CPD*
  22240. VFD 12/0,20/BARREL1,10/0,18/3LLDD *LDD*
  22241. VFD 12/0,20/BARREL1,10/0,18/3LLDQ *LDQ*
  22242. VFD 12/0,20/BARREL1,10/0,18/3LLDR *LDR*
  22243. VFD 12/0,20/BARREL1,10/0,18/3LMP3 *MP3*
  22244. VFD 12/0,20/BARREL1,10/0,18/3LMTE *MTE*
  22245. VFD 12/0,20/BARREL1,10/0,18/3LNDR *NDR*
  22246. VFD 12/0,20/BARREL1,10/0,18/3LPFU *PFU*
  22247. VFD 12/0,20/BARREL1,10/0,18/3LTCS *TCS*
  22248. VFD 12/0,20/BARREL1,10/0,18/3LVER *VER*
  22249.  
  22250. CSPB VFD 12/0,20/BARREL1,10/0,18/3L1AJ *1AJ*
  22251. VFD 12/0,20/BARREL1,10/0,18/3L1KB *1KB*
  22252. VFD 12/0,20/BARREL1,10/0,18/3L1LT *1LT*
  22253. VFD 12/0,20/BARREL1,10/0,18/3L1MS *1MS*
  22254. VFD 12/0,20/BARREL1,10/0,18/3L1MT *1MT*
  22255. VFD 12/0,20/BARREL1,10/0,18/3L1PC *1PC*
  22256. VFD 12/0,20/BARREL1,10/0,18/3L1PD *1PD*
  22257. VFD 12/0,20/BARREL1,10/0,18/3L1PL *1PL*
  22258. VFD 12/0,20/BARREL1,10/0,18/3L1PM *1PM*
  22259. VFD 12/0,20/BARREL1,10/0,18/3L1RI *1RI*
  22260. VFD 12/0,20/BARREL1,10/0,18/3L1RO *1RO*
  22261. VFD 12/0,20/BARREL0,10/0,18/3L1VN *1VN*
  22262. VFD 12/0,20/BARREL1,10/0,18/3L1VO *1VO*
  22263. CON -0 END OF TABLE
  22264.  
  22265. BARREL0 EQU 1777BS10
  22266. BARREL1 EQU 1777B
  22267. ****
  22268.  
  22269. ENDBLK
  22270. BLOCK CP176,(CYBER 176 RESIDENT CODE.),MONITOR
  22271. BNJ SPACE 4,10
  22272. ** BNJ - EXTENSION FOR THE CYBER 176.
  22273. *
  22274. * ENTRY (A6) = ADDRESS-1 OF EEA REGISTER.
  22275.  
  22276.  
  22277. BNJ30 TX7 EEAD SET ERROR EXIT ADDRESS
  22278. LX7 36
  22279. SA7 A6+B1
  22280. JP /MONITOR/MTR RETURN
  22281. CJS SPACE 4,10
  22282. ** CJS - EXTENSION FOR THE CYBER 176.
  22283. *
  22284. * ENTRY (B4) = RETURN ADDRESS.
  22285. * (B6) = EXCHANGE PACKAGE ADDRESS.
  22286.  
  22287.  
  22288. CJS7 SA4 B6+3 CLEAR PSD
  22289. MX2 12
  22290. LX2 -12
  22291. BX6 -X2*X4
  22292. SA6 A4
  22293. JP B4 RETURN
  22294. CPT SPACE 4,10
  22295. ** CPT - EXTENSION FOR THE CYBER 176.
  22296.  
  22297.  
  22298. CP76 SA1 CXP+15B ACCUMULATED INTERRUPT COUNT
  22299. SA2 CL+CPBT+A0 READ BASE TIME
  22300. TB6 READ CPU CLOCK
  22301. MX7 -18
  22302. SX6 B6
  22303. BX6 -X7*X6
  22304. IX6 X1+X6
  22305. SA6 A2+ SET NEW BASE TIME
  22306. IX0 X6-X2 TIME USED IN MACHINE UNITS
  22307. EQ /MONITOR/CPT1 COMPUTE CP TIME USED
  22308. CXJ SPACE 4,10
  22309. ** CXJ - CLOCK INTERRUPT NULL PROGRAM.
  22310. *
  22311. * ENTRY (X0) = 400000B.
  22312. * (X5) = INTERRUPT COUNT.
  22313.  
  22314.  
  22315. CXJ XJ CXP RETURN TO CALLER
  22316. IX5 X5+X0 COUNT EXCHANGE
  22317. JP CXJ RETURN
  22318. EXP SPACE 4,10
  22319. ** EXP - ERROR EXCHANGE PROGRAM.
  22320. *
  22321. * ENTRY (X0) = 77770000777777777777B.
  22322. * (X4) = 1.
  22323. * (X5) = COUNT OF EXCHANGES.
  22324.  
  22325.  
  22326. EXP XJ 0
  22327. SA1 B2+3 GET PSD
  22328. MX6 3
  22329. MX2 9
  22330. LX6 -9
  22331. BX6 X6*X1 EXTRACT MODE BITS
  22332. BX2 X6+X2
  22333. IX5 X5+X4 COUNT EXIT
  22334. LX2 -12
  22335. BX7 -X0*X1
  22336. BX2 X2*X1 EXTRACT CONDITION BITS
  22337. SX3 B2
  22338. ZR X7,EXP1 IF NO ERROR CONDITIONS - CPUMTR LOST
  22339. AX2 37
  22340. ZR X2,EXP3 RETURN IF ERROR CONDITION PERMITTED
  22341. LX2 -6
  22342. LX6 11
  22343. PL X2,EXP1 IF NO SCM DIRECT RANGE ERROR
  22344. LX2 1
  22345. AX2 1 CLEAR SCM RANGE CONDITION
  22346. MI X6,EXP1 IF MODE 1 NOT SELECTED
  22347. ZR X2,EXP3 IF NO OTHER ERRORS
  22348. SB3 EXP
  22349. EXP1 SX7 B2
  22350. LX3 30
  22351. BX6 X3+X7
  22352. SA6 B0 *ALERT* DSD
  22353. EXP2 SB3 B3-B1
  22354. NZ B3,EXP2 DELAY
  22355. SA2 B0 CHECK FOR FLAG CLEARED
  22356. NZ X2,EXP2 HANG UNLESS CLEARED
  22357. SA2 B2+6 READ MA (NEA)
  22358. EXP3 BX6 X0*X1 CLEAR CONDITION BITS AND RETURN
  22359. SA6 A1
  22360. JP EXP RETURN
  22361. PPE SPACE 4,20
  22362. ** PPE - PROCESS PSD ERROR.
  22363. *
  22364. * ENTRY (B2) = USER EXCHANGE PACKAGE ADDRESS.
  22365. * (B3) = RA OF CONTROL POINT.
  22366. *
  22367. * EXIT TO *MTR1* IF NO ERRORS.
  22368. * TO *SEF* OTHERWISE.
  22369.  
  22370.  
  22371. PPE SA1 B2+3 CHECK CONDITION FLAGS (PSD)
  22372. MX6 3
  22373. MX2 9
  22374. LX6 -9
  22375. BX6 X6*X1 MODE BITS
  22376. BX2 X2+X6 ADD MASK TO CHECK ALL NON-MODE CONDITIONS
  22377. LX2 -12
  22378. BX2 X2*X1
  22379. ZR X2,/MONITOR/MTRX IF NO ERROR CONDITION
  22380. LX1 59-39
  22381. TNG X1,(/IH819/PPE,IH819,/MONITOR/MTRX) IF STEP
  22382. SX7 ARET ARITHMETIC ERROR
  22383.  
  22384. * MAP ERROR AND P ADDRESS INTO RA+0.
  22385.  
  22386. SX6 B0+ INITIALIZE MAPPING REGISTER
  22387. SX1 40B CM PARITY BIT
  22388. LX2 59-46
  22389. PL X2,PPE1 IF NO SCM SECDED ERROR
  22390. BX6 X1+X6 MAP SCM SECDED AS CM PARITY
  22391. PPE1 MX0 5 MASK FOR ADDRESS RANGE ERRORS
  22392. LX2 1
  22393. BX3 X0*X2
  22394. SX1 B1 ADDRESS RANGE BIT
  22395. MX0 2 MASK FOR INFINITE AND INDEFINTITE MODES
  22396. ZR X3,PPE2 IF NO RANGE ERRORS
  22397. BX6 X1+X6 MAP ALL RANGE ERRORS AS ADDRESS RANGE
  22398. PPE2 LX2 10 MAP OVERFLOW AND INDEFINITE
  22399. LX0 3
  22400. BX1 X0*X2
  22401. BX6 X1+X6
  22402. MX0 18 ADD P ADDRESS TO MAPPED BITS
  22403. SA1 B2
  22404. LX6 48
  22405. LX0 -6
  22406. BX1 X0*X1
  22407. LX1 -6
  22408. SA2 B3 INSERT MAPPED BITS AND P IN RA+0
  22409. SA2 X2
  22410. MX0 -30
  22411. BX6 X1+X6
  22412. BX2 -X0*X2
  22413. BX6 X2+X6
  22414. SA6 A2
  22415. EQ /MONITOR/SEF SET ERROR FLAG
  22416. TIM SPACE 4,10
  22417. ** TIM - EXTENSION FOR THE CYBER 176.
  22418.  
  22419.  
  22420. * ACCUMULATED JOB CLOCK CYCLE COUNT.
  22421.  
  22422. TIM7 SB4 TIM9 SET *DSB* RETURN ADDRESS
  22423. SA2 CPTA+A0 QUARTER NANOUNITS TO CLOCK CYCLES
  22424. PX2 X2
  22425. NX2 X2
  22426. EQ /PROGRAM/DSB DIVIDE 60 BIT INTEGER
  22427.  
  22428. * ACCUMULATED CLOCK CYCLE COUNT SINCE DEADSTART.
  22429.  
  22430. TIM8 SA1 CL+CPBT+A0 READ BASE TIME
  22431. BX6 X1
  22432. TIM9 PX1 X6
  22433. SB3 A5-B1 RESTORE RA
  22434. EQ /MONITOR/TIM1 STORE RESULT
  22435.  
  22436. ENDBLK
  22437. BLOCK BUFIO,(BUFFERED I/O PROCESSING.)
  22438. DLB SPACE 4,10
  22439. ** DLB - DELETE BUFFER FROM I/O QUEUE.
  22440. *
  22441. * ENTRY (A2) = ADDRESS OF *UNCT* WORD IN *PUT* ENTRY.
  22442. * (A3) = CONTROL BUFFER ADDRESS.
  22443. * (B3) = RETURN ADDRESS.
  22444. * (X2) = *UNCT* WORD OF *PUT* ENTRY.
  22445. *
  22446. * USES X - 1, 2, 3, 4, 5, 6, 7.
  22447. * A - 2, 4, 6, 7.
  22448. * B - 5, 7.
  22449.  
  22450.  
  22451. DLB SA4 A3+IOLK CHECK I/O LINKUP
  22452. MX5 -12
  22453. MX7 -24
  22454. LX5 12
  22455. LX7 24
  22456. SX6 5000B I/O INTERLOCK, WRITE FLAGS
  22457. BX7 X7*X4 CLEAR QUEUE LINKAGE
  22458. LX4 -24
  22459. MX5 -12
  22460. LX6 48
  22461. BX3 -X5*X4 FORWARD LINK
  22462. BX7 -X6*X7 CLEAR FLAGS
  22463. LX4 -12
  22464. SA7 A4
  22465. BX6 -X5*X4 BACKWARD LINK
  22466. BX7 -X5*X4
  22467. SB7 X3+
  22468. NZ X6,DLB2 IF NOT FIRST BUFFER IN CHAIN
  22469. BX2 X5*X2
  22470. BX2 X2+X3 INSERT NEW FIRST
  22471. EQ DLB3 PROCESS FORWARD LINK
  22472.  
  22473. DLB2 LX7 CBTLS PROCESS BACKWARD LINK
  22474. TA4 X7+IOLK,CBT
  22475. LX4 -24
  22476. BX7 X5*X4 FORWARD LINK
  22477. BX7 X7+X3 INSERT NEW FORWARD LINK
  22478. LX7 24
  22479. SA7 A4
  22480. DLB3 ZR X3,DLB4 IF LAST BUFFER
  22481. LX3 CBTLS PROCESS FORWARD LINK
  22482. TA4 X3+IOLK,CBT
  22483. LX4 -36
  22484. BX4 X5*X4 CLEAR OLD BACKWARD LINK
  22485. BX7 X4+X6 INSERT NEW BACKWARD LINK
  22486. LX7 36
  22487. SA7 A4+
  22488. DLB4 SX4 B1 DECREMENT QUEUE SIZE
  22489. LX4 24
  22490. LX5 12
  22491. IX6 X2-X4
  22492. BX3 -X5*X2 CURRENT BUFFER
  22493. TX2 A3,-CBT COMPUTE DELETED BUFFER ORDINAL
  22494. LX3 -12
  22495. AX2 CBTLS
  22496. BX7 X3-X2
  22497. NZ X7,DLB6 IF NOT CURRENT BUFFER
  22498. BX6 X5*X6 ADVANCE TO NEXT QUEUE ENTRY
  22499. SX2 B7
  22500. NZ B7,DLB5 IF NOT END OF QUEUE
  22501. SA4 A2+B1
  22502. ERRNZ HSCT-UNCT-1 INDEXES MUST BE CONSECUTIVE
  22503. MX3 -12
  22504. MX7 59
  22505. BX2 -X3*X6 FIRST REQUEST
  22506. LX7 58
  22507. BX6 X7*X6 CLEAR REQUEST(S) WAITING FLAG
  22508. BX7 X5*X4 CLEAR REQUEST COUNT
  22509. SA7 A4
  22510.  
  22511. * SET NEW CURRENT *CB* ORDINAL IN THE *PUT* SO AS TO EXCLUDE
  22512. * THOSE BUFFERS CONTAINING PREVIOUSLY PROCESSED ERRORS.
  22513.  
  22514. DLB5 SB6 DLB6
  22515. EQ SCB SELECT CURRENT BUFFER IN I/O QUEUE
  22516.  
  22517. DLB6 SA6 A2+ RESET *PUT* ENTRY
  22518.  
  22519. * DECREMENT DEVICE ACTIVITY COUNT.
  22520.  
  22521. SA1 A3+FSTC EST ORDINAL
  22522. MX3 -12
  22523. LX1 12
  22524. BX7 -X3*X1 EST ORDINAL
  22525. CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
  22526. TA4 X4+EQDE,EST READ EST ENTRY
  22527. BX7 -X3*X4 *MST* ADDRESS/10B
  22528. LX7 3
  22529. SA4 X7+DALL DECREMENT ACTIVITY COUNT
  22530. SB5 A2+ SAVE *PUT* ENTRY ADDRESS
  22531. SA2 X7+CTLL
  22532. BX1 X4
  22533. LX1 59-36
  22534. LX2 36
  22535. BX5 -X3*X2
  22536. SX5 X5-1
  22537. PL X5,DLB7 IF NO UNDERFLOW
  22538. SX5 0
  22539. DLB7 BX2 X2*X3
  22540. BX7 X2+X5
  22541. LX7 24
  22542. SA7 A2 UPDATE *CTLL*
  22543. PL X1,DLB8 IF NO RECENT *DSWM* ACCESS TO DEVICE
  22544. LX1 59-37-59+36
  22545. NG X1,DLB10 IF UNIT IS BEING ACCESSED VIA *DSWM*
  22546. DLB8 MX7 54
  22547. BX2 X7*X5
  22548. LX7 48
  22549. ZR X2,DLB9 IF NOT ACTIVITY OVERFLOW
  22550. SX5 77B
  22551. DLB9 BX4 X7*X4 CLEAR OLD ACTIVITY
  22552. LX5 48
  22553. BX7 X4+X5 ADD IN COMPUTED ACTIVITY
  22554. SA7 A4 UPDATE *DALL*
  22555. DLB10 LX6 59-58
  22556. SX3 B1
  22557. PL X6,/MONITOR/RB3 IF *RW* FLAG CLEAR
  22558. ERRNZ HSCT-UNCT-1 CODE DEPENDS ON VALUE
  22559. SA4 B5+B1
  22560. LX3 12
  22561. IX7 X4+X3 INCREMENT REQUESTS PROCESSED
  22562. LX4 59-12-8
  22563. ERRNZ RCTH-400B VALUE MUST BE 2**8
  22564. NG X4,/MONITOR/RB3 IF REQUEST COUNT LIMIT
  22565. SA7 A4+
  22566. JP B3 RETURN
  22567. HHE SPACE 4,10
  22568. ** HHE - HANG ON HALF-EXIT.
  22569. *
  22570. * ENTRY VIA *RJ* SO THAT ERROR EXIT ADDRESS IS SAVED.
  22571. *
  22572. * EXIT NONE (IT NEVER DOES).
  22573. *
  22574. * CALLS MSC.
  22575.  
  22576.  
  22577. HHE PS ENTRY
  22578. SX1 HHEA * ESM ERROR - BUFFERED I/O.*
  22579. SB5 HHE1 *MSC* RETURN ADDRESS
  22580. EQ /MONITOR/MSC SET MESSAGE IN SYSTEM CONTROL POINT
  22581.  
  22582. HHE1 EQ * HANG
  22583.  
  22584.  
  22585. HHEA DATA C* ESM ERROR - BUFFERED I/O.*
  22586. IOC SPACE 4,25
  22587. ** IOC - I/O CONTROL.
  22588. *
  22589. * ENTRY (X2) = 24/ FCN, 24/ RCD, 12/CBO
  22590. *
  22591. * FCN = 0, ENTER BUFFER IN UNIT I/O QUEUE.
  22592. * = 2, SET RECALL CONTROL ON BUFFER.
  22593. * = 3, 819 I/O RESTART.
  22594. *
  22595. * RCD = RECALL DATA.
  22596. *
  22597. * CBO = CONTROL BUFFER ORDINAL.
  22598. *
  22599. * EXIT ((B7) + 16B) = RESPONSE.
  22600. *
  22601. * RESPONSE = 0, I/O COMPLETE.
  22602. * 1, RECALL CONTROL SET.
  22603. *
  22604. * USES X - ALL.
  22605. * A - 1, 2, 3, 4, 6, 7.
  22606. * B - 3, 4, 5, 6, 7.
  22607. *
  22608. * CALLS /IH819/INR.
  22609.  
  22610.  
  22611. IOC9 SA2 A3+IOLK
  22612. SA4 A3+LSLK
  22613. PL X2,IOC10 IF I/O INTERLOCK CLEAR
  22614. SX6 1
  22615. BX7 X4+X7
  22616. NO
  22617. SA7 A4+
  22618. IOC10 TA6 16B,SCA STORE RESPONSE
  22619.  
  22620. IOCX SX7 B0+ CLEAR I/O REQUEST
  22621. TB7 SCA SYSTEM CONTROL POINT
  22622. TA7 IORQ
  22623. EQ /MONITOR/MTRX RETURN
  22624.  
  22625.  
  22626. IOC MX4 -12
  22627. BX4 -X4*X2 CONTROL BUFFER ORDINAL
  22628. MX7 -24
  22629. LX2 -12
  22630. SB6 X4 CONTROL BUFFER ORDINAL
  22631. BX7 -X7*X2 RECALL DATA
  22632. LX2 -24
  22633. LX4 CBTLS
  22634. SB7 X2 FUNCTION CODE
  22635. TA3 X4+PAD1,CBT CBT ADDRESS
  22636. MX2 -12
  22637. TA4 X4+HSLK,CBT GET *PUT* ORDINAL
  22638. BX2 -X2*X4 *PUT* ORDINAL
  22639. LX2 PUTLS
  22640. SX6 B0+
  22641. TA2 X2+UNCT,PUT *PUT* ENTRY
  22642. ZR B7,IOC0 IF ENTER BUFFER REQUEST
  22643. SB7 B7-2
  22644. ZR B7,IOC9 IF TO SET RECALL CONTROL REQUEST
  22645. TEQ (/IH819/RIO,IH819,/BUFIO/IOCX) RESTART 819 I/O
  22646.  
  22647. * ENTER REQUEST IN UNIT I/O QUEUE.
  22648.  
  22649. IOC0 MX7 -12
  22650. SB3 B0 CLEAR FORWARD LINK
  22651. BX1 -X7*X2 FIRST
  22652. SB7 B1 SET INITIAL PASS
  22653. NZ X1,IOC1 IF NOT EMPTY QUEUE
  22654. SX6 B6 CONTROL BUFFER ORDINAL
  22655. BX2 X6+X2
  22656. LX6 12
  22657. BX2 X6+X2
  22658. SB4 B0 CLEAR BACKWARD LINK
  22659. SX4 B6 SET INITIAL ORDINAL
  22660. EQ IOC4 ENTER REQUEST IN QUEUE
  22661.  
  22662. IOC1 SB5 X1 PREVIOUS ORDINAL
  22663. LX1 CBTLS
  22664. TA4 X1+PAD1,CBT OLD DISK ADDRESS
  22665. MX1 24
  22666. LX1 -12
  22667. BX7 X1*X4
  22668. BX6 X1*X3
  22669. IX6 X7-X6
  22670. NO
  22671. PL X6,IOC2 IF SLOT FOUND
  22672. SA1 A4+IOLK-PAD1
  22673. SX5 A4 PREVIOUS CONTROL BUFFER ADDRESS
  22674. SB4 B5 PREVIOUS CONTROL BUFFER ORDINAL
  22675. MX7 -12
  22676. LX1 -24
  22677. SB7 B0 CLEAR INITIAL PASS FLAG
  22678. BX1 -X7*X1
  22679. NZ X1,IOC1 IF NOT END OF QUEUE
  22680. LX7 36
  22681. BX4 -X7*X4 EXTRACT CYLINDER NUMBERS
  22682. BX7 -X7*X3
  22683. IX7 X7-X4
  22684. SX7 X7-CCTH
  22685. NG X7,IOC3 IF NOT BEYOND THRESHOLD
  22686. SX7 B1 SET REQUEST(S) WAITING FLAG
  22687. LX7 58
  22688. BX2 X7+X2
  22689. EQ IOC3 ENTER REQUEST AT END OF QUEUE
  22690.  
  22691. IOC2 ZR B7,IOC3 IF NOT START OF QUEUE
  22692. SX7 B1+
  22693. SB3 B5 FORWARD LINK
  22694. LX7 58
  22695. MX6 48
  22696. BX2 X7+X2 SET REQUEST(S) WAITING FLAG
  22697. SB4 B0 BACKWARD LINK
  22698. SX4 B6 INSERT NEW START OF QUEUE
  22699. BX6 X6*X2
  22700. BX2 X4+X6
  22701. EQ IOC4 ENTER BUFFER IN QUEUE
  22702.  
  22703. * ENTER NEW CONTROL BUFFER IN UNIT I/O QUEUE.
  22704.  
  22705. IOC3 SA3 X5+IOLK LINK TO PREVIOUS ENTRY
  22706. MX7 -12
  22707. LX3 -24
  22708. BX5 -X7*X3
  22709. BX7 X7*X3
  22710. SB3 X5 FORWARD LINK
  22711. SX4 B6 NEW ENTRY ORDINAL
  22712. BX7 X4+X7
  22713. LX7 24
  22714. SA7 A3+
  22715. IOC4 LX4 CBTLS NEW ENTRY LINK WORD
  22716. TA3 X4+IOLK,CBT
  22717. MX7 36
  22718. LX3 -24
  22719. BX7 X7*X3 CLEAR LINK FIELDS
  22720. SX6 B4 LINK IN NEW ENTRY
  22721. LX6 12
  22722. BX7 X7+X6
  22723. SX3 B3
  22724. BX6 X3+X7
  22725. MX7 1 SET I/O INTERLOCK
  22726. LX6 24
  22727. BX6 X7+X6
  22728. LX7 24+1
  22729. SA6 A3
  22730. IX2 X2+X7 INCREMENT QUEUE SIZE
  22731. ZR B3,IOC6 IF END OF QUEUE
  22732. LX3 CBTLS PROCESS LINK TO NEXT ENTRY
  22733. TA3 X3+IOLK,CBT
  22734. MX7 48
  22735. LX3 -36
  22736. BX7 X7*X3 CLEAR BACKWARD LINK
  22737. SX4 B6 NEW ENTRY ORDINAL
  22738. BX7 X7+X4
  22739. LX7 36
  22740. SA7 A3+
  22741. IOC6 LX2 -12 CHECK CURRENT *CB* ORDINAL
  22742. MX0 -12
  22743. SX4 B6 ORDINAL OF NEW BUFFER
  22744. BX7 -X0*X2
  22745. MX5 -54
  22746. NZ X7,IOC7 IF CURRENT *CB* PRESENT
  22747. BX2 X2+X4
  22748. IOC7 LX2 12
  22749. BX6 X2 UPDATE *PUT* ENTRY
  22750. LX4 CBTLS
  22751. SA6 A2
  22752.  
  22753. * INCREMENT DEVICE ACTIVITY COUNT.
  22754.  
  22755. TA4 X4+FSTC,CBT
  22756. LX4 12
  22757. BX7 -X0*X4 EST ORDINAL
  22758. CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
  22759. TA4 X4+EQDE,EST READ EST ENTRY
  22760. BX7 -X0*X4 MST ADDRESS / 10B
  22761. LX7 3
  22762. SA4 X7+DALL INCREMENT ACTIVITY COUNT
  22763. SX7 B1
  22764. SA3 A4+CTLL-DALL
  22765. LX7 24
  22766. IX6 X3+X7
  22767. SA6 A3
  22768. LX6 -24
  22769. BX3 -X0*X6 EXTRACT QUEUE SIZE
  22770. LX4 59-37
  22771. NG X4,IOC8.1 IF DEVICE IS BEING ACCESSED VIA *DSWM*
  22772. LX3 54
  22773. SX7 X3 MOST SIGNIFICANT SIX BITS
  22774. LX4 6-59+37
  22775. ZR X7,IOC8 IF NOT OVERFLOW
  22776. MX3 6
  22777. IOC8 BX4 -X5*X4 REMOVE OLD COUNT
  22778. BX7 X3+X4
  22779. LX7 -6 UPDATE COUNT
  22780. SA7 A4
  22781. IOC8.1 NG X2,IOCX IF UNIT INTERLOCKED
  22782. TNO /BUFIO/IOCX,IHPFMD IF NOT 819
  22783. MX5 1
  22784. BX6 X5+X2 SET UNIT INTERLOCK
  22785. LX2 -12
  22786. BX0 -X0*X2
  22787. SA6 A2+
  22788. SB3 IOCX *INR* RETURN ADDRESS
  22789. EQ /IH819/INR INITIATE REQUEST
  22790. SBR SPACE 4,15
  22791. ** SBR - SET BUFFER RECALL.
  22792. *
  22793. * ENTRY (B3) = RETURN ADDRESS.
  22794. * (A3) = CONTROL BUFFER ADDRESS.
  22795. *
  22796. * IF 819 DEVICES -
  22797. * (B4) = CHANNEL NUMBER.
  22798. * (B7) = 0 IF INPUT XP, 20 IF OUTPUT XP.
  22799. *
  22800. * USES X - 3, 4, 6.
  22801. * A - 4, 6.
  22802. *
  22803. * CALLS /IHPFMD/RPP, /IH819/RPP.
  22804.  
  22805.  
  22806. SBR SA4 A3+LSLK CHECK FOR RECALL CONTROL
  22807. MX3 36
  22808. BX6 X3*X4 CLEAR RECALL CONTROL
  22809. BX4 -X3*X4
  22810. SA6 A4
  22811. ZR X4,/MONITOR/RB3 IF NO RECALL CONTROL SET
  22812. BX6 X4
  22813. AX4 18
  22814. TNZ X4,(/IHPFMD/RPP,IHPFMD,/IH819/RPP) IF NOT PP RECALL
  22815. SA4 X6 SIGNAL PP TO REISSUE
  22816. SX3 B1
  22817. LX3 46
  22818. BX6 X3+X4
  22819. SA6 A4
  22820. JP B3 RETURN
  22821. SCB SPACE 4,10
  22822. ** SCB - SELECT CURRENT BUFFER FOR I/O QUEUE.
  22823. *
  22824. * ENTRY (B6) = RETURN ADDRESS.
  22825. * (X2) = ORDINAL OF FORWARD LINKED BUFFER.
  22826. * (X6) = *UNCT* WORD WITH CURRENT *CB* FIELD CLEAR.
  22827. *
  22828. * EXIT (X6) = NEW *UNCT* WORD FOR *PUT* ENTRY.
  22829. *
  22830. * USES A - 4.
  22831. * X - 2, 3, 4, 5, 6, 7.
  22832.  
  22833.  
  22834. SCB LX6 -24 POSITION UNIT QUEUE SIZE
  22835. MX3 -12
  22836. BX7 -X3*X6 EXTRACT QUEUE SIZE
  22837. LX6 24
  22838. SCB1 ZR X7,RB6 IF QUEUE EMPTY
  22839. LX2 CBTLS
  22840. BX5 X6 PRESERVE *PUT* INFORMATION
  22841. TA4 X2+HSLK,CBT
  22842. LX2 12-CBTLS REBUILD *UNCT* WORD
  22843. BX6 X5+X2
  22844. PL X4,RB6 IF NOT *CBT* ENTRY WITH ERRORS
  22845. MX6 -59
  22846. SA4 A4-B1
  22847. ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
  22848. LX6 -1
  22849. NO
  22850. BX5 -X6*X5 CLEAR REQUESTS WAITING FLAG
  22851. LX4 -24
  22852. SX7 X7-1 DECREMENT QUEUE SIZE
  22853. BX2 -X3*X4
  22854. LX6 X5
  22855. NZ X2,SCB1 IF NOT END OF QUEUE
  22856. SX2 X5+
  22857. EQ SCB1 CHECK START OF QUEUE
  22858. TITLE CPU MONITOR BUFFERED I/O HANDLER.
  22859. BFM SPACE 4,25
  22860. ** BFM - *BFMM* MONITOR FUNCTION.
  22861. *
  22862. * ENTRY AT *BFM* IF MONITOR MODE *BFMM* FUNCTION
  22863. * TO BE PROCESSED.
  22864. * AT *BFM3* IF PROGRAM MODE *BFMM* FUNCTION
  22865. * TO BE PROCESSED.
  22866. * REFER TO *BFMM* DOCUMENTATION FOR OUTPUT REGISTER
  22867. * AND FNT DESCRIPTION.
  22868. *
  22869. * EXIT TO /MONITOR/PMR TO SWITCH TO PROGRAM MODE.
  22870. * TO /MONITOR/PPR1 TO EXIT MONITOR MODE FUNCTION.
  22871. * TO /PROGRAM/PRG OR /PROGRAM/PRG1 TO EXIT
  22872. * PROGRAM MODE FUNCTION.
  22873. * REFER TO *BFMM* DOCUMENTATION FOR OUTPUT REGISTER
  22874. * EXIT DISCRIPTION.
  22875. *
  22876. * ERROR TO /MONITOR/HNG IF INCORRECT *BFMM* OPERATION CODE
  22877. * OR IF INVALID SUBFUNCTION OR INVALID MULTIPLE
  22878. * WRITE BUFFER COUNT FOR *BMVI* OPERATION.
  22879. * TO /PROGRAM/HNG IF NEXT TRACK NOT RESERVED WHEN
  22880. * ADVANCING TRACK/SECTOR FOR MULTIPLE WRITE BUFFER
  22881. * REQUEST.
  22882. *
  22883. * CALLS LBM, LMM, SNT.
  22884.  
  22885.  
  22886. * MONITOR MODE *BFMM* ENTRY.
  22887.  
  22888. BFM LX1 -12
  22889. AX1 54
  22890. SX2 X1-BMMX
  22891. PL X2,/MONITOR/HNG IF INVALID OPERATION
  22892. SX2 X1-BMVI
  22893. MX0 12
  22894. LX0 -12
  22895. BX4 X0*X5 GET MULTIPLE WRITE BUFFER COUNT
  22896. BX5 -X0*X5 CLEAR EXTRANEOUS PARAMETERS
  22897. NZ X2,/MONITOR/PMR IF NOT VALIDATE OPERATION
  22898.  
  22899. * PROCESS *BMVI* SUBFUNCTION.
  22900.  
  22901. MX3 -6
  22902. BX2 -X3*X5 GET VALIDATE SUBFUNCTION
  22903. MX0 48
  22904. BX5 X0*X5 SET SUBFUNCTION IF VALIDATE FAILS
  22905. ERRNZ BMRD INDEX MUST BE ZERO
  22906. LX5 -12
  22907. SX1 X5 FNT ORDINAL
  22908. SA3 B7+FLSW GET RA
  22909. LX2 6
  22910. LX5 12
  22911. ZR X2,BFM1 IF READ SUBFUNCTION
  22912. SX6 X2-BMRW*100B-100B
  22913. PL X6,/MONITOR/HNG IF INVALID SUBFUNCTION
  22914. SA7 A5+B1 CLEAR *MB*
  22915. BX5 X5+X4 RESET MULTIPLE WRITE BUFFER COUNT
  22916. SA7 A7+B1 CLEAR *MB+1*
  22917. LX4 18
  22918. SX6 X4-11
  22919. PL X6,/MONITOR/HNG IF BUFFER COUNT TOO LARGE
  22920. BX5 X5+X2 SET WRITE/REWRITE OPERATION
  22921. R= X2,BMWR
  22922. BFM1 NG X4,/MONITOR/PMR IF WRITE BUFFER ALREADY INTERLOCKED
  22923. LX3 -RSHF
  22924. MX7 -RMSK
  22925. BX3 -X7*X3 RA / 100B
  22926. LX3 6
  22927. IX3 X3-X1 ABSOLUTE FNT ADDRESS
  22928. SX1 B1
  22929. IX3 X3+X1 *FST* ADDRESS
  22930. IX1 X3+X1
  22931. ERX1 X1 READ I/O LINK WORD
  22932. BX7 -X0*X1
  22933. ZR X7,/MONITOR/PMR IF NO LINK TO VALIDATE
  22934. BX6 X5
  22935. SA6 A5 UPDATE *BFMM* CALL IN OUTPUT REGISTER
  22936. ERX3 X3 READ *FST*
  22937. BX6 X3
  22938. SB6 BFM2 SET RETURN ADDRESS FOR *INB*
  22939. EQ INB VALIDATE AND INTERLOCK BUFFER
  22940.  
  22941. BFM2 SA5 A5
  22942. LX6 12
  22943. MX7 -24
  22944. BX7 -X7*X6
  22945. ZR X7,/MONITOR/PMR IF BUFFER NOT FOUND
  22946. MX0 -6
  22947. LX0 11-5
  22948. BX1 -X0*X6
  22949. NZ X1,/MONITOR/PPR1 IF REJECT CONDITION
  22950. LX0 47-11
  22951. BX6 -X0*X5
  22952. ZR X6,/MONITOR/PPR1 IF NOT MULTIPLE BUFFER REQUEST
  22953. MX1 1 SET BUFFER INTERLOCKED FLAG
  22954. SX7 B0+ CLEAR RESPONSE
  22955. LX1 41-59
  22956. BX5 X5+X1
  22957. EQ /MONITOR/PMR SWITCH TO PROGRAM MODE
  22958.  
  22959. * PROGRAM MODE *BFMM* ENTRY.
  22960. * SET UP CALL TO BUFFER MANAGER.
  22961.  
  22962. BFM3 BX2 X5
  22963. MX0 -12
  22964. LX2 -12
  22965. AX2 54
  22966. TX3 A5-1,-SP
  22967. SB6 X2-BMFO
  22968. ZR X3,BFM5 IF PSEUDO PP
  22969. SA4 A5+1
  22970. BX6 X0*X4 CLEAR *CHRV* FIELD
  22971. SX4 EPNS
  22972. NG B6,BFM4 IF NOT A FLUSH OPERATION
  22973. BX6 X4+X6
  22974. BFM4 SA6 A4+
  22975. BFM5 LX1 59-41
  22976. MX0 -36
  22977. BX5 -X0*X5
  22978. LX5 -12
  22979. SB6 BFM6 SET RETURN ADDRESS FOR *LBM*
  22980. PL X1,LBM IF CURRENT BUFFER NOT INTERLOCKED
  22981. MX0 -RMSK
  22982. EQ BFM7 CHECK FOR MULTIPLE BUFFER REQUEST
  22983.  
  22984. BFM6 MX0 5
  22985. MX7 -24
  22986. BX2 X0*X6
  22987. LX6 12
  22988. BX7 -X7*X6
  22989. NZ X2,/PROGRAM/PRG1 IF REJECT CONDITION
  22990. MX0 -RMSK
  22991. BFM7 SA5 A5 CHECK FOR MULTIPLE BUFFER REQUEST
  22992. MX6 7
  22993. LX6 47-59
  22994. BX1 X6*X5
  22995. ZR X1,/PROGRAM/PRG1 IF NOT MULTIPLE BUFFER REQUEST
  22996.  
  22997. * PROCESS MULTIPLE BUFFER WRITE REQUEST.
  22998.  
  22999. LX5 -12
  23000. SX2 X5 FNT ORDINAL
  23001. SA3 B7+FLSW GET RA
  23002. LX3 -RSHF
  23003. BX3 -X0*X3
  23004. MX0 48
  23005. LX3 6
  23006. IX3 X3-X2 ABSOLUTE FNT ENTRY ADDRESS
  23007. SX2 B1
  23008. IX6 X3+X2
  23009. ERX3 X6 GET FST ENTRY
  23010. SA6 BAFS SAVE FST ADDRESS
  23011. LX1 59-41
  23012. NG X1,BFM8 IF CURRENT BUFFER INTERLOCKED
  23013. IX6 X6+X2 SAVE BUFFER LINK
  23014. ERX2 X6
  23015. BX2 X0*X2
  23016. AX7 12
  23017. BX7 X7+X2
  23018. EWX7 X6
  23019. BFM8 SX1 X1
  23020. ZR X1,BFM16 IF NO MULTIPLE BUFFER COUNT
  23021. BX6 X3 SAVE ORIGINAL FST ENTRY
  23022. LX3 12
  23023. SA6 BFST
  23024. BX6 -X0*X3 GET EQUIPMENT
  23025. CX2 X6,EST CONVERT EST ORDINAL TO OFFSET
  23026. TA2 X2+EQDE,EST READ EST ENTRY
  23027. BX1 -X0*X2 MST ADDRESS/10B
  23028. LX1 3
  23029. SA2 X1+MDGL GET SECTOR LIMIT
  23030. BX2 -X0*X2
  23031. LX1 18
  23032. BX7 X1+X2
  23033. LX3 -24 GET CURRENT SECTOR
  23034. BX4 -X0*X3
  23035. MX6 -LSLBS CALCULATE MOD 40B OF CURRENT SECTOR
  23036. BX4 -X6*X4
  23037. IX6 X3-X4 CALCULATE FIRST SECTOR IN BUFFER
  23038. SA3 BAFS GET ABSOLUTE FST ADDRESS
  23039. SA7 BDDC SAVE DEVICE DESCRIPTION AND BUFFER COUNT
  23040. LX6 12
  23041. EWX6 X3
  23042. SX5 BMWR*100B SET WRITE OPERATION WITH RECALL ALLOWED
  23043.  
  23044. * CHECK FOR END OF TRACK.
  23045.  
  23046. BFM10 SX1 X7 SECTORS PER TRACK
  23047. ERX3 X3 GET FST ENTRY
  23048. SX4 LSLB LOGICAL SECTORS PER I/O BUFFER
  23049. LX3 -12
  23050. IX6 X3+X4 ADVANCE TO FIRST SECTOR IN NEXT BUFFER
  23051. BX2 -X0*X6 GET CURRENT SECTOR
  23052. IX1 X2-X1
  23053. NG X1,BFM12 IF NOT END OF TRACK
  23054. LX7 -18
  23055. SX1 X7 MST ADDRESS
  23056. LX6 -12
  23057. BX0 -X0*X6 GET CURRENT TRACK
  23058. SB6 BFM11 SET RETURN ADDRESS FOR *SNT*
  23059. EQ SNT SET NEXT TRACK
  23060.  
  23061. BFM11 PL X2,/PROGRAM/HNG IF NEXT TRACK NOT ASSIGNED
  23062. MX0 36 CLEAR CURRENT TRACK AND SECTOR
  23063. BX3 X0*X3
  23064. LX6 12
  23065. BX6 X3+X6 SET NEXT TRACK
  23066. BFM12 SA1 BAFS GET ABSOLUTE FST ADDRESS
  23067. LX6 12
  23068. EWX6 X1 UPDATE FST ENTRY
  23069. LX5 -12
  23070. SB6 BFM13 SET RETURN ADDRESS FOR *LBM*
  23071. SA1 A5
  23072. MX0 -24
  23073. LX1 -12
  23074. BX1 -X0*X1 GET CONTROL POINT AND FNT ORDINAL
  23075. BX5 X5+X1
  23076. EQ LBM CALL I/O BUFFER MANAGER
  23077.  
  23078. * PROCESS I/O BUFFER MANAGER RESPONSE.
  23079.  
  23080. BFM13 MX0 -12
  23081. BX4 -X0*X6 GET BUFFER INDEX
  23082. NG X6,BFM18 IF BUFFER RECALL
  23083. MX7 5
  23084. LX1 X6,B1
  23085. NG X1,BFM15 IF BUFFER BUSY
  23086. BX1 X7*X6 BUFFER MANAGER STATUS
  23087. NZ X1,BFM16 IF BUFFER UNAVAILABLE/INACCESSIBLE DEVICE
  23088. MX7 1
  23089. SA1 BDDC GET BUFFER POSITION COUNTER
  23090. LX7 42-59
  23091. SA5 A5
  23092. IX6 X5-X7 DECREMENT BUFFER COUNT
  23093. MX3 6
  23094. LX3 -12
  23095. IX7 X1+X7 INCREMENT BYTE POSITION
  23096. BX1 X3*X1
  23097. SA2 A5+B1 GET *MB*
  23098. LX1 -42
  23099. SA7 A1
  23100. SB6 X1-5
  23101. NG B6,BFM14 IF ROOM TO STORE LINK IN *MB*
  23102. SA2 A2+1 GET *MB+1*
  23103. SX1 B6+
  23104. BFM14 LX1 2 CALCULATE BYTE INDEX * 12D
  23105. BX5 X3*X6
  23106. SB6 X1
  23107. LX1 1
  23108. SA6 A5
  23109. SB6 X1+B6
  23110. LX4 B6
  23111. BX6 X2+X4
  23112. SA6 A2
  23113. BX6 X5
  23114. SX5 BMWR*100B+1 SET WRITE OPERATION WITH NO RECALL
  23115. SA3 BAFS GET ABSOLUTE FST ADDRESS
  23116. NZ X6,BFM10 IF MORE BUFFERS TO REQUEST
  23117. BFM15 SX1 0
  23118. BFM16 SA3 BAFS GET ABSOLUTE FST ADDRESS
  23119. SX7 B1
  23120. IX3 X3+X7
  23121. ERX2 X3 RETURN FIRST BUFFER ORDINAL IN *OR*
  23122. BX7 -X0*X2
  23123. BX7 X7+X1 RETURN BUFFER MANAGER REPLY STATUS
  23124. LX7 12
  23125. BFM17 SA2 BFST RESTORE ORIGINAL FST
  23126. BX6 X2
  23127. SA1 A3 GET ABSOLUTE FST ADDRESS
  23128. EWX6 X1
  23129. SA7 A5
  23130. EQ /PROGRAM/PRG EXIT
  23131.  
  23132. * PROCESS BUFFER RECALL (FOR SECOND BUFFER ONLY IN MULTIPLE
  23133. * WRITE BUFFER REQUEST).
  23134.  
  23135. BFM18 MX7 -24 RETURN RECALL ORDINAL AND STATUS
  23136. LX6 12
  23137. SA3 BAFS GET ABSOLUTE FST ADDRESS
  23138. SX2 B1
  23139. IX1 X3+X2
  23140. ERX2 X1 RETURN FIRST BUFFER ORDINAL IN *MB*
  23141. BX7 -X7*X6
  23142. BX6 -X0*X2
  23143. SA6 A5+B1
  23144. EQ BFM17 RESTORE FST
  23145. PST SPACE 4,40
  23146. ** PST - *PIOM* SECTOR TRANSFER (SF = 0, 1, 2, 3, 4).
  23147. *
  23148. * ENTRY (A0) = CPU NUMBER.
  23149. * (A5) = PP *OR* ADDRESS.
  23150. * (X5) = (OR).
  23151. * (B2) = EXCHANGE PACKAGE ADDRESS, IF IN MONITOR MODE.
  23152. * (B5) = *PIOM* SUBFUNCTION - 1.
  23153. * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
  23154. * DESCRIPTION.
  23155. * (MB+1) = 1/ MODE, 23/,18/ PROC,18/ DVI.
  23156. * MODE = 1 INDICATES PROGRAM MODE ENTRY.
  23157. * PROC = PROGRAM MODE PROCESSOR ADDRESS.
  23158. * DVI = DEVICE INDICATOR (0=ECS, 1=BUFFERED DEVICE)
  23159. * PP I/O BUFFER RESERVED FOR *PIOM*
  23160. * SUBFUNCTIONS 0, 1, 2.
  23161. *
  23162. * EXIT A0, A5, B5 SAME AS ON ENTRY.
  23163. * (B2) = EXCHANGE PACKAGE ADDRESS, IF IN MONITOR MODE.
  23164. * PARAMETERS IN *OR* AND *MB* UPDATED FOR
  23165. * *PIOM* SUBFUNCTIONS 3, 4.
  23166. * (MB+1) .LT. 0, IF PROGRAM MODE EXIT,
  23167. * OTHERWISE MONITOR MODE EXIT.
  23168. * TO /PROGRAM/HNG, IF SHORT PRU ENCOUNTERED AND
  23169. * NOT READ TO EOR (SF = 3) OR EOF/EOI ENCOUNTERED
  23170. * ON READ TO EOR (SF = 3, SECTOR COUNT = 7777B).
  23171. * TO /ECS/PIOX, IF TRANSFER COMPLETE OR I/O RECALL
  23172. * REQUIRED.
  23173. * TO /ECS/PIOR, IF I/O BUFFER BUSY.
  23174. *
  23175. * CALLS BPF, CLM, HHE, /PROGRAM/HNG, INB, /ECS/PIOP,
  23176. * /ECS/PIOR, /ECS/PIOX, UDP.
  23177. *
  23178. * NOTE *PST* IS ENTERED IN PROGRAM MODE (SF = 3, 4)
  23179. * OR MONITOR MODE (SF = 0, 1, 2). *PST* WILL
  23180. * SWITCH TO PROGRAM MODE IF AN I/O REQUEST
  23181. * IS REQUIRED (SF = 0, 1, 2).
  23182. * MB+2 AND MB+3 ARE USED TO CONTAIN A PSEUDO FNT.
  23183.  
  23184.  
  23185. * BUILD PSEUDO FNT IN MESSAGE BUFFER.
  23186.  
  23187. PST SB6 PST1 *BPF* RETURN ADDRESS
  23188. EQ BPF BUILD PSEUDO FNT IN MESSAGE BUFFER
  23189.  
  23190. * VALIDATE I/O BUFFER LINK.
  23191.  
  23192. PST1 ZR X7,PST3 IF NO I/O BUFFER LINK
  23193. SX2 BMRD VALIDATE READ SUBFUNCTION
  23194. SX1 B5+B1
  23195. SB7 PST2 SET RETURN ADDRESS FOR *CLM*
  23196. LX1 -1
  23197. SB6 CLM1 RETURN ADDRESS FOR *INB*
  23198. NG X1,INB IF READ OPERATION
  23199. SX2 BMWR VALIDATE WRITE BUFFER
  23200. EQ INB INTERLOCK BUFFER
  23201.  
  23202. PST2 ZR X6,PST3 IF BUFFER NOT INTERLOCKED
  23203. SA3 A5+B1
  23204. MX7 1
  23205. SX2 B1+
  23206. LX3 59-6
  23207. BX2 X7+X2
  23208. BX6 -X2*X3
  23209. PL X3,PST5 IF NOT *1MV* RECALL AFTER FLUSH
  23210. BX1 X1-X1 CLEAR STATUS / HOLD WRITE BUFFER
  23211. NG B5,PST38 IF RESERVE WRITE BUFFER SUBFUNCTION
  23212. LX6 6-59
  23213. MX1 60 CLEAR STATUS / CAUSE WRITE BUFFER RELEASE
  23214. SA6 A3 CLEAR *1MV* ACTIVE AND LINK FLAGS
  23215. EQ PST38 RELEASE BUFFER AND EXIT
  23216.  
  23217. PST3 SA3 A5+2
  23218. SB6 PST4 SET PROGRAM MODE RETURN ADDRESS
  23219. PL X3,/ECS/PIOP IF SWITCH TO PROGRAM MODE REQUIRED
  23220.  
  23221. * REENTRY FROM PROGRAM MODE.
  23222. * INITIATE READ OR WRITE.
  23223.  
  23224. PST4 SX0 BMWR*100B ALLOCATE I/O BUFFER FOR WRITE
  23225. ERRNZ BMWR-1 CODE DEPENDS ON VALUE
  23226. SX6 B5+B1
  23227. SA4 A5+B1 GET *STREAMED READ* FLAG
  23228. LX5 6-36 CHECK FOR REWRITE
  23229. BX2 X0*X5 0 = WRITE, 100 = REWRITE
  23230. SB7 PST5 SET RETURN ADDRESS FOR *CLM*
  23231. IX2 X2+X0 100 = WRITE, 200 = REWRITE
  23232. ERRNZ BMRW-BMWR-1 INDEXES MUST BE CONSECUTIVE
  23233. LX6 -1
  23234. PL X6,CLM IF PRU OR DIRECT WRITE OR RESERVE BUFFER
  23235. R= X2,0+BMRD*100B
  23236. NZ B5,CLM IF DIRECT READ
  23237. LX4 59-9
  23238. NG X4,CLM IF READ STREAMING ON PRU READ
  23239. SX2 1+BMRD*100B READ ONE BUFFER IF NO STREAMING
  23240. EQ CLM CALL I/O BUFFER MANAGER
  23241.  
  23242. PST5 SX1 B0 RETURN STATUS = NO ERROR
  23243. MX7 1
  23244. NG B5,PST38 IF RESERVE WRITE BUFFER SUBFUNCTION
  23245.  
  23246. * CALCULATE SECTOR CONTROL WORD ADDRESS.
  23247.  
  23248. PST6 SA4 A5+B1 GET BEGINNING SECTOR
  23249. MX2 -12
  23250. SA1 A5+4 GET I/O BUFFER LINK (CONTROL BUFFER INDEX)
  23251. MX3 -LSLBS MOD 40B OF SECTOR
  23252. LX4 -12
  23253. BX4 -X2*X4
  23254. LX1 CBTLS
  23255. BX5 -X3*X4
  23256. SB7 X5
  23257. MX7 -24
  23258. AX5 CBTLS SECTOR CONTROL WORD INDEX
  23259. TA3 X1+IOLK,CBT BUFFER ADDRESS
  23260. IX1 X1+X5
  23261. BX0 X3
  23262. TA3 X1+PAD1,CBT SECTOR CONTROL WORD
  23263. BX6 X3
  23264. SX1 B7
  23265. BX0 -X7*X0 I/O BUFFER ADDRESS
  23266. LX1 6 MOD 40B OF SECTOR * 100B
  23267. SX7 B7 MOD 40B OF SECTOR
  23268. MX4 -3
  23269. IX0 X0+X1 FWA DATA IN I/O BUFFER
  23270. SX5 10000B
  23271. BX7 -X4*X7 MOD 10B OF SECTOR
  23272. MX3 24
  23273. SB4 X7
  23274. LX5 B4 POSITION MASK BIT TO CURRENT SECTOR FLAG
  23275. SX1 B5
  23276. LX1 -1
  23277. MX4 2
  23278. PL X1,PST7 IF PRU OR DIRECT READ
  23279. NZ X7,PST7 IF NOT FIRST PRU OF CONTROL WORD
  23280. SA1 A5
  23281. LX1 59-36
  23282. NG X1,PST7 IF REWRITE
  23283. LX4 23-59
  23284. BX6 -X4*X6 CLEAR VALID DATA FLAGS
  23285. PST7 GT B5,B1,PST16 IF DIRECT READ OR WRITE
  23286. SA4 A5+B1 GET PP BUFFER INCREMENT
  23287. SB6 A0
  23288. AX4 48
  23289. TX4 X4,ECSB FWA PP BUFFER
  23290. LX0 30 SET UP FOR EXTENDED MEMORY READ/WRITE
  23291. SA4 X4+B1 GET HEADER WORD
  23292. SB4 B7-LSLB+1
  23293. SX7 A4+B1 FWA DATA IN CM
  23294. SB3 100B SET WORD COUNT FOR TRANSFER
  23295. BX0 X0+X7
  23296. SA0 X7
  23297. LX0 30 30/ABSOLUTE FWA, 30/FWA I/O BUFFER DATA
  23298. ZR B5,PST13 IF PRU READ
  23299.  
  23300. * UPDATE SECTOR CONTROL WORD FOR PRU WRITE.
  23301.  
  23302. BX7 X3*X4
  23303. BX6 -X5*X6 CLEAR SHORT PRU FLAG
  23304. LX4 12
  23305. BX1 -X2*X4 SECTOR/TRACK LINKAGE
  23306. LX4 12
  23307. NZ B4,PST8 IF NOT LAST PRU OF CONTROL WORD
  23308. BX6 X2*X6 SET LINKAGE BYTE IN CONTROL WORD
  23309. BX6 X6+X1
  23310. PST8 ZR X1,PST11 IF EOF/EOI
  23311. BX1 -X2*X4 WORD COUNT
  23312. AX1 6
  23313. NZ X1,PST9 IF FULL PRU
  23314. NO
  23315. SA1 A4+B3
  23316. BX6 X6+X5 SET SHORT PRU FLAG
  23317. BX1 -X3*X1
  23318. BX7 X7+X1 MERGE HEADER INTO LAST DATA WORD
  23319. SA7 A1
  23320. PST9 SA6 A3 REWRITE SECTOR CONTROL WORD
  23321. SB4 B1 SET PRU COUNT FOR TRANSFER
  23322. EQ PST26 TRANSFER DATA
  23323.  
  23324. * WRITE EOI SECTOR AFTER DIRECT WRITE WHEN BUFFER FLUSH
  23325. * REQUESTED.
  23326.  
  23327. PST10 SA0 ESMB+1 USE PROGRAM MODE BUFFER FOR EOI DATA
  23328. BX7 X7-X7 CLEAR FNT ENTRY IN EOI SECTOR
  23329. SA4 A5+B1 GET EOI TRACK AND SECTOR
  23330. MX1 12
  23331. SA7 A0
  23332. LX1 -12
  23333. BX7 X1*X4 BUILD FST ENTRY FOR EOI SECTOR
  23334. MX2 -24
  23335. LX4 -12
  23336. BX1 -X2*X4
  23337. BX7 X1+X7
  23338. LX7 12
  23339. SA1 PDTL GET PACKED DATE AND TIME
  23340. SA7 A7+B1
  23341. BX7 X1
  23342. SX1 A0
  23343. SA7 A7+B1
  23344. LX1 30
  23345. IX0 X0+X1
  23346. SB3 B1
  23347. MX1 -6
  23348. SB5 B5+B1
  23349. WE 3 WRITE EOI SECTOR SYSTEM INFORMATION
  23350. RJ HHE HANG ON HALF-EXIT
  23351. SA4 A0-B3 SET TO TRANSFER EOI LINKAGE
  23352. BX7 X7-X7
  23353. SX4 B0
  23354. IX0 X0-X1 ADVANCE DATA TRANSFER ADDRESS
  23355. PST11 BX1 -X2*X4 NEXT SECTOR / TRACK LINKAGE
  23356. SA7 A4+B3 SAVE HEADER WORD AS LAST DATA WORD
  23357. BX6 X6+X5 SET SHORT PRU FLAG
  23358. NZ B4,PST12 IF NOT LAST PRU OF CONTROL WORD
  23359. BX6 X6+X1 MERGE LINKAGE DATA
  23360. PST12 NZ X1,PST9 IF EOF
  23361. SA2 A5+4 GET I/O BUFFER LINK
  23362. SB4 PST9 SET RETURN ADDRESS FOR *IDE*
  23363. LX2 CBTLS
  23364. SX7 B7
  23365. TX3 X2+PAD1,CBT ADDRESS OF FIRST SECTOR CONTROL WORD
  23366. EQ IDE SET FLAGS TO IGNORE DATA AFTER EOI
  23367.  
  23368. * BUILD HEADER WORD FOR PRU READ.
  23369.  
  23370. PST13 BX7 X5*X6 CHECK FOR SHORT PRU
  23371. NZ X7,PST14 IF SHORT PRU
  23372. SA4 A5+B1
  23373. SX1 B3+ WORD COUNT
  23374. LX4 -12 GET CURRENT SECTOR
  23375. BX4 -X2*X4
  23376. LX1 36
  23377. SX7 X4+B1 NEXT SECTOR
  23378. LX7 -12
  23379. BX7 X7+X1
  23380. NZ B4,PST15 IF NOT LAST PRU OF CONTROL WORD
  23381. BX7 -X2*X6 GET LINKAGE BYTE FROM CONTROL WORD
  23382. LX7 -12
  23383. BX7 X7+X1
  23384. EQ PST15 SAVE HEADER WORD
  23385.  
  23386. PST14 SX1 B3-B1 GET HEADER WORD FROM LAST DATA WORD
  23387. BX7 X0 SAVE (X0)
  23388. LX0 30
  23389. SB4 A0 SAVE (A0)
  23390. AX0 30
  23391. SA2 A5+2 GET PROGRAM/MONITOR MODE FLAG
  23392. MX6 1
  23393. BX2 X6*X2
  23394. LX2 1
  23395. SA0 ESMB+X2
  23396. IX1 X0+X1
  23397. SX0 A0
  23398. LX0 30
  23399. BX0 X0+X1
  23400. RE 1 READ HEADER WORD
  23401. RJ HHE HANG ON HALF-EXIT
  23402. SA1 ESMB+X2
  23403. SA0 B4+ RESTORE (A0)
  23404. BX0 X7 RESTORE (X0)
  23405. BX7 X1 MOVE HEADER WORD
  23406. PST15 SA7 A0-B1 SAVE HEADER WORD IN PP BUFFER
  23407. SB4 B1 SET PRU COUNT FOR TRANSFER
  23408. EQ PST29 TRANSFER DATA
  23409.  
  23410. * CALCULATE NUMBER OF PRUS (1 TO LSLB) TO TRANSFER THIS PASS.
  23411. * FOR DIRECT READ OR WRITE.
  23412.  
  23413. PST16 SX1 B7-LSLB
  23414. SB5 B5-B1
  23415. BX1 -X1
  23416. SA4 A5 GET SECTOR COUNT
  23417. SB4 X1
  23418. SB3 B0
  23419. LX4 59-38 CHECK FOR READ TO EOR
  23420. SB6 B0
  23421. NG X4,PST17 IF READ TO EOR
  23422. AX4 24+59-38
  23423. BX2 -X2*X4
  23424. IX7 X2-X1
  23425. PL X7,PST17 IF SECTOR COUNT NOT EXHAUSTED
  23426. ZR X2,PST10 IF WRITE EOI AFTER DIRECT TRANSFER
  23427. SB4 X2+0
  23428. PST17 SX1 100B
  23429. GT B5,B1,PST21 IF DIRECT WRITE
  23430.  
  23431. * PROCESS DIRECT READ.
  23432.  
  23433. PST18 LX5 59-20
  23434. PL X5,PST19 IF NOT END OF DISK SECTOR
  23435. SX5 B1
  23436. SA3 A3+1 GET NEXT SECTOR CONTROL WORD
  23437. LX5 12+59-20
  23438. BX6 X3
  23439. PST19 LX5 -59+20
  23440. BX7 X5*X6 EXTRACT SHORT PRU FLAG
  23441. LX5 1 POSITION SHORT PRU MASK FOR NEXT PRU
  23442. MX2 -12
  23443. ZR X7,PST20 IF FULL PRU
  23444. PL X4,/PROGRAM/HNG IF NOT READ TO EOR
  23445. SX1 B6 GET HEADER WORD FROM LAST DATA WORD
  23446. LX1 6
  23447. SB4 A0+0 SAVE (A0)
  23448. SX1 X1+77B
  23449. BX7 X0 SAVE (X0)
  23450. LX0 30
  23451. SA0 ESMB+1 USE PROGRAM MODE BUFFER
  23452. AX0 30
  23453. IX1 X0+X1
  23454. SX0 A0+0
  23455. LX0 30
  23456. BX0 X0+X1
  23457. RE 1 READ HEADER WORD
  23458. RJ HHE HANG ON HALF-EXIT
  23459. SA1 ESMB+1
  23460. SA0 B4 RESTORE (A0)
  23461. BX0 X7 RESTORE (X0)
  23462. SB4 B6+B1
  23463. LX1 12
  23464. BX7 -X2*X1
  23465. AX1 48 WORD COUNT
  23466. NZ X7,PST20 IF NOT EOF/EOI
  23467. BX2 X1
  23468. SX1 B0 WORD COUNT = 0
  23469. NZ X2,PST20 IF EOF
  23470. SB6 B6-B1 RESET PRU COUNT TO PRECEED EOI
  23471. SB4 B4-B1
  23472. PST20 SB6 B6+B1
  23473. SB3 B3+X1 INCREMENT WORD COUNT OF TRANSFER
  23474. LT B6,B4,PST18 IF MORE PRUS TO CHECK
  23475. SB2 PST24 SET RETURN ADDRESS FOR *UDP*
  23476. EQ UDP UPDATE DIRECT TRANSFER PARAMETERS
  23477.  
  23478. * PROCESS DIRECT WRITE.
  23479.  
  23480. PST21 LX5 59-20
  23481. NG X5,PST23 IF END OF DISK SECTOR
  23482. LX5 -59+20
  23483. PST22 SB6 B6+B1
  23484. BX6 -X5*X6 CLEAR SHORT PRU FLAG
  23485. SB3 B3+X1 INCREMENT WORD COUNT
  23486. LX5 1
  23487. LT B6,B4,PST21 IF MORE PRUS
  23488. SB2 PST24 SET RETURN ADDRESS
  23489. SA6 A3 REWRITE SECTOR CONTROL WORD
  23490. EQ UDP UPDATE DIRECT TRANSFER PARAMETERS
  23491.  
  23492. PST23 SA6 A3 STORE SECTOR CONTROL WORD
  23493. SA4 A5 CHECK REWRITE STATUS
  23494. SA3 A3+B1 READ NEXT SECTOR CONTROL WORD
  23495. LX4 59-36
  23496. SX5 10000B
  23497. BX6 X3
  23498. MX7 2
  23499. NG X4,PST22 IF REWRITE
  23500. LX7 23-59
  23501. BX6 -X7*X6 CLEAR VALID DATA FLAGS
  23502. EQ PST22 CONTINUE PROCESSING
  23503.  
  23504. * *PIOM* DIRECT TRANSFER PARAMETERS UPDATED
  23505. * (TRACK, SECTOR, SECTOR COUNT, SECTORS TRANSFERRED,
  23506. * AND CM ADDRESS FOR TRANSFER).
  23507.  
  23508. PST24 SA0 X5 ABSOLUTE CM ADDRESS OF TRANSFER
  23509. LX0 30
  23510. MX7 -30
  23511. BX0 X7*X0
  23512. BX7 -X7*X5
  23513. BX0 X0+X7
  23514. LX0 30
  23515. SX7 B5-B1
  23516. MX2 -12
  23517. SB5 B5+B1
  23518. ZR X7,PST29 IF DIRECT READ
  23519. SA1 A3+0
  23520. PL X6,PST25 IF ADVANCE TO NEXT TRACK
  23521. SA4 A5+1
  23522. MX7 -3
  23523. LX4 -12
  23524. BX6 -X2*X4
  23525. BX7 -X7*X4
  23526. NZ X7,PST26 IF NOT LAST PRU OF CONTROL WORD
  23527. PST25 BX1 X2*X1
  23528. BX6 X6+X1 SAVE LINKAGE INFORMATION
  23529. SA6 A3 REWRITE SECTOR CONTROL WORD
  23530.  
  23531. * TRANSFER DATA FROM PP BUFFER TO I/O BUFFER OR DIRECT FROM
  23532. * CONTROL POINT FIELD LENGTH TO I/O BUFFER.
  23533.  
  23534. PST26 SX7 B2 SAVE (B2)
  23535. SB2 BTSZ
  23536. SX1 B0
  23537. GE B2,B3,PST28 IF ONE BLOCK OR LESS TO WRITE
  23538. SA1 PSTA GET ADDRESS INCREMENT WORD
  23539. PST27 WE BTSZ
  23540. RJ HHE HANG ON HALF EXIT
  23541. SB2 B2+BTSZ
  23542. SA0 A0+BTSZ INCREMENT ADDRESSES
  23543. PST28 IX0 X0+X1
  23544. LT B2,B3,PST27 IF MORE FULL BLOCKS TO TRANSFER
  23545. SB2 B3-B2
  23546. WE B2+BTSZ WRITE REMAINDER OF BLOCK
  23547. RJ HHE HANG ON HALF-EXIT
  23548. EQ PST32 CHECK FOR TRANSFER COMPLETION
  23549.  
  23550. * TRANSFER DATA FROM I/O BUFFER TO PP BUFFER OR DIRECT FROM
  23551. * I/O BUFFER TO CONTROL POINT FIELD LENGTH.
  23552.  
  23553. PST29 SX7 B2 SAVE (B2)
  23554. SB2 BTSZ
  23555. SX1 B0
  23556. GE B2,B3,PST31 IF ONE BLOCK OR LESS TO READ
  23557. SA1 PSTA GET ADDRESS INCREMENT WORD
  23558. PST30 RE BTSZ
  23559. RJ HHE HANG ON HALF-EXIT
  23560. SB2 B2+BTSZ
  23561. SA0 A0+BTSZ INCREMENT ADDRESSES
  23562. PST31 IX0 X0+X1
  23563. LT B2,B3,PST30 IF MORE FULL BLOCKS TO TRANSFER
  23564. SB2 B3-B2
  23565. RE B2+BTSZ READ REMAINDER OF BLOCK
  23566. RJ HHE HANG ON HALF-EXIT
  23567.  
  23568. * DETERMINE IF TRANSFER COMPLETE.
  23569.  
  23570. PST32 SB7 B7+B4
  23571. SB2 X7 RESTORE (B2)
  23572. SA0 B6 RESTORE (A0) FOR PRU READ/WRITE
  23573. SX7 B1
  23574. SX3 B5
  23575. SB7 B7-LSLB
  23576. LX7 48-0
  23577. SA4 A5 GET PARAMETERS
  23578. LX3 -1
  23579. SX1 IFLS RETURN STATUS = INSUFFICIENT FL
  23580. NG X5,PST38 IF TRANSFER TERMINATED FOR READ TO EOR
  23581. SX1 B0+ RETURN STATUS = NO ERROR
  23582. LE B5,B1,PST34 IF PRU TRANSFER
  23583. SX0 B4 PRUS TRANSFERRED
  23584. LX4 -24
  23585. MX6 -12
  23586. LX0 6
  23587. SX2 B3+ WORD COUNT OF TRANSFER
  23588. BX6 -X6*X4 REMAINING SECTOR COUNT
  23589. IX2 X2-X0
  23590. NG X2,PST34 IF EOR ENCOUNTERED OR EOI WRITTEN
  23591. ZR B3,PST34 IF EOR/EOF/EOI ENCOUNTERED
  23592. LX4 0-37+24 CHECK FOR EOR READ OR WRITE EOI
  23593. MX0 -2
  23594. BX0 -X0*X4
  23595. BX6 X6+X0
  23596. ZR X6,PST34 IF SECTOR COUNT EXHAUSTED
  23597. NZ B7,PST6 IF NOT LAST PRU IN 4K BLOCK
  23598. SB6 PST33 SET RETURN ADDRESS FOR *BPF*
  23599. EQ BPF REBUILD PSEUDO FNT
  23600.  
  23601. PST33 SX2 BMRG*100B RELEASE BUFFER AND GET NEXT BUFFER
  23602. SB7 PST6 SET RETURN ADDRESS FOR *CLM*
  23603. PL X3,CLM IF DIRECT READ
  23604.  
  23605. * NOTE - IF SUPPORT FOR A DIRECT REWRITE OPERATION IS EVER
  23606. * NEEDED, CODE CAN BE ADDED HERE TO CHECK THE REWRITE FLAG
  23607. * AND IF SET, SET FUNCTION *BMRW* INSTEAD OF *BMWR*.
  23608.  
  23609. SX2 BMRF*100B+BMWR FLUSH WRITE BUFFER AND GET NEXT ONE
  23610. EQ CLM CALL I/O BUFFER MANAGER
  23611.  
  23612. * TRANSFER COMPLETE. RELEASE I/O BUFFER.
  23613.  
  23614. PST34 SA5 A5 CHECK FOR BUFFER FLUSH
  23615. MX2 42
  23616. PL X3,PST35 IF PRU READ OR DIRECT READ
  23617. LX7 59-0-48+0
  23618. LX5 59-37
  23619. PL X5,PST35 IF NO BUFFER FLUSH REQUESTED
  23620. SB7 B0+ FORCE FLUSH AND PP BUFFER RELEASE
  23621. BX1 -X1
  23622. PST35 NZ B7,PST38 IF NOT LAST PRU IN 4K BLOCK
  23623. SA3 A5+2 GET PROGRAM MODE FLAG
  23624. BX1 -X2*X1 SAVE RETURN STATUS IN MESSAGE BUFFER
  23625. BX3 X2*X3
  23626. SB6 PST36 SET PROGRAM MODE RETURN ADDRESS
  23627. BX6 X1+X3
  23628. SA6 A3
  23629. PL X3,/ECS/PIOP IF SWITCH TO PROGRAM MODE REQUIRED
  23630.  
  23631. * REENTRY FROM PROGRAM MODE.
  23632. * CALL I/O BUFFER MANAGER TO RELEASE READ BUFFER OR TO
  23633. * RELEASE WRITE BUFFER AND FLUSH THE BUFFER TO DISK.
  23634.  
  23635. PST36 SX4 B5
  23636. SB7 PST37 SET RETURN ADDRESS FOR *CLM*
  23637. LX4 -1
  23638. SX2 BMRB*100B RELEASE READ BUFFER
  23639. PL X4,CLM IF PRU READ OR DIRECT READ
  23640. SX2 BMRF*100B RELEASE WRITE BUFFER AND FLUSH TO DISK
  23641. EQ CLM CALL I/O BUFFER MANAGER
  23642.  
  23643. PST37 SA1 A4+B1 RESTORE RETURN STATUS
  23644. SX1 X1
  23645. EQ /ECS/PIOX EXIT
  23646.  
  23647. * RELEASE I/O BUFFER ASSIGNMENT.
  23648.  
  23649. PST38 SA2 A5+4 GET I/O BUFFER LINK
  23650. NO
  23651. LX2 CBTLS
  23652. + TA3 X2+LSLK,CBT ** RELEASE BUFFER (UPDATE IN ONE WORD)
  23653. IX6 X3-X7 **
  23654. SA6 A3 **
  23655. EQ /ECS/PIOX EXIT
  23656.  
  23657.  
  23658. PSTA VFD 30/BTSZ,30/BTSZ ADDRESS INCREMENTS
  23659.  
  23660. ESMB BSS 1 MONITOR MODE EXTENDED MEMORY WORD BUFFER
  23661. BSS 3 PROGRAM MODE EXTENDED MEMORY WORD BUFFER
  23662. PBF SPACE 4,15
  23663. ** PBF - *PIOM* BUFFER FLUSH (SF=5). PROGRAM MODE.
  23664. *
  23665. * ENTRY (A0) = CPU NUMBER.
  23666. * (A5) = PP *OR* ADDRESS.
  23667. * (B7) = CP ADDRESS.
  23668. * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
  23669. * DESCRIPTION.
  23670. *
  23671. * EXIT A0, A5, B7 SAME AS ON ENTRY.
  23672. * TO /PROGRAM/PRG, AFTER BUFFER FLUSH INITIATED.
  23673. *
  23674. * USES A - 1, 7.
  23675. * B - 6.
  23676. * X - 1, 2, 3, 4, 5, 6, 7.
  23677. *
  23678. * CALLS BPF, LBM.
  23679.  
  23680.  
  23681. PBF MX7 -12
  23682. SX1 BMFL SELECT BUFFER FLUSH FUNCTION
  23683. BX6 -X7*X5 EXTRACT FNT ORDINAL
  23684. SX7 EPNS ALLOW FLUSH ON *OFF* DEVICE
  23685. SX2 B7 CP NUMBER
  23686. LX2 18-7
  23687. BX5 X2+X6
  23688. LX1 -6
  23689. TX4 A5-1,-SP
  23690. SB6 PBF2 SET RETURN ADDRESS FOR *LBM*
  23691. BX5 X5+X1
  23692. EQ LBM CALL I/O BUFFER MANAGER
  23693.  
  23694.  
  23695. * THE BUFFER INDEX IS NOT CLEARED FOR A DIRECT ACCESS FILE
  23696. * SO THAT A DETERMINATION CAN BE MADE ON THE NEXT I/O OPERATION
  23697. * AS TO WHETHER THE BUFFER HAS BEEN WRITTEN TO THE DEVICE.
  23698.  
  23699. PBF2 SA1 FNTA CLEAR BUFFER INDEX
  23700. SX2 PMFT*100B
  23701. ERX3 X1 READ FNT
  23702. SX6 7700B
  23703. BX2 X2-X3
  23704. BX7 X7-X7
  23705. BX6 X6*X2
  23706. ZR X6,/PROGRAM/PRG1 IF DIRECT ACCESS FILE
  23707. R= X2,FUTL CLEAR BUFFER INDEX IN FST
  23708. IX2 X1+X2
  23709. ERX1 X2
  23710. MX3 48
  23711. BX6 X3*X1
  23712. EWX6 X2
  23713. EQ /PROGRAM/PRG1 EXIT AND CLEAR OUTPUT REGISTER
  23714. BPF SPACE 4,20
  23715. ** BPF - BUILD PSEUDO FNT IN PP MESSAGE BUFFER.
  23716. *
  23717. * ENTRY REFER TO *PIOM* FOR DESCRIPTION OF *MB*.
  23718. * (A5) = *OR* ADDRESS.
  23719. * (B6) = RETURN ADDRESS.
  23720. *
  23721. * EXIT (MB+2) = 12/EQUIPMENT,12/0,12/TRACK,12/SECTOR,12/0.
  23722. * (MB+3) = 48/0,12/I/O BUFFER LINK.
  23723. * (X6) = *FST*.
  23724. * (X7) = I/O BUFFER LINK, IF NONZERO.
  23725. *
  23726. * USES A - 1, 4, 6, 7.
  23727. * X - 1, 4, 6, 7.
  23728.  
  23729.  
  23730. BPF SA4 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
  23731. MX1 -24
  23732. LX1 12
  23733. MX6 12
  23734. BX1 -X1*X4 TRACK AND SECTOR
  23735. LX4 12
  23736. MX7 0
  23737. BX6 X6*X4 EQUIPMENT
  23738. LX4 59-7-12
  23739. BX6 X6+X1
  23740. SA6 A5+3 SAVE PSEUDO FNT IN MESSAGE BUFFER
  23741. PL X4,BPF1 IF NO I/O BUFFER LINK
  23742. TX1 A5-1,-FP CALCULATE PP INDEX
  23743. AX1 3 PP INDEX INTO *PLT*
  23744. TA1 X1,PLT READ PP I/O BUFFER LINK
  23745. BX7 X1
  23746. BPF1 SA7 A6+B1 SAVE I/O BUFFER LINK IN PSEUDO FNT
  23747. JP B6 RETURN
  23748. CLM SPACE 4,35
  23749. ** CLM - CALL I/O BUFFER MANAGER.
  23750. *
  23751. * ENTRY (B7) = RETURN ADDRESS.
  23752. * (A5) = *OR* ADDRESS.
  23753. * (X2) = 48/0,6/ OP,6/ BC.
  23754. * OP = I/O BUFFER MANAGER OPERATION.
  23755. * BC = BUFFER COUNT (USED FOR ONLY *BMRD* AND *BMRF*
  23756. * OPERATIONS).
  23757. * FOR *BMRD*, BC = 1 IF NON-STREAMED PRU READ.
  23758. * FOR *BMRF*, BC = *BMWR* IF WRITE.
  23759. * BC = *BMRW* IF REWRITE.
  23760. * (MB+1) .LT. 0, IF PROGRAM MODE.
  23761. * (MB+2) = PSEUDO FNT EQUIPMENT, TRACK, SECTOR.
  23762. * (MB+3) = PSEUDO FNT I/O BUFFER LINK (CONTROL BUFFER
  23763. * INDEX) FOR OP = 4, 5, 6.
  23764. *
  23765. * EXIT A0, A5, B2 SAME AS ON ENTRY.
  23766. * (B5) = *PIOM* SUBFUNCTION - 1.
  23767. * (A4) = *MB* ADDRESS.
  23768. * (X5) = (OR).
  23769. * (X6) = BUFFER ORDINAL.
  23770. * = 0 IF NO BUFFER INTERLOCKED.
  23771. * (MB) = I/O BUFFER LINK FLAG UPDATED.
  23772. * (MB+3) = I/O BUFFER LINK UPDATED.
  23773. * BUFFER LINK FOR THIS PP UPDATED IN *PLT*.
  23774. * TO /ECS/PIOR, IF I/O BUFFER BUSY.
  23775. * TO /ECS/PIOX, IF RECALL REQUIRED, I/O ERROR, ADDRESS
  23776. * ERROR OR INACCESSIBLE DEVICE.
  23777. *
  23778. * USES A - 3, 4, 6, 7.
  23779. * B - 5, 6.
  23780. * X - ALL.
  23781. *
  23782. * CALLS LBM, /ECS/PIOR, /ECS/PIOX.
  23783.  
  23784.  
  23785. CLM SX1 A5+2 PSEUDO FNT ADDRESS
  23786. LX2 -12
  23787. BX5 X1+X2
  23788. SB6 CLM1 SET *LBM* EXIT ADDRESS
  23789. EQ LBM CALL BUFFER MANAGER
  23790.  
  23791. * CHECK BUFFER STATUS. SAVE I/O BUFFER LINK.
  23792. * ENTRY FROM *INB* IN MONITOR MODE.
  23793.  
  23794. CLM1 UX0,B5 X5
  23795. SA4 A5+B1
  23796. AX0 42
  23797. MX1 1
  23798. SB5 X0-1 *PIOM* SUBFUNCTION - 1
  23799. SX7 X6 BUFFER ORDINAL (IF INTERLOCKED)
  23800. MX0 5
  23801. BX2 X0*X6 BUFFER MANAGER STATUS
  23802. SA7 A5+4 UPDATE PSEUDO FNT
  23803. LX1 7-59
  23804. SX6 X6 BUFFER ORDINAL (0 IF NOT INTERLOCKED)
  23805. BX7 -X1*X4 CLEAR PP BUFFER RESERVED FLAG
  23806. ZR X6,CLM2 IF BUFFER NOT INTERLOCKED
  23807. TX3 A5-1,-FP
  23808. AX3 3
  23809. BX7 X1+X4 SET PP BUFFER RESERVED FLAG
  23810. TA6 X3,PLT STORE PLT ENTRY
  23811. CLM2 SA7 A4 UPDATE *CHRV* IN MESSAGE BUFFER
  23812. MX4 1
  23813. NZ X2,CLM3 IF BUFFER MANAGER STATUS NONZERO
  23814. JP B7 EXIT
  23815.  
  23816. CLM3 SX1 -RCLS SET RECALL STATUS
  23817. NG X2,/ECS/PIOX IF RECALL
  23818. LX2 59-58
  23819. SX3 B5+B1 *PIOM* SUBFUNCTION
  23820. NG X2,/ECS/PIOR IF BUFFER BUSY
  23821. LX3 -1
  23822. PL X3,CLM4 IF WRITE REQUEST
  23823. LX4 48-59
  23824. CLM4 BX1 X6
  23825. ZR X6,CLM5 IF BUFFER NOT INTERLOCKED
  23826. LX1 CBTLS
  23827. + TA3 X1+LSLK,CBT **** PERFORM IN ONE WORD ****
  23828. IX6 X3-X4 **** PERFORM IN ONE WORD ****
  23829. SA6 A3 **** PERFORM IN ONE WORD ****
  23830. CLM5 LX3 X2,B1
  23831. LX2 X3,B1
  23832. PL X3,CLM6 IF NOT I/O ERROR
  23833. SX4 B1
  23834. LX4 6
  23835. BX7 -X4*X7
  23836. SA7 A7 CLEAR *1MV* FLUSH FLAG
  23837. SA1 A5+2 CHECK PROGRAM MODE FLAG IN (MB+1)
  23838. SA3 FCBI BUFFER WITH ERROR (PROGRAM MODE)
  23839. NG X1,CLM5.1 IF PROGRAM MODE
  23840. SA3 FCBM BUFFER WITH ERROR (MONITOR MODE)
  23841. CLM5.1 MX0 -6
  23842. LX3 CBTLS
  23843. TA1 X3+HSLK,CBT
  23844. LX1 -48
  23845. BX1 -X0*X1 ERROR CODE FROM DRIVER
  23846. BX1 -X1 CAUSE PP I/O BUFFER RELEASE
  23847. EQ /ECS/PIOX EXIT
  23848.  
  23849. CLM6 SX1 -ADDE
  23850. PL X2,/ECS/PIOX IF ADDRESS ERROR
  23851. SX1 -LNRE SET *LOGICAL NOT READY* ERROR STATUS
  23852. EQ /ECS/PIOX EXIT
  23853. IDE SPACE 4,10
  23854. ** IDE - IGNORE DATA AFTER EOI WRITE.
  23855. *
  23856. * ENTRY (B4) = RETURN ADDRESS.
  23857. * (X3) = FWA CONTROL BUFFER.
  23858. * (X7) = MOD 40B OF SECTOR CONTAINING EOI.
  23859. *
  23860. * USES A - 2, 7.
  23861. * X - 1, 2, 7.
  23862.  
  23863.  
  23864. IDE BSS 0 ENTRY
  23865. SX1 X7
  23866. AX7 CBTLS
  23867. IX2 X3+X7
  23868. SA2 X2 CONTROL WORD CONTAINING EOI
  23869. SX7 B1
  23870. LX1 -2
  23871. BX1 -X1*X7 SET SECOND SECTOR FLAG ONLY OR NO FLAG
  23872. IDE1 LX1 22-0 POSITION VALID DATA FLAGS
  23873. BX7 X2+X1
  23874. SA7 A2+ REWRITE CONTROL WORD
  23875. SX7 A2-PAD4
  23876. IX7 X7-X3
  23877. ZR X7,/MONITOR/RB4 IF LAST CONTROL WORD COMPLETED
  23878. SX1 3 SET BOTH FLAGS
  23879. SA2 A2+1 GET NEXT CONTROL WORD
  23880. EQ IDE1 COMPLETE REMAINING CONTROL WORDS
  23881. UDP SPACE 4,30
  23882. ** UDP - UPDATE *PIOM* DIRECT TRANSFER PARAMETERS.
  23883. *
  23884. * ENTRY (A5) = PP *OR* ADDRESS.
  23885. * (B2) = RETURN ADDRESS.
  23886. * (B3) = WORD COUNT OF TRANSFER.
  23887. * (B4) = NUMBER OF SECTORS TO TRANSFER.
  23888. * SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
  23889. * DESCRIPTION.
  23890. *
  23891. * EXIT PARAMETERS IN *OR* AND *MB* ADVANCED
  23892. * BY SPECIFIED SECTOR AND WORD COUNT.
  23893. * ADVANCES TO NEXT TRACK IF NECESSARY.
  23894. * (B3) = WORD COUNT OF TRANSFER, UPDATED IF TRANSFER
  23895. * PREMATURELY TERMINATED.
  23896. * (B4) = SECTOR COUNT OF TRANSFER, UPDATED IF TRANSFER
  23897. * PREMATURELY TERMINATED.
  23898. * (X6) .LT. 0, IF NO ADVANCE TO NEXT TRACK.
  23899. * (X6) .GT. 0, NEXT TRACK.
  23900. * (X5) = ABSOLUTE CM ADDRESS TO BEGIN TRANSFER, AND
  23901. * INSUFFICIENT FL FLAG (IF BIT 59 SET).
  23902. * TO /PROGRAM/HNG, IF NEXT TRACK NOT RESERVED,
  23903. * IF SECTOR COUNT TRANSFER ATTEMPTED BEYOND FL,
  23904. * OR IF LWA SPECIFICATION INVALID FOR READ TO EOR.
  23905. *
  23906. * USES A - 0, 1, 2, 4, 5, 7.
  23907. * B - 3, 4, 6.
  23908. * X - 1, 2, 4, 5, 6, 7.
  23909.  
  23910.  
  23911. UDP BSS 0 ENTRY
  23912. TX4 A5-1,-FP
  23913. LX4 PPXES-PPCES
  23914. MX1 -12
  23915. TA4 X4+ACPP,FPX GET CP/PCP ASSIGNMENT
  23916. SA5 A5+ GET *OR* PARAMETERS
  23917. LX4 -24
  23918. SX7 X4+ CP/PCP ADDRESS
  23919. BX4 X5 CHECK FOR READ TO EOR
  23920. SA2 X7+FLSW GET FL OF CP/PCP
  23921. LX4 59-38
  23922. BX7 -X1*X2
  23923. LX7 6 FL
  23924. SA0 77B
  23925. BX2 X7 SET MAXIMUM LWA+1 TRANSFER = FL
  23926. PL X4,UDP2 IF NOT READ TO EOR
  23927. SX1 X5+B3 RELATIVE CM FWA TRANSFER + WORD COUNT
  23928. LX5 -18
  23929. SX1 X1-1 LWA OF TRANSFER
  23930. SX6 X5 LWA SPECIFICATION
  23931. LX5 18
  23932. ZR X6,UDP1 IF NO LWA SPECIFICATION
  23933. NG X6,/PROGRAM/HNG IF INVALID LWA SPECIFICATION
  23934. IX2 X7-X6
  23935. NG X2,/PROGRAM/HNG IF LWA SPECIFICATION .GT. FL
  23936. BX2 X6 SET MAXIMUM LWA+1 TRANSFER
  23937. UDP1 IX1 X1-X2
  23938. NG X1,UDP2 IF TRANSFER DOES NOT EXCEED MAXIMUM
  23939. BX6 -X1 TERMINATE TRANSFER AT MAXIMUM ADDRESS
  23940. SB3 X6+B3
  23941. SB3 B3-1
  23942. SX6 B3+A0 RECALCULATE SECTOR COUNT
  23943. AX6 6
  23944. SB4 X6
  23945. UDP2 SX6 X5+B3 RELATIVE FWA TRANSFER + WORD COUNT
  23946. MX2 -18
  23947. IX7 X7-X6
  23948. BX6 -X2*X6
  23949. NG X7,/PROGRAM/HNG IF TRANSFER BEYOND FL
  23950. BX7 X2*X5 ADVANCE RELATIVE CM ADDRESS
  23951. BX7 X7+X6
  23952. BX5 -X2*X5
  23953. SA2 A2 GET RA OF CONTROL POINT
  23954. MX6 -RMSK
  23955. LX2 -RSHF
  23956. BX2 -X6*X2
  23957. LX2 6
  23958. IX5 X5+X2
  23959. MX6 1
  23960. BX1 -X1*X6 SET INSUFFICIENT FL FLAG
  23961. SX2 B3+A0 COMPUTE SECTOR COUNT
  23962. BX5 X5+X1
  23963. AX2 6
  23964. LX7 -24
  23965. NG X4,UDP3 IF READ TO EOR
  23966. IX7 X7-X2 DECREMENT SECTOR COUNT
  23967. UDP3 LX7 24
  23968. SA4 A5+B1 GET *MB* PARAMETERS
  23969. SA7 A5+ UPDATE *PIOM* *OR* PARAMETERS
  23970. LX4 12
  23971. MX6 -12
  23972. IX7 X4+X2 ADVANCE TOTAL SECTORS TRANSFERRED
  23973. BX7 -X6*X7 CLEAR POSSIBLE OVERFLOW
  23974. BX4 X6*X4 CLEAR OLD SECTORS TRANSFERRED FIELD
  23975. BX4 X4+X7
  23976. LX4 -24
  23977. IX7 X4+X2 ADVANCE CURRENT SECTOR
  23978. MX2 -12
  23979. LX4 -24
  23980. BX6 -X2*X4 EST ORDINAL
  23981. CX1 X6,EST CONVERT EST ORDINAL TO OFFSET
  23982. TA1 X1+EQDE,EST GET EST ENTRY
  23983. BX1 -X2*X1 MST ADDRESS / 10B
  23984. LX1 3
  23985. SA1 X1+MDGL GET SECTOR LIMIT
  23986. BX6 -X2*X1
  23987. BX1 -X2*X7
  23988. IX6 X1-X6
  23989. NG X6,UDP4 IF NOT END OF TRACK
  23990. BX6 -X2*X4 EQUIPMENT
  23991. LX4 12-2
  23992. CX1 X6,EST CONVERT EST ORDINAL TO OFFSET
  23993. TA1 X1+EQDE,EST READ EST ENTRY
  23994. MX6 -9
  23995. BX1 -X2*X1 MST ADDRESS / 10B
  23996. BX4 -X6*X4 TRT WORD INDEX
  23997. LX1 3
  23998. AX7 12 CLEAR CURRENT SECTOR
  23999. SA1 X1+TRLL SET FWA OF TRT
  24000. IX1 X1+X4
  24001. MX6 -2
  24002. SA1 X1+ READ TRT WORD
  24003. BX6 -X6*X7 TRT BYTE INDEX
  24004. SX4 12
  24005. IX6 X6*X4
  24006. SB6 X6
  24007. LX1 B6
  24008. PL X1,/PROGRAM/HNG IF NO NEXT TRACK
  24009. LX1 12
  24010. BX6 -X2*X1 GET NEXT TRACK
  24011. BX7 X2*X7 CLEAR TRACK
  24012. BX7 X7+X6 SET NEXT TRACK
  24013. LX7 12
  24014. UDP4 LX7 12 UPDATE *PIOM* *MB* PARAMETERS
  24015. SA7 A4
  24016. JP B2 RETURN
  24017. DIB SPACE 4,15
  24018. ** DIB - DROP I/O BUFFERS.
  24019. *
  24020. * ENTRY (B5) = FIRST FREE TRACK POINTER.
  24021. * (B6) = FWA TRT.
  24022. * (A5) = PP *OR* ADDRESS.
  24023. * (X3) = TRACK AND PRU INCREMENT.
  24024. * (X4) = -3777B.
  24025. * (X6) = NUMBER OF TRACKS AND PRU-S DROPPED.
  24026. * (X7) = TRACK POINTER.
  24027. *
  24028. * EXIT ABOVE REGISTERS RESTORED AS ON ENTRY.
  24029. * (B7) .NE. 0 TO INDICATE DEVICE.
  24030. *
  24031. * USES A - 1, 3, 6, 7.
  24032. * B - 2, 5, 6.
  24033. * X - 1, 2, 3, 4, 5, 6, 7.
  24034. *
  24035. * CALLS LBM.
  24036.  
  24037.  
  24038. DIBA CON 0 PSEUDO FNT (EQUIPMENT, TRACK, SECTOR)
  24039.  
  24040. DIB1 SB5 B2 FIRST FREE TRACK POINTER
  24041. SA3 SCRA TRACK AND PRU INCREMENT
  24042. SB6 B7 FWA TRT
  24043. SA1 A3+B1 TRACK POINTER
  24044. BX7 X1
  24045. MX4 -11
  24046. SA1 A1+B1 NUMBER OF TRACKS AND PRU-S DROPPED
  24047. BX6 X1
  24048. EQ /PROGRAM/DTC5.1 RETURN TO DROP REMAINING TRACKS
  24049.  
  24050. DIB SA5 A5+ CHECK FOR PROGRAM MODE
  24051. SB2 B5 SAVE (B5)
  24052. LX5 59-58
  24053. SA7 B1+SCRA SAVE (W6)
  24054. PL X5,/PROGRAM/DTC5.1 IF NOT PROGRAM MODE
  24055. SB7 B6 SAVE (B6)
  24056. SA6 A7+B1 SAVE (X6)
  24057. BX6 X3
  24058. SX3 B1
  24059. SA6 A7-B1 SAVE (X3)
  24060. LX4 -12
  24061. SA1 A5 BUILD PSEUDO FNT
  24062. LX3 35-0
  24063. LX7 2+24
  24064. SX5 BMDB DROP I/O BUFFERS
  24065. LX1 12
  24066. BX1 -X4*X1 EQUIPMENT
  24067. SX2 DIBA-1 PSEUDO FNT ADDRESS
  24068. LX5 -6
  24069. BX7 X1+X7
  24070. SB6 DIB1 RETURN ADDRESS FOR *LBM*
  24071. BX7 X7+X3
  24072. BX5 X5+X2
  24073. SA7 X2+B1
  24074. * EQ LBM CALL I/O BUFFER MANAGER
  24075. LBM SPACE 4,45
  24076. ** LBM - I/O BUFFER MANAGER.
  24077. *
  24078. * ENTRY (X5) = 6/OP, 6/PA, 24/0, 6/CP, 18/FNTA
  24079. * OP = OPERATION CODE.
  24080. * BMRD = READ BUFFER.
  24081. * BMWR = WRITE BUFFER.
  24082. * BMRW = REWRITE BUFFER.
  24083. * BMVI = VALIDATE AND INTERLOCK BUFFER.
  24084. * BMRG = RELEASE READ BUFFER AND GET NEXT.
  24085. * BMRB = RELEASE READ BUFFER.
  24086. * BMFL = FLUSH BUFFER.
  24087. * BMRF = RELEASE AND FLUSH WRITE BUFFER.
  24088. * BMFW = FLUSH ALL WRITE BUFFERS.
  24089. * BMTR = TERMINATE SHARED DEVICE READ
  24090. * ACCESS.
  24091. * BMTW = TERMINATE SHARED DEVICE WRITE
  24092. * ACCESS.
  24093. * BMDB = DROP ALL BUFFERS FOR FILE.
  24094. * BMDD = DROP ALL BUFFERS ON DEVICE.
  24095. * BMCR = COMPLETE SHARED DEVICE READ ACCESS
  24096. * REQUEST.
  24097. * BMCW = COMPLETE SHARED DEVICE WRITE ACCESS
  24098. * REQUEST.
  24099. * PA = OPERATION CODE DEPENDENT PARAMETER.
  24100. * FOR *BMRD* - BUFFER COUNT.
  24101. * 0 = USE DEFAULT BUFFER COUNT.
  24102. * BUFFER COUNT IF .NE. 0.
  24103. * FOR *BMWR* - RECALL ALLOWED FLAG.
  24104. * 0 = RECALL ALLOWED.
  24105. * 1 = RECALL NOT ALLOWED.
  24106. * FOR *BMVI* - OPERATION CODE TO BE
  24107. * EXECUTED IF BUFFER CANNOT BE
  24108. * INTERLOCKED IN MONITOR MODE.
  24109. * *BMRD* = INTERLOCK FOR READ.
  24110. * *BMWR* = INTERLOCK FOR WRITE.
  24111. * FOR *BMRF* - WRITE OPERATION CODE TO BE
  24112. * EXECUTED ON NEXT BUFFER AFTER
  24113. * FLUSH OF CURRENT BUFFER.
  24114. * 0 = NO WRITE OPERATION.
  24115. * *BMWR* = WRITE BUFFER.
  24116. * *BMRW* = REWRITE BUFFER.
  24117. * FOR *BMFW* - RESTART 819 I/O FLAG.
  24118. * 0 = DO NOT RESTART 819 I/O.
  24119. * RESTART 819 I/O IF .NE. 0.
  24120. * FOR *BMCR*, *BMCW* - STATUS CODE.
  24121. * 0 = NORMAL COMPLETION.
  24122. * 1 = *BRT* ENTRY EVICTED BY *MTE*.
  24123. * 2 = OTHER MACHINE CANNOT RELEASE
  24124. * WRITE ACCESS.
  24125. * CP = CONTROL POINT NUMBER IF PSEUDO-PP CALL.
  24126. * = 0 IF PP CALL.
  24127. * FNTA = FNT OFFSET IF PSEUDO-PP CALL.
  24128. * = PSEUDO FNT ADDRESS IF PP CALL.
  24129. * = EST ORDINAL IF OP = *BMFW* OR *BMDD*.
  24130. * = 0 IF *BMFW* TO PROCESS ALL EQUIPMENTS.
  24131. * (B6) = EXIT ADDRESS.
  24132. *
  24133. * EXIT (X6) = 5/ST, 43/0, 12/BI
  24134. * ST = STATUS.
  24135. * BIT 59 SET IF RECALL.
  24136. * BIT 58 SET IF BUFFER BUSY.
  24137. * BIT 57 SET IF I/O ERROR.
  24138. * BIT 56 SET IF INACCESSIBLE DEVICE.
  24139. * BIT 55 SET IF ADDRESS ERROR.
  24140. * BI = BUFFER INDEX.
  24141. * (FNTA) = ABSOLUTE FNT ADDRESS.
  24142. *
  24143. * USES X - 1, 2, 3, 4, 5, 6, 7.
  24144. * A - 1, 2, 3, 6, 7.
  24145. * B - 3, 6.
  24146. *
  24147. * CALLS DAB, FAW, FLB, RDB, REB, REN, RFB, RWB, WTB.
  24148.  
  24149.  
  24150. LBM SB3 SCRB SET SUBROUTINE CALL STACK POINTER
  24151. SX6 B6 SAVE RETURN ADDRESS
  24152. MX1 -6 GET FUNCTION CODE
  24153. SA6 RETA
  24154. LX5 6
  24155. BX7 -X1*X5 GET PRIMARY SUBFUNCTION
  24156. LX5 6 GET BUFFER COUNT/SECONDARY SUBFUNCTION
  24157. SA7 OPRC SAVE OPERATION CODE
  24158. SB6 X7
  24159. BX6 -X1*X5
  24160. LX5 -12
  24161. SA6 OPAR SAVE SUBFUNCTION PARAMETER
  24162. MX1 -24
  24163. SA6 BCNT
  24164. BX6 -X1*X5
  24165. SA6 RPRM
  24166. SX7 X6 GET FNT RELATIVE ADDRESS
  24167. AX6 18 GET CP NUMBER
  24168. ZR X6,LBM3 IF PP CALL
  24169. BX1 X6 GET CP RA
  24170. LX1 7
  24171. SA1 X1+FLSW
  24172. MX2 -RMSK
  24173. LX1 -RSHF
  24174. BX1 -X2*X1
  24175. LX1 6
  24176. IX7 X1-X7 FORM ADDRESS IN NEGATIVE FL
  24177. LBM3 SA7 FNTA SAVE FNT ADDRESS OR EST ORDINAL
  24178. SX6 B6-BMFW
  24179. ZR X6,LBM6 IF FLUSHING ALL WRITE BUFFERS
  24180. SX6 B6-BMDD
  24181. ZR X6,LBM6 IF DROPPING ALL BUFFERS
  24182. SX1 B1 GET FNT WORD 1
  24183. IX1 X7+X1
  24184. ERX1 X1
  24185. LX1 -12
  24186. MX7 -LSLBS
  24187. BX4 -X7*X1
  24188. MX5 -12
  24189. BX7 -X5*X1
  24190. SA7 OLSC
  24191. IX7 X7-X4 SET LOGICAL SECTOR TO START OF 4K BUFFER
  24192. LX1 -12 GET LOGICAL TRACK
  24193. SA7 LSEC
  24194. BX7 -X5*X1
  24195. LX1 -24 GET EST ORDINAL
  24196. SA7 LTRK
  24197. MX2 -9
  24198. BX1 -X2*X1 EST ORDINAL
  24199. CX2 X1,EST CONVERT EST ORDINAL TO OFFSET
  24200. SX6 B1
  24201. TA2 X2+EQDE,EST READ EST ENTRY
  24202. TX4 A5-1,-SP
  24203. SA3 CHRV
  24204. ZR X4,LBM4 IF PSEUDO PP
  24205. SA3 A5+1
  24206. LBM4 SX7 1
  24207. LX7 57-0
  24208. BX7 X7*X2
  24209. ZR X7,LBM5 IF NOT SHARED DEVICE
  24210. SX7 X1+ SET EST ORDINAL TO INDICATE SHARED DEVICE
  24211. LBM5 SA7 SDEO
  24212. BX7 -X5*X2 MST ADDRESS/10B
  24213. LX6 5-0
  24214. LX7 3
  24215. BX6 X6*X3 GET *READSYS* BIT FROM *CHRV*
  24216. BX2 X7
  24217. LX6 55-5
  24218. SA6 SFRF SET/CLEAR SYSTEM FILE READ FLAG
  24219. SA7 MSTA SAVE MST ADDRESS
  24220. SA2 X2+DILL
  24221. MX7 -6
  24222. BX7 -X7*X2
  24223. SA7 AILE ALGORITHM INDEX FOR *LDAM* EQUIPMENT
  24224. SA1 FNTA GET FNT WORD 2
  24225. SX7 B1+B1
  24226. IX1 X1+X7
  24227. ERX1 X1
  24228. BX7 -X5*X1 GET BUFFER INDEX
  24229. SA7 BIDX
  24230. SA3 A2+BDLL-DILL UNPACK READ AHEAD PARAMETERS
  24231. SX7 77B
  24232. BX6 X7*X3
  24233. AX3 6
  24234. SA6 RBTH READ BUFFER THRESHOLD
  24235. BX6 X7*X3
  24236. AX3 6
  24237. SA6 DBAT BUFFER ALLOCATION TRIGGER
  24238. SA2 BCNT
  24239. BX6 X7*X3
  24240. SA6 DCNT
  24241. NZ X2,LBM6 IF BUFFER COUNT SUPPLIED
  24242. SA6 BCNT
  24243. LBM6 SA1 A5 REREAD OUTPUT REGISTER
  24244. MX7 -6
  24245. BX6 X6-X6
  24246. BX7 -X7*X1 CHANNEL NUMBER, IF SELECTED BY CALLER
  24247. SA7 CHAN
  24248. SA6 FCBI
  24249. SA6 NCHV
  24250. SA6 DTSF CLEAR DATA STREAMING FLAG
  24251. PX7 X6 INITIALIZE BEST SYSTEM DEVICE ACTIVITY
  24252. SA6 CHEA
  24253. SA7 BSDA
  24254. SA6 SYDI
  24255. TNO /BUFIO/LBS,BIOMMF
  24256. JP B6+LBMA PROCESS FUNCTION
  24257.  
  24258. * ENTER FUNCTION PROCESSOR.
  24259. * (B3) = SUBROUTINE CALL STACK POINTER.
  24260.  
  24261. LBMA BSS 0
  24262. EQ RDB READ BUFFER
  24263. ERRNZ BMRD
  24264. EQ WTB WRITE BUFFER
  24265. ERRNZ BMWR-1
  24266. EQ RWB REWRITE BUFFER
  24267. ERRNZ BMRW-2
  24268. EQ * VERIFY/INTERLOCK MUST BE CALLED DIRECTLY
  24269. ERRNZ BMVI-3
  24270. EQ REB RELEASE READ BUFFER AND GET NEXT BUFFER
  24271. ERRNZ BMRG-4
  24272. EQ REN RELEASE READ BUFFER
  24273. ERRNZ BMRB-5
  24274. EQ FLB FLUSH BUFFER
  24275. ERRNZ BMFL-6
  24276. EQ RFB RELEASE AND FLUSH BUFFER
  24277. ERRNZ BMRF-7
  24278. EQ FAW FLUSH ALL WRITE BUFFERS
  24279. ERRNZ BMFW-10B
  24280. TEQ (/BUFIO/RRA,BIOMMF,/PROGRAM/HNG)
  24281. ERRNZ BMTR-11B
  24282. TEQ (/BUFIO/RWA,BIOMMF,/PROGRAM/HNG)
  24283. ERRNZ BMTW-12B
  24284. EQ DAB DROP ALL BUFFERS
  24285. ERRNZ BMDB-13B
  24286. EQ DBD DROP ALL BUFFERS ON DEVICE
  24287. ERRNZ BMDD-14B
  24288. TEQ (/BUFIO/CRR,BIOMMF,/PROGRAM/HNG)
  24289. ERRNZ BMCR-15B
  24290. TEQ (/BUFIO/CWR,BIOMMF,/PROGRAM/HNG)
  24291. ERRNZ BMCW-16B
  24292.  
  24293. * PROCESS NORMAL COMPLETION.
  24294.  
  24295. LBMX SA3 PUTO COUNT BUFFER REQUEST
  24296. SX7 B1+
  24297. LX3 PUTLS
  24298. SX6 B0+ CLEAR STATUS
  24299. + TA1 X3+ACST,PUT **** PERFORM IN ONE WORD ****
  24300. IX7 X1+X7 **** PERFORM IN ONE WORD ****
  24301. SA7 A1 **** PERFORM IN ONE WORD ****
  24302.  
  24303. * EXIT BUFFER MANAGER WITH STATUS FROM *X6*.
  24304.  
  24305. LBMXS SA2 FCBI
  24306. ZR X2,LBM9 IF NO BUFFER FOR RESPONSE
  24307. BX1 X2
  24308. LX2 CBTLS
  24309. TA3 X2+HSLK,CBT GET DRIVER STATUS
  24310. MX4 1
  24311. BX2 X4*X3 GET I/O ERROR FLAG
  24312. LX2 57-59
  24313. BX6 X6+X2 MERGE STATUS AND ERROR FLAG
  24314. SX4 5
  24315. LX4 55-0
  24316. BX2 X4*X6 I/O ERROR AND ADDRESS ERROR FLAGS
  24317. TX5 A5-1,-SP
  24318. ZR X5,LBM7 IF PSEUDO PP
  24319. SA3 NCHV
  24320. SA4 A5+B1
  24321. LX4 59-6
  24322. NZ X3,LBM7 IF NO *CHRV* DATA PRESENT
  24323. NG X4,LBM8 IF *1MV* RECALL AFTER FLUSH
  24324. LBM7 NZ X2,LBM9 IF I/O OR ADDRESS ERROR
  24325.  
  24326. LBM8 BX6 X6+X1 MERGE STATUS AND BUFFER ORDINAL
  24327.  
  24328. LBM9 SA1 RETA GET RETURN ADDRESS
  24329. SB6 X1
  24330. BX7 X7-X7 CLEAR CONTROL BUFFER INTERLOCK
  24331. SA7 INLB
  24332. SA7 MSTA CLEAR MST ADDRESS FOR *CDAM*
  24333. SA5 A5+
  24334. JP B6 RETURN
  24335.  
  24336.  
  24337. PARM BSS 0 PARAMETER AREA
  24338. AILE BSS 1 ALGORITHM INDEX FOR *LDAM* EQUIPMENT
  24339. BAFS BSS 1 *BFMM* ABSOLUTE FST ADDRESS
  24340. BCNT BSS 1 BUFFER COUNT PARAMETER
  24341. BDDC BSS 1 *BFMM* DEVICE DESCRIPTORS AND BUFFER COUNT
  24342. BFST BSS 1 *BFMM* ORIGINAL FST ENTRY
  24343. BIDX BSS 1 BUFFER INDEX PARAMETER
  24344. BSDA BSS 1 BEST SYSTEM DEVICE ACTIVITY
  24345. BSDI BSS 1 INDEX OF BEST SYSTEM DEVICE
  24346. CAFL BSS 1 ROUTINE *CHA* - FORWARD LINK STORAGE
  24347. CETS BSS LLCV+1 ROUTINE *CHA* - EVICT TABLE STORAGE
  24348. CHAD BSS 1 ROUTINE *CHA* - HASH ADDRESS STORAGE
  24349. CHAN BSS 1 CHANNEL SELECTED BY CALLER
  24350. CHEA BSS 1 CURRENT HASH ENTRY ADDRESS
  24351. CLST BSS 1 CURRENT LIST
  24352. CSBS BSS 1 ROUTINE *CHA* SCRATCH
  24353. DBAT BSS 2 DATA BUFFER ALLOCATION TRIGGER
  24354. DCNT EQU DBAT+1 DEFAULT BUFFER COUNT
  24355. DTSF BSS 1 DATA STREAMING FLAG SET BY *REB*
  24356. FBLB BSS 1 FLUSH ALL WRITE BUFFERS LINK BYTE
  24357. FCBI BSS 1 FIRST CONTROL BUFFER (PROGRAM MODE)
  24358. FCBM BSS 1 FIRST CONTROL BUFFER (MONITOR MODE)
  24359. FNTA BSS 1 FNT ADDRESS
  24360. HTA BSS 1 HASH TABLE BASE ADDRESS
  24361. LSEC BSS 1 LOGICAL SECTOR
  24362. LTRK BSS 1 LOGICAL TRACK
  24363. MSTA BSS 1 MST ADDRESS
  24364. NCHV BSS 1 *CHRV* PRESENT FLAG
  24365. OLSC BSS 1 ORIGINAL LOGICAL SECTOR
  24366. OPAR BSS 1 OPERATION CODE PARAMETER
  24367. OPRC BSS 1 BUFFER MANAGER OPERATION CODE
  24368. PUTO BSS 1 24/SUSL, 18/RLSN, 18/PUTO
  24369. * SUSL = SINGLE UNIT SECTOR LIMIT
  24370. * RLSN = RELATIVE SECTOR NUMBER IN UNIT
  24371. * PUTO = *PUT* ORDINAL
  24372. RBCT BSS 2 READ BUFFER COUNT
  24373. RBTH EQU RBCT+1 READ BUFFER THRESHOLD
  24374. RETA BSS 1 RETURN ADDRESS (USED IN ROUTINE *LBM*)
  24375. RPRM BSS 1 RECALL PARAMETER
  24376. SDEO BSS 1 EST ORDINAL IF SHARED DEVICE
  24377. SDUR CON 0 SHARED DEVICE UNABLE TO RELEASE ACCESS
  24378. SDWR CON 0 SHARED DEVICE WRITE ACCESS REQUESTED
  24379. SFRF BSS 1 SYSTEM FILE READ FLAG
  24380. SYDI BSS 1 SYSTEM DEVICE TABLE INDEX
  24381. PARML EQU *-PARM PARAMETER BLOCK LENGTH
  24382.  
  24383. INLB CON 0 CONTROL BUFFER INTERLOCK CELL
  24384. SPACE 4,10
  24385. ** SCRATCH AREA.
  24386.  
  24387.  
  24388. SCRA BSS 14B *DTKM* REGISTER SAVE AREA
  24389. SCRB BSS 14B *LBM* PROGRAM MODE REGISTER AREA
  24390. TITLE FUNCTION PROCESSORS.
  24391. CDA SPACE 4,15
  24392. ** CDA - CHECK DEVICE ACCESSIBILITY.
  24393. *
  24394. * ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
  24395. * (B5) = EXIT ADDRESS.
  24396. * (X5) = -7777B.
  24397. * (MSTA) = MST ADDRESS.
  24398. *
  24399. * EXIT (X6) = 0 IF DEVICE MAY BE ACCESSED.
  24400. * = 3/0, 1/1, 56/0 IF DEVICE MUST NOT BE ACCESSED.
  24401. * TO *LBMXS* IF DEVICE IS INACCESSIBLE.
  24402. *
  24403. * USES A - 2, 3, 4.
  24404. * X - 2, 3, 4, 6.
  24405.  
  24406.  
  24407.  
  24408. CDA BSS 0 ENTRY
  24409. SA4 A5+1
  24410. TX3 A5-1,-SP
  24411. NZ X3,CDA0 IF NOT PSEUDO PP
  24412. SA4 CHRV
  24413. CDA0 SA3 MSTA
  24414. BX6 X6-X6
  24415. LX4 59-5
  24416. SA2 X3+DALL GET DEVICE STATUS
  24417. SA3 INWL
  24418. LX2 59-55
  24419. LX3 59-15
  24420. PL X2,CDA2 IF DEVICE IS ACCESSIBLE
  24421. NG X4,CDA2 IF SYSTEM FILE READ
  24422. NG X3,CDA2 IF DEADSTART SEQUENCING NOT COMPLETE
  24423. SX3 X2+B1
  24424. LX4 59-1-59+5
  24425. ERRNZ EPAD-2 CODE DEPENDS ON VALUE
  24426. NG X4,CDA2 IF CALLER MAY ACCESS DOWN DEVICE
  24427. LX3 59-2
  24428. LX4 59-2-59+1
  24429. NG X3,CDA1 IF DEVICE IS DOWN
  24430. NG X4,CDA2 IF CALLER MAY ACCESS OFF/SUSPECT DEVICE
  24431. TX3 A5-1,-FP
  24432. LX3 PPXES-PPCES
  24433. TA3 X3+ACPP,FPX
  24434. SX3 X3 CONTROL POINT ADDRESS
  24435. SA3 X3+JCIW
  24436. SA4 A3+SEPW-JCIW
  24437. LX3 -24
  24438. BX3 -X5*X3
  24439. SX3 X3-LSSI-1
  24440. PL X3,CDA2 IF SUBSYSTEM
  24441. SA3 A3+TFSW-JCIW
  24442. LX4 59-56
  24443. LX3 -48
  24444. NG X4,CDA2 IF *UTL=* ENTRY POINT IS PRESENT
  24445. BX3 -X5*X3
  24446. CX4 X3,EJT CONVERT EJT ORDINAL TO OFFSET
  24447. TA4 X4+SCHE,EJT
  24448. LX2 59-57-59+55
  24449. LX4 59-34
  24450. ERRNZ UCTM-2 CODE DEPENDS ON VALUE
  24451. NG X4,CDA2 IF UNCONDITIONAL JOB TERMINATION IS SET
  24452. SA3 OPRC
  24453. NG X2,CDA1 IF DEVICE IS OFF
  24454. SX2 X3-BMWR
  24455. ZR X2,SBB IF WRITE OPERATION ON SUSPECT DEVICE
  24456. SX2 X3-BMRW
  24457. ZR X2,SBB IF REWRITE OPERATION ON SUSPECT DEVICE
  24458. SX2 X3-BMFO
  24459. PL X2,CDA2 IF OPERATION ALLOWED ON SUSPECT DEVICE
  24460. CDA1 SX6 B1 SET *INACCESSIBLE* STATUS
  24461. LX6 56
  24462. EQ LBMXS EXIT
  24463.  
  24464. CDA2 JP B5 EXIT
  24465. DAB SPACE 4,15
  24466. ** DAB - DROP ALL BUFFERS.
  24467. *
  24468. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  24469. *
  24470. * EXIT CONTROL GIVEN TO LBMX.
  24471. *
  24472. * USES A - 2, 3, 6, 7.
  24473. * B - 6.
  24474. * X - 0, 1, 2, 3, 6, 7.
  24475. *
  24476. * CALLS CHA, DCC, DCH, LCC.
  24477.  
  24478.  
  24479. DAB BSS 0 ENTRY
  24480. SX7 B1 INDICATE PP HAS NO *CHRV* DATA
  24481. SA7 NCHV
  24482. SX7 -B1 SET LOCATE HASH TABLE ENTRY
  24483. SB6 DAB1 RETURN ADDRESS FOR *CHA*
  24484. EQ CHA CALCULATE HASH ADDRESS
  24485.  
  24486. DAB1 ZR X1,LBMX IF HASH TABLE BUSY
  24487. SA2 X1 GET HASH ENTRY
  24488. MX7 -12
  24489. DAB2 ZR X2,LBMX IF NO ENTRIES TO PROCESS
  24490. BX6 -X7*X2
  24491. BX0 -X7*X2
  24492. SA6 INLB SET *CBT* INTERLOCK
  24493. LX6 CBTLS
  24494. MX7 -48
  24495. TA2 X6+IOLK,CBT GET I/O INTERLOCK FROM *CBT*
  24496. SA3 A2+B1 GET HASH LINK WORD FROM *CBT*
  24497. ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
  24498. BX6 X6-X6
  24499. NG X2,DAB6 IF I/O INTERLOCK SET
  24500. BX6 X3 SAVE HASH LINK WORD
  24501. SA3 A3+B1
  24502. ERRNZ LSLK-HSLK-1 CODE DEPENDS ON VALUE
  24503. SA6 DABA
  24504. BX6 -X7*X2 CLEAR I/O FLAGS
  24505. BX7 -X7*X3 CLEAR ACCESS COUNT
  24506. SA6 A2
  24507. SA7 A3
  24508. SB6 DAB3 RETURN ADDRESS FOR *DCH*
  24509. EQ DCH DELINK *CBT* FROM HASH LINK
  24510.  
  24511. DAB3 BX1 X0
  24512. SX2 B1
  24513. LX1 CBTLS
  24514. LX2 57
  24515. TA1 X1+IOLK,CBT
  24516. BX7 -X2*X1 CLEAR WRITE FLAG
  24517. SA7 A1
  24518. SB6 DAB4 RETURN ADDRESS FOR *DCC*
  24519. EQ DCC DELINK *CBT* FROM LIST LINK
  24520.  
  24521. DAB4 SB6 DAB5 RETURN ADDRESS FOR *LCC*
  24522. TX1 EMTB
  24523. EQ LCC LINK *CBT* TO EMPTY LIST
  24524.  
  24525. DAB5 SA3 DABA FIND NEXT *CBT* ON HASH LINK
  24526. BX6 X6-X6
  24527. DAB6 AX3 24
  24528. MX7 -12
  24529. SA6 INLB CLEAR *CBT* INTERLOCK
  24530. BX2 -X7*X3 NEXT *CBT* ORDINAL
  24531. EQ DAB2 LOOP FOR NEXT *CBT*
  24532.  
  24533.  
  24534. DABA BSS 1 CURRENT *HSLK* WORD
  24535. DBD SPACE 4,15
  24536. ** DBD - DROP ALL BUFFERS ON SPECIFIED DEVICE.
  24537. *
  24538. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  24539. *
  24540. * EXIT TO *LBMX* IF ALL BUFFERS DROPPED.
  24541. * TO *SBB* IF NOT ALL BUFFERS DROPPED.
  24542. *
  24543. * USES X - 0, 1, 2, 3, 4, 6, 7.
  24544. * A - 1, 2, 3, 4, 6.
  24545. * B - 4, 5, 6.
  24546. *
  24547. * CALLS DCC, DCH, LCC.
  24548.  
  24549.  
  24550. DBD BSS 0 ENTRY
  24551.  
  24552. * SET FIRST PUT ORDINAL.
  24553.  
  24554. SA1 FNTA GET EST ORDINAL
  24555. MX0 -12
  24556. CX2 X1,EST
  24557. TA1 X2+EQDE,EST
  24558. BX1 -X0*X1
  24559. LX1 3 MST ADDRESS
  24560. SA3 A1+EQAE-EQDE
  24561. MX2 -4
  24562. LX3 -18
  24563. BX3 -X2*X3 PARTITION NUMBER
  24564. SX2 HATLE
  24565. IX6 X2*X3 HASH TABLE PARTITION OFFSET
  24566. SA6 DBDC
  24567. SA1 X1+DILL
  24568. SB4 LBMX SET EXIT ADDRESS FOR ALL BUFFERS DROPPPED
  24569. LX1 -24
  24570. BX6 -X0*X1
  24571. SA6 DBDA SET FIRST PUT ORDINAL
  24572.  
  24573. * SET HASH TABLE ADDRESS AND SAVE NEXT PUT ORDINAL.
  24574.  
  24575. DBD1 SA1 DBDA GET PUT ORDINAL
  24576. ZR X1,RB4 IF ALL UNITS PROCESSED, EXIT
  24577. LX1 PUTLS
  24578. TA2 X1+HSCT,PUT
  24579. MX0 -12
  24580. BX6 -X0*X2
  24581. SA6 A1 SAVE NEXT PUT ORDINAL
  24582. MX0 -18
  24583. LX2 -24
  24584. BX6 -X0*X2
  24585. SA3 DBDC GET HASH TABLE PARTITION OFFSET
  24586. SB5 -B1 INITIALIZE HASH TABLE INDEX
  24587. IX6 X6+X3 ADD HASH TABLE PARTITION OFFSET
  24588. SA6 DBDB SAVE HASH TABLE ADDRESS
  24589.  
  24590. * GET NEXT HASH TABLE ENTRY.
  24591.  
  24592. DBD2 SA1 DBDB GET HASH TABLE ADDRESS
  24593. SB5 B5+1 ADVANCE HASH TABLE INDEX
  24594. SX2 B5-HATLE
  24595. ZR X2,DBD1 IF END OF HASH TABLE
  24596. SA1 X1+B5 GET HASH ENTRY
  24597. MX7 -12
  24598. BX7 -X7*X1 SET FIRST BUFFER ORDINAL
  24599.  
  24600. * DROP INACTIVE BUFFERS.
  24601.  
  24602. DBD3 SA7 INLB SET BUFFER INTERLOCK
  24603. BX0 X7 NEXT BUFFER ORDINAL
  24604. LX7 CBTLS SET CBT OFFSET
  24605. ZR X0,DBD2 IF END OF BUFFERS IN ENTRY
  24606. TA2 X7+IOLK,CBT GET I/O INTERLOCK AND WRITE FLAG
  24607. TA3 X7+HSLK,CBT GET HASH LINK
  24608. TA4 X7+LSLK,CBT GET ACTIVITY COUNT
  24609. SX1 5000B
  24610. MX6 12
  24611. LX1 48
  24612. MX7 -12
  24613. BX2 X1*X2 I/O INTERLOCK AND WRITE FLAG
  24614. LX3 -24
  24615. BX4 X6*X4 ACTIVITY COUNT
  24616. BX7 -X7*X3 SET NEXT BUFFER ORDINAL
  24617. BX6 X2+X4
  24618. ZR X6,DBD4 IF NO ACTIVITY REMAINS
  24619. SB4 SBB SET BUFFER BUSY EXIT
  24620. EQ DBD3 CHECK NEXT BUFFER
  24621.  
  24622. DBD4 SB6 DBD5 SET *DCH* RETURN ADDRESS
  24623. EQ DCH DELINK BUFFER FROM HASH TABLE
  24624.  
  24625. DBD5 SB6 DBD6 SET *DCC* RETURN ADDRESS
  24626. EQ DCC DELINK BUFFER FROM CURRENT LIST
  24627.  
  24628. DBD6 SB6 DBD3 SET *LCC* RETURN ADDRESS
  24629. TX1 EMTB
  24630. EQ LCC LINK BUFFER TO EMPTY LIST
  24631.  
  24632.  
  24633. DBDA BSS 1 NEXT PUT ORDINAL
  24634. DBDB BSS 1 HASH TABLE ADDRESS
  24635. DBDC BSS 1 HASH TABLE PARTITION OFFSET
  24636. FAW SPACE 4,15
  24637. ** FAW - FLUSH ALL WRITE BUFFERS.
  24638. *
  24639. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  24640. *
  24641. * EXIT CONTROL GIVEN TO LBMX.
  24642. *
  24643. * USES A - 1, 2, 3, 6.
  24644. * B - 5, 6.
  24645. * X - 0, 1, 2, 3, 5, 6.
  24646. *
  24647. * CALLS CDA, DCC, LCC.
  24648.  
  24649.  
  24650. FAW BSS 0 ENTRY
  24651. TX6 DWTB SET DATA WRITTEN AS CURRENT LIST
  24652. SA6 CLST
  24653. TA1 WRTB GET FIRST WRITE BUFFER
  24654. SX6 X1+ SAVE LINK BYTE
  24655. SA6 FBLB
  24656. FAW1 SA1 FBLB READ NEXT CONTROL BUFFER
  24657. ZR X1,FAW5 IF ALL BUFFERS FLUSHED
  24658. SB6 X1
  24659. SX6 X1 SET CONTROL BUFFER INTERLOCK
  24660. MX5 -12
  24661. LX1 CBTLS
  24662. SA6 INLB
  24663. TA1 X1+FSTC,CBT EST ORDINAL
  24664. LX1 12
  24665. SA2 A1+LSLK-FSTC GET LINK TO NEXT BUFFER
  24666. BX1 -X5*X1 EST ORDINAL
  24667. BX0 X2
  24668. CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
  24669. TA3 X3+EQDE,EST
  24670. SB5 FAW1.1 SET *CDA* EXIT ADDRESS
  24671. BX6 -X5*X3
  24672. LX6 3
  24673. SA6 MSTA STORE MST ADDRESS FOR *CDA*
  24674. EQ CDA CHECK DEVICE ACCESSIBILITY
  24675.  
  24676. FAW1.1 SA3 FNTA
  24677. MX2 12
  24678. BX2 X2*X0
  24679. LX0 -24
  24680. BX1 X1-X3
  24681. BX6 -X5*X0 NEXT BUFFER ORDINAL
  24682. SX0 B6
  24683. SA6 FBLB
  24684. NZ X2,FAW1 IF BUFFER CURRENTLY BEING ACCESSED
  24685. ZR X3,FAW2 IF FLUSHING ALL BUFFERS
  24686. NZ X1,FAW1 IF NOT SELECTED EQUIPMENT
  24687. FAW2 SB6 FAW3 RETURN ADDRESS FOR ROUTINE *DCC*
  24688. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  24689.  
  24690. FAW3 TX1 DWTB LINK BUFFER TO DATA WRITTEN LIST
  24691. SB6 FAW4
  24692. EQ LCC LINK CONTROL BUFFER
  24693.  
  24694. FAW4 BX6 X0 INITIATE I/O ON BUFFER
  24695. TA6 IORQ
  24696. XJ
  24697.  
  24698. EQ FAW1 PROCESS NEXT WRITE BUFFER
  24699.  
  24700. FAW5 SA1 OPAR
  24701. ZR X1,LBMX IF BUFFER COUNT = 0
  24702. TNO /BUFIO/LBMX,IHPFMD EXIT IF NOT 819
  24703. SX6 3 RESTART 819 I/O
  24704. LX6 36
  24705. TA6 IORQ
  24706. XJ
  24707.  
  24708. EQ LBMX RETURN
  24709. FLB SPACE 4,15
  24710. ** FLB - FLUSH BUFFER TO DISK.
  24711. *
  24712. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  24713. *
  24714. * EXIT CONTROL GIVEN TO LBMX.
  24715. * TO /PROGRAM/ HNG IF CONTROL BUFFER NOT FOUND.
  24716. *
  24717. * X - 0, 1, 2, 3, 4, 6, 7.
  24718. * A - 1, 2, 3, 6, 7.
  24719. * B - 6.
  24720. *
  24721. * CALLS DCC, LCC, SRR.
  24722.  
  24723.  
  24724. FLB BSS 0 ENTRY
  24725. SA2 BIDX
  24726. ZR X2,LBMX IF NO CONTROL BUFFER
  24727. BX6 X2 INTERLOCK BUFFER
  24728. LX2 CBTLS
  24729. SA6 INLB
  24730. TA3 X2+LSLK,CBT CHECK ACTIVITY COUNT
  24731. MX4 12
  24732. BX3 X4*X3
  24733. NZ X3,FLB7 IF BUFFER INTERLOCKED
  24734.  
  24735. * ENTRY FROM *RFB*.
  24736. * BUFFER IS WRITE INTERLOCKED IF ENTERED FROM *RFB*.
  24737.  
  24738. FLB1 TA3 X2+IOLK,CBT CHECK I/O ACTIVE
  24739. NG X3,FLB6 IF INTERLOCK SET
  24740. LX3 59-57
  24741. PL X3,FLB6 IF NOT WRITE DATA
  24742. BX0 X6
  24743. TX2 A5-1,-SP
  24744. SA3 A5+1
  24745. NZ X2,FLB1.1 IF NOT PSEUDO PP
  24746. SA3 CHRV
  24747. FLB1.1 TA6 IORQ
  24748. LX3 59-4
  24749. PL X3,FLB2 IF NOT DEVICE VERIFICATION
  24750. SB6 FLB2 SET *SRC* RETURN ADDRESS
  24751. EQ SRC SET RECALL CONTROL
  24752.  
  24753. FLB2 XJ INITIATE I/O
  24754.  
  24755. SB6 FLB4 RETURN ADDRESS FOR ROUTINE *DCC*
  24756. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  24757.  
  24758. FLB4 SB6 FLB5 LINK TO DATA WRITTEN LIST
  24759. TX1 DWTB
  24760. EQ LCC LINK CONTROL BUFFER
  24761.  
  24762. FLB5 BX1 X0 GET ACCESS COUNT WORD
  24763. LX1 CBTLS
  24764. TA2 X1+LSLK,CBT
  24765. MX3 12 CLEAR WRITE INTERLOCK
  24766. BX6 -X3*X2
  24767. SA6 A2+
  24768. FLB6 SA1 OPAR
  24769. ZR X1,FLB7 IF NO WRITE REQUEST
  24770. SX1 X1-BMWR
  24771. SX7 B0 CLEAR PARAMETER
  24772. SA7 A1
  24773. ZR X1,WTB IF WRITE
  24774. EQ RWB REWRITE
  24775.  
  24776. * THE BUFFER INDEX IS RETURNED HERE FOR THOSE ROUTINES WHICH
  24777. * NEED TO CHECK IF THE BUFFER FLUSH HAS COMPLETED.
  24778.  
  24779. FLB7 TX2 A5-1,-SP
  24780. SA1 BIDX
  24781. SA3 A5+B1
  24782. BX6 X1
  24783. SA6 FCBI
  24784. ZR X2,LBMX IF PSEUDO PP
  24785. LX3 59-4
  24786. SX6 B1
  24787. PL X3,LBMX IF NOT DEVICE VERIFICATION OPERATION
  24788. LX6 6-0
  24789. LX3 4-59
  24790. BX6 X6+X3 SET BUFFER FLUSH FLAG
  24791. SA6 A3
  24792. EQ SRR SET RECALL RESPONSE
  24793. INB SPACE 4,30
  24794. ** INB - INTERLOCK BUFFER.
  24795. *
  24796. * MONITOR MODE ONLY.
  24797. *
  24798. * NOTE - FOR PERFORMANCE REASONS, *INB* IS CALLED DIRECTLY BY
  24799. * *BFMM* AND *PIOM* TO AVOID UNNECCESSARY BUFFER MANAGER
  24800. * START UP AND SHUT DOWN OVERHEAD.
  24801. *
  24802. * ENTRY (X2) = SUBFUNCTION.
  24803. * (X6) = *FST*.
  24804. * (X7) = BUFFER INDEX TO VALIDATE.
  24805. * (B6) = EXIT ADDRESS.
  24806. *
  24807. * EXIT (X6) = 1/0, 1/B, 1/E, 1/I, 44/0, 12/BI
  24808. * B = 1 IF BUFFER BUSY.
  24809. * E = 1 IF I/O ERROR.
  24810. * I = 1 IF INACCESSIBLE SHARED DEVICE.
  24811. * BI = BUFFER ORDINAL.
  24812. * = 0 IF BUFFER NOT FOUND OR CANNOT BE
  24813. * INTERLOCKED.
  24814. * (B6) = RETURN ADDRESS.
  24815. * (FCBM) = ORDINAL OF BUFFER WITH ERROR.
  24816. *
  24817. * USES A - 1, 2, 3, 4, 6, 7.
  24818. * B - 3.
  24819. * X - ALL.
  24820.  
  24821.  
  24822. INB BSS 0 ENTRY
  24823. BX1 X7
  24824. BX7 X7-X7 CLEAR BUFFER ORDINAL
  24825. SA7 FCBM
  24826. BX7 X1
  24827. LX1 CBTLS
  24828. TA4 X1+HSLK,CBT
  24829. SA3 INBA
  24830. SB3 X2 SUBFUNCTION
  24831. SX0 B1
  24832. SA2 A4-B1
  24833. ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
  24834. SA1 A2-B1
  24835. ERRNZ IOLK-FSTC-1 CODE DEPENDS ON VALUE
  24836. BX1 X6-X1
  24837. BX1 X3*X1
  24838. SA3 INLB
  24839. NZ X1,INB8 IF FST/CBT MISMATCH
  24840. BX3 X3-X7
  24841. BX6 X7 SAVE BUFFER ORDINAL FOR REPLY
  24842. ZR X3,INB7 IF INTERLOCK SET
  24843. SA3 A4-HSLK+LSLK
  24844. BX5 X2
  24845. LX2 59-57
  24846. PL X4,INB1 IF NO I/O ERROR
  24847. PL X2,INB9 IF NO WRITE DATA IN BUFFER
  24848. INB1 NZ B3,INB4 IF WRITE/REWRITE
  24849. ERRNZ BMRD CODE DEPENDS ON VALUE
  24850. SX1 B1+
  24851. NG X3,INB7 IF WRITE INTERLOCK IS SET
  24852. LX1 48
  24853. IX7 X3+X1 INCREMENT ACCESS COUNT
  24854. NG X5,INB3 IF I/O ACTIVE
  24855. NG X2,INB5 IF BUFFER CONTAINS WRITE DATA
  24856. INB2 SA7 A3
  24857. EQ INB6 COUNT STATUS AND RETURN
  24858.  
  24859. INB3 PL X2,INB7 IF READ BUFFER BEING FILLED
  24860. EQ INB2 ALLOW READ OF WRITE DATA
  24861.  
  24862. INB4 MX1 12
  24863. BX1 X1*X3 GET ACCESS COUNT
  24864. NG X5,INB7 IF I/O INTERLOCK SET
  24865. NZ X1,INB7 IF ACCESS COUNT NOT ZERO
  24866. PL X2,INB4.2 IF WRITE DATA ACCESS FLAG CLEAR
  24867. INB4.1 MX1 1
  24868. BX7 X3+X1 SET WRITE INTERLOCK
  24869. SA7 A3+
  24870. EQ INB6 COUNT STATUS AND RETURN
  24871.  
  24872. INB4.2 TX1 A5-1,-SP
  24873. ZR X1,INB5 IF PSEUDO PP CALL
  24874. SA1 A5+B1
  24875. LX1 59-6
  24876. NG X1,INB4.1 IF *1MV* RECALL AFTER FLUSH
  24877. INB5 SX6 B0+ SET REPLY STATUS
  24878. SX0 B0+ DON-T COUNT ACCESS ATTEMPT
  24879. INB6 MX1 -12
  24880. BX3 -X1*X4
  24881. LX3 PUTLS
  24882. TA1 X3+INST,PUT
  24883. IX7 X1+X0
  24884. SA7 A1 UPDATE BUFFER VALIDATE STATISTICS
  24885. INB6.1 SA5 A5 RESTORE PP OUTPUT REGISTER
  24886. JP B6 RETURN
  24887.  
  24888. INB7 LX0 58-0
  24889. BX6 X6+X0 SET BUFFER BUSY
  24890. EQ INB6.1 EXIT
  24891.  
  24892. INB8 LX0 36 COUNT REJECT
  24893. BX6 X6-X6
  24894. EQ INB6 EXIT WITH BUFFER NOT FOUND
  24895.  
  24896. INB9 NG X5,INB7 IF I/O INTERLOCK IS SET
  24897. LX0 57-0
  24898. BX6 X0 SET I/O ERROR STATUS
  24899. SA7 FCBM SAVE BUFFER ORDINAL FOR CALLER
  24900. EQ INB6.1 EXIT
  24901.  
  24902.  
  24903. INBA DATA 07770000777777400000B *FST* COMPARISON MASK
  24904. RDB SPACE 4,35
  24905. ** RDB - INTERLOCK BUFFER IN READ MODE OR INITIATE READ.
  24906. *
  24907. * ENTRY (BCNT) = COUNT OF BUFFERS TO ALLOCATE IF REQUESTED
  24908. * BUFFER IS READ FROM DISK.
  24909. *
  24910. * EXIT TO *LBMX* IF BUFFER FOUND AND INTERLOCKED.
  24911. * TO *SBB* IF BUFFER FOUND BUT CANNOT BE INTERLOCKED,
  24912. * DATA READ IN PROGRESS AND RECALL CONTROL ALREADY SET
  24913. * ON BUFFER, OR BUFFER CANNOT BE ALLOCATED.
  24914. * TO *SRR* IF READ INITIATED OR IF DATA READ ALREADY IN
  24915. * PROGRESS AND RECALL CONTROL IS NOT ALREADY SET ON
  24916. * THE BUFFER.
  24917. * READ-AHEAD ON ADDITIONAL CONSECUTIVE BUFFERS INITIATED
  24918. * AS NEEDED IF TO RECALL ON READ OF REQUESTED BUFFER.
  24919. *
  24920. * USES A - 1, 2, 3, 6, 7.
  24921. * B - 6.
  24922. * X - ALL.
  24923. *
  24924. * CALLS ANB, CSD, CHA, DCC, LCC, SBB, SNS, SRC, SRR.
  24925. *
  24926. * IF THE BUFFER INDICATED BY *LTRK* AND *LSEC* IS FOUND AND CAN
  24927. * BE INTERLOCKED IN READ MODE, NORMAL STATUS WILL BE RETURNED.
  24928. * BUFFER BUSY STATUS WILL BE RETURNED IF THE BUFFER IS FOUND
  24929. * BUT INTERLOCKED IN WRITE MODE, IF A READ IS IN PROGRESS AND
  24930. * RECALL CONTROL IS ALREADY SET, OR IF THE BUFFER IS NOT FOUND
  24931. * AND CANNOT BE ALLOCATED. IN NONE OF THESE CASES WILL AN
  24932. * ATTEMPT BE MADE TO ALLOCATE ADDITIONAL BUFFERS. IF A READ
  24933. * BUFFER IS ALLOCATED OR IF A READ IS ALREADY IN PROGRESS AND
  24934. * RECALL CONTROL IS NOT ALREADY SET ON THE BUFFER, RECALL
  24935. * CONTROL WILL BE SET AND RECALL STATUS WILL RETURNED. ALSO,
  24936. * ADDITIONAL CONSECUTIVE BUFFERS WILL BE ALLOCATED, IF
  24937. * POSSIBLE, ACCORDING TO THE VALUE OF *BCNT*.
  24938.  
  24939.  
  24940. RDB BSS 0 ENTRY
  24941. SX7 B0 SET BUFFER NOT ALLOCATED
  24942. SA3 BCNT SET BUFFER COUNT TO ALLOCATE
  24943. BX6 -X3
  24944. SA6 RBCT
  24945. TX6 DRDB SET READ AS CURRENT LIST
  24946. SA6 CLST
  24947.  
  24948. * FIND NEXT BUFFER.
  24949.  
  24950. RDB2 SB6 RDB3 *CHA* RETURN ADDRESS
  24951. TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
  24952.  
  24953. RDB3 ZR X2,RDB14 IF FIRST ACCESS TO HASH ENTRY
  24954. NG X2,RDB11 IF BUFFER CANNOT BE ALLOCATED
  24955. ZR X0,RDB14 IF BUFFER NOT FOUND
  24956. ZR X7,RDB4 IF NO BUFFERS ALLOCATED
  24957. SB6 RDB19
  24958. EQ CAT CHECK ALLOCATION TRIGGER
  24959.  
  24960. RDB4 SX6 X0+ SAVE BUFFER ORDINAL FOR RESPONSE
  24961. SA6 FCBI
  24962. SA6 INLB SET CONTROL BUFFER INTERLOCK
  24963. LX6 CBTLS
  24964. TA2 X6+IOLK,CBT READ ACCESS FLAGS WORD
  24965. TA3 X6+LSLK,CBT READ ACCESS WORD COUNT
  24966. NG X2,RDB6 IF I/O INTERLOCK SET
  24967. LX2 59-57
  24968. BX6 X0
  24969. NG X3,SBB IF BUFFER INTERLOCKED IN WRITE MODE
  24970. PL X2,RDB8 IF NO WRITE DATA PRESENT
  24971. TA6 IORQ FLUSH WRITE DATA
  24972. XJ
  24973.  
  24974. EQ RDB8 DELINK BUFFER
  24975.  
  24976. RDB6 LX2 59-57
  24977. PL X2,RDB10 IF READ IN PROGRESS
  24978. RDB8 SA2 A3-LSLK+HSLK
  24979. NG X2,LBMX IF I/O ERROR
  24980. SX5 B1
  24981. LX5 48
  24982. SB6 RDB9 DELINK BUFFER FROM CONTROL BUFFER CHAIN
  24983. IX6 X3+X5
  24984. SA6 A3
  24985. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  24986.  
  24987. RDB9 TX1 DRDB LINK BUFFER TO READ CHAIN
  24988. SA2 BCNT CHECK BUFFER COUNT
  24989. SX4 B1 SET READ TRIGGER
  24990. BX3 X0
  24991. SX2 X2-1
  24992. LX4 58-0
  24993. ZR X2,RDB9.1 IF REQUEST WAS FOR ONE BUFFER
  24994. LX3 CBTLS
  24995. + TA2 X3+IOLK,CBT **** PERFORM IN ONE WORD ****
  24996. BX6 X2+X4 **** PERFORM IN ONE WORD ****
  24997. SA6 A2 **** PERFORM IN ONE WORD ****
  24998. RDB9.1 SB6 LBMX SET EXIT ADDRESS
  24999. EQ LCC LINK CONTROL BUFFER
  25000.  
  25001. RDB10 BX5 X0 CHECK RECALL CONTROL
  25002. LX5 CBTLS
  25003. TA2 X5+LSLK,CBT
  25004. MX3 -24
  25005. BX4 -X3*X2
  25006. NZ X4,SBB IF RECALL CONTROL SET
  25007. SA1 RPRM GET RECALL PARAMETER
  25008. SX6 2 SET UP *IOC* CALL
  25009. LX6 24
  25010. BX6 X6+X1
  25011. LX6 12
  25012. BX6 X6+X0
  25013. TA6 IORQ
  25014. XJ SET RECALL CONTROL
  25015.  
  25016. NZ X6,SRR IF FUNCTION WAS ACCEPTED
  25017. BX2 X0
  25018. LX2 CBTLS
  25019. TA3 X2+LSLK,CBT READ ACCESS COUNT
  25020. EQ RDB8 PROCESS RESPONSE
  25021.  
  25022. RDB11 NZ X7,SRR IF BUFFERS ALLOCATED
  25023. EQ SBB SET BUFFER BUSY RESPONSE
  25024.  
  25025. * ALLOCATE ADDITIONAL BUFFERS.
  25026.  
  25027. RDB12 SB6 RDB13 RETURN ADDRESS FOR ROUTINE *SNS*
  25028. EQ SNS SET NEXT SECTOR
  25029.  
  25030. RDB13 NZ X0,SRR IF EOI
  25031. EQ RDB2 ALLOCATE NEXT BUFFER
  25032.  
  25033. RDB14 SA1 SFRF GET SYSTEM FILE READ FLAG
  25034. * SB0 0 (ONE SYSTEM DEVICE)
  25035. NZ X1,RDB20 IF SYSTEM FILE READ
  25036. * SB0 0 (ONE SYSTEM DEVICE)
  25037. SA1 ANBA GET DATA WRITTEN THRESHOLD
  25038. SX6 X1-1 UPDATE THRESHOLD FOR WRITE
  25039. SX1 X6-DWLT
  25040. NG X1,RDB15 IF AT LOWER LIMIT
  25041. SA6 A1+ SAVE NEW THRESHOLD
  25042. RDB15 SB6 RDB16 RETURN ADDRESS FOR ROUTINE *ANB*
  25043. EQ ANB ALLOCATE NEXT BUFFER
  25044.  
  25045. RDB16 ZR X0,RDB11 IF BUFFER NOT AVAILABLE
  25046. NZ X7,RDB17 IF NOT FIRST BUFFER ALLOCATED
  25047. SX7 X0+ SAVE ORDINAL OF FIRST BUFFER ALLOCATED
  25048. SA7 FCBI
  25049. SB6 RDB17 RETURN ADDRESS FOR ROUTINE *SRC*
  25050. EQ SRC SET RECALL CONTROL
  25051.  
  25052. RDB17 SB6 RDB18 CHECK ALLOCATION TRIGGER
  25053. SA2 DTSF CHECK FOR DATA STREAMING
  25054. SX6 B1+
  25055. ZR X2,CAT IF NOT STREAMING DATA
  25056. SA6 DBAT
  25057. EQ CAT CHECK ALLOCATION TRIGGER
  25058.  
  25059. RDB18 TA7 IORQ INITIATE I/O
  25060. XJ
  25061.  
  25062. RDB19 NZ X6,RDB12 IF MORE BUFFERS TO ALLOCATE
  25063. EQ SRR SET RECALL REPLY
  25064.  
  25065. * IF A JOB IS READING THE SYSTEM FILE, AND THE DATA IS
  25066. * NOT ALREADY RESIDENT IN ESM/LCM, THE OTHER SYSTEM DEVICES
  25067. * ARE SEARCHED TO SEE IF THE DATA HAPPENS TO ALREADY BE IN
  25068. * ESM/LCM, BUT READ FROM A DIFFERENT UNIT (THIS METHOD
  25069. * DEPENDS ON THE FACT THAT EVERY COPY OF THE SYSTEM FILE
  25070. * HAS IDENTICAL LOGICAL AND PHYSICAL ADDRESSES FOR EVERY
  25071. * RECORD). IF THE DATA IS FOUND TO NOT RESIDE IN ESM/LCM
  25072. * IN ANY FORM, THE SYSTEM DEVICE WITH THE LEAST ACTIVITY
  25073. * IS USED TO READ THE DATA.
  25074.  
  25075. RDB20 SA1 SYDI SYSTEM DEVICE INDEX
  25076. BX5 X7 SAVE (X7)
  25077. SX6 X1+B1 INCREMENT INDEX
  25078. SA3 RDBB-1+X6
  25079. ZR X3,RDB23 IF END OF TABLE
  25080. SA6 A1
  25081. SA1 X3 *DALL* WORD OF THIS DEVICE
  25082. SA2 BSDA *DALL* OF PREVIOUS BEST SYSTEM DEVICE
  25083. IX2 X1-X2
  25084. BX7 X1
  25085. PL X2,RDB21 IF NO ACTIVITY IMPROVEMENT
  25086. SA6 BSDI SET NEW BEST SYSTEM DEVICE INDEX
  25087. SA7 A2+ SET NEW BEST ACTIVITY
  25088. RDB21 SA1 FNTA FNT ADDRESS
  25089. R= X7,FSTL
  25090. MX4 -48
  25091. TX0 SP
  25092. SA2 RDBA-1+X6 EST ORDINAL
  25093. IX0 X1-X0
  25094. LX2 48
  25095. IX7 X1+X7
  25096. ERX1 X7 READ FST
  25097. BX6 -X4*X1 CLEAR OLD EST ORDINAL
  25098. BX6 X6+X2 ADD NEW EST ORDINAL
  25099. LX4 -12
  25100. EWX6 X7 UPDATE FST
  25101. PL X0,RDB22 IF FNT IN JOB NFL
  25102. SA1 X7-2 READ MB+0
  25103. LX2 -12
  25104. BX6 -X4*X1 CLEAR OLD EST ORDINAL
  25105. BX6 X6+X2 ADD NEW EST ORDINAL
  25106. SA6 A1
  25107. RDB22 SX6 X3-DALL SAVE MST ADDRESS
  25108. SA6 MSTA
  25109. BX7 X5 RESTORE (X7)
  25110. EQ RDB2 CHECK NEXT SYSTEM DEVICE
  25111.  
  25112. RDB23 SA1 BSDI BEST SYSTEM DEVICE INDEX
  25113. SA3 RDBB-1+X1 MST ADDRESS (*DALL* ADDRESS)
  25114. BX7 X7-X7
  25115. BX6 X1
  25116. SA7 SFRF CLEAR SYSTEM FILE READ FLAG
  25117. EQ RDB21 READ SYSTEM FILE FROM SELECTED DEVICE
  25118.  
  25119. RDBA BSS MXSY TABLE OF SYSTEM DEVICE EST ORDINALS
  25120.  
  25121. RDBB BSS MXSY+1 TABLE OF SYSTEM DEVICE MST ADDRESSES
  25122. REB SPACE 4,15
  25123. ** REB - RELEASE EMPTY READ BUFFER AND INTERLOCK NEXT BUFFER.
  25124. *
  25125. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  25126. *
  25127. * EXIT TO *RDB* TO INTERLOCK NEXT BUFFER IF *REB* FUNCTION.
  25128. * TO *LBMX* IF *REN* FUNCTION.
  25129. *
  25130. * USES A - 1, 2, 3, 6, 7.
  25131. * B - 6.
  25132. * X - ALL.
  25133. *
  25134. * CALLS ANB, CSD, CHA, DCC, DCH, LCC, SNS, SRC.
  25135.  
  25136.  
  25137. REB BSS 0 ENTRY
  25138. SX7 B0+ CLEAR *REN* FUNCTION FLAG
  25139.  
  25140. * ENTRY FROM *REN* FUNCTION.
  25141. * DECREMENT READ ACCESS COUNT.
  25142.  
  25143. REB1 SA1 BIDX GET CONTROL BUFFER INDEX
  25144. SA7 REBA
  25145. BX0 X1
  25146. BX6 X1 SET CONTROL BUFFER INTERLOCK
  25147. SA6 INLB
  25148. TX7 DRDB SET READ AS CURRENT LIST
  25149. SA7 CLST
  25150. LX6 CBTLS
  25151. MX3 12
  25152. TA2 X6+LSLK,CBT READ ACCESS COUNT WORD
  25153. BX5 X3*X2 GET ACCESS COUNT
  25154. AX5 49
  25155. ZR X5,REB2 IF COUNT = 0 OR 1
  25156. SX4 B1
  25157. LX4 48
  25158. IX6 X2-X4 DECREMENT COUNT
  25159. SA6 A2
  25160. EQ REB4 CHECK READ THRESHOLD
  25161.  
  25162. REB2 BX6 -X3*X2 CLEAR ACCESS COUNT
  25163. SA6 A2
  25164. SA2 A2+IOLK-LSLK
  25165. NO
  25166. LX2 59-55
  25167. NG X2,REB4 IF SYSTEM FILE BUFFER, LEAVE ON CHAIN
  25168. SB6 REB3 RETURN ADDRESS FOR ROUTINE *DCC*
  25169. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  25170.  
  25171. REB3 SB6 REB4 LINK TO EMPTY LIST
  25172. TX1 EMTB
  25173. EQ LCC LINK CONTROL BUFFER
  25174.  
  25175. * CHECK FOR READ-AHEAD TRIGGER.
  25176.  
  25177. REB4 SA1 BIDX GET READ THRESHOLD BIT
  25178. LX1 CBTLS
  25179. TA1 X1+IOLK,CBT
  25180. BX0 X1
  25181. BX6 X6-X6 CLEAR CONTROL BUFFER INTERLOCK
  25182. SA6 INLB
  25183. SA1 LSEC SAVE LOGICAL TRACK AND SECTOR
  25184. SA2 LTRK
  25185. BX6 X1
  25186. BX7 X2
  25187. SA6 OLSC
  25188. SA7 BCNT
  25189. LX0 59-58 TEST READ THRESHOLD
  25190. PL X0,REB18 IF NOT READ-AHEAD TRIGGER BUFFER
  25191. BX7 X7-X7
  25192. SA3 RBTH SET BUFFER COUNT TO ALLOCATE
  25193. BX6 -X3
  25194. ERRNZ RBCT+1-RBTH CODE DEPENDS ON VALUE
  25195. SA6 A3-B1
  25196. SA1 REBA
  25197. ZR X1,REB7 IF *REB* FUNCTION
  25198.  
  25199. * FIND LAST CONSECUTIVE BUFFER ON HASH CHAIN.
  25200.  
  25201. REB5 ZR X6,REB18 IF ALL BUFFERS ALLOCATED
  25202. SB6 REB6
  25203. EQ SNS SET NEXT SECTOR
  25204.  
  25205. REB6 NZ X0,REB18 IF END OF LOGICAL TRACK CHAIN
  25206. REB7 SB6 REB8
  25207. TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
  25208.  
  25209. REB8 ZR X2,REB9 IF END OF CONSECUTIVE CHAIN
  25210. NG X2,REB18 IF BUFFER CANNOT BE ALLOCATED
  25211. ZR X0,REB9 IF END OF CONSECUTIVE CHAIN
  25212. SB6 REB5
  25213. EQ CAT CHECK ALLOCATION TRIGGER
  25214.  
  25215. * ALLOCATE ADDITIONAL BUFFERS.
  25216.  
  25217. REB9 SA3 RBTH SET BUFFER COUNT TO ALLOCATE
  25218. BX6 -X3
  25219. ERRNZ RBCT+1-RBTH CODE DEPENDS ON VALUE
  25220. SA6 A3-B1
  25221. REB10 SB6 REB11
  25222. EQ ANB ALLOCATE NEXT BUFFER
  25223.  
  25224. REB11 ZR X0,REB18 IF NO BUFFERS AVAILABLE
  25225. SB6 REB12
  25226. EQ CAT CHECK ALLOCATION TRIGGER
  25227.  
  25228. REB12 TA7 IORQ INITIATE I/O
  25229. XJ
  25230.  
  25231. REB13 ZR X6,REB18 IF ALL BUFFERS ALLOCATED
  25232. SB6 REB14
  25233. EQ SNS SET NEXT SECTOR
  25234.  
  25235. REB14 NZ X0,REB18 IF EOI
  25236. SB6 REB15
  25237. TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
  25238.  
  25239. REB15 ZR X2,REB10 IF FIRST ACCESS TO HASH ENTRY
  25240. NG X2,REB18 IF BUFFER CANNOT BE ALLOCATED
  25241. ZR X0,REB10 IF BUFFER NOT FOUND
  25242. SB6 REB13
  25243. EQ CAT CHECK ALLOCATION TRIGGER
  25244.  
  25245. * CHECK FOR NEXT BUFFER AVAILABLE FOR RESPONSE.
  25246.  
  25247. REB18 SA1 REBA GET FUNCTION FLAG
  25248. NZ X1,LBMX IF *REN* FUNCTION
  25249. SA1 BCNT GET ORIGINAL LTRK
  25250. SA2 OLSC GET ORIGINAL LSEC
  25251. BX6 X1
  25252. BX7 X2
  25253. SA6 LTRK
  25254. SA7 LSEC
  25255. SX6 B1 SET BUFFER COUNT TO ALLOCATE
  25256. SA6 A1
  25257. SA6 DTSF SET DATA STREAMING FLAG
  25258. EQ RDB USE READ FUNCTION CODE
  25259.  
  25260.  
  25261. REBA CON 0 *REN* FUNCTION FLAG
  25262. REN SPACE 4,10
  25263. ** REN - RELEASE READ BUFFER.
  25264. *
  25265. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  25266. *
  25267. * EXIT CONTROL GIVEN TO *REB*.
  25268. *
  25269. * USES A - 7.
  25270. * X - 7.
  25271.  
  25272.  
  25273. REN BSS 0 ENTRY
  25274. SX7 1 INDICATE *REN* FUNCTION
  25275. EQ REB1 USE *REB* CODE
  25276. RFB SPACE 4,10
  25277. ** RFB - RELEASE AND FLUSH BUFFER.
  25278. *
  25279. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  25280. *
  25281. * EXIT TO *FLB1*.
  25282. *
  25283. * USES A - 2.
  25284. * X - 0, 2.
  25285.  
  25286.  
  25287. RFB BSS 0 ENTRY
  25288. SA2 BIDX GET BUFFER INDEX
  25289. BX6 X2
  25290. LX2 CBTLS
  25291. SA6 INLB INTERLOCK BUFFER
  25292. NZ X2,FLB1 IF BUFFER INDEX
  25293. EQ /PROGRAM/HNG HANG CALLER
  25294. RWB SPACE 4,15
  25295. ** RWB - REWRITE BUFFER.
  25296. *
  25297. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  25298. *
  25299. * EXIT CONTROL GIVEN TO LBMX.
  25300. *
  25301. * USES A - 1, 6.
  25302. * X - 1, 6.
  25303. *
  25304. * CALLS WTB.
  25305.  
  25306.  
  25307. RWB BSS 0 ENTRY
  25308. SA1 LSEC FORCE PREREAD
  25309. SX6 X1+1
  25310. SA6 OLSC
  25311. MX6 -1 BYPASS CHECK OF I/O ACTIVE COUNT
  25312. SA6 BCNT
  25313. * EQ WTB USE *WTB* FUNCTION
  25314. WTB SPACE 4,15
  25315. ** WTB - WRITE BUFFER.
  25316. *
  25317. * ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
  25318. *
  25319. * EXIT CONTROL GIVEN TO LBMX.
  25320. *
  25321. * USES A - 1, 2, 3, 4, 6, 7.
  25322. * B - 6.
  25323. * X - 0, 1, 2, 3, 4, 6, 7.
  25324. *
  25325. * CALLS ANB, CSD, CHA, CHT, DCC, SBB, SRC, SRP.
  25326.  
  25327.  
  25328. WTB BSS 0 ENTRY
  25329. SA1 ANBA GET DATA WRITTEN THRESHOLD
  25330. TX7 MDWB GET UPPER LIMIT
  25331. SX6 X1+B1 UPDATE THRESHOLD FOR WRITE
  25332. IX7 X6-X7
  25333. PL X7,WTB1 IF AT UPPER LIMIT
  25334. SA6 A1+ SAVE NEW THRESHOLD
  25335. WTB1 SX7 0 CLEAR PUSH STACK
  25336. TX6 WRTB SET WRITE AS CURRENT LIST
  25337. SA6 CLST
  25338. WTB2 SB6 WTB3 *CHA* RETURN ADDRESS
  25339. TEQ (/BUFIO/CSD1,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
  25340.  
  25341. WTB3 ZR X2,WTB12 IF FIRST ACCESS
  25342. NG X2,WTB17 IF BUFFER CANNOT BE ACCESSED OR ALLOCATED
  25343. ZR X0,WTB9 IF CONTROL BUFFER NOT FOUND
  25344. SX6 X0+ BUFFER ORDINAL
  25345. SA6 INLB SET CONTROL BUFFER INTERLOCK
  25346. LX6 CBTLS
  25347. TA2 X6+LSLK,CBT
  25348. MX3 12
  25349. BX3 X3*X2
  25350. NZ X3,SBB IF READ OR WRITE BUFFER
  25351. TA2 X6+IOLK,CBT
  25352. NG X2,WTB8 IF I/O INTERLOCK SET
  25353. SX7 X0+ SAVE BUFFER ORDINAL
  25354. SA7 FCBI
  25355. SB6 WTB4 RETURN ADDRESS FOR ROUTINE *DCC*
  25356. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  25357.  
  25358. WTB4 SB6 WTB6 LINK TO WRITE LIST
  25359. TX1 WRTB
  25360. EQ LCC LINK CONTROL BUFFER
  25361.  
  25362. WTB6 BX1 X0 GET ADDRESS OF CONTROL BUFFER
  25363. LX1 CBTLS
  25364. TA2 X1+IOLK,CBT SET WRITE DATA ACCESS FLAG
  25365. MX3 12 CLEAR OLD ACCESS FLAGS
  25366. BX2 -X3*X2
  25367. MX3 1
  25368. LX3 57-59
  25369. BX6 X2+X3
  25370. SA6 A2
  25371. TA2 X1+LSLK,CBT SET WRITE INTERLOCK
  25372. MX3 12
  25373. BX2 -X3*X2
  25374. MX3 1
  25375. BX6 X2+X3
  25376. SA6 A2
  25377. EQ LBMX EXIT
  25378.  
  25379. WTB8 SA3 OPAR
  25380. TA2 X6+LSLK,CBT CHECK RECALL CONTROL
  25381. NZ X3,SBB IF RECALL NOT ALLOWED
  25382. MX3 -24
  25383. BX3 -X3*X2
  25384. NZ X3,SBB IF RECALL CONTROL SET
  25385. BX6 X0
  25386. SA6 FCBI
  25387. SA1 RPRM GET RECALL PARAMETER
  25388. SX6 B1+B1
  25389. LX6 24
  25390. BX6 X6+X1
  25391. LX6 12
  25392. BX6 X6+X0
  25393. TA6 IORQ
  25394. XJ SET RECALL CONTROL
  25395.  
  25396. NZ X6,SRR IF FUNCTION ACCEPTED
  25397. EQ SBB SET BUFFER BUSY RESPONSE
  25398.  
  25399. * CHECK FOR AMOUNT OF ACTIVITY ON DEVICE.
  25400.  
  25401. WTB9 SA2 MSTA CHECK DEVICE ACTIVITY
  25402. SA2 X2+DALL
  25403. SX3 77B
  25404. LX2 12
  25405. BX4 X3*X2
  25406. SX2 X4-DACL
  25407. NG X2,WTB12 IF DEVICE ACTIVITY OKAY
  25408. TX3 A5-1,-SP
  25409. ZR X3,WTB10 IF PSEUDO PP CALL
  25410. SA2 A5+B1
  25411. LX2 59-4
  25412. NG X2,WTB12 IF *1MV* CALL
  25413. WTB10 SA4 BCNT
  25414. PL X4,SBB IF NOT CALLED BY *RWB*
  25415.  
  25416. * ALLOCATE A BUFFER FOR WRITE.
  25417.  
  25418. WTB12 SB6 WTB13 RETURN ADDRESS FOR ROUTINE *ANB*
  25419. EQ ANB ALLOCATE NEXT BUFFER
  25420.  
  25421. WTB13 ZR X0,SBB IF BUFFER NOT AVAILABLE
  25422. SX6 X0+ SAVE BUFFER ORDINAL FOR RESPONSE
  25423. SA6 FCBI
  25424. SA2 LSEC CHECK FOR I/O ON 4K BOUNDARY
  25425. SA3 OLSC
  25426. IX3 X3-X2
  25427. ZR X3,WTB6 IF ON FIRST PRU OF BUFFER
  25428. SB6 WTB14 RETURN ADDRESS FOR ROUTINE *DCC*
  25429. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  25430.  
  25431. WTB14 SB6 WTB15 LINK TO READ LIST
  25432. TX1 DRDB
  25433. EQ LCC LINK CONTROL BUFFER
  25434.  
  25435. WTB15 SB6 WTB16 RETURN ADDRESS FOR ROUTINE *SRC*
  25436. EQ SRC SET RECALL CONTROL
  25437.  
  25438. WTB16 SX6 X0+ INITIATE I/O ON BUFFER
  25439. TA6 IORQ
  25440. XJ
  25441.  
  25442. EQ SRR SET RECALL REPLY
  25443.  
  25444. WTB17 SX6 X2+2
  25445. ZR X6,SBB IF SHARED DEVICE BUFFER CANNOT BE ACCESSED
  25446. SX6 B1 SET TO COUNT HASH TABLE FULL
  25447. SB6 SBB EXIT TO SET BUFFER BUSY
  25448. LX6 24
  25449. EQ CHT UPDATE COUNTERS
  25450. ANB TITLE SUBROUTINES.
  25451. ANB SPACE 4,20
  25452. ** ANB - ALLOCATE NEXT BUFFER.
  25453. *
  25454. * ENTRY (X7) = BUFFERS ALLOCATED STACK.
  25455. * (B6) = RETURN ADDRESS.
  25456. * (B3) = SCRATCH AREA *SCRC* ADDRESS.
  25457. * (CHEA) = CURRENT HASH ENTRY ADDRESS.
  25458. * (CLST) = ADDRESS OF CURRENT LIST CONTROL WORD.
  25459. * (SFRF) = SYSTEM FILE READ FLAG.
  25460. *
  25461. * EXIT (X0) = CONTROL BUFFER INDEX ALLOCATED.
  25462. * = 0 IF NO BUFFER AVAILABLE.
  25463. * ALLOCATED CONTROL BUFFER WILL CONTAIN
  25464. * CORRECT PARAMETERS FOR THE REQUEST.
  25465. *
  25466. * USES A - 1, 2, 3, 4, 6.
  25467. * B - 3, 6.
  25468. * X - 0, 1, 2, 3, 4, 5, 6.
  25469. *
  25470. * CALLS CLP, DCC, DCH, LCC, LCH.
  25471.  
  25472.  
  25473. ANB BSS 0 ENTRY
  25474. SA2 PUTO PUT ORDINAL
  25475. BX0 X0-X0 PRESET NO BUFFER FOUND
  25476. LX2 PUTLS
  25477. TA2 X2+UNCT,PUT READ *PUT*
  25478. MX5 6
  25479. SA1 A2+B1
  25480. ERRNZ UNCT+1-HSCT CODE DEPENDS ON VALUE
  25481. MX4 -4
  25482. LX2 -24-8
  25483. BX6 X5*X1 PHYSICAL SECTORS PER I/O BUFFER
  25484. BX3 -X4*X2
  25485. LX6 6
  25486. LX2 59-58+32
  25487. SA6 ANBD
  25488. NZ X3,/MONITOR/RB6 IF TOO MANY REQUESTS ON UNIT
  25489. PL X2,ANB1 IF *RW* FLAG NOT SET
  25490. LX1 59-12-8
  25491. ERRNZ RCTH-400B VALUE MUST BE 400B
  25492. NG X1,/MONITOR/RB6 IF TOO MANY REQUESTS PROCESSED
  25493. ANB1 SX6 B6 SAVE (B6)
  25494. SA6 B3
  25495. SA6 ANBA+1 SET DATA WRITTEN NOT SKIPPED
  25496. SB3 B3+1
  25497. TB6 EMTB INITIALIZE LIST INDEX
  25498. ANB2 SA1 B6 GET LIST BASE WORD
  25499. SX0 X1 GET FIRST CONTROL BUFFER ON LIST
  25500. ZR X0,ANB20 IF LIST IS EMPTY
  25501. ANB3 BX6 X0 SET CONTROL BUFFER INTERLOCK
  25502. SA6 INLB
  25503. LX6 CBTLS
  25504. TA2 X6+LSLK,CBT GET LIST LINK WORD
  25505. MX5 12 GET ACCESS COUNT
  25506. BX4 X5*X2
  25507. NZ X4,ANB19 IF ACCESS COUNT NOT ZERO
  25508. SA4 A2-LSLK+IOLK GET ACCESS FLAGS WORD
  25509. NG X4,ANB19 IF I/O INTERLOCK FLAG IS SET
  25510. LX4 59-57
  25511. PL X4,ANB7 IF NOT WRITE DATA
  25512.  
  25513. * AVOID FLUSH TO DOWN DEVICE.
  25514.  
  25515. SA4 A2+FSTC-LSLK GET EST ORDINAL FROM CONTROL BUFFER
  25516. BX6 X5*X4
  25517. LX6 -48
  25518. CX4 X6,EST CONVERT EST ORDINAL TO OFFSET
  25519. SX6 B1
  25520. TA4 X4+EQDE,EST
  25521. LX4 59-49
  25522. LX3 X4,B1
  25523. PL X4,ANB4 IF DEVICE NOT DOWN
  25524. NG X3,ANB19 IF DEVICE IS DOWN
  25525.  
  25526. * WRITE BUFFER FOUND, FLUSH TO DISK.
  25527.  
  25528. ANB4 TA2 WRTBC,IBST COUNT WRITE BUFFER REALLOCATED (FLUSHED)
  25529. IX6 X2+X6
  25530. SA6 A2
  25531. SX6 X0+
  25532. TA6 IORQ
  25533. XJ
  25534.  
  25535. SB6 ANB5 RETURN ADDRESS FOR ROUTINE *DCC*
  25536. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  25537.  
  25538. ANB5 SB6 ANB6 LINK TO DATA WRITTEN LIST
  25539. TX1 DWTB
  25540. EQ LCC LINK CONTROL BUFFER
  25541.  
  25542. ANB6 SX0 B0+ CLEAR BUFFER FOUND
  25543. SA1 ANBA+1
  25544. NZ X1,ANBX IF DATA WRITTEN LIST PROCESSED
  25545. TB6 DWTB DATA WRITTEN LIST WAS SKIPPED INITIALLY
  25546. EQ ANB2 PROCESS DATA WRITTEN LIST
  25547.  
  25548. * UPDATE CONTROL BUFFER FOR NEW REQUEST.
  25549.  
  25550. ANB7 TX2 B6-1,-BLMB INCREMENT SELECTED LIST
  25551. TA2 X2,IBST
  25552. SX6 1
  25553. IX6 X2+X6
  25554. SA6 A2
  25555. SB6 ANB8 RETURN ADDRESS FOR ROUTINE *DCC*
  25556. EQ DCC DELINK CONTROL BUFFER FROM BUFFER LIST
  25557.  
  25558. ANB8 SB6 ANB9 RETURN ADDRESS FOR ROUTINE *DCH*
  25559. EQ DCH DELINK CONTROL BUFFER FROM HASH LINK
  25560.  
  25561. ANB9 SA3 CHEA
  25562. SA2 LSEC GET CURRENT LOGICAL SECTOR
  25563. SA1 X3
  25564. BX5 X1
  25565. NZ X5,ANB11 IF NOT FIRST ENTRY
  25566. SA3 LTRK FORM HASH ENTRY
  25567. LX2 24
  25568. BX5 X2
  25569. LX2 12
  25570. BX5 X5+X2
  25571. LX3 48
  25572. BX6 X5+X3
  25573. SA6 A1+
  25574. EQ ANB14 CREATE NEW HASH ENTRY
  25575.  
  25576. ANB11 MX6 12 CHECK FIRST AND LAST LIMITS
  25577. LX6 36
  25578. BX4 X6*X5
  25579. LX6 12
  25580. BX3 X6*X5
  25581. AX4 24
  25582. AX3 36
  25583. IX6 X4-X2
  25584. PL X6,ANB12 IF LAST LIMIT VALID
  25585. BX4 X2
  25586. EQ ANB13 MODIFY HASH ENTRY
  25587.  
  25588. ANB12 IX6 X2-X3 CHECK FIRST LIMIT
  25589. BX3 X2
  25590. PL X6,ANB14 IF FIRST LIMIT VALID
  25591. ANB13 LX3 36
  25592. LX4 24
  25593. MX6 24
  25594. LX6 48
  25595. BX5 -X6*X5 CLEAR OLD LIMITS
  25596. BX5 X5+X4 ADD NEW LIMITS
  25597. BX6 X5+X3
  25598. SA6 A1
  25599. ANB14 SB6 ANB15 *CLP* RETURN ADDRESS
  25600. EQ CLP CONVERT LOGICAL TO PHYSICAL DISK ADDRESS
  25601.  
  25602. * (X0) = CONTROL BUFFER ORDINAL.
  25603. * (X1) = PHYSICAL CYLINDER NUMBER.
  25604. * (X3) = PHYSICAL UNIT NUMBER.
  25605. * (X4) = 48/, 6/PHYSICAL TRACK, 6/PHYSICAL SECTOR.
  25606.  
  25607. ANB15 BX2 X0 CONTROL BUFFER ORDINAL
  25608. LX2 CBTLS
  25609. LX3 48
  25610. LX1 36
  25611. LX4 24
  25612. BX6 X3+X4
  25613. SA4 LSEC BUILD LOGICAL NEXT SECTOR IN BUFFER
  25614. SX3 LSLB/4
  25615. IX5 X3+X4
  25616. BX6 X6+X1
  25617. BX6 X5+X6
  25618. TA6 X2+PAD1,CBT
  25619. SA2 ANBD PHYSICAL SECTORS PER I/O BUFFER
  25620. MX5 -1
  25621. AX2 1
  25622. BX5 -X5*X2 SECTOR INCREMENT - SECTOR SIZE .EQ. 8K
  25623. AX2 1 SECTOR INCREMENT - SECTORS SIZES .LT. 8K
  25624. LX5 24
  25625. LX2 24
  25626. BX2 X2+X3 MERGE LOGICAL SECTOR INCREMENT
  25627. ERRNZ PSLB-4 CODE PRESETS SECTOR CONTROL WORD WORDS
  25628. IX6 X6+X2 *PAD2*
  25629. SA6 A6+B1
  25630. ERRNZ PAD2-PAD1-1 CODE DEPENDS ON VALUE
  25631. IX6 X6+X2 *PAD3*
  25632. IX6 X6+X5 INCREMENT FOR 8K SECTORS
  25633. SA6 A6+B1
  25634. ERRNZ PAD3-PAD2-1 CODE DEPENDS ON VALUE
  25635. IX6 X6+X2 *PAD4*
  25636. AX6 12 SET NO LINK IN LAST CONTROL WORD
  25637. LX6 12
  25638. SA6 A6+B1
  25639. ERRNZ PAD4-PAD3-1 CODE DEPENDS ON VALUE
  25640. SA1 FNTA BUILD PSEUDO-*FST*
  25641. SX5 B1
  25642. IX1 X1+X5
  25643. ERX1 X1
  25644. SA2 LTRK
  25645. MX3 24
  25646. BX6 X1*X3 EQUIPMENT
  25647. LX2 24
  25648. LX4 12
  25649. BX6 X6+X2 LOGICAL TRACK
  25650. BX6 X6+X4 LOGICAL SECTOR
  25651. SA6 A6+B1 SET *FST* IN CONTROL BUFFER
  25652. ERRNZ FSTC-PAD4-1 INDEXES MUST BE CONSECUTIVE
  25653. SA2 SFRF SET/CLEAR SYSTEM FILE READ FLAG
  25654. BX1 X0
  25655. BX6 X2
  25656. LX1 CBTLS
  25657. MX3 -48
  25658. SA2 A6+B1
  25659. ERRNZ IOLK-FSTC-1 CODE DEPENDS ON VALUE
  25660. SA4 A2+B1
  25661. ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
  25662. BX2 -X3*X2
  25663. BX6 X6+X2
  25664. SA1 CLST LINK TO CURRENT LIST
  25665. SB6 ANB18
  25666. SA6 A2
  25667. BX5 -X3*X4 CLEAR ERROR DATA
  25668. SA3 CHAN
  25669. SA2 CHRV
  25670. TX4 A5-1,-SP
  25671. ZR X4,ANB16 IF PSEUDO PP
  25672. SA2 A5+1
  25673. ANB16 LX2 59-4
  25674. PL X2,ANB17 IF CHANNEL NOT SELECTED BY CALLER
  25675. LX3 54
  25676. SA2 A4-HSLK+PAD4
  25677. BX6 X2+X3 MERGE CHANNEL INTO *PAD4*
  25678. SA6 A2
  25679. SX4 B1+
  25680. LX4 58
  25681. BX5 X4+X5 MERGE CHANNEL SELECTION FLAG INTO *HSLK*
  25682. ANB17 BX6 X5
  25683. SA6 A4
  25684. EQ LCC LINK CONTROL BUFFER
  25685.  
  25686. ANB18 SA2 B3-B1 RESTORE (B6)
  25687. SB3 B3-B1
  25688. SA1 CHEA
  25689. SB6 X2
  25690. EQ LCH LINK CONTROL BUFFER TO HASH CHAIN
  25691.  
  25692. * GET NEXT CONTROL BUFFER ON THREAD.
  25693.  
  25694. ANB19 BX1 X0 GET CONTROL BUFFER ADDRESS
  25695. LX1 CBTLS
  25696. TA2 X1+LSLK,CBT READ LIST LINK WORD
  25697. MX3 -12 GET FORWARD LINK
  25698. AX2 24
  25699. BX0 -X3*X2
  25700. NZ X0,ANB3 IF ANOTHER BUFFER TO CHECK
  25701. TX1 B6,-DWTB
  25702. NZ X1,ANB20 IF NOT PROCESSING DATA WRITTEN LIST
  25703. SA1 ANBA+1
  25704. ZR X1,ANBX IF DATA WRITTEN SKIPPED INITIALLY
  25705.  
  25706. * CHECK NEXT LIST.
  25707.  
  25708. ANB20 SB6 B6+1 UPDATE LIST INDEX
  25709. TX6 B6,-DWTB
  25710. NZ X6,ANB22 IF NOT DATA WRITTEN LIST
  25711.  
  25712. * IF A BUFFER IS ACCESSED, BUT NOT RELEASED/FLUSHED IT CAN
  25713. * STAY ON THE READ OR WRITE LIST INDEFINITELY UNLESS THERE IS
  25714. * REGULAR ALLOCATION FROM BOTH LISTS. THE FOLLOWING LOGIC
  25715. * WILL CAUSE THE OLDEST BUFFER TO BE ALLOCATED IF IT STAYS THE
  25716. * OLDEST FOR AN EXTENDED PERIOD OF TIME.
  25717.  
  25718. SA1 RTCL CURRENT TIME - TIME LAST CHECKED
  25719. SA2 ANBB
  25720. MX5 -36
  25721. BX1 -X5*X1
  25722. IX2 X1-X2
  25723. SX6 3000D CHECK EVERY THREE SECONDS
  25724. IX5 X2-X6
  25725. BX6 X1
  25726. NG X5,ANB21 IF TIME NOT ELAPSED
  25727. SA6 A2 SET NEW TIME
  25728. SA1 B6+B1 CHECK READ LIST
  25729. ERRNZ DRDP-DWTP-1 CODE DEPENDS ON VALUE
  25730. SA2 ANBC
  25731. BX4 X1-X2
  25732. SX5 X1
  25733. SX4 X4
  25734. SB6 A1+ SET READ LIST
  25735. ZR X4,ANB2 IF SAME BUFFER, ALLOCATE FROM READ LIST
  25736. SA1 A1+B1 CHECK WRITE LIST
  25737. ERRNZ DRDP-DWTP-1 CODE DEPENDS ON VALUE
  25738. AX2 18
  25739. BX4 X1-X2
  25740. SX1 X1
  25741. SB6 A1+
  25742. LX1 18 SAVE FIRST BUFFERS ON READ AND WRITE LIST
  25743. SX4 X4+
  25744. BX6 X1+X5
  25745. SA6 A2
  25746. NZ X4,ANB21 IF NOT SAME BUFFER ON WRITE LIST
  25747. AX1 18-CBTLS
  25748. TA2 X1+LSLK,CBT
  25749. MX5 12
  25750. BX6 X5*X2
  25751. NZ X6,ANB21 IF BUFFER IN USE
  25752. SA2 A2+IOLK-LSLK
  25753. NG X2,ANB21 IF I/O INTERLOCK
  25754. SA6 ANBA+1 SET DATA WRITTEN SKIPPED FLAG
  25755. EQ ANB2 FLUSH BUFFER
  25756.  
  25757. ANB21 TA1 DWTB
  25758. BX6 X6-X6
  25759. SB6 A1
  25760. SA2 ANBA GET DATA WRITTEN THRESHOLD
  25761. AX1 36
  25762. IX1 X2-X1
  25763. NG X1,ANB2 IF COUNT .GT. THRESHOLD
  25764. SB6 B6+B1 SKIP DATA WRITTEN LIST
  25765. SA6 A2+B1 SET SKIPPED FLAG
  25766. ANB22 TX1 B6,-WRTB
  25767. PL X1,ANBX IF ALL LISTS HAVE BEEN CHECKED
  25768. TA1 DRDB GET READ COUNT
  25769. TA2 WRTB GET WRITE COUNT
  25770. AX1 36
  25771. AX2 36
  25772. IX1 X1-X2
  25773. NG X1,ANB23 IF WRITE LIST LARGER
  25774. TB6 DRDB
  25775. EQ ANB2 CHECK READ LIST
  25776.  
  25777. ANB23 TB6 WRTB
  25778. EQ ANB2 CHECK WRITE LIST
  25779.  
  25780. * EXIT ALLOCATE BUFFER ROUTINE.
  25781.  
  25782. ANBX SA2 B3-1 RESTORE (B6)
  25783. SB3 B3-B1
  25784. SB6 X2
  25785. JP B6 RETURN
  25786.  
  25787. ANBA CON DWLT DATA WRITTEN LIST TRESHOLD
  25788. CON 0 0 = DATA WRITTEN LIST SKIPPED
  25789. ANBB CON 0 TIME OF LAST FIRST BUFFER CHECK
  25790. ANBC CON 0 24/,18/ WRITE BUFFER,18/ READ BUFFER
  25791. ANBD CON 0 PHYSICAL SECTORS PER I/O BUFFER
  25792. CAT SPACE 4,15
  25793. ** CAT - CHECK READ BUFFER ALLOCATION TRIGGER.
  25794. *
  25795. * ENTRY (X0) = CONTROL BUFFER ORDINAL.
  25796. * (B6) = RETURN ADDRESS.
  25797. *
  25798. * EXIT READ-AHEAD TRIGGER FLAG SET IN CBT IF THRESHOLD
  25799. * REACHED.
  25800. * (X6) = READ BUFFER COUNT DECREMENTED.
  25801. * (X7) = BUFFER ORDINAL.
  25802. *
  25803. * USES A - 2, 3, 6, 7.
  25804. * X - 0, 2, 3, 4, 6, 7.
  25805.  
  25806.  
  25807. CAT BSS 0 ENTRY
  25808. SA3 RBCT READ BUFFER COUNT
  25809. SA2 DBAT
  25810. BX7 X0 SET BUFFER ORDINAL
  25811. IX2 X2+X3
  25812. NZ X2,CAT1 IF NOT TRIGGER BUFFER
  25813. SX4 1
  25814. LX0 CBTLS *CBT* INDEX
  25815. LX4 58-0
  25816. + TA2 X0+IOLK,CBT **** PERFORM IN ONE WORD ****
  25817. BX6 X2+X4 **** PERFORM IN ONE WORD ****
  25818. SA6 A2 **** PERFORM IN ONE WORD ****
  25819. CAT1 SX6 X3+B1 DECREMENT BUFFER COUNT
  25820. SA6 A3
  25821. JP B6 RETURN
  25822. CHT SPACE 4,10
  25823. ** CHT - COUNT HASH TABLE EVICTS AND FULLS.
  25824. *
  25825. * ENTRY (X6) = INCREMENT OF ONE POSITIONED FOR UPDATE.
  25826. * (B6) = EXIT ADDRESS.
  25827. *
  25828. * EXIT PUT UPDATED IF COUNT .LT. 2048.
  25829. *
  25830. * USES A - 1, 6.
  25831. * X - 1, 3, 6.
  25832.  
  25833.  
  25834. CHT BSS 0 ENTRY
  25835. SA1 PUTO
  25836. LX6 11 POSITION INCREMENT TO CHECK OVERFLOW
  25837. LX1 PUTLS
  25838. TA1 X1+ACRJ,PUT CHECK FOR OVERFLOW
  25839. BX3 X6*X1
  25840. LX6 -11
  25841. NZ X3,CHT1 IF COUNTER FULL
  25842. IX6 X1+X6
  25843. SA6 A1
  25844. CHT1 JP B6 RETURN
  25845. CHA SPACE 4,40
  25846. ** CHA - CALCULATE HASH ADDRESS.
  25847. *
  25848. * ENTRY (B6) = RETURN ADDRESS.
  25849. * (X7) = 0 IF BUFFER TO BE INTERLOCKED OR ALLOCATED AND
  25850. * NO BUFFERS ARE ALREADY ALLOCATED.
  25851. * (X7) .GT. 0 IF BUFFER TO BE INTERLOCKED OR ALLOCATED
  25852. * AND BUFFERS ARE ALREADY ALLOCATED.
  25853. * (X7) .LT. 0 IF TO LOCATE HASH TABLE ENTRY ONLY.
  25854. * (MSTA) = *MST* ADDRESS.
  25855. * (LTRK) = LOGICAL TRACK.
  25856. * (LSEC) = LOGICAL SECTOR NUMBER.
  25857. *
  25858. * EXIT (X2) = 0 FIRST ACCESS.
  25859. * .GT. 0 IF ENTRY FOUND.
  25860. * = -1 IF HASH TABLE FULL.
  25861. * (X1) = HASH ENTRY ADDRESS.
  25862. * = 0 IF HASH TABLE BUSY.
  25863. * (X0) = CONTROL BUFFER INDEX.
  25864. * = 0 IF BUFFER NOT FOUND.
  25865. * NOTE - (X0) VALID ONLY IF (X2) .GT. 0.
  25866. * (CHEA) = HASH ENTRY ADDRESS.
  25867. * (HTA) = HASH TABLE ADDRESS.
  25868. * (PUTO) = 24/SUSL, 18/RLSN, 18/PUTO
  25869. * SUSL = SINGLE UNIT SECTOR LIMIT.
  25870. * RLSN = RELATIVE SECTOR NUMBER IN UNIT.
  25871. * (R(LS/SL))
  25872. * PUTO = *PUT* ORDINAL.
  25873. *
  25874. * TO *LBMXS* IF ADDRESS ERROR OR INACCESSIBLE DEVICE.
  25875. *
  25876. * USES A - 1, 2, 3, 4, 6.
  25877. * B - 5, 6.
  25878. * X - 0, 1, 2, 3, 4, 5, 6.
  25879. *
  25880. * CALLS CDA, DCC, DCH, LCC.
  25881. *
  25882. * NOTE HASH ENTRY FORMAT.
  25883. * 12/TRK, 12/FLS, 12/LLS, 12/0, 12/BI.
  25884. * TRK = LOGICAL TRACK.
  25885. * FLS = FIRST LOGICAL SECTOR PRESENT.
  25886. * LLS = LAST LOGICAL SECTOR PRESENT.
  25887. * BI = FIRST CONTROL BUFFER ON HASH CHAIN.
  25888. *
  25889. * HASH ALGORITHM.
  25890. *
  25891. * LCMA = HTA + ( HTM .AND. ( LT * LCC ))
  25892. *
  25893. * LCMA = ADDRESS IN I/O BUFFER OF FIRST ENTRY.
  25894. * HTA = HASH TABLE BASE ADDRESS.
  25895. * HTM = HASH TABLE MASK FROM THE MST.
  25896. * LT = LOGICAL TRACK ADDRESS.
  25897. * LLC = SUBLIST LENGTH FOR HASH TABLE SEARCH.
  25898. *
  25899. * HASH CHAINS ARE BUILT BACKWARDS (HIGHEST LOGICAL SECTOR
  25900. * NUMBERS AT THE BEGINNING OF THE CHAIN) SO THAT SEQUENTIAL
  25901. * ACCESSES DO NOT HAVE TO CHAIN TO THE END TO ADD NEW
  25902. * BUFFERS.
  25903.  
  25904.  
  25905. CHA26 MX6 1 SET *ADDRESS ERROR* STATUS
  25906. LX6 55-59
  25907. EQ LBMXS EXIT WITH ERROR
  25908.  
  25909. CHA BSS 0 ENTRY
  25910. MX5 -12
  25911. NG X7,CHA1 IF LOCATE ENTRY ONLY
  25912. SB5 CHA1 SET *CDA* EXIT ADDRESS
  25913. EQ CDA CHECK DEVICE ACCESSIBILITY
  25914.  
  25915. CHA1 SA1 MSTA MST ADDRESS
  25916. SA4 X1+DILL FETCH *PUT* ORDINAL OF FIRST UNIT
  25917. SA2 A4-DILL+MDGL FETCH SINGLE UNIT SECTOR LIMIT
  25918. AX4 24
  25919. BX6 -X5*X4 *PUT* ORDINAL
  25920. AX2 36
  25921. BX2 -X5*X2 SINGLE UNIT SECTOR LIMIT
  25922. SA3 LSEC LOGICAL SECTOR NUMBER
  25923. CHA1.1 IX3 X3-X2
  25924. NG X3,CHA1.2 IF CORRECT *PUT* ENTRY FOUND
  25925. LX6 PUTLS
  25926. TA1 X6+HSCT,PUT CHECK NEXT *PUT* IN CHAIN
  25927. BX6 -X5*X1 NEXT *PUT* ORDINAL
  25928. ZR X6,CHA26 IF LOGICAL SECTOR TOO LARGE
  25929. EQ CHA1.1 CHECK NEXT *PUT* ENTRY
  25930.  
  25931. CHA1.2 IX3 X3+X2 R(LS/SL) = RLSN
  25932. LX3 18
  25933. LX2 36
  25934. BX6 X6+X3
  25935. BX6 X6+X2
  25936. SA6 PUTO SET PUTO = 24/SUSL, 18/RLSN, 18/PUTO
  25937. LX6 PUTLS FETCH HASH TABLE PARAMETERS
  25938. TA1 X6+HSCT,PUT
  25939. SA3 LTRK LOGICAL TRACK
  25940. MX6 -18
  25941. AX1 24
  25942. BX6 -X6*X1 BASE HASH TABLE ADDRESS
  25943. AX4 12
  25944. BX4 -X5*X4 EST ORDINAL
  25945. CX2 X4,EST CONVERT EST ORDINAL TO OFFSET
  25946. TA4 X2+EQAE,EST GET PARTITION NUMBER FROM EST
  25947. MX2 -4
  25948. LX4 -18
  25949. BX0 -X2*X4
  25950. SX4 HATLE COMPUTE HASH TABLE PARTITION OFFSET
  25951. IX2 X0*X4
  25952. IX6 X6+X2
  25953. SA6 HTA SET HASH TABLE ADDRESS
  25954. AX1 18
  25955. MX4 -9
  25956. BX4 -X4*X1 HASH TABLE MASK
  25957. ERRNZ LLCV-4 CODE DEPENDS ON VALUE
  25958. LX3 2
  25959. BX3 X3*X4
  25960. IX5 X3+X6
  25961. BX6 X5
  25962. SB5 LLCV
  25963. SX0 B0 CLEAR EMPTY HASH ENTRY FLAG
  25964.  
  25965. * SEARCH HASH ENTRIES FOR DATA MATCH.
  25966.  
  25967. CHA1.3 SA1 X5 READ NEXT HASH ENTRY
  25968. ZR X1,CHA5 IF HASH ENTRY IS EMPTY
  25969. MX3 12
  25970. SA2 LTRK CHECK FOR TRACK MATCH
  25971. BX4 X3*X1
  25972. LX4 12
  25973. IX4 X4-X2
  25974. NZ X4,CHA6 IF WRONG TRACK
  25975. LX3 -24
  25976. SA2 LSEC GET REQUESTED LOGICAL SECTOR
  25977. BX4 X3*X1
  25978. AX4 24
  25979. IX4 X4-X2
  25980. NG X4,CHA4.1 IF OUR DATA NOT IN THIS HASH ENTRY
  25981. LX3 12
  25982. BX4 X3*X1
  25983. AX4 36
  25984. IX4 X2-X4
  25985. MX3 -12
  25986. NG X4,CHA4.1 IF OUR DATA NOT IN THIS HASH ENTRY
  25987.  
  25988. * SEARCH CONTROL BUFFERS LINKED TO THIS ENTRY
  25989. * FOR A MATCH WITH THE REQUESTED DATA.
  25990.  
  25991. BX0 -X3*X1 GET CONTROL BUFFER INDEX
  25992. CHA2 BX6 X0
  25993. LX6 CBTLS
  25994. TA4 X6+FSTC,CBT
  25995. AX4 12
  25996. BX4 -X3*X4 ACTUAL SECTOR
  25997. TA1 X6+HSLK,CBT
  25998. IX6 X2-X4
  25999. NG X6,CHA4 IF OUR DATA BEFORE THIS BUFFER
  26000. SA2 A5+B1
  26001. NZ X6,CHA4.1 IF OUR DATA BEYOND THIS BUFFER
  26002. TX4 A5-1,-SP
  26003. BX6 X6-X6
  26004. LX2 59-4
  26005. ZR X4,CHA3 IF PSEUDO PP
  26006. SA4 NCHV
  26007. NZ X4,CHA3 IF NO *CHRV* DATA PRESENT
  26008. PL X2,CHA3 IF NOT DEVICE VERIFICATION CALL
  26009. MX6 -48
  26010. PX4 B0 DEVICE VERIFICATION FLAG
  26011. SA2 CHAN CHANNEL SELECTED BY *1MV*
  26012. BX6 -X6*X1 CLEAR *HSLK* BYTE 0
  26013. BX6 X4+X6 SET DEVICE VERIFICATION FLAG
  26014. SA6 A1+ UPDATE *HSLK*
  26015. SA4 A1-HSLK+PAD4
  26016. MX6 -54
  26017. LX2 54 POSITION CHANNEL
  26018. BX4 -X6*X4 CLEAR CHANNEL FIELD IN *PAD4*
  26019. BX6 X4+X2 MERGE CHANNEL INTO *PAD4*
  26020. SA6 A4+ UPDATE *PAD4*
  26021. SA2 A5+
  26022. LX2 59-42
  26023. BX6 X6-X6
  26024. NG X2,CHA11 IF READ OPERATION
  26025. CHA3 NG X7,CHA4.2 IF LOCATE ENTRY ONLY
  26026. NG X1,CHA11 IF I/O ERROR, EVICT HASH ENTRY
  26027. EQ CHA4.2 SET UP EXIT CONDITIONS
  26028.  
  26029. CHA4 AX1 24
  26030. BX0 -X3*X1 GET FORWARD LINK
  26031. NZ X0,CHA2 IF NOT END OF HASH CHAIN
  26032. CHA4.1 SX0 B0+
  26033. CHA4.2 BX1 X5
  26034. SX2 B1
  26035. EQ CHA24 SAVE HASH ADDRESS AND EXIT
  26036.  
  26037. CHA5 NZ X0,CHA6 IF PREVIOUS EMPTY ENTRY FOUND
  26038. BX0 X5
  26039. CHA6 SX4 B1+ UPDATE HASH ENTRY ADDRESS
  26040. IX5 X5+X4
  26041. SB5 B5-B1
  26042. NZ B5,CHA1.3 IF NOT END OF LIST CONTROL
  26043. SB5 B6+
  26044. NG X7,CHA22 IF LOCATE ENTRY ONLY
  26045. NZ X0,CHA23 IF EMPTY ENTRY FOUND
  26046. NZ X7,CHA22 IF BUFFERS ALLOCATED
  26047.  
  26048. * FIND A HASH ENTRY THAT HAS NO I/O ACTIVITY OR WRITE DATA.
  26049. * IF ONE IS FOUND, EVICT IT AND RETURN FIRST ENTRY STATUS.
  26050. * OTHERWISE SAVE STATUS OF I/O ACTIVITY AND COUNT OF CONTROL
  26051. * BUFFERS ON EACH HASH ENTRY IN TABLE *CETS*.
  26052.  
  26053. BX5 X6 RESET HASH ADDRESS
  26054. SB5 LLCV+1 RESET LIST LENGTH
  26055. BX6 X6-X6 ZERO BUFFER COUNT TABLE
  26056. CHA7 SA6 B5+CETS-1
  26057. SB5 B5-1
  26058. NZ B5,CHA7 IF PRESET NOT COMPLETE
  26059. SB5 LLCV RESET LIST LENGTH
  26060. CHA8 SA1 X5 READ NEXT HASH ENTRY
  26061. MX3 -12
  26062. BX6 X6-X6
  26063. BX0 -X3*X1
  26064. CHA9 BX2 X6 UPDATE BUFFER COUNT
  26065. SA1 B5+CETS-1
  26066. SX6 X1+B1
  26067. SA6 A1
  26068. BX6 X2
  26069. BX1 X0 GET ACCESS FLAGS
  26070. LX1 CBTLS
  26071. TA2 X1+IOLK,CBT
  26072. NG X2,CHA18 IF I/O INTERLOCK
  26073. LX2 59-57
  26074. PL X2,CHA10 IF READ BUFFER
  26075. SX6 B1 SET WRITE BUFFER FLAG
  26076. CHA10 SA2 A2+B1
  26077. ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
  26078. MX3 12 GET FORWARD LINK
  26079. LX2 24
  26080. BX0 X3*X2
  26081. LX0 12
  26082. SA2 A2+LSLK-HSLK
  26083. BX2 X3*X2
  26084. NZ X2,CHA18 IF NOT ZERO ACCESS COUNT
  26085. NZ X0,CHA9 IF ANOTHER BUFFER ON THREAD
  26086. NZ X6,CHA19 IF NOT ALL BUFFERS WERE READ
  26087. SX6 B1 SET EVICTED READ HASH STATUS
  26088. LX6 48
  26089.  
  26090. * EVICT THE HASH TABLE ENTRY POINTED TO BY (X5).
  26091.  
  26092. CHA11 SB5 B6 SAVE B6
  26093. SA2 X5 READ HASH ENTRY
  26094. SA6 CSBS
  26095. CHA12 MX3 -12
  26096. BX0 -X3*X2 GET INDEX
  26097. SX6 X0+ SET CBT INTERLOCK
  26098. SA6 INLB
  26099. LX6 CBTLS
  26100. TA2 X6+HSLK,CBT GET FORWARD HASH LINK
  26101. LX2 -24
  26102. BX6 -X3*X2
  26103. SA6 CAFL
  26104. ERRNZ LSLK-HSLK-1 CODE DEPENDS ON VALUE
  26105. SA1 A2+B1
  26106. LX2 24 REPOSITION *HSLK*
  26107. MX6 12
  26108. BX6 X6*X1
  26109. NZ X6,CHA22 IF ACCESS COUNT NON-ZERO
  26110. SA1 A2-B1
  26111. ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
  26112. BX6 X5
  26113. SA6 CHAD
  26114. BX6 X0
  26115. NG X1,CHA17 IF I/O INTERLOCK SET
  26116. LX1 59-57
  26117. PL X1,CHA14 IF READ BUFFER
  26118. TA6 IORQ INITIATE I/O
  26119. XJ
  26120.  
  26121. SB6 CHA13 *DCC* RETURN ADDRESS
  26122. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  26123.  
  26124. CHA13 SB6 CHA17 *LCC* RETURN ADDRESS
  26125. TX1 DWTB
  26126. EQ LCC LINK CONTROL BUFFER
  26127.  
  26128. CHA14 SB6 CHA15 *DCC* RETURN ADDRESS
  26129. EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
  26130.  
  26131. CHA15 SB6 CHA16 *DCH* RETURN ADDRESS
  26132. EQ DCH DELINK CONTROL BUFFER FROM HASH LINK
  26133.  
  26134. CHA16 SB6 CHA17 *LCC* RETURN ADDRESS
  26135. TX1 EMTB
  26136. EQ LCC LINK CONTROL BUFFER
  26137.  
  26138. CHA17 SA3 CHAD GET HASH ADDRESS
  26139. SA2 CAFL GET FORWARD LINK
  26140. BX5 X3
  26141. NZ X2,CHA12 IF ANOTHER BUFFER TO EVICT
  26142. SA2 X5
  26143. SB6 B5+ RESTORE B6
  26144. NZ X2,CHA22 IF ALL BUFFERS NOT EVICTED
  26145. SA4 CSBS
  26146. BX6 X4
  26147. SX0 X5
  26148. SB6 CHA23 SET *CHT* EXIT ADDRESS
  26149. EQ CHT UPDATE STATISTICS
  26150.  
  26151. CHA18 MX6 59 SET I/O ACTIVE FLAG
  26152. SA6 CETS+LLCV
  26153. CHA19 SX1 1 UPDATE HASH ADDRESS
  26154. IX5 X5+X1
  26155. SB5 B5-B1
  26156. NZ B5,CHA8 IF NOT END OF LIST CONTROL
  26157. SA1 CETS+LLCV
  26158. NG X1,CHA22 IF I/O ACTIVE
  26159.  
  26160. * EVICT THE HASH ENTRY WITH THE SMALLEST BUFFER COUNT.
  26161.  
  26162. SB5 LLCV RESET LIST LENGTH
  26163. SX3 B0+ PRESET INDEX AND MINIMUM VALUE
  26164. SX2 LSLB*100B
  26165. CHA20 SA1 X3+CETS
  26166. IX4 X1-X2
  26167. PL X4,CHA21 IF THIS ENTRY NOT SMALLER
  26168. BX6 X3 SAVE NEW INDEX
  26169. BX2 X1 SAVE NEW VALUE
  26170. CHA21 SB5 B5-B1
  26171. SX3 X3+B1
  26172. NZ B5,CHA20 IF TABLE NOT SEARCHED
  26173. SX6 X6-LLCV ADJUST HASH ENTRY ADDRESS IN X5
  26174. IX5 X5+X6
  26175. SX6 B1 SET EVICTED WRITE HASH STATUS
  26176. LX6 36
  26177. EQ CHA11 EVICT WRITE ENTRY
  26178.  
  26179. CHA22 SX2 -B1 SET BUFFER BUSY STATUS
  26180. SX1 B0
  26181. EQ CHA24 PROCESS RESPONSE
  26182.  
  26183. CHA23 SB6 B5 RESTORE (B6)
  26184. BX1 X0 SET FIRST ACCESS STATUS
  26185. SX2 B0+
  26186. CHA24 SX6 X1+ SAVE HASH ENTRY ADDRESS
  26187. SA6 CHEA
  26188. JP B6 EXIT
  26189. CLP SPACE 4,20
  26190. ** CLP - CONVERT LOGICAL TO PHYSICAL.
  26191. *
  26192. * ENTRY (B6) = RETURN ADDRESS.
  26193. * (AILE) = ALGORITHM INDEX.
  26194. * (LTRK) = LOGICAL TRACK.
  26195. * (PUTO) = 24/SUSL, 18/RLSN, 18/PUTO
  26196. * SUSL = SINGLE UNIT SECTOR LIMIT.
  26197. * RLSN = R(LS/SL).
  26198. * PUTO = *PUT* ORDINAL.
  26199. *
  26200. * EXIT (X0) = CONTROL BUFFER ORDINAL.
  26201. * (X1) = PHYSICAL CYLINDER NUMBER.
  26202. * (X3) = PHYSICAL UNIT NUMBER.
  26203. * (X4) = 48/, 6/PHYSICAL TRACK, 6/PHYSICAL SECTOR.
  26204. *
  26205. * USES A - 1, 2, 3, 4.
  26206. * B - 4, 5.
  26207. * X - 1, 2, 3, 4, 5, 6.
  26208.  
  26209.  
  26210. CLP BSS 0 ENTRY
  26211. SA2 PUTO
  26212. SB5 X2 SAVE *PUT* ORDINAL
  26213. AX2 18
  26214. SX3 X2 R(LS/SL)
  26215. AX2 18 SINGLE UNIT SECTOR LIMIT
  26216. SA1 AILE ALGORITHM INDEX
  26217. SA4 LTRK LOGICAL TRACK
  26218. SB4 X1-AIDB
  26219. MX6 -11
  26220. BX4 -X6*X4
  26221. JP B4+TCLP TRANSFER TO PROCESSOR
  26222.  
  26223. * ENTER PROCESSOR WITH -
  26224. *
  26225. * (B5) = *PUT* ORDINAL.
  26226. * (X2) = SUSL.
  26227. * (X3) = R(LS/SL).
  26228. * (X4) = LT - 4000B.
  26229.  
  26230.  
  26231. ** 885-42 CONVERSION (*DB*).
  26232. *
  26233. * ALGORITHM -
  26234. * SL = 1200B
  26235. * LU = LS/SL
  26236. * X = BIT 0 OF LT
  26237. * PC = BITS 1 - 10 OF LT
  26238. * PT = (X*SL+R(LS/SL))/200B
  26239. * PS = (R(X*SL+R(LS/SL))/200B)/4
  26240.  
  26241. CLP3 LX4 -1 SIGN = BIT 0 OF LT = X
  26242. SX1 X4 SET CYLINDER NUMBER
  26243. AX4 59 SIGN EXTEND BIT 0
  26244. BX4 X4*X2 BIT 0 OF LT * SL
  26245. MX6 -7
  26246. IX4 X4+X3 X*SL+R(LS/SL)
  26247. BX6 -X6*X4
  26248. AX4 7 PT
  26249. ERRNZ LSPTDB-200B CODE DEPENDS ON VALUE
  26250. SX2 B5
  26251. AX6 CFSDB PS
  26252. EQ CLP8 COMPLETE PROCESSING
  26253.  
  26254.  
  26255. ** 895 FULL TRACK CONVERSION (*DC*).
  26256. *
  26257. * ALGORITHM -
  26258. * SL = 1300B SECTOR LIMIT
  26259. * LU = LS/SL LOGICAL UNIT
  26260. * X = BIT 0 OF LT
  26261. * PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
  26262. * PT = (X*SL + R(LS/SL))/140B PHYSICAL TRACK
  26263. * PS = R((X*SL + R(LS/SL))/140B)/40B PHYSICAL SECTOR
  26264.  
  26265. CLP4 SX5 LSPTDC LOGICAL SECTORS PER PHYSICAL TRACK
  26266. SB4 CFSDC
  26267. EQ CLP6 PERFORM CONVERSION
  26268.  
  26269.  
  26270. ** 819 CONVERSION (*DV* AND *DW*).
  26271. *
  26272. * SL = 1440B
  26273. * LU = LS/SL
  26274. * X = BIT 0 OF LT
  26275. * PC = BITS 1 - 10 OF LT
  26276. * PT = (X*SL+R(LS/SL))/240B
  26277. * PS = (R(X*SL)+R(LS/SL))/240B)/10B
  26278.  
  26279. CLP5 SX5 LSPTDV LOGICAL SECTORS PER PHYSICAL TRACK
  26280. SB4 CFSDV
  26281.  
  26282. * PERFORM CONVERSION WITH -
  26283. *
  26284. * (X3) = R(LS/SL).
  26285. * (X4) = LT - 4000B.
  26286. * (X5) = NUMBER OF LOGICAL SECTORS PER PHYSICAL TRACK.
  26287. * (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
  26288.  
  26289. CLP6 LX4 -1 SIGN = BIT 0 OF LT = X
  26290. SX1 X4 SET CYLINDER NUMBER
  26291. AX4 59 SIGN EXTEND BIT 0
  26292. BX4 X4*X2 BIT 0 OF LT * SL
  26293.  
  26294. * CONTINUE CONVERSION WITH -
  26295. *
  26296. * (X1) = PHYSICAL CYLINDER NUMBER.
  26297. * (X3)+(X4) = LOGICAL SECTOR NUMBER WITHIN CYLINDER.
  26298. * (X5) = NUMBER OF LOGICAL SECTORS PER PHYSICAL TRACK.
  26299. * (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
  26300.  
  26301. CLP7 IX3 X4+X3 X*SL+R(LS/SL)
  26302. PX6 X5
  26303. PX4 X3
  26304. NX6 X6
  26305. SX2 B5+0 MOVE *PUT* ORDINAL
  26306. FX4 X4/X6
  26307. UX4,B5 X4
  26308. LX4 X4,B5 PT
  26309. IX6 X4*X5
  26310. IX6 X3-X6
  26311. AX6 B4 PS
  26312.  
  26313. * COMPLETE PROCESSING WITH -
  26314. *
  26315. * (X1) = PHYSICAL CYLINDER (PC).
  26316. * (X4) = PHYSICAL TRACK (PT).
  26317. * (X6) = PHYSICAL SECTOR (PS).
  26318. * (X2) = *PUT* ORDINAL.
  26319.  
  26320. CLP8 LX2 PUTLS
  26321. LX4 6
  26322. TA3 X2+UNCT,PUT FETCH UNIT NUMBER FROM *PUT*
  26323. MX5 -6
  26324. BX4 X6+X4 MERGE PHYSICAL TRACK AND SECTOR
  26325. AX3 48
  26326. BX3 -X5*X3
  26327. JP B6 RETURN
  26328.  
  26329.  
  26330. ** 887 SMALL (4K BYTE) SECTOR CONVERSION (*DF*).
  26331. *
  26332. * ALGORITHM -
  26333. * SL = 1140B
  26334. * LU = LS/SL
  26335. * X = BIT 0 OF LT
  26336. * PC = BITS 1 - 10 OF LT
  26337. * PT = (X*SL+R(LS/SL))/460B
  26338. * PS = (R(X*SL+R(LS/SL))/460B)/10B
  26339.  
  26340. CLP9 SX5 LSPTDF LOGICAL SECTORS PER PHYSICAL TRACK
  26341. SB4 CFSDF
  26342. EQ CLP6 PERFORM CONVERSION
  26343.  
  26344.  
  26345. ** 887 LARGE (16K BYTE) SECTOR CONVERSION (*DH*).
  26346. *
  26347. * ALGORITHM -
  26348. * SL = 1300B
  26349. * LU = LS/SL
  26350. * X = BIT 0 OF LT
  26351. * PC = BITS 1 - 10 OF LT
  26352. * PT = (X*SL+R(LS/SL))/540B
  26353. * PS = (R(X*SL+R(LS/SL))/540B)/40B
  26354.  
  26355. CLP10 SX5 LSPTDH LOGICAL SECTORS PER PHYSICAL TRACK
  26356. SB4 CFSDH
  26357. EQ CLP6 PERFORM CONVERSION
  26358.  
  26359.  
  26360. ** 9853 (XMD) CONVERSION (*DN*).
  26361. *
  26362. * ALGORITHM -
  26363. * SL = 2140B
  26364. * NN = ((LT*SL+LS)/40B)*10B
  26365. * PC = NN/617B
  26366. * PT = (R(NN/617B))/25B
  26367. * PS = R((R(NN/617B))/25B)
  26368.  
  26369. CLP11 SB4 CFSDN
  26370. SX6 PSPTDN*PTCYDN PHYSICAL SECTORS PER CYLINDER
  26371. SX5 PSPTDN
  26372. * EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26373.  
  26374. * ENTER COMMON ALGORITHM FOR 9853/583X WITH -
  26375. *
  26376. * (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
  26377. * (X2) = SECTOR LIMIT.
  26378. * (X3) = R(LS/SL).
  26379. * (X4) = LT - 4000B.
  26380. * (X5) = NUMBER OF PHYSICAL SECTORS PER PHYSICAL TRACK.
  26381. * (X6) = NUMBER OF PHYSICAL SECTORS PER CYLINDER.
  26382.  
  26383. CLP12 IX1 X4*X2 LT*SL
  26384. IX4 X1+X3 LT*SL+LS
  26385. PX3 X6
  26386. AX4 B4 NN (CONVERT LOGICAL SECTORS TO PHYSICAL)
  26387. NX3 X3
  26388. PX1 X4
  26389. SA2 MSTA
  26390. FX1 X1/X3 NN / PHYSICAL SECTORS PER CYLINDER
  26391. SA3 X2+SCYL GET STARTING CYLINDER
  26392. UX1,B4 X1
  26393. MX2 -12
  26394. LX3 -24
  26395. LX1 B4 RELATIVE PHYSICAL CYLINDER
  26396. BX2 -X2*X3 CYLINDER OFFSET
  26397. IX3 X1*X6
  26398. IX1 X1+X2 ABSOLUTE PHYSICAL CYLINDER
  26399. SB4 B0
  26400. BX3 -X3
  26401. EQ CLP7 CONVERT PT AND PS
  26402.  
  26403.  
  26404. ** 5832 (1X SSD) CONVERSION (*EA*).
  26405. *
  26406. * ALGORITHM -
  26407. * SL = 240B
  26408. * LU = LS/SL
  26409. * NN = (LT*SL+R(LS/SL))/40B
  26410. * PC = NN/14B
  26411. * PT = R(NN/14B)/3
  26412. * PS = R(R(NN/14B)/3)
  26413.  
  26414. CLP13 SB4 CFSEA
  26415. SX6 PSPTEA*PTCYEA PHYSICAL SECTORS PER CYLINDER
  26416. SX5 PSPTEA
  26417. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26418.  
  26419.  
  26420. ** 5832 (2X SSD) CONVERSION (*EB*).
  26421. *
  26422. * ALGORITHM -
  26423. * SL = 500B
  26424. * LU = LS/SL
  26425. * NN = (LT*SL+R(LS/SL))/40B
  26426. * PC = NN/30B
  26427. * PT = R(NN/30B)/6
  26428. * PS = R(R(NN/30B)/6)
  26429.  
  26430. CLP14 SB4 CFSEB
  26431. SX6 PSPTEB*PTCYEB PHYSICAL SECTORS PER CYLINDER
  26432. SX5 PSPTEB
  26433. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26434.  
  26435.  
  26436. ** 5833 (1X/1XP SABRE) CONVERSION (*EC/ED*).
  26437. *
  26438. * ALGORITHM -
  26439. * SL = 1740B
  26440. * LU = LS/SL
  26441. * NN = (LT*SL+R(LS/SL))/40B
  26442. * PC = NN/50B
  26443. * PT = R(NN/50B)/6
  26444. * PS = R(R(NN/50B)/6)
  26445.  
  26446. CLP15 SB4 CFSEC
  26447. SX6 PSPTEC*PTCYEC-SPSCEC PHYSICAL SECTORS PER CYLINDER
  26448. SX5 PSPTEC
  26449. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26450.  
  26451.  
  26452. ** 5833 (2X/2XP SABRE) CONVERSION (*EE/EF*).
  26453. *
  26454. * ALGORITHM -
  26455. * SL = 3600B
  26456. * NN = (LT*SL+LS)/40B
  26457. * PC = NN/113B
  26458. * PT = R(NN/113B)/13B
  26459. * PS = R(R(NN/113B)/13B)
  26460.  
  26461. CLP16 SB4 CFSEE
  26462. SX6 PSPTEE*PTCYEE-SPSCEE PHYSICAL SECTORS PER CYLINDER
  26463. SX5 PSPTEE
  26464. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26465.  
  26466.  
  26467. ** 5833 (3XP SABRE) CONVERSION (*EM*).
  26468. *
  26469. * ALGORITHM -
  26470. * SL = 2740B
  26471. * NN = (LT*SL+LS)/40B
  26472. * PC = NN/167B
  26473. * PT = R(NN/167B)/21B
  26474. * PS = R(R(NN/167B)/21B)
  26475.  
  26476. CLP17 SB4 CFSEM
  26477. SX6 PSPTEM*PTCYEM-SPSCEM PHYSICAL SECTORS PER CYLINDER
  26478. SX5 PSPTEM
  26479. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26480.  
  26481.  
  26482. ** 5833 (4X SABRE) CONVERSION (*EN*).
  26483. *
  26484. * ALGORITHM -
  26485. * SL = 3640B
  26486. * LU = LS/SL
  26487. * NN = (LT*SL+R(LS/SL))/40B
  26488. * PC = NN/232B
  26489. * PT = R(NN/232B)/26B
  26490. * PS = R(R(NN/232B)/26B)
  26491.  
  26492. CLP18 SB4 CFSEN
  26493. SX6 PSPTEN*PTCYEN-SPSCEN PHYSICAL SECTORS PER CYLINDER
  26494. SX5 PSPTEN
  26495. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26496.  
  26497.  
  26498. ** 5838 (1X/1XP ELITE) CONVERSION (*EG/EH*).
  26499. *
  26500. * ALGORITHM -
  26501. * SL = 3240B
  26502. * NN = (LT*SL+LS)/40B
  26503. * PC = NN/51B
  26504. * PT = R(NN/51B)/5B
  26505. * PS = R(R(NN/51B)/5B)
  26506.  
  26507. CLP19 SB4 CFSEG
  26508. SX6 PSPTEG*PTCYEG-SPSCEG PHYSICAL SECTORS PER CYLINDER
  26509. SX5 PSPTEG
  26510. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26511.  
  26512.  
  26513. ** 5838 (2X/2XP ELITE) CONVERSION (*EI/EJ*).
  26514. *
  26515. * ALGORITHM -
  26516. * SL = 3100B
  26517. * NN = (LT*SL+LS)/40B
  26518. * PC = NN/115B
  26519. * PT = R(NN/115B)/11B
  26520. * PS = R(R(NN/115B)/11B)
  26521.  
  26522. CLP20 SB4 CFSEI
  26523. SX6 PSPTEI*PTCYEI-SPSCEI PHYSICAL SECTORS PER CYLINDER
  26524. SX5 PSPTEI
  26525. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26526.  
  26527.  
  26528. ** 5838 (3XP ELITE) CONVERSION (*EK*).
  26529. *
  26530. * ALGORITHM -
  26531. * SL = 3240B
  26532. * NN = (LT*SL+LS)/40B
  26533. * PC = NN/172B
  26534. * PT = R(NN/172B)/16B
  26535. * PS = R(R(NN/172B)/16B)
  26536.  
  26537. CLP21 SB4 CFSEK
  26538. SX6 PSPTEK*PTCYEK-SPSCEK PHYSICAL SECTORS PER CYLINDER
  26539. SX5 PSPTEK
  26540. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26541.  
  26542.  
  26543. ** 5838 (4X ELITE) CONVERSION (*EL*).
  26544. *
  26545. * ALGORITHM -
  26546. * SL = 3140B
  26547. * NN = (LT*SL+LS)/40B
  26548. * PC = NN/236B
  26549. * PT = R(NN/236B)/22B
  26550. * PS = R(R(NN/236B)/22B)
  26551.  
  26552. CLP22 SB4 CFSEL
  26553. SX6 PSPTEL*PTCYEL-SPSCEL PHYSICAL SECTORS PER CYLINDER
  26554. SX5 PSPTEL
  26555. EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
  26556.  
  26557.  
  26558. ** 47444 (1X/1XP 3.5IN) CONVERSION (*EO/EP*).
  26559. *
  26560. * ALGORITHM -
  26561. * SL = 3240B
  26562. * NN = (LT*SL+LS)/10B
  26563. * PC = NN/274B
  26564. * PT = R(NN/274B)/15B
  26565. * PS = R(R(NN/274B)/15B)
  26566.  
  26567. CLP23 SB4 CFSEO
  26568. SX6 PSPTEO*PTCYEO-SPSCEO PHYSICAL SECTORS PER CYLINDER
  26569. SX5 PSPTEO
  26570. EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
  26571.  
  26572.  
  26573. ** 47444 (2X/2XP 3.5IN) CONVERSION (*ES/EU*).
  26574. *
  26575. * ALGORITHM -
  26576. * SL = 3240B
  26577. * NN = (LT*SL+LS)/20B
  26578. * PC = NN/274B
  26579. * PT = R(NN/274B)/15B
  26580. * PS = R(R(NN/274B)/15B)
  26581.  
  26582. CLP24 SB4 CFSES
  26583. SX6 PSPTES*PTCYES-SPSCES PHYSICAL SECTORS PER CYLINDER
  26584. SX5 PSPTES
  26585. EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
  26586.  
  26587.  
  26588. ** 47444 (3XP 3.5IN) CONVERSION (*EV*).
  26589. *
  26590. * ALGORITHM -
  26591. * SL = 3200B
  26592. * NN = (LT*SL+LS)/20B
  26593. * PC = NN/426B
  26594. * PT = R(NN/426B)/23B
  26595. * PS = R(R(NN/426B)/23B)
  26596.  
  26597. CLP25 SB4 CFSEV
  26598. SX6 PSPTEV*PTCYEV-SPSCEV PHYSICAL SECTORS PER CYLINDER
  26599. SX5 PSPTEV
  26600. EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
  26601.  
  26602.  
  26603. ** 47444 (4X 3.5IN) CONVERSION (*EW*).
  26604. *
  26605. * ALGORITHM -
  26606. * SL = 3200B
  26607. * NN = (LT*SL+LS)/20B
  26608. * PC = NN/560B
  26609. * PT = R(NN/560B)/31B
  26610. * PS = R(R(NN/560B)/31B)
  26611.  
  26612. CLP26 SB4 CFSEW
  26613. SX6 PSPTEW*PTCYEW-SPSCEW PHYSICAL SECTORS PER CYLINDER
  26614. SX5 PSPTEW
  26615. EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
  26616.  
  26617.  
  26618. * TCLP - TABLE FOR CONVERTING LOGICAL TO PHYSICAL ADDRESSES.
  26619.  
  26620. TCLP BSS 0
  26621. LOC AIDB
  26622.  
  26623. + EQ CLP3 *DB* DEVICES
  26624. ERRNZ *-AIDB INDEX MUST MATCH POSITION IN TABLE
  26625.  
  26626. + EQ CLP4 *DC* DEVICES
  26627. ERRNZ *-AIDC INDEX MUST MATCH POSITION IN TABLE
  26628.  
  26629. + EQ CLP5 *DV* AND *DW* DEVICES
  26630. ERRNZ *-AIDV INDEX MUST MATCH POSITION IN TABLE
  26631.  
  26632. + EQ CLP5 *DV* AND *DW* DEVICES
  26633. ERRNZ *-AIDW INDEX MUST MATCH POSITION IN TABLE
  26634.  
  26635. + EQ CLP9 *DF* DEVICES
  26636. ERRNZ *-AIDF INDEX MUST MATCH POSITION IN TABLE
  26637.  
  26638. + EQ CLP10 *DH* DEVICES
  26639. ERRNZ *-AIDH INDEX MUST MATCH POSITION IN TABLE
  26640.  
  26641. + EQ CLP11 *DN* DEVICES
  26642. ERRNZ *-AIDN INDEX MUST MATCH POSITION IN TABLE
  26643.  
  26644. + EQ CLP13 *EA* DEVICES
  26645. ERRNZ *-AIEA INDEX MUST MATCH POSITION IN TABLE
  26646.  
  26647. + EQ CLP14 *EB* DEVICES
  26648. ERRNZ *-AIEB INDEX MUST MATCH POSITION IN TABLE
  26649.  
  26650. + EQ CLP15 *EC/ED* DEVICES
  26651. ERRNZ *-AIEC INDEX MUST MATCH POSITION IN TABLE
  26652.  
  26653. + EQ CLP16 *EE/EF* DEVICES
  26654. ERRNZ *-AIEE INDEX MUST MATCH POSITION IN TABLE
  26655.  
  26656. + EQ CLP17 *EM* DEVICES
  26657. ERRNZ *-AIEM INDEX MUST MATCH POSITION IN TABLE
  26658.  
  26659. + EQ CLP18 *EN* DEVICES
  26660. ERRNZ *-AIEN INDEX MUST MATCH POSITION IN TABLE
  26661.  
  26662. + EQ CLP19 *EG/EH* DEVICES
  26663. ERRNZ *-AIEG INDEX MUST MATCH POSITION IN TABLE
  26664.  
  26665. + EQ CLP20 *EI/EJ* DEVICES
  26666. ERRNZ *-AIEI INDEX MUST MATCH POSITION IN TABLE
  26667.  
  26668. + EQ CLP21 *EK* DEVICES
  26669. ERRNZ *-AIEK INDEX MUST MATCH POSITION IN TABLE
  26670.  
  26671. + EQ CLP22 *EL* DEVICES
  26672. ERRNZ *-AIEL INDEX MUST MATCH POSITION IN TABLE
  26673.  
  26674. + EQ CLP23 *EO/EP* DEVICES
  26675. ERRNZ *-AIEO INDEX MUST MATCH POSITION IN TABLE
  26676.  
  26677. + EQ CLP24 *ES/EU* DEVICES
  26678. ERRNZ *-AIES INDEX MUST MATCH POSITION IN TABLE
  26679.  
  26680. + EQ CLP25 *EV* DEVICES
  26681. ERRNZ *-AIEV INDEX MUST MATCH POSITION IN TABLE
  26682.  
  26683. + EQ CLP26 *EW* DEVICES
  26684. ERRNZ *-AIEW INDEX MUST MATCH POSITION IN TABLE
  26685.  
  26686. LOC *O
  26687. DCB SPACE 4,15
  26688. ** DCB - DELINK CONTROL BUFFER FROM LINK.
  26689. *
  26690. * ENTRY (X0) = CONTROL BUFFER INDEX.
  26691. * (X1) = WORD POSITION OF LINK.
  26692. * (B6) = RETURN ADDRESS.
  26693. *
  26694. * EXIT (X6) = BASE ADDRESS OF CONTROL BUFFERS + OFFSET.
  26695. * (X5) = LINK WORD.
  26696. * (X4) = FORWARD LINK INDEX.
  26697. * (X3) = BACKWARD LINK INDEX.
  26698. * (A7) = ADDRESS OF LINK WORD
  26699. *
  26700. * USES A - 2.
  26701. * X - 1, 2, 3, 4, 5, 6, 7.
  26702.  
  26703.  
  26704. DCB BSS 0 ENTRY
  26705. TX6 X1,CBT FORM BASE ADDRESS + WORD POSITION
  26706. BX1 X0 FORM ADDRESS OF CONTROL BUFFER
  26707. LX1 CBTLS
  26708. IX1 X1+X6
  26709. SA2 X1
  26710. MX1 12 GET FORWARD LINK INDEX
  26711. BX5 X2
  26712. LX1 36
  26713. BX4 X1*X5
  26714. LX1 12 GET BACKWARD LINK INDEX
  26715. BX3 X1*X5
  26716. AX3 36
  26717. ZR X3,DCB1 IF BACKWARD LINK IS ZERO
  26718. BX7 X3 FORM ADDRESS OF BACKWARD BUFFER
  26719. LX7 CBTLS
  26720. IX7 X7+X6
  26721. LX1 48
  26722. + SA2 X7 **** PERFORM IN ONE WORD ****
  26723. BX2 -X1*X2 **** PERFORM IN ONE WORD ****
  26724. BX7 X2+X4 **** PERFORM IN ONE WORD ****
  26725. SA7 A2 **** PERFORM IN ONE WORD ****
  26726. DCB1 ZR X4,DCB2 IF FORWARD LINK IS ZERO
  26727. MX1 12
  26728. AX4 24-CBTLS
  26729. IX7 X4+X6
  26730. LX1 48 MODIFY BACKWARD LINK IN FORWARD BUFFER
  26731. LX3 36
  26732. + SA2 X7 **** PERFORM IN ONE WORD ****
  26733. BX2 -X1*X2 **** PERFORM IN ONE WORD ****
  26734. BX7 X2+X3 **** PERFORM IN ONE WORD ****
  26735. SA7 A2 **** PERFORM IN ONE WORD ****
  26736. AX4 CBTLS
  26737. LX3 24
  26738. DCB2 BX1 X0 CLEAR LINK BYTES
  26739. LX1 CBTLS
  26740. IX1 X1+X6
  26741. MX5 36
  26742. + SA2 X1 **** PERFORM IN ONE WORD ****
  26743. LX5 24 **** PERFORM IN ONE WORD ****
  26744. BX7 X5*X2 **** PERFORM IN ONE WORD ****
  26745. SA7 A2 **** PERFORM IN ONE WORD ****
  26746. BX5 X7 LINK WORD
  26747. JP B6 RETURN
  26748. DCC SPACE 4,15
  26749. ** DCC - DELINK CONTROL BUFFER FROM CONTROL BUFFER LINK.
  26750. *
  26751. * ENTRY (X0) = CONTROL BUFFER ORDINAL.
  26752. * (B3) = REGISTER SAVE BUFFER ADDRESS.
  26753. * (B6) = RETURN ADDRESS.
  26754. *
  26755. * EXIT (X7) PRESERVED.
  26756. *
  26757. * USES A - 1, 2, 7.
  26758. * B - 6.
  26759. * X - 1, 2, 5, 7.
  26760. *
  26761. * CALLS DCB.
  26762.  
  26763.  
  26764. DCC BSS 0 ENTRY
  26765. SA7 B3+B1 SAVE (X7)
  26766. SB3 A7+B1
  26767. SX7 B6+ SAVE (B6)
  26768. SA7 A7-B1
  26769. SX1 LSLK SET CONTROL BUFFER LINK WORD
  26770. BX7 X0 SET CONTROL BUFFER INTERLOCK
  26771. SA7 INLB
  26772. SB6 DCC2 SET RETURN ADDRESS
  26773. EQ DCB DELINK BUFFER
  26774.  
  26775. DCC2 BX1 X0 GET LIST INDEX WORD
  26776. LX1 CBTLS
  26777. IX1 X1+X6
  26778. MX2 -3
  26779. SA1 X1-LSLK+HSLK
  26780. BX5 X1
  26781. AX5 21 GET LIST INDEX
  26782. BX1 -X2*X5
  26783. TA2 X1,BLMB
  26784. MX7 1 DECREMENT COUNT
  26785. LX7 37
  26786. IX7 X2-X7
  26787. NZ X3,DCC3 IF BACKWARD LINK NOT ZERO
  26788. MX5 -18 MODIFY FORWARD POINTER
  26789. BX7 X5*X7
  26790. BX7 X7+X4
  26791. DCC3 NZ X4,DCC4 IF FORWARD LINK NOT ZERO
  26792. MX5 -18 MODIFY BACKWARD POINTER
  26793. LX5 18
  26794. BX7 X5*X7
  26795. LX3 18
  26796. BX7 X7+X3
  26797. DCC4 SA7 A2
  26798. SA1 B3-B1 RESTORE (X7)
  26799. SA2 A1-B1 RESTORE (B6)
  26800. SB3 A1-B1
  26801. BX7 X1
  26802. SB6 X2
  26803. JP B6 RETURN
  26804. DCH SPACE 4,15
  26805. ** DCH - DELINK CONTROL BUFFER FROM HASH LINK.
  26806. *
  26807. * ENTRY (X0) = CONTROL BUFFER ORDINAL.
  26808. * (B3) = REGISTER SAVE BUFFER ADDRESS.
  26809. * (B6) = RETURN ADDRESS.
  26810. *
  26811. * EXIT (X7) PRESERVED.
  26812. * TO */PROGRAM/HNG* IF NO HASH INDEX OR *PUT* ORDINAL
  26813. * PRESENT.
  26814. *
  26815. * USES A - 1, 2, 3, 7.
  26816. * B - 6.
  26817. * X - 1, 2, 3, 5, 7.
  26818. *
  26819. * CALLS DCB.
  26820.  
  26821.  
  26822. DCH BSS 0 ENTRY
  26823. SA7 B3+B1 SAVE (X7)
  26824. SB3 A7+B1
  26825. SX7 B6 SAVE (B6)
  26826. SA7 A7-B1
  26827. SX1 HSLK SET HASH CHAIN WORD
  26828. SB6 DCH2 SET RETURN ADDRESS
  26829. EQ DCB DELINK BUFFER
  26830.  
  26831. DCH2 MX7 39
  26832. SA1 A7+FSTC-HSLK GET FST INFORMATION
  26833. BX7 X7*X5
  26834. SA7 A7 CLEAR HASH INDEX AND *PUT* ORDINAL
  26835. SX7 B0
  26836. SA7 A1 CLEAR FST INFORMATION
  26837. LX1 -48
  26838. MX7 -12
  26839. NZ X3,RXR IF HASH ENTRY UPDATE NOT NEEDED
  26840. BX1 -X7*X1 EST ORDINAL
  26841. MX7 -9
  26842. LX7 12
  26843. BX3 -X7*X5 GET HASH ENTRY INDEX
  26844. LX3 -12
  26845. CX7 X1,EST CONVERT ORDINAL TO OFFSET
  26846. TA1 X7+EQAE,EST GET PARTITION NUMBER
  26847. MX7 -4
  26848. LX1 -18
  26849. MX2 -12
  26850. BX7 -X7*X1
  26851. SX1 HATLE
  26852. IX7 X1*X7 HASH TABLE PARTITION OFFSET
  26853. BX1 -X2*X5 GET *PUT* ORDINAL
  26854. LX1 PUTLS
  26855. TA1 X1+HSCT,PUT
  26856. IX3 X3+X7 ADJUST HASH TABLE INDEX FOR PARTITION
  26857. AX1 24
  26858. MX2 -18
  26859. BX7 X4
  26860. BX1 -X2*X1
  26861. IX1 X1+X3 FORM HASH ENTRY ADDRESS
  26862. ZR X4,DCH3 IF HASH ENTRY TO BE ZEROED
  26863. SA3 X1 READ HASH ENTRY
  26864. MX2 -12 MODIFY CONTROL BUFFER INDEX
  26865. BX3 X2*X3
  26866. BX7 X3+X4
  26867. DCH3 SA7 X1 REWRITE HASH ENTRY
  26868. SA1 B3-B1 RESTORE (X7)
  26869. SA2 A1-B1 RESTORE (B6)
  26870. SB3 A1-B1
  26871. BX7 X1
  26872. SB6 X2
  26873. JP B6 RETURN
  26874. LCB SPACE 4,15
  26875. ** LCB - LINK CONTROL BUFFER.
  26876. *
  26877. * ENTRY (X0) = NEW BUFFER INDEX.
  26878. * (X1) = 24/0 ,18/BI ,18/OI .
  26879. * BI - OLD BUFFER INDEX.
  26880. * OI - OFFSET INDEX OF LINK (6,7).
  26881. * (B6) = RETURN ADDRESS.
  26882. *
  26883. * USES A - 2, 3, 7.
  26884. * X - 1, 2, 3, 4, 5, 6, 7.
  26885.  
  26886.  
  26887. LCB BSS 0 ENTRY
  26888. TX6 X1,CBT READ OFFSET
  26889. AX1 18 GET OLD BUFFER INDEX
  26890. BX2 X1 FORM ADDRESS OF OLD BUFFER
  26891. LX2 CBTLS
  26892. IX2 X2+X6
  26893. SA3 X2 READ LINK WORD
  26894. MX4 12 SAVE OLD FORWARD LINK
  26895. LX4 36
  26896. BX3 X4*X3
  26897. AX3 24
  26898. LX0 24 SET FORWARD LINK TO NEW BUFFER INDEX
  26899. + SA2 A3 **** PERFORM IN ONE WORD ****
  26900. BX7 -X4*X2 **** PERFORM IN ONE WORD ****
  26901. BX7 X7+X0 **** PERFORM IN ONE WORD ****
  26902. SA7 A2 **** PERFORM IN ONE WORD ****
  26903. LX0 36
  26904. BX2 X0 GET LINK WORD IN NEW BUFFER
  26905. LX2 CBTLS
  26906. IX2 X2+X6
  26907. SA2 X2
  26908. BX5 X1 SET BACKWARD LINK TO OLD BUFFER
  26909. LX5 12
  26910. BX5 X5+X3 SET FORWARD LINK TO OLD FORWARD
  26911. LX5 24
  26912. MX4 24
  26913. LX4 48
  26914. BX7 -X4*X2
  26915. BX7 X7+X5
  26916. SA7 A2
  26917. ZR X3,/MONITOR/RB6 IF ADDING TO END OF CHAIN
  26918. BX2 X3 FORM ADDRESS OF FORWARD
  26919. LX2 CBTLS
  26920. IX2 X2+X6
  26921. MX4 12 MODIFY BACKWARD LINK
  26922. LX0 36
  26923. LX4 48
  26924. + SA3 X2 **** PERFORM IN ONE WORD ****
  26925. BX3 -X4*X3 **** PERFORM IN ONE WORD ****
  26926. BX7 X3+X0 **** PERFORM IN ONE WORD ****
  26927. SA7 A3 **** PERFORM IN ONE WORD ****
  26928. LX0 24
  26929. JP B6 RETURN
  26930. LCC SPACE 4,15
  26931. ** LCC - LINK CONTROL BUFFER TO END OF SPECIFIED CHAIN.
  26932. *
  26933. * EXTRY (X0) = CONTROL BUFFER ORDINAL.
  26934. * (X1) = LIST ADDRESS.
  26935. * (B3) = REGISTER SAVE BUFFER ADDRESS.
  26936. * (B6) = RETURN ADDRESS.
  26937. *
  26938. * EXIT (X7) PRESERVED.
  26939. *
  26940. * USES A - 2, 3, 6, 7.
  26941. * B - 6.
  26942. * X - 1, 2, 3, 4, 5, 6, 7.
  26943. *
  26944. * CALLS LCB, RXR.
  26945.  
  26946.  
  26947. LCC BSS 0 ENTRY
  26948. SA7 B3+B1 SAVE (X7)
  26949. SB3 A7+B1
  26950. SX7 B6 SAVE (B6)
  26951. SA7 A7-B1
  26952. BX7 X0 SET CONTROL BUFFER INTERLOCK
  26953. SA7 INLB
  26954. BX3 X0 SET NEW LIST INDEX
  26955. LX3 CBTLS
  26956. TA3 X3+HSLK,CBT
  26957. MX4 3
  26958. LX4 24
  26959. BX3 -X4*X3
  26960. TX4 X1,-BLMB
  26961. LX4 21
  26962. BX7 X3+X4
  26963. SA2 X1 READ LIST WORD
  26964. SA7 A3
  26965. NZ X2,LCC2 IF LIST NOT EMPTY
  26966. SX2 B1 SET COUNT = 1
  26967. LX2 18
  26968. BX2 X2+X0 SET LAST
  26969. LX2 18
  26970. BX7 X2+X0 SET FIRST = LAST
  26971. SA7 A2
  26972. BX1 X0 GET ADDRESS OF CONTROL BUFFER WORD 7
  26973. LX1 CBTLS
  26974. SA2 A3+LSLK-HSLK READ CONTROL BUFFER LINK WORD
  26975. MX3 24
  26976. LX3 48 ZERO CONTROL BUFFER LINKS
  26977. BX7 -X3*X2
  26978. SA7 A2
  26979. SA1 B3-B1 RESTORE (X7)
  26980. SB3 A1-B1
  26981. SA2 A1-B1 RESTORE (B6)
  26982. BX7 X1
  26983. SB6 X2
  26984. JP B6 RETURN
  26985.  
  26986. LCC2 SX3 B1 INCREMENT COUNT
  26987. LX3 36
  26988. IX2 X3+X2
  26989. MX3 -18 UPDATE LAST POINTER
  26990. LX3 18
  26991. BX1 -X3*X2 SAVE OLD LAST
  26992. SX5 LSLK ADD CONTROL BUFFER LINK WORD
  26993. IX1 X1+X5
  26994. BX2 X3*X2
  26995. LX0 18
  26996. BX6 X2+X0
  26997. SA6 A2
  26998. LX0 42
  26999. SB6 RXR SET RETURN ADDRESS TO RESTORE ROUTINE
  27000. EQ LCB LINK CONTROL BUFFER (X0) FOLLOWING (X1)
  27001. LCH SPACE 4,15
  27002. ** LCH - LINK CONTROL BUFFER TO HASH CHAIN.
  27003. *
  27004. * ENTRY (X0) = CONTROL BUFFER INDEX.
  27005. * (X1) = HASH ENTRY ADDRESS.
  27006. * (B3) = REGISTER SAVE BUFFER ADDRESS.
  27007. * (B6) = RETURN ADDRESS.
  27008. *
  27009. * EXIT (X7) PRESERVED.
  27010. *
  27011. * USES A - 1, 2, 3, 4, 7.
  27012. * B - 6.
  27013. * X - 1, 2, 3, 4, 5, 6, 7.
  27014. *
  27015. * CALLS LCB, RXR.
  27016.  
  27017.  
  27018. LCH BSS 0 ENTRY
  27019. SA7 B3+B1 SAVE (X7)
  27020. SB3 A7+B1
  27021. SX7 B6 SAVE (B6)
  27022. SA7 A7-B1
  27023. BX2 X1
  27024. BX1 X0 SET NEW *PUT* ORDINAL AND HASH INDEX
  27025. SA4 PUTO
  27026. LX1 CBTLS
  27027. TA3 X1+HSLK,CBT
  27028. MX5 -21
  27029. BX3 X5*X3
  27030. SX4 X4+
  27031. BX3 X3+X4
  27032. SA4 HTA FORM HASH INDEX
  27033. IX4 X2-X4
  27034. LX4 12
  27035. BX7 X3+X4
  27036. MX5 -12
  27037. SA1 X2 GET CONTROL BUFFER INDEX
  27038. MX6 24
  27039. SA7 A3
  27040. LX6 -12 POSITION ADDRESS MASK
  27041. BX1 -X5*X1
  27042. SX3 X0
  27043. ZR X1,LCH5 IF NO BUFFERS ON HASH THREAD
  27044. LX3 CBTLS
  27045. BX4 X1
  27046. TA3 X3+PAD1,CBT GET DISK ADDRESS FROM NEW BUFFER
  27047. NO
  27048. BX7 X6*X3 EXTRACT CYLINDER, TRACK AND SECTOR
  27049.  
  27050. * FIND POSITION TO INSERT NEW BUFFER.
  27051.  
  27052. LCH2 BX3 X4 SET BUFFER ORDINAL
  27053. SX1 X4+0
  27054. LX3 CBTLS
  27055. TA4 X3+PAD1,CBT
  27056. BX4 X6*X4 ISOLATE CYLINDER, TRACK AND SECTOR
  27057. IX4 X4-X7
  27058. NG X4,LCH4 IF POSITION FOUND
  27059. SA4 A4+HSLK GET FORWARD LINK
  27060. AX4 24
  27061. BX4 -X5*X4
  27062. NZ X4,LCH2 IF NOT END OF CHAIN
  27063.  
  27064. LCH3 SX2 HSLK FORM PARAMETER FOR *LCB*
  27065. SB6 RXR RETURN TO RESTORE REGISTERS
  27066. LX1 18
  27067. BX1 X1+X2
  27068. EQ LCB LINK CONTROL BUFFER
  27069.  
  27070. LCH4 TA4 X3+HSLK,CBT GET BACKWARD LINK
  27071. AX4 36
  27072. BX1 -X5*X4
  27073. NZ X1,LCH3 IF NOT FIRST BUFFER ON HASH LIST
  27074.  
  27075. * UPDATE HASH ENTRY AND ADD BUFFER AT START.
  27076.  
  27077. LCH5 SA1 X2 READ HASH ENTRY
  27078. BX4 -X5*X1
  27079. BX1 X5*X1 SET INDEX = NEW BUFFER
  27080. BX7 X1+X0
  27081. SA7 A1
  27082. LX0 CBTLS READ HASH CHAIN WORD OF NEW BUFFER
  27083. TA2 X0+HSLK,CBT
  27084. BX2 -X6*X2
  27085. LX4 24 SET FORWARD LINK = OLD HASH INDEX
  27086. BX7 X2+X4
  27087. LX4 36+CBTLS POSITION HASH INDEX
  27088. SA7 A2
  27089. LX0 -CBTLS
  27090. ZR X4,RXR IF NO BUFFERS ON CHAIN
  27091. TA2 X4+HSLK,CBT
  27092. LX5 36
  27093. BX2 X5*X2 SET BACKWARD LINK = NEW BUFFER
  27094. LX0 36
  27095. BX7 X2+X0
  27096. LX0 24
  27097. SA7 A2
  27098. * EQ RXR RESTORE (X2) AND (X7) AND RETURN
  27099. ERRNZ *-RXR *RXR* MUST FOLLOW *LCH*
  27100. RXR SPACE 4,15
  27101. ** RXR - RESTORE X2 AND X7 AND EXIT TO (X2).
  27102. *
  27103. * ENTRY (B3) = NEXT AVAILABLE SCRATCH.
  27104. *
  27105. * EXIT REGISTERS X2 AND X7 ARE RESTORED.
  27106. * (B6) RESTORED TO RETURN ADDRESS.
  27107. * RETURN IS TO (X2), NOT TO CALLER.
  27108. * (B3) UPDATED.
  27109. *
  27110. * USES A - 1, 2.
  27111. * B - 3, 6.
  27112. * X - 1, 2, 7.
  27113.  
  27114.  
  27115. RXR BSS 0 ENTRY
  27116. SA1 B3-B1 RESTORE (X7)
  27117. SB3 A1-B1
  27118. SA2 A1-B1 RESTORE (X2)
  27119. BX7 X1
  27120. SB6 X2 GET RETURN ADDRESS
  27121. JP B6 RETURN
  27122. SBB SPACE 4,10
  27123. ** SBB - SET BUFFER BUSY RESPONSE.
  27124. *
  27125. * EXIT (X6) = 1/0, 1/1, 58/0 (BUSY STATUS).
  27126. * PUT STATISTICS UPDATED.
  27127. * CONTROL PASSED TO LBMXS.
  27128. *
  27129. * USES A - 1, 3, 6.
  27130. * X - 1, 3, 4, 6.
  27131.  
  27132.  
  27133. SBB BSS 0 ENTRY
  27134. SA3 PUTO
  27135. SX6 B1
  27136. LX3 PUTLS
  27137. TA1 X3+ACRJ,PUT COUNT BUFFER BUSY
  27138. BX3 X1
  27139. LX1 59-23
  27140. NG X1,SBB1 IF OVERFLOW
  27141. IX7 X3+X6
  27142. SA7 A1
  27143. SBB1 SA1 A1+B1
  27144. ERRNZ ACST-ACRJ-1 CODE DEPENDS ON VALUE
  27145. BX3 X1
  27146. LX1 59-35
  27147. IX7 X3+X6
  27148. NG X1,SBB2 IF OVERFLOW
  27149. SA7 A1+
  27150. SBB2 LX6 58-0 SET BUSY STATUS
  27151. EQ LBMXS EXIT TO LBM
  27152. SIS SPACE 4,10
  27153. ** SIS - SET INACCESSIBLE DEVICE RESPONSE.
  27154. *
  27155. * EXIT TO *LBMXS* WITH DEVICE INACCESSIBLE STATUS.
  27156. *
  27157. * USES X - 6.
  27158.  
  27159.  
  27160. SIS BSS 0 ENTRY
  27161. SX6 B1
  27162. LX6 56-0
  27163. EQ LBMXS EXIT BUFFER MANAGER
  27164. SNS SPACE 4,20
  27165. ** SNS - SET NEXT SECTOR.
  27166. *
  27167. * ENTRY (LSEC) = CURRENT LOGICAL SECTOR.
  27168. * (LTRK) = CURRENT LOGICAL TRACK.
  27169. * (MSTA) = MST ADDRESS.
  27170. * (B3) = REGISTER SAVE BUFFER ADDRESS.
  27171. * (B6) = RETURN ADDRESS.
  27172. *
  27173. * EXIT (X0) = NON-ZERO IF END OF LOGICAL TRACK CHAIN.
  27174. * (X7) PRESERVED.
  27175. * (LSEC) UPDATED.
  27176. * (LTRK) UPDATED.
  27177. *
  27178. * USES A - 1, 2, 6, 7.
  27179. * B - 6.
  27180. * X - 0, 1, 2, 6.
  27181. *
  27182. * CALLS RXR.
  27183.  
  27184.  
  27185. SNS BSS 0 ENTRY
  27186. SA7 B3+B1 SAVE (X7)
  27187. SB3 A7+B1
  27188. SX7 B6 SAVE (B6)
  27189. SA7 A7-B1
  27190. SA1 LSEC
  27191. SX2 LSLB
  27192. IX6 X1+X2
  27193. SA6 A1
  27194. SA1 LTRK
  27195. BX0 X1 (X0) = CURRENT LOGICAL TRACK
  27196. SA1 MSTA
  27197. MX2 -2
  27198. BX2 -X2*X0 TRT BYTE INDEX
  27199. LX2 2
  27200. SB6 X2
  27201. LX2 1
  27202. SB6 X2+B6 BYTE INDEX*12D
  27203. MX2 -9
  27204. LX0 -2
  27205. BX7 -X2*X0 TRT WORD INDEX
  27206. SA2 X1+TRLL
  27207. IX7 X2+X7
  27208. SA2 X7 READ TRT WORD
  27209. LX2 B6
  27210. MX7 12
  27211. SX0 B0 CLEAR EOI FLAG
  27212. BX7 X7*X2 NEXT TRACK
  27213. NG X7,SNS1 IF CURRENT IS NOT EOI TRACK
  27214. LX7 12
  27215. IX2 X6-X7
  27216. NG X2,RXR IF NEW BUFFER NOT BEYOND EOI
  27217. ZR X2,RXR IF EOI IN NEW BUFFER
  27218. SX0 B1 SET EOI FLAG
  27219. EQ RXR EXIT
  27220.  
  27221. SNS1 SA1 X1+MDGL SECTOR LIMIT
  27222. MX2 -12
  27223. BX1 -X2*X1
  27224. IX2 X6-X1
  27225. NG X2,RXR IF NOT AT SECTOR LIMIT
  27226. LX7 12
  27227. SA7 LTRK SET NEXT TRACK
  27228. LX7 59-11
  27229. MX6 0
  27230. SA6 LSEC RESET LOGICAL SECTOR
  27231. EQ RXR RESTORE X2 AND X7 AND RETURN TO (X2)
  27232. SNT SPACE 4,15
  27233. ** SNT - SET NEXT TRACK.
  27234. *
  27235. * ENTRY (X0) = CURRENT LOGICAL TRACK.
  27236. * (X1) = MST ADDRESS.
  27237. * (B6) = RETURN ADDRESS.
  27238. *
  27239. * EXIT (X6) = NEW LOGICAL TRACK.
  27240. * (X2) = TRT WORD WITH NEXT TRACK IN BITS 48-59.
  27241. *
  27242. * USES A - 2.
  27243. * X - 2, 6.
  27244.  
  27245.  
  27246. SNT BSS 0 ENTRY
  27247. MX2 -2
  27248. BX2 -X2*X0 BYTE INDEX
  27249. SB1 B6 SAVE (B6)
  27250. LX2 2
  27251. SB6 X2
  27252. LX2 1
  27253. SB6 X2+B6 BYTE INDEX * 12D
  27254. MX2 -9
  27255. LX0 -2
  27256. BX6 -X2*X0
  27257. SA2 X1+TRLL
  27258. IX6 X2+X6
  27259. SA2 X6 READ TRT WORD
  27260. LX2 B6
  27261. SB6 B1 RESTORE (B6)
  27262. SB1 1 RESTORE (B1)
  27263. MX6 12
  27264. LX0 2
  27265. BX6 X6*X2 GET NEXT TRACK POINTER
  27266. LX6 12
  27267. JP B6 RETURN
  27268. SRC SPACE 4,10
  27269. ** SRC - SET RECALL CONTROL.
  27270. *
  27271. * ENTRY (B6) = RETURN ADDRESS.
  27272. * (X0) = CONTROL BUFFER INDEX.
  27273. *
  27274. * USES A - 1, 3, 6.
  27275. * X - 1, 2, 3, 4, 6.
  27276.  
  27277.  
  27278. SRC BSS 0 ENTRY
  27279. BX2 X0 GET CONTROL BUFFER ADDRESS
  27280. LX2 CBTLS
  27281. TA3 X2+LSLK,CBT GET RECALL WORD
  27282. SA1 RPRM GET RECALL PARAMETER
  27283. MX4 -24 SET RECALL CONTROL
  27284. BX3 X4*X3
  27285. BX6 X3+X1
  27286. SA6 A3
  27287. JP B6 RETURN
  27288. SRR SPACE 4,10
  27289. ** SRR - SET RECALL RESPONSE.
  27290. *
  27291. * EXIT (X6) = 1/1, 59/0 (RECALL STATUS).
  27292. * PUT STATISTICS UPDATED.
  27293. * CONTROL PASSED TO *LBMXS*.
  27294. *
  27295. * USES A - 1, 3, 6.
  27296. * X - 1, 3, 4, 6.
  27297.  
  27298.  
  27299. SRR BSS 0 ENTRY
  27300. SA3 PUTO
  27301. SX4 B1
  27302. LX3 PUTLS
  27303. MX6 1
  27304. TA1 X3+ACST,PUT COUNT BUFFER PROCESSED AND RECALLED
  27305. LX4 35-0
  27306. BX6 -X1*X6
  27307. BX4 -X1*X4
  27308. LX6 36-59
  27309. LX4 0-35
  27310. BX6 X6+X4
  27311. IX6 X1+X6
  27312. SA6 A1
  27313. MX6 1 SET RECALL STATUS
  27314. EQ LBMXS EXIT
  27315. TITLE CIO MONITOR MODE ROUTINES.
  27316. CPP SPACE 4,10
  27317. ** CPUCIO (PSEUDO-PP) EXCHANGE PACKAGE.
  27318. *
  27319. * CONTAINS 20-WORD EXCHANGE PACKAGE SIMILAR TO
  27320. * THE ONE AT CONTROL POINT N+1, AND THREE EXTRA WORDS
  27321. * TO MAKE UP A SHORT CONTROL POINT AREA.
  27322.  
  27323.  
  27324. CPP EXP P=/BUFIO/PPC,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,A5=(1
  27325. ,,SP),MA=CPP,EM=(,CXPFE),EA=CPP
  27326.  
  27327. * *STSW*.
  27328.  
  27329. VFD 3/ZCPS NULL CPU STATUS
  27330. VFD 57/0
  27331.  
  27332. * CWQW.
  27333.  
  27334. VFD 2/1
  27335. VFD 7/MTCS CPU PRIORITY = *MAGNET-S*
  27336. VFD 1/0
  27337. VFD 1/0 CPU SLICE ACTIVE
  27338. VFD 1/0 RECALL FLAG
  27339. VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
  27340. VFD 2/0
  27341. VFD 9/0 SERVICE CYCLE
  27342. VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
  27343. VFD 1/0 *MTR* BYPASS FLAG
  27344. VFD 2/1 SELECT CPU 0
  27345. VFD 3/0
  27346. VFD 3/PSXT PSEUDO-PP EXCHANGE PACKAGE TYPE
  27347. VFD 18/0 *WQ* LINKAGE
  27348.  
  27349. * CSAW.
  27350.  
  27351. VFD 60/0
  27352.  
  27353. * *CTMW*.
  27354.  
  27355. VFD 60/0
  27356. ACQ SPACE 4,15
  27357. ** ACQ - ASSIGN PSEUDO-PP OR CPUCIO REQUEST QUEUE.
  27358. *
  27359. * ENTRY (X6) = REQUEST.
  27360. * (B3) = NORMAL EXIT ADDRESS.
  27361. * (B4) = EXIT ADDRESS IF NON-ASSIGNABLE REQUEST
  27362. * (B7) = CONTROL POINT AREA ADDRESS.
  27363. *
  27364. * USES X - 0, 1, 2, 3, 4, 6, 7.
  27365. * A - 1, 2, 3, 4, 6, 7.
  27366. * B - 3, 6.
  27367. *
  27368. * CALLS /MONITOR/AQR, /MONITOR/RCC.
  27369.  
  27370.  
  27371. ACQ TA2 SP
  27372. NZ X2,ACQ1 IF PSEUDO-PP NOT AVAILABLE
  27373.  
  27374. * TO INTERLOCK WITH *MTR*, *ACPP* AND THE PP COUNT MUST BE
  27375. * UPDATED BEFORE THE STORAGE MOVE CHECK.
  27376.  
  27377. SA1 B7+STSW
  27378. SX2 B7
  27379. SX7 B7 SET CP ADDRESS FOR MONITOR FUNCTIONS
  27380. LX2 24 SET ASSIGNED CP ADDRESS
  27381. SX0 B1
  27382. BX7 X7+X2
  27383. LX2 24-7 SET CP NUMBER
  27384. LX0 48
  27385. BX7 X7+X2
  27386. TA7 ACPP,SPX SET CP ASSIGNMENT
  27387. IX7 X1+X0 INCREMENT PP COUNT
  27388. SA7 A1
  27389. SA4 CMCL GET MOVE CONTROL
  27390. MX0 55
  27391. LX2 -12
  27392. LX0 36
  27393. BX6 X0*X6
  27394. BX6 X6+X2 SET CP NUMBER IN IR
  27395. LX2 12
  27396. BX7 X4-X2
  27397. AX7 48
  27398. ZR X7,ACQ0.1 IF STORAGE MOVE REQUESTED / IN PROGRESS
  27399. SA6 A2+ SET PSEUDO-PP IR
  27400. SA1 /CPUCIO/MB
  27401. BX6 X1
  27402. SA1 A1+B1
  27403. ERRNZ /CPUCIO/MB1-/CPUCIO/MB-1 ADDR MUST BE CONSECUTIVE
  27404. SA6 A2+2+4 MB TO MB+4
  27405. BX7 X1
  27406. SA1 A1+B1
  27407. ERRNZ /CPUCIO/MB2-/CPUCIO/MB1-1 ADDR MUST BE CONSECUTIVE
  27408. BX6 X1
  27409. SA6 A6-B1 MB2 TO MB+3
  27410. SB6 CPP EXCHANGE PACKAGE ADDRESS
  27411. SA7 A6-B1 MB1 TO MB+2
  27412. SX6 B3 SAVE RETURN ADDRESS
  27413. SA6 /MONITOR/T2
  27414. SB3 ACQ0 *RCC* RETURN ADDRESS
  27415. EQ /MONITOR/RCC RECALL CPU
  27416.  
  27417. ACQ0 SA1 /MONITOR/T2
  27418. SB3 X1+ RESTORE RETURN ADDRESS
  27419. JP B3 RETURN
  27420.  
  27421. ACQ0.1 TA7 ACPP,SPX CLEAR CP ASSIGNMENT
  27422. BX7 X1 RESTORE PP COUNT
  27423. SA7 A1
  27424. ACQ1 SA3 /CPUCIO/MB SAVE PARAMETER WORD
  27425. R= X2,/MONITOR/CQ
  27426. SB3 B4 SET STORAGE MOVE RETURN ADDRESS
  27427. BX7 X3
  27428. SA7 /MONITOR/AQRA
  27429. EQ /MONITOR/AQR ASSIGN QUEUE REQUEST
  27430. IPP SPACE 4,10
  27431. ** IPP - INITIATE PSEUDO PP CIO PROCESSOR.
  27432. *
  27433. * ENTRY REFER TO CPUCIO SPECIAL PROCESSORS DOCUMENTATION.
  27434. *
  27435. * EXIT TO */CPUCIO/CPCX* IF STANDARD ASSIGNMENT.
  27436. * TO */IHPFMD/RPP1* OR */IH819/PPE1* IF BUFFER
  27437. * MANAGER RECALL.
  27438. * TO */CPUCIO/RPC* IF NOT BUFFERED DEVICE
  27439. * PROCESSOR FUNCTION OR NULL FILE.
  27440. *
  27441. * CALLS ACQ.
  27442.  
  27443.  
  27444. IPP BSS 0 ENTRY
  27445. TNO /BUFIO/IPS,BIOMMF
  27446. IPP0 MX1 -3 GET TERMINATION CONDITION
  27447. LX4 4
  27448. SX2 5714B
  27449. BX1 -X1*X4
  27450. LX4 2
  27451. MX6 1
  27452. BX2 X2*X4
  27453. LX6 55-59
  27454. SX3 X2-/CIO/SKP*100B-/CIO/EOI
  27455. AX2 9
  27456. BX6 X4+X6 SET FUNCTION FLAG
  27457. ZR X3,/CPUCIO/RPC IF *SKIPEI*
  27458. MX4 12
  27459. NZ X2,/CPUCIO/RPC IF BACKWARD SKIP
  27460. ZR X1,/CPUCIO/RPC IF *RPHR*/*WPHR*
  27461. SA6 A4
  27462. ERX1 X0 GET CURRENT TRACK
  27463. LX4 -24
  27464. BX1 X4*X1
  27465. ZR X1,/CPUCIO/RPC IF NULL FILE
  27466. IPP1 SA1 /CPUCIO/IR GET *CIO* CALL
  27467. SB3 IPP2 SET RETURN ADDRESS FOR *ACQ*
  27468. BX6 X1
  27469. SB4 B3
  27470. TJP (/DCP/ACQ,DCPC,/BUFIO/ACQ) ASSIGN PSEUDO PP
  27471.  
  27472. IPP2 SA1 IPPA CHECK FOR BUFFER MANAGER RECALL REQUEST
  27473. NG X1,/CPUCIO/CPCX IF NOT BUFFER MANAGER RECALL REQUEST
  27474. TEQ (/IHPFMD/RPP1,IHPFMD,/IH819/PPE1) PROCESS NEXT REQUEST
  27475.  
  27476.  
  27477. IPPA CON -1
  27478. MNR SPACE 4,10
  27479. ** MNR - *BUFIO* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
  27480. *
  27481. * EXIT TO */MONITOR/PPE* IF *FLPP* INTERRUPT.
  27482. * TO */BUFIO/IOC* IF BUFFER MANAGER REQUEST PRESENT.
  27483. * TO */MONITOR/MNR4* IF NONE FOUND (X0 = 0).
  27484.  
  27485.  
  27486. MNR SA1 B2+3 GET *PSD* FROM EXCHANGE PACKAGE
  27487. TA2 IORQ I/O REQUESTS
  27488. BX0 X0-X0
  27489. LX1 59-39 POSITION TO STEP MODE FLAG
  27490. NZ X2,IOC IF I/O REQUEST PROCESSED
  27491. TNG X1,(/MONITOR/PPE,IH819,/BUFIO/MNR) IF INTERRUPT
  27492. EQ /MONITOR/MNR4 RETURN TO MAIN ROUTINE
  27493.  
  27494. * EXTENSION FOR PSEUDO-PP REQUEST PROCESSING.
  27495. *
  27496. * ENTRY (X3) = MONITOR MODE START TIME.
  27497. *
  27498. * EXIT (A5) = PSEUDO-PP OUTPUT REGISTER ADDRESS.
  27499. * TO */MONITOR/MTRX* IF NO PSEUDO PP REQUEST TO
  27500. * PROCESS.
  27501. * TO */MONITOR/PPR0.1* IF PSEUDO PP REQUEST TO PROCESS.
  27502. * TO */IH819/PPE* OR */BUFIO/MNR* IF BUFFER MANAGER
  27503. * RECALL.
  27504. * (B4) = REQUEST IF EXIT TO *PPR0.1*.
  27505. * (X1) = OUTPUT REGISTER BITS 0 - 47 IF EXIT TO
  27506. * *PPR0.1*.
  27507.  
  27508.  
  27509. MNR1 SA1 B2+3
  27510. TA5 1,SP GET PSEUDO-PP OUTPUT REGISTER
  27511. LX1 59-39
  27512. MX0 4
  27513. TNG X1,(/IH819/PPE,IH819,/BUFIO/MNR1) IF BUFFER RECALL
  27514. BX0 X0*X5
  27515. NZ X0,/MONITOR/MTRX IF REQUEST ALREADY PROCESSED
  27516. UX1 B4,X5
  27517. SB4 B4+1777B
  27518. NZ B4,/MONITOR/PPR0.1 IF REQUEST OUTSTANDING
  27519. EQ /MONITOR/MTRX EXIT
  27520. PCQ SPACE 4,10
  27521. ** PCQ - PROCESS PSEUDO-PP REQUEST QUEUE.
  27522. *
  27523. * ENTRY IF ENTERED AT *PCQ1* -
  27524. * (B3) = RETURN ADDRESS IF PSEUDO-PP NOT AVAILABLE.
  27525. * (B4) = RETURN ADDRESS IF NO OUTSTANDING REQUESTS.
  27526. *
  27527. * CALLS ACQ.
  27528.  
  27529.  
  27530. PCQ SB3 /MONITOR/MTRX *ACQ* RETURN ADDRESS
  27531. SB4 PCQ2
  27532. PCQ1 SA1 CQRL GET NEXT ENTRY
  27533. TA2 SP
  27534. ZR X1,/MONITOR/RB4 IF NO PSEUDO-PP REQUESTS
  27535. NZ X2,/MONITOR/RB3 IF PSEUDO-PP NOT AVAILABLE
  27536. SA4 X1+RECW-RCCW READ PP REQUEST
  27537. MX7 -12+7 CONTROL POINT ADDRESS MASK
  27538. LX7 7
  27539. BX7 -X7*X1
  27540. SB7 X7 CPA
  27541. SA2 X1 DELETE ENTRY FROM QUEUE
  27542. MX0 -4
  27543. BX6 X2
  27544. SA6 A1
  27545. BX6 X6-X6
  27546. SA1 B7+STSW ADD RECALL SLOT TO FREE LIST
  27547. SX3 -420B-RCCW+1
  27548. SA6 A4
  27549. BX7 -X0*X1
  27550. BX1 X0*X1
  27551. SX0 A2-B7 COMPUTE RECALL INDEX
  27552. SA7 A2
  27553. IX0 X0+X3
  27554. SA3 A2+REPW-RCCW GET PARAMETER WORD
  27555. IX7 X0+X1 SET NEW FREE ENTRY AND RECALL COUNT
  27556. SA6 A3+
  27557. BX6 X4
  27558. SA7 A1
  27559. BX7 X3
  27560. SA7 /CPUCIO/MB SET PARAMETER WORD
  27561. EQ ACQ ASSIGN PSEUDO-PP
  27562.  
  27563. PCQ2 SA1 CPP+STSW SET NULL STATUS ON PSEUDO-PP
  27564. MX7 3
  27565. BX6 X7*X1
  27566. ZR X6,/MONITOR/MTRX IF PSEUDO-PP NOT ACTIVE
  27567. BX7 -X7*X1
  27568. SA7 A1
  27569. EQ /MONITOR/BNJ1 BEGIN NEW JOB
  27570. PRQ SPACE 4,10
  27571. ** PRQ - PROCESS REQUEST QUEUE.
  27572. *
  27573. * ENTRY (X1) = BUFFER ORDINAL TO RECALL.
  27574. *
  27575. * CALLS IPP, /CPUCIO/CPC.
  27576.  
  27577.  
  27578. PRQ SA2 BQRL GET FIRST ENTRY
  27579. MX0 12
  27580. LX1 12
  27581. LX0 -36
  27582. PRQ1 SB6 A2
  27583. BX2 -X0*X2
  27584. SX6 X2
  27585. SA2 X2
  27586. ZR X6,IPP2 IF END OF QUEUE
  27587. BX6 X0*X2
  27588. IX6 X6-X1
  27589. NG X6,PRQ1 IF BUFFER NUMBER NOT REACHED
  27590. NZ X6,IPP2 IF NO MATCH
  27591.  
  27592. * ENTRY FOUND, DELETE FROM QUEUE AND RESTART.
  27593.  
  27594. MX0 -12
  27595. BX6 -X0*X2 EXTRACT LINK
  27596. SA3 B6 GET LAST ENTRY
  27597. BX3 X0*X3 CLEAR OLD LINK
  27598. BX6 X6+X3 INSERT NEW LINK
  27599. SA6 A3
  27600. SA4 A2+RECW-RCCW READ RECALL REQUEST
  27601. SX1 A2
  27602. AX1 7
  27603. LX1 7
  27604. SB7 X1 CONTROL POINT AREA ADDRESS
  27605. SA1 B7+STSW
  27606. SX0 A2-B7 ADD FREE ENTRY TO CONTROL POINT
  27607. MX2 -4
  27608. SX0 X0-RCCW+1-420B
  27609. BX7 -X2*X1
  27610. BX6 X6-X6
  27611. BX1 X2*X1
  27612. SA7 A2
  27613. SA6 A4+
  27614. SA3 A2+REPW-RCCW GET PARAMETER WORD
  27615. SA6 A3
  27616. BX6 X3
  27617. SA6 /CPUCIO/MB
  27618. IX7 X1+X0
  27619. BX6 X4
  27620. SA7 A1+
  27621. SA6 /CPUCIO/IR
  27622. TA5 1,FP SIMULATE *MTR* REQUEST
  27623. EQ /CPUCIO/CPC PROCESS CIO REQUEST
  27624. TITLE CIO PROCESSOR.
  27625. SPACE 4,10
  27626. ** CIO PROCESSOR.
  27627. *
  27628. * STANDARD REGISTER DEFINITIONS.
  27629. *
  27630. * (B1) = 1.
  27631. * (B7) = CPA.
  27632. * (A4) = (A5) + 5 = MESSAGE BUFFER + 4.
  27633. * (A5) = PSEUDO OUTPUT REGISTER ADDRESS.
  27634. * (X4) = ABSOLUTE FST ADDRESS.
  27635. * (X5) = ABSOLUTE FET+1.
  27636. *
  27637. *T IR 18/ *CIO*, 1/A, 5/ CP, 18/ SKIP COUNT, 18/ FET ADDRESS
  27638. *
  27639. *T MB 12/ BF5, 12/ BF4, 12/ BF3, 12/ BF2, 12/ BF1
  27640. *
  27641. *T MB+1 12/ BF10, 12/ BF9, 12/ BF8, 12/ BF7, 12/ BF6
  27642. *
  27643. *T MB+2 12/ 0, 24/ *IN*, 24/ *OUT*
  27644. *
  27645. *T MB+3 1/R, 5/0, 6/ FETL, 24/ *FIRST*, 24/ *LIMIT*
  27646. * R SET IF RANDOM FILE.
  27647. * FETL FET LENGTH - 5.
  27648. *
  27649. * FET PARAMETERS ARE TRANSFERRED ONLY IF CIO REQUEST
  27650. * IS NOT RESTARTED FROM PSUEDO PP BUSY RECALL STACK.
  27651. *
  27652. *T MB+4 1/S,5/ RF,6/ RC,5/0,1/F,6/ EC,12/ ORD,4/ LV,8/ XC,12/ IC
  27653. * S SET IF *CIO* RESTARTED FROM RECALL STACK.
  27654. * RF RESTART FLAGS = 1/TIF, 1/0, 1/SDT, 1/BDF, 1/DTF.
  27655. * TIF = TRACK INTERLOCK FLAG.
  27656. * SDT = SKIP DATA TRANSFER FLAG.
  27657. * BDF = BUFFERED DEVICE FUNCTION FLAG.
  27658. * DTF = DATA TRANSFERRED FLAG.
  27659. * RC RECALL STACK REASON CODE.
  27660. * F BUILD FNT ENTRY (FLAG FOR *1MS* ONLY).
  27661. * EC ERROR CODE, IF NONZERO.
  27662. * ORD RELATIVE ADDRESS OF FNT ENTRY IN NFL.
  27663. * LV LEVEL NUMBER (0 - 17B).
  27664. * XC EXTERNAL *CIO* FUNCTION CODE.
  27665. * IC INTERNAL *CIO* FUNCTION CODE (SEE *COMSCIO*).
  27666. *
  27667. *T MB+5 1/E, 23/0, 18/ MSTA, 18/ ST
  27668. * E SET IF WRITE EOI REQUIRED.
  27669. * ST SECTORS PER TRACK ON EQUIPMENT.
  27670. * MSTA MST ADDRESS OF EQUIPMENT.
  27671. SPACE 4,10
  27672. ** GLOBAL DATA.
  27673.  
  27674.  
  27675. ABRA CON 0 ABSOLUTE RA
  27676. CHRV CON 0 MASS STORAGE CONTROL FLAGS
  27677. CLEA CON 0 CURRENT READ LIST ENTRY ABSOLUTE ADDRESS
  27678. CWLA CON 0,0 CONTROL WORD DATA ADDRESS / WORD COUNT
  27679. ERWB BSS 3 EXTENDED READ/WRITE BUFFER
  27680. FMOD CON 0 FILE MODE FOR WRITE
  27681. FSZL CON 0 FILE SIZE LIMIT
  27682. LBIA CON 0 30/ FIRST SECTOR, 30/ CONTROL BUFFER FWA
  27683. NPCB CON 0 NUMBER OF PRUS IN *CIO* BUFFER
  27684. NPTR CON 0 NUMBER OF PRUS TO TRANSFER
  27685. NTKP CON 0 NEXT TRACK POINTER
  27686. PCMS CON 0 PRU CHANGE IN MASS STORAGE ALLOCATION
  27687. PRUC CON 0 PRU COUNT
  27688. PMFF CON 0 PERMANENT FILE FLAG
  27689. RCEV EQU FSZL RECALL EVENT
  27690. SCIE EQU ERWB+1 SECTOR COUNT FROM INITIAL POSITION TO EOI
  27691. SDTW CON 0 SKIP DATA TRANSFER FLAG FOR WRITE
  27692. STLR EQU SDTW SECTOR/TRACK LINKAGE FOR READ
  27693. USCW CON 0 UPDATED SECTOR CONTROL WORD FOR WRITE
  27694. WCCB CON 0 WORD COUNT OF DATA IN *CIO* BUFFER
  27695. WLBR EQU SDTW WRITE I/O BUFFER REQUEST
  27696.  
  27697. FCAC VFD 36/0,8/IMSK,8/IMWT,8/IMRD FUNCTION CHARGE
  27698.  
  27699. FCCM CON 741774B FET CODE CLEAR MASK (FOR READ)
  27700. FCSM CON 20B FET CODE MASK TO SET EOR
  27701. CON 740030B FET CODE MASK TO SET EOF
  27702. CON 741030B FET CODE MASK TO SET EOI
  27703.  
  27704. UACC VFD 12/AISS,12/IOAW,6/40,6/20,24/0 ACCOUNTING UPDATE
  27705. UAMI VFD 12/CDCS,12/ACLW,6/0,6/18,24/0 *UADM* MS PRU CHANGE
  27706.  
  27707.  
  27708. TFSL BSS 0 TABLE OF FILE SIZE LIMITS
  27709. VFD 30/0,30//PFM/DSRNG1*100B
  27710. VFD 30//PFM/DSRNG2*100B,30//PFM/DSRNG3*100B
  27711. VFD 30//PFM/DSRNG4*100B,30//PFM/DSRNG5*100B
  27712. VFD 30//PFM/DSRNG6*100B,30//PFM/DSRNG7*100B
  27713. SPACE 4,10
  27714. ERRNZ /CIO/RDF INDEX MUST BE ZERO
  27715. ERRNZ /CIO/WTF-1 INDEX MUST BE ONE
  27716. ERRNZ /CIO/SKP-2 INDEX MUST BE TWO
  27717. SPACE 4,10
  27718. RB3 EQU /MONITOR/RB3 EXIT TO (B3)
  27719. RB4 EQU /MONITOR/RB4 EXIT TO (B4)
  27720. RB5 EQU /MONITOR/RB5 EXIT TO (B5)
  27721. RB6 EQU /MONITOR/RB6 EXIT TO (B6)
  27722. TITLE CIO PROCESSOR EXIT ROUTINES.
  27723. RCR SPACE 4,15
  27724. ** RCR - REQUEST CIO RECALL.
  27725. *
  27726. * ENTRY (X7) = RECALL REASON CODE.
  27727. * (X6) = I/O BUFFER ORDINAL IF ENTRY AT *RCR3*.
  27728. *
  27729. * EXIT TO *PPCX*.
  27730. *
  27731. * A - 0, 1, 2, 3, 6, 7.
  27732. * B - 6.
  27733. * X - 0, 1, 2, 3, 6, 7.
  27734. *
  27735. * CALLS UAC, WEI.
  27736.  
  27737.  
  27738. * PRU TRANSFER LIMIT.
  27739.  
  27740.  
  27741. RCR SX7 PTLR SET PRU TRANSFER LIMIT REASON CODE
  27742. SX6 -IORT SET I/O TIME RECALL
  27743. SB6 RCR6 SET TO CALL *WEI*
  27744. EQ RCR4 SAVE RECALL TIME AND REASON
  27745.  
  27746. * REQUEST TRACK REJECT.
  27747.  
  27748. RCR1 SX7 TIRR SET TRACK REJECT REASON CODE
  27749. SX6 -TIRT SET TRACK REJECT RECALL TIME
  27750. SB6 RCR6 SET TO CALL *WEI*
  27751. EQ RCR4 SAVE RECALL TIME AND REASON
  27752.  
  27753. * I/O BUFFER BUSY.
  27754.  
  27755. RCR2 SX7 LBBR SET I/O BUFFER BUSY REASON CODE
  27756. SX6 -IORT SET I/O TIME RECALL
  27757. SB6 RCR6 SET TO CALL *WEI*
  27758. EQ RCR4 SAVE RECALL TIME AND REASON
  27759.  
  27760. * I/O BUFFER RECALL.
  27761.  
  27762. RCR3 SX7 LBRR SET I/O BUFFER RECALL REASON CODE
  27763. SB6 RCR6 SET TO CALL *WEI*
  27764. RCR4 LX6 24
  27765. SA2 A4 SET RECALL STACK REASON CODE
  27766. SA6 RCEV SAVE RECALL TIME/EVENT
  27767. MX1 6
  27768. LX1 -6
  27769. BX1 -X1*X2
  27770. LX7 -12
  27771. BX7 X7+X1
  27772. SA7 A4
  27773. JP B6 COMPLETE PROCESSING FOR RECALL
  27774.  
  27775. * SET/CLEAR TRACK INTERLOCK REJECT.
  27776.  
  27777. RCR5 SX7 TIRR SET TRACK INTERLOCK REJECT
  27778. SX6 -TIRT SET TRACK INTERLOCK REJECT TIME
  27779. SB6 RCR8 SET TO ENTER RECALL STACK
  27780. EQ RCR4 SAVE RECALL TIME AND REASON
  27781.  
  27782. * WRITE EOI IF NECESSARY. RELEASE I/O BUFFER INTERLOCKS.
  27783.  
  27784. RCR6 SA0 RCR7 SET RETURN ADDRESS FOR *WEI*
  27785. EQ WEI WRITE EOI/RELEASE BUFFER INTERLOCKS
  27786.  
  27787. * UPDATE ACCOUNTING. CLEAR TRACK INTERLOCK.
  27788.  
  27789. RCR7 SA0 RCR8 SET RETURN ADDRESS FOR *UAC*
  27790. SX7 B1 SET TO NOT RECALL CPU
  27791. SB6 A0 RETURN ADDRESS IF TRACK INTERLOCK REJECT
  27792. EQ UAC UPDATE ACCOUNTING
  27793.  
  27794. * ENTER RECALL STACK.
  27795.  
  27796. RCR8 SA1 A5-B1 GET *CIO* CALL
  27797. SX0 B1+
  27798. BX6 X1
  27799. SA2 A4 GET MESSAGE BUFFER PARAMETERS
  27800. SA6 A5+B1
  27801. SX6 PBMF SET I/O BUFFER RECALL EVENT
  27802. BX7 X2
  27803. SA3 RCEV GET RECALL TIME/EVENT
  27804. SA7 A6+B1
  27805. BX6 X6+X3
  27806. LX2 0-58
  27807. SX1 RECM SET TO ENTER RECALL STACK
  27808. PL X3,PPCX IF I/O BUFFER RECALL
  27809. SX6 PBMF SET I/O BUFFER RECALL EVENT
  27810. BX6 -X3+X6
  27811. BX2 X2*X0 TRACK INTERLOCK RESTART FLAG
  27812. IX6 X6-X0 SET TIMED RECALL
  27813. ERRNZ PBMF-PTMF-1 INDEXES MUST BE CONSECUTIVE
  27814. IX6 X6-X2 SET TIMED RECALL / NO ROLLOUT
  27815. ERRNZ PTMF-PTRF-1 INDEXES MUST BE CONSECUTIVE
  27816. EQ PPCX EXIT
  27817. RPC SPACE 4,10
  27818. ** RPC - REQUEST PP CIO.
  27819. *
  27820. * ENTRY (X7) = ERROR CODE, IF NONZERO.
  27821. * (X0) = RA IF ENTRY AT *RPC3*.
  27822. *
  27823. * EXIT TO *PPCX*.
  27824. *
  27825. * ERROR TO *RCR5* IF TRACK INTERLOCK CLEAR REJECT.
  27826. *
  27827. * USES A - 0, 1, 2, 6, 7.
  27828. * B - 6.
  27829. * X - 1, 2, 3, 5, 6, 7.
  27830. *
  27831. * CALLS UAC, WEI.
  27832.  
  27833.  
  27834. RPC3 SA2 A5+5 CALCULATE FST ADDRESS
  27835. MX6 -12
  27836. LX2 -24
  27837. BX6 -X6*X2
  27838. IX6 X0-X6
  27839. R= X4,FSTL
  27840. IX4 X6+X4 ABSOLUTE FST ADDRESS
  27841. * EQ RPC BUILD PP REQUEST
  27842.  
  27843. RPC SA2 A4 SET ERROR CODE
  27844. LX7 36
  27845. SA1 A5-B1 GET *CIO* CALL
  27846. MX6 -59
  27847. BX7 X7+X2
  27848. MX3 -42
  27849. SX2 3R1MS CHANGE TO *1MS* CALL
  27850. BX7 -X6*X7 CLEAR RECALL STACK FLAG
  27851. LX2 -18
  27852. BX6 -X3*X1
  27853. SA7 A4
  27854. BX6 X6+X2
  27855. SA6 A5-B1
  27856. SA0 RPC1 SET RETURN ADDRESS FOR *WEI*
  27857. BX6 X3*X1
  27858. BX6 X6-X2
  27859. NZ X6,WEI IF *WEI* NOT YET CALLED
  27860. RPC1 SA0 RPC2 SET RETURN ADDRESS FOR *UAC*
  27861. SB6 RCR5 RETURN ADDRESS IF TRACK INTERLOCK REJECT
  27862. SX7 B1 SET NO RECALL OF CPU
  27863. EQ UAC UPDATE ACCOUNTING
  27864.  
  27865. RPC2 SA1 A5-B1 GET *CIO* CALL
  27866. SA2 A4 GET MESSAGE BUFFER PARAMETERS
  27867. BX6 X1
  27868. LX7 X2
  27869. SA6 A5+B1
  27870. SX1 RPPM REQUEST PP
  27871. SA7 A6+B1
  27872. SX6 B1+B1 SET NO REJECT ON PP CALL
  27873. EQ PPCX EXIT
  27874. CMP SPACE 4,15
  27875. ** CMP - COMPLETE MASS STORAGE PROCESSING.
  27876. *
  27877. * ENTRY (B2) = FET STATUS FOR READ/SKIP.
  27878. *
  27879. * EXIT TO *PPCX*.
  27880. *
  27881. * ERROR TO *RCR5* IF TRACK INTERLOCK CLEAR REJECT.
  27882. *
  27883. * USES A - 0, 1, 2, 3, 6, 7.
  27884. * B - 4, 6.
  27885. * X - 1, 2, 3, 6, 7.
  27886. *
  27887. * CALLS UAC, WEI.
  27888.  
  27889.  
  27890. CMP5 SA1 SSTL
  27891. LX1 59-16
  27892. NG X1,CMP IF *CIO* LOGGING DISABLED
  27893. SA2 A4 GET MESSAGE BUFFER PARAMETERS
  27894. LX2 59-54
  27895. SX7 /CIOERR/UCF *UNNECESSARY CIO FUNCTION*
  27896. PL X2,RPC IF NO DATA PREVIOUSLY TRANSFERRED
  27897. * EQ CMP COMPLETE FUNCTION
  27898.  
  27899. CMP SA2 A4 GET MESSAGE BUFFER PARAMETERS
  27900. SA0 CMP2 SET RETURN ADDRESS FOR *WEI*
  27901. LX2 59-6
  27902. NG X2,WEI IF WRITE
  27903. ZR B2,WEI IF NOT EOR/EOF/EOI
  27904. SX1 B2
  27905. AX1 2
  27906. SA1 FCSM-1+X1 GET CODE SET MASK
  27907. LX2 59-7-59+6
  27908. SX3 B1 GET FET+0
  27909. IX7 X5-X3
  27910. ERX3 X7
  27911. NG X2,CMP1 IF SKIP
  27912. SA2 FCCM GET CODE CLEAR MASK
  27913. BX3 -X2*X3
  27914. CMP1 BX6 X3+X1
  27915. EWX6 X7
  27916. EQ WEI RELEASE BUFFER INTERLOCK
  27917.  
  27918. * CHARGE FOR *CIO* OPERATION.
  27919.  
  27920. CMP2 SA2 A4 GET MESSAGE BUFFER PARAMETERS
  27921. MX6 48
  27922. BX6 X6*X2
  27923. LX2 -6
  27924. MX1 -4
  27925. BX1 -X1*X2
  27926. SA6 A4
  27927. LX1 3
  27928. SB4 X1
  27929. SA1 FCAC GET FUNCTION CHARGES
  27930. AX1 B4
  27931. MX6 -8
  27932. BX6 -X6*X1
  27933. SA1 UACC INCREMENT ACCOUNTING
  27934. IX6 X6+X1
  27935. LX2 59-6+6
  27936. MX7 1
  27937. SA6 A1
  27938. PL X2,CMP3 IF NOT WRITE
  27939. SA1 PRUC GET PRU COUNT
  27940. LX2 59-54-59+6
  27941. SX1 X1
  27942. BX3 X7*X2
  27943. BX1 X1+X3
  27944. ZR X1,CMP3 IF NO DATA TRANSFERRED
  27945. ERX3 X4 SET FILE WRITTEN ON FLAG
  27946. LX2 59-10-59+54
  27947. BX1 -X2*X7 SET WRITTEN SINCE OPEN IF NOT REWRITE
  27948. LX7 6-59
  27949. BX7 X7+X3
  27950. LX1 7-59
  27951. BX7 X7+X1
  27952. EWX7 X4
  27953. SX2 BMFL*100B FLUSH WRITE BUFFER IF REWRITE
  27954. SB4 CMP3 SET RETURN ADDRESS FOR *CIM*
  27955. ZR X1,CIM IF REWRITE
  27956. CMP3 SA0 CMP4 SET RETURN ADDRESS FOR *UAC*
  27957. SB6 RCR5 RETURN ADDRESS IF TRACK INERLOCK REJECT
  27958. MX7 1 SET TO RECALL CPU, PREVENT *UADM* ISSUE
  27959. EQ UAC UPDATE ACCOUNTING
  27960.  
  27961. CMP4 ERX1 X4 SET FST NOT BUSY
  27962. SX7 B1
  27963. IX3 X5-X7 SET FET COMPETE
  27964. BX6 X1+X7
  27965. ERX1 X3
  27966. EWX6 X4 STORE FST
  27967. BX7 X1+X7
  27968. SX6 B4 SET *UADM* PARAMTER WORD COUNT
  27969. EWX7 X3 STORE FET AFTER FST
  27970. BX6 X6+X2 SET RECALL CPU FLAG
  27971. SX1 UADM SET EXIT FUNCTION
  27972. * EQ PPCX EXIT
  27973. PPCX SPACE 4,10
  27974. ** PPCX - CIO PROCESSOR EXIT.
  27975. *
  27976. * ENTRY (A5) = ADDRESS OF PSEUDO OUTPUT REGISTER.
  27977. * (X1) = EXIT FUNCTION (DPPM, RECM, RPPM).
  27978. * (X6) = FUNCTION PARAMETERS.
  27979. *
  27980. * EXIT TO MONITOR MODE *CPUMTR* TO DROP CPU.
  27981. * P REGISTER RESET TO *PPC* FOR NEXT CIO CALL
  27982. * (XJ MUST IMMEDIATELY PRECEED *PPC* ENTRY POINT).
  27983.  
  27984.  
  27985. PPCX LX1 -12 STORE EXIT FUNCTION IN OUTPUT REGISTER
  27986. LX6 36
  27987. BX6 X6+X1
  27988. SA6 A5
  27989. PPCX1 XJ EXIT TO CPUMTR AND DROP CPU
  27990.  
  27991. PPCX2 SA1 A5 CHECK OUTPUT REGISTER
  27992. AX1 48
  27993. NZ X1,PPCX2 IF OUTPUT REGISTER NOT CLEARED
  27994. * EQ PPC PROCESS *CIO* REQUEST
  27995. TITLE CIO PROCESSOR MAIN ROUTINE.
  27996. PPC SPACE 4,20
  27997. ** PPC - PSEUDO PP CIO FUNCTION PROCESSOR (ENTRY).
  27998. *
  27999. * EXIT (X6) = BUFFER SPACE/DATA IN PRUS FOR READ/WRITE.
  28000. * (X7) = BUFFER SPACE/DATA WORD COUNT FOR READ/WRITE.
  28001. * TO *CMP3* IF PREVIOUS TRACK INTERLOCK CLEAR REJECT
  28002. * ON COMPLETE FUNCTION.
  28003. * TO *RCR5* IF SET TRACK INTERLOCK REJECT.
  28004. * TO *RDF* IF READ FUNCTION.
  28005. * TO *RDF3* IF SKIP FUNCTION.
  28006. * TO *WTF* IF WRITE FUNCTION.
  28007. *
  28008. * ERROR TO *RPC3* IF INCORRECT FET ADDRESS OR PARAMETER.
  28009. * TO *RPC* IF OTHER USER ERROR.
  28010. *
  28011. * USES A - 0, 1, 2, 3, 4, 6, 7.
  28012. * B - 2, 3, 4, 6, 7.
  28013. * X - ALL.
  28014. *
  28015. * CALLS CBS, CRA, SRA, /MONITOR/VFA, /MONITOR/VFP.
  28016. *
  28017. * MACROS MONITOR.
  28018.  
  28019.  
  28020. * VALIDATE FET ADDRESS.
  28021.  
  28022. PPC SA2 UACC CLEAR ACCOUNTING CHARGE
  28023. MX7 36
  28024. BX7 X7*X2
  28025. SA1 A5-B1 GET *CIO* CALL
  28026. BX6 X6-X6
  28027. SA7 A2
  28028. MX3 5
  28029. SA6 A5+B1 CLEAR *MB*
  28030. LX3 36-55
  28031. SA6 A6+B1 CLEAR *MB+1*
  28032. BX3 X3*X1 CP NUMBER
  28033. SA6 A5+6 CLEAR DATA CHANGE/WRITE EOI FLAGS
  28034. SB2 B0 INDICATE NO FET ADDRESS
  28035. LX3 -36+7
  28036. SA6 PRUC CLEAR PRU COUNT
  28037. SB3 RPC3 SET ERROR EXIT ADDRESS FOR *VFA*/*VFP*
  28038. SB6 PPC1 SET RETURN ADDRESS FOR *VFP*
  28039. SB7 X3 CONTROL POINT ADDRESS
  28040. SA6 A6-B1 CLEAR MASS STORAGE PRU CHANGE
  28041. ERRNZ PRUC-PCMS-1 INDEXES MUST BE CONSECUTIVE
  28042. SX7 /CIOERR/ARG *FET ADDRESS OUT OF RANGE*
  28043. EQ /MONITOR/VFA VERIFY FET ADDRESS
  28044.  
  28045. * VALIDATE FET PARAMETERS.
  28046.  
  28047. PPC1 SA4 A5+5 GET MESSAGE BUFFER PARAMETERS
  28048. MX2 -24
  28049. BX5 -X2*X5 ABSOLUTE FET+1
  28050. PL X4,PPC3 IF NOT RESTART FROM RECALL STACK
  28051. MX2 -2
  28052. SA6 A4-B1 SAVE FET LENGTH - 5 AND RANDOM FLAG
  28053. SB6 PPC2 SET RETURN ADDRESS FOR *VFP*
  28054. BX6 -X2*X4 GET FET PARAMETER VALIDATION FLAGS
  28055. SX1 B0
  28056. SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
  28057. NZ X6,/MONITOR/VFP IF FET PARAMETER VALIDATION REQUIRED
  28058. PPC2 SA2 A4-B1 GET FET LENGTH - 5 AND RANDOM FLAG
  28059. BX7 X1+X2 SAVE FIRST AND LIMIT
  28060. SA6 A2-B1 SAVE IN AND OUT
  28061. SA7 A2
  28062. PPC3 SA2 A4
  28063. MX3 -24
  28064. BX0 -X3*X0
  28065. BX6 X0
  28066. SA6 ABRA ABSOLUTE RA
  28067. MX6 -12
  28068. BX3 -X6*X2 INTERNAL FUNCTION CODE
  28069. LX2 -24
  28070. BX1 -X6*X2 FNT ORDINAL
  28071. SX4 X1-FSTL
  28072. IX4 X0-X4 ABSOLUTE FST ADDRESS
  28073. LX2 59-58+24
  28074. ZR X3,CMP3 IF TRACK INTERLOCK CLEAR REJECT
  28075.  
  28076. * INTERLOCK TRACK FOR PERMANENT FILE.
  28077.  
  28078. SX1 B1
  28079. IX1 X4-X1
  28080. ERX1 X1 CHECK FILE TYPE
  28081. MX6 -6
  28082. LX1 -6
  28083. BX6 -X6*X1
  28084. LX1 -9
  28085. MX7 -2
  28086. SX6 X6-PMFT
  28087. BX7 -X7*X1 CHECK ACCESS MODE
  28088. SA6 PMFF
  28089. SA7 FMOD
  28090. NG X2,PPC5 IF TRACK INTERLOCK ALREADY SET
  28091. NZ X6,PPC5 IF NOT DIRECT ACCESS PERMANENT FILE
  28092. LX7 59-1
  28093. PL X7,PPC5 IF NOT M, A, RM, OR RA MODE
  28094. ERX1 X4 SET EQUIPMENT AND FIRST TRACK
  28095. SX6 STIS*10000B SET TRACK INTERLOCK SUBFUNCTION
  28096. MX2 24
  28097. BX1 X2*X1
  28098. LX1 -12
  28099. BX6 X6+X1
  28100. MONITOR STBM
  28101. AX1 36
  28102. MX7 1
  28103. ZR X1,PPC4 IF TRACK INTERLOCK SET
  28104. + EQ RCR5 ENTER RECALL STACK
  28105.  
  28106. PPC4 SA2 A4 SET TRACK INTERLOCK FLAG
  28107. LX7 58-59
  28108. BX7 X2+X7
  28109. SA7 A4
  28110.  
  28111. * PRESET FOR RANDOM READ/WRITE/SKIP.
  28112.  
  28113. PPC5 ERX1 X4 GET EQUIPMENT
  28114. MX7 -12
  28115. LX1 12
  28116. BX7 -X7*X1
  28117. MX6 -12
  28118. CX2 X7,EST CONVERT EST ORDINAL TO OFFSET
  28119. TA2 X2+EQDE,EST READ EST ENTRY
  28120. BX7 -X6*X2 MST ADDRESS / 10B
  28121. LX7 3
  28122. SA3 X7+MDGL GET SECTOR LIMIT
  28123. BX6 -X6*X3
  28124. LX7 18
  28125. BX7 X7+X6
  28126. SA7 A4+B1 SAVE EQUIPMENT CHARACTERISTICS
  28127. SA2 A4 GET MESSAGE BUFFER PARAMETERS
  28128. SA1 A4-B1 GET RANDOM FILE FLAG
  28129. LX2 59-54
  28130. BX1 -X1+X2
  28131. MX6 -24
  28132. NG X1,PPC9 IF PRIOR DATA TRANSFER OR NOT RANDOM FILE
  28133. LX2 59-7-59+54
  28134. SB4 PPC9 SET RETURN ADDRESS FOR *SRA*
  28135. SX1 5
  28136. NG X2,SRA IF RANDOM SKIP
  28137. IX1 X5+X1
  28138. ERX1 X1
  28139. LX2 59-6-59+7
  28140. BX3 -X6*X1
  28141. ZR X3,PPC9 IF RANDOM ADDRESS NOT SET
  28142. PL X2,CRA IF RANDOM READ
  28143. SB4 PPC8 SET RETURN ADDRESS FOR *CRA*
  28144. LX2 59-10-59+6
  28145. NG X2,CRA IF REWRITE FUNCTION
  28146. LX1 59-29 CHECK WRITE-IN-PLACE FLAG
  28147. MX7 1
  28148. PL X1,PPC6 IF NOT REWRITE
  28149. BX7 X7+X2 SET REWRITE FLAG
  28150. LX7 10-59
  28151. SA7 A4
  28152. EQ CRA CONVERT RANDOM ADDRESS
  28153.  
  28154. * PROCESS RANDOM WRITE AT EOI.
  28155.  
  28156. PPC6 SX1 X3-2 CHECK RANDOM ADDRESS VALUE
  28157. SX7 /CIOERR/RWT *INDEX ADDRESS OUT OF RANGE*
  28158. NG X1,RPC IF RANDOM INDEX RETURN ADDRESS .LT. 2
  28159. SA2 B7+FLSW GET *FL*
  28160. MX6 -12
  28161. BX2 -X6*X2
  28162. LX2 6
  28163. IX1 X3-X2
  28164. PL X1,RPC IF RANDOM INDEX RETURN ADDRESS .GE. FL
  28165. SA0 X3 SAVE RELATIVE ADDRESS OF RANDOM INDEX WORD
  28166. BX3 X3-X3 SKIP TO EOI
  28167. SB4 PPC7 SET RETURN ADDRESS FOR *CRA*
  28168. EQ CRA CONVERT RANDOM ADDRESS
  28169.  
  28170. PPC7 SA2 ABRA GET RANDOM INDEX RETURN WORD
  28171. SX6 A0
  28172. IX2 X2+X6
  28173. ERX1 X2
  28174. MX6 36
  28175. BX6 X6*X1
  28176. BX6 X6+X3
  28177. EWX6 X2 RETURN RANDOM INDEX
  28178. EQ PPC9 CHECK BUFFER SPACE
  28179.  
  28180. PPC8 ERX1 X4 SET LAST OPERATION COMPLETE WRITE
  28181. MX6 56
  28182. BX6 X6*X1
  28183. SX2 6
  28184. BX6 X6+X2
  28185. EWX6 X4
  28186.  
  28187. * THE FOLLOWING LOGIC ACCOMPLISHES TWO PURPOSES.
  28188. *
  28189. * 1) IT CAUSES THE LAST BUFFER ACCESSED TO BE FLUSHED IF
  28190. * IT CONTAINS WRITE DATA, AND IT IS NOT GOING TO BE ACCESSED
  28191. * FURTHER FOR WRITING.
  28192. *
  28193. * 2) FOR *PMFT* FILES IT WILL RECALL THE NEW REQUEST IF IT
  28194. * IS FOR OTHER THAN A WRITE ACCESS TO THE LAST BUFFER
  28195. * ACCESSED, AND THE LAST BUFFER ACCESSED CONTAINS WRITE DATA
  28196. * WHICH HAS NOT BEEN FLUSHED TO DISK. EVEN IF THE BUFFER IS
  28197. * ON THE UNIT I/O QUEUE THE REQUEST WILL BE RECALLED. THIS
  28198. * IS DONE SO THAT ALL UPDATES TO *PMFT* FILES WILL OCCUR IN
  28199. * ORDER OF USER REQUEST. THIS IS NECESSARY FOR USER FILE
  28200. * RECOVERY AFTER A SYSTEM INTERRUPT OCCURS WHICH REQUIRES A
  28201. * LEVEL 0 DEADSTART.
  28202.  
  28203. PPC9 R= X1,FUTL-FSTL CHECK I/O BUFFER LINK
  28204. IX1 X4+X1
  28205. ERX1 X1
  28206. MX6 -12
  28207. BX7 -X6*X1
  28208. ZR X7,PPC14 IF NO I/O BUFFER LINK
  28209. LX7 CBTLS CHECK IF THIS FUNCTION ON SAME BUFFER
  28210. ERX1 X4
  28211. TA2 X7+FSTC,CBT READ CONTROL BUFFER FST
  28212. MX0 21
  28213. BX1 X1-X2
  28214. LX0 -3
  28215. BX0 X0*X1
  28216. SA3 A2+B1
  28217. ERRNZ IOLK-FSTC-1 CODE ASSUMES CONSECUTIVE WORDS
  28218. NZ X0,PPC15 IF BUFFER MAY NOT BE FOR THIS FILE
  28219. SA2 INBA
  28220. PPC10 LX3 59-57
  28221. BX0 X2*X1
  28222. PL X3,PPC13 IF BUFFER DOES NOT CONTAIN WRITE DATA
  28223. NZ X0,PPC11 IF NEW REQUEST NOT FOR THIS BUFFER
  28224. SA2 A4
  28225. LX2 59-6
  28226. SB6 WTF
  28227. NG X2,CBS IF WRITE TO THE SAME BUFFER
  28228. PPC11 SX2 BMFL*100B FLUSH WRITE BUFFER
  28229. SB4 PPC12 SET RETURN ADDRESS FOR *CIM*
  28230. LX3 57-59
  28231. PL X3,CIM IF I/O INTERLOCK NOT SET
  28232. PPC12 SA1 PMFF
  28233. ZR X1,RCR2 IF DIRECT ACCESS PERMANENT FILE
  28234. PPC13 ZR X0,PPC14 IF REQUEST FOR THIS BUFFER
  28235. R= X0,FUTL-FSTL CLEAR BUFFER LINK
  28236. IX0 X4+X0
  28237. ERX1 X0
  28238. MX6 48
  28239. BX6 X6*X1
  28240. EWX6 X0
  28241. PPC14 SA2 A4 GET MESSAGE BUFFER PARAMETERS
  28242. BX7 X7-X7 SET *CHRV*
  28243. SA7 CHRV
  28244. LX2 59-7
  28245. NG X2,RDF3 IF SKIP FUNCTION
  28246. LX2 59-6-59+7
  28247. SB6 RDF SET *CBS* EXIT ADDRESS
  28248. PL X2,CBS IF READ FUNCTION
  28249. SB6 WTF SET RETURN ADDRESS FOR *CBS*
  28250. EQ CBS CHECK BUFFER SIZE
  28251.  
  28252. PPC15 MX7 12
  28253. LX7 -12
  28254. BX6 X7*X2
  28255. NZ X6,PPC13 IF FIRST TRACK DEFINED IN CONTROL BUFFER
  28256. SA2 INBA
  28257. BX6 -X7*X0 COMPARE ONLY EQUIPMENT
  28258. ZR X6,PPC10 IF BUFFER MAY BE FOR THIS FILE
  28259. EQ PPC13 CLEAR BUFFER INDEX
  28260. TITLE CIO READ PROCESSOR.
  28261. RDF SPACE 4,10
  28262. ** RDF - READ/SKIP FORWARD FUNCTION PROCESSOR.
  28263. *
  28264. * ENTRY AT *RDF* FROM *PPC* VIA *CBS* IF READ FUNCTION.
  28265. * AT *RDF3* FROM *PPC* IF SKIP FORWARD FUNCTION.
  28266. * (X6) = BUFFER SIZE IN PRUS, IF ENTRY AT *RDF*.
  28267. * (X7) = WORD COUNT OF DATA REMAINING IN BUFFER,
  28268. * IF ENTRY AT *RDF*.
  28269. *
  28270. * EXIT TO *CMP* FOR COMPLETED FUNCTION.
  28271. * TO *CMP5* IF UNNECESSARY READ FUNCTION.
  28272. * TO *RCR* IF PRU TRANSFER LIMIT.
  28273. *
  28274. * ERROR EXIT TO *RPC* IF ERROR DETECTED.
  28275. *
  28276. * USES A - 0, 1, 2, 3, 6, 7.
  28277. * B - 2, 4, 6.
  28278. * X - 1, 2, 3, 6, 7.
  28279. *
  28280. * CALLS BRD, CBS, CIM, CPT, CRD, CSP, RBI, ULA, ULP.
  28281.  
  28282.  
  28283. RDF NZ X6,RDF1 IF ROOM IN BUFFER
  28284. SB2 B0 SET TERMINATION CONDITION NOT REACHED
  28285. SA2 A4 GET MESSAGE BUFFER PARAMETERS
  28286. LX2 59-10
  28287. PL X2,CMP5 IF NOT *READSKP*
  28288. LX2 59-56-59+10
  28289. NG X2,RDF1 IF SKIP DATA TRANSFER FLAG SET
  28290. SX6 14B CLEAR TERMINATION TO SET PRU STOP
  28291. LX2 -59+56
  28292. BX6 -X6*X2
  28293. SA6 A4+
  28294. SX7 B1+ RESET 1 PRU IN BUFFER
  28295. SA7 NPCB
  28296. RDF1 ERX1 X4 GET FST ENTRY
  28297. LX1 59-11
  28298. SA2 A4
  28299. LX2 59-5
  28300. SB5 RDF3 SET RETURN ADDRESS FOR *ULP*
  28301. PL X1,RDF2 IF NOT SYSTEM SECTOR OPERATION
  28302. MX6 -59
  28303. BX6 -X6*X1 CLEAR SYSTEM SECTOR OPERATION FLAG
  28304. SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST*
  28305. PL X2,RPC IF NOT CONTROL WORD READ
  28306. LX6 11-59
  28307. EWX6 X4
  28308. RDF2 LX2 59-4-59+5
  28309. PL X2,RDF3 IF NOT *RPHRLS*/*READLS* FUNCTION
  28310. SA1 A4-B1 GET FET LENGTH
  28311. LX1 1
  28312. SX7 /CIOERR/FPE *FET PARAMETER ERROR*
  28313. AX1 49
  28314. ZR X1,RPC IF NO LIST ADDRESS WORD IN FET
  28315. SX1 4
  28316. IX1 X5+X1
  28317. ERX1 X1
  28318. BX7 X7-X7 SET INITIAL CONVERSION FLAG
  28319. LX1 59-23
  28320. SA7 ULPA
  28321. PL X1,ULP IF NOT CONTINUATION OF PREVIOUS OPERATION
  28322.  
  28323. * INTERLOCK I/O BUFFER READ BUFFER.
  28324.  
  28325. RDF3 ERX2 X4 READ FST
  28326. SA1 PRUC CHECK FOR PRU TRANSFER LIMIT
  28327. LX2 -48
  28328. MX6 -12
  28329. SX1 X1+LSLB
  28330. BX3 -X6*X2 EST ORDINAL
  28331. AX1 12
  28332. NZ X1,RCR IF PRU TRANSFER LIMIT
  28333. CX1 X3,EST CONVERT EST ORDINAL TO OFFSET
  28334. TA3 X1+EQDE,EST READ EST ENTRY
  28335. SX1 B1
  28336. LX7 X3,B1
  28337. TA3 SYFO*FNTG+FSTG,FNT READ SYSTEM FILE FST
  28338. LX2 48
  28339. BX3 X3-X2
  28340. PL X7,RDF3.1 IF NOT SYSTEM DEVICE
  28341. SA2 CHRV
  28342. SX7 40B
  28343. LX3 -36
  28344. BX7 X2+X7 SET *READSYS* FLAG IN *CHRV*
  28345. BX3 -X6*X3
  28346. NZ X3,RDF3.1 IF NOT SYSTEM FILE READ
  28347. SA7 A2
  28348. RDF3.1 IX1 X4+X1
  28349. SA2 LBIA
  28350. ERX1 X1 READ FNT LINK WORD
  28351. ZR X2,RDF4 IF NO BUFFER INTERLOCKED
  28352. BX6 -X6*X1 I/O BUFFER LINK
  28353. SX2 B1 SET INTERLOCK VALUE
  28354. SB6 RDF5 SET RETURN ADDRESS FOR *CSP*
  28355. NZ X6,CSP IF LINK SET IN FNT
  28356. SA0 RDF4 SET RETURN ADDRESS FOR *RBI*
  28357. EQ RBI RELEASE BUFFER INTERLOCK
  28358.  
  28359. RDF4 SX2 BMVI*100B+BMRD VALIDATE I/O BUFFER
  28360. SB4 CPT SET RETURN ADDRESS FOR *CIM*
  28361. EQ CIM CALL I/O BUFFER MANAGER
  28362.  
  28363. RDF5 SB4 CPT SET RETURN ADDRESS FOR *CIM*
  28364. SX2 BMRG*100B RELEASE BUFFER AND GET NEXT BUFFER
  28365. NG X7,CIM IF SECTOR NOT IN SAME BUFFER
  28366. SX7 X7-LSLB
  28367. PL X7,CIM IF SECTOR NOT IN SAME BUFFER
  28368. EQ CPT EXIT TO CALCULATE PRUS TO TRANSFER
  28369.  
  28370. * REENTRY FROM *CPT*.
  28371. * PROCESS DATA.
  28372.  
  28373. RDF6 SA3 LBIA GET TRACK LINKAGE
  28374. SA1 X3+PAD4
  28375. MX3 -12
  28376. BX6 -X3*X1 SAVE TRACK LINKAGE
  28377. LX6 48
  28378. SA2 A4
  28379. SA6 STLR
  28380. ZR B3,RDF11 IF EOI ONLY
  28381. LX2 59-56
  28382. SA1 A5+3 GET *IN*
  28383. SX6 B6 WORD COUNT OF TRANSFER
  28384. NG X2,RDF9 IF SKIP DATA TRANSFER
  28385. SB6 RDF8 SET *BRD* EXIT ADDRESS
  28386. AX1 24
  28387. LX2 59-5-59+56
  28388. NG X2,CRD IF *READCW*
  28389. LX2 59-10-59+5
  28390. PL X2,BRD IF NOT *READSKP*
  28391. LX2 -59+10
  28392. SX3 14B
  28393. BX3 X3*X2
  28394. NZ X3,BRD IF NOT ON PARTIAL SECTOR
  28395. SX7 /CIO/EOR RESET EOR STOP
  28396. MX3 1
  28397. BX7 X7+X2
  28398. LX3 56-59
  28399. BX7 X7+X3 SET SKIP DATA TRANSFER FLAG
  28400. SA3 WCCB GET WORD COUNT OF *CIO* BUFFER
  28401. SA7 A4
  28402. IX2 X3-X6
  28403. PL X2,BRD IF ENOUGH ROOM IN BUFFER FOR SHORT PRU
  28404. SX6 X3+ GET WORD COUNT OF *CIO* BUFFER
  28405. EQ BRD COMPLETE FILL OF *CIO* BUFFER
  28406.  
  28407. * REENTRY FROM *BRD*/*CRD*.
  28408. * UPDATE *IN* POINTER IN FET AND MESSAGE BUFFER.
  28409.  
  28410. RDF8 SX6 X1 UPDATE *IN* IN FET
  28411. SX2 B1
  28412. SA1 A5+3 UPDATE *IN* IN MESSAGE BUFFER
  28413. IX2 X5+X2
  28414. EWX6 X2
  28415. SX1 X1+ *OUT*
  28416. LX6 24
  28417. BX6 X6+X1
  28418. SA6 A1+
  28419.  
  28420. * UPDATE CURRENT TRACK AND SECTOR IN FST.
  28421. * UPDATE PRU COUNT.
  28422.  
  28423. RDF9 SA2 NPTR GET PRU COUNT OF TRANSFER
  28424. ERX1 X4 UPDATE CURRENT TRACK AND SECTOR IN FST
  28425. LX1 -12
  28426. IX6 X1+X2 ADVANCE CURRENT SECTOR
  28427. SA1 NPCB DECREMENT BUFFER SPACE PRU COUNT
  28428. IX7 X1-X2
  28429. MX3 -LSLBS
  28430. BX3 -X3*X6 MOD *LSLB* OF SECTOR
  28431. NZ X3,RDF10 IF NOT LAST PRU IN CONTROL BUFFER
  28432. SA3 STLR GET SECTOR/TRACK LINKAGE
  28433. PL X3,RDF10 IF NOT END OF TRACK
  28434. MX1 36
  28435. BX6 X1*X6 CLEAR CURRENT SECTOR
  28436. LX3 24
  28437. BX6 X6+X3 SET NEXT TRACK
  28438. RDF10 LX6 12
  28439. SA3 PRUC INCREMENT PRU COUNT
  28440. EWX6 X4
  28441. IX6 X3+X2
  28442. SA7 A1
  28443. SA6 A3
  28444. SA2 A4 GET TERMINATION STATUS
  28445.  
  28446. * CHECK FOR PRU/EOR/EOF/EOI TERMINATION.
  28447.  
  28448. RDF11 ERX1 X4 SET STATUS IN FST
  28449. MX6 56
  28450. BX6 X6*X1
  28451. SX3 B2
  28452. BX6 X6+X3
  28453. EWX6 X4
  28454. SX7 14B
  28455. BX7 X7*X2
  28456. IX1 X3-X7
  28457. PL X1,RDF14 IF TERMINATION CONDITION REACHED
  28458.  
  28459. * CHECK FOR BUFFER FULL TERMINATION.
  28460.  
  28461. RDF12 SA2 A4
  28462. SA1 NPCB CHECK BUFFER SPACE
  28463. LX2 59-56
  28464. SX6 X1+
  28465. NG X2,RDF3 IF SKIP DATA TRANSFER
  28466. SB6 RDF13 SET RETURN ADDRESS FOR *CBS*
  28467. ZR X6,CBS IF NO MORE ROOM IN BUFFER
  28468. RDF13 NZ X6,RDF3 IF MORE ROOM IN BUFFER
  28469. SA2 A4
  28470. LX2 59-10
  28471. SB2 0 PREVENT SETTING FET TERMINATION STATUS
  28472. PL X2,CMP IF NOT *READSKP*
  28473. SX6 14B CLEAR TERMINATION TO SET PRU STOP
  28474. LX2 10-59
  28475. BX6 -X6*X2
  28476. SA6 A4
  28477. SX7 B1 RESET 1 PRU IN BUFFER
  28478. SA7 NPCB
  28479. EQ RDF3 PROCESS PARTIAL SECTOR
  28480.  
  28481. * PRU/EOR/EOF/EOI STOP ENCOUNTERED.
  28482. * ADVANCE *READLS*/*RPHRLS*.
  28483.  
  28484. RDF14 SB5 ULA SET RETURN ADDRESS FOR *ULP*
  28485. LX2 59-4
  28486. SX7 B1
  28487. NG X2,ULP IF *READLS*/*RPHRLS*
  28488. SB4 B2-/CIO/EOF
  28489. LX2 59-10-59+4
  28490. PL X2,CMP IF NOT SKIP/*READSKP*
  28491. LX2 59-7-59+10
  28492. NG X2,RDF15 IF NOT *READSP*
  28493.  
  28494. * PROCESS *READSKP* FUNCTION.
  28495.  
  28496. LX2 0-20-59+7+60 GET LEVEL NUMBER
  28497. MX1 56
  28498. BX1 X1+X2
  28499. MX7 1
  28500. NZ X1,CMP IF *READSKP* TO EOR COMPLETE
  28501. GE B4,CMP IF *READSKP* TO EOF COMPLETE
  28502. LX7 56-59
  28503. LX2 20-0 SET SKIP DATA TRANSFER FLAG
  28504. BX7 X7+X2
  28505. SA7 A4
  28506. EQ RDF3 CONTINUE SKIP FOR *READSKP*
  28507.  
  28508. * ADVANCE SKIP FUNCTION.
  28509.  
  28510. RDF15 SA1 A5-B1 DECREMENT SKIP COUNT
  28511. GT B4,CMP IF EOI ENCOUNTERED
  28512. LX1 -18
  28513. IX7 X1-X7
  28514. SX1 X7
  28515. LX7 18
  28516. SA7 A1
  28517. NZ X1,RDF3 IF SKIP FUNCTION NOT COMPLETE
  28518. EQ CMP EXIT
  28519. BRD SPACE 4,15
  28520. ** BRD - BUFFER READ DATA.
  28521. *
  28522. * ENTRY (B6) = RETURN ADDRESS.
  28523. * (X0) = FWA DATA IN I/O BUFFER.
  28524. * (X1) = *IN*.
  28525. * (X6) = WORD COUNT TO TRANSFER.
  28526. *
  28527. * EXIT (X1) = ADVANCED *IN* POINTER.
  28528. * (X6) = 0, IF NO DATA TRANSFERRED.
  28529. *
  28530. * USES A - 0, 2.
  28531. * B - 4, 5.
  28532. * X - 0, 2, 3, 6, 7.
  28533. *
  28534. * CALLS ABP.
  28535.  
  28536.  
  28537. BRD ZR X6,RB6 IF NO DATA TO TRANSFER
  28538. SA2 ABRA ABSOLUTE RA
  28539. LX0 -30
  28540. IX2 X1+X2 ABSOLUTE *IN*
  28541. SA0 X2
  28542. BX0 X0+X2
  28543. LX0 30 30/ABSOLUTE *IN*, 30/FWA I/O BUFFER DATA
  28544. SX7 X6 WORD COUNT OF TRANSFER
  28545. SB4 BRD1 SET RETURN ADDRESS FOR *ABP*
  28546. EQ ABP ADVANCE *IN*
  28547.  
  28548. BRD1 NG X7,BRD4 IF NO SECOND PART TO TRANSFER
  28549. IX6 X6-X7 NUMBER OF WORDS IN FIRST PART
  28550. SX3 X2 RELATIVE *FIRST*
  28551. SB4 X6 SET TRANSFER SIZE
  28552. SB5 BTSZ
  28553. BX2 X2-X2
  28554. GE B5,B4,BRD3 IF ONE BLOCK OR LESS TO READ
  28555. SA2 PSTA ADDRESS INCREMENT WORD
  28556. BRD2 RE BTSZ
  28557. RJ HHE HANG ON HALF-EXIT
  28558. SB5 B5+BTSZ INCREMENT ADDRESSES
  28559. SA0 A0+BTSZ
  28560. BRD3 IX0 X0+X2
  28561. LT B5,B4,BRD2 IF MORE BLOCKS TO TRANSFER
  28562. SB5 B4-B5
  28563. RE B5+BTSZ
  28564. RJ HHE HANG ON HALF-EXIT
  28565. MX2 -30
  28566. SX6 B5+BTSZ SET WORD COUNT OF LAST BLOCK
  28567. BX0 -X2*X0 CLEAR CM ADDRESS FIELD
  28568. IX0 X0+X6 ADVANCE I/O BUFFER ADDRESS
  28569. SA2 ABRA ABSOLUTE *RA*
  28570. IX3 X3+X2 ABSOLUTE *FIRST*
  28571. SA0 X3
  28572. LX3 30
  28573. BX0 X0+X3
  28574. BX6 X7 SET BLOCK SIZE OF SECOND BLOCK
  28575. BRD4 SB4 X6 SET TRANSFER SIZE
  28576. SB5 BTSZ
  28577. BX2 X2-X2
  28578. GE B5,B4,BRD6 IF .LE. ONE BLOCK TO TRANSFER
  28579. SA2 PSTA
  28580. BRD5 RE BTSZ
  28581. RJ HHE HANG ON HALF-EXIT
  28582. SB5 B5+BTSZ
  28583. SA0 A0+BTSZ INCREMENT ADDRESSES
  28584. BRD6 IX0 X0+X2
  28585. LT B5,B4,BRD5 IF MORE FULL BLOCKS TO TRANSFER
  28586. SB5 B4-B5
  28587. RE B5+BTSZ
  28588. RJ HHE HANG ON HALF-EXIT
  28589. JP B6 RETURN
  28590. CRD SPACE 4,15
  28591. ** CRD - CONTROL WORD READ DATA.
  28592. *
  28593. * ENTRY (B2) = READ STATUS.
  28594. * (X0) = FWA OF DATA IN I/O BUFFER.
  28595. * (X1) = *IN*.
  28596. * (X6) = WORD COUNT OF TRANSFER.
  28597. * (NPTR) = NUMBER OF PRUS TO TRANSFER.
  28598. *
  28599. * EXIT TO *RDF8*.
  28600. *
  28601. * USES A - 2, 3, 7.
  28602. * B - 3, 4, 6.
  28603. * X - 0, 2, 3, 6, 7.
  28604. *
  28605. * CALLS ABP, BRD.
  28606.  
  28607.  
  28608. CRD BX3 X6 SAVE WORD COUNT, INITIALIZE PRU COUNT
  28609. LX3 30
  28610. CRD1 SX6 1 INCREMENT PRU COUNT
  28611. BX7 X3
  28612. IX3 X3+X6
  28613. SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
  28614. SX6 X3
  28615. IX2 X2-X6
  28616. NG X2,RDF8 IF NO MORE PRUS TO TRANSFER
  28617. AX7 30+6 CALCULATE REMAINING WORD COUNT
  28618. IX2 X7-X6
  28619. SX6 100B SET FULL BLOCK WORD COUNT
  28620. PL X2,CRD2 IF FULL BLOCK TO TRANSFER
  28621. LX7 30+6
  28622. IX6 X3-X7
  28623. AX6 30 WORD COUNT OF TRANSFER
  28624. NZ X6,CRD2 IF DATA TO TRANSFER
  28625. SX2 B2-/CIO/EOF
  28626. NZ X2,CRD2 IF NOT EOF
  28627. SX7 14B
  28628. SA2 A4
  28629. BX2 X7*X2
  28630. SX2 X2-/CIO/EOF
  28631. ZR X2,RDF8 IF TERMINATE ON EOF
  28632.  
  28633. * PROCESS HEADER CONTROL WORD.
  28634.  
  28635. CRD2 BX7 X6 WORD COUNT
  28636. SX2 B1
  28637. LX2 36+6 PRU SIZE
  28638. LX7 2
  28639. IX7 X7+X6 BYTE COUNT
  28640. BX7 X7+X2
  28641. SA2 ABRA *RA*
  28642. IX2 X1+X2
  28643. EWX7 X2 STORE HEADER CONTROL WORD IN BUFFER
  28644. SB4 BRD SET RETURN ADDRESS FOR *ABP*
  28645. IX7 X0+X6 SAVE ADVANCED I/O BUFFER DATA ADDRESS
  28646. SA7 CWLA
  28647. BX7 X3 SAVE SECTOR COUNT
  28648. SA7 A7+B1
  28649. SX7 B1 SET TO ADVANCE *IN* BY 1 WORD
  28650. SB6 CRD3 SET RETURN ADDRESS FOR *BRD*
  28651. EQ ABP ADVANCE *IN*
  28652.  
  28653. * PROCESS TRAILER CONTROL WORD.
  28654.  
  28655. CRD3 ERX2 X4 BUILD TRAILER CONTROL WORD
  28656. MX7 -24
  28657. SA3 CWLA+1 RESTORE SECTOR COUNT
  28658. LX2 -12
  28659. BX7 -X7*X2 CURRENT TRACK AND SECTOR
  28660. SX0 X3-1 GET PRU COUNT
  28661. IX0 X7+X0
  28662. LX2 12+3
  28663. MX7 9
  28664. BX7 X7*X2 EQUIPMENT
  28665. LX7 -27
  28666. MX2 4
  28667. NZ X6,CRD4 IF DATA TRANSFERRED
  28668. SB3 B2-/CIO/EOF
  28669. NZ B3,CRD4 IF NOT EOF
  28670. LX2 -8
  28671. BX7 X7+X2
  28672. CRD4 BX7 X7+X0
  28673. SA2 ABRA *RA*
  28674. IX2 X1+X2
  28675. EWX7 X2 STORE TRAILER CONTROL WORD
  28676. SX7 B1
  28677. SA2 A3-B1 GET ADVANCED I/O BUFFER DATA ADDRESS
  28678. SB4 CRD1 SET RETURN ADDRESS FOR *ABP*
  28679. BX0 X2
  28680. EQ ABP ADVANCE *IN*
  28681. ULA SPACE 4,10
  28682. ** ULA - UPDATE LIST ACCOUNTING.
  28683. *
  28684. * ENTRY (CLEA) = ABSOLUTE ADDRESS OF CURRENT LIST ENTRY.
  28685. * (X3) = RANDOM ADDRESS FOR CURRENT ENTRY.
  28686. *
  28687. * EXIT TO *RDF12* TO CONTINUE DATA TRANSFER.
  28688. * (ULPA) = CURRENT RANDOM ADDRESS.
  28689. * (ULPA+1) = CURRENT FST.
  28690. *
  28691. * USES A - 1, 2, 3, 6.
  28692. * X - 0, 1, 2, 3, 6.
  28693.  
  28694.  
  28695. ULA ERX1 X4 GET FST
  28696. BX6 X3 SAVE CURRENT RANDOM ADDRESS
  28697. SA6 ULPA
  28698. SA2 CLEA
  28699. BX6 X1 SAVE FST
  28700. SA6 A6+B1
  28701. SX1 B1 GET PREVIOUS RANDOM ADDRESS
  28702. IX1 X2-X1
  28703. MX0 -24
  28704. ERX1 X1
  28705. BX1 -X0*X1
  28706. SA2 PRUC SAVE OLD PRU COUNT
  28707. SX6 X2
  28708. LX6 30
  28709. SX2 X2
  28710. BX6 X6+X2
  28711. SA6 A2
  28712. IX1 X3-X1 CURRENT POSITION - PREVIOUS POSITION
  28713. NG X1,ULA1 IF BACKWARD POSITIONING
  28714. SX1 X1-IMPL-1 CHECK IF NEW POSITIONING ABOVE THRESHOLD
  28715. NG X1,RDF12 IF NOT ABOVE THRESHOLD
  28716. ULA1 SA2 UACC INCREMENT ACCOUNTING CHARGE
  28717. SX6 IMRL
  28718. IX6 X2+X6
  28719. SA6 A2
  28720. EQ RDF12 CONTINUE DATA TRANSFER
  28721. ULP SPACE 4,10
  28722. ** ULP - UPDATE LIST POINTER.
  28723. *
  28724. * ENTRY (B5) = EXIT ADDRESS.
  28725. *
  28726. * EXIT (CLEA) = ABSOLUTE ADDRESS OF CURRENT LIST ENTRY.
  28727. * TO *CMP* IF END OF LIST ENCOUNTERED.
  28728. *
  28729. * ERROR TO *RPC* IF INCORRECT LIST ADDRESS.
  28730. *
  28731. * USES A - 1, 2, 6, 7.
  28732. * B - 2, 6.
  28733. * X - 0, 1, 2, 6, 7.
  28734. *
  28735. * CALLS CRA.
  28736.  
  28737.  
  28738. ULP SX0 4 GET LIST POINTER
  28739. IX0 X5+X0
  28740. ERX1 X0
  28741. SA2 B7+FLSW GET FL
  28742. MX6 -12
  28743. BX2 -X6*X2
  28744. LX2 6
  28745. SB6 X1
  28746. SX7 /CIOERR/FPE *FET PARAMETER ERROR*
  28747. LE B6,B1,RPC IF LIST POINTER .LE. 1
  28748. BX6 X1 CHECK FOR CONTINUATION
  28749. LX6 59-23
  28750. NG X6,ULP1 IF CONTINUATION
  28751. SX6 B1 PREVENT ADVANCE OF LIST POINTER
  28752. IX1 X1-X6
  28753. LX6 23-0
  28754. BX1 X1+X6 SET CONTINUATION FLAG
  28755. ULP1 SX6 1 ADVANCE LIST ADDRESS
  28756. IX6 X1+X6
  28757. EWX6 X0
  28758. SX6 X6
  28759. IX2 X6-X2
  28760. PL X2,RPC IF LIST POINTER .GE. FL
  28761. SA2 ABRA ABSOLUTE *RA*
  28762. IX7 X2+X6
  28763. SA7 CLEA SAVE CURRENT LIST ENTRY ABSOLUTE ADDRESS
  28764. ERX2 X7 GET RANDOM ADDRESS
  28765. MX7 -24
  28766. SA1 ULPA
  28767. BX3 -X7*X2
  28768. IX6 X3-X1 CURRENT - PREVIOUS RANDOM ADDRESS
  28769. ZR X3,ULP2 IF END OF LIST
  28770. SB4 ULP2.1 SET RETURN ADDRESS FOR *CRA*
  28771. ZR X1,CRA IF INITIAL CALL
  28772. SA2 A1+B1 GET FST
  28773. MX0 -12
  28774. LX2 -12 EXTRACT SECTOR NUMBER SAVED IN FST
  28775. BX1 -X0*X2
  28776. IX7 X1+X6 FST SECTOR + RANDOM ADDRESS INCREMENT
  28777. SA1 A4+B1 GET SECTORS PER TRACK
  28778. SX6 X1
  28779. IX1 X7-X6
  28780. NG X7,CRA IF NEW RANDOM ADDRESS BEFORE THIS TRACK
  28781. PL X1,CRA IF NEW RANDOM ADDRESS AFTER THIS TRACK
  28782. LX2 -12 EXTRACT CURRENT TRACK
  28783. BX0 -X0*X2
  28784. EQ SFP SET UPDATED FST POSITION
  28785.  
  28786. ULP2.1 R= X1,FUTL-FSTL
  28787. IX0 X4+X1
  28788. ERX1 X0
  28789. MX6 -12
  28790. BX7 -X6*X1
  28791. ZR X7,ULP2.2 IF NO BUFFER INDEX
  28792. LX7 CBTLS
  28793. ERX2 X4
  28794. TA3 X7+FSTC,CBT
  28795. BX2 X2-X3
  28796. SA3 INBA
  28797. BX2 X3*X2
  28798. BX6 X6*X1
  28799. ZR X2,ULP2.2 IF ACCESSING THE SAME BUFFER
  28800. EWX6 X0 CLEAR BUFFER INDEX
  28801. ULP2.2 JP B5 EXIT
  28802.  
  28803. * PROCESS END OF LIST.
  28804.  
  28805. ULP2 MX7 1
  28806. ERX1 X0 CLEAR CONTINUATION FLAG
  28807. LX7 23-59
  28808. BX7 -X7*X1
  28809. EWX7 X0
  28810. SB2 /CIO/EOF SET EOF RETURN FOR FET
  28811. EQ CMP EXIT
  28812.  
  28813.  
  28814. ULPA CON 0 PREVIOUS RANDOM ADDRESS
  28815. CON 0 FST FOR PREVIOUS RANDOM ADDRESS
  28816. TITLE CIO WRITE PROCESSOR.
  28817. WTF SPACE 4,20
  28818. ** WTF - WRITE FUNCTION PROCESSOR.
  28819. *
  28820. * ENTRY (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER THIS PASS.
  28821. * (X7) = (WCCB) = WORD COUNT OF DATA IN BUFFER IF WRITE,
  28822. * ROOM REMAINING IN BUFFER IF READ.
  28823. *
  28824. * EXIT TO *CMP* IF FUNCTION COMPLETE.
  28825. * TO *CMP5* IF UNNECESSARY WRITE FUNCTION.
  28826. * TO *RCR* IF TRANSFER LIMIT.
  28827. * TO *RCR1* IF TRACK LIMIT.
  28828. * TO *RCR2* IF INSUFFICIENT I/O BUFFERS TO
  28829. * CONTINUE TRANSFER.
  28830. *
  28831. * ERROR EXIT TO *RPC* IF ERROR DETECTED.
  28832. *
  28833. * USES A - 0, 1, 2, 3, 6, 7.
  28834. * B - 2, 3, 4, 6.
  28835. * X - 0, 1, 2, 3, 6, 7.
  28836. *
  28837. * CALLS BWD, CBS, CIM, CMS, CPT, CRA, CSP, CWD, SNT, SRA.
  28838. *
  28839. * MACROS MONITOR.
  28840.  
  28841.  
  28842. WTF SA3 A4 GET MESSAGE BUFFER PARAMETERS
  28843. SX2 54B
  28844. BX1 X2*X3 TERMINATION CONDITION AND *WRITECW* FLAG
  28845. ERX2 X4 GET FST ENTRY
  28846. SB4 X1-/CIO/EOI
  28847. LX1 59-5
  28848. SB2 B4-/CIO/EOF+/CIO/EOI
  28849. SB6 WTF3 SET RETURN ADDRESS FOR *SNT*
  28850. NZ X7,WTF1 IF DATA IN BUFFER
  28851. NG X1,CMP5 IF *WRITECW* WITH NO DATA
  28852. NZ B2,WTF1 IF NOT EOF OPERATION
  28853. SX1 6
  28854. BX1 X1*X2
  28855. SX1 X1-2
  28856. MX7 1
  28857. ZR X1,WTF1 IF LAST OPERATION IS INCOMPLETE WRITE
  28858. LX7 56-59 SET SKIP FLAG
  28859. BX3 X3+X7
  28860. WTF1 NZ X6,WTF2 IF AT LEAST ONE FULL SECTOR IN BUFFER
  28861. ZR B4,CMP5 IF BUFFERED WRITE
  28862. WTF2 SA1 A4+B1 GET MST ADDRESS
  28863. LX2 -24
  28864. MX7 -12
  28865. AX1 18
  28866. BX0 -X7*X2 CURRENT TRACK
  28867. EQ SNT SET NEXT TRACK
  28868.  
  28869. WTF3 ERX1 X4
  28870. SA6 NTKP SAVE OLD EOI SECTOR/NEXT TRACK POINTER
  28871. MX0 1
  28872. LX1 -12
  28873. BX7 -X7*X1 CURRENT SECTOR
  28874. LX0 10-59
  28875. LX1 59-1+12-60
  28876. BX7 X6-X7
  28877. BX6 -X0*X3 CLEAR REWRITE FLAG
  28878. NG X2,WTF4 IF NOT EOI TRACK
  28879. ZR X7,WTF5 IF POSITIONED AT EOI
  28880. SX2 -1
  28881. WTF4 BX6 X3
  28882. PL X1,WTF5 IF LAST OPERATION NOT WRITE
  28883. BX6 X3+X0 SET REWRITE FLAG
  28884. WTF5 SA1 FMOD GET FILE MODE
  28885. SB5 X1-1
  28886. ZR X1,WTF6 IF NO RESTRICTIONS
  28887. SX7 /CIOERR/IFM *ILLEGAL MODIFICATION*
  28888. BX0 X0*X6
  28889. ZR B5,WTF5.1 IF UPDATE MODE
  28890. PL X2,WTF6 IF POSITIONED AT EOI
  28891. EQ B5,B1,RPC IF APPEND MODE
  28892. WTF5.1 ZR X0,RPC IF NOT REWRITE FOR UPDATE OR MODIFY MODE
  28893.  
  28894. * SET FILE SIZE LIMIT.
  28895.  
  28896. WTF6 SA6 A4
  28897. BX3 X2 PRESERVE EOI FLAG
  28898. SX2 B1 GET FILE SIZE INDEX FROM FNT
  28899. IX2 X4+X2
  28900. ERX2 X2
  28901. MX7 -3
  28902. LX2 -30
  28903. BX7 -X7*X2
  28904. LX7 -1
  28905. LX6 59-56
  28906. SA2 TFSL+X7 GET MAXIMUM FILE SIZE IN PRUS
  28907. PL X7,WTF7 IF VALUE IN UPPER PART OF WORD
  28908. LX2 30
  28909. WTF7 AX2 30
  28910. BX7 X2
  28911. SA7 FSZL SAVE FILE SIZE LIMIT
  28912. PL X6,WTF7.1 IF NOT *WRITEF* WITH NO DATA
  28913. SX6 B0+
  28914. SA6 WCCB CLEAR DATA WORD COUNT
  28915. SA6 NPCB CLEAR DATA PRU COUNT
  28916. WTF7.1 SB4 WTF7.2
  28917. SB4 -B4
  28918. NG X3,SRA IF NOT POSITIONED AT EOI
  28919. ZR X7,WTF7.5 IF NO FILE SIZE LIMIT
  28920. SB4 WTF7.4
  28921. SB4 -B4 PREVENT FST/FET UPDATE
  28922. EQ SRA CALCULATE CURRENT POSITION RANDOM ADDRESS
  28923.  
  28924. WTF7.2 SB4 WTF7.3 SET RETURN ADDRESS FOR *CRA*
  28925. BX7 X3 SAVE CURRENT POSITION RANDOM ADDRESS
  28926. SB4 -B4 PREVENT FST/FET UPDATE
  28927. SA7 SCIE
  28928. SX3 B0+
  28929. EQ CRA CALCULATE EOI RANDOM ADDRESS
  28930.  
  28931. WTF7.3 SA1 SCIE NUMBER OF SECTORS AFTER CURRENT POSITION
  28932. IX7 X3-X1
  28933. SA7 A1
  28934. EQ WTF8 PROCESS WRITE
  28935.  
  28936. WTF7.4 SA2 FSZL SET FILE SIZE
  28937. SX1 B2
  28938. IX7 X7+X1 SECTOR COUNT THROUGH END OF TRACK
  28939. LX7 30
  28940. BX6 X2+X7
  28941. SX7 B0
  28942. SA6 A2
  28943. WTF7.5 SA7 SCIE SET CURRENT POSITION = EOI ((SCIE) = 0)
  28944.  
  28945. * CALCULATE NUMBER OF SECTORS FOR WRITE OPERATION.
  28946.  
  28947. WTF8 SA2 A4 GET TERMINATION CONDITION
  28948. MX1 -2
  28949. SA0 WTF11 SET RETURN ADDRESS FOR *CMS*
  28950. LX2 -2
  28951. BX1 -X1*X2
  28952. SB6 WTF9 SET RETURN ADDRESS FOR *CBS*
  28953. SB3 X1-/CIO/EOI/4
  28954. ZR B3,CBS IF BUFFERED WRITE
  28955. SA3 NPCB GET NUMBER OF SECTORS IN *CIO* BUFFER
  28956. SB2 X1
  28957. SB2 X3+B2 SECTOR COUNT = FULL PRUS+EOR+EOF+EOI
  28958. EQ CMS COMPUTE MOD 40B OF CURRENT SECTOR
  28959.  
  28960. WTF9 SA2 A4+
  28961. SB2 X6 SECTOR COUNT = FULL PRUS
  28962. LX2 59-5
  28963. PL X2,WTF10 IF NOT *WRITECW*
  28964. BX6 X7
  28965. LX2 59-10-59+5
  28966. NG X2,WTF10 IF REWRITE
  28967. SB2 B2+10B COMPENSATE FOR SHORT SECTORS
  28968. WTF10 NZ X6,CMS IF DATA IN BUFFER
  28969. EQ CMP COMPLETE PROCESSING
  28970.  
  28971. * CALCULATE NUMBER OF I/O BUFFERS NEEDED FOR WRITE.
  28972.  
  28973. WTF11 PX6 X2
  28974. SB2 X1+B2 MOD 40B OF CURRENT SECTOR + SECTOR COUNT
  28975. SA2 A4
  28976. LX2 59-10
  28977. NG X2,WTF12 IF REWRITE
  28978. SB2 B2+LSLB ROUND UP NUMBER OF BUFFERS AND COUNT EOI
  28979. WTF12 SX1 B2+
  28980. PX1 X1
  28981. NX6 X6
  28982. FX1 X1/X6
  28983. UX1,B6 X1
  28984. LX1 B6
  28985. SB6 X1 NUMBER OF I/O BUFFERS NEEDED
  28986. SA1 A4+B1 GET SECTORS PER TRACK
  28987. SX7 X1
  28988. SA1 LBIA CHECK IF BUFFER INTERLOCKED
  28989. AX7 LSLBS
  28990. SB3 X7 NUMBER OF I/O BUFFERS PER TRACK
  28991. SB4 11
  28992. GE B6,B4,WTF12.1 IF MORE THAN 11 BUFFERS NEEDED
  28993. LE B6,B3,WTF12.2 IF NOT MORE THAN ONE TRACK OF BUFFERS
  28994. SB4 B3
  28995. EQ WTF13 RESTRICT TO ONE TRACK WORTH OF BUFFERS
  28996.  
  28997. WTF12.1 LE B4,B3,WTF13 IF NOT MORE THAN ONE TRACK OF BUFFERS
  28998. SB4 B3+
  28999. EQ WTF13 RESTRICT TO ONE TRACK WORTH OF BUFFERS
  29000.  
  29001. WTF12.2 SB4 B6+
  29002. GT B6,B1,WTF13 IF MORE THAN 1 BUFFER NEEDED
  29003. SB4 1
  29004. NZ X1,CPT IF BUFFER ALREADY INTERLOCKED
  29005. SX7 BMVI*100B+BMRW
  29006. NG X2,WTF14 IF REWRITE OF ONE BUFFER
  29007. WTF13 SX7 BMVI*100B+BMWR
  29008. ZR X1,WTF14 IF NO INTERLOCKED BUFFER
  29009. MX1 1 SET CURRENT BUFFER INTERLOCKED FLAG
  29010. LX1 41-59
  29011. BX7 X7+X1
  29012. WTF14 SX2 B4-B1
  29013. SX1 LSLB LOGICAL SECTORS PER I/O BUFFER
  29014. IX0 X2*X1 CHECK IF PRU COUNT OVERFLOW
  29015. LX2 42
  29016. IX0 X0+X1
  29017. SA1 PRUC
  29018. IX1 X1+X0
  29019. AX1 12
  29020. NZ X1,RCR IF PRU COUNT WILL EXCEED 12 BITS
  29021. BX7 X7+X2 SET NUMBER OF I/O BUFFERS TO REQUEST
  29022. SA7 WLBR
  29023.  
  29024. * CALCULATE NUMBER OF I/O BUFFERS ON REMAINDER OF
  29025. * CURRENT TRACK.
  29026.  
  29027. SA2 A4+B1 GET SECTORS PER TRACK
  29028. SX7 X2
  29029. IX1 X7-X3 SECTOR LIMIT - FIRST SECTOR IN BUFFER
  29030. PX1 X1
  29031. FX1 X1/X6
  29032. UX1,B6 X1
  29033. LX1 B6
  29034. SB6 X1+ NUMBER OF I/O BUFFERS REMAINING ON TRACK
  29035. GE B6,B4,WTF20 IF SUFFICIENT ROOM ON CURRENT TRACK
  29036. MX0 -12
  29037. ERX3 X4 GET CURRENT TRACK
  29038. LX2 -18
  29039. SX1 X2 MST ADDRESS
  29040. SB6 WTF15 SET RETURN ADDRESS FOR *SNT*
  29041. LX3 -24
  29042. BX0 -X0*X3
  29043. EQ SNT SET NEXT TRACK
  29044.  
  29045. WTF15 SA3 B7+ACLW CHECK FOR JOB PRU LIMIT
  29046. NG X2,WTF20 IF NEXT TRACK ASSIGNED
  29047. ZR B5,WTF20 IF UPDATE MODE
  29048. MX2 -18
  29049. SX7 /CIOERR/PRL *PRU LIMIT*
  29050. BX2 -X2*X3
  29051. SA3 FSZL FILE SIZE LIMIT
  29052. ZR X2,RPC IF JOB PRU LIMIT
  29053.  
  29054. * CHECK FILE SIZE LIMIT.
  29055.  
  29056. ZR X3,WTF18 IF UNLIMITED
  29057. BX2 X3
  29058. AX2 30
  29059. SA1 A4+B1 SECTORS PER TRACK
  29060. SX1 X1
  29061. NZ X2,WTF17 IF FILE SIZE ALREADY CALCULATED
  29062. SB4 WTF16 SET RETURN ADDRESS FOR *SRA*
  29063. SB4 -B4 PREVENT SETTING RANDOM INDEX IN FET
  29064. EQ SRA CALCULATE NUMBER OF SECTORS ON FILE
  29065.  
  29066. WTF16 SA3 FSZL FILE SIZE LIMIT
  29067. SX1 B2
  29068. IX6 X7+X1 SECTOR COUNT THRU END OF CURRENT TRACK
  29069. LX6 30
  29070. BX3 X3+X6
  29071. WTF17 MX6 -30
  29072. BX6 -X6*X3
  29073. LX1 30 ADD IN SECTORS FOR NEW TRACK
  29074. IX7 X1+X3
  29075. SA7 A3+
  29076. AX7 30
  29077. IX6 X7-X6
  29078. SX7 /CIOERR/FTL *FILE TOO LONG*
  29079. PL X6,RPC IF FILE SIZE LIMIT EXCEEDED
  29080.  
  29081. * REQUEST ADDITIONAL TRACK.
  29082.  
  29083. WTF18 ERX1 X4 GET EQUIPMENT AND CURENT TRACK
  29084. MX6 -12
  29085. LX1 12
  29086. BX6 -X6*X1
  29087. LX1 12
  29088. MX0 12
  29089. BX1 X0*X1
  29090. BX6 X1+X6
  29091. LX6 36
  29092. SX7 B1 REQUEST ONE TRACK
  29093. BX6 X6+X7
  29094. MX0 -5
  29095. MONITOR RTCM
  29096. MX6 -12 CHECK TRACK ASSIGNMENT
  29097. BX7 -X6*X1
  29098. NZ X7,WTF19 IF TRACK ASSIGNED
  29099.  
  29100. * PROCESS TRACK LIMIT.
  29101.  
  29102. + NG X1,RCR1 IF *RTCM* REJECT
  29103. EQ RPC CALL PP CIO TO COMPLETE REQUEST
  29104.  
  29105. * INCREMENT MASS STORAGE PRU COUNT.
  29106.  
  29107. WTF19 SA1 A4+B1 GET SECTORS PER TRACK
  29108. SX1 X1
  29109. SA2 PCMS
  29110. IX6 X2+X1
  29111. SA6 A2
  29112. MX7 1
  29113. LX7 10-59
  29114. SA2 A4 CLEAR REWRITE FLAG
  29115. BX7 -X7*X2
  29116. SA7 A4+
  29117.  
  29118. * CALL I/O BUFFER MANAGER.
  29119.  
  29120. WTF20 SA2 WLBR GET NUMBER OF I/O BUFFERS TO REQUEST
  29121. SB4 WTF21 SET RETURN ADDRESS FOR *CIM*
  29122. EQ CIM CALL I/O BUFFER MANAGER
  29123.  
  29124. WTF21 SA2 A5+B1 CHECK IF MULTIPLE BUFFERS INTERLOCKED
  29125. BX7 X7-X7
  29126. NZ X2,CPT IF MORE THAN ONE BUFFER ASSIGNED
  29127. SA2 WLBR
  29128. SA0 WTF21.1 SET RETURN ADDRESS FOR *CMS*
  29129. AX2 41
  29130. ZR X2,CPT IF ONLY ONE BUFFER REQUESTED
  29131. LX2 -1
  29132. NG X2,WTF21.2 IF NEXT BUFFER REQUIRED
  29133. EQ CMS CALCULATE MOD 40B OF CURRENT SECTOR
  29134.  
  29135. WTF21.1 SX1 X1-LSLB+LSLB/4
  29136. NG X1,CPT IF CAN WRITE MORE DATA TO CURRENT BUFFER
  29137. WTF21.2 SA2 A4 CHECK FOR REWRITE
  29138. LX2 59-10
  29139. PL X2,RCR2 IF NOT REWRITE
  29140. EQ CPT CALCULATE PRU-S TO TRANSFER
  29141.  
  29142. * REENTRY FROM *CPT*.
  29143. * CHECK IF ROOM FOR BLOCK WRITE AND EOI.
  29144.  
  29145. WTF23 ERX1 X4 GET CURRENT SECTOR
  29146. LX1 -12
  29147. MX7 -12
  29148. BX1 -X7*X1
  29149. IX7 X1+X6 LAST SECTOR POSITION + 1 TO TRANSFER
  29150. SA1 A4 CHECK FOR REWRITE
  29151. MX6 1
  29152. LX1 59-10
  29153. SB4 B6 SAVE WORD COUNT
  29154. BX6 -X6*X1
  29155. PL X1,WTF24 IF NOT REWRITE
  29156. SA1 NTKP GET NEXT TRACK POINTER
  29157. IX1 X1-X7
  29158. PL X1,WTF25 IF NOT OVERWRITTING EOI SECTOR
  29159. NZ B5,WTF24 IF NOT UPDATE MODE
  29160. SX7 /CIOERR/IFM *INCORRECT MODIFICATION*
  29161. EQ RPC CALL *1MS*
  29162.  
  29163. WTF24 SA1 A4+B1 SET WRITE EOI FLAG
  29164. LX6 10-59
  29165. SA6 A4+ CLEAR REWRITE FLAG
  29166. MX6 1
  29167. BX6 X1+X6
  29168. SA6 A4+1
  29169. SA1 LBIA GET FIRST SECTOR OF CURRENT BUFFER
  29170. AX1 30
  29171. IX6 X7-X1 MOD 40B OF LAST SECTOR TO TRANSFER + 1
  29172. SA1 A5+1 CHECK FOR MORE BUFFERS INTERLOCKED
  29173. SX6 X6-LSLB
  29174. NG X6,WTF25 IF NOT OVERWRITE OF LAST SECTOR IN BUFFER
  29175. ZR X1,WTF8 IF MUST SAVE ROOM FOR EOI
  29176.  
  29177. * ADVANCE CURRENT TRACK/SECTOR.
  29178.  
  29179. WTF25 ERX1 X4 GET FST ENTRY
  29180. MX6 48
  29181. LX1 -12
  29182. BX6 X6*X1
  29183. SA2 A4+B1 GET SECTOR LIMIT
  29184. BX6 X6+X7 SAVE ADVANCED SECTOR
  29185. SX1 X2
  29186. IX1 X7-X1
  29187. NG X1,WTF28 IF NOT AT END OF TRACK
  29188. LX2 -18 GET SECTOR LIMIT
  29189. SX1 X2 MST ADDRESS
  29190. BX7 X0 SAVE I/O BUFFER DATA ADDRESS
  29191. LX6 -12
  29192. MX0 -12
  29193. BX0 -X0*X6 CURRENT TRACK
  29194. SB6 WTF26 SET RETURN ADDRESS FOR *SNT*
  29195. EQ SNT SET NEXT TRACK
  29196.  
  29197. WTF26 PL X2,WTF26 IF NEXT TRACK NOT ASSIGNED
  29198. SA6 NTKP SAVE NEXT TRACK POINTER
  29199. BX0 X6
  29200. SB6 WTF27 SET RETURN ADDRESS FOR *SNT*
  29201. EQ SNT SET NEXT TRACK
  29202.  
  29203. WTF27 SA1 A6
  29204. BX0 X7 RESTORE I/O BUFFER DATA ADDRESS
  29205. SA6 A6+ SAVE OLD EOI SECTOR/NEXT TRACK POINTER
  29206. BX7 X1
  29207. MX6 48
  29208. ERX1 X4 GET FST ENTRY
  29209. LX1 -24
  29210. BX1 X6*X1
  29211. BX1 X1+X7 SET CURRENT TRACK
  29212. LX1 12
  29213. BX6 X6*X1 CLEAR CURRENT SECTOR
  29214.  
  29215. * SET LINK IN HEADER IF LAST PRU IN SECTOR USED.
  29216. * INCREMENT TOTAL PRU COUNT.
  29217. * DECREMENT CIO BUFFER PRU COUNT AND WORD COUNT.
  29218.  
  29219. WTF28 SA2 USCW GET UPDATED SECTOR CONTROL WORD
  29220. MX1 2
  29221. LX1 23-59 CLEAR DATA FLAGS
  29222. BX2 -X1*X2
  29223. MX1 -LSLBS CHECK IF LAST PRU IN BUFFER USED
  29224. BX1 -X1*X6 MOD *LSLB* OF CURRENT SECTOR
  29225. LX6 12
  29226. SB6 X1
  29227. BX1 X6
  29228. BX6 X2
  29229. MX2 48
  29230. NZ B6,WTF29 IF NOT WRITING LAST PRU IN BUFFER
  29231. BX6 X2*X6 SET NEXT TRACK/SECTOR IN HEADER
  29232. BX6 X6+X7
  29233. WTF29 SA6 X3 STORE HEADER
  29234. SX3 B2-/CIO/EOR
  29235. MX6 56
  29236. SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
  29237. BX6 X6*X1 SET LAST OPERATION INCOMPLETE WRITE
  29238. LX2 6
  29239. SB6 X2-100B
  29240. SX2 2
  29241. BX6 X6+X2
  29242. LX7 36 BUILD EOF TRAILER
  29243. NG X3,WTF31 IF FULL BLOCK TRANSFER
  29244. SX1 B6+77B
  29245. NZ X3,WTF30 IF EOF TRANSFERRED
  29246. SX3 B4-B6 CALCULATE WORD COUNT OF SHORT PRU
  29247. LX7 12
  29248. LX3 -24
  29249. BX7 X7+X3
  29250. WTF30 SA7 ERWB PLACE TRAILER IN EXTENDED WRITE BUFFER
  29251. SB6 A0+ SAVE (A0)
  29252. BX7 X0 SAVE (X0)
  29253. LX0 30
  29254. SA0 A7 FWA TO BEGIN TRANSFER FROM
  29255. AX0 30
  29256. SX3 A7
  29257. IX1 X0+X1
  29258. LX3 30
  29259. BX0 X1+X3 30/FWA FROM, 30/FWA I/O BUFFER DATA TO
  29260. WE 1 TRANSFER ONE WORD
  29261. RJ HHE HANG ON HALF-EXIT
  29262. BX0 X7 RESTORE (X0)
  29263. SA0 B6 RESTORE (A0)
  29264. LX2 1 SET LAST OPERATION COMPLETE WRITE
  29265. BX6 X6+X2
  29266. WTF31 SA2 A2 GET NUMBER OF PRUS TO TRANSFER
  29267. EWX6 X4
  29268. SA1 PRUC INCREMENT TOTAL PRU COUNT
  29269. SA3 WCCB DECREMENT CIO BUFFER WORD COUNT
  29270. IX6 X1+X2
  29271. SA6 A1
  29272. SA1 NPCB DECREMENT CIO BUFFER PRU COUNT
  29273. SX7 B4
  29274. IX7 X3-X7
  29275. IX6 X1-X2
  29276. PL X6,WTF32 IF MORE PRUS IN CIO BUFFER
  29277. BX6 X6-X6
  29278. WTF32 SA6 A1
  29279. SA7 A3
  29280. SA1 SDTW SKIP DATA TRANSFER FLAG FOR WRITE
  29281. SA2 A4
  29282. BX7 X2+X1 ADD SKIP FLAG
  29283. SA7 A4
  29284. LX2 59-5
  29285. SA1 A5+3 GET *OUT*
  29286. SX6 B4 SET WORD COUNT TO TRANSFER
  29287. SX1 X1
  29288. NG X2,CWD IF *WRITECW*
  29289. SB6 WTF33 SET RETURN ADDRESS FOR *BWD*
  29290. EQ BWD BUFFER WRITE DATA
  29291.  
  29292. * REENTRY FROM *BWD*/*CWD*.
  29293. * DATA TRANSFERRED FROM CIO BUFFER TO I/O BUFFER.
  29294. * UPDATE *OUT* POINTER IN FET AND MESSAGE BUFFER.
  29295.  
  29296. WTF33 SX3 B1+B1 UPDATE *OUT* IN FET
  29297. SX6 X1
  29298. MX2 36
  29299. IX3 X5+X3
  29300. SA1 A5+3 UPDATE *OUT* IN MESSAGE BUFFER
  29301. SB6 WTF34 SET RETURN ADDRESS FOR *CSP*
  29302. EWX6 X3
  29303. BX2 X2*X1 *IN*
  29304. BX6 X6+X2
  29305. SA6 A1
  29306. EQ CSP CALCULATE SECTOR POSITION
  29307.  
  29308. * CHECK IF CURRENT SECTOR IN SAME I/O BUFFER.
  29309.  
  29310. WTF34 SX2 BMRF*100B RELEASE AND FLUSH WRITE BUFFER
  29311. SB4 WTF36 SET RETURN ADDRESS FOR *CIM*
  29312. NG X7,CIM IF SECTOR NOT IN SAME BUFFER
  29313. SX7 X7-LSLB
  29314. PL X7,CIM IF SECTOR NOT IN SAME BUFFER
  29315. SB6 CPT CALCULATE PRUS TO TRANSFER
  29316. WTF35 SA2 A4 CHECK IF TERMINATION CONDITION REACHED
  29317. SX6 14B
  29318. BX6 X6*X2
  29319. SB3 X6
  29320. SB2 B2-B3
  29321. PL B2,CMP IF TERMINATION CONDITION REACHED
  29322. JP B6 CONTINUE WRITE PROCESSING
  29323.  
  29324. WTF36 SA2 A4 CHECK FOR REWRITE
  29325. LX2 59-10
  29326. PL X2,WTF36.1 IF NOT REWRITE
  29327. SA1 PMFF
  29328. SB6 RCR2 EXIT ADDRESS IF OPERATION NOT COMPLETE
  29329. ZR X1,WTF35 IF DIRECT ACCESS PERMANENT FILE
  29330. WTF36.1 ZR X6,WTF37 IF NEXT BUFFER NOT INTERLOCKED
  29331. SB6 CPT CALCULATE PRUS TO TRANSFER
  29332. NG X2,WTF35 IF REWRITE
  29333. SA1 A5+1
  29334. NZ X1,WTF35 IF ADDITIONAL I/O BUFFERS INTERLOCKED
  29335. WTF37 SB6 WTF8 REQUEST MORE I/O BUFFERS
  29336. EQ WTF35 CHECK FOR TERMINATION CONDITION
  29337. BWD SPACE 4,15
  29338. ** BWD - BUFFER WRITE DATA.
  29339. *
  29340. * ENTRY (B6) = RETURN ADDRESS.
  29341. * (X0) = FWA TO TRANSFER DATA IN I/O BUFFER.
  29342. * (X1) = *OUT*.
  29343. * (X6) = WORD COUNT TO TRANSFER.
  29344. *
  29345. * EXIT (X1) = ADVANCED *OUT* POINTER.
  29346. * (B5) = FILE MODE - 1.
  29347. *
  29348. * USES A - 0, 1, 2.
  29349. * B - 4, 5.
  29350. * X - 0, 2, 3, 6, 7.
  29351. *
  29352. * CALLS ABP.
  29353.  
  29354.  
  29355. BWD ZR X6,RB6 IF NO DATA TO TRANSFER
  29356. SA2 ABRA ABSOLUTE *RA*
  29357. LX0 -30
  29358. IX2 X1+X2 ABSOLUTE *OUT*
  29359. SA0 X2
  29360. BX0 X0+X2
  29361. LX0 30 30/ABSOLUTE *OUT*, 30/FWA I/O BUFFER DATA
  29362. SX7 X6
  29363. SB4 BWD1 SET RETURN ADDRESS FOR *ABP*
  29364. EQ ABP ADVANCE *OUT*
  29365.  
  29366. BWD1 NG X7,BWD4 IF NO SECOND PART TO TRANSFER
  29367. IX6 X6-X7 NUMBER OF WORDS IN FIRST PART
  29368. SX3 X2 RELATIVE *FIRST*
  29369. SB4 X6 SET TRANSFER SIZE
  29370. SB5 BTSZ
  29371. BX2 X2-X2
  29372. GE B5,B4,BWD3 IF ONE BLOCK OR LESS TO WRITE
  29373. SA2 PSTA ADDRESS INCREMENT WORD
  29374. BWD2 WE BTSZ
  29375. RJ HHE HANG ON HALF-EXIT
  29376. SB5 B5+BTSZ INCREMENT ADDRESSES
  29377. SA0 A0+BTSZ
  29378. BWD3 IX0 X0+X2
  29379. LT B5,B4,BWD2 IF MORE BLOCKS TO TRANSFER
  29380. SB5 B4-B5
  29381. WE B5+BTSZ
  29382. RJ HHE HANG ON HALF-EXIT
  29383. MX2 -30
  29384. SX6 B5+BTSZ SET WORD COUNT OF LAST BLOCK
  29385. BX0 -X2*X0 CLEAR CM ADDRESS FIELD
  29386. IX0 X0+X6 ADVANCE I/O BUFFER ADDRESS
  29387. SA2 ABRA ABSOLUTE *RA*
  29388. IX3 X3+X2 ABSOLUTE *FIRST*
  29389. SA0 X3
  29390. LX3 30
  29391. BX0 X0+X3
  29392. BX6 X7 SET BLOCK SIZE OF SECOND BLOCK
  29393. BWD4 SB4 X6 SET TRANSFER SIZE
  29394. SB5 BTSZ
  29395. BX2 X2-X2
  29396. GE B5,B4,BWD6 IF .LE. ONE BLOCK TO TRANSFER
  29397. SA2 PSTA
  29398. BWD5 WE BTSZ
  29399. RJ HHE HANG ON HALF-EXIT
  29400. SB5 B5+BTSZ
  29401. SA0 A0+BTSZ INCREMENT ADDRESSES
  29402. BWD6 IX0 X0+X2
  29403. LT B5,B4,BWD5 IF MORE FULL BLOCKS TO TRANSFER
  29404. SB5 B4-B5
  29405. WE B5+BTSZ
  29406. RJ HHE HANG ON HALF-EXIT
  29407. SA2 FMOD RESTORE FILE MODE
  29408. SB5 X2-1
  29409. JP B6 RETURN
  29410. CWD SPACE 4,15
  29411. ** CWD - CONTROL WORD WRITE DATA.
  29412. *
  29413. * ENTRY (X0) = FWA TO TRANSFER DATA IN I/O BUFFER.
  29414. * (X1) = *OUT*.
  29415. * (X6) = WORD COUNT TO TRANSFER.
  29416. *
  29417. * EXIT TO *WTF33*.
  29418. * (X1) = ADVANCED *OUT* POINTER.
  29419. *
  29420. * USES A - 2, 3, 7.
  29421. * B - 4, 6.
  29422. * X - 0, 2, 3, 6, 7.
  29423. *
  29424. * CALLS ABP, BWD.
  29425.  
  29426.  
  29427. CWD SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
  29428. SA3 WCCB DECREMENT WORD COUNT OF *CIO* BUFFER
  29429. LX2 1 COUNT CONTROL WORDS
  29430. IX7 X3-X2
  29431. SA7 A3
  29432. BX3 X6 WORD COUNT OF TRANSFER
  29433. SA2 NPTR
  29434. ZR X2,WTF33 IF TRANSFER COMPLETE
  29435. SX6 B1
  29436. IX7 X2-X6
  29437. SA7 A2
  29438. SX7 B1 SKIP OVER HEADER CONTROL WORD
  29439. SB4 CWD2 SET RETURN ADDRESS FOR *ABP*
  29440. EQ ABP ADVANCE *OUT*
  29441.  
  29442. CWD2 LX6 6 SET FULL BLOCK WORD COUNT
  29443. IX7 X0+X6 SAVE ADVANCED I/O BUFFER DATA ADDRESS
  29444. SA7 CWLA
  29445. IX3 X3-X6
  29446. PL X3,CWD3 IF FULL BLOCK
  29447. IX6 X3+X6 SET SHORT BLOCK WORD COUNT
  29448. CWD3 BX7 X3 SAVE WORD COUNT
  29449. SB6 CWD4
  29450. SA7 A7+B1
  29451. EQ BWD WRITE DATA
  29452.  
  29453. CWD4 SA2 CWLA GET ADVANCED I/O BUFFER DATA ADDRESS
  29454. SA3 A2+B1 GET WORD COUNT
  29455. BX0 X2 RESET (X0)
  29456. SA2 NPTR WORD COUNT OF TRANSFER
  29457. SB4 WTF33 SET EXIT ADDRESS
  29458. SX7 B1
  29459. ZR X2,ABP IF TRANSFER COMPLETE, ADVANCE OUT
  29460. IX7 X2-X7 DECREMENT PRUS
  29461. SA7 A2
  29462. SB4 CWD2 SET RETURN ADDRESS
  29463. SX7 B1+B1 SKIP TRAILER AND HEADER CONTROL WORDS
  29464. SX6 B1
  29465. EQ ABP ADVANCE *OUT*
  29466. SCW SPACE 4,30
  29467. ** SCW - SCAN CONTROL WORDS FOR *WRITECW*.
  29468. *
  29469. * ENTRY (B2) = MAXIMUM PRUS TO TRANSFER THIS PASS.
  29470. * (B4) = MOD 10B OF CURRENT SECTOR.
  29471. * (X0) = I/O BUFFER DATA FWA.
  29472. * (X3) = ADDRESS OF CONTROL WORD.
  29473. *
  29474. * EXIT TO *CMP* IF TRANSFER TERMINATED DUE TO INSUFFICIENT
  29475. * DATA IN CIO BUFFER.
  29476. * TO *CPT* IF MORE DATA AVAILABLE AFTER INSUFFICIENT
  29477. * DATA DETECTED.
  29478. * TO *WTF23* IF PRUS TO TRANSFER.
  29479. * (B2) = STATUS (0 = FULL BLOCK, 4 = EOR, 10B = EOF).
  29480. * (B6) = WORD COUNT OF TRANSFER.
  29481. * (X0) AND (X3) RESTORED TO SAME AS ON ENTRY.
  29482. * (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER
  29483. * THIS PASS (1 TO 10B).
  29484. *
  29485. * ERROR TO *RPC* IF BUFFER CONTROL WORD ERROR.
  29486. *
  29487. * USES A - 0, 2, 3, 6, 7.
  29488. * B - 2, 3, 4, 6.
  29489. * X - 0, 1, 2, 3, 6, 7.
  29490. *
  29491. * CALLS ABP, CBS.
  29492.  
  29493.  
  29494. SCW SA2 X3 GET HEADER WORD
  29495. BX6 X2
  29496. SA6 USCW SAVE UPDATED SECTOR CONTROL WORD
  29497. LX0 30
  29498. SA2 A5+B1
  29499. SB3 B4-LSLB/4
  29500. SA0 B4 MOD 10B OF CURRENT SECTOR
  29501. NZ X2,SCW0 IF NEXT BUFFER RESERVED
  29502. SB2 -B3 LIMIT TRANSFER TO PRESERVE ROOM FOR EOI
  29503. SCW0 BX0 X3+X0 SAVE (X3) AND (X0)
  29504. SA3 A5+3 GET *OUT*
  29505. BX6 X6-X6 CLEAR NUMBER OF PRUS TO TRANSFER
  29506. SX1 X3
  29507. SCW1 SA2 WCCB GET WORD COUNT OF *CIO* BUFFER
  29508. LX3 X6,B1
  29509. LX6 6
  29510. IX3 X3+X6 NUMBER OF WORDS TO TRANSFER
  29511. LX6 -6
  29512. SB4 X2
  29513. IX3 X2-X3
  29514. SA2 ABRA ABSOLUTE *RA*
  29515. ZR X3,SCW7 IF NO MORE DATA IN BUFFER
  29516. IX2 X2+X1
  29517. MX7 -12
  29518. ERX2 X2 GET HEADER CONTROL WORD
  29519. BX2 -X7*X2 BYTE COUNT
  29520. SX7 X2-500B
  29521. NZ X7,SCW4 IF NOT FULL BLOCK
  29522. SX3 X3-102B
  29523. NG X3,SCW7 IF NOT ENOUGH DATA IN BUFFER
  29524. SX6 X6+B1 INCREMENT NUMBER OF SECTORS TO TRANSFER
  29525. SB6 A0
  29526. SA2 USCW UPDATE SECTOR CONTROL WORD
  29527. SB4 LSLB/4
  29528. NE B6,B4,SCW1.1 IF PRU NOT IN NEXT CONTROL WORD
  29529. BX7 X2 STORE SECTOR CONTROL WORD IN BUFFER
  29530. SB6 B0
  29531. SA7 X0
  29532. SA2 A7+B1 GET NEXT SECTOR CONTROL WORD
  29533. SX3 B1 INCREMENT SECTOR CONTROL WORD ADDRESS
  29534. SA0 B0+
  29535. IX0 X0+X3
  29536. SCW1.1 SX7 10000B BUILD SECTOR MASK
  29537. LX7 B6
  29538. SA0 A0+B1
  29539. BX7 -X7*X2 CLEAR SHORT PRU FLAG
  29540. SX3 B2+
  29541. IX3 X3-X6
  29542. SA7 USCW SAVE UPDATED SECTOR CONTROL WORD
  29543. SX7 102B SET NUMBER OF WORDS TO ADVANCE
  29544. SB4 SCW1 SET RETURN ADDRESS FOR *ABP*
  29545. NZ X3,ABP IF MORE PRUS TO TRANSFER
  29546. SCW2 LX6 6
  29547. SB6 X6 WORD COUNT TO TRANSFER
  29548. SB2 B0 SET FULL BLOCK INDICATOR
  29549. LX6 -6
  29550. SCW3 MX1 -30
  29551. BX3 -X1*X0 RESTORE (X0) AND (X3)
  29552. SA6 NPTR SAVE NUMBER OF PRUS TO TRANSFER
  29553. AX0 30
  29554. EQ WTF23 RETURN TO MAIN WRITE LOOP
  29555.  
  29556. SCW4 PL X7,SCW6 IF BYTE COUNT .GT. 500B
  29557. SX7 5
  29558. PX7 X7
  29559. PX2 X2
  29560. NX7 X7
  29561. FX7 X2/X7
  29562. UX7,B6 X7
  29563. LX7 B6
  29564. SX2 X7+2
  29565. IX3 X3-X2
  29566. NG X3,SCW7 IF NOT ENOUGH DATA IN BUFFER
  29567. SB3 X7
  29568. SA2 USCW GET UPDATED SECTOR CONTROL WORD
  29569. SB4 LSLB/4
  29570. SX3 B1
  29571. SB6 A0
  29572. NE B6,B4,SCW4.1 IF PRU NOT IN NEXT CONTROL WORD
  29573. BX7 X2 STORE SECTOR CONTROL WORD IN BUFFER
  29574. SA0 B0
  29575. SA7 X0
  29576. SA2 A7+B1 GET NEXT SECTOR CONTROL WORD
  29577. IX0 X0+X3
  29578. SB6 B0
  29579. SCW4.1 LX3 12
  29580. LX3 B6
  29581. BX7 X2+X3 SET SHORT PRU FLAG
  29582. SA7 USCW SAVE UPDATED SECTOR CONTROL WORD
  29583. LX6 6
  29584. SB6 X6+B3 WORD COUNT OF TRANSFER
  29585. LX6 -6
  29586. SX6 X6+B1 INCREMENT NUMBER OF SECTORS TO TRANSFER
  29587. SB2 /CIO/EOR SET EOR STATUS
  29588. NZ B3,SCW3 IF DATA IN BLOCK
  29589. SB4 SCW5 SET RETURN ADDRESS FOR *ABP*
  29590. SX7 1 SET NUMBER OF WORDS TO ADVANCE
  29591. EQ ABP ADVANCE *OUT*
  29592.  
  29593. SCW5 SA2 ABRA *RA*
  29594. IX2 X2+X1
  29595. MX7 -4
  29596. ERX2 X2 GET TRAILER CONTROL WORD
  29597. MX7 -4
  29598. LX2 12
  29599. BX7 X7+X2
  29600. NZ X7,SCW3 IF NOT LEVEL 17B
  29601. SB2 /CIO/EOF SET EOF STATUS
  29602. EQ SCW3 RESTORE ENTRY CONDITIONS
  29603.  
  29604. SCW6 SX7 /CIOERR/BLE *BUFFER CONTROL WORD ERROR*
  29605. EQ RPC CALL PP CIO
  29606.  
  29607. * PROCESS INSUFFICIENT DATA IN CIO BUFFER.
  29608.  
  29609. SCW7 NZ X6,SCW2 IF SECTORS TO TRANSFER
  29610. SB6 SCW8 SET RETURN ADDRESS FOR *CBS*
  29611. EQ CBS CHECK BUFFER SPACE
  29612.  
  29613. SCW8 SX1 B4
  29614. IX7 X1-X7
  29615. NG X7,CPT IF MORE DATA IN BUFFER
  29616. EQ CMP COMPLETE WRITE PROCESSING
  29617. TITLE CIO PROCESSOR SUBROUTINES.
  29618. ABP SPACE 4,15
  29619. ** ABP - ADVANCE BUFFER POINTERS.
  29620. *
  29621. * ENTRY (B4) = RETURN ADDRESS.
  29622. * (X1) = *IN* OR *OUT* POINTER TO BE ADVANCED.
  29623. * (X7) = NUMBER OF WORDS TO TRANSFER.
  29624. *
  29625. * EXIT (X1) = ADVANCED *IN* OR *OUT* POINTER.
  29626. * (X2) = *FIRST* POINTER IN BITS 0 - 17.
  29627. * (X7) = NUMBER OF WORDS TO TRANSFER AFTER WRAP-AROUND
  29628. * IF .GT. 0.
  29629. *
  29630. * USES A - 2.
  29631. * X - 1, 2, 7.
  29632.  
  29633.  
  29634. ABP SA2 A4-B1 GET *FIRST* AND *LIMIT*
  29635. SX2 X2 *LIMIT*
  29636. IX2 X2-X1 NUMBER OF WORDS IN BUFFER BEFORE WRAP
  29637. IX1 X1+X7 ADVANCE *IN* OR *OUT* POINTER
  29638. IX7 X7-X2 NUMBER OF WORDS TO TRANSFER AFTER WRAP
  29639. SA2 A4-1 GET *FIRST*
  29640. LX2 -24
  29641. SX2 X2
  29642. NG X7,RB4 IF NO WRAP AROUND
  29643. SX1 X2 SET *IN* OR *OUT* = *FIRST*
  29644. IX1 X1+X7 ADVANCE *IN* OR *OUT* POINTER
  29645. NZ X7,RB4 IF DATA IN SECOND PART
  29646. SX7 -B1 INDICATE NO SECOND PART OF TRANSFER
  29647. JP B4 RETURN
  29648. CBS SPACE 4,15
  29649. ** CBS - CHECK BUFFER SPACE.
  29650. *
  29651. * ENTRY (B6) = RETURN ADDRESS.
  29652. *
  29653. * EXIT (X6) = (NPCB) = BUFFER SIZE IN PRUS.
  29654. * (X7) = (WCCB) = WORD COUNT OF DATA IN BUFFER
  29655. * IF WRITE, ROOM REMAINING IN BUFFER IF READ.
  29656. *
  29657. * ERROR TO *RPC* IF BUFFER ARGUMENT ERROR.
  29658. *
  29659. * USES A - 1, 2, 3, 6, 7.
  29660. * B - 2, 3.
  29661. * X - 0, 1, 2, 3, 6, 7.
  29662.  
  29663.  
  29664. CBS SX2 B1+B1 GET *OUT* FROM FET
  29665. IX2 X5+X2
  29666. ERX2 X2
  29667. SB2 X2
  29668. SA2 A4 GET MESSAGE BUFFER PARAMETERS
  29669. SX6 B2
  29670. SA3 A4-B1 GET FIRST AND LIMIT FROM MESSAGE BUFFER
  29671. LX2 59-6
  29672. SA1 A3-B1 GET *IN* FROM MESSAGE BUFFER
  29673. SX0 X3 LIMIT
  29674. AX3 24
  29675. SX3 X3 FIRST
  29676. SB3 X3
  29677. PL X2,CBS1 IF READ
  29678. SB2 X1 GET *OUT* FROM MESSAGE BUFFER
  29679. SX1 1 GET *IN* FROM FET
  29680. IX1 X5+X1
  29681. ERX1 X1
  29682. SX1 X1+
  29683. BX6 X1
  29684. LX1 24
  29685. CBS1 IX7 X6-X3 REVALIDATE IN OR OUT POINTER
  29686. NG X7,CBS5 IF POINTER .LT. FIRST
  29687. IX7 X6-X0
  29688. PL X7,CBS5 IF POINTER .GE. LIMIT
  29689. AX1 24
  29690. IX0 X0-X3 LIMIT - FIRST
  29691. LX1 24
  29692. SX3 B2
  29693. BX7 X1+X3 UPDATE MESSAGE BUFFER *IN* AND *OUT*
  29694. SA7 A3-B1
  29695. LX1 -24
  29696. IX7 X1-X3 *IN* - *OUT*
  29697. SX1 X1+1 *IN* + 1
  29698. NG X2,CBS2 IF WRITE FUNCTION
  29699. IX7 X3-X1 *OUT* - *IN* - 1
  29700. CBS2 PL X7,CBS3 IF NO BUFFER WRAP REQUIRED
  29701. IX7 X0+X7
  29702. CBS3 SA7 WCCB SAVE WORD COUNT
  29703. BX6 X7 CALCULATE BUFFER SIZE IN PRUS
  29704. LX2 59-5-59+6
  29705. AX6 6
  29706. PL X2,CBS4 IF NOT *READCW*/*WRITECW*
  29707. SX6 102B
  29708. PX1 X7
  29709. PX6 X6
  29710. NX6 X6
  29711. FX6 X1/X6
  29712. UX6 B2,X6
  29713. LX6 B2
  29714. CBS4 SA6 NPCB SAVE BUFFER SIZE IN PRUS
  29715. JP B6 RETURN
  29716.  
  29717. CBS5 SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
  29718. EQ RPC CALL PP CIO
  29719. CIM SPACE 4,25
  29720. ** CIM - CALL I/O BUFFER MANAGER.
  29721. *
  29722. * ENTRY (B4) = RETURN ADDRESS.
  29723. * (X2) = 12/0,6/NBI,1/I,29/0,6/OP,6/BC.
  29724. * NBI = NUMBER OF ADDITIONAL WRITE BUFFERS
  29725. * TO INTERLOCK.
  29726. * I = SET IF CURRENT WRITE BUFFER INTERLOCKED.
  29727. * OP = I/O BUFFER MANAGER OPERATION.
  29728. * BC = BUFFER COUNT (OP = BMRD) OR
  29729. * INTERLOCK MODE (OP = BMVI).
  29730. *
  29731. * EXIT (X6) = FWA CONTROL BUFFER IF INTERLOCKED.
  29732. * (LBIA) = INTERLOCKED BUFFER ADDRESS IF NONZERO.
  29733. *
  29734. * ERROR TO *RCR2* IF I/O BUFFER BUSY.
  29735. * TO *RCR3* IF I/O BUFFER RECALL.
  29736. * TO *RPC* IF I/O ERROR, ADDRESS ERROR OR INACCESSIBLE
  29737. * DEVICE.
  29738. *
  29739. * USES A - 0, 1, 2, 3, 6, 7.
  29740. * B - 3.
  29741. * X - 0, 1, 2, 3, 6, 7.
  29742. *
  29743. * CALLS CMS.
  29744. *
  29745. * MACROS MONITOR.
  29746.  
  29747.  
  29748. CIM SA3 A4 GET FNT ORDINAL
  29749. MX0 -12
  29750. LX3 -24
  29751. BX6 -X0*X3
  29752. SA3 LBIA
  29753. BX7 X7-X7
  29754. SA7 A3 CLEAR BUFFER INTERLOCK ADDRESS
  29755. SX1 B7 GET CONTROL POINT NUMBER
  29756. LX1 18-7
  29757. BX6 X1+X6
  29758. LX6 12
  29759. BX6 X6+X2
  29760. MONITOR BFMM
  29761. SX2 X2+
  29762. SB3 X2-BMFO*100B
  29763. SX2 B1 GET FNT+2 WORD
  29764. LX1 -12
  29765. IX2 X4+X2
  29766. BX6 -X0*X1 I/O BUFFER LINK
  29767. ERX1 X2
  29768. BX7 X0*X1
  29769. BX7 X7+X6
  29770. EWX7 X2
  29771. BX7 X1
  29772. SA1 A5+
  29773. LX1 -12
  29774. NG B3,CIM0 IF NOT A FLUSH OPERATION
  29775. SX6 B0+
  29776. CIM0 NG X1,CIM2 IF RECALL STATUS
  29777. LX3 X1,B1
  29778. BX7 X7-X7
  29779. NG X3,RCR2 IF I/O BUFFER BUSY
  29780. AX3 56
  29781. SA1 A5+B1 CHECK FOR MULTIPLE WRITE BUFFERS
  29782. SB3 X3+ SAVE BUFFER MANAGER STATUS
  29783. SA0 CIM1 SET RETURN ADDRESS FOR *CMS*
  29784. NZ X6,CMS IF LINK RETURNED
  29785. ZR X1,CIM1.1 IF NO ALTERNATE BUFFER
  29786. BX6 -X0*X1
  29787. BX7 X0*X1
  29788. LX7 -12
  29789. SA7 A1
  29790. ERX1 X2
  29791. BX1 X0*X1
  29792. BX7 X1+X6 SET I/O BUFFER LINK IN FNT
  29793. EWX7 X2
  29794. SA1 A5+B1
  29795. SA2 A1+B1
  29796. NZ X1,CMS IF MORE ALTERNATE BUFFERS
  29797. BX7 X1
  29798. SA7 A2
  29799. BX7 X2
  29800. SA7 A1
  29801. EQ CMS CALCULATE FIRST SECTOR OF BUFFER
  29802.  
  29803. CIM1 LX6 CBTLS SET INTERLOCKED BUFFER ADDRESS
  29804. LX3 30
  29805. TX6 X6,CBT
  29806. BX6 X6+X3
  29807. SA6 A3+
  29808. BX7 X7-X7
  29809. CIM1.1 NZ B3,RPC IF INACCESSIBLE DEVICE OR ERROR
  29810. JP B4 RETURN
  29811.  
  29812. * CHECK FOR RECALL ON FIRST OR SECOND I/O BUFFER.
  29813.  
  29814. CIM2 SA1 A5+B1
  29815. ZR X1,RCR3 IF RECALL ON FIRST BUFFER
  29816. EWX7 X2
  29817. ZR X3,RCR3 IF FIRST BUFFER NOT INITIALLY INTERLOCKED
  29818. BX7 X3 RESET INTERLOCKED BUFFER ADDRESS
  29819. SA7 A3
  29820. BX7 X7-X7 CLEAR ORDINAL FROM MESSAGE BUFFER
  29821. SA7 A5+B1
  29822. EQ RCR3 ENTER RECALL STACK
  29823.  
  29824. CMS SPACE 4,15
  29825. ** CMS - CALCULATE MOD 40B OF CURRENT SECTOR.
  29826. *
  29827. * ENTRY (A0) = RETURN ADDRESS.
  29828. *
  29829. * EXIT (X1) = MOD 40B OF CURRENT SECTOR.
  29830. * (X2) = LSLB = 40B.
  29831. * (X3) = FIRST SECTOR IN CURRENT I/O BUFFER.
  29832. *
  29833. * USES A - 1.
  29834. * B - 6.
  29835. * X - 0, 1, 2, 3.
  29836.  
  29837.  
  29838. CMS ERX1 X4 GET CURRENT SECTOR
  29839. MX0 -12
  29840. SX2 LSLB LOGICAL SECTORS PER I/O BUFFER
  29841. LX1 -12
  29842. BX1 -X0*X1
  29843. SB6 A0+ GET RETURN ADDRESS
  29844. BX3 X1
  29845. MX1 -LSLBS CALCULATE MOD 40B OF CURRENT SECTOR
  29846. BX1 -X1*X3
  29847. IX3 X3-X1 CALCULATE FIRST SECTOR
  29848. JP B6 RETURN
  29849. CPT SPACE 4,20
  29850. ** CPT - CALCULATE PRUS TO TRANSFER.
  29851. *
  29852. * EXIT TO *CMP* IF NO PRUS TO WRITE.
  29853. * TO *RDF6* IF READ OPERATION.
  29854. * TO *WTF23* IF PRUS TO WRITE.
  29855. * TO *RPC* IF PRU SIZE ERROR.
  29856. * (B2) = STATUS (0 = FULL BLOCK, 4 = EOR,
  29857. * 10B = EOF, 14B = EOI).
  29858. * (B6) = WORD COUNT OF TRANSFER.
  29859. * (X0) = FWA DATA IN I/O BUFFER.
  29860. * (X2) = (USCW) = SECTOR CONTROL WORD (UPDATED FOR
  29861. * WRITE).
  29862. * (X3) = ADDRESS OF LAST ACCESSED SECTOR CONTROL WORD.
  29863. * (B3) = (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER.
  29864. * (SDTW) = 0, EXCEPT BIT 56 IS SET FOR SKIP DATA
  29865. * TRANSFER FLAG ON WRITE OPERATION.
  29866. * (USCW) = LAST ACCESSED SECTOR CONTROL WORD.
  29867. *
  29868. * USES A - 1, 2, 6, 7.
  29869. * B - 2, 3, 4, 6.
  29870. * X - 1, 2, 6, 7.
  29871. *
  29872. * CALLS CBS, CSA, SCW.
  29873.  
  29874.  
  29875. CPT12 ZR X6,CMP IF NO DATA IN BUFFER
  29876.  
  29877. CPT SB4 CPT1 SET RETURN ADDRESS FOR *CSA*
  29878. EQ CSA CALCULATE SECTOR ADDRESS IN I/O BUFFER
  29879.  
  29880. CPT1 SA2 A4
  29881. SB2 X7-LSLB COMPLEMENT OF MAXIMUM PRUS TO TRANSFER
  29882. BX7 X7-X7 CLEAR SKIP FLAG DATA TRANSFER ON WRITE
  29883. SB2 -B2 MAXIMUM PRUS TO TRANSFER
  29884. SA7 SDTW
  29885. LX2 59-6
  29886. SB4 B3+ MOD 10B OF CURRENT SECTOR
  29887. SA1 NPCB GET NUMBER OF PRUS IN BUFFER
  29888. PL X2,CPT4 IF READ/SKIP
  29889. LX2 59-5-59+6
  29890. SB3 X1
  29891. NG X2,SCW IF *WRITECW*
  29892. SB6 -B2
  29893. SX7 X1+B6
  29894. NG X7,CPT2 IF WILL NOT REACH LAST SECTOR IN BUFFER
  29895. SA1 A5+B1
  29896. SB3 B2
  29897. NZ X1,CPT2 IF ANOTHER BUFFER RESERVED
  29898. SB6 LSLB/4 LIMIT TRANSFER TO SAVE SPACE FOR EOI
  29899. LE B3,B6,CPT2 IF NO SWITCH OF SECTOR CONTROL WORD
  29900. SB3 B6-B4 DO NOT ALLOW SWITCH OF CONTROL WORDS
  29901. SB2 B6-B4
  29902. CPT2 SX7 B5 SAVE (B5)
  29903. PX7 X7,B3 SAVE (B3)
  29904. SB5 LSLB/4
  29905. CPT2.1 SB6 B5-B4 (B6) = REMAINING PRUS IN CONTROL WORD
  29906. GE B3,B6,CPT2.2 IF MULTIPLE SECTOR CONTROL WORDS
  29907. SB6 B3 SET PRUS
  29908. CPT2.2 SB3 B3-B6 DECREMENT PRUS
  29909. MX1 1
  29910. SB6 B6-B1
  29911. SA2 X3 READ SECTOR CONTROL WORD
  29912. AX1 B6 MASK TO CLEAR SHORT PRU FLAGS
  29913. SB6 B6+B4 SKIP PRUS ALREADY WRITTEN
  29914. SB6 B6+B1
  29915. LX1 B6
  29916. LX1 12
  29917. BX2 -X1*X2 CLEAR SHORT PRU FLAGS
  29918. ZR B3,CPT2.3 IF ALL PRUS PROCESSED
  29919. MX1 2 IGNORE DATA FLAGS
  29920. LX1 23-59
  29921. BX6 -X1*X2
  29922. SX3 X3+B1 INCREMENT TO NEXT SECTOR CONTROL WORD
  29923. SA6 A2 STORE SECTOR CONTROL WORD
  29924. SB4 B0
  29925. EQ CPT2.1 UPDATE NEXT WORD
  29926.  
  29927. CPT2.3 SB5 X7 RESTORE (B5)
  29928. UX7,B3 X7 RESTORE (B3)
  29929. SX7 14B GET TERMINATION CONDITION
  29930. SA1 A4
  29931. BX7 X7*X1
  29932. SX7 X7-/CIO/EOI
  29933. SB4 WTF23 SET RETURN ADDRESS
  29934. NZ X7,CPT3 IF EOR/EOF OPERATION
  29935. NZ B3,CPT8 IF SECTORS TO TRANSFER
  29936. SB6 CPT12 SET RETURN ADDRESS FOR *CBS*
  29937. EQ CBS CHECK BUFFER SPACE
  29938.  
  29939. * PROCESS SHORT BLOCK FOR EOR/EOF WRITE.
  29940.  
  29941. CPT3 SB2 B2-B3
  29942. ZR B2,CPT8 IF MAXIMUM PRU TRANSFER
  29943. MX7 1
  29944. LX6 X7,B6
  29945. LX6 13
  29946. SB2 B6-LSLB/4
  29947. NZ B2,CPT3.1 IF NOT END OF SECTOR CONTROL WORD
  29948. MX1 4 CLEAR PARITY ERROR AND IGNORE DATA FLAGS
  29949. LX1 23-59
  29950. BX6 -X1*X2
  29951. SX3 X3+B1 INCREMENT TO NEXT SECTOR CONTROL WORD
  29952. SA6 A2 STORE SECTOR CONTROL WORD
  29953. SA2 A2+B1 READ NEXT SECTOR CONTROL WORD
  29954. SX6 10000B
  29955. CPT3.1 BX2 X2+X6 SET SHORT PRU FLAG IN HEADER
  29956. SB3 B3+B1 INCREMENT NUMBER OF PRUS TO TRANSFER
  29957. SA1 WCCB GET WORD COUNT OF *CIO* BUFFER
  29958. SB6 X1 NUMBER OF WORDS TO TRANSFER
  29959. SA1 A4
  29960. SB2 /CIO/EOF SET EOF STATUS
  29961. LX1 59-56
  29962. LX7 56-59
  29963. NG X1,CPT9 IF PROCESSING EOF FOR *WRITEF*
  29964. SB2 /CIO/EOR SET EOR STATUS AND SKIP FLAG
  29965. SA7 SDTW SET SKIP FLAG
  29966. EQ CPT9 EXIT
  29967.  
  29968. * PROCESS READ AND SKIP OPERATIONS.
  29969.  
  29970. CPT4 LX2 59-56-59+6
  29971. SX7 B1 BUILD SHORT PRU MASK
  29972. LX7 12-1+59-19
  29973. LX7 B4
  29974. NG X2,CPT6 IF SKIP DATA TRANSFER
  29975. LX2 0-2-59+56
  29976. MX6 -2
  29977. BX6 -X6*X2 GET TERMINATION CONDITION
  29978. NZ X6,CPT5 IF NOT *RPHRLS*
  29979. SB2 B1 LIMIT TRANSFER TO ONE PRU
  29980. CPT5 SB4 -B2
  29981. SX6 X1+B4
  29982. PL X6,CPT6 IF ENOUGH ROOM IN BUFFER FOR ALL PRUS
  29983. SB2 X1+ TERMINATE TRANSFER ON FULL BUFFER
  29984. CPT6 SA2 X3
  29985. SB3 B2
  29986. SB4 RDF6 SET RETURN ADDRESS
  29987.  
  29988. * SCAN SHORT PRU FLAGS FOR EOR/EOF/EOI.
  29989.  
  29990. CPT7 LX7 1-59+19 CHECK EOR FLAG
  29991. BX1 X7*X2
  29992. NZ X1,CPT10 IF SHORT PRU
  29993. SB2 B2-B1
  29994. LX7 59-19
  29995. ZR B2,CPT8 IF ALL PRUS CHECKED
  29996. PL X7,CPT7 IF NOT END OF SECTOR CONTROL WORD
  29997. SA2 A2+B1 READ NEXT SECTOR CONTROL WORD
  29998. SX7 B1
  29999. SX3 A2
  30000. LX7 12-1+59-19
  30001. EQ CPT7 CHECK NEXT SECTOR CONTROL WORD
  30002.  
  30003. CPT8 SX6 B3
  30004. LX6 6
  30005. SB6 X6
  30006. SB2 B0
  30007. CPT9 SX6 B3 SAVE NUMBER OF PRUS TO TRANSFER
  30008. BX7 X2 SAVE SECTOR CONTROL WORD
  30009. SA6 NPTR
  30010. SA7 USCW
  30011. JP B4 EXIT
  30012.  
  30013. * PROCESS SHORT PRU ON READ/SKIP OPERATION.
  30014.  
  30015. CPT10 SB3 B3-B2 NUMBER OF FULL PRUS
  30016. SX6 B3
  30017. LX6 6
  30018. SB6 X6 WORD COUNT OF FULL PRUS
  30019. MX7 -12
  30020. SX1 X6+77B GET HEADER WORD FROM LAST DATA WORD
  30021. IX1 X0+X1
  30022. BX6 X0 SAVE (X0)
  30023. SB2 A0 SAVE (A0)
  30024. SA0 ERWB READ HEADER WORD
  30025. SX0 A0+
  30026. LX0 30
  30027. BX0 X0+X1
  30028. RE 1 TRANSFER ONE WORD OF DATA
  30029. RJ HHE HANG ON HALF-EXIT
  30030. SA0 B2 RESTORE (A0)
  30031. BX0 X6 RESTORE (X0)
  30032. SA1 ERWB GET HEADER WORD
  30033. LX1 12
  30034. SB3 B3+B1 TERMINATE TRANSFER ON SHORT PRU
  30035. BX7 -X7*X1
  30036. AX1 48
  30037. ZR X7,CPT11 IF EOF/EOI
  30038. SX6 X1-100B
  30039. SB6 B6+X1 ADD WORD COUNT OF SHORT PRU
  30040. SX7 /CIOERR/DRE DEVICE ERROR
  30041. PL X6,RPC IF PRU SIZE ERROR CALL *1MS*
  30042. NG X1,RPC IF PRU SIZE ERROR CALL *1MS*
  30043. SB2 /CIO/EOR SET EOR STATUS
  30044. EQ CPT9 EXIT
  30045.  
  30046. CPT11 SB2 /CIO/EOF SET EOF STATUS
  30047. NZ X1,CPT9 IF EOF
  30048. SB2 /CIO/EOI SET EOI STATUS
  30049. SB3 B3-1 RESET PRU COUNT TO PRECEED EOI
  30050. EQ CPT9 EXIT
  30051. CSA SPACE 4,15
  30052. ** CSA - CALCULATE SECTOR ADDRESS IN I/O BUFFER.
  30053. *
  30054. * ENTRY (B4) = RETURN ADDRESS.
  30055. *
  30056. * EXIT (X0) = FWA DATA IN I/O BUFFER.
  30057. * (X3) = ADDRESS OF SECTOR CONTROL WORD IN I/O
  30058. * BUFFER.
  30059. * (X6) = (B3) = MOD 10B OF CURRENT SECTOR.
  30060. * (X7) = CURRENT SECTOR - FIRST SECTOR IN BUFFER.
  30061. *
  30062. * USES A - 2.
  30063. * B - 3, 6.
  30064. * X - 0, 2, 3, 6, 7.
  30065. *
  30066. * CALLS CSP.
  30067.  
  30068.  
  30069. CSA SB6 CSA1 SET RETURN ADDRESS FOR *CSP*
  30070. EQ CSP CALCULATE CURRENT SECTOR POSITION
  30071.  
  30072. CSA1 SX0 X3+IOLK
  30073. SA2 X0+
  30074. IX3 X3+X6 SECTOR CONTROL WORD ADDRESS
  30075. MX6 -24
  30076. BX0 -X6*X2 FWA I/O BUFFER
  30077. MX6 -3
  30078. BX6 -X6*X7 MOD 10B OF CURRENT SECTOR
  30079. SB3 X6
  30080. LX7 6
  30081. IX0 X0+X7 FWA CURRENT SECTOR IN I/O BUFFER
  30082. LX7 -6
  30083. JP B4 RETURN
  30084. CSP SPACE 4,15
  30085. ** CSP - CALCULATE SECTOR POSITION IN I/O BUFFER.
  30086. *
  30087. * ENTRY (B6) = RETURN ADDRESS.
  30088. *
  30089. * EXIT (X1) = CURRENT SECTOR.
  30090. * (X3) = FWA CONTROL BUFFER.
  30091. * (X6) = (B3) = SECTOR CONTROL WORD INDEX IN CONTROL
  30092. * BUFFER.
  30093. * (X7) = CURRENT SECTOR - FIRST SECTOR IN BUFFER.
  30094. *
  30095. * USES A - 1, 3.
  30096. * B - 3.
  30097. * X - 1, 2, 3, 6, 7.
  30098.  
  30099.  
  30100. CSP SA3 LBIA GET FWA INTERLOCKED I/O BUFFER
  30101. ERX1 X4 GET CURRENT SECTOR
  30102. MX6 -12
  30103. BX2 X3
  30104. LX1 -12
  30105. AX2 30
  30106. BX1 -X6*X1
  30107. IX7 X1-X2 CURRENT SECTOR - FIRST SECTOR
  30108. MX2 -24
  30109. BX3 -X2*X3
  30110. SX6 X7 INCREMENT FOR SECTOR CONTROL WORD
  30111. AX6 CBTLS
  30112. SB3 X6
  30113. JP B6 RETURN
  30114. IMF SPACE 4,15
  30115. ** IMF - ISSUE CPU MONITOR FUNCTION.
  30116. *
  30117. * ENTRY (B6) = RETURN ADDRESS.
  30118. * (X1) = FUNCTION CODE.
  30119. * (X6) = FUNCTION PARAMETERS.
  30120. *
  30121. * EXIT (X1) = FUNCTION REPLY.
  30122. * (X6) = 0.
  30123. *
  30124. * ERROR ADVANCE EXIT TO (B6)+1 IF FUNCTION REJECT.
  30125. *
  30126. * USES A - 1, 6.
  30127. * B - 6.
  30128. * X - 1, 6.
  30129.  
  30130.  
  30131. IMF LX1 -12 ENTER REQUEST IN PSEUDO OUTPUT REGISTER
  30132. BX6 X6+X1
  30133. SA6 A5+
  30134. XJ
  30135.  
  30136. IMF1 SA1 A5+ CHECK OUTPUT REGISTER
  30137. NG X1,IMF2 IF REQUEST REJECTED
  30138. LX1 59-56
  30139. NG X1,IMF2 IF REQUEST REJECTED
  30140. LX1 56-59
  30141. MX6 12
  30142. BX6 X6*X1
  30143. NZ X6,IMF1 IF NOT CLEARED
  30144. JP B6 RETURN
  30145.  
  30146. IMF2 SB6 B6+B1 ADVANCE EXIT FOR FUNCTION REJECT
  30147. JP B6 RETURN
  30148. SRA SPACE 4,15
  30149. ** SRA - SET RANDOM ADDRESS FOR CURRENT TRACK/SECTOR.
  30150. *
  30151. * ENTRY (B4) = RETURN ADDRESS.
  30152. * (B4) = COMPLEMENT OF RETURN ADDRESS IF NOT TO
  30153. * CALL *RRI*.
  30154. *
  30155. * EXIT TO *CRA*.
  30156. * (X3) = 12/ CURRENT TRACK, 36/ 0, 12/ CURRENT SECTOR.
  30157. *
  30158. * USES A - 1.
  30159. * X - 1, 3, 6.
  30160.  
  30161.  
  30162. SRA ERX1 X4 GET CURRENT TRACK AND SECTOR
  30163. MX6 -12
  30164. LX1 -12
  30165. BX3 -X6*X1
  30166. LX1 -12
  30167. BX6 -X6*X1
  30168. LX6 -12
  30169. BX3 X3+X6
  30170. * EQ CRA COMPUTE RANDOM ADDRESS
  30171. CRA SPACE 4,25
  30172. ** CRA - CONVERT/COMPUTE RANDOM ADDRESS.
  30173. *
  30174. * ENTRY (B4) = RETURN ADDRESS.
  30175. * (B4) = COMPLEMENT OF RETURN ADDRESS, IF TO RETURN
  30176. * RANDOM ADDRESS WITHOUT UPDATING FST/FET.
  30177. * (X3) = 0 IF POSITION TO EOI AND RETURN RANDOM
  30178. * ADDRESS FOR EOI.
  30179. * (X3) .GT. 0 IF RANDOM ADDRESS TO BE CONVERTED
  30180. * AND POSITIONED TO.
  30181. * (X3) .LT. 0 IF RETURN RANDOM ADDRESS FOR SPECIFIED
  30182. * TRACK AND SECTOR (12/TRACK, 36/0, 12/SECTOR).
  30183. *
  30184. * EXIT TO *SFP* FOR UPDATE OF FST CURRENT TRACK AND SECTOR
  30185. * TO POSITION FOR RANDOM ADDRESS.
  30186. * TO *RRI* TO SET RANDOM INDEX IN FET.
  30187. * (B2) = SECTORS PER TRACK.
  30188. * (X3) = RANDOM ADDRESS OF POSITION.
  30189. * (X7) = SECTORS ON FILE BEFORE CURRENT TRACK FOR *SRA*
  30190. * CALL.
  30191. *
  30192. * ERROR TO *RPC* IF INCORRECT RANDOM ADDRESS.
  30193. *
  30194. * USES A - 1, 2, 6.
  30195. * B - 2, 3, 4, 6.
  30196. * X - 0, 1, 2, 3, 6, 7.
  30197.  
  30198.  
  30199. CRA ERX1 X4 GET FST ENTRY
  30200. MX6 12
  30201. LX1 24
  30202. MX7 -2
  30203. BX0 X6*X1 EXTRACT CURRENT TRACK
  30204. LX1 -12
  30205. ZR X0,CRA12 IF FILE NOT USED
  30206. BX1 X6*X1 EXTRACT FIRST TRACK
  30207. SA2 A4+B1 GET MST ADDRESS AND SECTORS PER TRACK
  30208. SB6 B0 PRESET TRACK COUNT
  30209. LX2 -18
  30210. SA2 X2+TRLL SET TRT BASE ADDRESS
  30211. SB3 X2-4000B/4
  30212. SA2 A4+1 SET SECTORS PER TRACK
  30213. NZ X3,CRA3 IF NOT SKIP TO EOI
  30214.  
  30215. * PROCESS SKIP TO EOI.
  30216.  
  30217. CRA1 BX0 X6*X1 EXTRACT LINK
  30218. LX0 10
  30219. SB6 B6+B1
  30220. SA1 B3+X0 READ TRT WORD
  30221. LX0 2
  30222. BX2 -X7*X0 EXTRACT BYTE
  30223. LX2 2 BYTE * 4
  30224. LX3 X2,B1 BYTE * 8
  30225. IX2 X3+X2 BYTE * 12
  30226. SB2 X2+
  30227. LX1 X1,B2 POSITION TRACK BYTE
  30228. NG X1,CRA1 IF NOT END OF TRACK CHAIN
  30229. BX7 X1
  30230. SA1 A4+B1 GET SECTORS PER TRACK
  30231. SX3 B6-1
  30232. AX7 48
  30233. SX1 X1
  30234. IX3 X3*X1
  30235. IX3 X3+X7
  30236. CRA2 SB2 X1
  30237. PL B4,SFP IF SETTING FST
  30238. SB3 -B4
  30239. JP B3
  30240.  
  30241. * PROCESS POSITION TO RANDOM ADDRESS.
  30242.  
  30243. CRA3 NG X3,CRA7 IF RETURNING RANDOM ADDRESS
  30244. SX6 X2
  30245. SX2 X2 SECTORS PER TRACK
  30246.  
  30247. * IX2 X3/X2 SECTORS / SECTORS PER TRACK
  30248. PX2 X2
  30249. PX3 X3
  30250. NX2 X2
  30251. FX2 X3/X2
  30252. UX3 X3
  30253. UX2,B6 X2
  30254. LX2 B6
  30255.  
  30256. IX6 X2*X6 CALCULATE SECTOR NUMBER IN LAST TRACK
  30257. IX6 X3-X6
  30258. SA6 CRAA
  30259. MX6 12
  30260. SB6 X2+B1
  30261.  
  30262. * SCAN TRT.
  30263.  
  30264. CRA4 BX0 X6*X1 EXTRACT TRACK
  30265. LX1 12
  30266. LX0 10
  30267. BX1 -X7*X1 EXTRACT BYTE POSITION
  30268. LX1 2 BYTE * 4
  30269. LX2 X1,B1 BYTE * 8
  30270. IX2 X1+X2 BYTE * 12
  30271. SA1 B3+X0 READ TRT WORD
  30272. SB6 B6-1 DECREMENT TRACK COUNT
  30273. SB2 X2
  30274. LX1 X1,B2
  30275. ZR B6,CRA5 IF TRACK REACHED
  30276. NG X1,CRA4 IF NOT END OF TRACK CHAIN
  30277. CRA5 SA2 CRAA GET SECTOR NUMBER IN LAST TRACK
  30278. LX0 2 POSITION CURRENT TRACK
  30279. BX6 X6*X1 EXTRACT EOI SECTOR OR NEXT TRACK
  30280. SX7 /CIOERR/RAD * RANDOM ADDRESS NOT ON FILE.*
  30281. LX6 -48
  30282. IX6 X6-X2 EOI SECTOR - SECTOR NUMBER IN LAST TRACK
  30283. NG X6,RPC IF ADDRESS NOT ON FILE
  30284. SA1 A4+B1 GET SECTORS PER TRACK
  30285. BX7 X2
  30286. EQ CRA2 EXIT
  30287.  
  30288. * PROCESS RETURN RANDOM ADDRESS.
  30289.  
  30290. CRA7 SX6 X3 SAVE SECTOR
  30291. BX3 X3-X6 CLEAR SECTOR
  30292. SA6 CRAA
  30293. SX2 B0
  30294. MX6 12
  30295. EQ CRA9 ENTER LOOP
  30296.  
  30297. CRA8 LX0 10
  30298. SB6 B6+B1 INCREMENT TRACK COUNT
  30299. SA1 B3+X0 READ TRT WORD
  30300. LX0 2
  30301. BX2 -X7*X0 EXTRACT BYTE
  30302. LX2 2 BYTE * 4
  30303. LX0 X2,B1 BYTE * 8
  30304. IX2 X0+X2 BYTE * 12
  30305. CRA9 SB2 X2
  30306. LX1 X1,B2 POSITION TRACK BYTE
  30307. BX0 X6*X1 EXTRACT LINK
  30308. BX2 X3-X0 COMPARE TRACK
  30309. ZR X2,CRA11 IF TRACK FOUND
  30310. NG X1,CRA8 IF NOT EOI
  30311.  
  30312. * IF THIS FALL THROUGH CASE IS TAKEN, THE TRT MUST BE MASHED.
  30313.  
  30314. CRA10 SX7 /CIOERR/RAD * RANDOM ADDRESS NOT ON FILE.*
  30315. EQ RPC CALL PP CIO
  30316.  
  30317. CRA11 SA1 A4+B1 GET SECTORS PER TRACK
  30318. SA2 CRAA GET SECTOR NUMBER ON THIS TRACK
  30319. SX6 B6
  30320. SX1 X1
  30321. IX7 X1*X6 TRACKS * SECTORS PER TRACK
  30322. IX3 X2+X7 RANDOM ADDRESS
  30323. SB3 -B4
  30324. PL B4,RRI IF SET RANDOM ADDRESS IN FET
  30325. JP B3 RETURN
  30326.  
  30327. CRA12 NZ X3,CRA10 IF RANDOM ADDRESS SPECIFIED
  30328. R= X3,FSMS SET RANDOM ADDRESS
  30329. SB3 -B4
  30330. PL B4,RRI IF SET RANDOM ADDRESS IN FET
  30331. JP B3 RETURN
  30332.  
  30333. CRAA CON 0 TEMPORARY
  30334. SFP SPACE 4,15
  30335. ** SFP - SET FST POSITION FOR RANDOM POSITIONING.
  30336. *
  30337. * ENTRY (B4) = RETURN ADDRESS.
  30338. * (X0) = VALUE TO SET FOR CURRENT TRACK.
  30339. * (X3) = RANDOM ADDRESS TO BE SET IN FET+6.
  30340. * (X7) = VALUE TO SET FOR CURRENT SECTOR.
  30341. *
  30342. * EXIT TO *RRI*.
  30343. *
  30344. * USES A - 1, 6.
  30345. * X - 0, 1, 2, 6, 7.
  30346.  
  30347.  
  30348. SFP ERX1 X4 GET FST ENTRY
  30349. MX6 -24
  30350. LX1 -12
  30351. BX2 -X6*X1 PREVIOUS TRACK AND SECTOR
  30352. BX6 X6*X1
  30353. BX6 X6+X7 SET CURRENT SECTOR
  30354. LX6 -12
  30355. BX6 X6+X0 SET CURRENT TRACK
  30356. LX6 24
  30357. EWX6 X4
  30358. * EQ RRI SET RANDOM INDEX IN FET
  30359. RRI SPACE 4,10
  30360. ** RRI - RETURN RANDOM INDEX TO FET.
  30361. *
  30362. * ENTRY (B4) = RETURN ADDRESS.
  30363. * (X3) = RANDOM INDEX.
  30364. *
  30365. * USES A - 1, 6.
  30366. * X - 1, 2, 6.
  30367.  
  30368.  
  30369. RRI SA1 A4-B1 GET RANDOM FILE FLAG
  30370. PL X1,RB4 IF NOT RANDOM FILE
  30371. BX6 X3 STORE RANDOM INDEX IN FET+6
  30372. SX2 5
  30373. IX2 X5+X2
  30374. LX6 30
  30375. EWX6 X2
  30376. JP B4 RETURN
  30377. RBI SPACE 4,10
  30378. ** RBI - RELEASE I/O BUFFER INTERLOCK.
  30379. *
  30380. * ENTRY (A0) = RETURN ADDRESS.
  30381. * (X2) = INTERLOCK VALUE (1 FOR READ/SKIP,
  30382. * 4000B FOR WRITE).
  30383. *
  30384. * USES A - 3, 6.
  30385. * B - 4.
  30386. * X - 2, 3, 6.
  30387.  
  30388.  
  30389. RBI SA3 LBIA CHECK IF I/O BUFFER INTERLOCKED
  30390. SB4 A0 SET RETURN ADDRESS
  30391. LX2 48
  30392. ZR X3,RB4 IF NO BUFFER INTERLOCKED
  30393. SX6 B0+
  30394. SA6 A3+ CLEAR BUFFER INTERLOCK ADDRESS
  30395. SA6 CHRV CLEAR CONTROL FLAGS
  30396. + SA3 X3+LSLK **** PERFORM IN ONE WORD ****
  30397. IX6 X3-X2 **** PERFORM IN ONE WORD ****
  30398. SA6 A3 **** PERFORM IN ONE WORD ****
  30399. + NG X6,* IF DATA INTEGRITY ERROR - STOP
  30400. JP B4 RETURN
  30401. UAC SPACE 4,15
  30402. ** UAC - UPDATE ACCOUNTING AND RELEASE TRACK INTERLOCK.
  30403. *
  30404. * ENTRY (A0) = RETURN ADDRESS.
  30405. * (B6) = RETURN ADDRESS IF CLEAR TRACK INTERLOCK REJECT.
  30406. * (X7) .LT. 0 IF *UADM* TO BE ISSUED BY *PPCX*.
  30407. * (X7) BIT 0 = 0 IF TO RESTART CPU FOR NON-AUTO
  30408. * RECALL *CIO* CALL.
  30409. *
  30410. * EXIT (X2) = RECALL CPU FLAG IF *UADM* TO BE ISSUED LATER.
  30411. * (X6) = (B4) = NUMBER OF *UADM* PARAMETER WORDS IN
  30412. * MESSAGE BUFFER IF *UADM* TO BE ISSUED LATER.
  30413. *
  30414. * USES A - 0, 1, 2, 3, 6.
  30415. * B - 4, 6.
  30416. * X - 0, 1, 2, 3, 6, 7.
  30417. *
  30418. * MACROS MONITOR.
  30419.  
  30420.  
  30421. * CHARGE FOR PRUS TRANSFERRED.
  30422. * UPDATE CURRENT RANDOM INDEX IN FET+6 FOR RANDOM FILE.
  30423.  
  30424. UAC SA3 PRUC GET PRU COUNT
  30425. SX0 X3
  30426. LX0 IMPT
  30427. SA1 UACC INCREMENT ACCOUNTING
  30428. ZR X0,UAC1 IF NO DATA TRANSFERRED
  30429. IX6 X1+X0
  30430. SA6 A1
  30431. MX1 1 SET DATA TRANSFERRED FLAG
  30432. LX1 54-59
  30433. SA2 A4 GET MESSAGE BUFFER PARAMETERS
  30434. BX6 X2+X1
  30435. SA6 A4+
  30436. SA1 A4-1 GET RANDOM FILE FLAG
  30437. ZR X5,UAC1 IF NO FET ADDRESS
  30438. PL X1,UAC1 IF NOT RANDOM FILE
  30439. SX1 5
  30440. LX0 -IMPT
  30441. IX1 X5+X1
  30442. AX3 30
  30443. IX0 X0-X3
  30444. ERX2 X1 UPDATE RANDOM INDEX IN FET
  30445. LX0 30
  30446. IX6 X2+X0
  30447. EWX6 X1
  30448.  
  30449. * CLEAR TRACK INTERLOCK.
  30450.  
  30451. UAC1 SA3 A4 CHECK TRACK INTERLOCK
  30452. LX3 59-58
  30453. PL X3,UAC3 IF TRACK NOT INTERLOCKED
  30454. ERX1 X4 GET EQUIPMENT AND FIRST TRACK
  30455. SX6 CTIS*10000B CLEAR TRACK INTERLOCK
  30456. MX2 24
  30457. BX1 X2*X1
  30458. LX1 -12
  30459. BX6 X6+X1
  30460. SX3 B6+ SAVE RETURN ADDRESS FOR REJECT
  30461. MONITOR STBM
  30462. AX1 36
  30463. MX6 -59 CLEAR TRACK INTERLOCK FLAG
  30464. ZR X1,UAC2 IF TRACK INTERLOCK CLEARED
  30465. + SA0 X3 SET REJECT RETURN ADDRESS
  30466. SX7 X7 FORCE *UADM* TO BE ISSUED
  30467. EQ UAC3 DO NOT CLEAR TRACK INTERLOCK FLAG
  30468.  
  30469. UAC2 SA3 A4 GET MESSAGE BUFFER PARAMETERS
  30470. LX6 58-59
  30471. BX6 -X6*X3 CLEAR TRACK INTERLOCK FLAG
  30472. SA6 A4
  30473.  
  30474. * BUILD *UADM* PARAMETER WORDS FOR ACCOUNTING CHARGE
  30475. * AND FILE SIZE CHANGES.
  30476.  
  30477. UAC3 SA1 UACC GET ACCOUNTING CHARGE
  30478. MX0 -24
  30479. LX7 49-0
  30480. BX3 -X0*X1
  30481. BX6 X1
  30482. SA1 A5-1 GET AUTO RECALL FLAG
  30483. MX2 1
  30484. LX1 49-41
  30485. LX2 49-59
  30486. BX2 -X7*X2
  30487. BX2 -X1*X2
  30488. LX7 0-49
  30489. SB4 B0+
  30490. ZR X3,UAC4 IF NO ACCOUNTING UPDATE REQUIRED
  30491. SA6 A5+B1
  30492. SB4 B1
  30493. UAC4 SA3 PCMS
  30494. ZR X3,UAC5 IF NO PRU INCREMENT/DECREMENT
  30495. SA1 UAMI GET MASS STORAGE CHANGE PARAMETERS
  30496. SB4 B4+1
  30497. BX6 X1+X3
  30498. SA6 A5+B4
  30499. PL X3,UAC5 IF TRACKS REQUESTED
  30500. SX6 CICS-CDCS INCREMENT MASS STORAGE PRU-S
  30501. LX6 48
  30502. IX1 X1+X6
  30503. BX6 -X3+X1
  30504. SA6 A5+B4
  30505. UAC5 SB6 A0 SET RETURN ADDRESS
  30506. SX6 B4 SET *UADM* PARAMETER COUNT
  30507. ZR B4,RB6 IF *UADM* NOT REQUIRED
  30508. NG X7,RB6 IF *UADM* TO BE ISSUED LATER
  30509. BX6 X6+X2 SET RECALL CPU FLAGS
  30510. LX6 12
  30511. SX3 1
  30512. BX6 X6+X3 SET NO DROP FLAG
  30513. LX6 24
  30514. MONITOR UADM,B6
  30515. WEI SPACE 4,10
  30516. ** WEI - WRITE EOI/RELEASE BUFFER INTERLOCKS.
  30517. *
  30518. * ENTRY (A0) = RETURN ADDRESS.
  30519. *
  30520. * EXIT TO *RBI*.
  30521. *
  30522. * USES A - 1, 2, 3, 6.
  30523. * B - 4, 6.
  30524. * X - 0, 1, 2, 3, 6, 7.
  30525. *
  30526. * CALLS CIM, CSA, CSP, IDE, RBI.
  30527. *
  30528. * MACROS MONITOR.
  30529.  
  30530.  
  30531. WEI SA2 A4+ GET MESSAGE BUFFER PARAMETERS
  30532. SB4 0
  30533. LX2 59-6
  30534. MX3 -12
  30535. PL X2,WEI8 IF NOT WRITE FUNCTION
  30536. WEI1 SB4 B4+B1
  30537. SA1 A5+B4 GET MULTIPLE WRITE BUFFER ORDINALS
  30538. ZR X1,WEI3 IF NO MORE WRITE BUFFERS
  30539. WEI2 BX6 -X3*X1
  30540. LX6 CBTLS
  30541. MX0 1
  30542. AX1 12
  30543. + TA2 X6+LSLK,CBT **** PERFORM IN ONE WORD ****
  30544. IX7 X2-X0 **** PERFORM IN ONE WORD ****
  30545. SA7 A2 **** PERFORM IN ONE WORD ****
  30546. NZ X1,WEI2 IF MORE BUFFERS TO RELEASE
  30547. LE B4,B1,WEI1 IF MORE INTERLOCK WORDS
  30548. WEI3 SA1 NTKP GET OLD EOI SECTOR
  30549. SB4 WEI4 SET RETURN ADDRESS FOR *CSA*
  30550. SA2 A4+B1 CHECK IF EOI WRITE REQUIRED
  30551. BX0 X1 SAVE CURRENT SECTOR
  30552. NG X2,CSA IF WRITE EOI REQUIRED
  30553. SA2 PCMS GET MASS STORAGE PRU CHANGE
  30554. ZR X2,WEI7 IF NO *RTCM* ISSUED
  30555. EQ WEI5 RESET EOI IN TRT
  30556.  
  30557. WEI4 SA2 X3+
  30558. SB6 X6
  30559. MX6 2
  30560. SX7 X7-30B
  30561. ERRNZ LSLB-40B CODE DEPENDS ON BUFFER SIZE
  30562. LX6 23-59
  30563. BX2 -X6*X2 CLEAR DATA FLAGS
  30564. NG X7,WEI4.1 IF NOT IN LAST CONTROL WORD OF BUFFER
  30565. MX6 48
  30566. BX6 X6*X2 CLEAR LINK
  30567. WEI4.1 SX7 10000B BUILD SHORT PRU MASK
  30568. LX7 B6
  30569. BX6 X2+X7
  30570. SA6 X3 STORE HEADER
  30571. SX6 1
  30572. IX2 X4-X6 STORE FNT ENTRY IN EOI SECTOR
  30573. ERX2 X2
  30574. BX6 X2
  30575. SA6 ERWB SET UP BUFFER FOR WRITE
  30576. ERX2 X4 STORE FST ENTRY IN EOI SECTOR
  30577. BX6 X2
  30578. SA6 A6+B1
  30579. SB4 A0 SAVE (A0)
  30580. SA2 PDTL STORE PACKED DATE AND TIME IN EOI SECTOR
  30581. BX7 X2
  30582. SA7 A6+B1
  30583. SA0 A6-B1 FWA TO BEGIN TRANSFER FROM (*ERWB*)
  30584. SX6 A0
  30585. LX6 30
  30586. BX0 X0+X6 30/FWA FROM, 30/FWA I/O BUFFER DATA (TO)
  30587. WE 3
  30588. RJ HHE HANG ON HALF-EXIT
  30589. MX7 -6
  30590. BX6 X6-X6
  30591. IX0 X0-X7
  30592. SA6 A0
  30593. WE 1
  30594. RJ HHE HANG ON HALF-EXIT
  30595. SA0 B4 RESTORE (A0)
  30596. SB4 WEI5 RETURN ADDRESS FOR *IDE*
  30597. BX0 X1 SAVE CURRENT SECTOR
  30598. SB6 IDE *CSP* RETURN ADDRESS
  30599. EQ CSP CALCULATE SECTOR POSITION
  30600.  
  30601. WEI5 ERX2 X4 GET EQUIPMENT AND CURRENT TRACK
  30602. SB7 X6+ RESTORE (B7)
  30603. MX6 12
  30604. MX7 11
  30605. BX6 X6*X2 EQUIPMENT
  30606. LX7 -25
  30607. BX7 X7*X2 CURRENT TRACK
  30608. LX6 -12
  30609. BX6 X6+X7
  30610.  
  30611. * SET THE CHECKPOINT BIT FOR THE DEVICE WHEN EXTENDING *LIFT*
  30612. * OR *PMFT* FILES. CHECKPOINT IS SET FOR *LIFT* TO ENSURE
  30613. * THAT THE DEVICE IS CHECKPOINTED AFTER THE INDIRECT ACCESS
  30614. * PERMANENT FILE CHAIN IS EXTENDED BY *CPUPFM*. EQUIVALENT
  30615. * LOGIC IS NOT NEEDED IN *1MS* BECAUSE INDIRECT ALLOCATION
  30616. * AND DEVICE CHECKPOINTING IS COMPLETELY MANAGED WITHIN *PFM*
  30617. * FOR NON-BUFFERED DEVICES.
  30618.  
  30619. SX2 B1 CHECK FILE TYPE
  30620. IX2 X4-X2
  30621. ERX2 X2
  30622. LX2 -6
  30623. MX7 -6
  30624. BX2 -X7*X2
  30625. SX7 X2-LIFT
  30626. ZR X7,WEI5.1 IF *LIFT* FILE
  30627. SX7 X2-PMFT
  30628. NZ X7,WEI6 IF NOT *PMFT* FILE
  30629. WEI5.1 MX7 1 SET DEVICE CHECKPOINT
  30630. LX7 -12
  30631. BX6 X6+X7
  30632. WEI6 LX0 12 EOI SECTOR
  30633. BX6 X6+X0
  30634. MONITOR DTKM DROP TRACKS AND SET EOI
  30635. SA2 PCMS UPDATE MASS STORAGE PRU CHANGE
  30636. IX6 X2-X1
  30637. SA6 A2
  30638. WEI7 MX2 1 SET INTERLOCK VALUE
  30639. LX2 12
  30640. EQ RBI RELEASE BUFFER INTERLOCK
  30641.  
  30642. WEI8 SA3 LBIA CHECK I/O BUFFER INTERLOCKED
  30643. SB4 A0+
  30644. ZR X3,RB4 IF NO BUFFER INTERLOCKED
  30645. SX1 B1 GET I/O BUFFER LINK
  30646. IX1 X4+X1
  30647. ERX1 X1
  30648. MX6 -12
  30649. BX6 -X6*X1
  30650. SX2 B1 SET INTERLOCK VALUE
  30651. ZR X6,RBI IF NO LINK IN FNT ENTRY
  30652. SB6 WEI9 SET RETURN ADDRESS FOR *CSP*
  30653. EQ CSP CALCULATE SECTOR POSITION
  30654.  
  30655. WEI9 SA1 CHRV ALLOW ACCESS TO OFF/SUSPECT DEVICE
  30656. SX2 EPNS
  30657. BX6 X2+X1
  30658. SA6 A1
  30659. SX2 BMRB*100B RELEASE READ BUFFER
  30660. NG X7,CIM IF NEXT SECTOR NOT IN SAME BUFFER
  30661. SX7 X7-LSLB
  30662. PL X7,CIM IF NEXT SECTOR NOT IN SAME BUFFER
  30663. SX2 B1+ SET INTERLOCK VALUE
  30664. EQ RBI RELEASE BUFFER INTERLOCK
  30665.  
  30666. ENDBLK
  30667. BLOCK IHPFMD,(NON-819 INTERRUPT HANDLER.)
  30668. BIO SPACE 4,15
  30669. ** BIO - PROCESS *BIOM* MONITOR FUNCTION.
  30670. *
  30671. * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
  30672. * (X5) = OUTPUT REGISTER.
  30673. *
  30674. * USES X - ALL.
  30675. * A - ALL.
  30676. * B - 3, 4, 5.
  30677. *
  30678. * CALLS /BUFIO/DLB, /BUFIO/SBR,
  30679. * /MONITOR/HNG, /MONITOR/PPRX.
  30680.  
  30681.  
  30682. BIO LX5 -24 POSITION *PUT* ORDINAL
  30683. MX0 -12
  30684. BX6 -X0*X5
  30685. AX1 36 EXTRACT SUB-FUNCTION
  30686. ZR X6,/MONITOR/HNG IF INVALID *PUT* ORDINAL
  30687. TX2 X6-1,-NRUN
  30688. PL X2,/MONITOR/HNG IF INVALID *PUT* ORDINAL
  30689. LX6 PUTLS
  30690. SX3 A5 OUTPUT REGISTER ADDRESS
  30691. TA4 X6+PILL,PUT
  30692. BX7 -X0*X4 CHECK UNIT INTERLOCK
  30693. IX2 X7-X3
  30694. ZR X1,TBIO IF *SUIS* REQUEST
  30695. ERRNZ SUIS CODE DEPENDS ON VALUE
  30696. NZ X2,/MONITOR/HNG IF NOT ASSIGNED THIS PP
  30697. SX6 A4-PILL+UNCT
  30698. SB4 X1-TBIOL
  30699. SA6 PUTA SAVE *PUT* ADDRESS
  30700. LX5 -48
  30701. MX2 -11
  30702. JP TBIO+TBIOL+B4 EXIT TO PROCESSOR
  30703.  
  30704. * ENTER PROCESSOR WITH -
  30705. *
  30706. * (A4) = ADDRESS OF *PILL* WORD.
  30707. * (A6) = ADDRESS OF *PUTA*.
  30708. * (X0) = 48 BIT MASK.
  30709. * (X2) = 49 BIT MASK.
  30710. * (X4) = *PILL* WORD OF *PUT* ENTRY.
  30711. * (X5) = PP OUTPUT REGISTER SHIFTED LEFT -12.
  30712. * (X6) = *PUT* ADDRESS OF *UNCT* WORD.
  30713. * (X7) = BYTE 4 OF *PILL* WORD.
  30714.  
  30715. TBIO BSS 0
  30716.  
  30717. BSS 0 FORCE UPPER
  30718. SUIS EQU *-TBIO
  30719. SUIS EQU //SUIS ENSURE SUBFUNCTION CORRECT
  30720. LX7 36
  30721. MX0 1
  30722. EQ BIO10 SET UNIT INTERLOCK
  30723.  
  30724. BSS 0 FORCE UPPER
  30725. DCBS EQU *-TBIO
  30726. DCBS EQU //DCBS ENSURE SUBFUNCTION CORRECT
  30727. SX7 BIO24
  30728. TEQ (/PROBE/IOS,PROBE,/IHPFMD/BIO20) UPDATE *PROBE* TABLE
  30729.  
  30730. BSS 0 FORCE UPPER
  30731. SETS EQU *-TBIO
  30732. SETS EQU //SETS ENSURE SUBFUNCTION CORRECT
  30733. SA3 X6
  30734. LX3 -12
  30735. EQ BIO30 SET ERROR STATUS IN *CBT*
  30736.  
  30737. BSS 0 FORCE UPPER
  30738. IDSS EQU *-TBIO
  30739. IDSS EQU //IDSS ENSURE SUBFUNCTION CORRECT
  30740. SX7 BIO40
  30741. EQ BIO20 INHIBIT DATA STREAMING
  30742.  
  30743. BSS 0 FORCE UPPER
  30744. CETS EQU *-TBIO
  30745. CETS EQU //CETS ENSURE SUBFUNCTION CORRECT
  30746. SA1 X6
  30747. BX2 -X0*X1
  30748. EQ BIO60 CLEAR ERROR STATUS FROM I/O QUEUE
  30749.  
  30750. BSS 0 FORCE UPPER
  30751. TBIOL EQU *-TBIO
  30752.  
  30753. * SET UNIT INTERLOCK.
  30754.  
  30755. BIO10 NZ X7,/MONITOR/PPR1 IF *PUT* ENTRY INTERLOCKED
  30756. BX6 X4+X3
  30757. SA6 A4 SET INTERLOCKING PPOR ADDRESS
  30758. SA2 A4-PILL+UNCT
  30759. BX6 X0+X2 SET UNIT INTERLOCK FLAG
  30760. SA6 A2
  30761. EQ /MONITOR/PPR1 EXIT
  30762.  
  30763. * DELINK CONTROL BUFFER(S) / INHIBIT DATA STREAMING.
  30764.  
  30765. BIO20 SA7 PADD SAVE PROCESSOR ADDRESS
  30766. BX6 -X2*X5
  30767. ERRNZ CBCT-PUTA-2 CODE DEPENDS ON VALUES
  30768. SA6 A7+B1 BUFFER COUNT
  30769. BIO21 SA4 CBCT DECREMENT BUFFER COUNT
  30770. SX6 X4-1
  30771. ZR X4,BIO27 IF REQUEST COMPLETE
  30772. SA1 PUTA
  30773. SA2 X1 FETCH *UNCT* WORD FROM *PUT*
  30774. MX0 -12
  30775. BX5 X2 PRESERVE (X2) FOR *DLB*
  30776. SA6 A4
  30777. SA3 A4-B1 RETRIEVE PROCESSOR ADDRESS
  30778. AX5 12
  30779. SB4 X3
  30780. BX7 -X0*X5 EXTRACT CURRENT CONTROL BUFFER ORDINAL
  30781. SX6 B1
  30782. LX7 CBTLS
  30783. ZR X7,/MONITOR/HNG IF I/O QUEUE EMPTY
  30784. TA4 X7+IOLK,CBT
  30785. JP B4 EXIT TO PROCESSOR
  30786.  
  30787. * DELINK CONTROL BUFFER(S).
  30788.  
  30789. BIO24 SA3 STAT
  30790. NZ X3,BIO25 IF CALLED VIA *SETS* SUBFUNCTION
  30791. SA3 A4+B1 READ *HSLK* WORD
  30792. ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
  30793. MX0 -48
  30794. BX7 -X0*X3 CLEAR ERROR DATA
  30795. SA7 A3
  30796. BIO25 SA3 A4-IOLK
  30797. LX4 -57 EXTRACT WRITE FLAG
  30798. BX7 X6*X4 WRITE FLAG
  30799. ERRNZ HSCT-1 CODE DEPENDS ON VALUE
  30800. SA4 X1+B1
  30801. IX7 X1+X7 ACCUMULATOR ADDRESS + WRITE FLAG
  30802. ERRNZ RDST+1-WTST INDICES MUST BE CONSECUTIVE
  30803. SA1 X7+RDST ACCUMULATOR WORD
  30804. AX4 54 PHYSICAL SECTORS PER BUFFER
  30805. SB3 BIO26 *DLB* RETURN ADDRESS
  30806. IX6 X1+X4 INCREMENT ACCUMULATOR
  30807. LX6 59-35
  30808. NG X6,/BUFIO/DLB IF ACCUMULATOR OVERFLOW
  30809. LX6 35-59
  30810. SA6 A1 UPDATE ACCUMULATOR
  30811. EQ /BUFIO/DLB DELETE BUFFER
  30812.  
  30813. BIO26 SB3 BIO21 *SBR* RETURN ADDRESS
  30814. EQ /BUFIO/SBR SET BUFFER RECALL
  30815.  
  30816. BIO27 SA5 A5 CHECK INTERLOCK FLAG
  30817. LX5 59-23
  30818. PL X5,BIO29 IF NOT CLEARING UNIT INTERLOCK
  30819. BIO28 SA4 PUTA
  30820. MX1 -59 SET MASKS
  30821. MX0 -12
  30822. SA3 X4-UNCT+PILL FETCH PP INTERLOCK WORD
  30823. BX6 X0*X3
  30824. SA6 A3 CLEAR PP INTERLOCK
  30825. SA4 X4+
  30826. BX6 -X1*X4 CLEAR UNIT BUSY
  30827. SA6 A4
  30828. BIO29 BX7 X7-X7 CLEAR OUTPUT REGISTER IMAGE
  30829. SA2 STAT SET REPLY STATUS
  30830. SA7 A2
  30831. BX7 X2
  30832. SA7 A5
  30833. EQ /MONITOR/PPRX RETURN
  30834.  
  30835. * PROCESS I/O ERROR.
  30836.  
  30837. BIO30 BX2 -X0*X3 EXTRACT CURRENT *CBT* ORDINAL
  30838. LX2 CBTLS *CBT* INDEX
  30839. TA4 X2+HSLK,CBT
  30840. MX7 -48
  30841. LX5 12
  30842. BX7 -X7*X4 CLEAR *HSLK* ERROR PROCESSING DATA
  30843. LX3 -24
  30844. BX3 -X0*X3 EST ORDINAL
  30845. CX1 X3,EST CONVERT EST ORDINAL TO OFFSET
  30846. TA1 X1+EQDE,EST
  30847. BX6 -X0*X5 EXTRACT ERROR CODE
  30848. MX2 2
  30849. SA3 A5-B1 READ INPUT REGISTER
  30850. BX2 X2*X4
  30851. LX1 24+3 POSITION SECONDARY CHANNEL BYTE
  30852. SB3 X6-DDFE
  30853. BX3 -X0*X3
  30854. NG X2,BIO35 IF I/O ERROR FLAG ALREADY SET
  30855. LX4 1
  30856. LX6 48
  30857. NG X4,BIO32 IF DEVICE VERIFICATION CALL
  30858. LX0 48+3
  30859. MX4 3 FORM CHANNEL MASK
  30860. BX0 X4+X0
  30861. BX5 -X0*X1 CHECK SECONDARY CHANNEL ACCESSIBLE
  30862. SB5 X5-4
  30863. LX1 -12
  30864. BX4 -X0*X1 PRIMARY CHANNEL DATA
  30865. SB4 X4-4
  30866. AX4 48+3 PRIMARY CHANNEL
  30867. BX1 X4-X3
  30868. AX5 48+3 SECONDARY CHANNEL
  30869. ZR X1,BIO31 IF CALLER ON PRIMARY CHANNEL
  30870. NZ B4,BIO32 IF PRIMARY CHANNEL UNAVAILABLE
  30871. SX3 X4 SELECT PRIMARY CHANNEL
  30872. EQ BIO32 CONTINUE
  30873.  
  30874. BIO31 NZ B5,BIO32 IF SECONDARY CHANNEL UNAVAILABLE
  30875. SX3 X5+ SELECT SECONDARY CHANNEL
  30876. BIO32 LX3 54 CHANNEL
  30877. MX0 1 I/O ERROR FLAG
  30878. BX0 X2+X0 I/O ERROR + FORCED CHANNEL SELECTION FLAGS
  30879. LX4 X2,B1 POSITION FORCED CHANNEL SELECTION
  30880. SA1 A4-HSLK+PAD4
  30881. MX5 -54
  30882. BX6 X6+X0 COMBINE FLAGS AND ERROR CODE
  30883. BX1 -X5*X1 CLEAR CHANNEL FIELD
  30884. BX6 X7+X6 MERGE ERROR DATA INTO *HSLK*
  30885. SA6 A4+
  30886. BX7 X1+X3 MERGE CHANNEL INTO *PAD4*
  30887. SA7 A1+
  30888. NG X4,BIO33 IF DEVICE VERIFICATION CALL
  30889. NZ B3,BIO28 IF ERROR NOT DIAGNOSTIC FAILURE
  30890. BIO33 SA5 A5 REREAD OUTPUT REGISTER
  30891. SX7 B1
  30892. LX7 23-0 FORCE CLEARING OF *PUT* INTERLOCK
  30893. BX6 X5+X7
  30894. SA6 A5
  30895. MX2 -11
  30896. LX7 36-23 SET REPLY STATUS
  30897. SX5 B1
  30898. SA7 STAT
  30899. JP TBIO+DCBS DELINK CURRENT CONTROL BUFFER
  30900.  
  30901. BIO35 SA4 A4-HSLK+IOLK
  30902. LX6 48 POSITION ERROR CODE
  30903. BX6 X2+X6 ERROR CODE + FORCED CHANNEL SELECTION
  30904. LX3 54 POSITION CHANNEL
  30905. SA1 A4-IOLK+PAD4
  30906. BX6 X6+X7 MERGE ERROR DATA INTO *HSLK*
  30907. MX5 -54
  30908. BX1 -X5*X1 CLEAR CHANNEL FIELD
  30909. BX7 X1+X3 MERGE CHANNEL INTO *PAD4*
  30910. LX4 59-57
  30911. SA6 A4-IOLK+HSLK UPDATE *HSLK*
  30912. SA7 A1+ UPDATE *PAD4*
  30913. PL X4,BIO33 IF READ OPERATION
  30914. SB3 B3+DDFE-PARE
  30915. ZR B3,BIO33 IF MEDIA ERROR
  30916. BX3 X6
  30917. LX3 59-58
  30918. NG X3,BIO33 IF DEVICE VERIFICATION REQUEST
  30919. SA3 PUTA
  30920. LX4 57-59-24 POSITION FORWARD LINK FOR I/O QUEUE
  30921. SA1 X3+ FETCH *UNCT* WORD FROM *PUT*
  30922. BX2 -X0*X4
  30923. LX0 12
  30924. SB6 BIO37
  30925. BX3 -X0*X1 CURRENT CBT ORDINAL
  30926. LX3 CBTLS-12
  30927. TA3 X3+LSLK,CBT
  30928. MX6 -6
  30929. MX5 -24
  30930. LX6 18
  30931. BX5 -X5*X3 RECALL DATA
  30932. BX6 -X6*X3 RECALL CONTROL POINT NUMBER
  30933. ZR X5,BIO36 IF RECALL NOT SET
  30934. ZR X6,BIO33 IF PP IN RECALL
  30935. BIO36 BX6 X0*X1 CLEAR CURRENT BUFFER ORDINAL
  30936. EQ /BUFIO/SCB SELECT CURRENT BUFFER
  30937.  
  30938. BIO37 SA6 A1+
  30939. SX7 B1 SET REPLY STATUS
  30940. LX7 36-0
  30941. SA7 STAT
  30942. EQ BIO28 CLEAR *PUT* INTERLOCK
  30943.  
  30944. * INHIBIT DATA STREAMING.
  30945.  
  30946. BIO40 LX6 53-0
  30947. BX6 X6+X4 SET INHIBIT FLAG
  30948. SA6 A4+
  30949. EQ BIO21 PROCESS NEXT REQUEST
  30950.  
  30951. * CLEAR ERROR STATUS FROM UNIT I/O QUEUE.
  30952.  
  30953. BIO60 ZR X2,BIO28 IF QUEUE EMPTY
  30954. MX5 -48
  30955. LX2 CBTLS
  30956. BIO61 TA4 X2+HSLK,CBT CLEAR ERROR STATUS
  30957. BX6 -X5*X4
  30958. SA6 A4 UPDATE *CBT* ENTRY
  30959. SA3 A4-B1
  30960. ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
  30961. LX3 -24
  30962. BX2 -X0*X3 EXTRACT FORWARD LINK
  30963. LX2 CBTLS
  30964. NZ X2,BIO61 IF NOT END OF QUEUE
  30965. BX3 -X0*X1
  30966. LX1 -12 POSITION *UNCT* WORD
  30967. BX4 -X0*X1
  30968. NZ X4,BIO28 IF CURRENT *CB* PRESENT
  30969. BX6 X1+X3
  30970. LX6 12 SET CURRENT *CB* = FIRST
  30971. SA6 A1
  30972. EQ BIO28 CLEAR *PUT* INTERLOCK
  30973.  
  30974.  
  30975. PUTA BSS 3 *PUT* ADDRESS OF *UNCT* WORD
  30976. PADD EQU PUTA+1 PROGRAM TRANSFER ADDRESS
  30977. CBCT EQU PADD+1 CONTROL BUFFER COUNT
  30978. STAT CON 0 REPLY STATUS
  30979. RPP SPACE 4,15
  30980. ** RPP - RECALL PSEUDO-PP.
  30981. *
  30982. * ENTRY (A3) = CONTROL BUFFER ADDRESS.
  30983. * (A5) = OUTPUT REGISTER ADDRESS.
  30984. *
  30985. * EXIT (X5) = OUTPUT REGISTER.
  30986. * TO *BIO*.
  30987. *
  30988. * USES X - 1, 5, 7.
  30989. * A - 1, 5, 7.
  30990. * B - 7.
  30991. *
  30992. * CALLS /BUFIO/PRQ.
  30993.  
  30994.  
  30995. RPP TX1 A3,-CBT COMPUTE CONTROL BUFFER ORDINAL
  30996. SX7 A5 SAVE PP OR ADDRESS
  30997. AX1 CBTLS
  30998. SA7 /BUFIO/IPPA
  30999. EQ /BUFIO/PRQ PROCESS REQUEST QUEUE
  31000.  
  31001. RPP1 SA5 /BUFIO/IPPA RESTORE (A5)
  31002. SX7 -B1 RESET *IPPA*
  31003. SA5 X5
  31004. SA7 /BUFIO/IPPA
  31005. EQ BIO21 PROCESS NEXT REQUEST
  31006.  
  31007. ENDBLK
  31008. BLOCK IH819,(INTERRUPT HANDLER - 819/CYBER 176.)
  31009. SPACE 4,10
  31010. ** DATA.
  31011.  
  31012.  
  31013. NRQT BSS MMXC/2+1 NEXT REQUEST(S)
  31014. RTCI BSS 1 INTERRUPT START TIME
  31015. PPE SPACE 4,15
  31016. ** PPE - EXTENSION FOR BUFFER MANAGER RECALL.
  31017. *
  31018. * ENTRY (A1) = ADDRESS OF *PSD*.
  31019. * (X1) = CONTENTS OF *PSD*.
  31020. *
  31021. * EXIT TO */MONITOR/MTRX* IF NO MORE REQUESTS TO PROCESS.
  31022. * TO *PRQ* IF TO PROCESS PSEUDO PP REQUEST.
  31023. *
  31024. * CALLS /BUFIO/PRQ.
  31025.  
  31026.  
  31027. PPE MX2 -57 CLEAR STEP CONDITION
  31028. BX6 -X2*X1
  31029. SX7 B7
  31030. LX6 39-59
  31031. SA7 /BUFIO/IPPA SAVE (B7)
  31032. SA6 A1+
  31033. PPE1 SA2 BMRI
  31034. ZR X2,PPE2 IF NO REQUESTS PRESENT
  31035. SX7 X2-1
  31036. SA1 TBMR+X7 GET REQUEST
  31037. SA7 A2 UPDATE REQUEST INDEX
  31038. EQ /BUFIO/PRQ PROCESS REQUEST QUEUE
  31039.  
  31040. PPE2 SA1 /BUFIO/IPPA RESTORE (B7)
  31041. SX7 -B1
  31042. SB7 X1
  31043. SA7 A1 RESET SAVE WORD
  31044. EQ /MONITOR/MTRX EXIT
  31045. XJ2 SPACE 4,10
  31046. ** XJ2 - EXTENSION TO CHECK STEP CONDITION ON RA+1 REQUEST
  31047. *
  31048. * ENTRY (B2) = EXCHANGE PACKAGE ADDRESS
  31049. *
  31050. * EXIT TO */BUFIO/PPE* IF STEP MODE SET
  31051. * TO */MONITOR/XJ2* IF STEP MODE NOT SET
  31052.  
  31053.  
  31054. XJ2 SA1 B2+3 GET *PSD*
  31055. LX1 59-39
  31056. PL X1,/MONITOR/MTR IF NOT STEP MODE
  31057. EQ PPE PROCESS BUFFER MANAGER RECALL
  31058. TBMR SPACE 4,10
  31059. ** BUFFER MANAGER RECALL REQUESTS ARE PASSED FROM THE 819
  31060. * INTERRUPT HANDLER IN THE FOLLOWING TABLE. THERE IS A
  31061. * POINTER (INDEX) TO THE NEXT AVAILABLE ENTRY IN *BMRI*,
  31062. * WHICH IS ADJUSTED EACH TIME THE TABLE IS ACCESSED.
  31063.  
  31064.  
  31065. TBMR BSS BMRL BUFFER MANAGER RECALL REQUEST TABLE
  31066.  
  31067. BMRI CON 0 REQUEST INDEX
  31068. RIO SPACE 4,10
  31069. ** RIO - RESTART 819 I/O.
  31070. *
  31071. * EXIT TO /BUFIO/IOCX.
  31072. *
  31073. * USES X - 1, 2, 5, 6, 7.
  31074. * A - 1, 2, 5, 6, 7.
  31075. * B - 6, 7.
  31076. *
  31077. * CALLS IOA.
  31078.  
  31079.  
  31080. RIO SA1 RIOA PRESET *IOA* FOR RECOVERY PROCESS
  31081. SA2 IOA3
  31082. BX6 X1
  31083. BX7 X2
  31084. SA6 A2
  31085. SA7 A1
  31086. SX7 B0+ PRESET *CCT* INDEX
  31087. SA7 RIOB
  31088. RIO1 LX7 CCTLS
  31089. SB7 B0 INITIALIZE UNIT NUMBER
  31090. TA5 X7+CCNT,CCT SET *CCT* ENTRY ADDRESS
  31091. SB6 7 SET UNIT COUNT
  31092. BX7 X5
  31093. EQ IOA1 ENTER *IOA* TO PROCESS CHANNEL
  31094.  
  31095. RIO2 SA1 RIOB GET *CCT* INDEX
  31096. SX7 X1+B1
  31097. SA7 A1
  31098. SX1 X7-NCCT
  31099. NG X1,RIO1 IF NOT END OF *CCT*
  31100. SA1 RIOA RESTORE *IOA*
  31101. BX6 X1
  31102. SA6 IOA3
  31103. EQ /BUFIO/IOCX RETURN
  31104.  
  31105.  
  31106. RIOA EQ RIO2 *IOA* RETURN ADDRESS
  31107. RIOB CON 0 *CCT* INDEX
  31108. CLU SPACE 4,10
  31109. ** CLU - CLEAR UNIT FLAGS.
  31110. *
  31111. * ENTRY (A2) = *PUT* ENTRY ADDRESS.
  31112. * (B2) = CHANNEL NUMBER.
  31113. *
  31114. * USES X - ALL.
  31115. * A - 2, 4, 5, 6, 7.
  31116. * B - 3, 5.
  31117. *
  31118. * CALLS INR, SAA.
  31119.  
  31120.  
  31121. CLU SX6 B2 CHANNEL NUMBER
  31122. MX0 -59
  31123. LX6 CCTLS/2
  31124. MX7 6
  31125. TA4 X6,CCT READ CHANNEL CONTROL TABLE
  31126. SA2 A2 GET *PUT* ENTRY
  31127. LX7 -6
  31128. SA5 A4+B1 READ CHANNEL CONTROL TABLE
  31129. ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
  31130. BX3 X7*X2 UNIT NUMBER
  31131. BX6 -X0*X4 CLEAR CHANNEL BUSY
  31132. LX3 12
  31133. SX1 B1
  31134. SB5 X3-60D
  31135. IX6 X6-X1 DECREMENT ACTIVE COUNT
  31136. AX0 B5
  31137. MX1 -12
  31138. BX7 -X0*X5 CLEAR UNIT REQUESTED FLAG
  31139. LX1 12
  31140. SA7 A5
  31141. BX0 -X1*X2 CURRENT REQUEST
  31142. SB3 CLU2 *INR* RETURN ADDRESS
  31143. LX1 12
  31144. BX3 -X1*X4 RETRY REQUEST
  31145. BX6 X1*X6 CLEAR RETRY REQUEST
  31146. LX3 -24+PUTLS
  31147. SA6 A4
  31148. LX1 -12
  31149. MX6 18
  31150. LX6 -6
  31151. BX6 X6*X2 CLEAR UNIT REQUEST QUEUE
  31152. NZ X0,CLU1 IF ANOTHER REQUEST PRESENT
  31153. SA6 A2
  31154. ZR X3,CLU2 IF NO RETRY REQUEST
  31155. TA4 X3,PUT GET *PUT* ENTRY
  31156. NG X4,CLU2 IF UNIT BUSY
  31157. MX5 1
  31158. BX0 -X1*X4 CURRENT REQUEST
  31159. BX6 X4+X5 SET UNIT BUSY
  31160. ZR X0,CLU2 IF NO CURRENT REQUEST
  31161. SA6 A4
  31162. CLU1 LX0 -12
  31163. EQ INR INITIATE REQUEST
  31164.  
  31165. CLU2 SB3 IOLX *SAA* RETURN ADDRESS
  31166. EQ SAA SET ACCOUNTING ADJUSTMENT
  31167. DCS SPACE 4,20
  31168. ** DCS - DECODE STATUS.
  31169. *
  31170. * XP SLAVE INPUT.
  31171. *
  31172. * ENTRY (A0) = CM BUFFER ADDRESS.
  31173. * (A1) = PARTNER XP ADDRESS.
  31174. * (A2) = *PUT* ENTRY ADDRESS.
  31175. * (A3) = CONTROL BUFFER ADDRESS.
  31176. * (B2) = CHANNEL NUMBER.
  31177. * (B4) = PARTNER CHANNEL NUMBER.
  31178. *
  31179. * EXIT TO *CLU*.
  31180. *
  31181. * USES X - ALL.
  31182. * A - 1, 2, 3, 4, 5, 6, 7.
  31183. * B - 3, 4, 6, 7.
  31184. *
  31185. * CALLS /MONITOR/APQ, /BUFIO/DLB, /BUFIO/SBR.
  31186.  
  31187.  
  31188. DCS RO B2 RELEASE FLPP DRIVER
  31189. SA4 A0 READ FIRST WORD OF CM BUFFER
  31190. SA5 A0+B1 SECOND WORD
  31191. RI B2 RESET I/O BUFFER POINTERS
  31192. RI B4
  31193. LX4 59-57
  31194. SB6 DCSA *819 PRTY*
  31195. NG X4,CLU IF COMPLETION STATUS
  31196. SA2 A2 READ *PUT* ENTRY
  31197. ERRNZ UNCT INDEX MUST BE ZERO
  31198. MX0 -3
  31199. LX0 54
  31200. SX4 B0+
  31201. BX7 -X0*X2 READ RECOVERY INDEX
  31202. NZ X7,DCS4 IF READ RECOVERY TO PROCESS
  31203. MX1 -48
  31204. LX5 59-5
  31205. SX6 NRDE
  31206. SB3 DCS2 *DLB* RETURN ADDRESS
  31207. NG X5,DCS1 IF *NOT READY* CONDITION
  31208. SX6 DSTE SET *DEVICE STATUS* ERROR CODE
  31209. DCS1 LX6 48 POSITION ERROR CODE
  31210. BX2 X0*X2 CLEAR READ RECOVERY INDEX
  31211. BX3 X5
  31212. SA4 A0
  31213. SA5 A3+HSLK
  31214. LX4 59-42
  31215. BX7 -X1*X5
  31216. MX1 1
  31217. BX7 X1+X7 SET ERROR FLAG
  31218. BX7 X6+X7 MERGE ERROR CODE INTO *HSLK*
  31219. SA7 A5
  31220. SA5 A5-HSLK+IOLK
  31221. PL X4,/BUFIO/DLB IF BUFFER DOES NOT CONTAIN WRITE DATA
  31222. NG X3,DCS3 IF DISK NOT READY
  31223. PL X5,DCS2 IF BUFFER DELETED BY *WRT*
  31224. EQ /BUFIO/DLB DELETE BUFFER
  31225.  
  31226. DCS2 SB3 DCS3 *SRC* RETURN ADDRESS
  31227. SB7 B0+ EXCHANGE PACKAGE INDEX
  31228. EQ /BUFIO/SBR SET BUFFER RECALL
  31229.  
  31230. DCS3 SA4 A0+B1 READ CM BUFFER
  31231. SB6 DCSB *819 ABT*
  31232. LX4 59-5
  31233. PL X4,DCS4 IF NOT DISK NOT READY
  31234. SB6 DCSC *819 NRDY*
  31235. DCS4 SA5 B6 SET MESSAGE IN SYSTEM CONTROL POINT
  31236. SX1 A1 SAVE (A1), (A2), (B4)
  31237. SX2 A2
  31238. LX1 18
  31239. BX6 X5
  31240. SA5 A2 GET *PUT* ENTRY
  31241. MX7 -6 GET EST ORDINAL (LOWER 6 BITS)
  31242. LX5 -36
  31243. BX5 -X7*X5
  31244. MX7 -3
  31245. BX7 -X7*X5
  31246. AX5 3
  31247. LX5 6
  31248. BX7 X5+X7
  31249. LX7 12
  31250. IX6 X6+X7
  31251. BX7 X1+X2
  31252. TA6 MS2W,SCA
  31253. NG X4,CLU IF DISK NOT READY
  31254. SA5 A0+ GET BLOCK WORD COUNT
  31255. SA7 DCSD
  31256. SX6 B4
  31257. SA4 A2 READ *PUT* ENTRY
  31258. ERRNZ UNCT INDEX MUST BE ZERO
  31259. SA6 A7+B1
  31260. MX7 -11
  31261. SX3 5
  31262. BX2 -X7*X5 WORD COUNT
  31263. SX1 B2 MASTER FLPP CHANNEL NUMBER
  31264. SX2 X2+9+4 BYTE COUNT OF STATUS PACKET
  31265. LX1 21-1
  31266. IX3 X2/X3 WORD COUNT OF STATUS PACKET
  31267. MX7 -9
  31268. LX4 -36
  31269. SA2 DCSE 18/*1MD*,42/0
  31270. BX7 -X7*X4 EST ORDINAL
  31271. LX7 12
  31272. BX7 X7+X1
  31273. TA4 EMB GET *EMB* HEADER 1 (FLAGS, *IN*)
  31274. BX7 X7+X5
  31275. SA1 A4+B1 GET *EMB* HEADER 2 (*OUT*, *LIMIT*)
  31276. LX4 -12 POSITION *IN*
  31277. SA7 A0
  31278. MX0 -12
  31279. SX3 X3+B1 ADD ONE FOR HEADER
  31280. BX6 -X0*X1 *LIMIT*
  31281. LX1 -12
  31282. BX5 -X0*X4 *IN*
  31283. BX1 -X0*X1 *OUT*
  31284. SB3 DCS6 *APQ* RETURN ADDRESS IF *EMB* FULL
  31285.  
  31286. * THE FOLLOWING CODE EMULATES THE ERROR MESSAGE BUFFER
  31287. * HANDLING FOUND AND DOCUMENTED IN COMMON DECK *COMPIMB*.
  31288.  
  31289. * (X0) = -7777
  31290. * (X1) = *OUT*
  31291. * (X2) = *1MD* INPUT REGISTER/*EMB* TERMINATOR
  31292. * (X3) = MESSAGE LENGTH INCLUDING HEADER (*ML*).
  31293. * (X4) = *EMB* HEADER 1 (SHIFTED -12)
  31294. * (X5) = *IN*
  31295. * (X6) = *LIMIT*
  31296.  
  31297. DCS4.1 IX7 X5-X1 *IN* - *OUT*
  31298. NG X7,DCS4.2 IF *IN* .LT. *OUT*
  31299. IX7 X5+X3 *IN* + *ML*
  31300. IX7 X7-X6 *IN* + *ML* - *LIMIT*
  31301. NG X7,DCS4.3 IF MESSAGE FITS BETWEEN *IN* AND *LIMIT*
  31302. BX7 X2 SET TERMINATOR IN *EMB*
  31303. ZR X1,DCS5 IF *OUT* .EQ. *FIRST* - DO NOT RESET *IN*
  31304. TA7 X5+2,EMB
  31305. MX5 0 RESET *IN*
  31306. EQ DCS4.1 RECHECK MESSAGE FIT
  31307.  
  31308. DCS4.2 IX7 X7+X3 *IN* + *ML* - *OUT*
  31309. PL X7,DCS5 IF MESSAGE WILL NOT FIT - CALL *1MD*
  31310. DCS4.3 SB4 X5+B1
  31311. IX7 X5+X3 UPDATE *IN*
  31312. SB4 B4+X3
  31313. BX5 X0*X4 REMOVE OLD *IN*
  31314. SB6 X3-1
  31315. IX7 X5+X7 MERGE IN UPDATED *IN*
  31316. SB3 DCS7 *APQ* RETURN ADDRESS
  31317. LX7 12
  31318. SA7 A4+ UPDATE *EMB* HEADER 1
  31319. DCS4.9 SA5 A0+B6 MOVE ERROR DATA TO BUFFER
  31320. SB6 B6-B1
  31321. BX7 X5
  31322. SA7 A4+B4
  31323. SB4 B4-B1
  31324. PL B6,DCS4.9 IF NOT END OF MOVE
  31325. LX3 12 SET WORD COUNT IN HEADER
  31326. SX7 MLDY+4000B SET 819 DRIVER MAINTENANCE LOG CODE
  31327. BX7 X7+X3
  31328. SA7 A4+B4 STORE HEADER IN BUFFER
  31329. DCS5 LX4 59-1-59+11
  31330. NG X4,/MONITOR/RB3 IF *1MD* ALREADY ACTIVE
  31331. BX6 X2
  31332. TB7 SCA SYSTEM CONTROL POINT ADDRESS
  31333. SB6 DCS5.1 *CAL* RETURN ADDRESS - NO LIMIT
  31334. EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
  31335.  
  31336. DCS5.1 SA4 A4 GET BUFFER CONTROL WORD
  31337. SX2 B1+B1 SET *1MD* CALLED FLAG
  31338. BX7 X2+X4
  31339. SA7 A4
  31340. SB4 B0 SET LIBRARY SEARCHED NEEDED
  31341. EQ /MONITOR/APQ ASSIGN *1MD*
  31342.  
  31343. DCS6 TA5 EMB SET DATA LOST FLAG
  31344. SX6 B1+
  31345. LX6 36
  31346. BX6 X5+X6
  31347. SA6 A5+
  31348. DCS7 SA4 DCSD RESTORE (A1), (A2), (B4)
  31349. SA5 A4+B1
  31350. SA2 X4
  31351. SB4 X5
  31352. AX4 18
  31353. SA1 X4+
  31354. EQ CLU CLEAR UNIT FLAGS
  31355.  
  31356.  
  31357. DCSA DATA C*819PTY00*
  31358. DCSB DATA C*819ABT00*
  31359. DCSC DATA C*819NRY00*
  31360. DCSD BSS 2 REGISTER SAVE AREA
  31361. DCSE VFD 18/3R1MD,42/0 *1MD* INPUT REGISTER/*EMB* TERMINATOR
  31362. FNR SPACE 4,15
  31363. ** FNR - FIND NEXT REQUEST.
  31364. *
  31365. * ENTRY (B3) = RETURN ADDRESS.
  31366. * (B4) = CHANNEL NUMBER.
  31367. * (B7) = 0 IF READ, 1 IF WRITE.
  31368. * (A3) = CONTROL BUFFER ADDRESS.
  31369. *
  31370. * EXIT (X7) = NEGATIVE IF NO MORE REQUESTS ON THIS CYLINDER.
  31371. * (X7) = 0 IF CONTINUOUS REQUEST (NO POSITIONING).
  31372. * (X7) = TRACK AND SECTOR OF NEXT REQUEST.
  31373. *
  31374. * USES X - 1, 2, 3, 4, 5, 6, 7.
  31375. * A - 3, 4, 5, 6, 7.
  31376.  
  31377.  
  31378. FNR SA4 A3+IOLK READ CONTROL BUFFER
  31379. MX6 -12
  31380. SX1 B4 CHANNEL
  31381. LX4 -24
  31382. BX4 -X6*X4 LINK TO NEXT REQUEST
  31383. ZR X4,FNR2 IF END OF QUEUE
  31384. LX4 CBTLS
  31385. SX2 B1
  31386. TA4 X4+IOLK,CBT READ NEXT CONTROL BUFFER
  31387. SX7 B7 READ/WRITE FLAG
  31388. LX2 57
  31389. LX7 57
  31390. BX5 X2*X4 EXTRACT WRITE DATA FLAG
  31391. AX1 CCTLS/2
  31392. BX7 X7-X5
  31393. NZ X7,FNR2 IF NOT MATCHING MODES (READ/WRITE)
  31394. SA5 A4+PAD1-IOLK READ PHYSICAL ADDRESS
  31395. SA3 A3 READ CURRENT PHYSICAL ADDRESS
  31396. ERRNZ PAD1 INDEX MUST BE ZERO
  31397. SX7 A5
  31398. SA7 NRQT-1+X1 SET NEXT REQUEST
  31399. LX5 24
  31400. LX3 24
  31401. BX7 X5
  31402. BX2 X3-X5
  31403. AX7 48
  31404. AX3 48
  31405. BX6 -X6*X2
  31406. IX3 X7-X3
  31407. NZ X6,FNR2 IF NOT SAME CYLINDER
  31408. BX7 X7-X7 SET CONTINUOUS REQUEST FOUND
  31409. SX3 X3-PSLB
  31410. LX5 6
  31411. ZR X3,FNR1 IF CONTINUOUS SECTORS
  31412. MX1 -6
  31413. SX7 B1+B1 SET *SWITCH* FUNCTION
  31414. BX1 -X1*X5 TRACK
  31415. LX7 4
  31416. LX5 6
  31417. BX7 X1+X7
  31418. MX1 -6
  31419. LX7 5
  31420. BX1 -X1*X5 SECTOR
  31421. BX7 X7+X1
  31422. FNR1 LX7 48
  31423. MX3 1 SET I/O LINKUP
  31424. LX3 56-59
  31425. BX6 X4+X3
  31426. SA6 A4
  31427. JP B3 RETURN
  31428.  
  31429. FNR2 SX5 B4+ SET *STOP* FOR NEXT REQUEST
  31430. MX7 1
  31431. AX5 CCTLS/2
  31432. SA7 NRQT-1+X5
  31433. JP B3 RETURN
  31434. INR SPACE 4,10
  31435. ** INR - INITIATE REQUEST.
  31436. *
  31437. * ENTRY (B3) = RETURN ADDRESS.
  31438. * (X0) = CONTROL BUFFER ORDINAL.
  31439. *
  31440. * USES X - ALL.
  31441. * A - 2, 3, 4, 5, 6, 7.
  31442. * B - 5, 7.
  31443.  
  31444.  
  31445. INR LX0 CBTLS
  31446. MX7 -12
  31447. TA5 X0+HSLK,CBT
  31448. BX2 -X7*X5 *PUT* ORDINAL
  31449. SA3 A5+FSTC-HSLK
  31450. LX2 PUTLS
  31451. LX3 12
  31452. TA2 X2+UNCT,PUT
  31453. BX3 -X7*X3 EST ORDINAL
  31454. LX2 12
  31455. CX5 X3,EST CONVERT EST ORDINAL TO OFFSET
  31456. MX3 -6
  31457. BX3 -X3*X2
  31458. MX1 12
  31459. SB7 X3 UNIT NUMBER
  31460. LX1 3
  31461. MX4 3 FORM CHANNEL MASK
  31462. LX2 -6
  31463. BX1 X1-X4
  31464. TA5 X5+EQDE,EST READ EST ENTRY
  31465. LX5 24+3
  31466. BX6 X1*X5 EXTRACT ALTERNATE CHANNEL
  31467. SB5 X6-4
  31468. AX6 48+3-CCTLS/2 CHANNEL CONTROL TABLE INDEX
  31469. LX5 -12
  31470. BX5 X1*X5 EXTRACT PRIMARY CHANNEL
  31471. SX1 X5-4
  31472. AX5 48+3-CCTLS/2 CHANNEL CONTROL TABLE INDEX
  31473. TA3 X5+CREQ,CCT
  31474. NZ B5,INR2 IF ALTERNATE ACCESS UNAVAILABLE
  31475. TA4 X5+CREQ,CCT
  31476. SB5 X1 SAVE PRIMARY CHANNEL STATUS
  31477. BX1 -X7*X3
  31478. NZ B5,INR1 IF PRIMARY ACCESS UNAVAILABLE
  31479. BX7 -X7*X4 ACTIVE REQUESTS - SECOND CHANNEL
  31480. IX7 X1-X7
  31481. NG X7,INR2 IF FIRST CHANNEL HAS FEWEST REQUESTS
  31482. INR1 SA3 A4+ USE SECOND CHANNEL
  31483. INR2 NG X3,INR3 IF CHANNEL BUSY
  31484. TX4 A3-CREQ,-CCT COMPUTE CHANNEL NUMBER
  31485. MX6 -3
  31486. AX4 CCTLS/2
  31487. BX6 -X6*X2 READ RECOVERY INDEX
  31488. MX1 1
  31489. IX6 X0+X6 OFFSET FOR READ RECOVERY
  31490. SB5 X4 CHANNEL NUMBER
  31491. TA5 X0+IOLK,CBT GET READ/WRITE FLAG
  31492. TA4 X6+PAD1,CBT READ PHYSICAL ADDRESS
  31493. LX1 54-59
  31494. LX5 54-57
  31495. SX6 B7 UNIT NUMBER
  31496. BX5 X5*X1 READ/WRITE FLAG
  31497. MX7 12
  31498. LX6 48
  31499. LX7 -12
  31500. BX5 X5+X6 FCN, UNIT
  31501. BX6 X7*X4 CYLINDER
  31502. LX7 -36
  31503. LX4 -24
  31504. BX6 X6+X5 FCN, UNIT, CYL
  31505. BX4 X7*X4 TRACK, SECTOR
  31506. SX5 B5 CHANNEL NUMBER
  31507. BX6 X6+X4 FCN, UNIT, CYL, TRACK, SECTOR
  31508. LX5 7
  31509. SA6 /MONITOR/MCU+X5 STORE REQUEST
  31510.  
  31511. * INITIATE REQUEST.
  31512.  
  31513. MX1 48
  31514. SX7 B7 UNIT NUMBER
  31515. TX6 A2-UNCT,-PUT SET *PUT* ENTRY PENDING
  31516. LX1 12
  31517. LX6 12-PUTLS
  31518. BX3 X1*X3 CLEAR PENDING REQUEST
  31519. SA7 A6+B1
  31520. BX6 X6+X3 INSERT NEW PENDING REQUEST
  31521. RI B5 RESET I/O BUFFER POINTERS
  31522. MX3 1
  31523. RO B5 SET RECORD FLAG TO *FLPP*
  31524. BX6 X6+X3 SET CHANNEL BUSY
  31525. SB5 B5+B1
  31526. SA6 A3
  31527. RI B5 RESET BUFFER POINTERS (PARTNER CHANNEL)
  31528. JP B3 RETURN
  31529.  
  31530. INR3 TX7 A2-UNCT,-PUT SET RETRY REQUEST
  31531. MX1 48
  31532. LX7 24-PUTLS
  31533. LX1 24
  31534. LX2 -6
  31535. MX4 -59
  31536. BX3 X1*X3 CLEAR RETRY REQUEST
  31537. BX6 -X4*X2 CLEAR UNIT BUSY
  31538. BX7 X7+X3 INSERT NEW RETRY REQUEST
  31539. SA6 A2
  31540. SA7 A3
  31541. JP B3 RETURN
  31542. IOA SPACE 4,20
  31543. ** IOA - I/O ACCEPT.
  31544. *
  31545. * MASTER INPUT.
  31546. *
  31547. * ENTRY (A0) = CM BUFFER ADDRESS.
  31548. * (B4) = CHANNEL NUMBER.
  31549. * ((A0)+1) = UNIT NUMBER.
  31550. *
  31551. * EXIT (X0) = CONTROL BUFFER ORDINAL.
  31552. * TO *INR*.
  31553. *
  31554. * USES X - 1, 2, 3, 4, 5, 6, 7.
  31555. * A - 2, 4, 5, 6, 7.
  31556. * B - 3, 5, 6, 7.
  31557. *
  31558. * CALLS INR, SAA.
  31559.  
  31560.  
  31561. IOAX MJ EXIT
  31562.  
  31563. IOA TB7 READ REAL TIME CLOCK
  31564. SX1 B4
  31565. SX7 B7
  31566. LX1 CCTLS/2
  31567. SA4 A0+B1 GET UNIT NUMBER
  31568. MX6 48
  31569. SA7 RTCI SAVE REAL-TIME CLOCK
  31570. TA3 X1+CREQ,CCT READ CHANNEL REQUEST CONTROL
  31571. SB7 X4 UNIT NUMBER
  31572. SA5 A3+B1
  31573. ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
  31574. MX7 -59
  31575. PL X3,IOAX IF CHANNEL NOT BUSY
  31576. LX6 12
  31577. BX3 -X7*X3 CLEAR CHANNEL BUSY
  31578. SX2 B1
  31579. BX3 X6*X3 CLEAR PENDING REQUEST
  31580. RI B4 RESET I/O BUFFER POINTERS
  31581. SB6 B7-60
  31582. IX5 X5+X2 INCREMENT TOTAL REQUEST COUNT
  31583. IX6 X3+X2 INCREMENT ACTIVE REQUEST COUNT
  31584. AX7 B6
  31585. RI B2 RESET I/O BUFFER POINTERS
  31586. BX7 X7+X5 SET UNIT REQUEST FLAG
  31587. SA6 A3
  31588. SA7 A5+
  31589. SB6 7
  31590.  
  31591. * *IOA* IS ENTERED HERE BY *RIO* TO INITIATE REQUESTS ON
  31592. * ALL CHANNELS IN USE WHEN FLUSHING WRITE BUFFERS DURING
  31593. * RECOVERY. EXIT IS ACCOMPLISHED BY CODE MODIFICATION.
  31594.  
  31595. IOA1 MX2 -3
  31596. SX6 B7+1 INCREMENT UNIT NUMBER
  31597. BX4 -X2*X6
  31598. SB7 X4
  31599. LX3 X7,B7 UNIT REQUEST FLAG
  31600. PL X3,IOA4 IF NO REQUEST ISSUED
  31601. IOA2 SB6 B6-1
  31602. NZ B6,IOA1 IF NOT END OF UNITS
  31603. IOA3 SB3 IOAX *SAA* RETURN ADDRESS
  31604. * EQ RIO2 (BUFFER RECOVERY IN PROGRESS)
  31605. EQ SAA SET ACCOUNTING ADJUSTMENT
  31606.  
  31607. IOA4 SB5 B7-4
  31608. SX3 A5+CUN1-CCNT
  31609. NG B5,IOA5 IF UNITS 0 - 3
  31610. SX3 X3+CUN2-CUN1
  31611. IOA5 SA2 X3 GET *PUT* ORDINAL
  31612. SX6 B7 COMPUTE BYTE OFFSET
  31613. ZR X2,IOA2 IF NO UNITS DEFINED
  31614. MX4 -2
  31615. SX5 12
  31616. BX4 -X4*X6
  31617. IX6 X4*X5
  31618. SB5 X6
  31619. MX4 -12
  31620. AX2 B5
  31621. BX6 -X4*X2 *PUT* ORDINAL
  31622. ZR X6,IOA2 IF NO UNIT DEFINED
  31623. LX6 PUTLS
  31624. TA2 X6+UNCT,PUT READ *PUT* ENTRY
  31625. NG X2,IOA2 IF UNIT BUSY
  31626. MX4 1
  31627. MX5 -12
  31628. BX6 X4+X2 SET UNIT BUSY
  31629. LX2 -12
  31630. BX0 -X5*X2
  31631. ZR X0,IOA2 IF EMPTY QUEUE
  31632. SA6 A2
  31633. SB3 IOA3 *INR* RETURN ADDRESS
  31634. EQ INR INITIATE REQUEST
  31635. IOL SPACE 4,25
  31636. ** IOL - I/O LINKUP.
  31637. *
  31638. * XP SLAVE INPUT.
  31639. *
  31640. * ENTRY (A1) = PARTNER XP ADDRESS.
  31641. * (A0) = CM BUFFER ADDRESS.
  31642. * (B2) = CHANNEL NUMBER (PARTNER).
  31643. * (B4) = CHANNEL NUMBER.
  31644. * ((A0)) = *FLPP* REPLY.
  31645. *
  31646. * EXIT (A2) = *PUT* ENTRY ADDRESS.
  31647. * (A3) = CONTROL BUFFER ADDRESS.
  31648. * (X0) = LCM BUFFER ADDRESS.
  31649. * (X2) = *PUT* ENTRY.
  31650. * TO *RDD* (READ) OR *WRT* (WRITE).
  31651. *
  31652. * USES X - ALL.
  31653. * A - 2, 3, 5, 6, 7.
  31654. * B - 3, 5, 7.
  31655. *
  31656. * CALLS DCS, RDD, SAA, WRT.
  31657.  
  31658.  
  31659. IOLX MJ EXIT
  31660.  
  31661. IOL TB7 READ REAL-TIME CLOCK
  31662. SX2 B2 CHANNEL NUMBER
  31663. SX7 B7
  31664. LX2 CCTLS/2
  31665. SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  31666. TA3 X2+CREQ,CCT READ CHANNEL CONTROL TABLE
  31667. MX6 -12
  31668. BX7 -X6*X3 ACTIVE REQUESTS
  31669. ZR X7,IOLX IF NO ACTIVE REQUESTS
  31670. MX4 1
  31671. LX6 12
  31672. BX7 X3+X4 SET CHANNEL BUSY
  31673. BX3 -X6*X3 PENDING REQUEST
  31674. ZR X3,IOL1 IF NO PENDING REQUEST ISSUED
  31675. MX6 36
  31676. AX3 12-PUTLS
  31677. LX6 12
  31678. TA2 X3+UNCT,PUT READ *PUT* ENTRY
  31679. BX7 X6*X7 CLEAR RETRY REQUEST
  31680. LX3 24-PUTLS
  31681. BX7 X3+X7 INSERT NEW RETRY REQUEST
  31682. BX6 -X4*X2 CLEAR UNIT BUSY
  31683. SA6 A2
  31684. IOL1 SB3 IOL2 *SAA* RETURN ADDRESS
  31685. SA2 B0 SET I/O LINKUP SEQUENCE
  31686. RO B4 SIGNAL *FLPP*
  31687. SA7 A3
  31688. EQ SAA SET ACCOUNTING ADJUSTMENT
  31689.  
  31690. IOL2 MJ EXIT
  31691.  
  31692. * SECOND I/O LINKUP INTERRUPT, OR STATUS REPLY.
  31693. *
  31694. * (A2) = 0 IF I/O LINKUP SEQUENCE.
  31695. * (A2) = *PUT* ENTRY ADDRESS, IF STATUS REPLY.
  31696.  
  31697. IOL3 TB3 READ REAL-TIME CLOCK
  31698. SX6 A2+
  31699. SX7 B3
  31700. SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  31701. NZ X6,DCS IF STATUS REPLY
  31702. SA2 A0+ GET *FLPP* REPLY
  31703. SX5 A3+B1
  31704. ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
  31705. MX3 12
  31706. RI B4
  31707. BX0 X3*X2
  31708. RI B2 RESET I/O BUFFER POINTERS
  31709. LX2 18
  31710. SX3 4
  31711. SB5 X2 FUNCTION
  31712. LX2 6
  31713. BX3 X3*X2
  31714. ZR X3,IOL4 IF UNITS 0-3
  31715. SX5 X5+B1
  31716. ERRNZ CUN2-CUN1-1 INDEXES MUST BE CONSECUTIVE
  31717. IOL4 SA5 X5+B1 READ UNIT LIST
  31718. ERRNZ CUN1-CCNT-1 INDEXES MUST BE CONSECUTIVE
  31719. MX3 -2 COMPUTE UNIT OFFSET
  31720. SX4 12
  31721. BX3 -X3*X2
  31722. IX3 X3*X4
  31723. SB7 X3
  31724. AX5 B7 POSITION *PUT* ORDINAL
  31725. MX4 -12
  31726. BX3 -X4*X5
  31727. LX3 PUTLS
  31728. MX1 -24
  31729. TA2 X3+UNCT,PUT READ *PUT* ENTRY
  31730. LX2 -12
  31731. BX4 -X4*X2 CURRENT
  31732. LX2 12
  31733. LX4 CBTLS
  31734. TA5 X4+IOLK,CBT
  31735. TA3 X4+PAD1,CBT SET CONTROL BUFFER ADDRESS
  31736. PL X5,IOL6 IF I/O INTERLOCK CLEAR
  31737. SX3 B1
  31738. LX5 -57
  31739. BX3 X5*X3
  31740. SX4 B5 FUNCTION
  31741. IX4 X4-X3
  31742. NZ X4,IOL6 IF FUNCTIONS DO NOT MATCH
  31743. MX3 1
  31744. BX7 X7-X7
  31745. BX6 X3+X5 SET I/O LINKUP
  31746. SA7 A0 SET *GO* TO *FLPP*
  31747. LX6 57
  31748. SA6 A5
  31749. NZ X0,DCS IF ABORT DURING I/O LINKUP
  31750. RO B2 SIGNAL MASTER *FLPP*
  31751. IOL5 OB7 B2
  31752. ZR B7,IOL5 IF MASTER HAS NOT ACCEPTED
  31753. BX0 -X1*X6 I/O BUFFER ADDRESS
  31754. NZ B5,WRT IF WRITE
  31755. EQ RDD READ
  31756.  
  31757. IOL6 NZ X0,DCS IF ABORT DURING I/O LINKUP
  31758. EQ * HANG
  31759. RAB SPACE 4,20
  31760. ** RAB - READ ABORT PROCESSOR.
  31761. *
  31762. * XP SLAVE INPUT.
  31763. *
  31764. * ENTRY (A0) = CM BUFFER ADDRESS.
  31765. * (A1) = PARTNER XP ADDRESS.
  31766. * (A2) = *PUT* ENTRY ADDRESS.
  31767. * (A3) = CONTROL BUFFER ADDRESS.
  31768. * (B4) = CHANNEL NUMBER.
  31769. * (B5) = READ RECOVERY INDEX.
  31770. * (X0) = LCM BUFFER ADDRESS.
  31771. *
  31772. * EXIT TO *DCS*.
  31773. *
  31774. * USES X - 1, 2, 3, 4, 5, 6, 7.
  31775. * A - 2, 3, 4, 5, 6, 7.
  31776. * B - 6, 7.
  31777.  
  31778.  
  31779. RAB SA5 A1 RESET MASTER XP
  31780. SA4 A0 GET STATUS
  31781. SX3 IOA NEW (P)
  31782. MX6 -36
  31783. LX3 36
  31784. BX6 -X6*X5 CLEAR OLD (P)
  31785. LX4 59-58
  31786. BX6 X6+X3 INSERT NEW (P)
  31787. MX7 1
  31788. SA6 A5
  31789. MX1 -3
  31790. PL X4,DCS IF NOT A READ ERROR
  31791. SA5 A1+5 READ MASTER XP
  31792. BX5 -X1*X5 (B5) = READ RECOVERY INDEX
  31793. SA2 A2 READ *PUT* ENTRY
  31794. ERRNZ UNCT INDEX MUST BE ZERO
  31795. LX1 -6
  31796. SB7 X5
  31797. BX2 X1*X2
  31798. GT B7,B5,RAB1 IF MASTER NEXT
  31799. SX5 B5
  31800. RAB1 SB6 X5-1
  31801. SB7 X5-PSLB
  31802. LX5 54
  31803. SA4 A3+B6 ADDRESS OF SECTOR IN ERROR
  31804. MX1 2
  31805. LX1 23-59
  31806. BX6 X1*X4 CLEAR VALID DATA FLAGS
  31807. BX6 -X6
  31808. BX6 X1*X6
  31809. BX6 X6+X4
  31810. SA6 A4
  31811. NG B7,RAB2 IF NOT LAST SECTOR
  31812. BX5 X5-X5 CLEAR NEW READ RECOVERY INDEX
  31813. RAB2 BX7 X5+X2 SET NEW READ RECOVERY INDEX
  31814. SA7 A2
  31815. SX7 B4+ CLEAR POSSIBLE CONTINUATION REQUEST
  31816. AX7 CCTLS/2
  31817. MX6 1
  31818. SA6 NRQT-1+X7
  31819. EQ DCS DECODE STATUS
  31820. RDD SPACE 4,15
  31821. ** RDD - READ DISK.
  31822. *
  31823. * ENTRY (A0) = CM BUFFER ADDRESS.
  31824. * (A1) = PARTNER XP ADDRESS.
  31825. * (A2) = *PUT* ENTRY ADDRESS.
  31826. * (A3) = CONTROL BUFFER ADDRESS.
  31827. * (X0) = LCM BUFFER ADDRESS.
  31828. * (X2) = *PUT* ENTRY.
  31829. *
  31830. * USES X - ALL.
  31831. * A - ALL.
  31832. * B - 3, 5, 6, 7.
  31833. *
  31834. * CALLS /BUFIO/DLB, FNR, RAB, SAA, /BUFIO/SBR, SCB.
  31835.  
  31836.  
  31837. RDD SA1 A1 SET UP PARTNER XP
  31838. SA4 A1+2
  31839. MX6 -3
  31840. LX2 6
  31841. SX7 RDD3 ENTRY ADDRESS FOR MASTER XP
  31842. SA5 A4+B1
  31843. BX2 -X6*X2 RECOVERY INDEX
  31844. MX3 42
  31845. LX7 36
  31846. LX3 18
  31847. SB5 X2 RECOVERY INDEX
  31848. BX4 X3*X4 CLEAR (A2)
  31849. BX5 X3*X5 CLEAR (A3)
  31850. SX6 A2
  31851. SX3 A3
  31852. LX6 18
  31853. LX3 18
  31854. BX6 X4+X6 INSERT NEW (A2)
  31855. SA6 A4
  31856. SA4 A1+5
  31857. BX6 X5+X3 INSERT NEW (A3)
  31858. SB7 B5-PSLB+1
  31859. SA6 A5
  31860. MX3 42
  31861. MX5 -36
  31862. SX6 X2+B1 RECOVERY INDEX FOR PARTNER
  31863. BX4 X3*X4 CLEAR (B5)
  31864. BX1 -X5*X1 CLEAR (P)
  31865. BX6 X6+X4 INSERT NEW (B5)
  31866. BX7 X7+X1 INSERT NEW (P)
  31867. SA6 A4+
  31868. LX2 9
  31869. SA7 A1+
  31870. IX0 X0+X2 OFFSET LCM ADDRESS BY RECOVERY INDEX
  31871. NZ B7,RDD1 IF NOT LAST SECTOR
  31872. MX7 1
  31873. SA7 A0
  31874. RDD1 SX4 1000B
  31875. SB3 RDD2 *SAA* RETURN ADDRESS
  31876. IX6 X0+X4
  31877. RO B2 SIGNAL MASTER
  31878. SA6 A1+10B SET NEW (X0)
  31879. EQ SAA SET ACCOUNTING ADJUSTMENT
  31880.  
  31881. RDD2 MJ EXIT
  31882.  
  31883. * FIRST INTERRUPT.
  31884.  
  31885. RDD3 TB7 READ REAL-TIME CLOCK
  31886. IB3 B4 CHECK FOR FULL BUFFER
  31887. SA4 A0 READ HEADER
  31888. MX5 2
  31889. SB6 200B
  31890. SX7 B7
  31891. LX5 -12
  31892. SB3 B3-B6
  31893. BX6 X5*X4 UNIT NUMBER
  31894. SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  31895. NG B3,RAB IF READ ABORT
  31896. SA0 A0+B1
  31897. BX4 -X5*X4 CLEAR UNIT
  31898. WE 177B
  31899. + LX6 2
  31900. SX2 177B
  31901. BX6 X6+X4 INSERT UNIT NUMBER
  31902. IX0 X0+X2 INCREMENT LCM ADDRESS
  31903. SA0 A0+177B INCREMENT CM ADDRESS
  31904. SA6 A3+B5 SET HEADER IN CONTROL BUFFER
  31905. SB3 RDD4 *SAA* RETURN ADDRESS
  31906. EQ SAA SET ACCOUNTING ADJUSTMENT
  31907.  
  31908. RDD4 MJ EXIT
  31909.  
  31910. * SECOND INTERRUPT.
  31911.  
  31912. TB7 READ REAL-TIME CLOCK
  31913. SX2 200B
  31914. SX7 B7
  31915. WE 200B
  31916. + SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  31917. SA0 A0-B6 RESET CM ADDRESS
  31918. IX0 X0+X2 INCREMENT LCM ADDRESS
  31919. SB3 RDD5 *SAA* RETURN ADDRESS
  31920. EQ SAA SET ACCOUNTING ADJUSTMENT
  31921.  
  31922. RDD5 MJ EXIT
  31923.  
  31924. * THIRD INTERRUPT.
  31925.  
  31926. TB7 READ REAL-TIME CLOCK
  31927. BX7 X7-X7 *GO* FOR NEXT SECTOR
  31928. SB3 PSLB-2 CHECK FOR NEXT TO LAST SECTOR
  31929. WE 200B
  31930. + SX6 B7
  31931. IX0 X0+X2 INCREMENT LCM ADDRESS
  31932. SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  31933. SA0 A0+B6 INCREMENT CM ADDRESS
  31934. NE B3,B5,RDD6 IF NOT NEXT TO LAST SECTOR
  31935. SB7 B0 SET READ PROCESSING FOR *FNR*
  31936. SB3 RDD6 *FNR* RETURN ADDRESS
  31937. EQ FNR FIND NEXT REQUEST
  31938.  
  31939. RDD6 SB3 RDD7 *SAA* RETURN ADDRESS
  31940. EQ SAA SET ACCOUNTING ADJUSTMENT
  31941.  
  31942. RDD7 MJ EXIT
  31943.  
  31944. * FOURTH INTERRUPT.
  31945.  
  31946. TB7 READ REAL-TIME CLOCK
  31947. SX2 B6
  31948. - WL 200B
  31949. SX6 B7
  31950. SA0 A0-B6 RESET CM ADDRESS
  31951. SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  31952. RDD8 IB3 B4
  31953. SA5 A0
  31954. NE B3,B1,RDD8 IF LAST WORD NOT PRESENT
  31955. IX0 X0+X2 INCREMENT LCM ADDRESS
  31956. SB5 B5+2 INCREMENT SECTOR COUNT
  31957. SX2 B1
  31958. WX5 X0 WRITE LAST WORD TO BUFFER
  31959. SX4 1000B
  31960. IX0 X0+X2
  31961. SA7 A0+ SEND CONTROL WORD TO *FLPP*
  31962. SB3 PSLB+1
  31963. RI B4 RESET I/O BUFFER POINTERS
  31964. IX0 X0+X4 INCREMENT LCM BUFFER ADDRESS
  31965. RO B4
  31966. MX7 -57
  31967. EQ B3,B5,RDD9 IF LAST SECTOR
  31968. SB3 RDD2 *SAA* RETURN ADDRESS
  31969. EQ SAA SET ACCOUNTING ADJUSTMENT
  31970.  
  31971. RDD9 SA2 A2 READ *PUT* ENTRY
  31972. ERRNZ UNCT INDEX MUST BE ZERO
  31973. LX7 -3
  31974. SB3 RDD10 *DLB* RETURN ADDRESS
  31975. BX2 -X7*X2 CLEAR RECOVERY INDEX
  31976. EQ /BUFIO/DLB DELETE BUFFER
  31977.  
  31978. RDD10 SB3 RDD11 *SRC* RETURN ADDRESS
  31979. SB7 B0+ SET INPUT XP
  31980. EQ /BUFIO/SBR SET BUFFER RECALL
  31981.  
  31982. RDD11 SX2 B4 GET NEXT REQUEST
  31983. SA5 A1+5 CLEAR PARTNER SECTOR COUNT
  31984. AX2 CCTLS/2
  31985. MX0 42
  31986. SA4 NRQT-1+X2
  31987. BX6 X0*X5 CLEAR (B5)
  31988. MX1 -24
  31989. SA6 A5
  31990. SA3 X4 READ NEXT CONTROL BUFFER
  31991. SX7 X4 CONTROL BUFFER ADDRESS
  31992. BX2 X4
  31993. SA5 A1+3
  31994. LX0 18
  31995. SA4 X4+IOLK
  31996. LX7 18
  31997. BX5 X0*X5 CLEAR (A3)
  31998. BX6 -X1*X4 LCM BUFFER ADDRESS
  31999. BX7 X5+X7 INSERT NEW (A3)
  32000. SA4 A2+RDST UPDATE READ STATISTICS
  32001. SX5 PSLB PHYSICAL SECTOR COUNT
  32002. SA6 A1+10B SET NEW (X0)
  32003. SA7 A5+
  32004. SX0 1000B
  32005. SB7 59-35
  32006. SB5 B1
  32007. IX7 X4+X5 INCREMENT ACCUMLATOR
  32008. IX0 X0+X6 LCM BUFFER ADDRESS
  32009. LX1 X7,B7
  32010. SB3 RDD13 *RXB* *SCB* RETURN ADDRESS
  32011. NG X1,RDD12 IF ACCUMULATOR OVERFLOW
  32012. SA7 A4+ UPDATE ACCUMULATOR
  32013. RDD12 NG X2,RXP IF NOT CONTINUING ON NEXT REQUEST
  32014. EQ SCB SET CURRENT BUFFER
  32015.  
  32016. RDD13 SB3 RDD2 *SAA* RETURN ADDRESS
  32017. EQ SAA SET ACCOUNTING ADJUSTMENT
  32018. RPP SPACE 4,10
  32019. ** RPP - REQUEST PSEUDO-PP.
  32020. *
  32021. * ENTRY (A4) = FWA OF CONTROL BUFFER + *LSLK*.
  32022. * (B3) = RETURN ADDRESS.
  32023. * (B4) = CHANNEL NUMBER.
  32024. * (B7) = 0 IF INPUT XP, 20B IF OUTPUT XP.
  32025. *
  32026. * USES X - 3, 4, 5, 6, 7.
  32027. * A - 5, 6, 7.
  32028.  
  32029.  
  32030. RPP SX4 B4 COMPUTE XP ADDRESS
  32031. LX4 5
  32032. SX4 X4+B7
  32033. SX3 B1
  32034. SA5 /MONITOR/MCU+X4+3 READ PSD
  32035. LX3 39
  32036. BX6 X3+X5 SET STEP MODE FLAG
  32037. SA6 A5+
  32038. TX7 A4-LSLK,-CBT COMPUTE CONTROL BUFFER ORDINAL
  32039. SA5 BMRI GET REQUEST QUEUE INDEX
  32040. AX7 3
  32041. SX6 X5+B1 INCREMENT INDEX
  32042. SA7 TBMR+X5 SET REQUEST IN QUEUE
  32043. SA6 A5+
  32044. JP B3 RETURN
  32045. RXP SPACE 4,10
  32046. ** RXP - RESET EXCHANGE PACKAGES.
  32047. *
  32048. * ENTRY (A1) = PARTNER XP ADDRESS.
  32049. * (B3) = RETURN ADDRESS.
  32050. * (B4) = CHANNEL NUMBER.
  32051. *
  32052. * USES X - 2, 3, 4, 6, 7.
  32053. * A - 4, 7.
  32054. * B - 3.
  32055. *
  32056. * CALLS SAA.
  32057.  
  32058.  
  32059. RXP SX2 B4 CHANNEL NUMBER
  32060. SX3 B1
  32061. SX7 IOA
  32062. BX3 X3*X2
  32063. MX6 -36
  32064. SB3 IOL2 *SAA* RETURN ADDRESS
  32065. SA4 A1+
  32066. NZ X3,RXP1 IF IN SLAVE
  32067. SX7 IOL3
  32068. SB3 IOAX *SAA* RETURN ADDRESS
  32069. RXP1 LX7 36
  32070. BX6 -X6*X4
  32071. BX7 X7+X6 INSERT NEW (P)
  32072. SA7 A4
  32073. ERRNZ SAA-* SUBROUTINES MUST BE CONSECUTIVE
  32074. * EQ SAA
  32075. SAA SPACE 4,10
  32076. ** SAA - SET ACCOUNTING ADJUSTMENT.
  32077. *
  32078. * ENTRY (B3) = RETURN ADDRESS.
  32079. * (RTCI) = REAL-TIME CLOCK AT INTERRUPT.
  32080. *
  32081. * USES X - 3, 4, 5, 6.
  32082. * A - 4, 5, 6.
  32083. * B - 7.
  32084.  
  32085.  
  32086. SAA SA4 RTCI REAL-TIME CLOCK AT INTERRUPT
  32087. SA5 CL+CPBT PROGRAM MODE BASE TIME OF ACTIVE JOB
  32088. TB7 READ REAL-TIME CLOCK
  32089. MX6 -18
  32090. SX3 B7
  32091. BX4 -X6*X4
  32092. BX6 -X6*X3
  32093. IX6 X6-X4 COMPUTE ACCOUNTING ADJUSTMENT
  32094. SX6 X6+80D ADJUST FOR NON-TIMED CODE
  32095. IX6 X5+X6 ADJUST START TIME
  32096. SA6 A5
  32097. JP B3 RETURN
  32098. SCB SPACE 4,10
  32099. ** SCB - SET CURRENT BUFFER.
  32100. *
  32101. * ENTRY (A2) = *PUT* ENTRY ADDRESS.
  32102. * (A3) = CONTROL BUFFER ADDRESS.
  32103. * (B3) = RETURN ADDRESS.
  32104. *
  32105. * USES X - 2, 5, 6.
  32106. * A - 2, 6.
  32107.  
  32108.  
  32109. SCB SA2 A2 *PUT* ENTRY
  32110. MX6 48
  32111. TX5 A3,-CBT COMPUTE CONTROL BUFFER ORDINAL
  32112. LX6 12
  32113. LX5 12-CBTLS
  32114. BX6 X6*X2 CLEAR CURRENT
  32115. BX6 X5+X6 INSERT NEW CURRENT
  32116. SA6 A2
  32117. JP B3 RETURN
  32118. WRT SPACE 4,15
  32119. ** WRT - WRITE DISK.
  32120. *
  32121. * ENTRY (A0) = CM BUFFER ADDRESS.
  32122. * (A1) = PARTNER XP ADDRESS.
  32123. * (A2) = *PUT* ENTRY ADDRESS.
  32124. * (A3) = CONTROL BUFFER ADDRESS.
  32125. * (X0) = LCM BUFFER ADDRESS.
  32126. * (X2) = *PUT* ENTRY.
  32127. *
  32128. * USES X - ALL.
  32129. * A - 0, 2, 3, 4, 5, 6, 7.
  32130. * B - 3, 5, 6, 7.
  32131. *
  32132. * CALLS /BUFIO/DLB, FNR, SAA, SCB, /BUFIO/SBR.
  32133.  
  32134.  
  32135. WRT SA4 A1+20B+2 SET UP PARTNER XP
  32136. MX6 42
  32137. SA3 A3 READ CONTROL BUFFER
  32138. ERRNZ PAD1 CODE DEPENDS ON VALUE
  32139. MX1 2
  32140. LX6 18
  32141. SA5 A4+B1
  32142. LX1 49-59
  32143. MX7 -48
  32144. BX4 X6*X4 CLEAR (A2)
  32145. BX1 X1*X3 UNIT NUMBER
  32146. BX7 -X7*X3 CLEAR FLAGS
  32147. LX1 -2
  32148. BX5 X6*X5 CLEAR (A3)
  32149. BX7 X1+X7 INSERT UNIT NUMBER
  32150. SX6 A2
  32151. SA7 A0 SET HEADER WORD IN SECTOR
  32152. LX6 18
  32153. SA0 A0+B1
  32154. SX7 A3
  32155. BX6 X6+X4 INSERT NEW (A2)
  32156. LX7 18
  32157. SA6 A4
  32158. BX7 X7+X5 INSERT NEW (A3)
  32159. SX3 377B
  32160. - RL 377B FILL CM BUFFER
  32161. SA7 A5
  32162. IX6 X0+X3
  32163. SA4 A1+20B+5
  32164. SA6 A1+20B+10B SET (X0)
  32165. MX5 42
  32166. SA0 A0-B1 RESET CM BUFFER ADDRESS
  32167. BX7 X5*X4 CLEAR (B5) = READ RECOVERY INDEX
  32168. SB3 IOL2 *SAA* RETURN ADDRESS
  32169. SA7 A4
  32170. RO B2 SIGNAL MASTER FLPP
  32171. EQ SAA SET ACCOUNTING ADJUSTMENT
  32172.  
  32173. WRTX MJ EXIT
  32174.  
  32175. * FIRST INTERRUPT.
  32176.  
  32177. WRT1 TB7 READ REAL-TIME CLOCK
  32178. SB3 WRT2 *SAA* RETURN ADDRESS
  32179. SX7 B7
  32180. SB6 200B ADDRESS INCREMENT
  32181. SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  32182. SX2 B6+
  32183. - RL 200B
  32184. IX0 X0+X2 INCREMENT LCM ADDRESS
  32185. SA0 A0+B6 INCREMENT CM ADDRESS
  32186. EQ SAA SET ACCOUNTING ADJUSTMENT
  32187.  
  32188. WRT2 MJ EXIT
  32189.  
  32190. * SECOND INTERRUPT.
  32191.  
  32192. TB7 READ REAL-TIME CLOCK
  32193. SB3 WRT3 *SAA* RETURN ADDRESS
  32194. SX7 B7
  32195. SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  32196. - RL 200B
  32197. IX0 X0+X2 INCREMENT LCM ADDRESS
  32198. SA0 A0-B6 RESET CM ADDRESS
  32199. EQ SAA SET ACCOUNTING ADJUSTMENT
  32200.  
  32201. WRT3 MJ EXIT
  32202.  
  32203. * THIRD INTERRUPT.
  32204.  
  32205. TB7 READ REAL-TIME CLOCK
  32206. RX6 X0 READ LAST WORD
  32207. SB3 PSLB-1
  32208. SX7 B7
  32209. SB5 B5+B1 INCREMENT SECTOR COUNT
  32210. SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  32211. SB7 B1 *FNR* CONTROL
  32212. SX7 B1
  32213. SA6 A0 LAST WORD OF SECTOR TO BUFFER
  32214. IX0 X0+X7
  32215. EQ B3,B5,WRT6 IF NEXT TO LAST SECTOR
  32216. SB3 B3+B1
  32217. BX7 X7-X7 *GO*
  32218. NE B3,B5,WRT7 IF NOT LAST SECTOR
  32219. SB3 WRT4 *DLB* RETURN ADDRESS
  32220. SA2 A2 *PUT* ENTRY
  32221. ERRNZ UNCT INDEX MUST BE ZERO
  32222. EQ /BUFIO/DLB DELETE BUFFER
  32223.  
  32224. WRT4 SB3 WRT5 *SRC* RETURN ADDRESS
  32225. SB6 200B RESET B6
  32226. SB7 20B SET OUTPUT XP
  32227. EQ /BUFIO/SBR SET BUFFER RECALL
  32228.  
  32229. WRT5 SA5 A2+WTST UPDATE WRITE STATISTICS
  32230. SX6 PSLB PHYSICAL SECTOR COUNT
  32231. SX7 B4 CHANNEL NUMBER
  32232. IX6 X5+X6 INCREMENT ACCUMULATOR
  32233. AX7 1
  32234. LX6 59-35
  32235. SA4 NRQT-1+X7 CHECK FOR CONTINUATION
  32236. SB5 B0+ CLEAR READ RECOVERY INDEX
  32237. NG X6,WRT5.1 IF ACCUMULATOR OVERFLOW
  32238. LX6 35-59
  32239. SA6 A5 UPDATE ACCUMULATOR
  32240. WRT5.1 NG X4,WRT10 IF END OF TRANSFER
  32241. SA3 X4
  32242. SX6 A1 SET NEW CONTROL BUFFER INDEX IN XP
  32243. SA5 X4+IOLK
  32244. MX7 54
  32245. MX2 -24
  32246. BX3 X7*X6
  32247. BX0 -X2*X5
  32248. BX7 X7-X7 PRESET *CONTINUE*
  32249. MX2 42
  32250. SA5 X3+40B+3
  32251. SB3 WRT7 *SCB* RETURN ADDRESS
  32252. SX3 A3
  32253. LX2 18
  32254. LX3 18
  32255. BX6 X2*X5 CLEAR (A3)
  32256. BX6 X6+X3 INSERT NEW (A3)
  32257. SA6 A5
  32258. EQ SCB SET CURRENT BUFFER
  32259.  
  32260. WRT6 SB3 WRT7 *FNR* RETURN ADDRESS
  32261. EQ FNR FIND NEXT REQUEST
  32262.  
  32263. WRT7 SA0 A0+1
  32264. SX2 177B
  32265. RE 177B
  32266. + SB3 WRT8 *SAA* RETURN ADDRESS
  32267. IX0 X0+X2 INCREMENT LCM ADDRESS
  32268. SX2 B6
  32269. SA0 A0+177B INCREMENT CM ADDRESS
  32270. EQ SAA SET ACCOUNTING ADJUSTMENT
  32271.  
  32272. WRT8 MJ EXIT
  32273.  
  32274. * FOURTH INTERRUPT.
  32275.  
  32276. TB7 READ REAL-TIME CLOCK
  32277. MX1 2
  32278. SA5 A3+B5 GET HEADER FOR NEXT SECTOR
  32279. MX3 -48
  32280. LX1 -10
  32281. SX6 B7
  32282. - RL 200B
  32283. SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  32284. BX1 X1*X5 UNIT NUMBER
  32285. BX3 -X3*X5
  32286. LX1 -2
  32287. SA0 A0-B6 RESET CM ADDRESS
  32288. BX3 X1+X3 INSERT UNIT NUMBER
  32289. IX0 X0+X2
  32290. WRT9 OB3 B4
  32291. ZR B3,WRT9 IF LAST WORD STILL PRESENT
  32292. BX7 X7+X3
  32293. SA7 A0
  32294. RO B2 RESET I/O BUFFER POINTERS
  32295. SA4 A1+2 RESET PARTNER XP
  32296. SA5 A1+3
  32297. BX6 X0
  32298. SX2 A2
  32299. SA6 A1+10B SET (X0) IN PARTNER XP
  32300. LX2 18
  32301. MX1 42
  32302. SX3 A3
  32303. LX1 18
  32304. LX3 18
  32305. BX4 X1*X4 CLEAR (A2)
  32306. BX5 X1*X5 CLEAR (A3)
  32307. BX6 X4+X2 INSERT NEW (A2)
  32308. BX7 X5+X3 INSERT NEW (A3)
  32309. SA6 A4
  32310. SA7 A5
  32311. MX1 42
  32312. SA4 A1+5
  32313. SX6 B5
  32314. SB3 WRTX *SAA* RETURN ADDRESS
  32315. BX4 X1*X4 CLEAR (B5)
  32316. BX6 X4+X6 INSERT NEW (B5)
  32317. SA6 A4
  32318. EQ SAA SET ACCOUNTING ADJUSTMENT
  32319.  
  32320. WRT10 SB3 WRT11 *SAA* RETURN ADDRESS
  32321. EQ SAA SET ACCOUNTING ADJUSTMENT
  32322.  
  32323. WRT11 MJ EXIT
  32324.  
  32325. TB7 READ REAL-TIME CLOCK
  32326. RO B2 INDICATE TRANSFER COMPLETE TO *FLPP*
  32327. SX7 B7+
  32328. SB3 WRTX *SAA* RETURN ADDRESS
  32329. SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
  32330. EQ SAA SET ACCOUNTING ADJUSTMENT
  32331.  
  32332. ENDBLK
  32333. BLOCK DCP,(DUAL CPU OPERATION.)
  32334. PCXF SPACE 4,15
  32335. ** PCXF - PROCESS CPU EXCHANGE REQUEST.
  32336. *
  32337. * ENTRY
  32338. *T, X0 42/,18/ PCXF
  32339. * (X5) = MONITOR MODE ENTRY TIME IF 180 MACHINE.
  32340. *
  32341. * EXIT TO */MONITOR/PMN4*.
  32342. *
  32343. * USES X - 1, 2, 3, 4, 7.
  32344. * A - 1, 7.
  32345. * B - 3.
  32346.  
  32347. PCX SA1 CL+CACX+A0 READ REQUEST WORD
  32348. NX3,B3 X1 SET PPU NUMBER
  32349. SX4 B1
  32350. ZR X1,/MONITOR/MTRX IF NO REQUESTS PRESENT
  32351. LX4 47
  32352. SX2 B3 SET OUTPUT REGISTER OFFSET
  32353. AX3 X4,B3
  32354. BX7 X1-X3
  32355. LX2 3
  32356. SA7 A1
  32357. TX0 X2+1,FP SET OUTPUT REGISTER ADDRESS
  32358. EQ /MONITOR/PMN4 PROCESS FUNCTION
  32359. ACQ SPACE 4,10
  32360. ** ACQ - *ACQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
  32361. *
  32362. * ENTRY JOB ACTIVE IN THIS CPU.
  32363. * (B7) = CONTROL POINT ADDRESS.
  32364. *
  32365. * USES X - 1.
  32366. * A - 1.
  32367. * B - 6.
  32368. *
  32369. * EXIT TO *ACQ* VIA *CCC*.
  32370.  
  32371.  
  32372. ACQ BSS 0 ENTRY
  32373. SA1 B7+CWQW
  32374. SB6 /BUFIO/ACQ SET EXIT ADDRESS
  32375. EQ CCC CHECK CACHE MACHINE CPU SELECTION
  32376. APQ SPACE 4,10
  32377. ** APQ - *APQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
  32378. *
  32379. * ENTRY JOB ACTIVE IN THIS CPU.
  32380. * (B7) = CONTROL POINT ADDRESS.
  32381. *
  32382. * USES X - 1.
  32383. * A - 1.
  32384. * B - 6.
  32385. *
  32386. * EXIT TO *APQ* VIA *CCC*.
  32387.  
  32388.  
  32389. APQ BSS 0 ENTRY
  32390. SA1 B7+CWQW
  32391. SB6 /MONITOR/APQ SET EXIT ADDRESS
  32392. EQ CCC CHECK CACHE MACHINE CPU SELECTION
  32393. CCA SPACE 4,15
  32394. ** CCA - DUAL CPU CACHE MACHINE *CCAM* PROCESSOR.
  32395. *
  32396. * ENTRY JOB ACTIVE IN THIS CPU IF CPU 1.
  32397. * (B3) = *JAV* RETURN ADDRESS.
  32398. * (B7) = OLD CONTROL POINT ADDRESS.
  32399. * (X6) = OLD CONTROL POINT *STSW*.
  32400. * (B6) = NEW CONTROL POINT ADDRESS.
  32401. * (X0) .GE. 0 IF OLD CP/PCP IS SYSTEM CP OR PCP.
  32402. *
  32403. * EXIT TO */MONITOR/JAV* IF OLD CP JOB ADVANCE TO BE CHECKED.
  32404. * TO *PPRX* IF OLD CP JOB ADVANCE NOT TO BE CHECKED.
  32405. * (B7) = OLD CONTROL POINT ADDRESS.
  32406. *
  32407. * USES X - 1, 2.
  32408. * A - 1.
  32409. * B - 4, 6.
  32410.  
  32411.  
  32412. CCA BSS 0 ENTRY
  32413. TX2 B6,-SCA
  32414. PL X0,CCA1 IF OLD CP/PCP IS SYSTEM CP OR PCP
  32415. SB4 CCA1 SET *CPA* RETURN ADDRESS
  32416. EQ CPA CHECK OLD CP ACTIVITY
  32417.  
  32418. CCA1 SA1 B6+CWQW
  32419. SB6 /MONITOR/JAV SET TO CHECK ADVANCE ON OLD CP
  32420. NG X0,CCA2 IF OLD CP/PCP IS NOT SYSTEM CP OR PCP
  32421. SB6 /MONITOR/PPRX SET TO NOT CHECK ADVANCE ON OLD CP
  32422. CCA2 PL X2,/MONITOR/RB6 IF NEW CP/PCP IS SYSTEM CP OR PCP
  32423. * EQ CCC CHECK NEW CP CPU SELECTION
  32424. CCC SPACE 4,15
  32425. ** CCC - CHECK CPU SELECTION FOR DUAL CPU CACHE MACHINE.
  32426. *
  32427. * ENTRY JOB ACTIVE IN THIS CPU.
  32428. * (B6) = EXIT ADDRESS.
  32429. * (X1) = *CWQW*.
  32430. * (A1) = ADDRESS OF *CWQW*.
  32431. *
  32432. * EXIT ASSIGNMENT OF CPU 1 PROHIBITED.
  32433. * CPU SWITCH REQUESTED IF EXECUTING IN CPU 1.
  32434. *
  32435. * USES X - 1, 2, 7.
  32436. * A - 1, 7.
  32437.  
  32438.  
  32439. CCC BSS 0 ENTRY
  32440. SX7 B1
  32441. SX2 A0
  32442. LX7 24-0
  32443. BX7 X1+X7 DISALLOW ASSIGNMENT OF CPU 1
  32444. SA7 A1
  32445. ZR X2,/MONITOR/RB6 IF JOB IN CPU 0
  32446. MX7 1
  32447. SA1 CSWL+A0
  32448. BX7 X7+X1 SET CPU SWITCH REQUEST
  32449. SA7 A1
  32450. JP B6 EXIT TO SPECIFIED ROUTINE
  32451. CPA SPACE 4,15
  32452. ** CPA - CHECK PP AND TAPE ACTIVITY FOR DUAL CPU CACHE MACHINE.
  32453. *
  32454. * ENTRY (B4) = RETURN ADDRESS.
  32455. * (X6) = *STSW*.
  32456. * (B7) = CONTROL POINT ADDRESS.
  32457. *
  32458. * EXIT CPU ASSIGNMENT FLAGS RESTORED FROM USER CPU SELECTION
  32459. * IF NO PP OR TAPE ACTIVITY.
  32460. * (X6) = *STSW*.
  32461. * (B7) = CONTROL POINT ADDRESS.
  32462. *
  32463. * USES X - 1, 3, 7.
  32464. * A - 1, 3, 7.
  32465.  
  32466. CPA BSS 0 ENTRY
  32467. TX1 B7,-SCA
  32468. PL X1,/MONITOR/RB4 IF SYSTEM CP OR PCP
  32469. SX7 360B
  32470. MX1 4
  32471. LX1 48-56
  32472. BX7 X7+X1
  32473. BX7 X7*X6
  32474. NZ X7,/MONITOR/RB4 IF REMAINING PP OR TAPE ACTIVITY
  32475. SA1 B7+JCIW
  32476. SA3 B7+CWQW
  32477. MX7 58
  32478. LX7 24
  32479. LX1 24-36
  32480. BX3 X7*X3 CLEAR CPU ASSIGNMENT FLAGS
  32481. BX1 -X7*X1 CPU SELECTION
  32482. BX7 X3+X1 RESET CPU ASSIGNMENT FLAGS
  32483. SA7 A3+
  32484. JP B4 RETURN
  32485. CPE SPACE 4,10
  32486. ** CPE - CPU SELECTION.
  32487. *
  32488. * ENTRY (B6) = EXIT ADDRESS.
  32489. * (B7) = CONTROL POINT ADDRESS.
  32490. *
  32491. * USES A - 4.
  32492. * B - 4.
  32493. * X - 4, 6.
  32494.  
  32495.  
  32496. CPE BSS 0 ENTRY
  32497. SB4 A0-CPAL-1 CHECK IF JOB IS ACTIVE IN THE OPPOSITE CPU
  32498. TX6 B7,-SCA CHECK FOR SYSTEM CONTROL POINT
  32499. SA4 -B4
  32500. ZR X6,CPE1 IF SYSTEM CONTROL POINT
  32501. AX4 24
  32502. SB4 X4+
  32503. EQ B4,B7,SAX IF JOB ACTIVE IN OPPOSITE CPU
  32504. CPE1 JP B6 RETURN
  32505. CPS SPACE 4
  32506. ** CPS - CPU SELECTION.
  32507. *
  32508. * ENTRY FROM PPR.
  32509.  
  32510.  
  32511. CPS BSS 0 ENTRY
  32512. SB4 A0-CPAL-1 CHECK IF JOB IS ACTIVE IN THE OPPOSITE CPU
  32513. TX6 B7,-SCA CHECK FOR SYSTEM CONTROL POINT
  32514. SA4 -B4
  32515. ZR X6,CPS1 IF SYSTEM CONTROL POINT
  32516. AX4 24
  32517. SB4 X4+
  32518. EQ B4,B7,SAX IF JOB ACTIVE ON OPPOSITE CPU
  32519.  
  32520. ** EXIT TO PROCESSOR WITH -
  32521. * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
  32522. * (X2) = *ACPP*.
  32523. * (X3) = PROCESOR CONTROL WORD.
  32524. * (X5) = OUTPUT REGISTER.
  32525. * (X7) = 0.
  32526. * (A2) = *ACPP* ADDRESS.
  32527. * (B6) = PROCESSOR ADDRESS.
  32528. * (B7) = CONTROL POINT ADDRESS.
  32529.  
  32530. CPS1 TJP (/PROBE/PPR,PROBE,B6) PROCESS REQUEST
  32531. DCP SPACE 4,20
  32532. ** DCP - DUAL CPU *DCPM* FUNCTION PROCESSOR.
  32533. *
  32534. * EXIT TO /MONITOR/DCP3.
  32535. *
  32536. * ENTRY (X3) = *CWQW*.
  32537. * (A3) = *CWQW* ADDRESS.
  32538. * (X4) = 42 BIT MASK LEFT JUSTIFIED.
  32539. *
  32540. * EXIT TO */MONITOR/DCP3*.
  32541. * (X3) = *CWQW*.
  32542. * (A3) = *CWQW* ADDRESS.
  32543. * (X4) = 42 BIT MASK LEFT JUSTIFIED.
  32544. *
  32545. * USES X - 2, 6.
  32546. * A - 2, 6.
  32547. * B - 4.
  32548.  
  32549.  
  32550. * CLEAR *WQ* POINTER FROM PENDING CPU SWITCH REQUEST.
  32551.  
  32552. DCP SA2 CSWL CPU 0 SWITCH REQUEST
  32553. LX2 -24
  32554. SB4 X2
  32555. SB4 A3-B4
  32556. ZR B4,DCP1 IF SWITCH REQUEST FOR THIS JOB
  32557. SA2 A2+B1 CPU 1 SWITCH REQUEST
  32558. LX2 -24
  32559. SB4 X2+
  32560. SB4 A3-B4
  32561. NZ B4,/MONITOR/DCP3 IF NOT SWITCH REQUEST FOR THIS JOB
  32562. DCP1 BX6 X4*X2 CLEAR *WQ* POINTER FROM SWITCH REQUEST
  32563. LX6 24
  32564. SA6 A2+
  32565. EQ /MONITOR/DCP3 REMOVE *WQ* ENTRY
  32566. SJC SPACE 4,20
  32567. ** SJC - DUAL CPU CACHE MACHINE *SJCM* FUNCTION PROCESSOR.
  32568. *
  32569. * ENTRY (X6) = *CWQW* WITH NEW CPU SELECTION.
  32570. * (A2) = *JCIW* ADDRESS.
  32571. * (X2) = *JCIW*.
  32572. * (X5) = NEW CPU SELECTION LEFT SHIFTED 24 BITS.
  32573. * (X3) = CPU SELECTION MASK LEFT SHIFTED 24 BITS.
  32574. *
  32575. * EXIT TO /MONITOR/SJC3.
  32576. * (X6) = *CWQW* WITH NEW CPU SELECTION.
  32577. * (A2) = *JCIW* ADDRESS.
  32578. * (X2) = *JCIW*.
  32579. * (X5) = NEW CPU SELECTION LEFT SHIFTED 24 BITS.
  32580. * (X3) = CPU SELECTION MASK LEFT SHIFTED 24 BITS.
  32581. *
  32582. * USES X - 6, 7.
  32583.  
  32584.  
  32585. SJC BSS 0 ENTRY
  32586.  
  32587. * THE ASSIGNMENT OF CPU 1 IS PROHIBITED IN CASE THE PP ISSUING
  32588. * THE *SJCM* FUNCTION IS ASSIGNED TO A SUBSYSTEM WHILE OTHER
  32589. * PP-S ARE ASSIGNED. WHEN THE REQUESTING PP DROPS, THE *DPPM*
  32590. * PROCESSOR WILL RESET THE *CWQW* CPU ASSIGNMENT FLAGS FROM THE
  32591. * *JCIW* CPU SELECTION IF NO OTHER ACTIVITY IS PRESENT.
  32592.  
  32593.  
  32594. SJC BSS 0 ENTRY
  32595. SX7 1 DISALLOW ASSIGNMENT OF CPU 1
  32596. LX7 24-0
  32597. BX6 X6+X7
  32598. EQ /MONITOR/SJC3 RETURN TO MAIN *SJCM* PROCESSOR
  32599. BNJ SPACE 4,15
  32600. ** BNJ - EXTENSION TO *BNJ* FOR DUAL CPU MACHINES.
  32601. *
  32602. * ENTRY (X6) = 42 BIT MASK LEFT JUSTIFIED.
  32603. *
  32604. * EXIT TO */MONITOR/BNJ16*.
  32605. * (X3) = *CWQW* OF NEW JOB (DELINKED FROM *WQ*).
  32606. * (A3) = *CWQW* ADDRESS OF NEW JOB.
  32607. * (B4) = PRIORITY WITH FLAGS OF NEW JOB.
  32608. *
  32609. * USES X - ALL.
  32610. * A - 1, 2, 3, 4, 7.
  32611. * B - 3, 4, 5, 6.
  32612. *
  32613. * CALLS /MONITOR/ACS.
  32614.  
  32615.  
  32616. BNJ BSS 0 ENTRY
  32617.  
  32618. * SEARCH *WQ* FOR JOB THAT CAN USE THIS CPU AND UPDATE *WQ*
  32619. * LINKAGE.
  32620. * SEARCH LOOP REPLICATED FOR PERFORMANCE.
  32621.  
  32622. SA1 WQRL GET *WQ* POINTER
  32623. SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
  32624. BNJ1 SA3 X1 GET NEXT ENTRY
  32625. LX7 B6,X3
  32626. PL X7,BNJ2 IF JOB CAN USE THIS CPU
  32627. SA1 X3 GET NEXT ENTRY
  32628. LX7 B6,X1
  32629. NG X7,BNJ1 IF JOB CANNOT USE THIS CPU
  32630. BX7 -X6*X1 EXTRACT *WQ* LINK
  32631. BX3 X6*X3
  32632. BX7 X3+X7 MERGE LINK IN PREVIOUS ENTRY
  32633. SA7 A3 UPDATE *WQ* LINKAGE
  32634. SA3 A1+ GET SELECTED ENTRY
  32635. EQ BNJ3 CLEAR *WQ* LINK IN SELECTED ENTRY
  32636.  
  32637. BNJ2 BX7 -X6*X3 EXTRACT *WQ* LINK
  32638. BX1 X6*X1
  32639. BX7 X1+X7 MERGE LINK IN PREVIOUS ENTRY
  32640. SA7 A1 UPDATE *WQ* LINKAGE
  32641. BNJ3 UX0,B4 X3 UNPACK PRIORITY
  32642. BX7 X6*X3 CLEAR *WQ* LINK IN SELECTED ENTRY
  32643. ZR B4,BNJ3 IF NOT VALID *WQ* ENTRY FOR SELECTION
  32644. SA7 A3+
  32645. BX3 X7
  32646. LX7 59-49
  32647. NG X7,BNJ11 IF ACTIVE CPU SLICE
  32648.  
  32649. * SEARCH *WQ* FOR FIRST ENTRY AT OR BELOW PRIORITY OF NEW JOB
  32650. * AND ADVANCE CPU SERVICE CYCLE.
  32651. * SEARCH LOOP REPLICATED FOR PERFORMANCE.
  32652.  
  32653. SA1 WQRL GET *WQ* POINTER
  32654. SX7 3
  32655. SB3 BNJ5 SET *ACS* RETURN ADDRESS
  32656. LX7 48
  32657. BX7 X3+X7 SET PRIORITY FLAGS FOR COMPARISON
  32658. SX5 A3 SET NEW JOB *CWQW* ADDRESS
  32659. UX0,B6 X7 UNPACK PRIORITY WITH FLAGS
  32660. BNJ4 SA4 X1 GET NEXT ENTRY
  32661. UX0,B5 X4 UNPACK *WQ* ENTRY PRIORITY
  32662. LE B5,B6,/MONITOR/ACS IF ENTRY .LE. NEW JOB
  32663. SA1 X4 GET NEXT ENTRY
  32664. UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
  32665. GT B5,B6,BNJ4 IF ENTRY .GT. NEW JOB
  32666. SX0 X4
  32667. BX4 X1
  32668. SX1 X0+
  32669. EQ /MONITOR/ACS ADVANCE SERVICE CYCLE
  32670.  
  32671. * UPDATE SERVICE CYCLE OF JOB IN OTHER CPU IF SAME PRIORITY AS
  32672. * NEW JOB.
  32673.  
  32674. BNJ5 SB3 A0-CPAL-1
  32675. SA1 -B3 GET OTHER CPU *CPAL*
  32676. LX1 -24
  32677. SA2 X1+STSW
  32678. LX2 59-56
  32679. MX6 -58
  32680. NG X2,BNJ6 IF SUB-CP ACTIVE
  32681. LX1 24 SET EXCHANGE PACKAGE ADDRESS
  32682. BNJ6 SA1 X1+CWQW GET OTHER CPU JOB *CWQW*
  32683. LX6 48-58
  32684. BX1 -X6*X1 CLEAR PRIORITY FLAGS
  32685. UX0 B5,X1 UNPACK PRIORITY OF OTHER CPU JOB
  32686. NE B5,B6,BNJ7 IF NOT SAME PRIORITY
  32687. SA7 A1+B1 SET SERVICE CYCLE AND CLEAR ACCUMULATORS
  32688. ERRNZ CSAW-CWQW-1
  32689.  
  32690. * DETERMINE IF SETTING CPU SLICE ACTIVE HAS CHANGED THE ORDER
  32691. * OF *WQ*.
  32692.  
  32693. BNJ7 LX4 59-49
  32694. PL X4,BNJ11 IF ALL ENTRIES HAD INACTIVE SLICE
  32695. SA1 WQRL
  32696. SB5 1000B INITIALIZE PREVIOUS ENTRY PRIORITY
  32697. BNJ8 SX2 A1 SET PREVIOUS ENTRY ADDRESS
  32698. SA1 X1
  32699. SB3 B5 SET PREVIOUS ENTRY PRIORITY
  32700. UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
  32701. LT B5,B6,BNJ11 IF PRIORITY .LT. NEW JOB PRIORITY
  32702. LE B5,B3,BNJ8 IF ENTRY IN ORDER WITH PREVIOUS
  32703.  
  32704. * FIND END OF *WQ* ENTRIES TO MOVE AND DELINK FROM QUEUE.
  32705.  
  32706. BNJ9 SX4 A1 SET PREVIOUS ENTRY ADDRESS
  32707. SA1 X1+
  32708. UX0,B3 X1 UNPACK *WQ* ENTRY PRIORITY
  32709. EQ B3,B5,BNJ9 IF SAME PRIORITY AS PREVIOUS
  32710. SA2 X2
  32711. MX6 42
  32712. BX7 X6*X2 CLEAR OLD LINK
  32713. SX0 A1+
  32714. BX7 X7+X0 MERGE NEW LINK
  32715. SA7 A2+
  32716.  
  32717. * FIND POSITION IN *WQ* TO INSERT ENTRIES AND RELINK INTO
  32718. * QUEUE.
  32719.  
  32720. SA1 WQRL
  32721. BNJ10 SX7 A1 SET PREVIOUS ENTRY ADDRESS
  32722. SA1 X1+
  32723. UX0,B3 X1 UNPACK *WQ* ENTRY PRIORITY
  32724. LE B5,B3,BNJ10 IF POSITION NOT FOUND
  32725. SA4 X4 GET LAST ENTRY TO MOVE
  32726. BX2 -X6*X2 ADDRESS OF FIRST ENTRY TO MOVE
  32727. SX0 A1
  32728. SA1 X7
  32729. BX4 X6*X4 CLEAR OLD LINK
  32730. BX7 X4+X0 MERGE NEW LINK
  32731. SA7 A4
  32732. BX7 X6*X1 CLEAR OLD LINK
  32733. BX7 X7+X2 MERGE NEW LINK
  32734. SA7 A1
  32735.  
  32736. * SEARCH *WQ* FOR JOB THAT CAN PREEMPT JOB IN OTHER CPU.
  32737. * SEARCH LOOP REPLICATED FOR PERFORMANCE.
  32738.  
  32739. BNJ11 SB3 A0-CSWL-1
  32740. SA4 -B3 GET OTHER CPU *CSWL*
  32741. SA2 A4+TSCL-CSWL GET OTHER CPU *TSCL*
  32742. NG X4,/MONITOR/BNJ16 IF SWITCH REQUEST FOR OTHER CPU
  32743. SA1 WQRL GET *WQ* POINTER
  32744. SB6 A0-59+24 SET OTHER CPU SELECTION BIT SHIFT COUNT
  32745. UX0,B3 X2 UNPACK PRIORITY OF JOB IN OTHER CPU
  32746. SB6 -B6 SET SELECTION BIT FOR OTHER CPU
  32747. BNJ12 SA2 X1+ GET NEXT ENTRY
  32748. UX0,B5 X2 UNPACK *WQ* ENTRY PRIORITY
  32749. LX7 B6,X2
  32750. LE B5,B3,/MONITOR/BNJ16 IF ENTRY .LE. OTHER CPU JOB
  32751. PL X7,BNJ13 IF JOB CAN USE OTHER CPU
  32752. SA1 X2+ GET NEXT ENTRY
  32753. UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
  32754. LX7 B6,X1
  32755. LE B5,B3,/MONITOR/BNJ16 IF ENTRY .LE. OTHER CPU JOB
  32756. NG X7,BNJ12 IF JOB CANNOT USE OTHER CPU
  32757. BNJ13 MX7 1
  32758. BX7 X4+X7
  32759. SA7 A4+ REQUEST SWITCH OF OTHER CPU
  32760. EQ /MONITOR/BNJ16 SET ACTIVE CPU STATUS
  32761. RCC SPACE 4,30
  32762. ** RCC - EXTENSION TO *RCC* FOR DUAL CPU MACHINES.
  32763. *
  32764. * ENTRY (X1) = THIS CPU RECALL SLICE EXPIRATION TIME.
  32765. * (X2) = CURRENT MILLISECOND CLOCK.
  32766. * (X3) = *CWQW* OF RECALLED JOB.
  32767. * (X4) = *CSWL* FOR THIS CPU.
  32768. * (X7) = 24 BIT MASK LEFT JUSTIFIED.
  32769. * (A3) = *CWQW* ADDRESS OF RECALLED JOB.
  32770. * (A4) = ADDRESS OF *CSWL* FOR THIS CPU.
  32771. * (B3) = EXIT ADDRESS.
  32772. * (B4) = RECALLED JOB PRIORITY AND FLAGS.
  32773. * (B5) = THIS CPU JOB PRIORITY AND FLAGS.
  32774. *
  32775. * EXIT TO */MONITOR/RCC12* TO CHECK RECALL SLICE EXPIRATION
  32776. * FOR THIS CPU.
  32777. * TO */MONITOR/RCC13* TO UPDATE *CWQW* AND REQUEST CPU
  32778. * SWITCH.
  32779. * TO */MONITOR/RCC14* TO UPDATE *CWQW* AND CLEAR *MTR*
  32780. * BYPASS FLAG.
  32781. * (X3) = *CWQW* OF RECALLED JOB.
  32782. * (X4) = *CSWL* OF CPU FOR SWITCH REQUEST IF EXIT TO
  32783. * *RCC13*.
  32784. * (A3) = *CWQW* ADDRESS OF RECALLED JOB.
  32785. * (A4) = *CSWL* ADDRESS OF CPU FOR SWITCH REQUEST IF
  32786. * EXIT TO *RCC13*.
  32787. * (B3) = EXIT ADDRESS.
  32788. *
  32789. * USES X - 0, 1, 4, 6.
  32790. * B - 6.
  32791. * A - 1, 4.
  32792.  
  32793.  
  32794. RCC SB6 A0-59+24 SET OTHER CPU SELECTION BIT SHIFT COUNT
  32795. SB6 -B6
  32796. LX0 X3,B6
  32797. PL X0,RCC1 IF JOB CAN USE OTHER CPU
  32798. SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
  32799. LX0 B6,X3
  32800. NO
  32801. NG X0,/MONITOR/RCC14 IF JOB CANNOT USE THIS CPU
  32802.  
  32803. * CHECK PRIORITY OF JOB WITH SELECTION FOR THIS CPU.
  32804.  
  32805. GT B4,B5,/MONITOR/RCC13 IF NEW JOB .GT. THIS CPU JOB
  32806. LT B4,B5,/MONITOR/RCC14 IF NEW JOB .LT. THIS CPU JOB
  32807. EQ /MONITOR/RCC12 CHECK RECALL SLICE EXPIRED
  32808.  
  32809. * GET PARAMETERS FOR JOB IN OTHER CPU.
  32810.  
  32811. RCC1 SB6 A0-TSCL-1
  32812. IX6 X2-X1 CHECK THIS CPU RECALL SLICE EXPIRED
  32813. SA1 -B6 GET OTHER CPU PARAMETERS
  32814. SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
  32815. LX0 B6,X3
  32816. UX1,B6 X1 GET PRIORITY OF JOB IN OTHER CPU
  32817. BX1 -X7*X1
  32818. IX1 X2-X1 CHECK OTHER CPU RECALL SLICE EXPIRED
  32819. PL X0,RCC2 IF JOB CAN USE THIS CPU
  32820.  
  32821. * CHECK PRIORITY OF JOB WITH SELECTION FOR OTHER CPU.
  32822.  
  32823. SA4 A1+CSWL-TSCL
  32824. NG X4,/MONITOR/RCC14 IF OTHER CPU SWITCH REQUEST PENDING
  32825. GT B4,B6,/MONITOR/RCC13 IF NEW JOB .GT. OTHER CPU JOB
  32826. LT B4,B6,/MONITOR/RCC14 IF NEW JOB .LT. OTHER CPU JOB
  32827. NG X1,/MONITOR/RCC14 IF CPU RECALL SLICE NOT EXPIRED
  32828. EQ /MONITOR/RCC13 SWITCH OTHER CPU
  32829.  
  32830. * CHECK PRIORITY OF JOB WITH NO CPU SELECTION.
  32831.  
  32832. RCC2 GT B4,B5,RCC4 IF NEW JOB .GT. THIS CPU JOB
  32833. GT B4,B6,RCC5 IF NEW JOB .GT. OTHER CPU JOB
  32834. LT B4,B5,RCC3 IF NEW JOB .LT. THIS CPU JOB
  32835. PL X6,/MONITOR/RCC13 IF THIS CPU RECALL SLICE EXPIRED
  32836. RCC3 LT B4,B6,/MONITOR/RCC14 IF NEW JOB .LT. OTHER CPU JOB
  32837. NG X1,/MONITOR/RCC14 IF CPU RECALL SLICE NOT EXPIRED
  32838. EQ RCC5 SWITCH OTHER CPU IF NO CURRENT REQUEST
  32839.  
  32840. RCC4 LE B4,B6,/MONITOR/RCC13 IF NEW JOB .LE. OTHER CPU JOB
  32841. GE B6,B5,/MONITOR/RCC13 IF OTHER CPU JOB .GE. THIS CPU
  32842. RCC5 SA4 A1+CSWL-TSCL
  32843. NG X4,/MONITOR/RCC14 IF OTHER CPU SWITCH REQUEST PENDING
  32844. EQ /MONITOR/RCC13 SWITCH OTHER CPU
  32845. SAX SPACE 4
  32846. ** SAX - SET ALTERNATE CPU EXCHANGE.
  32847. *
  32848. * ENTRY (A5) = OUTPUT REGISTER ADDRESS.
  32849. *
  32850. * EXIT TO PPRX.
  32851. *
  32852. * CALLS SPB.
  32853.  
  32854.  
  32855. SAX TB3 A0-1,-CX SET ALTERNATE CPU
  32856. SX0 B1
  32857. SA1 -B3
  32858. SB3 /MONITOR/PPRX *SPB* EXIT ADDRESS
  32859. TJP (/PROBE/ACE,PROBE,/MONITOR/SPB) SET PPU REQUEST BIT
  32860. EXPACS SPACE 4,10
  32861. ** IXP1 - CPU 1 IDLE EXCHANGE PACKAGE.
  32862.  
  32863.  
  32864. IXP1 EXP P=2,RA=IDL1,FL=5,MA=IXP1,X1=77777777777777777777B
  32865.  
  32866. * *STSW*.
  32867.  
  32868. VFD 3/BCPS *B* CPU STATUS
  32869. VFD 57/0
  32870.  
  32871. * *CWQW*.
  32872.  
  32873. VFD 2/1
  32874. VFD 7/IDCS CPU PRIORITY
  32875. VFD 1/0
  32876. VFD 1/1 CPU SLICE ACTIVE
  32877. VFD 1/0 RECALL FLAG
  32878. VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
  32879. VFD 2/0
  32880. VFD 9/0 SERVICE CYCLE
  32881. VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
  32882. VFD 1/0 *MTR* BYPASS FLAG
  32883. VFD 2/2 SELECT CPU 1
  32884. VFD 3/0
  32885. VFD 3/DIXT DUAL CPU EXCHANGE PACKAGE TYPE
  32886. VFD 18/0 *WQ* LINKAGE
  32887.  
  32888. * *CSAW*.
  32889.  
  32890. VFD 60/0
  32891.  
  32892. * *CTMW*.
  32893.  
  32894. VFD 60/0
  32895.  
  32896. ** IDL1 - CPU 1 IDLE PROGRAM.
  32897.  
  32898.  
  32899. IDL1 CON 0 (RA) FOR IDLE PROGRAM
  32900. CON 0 (RA+1) FOR IDLE PROGRAM
  32901. + CX2 X1 DELAY (60 BITS)
  32902. * EQ 2 LOOP WITHOUT DELAY (CACHE MACHINE)
  32903. CX2 X1 DELAY (60 BITS)
  32904. EQ 2 LOOP
  32905. SPACE 4
  32906. ** SCX1 - SUB-CONTROL POINT EXCHANGE PACKAGE - CPU 1.
  32907. *
  32908. * NOTE - THIS EXCHANGE PACKAGE IS ALSO USED FOR THE CODE WHICH
  32909. * INITIATES THE CPU1 IDLE PACKAGE ON A CACHE MACHINE.
  32910. * THE VALUES PRESET FOR *A0* AND *B0* ARE REQUIRED BY
  32911. * MICROCODE ON A DUAL CPU CACHE MACHINE.
  32912.  
  32913.  
  32914. SCX1 EXP P=IIP,FL=(,MCM),A0=1,B0=210B
  32915. IIP SPACE 4,10
  32916. ** IIP - INITIATE IDLE PACKAGE FOR DUAL CPU CACHE MACHINE.
  32917. *
  32918. * EXIT (X1) = ZERO (THIS IS REQUIRED BY *STL*).
  32919.  
  32920.  
  32921. IIP BSS 0 ENTRY
  32922. SA2 EIBP SET *MTR* EXCHANGE PACKAGE ADDRESS
  32923. MX7 42
  32924. LX7 32
  32925. BX2 X7*X2
  32926. SX6 /MONITOR/MXP
  32927. LX6 32
  32928. BX6 X2+X6
  32929. SA6 A2
  32930. SB2 IXP1
  32931. XJ B2 START CPU1 IDLE PACKAGE
  32932. SPACE 4,10
  32933. ENDBLK
  32934. BLOCK MMF,(MULTI-MAINFRAME PROCESSING ROUTINES.)
  32935. ARM SPACE 4
  32936. ** ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
  32937. * *ARMF* IS CALLED ONCE EVERY SECOND BY *MTR* TO DO THE
  32938. * FOLLOWING.
  32939. * 1) STATUS FLAG REGISTER BITS.
  32940. * 2) WRITE REAL TIME CLOCK TO EXTENDED MEMORY.
  32941. * 3) DETERMINE STATUS OF OTHER MAINFRAMES BY INTERROGATING
  32942. * THEIR EXTENDED MEMORY CLOCKS (EVERY 2 SECONDS).
  32943. * 4) CHECK FOR INTER-MAINFRAME MESSAGE REQUEST.
  32944. *
  32945. * ENTRY
  32946. *T X0 24/,12/ S,6/,18/ ARMF
  32947. * (B7) = S = 0 IF MAINFRAMES TO BE STATUSED.
  32948. * EXITS TO *ART* IF NORMAL PROCESSING.
  32949. * EXITS TO *EPR* IF DOWN MACHINE OR MESSAGE PROCESSING TO BE
  32950. * DONE IN PROGRAM MODE.
  32951.  
  32952.  
  32953. ARM TSX2 (402B,ESM,6B) STATUS FLAG REGISTER
  32954. LX2 21
  32955. SX4 B1
  32956. SX6 TMMF
  32957. LX4 17 POSITION BIT TO STATUS
  32958. LX6 36
  32959. SB3 A0 SAVE CPU NUMBER
  32960. BX0 X2+X4
  32961. SX5 .COMI CHECK COMMUNICATION PROCESSING
  32962. ARM1 RE /ECS/FRWC
  32963. BX6 X4+X6
  32964. + AX4 1
  32965. BX0 X2+X4
  32966. NZ X4,ARM1 IF MORE BITS TO STATUS
  32967. SA6 EFRL STORE FLAG REGISTER BITS
  32968. BX5 X5*X6
  32969. TX0 ECCM EXTENDED MEMORY CLOCK LOCATION
  32970. SA0 PDTL
  32971. SX3 A0
  32972. LX3 30
  32973. BX0 X0+X3
  32974. LX5 58-PMRF-COMI POSITION PROGRAM MODE REQUEST BIT (PMRF)
  32975. WE 1 WRITE EXTENDED MEMORY CLOCK
  32976. PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
  32977. NZ B7,ARM16 IF MAINFRAMES NOT TO BE STATUSED
  32978. TX0 ETLT*100B+SMET,ECLT
  32979. TX0 X0,TCNT
  32980. SA0 MBUF
  32981. SX3 A0+
  32982. LX3 30
  32983. BX0 X0+X3
  32984. SB7 MXMF
  32985.  
  32986. * CHECK STATUS OF OTHER MACHINES.
  32987.  
  32988. RE MXMF READ EXTENDED MEMORY CLOCKS
  32989. PER /MMF/ARM16,/ECS/PER PARITY ERROR PROCESSING
  32990. ARM2 ZR B7,ARM16 IF END OF MACHINES
  32991. SA3 TMMF-1+B7
  32992. SB7 B7-B1
  32993. SB4 X3
  32994. SA1 MBUF+B7 READ CURRENT CLOCK VALUE
  32995. SA2 ARMA+B7 LAST CLOCK VALUE
  32996. BX2 X1-X2
  32997. SX7 B1
  32998. ZR X2,ARM4 IF CLOCK NOT CHANGING
  32999.  
  33000. * PROCESS MACHINE WITH CLOCK CHANGING.
  33001.  
  33002. BX6 X1
  33003. SA6 A2 STORE NEW CLOCK VALUE
  33004. EQ B4,B1,ARM2 IF IN ACTIVE STATE
  33005. SB4 X3-MFDA-1
  33006. PL B4,ARM2 IF PROCESSING DOWN MACHINE
  33007.  
  33008. * SET MACHINE AS CURRENTLY BEING ACTIVE IN *MFST*.
  33009.  
  33010. SA0 A3+
  33011. SX3 A3+
  33012. TX0 B7+ETLT*100B+MFET,ECLT
  33013. TX0 X0,TCNT
  33014. LX3 30
  33015. BX0 X0+X3
  33016. RE 1
  33017. + SA3 A0 SET STATE
  33018. MX2 42
  33019. BX3 X2*X3
  33020. BX7 X7+X3
  33021. SA7 A3
  33022. EQ ARM2 PROCESS NEXT MACHINE
  33023.  
  33024. * ADVANCE MACHINE STATE.
  33025.  
  33026. ARM3 IX7 X7+X3
  33027. SA7 A3
  33028. EQ ARM2 PROCESS NEXT MACHINE
  33029.  
  33030. * MACHINE CLOCK IS NOT CHANGING.
  33031.  
  33032. ARM4 ZR B4,ARM2 IF DOWN STATE
  33033. EQ B4,B1,ARM3 IF ACTIVE STATE - ADVANCE TO *MFD1*
  33034. SB4 X3-MFD1
  33035. ZR B4,ARM3 IF *MFD1* STATE - ADVANCE TO *MFD2*
  33036. EQ B4,B1,ARM6 IF *MFD2* STATE
  33037. SB4 X3-MFDA
  33038. ZR B4,ARM7 IF *MFDA* STATE
  33039. NE B4,B1,ARM2 IF WAITING FOR *1MR* COMPLETE
  33040.  
  33041. * *MFCD* - CALL *1MR* TO RELEASE TRACK INTERLOCKS.
  33042.  
  33043. SA1 ARMB SET PP CALL
  33044. SX0 B7
  33045. IX6 X1+X0
  33046. TB7 SCA SET SYSTEM CONTROL POINT
  33047. PX0 X0,B3 SAVE CPU NUMBER
  33048. SB4 B0 SET LIBRARY SEARCH NEEDED
  33049. SB3 ARM5 SET EXIT ADDRESS
  33050. EQ /MONITOR/APQ ASSIGN PP
  33051.  
  33052. ARM5 SB7 X0 RESTORE MACHINE INDEX
  33053. UX0,B3 X0
  33054. SX7 B1+
  33055. ZR X1,ARM2 IF PP NOT ASSIGNED - PROCESS NEXT MACHINE
  33056. SA3 TMMF+B7 RESTORE (X3)
  33057. EQ ARM3 ADVANCE STATE
  33058.  
  33059. * *MFD2* - MACHINE IS DOWN FOR TWO STATUSES.
  33060.  
  33061. ARM6 BX1 X3
  33062. LX1 59-46
  33063. PL X1,ARM3 IF NOT LOW SPEED PORT MACHINE
  33064. MX7 12
  33065. SA1 ARMD SET MESSAGE
  33066. BX4 X7*X3
  33067. LX4 -18
  33068. BX7 X1+X4
  33069. TA7 MS2W,SCA
  33070. SA1 A1+B1
  33071. BX7 X1
  33072. SA7 A7+B1
  33073. SA1 A1+B1
  33074. LX4 -24
  33075. BX7 X1+X4
  33076. SA7 A7+1
  33077. EQ ARM2 PROCESS NEXT MACHINE
  33078.  
  33079. * *MFDA* - DOWN ACKNOWLEGED STATE PROCESSOR.
  33080.  
  33081. ARM7 SA1 ARMC SET MESSAGE *MACHINE XX DOWN.*
  33082. MX7 12
  33083. BX4 X7*X3
  33084. LX4 12
  33085. BX7 X1+X4
  33086. TA7 MS2W,SCA
  33087. SA1 A1+B1
  33088. BX7 X1
  33089. SA7 A7+B1
  33090. SX4 B1
  33091. LX4 B7
  33092. SX5 B7+B1 SET MACHINE MASK FIELD BEING PROCESSED
  33093. SB4 CIRI
  33094.  
  33095. ** SET *CIRI* INTERLOCK WHICK CONTROLS THE RELEASEING OF
  33096. * A DOWN MACHINES FLAG REGISTER AND DEVICE INTERLOCKS.
  33097. * IF THE *CIRI* INTERLOCK IS HELD BY THE DOWN MACHINE
  33098. * THE INTERLOCK WILL BE RELEASED AND ANOTHER ATTEMPT
  33099. * WILL BE MADE TO OBTAIN THE INTERLOCK.
  33100.  
  33101. ARM8 SB6 ARM9 SET *SFR* RETURN
  33102. EQ /ECS/SFR SET *CIRI* FLAG BIT
  33103.  
  33104. ARM9 SA0 MBUF
  33105. TX0 ETLT*100B+FRET,ECLT SET ADDRESS OF FLAG WORDS
  33106. TX0 X0,TCNT
  33107. SX3 A0+
  33108. LX3 30
  33109. BX0 X3+X0
  33110. RE 18
  33111. PER /MMF/ARM16,/ECS/PER PARITY ERROR PROCESSING
  33112. TSX0 (402B,ESM,6B) STATUS FLAG REGISTER
  33113. LX0 21
  33114. BX0 X0+X4
  33115. ZR X7,ARM11 IF INTERLOCK OBTAINED
  33116.  
  33117. * CHECK *CIRI* INTERLOCK HELD BY DOWN MACHINE.
  33118.  
  33119. SA2 A0+B4 READ FLAG WORD
  33120. AX2 12
  33121. BX2 X4*X2
  33122. ZR X2,ARM15 IF HELD BY RUNNING MACHINE
  33123. SB6 ARM8 SET *CFR* RETURN
  33124. EQ /ECS/CFR CLEAR *CIRI* INTERLOCK
  33125.  
  33126. * CLEAR *TRTI* INTERLOCK IF HELD BY DOWN MACHINE.
  33127.  
  33128. ARM10 SX2 X4+.TRTI CLEAR MACHINE MASK AND *TRTI* FLAG BITS
  33129. TSX0 (403B,ESM,7B)
  33130. LX0 21
  33131. BX0 X0+X2
  33132. ARM11 RE /ECS/FRWC
  33133. EQ ARM10 IF *TRTI* HELD BY DOWN MACHINE
  33134. SB4 18
  33135. SB7 -B1 SET FIRST CALL TO *SSD*
  33136. MX7 -12
  33137. SB6 ARM12 SET *CFR* RETURN
  33138. SB5 ARM13 SET *SSD* RETURN
  33139.  
  33140. * CLEAR FLAG REGISTER BITS.
  33141.  
  33142. ARM12 SB4 B4-B1
  33143. SA0 MBUF
  33144. SA3 A0+B4 READ FLAG WORD
  33145. NG B4,/PROGRAM/SSD IF END OF FLAG BITS
  33146. BX3 X3-X5
  33147. BX3 -X7*X3
  33148. ZR X3,/ECS/CFR IF INTERLOCK HELD BY DOWN MACHINE
  33149. EQ ARM12 CLEAR BITS
  33150.  
  33151. * CLEAR DEVICE INTERLOCKS HELD BY DOWN MACHINES.
  33152.  
  33153. ARM13 SX2 A0 SET BUFFER ADDRESS
  33154. SX4 X4+SDGL
  33155. LX2 30
  33156. BX0 X2+X4 FORM EXTENDED MEMORY ADDRESS
  33157. MX4 -6
  33158. NG B7,ARM14 IF END OF SHARED DEVICES
  33159. RE 1
  33160. PER /PROGRAM/SSD,/ECS/PER PARITY ERROR PROCESSING
  33161. SA2 A0 READ *SDGL*
  33162. BX7 -X4*X2
  33163. AX7 1
  33164. BX3 X7-X5
  33165. NZ X3,/PROGRAM/SSD IF NOT INTERLOCKED BY DOWN MACHINE
  33166. BX7 X4*X2
  33167. SA7 A2 CLEAR INTERLOCK
  33168. WE 1
  33169. PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
  33170. EQ /PROGRAM/SSD SEARCH FOR SHARED DEVICE
  33171.  
  33172. ARM14 SB7 X5-1 RESTORE (B7)
  33173. SX0 B1+
  33174. SA3 TMMF+B7 ADVANCE STATE
  33175. IX7 X3+X0
  33176. SA7 A3
  33177. ARM15 SA1 EFRL RESTORE (X5)
  33178. SX5 .COMI
  33179. BX5 X5*X1
  33180. LX5 58-PMRF-COMI
  33181. SB4 CIRI
  33182. SB6 ARM2
  33183. EQ /ECS/CFR CLEAR FLAG BIT AND ADVANCE MACHINE
  33184.  
  33185. ARM16 SA0 B3 RESTORE CPU NUMBER
  33186. BX0 X5
  33187. NZ X5,/MONITOR/EPR IF PROGRAM MODE PROCESSING TO PERFORM
  33188. EQ /MONITOR/.ARTF ADVANCE RUNNING TIME
  33189.  
  33190. ARMA BSS MXMF MACHINE CLOCK TEMPORARIES
  33191.  
  33192. ARMB VFD 18/0L1MR,6/0,12/0,6/CDV,18/1
  33193.  
  33194. ARMC CON 10HMACHINE XX-2RXX
  33195. CON 6L DOWN.
  33196. ARMD CON 10HIF XX DOWN-2RXX*1BS30
  33197. CON 10H ENTER *DO
  33198. CON 10HWN,MID=XX*-2RXX*1BS6
  33199.  
  33200. TMMF BSS 0 MAINFRAME STATE TABLE
  33201. DUP MXMF,1
  33202. DATA 0
  33203. TITLE PPU REQUEST PROCESSOR.
  33204. SFI SPACE 4,15
  33205. ** SFI - SET *FATI* INTERLOCK.
  33206. *
  33207. * *AFAM* EXTENSION TO SET *FATI* FLAG REGISTER INTERLOCK AND
  33208. * READ *FAT* ENTRY FROM EXTENDED MEMORY.
  33209. *
  33210. * ENTRY (X2) = *FAT* INDEX.
  33211. *
  33212. * EXIT (X1) = GLOBAL COUNT WORD FROM *FAT*.
  33213. * (B3) = CPU NUMBER.
  33214. * TO *REJ*, IF UNABLE TO SET *FATI* INTERLOCK.
  33215. * TO *AFA1*, IF SUCCESSFUL READ OF *FAT* ENTRY.
  33216. * TO *PMR*, IF PARITY ERROR IN READING *FAT*.
  33217.  
  33218.  
  33219. SFI TSX0 (400B,ESM,4B) SELECT
  33220. SX1 .FATI
  33221. LX0 21
  33222. SB3 A0
  33223. BX0 X0+X1
  33224. LX2 FATS POSITION *FAT* INDEX
  33225. RE /ECS/FRWC SET *FATI* INTERLOCK
  33226. EQ /PROGRAM/REJ
  33227.  
  33228. * THIS WORD IS CHANGED BY *AFAM* PRESET.
  33229.  
  33230. SFIA SA0 MBUF SET CM ADDRESS FOR READ
  33231. TX0 X2+FAST*100B,TCNT SET FAST ATTACH TABLE ADDRESS
  33232. SX1 A0+
  33233. LX1 30
  33234. BX0 X0+X1
  33235. RE 2+MXMF
  33236. PER /MMF/SFI1,/ECS/PER PARITY ERROR PROCESSING
  33237. SA0 A0+B1 ADJUST ADDRESS TO GLOBAL COUNT WORD
  33238. SX1 B1
  33239. IX0 X0+X1
  33240. LX1 30
  33241. IX0 X0+X1
  33242. SA1 A0 READ GLOBAL WORD FROM EXTENDED MEMORY
  33243. EQ /MONITOR/AFA1 CONTINUE
  33244.  
  33245. * PARITY ERROR PROCESSOR.
  33246.  
  33247. SFI1 SB6 /PROGRAM/REJ SET *SFR* RETURN
  33248. SB5 /MONITOR/PPRX SET *REJ* RETURN
  33249. SB4 COMI SET PARITY ERROR RECOVERY NEEDED
  33250. JP /ECS/SFR SET FLAG BIT
  33251. CFI SPACE 4,10
  33252. ** CFI - CLEAR *FATI* INTERLOCK.
  33253. *
  33254. * *AFAM* EXTENSION TO UPDATE LOCAL MACHINE COUNTS, CLEAR
  33255. * *FATI* FLAG REGISTER INTERLOCK AND WRITE *FAT* ENTRY TO
  33256. * EXTENDED MEMORY.
  33257. *
  33258. * ENTRY (XO) = *FAT* ADDRESS IN EXTENDED MEMORY.
  33259. * (X7) = 1/1, 59/0
  33260. * (B3) = CPU NUMBER.
  33261. *
  33262. * EXIT (X7) = 0.
  33263. * TO *ECH*, IF UNRECOVERED WRITE ERROR OR REJECT IN
  33264. * CLEARING FLAG INTERLOCK.
  33265. * TO *AFA6*, IF SUCCESSFUL WRITE OF *FAT* ENTRY.
  33266.  
  33267.  
  33268. CFI LX7 1-59 GET NON-ROLLABLE BIT
  33269. BX5 X7*X6
  33270. SA3 B4+ READ LOCAL WORD FROM CM
  33271. TA2 A6,MIN READ LOCAL WORD FROM ECS
  33272. IX6 X3-X4
  33273. BX3 -X7*X6
  33274. IX6 X3+X5
  33275. SA6 A3
  33276. IX6 X2-X4
  33277.  
  33278. * WRITE UPDATED ENTRY BACK TO ECS.
  33279.  
  33280. BX2 -X7*X6
  33281. IX6 X2+X5
  33282. BX7 X7-X7
  33283. SA6 A2+ STORE LOCAL WORD TO BE WRITTEN TO ECS
  33284. WE 1+MXMF
  33285. PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
  33286.  
  33287. * RELEASE FLAG REGISTER INTERLOCK.
  33288.  
  33289. CFI1 TSX0 (403B,ESM,7B)
  33290. LX0 21
  33291. SX2 .FATI
  33292. BX0 X0+X2 SET FLAG REGISTER FUNCTION
  33293. SA0 B3 RESTORE CPU NUMBER
  33294. RE /ECS/FRWC CLEAR *FATI* INTERLOCK
  33295. RJ /ECS/ECH HANG ON HALF EXIT
  33296. EQ /MONITOR/AFA6 RETURN
  33297. AFAP SPACE 4,10
  33298. ** AFAP - *AFAM* PRESET.
  33299. *
  33300. * *AFAM* PRESET IS EXECUTED ON THE FIRST *AFAM* CALL.
  33301. * THIS IS REQUIRED SINCE THE *FAT* TRACK IS NOT KNOWN UNTIL
  33302. * AFTER *0MF* HAS EXECUTED TO ALLOCATE IT.
  33303.  
  33304. AFAP MX6 -18 RESET MONITOR MODE ADDRESS
  33305. BX3 X6*X3
  33306. SX6 /MONITOR/.AFAM
  33307. IX6 X6+X3
  33308. MX4 -11
  33309. SA6 TPPR+AFAM-CPUM
  33310. TA3 ALGL,EMS SET FAST ATTACH TABLE ADDRESS
  33311. SX6 2020B
  33312. TLX6 0,TNSC
  33313. BX4 -X4*X3
  33314. IX6 X6*X4
  33315. SA3 SFIA READ INSTRUCTION WORD
  33316. IX6 X3+X6
  33317. SA6 A3
  33318. EQ /MONITOR/.AFAM ENTER PROCESSOR
  33319. SPACE 4
  33320. ** MBUF - SCRATCH BUFFER FOR USE IN MONITOR MODE.
  33321.  
  33322.  
  33323. MBUF BSS 18
  33324. TITLE MMF PROGRAM MODE PROCESSING ROUTINES.
  33325. QUAL PROGRAM
  33326. CLM SPACE 4
  33327. ** CLM - CHECKPOINT LOCAL MST TO ECS.
  33328. *
  33329. * ENTRY (A3) = MST ADDRESS OF SHARED DEVICE.
  33330. * (B5) = EXIT ADDRESS.
  33331. *
  33332. * EXIT ENTIRE LOCAL AREA OF MST WRITTEN TO ECS.
  33333. *
  33334. * USES X - 0, 4.
  33335. * B - 3.
  33336. * A - 4.
  33337.  
  33338.  
  33339. CLM SA4 A3+SDGL READ ECS ADDRESS OF MST
  33340. SB3 A0 SAVE CPU NUMBER
  33341. AX4 36
  33342.  
  33343. * ENTER HERE FROM *CDI*.
  33344.  
  33345. CLM0 SA0 A3+GLGL START OF LOCAL MST
  33346. TX0 X4+GLGL-LLLL,MSL ECS ADDRESS OF LOCAL AREA
  33347. MX4 -24
  33348. BX0 -X4*X0
  33349. SX4 A0+
  33350. LX4 30
  33351. BX0 X4+X0
  33352. WE LLLL
  33353. PER /PROGRAM/CLM1,/ECS/PER IGNORE UNRECOVERED MRT ERROR
  33354. CLM1 SA0 B3 RESTORE CPU NUMBER
  33355. JP B5 EXIT
  33356. CDI SPACE 4,15
  33357. ** CDI - CLEAR DEVICE INTERLOCK.
  33358. *
  33359. * ENTRY (X1) = FIRST WORD OF TRT TO UPDATE IN ECS.
  33360. * (X3) = 1.
  33361. * (X4) = ADDRESS OF MST IN ECS.
  33362. * (X5) = LAST WORD + 1 OF TRT TO UPDATE IN ECS.
  33363. * (X6) = SDGL WORD OF MST.
  33364. * (X7) = STATUS TO RETURN O OUTPUT REGISTER.
  33365. * (B4) = TRT LINK WORD TO UPDATE.
  33366. * (B5) = EXIT ADDRESS.
  33367. * (B6) = FIRST WORD ADDRESS OF TRT IN CM.
  33368. * (A4) = ADDRESS OF SDGL WORD OF MST.
  33369. *
  33370. * EXIT (OR) = (X7)
  33371.  
  33372. CDI1 MX2 -6 CLEAR DEVICE INTERLOCK
  33373. SB3 A0 SAVE CPU NUMBER
  33374. LX3 6
  33375. BX6 X2*X6
  33376. MX2 -24
  33377. BX4 -X2*X4
  33378. NG X5,CDI3 IF NO UPDATE OF TRT
  33379. SA0 X1+B6 SET FIRST WORD TO WRITE TO ECS
  33380. IX0 X3+X4
  33381. LT B4,B6,CDI2 IF NO LINK WORD
  33382. SX2 A0-B4
  33383. NG X2,CDI2 IF LINK WORD IN UPDATING REGION
  33384. SA0 B4 START UPDATE AT LINK WORD
  33385. CDI2 SX1 A0-B6 FIRST WORD TO UPDATE
  33386. IX5 X5-X1 LAST - FIRST
  33387. IX0 X0+X1
  33388. SB4 X5 SET WORD COUNT
  33389. SX2 A0
  33390. LX2 30
  33391. BX0 X2+X0
  33392. MX2 -10
  33393. BX2 -X2*X5
  33394. SX2 X2-1000B-1
  33395. + PL X2,* IF WORD COUNT .GT. 1000
  33396. WE B4 UPDATE TRT IN ECS
  33397. RJ /ECS/ECH HANG ON WRITE ERROR
  33398. CDI3 IX6 X3+X6 SET UP-TO-DATE COPY FOR THIS MACHINE
  33399. SA0 A3
  33400. SA6 A4
  33401. SX6 A0
  33402. LX6 30
  33403. BX0 X4+X6
  33404. WE SDGL+1
  33405. RJ /ECS/ECH HANG ON WRITE ERROR
  33406. SA7 A5 STORE OUTPUT REGISTER
  33407. EQ CLM0 WRITE LOCAL MST
  33408. SDI SPACE 4,25
  33409. ** SDI - SET DEVICE INTERLOCKED.
  33410. * THE DEVICE INTERLOCK CONTROLS THE UPDATING OF THE TRT AND
  33411. * MST WORDS TDGL, ACGL AND SDGL.
  33412. *
  33413. * ENTRY (X3) = (TDGL).
  33414. * (X4) = ECS ADDRESS OF MST.
  33415. * (X6) = DEVICE INTERLOCK BITS FROM *SDGL*.
  33416. * (B3) = CTR EXIT ADDRESS. NOTE - EXIT IS TO CTR2.
  33417. * (B5) = PRG IF IN PROGRAM MODE.
  33418. * (B6) = 0 IF NO INTERLOCKING TO PERFORM.
  33419. * (B6) .GT. 0 IF TO INTERLOCK AND UPDATE MST/TRT.
  33420. * (A3) = CM ADDRESS OF MST.
  33421. * (A4) = ADDRESS OF *ACGL* WORD IN MST.
  33422. *
  33423. * EXIT (X0) = 12/TRT LENGTH + 2000B, 48/ECS ADDRESS OF MRT.
  33424. * (X5) = -7777B
  33425. * (B4) = TRT LENGTH.
  33426. *
  33427. * USES X - 0, 1, 2, 4, 5, 6, 7.
  33428. * A - 1, 2, 4, 6.
  33429. * B - 3, 4, 5, 6.
  33430. *
  33431. * NOTE - (A0) IS SET TO 2 FOR PROGRAM MODE MONITOR.
  33432.  
  33433.  
  33434. SDI AX3 24
  33435. MX2 -24
  33436. BX4 -X2*X4
  33437. TSX2 (400B,ESM,4B)
  33438. LX2 21
  33439. BX3 -X5*X3 TRT LENGTH
  33440. MX7 -FRRC FLAG REGISTER RETRY COUNT
  33441. ZR B6,SDI8 IF NO READ OF MST/TRT
  33442. SB6 PRG ZERO IF CALLED FOR PROGRAM MODE
  33443. SX5 A0+ SAVE CPU NUMBER
  33444. SA0 SDIA ENSURE (A0) .LT. FL FOR FLAG OPERATION
  33445. NZ X6,SDI10 IF DEVICE INTERLOCKED BY THIS MACHINE
  33446. TX6 .TRTI,MMK
  33447.  
  33448. * SET *TRTI* FLAG REGISTER INTERLOCK.
  33449.  
  33450. SDI1 LX7 -1 DECREMENT RETRY COUNT
  33451. BX0 X2+X6 SET FLAG REGISTER FUNCTION
  33452. NG X7,SDI10 IF FAILED TO INTERLOCK FLAG REGISTER
  33453. RE /ECS/FRWC
  33454. EQ SDI1 RETRY
  33455.  
  33456. * READ MST FROM ECS.
  33457.  
  33458. SX0 A0+
  33459. LX0 30
  33460. BX0 X4+X0 SET ADDRESS OF MST IN ECS
  33461. NE B5,B6,SDI2 IF MONITOR MODE
  33462. SX5 B1+B1 SET (A0) FOR PROGRAM MODE
  33463. RE SDGL+1 READ MST (PROGRAM MODE)
  33464. PER /PROGRAM/SDI11,/PROGRAM/PER PARITY ERROR PROCESSING
  33465. EQ SDI3
  33466.  
  33467. SDI2 RE SDGL+1 READ MST (MONITOR MODE)
  33468. PER /PROGRAM/SDI9,/ECS/PER PARITY ERROR PROCESSING
  33469. * SWITCH REQUEST TO PROGRAM MODE ON ERROR
  33470.  
  33471. * CHECK DEVICE INTERLOCK.
  33472.  
  33473. SDI3 SA2 SDIA+SDGL
  33474. MX7 -6
  33475. BX4 -X7*X2
  33476. NZ X4,SDI9 IF MST/TRT INTERLOCK SET
  33477. SA4 A4 READ SDGL WORD FROM CM MST
  33478. BX7 X2-X4
  33479. ZR X7,SDI7 IF NO UPDATE OF MST/TRT NEEDED
  33480. AX7 36
  33481. BX2 X1
  33482. + NE B5,B6,SDI9 IF MONITOR MODE - CANNOT READ TRT
  33483. NZ X7,* IF BAD ECS ADDRESS
  33484. SB6 SDI4 *CMP* *MSR* RETURN ADDRESS
  33485. SA0 PBUF SET CM ADDRESS OF TRANSFER
  33486. SX5 B3 SAVE RETURN ADDRESS
  33487. SB7 X3 TRT LENGTH
  33488. SA1 A3+TRLL GET FWA OF TRT
  33489. SB3 X1-MECB
  33490. SX3 X0+TRST*100B START OF TRT IN ECS
  33491. SB3 A0-B3
  33492.  
  33493. * TRT READ LOOP.
  33494.  
  33495. SDI4 SB4 MECB MAXIMUM ECS TRANSFER SIZE
  33496. SX1 A0
  33497. LX1 30
  33498. BX0 X3+X1 ECS ADDRESS OF TRT READ
  33499. SB7 B7-B4 DECREMENT WORD COUNT
  33500. SX3 X3+B4 INCREMENT ECS ADDRESS OF TRT
  33501. SB3 B3-B4 INCREMENT FOR *CMP* *MSR*
  33502. PL B7,SDI5 IF NOT LAST SHORT BLOCK TO READ
  33503. SB4 B7+B4 SET SHORT BLOCK WORD COUNT
  33504. BX1 X2 RESTORE (X1)
  33505. LT B4,B1,SDI6 IF END OF TRANSFER
  33506. SDI5 RE B4 READ TRT BLOCK
  33507. PER /PROGRAM/SDI11,/PROGRAM/PER PARITY ERROR PROCESSING
  33508. SX0 A0 STARTING ADDRESS OF MOVE
  33509. SX1 B3 DIFFERENCE
  33510. TJP (/CME/MSR,CME,/PROGRAM/CMP,CMU,/MONITOR/MSR)
  33511.  
  33512. SDI6 SB5 PRG RESET (B5)
  33513. SA2 SDIA+ACGL COPY MST FROM BUFFER
  33514. SA4 SDIA+SDGL
  33515. BX6 X2
  33516. SA2 A2-B1
  33517. SA6 A3+B1
  33518. ERRNZ ACGL-1
  33519. SB3 X5 RESTORE RETURN ADDRESS
  33520. LX3 X2
  33521. BX7 X2
  33522. LX3 24
  33523. SX5 B1+B1 SET (A0) TO 2 FOR PROGRAM MODE
  33524. SA7 A3
  33525. AX3 48 SET LENGTH OF TRT
  33526.  
  33527. * WRITE INTERLOCKED MST TO ECS.
  33528.  
  33529. SDI7 TX6 MIL SET MST INTERLOCKS
  33530. BX7 X4+X6
  33531. AX4 36
  33532. SA7 A3+SDGL
  33533. MX7 -24
  33534. BX4 -X7*X4
  33535. SX7 A3
  33536. LX7 30
  33537. BX0 X4+X7
  33538. SA0 A3
  33539. WE SDGL+1
  33540. RJ /ECS/ECH HANG ON WRITE ERROR
  33541.  
  33542. * CLEAR TRTI INTERLOCK.
  33543.  
  33544. TSX2 (402B,ESM,6B) STATUS FLAG REGISTER TO INSURE SET
  33545. TX6 MMK
  33546. LX2 21
  33547. BX0 X2+X6
  33548. SX6 X6+.TRTI
  33549. RE /ECS/FRWC STATUS FLAG BIT (HALF EXIT EXPECTED)
  33550. SA0 X5 RESTORE CPU NUMBER
  33551. MX5 -12
  33552. PL X5,* IF FLAG BIT NOT SET
  33553. TSX2 (403B,ESM,7B)
  33554. LX2 21
  33555. BX0 X2+X6
  33556. RE /ECS/FRWC CLEAR FLAG REGISTER INTERLOCK
  33557. RJ /ECS/ECH HANG ON HALF EXIT
  33558. SDI8 TX0 1000B,MRT
  33559. SB4 X3
  33560. IX0 X0+X4 SET MRT ADDRESS
  33561. PX0 X0,B4 PACK TRT LENGTH IN (X0)
  33562. EQ CTR2 RETURN
  33563.  
  33564. * CLEAR FLAG REGISTER AND EXIT.
  33565.  
  33566. SDI9 TSX0 (403B,ESM,7B)
  33567. LX0 21
  33568. BX0 X0+X6
  33569. RE /ECS/FRWC CLEAR FLAG REGISTER INTERLOCK
  33570. RJ /ECS/ECH HANG ON HALF EXIT
  33571. SDI10 SA0 X5 RESTORE (A0)
  33572. EQ B5,B6,REJ IF PROGRAM MODE - REJECT REQUEST
  33573. SA5 A5
  33574. BX7 X5
  33575. EQ /MONITOR/PMR SWITCH REQUEST TO PROGRAM MODE
  33576.  
  33577. * PARITY ERROR PROCESSING - EXECUTED ONLY IN PROGRAM MODE.
  33578.  
  33579. SDI11 TSX2 (403B,ESM,7B) CLEAR TRTI INTERLOCK
  33580. TX6 .TRTI,MMK
  33581. LX2 21
  33582. BX0 X2+X6
  33583. SB3 X5 CPU NUMBER FOR *SFR* TO RESTORE
  33584. RE /ECS/FRWC CLEAR FLAG BIT
  33585. + SB6 REJ SET *SFR* RETURN
  33586. SB5 PRG SET *REJ* RETURN
  33587. SB4 COMI FLAG BIT TO SET
  33588. EQ /ECS/SFR SET BIT TO REQUEST PARITY ERROR PROCESSING
  33589.  
  33590. FRRC EQU 10 FLAG REGISTER RETRY COUNT
  33591.  
  33592. SDIA BSS SDGL+1 MST READ BUFFER
  33593. SMU SPACE 4,20
  33594. ** SMU - STORE MRT UPDATE.
  33595. *
  33596. * THIS ROUTINE IS CALLED WHEN CHANGING AN MRT BIT. IT WRITES
  33597. * THE CHANGED MRT WORD TO EXTENDED MEMORY.
  33598. *
  33599. * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  33600. * (X4) = CALLER FLAG.
  33601. * .LT. 0, IF CALLED BY *DTC*.
  33602. * .EQ. 0, IF CALLED BY *STBM*.
  33603. * .GT. 0, IF CALLED BY *RTC*.
  33604. * (A3) = MST ADDRESS (*TDGL*).
  33605. * (A6) = MRT WORD.
  33606. * (B3) = MRT FWA.
  33607. *
  33608. * EXIT (X6) = 0.
  33609. * (X1) = FWA OF TRT TO UPDATE, IF *STBM* CALL.
  33610. * (X5) = LWA + 1 OF TRT TO UPDATE, IF *STBM* CALL.
  33611. *
  33612. * USES X - 0, 1, 2, 6.
  33613. * A - 1.
  33614.  
  33615.  
  33616. SMU SX1 A6-B3 MRT OFFSET
  33617. UX0 X0
  33618. SX6 A0 SAVE CPU NUMBER
  33619. IX0 X0+X1 ADD MRT OFFSET
  33620. SX1 A6+
  33621. LX1 30
  33622. BX0 X1+X0
  33623. SA0 A6+
  33624. SX1 A2+ SAVE (A2) IF PARITY ERROR
  33625. WE 1 WRITE MRT WORD
  33626. PER /PROGRAM/SMU1 PARITY ERROR PROCESSOR
  33627. SMU1 SA2 X1 RESTORE (A2)
  33628. SA0 X6+ RESTORE (A0)
  33629. BX6 X6-X6
  33630. NG X4,DTC5 IF CALLED BY *DTC*
  33631. NZ X4,RTC13 IF CALLED BY *RTC*
  33632. SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
  33633. SX5 X1+B1
  33634. EQ CCP1 CHECK FOR CHECKPOINT REQUESTED
  33635. SSD SPACE 4,16
  33636. ** SSD - SEARCH FOR SHARED DEVICE.
  33637. *
  33638. * ENTRY (B5) = EXIT ADDRESS.
  33639. * (B7) .LT. 0 IF FIRST CALL TO INITIALIZE SHARED SEARCH.
  33640. * (B7) = LAST SHARED DEVICE FOUND IF NOT INITIAL CALL.
  33641. *
  33642. * EXIT (X3) = TDGL WORD OF MST.
  33643. * (X4) = ECS ADDRESS OF MST/TRT.
  33644. * (B7) = EST ORDINAL OF SHARED DEVICE.
  33645. * (B7) .LT. 0 IF SHARED DEVICE NOT FOUND.
  33646. * (A3) = ADDRESS OF TDGL WORD OF MST.
  33647. * (A4) = ADDRESS OF SDGL WORD OF MST.
  33648. *
  33649. * USES X - 3, 4.
  33650. * B - 7.
  33651. * A - 3, 4.
  33652.  
  33653.  
  33654. SSD PL B7,SSD1 IF NOT INITIAL CALL TO SSD
  33655. TB7 ESTL
  33656. SSD1 SB7 B7-B1
  33657. NG B7,SSD2 IF END OF EST - SHARED DEVICE NOT FOUND
  33658. SX4 B7
  33659. CX3 X4,EST CONVERT EST ORDINAL TO OFFSET
  33660. TA3 X3+EQDE,EST READ EST ENTRY
  33661. MX4 -12
  33662. PL X3,SSD1 IF NOT MASS STORAGE
  33663. BX3 -X4*X3
  33664. LX3 3 MST ADDRESS
  33665. SA4 X3+SDGL
  33666. SA3 X3
  33667. ERRNZ TDGL
  33668. AX4 36
  33669. ZR X4,SSD1 IF NOT SHARED DEVICE
  33670. NG X4,SSD1 IF ISD
  33671. SSD2 JP B5 RETURN
  33672. TITLE EXTENDED MEMORY ERROR RECOVERY PROCESSING.
  33673. PMR SPACE 4,10
  33674. ** PMR - PROCESS EXTENDED MEMORY ERROR RECOVERY.
  33675.  
  33676.  
  33677. PMR SA1 /ECS/MC ASSIGN *1MC* TO PROCESS ERROR DATA
  33678. SB3 PMR1 *APS* RETURN ADDRESS
  33679. EQ APS ASSIGN *1MC*
  33680.  
  33681. PMR1 BX7 X7-X7 INITIALIZE *1MC* BUFFER
  33682. SB3 B0
  33683. SA7 PMRA CLEAR ERROR ENCOUNTERED
  33684. ZR X1,DPE IF *1MC* NOT ASSIGNED ENTER PROCESSOR
  33685. SA7 X1+1
  33686. EQ DPE PROCESS MST/TRT PARITY ERRORS
  33687.  
  33688. * RELEASE *1MC* UPON COMPLETION OF ERROR RECOVERY.
  33689.  
  33690. PMRX SB4 COMI CLEAR EM ERROR PROCESSING REQUEST
  33691. ZR X1,PMR2 IF NO *1MC* BUFFER
  33692. SA1 X1 SET BUFFER COMPLETE
  33693. MX6 1
  33694. BX6 X6+X1
  33695. SA6 A1
  33696. PMR2 SB6 PRG *CFR* EXIT ADDRESS
  33697. SA1 PMRA
  33698. ZR X1,/ECS/CFR IF NO ERRORS LEFT, CLEAR FLAG BIT
  33699. EQ PRG EXIT
  33700.  
  33701. PMRA CON 0
  33702. DPE SPACE 4,10
  33703. ** DPE - SHARED DEVICE ERROR PROCESSING.
  33704. *
  33705. * THIS ROUTINE SCANS ALL SHARED DEVICES CHECKING TO SEE IF
  33706. * THE UP-TO-DATE COPY OF THE MST/TRT ARE HELD BY THIS MACHINE.
  33707. * IF THEY ARE THE CM TABLES ARE COMPARED WITH THE EXTENDED
  33708. * MEMORY COPY. ANY DIFFERENCES ARE REPORTED VIA *1MC* AND THE
  33709. * CORRECT DATA IS WRITTEN TO EXTENDED MEMORY.
  33710. *
  33711. * ENTRY (X1) = *1MC* BUFFER ADDRESS.
  33712. * TRTI FLAG BIT SET.
  33713.  
  33714.  
  33715. DPE SB6 DPE1 *SFR* RETURN ADDRESS
  33716. SB4 TRTI
  33717. JP /ECS/SFR SET *TRTI* FLAG BIT
  33718.  
  33719. DPE1 NZ X7,PMRX IF UNABLE TO SET INTERLOCK
  33720. SB7 -1 INITIALIZE DEVICE SEARCH
  33721. SB5 DPE2 SET *SSD* RETURN
  33722. EQ SSD SEARCH FOR SHARED DEVICE
  33723.  
  33724. DPE2 NG B7,DPE7 IF END OF SHARED DEVICES
  33725. SA0 PBUF READ *SDGL* WORD
  33726. SX0 X4+SDGL
  33727. SX7 A0
  33728. LX7 30
  33729. SA4 A4
  33730. BX0 X0+X7
  33731. AX3 24
  33732. MX6 -12
  33733. RE 1
  33734. EQ DPE6 ERROR IN READING *SDGL*
  33735.  
  33736. * PROCESS TRT ERRORS.
  33737.  
  33738. + SA2 A3+TRLL SET FWA OF TRT
  33739. SB6 X2
  33740. BX3 -X6*X3
  33741. SB4 B6+X3 SET LWA OF TRT
  33742. SA2 A0
  33743. IX2 X2-X4 COMPARE *SDGL* WORDS
  33744. AX4 36
  33745. NZ X2,DPE5 IF NOT UP-TO-DATE TABLES FOR THIS DEVICE
  33746. SX0 X4+TRST*100B SET TRT ADDRESS FOR THIS MACHINE
  33747. SB5 DPE3 *DRE* RETURN ADDRESS
  33748. JP DRE1 DETECT ERROR IN TRT
  33749.  
  33750. * PROCESS MST ERRORS.
  33751.  
  33752. DPE3 SX0 X4
  33753. SB6 A3 FWA OF MST
  33754. SB4 A3+GLGL LWA+1 OF MST TO BE PROCESSED
  33755. SB5 DPE4 *DRE* RETURN ADDRESS
  33756. EQ DRE1 PROCESS MST ERRORS
  33757.  
  33758. * SET CHECKPOINT BIT.
  33759.  
  33760. DPE4 SX6 B1
  33761. SB5 DPE2 SET *SSD* RETURN
  33762. LX6 50
  33763. + SA2 A3+STLL **** PERFORM IN ONE WORD ****
  33764. BX6 X6+X2 **** PERFORM IN ONE WORD ****
  33765. SA6 A2 **** PERFORM IN ONE WORD ****
  33766. JP SSD CHECK NEXT DEVICE
  33767.  
  33768. * CHECK FOR ERROR IN MST/TRT.
  33769.  
  33770. DPE5 BX0 X4+X7 SET MST ADDRESS
  33771. RE SDGL
  33772. SA6 PMRA NOTE ERROR IN MST READ
  33773. + SX2 TRST*100B ADVANCE TO TRT
  33774. IX0 X0+X2
  33775. RE MECB READ FIRST PART OF TRT
  33776. SA6 PMRA NOTE ERROR IN TRT READ
  33777. SX2 MECB
  33778. IX0 X0+X2
  33779. RE MECB READ SECOND PART OF TRT
  33780. SA6 PMRA NOTE ERROR IN TRT READ
  33781. + EQ SSD SEARCH FOR NEXT SHARED DEVICE
  33782.  
  33783. DPE6 SA6 PMRA SET ERROR ENCOUNTERED
  33784. EQ SSD SEARCH FOR NEXT SHARED DEVICE
  33785.  
  33786. DPE7 SB6 FPE *CFR* RETURN ADDRESS
  33787. SB4 TRTI
  33788. JP /ECS/CFR CLEAR *TRTI* FLAG BIT
  33789. FPE SPACE 4
  33790. ** FPE - FAST ATTACH TRACK PARITY ERROR PROCESSING.
  33791. *
  33792. * THIS ROUTINE RECOVERS FROM PARITY ERRORS IN THE FAT BY
  33793. * REGENERATING THE DATA FOR GLOBAL FAST ATTACH FILES.
  33794. * EACH MACHINE MUST PERFORM THE REGENERATION, SINCE THE
  33795. * LOCAL COUNT WORD OF THE FAT IS KNOWN ONLY TO INDIVIDUAL
  33796. * MACHINES.
  33797.  
  33798.  
  33799. FPE SB6 FPE1 *SFR* RETURN ADDRESS
  33800. SB4 FATI
  33801. JP /ECS/SFR SET *FATI* FLAG BIT
  33802.  
  33803. FPE1 NZ X7,PMRX IF UNABLE TO INTERLOCK
  33804. TA3 -FNTE,FNT INITIALIZE SYSTEM FNT SEARCH
  33805.  
  33806. * SEARCH FNT FOR GLOBAL FAST ATTACH ENTRY.
  33807.  
  33808. FPE2 TX6 A3+FNTE,-FNTLWA
  33809. SA3 A3+FNTE GET NEXT FNT ENTRY
  33810. ZR X6,FPE10 IF END OF FNT
  33811. MX4 -6
  33812. AX3 6
  33813. BX2 -X4*X3 FILE TYPE
  33814. SB4 X2-FAFT
  33815. AX3 6
  33816. NZ B4,FPE2 IF NOT FAST ATTACH FILE
  33817. BX7 -X4*X3
  33818. LX7 FATS
  33819. ZR X7,FPE2 IF NO FAT INDEX
  33820.  
  33821. * READ FAT ENTRY TO CHECK FOR ERRORS.
  33822.  
  33823. TA2 ALGL,EMS COMPUTE FAT ADDRESS
  33824. MX0 -11
  33825. BX2 -X0*X2
  33826. ZR X2,FPE10 IF FAT TRACK NOT YET ALLOCATED
  33827. SX6 2020B PRESERVE LINKAGE WITHIN TRACK
  33828. TLX6 0,TNSC
  33829. IX0 X6*X2
  33830. IX0 X0+X7 ADD FAT INDEX
  33831. TX0 X0+FAST*100B,TCNT
  33832. SA0 PBUF
  33833. SX2 A0
  33834. LX2 30
  33835. BX0 X0+X2
  33836. BX6 X4*X3
  33837. RE 2+MXMF
  33838. SA6 PMRA NOTE ERROR IN READ
  33839.  
  33840. * PROCESS FILE NAME WORD OF FAT.
  33841.  
  33842. + LX6 12
  33843. SA6 A0 STORE CORRECT FILE NAME
  33844. SA0 A0+1 SET SCRATCH CELL ADDRESS
  33845. SX5 -B1 INITIALIZE MACHINE INDEX
  33846. SB6 A6 FWA OF BUFFER TO COMPARE
  33847. SB4 B6+B1 LWA OF BUFFER TO COMPARE
  33848. SB5 FPE3 *DRE* RETURN ADDRESS
  33849. EQ DRE1 DETECT ERRORS IN FILE NAME
  33850.  
  33851. * PROCESS LOCAL COUNT WORDS.
  33852.  
  33853. FPE3 SX6 B1 ADVANCE FAT ADDRESS
  33854. IX0 X0+X6
  33855. FPE4 SX5 X5+1
  33856. SX3 X5-MXMF
  33857. PL X3,FPE6 IF END OF LOCAL COUNT WORDS
  33858. SA2 /MMF/TMMF+X5 READ MACHINE STATE
  33859. BX6 X6-X6
  33860. SX2 X2
  33861. ZR X2,FPE5 IF MACHINE NOT PRESENT
  33862. TX3 X5+1,-MIN
  33863. NZ X3,FPE3 IF NOT THIS MACHINE
  33864. SA2 A3+B1 GET FST ENTRY
  33865. ERRNZ FSTG-FNTG-1 CODE DEPENDS ON VALUE
  33866. MX3 -36
  33867. BX6 -X3*X2 FORM ENTRY FOR THIS MACHINE
  33868. TX4 MID MERGE MACHINE ID IN ENTRY
  33869. LX4 -12
  33870. BX6 X6+X4
  33871. FPE5 SA6 PBUF
  33872. SB6 A6 FWA TO CHECK
  33873. SB4 A6+B1 LWA + 1 TO CHECK
  33874. SB5 FPE4 *DRE* RETURN ADDRESS
  33875. EQ DRE1 CHECK LOCAL COUNT WORD
  33876.  
  33877. * CHECK FAMILY NAME WORD.
  33878.  
  33879. FPE6 SA2 A3+B1
  33880. LX2 12
  33881. MX4 -9
  33882. BX3 -X4*X2 EST ORDINAL
  33883. CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
  33884. TA4 X4+EQDE,EST READ EST ENTRY
  33885. MX3 -12
  33886. BX4 -X3*X4
  33887. SB5 FPE7 *DRE* RETURN ADDRESS
  33888. LX4 3
  33889. SA4 X4+PFGL
  33890. BX6 X3*X4
  33891. SA6 PBUF STORE FAMILY NAME + DEVICE NUMBER
  33892. SB6 A6 FWA TO CHECK
  33893. SB4 A6+B1 LWA + 1 TO CHECK
  33894. EQ DRE1 CHECK FAMILY NAME WORD
  33895.  
  33896. FPE7 SX4 B1 ACCUMULATE GLOBAL COUNTS
  33897. SA2 A3+B1 READ FST
  33898. MX6 12
  33899. LX6 -12
  33900. BX6 X6*X2 EXTRACT FIRST TRACK
  33901. MX3 -36
  33902. IX0 X0-X4
  33903. MX5 MXMF
  33904. FPE8 IX0 X0-X4
  33905. PL X5,FPE9 IF END OF LOCAL WORDS
  33906. LX5 1
  33907. RE 1
  33908. EQ FPE2 QUIT ON ERROR
  33909. SA2 A0+
  33910. BX2 -X3*X2
  33911. IX6 X6+X2
  33912. EQ FPE8 LOOP
  33913.  
  33914. FPE9 SA6 PBUF STORE COMPUTED ENTRY
  33915. SB6 A6 FWA TO CHECK
  33916. SB4 A6+B1 LWA + 1 TO CHECK
  33917. SB5 FPE2 *DRE* RETURN ADDRESS
  33918. EQ DRE1 CHECK GLOBAL COUNT WORD
  33919.  
  33920. * CLEAR FAT ENTRY AND EXIT.
  33921.  
  33922. FPE10 SB6 PMRX *CFR* RETURN ADDRESS
  33923. SB4 FATI
  33924. JP /ECS/CFR CLEAR FLAG BIT
  33925. TITLE SUBROUTINES.
  33926. DRE SPACE 4
  33927. ** DRE - DETECT / REPORT AND RECOVER EXTENDED MEMORY ERRORS.
  33928. *
  33929. * ENTRY (X0) = FWA OF ECS WORDS TO CHECK.
  33930. * (X1) = COMMUNICATION BUFFER ADDRESS.
  33931. * (B4) = LWA OF CM BUFFER TO COMPARE WITH ECS.
  33932. * (B5) = EXIT ADDRESS.
  33933. * (B6) = FWA OF CM BUFFER TO COMPARE WITH ECS.
  33934. * (A0) = SCRATCH WORD FOR EXTENDED MEMORY READ.
  33935.  
  33936.  
  33937. DRE SB3 B0 REPORTED INDEX
  33938. ZR X1,DRE1 IF NO BUFFER ASSIGNED
  33939. BX7 X7-X7 INITIALIZE BUFFER
  33940. SA7 X1+1
  33941. DRE1 SA2 B6+ READ GOOD DATA
  33942. MX7 -24
  33943. BX0 -X7*X0
  33944. SX7 A0+
  33945. LX7 30
  33946. BX0 X7+X0
  33947. BX6 X2 GOOD DATA
  33948. SX3 701B UNRECOVERED WITH GOOD AND BAD DATA
  33949. RE 1
  33950. EQ DRE2 IF ERROR DETECTED
  33951. SX3 301B RECOVERED WITH GOOD AND BAD DATA
  33952. SA2 A0+ READ POSSIBLE BAD DATA
  33953. BX2 X2-X6
  33954. CX2 X2
  33955. ZR X2,DRE3 IF DATA VERIFIES
  33956. DRE2 MX7 -24
  33957. BX0 -X7*X0 ECS ADDRESS
  33958. SX7 B6 CM ADDRESS OF GOOD DATA
  33959. LX7 30
  33960. BX0 X7+X0
  33961. SX7 A0 SAVE (A0)
  33962. SA0 B6+ ADDRESS OF GOOD DATA
  33963. WE 1 RESTORE GOOD DATA
  33964. PER /ECS/ECH1 HANG ON UNRECOVERED WRITE ERROR
  33965. SA0 X7+ RESTORE (A0)
  33966. ZR X1,DRE3 IF NO BUFFER ASSIGNED
  33967. GT B3,B1,DRE3 IF TWO ERRORS REPORTED
  33968. SB3 B3+B1 INCREMENT ERROR INDEX
  33969. SA2 X7 BAD DATA
  33970. LX3 -18 STATUS
  33971. LX7 24 CM ADDRESS
  33972. BX7 X7+X3
  33973. MX3 -24
  33974. BX0 -X3*X0 ECS ADDRESS
  33975. BX7 X7+X0
  33976. SA7 A7
  33977. BX7 X2
  33978. SA7 A7+B1 BAD DATA
  33979. SA6 A7+B1 GOOD DATA
  33980. BX7 X7-X7
  33981. SA7 A6+B1
  33982. DRE3 SX6 B1+ ADVANCE ADDRESSES
  33983. SB6 B6+B1
  33984. IX0 X0+X6
  33985. LT B6,B4,DRE1 IF NOT END OF WORDS TO CHECK
  33986. JP B5 RETURN
  33987. STE SPACE 4
  33988. ** STE - ECS SYSTEM TABLE ERROR.
  33989. *
  33990. * ENTRY (B5) = EXIT ADDRESS IF ENTERED AT STE1.
  33991. *
  33992. * EXIT NONE.
  33993. *
  33994. * USES X - 1, 6.
  33995. * B - NONE.
  33996. * A - 1, 6.
  33997.  
  33998.  
  33999. STE SB5 PRG SET EXIT ADDRESS
  34000.  
  34001. STE1 SX1 STEM *SYSTEM ECS TABLE ERROR.*
  34002. JP /MONITOR/MSC SEND MESSAGE TO SYSTEM CONTROL POINT
  34003.  
  34004. STEM DATA C*SYSTEM ECS TABLE ERROR.*
  34005.  
  34006. ENDBLK
  34007. BLOCK LSPMMF,(MULTI-MAINFRAME VIA LOW SPEED PORT TO EM.)
  34008. AFA SPACE 4,10
  34009. ** AFA - PASS *AFAM* FUNCTION TO *MTE*.
  34010. *
  34011. * ENTRY (A2) = FNT ADDRESS, FNT IS NOT BUSY.
  34012. * (A5) = OUTPUT REGISTER ADDRESS.
  34013.  
  34014.  
  34015. AFA SA2 A2 SET FILE BUSY
  34016. SX6 B1
  34017. BX6 X2+X6
  34018. SA6 A2
  34019. EQ QPR QUEUE PP REQUEST TO *MTE*
  34020. CDI SPACE 4,20
  34021. ** CDI - CLEAR DEVICE INTERLOCK.
  34022. *
  34023. * CHECK FOR ALL QUEUED DEVICE REQUESTS BEING COMPLETE, AND
  34024. * REQUEST *MTE* TO WRITE THE MST/TRT/MRT TO EXTENDED MEMORY.
  34025. *
  34026. * ENTRY (X1) = FIRST WORD OF TRT TO UPDATE.
  34027. * (X5) = LAST WORD + 1 OF TRT TO UPDATE.
  34028. * (X6) = *SDGL* MST WORD WITH BIT 0 CLEARED.
  34029. * (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
  34030. * (B4) = TRT LINK WORD TO UPDATE.
  34031. * (B5) = EXIT ADDRESS.
  34032. * (B6) = START OF TRT.
  34033. * (A3) = ADDRESS OF MST IN CM.
  34034. * (A5) = OUTPUT REGISTER ADDRESS.
  34035.  
  34036.  
  34037. CDI BSS 0 ENTRY
  34038. BX2 X2-X2
  34039. NG X5,CDI3 IF NO UPDATE OF TRT TO EXTENDED MEMORY
  34040.  
  34041. * SET FIRST WORD OF TRT TO WRITE TO EXTENDED MEMORY.
  34042.  
  34043. SB4 B4-B6
  34044. SB6 X1
  34045. NG B4,CDI2 IF NO LINK WORD
  34046. SB3 X5
  34047. GE B4,B6,CDI1 IF LINK WORD IS NOT FIRST WORD TO WRITE
  34048. SX1 B4+ SET FIRST WORD
  34049. CDI1 GE B3,B4,CDI2 IF LINK WORD IS NOT LAST WORD TO WRITE
  34050. SX5 B4+1
  34051.  
  34052. * UPDATE LAST WORD OF TRT TO WRITE TO EXTENDED MEMORY.
  34053.  
  34054. CDI2 LX5 36
  34055. LX1 48
  34056. BX2 X5+X1
  34057. CDI3 MX1 1 SET PROGRAM MODE BIT IN OUTPUT REGISTER
  34058. LX1 -1
  34059. BX7 X7+X1
  34060. SA7 A5
  34061.  
  34062. * CLEAR MST/TRT CURRENT FLAG AND REQUEST *CDIF* OF *MTE*.
  34063.  
  34064. SA4 A3+MCLL READ *MCLL*
  34065. LX4 47-35 POSITION MRT WRITE FLAG
  34066. SX1 B1
  34067. LX1 47-0
  34068. BX4 X1*X4
  34069. BX2 X2+X4
  34070. SX1 A5 ADD OUTPUT REGISTER ADDRESS
  34071. LX1 24
  34072. BX2 X1+X2
  34073. MX7 54 CLEAR MST/TRT CURRENT IN CM
  34074. BX6 X7*X6
  34075. SA6 A3+SDGL
  34076. SX0 A3+ SET MST ADDRESS
  34077. SX6 CDIF CLEAR DEVICE INTERLOCK FUNCTION FOR *MTE*
  34078. LX0 12-3
  34079. BX2 X2+X6 MERGE *MCLL* INFORMATION
  34080. BX6 X0+X2
  34081. SB4 B5 SAVE RETURN ADDRESS
  34082. SB5 CDI4 *QPR* RETURN ADDRESS
  34083. EQ QPR3 QUEUE REQUEST
  34084.  
  34085. CDI4 SX7 B0+ CLEAR *MCLL*
  34086. SA7 A3+MCLL
  34087. JP B4 RETURN
  34088. CME SPACE 4,15
  34089. ** CME - CHECK FOR *MTE* DEVICE INTERLOCK REQUEST NEEDED.
  34090. *
  34091. * THIS ROUTINE IS CALLED BY MST/TRT MANIPULATION FUNCTIONS
  34092. * WHICH EXECUTE IN PROGRAM MODE. IF THE REQUEST IS FOR A
  34093. * LSPMMF DEVICE AND THE MST/TRT NEED TO BE INTERLOCKED IN
  34094. * EM, THEN THE FUNCTION IS QUEUED TO *MTE* FOR PROCESSING.
  34095. * IF THE MST/TRT ARE INTERLOCKED IN EM, THEN THE FUNCTION IS
  34096. * PASSED TO PROGRAM MODE TO EXECUTION. THIS AVOIDS GOING TO
  34097. * PROGRAM MODE TO PASS REQUESTS TO *MTE*.
  34098.  
  34099.  
  34100. * ENTRY FOR *VMSM*.
  34101.  
  34102. CME0 SX3 X1
  34103. AX3 12
  34104. NZ X3,/MONITOR/PMR IF NOT SUBFUNCTION *VEIS*
  34105. ERRNZ VEIS CODE DEPENDS ON VALUE
  34106.  
  34107. * ENTRY FOR *DLKM* AND *RTCM*.
  34108.  
  34109. CME LX1 24 POSITION EQUIPMENT FIELD
  34110. MX3 -9
  34111. BX3 -X3*X1 EST ORDINAL
  34112. CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
  34113. TA4 X4+EQDE,EST READ EST ENTRY
  34114. LX4 59-57
  34115. PL X4,/MONITOR/PMR IF NOT SHARED
  34116. LX4 -59+57
  34117. MX6 -5
  34118. TX0 X3,-ESTL
  34119. MX3 -12
  34120. BX3 -X3*X4 MST ADDRESS / 10B
  34121. BX0 X4*X0
  34122. LX3 3
  34123. PL X0,/MONITOR/HNG1 IF NOT MASS STORAGE OR OUT OF EST
  34124. SA4 X3+SDGL CHECK SHARED STATUS
  34125. AX4 1
  34126. BX6 -X6*X4
  34127. NZ X6,/MONITOR/PMR IF INTERLOCKED IN EXTENDED MEMORY
  34128. ZR X4,/MONITOR/PMR IF NO EXTENDED MEMORY ADDRESS PRESENT
  34129.  
  34130. * ENTRY FOR *DTKM* (QUEUE *MTE* REQUEST).
  34131.  
  34132. CME1 TX2 A5-1,-FP COMPUTE PP REQUEST BIT
  34133. SX3 B1
  34134. AX2 3
  34135. SB6 X2
  34136. LX6 X3,B6
  34137. SB5 /MONITOR/PPRX SET RETURN ADDRESS
  34138. SX2 A4+MCLL-SDGL
  34139.  
  34140. * SET INTERLOCK BIT FOR THIS PP IF NO REQUESTS PENDING.
  34141.  
  34142. + SA2 X2 **** PERFORM IN ONE WORD ****
  34143. NZ X2,/PROGRAM/REJ IF SET **** PERFORM IN ONE WORD ****
  34144. SA6 A2 **** PERFORM IN ONE WORD ****
  34145. EQ QPR2 PASS REQUEST TO *MTE*
  34146. ECS SPACE 4,10
  34147. ** ECS - *ECSM* EXTENSION FOR LOW SPEED PORT MMF MODE.
  34148. *
  34149. * *ECSM* SUBFUNCTIONS ARE PROCESSED EITHER BY *CPUMTR* OR BY
  34150. * *MTE* AS SHOWN BY THE FOLLOWING TABLE.
  34151. *
  34152. * *MTE* *CPUMTR*
  34153. *
  34154. * RRES READ RELATIVE USER EXTENDED MEMORY
  34155. * WRES WRITE RELATIVE USER EXTENDED MEMORY
  34156. * RECS READ SYSTEM EM (LINK DEVICE).
  34157. * WECS WRITE SYSTEM EM (LINK DEVICE).
  34158. * SFRS SET FLAG REGISTER BIT (LINK DEVICE).
  34159. * CFRS CLEAR FLAG REGISTER BIT (LINK DEVICE).
  34160. * PELS PROCESS EM LIST FUNCTION ABSOLUTE.
  34161. * PELS PROCESS EM LIST FUNCTION RELATIVE.
  34162. * BIT 20 OF OR INDICATES RELATIVE LIST.
  34163.  
  34164.  
  34165. ECS MX2 -24
  34166. BX2 -X2*X1
  34167. AX2 21
  34168. SB3 X2
  34169. LE B3,B1,/ECS/ECS IF READ/WRITE RELATIVE EM
  34170. SB4 PELS
  34171. LT B3,B4,QPR IF LINK DEVICE FUNCTION - PASS TO *MTE*
  34172. NE B3,B4,/ECS/ECS IF INVALID FUNCTION
  34173. LX1 59-19
  34174. PL X1,QPR IF NOT RELATIVE ADDRESS LIST
  34175. LX1 19-59
  34176. EQ /ECS/ECS PROCESS RELATIVE LIST
  34177. SDI SPACE 4,10
  34178. ** SDI - SET DEVICE INTERLOCK.
  34179. *
  34180. * ENTRY (X3) = *TDGL* WORD OF MST.
  34181. * (X5) = -7777B.
  34182. * (X6) = INTERLOCK FIELD (LOWER 6 BITS) OF *SDGL*.
  34183. * (B5) = EXIT ADDRESS, IF NEED TO READ MST/TRT.
  34184. * (B6) = 0, IF NOT TO INTERLOCK MST/TRT.
  34185. * (A4) = ADDRESS OF *SDGL* WORD OF MST.
  34186. *
  34187. * EXIT (B4) = TRT LENGTH.
  34188.  
  34189.  
  34190. SDI LX3 24
  34191. SX0 B1
  34192. LX0 58
  34193. BX0 X0+X3
  34194. LX3 12 SET TRT LENGTH
  34195. BX3 -X5*X3
  34196. SB4 X3
  34197. ZR B6,/PROGRAM/CTR2 IF NOT TO INTERLOCK DEVICE
  34198. TX2 A5-1,-FP COMPUTE PP REQUEST BIT
  34199. SX3 B1
  34200. AX2 3
  34201. SB6 X2
  34202. LX6 X3,B6
  34203. SX2 A4+MCLL-SDGL
  34204.  
  34205. * SET INTERLOCK BIT FOR THIS PP IF NO REQUEST PENDING.
  34206.  
  34207. + SA2 X2 **** PERFORM IN ONE WORD ****
  34208. NZ X2,SDI1 IF SET **** PERFORM IN ONE WORD ****
  34209. SA6 A2 **** PERFORM IN ONE WORD ****
  34210. EQ SDI2 REREAD *SDGL*
  34211.  
  34212. SDI1 BX2 X6-X2
  34213. NZ X2,/PROGRAM/REJ IF INTERLOCK OWNED BY ANOTHER PP
  34214. SDI2 SA4 A4 REREAD MST/TRT CURRENT FLAG
  34215. MX7 -6
  34216. BX7 -X7*X4
  34217. LX7 59-0
  34218. NG X7,/PROGRAM/REJ IF INTERLOCK SET
  34219. ZR X7,QPR1 IF MST/TRT NOT VALID IN CM
  34220.  
  34221. * SET MST INTERLOCK.
  34222.  
  34223. + SA4 A4 **** PERFORM IN ONE WORD ****
  34224. BX6 X3+X4 **** PERFORM IN ONE WORD ****
  34225. SA6 A4 **** PERFORM IN ONE WORD ****
  34226. BX6 X6-X4
  34227. NZ X6,/PROGRAM/CTR2 IF INTERLOCK OBTAINED
  34228. EQ /PROGRAM/REJ REJECT REQUEST
  34229. QPR SPACE 4,15
  34230. ** QPR - QUEUE PP REQUEST TO *MTE*.
  34231. *
  34232. * THIS ROUTINE PASSES REQUESTS TO *MTE* FOR PROCESSING.
  34233. *
  34234. * NOTE - THIS ROUTINE MUST BE INTERRUPTABLE ON EACH WORD
  34235. * BOUNDARY SINCE IT MAY BE ENTERED FROM BOTH MONITOR AND
  34236. * PROGRAM MODE.
  34237. *
  34238. * ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
  34239. * (B5) = EXIT ADDRESS, IF ENTERED AT *QPR1*.
  34240. * (X6) = 36/,12/ PM,12/ FN, IF ENTERED AT *QPR3*.
  34241. * PM = FUNCTION PARAMETER.
  34242. * OUTPUT REGISTER ADDRESS FOR *SDIF*/*AFAF*.
  34243. * MST ADDRESS / 10B FOR *CDIF*.
  34244. * FN = *MTE* FUNCTION CODE.
  34245.  
  34246.  
  34247. QPR SB5 /MONITOR/PPRX SET RETURN ADDRESS
  34248. EQ QPR2 SKIP CLEARING PROGRAM MODE BIT
  34249.  
  34250. QPR1 SA5 A5 CLEAR PROGRAM MODE
  34251. MX7 5
  34252. BX7 -X7*X5
  34253. SA7 A5
  34254. QPR2 SX6 A5 SET FUNCTION FOR *MTE*
  34255. R= X1,PPRF
  34256. LX6 12
  34257. BX6 X6+X1
  34258.  
  34259. * ENTER HERE IF (B5) SET AND NOT TO CLEAR PROGRAM MODE BIT.
  34260.  
  34261. QPR3 SX1 QE
  34262. SX5 77B
  34263. ERRNZ MXQP-100B CODE DEPENDS ON LENGTH OF TABLE
  34264. + SA1 X1 **** PERFORM IN ONE WORD ****
  34265. IX7 X1+X5 **** PERFORM IN ONE WORD ****
  34266. BX7 X5*X7 **** PERFORM IN ONE WORD ****
  34267. SA7 A1 **** PERFORM IN ONE WORD ****
  34268. SA6 MTET+X1
  34269. JP B5 RETURN
  34270. VMS SPACE 4,15
  34271. ** VMS - VALIDATE MASS STORAGE.
  34272. *
  34273. * WHEN *VMSM* DETERMINES THAT A DEVICE VALIDATION ERROR EXISTS
  34274. * IT LEAVES THE DEVICE INTERLOCKED. IT MUST NOT LEAVE THE
  34275. * PP MASK BIT SET IN *MCLL*. THIS BIT BEING SET WOULD PREVENT
  34276. * THE MST/TRT FROM BEING WRITTEN BACK TO EXTENDED MEMORY WHEN
  34277. * *DSD* ISSUES A *VMSM* IN RESPONSE TO A *VALIDATE* COMMAND.
  34278. *
  34279. * ENTRY (A3) = ADDRESS OF *TDGL* MST WORD.
  34280. *
  34281. * EXIT TO /PROGRAM/PRG.
  34282.  
  34283.  
  34284. VMS SA2 A3+MCLL-TDGL CLEAR BITS FOR ALL PP-S
  34285. MX6 -20
  34286. BX6 X6*X2
  34287. SA6 A2
  34288. EQ /PROGRAM/CSM1 CHECK FOR STORAGE MOVE
  34289. TMMF SPACE 4,10
  34290. TMMF BSS 0 MAINFRAME STATE TABLE
  34291. DUP MXMF,1
  34292. DATA 0
  34293. MTET BSS 0 PP REQUEST LIST
  34294. DUP MXQP,1
  34295. DATA 0
  34296. QE CON MXQP-1 END OF QUEUE POINTER (PP NUMBER)
  34297. MTIN DATA 0 SHARED DEVICE REQUEST QUEUE *IN* POINTER
  34298. MTOT DATA 0 SHARED DEVICE REQUEST QUEUE *OUT* POINTER
  34299. MTBT BSS 0 SHARED DEVICE REQUEST QUEUE
  34300. DUP MXQP,1
  34301. DATA 0
  34302. SMU SPACE 4,25
  34303. ** SMU - FLAG MRT UPDATE TO *MTE*.
  34304. *
  34305. * THIS ROUTINE IS CALLED WHEN CHANGING AN MRT BIT. IT SETS
  34306. * THE MRT UPDATED FLAG IN *MCLL* WHICH CAUSES *MTE* TO WRITE
  34307. * THE MRT TO EXTENDED MEMORY.
  34308. *
  34309. * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  34310. * (X4) = CALLER FLAG.
  34311. * .LT. 0, IF CALLED BY *DTC*.
  34312. * .EQ. 0, IF CALLED BY *STBM*.
  34313. * .GT. 0, IF CALLED BY *RTC*.
  34314. * (A3) = MST ADDRESS (*TDGL*).
  34315. * (A6) = MRT WORD.
  34316. * (B3) = MRT FWA.
  34317. *
  34318. * EXIT (X6) = 0.
  34319. * (X1) = FWA OF TRT TO UPDATE, IF *STBM* CALL.
  34320. * (X5) = LWA + 1 OF TRT TO UPDATE, IF *STBM* CALL.
  34321. *
  34322. * USES X - 1, 6.
  34323. * A - 1, 6.
  34324.  
  34325.  
  34326. SMU SA1 A3+MCLL-TDGL UPDATE *MCLL*
  34327. SX6 B1
  34328. LX6 35
  34329. BX6 X1+X6
  34330. SA6 A1+
  34331. BX6 X6-X6
  34332. NG X4,/PROGRAM/DTC5 IF CALLED BY *DTC*
  34333. NZ X4,/PROGRAM/RTC13 IF CALLED BY *RTC*
  34334. SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
  34335. SX5 X1+B1
  34336. EQ /PROGRAM/CCP1 CHECK FOR CHECKPOINT REQUESTED
  34337.  
  34338. ENDBLK
  34339. BLOCK ISD,(INDEPENDENT SHARED DEVICE PROCESSING.)
  34340. CHR SPACE 4,40
  34341. ** CHR - CHECK FOR HELPER PP REQUIRED.
  34342. *
  34343. * *CHR* WILL EXIT TO A FUNCTION PROCESSOR, REJECT THE FUNCTION,
  34344. * QUEUE IT, OR ISSUE A *BOTM* FUNCTION TO INITIATE A HELPER,
  34345. * DEPENDING ON THE DEVICE STATUS AND THE REQUEST.
  34346. *
  34347. * - IF THE DEVICE IS NOT ISHARED OR THE CENTRAL MEMORY COPY OF
  34348. * THE TABLES ARE CURRENT, THE FUNCTION WILL BE PROCESSED.
  34349. *
  34350. * - IF THE DEVICE IS NOT REMOVABLE, IS INACCESSIBLE, AND THE
  34351. * FUNCTION BEING PROCESSED IS *DTKM*, THE *DTKM* FUNCTION
  34352. * WILL BE QUEUED FOR LATER PROCESSING AND FUNCTION COMPLETE
  34353. * STATUS WILL BE RETURNED TO THE CALLER.
  34354. *
  34355. * - IF THE DEVICE IS INACCESSIBLE, THE FUNCTION BEING PROCESSED
  34356. * CANNOT BE QUEUED FOR LATER PROCESSING (NOT *DTKM* OR *DTKM*
  34357. * ON A REMOVABLE DEVICE), AND RETURN ON INACCESSIBLE IS
  34358. * SELECTED, THE INACCESSIBLE STATUS WILL BE RETURNED TO THE
  34359. * CALLER.
  34360. *
  34361. * - IF *1RU* IS ACTIVE AND OTHER FUNCTIONS ARE PENDING, THE
  34362. * REQUEST WILL BE QUEUED.
  34363. *
  34364. * - IF *1RU* IS ACTIVE AND NO OTHER FUNCTIONS ARE PENDING, THE
  34365. * FUNCTION WILL BE REJECTED.
  34366. *
  34367. * ENTRY (X5) = REQUEST.
  34368. *
  34369. * EXIT (X1) = UNPACKED REQUEST.
  34370. *
  34371. * USES X - ALL.
  34372. * A - 1, 2, 3, 4, 5, 6.
  34373. * B - 3, 4, 5 (SEE NOTE).
  34374. *
  34375. * NOTE - *B5* IS ONLY USED WHEN A FUNCTION IS REJECTED.
  34376. * OTHERWISE, IT MUST BE PRESERVED AS AN ENTRY CONDITION
  34377. * FOR *CTR1*.
  34378.  
  34379.  
  34380. CHR BSS 0 ENTRY
  34381. SA3 CHRA GET FUNCTION INDEX
  34382. UX1,B4 X5 GET THE FUNCTION NUMBER
  34383. MX6 -9
  34384. LX1 -36 GET THE EST ORDINAL
  34385. SB4 B4+1777B-CPUM
  34386. BX6 -X6*X1
  34387. AX3 B4
  34388. CX7 X6,EST CONVERT EST ORDINAL TO OFFSET
  34389. TX6 X6,-ESTL
  34390. TA4 X7+EQDE,EST
  34391. CX3 X3
  34392. MX7 -12
  34393. SB4 X3+
  34394. SA3 A3-B4 GET FUNCTION PARAMETERS
  34395. SX0 1
  34396. LX0 56-0
  34397. BX0 X0*X4 REMOVABLE DEVICE FLAG
  34398. LX0 58-56
  34399. BX3 -X0*X3 CLEAR *DTKM* FLAG IF REMOVABLE DEVICE
  34400. BX7 -X7*X4 GET THE MST ADDRESS
  34401. BX6 X6*X4
  34402. LX4 59-52
  34403. LX7 3
  34404. NG X4,CHR2 IF *ISHARED* DEVICE
  34405. CHR1 SB4 X3 GET FUNCTION PROCESSOR ADDRESS
  34406. UX1 X5 RESTORE PARAMETERS
  34407. JP B4 PROCESS THE REQUEST
  34408.  
  34409. CHR2 PL X6,CHR13 IF NOT MASS STORAGE OR OUT OF EST
  34410. SA2 X7+STLL GET PROHIBIT TRT UPDATE BIT
  34411. SA4 X7+SDGL GET TABLES-CURRENT BIT
  34412. LX2 59-LPTU
  34413. BX6 X3*X2 *1RU* HELPER .AND. PROHIBIT TRT UPDATE
  34414. SA2 X7+DALL GET SUSPECT BIT
  34415. NG X6,CHR1 IF *1RU* NOT NEEDED
  34416. LX2 59-55
  34417. LX1 59-45+36
  34418. NG X2,CHR10 IF DEVICE IS SUSPECT
  34419.  
  34420. * INITIATE PP HELPER PROGRAM.
  34421.  
  34422. CHR3 AX3 30 POSITION *BOTM* PARAMETERS
  34423. SX1 B1
  34424. SA2 A2+MCLL-DALL
  34425. PL X3,CHR8 IF HELPER IS NOT *1RU*
  34426. TX7 A5-1+10B,-FP GET PP BIT
  34427. SX6 A2
  34428. AX7 3
  34429. SA6 CHRB
  34430. SA3 A3 RESTORE PROCESSOR ADDRESS
  34431. SB4 X7
  34432. MX7 12+1 GET OR ADDRESS AND LONG-TERM INTERLOCK
  34433. LX1 B4
  34434. BX7 X7*X2
  34435. BX6 X2+X1 SET REQUEST-IN-PROGRESS
  34436. LX1 21
  34437. BX6 -X1*X6 CLEAR SET-REISSUE
  34438. NZ X7,CHR9 IF *1RU* ACTIVE OR *SDIS* IN EFFECT
  34439. SX2 B1 SET LATENCY ACTIVITY BIT
  34440. AX5 36 GET EST ORDINAL
  34441. BX6 X6+X2
  34442. SX2 3R1RU BUILD *1RU* CALL
  34443. SA6 A2
  34444. MX6 -9
  34445. SB3 CHR4 *APQ* RETURN ADDRESS
  34446. BX6 -X6*X5
  34447. LX2 -18
  34448. SB4 -B1 RETURN IF UNASSIGNABLE
  34449. TB7 0,SCA
  34450. BX6 X2+X6
  34451. EQ /MONITOR/APQ ATTEMPT TO ASSIGN *1RU*
  34452.  
  34453. CHR4 SA2 CHRB GET *MCLL* ADDRESS
  34454. SX3 /MONITOR/LA1RU*100B+/MONITOR/LA1BP SET *BOTM* PARAMS
  34455. SA2 X2
  34456. ZR X1,CHR6 IF NOT ASSIGNED
  34457. SX1 X1+B1 GET *1RU-S* OUTPUT REGISTER ADDRESS
  34458. TX7 A5-1+22*10B,-FP GET CALLER-S BIT
  34459. LX1 48
  34460. AX7 3
  34461. BX6 X2+X1
  34462. SX1 B1
  34463. SB4 X7
  34464. LX1 B4
  34465. CHR5 SA5 A5 SET STORAGE MOVABLE BIT
  34466. MX7 1
  34467. BX6 X6+X1 SET SET-REISSUE
  34468. LX7 56-59
  34469. SA6 A2
  34470. BX7 X5+X7
  34471. JP PPR1 LEAVE REQUEST PENDING
  34472.  
  34473. CHR6 SX7 A5 SET PP OUTPUT REGISTER ADDRESS
  34474. SB5 CHR7 *IBF* REJECT RETURN ADDRESS
  34475. LX7 48
  34476. BX6 X2+X7
  34477. SA6 A2
  34478. JP /MONITOR/IBF ISSUE *BOTM* FUNCTION
  34479.  
  34480. CHR7 SA1 CHRB GET *MCLL* ADDRESS
  34481. SA1 X1 GET *MCLL*
  34482. MX2 22+12
  34483. LX2 22 CLEAR REQUESTS-IN-PROGRESS/LATENCY BITS
  34484. BX6 -X2*X1
  34485. SA6 A1+
  34486. EQ PPRX EXIT
  34487.  
  34488. CHR8 SB5 PPRX SET *IBF* REJECT RETURN ADDRESS
  34489. EQ /MONITOR/IBF ISSUE *BOTM* FUNCTION
  34490.  
  34491. CHR9 SA4 A2+SDGL-MCLL GET TABLES-CURRENT BIT
  34492. MX7 -42 GET ACTIVITY BITS
  34493. BX7 -X7*X2
  34494. ZR X7,CHR12 IF TABLES ARE BEING REWRITTEN
  34495. LX4 59-58
  34496. SA6 A2 SET REQUEST IN PROGRESS BIT
  34497. PL X4,CHR5 IF TABLES ARE NOT CURRENT
  34498. EQ CHR1 PROCESS REQUEST
  34499.  
  34500. * CHECK CALLER FOR ACCESSIBILITY TO SUSPECT DEVICE.
  34501.  
  34502. CHR10 TX4 A5-1,-FP
  34503. LX4 PPXES-PPCES
  34504. LX7 X3,B1 POSITION *DTKM* BIT
  34505. TA4 X4+ACPP,FPX
  34506. MX6 -36
  34507. SB7 X4 CP ADDRESS
  34508. NG X7,QDT IF *DTKM* FUNCTION
  34509. SA4 B7+JCIW GET SUBSYSTEM ID
  34510. BX6 -X6*X4
  34511. SA4 B7+SEPW GET *UTL=* BIT
  34512. SX2 X2+B1 CHECK FOR *DOWN* STATE
  34513. AX6 24
  34514. LX2 59-2
  34515. SX6 X6-LSSI-1
  34516. LX4 59-56
  34517. BX7 -X6+X4
  34518. SA4 A2+SDGL-DALL
  34519. NG X2,CHR11 IF DEVICE IS DOWN
  34520. NG X7,CHR3 IF SUBSYSTEM OR *UTL=* ENTRY POINT IS SET
  34521. CHR11 NG X1,CHR14 IF RETURN-ON-INACCESSIBLE REQUESTED
  34522. SB5 CHR12
  34523. SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
  34524. BX7 X5 RESTORE REQUEST
  34525. EQ /ISD/CDI CLEAR *MCLL* BITS AND RETURN
  34526.  
  34527. CHR12 SB5 PPRX SET *REJ* RETURN ADDRESS
  34528. EQ /PROGRAM/REJ REJECT REQUEST
  34529.  
  34530. CHR13 SB5 PPRX SET *HNG* RETURN ADDRESS
  34531. EQ HNG1 HANG PP
  34532.  
  34533. CHR14 SA3 /MONITOR/TFPL-1+/MONITOR/LA3RX GET *3RX* PLD POINTER
  34534. SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
  34535. SB5 B0 SET DIRECT RETURN FROM *CDI*
  34536. SB4 X3+ *3RX* PLD ADDRESS
  34537. SB3 CHR15 SET *CDI* RETURN ADDRESS
  34538. NZ B4,/ISD/CDI IF PLD NOT BEING MODIFIED
  34539. EQ CHR12 REJECT REQUEST
  34540.  
  34541. CHR15 SA5 A5+ GET ORIGINAL OUTPUT REGISTER
  34542. MX6 1
  34543. BX7 X6*X7
  34544. BX7 X6-X7 SET *MSD* SUBSYSTEM STATUS
  34545. SB3 PPRX SET *EFP* RETURN ADDRESS
  34546. UX5 X5 SET OUTPUT REGISTER PARAMETERS
  34547. EQ /MONITOR/EFP CALL *3RX* AND EXIT
  34548. CHR SPACE 4,10
  34549. ** IFT - ISHARED FUNCTION TABLE GENERATOR.
  34550. *
  34551. * *IFT* DEFINES THE FUNCTION PROCESSOR, PP HELPER, AND
  34552. * BOOTSTRAP PROGRAM FOR EACH ISHARED FUNCTION. IT ALSO BUILDS
  34553. * A MICRO WHICH WILL CREATE A BIT MAP OF THE ISHARED FUNCTIONS.
  34554. *
  34555. * FUNC IFT BOOT,HELPER,PROCR
  34556. *
  34557. * ENTRY *BOOT* = BOOTSTRAP PROGRAM NAME.
  34558. * *HELPER* = HELPER PP NAME.
  34559. * *PROCR* = *CPUMTR* PROCESSOR FOR FUNCTION.
  34560.  
  34561.  
  34562. PURGMAC IFT
  34563.  
  34564. MACRO IFT,FUNC,BOOT,HELPER,PROCR
  34565. P ERRPL .1-FUNC FUNCTIONS MUST BE IN ASCENDING ORDER
  34566. P ERRNG LA1RU-LA_HELPER ASSUMED BY *PROHIBIT TRT UPDATE* TEST
  34567. LOC FUNC
  34568. .1 SET FUNC
  34569. .A IFC EQ,$HELPER$1RU$
  34570. .B IFC EQ,$FUNC$DTKM$
  34571. VFD 1/1,1/1,10/,6/0,6/LA_HELPER,6/LA_BOOT,1/1,11/,18/PROCR
  34572. .B ELSE
  34573. VFD 1/1,1/0,10/,6/0,6/LA_HELPER,6/LA_BOOT,1/1,11/,18/PROCR
  34574. .B ENDIF
  34575. .A ELSE
  34576. VFD 1/0,11/,6/0,6/LA_HELPER,6/LA_BOOT,1/0,11/,18/PROCR
  34577. .A ENDIF
  34578. LOC *O
  34579. .1 DECMIC FUNC-CPUM
  34580. .M MICRO 1,,$1S".1"+".M"$
  34581. IFT ENDM
  34582.  
  34583. QUAL MONITOR
  34584. .M MICRO 0,,
  34585. .1 SET 0
  34586.  
  34587.  
  34588. ** TABLE OF ISHARED MONITOR FUNCTIONS.
  34589. *
  34590. *T 1/R, 1/D, 10/ ,18/ *IBF* PARAMETERS ,1/R, 11/ ,18/ PROCESSOR.
  34591. *
  34592. * R 1 = HELPER PP IS *1RU*.
  34593. * D 1 = FUNCTION IS *DTKM*.
  34594.  
  34595.  
  34596. AFAM IFT 1BP,1FA,.AFAM
  34597. DLKM IFT 1BP,1RU,PMR
  34598. DTKM IFT 1BP,1RU,.DTKM
  34599. RTCM IFT 1BP,1RU,PMR
  34600. STBM IFT 1BP,1RU,/PROGRAM/CTR1
  34601. VMSM IFT 1BP,1RU,PMR
  34602. QUAL *
  34603.  
  34604. CHRA CON ".M" ISHARED FUNCTION BIT MAP
  34605.  
  34606. CHRB CON ** CURRENT MST *MCLL* ADDRESS
  34607. AMM SPACE 4,10
  34608. ** AMM - ACTIVATE MONITOR MODE (PROGRAM MODE).
  34609. *
  34610. * ENTRY (X0) = PP REQUEST.
  34611. * (B3) = EXIT ADDRESS.
  34612. *
  34613. * USES X - 6.
  34614. * A - 6.
  34615.  
  34616.  
  34617. QUAL PROGRAM
  34618. AMM SX6 -2 SET *MTR*-LIKE REQUEST TO MONITOR MODE
  34619. SA6 PX
  34620.  
  34621. MJ EXCHANGE TO MONITOR MODE
  34622.  
  34623. JP B3 RETURN
  34624. QUAL *
  34625. CDI SPACE 4,35
  34626. ** CDI - CLEAR DEVICE INTERLOCK EXTENSION FOR ISHARED DEVICES.
  34627. *
  34628. * *CDI* CLEARS THE PP-S REQUEST-IN-PROGRESS AND SET-REISSUE-BIT
  34629. * BITS. IF THE REQUEST ORIGINATED FROM THE PP THAT IS RUNNING
  34630. * *1RU*, *CDI* ALSO CLEARS THE LATENCY ACTIVITY BIT. IF ALL
  34631. * THE ACTIVITY BITS IN *MCLL* ARE CLEARED, *CDI* CLEARS THE
  34632. * TABLES-CURRENT FLAG IN *SDGL*. SINCE CLEARING TABLES-CURRENT
  34633. * CAN BE DONE IN MONITOR MODE, WITH OR WITHOUT THE *CPUMTR*
  34634. * INTERLOCK SET, AND CAN ALSO BE DONE IN PROGRAM MODE, INSURING
  34635. * THE INTEGRITY OF *SDGL* REQUIRES RESTRICTIONS ON THE CHANGES
  34636. * THAT CAN BE MADE TO *SDGL* FROM THE TIME IT IS FETCHED BY
  34637. * *CDI* IN THE *PROGRAM* BLOCK AND STORED BY *CDI* IN THE *ISD*
  34638. * BLOCK.
  34639. * THE CODE AT *CDI2* ASSUMES THAT THE ONLY CHANGES THAT WILL BE
  34640. * MADE ARE THE CLEARING OF BITS, NAMELY THE *CPUMTR* INTERLOCK
  34641. * AND THE TABLES-CURRENT BITS.
  34642. *
  34643. * ENTRY (A4) = *SDGL* ADDRESS.
  34644. * (A5) = OUTPUT REGISTER ADDRESS.
  34645. * (X6) = BIT 0 OF *SDGL* MASK.
  34646. * 0, IF CLEARING PROGRAM/MONITOR MODE INTERLOCK.
  34647. * 1, IF PRESERVING INTERLOCK.
  34648. * (X7) = OUTPUT REGISTER IF TO EXIT TO *CSM*.
  34649. * (B5) = *CSM* RETURN ADDRESS IF .NE. 0.
  34650. * (B3) = RETURN ADDRESS IF (B5) .EQ. 0.
  34651. *
  34652. * EXIT TO *CSM* IF (B5) .NE. 0 ON ENTRY.
  34653. * TO (B3) RETURN ADDRESS IF (B5) .EQ. 0 ON ENTRY.
  34654. *
  34655. * USES X - 1, 2, 3, 4, 5, 6.
  34656. * A - 3, 4, 6.
  34657. * B - 6.
  34658.  
  34659.  
  34660. CDI BSS 0
  34661. SA3 A4+MCLL-SDGL CLEAR ACTIVITY BITS
  34662. TX2 A5-1+10B,-FP GET PP BIT
  34663. MX5 59 SAVE PROGRAM/MONITOR MODE INTERLOCK
  34664. AX2 3
  34665. BX4 X5+X6
  34666. MX1 12 CHECK FOR CALL FROM *1RU*
  34667. BX1 X1*X3
  34668. SB6 X2+
  34669. LX1 12
  34670. SX3 A5
  34671. LX2 X5,B6
  34672. BX3 X1-X3
  34673. LX6 X5,B6 CLEAR SET-REISSUE
  34674. LX2 21
  34675. NZ X3,CDI1 IF NOT FROM *1RU*
  34676. BX6 X6*X5 CLEAR LATENCY ACTIVITY BIT
  34677. CDI1 BX6 X6*X2 CLEAR REQUEST-IN-PROGRESS
  34678. MX2 -42
  34679. LX5 6
  34680. + SA3 A3 **** PERFORM IN ONE WORD ****
  34681. BX6 X6*X3 **** PERFORM IN ONE WORD ****
  34682. SA6 A3 **** PERFORM IN ONE WORD ****
  34683. SA3 A4 **** PERFORM IN ONE WORD ****
  34684. BX2 -X2*X6 CHECK FOR NO OUTSTANDING FUNCTIONS
  34685. BX6 X4
  34686. LX4 X3,B1 CHECK TABLES CURRENT
  34687. SX3 B0 MST/TRT UPDATE COUNTER INCREMENT
  34688. PL X4,CDI2 IF TABLES ARE NOT CURRENT
  34689. ZR X1,CDI2 IF *1RU* IS NOT ACTIVE
  34690. NZ X2,CDI2 IF FUNCTIONS REMAIN
  34691. PX6 X6 CLEAR TABLES CURRENT BIT
  34692. BX3 -X5 INCREMENT MST/TRT UPDATE COUNTER
  34693. CDI2 SA4 A4 **** PERFORM IN ONE WORD ****
  34694. BX6 X6*X4 **** PERFORM IN ONE WORD ****
  34695. IX6 X6+X3 **** PERFORM IN ONE WORD ****
  34696. SA6 A4 **** PERFORM IN ONE WORD ****
  34697. NZ B5,/PROGRAM/CSM1 IF EXIT VIA *CSM*
  34698. JP B3 RETURN
  34699. CTR SPACE 4,10
  34700. ** CTR - *CTR* ISHARED PROCESSING.
  34701.  
  34702.  
  34703. CTR3 BX0 X3 SET TRT LENGTH
  34704. AX0 24
  34705. BX0 -X5*X0
  34706. SB4 X0
  34707. BX0 X0-X0
  34708. PX0 X0,B4
  34709. ZR B6,/PROGRAM/CTR2 IF NO INTERLOCK
  34710. EQ /PROGRAM/CTR1.1 INTERLOCK MST
  34711. MNR SPACE 4,10
  34712. ** *MNR* EXTENSION FOR ISHARED PROCESSING.
  34713. *
  34714. * PROCESS *MTR*-LIKE FUNCTION.
  34715. *
  34716. * ENTRY (X3) = MONITOR MODE START TIME.
  34717.  
  34718.  
  34719. MNR5 NE B3,B1,/MONITOR/MNR5 IF NOT *MTR*-LIKE REQUEST
  34720. SA1 B2+10B GET CALLER-S *X0* REGISTER
  34721. BX5 X3 SET MONITOR MODE START TIME FOR *PMN*
  34722. BX0 X1
  34723. SA1 X1+
  34724. SB3 X0-MXPF
  34725. NG B3,/MONITOR/PMN1 IF NOT PP REQUEST
  34726. MX7 -7-48 CLEAR PROGRAM MODE BIT
  34727. BX7 -X7*X1
  34728. SA7 A1+
  34729. EQ /MONITOR/PMN4 PROCESS PP FUNCTION
  34730. QDT SPACE 4,25
  34731. ** QDT - QUEUE DROPPABLE TRACKS.
  34732. *
  34733. * *QDT* COMPLETES *DTKM* REQUESTS BY PLACING THEM IN A QUEUE
  34734. * WHEN THE FOLLOWING CONDITIONS ARE MET.
  34735. * - THE PP ISSUING THE FUNCTION IS ASSIGNED TO A JOB.
  34736. * - THE JOB IS NOT BEING STORAGE MOVED.
  34737. * - THE *DTKM* IS NOT SETTING *EOI*.
  34738. * - THE QUEUE IN THE JOB-S NFL IS NOT FULL.
  34739. *
  34740. * ENTRY (A2) = ADDRESS OF *DALL* WORD IN THE MST.
  34741. * (A3) = ADDRESS OF FUNCTION PARAMETERS.
  34742. * (X1) = LOWER 48 BITS OF *OR* WITH BIT 45 MOVED TO 59.
  34743. * (X3) = FUNCTION PARAMETERS.
  34744. * (X5) = OUTPUT REGISTER.
  34745. * (B7) = CONTROL POINT AREA ADDRESS.
  34746. *
  34747. * EXIT TO *CHR10* WITH *DTKM* BIT CLEARED, IF REQUEST CANNOT
  34748. * BE QUEUED.
  34749. * TO *CHR12* TO REJECT REQUEST IF CONTROL POINT BEING
  34750. * MOVED.
  34751. *
  34752. * USES X - 0, 1, 2, 3, 4, 6, 7.
  34753. * A - 1, 2, 3, 4, 6.
  34754. * B - 3, 4, 6, 7.
  34755.  
  34756.  
  34757. QDT BSS 0 ENTRY
  34758. SA4 SMRL
  34759. SX6 B7+
  34760. LX6 -7 CP NUMBER
  34761. MX7 -12
  34762. BX6 X4-X6
  34763. BX6 -X7*X6
  34764. ZR X6,CHR12 IF CONTROL POINT MOVING
  34765. SA4 B7+FLSW GET RA AND NFL
  34766. TX6 B7,-SCA
  34767. ZR X6,QDT3 IF SYSTEM CONTROL POINT
  34768. BX7 X5 CHECK REQUEST
  34769. MX6 -36
  34770. ZR B7,QDT3 IF SYSTEM CONTROL POINT
  34771. LX7 59-35
  34772. BX6 -X6*X4 GET RA/100
  34773. PL X7,QDT3 IF SET *EOI* REQUEST
  34774. SX7 QFBN
  34775. AX4 48 GET NFL
  34776. AX6 12
  34777. ZR X4,QDT3 IF INSUFFICIENT NFL
  34778. LX6 6 RA
  34779. IX7 X6-X7 ABSOLUTE ADDRESS OF *QFBN* QUEUE
  34780. SX6 -QFBL
  34781. QDT1 SX6 X6+B1 SEARCH FOR EMPTY ENTRY
  34782. IX4 X7-X6
  34783. ERX4 X4
  34784. BX3 X4-X5
  34785. NZ X4,QDT2 IF ENTRY NOT AVAILABLE
  34786. SB7 X6-1 SAVE ORDINAL OF AVAILABLE ENTRY
  34787. QDT2 LX3 0-45 IGNORE THE REQUEST FLAGS
  34788. AX3 3
  34789. ZR X3,QDT3 IF REQUEST IS ALREADY IN THE TABLE
  34790. NG X6,QDT1 IF MORE ENTRIES TO CHECK
  34791. NG B7,QDT4 IF ENTRY IS AVAILABLE
  34792. QDT3 SA3 A3 RESTORE FUNCTION PARAMETERS
  34793. MX6 -59 CLEAR *DTKM* BIT
  34794. LX6 58-59
  34795. BX3 -X6*X3
  34796. EQ CHR10 REQUEST CANNOT BE QUEUED
  34797.  
  34798. QDT4 SX4 B7+B1 SET REQUEST IN *QFBN* QUEUE
  34799. BX6 X5
  34800. IX4 X7-X4
  34801. EWX6 X4
  34802.  
  34803. * COMPUTE NUMBER OF SECTORS DROPPED.
  34804.  
  34805. SA2 A2+TRLL-DALL SET TRT BASE ADDRESS
  34806. MX6 12
  34807. LX1 24-59+45 POSITION FIRST TRACK
  34808. MX7 -2
  34809. SB6 B0 PRESET TRACK COUNT
  34810. SB3 X2-4000B/4 PRESET TRT FWA
  34811. QDT5 BX0 X6*X1 EXTRACT LINK
  34812. LX0 10
  34813. SB6 B6+B1
  34814. SA1 B3+X0 READ TRT WORD
  34815. LX0 2
  34816. BX2 -X7*X0 EXTRACT BYTE
  34817. LX2 2 BYTE * 4
  34818. LX3 X2,B1 BYTE * 8
  34819. IX2 X3+X2 BYTE * 12
  34820. SB4 X2+
  34821. LX1 X1,B4 POSITION TRACK BYTE
  34822. NG X1,QDT5 IF NOT END OF TRACK CHAIN
  34823. SA2 A2+MDGL-TRLL GET SECTORS PER TRACK
  34824. SX3 B6-B1 NUMBER OF FULL TRACKS
  34825. SA4 A2+SDGL-MDGL SET *SDGL* ADDRESS
  34826. MX7 -12
  34827. AX1 48 SECTORS IN LAST TRACK
  34828. BX2 -X7*X2
  34829. SX6 1 SET TO PRESERVE INTERLOCK
  34830. IX3 X3*X2
  34831. SB5 PPR1 SET EXIT ADDRESS
  34832. IX7 X3+X1
  34833. EQ CDI CLEAR PP ACTIVITY BITS
  34834. RTC SPACE 4,10
  34835. ** RTC - RTCM ISD PROCESSING.
  34836.  
  34837.  
  34838. * SET INTERMEDIATE RESPONSE FOR ISHARED DEVICE.
  34839.  
  34840. RTC SX3 B4
  34841. CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
  34842. TA4 X4+EQDE,EST READ EST ENTRY
  34843. LX4 59-52
  34844. PL X4,/PROGRAM/CTR IF NOT ISHARED DEVICE
  34845. SX0 A5 REISSUE FUNCTION
  34846. SB3 /PROGRAM/PRG RETURN ADDRESS
  34847. EQ /PROGRAM/AMM ACTIVATE MONITOR MODE
  34848. SMD SPACE 4,10
  34849. ** SMD - SMDM ISHARED PROCESSING.
  34850.  
  34851. * CTCS - CLEAR TABLES-CURRENT FLAG
  34852.  
  34853. SUBFUN SMDM,(CTCS,C1AS)
  34854. SX7 X2-CTCS
  34855. SA2 A3+MCLL-TDGL
  34856. ZR X7,SMD1 IF *CTCS*
  34857. MX6 -48 CLEAR *1RU* OUTPUT REGISTER ADDRESS
  34858. BX6 -X6*X2
  34859. SA6 A2+
  34860. SMD1 SA4 A4 GET *SDGL*
  34861. SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
  34862. EQ /ISD/CDI CLEAR WAITING FOR LATENCY
  34863. SMU SPACE 4,25
  34864. ** SMU - SET MRT-UPDATED FLAG.
  34865. *
  34866. * *SMU* SETS THE TRT- AND MRT-UPDATED FLAGS IN *SDGL*. THIS
  34867. * CAUSES *1RU* TO WRITE THE TRT AND MRT TO THE DEVICE. *SMU*
  34868. * ALSO COPIES THE (MST/RT UPDATE COUNTER + 1) FROM *SDGL* TO
  34869. * THIS MAINFRAME-S *DIT* ENTRY.
  34870. *
  34871. * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ 0.
  34872. * (X4) = CALLER FLAG.
  34873. * .LT. 0, IF CALLED BY *DTC*.
  34874. * .EQ. 0, IF CALLED BY *STBM*.
  34875. * .GT. 0, IF CALLED BY *RTC*.
  34876. * (A3) = MST ADDRESS (*TDGL*).
  34877. * (B3) = MRT FWA.
  34878. *
  34879. * EXIT (X6) = 0.
  34880. *
  34881. * USES X - 0, 1, 6.
  34882. * A - 1, 6.
  34883. * B - 3.
  34884.  
  34885.  
  34886. SMU MX6 2 SET TRT- AND MRT-UPDATE FLAGS
  34887. LX0 12 POSITION TRT LENGTH
  34888. LX6 -2
  34889. + SA1 A3+SDGL-TDGL **** PERFORM IN ONE WORD ****
  34890. BX6 X1+X6 **** PERFORM IN ONE WORD ****
  34891. SA6 A1 **** PERFORM IN ONE WORD ****
  34892.  
  34893. * SET THE UPDATE COUNTER IN THE *DIT*.
  34894.  
  34895. SA1 A3+DULL-TDGL GET MAINFRAME INDEX
  34896. SX0 X0-2000B+7 GET MRT LENGTH
  34897. AX6 6 POSITION THE MST/TRT UPDATE COUNTER
  34898. AX0 3
  34899. SB3 B3+X0 FWA OF DIT
  34900. SX0 B1
  34901. IX6 X6+X0
  34902. MX0 -4
  34903. LX1 -24
  34904. BX1 -X0*X1 MAINFRAME INDEX - 1
  34905. SA1 X1+B3 DIT ENTRY FOR THIS MAINFRAME
  34906. MX0 -30
  34907. BX6 -X0*X6
  34908. LX1 -18
  34909. BX1 X0*X1 CLEAR THE OLD COUNTER VALUE
  34910. BX6 X1+X6
  34911. LX6 18
  34912. SA6 A1
  34913. SX6 B0+
  34914. NG X4,/PROGRAM/DTC5 IF CALLED BY *DTC*
  34915. NZ X4,/PROGRAM/RTC13 IF CALLED BY *RTC*
  34916. EQ /PROGRAM/CCP1 CHECK FOR CHECKPOINT REQUESTED
  34917. STB SPACE 4,15
  34918. ** STB - STBM ISHARED PROCESSING.
  34919.  
  34920.  
  34921.  
  34922. * SET THE LONG-TERM DEVICE INTERLOCK IN *MCLL*.
  34923. *
  34924. * ENTRY (A3) = MST ADDRESS (*TDGL*).
  34925. *
  34926. * EXIT (X6) = 1.
  34927. * TO */ISD/CDI*.
  34928. *
  34929. * USES X - 2, 6, 7.
  34930. * A - 2, 6.
  34931.  
  34932. STB2 SA2 A3+MCLL-TDGL SET LONG-TERM INTERLOCK
  34933. SX6 B1
  34934. MX7 -42 GET ACTIVITY BITS
  34935. LX6 47-0
  34936. BX7 -X7*X2
  34937. BX6 X6+X2
  34938. CX7 X7
  34939. AX7 1
  34940. ZR X7,STB3.1 IF NO OTHER REQUESTS ARE PENDING
  34941. SA4 A4 CLEAR THE MST/TRT INTERLOCK
  34942. MX6 59
  34943. BX6 X6*X4
  34944. SA6 A4+
  34945. EQ /PROGRAM/REJ REJECT REQUEST
  34946.  
  34947. STB3 SA2 A3+MCLL-TDGL SET LONG-TERM INTERLOCK
  34948. SA1 B2+17B GET ORIGINAL RESPONSE FROM PROGRAM MODE XP
  34949. SX6 B1
  34950. LX6 47-0
  34951. BX6 X6+X2
  34952. BX7 X1
  34953. STB3.1 SA6 A2
  34954. SX6 B1 PRESERVE MST/TRT INTERLOCK
  34955. EQ /ISD/CDI EXIT
  34956.  
  34957. * CLEAR THE LONG-TERM DEVICE INTERLOCK IN *MCLL*.
  34958. *
  34959. * ENTRY (A3) = MST ADDRESS (*TDGL*).
  34960. *
  34961. * EXIT TO *CHR*.
  34962. *
  34963. * USES X - 2, 5, 6.
  34964. * A - 2, 5, 6.
  34965. * B - 3.
  34966.  
  34967. STB4 SA2 A3+MCLL-TDGL CLEAR LONG-TERM INTERLOCK
  34968. SX6 B1
  34969. SA5 A5 RESTORE INPUT REGISTER
  34970. LX6 47-0
  34971. SB6 B0 DO NOT GET INTERLOCK
  34972. BX6 -X6*X2
  34973. SA6 A2
  34974. SB3 STB5 SET *CTR* EXIT ADDRESS
  34975. EQ CHR INITIATE *1RU*
  34976.  
  34977. STB5 UX4,B3 X0 SET *SMU* EXIT FLAG
  34978. SB3 B6+B3 *MRT* FWA
  34979. EQ SMU SET MRT UPDATE FLAG
  34980. VMS SPACE 4,10
  34981. ** VMS - *VMSM* EXTENSION FOR *ISHARED* DEVICES.
  34982. *
  34983. * *VMS* DECIDES WHETHER *1RU* NEEDS TO BE CALLED FOR THIS
  34984. * SUBFUNCTION.
  34985.  
  34986.  
  34987. VMS SX3 X5 GET SUBFUNTION
  34988. AX3 12
  34989. NZ X3,/MONITOR/PMR IF *1RU* IS NOT REQUIRED
  34990. ERRNZ VEIS CODE ASSUMES VALUE
  34991. EQ CHR CHECK FOR HELPER REQUIRED
  34992.  
  34993.  
  34994. * SET/CLEAR LONG-TERM INTERLOCK IN *MCLL*.
  34995.  
  34996. * ENTRY (X3) = 1, IF (X7) = 0.
  34997. * (X7) = RESPONSE.
  34998. * (A3) = ADDRESS OF MST WORD *TDGL*.
  34999. * (A5) = OUTPUT REGISTER ADDRESS.
  35000. * (B5) = RETURN ADDRESS.
  35001.  
  35002. VMS1 SA4 A3+SDGL-TDGL
  35003. PL X4,VMS3 IF NOT AN ISHARED DEVICE
  35004. SA2 A5 GET THE ORGINAL FUNCTION
  35005. SX4 X2 GET THE SUBFUNCTION
  35006. AX2 36 GET THE EST ORDINAL
  35007. AX4 12
  35008. SX2 X2+STBM*1S12-VMSM*1S12 CHANGE FUNCTION CODE TO *STBM*
  35009. SX6 SLTS SET LONG-TERM INTERLOCK
  35010. LX2 24
  35011. BX6 X2+X6
  35012. NZ X7,VMS2 IF VALIDATION ERRORS
  35013. BX4 X4-X3
  35014. ERRNZ VEQS-1 CODE ASSUMES VALUE
  35015. NZ X4,/PROGRAM/CDI IF NOT *VEQS* SUBFUNCTION
  35016. IX6 X6+X3 CLEAR DEVICE INTERLOCK
  35017. ERRNZ SLTS+1-CDIS CODE ASSUMES VALUE
  35018. VMS2 LX6 12
  35019. SA6 A5
  35020. SX0 A5 ISSUE *STBM*
  35021. SB3 B5 RETURN ADDRESS
  35022. EQ /PROGRAM/AMM ACTIVATE MONITOR MODE
  35023.  
  35024. VMS3 NZ X7,/PROGRAM/CSM1 IF VALIDATION ERRORS
  35025. EQ /PROGRAM/CDI CLEAR DEVICE INTERLOCK
  35026. SPACE 4,10
  35027. ** DEFINE TAGS FROM MAIN BLOCK.
  35028.  
  35029. HNG EQU /MONITOR/HNG
  35030. HNG1 EQU /MONITOR/HNG1
  35031. PPRX EQU /MONITOR/PPRX
  35032. PPR1 EQU /MONITOR/PPR1
  35033.  
  35034. ENDBLK
  35035. BLOCK ISDMMF,(SHARED DEVICE PROCESSING - MMF, LSPMMF OR ISD.)
  35036. CMB SPACE 4,15
  35037. ** CLEAR MRT BIT. (DROP TRACKS)
  35038. * CALLED IN PROGRAM MODE.
  35039. *
  35040. * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  35041. * (X4) = -3777B.
  35042. * (X7) = 2/ TRT BYTE, 40/, 18/ TRT WORD.
  35043. * (A3) = ADDRESS OF *TDGL* MST WORD.
  35044. * (B6) = TRT FWA.
  35045. *
  35046. * EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  35047. * (X4) = -3777B.
  35048. * (A6) = MRT WORD.
  35049. * (B3) = MRT FWA.
  35050.  
  35051.  
  35052. CMB LX7 -3 SET MRT ADDRESS AND BIT NUMBER
  35053. BX5 X4*X7 MRT BIT NUMBER
  35054. SX6 B1
  35055. LX5 5
  35056. SB3 X5
  35057. LX6 X6,B3 POSITION MRT BIT
  35058. UX1,B3 X0 UNPACK LENGTH OF TRT
  35059. SB3 B3+B6
  35060. SA1 B3+X7 READ MRT WORD
  35061. BX6 -X6*X1 CLEAR BIT
  35062. BX5 X6-X1
  35063. SA6 A1
  35064. LX7 3
  35065. BX6 X6-X6
  35066. NZ X5,CMB1 IF MRT BIT SET FOR THIS MACHINE
  35067. SA1 A5 TEST ALLOWING DROP TRACKS FOR OTHER MF
  35068. LX1 59-46
  35069. PL X1,/PROGRAM/HNG IF NOT ALLOWED TO DROP THIS FILE
  35070. CMB1 TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
  35071. SMB SPACE 4,15
  35072. ** SET MRT BIT. (REQUEST TRACKS)
  35073. * CALLED IN PROGRAM MODE.
  35074. *
  35075. * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  35076. * (X4) = TRACK NUMBER.
  35077. * (A3) = ADDRESS OF *TDGL* MST WORD.
  35078. *
  35079. * EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  35080. * (X4) = TRACK NUMBER.
  35081. * (A6) = MRT WORD.
  35082. * (B3) = MRT FWA.
  35083.  
  35084.  
  35085. SMB MX6 -5
  35086. BX6 -X6*X4
  35087. SB3 X6 MRT BIT NUMBER
  35088. SX6 B1
  35089. LX6 X6,B3 POSITION MRT BIT
  35090. UX1,B3 X0 UNPACK TRT LENGTH
  35091. SA1 A3+TRLL-TDGL SET FWA OF TRT
  35092. SB3 X1+B3 (B3) = START OF MRT
  35093. SX1 X4-4000B
  35094. LX1 -5
  35095. SA1 B3+X1 (A1) = MRT WORD ADDRESS
  35096. BX6 X1+X6
  35097. SA6 A1+
  35098. SA0 /PROGRAM/TMSK-1 SCRATCH WORD
  35099. TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
  35100. STB SPACE 4,10
  35101. * STBM SET/CLEAR MRT BIT.
  35102. * CALLED IN PROGRAM MODE.
  35103. *
  35104. * ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  35105. * (X1) = 2/ TRT BYTE, 40/, 18/ TRT WORD.
  35106. * (X4) = 0.
  35107. * (A3) = ADDRESS OF *TDGL* MST WORD.
  35108. * (B3) = RESERVATION BIT SHIFT COUNT (0=*STFS*/*CTFS*).
  35109. * (B6) = TRT FWA.
  35110. *
  35111. * EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
  35112. * (X4) = 0.
  35113. * (A6) = MRT WORD.
  35114. * (B3) = MRT FWA.
  35115. * (B4) .LT. TRT FWA.
  35116. * (X1) = FWA OF TRT TO UPDATE, IF NO MRT UPDATE.
  35117. * (X5) = LWA + 1 OF TRT TO UPDATE, IF NO MRT UPDATE.
  35118.  
  35119.  
  35120. STB10 UX6,B4 X0
  35121. ZR B3,STB12 IF FLAW REQUEST (NO MRT PROCESSING)
  35122. LX1 2
  35123. SX6 B3-6
  35124. AX6 59
  35125. MX3 -5
  35126. BX3 -X3*X1 MRT BIT POSITION
  35127. AX1 5 MRT WORD
  35128. SB3 X3
  35129. SX3 B1
  35130. LX3 X3,B3 POSITION MRT BIT
  35131. NZ X5,STB11 IF STIS/SPFS OPTION
  35132. BX6 -X6
  35133. STB11 SB3 B4+B6
  35134. BX6 X6*X3 NON ZERO IF SETTING MRT BIT
  35135. SA1 B3+X1
  35136. BX1 -X3*X1 CLEAR OLD BIT
  35137. BX6 X1+X6 MERGE NEW BIT
  35138. SA6 A1
  35139. TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
  35140.  
  35141. STB12 SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
  35142. SX5 X1+B1
  35143. EQ /PROGRAM/CCP1 RELEASE INTERLOCK
  35144.  
  35145. ENDBLK
  35146. BLOCK BIOMMF,(SHARED BUFFERED DEVICE PROCESSING.)
  35147.  
  35148. QUAL BUFIO
  35149. MTE SPACE 4,10
  35150. ** MTE - PROCESS *MTEM* FUNCTION.
  35151. *
  35152. * PARAMETERS ARE VALIDATED AND THE FUNCTION PASSED
  35153. * TO *MTE*.
  35154.  
  35155.  
  35156. MTE BSS 0 ENTRY
  35157. MX3 -12
  35158. AX1 36
  35159. SB4 X1-MXMTEM
  35160. PL B4,/MONITOR/HNG IF INVALID SUBFUNCTION
  35161. BX2 -X3*X5 ISOLATE PARAMETER
  35162. LX5 -12 POSITION FOR NEXT PARAMETER
  35163. JP TMTE+TMTEL+B4 JUMP TO PROCESS FUNCTION
  35164.  
  35165. * SUBFUNCTION TABLE.
  35166.  
  35167. TMTE BSS 0
  35168. LOC 0
  35169.  
  35170. + LX5 -12 (CBRS) - CLEAR BAT READ ACCESS
  35171. BX4 -X3*X5 ISOLATE MACHINE INDEX
  35172. EQ MTE1 VALIDATE MACHINE INDEX/EST ORDINAL
  35173.  
  35174. + LX5 -12 (CBWS) - CLEAR BAT READ/WRITE ACCESS
  35175. BX4 -X3*X5
  35176. EQ MTE1 VALIDATE MACHINE INDEX/EST ORDINAL
  35177.  
  35178. + BX4 -X3*X5 (CEMS) - CLEAR EXTENDED MEMORY TRACK
  35179. LX5 -12
  35180. EQ MTE3 VALIDATE TRACK/SECTORS
  35181.  
  35182. + BX4 -X3*X5 (EBRS) - ENABLE BRT PROCESSING
  35183. EQ /LSPMMF/QPR QUEUE *MTE* REQUEST
  35184.  
  35185. + EQ MTE2 (SEPS) - SET ERROR PROCESSING INTERLOCK
  35186.  
  35187. + EQ MTE2 (CEPS) - CLEAR ERROR PROCESSING INTERLOCK
  35188.  
  35189. + EQ /LSPMMF/QPR (SRIS) - SET RECOVERY ERROR INTERLOCK
  35190.  
  35191. + EQ /LSPMMF/QPR (CRIS) - CLEAR RECOVERY ERROR INTERLOCK
  35192.  
  35193. + EQ MTE2 (RBPS) - RELEASE BAT/BST PERMISSIONS
  35194.  
  35195. + EQ /LSPMMF/QPR (GRIS) - GET RECOVERY INTERLOCK STATUS
  35196.  
  35197. + EQ MTE2 (SRPS) - SET RESTORE PARITY INTERLOCK
  35198.  
  35199. + EQ MTE2 (CRPS) - CLEAR RESTORE PARITY INTERLOCK
  35200.  
  35201. + EQ MTE2 (GBDS) - GET *BDT* ENTRY
  35202.  
  35203.  
  35204. TMTEL BSS 0
  35205. LOC *O
  35206.  
  35207. MTE1 SX4 X4-MXMF
  35208. PL X4,/MONITOR/HNG IF INVALID MACHINE INDEX
  35209. MTE2 CX4 X2,EST
  35210. TA4 X4+EQDE,EST READ EST ENTRY
  35211. BX1 X4
  35212. LX4 59-57
  35213. PL X4,/MONITOR/HNG IF NOT SHARED
  35214. LX4 59-53-59+57
  35215. PL X4,/MONITOR/HNG IF NOT BUFFERED
  35216. TX0 X2,-ESTL
  35217. BX0 X1*X0
  35218. PL X0,/MONITOR/HNG IF NOT MASS STORAGE OR OUT OF EST
  35219. MX0 -12 GET MST ADDRESS
  35220. BX0 -X0*X1
  35221. LX0 3
  35222. SA1 X0+MDGL GET *DAT* POINTER
  35223. MX0 -8
  35224. LX1 -48
  35225. BX1 -X0*X1
  35226. ZR X1,/MONITOR/HNG IF DEVICE IS NOT IN *DAT*
  35227. EQ /LSPMMF/QPR QUEUE FUNCTION FOR *MTE*
  35228.  
  35229. MTE3 SX2 X2-4000B
  35230. NG X2,/MONITOR/HNG IF INVALID TRACK TO CLEAR
  35231. BX3 -X3*X5 FIRST SECTOR TO CLEAR
  35232. IX3 X3+X4 COMPUTE LAST SECTOR TO CLEAR
  35233. SA2 MMFL GET LINK DEVICE EST ORDINAL
  35234. MX0 -9
  35235. LX2 -36
  35236. BX2 -X0*X2
  35237. CX4 X2,EST
  35238. TA4 X4+EQAE,EST READ EST ENTRY
  35239. LX4 -24
  35240. MX0 -2
  35241. BX4 -X0*X4 EXTENDED MEMORY SHIFT COUNT
  35242. SB3 X4
  35243. SX1 20B
  35244. LX1 B3,X1 SECTOR LIMIT
  35245. IX1 X3-X1
  35246. PL X1,/MONITOR/HNG IF LAST SECTOR PAST TRACK END
  35247. EQ /LSPMMF/QPR QUEUE FUNCTION FOR *MTE*
  35248. LBS SPACE 4,10
  35249. ** LBS - *LBM* EXTENSION FOR SHARED DEVICES.
  35250. *
  35251. * ENTRY (B6) = BUFFER MANAGER OPERATION CODE.
  35252. *
  35253. * EXIT TO BUFFER MANAGER FUNCTION PROCESSOR.
  35254. *
  35255. * USES X - 0, 1, 2, 6.
  35256. * A - 1, 2, 6.
  35257.  
  35258.  
  35259. LBS BSS 0 ENTRY
  35260. SA2 RTCL
  35261. SA1 SDWR
  35262. MX0 -36
  35263. BX2 -X0*X2
  35264. ZR X1,LBS1 IF NO WRITE ACCESS REQUEST
  35265. BX1 -X0*X1
  35266. IX1 X2-X1
  35267. NG X1,LBS1 IF TIMEOUT NOT ELAPSED
  35268. SX6 B0+ CLEAR STATUS
  35269. SA6 A1+
  35270. LBS1 SA1 SDUR
  35271. ZR X1,LBS2 IF NO UNABLE TO RELEASE ACCESS STATUS
  35272. BX1 -X0*X1
  35273. IX1 X2-X1
  35274. NG X1,LBS2 IF TIMEOUT NOT ELAPSED
  35275. SX6 B0+ CLEAR STATUS
  35276. SA6 A1+
  35277. LBS2 JP B6+LBMA PROCESS FUNCTION
  35278. CRR SPACE 4,10
  35279. ** CRR - COMPLETE *MTE* REQUEST FOR READ ACCESS.
  35280. *
  35281. * EXIT TO *LBMX*.
  35282. *
  35283. * USES X - 0, 1, 2, 4, 5, 6, 7.
  35284. * A - 1, 2, 6.
  35285. * B - 4, 5.
  35286. *
  35287. * CALLS SBP.
  35288.  
  35289.  
  35290. CRR BSS 0 ENTRY
  35291. SX5 2 SET NEW STATUS
  35292. SX7 7 SET STATUS TO CHECK
  35293.  
  35294. * ENTRY FROM *CWR*.
  35295.  
  35296. CRR1 SA1 SDEO
  35297. SB5 CRR2 SET *SBP* RETURN ADDRESS
  35298. ZR X1,/PROGRAM/HNG IF NOT SHARED DEVICE
  35299. EQ SBP SET BST PARAMETERS
  35300.  
  35301. CRR2 NG X2,/PROGRAM/HNG IF BST PROCESSING DISABLED
  35302. SA2 OPAR GET COMPLETION STATUS
  35303. BX7 X7*X4
  35304. SX7 X7-1
  35305. MX0 -1
  35306. NZ X7,/PROGRAM/HNG IF INCORRECT STATUS FOR RESPONSE
  35307. SB5 X2-1
  35308. BX4 X0*X4 CLEAR REQUEST IN PROGRESS FLAG
  35309. NG B5,CRR3 IF NORMAL COMPLETION
  35310. SX5 B0
  35311. ZR B5,CRR3 IF *BRT* ENTRY EVICTED BY *MTE*
  35312. GT B5,B1,/PROGRAM/HNG IF INCORRECT RESPONSE STATUS
  35313. LX1 48
  35314. LX3 36
  35315. SX7 B1+B1
  35316. BX6 X1+X3 SET EST ORDINAL AND TRACK
  35317. SA1 SDUR
  35318. SA2 RTCL
  35319. MX0 -36
  35320. BX7 X7*X4
  35321. NZ X7,/PROGRAM/HNG IF READ ACCESS CURRENTLY PRESENT
  35322. SX7 SDUD
  35323. NZ X1,CRR3 IF STATUS WORD IN USE
  35324. BX2 -X0*X2 SET TIMEOUT
  35325. IX2 X2+X7
  35326. BX6 X6+X2 SET UNABLE TO RELEASE ACCESS STATUS
  35327. SA6 A1
  35328. CRR3 SX1 60
  35329. SB4 -B4
  35330. BX4 X4+X5 SET NEW STATUS
  35331. SB4 X1+B4 SHIFT COUNT TO RESTORE ENTRY
  35332. LX6 B4,X4 UPDATE BST ENTRY
  35333. SA6 A4+
  35334. EQ LBMX EXIT BUFFER MANAGER
  35335. CWR SPACE 4,10
  35336. ** CWR - COMPLETE *MTE* REQUEST FOR WRITE ACCESS.
  35337. *
  35338. * EXIT TO *CRR1*.
  35339. *
  35340. * USES X - 5, 6.
  35341.  
  35342.  
  35343. CWR BSS 0 ENTRY
  35344. SX5 6 SET NEW STATUS
  35345. SX7 5 SET STATUS TO CHECK
  35346. EQ CRR1 EXIT TO READ ACCESS PROCESSOR
  35347. RRA SPACE 4,15
  35348. ** RRA - RELEASE READ ACCESS.
  35349. *
  35350. * EXIT TO *LBMX* IF ALL BUFFERS FLUSHED OR RELEASED.
  35351. * TO *SIS* IF WRITE ERROR ON BUFFER FLUSH.
  35352. * TO *SBB* IF ALL BUFFERS NOT FLUSHED OR RELEASED.
  35353. *
  35354. * USES X - 0, 1, 2, 3, 4, 6, 7.
  35355. * A - 1, 3, 4, 6.
  35356. * B - 4, 5, 6.
  35357. *
  35358. * CALLS CHA, DCC, DCH, LCC, SBP.
  35359.  
  35360.  
  35361. RRA BSS 0 ENTRY
  35362. SX7 6 SET TO CLEAR READ AND WRITE ACCESS
  35363.  
  35364. * SET BST INTERLOCK AND FIND HASH TABLE ENTRY.
  35365. * ENTRY FROM *RWA*.
  35366.  
  35367. RRA1 SA1 SDEO
  35368. SB5 RRA2 SET RETURN ADDRESS
  35369. ZR X1,/PROGRAM/HNG IF NOT SHARED DEVICE
  35370. EQ SBP SET BST PARAMETERS
  35371.  
  35372. * IN SOME CASES, *MTE* WILL REISSUE A *BMTR* OR *BMTW* REQUEST
  35373. * THAT HAD BEEN PREVIOUSLY COMPLETED SUCCESSFULLY BY *CPUMTR*.
  35374. * THIS IS NOT CONSIDERED AN ERROR CONDITION.
  35375.  
  35376. RRA2 SX6 A4+
  35377. BX2 X7*X4
  35378. PX6 B4,X6
  35379. ZR X2,LBMX IF REQUEST PREVIOUSLY PROCESSED
  35380. SA6 RRAA SAVE BST POINTERS
  35381.  
  35382. * FIND HASH TABLE ENTRY.
  35383.  
  35384. RRA3 SA7 RRAB SAVE ACCESS INFORMATION
  35385. SB6 RRA4 SET *CHA* RETURN ADDRESS
  35386. SX7 -1 SET LOCATE HASH TABLE ENTRY
  35387. EQ CHA CALCULATE HASH ADDRESS
  35388.  
  35389. RRA4 SA3 RRAB
  35390. BX7 X3 RESET ACCESS INFORMATION
  35391. ZR X1,RRA13 IF HASH TABLE ENTRY NOT FOUND
  35392. SA3 X1 GET HASH TABLE ENTRY
  35393. LX3 24
  35394.  
  35395. * GET BUFFER STATUS.
  35396.  
  35397. RRA5 LX3 -24
  35398. MX0 -12
  35399. BX6 -X0*X3 NEXT BUFFER ORDINAL
  35400. BX0 -X0*X3
  35401. SA6 INLB SET/CLEAR BUFFER INTERLOCK
  35402. LX6 CBTLS SET BUFFER ADDRESS
  35403. ZR X6,RRA13 IF END OF BUFFERS
  35404. TA2 X6+IOLK,CBT GET I/O INTERLOCK AND WRITE STATUS
  35405. SA3 A2+B1 GET HASH LINK
  35406. ERRNZ HSLK-IOLK-1
  35407. SA4 A3+B1 GET ACTIVITY COUNT
  35408. ERRNZ LSLK-HSLK-1
  35409. MX1 1
  35410. BX1 X1*X2 I/O INTERLOCK FLAG
  35411. BX6 X3
  35412. SA6 RRAC SAVE HASH LINKAGE
  35413. MX6 12
  35414. BX4 X6*X4 ACTIVITY COUNT
  35415. LX2 59-57
  35416. BX4 X1+X4
  35417. SX6 X0
  35418. PL X2,RRA8 IF NO WRITE DATA IN BUFFER
  35419.  
  35420. * FLUSH AND RELINK WRITE BUFFER.
  35421.  
  35422. MX1 1
  35423. BX7 X7+X1 INDICATE WRITE BUFFER FOUND
  35424. NZ X4,RRA7 IF I/O INTERLOCK OR ACTIVITY PRESENT
  35425. TA6 IORQ SET I/O REQUEST
  35426. + XJ FLUSH BUFFER
  35427.  
  35428. SB6 RRA6 SET *DCC* RETURN ADDRESS
  35429. EQ DCC DELINK BUFFER FROM CURRENT LIST
  35430.  
  35431. RRA6 SB6 RRA11 SET *LCC* RETURN ADDRESS
  35432. TX1 DWTB
  35433. EQ LCC LINK BUFFER TO DATA WRITTEN LIST
  35434.  
  35435. RRA7 PL X3,RRA11 IF NO WRITE ERROR
  35436. SX1 B1
  35437. LX1 57-0
  35438. BX7 X7+X1 SET WRITE ERROR
  35439. EQ RRA11 SET BUFFER NOT RELEASED
  35440.  
  35441. * DELINK READ BUFFER FROM HASH TABLE.
  35442.  
  35443. RRA8 SX1 X7-4
  35444. ZR X1,RRA11 IF RELEASING WRITE ACCESS
  35445. NZ X4,RRA11 IF I/O INTERLOCK OR ACTIVITY PRESENT
  35446. SB6 RRA9 SET *DCH* RETURN ADDRESS
  35447. EQ DCH DELINK BUFFER FROM HASH TABLE
  35448.  
  35449. RRA9 SB6 RRA10 SET *DCC* RETURN ADDRESS
  35450. EQ DCC DELINK BUFFER FROM CURRENT LIST
  35451.  
  35452. RRA10 SB6 RRA12 SET *LCC* RETURN ADDRESS
  35453. TX1 EMTB
  35454. EQ LCC LINK BUFFER TO EMPTY LIST
  35455.  
  35456. * SET BUFFER NOT RELEASED.
  35457.  
  35458. RRA11 SX1 1
  35459. LX1 58-0
  35460. BX7 X7+X1 INDICATE BUFFER NOT RELEASED
  35461.  
  35462. * ADVANCE TO NEXT BUFFER.
  35463.  
  35464. RRA12 SA3 RRAC RESTORE *HSLK* INFORMATION
  35465. EQ RRA5 PROCESS NEXT BUFFER
  35466.  
  35467. * CHECK FOR MULTI-UNIT EQUIPMENT.
  35468.  
  35469. RRA13 SA1 PUTO
  35470. MX0 -12
  35471. BX2 -X0*X1 CURRENT PUT ORDINAL
  35472. LX2 PUTLS
  35473. TA2 X2+HSCT,PUT
  35474. BX2 -X0*X2 NEXT PUT ORDINAL
  35475. ZR X2,RRA14 IF END OF UNITS
  35476. SA2 LSEC
  35477. AX1 36 SINGLE UNIT SECTOR LIMIT
  35478. IX6 X2+X1 ADVANCE SECTOR TO NEXT UNIT
  35479. SA6 A2+
  35480. EQ RRA3 PROCESS NEXT UNIT
  35481.  
  35482. * CLEAR ACCESS FLAGS IN BST IF ALL BUFFERS RELEASED OR FLUSHED.
  35483. * IF ANOTHER MACHINE IS WAITING FOR WRITE ACCESS TO THE TRACK
  35484. * AND NO ACTIVITY REMAINS ON THIS MACHINE, THE TIMEOUT DELAY IN
  35485. * *SDWR* IS SET TO *SDMD* MILLISECONDS FROM THE CURRENT TIME.
  35486. * THIS IS TO ALLOW *MTE* ON THE MACHINE REQUESTING WRITE ACCESS
  35487. * TIME TO PROCESS THE REQUEST.
  35488.  
  35489. RRA14 SA4 RRAA
  35490. BX1 X7
  35491. LX1 3
  35492. SX7 X7 STATUS FLAGS TO CLEAR
  35493. SX1 X1 CURRENT BUFFER ACCESS STATUS
  35494. BX2 X1*X7
  35495. UX4,B4 X4 RESET BST PARAMETERS
  35496. NZ X2,RRA15 IF NOT ALL BUFFERS RELEASED/FLUSHED
  35497. SA4 X4 GET BST ENTRY
  35498. LX4 B4
  35499. SB5 60
  35500. BX4 -X7*X4 CLEAR READ/WRITE ACCESS
  35501. SB4 B5-B4
  35502. LX6 X4,B4
  35503. SA6 A4 UPDATE BST ENTRY
  35504. SX1 X7-6
  35505. NZ X1,LBMX IF NOT RELEASING READ ACCESS
  35506. SA1 SDWR
  35507. SA3 LTRK
  35508. SA4 SDEO
  35509. AX1 36
  35510. LX4 12
  35511. BX4 X4+X3
  35512. BX6 X4-X1
  35513. NZ X6,LBMX IF NO WAIT REQUEST FOR TRACK
  35514. SA2 RTCL
  35515. MX0 -36
  35516. LX1 36
  35517. SX7 SDMD
  35518. BX6 X1+X7
  35519. BX2 -X0*X2
  35520. IX6 X6+X2 SET TIME DELAY
  35521. SA6 A1 UPDATE REQUEST
  35522. EQ LBMX EXIT WITH NORMAL STATUS
  35523.  
  35524. * PROCESS ERROR RETURN.
  35525.  
  35526. RRA15 LX1 59-0
  35527. MX0 -36
  35528. NG X1,SIS IF WRITE ERROR ON FLUSH
  35529. SX1 X7-6
  35530. NZ X1,SBB IF NOT RELEASING READ ACCESS
  35531. SA1 SDWR
  35532. SA2 RTCL
  35533. SA3 LTRK
  35534. SA4 SDEO
  35535. NZ X1,SBB IF STATUS WORD IN USE
  35536. SX7 SDWD SET TIME DELAY
  35537. BX2 -X0*X2
  35538. LX3 36
  35539. LX4 48
  35540. IX7 X2+X7 SET TIMEOUT
  35541. BX6 X4+X3 MERGE EST ORDINAL AND TRACK
  35542. BX6 X6+X7 MERGE TIMEOUT
  35543. SA6 A1+ SET WRITE ACCESS REQUESTED
  35544. EQ SBB RETURN BUFFER BUSY STATUS
  35545.  
  35546.  
  35547. RRAA BSS 1 BST PARAMETERS
  35548. RRAB BSS 1 ACCESS MASK
  35549. RRAC BSS 1 CURRENT *HSLK* WORD
  35550. RWA SPACE 4,10
  35551. ** RWA - RELEASE WRITE ACCESS.
  35552. *
  35553. * EXIT TO *RRA1* TO PROCESS FUNCTION.
  35554. *
  35555. * USES X - 7.
  35556.  
  35557.  
  35558. RWA BSS 0 ENTRY
  35559. SX7 4 SET TO CLEAR WRITE ACCESS
  35560. EQ RRA1 EXIT TO PROCESS FUNCTION
  35561. CSD SPACE 4,25
  35562. ** CSD - CHECK SHARED DEVICE ACCESS.
  35563. *
  35564. * ENTRY (B6) = *CHA* RETURN ADDRESS.
  35565. * (X7) = BUFFERS ALLOCATED FLAG.
  35566. *
  35567. * EXIT TO *CHA* IF NOT SHARED DEVICE OR IF SHARED DEVICE AND
  35568. * BUFFER CAN BE ACCESSED.
  35569. * TO *CHA* RETURN ADDRESS IF SHARED DEVICE AND BUFFER
  35570. * CANNOT BE ACCESSED IN REQUESTED MODE.
  35571. * TO *SIS* IF BUFFER ON MACHINE HOLDING WRITE ACCESS
  35572. * CANNOT BE FLUSHED (DEVICE INACCESSIBLE).
  35573. * (X2) = -2 (REQUIRED FOR EXIT TO *CHA* CALLER WHEN
  35574. * BUFFER CANNOT BE ACCESSED IN REQUESTED
  35575. * MODE).
  35576. * (X7) = BUFFERS ALLOCATED FLAG.
  35577. *
  35578. * USES X - 0, 1, 2, 3, 4, 5, 6.
  35579. * A - 1, 2, 6.
  35580. * B - 4, 5.
  35581. *
  35582. * CALLS SBP.
  35583.  
  35584.  
  35585. CSD BSS 0 ENTRY
  35586.  
  35587. * ENTRY FOR READ ACCESS.
  35588.  
  35589. SX5 2 SET TO CHECK READ ACCESS
  35590. EQ CSD2
  35591.  
  35592. * ENTRY FOR WRITE ACCESS.
  35593.  
  35594. CSD1 SX5 4 SET TO CHECK WRITE ACCESS
  35595.  
  35596. * CHECK ACCESS TO SHARED DEVICE.
  35597.  
  35598. CSD2 SA1 SDEO GET EST ORDINAL IF SHARED DEVICE
  35599. ZR X1,CHA IF NOT SHARED DEVICE
  35600. SB5 CSD3 SET *SBP* RETURN ADDRESS
  35601. EQ SBP SET BST PARAMETERS
  35602.  
  35603. CSD3 NG X2,CHA IF BST PROCESSING DISABLED
  35604. SA2 SDWR
  35605. LX1 48
  35606. LX3 36
  35607. MX0 24
  35608. BX6 X1+X3 FORMAT EST ORDINAL AND TRACK FOR REQUEST
  35609. BX1 X5*X4
  35610. BX2 X0*X2
  35611. AX5 2
  35612. BX2 X2-X6
  35613. ZR X2,CSD4 IF WRITE ACCESS REQUESTED ON OTHER MACHINE
  35614. NZ X1,CHA IF REQUESTED ACCESS PRESENT
  35615. SA2 SDUR
  35616. BX2 X0*X2
  35617. BX2 X2-X6
  35618. ZR X2,SIS IF UNABLE TO RELEASE WRITE ACCESS
  35619.  
  35620. * MAKE *MTE* REQUEST.
  35621.  
  35622. SX0 B1
  35623. BX1 X0*X4
  35624. NZ X1,CSD4 IF *MTE* REQUEST ALREADY IN PROGRESS
  35625. SA1 /LSPMMF/MTIN READ *IN*
  35626. SA2 A1+B1 READ *OUT*
  35627. ERRNZ /LSPMMF/MTOT-/LSPMMF/MTIN-1
  35628. LX5 35-0
  35629. BX6 X6+X5 SET READ/WRITE FLAG IN REQUEST
  35630. BX4 X4+X0 SET *MTE* REQUEST FLAG
  35631. MX0 -6
  35632. SX3 X1+B1
  35633. BX3 -X0*X3 NEW *IN*
  35634. BX2 X2-X3
  35635. ZR X2,CSD4 IF REQUEST QUEUE FULL
  35636. SA6 X1+/LSPMMF/MTBT ENTER REQUEST
  35637. SX6 X3
  35638. SA6 A1 UPDATE *IN*
  35639.  
  35640. * UPDATE BST ENTRY.
  35641.  
  35642. SX1 60
  35643. SB4 -B4
  35644. SB4 X1+B4 SHIFT COUNT TO RESTORE ENTRY
  35645. LX6 X4,B4
  35646. SA6 A4
  35647.  
  35648. * EXIT TO CALLER OF *CHA*.
  35649.  
  35650. CSD4 SX2 -2 SET ACCESS REJECTED STATUS
  35651. JP B6 EXIT TO *CHA* CALLER
  35652. IPP SPACE 4,10
  35653. ** IPS - *IPP* PREPROCESSOR FOR SHARED DEVICES.
  35654. *
  35655. * ENTRY SEE *CPUCIO* SPECIAL PROCESSOR DOCUMENTATION.
  35656. *
  35657. * EXIT TO *IPP0* IF REQUEST CAN BE PROCESSED BY PSEUDO-PP.
  35658. * TO */CPUCIO/RPC* IF REQUEST CANNOT BE PROCESSED BY
  35659. * PSEUDO-PP.
  35660. *
  35661. * USES X - 1, 2.
  35662.  
  35663.  
  35664. IPS BSS 0 ENTRY
  35665. BX1 X3
  35666. LX1 59-57
  35667. PL X1,IPP0 IF NOT SHARED DEVICE
  35668. EQ B3,B1,/CPUCIO/RPC IF WRITE FUNCTION
  35669. ERRNZ /CIO/WTF-1
  35670. SX1 1
  35671. IX1 X0-X1 FNT ADDRESS
  35672. ERX1 X1 READ FNT ENTRY
  35673. MX2 -6
  35674. LX1 0-6
  35675. BX2 -X2*X1 FILE TYPE
  35676. LX1 59-16-0+6
  35677. SX2 X2-PMFT
  35678. NZ X2,IPP0 IF NOT DIRECT ACCESS PERMANENT FILE
  35679. PL X1,IPP0 IF NOT M, A, RM, OR RA MODE
  35680. EQ /CPUCIO/RPC CALL PP CIO
  35681. SBP SPACE 4,15
  35682. ** SBP - SET BST PARAMETERS.
  35683. *
  35684. * ENTRY (B5) = RETURN ADDRESS.
  35685. *
  35686. * EXIT (X2) .LT. 0 IF BST PROCESSING DISABLED.
  35687. * (X3) = LOGICAL TRACK.
  35688. * (X4) = BST WORD WITH ENTRY RIGHT JUSTIFIED.
  35689. * (A4) = BST WORD ADDRESS.
  35690. * (B4) = SHIFT COUNT TO POSITION ENTRY.
  35691. *
  35692. * USES X - 2, 3, 4, 6.
  35693. * A - 2, 3, 4.
  35694. * B - 4.
  35695.  
  35696.  
  35697. SBP BSS 0 ENTRY
  35698. SA2 MSTA GET MST ADDRESS
  35699. SA2 X2+BDLL
  35700. SA3 LTRK GET TRACK
  35701. LX2 -24
  35702. SB4 X2 SET BST ADDRESS
  35703. NG X2,RB5 IF BST PROCESSING DISABLED
  35704. SX4 X3-4000B
  35705. MX6 -4
  35706. BX6 -X6*X4 ENTRY ORDINAL IN WORD
  35707. AX4 4 BST WORD OFFSET
  35708. SA4 B4+X4 READ BST ENTRY
  35709. SX6 X6+B1 ENTRIES TO SHIFT TO RIGHT JUSTIFY ENTRY
  35710. SB4 X6
  35711. LX6 1
  35712. SB4 X6+B4 SHIFT COUNT TO POSITION ENTRY
  35713. LX4 B4 POSITION TO ENTRY
  35714. JP B5 RETURN
  35715.  
  35716.  
  35717. QUAL *
  35718.  
  35719. ENDBLK
  35720. BLOCK CPUCIO,(CPUCIO PROCESSOR.)
  35721. TITLE CPUCIO GLOBAL DATA.
  35722. SPACE 4,10
  35723. ** GLOBAL DATA.
  35724.  
  35725.  
  35726. * THE FOLLOWING DATA IS ORDER DEPENDENT.
  35727.  
  35728. IR BSS 1 *CIO* CALL
  35729. MB BSS 1 *CIO* PARAMETERS
  35730. MB1 BSS 1 12/0, 24/IN, 24/OUT
  35731. MB2 BSS 1 1/R,5/0,6/FET LENGTH,24/FIRST,24/LIMIT
  35732. MB3 BSS 1 FUNCTION FLAGS
  35733.  
  35734.  
  35735. ERRNZ /CIO/RDF CODE DEPENDS ON INTERNAL CODE FOR READ
  35736. ERRNZ /CIO/WTF-1 CODE DEPENDS ON INTERNAL CODE FOR WRITE
  35737. ERRNZ FSTL-1 CODE DEPENDS ON POSITION OF FST
  35738. ERRNZ FUTL-FSTL-1 CODE DEPENDS ON POSITION OF WORD
  35739. TITLE CPUCIO EXIT ROUTINES.
  35740. PMV SPACE 4,10
  35741. ** PMV - PROCESS *MAGNET* MOVING.
  35742.  
  35743.  
  35744. PMV SB5 PMV1 SER *SRC* RETURN ADDRESS
  35745. EQ SRC SET *RCLP* IN RA+1
  35746.  
  35747. PMV1 SB5 MVPR SET RECALL STACK REASON CODE
  35748. * EQ RCR SET REQUEST IN RECALL QUEUE
  35749. RCR SPACE 4,10
  35750. ** RCR - REQUEST *CIO* RECALL.
  35751. *
  35752. * ENTRY (B5) = RECALL STACK REASON CODE.
  35753. * (IR) = *CIO* CALL.
  35754. * (MB) = *CIO* MESSAGE BUFFER PARAMETERS.
  35755. *
  35756. * EXIT TO *CPCX*.
  35757. *
  35758. * CALLS /MONITOR/AQR.
  35759.  
  35760.  
  35761. RCR SA4 IR GET *CIO* CALL
  35762. SX7 B5 RECALL STACK REASON CODE
  35763. MX3 6
  35764. SA1 MB *CIO* PARAMETER WORD
  35765. LX7 -12
  35766. BX6 X4
  35767. LX3 -6
  35768. BX1 -X3*X1
  35769. R= X2,/MONITOR/RQ
  35770. BX7 X7+X1
  35771. SA1 RTCL
  35772. SA7 /MONITOR/AQRA SAVE PARAMETER WORD
  35773. MX3 -36
  35774. SA4 RCRA GET RECALL TIME PARAMETERS
  35775. BX1 -X3*X1
  35776. LX1 12
  35777. IX0 X1+X4
  35778. SA1 B7+STSW
  35779. SB3 CPCX SET RETURN ADDRESS FOR *AQR*
  35780. LX1 59-24
  35781. PL X1,/MONITOR/AQR IF ROLLOUT NOT SET
  35782. BX2 X7
  35783.  
  35784.  
  35785. * ROLLOUT SET ON CONTROL POINT -
  35786. * PLACE REQUEST IN CPA RECALL AREA, BUT NOT IN QUEUE.
  35787. *
  35788. * ENTRY (A1) = ADDRESS OF *STSW*.
  35789. * (X1) = *STSW* LEFT-SHIFTED 59-24
  35790. * (X2) = PARAMETER WORD.
  35791. * (X6) = PP REQUEST.
  35792. * (B3) = RETURN ADDRESS.
  35793. * (B7) = CONTROL POINT AREA ADDRESS.
  35794.  
  35795.  
  35796. RCR1 LX1 24-59
  35797. MX7 -4
  35798. SB4 B7+RCCW-1
  35799. BX4 -X7*X1 NEXT FREE RECALL SLOT
  35800. BX7 X7*X1
  35801. SA3 B4+X4 READ NEXT FREE RECALL SLOT
  35802. MX4 1
  35803. SA6 A3+RECW-RCCW STORE REQUEST
  35804. SX3 X3+20B
  35805. BX6 X2+X4 SET RECALL BIT
  35806. IX7 X7+X3
  35807. SA6 A3+REPW-RCCW STORE PARAMETER WORD
  35808. SA7 A1 UPDATE STSW
  35809. JP B3 RETURN
  35810.  
  35811.  
  35812. RCRA VFD 12/PTMF,36/IORT,12/0 RECALL TIME PARAMETERS
  35813. RET SPACE 4,10
  35814. ** RET - RETURN FILE.
  35815.  
  35816.  
  35817. RET BSS 0
  35818. BX1 X3
  35819. LX1 59-56
  35820. BX3 X1*X3
  35821. PL X3,RPC IF NOT REMOVABLE MASS STORAGE
  35822.  
  35823. * FORCE AUTORECALL TO PREVENT TWO FILE RETURNS ON A REMOVABLE
  35824. * DEVICE FROM OCCURRING SIMULTANEOUSLY. THIS PREVENTS EACH
  35825. * RETURN FROM DECIDING THAT ITS NOT THE LAST FILE ON THE DEVICE
  35826. * AND, THUS, NOT DECREMENTING THE RESOURCE COUNT.
  35827.  
  35828. SA1 IR
  35829. MX2 1
  35830. LX2 41-59
  35831. BX6 X2+X1
  35832. SA6 A1
  35833. * EQ RPC REQUEST PP CIO
  35834. RPC SPACE 4,15
  35835. ** RPC - REQUEST PP CIO.
  35836. *
  35837. * ENTRY (X7) = 18/*TAPQ* INDEX, 42/REQUEST PARAMETERS.
  35838. * (IR) = *CIO* CALL.
  35839. * (MB) = *CIO* MESSAGE BUFFER PARAMETERS.
  35840. * (MB1) = FET LENGTH - 5, FIRST AND LIMIT.
  35841. * (MB2) = IN AND OUT.
  35842. *
  35843. * EXIT TO *CPCX*.
  35844. *
  35845. * CALLS /MONITOR/APQ.
  35846.  
  35847.  
  35848. RPC SA1 IR GET *CIO* CALL
  35849. MX0 -6
  35850. SA4 A1+B1 CLEAR RECALL STACK FLAG
  35851. BX0 -X0*X7
  35852. SB3 CPCX SET RETURN ADDRESS FOR *APQ*
  35853. MX6 -59
  35854. MX2 -42 PRESERVE ERROR CODE AND PARAMETERS
  35855. BX6 -X6*X4
  35856. BX4 -X2*X7
  35857. LX4 36
  35858. BX6 X6+X4
  35859. SA6 A4
  35860. SA6 /MONITOR/APQA
  35861. ZR X0,RPC1 IF NO ERROR
  35862. MX2 1 FORCE AUTO RECALL ON ERROR
  35863. LX2 41-59
  35864. BX6 X1+X2
  35865. SA6 A1+ REWRITE INPUT REGISTER
  35866. BX1 X6
  35867.  
  35868. * INDEX INTO TABLE *TAPQ* TO BUILD PP REQUEST.
  35869.  
  35870. RPC1 AX7 42 *TAPQ* OFFSET
  35871. SA2 TAPQ+X7
  35872. MX6 18
  35873. SB4 X2 PP FAST LOAD ADDRESS FROM *TAPQ*
  35874. BX1 -X6*X1
  35875. BX6 X6*X2
  35876. BX6 X6+X1
  35877. SA1 B7+STSW CHECK IF ROLLOUT REQUESTED
  35878. LX1 59-24
  35879. TPL X1,(/DCP/APQ,DCPC,/MONITOR/APQ) IF ROLLOUT NOT SET
  35880. SA2 /MONITOR/APQA
  35881. EQ RCR1 SET REQUEST IN CPA
  35882. TAPQ SPACE 4,10
  35883. ** TAPQ - TABLE OF PP REQUEST CRITERIA.
  35884. *
  35885. * ENTRY ONE WORD.
  35886. *
  35887. *T 18/PP CALL, 42/PP FAST LOAD PARAMETER ADDRESS
  35888.  
  35889.  
  35890. TAPQ BSS 0
  35891. LOC 0
  35892.  
  35893. VFD 18/3L1MS,42//MONITOR/LA1MS
  35894. VFD 18/3L1MI,42//MONITOR/LA1MI
  35895. VFD 18/3L1ML,42//MONITOR/LA1ML
  35896. VFD 18/3L1OD,42//MONITOR/LA1OD
  35897.  
  35898. LOC *O
  35899.  
  35900. TAPQL EQU *-TAPQ PP REQUEST TABLE LENGTH
  35901. SRC SPACE 4,10
  35902. ** SRC - SET *RCLP* AND CLEAR RECALL STATUS IN REQUEST.
  35903. *
  35904. * ENTRY (B5) = EXIT ADDRESS.
  35905. * (IR) = *CIO* CALL.
  35906. *
  35907. * USES X - 1, 2, 3, 6.
  35908. * A - 1, 2, 6.
  35909.  
  35910.  
  35911. SRC BSS 0
  35912. SA1 IR
  35913. LX1 59-41
  35914. MX6 -59
  35915. PL X1,SRC1 IF NOT AUTO RECALL
  35916. BX6 -X6*X1 CLEAR AUTO RECALL
  35917. LX6 41-59
  35918. SA2 /MONITOR/RC *RCLP* REQUEST
  35919. SA6 A1
  35920. SX3 X6 EXTRACT FET ADDRESS
  35921. SA1 B7+FLSW GET RA
  35922. BX6 X2+X3
  35923. MX2 -RMSK
  35924. AX1 RSHF
  35925. BX3 -X2*X1
  35926. SX1 B1 STORE *RCLP* IN RA + 1
  35927. LX3 6
  35928. IX3 X3+X1
  35929. EWX6 X3
  35930. SRC1 JP B5 RETURN
  35931. CPCX SPACE 4,15
  35932. ** CPCX - CPUCIO EXIT PROCESSOR.
  35933. *
  35934. * ENTRY (A0) = CPU NUMBER.
  35935. * (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
  35936. * (B1) = 1.
  35937. * (B2) = USER EXCHANGE PACKAGE AREA.
  35938. * (B7) = CPA.
  35939. * (IR) = *CIO* CALL.
  35940. *
  35941. * EXIT TO */MONITOR/.DPPM* IF PP REQUEST COMPLETE AND
  35942. * DROP OPTION SELECTED.
  35943. * TO */MONITOR/MTR* IF RA+1 CALL WITHOUT AUTO RECALL
  35944. * FLAG SET.
  35945. * TO */MONITOR/MTRX* IF RECALLED REQUEST OR IF RA+1 CALL
  35946. * WITHOUT AUTO RECALL WHEN JOB NOT ACTIVE IN CPU.
  35947. * TO */MONITOR/PPR1* IF PP REQUEST COMPLETE AND
  35948. * DROP OPTION NOT SELECTED.
  35949. * TO */MONITOR/SIS* IF RA+1 CALL WITH AUTO RECALL
  35950. * WHEN JOB ACTIVE IN CPU.
  35951.  
  35952.  
  35953. CPCX TX1 10B,SP
  35954. SX2 A5
  35955. MX0 -18
  35956. BX2 -X0*X2
  35957. IX1 X2-X1
  35958. ZR X1,/MONITOR/MTRX IF RECALLED REQUEST
  35959. NG X1,CPCX1 IF PP *RPPM* REQUEST
  35960. SA1 IR
  35961. MX0 3
  35962. LX1 59-41
  35963. PL X1,/MONITOR/MTR IF NO AUTO RECALL
  35964. SA1 B7+STSW GET CPU STATUS
  35965. NO
  35966. BX0 X0*X1
  35967. ZR X0,/MONITOR/MTRX IF NULL CPU STATUS
  35968. PL X1,/MONITOR/SIS IF JOB ACTIVE IN CPU
  35969. EQ /MONITOR/MTRX EXIT
  35970.  
  35971. CPCX1 SA5 A5
  35972. LX5 59-37
  35973. NG X5,/MONITOR/.DPPM IF DROP OPTION SELECTED
  35974. SX7 B1 RETURN RESPONSE
  35975. LX7 36
  35976. EQ /MONITOR/PPR1
  35977. TITLE CPUCIO MAIN ROUTINE.
  35978. CPC SPACE 4,10
  35979. ** CPC - CPUCIO PROCESSOR (MONITOR MODE ENTRY POINT).
  35980. *
  35981. * ENTRY (A0) = CPU NUMBER.
  35982. * (B1) = 1.
  35983. * (B2) = USER EXCHANGE PACKAGE AREA.
  35984. * (B7) = CPA.
  35985. * (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
  35986. * (IR) = *CIO* CALL.
  35987. * (MB) = *CIO* PARAMETER WORD IF RESTART.
  35988. * = 0 IF INITIAL *CIO* CALL.
  35989. *
  35990. * EXIT TO */CIO819/IPP1* IF PSEUDO PP CONTINUATION FUNCTION.
  35991. * TO EQUIPMENT FUNCTION PROCESSOR (SEE *TFPJ* TABLE).
  35992. *
  35993. * ERROR EXIT TO *RPC* IF ERROR DETECTED.
  35994. *
  35995. * CALLS /MONITOR/VFA, /MONITOR/VFP.
  35996.  
  35997.  
  35998. * VALIDATE FET ADDRESS.
  35999.  
  36000. CPC SA4 MB CHECK IF CONTINUATION FUNCTION
  36001. MX1 -59
  36002. BX4 -X1*X4 IGNORE RECALL STACK FLAG
  36003. SX6 B0+
  36004. MX1 -54
  36005. LX4 59-55
  36006. CPC1 TNG X4,(/BUFIO/IPP1,BUFIO,/CPUCIO/CPC1) IF BUFFERED I/O
  36007. LX4 59-53-59+55
  36008. BX4 -X1*X4 IGNORE RECALL STACK REASON CODE
  36009. SA6 A4+B1 CLEAR FET PARAMETER WORDS
  36010. SA1 A4-B1 GET FET ADDRESS
  36011. SA6 A6+B1
  36012. SA6 A6+B1
  36013. SX7 /CIOERR/ARG *FET ADDRESS OUT OF RANGE*
  36014. SB3 RPC SET ERROR EXIT ADDRESS FOR *VFA*
  36015. SB6 CPC3 SET RETURN ADDRESS FOR *VFA*
  36016. ZR X4,/MONITOR/VFA IF INITIAL CALL
  36017. SB6 CPC2 SET RETURN ADDRESS FOR *VFA*
  36018. EQ /MONITOR/VFA VALIDATE FET ADDRESS
  36019.  
  36020. CPC2 SA4 A4
  36021. MX2 -12
  36022. SA6 MB2 SAVE FET LENGTH - 5 AND RANDOM FILE FLAG
  36023. LX4 -24
  36024. BX2 -X2*X4 FNT ORDINAL
  36025. SX2 X2-FSTL
  36026. IX0 X0-X2 ABSOLUTE FST ADDRESS
  36027. LX4 24
  36028. EQ CPC16 VERIFY FET PARAMETERS
  36029.  
  36030. CPC3 SA6 MB2 SAVE FET LENGTH - 5 AND RANDOM FILE FLAG
  36031. MX4 -12
  36032. LX2 -36
  36033. SX6 B1+
  36034. BX2 -X4*X2 NFL/100B
  36035. IX3 X5-X6 FET+0
  36036. MX6 -2
  36037. ERX3 X3
  36038. IX5 X5-X6 FET+4
  36039. MX6 42
  36040. SX7 /CIOERR/FLN *FILE NAME ERROR*
  36041. BX1 X6*X3
  36042. LX2 6
  36043. ZR X1,RPC IF NO FILE NAME
  36044.  
  36045. * CHECK FNT POINTER FROM FET.
  36046.  
  36047. SX7 FNTN
  36048. ERX1 X5 GET FNT POINTER FROM FET
  36049. IX0 X0-X7
  36050. LX1 12
  36051. BX1 -X4*X1 FNT ORDINAL
  36052. IX4 X2-X1
  36053. IX1 X1-X7
  36054. IX2 X2-X7
  36055. PX2 X2
  36056. NG X1,CPC4 IF FNT POINTER TOO SMALL
  36057. NG X4,CPC4 IF FNT POINTER TOO LARGE
  36058. IX0 X0-X1 ABSOLUTE FNT ADDRESS
  36059. ERX4 X0 GET FNT ENTRY
  36060. BX4 X3-X4
  36061. BX4 X6*X4
  36062. IX6 X1+X7 FNT ORDINAL
  36063. ZR X4,CPC7 IF FILE NAME MATCH
  36064. IX0 X0+X1
  36065.  
  36066. * LOCATE FNT ENTRY.
  36067.  
  36068. CPC4 SX7 LENF COMPUTE ADDRESS OF LAST FNT ENTRY
  36069. PX4 X7
  36070. NX4 X4
  36071. FX2 X2/X4
  36072. UX2 X2,B6
  36073. LX2 B6
  36074. IX2 X7*X2
  36075. BX6 X3
  36076. IX4 X0-X2
  36077. EWX6 X4 STORE FILE NAME FOR MATCH
  36078. MX6 42
  36079. CPC5 ERX1 X0
  36080. IX0 X0-X7
  36081. ERX2 X0
  36082. BX1 X1-X3
  36083. BX1 X6*X1
  36084. ZR X1,CPC6 IF FOUND
  36085. BX2 X2-X3
  36086. IX0 X0-X7
  36087. BX2 X6*X2
  36088. NZ X2,CPC5 IF NOT FOUND
  36089. CPC6 IX1 X0+X7
  36090. BX6 X6-X6 CLEAR FILE NAME FROM END OF FNT
  36091. IX0 X4-X1
  36092. EWX6 X4
  36093. ZR X0,CPC8 IF FILE NOT FOUND
  36094. SA2 B7+FLSW GET RA
  36095. BX0 X1
  36096. MX7 -48
  36097. LX2 -12
  36098. ERX1 X5 SET FNT ORDINAL IN FET
  36099. SX2 X2
  36100. BX7 -X7*X1
  36101. LX2 6
  36102. IX6 X2-X0 FNT ORDINAL
  36103. LX6 -12
  36104. BX7 X6+X7
  36105. EWX7 X5
  36106. LX6 12
  36107.  
  36108. * CHECK FILE BUSY.
  36109.  
  36110. CPC7 SX2 B1
  36111. ERRNZ FSTL-1 CODE DEPENDS ON VALUE
  36112. IX0 X0+X2 ABSOLUTE FST ADDRESS
  36113. ERX1 X0 CHECK FILE BUSY
  36114. BX4 X2*X1
  36115. SX7 /CIOERR/FSQ *I/O SEQUENCE ERROR*
  36116. ZR X4,RPC IF FILE BUSY
  36117. BX7 X1-X2 SET FILE BUSY
  36118. EWX7 X0
  36119.  
  36120. * IDENTIFY *CIO* REQUEST.
  36121.  
  36122. CPC8 LX3 -14 GET LEVEL NUMBER
  36123. MX4 -4
  36124. BX1 -X4*X3
  36125. MX4 -8
  36126. LX3 13 GET EXTERNAL CIO FUNCTION CODE
  36127. BX3 -X4*X3
  36128. LX1 8
  36129. BX1 X1+X3
  36130. SX2 B1
  36131. LX6 12
  36132. AX3 1
  36133. BX4 -X3*X2
  36134. SB3 X3-600B/4
  36135. BX6 X6+X1
  36136. LX6 12
  36137. SX2 30
  36138. LX3 -4
  36139. IX4 X2*X4
  36140. SX1 X3-3
  36141. SA6 MB SAVE FNT ORDINAL AND EXTERNAL CODE
  36142. SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
  36143. NG X1,CPC9 IF 0XX, 1XX, OR 2XX FUNCTION CODE
  36144. SX2 B1+B1
  36145. IX3 X3-X2 MAP 3XX INTO 1XX FUNCTION CODE
  36146. ZR X1,CPC9 IF 3XX FUNCTION CODE
  36147. LX2 1
  36148. IX3 X3-X2 MAP 6XX INTO 0XX FUNCTION CODE
  36149. MX1 -3
  36150. BX1 -X1*X3
  36151. NZ X1,RPC IF NOT 6XX FUNCTION CODE
  36152. CPC9 LX3 3
  36153. SA3 TCIC+X3 GET INTERNAL CODE AND FUNCTION FLAGS
  36154. SB6 X4
  36155. LX3 B6
  36156. LX3 -18
  36157. MX2 48
  36158. BX1 X1+X3
  36159. PL X1,RPC IF NOT LEGAL 3XX/6XX FUNCTION CODE
  36160. BX1 X2+X3
  36161. BX4 -X2*X3 INTERNAL CIO FUNCTION CODE
  36162. ZR X1,RPC IF ILLEGAL FUNCTION CODE
  36163. LX7 X3 SAVE FUNCTION FLAGS
  36164. LX3 59-56 CHECK IF FNT REQUIRED
  36165. SA7 MB3
  36166. MX7 1
  36167. BX1 -X3*X7
  36168. LX7 6-59
  36169. BX1 X1+X0
  36170. SB5 RPC
  36171. ZR X1,SRC IF FNT REQUIRED AND NOT FOUND
  36172. NZ B3,CPC10 IF NOT 600 FUNCTION CODE
  36173. SX4 X4+/CIO/EOI SET EOI TERMINATION CONDITION
  36174.  
  36175. * PROCESS SKIP COUNT AND LEVEL NUMBER.
  36176.  
  36177. CPC10 BX3 X6
  36178. AX3 20 GET LEVEL NUMBER
  36179. MX7 56
  36180. BX3 X7+X3
  36181. SA1 A6-B1
  36182. MX2 42
  36183. LX2 18
  36184. BX7 X2*X1 CLEAR SKIP COUNT
  36185. BX2 -X2*X1
  36186. SX1 1754B
  36187. BX1 X1*X4 FUNCTION CODE AND TERMINATION CONDITION
  36188. SB3 X1-/CIO/SKP*100B-/CIO/PRU
  36189. ZR B3,CPC12 IF BACKSPACE PRU FUNCTION
  36190. SB3 X1-/CIO/SKP*100B-/CIO/EOR
  36191. ZR B3,CPC11 IF SKIP RECORD FUNCTION
  36192. SX2 B1+
  36193. NZ X3,CPC14 IF NOT LEVEL 17B
  36194. SB3 X1-/CIO/WTF*100B-/CIO/EOR
  36195. ZR B3,CPC13 IF WRITER/REWRITER
  36196. SX3 X1-/CIO/RDF*100B-40B-/CIO/EOI
  36197. NZ X3,CPC14 IF NOT *READCW*
  36198. SX4 X4+/CIO/EOF-/CIO/EOI STOP ON EOF
  36199. EQ CPC14 UPDATE PARAMETER WORD
  36200.  
  36201. CPC11 NZ X3,CPC12 IF NOT LEVEL 17B
  36202. SX4 X4+/CIO/EOF-/CIO/EOR SET EOF STOP
  36203. CPC12 MX3 1 SET SKIP DATA TRANSFER FLAG
  36204. LX3 56-59
  36205. BX6 X6+X3
  36206. LX2 -18
  36207. SX3 X2
  36208. NZ X3,CPC14 IF SKIP COUNT SPECIFIED
  36209. SX3 B1 SET SKIP COUNT = 1
  36210. LX3 18
  36211. BX7 X7+X3
  36212. SA7 A1+
  36213. ZR X2,CPC14 IF SKIP COUNT NOT INDEFINITE
  36214. SX3 /CIO/EOI SET STOP ON EOI FOR FORWARD SKIP
  36215. BX4 X4+X3
  36216. BX7 X4
  36217. MX2 7
  36218. LX7 59-11
  36219. PL X7,CPC14 IF FORWARD SKIP
  36220. SX4 X4+/CIO/REW*100B-/CIO/SKP*100B-/CIO/EOI SET REWIND
  36221. SX3 50B/2
  36222. LX2 19-59
  36223. BX6 -X2*X6
  36224. LX3 12
  36225. BX6 X6+X3
  36226. EQ CPC14 UPDATE FET+0
  36227.  
  36228. CPC13 SX4 X4+/CIO/EOF-/CIO/EOR SET WRITEF/REWRITEF FUNCTION
  36229. LX2 14-0
  36230. IX6 X6+X2 SET EXTERNAL FUNCTION CODE
  36231. CPC14 BX6 X6+X4 SET INTERNAL CODE IN PARAMETER WORD
  36232. SA6 A6
  36233. LX6 -12
  36234. MX7 -8
  36235. BX6 -X7*X6 UPDATE EXTERNAL CODE IN FET
  36236. SX3 4
  36237. LX6 1
  36238. IX5 X5-X3 GET FET+0
  36239. ERX2 X5
  36240. MX7 46
  36241. BX7 X7*X2 CLEAR ABNORMAL TERMINATION FIELD
  36242. IX7 X7+X6
  36243. EWX7 X5
  36244. SX6 B1
  36245. IX5 X5+X6 FET+1
  36246.  
  36247. * CHECK FILE ACCESS.
  36248.  
  36249. SA4 A6
  36250. ZR X0,CPC16 IF NO FNT ENTRY
  36251. IX2 X0-X6
  36252. ERX2 X2 GET FNT ENTRY
  36253. AX1 6
  36254. LX2 59-14
  36255. SB5 X1 INTERNAL FUNCTION CODE
  36256. PL X2,CPC15 IF NOT EXECUTE-ONLY FILE
  36257. SA1 B7+EOCW CHECK LAST FILE EXECUTED
  36258. SA3 B7+SEPW CHECK SPECIAL ENTRY POINTS
  36259. MX7 12
  36260. LX4 24
  36261. BX1 X1-X4
  36262. LX3 59-55
  36263. BX1 X1*X7
  36264. LX4 -24
  36265. ZR X1,CPC15 IF PROGRAM LOADED FROM THIS FILE
  36266. NG X3,CPC15 IF LDR= PROGRAM
  36267. SA1 MB3 GET FUNCTION FLAGS
  36268. SX7 /CIOERR/EXO *I/O ON EXECUTE-ONLY FILE*
  36269. LX1 59-54
  36270. PL X1,RPC IF FUNCTION INVALID ON EXECUTE ONLY FILE
  36271. CPC15 SX1 B5-/CIO/OVW
  36272. LX2 59-12-59+14
  36273. ZR X1,CPC15.1 IF OVERWRITE FUNCTION
  36274. NE B5,B1,CPC16 IF NOT WRITE FUNCTION
  36275. CPC15.1 SX7 /CIOERR/IWR *WRITE ON READ ONLY FILE*
  36276. NG X2,RPC IF WRITE LOCKOUT SET
  36277.  
  36278. * VERIFY FET PARAMETERS.
  36279.  
  36280. CPC16 MX1 -2 GET VALIDATION FLAGS
  36281. BX6 -X1*X4
  36282. ZR X6,CPC18 IF NO VALIDATION REQUIRED
  36283. SB6 CPC17 SET RETURN ADDRESS FOR *VFP*
  36284. SB3 RPC SET ERROR EXIT ADDRESS FOR *VFP*
  36285. SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
  36286. EQ /MONITOR/VFP VERIFY FET PARAMETERS
  36287.  
  36288. CPC17 SA2 MB2 GET FET LENGTH - 5 AND RANDOM FLAG
  36289. SA3 A2+B1 GET FUNCTION FLAGS
  36290. BX7 X1+X2
  36291. SA6 A2-B1 SAVE IN AND OUT
  36292. LX3 59-55 CHECK FOR REWIND OPERATION
  36293. SA7 A2 SAVE FIRST, LIMIT, AND FET LENGTH
  36294. SX2 B1
  36295. PL X3,CPC18 IF NOT REWIND OPERATION
  36296. SX7 B4+ FIRST
  36297. IX1 X5+X2 FET+2
  36298. EWX7 X1 SET IN = FIRST
  36299. IX1 X1+X2 FET+3
  36300. EWX7 X1 SET OUT = FIRST
  36301. ZR X0,CPC18 IF NO FNT ENTRY
  36302. ERX1 X0 GET FST ENTRY
  36303. LX2 11 CLEAR SYSTEM SECTOR PROCESSING BIT
  36304. MX7 12 GET EST ENTRY
  36305. BX7 X7*X1
  36306. LX7 12
  36307. CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
  36308. TA4 X4+EQDE,EST
  36309. MX7 -11
  36310. LX4 -12
  36311. BX7 -X7*X4
  36312. SB6 X7-2RMT
  36313. ZR B6,CPC18 IF *MT* EQUIPMENT
  36314. SB6 X7-2RNT
  36315. ZR B6,CPC18 IF *NT* EQUIPMENT
  36316. BX7 -X2*X1
  36317. EWX7 X0
  36318.  
  36319. * VALIDATE SECURITY ACCESS LEVEL OF FILE AND JOB.
  36320.  
  36321. CPC18 ZR X0,CPC18.4 IF NO FNT ENTRY
  36322. TB6 OSSM GET O/S SECURITY MODE
  36323. ZR B6,CPC18.4 IF UNSECURED SYSTEM
  36324. GT B5,B1,CPC18.4 IF NOT READ OR WRITE FUNCTION
  36325. SX2 B1
  36326. SA1 B7+JSCW GET JOB ACCESS LEVEL
  36327. IX2 X0+X2
  36328. LX1 15
  36329. ERX2 X2 GET FILE ACCESS LEVEL
  36330. MX6 -3
  36331. LX2 -24
  36332. BX7 -X6*X1
  36333. SA4 B7+SEPW CHECK FOR SSJ=
  36334. BX6 -X6*X2
  36335. IX7 X7-X6
  36336. LX4 59-50
  36337. ZR X7,CPC18.4 IF JOB AND FILE AT SAME ACCESS LEVEL
  36338. SA3 B7+JCIW CHECK FOR SUBSYSTEM
  36339. NG X4,CPC18.4 IF JOB HAS SSJ= PRIVILEGES
  36340. LX3 -24
  36341. MX4 -12
  36342. BX3 -X4*X3
  36343. MX4 57
  36344. SX3 X3-LSSI-1
  36345. PL X3,CPC18.4 IF SUBSYSTEM
  36346. SX3 B1
  36347. IX3 X0-X3
  36348. EQ B5,B1,CPC18.1 IF WRITE FUNCTION
  36349. PL X7,CPC18.4 IF READ FROM FILE AT LOWER LEVEL
  36350. BX1 X4*X1 RAISE JOB LEVEL TO FILE LEVEL
  36351. BX7 X1+X6
  36352. LX7 -15
  36353. SA7 A1
  36354. EQ CPC18.4 GET DEVICE TYPE
  36355.  
  36356. CPC18.1 NG X7,CPC18.4 IF WRITE TO FILE AT HIGHER LEVEL
  36357. LX1 59-53-15
  36358. ERX3 X3 GET FNT ENTRY
  36359. MX6 -6
  36360. NG X1,CPC18.4 IF USER ALLOWED TO WRITE TO LOWER LEVEL
  36361. LX3 -6
  36362. BX6 -X6*X3 GET FILE TYPE FROM FNT
  36363. SX6 X6-PMFT
  36364. ERX3 X0 GET EQUIPMENT FROM FST
  36365. SX7 /CIOERR/WDP *WRITEDOWN PROHIBITED.*
  36366. ZR X6,RPC IF DIRECT ACCESS PERMANENT FILE
  36367. MX6 -9
  36368. LX3 12
  36369. BX3 -X6*X3
  36370. LX1 53-59+15
  36371. MX6 -3
  36372. BX1 -X6*X1
  36373. ZR X3,CPC18.3 IF NO EQUIPMENT ASSIGNED
  36374. CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
  36375. TA3 X4+EQDE,EST GET EST ENTRY
  36376. MX6 -11 GET EQUIPMENT MNEMONIC
  36377. LX6 12
  36378. BX6 -X6*X3
  36379. LX6 -12
  36380. SB6 X6-2RMT
  36381. ZR B6,RPC IF TAPE EQUIPMENT
  36382. SB6 X6-2RNT
  36383. ZR B6,RPC IF TAPE EQUIPMENT
  36384. SB6 CPC18.2 SET *VAE* RETURN ADDRESS
  36385. EQ /MONITOR/VAE0 VALIDATE EQUIPMENT ACCESS LEVEL
  36386.  
  36387. CPC18.2 SX7 /CIOERR/LNF *ACCESS LEVEL NOT VALID FOR FILE*
  36388. NG X6,RPC IF JOB LEVEL NOT VALID FOR EQUIPMENT
  36389. CPC18.3 MX7 57 RAISE FILE TO JOB ACCESS LEVEL
  36390. SX3 B1+
  36391. BX7 X7*X2
  36392. IX3 X0+X3
  36393. BX7 X7+X1
  36394. LX7 24
  36395. EWX7 X3
  36396.  
  36397. * GET DEVICE TYPE.
  36398.  
  36399. CPC18.4 SA1 TFCP
  36400. MX6 -11
  36401. BX4 X4-X4
  36402. MX3 -12
  36403. ZR X0,CPC19 IF NO FNT ENTRY
  36404. ERX2 X0
  36405. LX2 12
  36406. BX4 -X3*X2 EST ORDINAL
  36407. ZR X4,CPC19 IF EQUIPMENT NOT ASSIGNED
  36408. CX3 X4,EST CONVERT EST ORDINAL TO OFFSET
  36409. TA3 X3+EQDE,EST READ EST ENTRY
  36410. LX3 -12
  36411. BX4 -X6*X3 DEVICE TYPE
  36412. LX3 12
  36413. PL X3,CPC19 IF NOT MASS STORAGE
  36414. BX2 X3
  36415. LX2 59-53
  36416. NG X2,CPC20 IF BUFFERED DEVICE
  36417.  
  36418. * DETERMINE FUNCTION PROCESSOR.
  36419.  
  36420. CPC19 SA1 A1+1
  36421. BX2 -X6*X1
  36422. BX7 X2-X4
  36423. ZR X7,CPC20 IF EQUIPMENT FOUND
  36424. NZ X2,CPC19 IF MORE ENTRIES TO CHECK
  36425. NG X3,CPC20 IF MASS STORAGE EQUIPMENT
  36426. SA1 A1+1 GET ALL OTHER EQUIPMENT ENTRY
  36427. CPC20 BX6 X3
  36428. NG X3,CPC21 IF MASS STORAGE
  36429. LX6 59-58
  36430. CPC21 ERX2 X5 SET DEVICE TYPE IN FET
  36431. MX7 1
  36432. BX7 -X6*X7 NON-ALLOCATABLE FLAG
  36433. MX6 -48
  36434. LX4 -12
  36435. BX6 -X6*X2
  36436. SA2 MB3 GET FUNCTION FLAGS
  36437. BX7 X7+X4
  36438. LX2 59-53
  36439. BX6 X6+X7
  36440. SX4 B1
  36441. NG X2,CPC22 IF DEVICE TYPE NOT TO BE RETURNED
  36442. EWX6 X5
  36443. LX6 59-39
  36444. PL X6,CPC22 IF FILE ACCESS LEVEL NOT TO BE RETURNED
  36445. IX4 X0+X4
  36446. MX6 -3
  36447. ERX4 X4 GET FILE ACCESS LEVEL
  36448. SX7 3
  36449. IX7 X5+X7 GET FET + 4
  36450. LX4 -24
  36451. ERX2 X7
  36452. BX4 -X6*X4
  36453. LX2 -36
  36454. BX2 X6*X2
  36455. BX6 X2+X4 RETURN FILE ACCESS LEVEL IN FET + 4
  36456. LX6 36
  36457. EWX6 X7
  36458. CPC22 SA2 MB3 GET FUNCTION FLAGS
  36459. MX7 2
  36460. LX2 59-58
  36461. BX2 X7*X2
  36462. BX7 X7*X1
  36463. MX6 -4
  36464. BX2 X7*X2
  36465. SA4 MB GET INTERNAL FUNCTION CODE
  36466. LX1 -12
  36467. LX4 -6
  36468. NZ X2,TFPJ+/TFPJ/RUD IF FUNCTION NOT VALID ON EQUIPMENT
  36469. BX2 -X6*X4
  36470. SB3 X2
  36471. SB6 B3+B3
  36472. BX7 X7-X7
  36473. SB6 B6+B6 FUNCTION CODE * 4
  36474. AX1 B6
  36475. BX1 -X6*X1 INDEX INTO *TFPJ* JUMP TABLE
  36476. SB6 X1
  36477. JP TFPJ+B6 EXIT TO PROCESSOR
  36478.  
  36479.  
  36480. TFPJ BSS 0 TABLE OF FUNCTION PROCESSOR JUMPS
  36481. QUAL TFPJ
  36482.  
  36483. IPP EQU *-/CPUCIO/TFPJ
  36484. TEQ (/BUFIO/IPP,BUFIO,/CPUCIO/TFPJ+/TFPJ/IPP) PSEUDO PP
  36485. BSS 0
  36486.  
  36487. OPE EQU *-/CPUCIO/TFPJ
  36488. SA1 /CPUCIO/MB2 READ RANDOM FILE FLAG
  36489. EQ /CPUCIO/OPE PROCESS OPEN
  36490. BSS 0
  36491.  
  36492. RET EQU *-/CPUCIO/TFPJ
  36493. NZ X0,/CPUCIO/RET FNT/FST PRESENT
  36494. EQ /CPUCIO/RWF SET CRI AND COMPLETE FET
  36495. BSS 0
  36496.  
  36497. PMT EQU *-/CPUCIO/TFPJ
  36498. EQ /CPUCIO/PMT PROCESS MAGNETIC TAPE
  36499. BSS 0
  36500.  
  36501. POD EQU *-/CPUCIO/TFPJ
  36502. EQ /CPUCIO/POD PROCESS OPTICAL DISK
  36503. BSS 0
  36504.  
  36505.  
  36506. RPC EQU *-/CPUCIO/TFPJ
  36507. EQ /CPUCIO/RPC CALL PP CIO
  36508. BSS 0
  36509.  
  36510. RWF EQU *-/CPUCIO/TFPJ
  36511. EQ /CPUCIO/RWF PROCESS REWIND FUNCTION
  36512. BSS 0
  36513.  
  36514. TIO EQU *-/CPUCIO/TFPJ
  36515. PL X4,/CPUCIO/TIO IF NOT CONTROL WORDS
  36516. EQ /CPUCIO/TFPJ+/TFPJ/RUD CONTROL WORDS NOT VALID
  36517. BSS 0
  36518.  
  36519. CCI EQU *-/CPUCIO/TFPJ
  36520. SX7 B1+B1 *TAPQ* TABLE OF PP REQUESTS INDEX
  36521. LX7 42-0
  36522. EQ /CPUCIO/RPC CALL PP CIO
  36523. BSS 0
  36524.  
  36525. RUD EQU *-/CPUCIO/TFPJ
  36526. SX7 /CIOERR/RUD *REQUEST UNDEFINED ON DEVICE*
  36527. EQ /CPUCIO/RPC CALL PP CIO
  36528. BSS 0
  36529.  
  36530. IEQ EQU *-/CPUCIO/TFPJ
  36531. SX7 /CIOERR/IEQ *ILLEGAL EQUIPMENT ON FILE*
  36532. EQ /CPUCIO/RPC CALL PP CIO
  36533.  
  36534. RTE EQU *-/CPUCIO/TFPJ
  36535. SX4 1 SET FST STATUS (EQUIVALENT TO TAPE)
  36536. EQ /CPUCIO/RWF0 PROCESS REWIND FUNCTION FOR *TEEQ*
  36537. BSS 0
  36538.  
  36539. QUAL *
  36540. TFCP SPACE 4,20
  36541. ** TFCP - TABLE OF FUNCTION CODE PROCESSORS.
  36542. *
  36543. *T 1/S, 1/T, 10/, 36/ TFPJI, 12/ DT
  36544. * DT DEVICE TYPE (0 = ANY DEVICE).
  36545. * S IF SET, MASS STORAGE ONLY FUNCTION IS NOT ALLOWED
  36546. * ON THIS EQUIPMENT.
  36547. * T IF SET, MAGNETIC TAPE ONLY FUNCTION IS NOT
  36548. * ALLOWED ON THIS EQUIPMENT.
  36549. * TFPJI *TFPJ* TABLE INDICES TO PROCESS *CIO* FUNCTIONS -
  36550. * 4/OV,4/EV,4/RT,4/RW,4/CL,4/OP,4/SK,4/WT,4/RD
  36551. * OV *TFPJ* TABLE INDEX FOR *OVERWRITE* PROCESSOR.
  36552. * EV *TFPJ* TABLE INDEX FOR *EVICT* PROCESSOR.
  36553. * RT *TFPJ* TABLE INDEX FOR *RETURN/UNLOAD* PROCESSOR.
  36554. * RW *TFPJ* TABLE INDEX FOR *REWIND* PROCESSOR.
  36555. * CL *TFPJ* TABLE INDEX FOR *CLOSE* PROCESSOR.
  36556. * OP *TFPJ* TABLE INDEX FOR *OPEN* PROCESSOR.
  36557. * SK *TFPJ* TABLE INDEX FOR *SKIP* PROCESSOR.
  36558. * WT *TFPJ* TABLE INDEX FOR *WRITE* PROCESSOR.
  36559. * RD *TFPJ* TABLE INDEX FOR *READ* PROCESSOR.
  36560. *
  36561. * NOTE - FUNCTION PROCESSOR JUMP INDEXES MUST BE IN SAME
  36562. * ORDER AS INTERNAL *CIO* FUNCTION CODES.
  36563.  
  36564.  
  36565. ERRNZ /CIO/RDF
  36566. ERRNZ /CIO/WTF-1
  36567. ERRNZ /CIO/SKP-2
  36568. ERRNZ /CIO/OPE-3
  36569. ERRNZ /CIO/CLO-4
  36570. ERRNZ /CIO/REW-5
  36571. ERRNZ /CIO/RET-6
  36572. ERRNZ /CIO/EVI-7
  36573. ERRNZ /CIO/OVW-10B
  36574.  
  36575.  
  36576. TFCP BSS 0
  36577. QUAL TFPJ
  36578. VFD 1/0,1/1,10/0 BUFFERED MASS STORAGE
  36579. VFD 4/RPC,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/IPP,4/IPP,4/IPP
  36580. VFD 12/3777B
  36581.  
  36582. * TABLE SEARCH STARTS HERE FOR ALL BUT BUFFERED MASS STORAGE.
  36583.  
  36584. VFD 1/1,1/0,10/0 OPTICAL DISK
  36585. VFD 4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD
  36586. VFD 12/2ROD
  36587.  
  36588. VFD 1/1,1/0,10/0 7-TRACK TAPE
  36589. VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
  36590. VFD 12/2RMT
  36591.  
  36592. VFD 1/1,1/0,10/0 9-TRACK TAPE
  36593. VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
  36594. VFD 12/2RNT
  36595.  
  36596. VFD 1/1,1/0,10/0 CARTRIDGE TAPE
  36597. VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
  36598. VFD 12/2RCT
  36599.  
  36600. VFD 1/1,1/0,10/0 ACS CARTRIDGE TAPE
  36601. VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
  36602. VFD 12/2RAT
  36603.  
  36604. VFD 1/1,1/1,10/0 *TE* PSEUDO-EQUIPMENT
  36605. VFD 4/RUD,4/RPC,4/RPC,4/RTE,4/RPC,4/RUD,4/RUD,4/RUD,4/RUD
  36606. VFD 12/2RTE
  36607.  
  36608. VFD 1/1,1/1,10/0 TERMINAL
  36609. VFD 4/RUD,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/RPC,4/TIO,4/TIO
  36610. VFD 12/2RTT
  36611.  
  36612. VFD 1/0,1/1,10/0 NULL EQUIPMENT
  36613. VFD 4/RPC,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/RPC,4/RPC,4/RPC
  36614. VFD 12/2RNE
  36615.  
  36616. VFD 1/1,1/1,10/0 COMMUNICATION COUPLER
  36617. VFD 4/RUD,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI
  36618. VFD 12/2RCC
  36619.  
  36620. VFD 1/0,1/1,10/0 ALL OTHER MASS STORAGE
  36621. VFD 4/RPC,4/RET,4/RET,4/RWF,4/RPC,4/OPE,4/RPC,4/RPC,4/RPC
  36622. VFD 12/0
  36623.  
  36624. VFD 1/1,1/1,10/0 ALL OTHER NON-MASS STORAGE
  36625. VFD 4/IEQ,4/RET,4/RET,4/RWF,4/RPC,4/IEQ,4/IEQ,4/IEQ,4/IEQ
  36626. VFD 12/0
  36627. QUAL *
  36628. TCIC SPACE 4,10
  36629. ** TCIC - TABLE OF CIO INTERNAL FUNCTION CODES.
  36630. *
  36631. * 30 BITS PER ENTRY -
  36632. *T 12/ IC, 1/E, 1/M, 1/T, 1/F, 1/R, 1/X, 1/D, 11/0
  36633. * IC = INTERNAL CIO CODE (DEFINED IN *COMSCIO*).
  36634. * = 7777B IF ILLEGAL REQUEST CODE.
  36635. * E = 1, IF EXTENDED FUNCTION LEGAL (3XX/6XX CIO CODE).
  36636. * M = 1, IF MASS STORAGE ONLY FUNCTION.
  36637. * T = 1, IF MAGNETIC TAPE ONLY FUNCTION.
  36638. * F = 1, IF FUNCTION REQUIRES FNT ENTRY.
  36639. * R = 1, IF REWIND OPERATION (SET *IN* = *OUT* = *FIRST*).
  36640. * X = 1, IF FUNCTION LEGAL ON EXECUTE ONLY FILE.
  36641. * D = 1, IF FUNCTION DOES NOT RETURN DEVICE TYPE TO FET.
  36642. *
  36643. * REFER TO *ICTE* MACRO FOR PARAMETER DESCRIPTION.
  36644.  
  36645.  
  36646. TCIC BSS 0
  36647. QUAL CIO
  36648.  
  36649. * THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
  36650. * CODES CORRESPONDING TO THE 000XXXX00 AND 110XXXX00
  36651. * BINARY EXTERNAL CIO FUNCTION CODES.
  36652.  
  36653. ICTE RDF,(PRU,VFL,VIO,RFE,XF) RPHR (000), READEI (600)
  36654. ICTE WTF,(PRU,VFL,VIO,RFE) WPHR (004)
  36655. ICTE RDF,(EOR,VFL,VIO,RFE) READ (010)
  36656. ICTE WTF,(EOI,VFL,VIO,RFE) WRITE(014)
  36657. ICTE RDF,(EOR,VFL,VIO,SKO,RFE) READSKP (020)
  36658. ICTE WTF,(EOR,VFL,VIO,RFE) WRITER (024)
  36659. ICTE UNUSED (030)
  36660. ICTE WTF,(EOF,VFL,VIO,RFE) WRITEF (034)
  36661. ICTE SKP,(EOR,SKO,BKW,EXF,XF) BKSP (040), SKIPB (640)
  36662. ICTE SKP,(PRU,SKO,BKW,EXF) BKSPRU (044)
  36663. ICTE REW,(VFL,BKW,IOF,EXF) REWIND (050)
  36664. ICTE REW,(VFL,BKW,IOF,EXF) REWIND (054)
  36665. ICTE RET,(UNL,EXF,NDT) UNLOAD (060)
  36666. ICTE UNUSED (064)
  36667. ICTE RET,(EXF,NDT) RETURN (070)
  36668. ICTE UNUSED (074)
  36669.  
  36670. * THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
  36671. * CODES CORRESPONDING TO THE 001XXXX00 AND 011XXXX00
  36672. * BINARY EXTERNAL CIO FUNCTION CODES.
  36673.  
  36674. ICTE OPE,(VFL,RFE,XF) OPEN READ/REEL NR(100/300)
  36675. ICTE OPE,(VFL,RFE) OPEN WRITENR (104)
  36676. ICTE OPE,(VFL,MTO) POSMF (110)
  36677. ICTE EVI,(UNL,EXF) EVICT (114)
  36678. ICTE OPE,(VFL,RFE) OPEN NR/ALTERNR (120)
  36679. ICTE UNUSED (124)
  36680. ICTE CLO,(EOR,XF) CLOSE(R) NR (130/330)
  36681. ICTE UNUSED (134)
  36682. ICTE OPE,(VFL,BKW,RFE,XF) OPEN READ (140)/REEL (340)
  36683. ICTE OPE,(VFL,BKW,RFE) OPEN WRITE (144)
  36684. ICTE CLO,(VFL,BKW,EOR,XF) CLOSE(R) REWIND(150/350)
  36685. ICTE UNUSED (154)
  36686. ICTE OPE,(VFL,BKW,RFE) OPEN ALTER (160)
  36687. ICTE UNUSED (164)
  36688. ICTE CLO,(BKW,EOR,XF) CLOSE(R) UNLOAD(170/370)
  36689. ICTE CLO,(BKW,EOR,XF) CLOSE(R) RETURN (174/374)
  36690.  
  36691. * THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
  36692. * CODES CORRESPONDING TO THE 010XXXX00 BINARY EXTERNAL
  36693. * CIO FUNCTION CODES.
  36694.  
  36695. ICTE RDF,(EOI,VFL,VIO,CRW,RFE) READCW (200)
  36696. ICTE WTF,(EOI,VFL,VIO,CRW,RFE) WRITECW (204)
  36697. ICTE RDF,(EOR,VFL,VIO,LST,RFE,MSO) READLS (210)
  36698. ICTE WTF,(EOI,VFL,VIO,RWO,RFE,MSO) REWRITE (214)
  36699. ICTE UNUSED (220)
  36700. ICTE WTF,(EOR,VFL,VIO,RWO,RFE,MSO) REWRITER(224)
  36701. ICTE RDF,(PRU,VFL,VIO,LST,RFE,MSO) RPHRLS (230)
  36702. ICTE WTF,(EOF,VFL,VIO,RWO,RFE,MSO) REWRITEF (234)
  36703. ICTE SKP,(EOR,SKO,EXF) SKIPF/SKIPFF/SKIPEI (240)
  36704. ICTE OVW,(EOI,MSO) OVERWRITE (244)
  36705. ICTE RDF,(EOF,VFL,VIO,RFE) READNS (250)
  36706. ICTE OVW,(EOI,MSO,NDT) OVERWRITE RETURN (254)
  36707. ICTE RDF,(EOF,VFL,VIO,NRW,MTO) READN (260)
  36708. ICTE WTF,(EOI,VFL,VIO,NRW,MTO) WRITEN (264)
  36709. ICTE UNUSED (270)
  36710. ICTE UNUSED (274)
  36711.  
  36712. QUAL *
  36713. TITLE CPUCIO SPECIAL PROCESSORS.
  36714. SPACE 4,10
  36715. ** CPUCIO SPECIAL PROCESSORS.
  36716. *
  36717. * STANDARD REGISTER DEFINITIONS.
  36718. *
  36719. * (B1) = 1.
  36720. * (B2) = USER EXCHANGE PACKAGE AREA.
  36721. * (B7) = CPA.
  36722. * (A0) = CPU NUMBER.
  36723. * (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
  36724. *
  36725. *T IR 18/ *CIO*, 1/A, 5/ CP, 18/ SKIP COUNT, 18/ FET ADDRESS
  36726. *
  36727. *T MB 1/S,5/ RF,6/ RC,5/0,1/F,6/ EC,12/ ORD,4/ LV,8/ XC,12/IC
  36728. * S SET IF *CIO* RESTARTED FROM RECALL STACK
  36729. * RF RESTART FLAGS = 1/TIF, 1/0, 1/SDT, 1/BDF, 1/DTF.
  36730. * TIF = TRACK INTERLOCK FLAG.
  36731. * SDT = SKIP DATA TRANSFER FLAG.
  36732. * BDF = BUFFERED DEVICE FUNCTION FLAG.
  36733. * DTF = DATA TRANSFERRED FLAG.
  36734. * RC RECALL STACK REASON CODE.
  36735. * F CREATE FNT ENTRY FLAG. IF SET, *1MS* CREATES
  36736. * AN FNT ENTRY AND RESTARTS CPUCIO.
  36737. * EC ERROR CODE IF NONZERO.
  36738. * ORD RELATIVE ADDRESS OF FNT ENTRY IN NFL.
  36739. * LV LEVEL NUMBER (0 - 17B).
  36740. * XC EXTERNAL *CIO* FUNCTION CODE.
  36741. * IC INTERNAL *CIO* FUNCTION CODE (SEE *COMSCIO*).
  36742. *
  36743. *T MB1 12/ 0, 24/ *IN*, 24/ *OUT*
  36744. *
  36745. *T MB2 1/R, 5/0, 6/ FETL, 24/ *FIRST*, 24/ *LIMIT*
  36746. * R SET IF RANDOM FILE.
  36747. * FETL FET LENGTH - 5.
  36748. *
  36749. * INITIAL ENTRY CONDITIONS.
  36750. *
  36751. * (X0) = ABSOLUTE FST ADDRESS, IF NONZERO.
  36752. * (X3) = *EQDE* WORD OF EST ENTRY.
  36753. * (X4) = (MB) LEFT SHIFTED BY -6.
  36754. * (X5) = ABSOLUTE FET+1 ADDRESS.
  36755. * (X6) = -17B.
  36756. * (X7) = 0.
  36757. * (A4) = MB.
  36758. * (B3) = *COMSCIO* INTERNAL FUNCTION CODE (4 BITS).
  36759. CMF SPACE 4,10
  36760. ** CMF - COMPLETE FET.
  36761. *
  36762. * EXIT TO *CPCX*.
  36763.  
  36764.  
  36765. CMF SX4 B1 SET FET COMPLETE
  36766. IX5 X5-X4 ADDRESS OF FET+0
  36767. SA1 IR CLEAR AUTO RECALL BIT
  36768. ERX2 X5 READ FET+0
  36769. BX6 X2+X4
  36770. LX4 41
  36771. BX7 -X4*X1
  36772. EWX6 X5
  36773. SA7 A1
  36774. EQ CPCX RETURN
  36775. OPE SPACE 4,20
  36776. ** OPE - PROCESS NON-RANDOM OPEN.
  36777. *
  36778. * ENTRY (X1) = (MB2).
  36779. *
  36780. * EXIT TO *RPC* IF RANDOM REQUEST ON MASS STORAGE.
  36781. * TO *RWF* IF NON-RANDOM AND REWIND REQUEST.
  36782. * TO *CMF* IF NON-RANDOM AND NOT REWIND.
  36783.  
  36784.  
  36785. OPE BX6 X3*X1
  36786. NG X6,RPC IF RANDOM FILE AND MASS STORAGE
  36787. MX7 18
  36788. SX6 3
  36789. IX2 X5+X6
  36790. ERX1 X2 READ FET+4
  36791. LX7 -24 CLEAR PRU SIZE FIELD
  36792. SX6 B1
  36793. BX1 -X7*X1
  36794. LX6 24 SET PRU SIZE = 100
  36795. BX7 X1+X6
  36796. ERX1 X0 READ FST
  36797. LX4 -5 EXTRACT REWIND BIT
  36798. SX6 B1
  36799. EWX7 X2 STORE FET+4
  36800. BX4 -X4*X6 COMPLEMENT OF REWIND BIT
  36801. LX6 7 CLEAR FILE WRITTEN SINCE LAST OPEN BIT
  36802. BX1 -X6*X1
  36803. LX6 1
  36804. BX1 X1+X6 SET FILE OPENED BIT
  36805. BX6 X1+X4 COMPLETE FST IF NOT REWIND
  36806. EWX6 X0 WRITE FST
  36807. ZR X4,RWF IF REWIND
  36808. EQ CMF COMPLETE FET
  36809. POD SPACE 4,10
  36810. ** POD - PROCESS OPTICAL DISK REQUESTS
  36811. *
  36812. * EXIT TO *RPC* TO INITIATE OPTICAL DISK DRIVER *1OD*
  36813. *
  36814. POD SX7 3 INDEX INTO TABLE(TAPQ) OF PP REQUESTS
  36815. LX7 42-0
  36816. EQ RPC ISSUE CALL FOR *1OD*
  36817. PMT SPACE 4,10
  36818. ** PMT - PROCESS MAGNETIC TAPE REQUEST.
  36819. *
  36820. * EXIT TO *CPCX* IF REQUEST TRANSFERRED TO *MAGNET*
  36821. * SUCCESSFULLY.
  36822. * TO *RCR* IF *CIO* REQUEST TO BE PUT IN RECALL.
  36823. *
  36824. * ERROR EXIT TO *RPC* IF ERROR DETECTED.
  36825. *
  36826. * CALLS /MONITOR/RCC1, /MONITOR/RSC, SRC.
  36827.  
  36828.  
  36829. * CHECK *MAGNET* AVAILABLE.
  36830.  
  36831. PMT SB4 B3-/CIO/RET
  36832. PL B4,PMT0 IF RETURN/UNLOAD/EVICT FUNCTION
  36833. SX1 B1
  36834. IX1 X0-X1 ABSOLUTE FNT ADDRESS
  36835. ERX1 X1 CHECK IF TAPE ASSIGNED FOR CE DIAGNOSTICS
  36836. LX1 59-17
  36837. SX7 /CIOERR/ASD *ASSIGNED FOR DIAGNOSTICS*
  36838. NG X1,RPC IF *CIO* FUNCTION NOT ALLOWED ON TAPE
  36839. PMT0 BX4 X0 SAVE ABSOLUTE FST ADDRESS
  36840. MX0 -12
  36841. SX1 MTSI *MAGNET* SUBSYSTEM IDENTIFICATION
  36842. SX7 /CIOERR/TNA *TAPES NOT AVAILABLE*
  36843. SB3 PMT1 SET RETURN ADDRESS FOR *RSC*
  36844. EQ /MONITOR/RSC GET *MAGNET* RA AND FL
  36845.  
  36846. PMT0.1 PL B4,PMT1.1 IF RETURN/UNLOAD/EVICT FUNCTION
  36847. EQ RPC PROCESS ERROR
  36848.  
  36849. VFD 12/PMT0.1-PMT1,18/0,12/PMT0.1-PMT1,18/PMV
  36850.  
  36851. PMT1 ERX1 X4 GET FST ENTRY
  36852. NO
  36853. LX1 24
  36854. BX2 -X0*X1 UDT ADDRESS
  36855. ZR X2,PMT0.1 IF NO UDT ADDRESS
  36856. SX7 X2+/MTX/UCIC+1
  36857. IX7 X7-X6
  36858. SX2 X2+/MTX/UFRQ
  36859. IX0 X3+X2 ABSOLUTE *UFRQ* ADDRESS
  36860. + PL X7,* IF OUTSIDE *MAGNET*-S FL
  36861. SB6 A2-STSW SAVE *MAGNET* CPA
  36862. ERX2 X0 CHECK IF I/O REQUEST IN PROGRESS
  36863. LX1 -24
  36864. SX7 /CIOERR/FSQ *I/O SEQUENCE ERROR*
  36865. NG X2,PMT0.1 IF TAPE LOST BY MAGNET
  36866. NZ X2,RPC IF UDT ALREADY BUSY
  36867. PMT1.1 SX7 B0+ INDICATE NO ERROR
  36868. PL B4,RPC IF RETURN/UNLOAD/EVICT FUNCTION
  36869.  
  36870. * BUILD *MAGNET* PARAMETER WORDS *UFRQ* - *UCIC*.
  36871.  
  36872. SA1 MB2 GET FET LENGTH, FIRST, LIMIT
  36873. SA3 B7+FLSW GET FL
  36874. MX4 12
  36875. BX7 -X4*X1
  36876. LX3 -12
  36877. BX1 X4*X1 FET LENGTH - 5
  36878. SX6 /MTX/UCIC-/MTX/UFRQ
  36879. BX3 X4*X3
  36880. LX1 1
  36881. IX6 X0+X6 *UCIC* ABSOLUTE ADDRESS
  36882. BX7 X7+X3
  36883. SA2 IR GET *CIO* CALL
  36884. EWX7 X6 WRITE *UCIC*
  36885. AX1 7
  36886. MX6 -18
  36887. SX7 X2 FET ADDRESS
  36888. LX2 -18
  36889. BX7 X7+X1
  36890. BX6 -X6*X2 SKIP COUNT
  36891. AX1 42
  36892. LX6 24
  36893. SB3 X1-10+5
  36894. BX7 X7+X6
  36895. AX1 1
  36896. SA3 MB GET INTERNAL AND EXTERNAL FUNCTION CODES
  36897. SB5 X1
  36898. MX1 -12
  36899. LX3 -24
  36900. BX1 -X1*X3 FNT ADDRESS
  36901. LX3 12
  36902. SB4 X1 SAVE FNT ADDRESS
  36903. MX1 -8
  36904. BX6 X4*X3 INTERNAL CODE
  36905. LX2 59-41+18
  36906. BX7 X7+X6
  36907. BX1 -X1*X3 EXTERNAL CODE
  36908. LX3 -8
  36909. MX6 -4
  36910. LX1 -11
  36911. BX6 -X6*X3 LEVEL NUMBER
  36912. LX6 32
  36913. MX3 1
  36914. BX1 X6+X1
  36915. BX2 X3*X2 AUTO RECALL FLAG
  36916. BX1 X1+X2
  36917. SA2 A3+B1 GET IN AND OUT
  36918. SX6 X2 OUT
  36919. AX2 24 IN
  36920. LX4 -12
  36921. IX2 X2-X6
  36922. LX3 58-59
  36923. ZR X2,PMT2 IF BUFFER EMPTY
  36924. BX1 X1+X3
  36925. PMT2 ERX2 X5 GET FET+1
  36926. LX3 47-59-58+59
  36927. BX6 -X3*X2 CLEAR RANDOM FLAG
  36928. MX2 -30
  36929. PL B3,PMT3 IF FET LENGTH .GE. 10D
  36930. LX3 41-59-47+59
  36931. BX6 -X3*X6 CLEAR EXTENDED LABEL OPTION
  36932. PMT3 BX4 X4*X6 FET OPTIONS
  36933. EWX6 X5
  36934. R= X3,/MTX/UCIA-/MTX/UFRQ
  36935. BX6 X1+X4
  36936. ZR B5,PMT4 IF FET LENGTH .LE. 6
  36937. SX1 5
  36938. IX1 X5+X1 FET+6
  36939. ERX1 X1
  36940. BX1 -X2*X1 UNUSED BIT COUNT AND MLRS FIELD
  36941. BX6 X6+X1
  36942. PMT4 SA1 B7+STSW
  36943. SA2 B6+CWQW
  36944. IX4 X0+X3 *UCIA* ABSOLUTE ADDRESS
  36945. IX5 X4+X3 *UCIB* ABSOLUTE ADDRESS
  36946. ERRNZ /MTX/UCIB-/MTX/UCIA-1
  36947. EWX7 X4 WRITE *UCIA*
  36948. EWX6 X5 WRITE *UCIB*
  36949. SX6 /MTX/CIO
  36950. SX7 B4+ FNT ADDRESS
  36951. LX6 48
  36952. BX6 X6+X7
  36953. SX7 20B
  36954. EWX6 X0 WRITE *UFRQ*
  36955. IX7 X1+X7 INCREMENT TAPE ACTIVITY
  36956. SB3 PMT5 SET RETURN ADDRESS FOR *RCC*
  36957. LX2 59-46
  36958. SA7 A1
  36959. PL X2,/MONITOR/RCC IF TO RECALL *MAGNET* CPU
  36960. PMT5 SB5 CPCX SET EXIT ADDRESS
  36961. JP SRC SET *RCLP* IF AUTO-RECALL SPECIFIED
  36962. RWF SPACE 4,10
  36963. ** RWF - REWIND FILE.
  36964. *
  36965. * EXIT TO *CMF*.
  36966.  
  36967.  
  36968. RWF SX4 5
  36969.  
  36970. * ENTERED HERE FOR *REWIND* ON *TE* FILE.
  36971. * (X4) = DESIRED FST STATUS = 1.
  36972.  
  36973. RWF0 ZR X0,RWF2 IF NO FST ENTRY
  36974. MX6 12
  36975. ERX1 X0 GET FST ENTRY
  36976. LX6 -24
  36977. PL X3,RWF1 IF NOT MASS STORAGE
  36978. BX2 X6*X1 CURRENT TRACK
  36979. R= X3,FSMS SET CURRENT SECTOR = FIRST SECTOR
  36980. ZR X2,RWF1 IF FILE NOT USED
  36981. BX2 -X6*X1 SET CURRENT TRACK = FIRST TRACK
  36982. LX1 -12
  36983. BX1 X6*X1 FIRST TRACK
  36984. BX1 X2+X1
  36985. LX6 -12
  36986. BX1 -X6*X1 SET CURRENT SECTOR = FIRST SECTOR
  36987. LX3 12
  36988. BX1 X1+X3
  36989. RWF1 MX7 54
  36990. BX6 X7*X1 SET EOR STATUS IN FST
  36991. BX6 X6+X4
  36992. EWX6 X0 SET FILE NOT BUSY
  36993. RWF2 SA2 MB2 GET RANDOM FILE FLAG
  36994. PL X2,CMF IF NOT RANDOM FILE, COMPLETE FET
  36995. SX1 B1
  36996. LX1 30
  36997. IX3 X5+X4 FET+6
  36998. ERX2 X3 GET FET+6
  36999. MX7 -30
  37000. BX7 -X7*X2
  37001. BX7 X7+X1
  37002. EWX7 X3
  37003. EQ CMF COMPLETE FET
  37004. TIO SPACE 4,10
  37005. ** TIO - TERMINAL I/O.
  37006. *
  37007. * EXIT TO *RPC* TO INITIATE TERMINAL I/O DRIVER *1MI*.
  37008. * TO *RWF* IF WRITE WITH NO DATA.
  37009. * TO *ROC1* TO ROLLOUT DETACHED INTERACTIVE USER JOB
  37010. * REQUESTING I/O. *RPPM* REQUEST COMPLETED IF PP
  37011. * REQUESTED INTERACTIVE I/O.
  37012. *
  37013. * ERROR EXIT TO *RPC* TO INITIATE *1MS*.
  37014.  
  37015.  
  37016. TIO SA2 B7+TFSW CHECK JOB CONNECTION STATUS
  37017. MX1 12
  37018. BX1 X1*X2
  37019. LX1 12
  37020. CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  37021. TA2 X2+JSNE,EJT GET JOB EJT ENTRY
  37022. LX2 -7
  37023. BX3 -X6*X2
  37024. SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
  37025. ERRNZ NICS CODE ASSUMES *NICS* = 0
  37026. SX4 X3-DTCS
  37027. SA1 B7+TIOW CHECK I/O IN PROGRESS
  37028. SA2 B7+TINW
  37029. BX6 X2
  37030. AX6 18
  37031. BX6 X1+X6
  37032. SX6 X6
  37033. ZR B3,TIO2 IF TERMINAL READ REQUEST
  37034.  
  37035. * PROCESS TERMINAL WRITE REQUEST.
  37036.  
  37037. ZR X3,TIO1.1 IF JOB NOT INTERACTIVE
  37038. SA2 A4+B1 READ MB1
  37039. SX7 X2 *OUT*
  37040. AX2 24 *IN*
  37041. BX2 X2-X7
  37042. ZR X2,RWF IF WRITE WITH NO DATA
  37043. ZR X4,TIO3 IF DETACHED JOB
  37044. NZ X6,TIO6 IF TIOW/TINW BUSY
  37045. SA2 IR
  37046. SX4 X2 FET ADDRESS
  37047. BX6 X1+X4 SET OUTPUT FET POINTER
  37048. SA6 A1+ REWRITE TIOW
  37049.  
  37050. * EXIT TO *RPC* TO INITIATE TERMINAL I/O DRIVER *1MI*.
  37051.  
  37052. TIO1 ERX3 X0 SET FST NOT BUSY
  37053. SX7 B1
  37054. BX6 X3+X7
  37055. EWX6 X0
  37056. LX7 42 SET *1MI* FAST LOAD TABLE INDEX
  37057. EQ RPC REQUEST TERMINAL I/O DRIVER
  37058.  
  37059. * PROCESS TERMINAL OUTPUT BY NON-INTERACTIVE JOB.
  37060.  
  37061. TIO1.1 ERX3 X0 SET FST NOT BUSY
  37062. SX7 B1
  37063. BX6 X3+X7
  37064. EWX6 X0
  37065. IX6 X5+X7 SET OUT = IN
  37066. ERX3 X6 READ IN
  37067. IX7 X6+X7
  37068. BX6 X3
  37069. EWX6 X7 WRITE OUT
  37070. EQ CMF COMPLETE FET
  37071.  
  37072. * PROCESS TERMINAL READ REQUEST.
  37073.  
  37074. TIO2 ZR X3,RPC IF JOB NOT INTERACTIVE
  37075. ZR X4,TIO3 IF DETACHED JOB
  37076. NZ X6,TIO6 IF TIOW/TINW BUSY
  37077. SA1 IR SET INPUT FET ADDRESS
  37078. SX6 X1
  37079. LX6 18
  37080. BX6 X2+X6
  37081. SA6 A2 REWRITE TINW
  37082. EQ TIO1 INITIATE TERMINAL I/O
  37083.  
  37084. * PROCESS DETACHED JOB TERMINATION.
  37085.  
  37086. TIO3 SA1 B7+EOJW JOB TERMINATION OPTIONS
  37087. MX6 -3
  37088. LX1 0-57
  37089. BX1 -X6*X1
  37090. SB4 X1
  37091. SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
  37092. NE B4,B1,RPC IF DETTACHED JOB TO BE TERMINATED
  37093. ERRNZ SUJT-1 CODE DEPENDS ON VALUE
  37094. ERX3 X0 SET FST NOT BUSY
  37095. SX7 B1
  37096. BX7 X3+X7
  37097. EWX7 X0
  37098. SB3 TIO4 RETURN ADDRESS FOR *AQR*
  37099. SA1 IR GET *CIO* CALL TO BE QUEUED
  37100. SX7 DTSR JOB SUSPENSION REASON CODE
  37101. BX6 X1
  37102. LX7 -12
  37103. SA7 /MONITOR/AQRA SET PARAMETER WORD FOR *AQR*
  37104. EQ /MONITOR/REC2 QUEUE *CIO* REQUEST
  37105.  
  37106. * ASSURE DROP OPTION ON *RPPM* FUNCTION REQUEST.
  37107.  
  37108. TIO4 TX1 10B,SP
  37109. MX0 -18
  37110. SX2 A5
  37111. BX2 -X0*X2
  37112. IX1 X2-X1
  37113. SX5 B1+
  37114. ERRNZ ROSU-10B CHECK *ROCM* SUSPENSION POSITION
  37115. LX5 39-0+12
  37116. SB6 -1 INDICATE *CPUCIO* CALL TO *ROCM*, *DCPM*
  37117. BX2 X2-X2 REQUIRED BY *ROCM*
  37118. PL X1,/MONITOR/ROC4 IF NOT *RPPM* REQUEST
  37119. SX7 B1
  37120. SA1 A5 SELECT DROP OPTION ON *RPPM* REQUEST
  37121. LX7 36 *RPPM* COMPLETION STATUS
  37122. LX1 59-37
  37123. PL X1,TIO5 IF NO DROP OPTION SELECTED
  37124. SX7 4000B+DPPM FORCE *DPPM* FUNCTION REQUEST
  37125. LX7 48
  37126. TIO5 SA7 A5 REWRITE OUTPUT REGISTER
  37127. EQ /MONITOR/ROC4 ROLLOUT JOB
  37128.  
  37129. TIO6 SA1 IR SET TIOW/TINW BUSY IN REQUEST
  37130. SX7 B1
  37131. LX7 35-0
  37132. BX7 X1+X7
  37133. SA7 A1 REWRITE INPUT REGISTER
  37134. EQ TIO1 START UP *1MI*
  37135.  
  37136. ENDBLK
  37137. BLOCK MCE,(MEMORY CLEARING ROUTINES.)
  37138. MCE SPACE 4,10
  37139. ** THIS BLOCK IS LOADED IF THE MEMORY CLEARING OPTION
  37140. * IS ENABLED IN THE IPRDECK. THE BASIC PURPOSE IS TO
  37141. * CLEAR STORAGE UPON RELEASE IN ADDITION TO UPON ASSIGMENT.
  37142. CST SPACE 4,20
  37143. ** CST - EXCEPTION PROCESSOR FOR SPECIAL MEMORY CLEAR REQUEST.
  37144. *
  37145. * THIS ROUTINE IS CALLED TO BUILD THE *CSTM* REQUEST FROM THE
  37146. * *RSTM* REQUEST THAT IS STORED IN MB+5.
  37147. *
  37148. * ENTRY (MB+5) = 12/ RSTM, 12/ NEW FL, 3/,1/NFL REQUEST
  37149. * 7/,1/ ECS REQUEST, 24/
  37150. *
  37151. * EXIT TO /MONITOR/CST0 WITH REBUILT REQUEST -
  37152. * (X5) = 12/ CSTM, 4/1, 1/ECS REQUEST, 1/1,
  37153. * 18/ WORD COUNT, 24/ FWA
  37154. *
  37155. * USES X - ALL.
  37156. * A - 1, 2, 3.
  37157. * B - 3.
  37158. *
  37159. * CALLS /CME/CSM, /0CME/CSM.
  37160.  
  37161.  
  37162. CST SA2 A5+6 GET *MB+5*
  37163. SA3 B7+ECSW GET ECS FL CONTROL
  37164. MX0 -12
  37165. MX5 1
  37166. LX2 59-24
  37167. BX1 X5*X2 EXTRACT ECS REQUEST FLAG
  37168. NG X2,CST1 IF CLEARING ECS FL
  37169. SA3 B7+FLSW GET CM FL CONTROL
  37170. LX2 59-32-59+24
  37171. NG X2,CST4 IF CLEARING NFL
  37172. LX2 59-24-59+32
  37173. CST1 LX2 24-59+24
  37174. BX6 -X0*X2 NEW FL
  37175. BX4 -X0*X3 OLD FL
  37176. IX4 X4-X6 WORD COUNT
  37177. CST2 LX4 24
  37178. LX1 43-59
  37179. LX5 42-59
  37180. BX6 X4+X6 START BUILDING REQUEST
  37181. BX5 X1+X5
  37182. NZ X1,CST3 IF ECS FL
  37183. LX6 6 MULTIPLY REQUEST BY 100B
  37184. CST3 BX1 X5+X6 SET RELATIVE/ECS REQUEST FLAG(S)
  37185. SX6 CSTM*100B+4B SET UP FOR RE-ENTRY
  37186. LX6 -18
  37187. BX5 X6+X1
  37188. BX1 X5
  37189. EQ /MONITOR/CST0 RESTART *CSTM* PROCESSOR
  37190.  
  37191. CST4 LX2 32-59+24
  37192. LX3 12
  37193. BX4 -X0*X2 NEW NFL
  37194. BX6 -X0*X3 OLD NFL
  37195. IX4 X6-X4 WORD COUNT
  37196. BX6 -X6 COMPLEMENT FWA
  37197. LX6 6
  37198. MX3 -24
  37199. BX6 -X3*X6
  37200. LX6 -6
  37201. EQ CST2 COMPLETE BUILDING OF REQUEST
  37202.  
  37203. CST5 LX4 59-44-59+42
  37204. NO
  37205. TPL X4,(/CME/CSM,CME,/0CME/CSM) IF NOT SPECIAL REQUEST
  37206. SB3 /MCE/CST6 *CSM* RETURN ADDRESS
  37207. TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
  37208.  
  37209. CST6 SA1 A5+6 GET *RSTM* REQUEST
  37210. SX7 B1
  37211. LX7 29
  37212. BX7 X7+X1 SET COMPLETION BIT
  37213. EQ /MONITOR/PPR1 EXIT
  37214. CST SPACE 4,15
  37215. ** CSTX - EXIT PROCESSOR FOR PROGRAM MODE *CSTM*.
  37216. *
  37217. * THIS PROCESSOR IS CALLED TO CHECK SPECIFICATION OF THE
  37218. * SPECIAL REQUEST OPTION TO DETERMINE IF THE *RSTM* REQUEST
  37219. * THAT MIGHT BE IN *MB+5* MUST BE RESTORED.
  37220. *
  37221. * ENTRY (X7) = 0.
  37222. *
  37223. * EXIT TO /PROGRAM/PRG1
  37224. *
  37225. * USES X - 3, 7.
  37226. * A - 3.
  37227.  
  37228.  
  37229. CSTX SA3 A5 CHECK REQUEST OPTION(S)
  37230. LX3 59-44
  37231. PL X3,/PROGRAM/PRG1 IF NOT SPECIAL REQUEST
  37232. SA3 A5+6 GET MB+5
  37233. SX7 B1
  37234. LX7 29
  37235. BX7 X7+X3 SET REQUEST COMPLETED
  37236. EQ /PROGRAM/PRG1 EXIT
  37237. CUE SPACE 4,15
  37238. ** CUE - CLEAR USER ECS.
  37239. *
  37240. * THIS ROUTINE IS CALLED TO CLEAR USER ECS IN ORDER
  37241. * TO MAINTAIN SECURED MEMORY (MEMORY CLEARING ENABLED).
  37242. *
  37243. * ENTRY (X1) = WORD COUNT.
  37244. * (X2) = ABSOLUTE FWA.
  37245. * (B3) = RETURN ADDRESS.
  37246. *
  37247. * USES X - 0, 1, 4, 6.
  37248. * A - 0, 4.
  37249. * B - 4.
  37250.  
  37251.  
  37252. CUE TSX0 (LCCB-1,CP176,1-1)
  37253. SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
  37254. NZ X0,CUE1 IF NOT CYBER 990 TYPE MAINFRAME
  37255. SA4 ECRL GET RAE FOR ZERO UEM BLOCK
  37256. LX4 0-12
  37257. MX0 -24
  37258. BX0 -X0*X4
  37259. TLX0 9-21+60,UESC
  37260. CUE1 SA0 /PROGRAM/UBUF SET FWA OF CM BUFFER
  37261. TLX0 (0,CP176,21)
  37262. SB4 /PROGRAM/MECB SET WORD COUNT
  37263. TLX0 (3,ESM170,0)
  37264. SX6 A0
  37265. TLX0 (4,UEM180,0)
  37266. LX6 30
  37267. BX0 X0+X6
  37268. + RE B4 CLEAR CM BUFFER
  37269.  
  37270. * NOTE - HALF EXIT WILL BE TAKEN ON EXTENDED MEMORY READ
  37271. * BECAUSE OF OUT-OF-RANGE ADDRESS SPECIFIED TO CAUSE
  37272. * ZEROES TRANSFER TO CM.
  37273.  
  37274. SB0 0 (HALF-EXIT EXPECTED)
  37275. BX0 X6+X2 ECS ADDRESS
  37276. SX4 B4+ ADDRESS INCREMENT/DECREMENT
  37277. CUE2 WUE PROGRAM CLEAR USER EM
  37278. * SB0 0 (IGNORE HALF-EXIT)
  37279. + IX1 X1-X4 DECREMENT WORD COUNT
  37280. IX0 X0+X4 INCREMENT ECS ADDRESS
  37281. NZ X1,CUE2 IF NOT COMPLETE
  37282. JP B3 RETURN
  37283. MEC SPACE 4,15
  37284. ** MEC - EXTENSION FOR USER ECS STORAGE MOVE.
  37285. *
  37286. * THIS PROCESSOR DETERMINES IF VACATED EXTENDED MEMORY FIELD
  37287. * LENGTH MUST BE CLEARED FOLLOWING A STORAGE MOVE.
  37288. *
  37289. * ENTRY (B7) = CP/PCP ADDRESS.
  37290. *
  37291. * EXIT TO /PROGRAM/MEC2.1
  37292. *
  37293. * USES X - 0, 1, 2, 3, 4.
  37294. * A - 1, 2, 3.
  37295. * B - 3.
  37296. *
  37297. * CALLS CUE.
  37298.  
  37299.  
  37300. MEC TSA3 (UEML,UEM,ZERL)
  37301. SA1 SMRL
  37302. SA2 B7+ECSW
  37303. SB3 /PROGRAM/MEC2.1 *CUE* RETURN ADDRESS
  37304. TX0 B7+CPAS,-SCA
  37305. MX4 -12
  37306. LX3 12
  37307. BX3 -X4*X3 UEM BASE ADDRESS IF UEM PRESENT
  37308. LX4 24
  37309. BX4 -X4*X1 DIRECT MOVE HOLE POINTER
  37310. NZ X0,MEC1 IF NOT LAST CONTROL POINT
  37311. PL X1,MEC2 IF UPWARD MOVE
  37312. MEC1 ZR X4,/PROGRAM/MEC2.1 IF NOT DIRECT MOVE
  37313. BX1 X2
  37314. LX1 48 WORD COUNT = FLE
  37315. MEC2 AX2 RSHF
  37316. MX0 -RMSK
  37317. AX1 48
  37318. BX2 -X0*X2
  37319. LX3 9
  37320. TLX2 9,UESC
  37321. TLX1 9,UESC WORD COUNT
  37322. IX2 X2+X3 OLD RA = FWA
  37323. EQ CUE CLEAR USER ECS
  37324. MST SPACE 4,15
  37325. ** MST - EXTENSION FOR MEMORY CLEARING AFTER STORAGE MOVE.
  37326. *
  37327. * THIS PROCESSOR DETERMINES IF VACATED FIELD LENGTH MUST BE
  37328. * CLEARED FOLLOWING A STORAGE MOVE.
  37329. *
  37330. * ENTRY (B7) = CP/PCP ADDRESS.
  37331. *
  37332. * EXIT TO /PROGRAM/MST3.
  37333. *
  37334. * USES X - 0, 1, 2, 3, 4, 6, 7.
  37335. * A - 1, 2.
  37336. * B - 3.
  37337. *
  37338. * CALLS /CME/CSM, /0CME/CSM.
  37339.  
  37340.  
  37341. MST SA2 B7+FLSW
  37342. SA1 SMRL
  37343. SB3 MST2 *CSM* RETURN ADDRESS
  37344. SX6 B7-CPAS
  37345. TX7 B7+CPAS,-SCA
  37346. MX4 -12
  37347. BX3 -X4*X2 FL
  37348. LX4 24
  37349. ZR X6,MST1 IF CP 1 MOVING
  37350. BX4 -X4*X1 DIRECT MOVE HOLE POINTER
  37351. NZ X7,MST0.1 IF NOT LAST CP MOVING
  37352. PL X1,MST0.2 IF UPWARD MOVE
  37353. MST0.1 ZR X4,MST2 IF NOT DIRECT MOVE
  37354. LX3 48
  37355. IX1 X2+X3 WORD COUNT = (FL + NFL)
  37356. MST0.2 AX1 48
  37357. AX2 RSHF
  37358. MX0 -RMSK
  37359. LX1 6
  37360. BX3 -X0*X2 RA/100B
  37361. AX2 48-RSHF NFL/100B
  37362. IX2 X3-X2
  37363. LX2 6 FWA TO CLEAR (RA - NFL)
  37364. TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
  37365.  
  37366. MST1 PL X1,MST2 IF NOT DOWNWARD MOVE
  37367. AX1 48
  37368. AX2 RSHF
  37369. LX1 6
  37370. MX0 -RMSK
  37371. BX1 -X1 WORD COUNT
  37372. BX2 -X0*X2 RA/100B
  37373. IX2 X2+X3 (LWA+1)/100B
  37374. LX2 6
  37375. IX2 X2-X1 (LWA+1) - WORD COUNT
  37376. TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
  37377.  
  37378. MST2 TA1 CMMS,SDA PRESET MOVE COUNT FOR REENTRY
  37379. EQ /PROGRAM/MST3 COMPLETE STORAGE MOVE
  37380. PRS SPACE 4,20
  37381. ** PRS - PRESET EXTENSION TO CLEAR MEMORY AT DEADSTART.
  37382. *
  37383. * THIS ROUTINE IS CALLED TO CLEAR ALL UNASSIGNED FIELD LENGTH
  37384. * DURING DEADSTART IF MEMORY CLEARING IS ENABLED.
  37385. *
  37386. * ENTRY (PRSA) = RECOVERY LEVEL.
  37387. * (A0) = LWA+1 OF *CPUMTR*.
  37388. *
  37389. * EXIT (0) = LWA+1 OF *CPUMTR* (TO BE PICKED UP BY *STL*).
  37390. * TO *CPSL* (IN LOW CORE).
  37391. *
  37392. * USES X - 0, 1, 2, 3, 4, 6.
  37393. * A - 0, 1, 2, 3, 4, 6.
  37394. * B - 3, 7.
  37395. *
  37396. * CALLS /CME/CSM, /0CME/CSM, /MCE/CUE.
  37397.  
  37398.  
  37399. PRS SA2 PRSA GET RECOVERY LEVEL
  37400. SX6 A0+77B LWA+1 OF *CPUMTR* (FWA TO CLEAR)
  37401. SA1 1*200B+FLSW
  37402. AX6 6
  37403. SX2 X2-3
  37404. NZ X2,PRS1 IF NOT LEVEL 3 RECOVERY
  37405. MX0 -12
  37406. BX6 -X0*X1 FL/100B
  37407. AX1 RSHF
  37408. MX0 -RMSK
  37409. BX1 -X0*X1
  37410. IX6 X1+X6 RA + FL
  37411. PRS1 SA6 PRSB START ADDRESS
  37412. SB3 PRS3 *CSM* RETURN ADDRESS
  37413. PRS2 SA1 A1+200B NEXT CONTROL POINT
  37414. SA2 PRSB CURRENT ADDRESS
  37415. MX0 -RMSK
  37416. AX1 RSHF
  37417. BX4 -X0*X1 RA/100B
  37418. AX1 48-RSHF NFL/100B
  37419. IX4 X4-X1 FWA OF USER FL (RA - NFL)
  37420. IX1 X4-X2 WORD COUNT
  37421. LX2 6
  37422. LX1 6
  37423. ZR X1,PRS3 IF NO MEMORY TO CLEAR
  37424. TPL X1,(/CME/CSM,CME,/0CME/CSM) IF NO OVERLAP
  37425. EQ PRS4 BYPASS UPDATE OF CURRENT ADDRESS
  37426.  
  37427. PRS3 SA1 A1 FIELD LENGTH CONTROL
  37428. MX0 -12
  37429. BX3 -X0*X1 FL/100B
  37430. AX1 RSHF
  37431. MX0 -RMSK
  37432. BX1 -X0*X1 RA/100B
  37433. IX6 X1+X3
  37434. SA6 A2 UPDATE CURRENT ADDRESS
  37435. PRS4 SX1 A1+
  37436. TX1 X1-FLSW,-SCA
  37437. NZ X1,PRS2 IF NOT LAST USER CONTROL POINT
  37438. TEQ (/MCE/PRS5,UEC,/MCE/PRS9) PROCESS USER ECS
  37439.  
  37440. PRS5 SA2 PRSA
  37441. SA1 1*200B+ECSW
  37442. SB7 A0 SAVE (A0)
  37443. MX0 -12
  37444. SX3 X2-3
  37445. NZ X3,PRS9 IF NOT LEVEL 3 RECOVERY
  37446. BX2 -X0*X1 FL/*UEBS*
  37447. AX1 RSHF
  37448. MX0 -RMSK
  37449. BX1 -X0*X1 RA/*UEBS*
  37450. IX6 X2+X1
  37451. SA6 PRSB START ADDRESS
  37452. SB3 PRS7 *CUE* RETURN ADDRESS
  37453. PRS6 SA1 A1+200B NEXT CONTROL POINT
  37454. SA2 PRSB CURRENT ADDRESS
  37455. MX0 -RMSK
  37456. AX1 RSHF
  37457. BX4 -X0*X1 RA/*UEBS*
  37458. IX1 X4-X2 WORD COUNT
  37459. TSA3 (UEML,UEM,ZERL)
  37460. MX0 -12
  37461. AX3 48
  37462. BX3 -X0*X3 UEM BASE ADDRESS IF UEM PRESENT
  37463. LX3 9
  37464. TLX2 9,UESC
  37465. IX2 X2+X3
  37466. TLX1 9,UESC
  37467. ZR X1,PRS7 IF NO MEMORY TO CLEAR
  37468. PL X1,CUE IF NO OVERLAP
  37469. EQ PRS8 BYPASS UPDATE OF CURRENT ADDRESS
  37470.  
  37471. PRS7 SA1 A1 FIELD LENGTH CONTROL
  37472. MX0 -12
  37473. BX3 -X0*X1 FL/1000B
  37474. AX1 RSHF
  37475. MX0 -RMSK
  37476. BX1 -X0*X1 RA/1000B
  37477. IX6 X1+X3
  37478. SA6 A2 UPDATE CURRENT ADDRESS
  37479. PRS8 SX1 A1+
  37480. TX1 X1-ECSW,-SCA
  37481. NZ X1,PRS6 IF NOT LAST CONTROL POINT
  37482. SA0 B7+ RESTORE (A0)
  37483. PRS9 SX6 A0 SET LWA+1 OF *CPUMTR*
  37484. SA6 B0
  37485. EQ CPSL BRANCH TO STOP
  37486.  
  37487.  
  37488. PRSA BSS 1 RECOVERY LEVEL
  37489. PRSB BSS 1 CURRENT ADDRESS
  37490.  
  37491. ENDBLK
  37492. BLOCK NVE,(NVE ROUTINES.)
  37493. SPACE 4,10
  37494. MT EQU /MONITOR/MT
  37495. XJ1 SPACE 4,15
  37496. ** XJ1 - EXCHANGE PROCESSOR.
  37497. *
  37498. * ENTRY (B2) = EXCHANGE PACKAGE ADDRESS.
  37499. *
  37500. * EXIT (X0) .LT. 0 IF EXCHANGE NEEDED.
  37501. * TO */CME/XJ3* TO EXCHANGE TO PROGRAM.
  37502. *
  37503. * USES X - 1, 2, 6, 7.
  37504. * A - 1, 2, 6, 7.
  37505. * B - 3.
  37506.  
  37507.  
  37508. XJ1 BSS 0 ENTRY
  37509. SB3 A0+
  37510. NZ B3,/CME/XJ3 IF SECOND CPU
  37511. TB3 A0,DSCB
  37512. SA1 B3+/DST/D7JP JOB PRIORITY
  37513. SA2 B3+/DST/D8JP TASK PRIORITY
  37514. MX7 -16
  37515. BX6 X6-X6
  37516. ZR X2,/CME/XJ3 IF NO TASK PRESENT
  37517. BX1 -X7*X1
  37518. SA6 /MONITOR/IP CLEAR PRIORITY INCREASE
  37519. RC X6 READ MICROSECOND COUNTER
  37520. AX6 14
  37521. BX2 -X7*X2
  37522. MX7 -4
  37523. BX6 -X7*X6 EXTRACT SUB-PRIORITY
  37524. BX1 X1+X6
  37525. IX7 X1-X2 COMPARE PRIORITIES
  37526. PL X7,/CME/XJ3 IF NO EXCHANGE NEEDED
  37527. AX2 8
  37528. ZR X2,/CME/XJ3 IF NO EXCHANGE NEEDED
  37529. SA1 PPXL
  37530. ZR X1,XJ11 IF NO PP EXCHANGE REQUESTED/PENDING
  37531. SA1 XJ1A RESIDUAL COUNTDOWN
  37532. NZ X1,XJ12 IF NOS/VE BYPASS LIMIT NOT REACHED
  37533. SA2 VEBL NOS/VE BYPASS LIMIT
  37534. MX6 -12
  37535. BX6 -X6*X2
  37536. SA6 A1 INITIALIZE COUNTDOWN
  37537. XJ11 MX0 1
  37538. JP /CME/XJ3 EXCHANGE
  37539.  
  37540. XJ12 SX6 X1-1 DECREMENT COUNTDOWN
  37541. SA6 A1
  37542. JP /CME/XJ3 NO EXCHANGE TO NOS/VE FOR NOW
  37543.  
  37544. XJ1A CON 0 NOS/VE BYPASS COUNTDOWN
  37545. SVS SPACE 4,15
  37546. ** SVS - SET SCHEDULING DATA.
  37547. *
  37548. * ENTERED AT *SVS1* FROM */MONITOR/SPR*.
  37549. *
  37550. * EXIT WORD *D7JP* IN *DSCB* SET UP.
  37551. * 24/ JSN,12/ EJT ORDINAL,8/ TRAP VALIDATION,16/PRIORITY
  37552. * (*MLST*) MOVED TO *NVE* BUFFER IF DATA TO BE MOVED.
  37553. *
  37554. * USES X - 0, 2, 4, 5, 6, 7.
  37555. * A - 2, 4, 6, 7.
  37556. * B - 3, 4, 5, 6.
  37557.  
  37558. SYSCOM
  37559.  
  37560. SVS BSS 0 ENTRY
  37561. SA4 B2+CWQW GET CPU PRIORITY
  37562. SB6 /MONITOR/BNJ20 SET *BNJ* RETURN ADDRESS
  37563. UX4,B5 X4 UNPACK CPU PRIORITY AND FLAGS
  37564. SX5 B5+ SET CPU PRIORITY
  37565. MX0 -12
  37566.  
  37567. * ENTRY FROM */MONITOR/SPR*.
  37568. * (B6) = RETURN ADDRESS.
  37569. * (X5 BITS 3 - 9) = CPU PRIORITY.
  37570. * (X0) = 77...770000B.
  37571.  
  37572. SVS1 BSS 0 ENTRY
  37573. SB3 A0+
  37574. NZ B3,/MONITOR/RB6 IF SECOND CPU
  37575. TB3 A0,DSCB
  37576. SA2 /MONITOR/IP SUB-PRIORITY
  37577. SA4 B7+JCIW GET SUBSYSTEM ID
  37578. SX6 X2+
  37579. AX4 24-0
  37580. SA2 SSTL
  37581. BX7 -X0*X4
  37582. SX7 X7-NVSI NVE SUBSYSTEM ID
  37583. MX0 3
  37584. LX2 59-44
  37585. ZR X7,SVS2 IF NVE SUBSYSTEM
  37586. NG X2,SVS4 IF HARDWARE FAULT INJECTION IS DISABLED
  37587. SVS2 LX0 16-57 SET *V1*, *V2*, AND *V3* BITS
  37588. BX6 X0+X6
  37589. NZ X7,SVS4 IF NOT NVE SUBSYSTEM
  37590. TA2 NVESS *SSCT* WORD CONTAINING *NVE* BYTE
  37591. TLX2 0,NVEOS
  37592. PL X2,SVS4 IF *NVE* NOT YET ACTIVATED
  37593. SA2 B3+/DST/D7ST GET POINTER TO *MLST*
  37594. MX0 -18
  37595. LX2 -18
  37596. BX7 -X0*X2 *MLST* ADDRESS
  37597. ZR X7,SVS4 IF NO *MLST*
  37598. SA4 X7 PICK UP THE FLAG/COUNT WORD
  37599. ZR X4,SVS4 IF NO ACTIVE ENTRIES IN *MLST*
  37600. SX0 MLBR *NVE* BUFFER POINTER
  37601. SA2 B2+B1 GET RA FROM EXCHANGE PACKAGE
  37602. AX2 36-0
  37603. IX0 X0+X2
  37604. ERX2 X0 PICK UP MESSAGE LINK BUFFER POINTER
  37605. MX0 -18
  37606. BX0 -X0*X2
  37607. ZR X0,SVS4 IF NO BUFFER ADDRESS
  37608. SX7 X4+B1 TOTAL WORDS TO TRANSFER
  37609. SA2 B2+2 GET FLC FROM EXCHANGE PACKAGE
  37610. AX2 36-0
  37611. IX2 X2-X7 SUBTRACT OUT TRANSFER WORD COUNT
  37612. IX2 X2-X0 SUBTRACT OUT BUFFER ADDRESS
  37613. NG X2,SVS4 IF BUFFER EXTENDS BEYOND FL
  37614. SA2 B2+B1 GET RA AGAIN
  37615. SB4 X7 WORDS TO TRANSFER
  37616. AX2 36-0
  37617. BX7 X4
  37618. IX0 X0+X2 ABSOLUTE BUFFER ADDRESS
  37619. EWX7 X0 ACTIVE WORD COUNT TO FIRST WORD OF BUFFER
  37620. BX7 X7-X7
  37621. SA7 A4 CLEAR ACTIVE WORD COUNT
  37622. SVS3 SB4 B4-B1 DECREMENT LOOP COUNTER
  37623. SA2 B4+A4 GET WORD FROM *MLST*
  37624. BX7 X2
  37625. SX2 B4
  37626. IX2 X2+X0
  37627. EWX7 X2 STORE WORD IN *NVE* BUFFER
  37628. GT B4,B1,SVS3 IF MORE ACTIVE WORDS TO MOVE
  37629. SVS4 SA2 B7+SSCW CHECK FOR *NVE* CONNECTION
  37630. SB5 X5-IDCS*10B-10B
  37631. NG B5,SVS8 IF IDLE PACKAGE
  37632. AX5 6 FORM NORMALIZED PRIORITY
  37633. MX0 -12
  37634. SVS5 ZR X2,SVS6 IF NO CONNECTIONS
  37635. BX7 -X0*X2 CHECK NEXT BYTE
  37636. BX2 X0*X2
  37637. LX7 -6
  37638. SX7 X7+LSSI-NVSI
  37639. LX2 12
  37640. NZ X7,SVS5 IF JOB NOT CONNECTED TO *NVE*
  37641. SX2 B1 SET *V3* VALIDATION BIT
  37642. LX2 18-0
  37643. SVS6 SX7 X5-MPRS/10B
  37644. LX5 8
  37645. BX6 X6+X2 ADD VALIDATION BIT
  37646. BX6 X6+X5 ADD PRIORITY
  37647. ZR X7,SVS8 IF SYSTEM CP OR STORAGE MOVE PACKAGE
  37648. NZ X5,SVS7 IF NOT MAINTENANCE JOB
  37649. SX4 1S8 SET PRIORITY OF 1
  37650. BX6 X6+X4
  37651. SVS7 SA2 B7+TFSW FORM UNIQUE ID FROM JSN AND EJT ORDINAL
  37652. AX2 48
  37653. MX7 -12
  37654. BX7 -X7*X2
  37655. BX2 X7
  37656. LX7 -36
  37657. BX6 X7+X6 ADD EJT ORDINAL
  37658. CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
  37659. TA4 X4+JSNE,EJT READ EJT
  37660. MX0 6*4
  37661. BX4 X0*X4
  37662. BX6 X4+X6 ADD JSN
  37663. SVS8 SA6 B3+/DST/D7JP WRITE *D7JP* WORD
  37664. JP B6 RETURN
  37665. CPT SPACE 4,15
  37666. ** CPT - EXTENSION FOR *NVE*.
  37667. *
  37668. * ENTRY (B3) = EXIT ADDRESS.
  37669. * (B6) = 200B IF ENTERED AT *CPT1* (*BNJ* CALL).
  37670. *
  37671. * EXIT TO /MONITOR/CPT1.
  37672. * TO /CME/CPT1 IF SECOND CPU.
  37673. * (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
  37674. * (MT+A0) = 0 IF RA+1 PROCESS AND NOT CPU SWITCH.
  37675. * (MT+A0) = -ACAD2 IF NOT RA+1 PROCESS OR IF CPU SWICH.
  37676. * (CL+CPBT+A0) RESET TO CURRENT CLOCK.
  37677. * (CL+CMST+A0) UPDATED.
  37678. *
  37679. * USES X - 0, 1, 2, 3, 5, 6, 7.
  37680. * A - 1, 3, 6, 7.
  37681. * B - 4, 6.
  37682.  
  37683.  
  37684. CPT BSS 0 ENTRY
  37685. SB6 B0+ DO NOT SET CPU SWITCH FLAG
  37686.  
  37687. * ENTRY FROM /MONITOR/*BNJ*.
  37688.  
  37689. CPT1 BSS 0 ENTRY
  37690. SX1 A0+
  37691. NZ X1,/CME/CPT1 IF SECOND CPU
  37692. SA1 CL+CMST+A0 GET MONITOR MODE PARAMETERS
  37693. SA3 MT+A0 GET MONITOR MODE ACCUMULATED TIME
  37694. RT X0,40B READ AND CLEAR PIT
  37695. RC X6 READ CLOCK
  37696. UX1,B4 X1
  37697. SB6 B4+B6 SET CPU SWITCH STATUS
  37698. PX7 B6,X6 SET FUNCTION WITH STATUS AND NEW BASE TIME
  37699. SA7 A1 UPDATE MONITOR MODE STATUS
  37700. SX7 B0 SET TO CLEAR MONITOR MODE ACCUMULATOR
  37701. ZR B6,CPT3 IF RA+1 PROCESS AND NOT CPU SWITCH
  37702. ERRNZ CCPF CODE DEPENDS ON VALUE
  37703. TX7 -ACAD2 - (EXCHANGE JUMP TIME)
  37704. ZR B4,CPT3 IF RA+1 PROCESS
  37705.  
  37706. * COMPUTE MONITOR MODE TIME SINCE LAST BASE TIME.
  37707.  
  37708. PL X3,CPT2 IF *MT* NOT PREVIOUSLY ADJUSTED BY *CPT*
  37709. SX3 B0+
  37710. CPT2 IX5 X6-X1 MONITOR MODE TIME INCREMENT
  37711. IX3 X3+X5 ADD INCREMENT TO ACCUMULATED TIME
  37712. IX3 X3-X7 ADD EXCHANGE JUMP TIME
  37713.  
  37714. * COMPUTE PROGRAM MODE CPU TIME USED.
  37715. *
  37716. * IF MONITOR MODE WAS NOT ENTERED TO PROCESS AN RA+1 CALL OR IF
  37717. * A CPU SWITCH IS PENDING, THE MONITOR MODE ACCUMULATOR FOR THE
  37718. * CPU WILL BE RESET WITH A VALUE OF *-ACAD2*. SINCE EXIT FROM
  37719. * MONITOR MODE ADDS AN INCREMENT OF *ACAD* (TWICE THE VALUE OF
  37720. * *ACAD2*) TO THE ACCUMULATOR, THE RESULT IN THIS CASE WILL BE
  37721. * TO ACCOUNT ONLY FOR THE EXCHANGE JUMP BACK TO PROGRAM MODE.
  37722. * *CPT* WILL ALREADY HAVE ACCOUNTED FOR THE EXCHANGE JUMP INTO
  37723. * MONITOR MODE.
  37724.  
  37725. CPT3 MX2 28
  37726. SA7 A3 RESET MONITOR MODE ACCUMULATOR
  37727. BX0 -X2-X0 170 MODE TIME USED
  37728. IX0 X0-X3 DEDUCT MONITOR MODE TIME
  37729. SA6 CL+CPBT+A0 RESET PROGRAM MODE BASE TIME
  37730. PL X0,/MONITOR/CPT1 IF NO UNDERFLOW ON ADJUSTMENT
  37731. SX0 B0
  37732. EQ /MONITOR/CPT1 ENTER MAIN *CPT* PROCESSOR
  37733. AVP SPACE 4,15
  37734. ** AVP - ASSIGN VIRTUAL PP.
  37735. *
  37736. * ENTRY (X6) = PP CALL.
  37737. * (B4) = -1 (PRIORITY PP REQUEST).
  37738. *
  37739. * EXIT TWO COPIES OF *1VP* ARE ASSIGNED. THESE MUST BE IN
  37740. * PARTNER PP-S. IF NO SUCH PAIR IS AVAILABLE, THEN NO
  37741. * ASSIGNMENT IS MADE.
  37742. *
  37743. * USES X - 1, 2, 3, 4, 6, 7.
  37744. * A - 1, 2, 6, 7.
  37745. * B - 3, 5.
  37746. *
  37747. * CALLS APQ.
  37748.  
  37749.  
  37750. AVP SA2 PPAL DETERMINE IF A PARTNER PAIR IS FREE
  37751. SB5 7
  37752. SX4 B1 INITIALIZE MASK
  37753. BX7 X4
  37754. LX4 45-0 FIRST BANK = PP 2
  37755. LX7 30-0 SECOND BANK = PP 22
  37756. AVP1 BX3 X4+X7
  37757. BX1 X3*X2
  37758. BX1 X1-X3
  37759. SB5 B5-B1
  37760. ZR X1,AVP3 IF PAIR IS AVAILABLE
  37761. LX4 -1 ADVANCE FIRST BANK PP
  37762. LX7 1 ADVANCE SECOND BANK PP
  37763. PL B5,AVP1 IF MORE PP-S TO CHECK
  37764. SX7 B0+
  37765. EQ /MONITOR/PPR1 SET REPLY
  37766.  
  37767. AVP3 SB3 AVP4 *APQ* RETURN ADDRESS
  37768. SA7 /MONITOR/APQC SET PP TO SELECT
  37769. BX7 X4 SAVE PARTNER PP MASK
  37770. SA7 AVPA
  37771. MX4 5 ADD CONTROL POINT TO PP CALL
  37772. LX4 40-59
  37773. SX7 B7
  37774. LX7 36-7
  37775. BX6 -X4*X6
  37776. BX6 X7+X6
  37777. SA6 AVPB SAVE PP CALL FOR SECOND ASSIGNMENT
  37778. EQ /MONITOR/APQ1.1 ASSIGN FIRST PP
  37779.  
  37780. AVP4 BX7 X7-X7
  37781. NG X1,/MONITOR/PPR1 IF LIBRARY LOCKED
  37782. BX7 X1
  37783. SA7 AVPC SAVE INPUT REGISTER ADDRESS
  37784. SA1 AVPB GET PP CALL
  37785. BX6 X1
  37786. SA2 AVPA GET SECOND PP SELECTION MASK
  37787. BX7 X2
  37788. SA7 /MONITOR/APQC
  37789. SB3 AVP5 *APQ* RETURN ADDRESS
  37790. SB4 -1
  37791. EQ /MONITOR/APQ1.1 ASSIGN SECOND PP
  37792.  
  37793. AVP5 LX1 24 POSITION SECOND *IR* ADDRESS
  37794. SA2 AVPC ADD FIRST *IR* ADDRESS
  37795. LX2 36
  37796. BX7 X1+X2
  37797. EQ /MONITOR/PPR1 STORE OUTPUT REGISTER
  37798.  
  37799.  
  37800. AVPA CON 0 SECOND PP SELECTION MASK
  37801. AVPB CON 0 PP CALL
  37802. AVPC CON 0 FIRST PP INPUT REGISTER ADDRESS
  37803. UAD SPACE 4,10
  37804. ** UAD - *UADM* EXTENSION FOR *FRAS* SUBFUNCTION.
  37805. *
  37806. * ENTRY (X0) = MASK(48).
  37807. * (X2) = 12/ FRAS, 48/ DESIRED *FRC* VALUE.
  37808. *
  37809. * EXIT (MS, ST - ST+1) UPDATED.
  37810. * (/CME/RTCA - /CME/RTCC) UPDATED.
  37811.  
  37812.  
  37813. UAD MX6 0 RELEASE *1MB* TO NOTIFY *DFT* OF REQUEST
  37814. LX0 -12
  37815. SA6 A5+
  37816. BX7 X0*X2 EXTRACT DESIRED *FRC* VALUE
  37817. BX4 X4-X4
  37818. RC X5 READ CURRENT *FRC* VALUE
  37819. IX2 X7-X5 CALCULATE *FRC* INCREMENT
  37820.  
  37821. * WAIT FOR *FRC* TO BE ADVANCED BY *DFT*.
  37822.  
  37823. UAD1 RC X3 READ CURRENT *FRC* VALUE
  37824. IX1 X3-X7
  37825. NG X1,UAD1 IF *FRC* UPDATE HAS NOT OCCURRED YET
  37826.  
  37827. * ADJUST *FRC*-BASED VALUES.
  37828.  
  37829. SA1 CL+CPBT UPDATE CPU BASE TIME(S)
  37830. IX6 X1+X2
  37831. SA3 A1+B1
  37832. SA1 CL+CMST+A0 UPDATE MONITOR MODE BASE TIME
  37833. IX7 X3+X2
  37834. SA6 A3-B1
  37835. IX6 X1+X2
  37836. SA6 A1
  37837. SA1 /CME/RTCA UPDATE *RTC* PARAMETERS IN *CME* BLOCK
  37838. SA7 A3
  37839. IX6 X1+X2
  37840. SA3 A1+B1
  37841. IX7 X3+X2
  37842. SA6 A1
  37843. SA7 A3
  37844. SA1 RTCL GET MTR-UPDATED *RTCL* IMAGE
  37845. BX6 X1
  37846. SA6 A7+B1
  37847. EQ /MONITOR/PPRX EXIT - *OR* PREVIOUSLY CLEARED
  37848.  
  37849. ENDBLK
  37850. BLOCK PROBE,(DATA GATHERING PROBE.)
  37851. SPACE 4,10
  37852. *CALL COMSPDT
  37853. ACE SPACE 4,10
  37854. ** ACE - SET ALTERNATE CPU EXCHANGE.
  37855. *
  37856. * ENTRY (B3) = EXIT ADDRESS.
  37857. * (X0) = 1 IF BIT TO BE SET.
  37858. * (X0) = 0 IF BIT TO BE CLEARED.
  37859. * (X1) = REQUEST WORD.
  37860. * (A1) = ADDRESS OF REQUEST WORD.
  37861. *
  37862. * EXIT ENTRY CONDITIONS PRESERVED.
  37863. * *TACE* TABLE UPDATED.
  37864. * EXIT TO /MONITOR/SPR.
  37865. *
  37866. * USES A - 3, 6.
  37867. * X - 3, 6.
  37868.  
  37869.  
  37870. ACE SA3 PRBP
  37871. PL X3,ACE1 IF *PROBE* TABLES INTERLOCKED
  37872. SX6 A0
  37873. IX3 X3+X6
  37874. SX6 B1+
  37875. SA3 X3+TACE INCREMENT COUNTER
  37876. IX6 X3+X6
  37877. SA6 A3
  37878. ACE1 JP /MONITOR/SPB EXIT
  37879. CIO SPACE 4,10
  37880. ** CIO - *CIO* REQUESTS.
  37881. *
  37882. * ENTRY SEE */MONITOR/CPR* ENTRY CONDITIONS.
  37883. *
  37884. * EXIT TO */MONITOR/CIO* WITH ENTRY CONDITIONS PRESERVED.
  37885. * APPROPRIATE DATA REGION ITEMS UPDATED.
  37886. *
  37887. * USES A - 2, 4, 6.
  37888. * X - 0, 2, 3, 4, 6.
  37889.  
  37890.  
  37891. CIO SA4 PRBP
  37892. PL X4,/CPUCIO/CPC IF PROBE TABLE INTERLOCKED
  37893. SX3 X5
  37894. SX1 B4
  37895. SX6 B1
  37896. IX0 X3-X1
  37897. PL X0,CIO2 IF FET ADDRESS .GE. FL
  37898. SA2 B3 GET RA
  37899. IX2 X3+X2 ABSOLUTE REQUEST ADDRESS
  37900. ERX2 X2
  37901. LX2 -2
  37902. SX0 177B INDEX MASK FOR *CIO* FUNCTION
  37903. BX2 X0*X2
  37904. BX0 X6*X2
  37905. AX2 1
  37906. ZR X0,CIO1 IF INCREMENTING UPPER COUNTER
  37907. LX6 30
  37908. CIO1 IX4 X2+X4
  37909. SA2 X4+TCIO INCREMENT COUNTER
  37910. IX6 X2+X6
  37911. SA6 A2+
  37912. CIO2 MX0 48 RESTORE EXIT CONDITIONS
  37913. SX2 B3
  37914. EQ /CPUCIO/CPC PROCESS CIO REQUEST
  37915. IOS SPACE 4,10
  37916. ** IOS - I/O STATISTICS FOR BUFFERED I/O.
  37917. *
  37918. * ENTRY (X0) = 48 BIT MASK.
  37919. * (X2) = 49 BIT MASK.
  37920. * (A5) = PP OUTPUT REGISTER ADDRESS.
  37921. *
  37922. * EXIT TO *BIO20*.
  37923. *
  37924. * USES X - 0, 1, 3, 4, 6.
  37925. * A - 3, 4, 6.
  37926. * B - 3, 4.
  37927.  
  37928.  
  37929. IOS SA3 PRBP
  37930. PL X3,/IHPFMD/BIO20 IF *PROBE* TABLE INTERLOCKED
  37931. SA3 A5 READ PP OUTPUT REGISTER
  37932. BX6 -X2*X3 EXTRACT CBT COUNT
  37933. ZR X6,/IHPFMD/BIO20 IF NO CBT COUNT
  37934. LX3 -24
  37935. SB3 47
  37936. BX1 -X0*X3 EXTRACT PUT ORDINAL
  37937. PL X3,/IHPFMD/BIO20 IF NOT CLEARING *PUT* INTERLOCK
  37938. SX4 X6-177B
  37939. NX6 X6,B4 DETERMINE *IOST* INDEX
  37940. SB3 B3-B4
  37941. SB4 59-29
  37942. NG X4,IOS1 IF CBT COUNT IN RANGE
  37943. SB3 7
  37944. IOS1 TA4 IOSP,BDT FWA OF *IOST*
  37945. SX0 B1+
  37946. LX1 PUTLS
  37947. IX4 X1+X4 FWA OF *IOST* ENTRY
  37948. SA4 X4+B3 READ *IOST* COUNTER
  37949. LX3 59-11-36
  37950. NG X3,IOS2 IF WRITE OPERATION
  37951. LX0 30
  37952. SB4 B0
  37953. IOS2 IX6 X4+X0 UPDATE *IOST* TABLE
  37954. LX4 X6,B4
  37955. NG X4,/IHPFMD/BIO20 IF COUNTER OVERFLOW
  37956. SA6 A4
  37957. EQ /IHPFMD/BIO20 RETURN
  37958. MNR SPACE 4,10
  37959. ** MNR - PROGRAM MODE MTR FUNCTIONS.
  37960. *
  37961. * ENTRY SEE */PROGRAM/MNR* EXIT CONDITIONS.
  37962. *
  37963. * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
  37964. * APPROPRIATE DATA REGION ITEMS UPDATED.
  37965. *
  37966. * USES A - 3, 6.
  37967. * X - 3, 4, 6.
  37968.  
  37969.  
  37970. MNR SA3 PRBP
  37971. SX4 B1+
  37972. PL X3,MNR1 IF PROBE TABLE INTERLOCKED
  37973. SX3 X3+TMNR
  37974. + SA3 X3+B4 *** PERFORM IN ONE WORD ***
  37975. IX6 X3+X4 *** PERFORM IN ONE WORD ***
  37976. SA6 A3+ *** PERFORM IN ONE WORD ***
  37977. MNR1 JP B6 RETURN
  37978. PMN SPACE 4,10
  37979. ** PMN - MTR FUNCTIONS.
  37980. *
  37981. * ENTRY SEE */MONITOR/PMN* EXIT CONDITIONS.
  37982. *
  37983. * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
  37984. * APPROPRIATE DATA REGION ITEMS UPDATED.
  37985. *
  37986. * USES A - 1, 4, 6.
  37987. * X - 1, 4, 6.
  37988.  
  37989.  
  37990. PMN SX6 X0+
  37991. SA4 PRBP
  37992. SX1 A0
  37993. PL X4,PMN2 IF PROBE TABLE INTERLOCKED
  37994. IX4 X6+X4
  37995. SX6 B1
  37996. ZR X1,PMN1 IF CPU 0
  37997. LX6 30
  37998. PMN1 SA1 X4+TMTR-1 INCREMENT COUNTER
  37999. IX6 X1+X6
  38000. SA6 A1
  38001. PMN2 TJP (/TRACE/PMN,TRACE,B6) EXIT
  38002. PPR SPACE 4,10
  38003. ** PPR - PPU FUNCTION REQUESTS.
  38004. *
  38005. * ENTRY SEE */MONITOR/PPR* EXIT CONDITIONS.
  38006. * (A3) = PROCESSOR CONTROL WORD ADDRESS.
  38007. *
  38008. * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
  38009. * APPROPRIATE DATA REGION ITEMS UPDATED.
  38010. *
  38011. * USES A - 4, 6.
  38012. * B - 6.
  38013. * X - 0, 4, 6.
  38014.  
  38015.  
  38016. PPR SA4 PRBP
  38017. SX0 A0+
  38018. SX6 B1
  38019. ZR X0,PPR1 IF CPU 0
  38020. LX6 30
  38021. PPR1 PL X4,PPR2 IF PROBE TABLE INTERLOCKED
  38022. SB6 X4+TPPU-TPPR
  38023. SA4 A3+B6 INCREMENT COUNTER
  38024. SB6 X3 SET PROCESSOR ADDRESS
  38025. IX6 X4+X6
  38026. SA6 A4
  38027. PPR2 TJP (/TRACE/PPR,TRACE,B6) EXIT
  38028. PRG SPACE 4,10
  38029. ** PRG - PROGRAM MODE PPU REQUESTS.
  38030. *
  38031. * ENTRY SEE */PROGRAM/PRG* EXIT CONDITIONS.
  38032. *
  38033. * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
  38034. * APPROPRIATE DATA REGION ITEMS UPDATED.
  38035. *
  38036. * USES A - 3, 7.
  38037. * X - 3, 6, 7.
  38038.  
  38039.  
  38040. PRG BX6 X3 SAVE ENTRY CONDITIONS
  38041. SA3 PRBP
  38042. SX7 B1
  38043. PL X3,PRG1 IF PROBE TABLE INTERLOCKED
  38044. SX3 X3+TPRG-CPUM
  38045. + SA3 X3+B4 *** PERFORM IN ONE WORD ***
  38046. IX7 X3+X7 *** PERFORM IN ONE WORD ***
  38047. SA7 A3+ *** PERFORM IN ONE WORD ***
  38048. PRG1 BX3 X6 RESTORE EXIT CONDITIONS
  38049. BX7 X7-X7
  38050. TJP (/TRACE/PPR,TRACE,B6) EXIT
  38051. SPL SPACE 4,10
  38052. ** SPL - SEARCH PERIPHERAL LIBRARY.
  38053. *
  38054. * ENTRY SEE */MONITOR/SPL* EXIT CONDITIONS.
  38055. *
  38056. * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
  38057. * APPROPRIATE DATA REGION ITEMS UPDATED.
  38058. *
  38059. * USES A - 2, 7.
  38060. * X - 2, 3, 4, 7.
  38061.  
  38062.  
  38063. SPL SA2 PRBP
  38064. BX3 X7 SAVE ENTRY CONDITIONS
  38065. SX7 A1
  38066. PL X2,SPL2 IF PROBE TABLE INTERLOCKED
  38067. R= A2,PLDP
  38068. AX2 36
  38069. IX7 X7-X2
  38070. SX4 B1
  38071. BX2 X4*X7
  38072. LX7 -1
  38073. ZR X2,SPL1 IF INCREMENTING UPPER COUNTER
  38074. LX4 30
  38075. SPL1 SA2 PRBP
  38076. SX2 X2+TSPL
  38077. IX2 X7+X2
  38078. SA2 X2 INCREMENT COUNTER
  38079. IX7 X4+X2
  38080. SA7 A2
  38081. SPL2 BX7 X3 RESTORE ENTRY CONDITIONS
  38082. JP B6 RETURN
  38083.  
  38084. ENDBLK
  38085. BLOCK TRACE,(TRACE/TRAP PACKAGE.)
  38086. SETFLD SPACE 4,10
  38087. ** SETFLD - SET UP FIELD VALIDATION REGISTERS.
  38088. *
  38089. * ENTRY (A1) = TRPA.
  38090. * (X1) = (TRPA).
  38091. *
  38092. * EXIT (X1) POSITIONED TO TRAP-ON-ANY-NON-ZERO-VALUE FLAG.
  38093. * (X2) = VALUE TO CHECK AGAINST, AFTER APPLYING MASK.
  38094. * (X3) = WORD ADDRESS.
  38095. * (X6) = POSITIONED MASK.
  38096. * (B5) = LOW BIT OF FIELD.
  38097. *
  38098. * USES X - 1, 2, 3, 6.
  38099. * A - 2.
  38100. * B - 4, 5.
  38101.  
  38102.  
  38103. SETFLD MACRO
  38104. LIST M
  38105. SX3 X1 GET WORD ADDRESS
  38106. LX1 59-41 FLAG TO TRAP ON ANY NONZERO VALUE
  38107. SA2 A1+B1 LOW BIT, MASK LENGTH
  38108. SB5 X2 LOW BIT
  38109. AX2 24
  38110. SB4 X2 GET MASK LENGTH - 1
  38111. MX6 1 CREATE MASK
  38112. AX6 B4
  38113. SB4 B4+B1 POSITION MASK
  38114. LX6 B4
  38115. SA2 A2+B1 GET VALUE
  38116. BX2 X6*X2 APPLY MASK TO VALUE
  38117. LIST *
  38118. ENDM
  38119. MTRP SPACE 4,10
  38120. ** *DSDI* POINTER WORDS.
  38121. *
  38122. * THESE WORDS ARE USED BY *DSDI* DIRECTIVE *TBDUMP* TO LOCATE
  38123. * THE TRACE BUFFERS AND ASSOCIATED INFORMATION IN THE TRACE
  38124. * BLOCK. IF THE ORDER OR CONTENT OF THESE WORDS IS CHANGED,
  38125. * *DSDI* MUST BE EXAMINED FOR POSSIBLE CHANGES AS WELL.
  38126.  
  38127.  
  38128. MTRP VFD 24/0,18/PMNC+PMNCL,18/PMNC *MTR* TRACE BUFFER
  38129. VFD 42/0,18/PMNA *MTR* FUNCTION LIST
  38130. VFD 24/0,18/PMND,18/PMNE ABS/CPA ADDRESS LISTS
  38131. VFD 24/0,18/PPRC+PPRCL,18/PPRC *PPU* TRACE BUFFER
  38132. VFD 42/0,18/PPRA *PPU FUNCTION LIST
  38133. TRACE SPACE 4
  38134. *CALL COMSDSL
  38135. TRP SPACE 4,10
  38136. ** TRP - TRAP ON ERROR CONDITION.
  38137. *
  38138. * ENTRY CALLED AT *MTRX*.
  38139. *
  38140. * EXIT TO */MONITOR/MTRX*+1.
  38141. *
  38142. * USES X - ALL.
  38143. * A - 1, 2, 3, 4, 6, 7.
  38144. * B - 3, 4, 5, 6, 7.
  38145.  
  38146.  
  38147. TRP SA1 SSTL
  38148. TB3 MCT
  38149. TB5 SC
  38150. LX1 59-13
  38151. SX0 B5+B5 2 * SYSTEM CP
  38152. NG X1,/MONITOR/MTRX+1 IF SYSTEM DEBUG MODE DISABLED
  38153. SA2 TRPA
  38154.  
  38155. * VALIDATE CM ALLOCATION.
  38156.  
  38157. LX2 59-44
  38158. SX7 B7 SAVE (B7)
  38159. PL X2,TRP7 IF MCT VALIDATION NOT SELECTED
  38160. SA1 SMRL
  38161. NZ X1,TRP7 IF MEMORY MANAGEMENT OPERATION OCCURRING
  38162. TB6 -200B,PCPA
  38163. SA7 TRPB
  38164. SB7 B0+
  38165. TRP1 TB4 -2,NMCT
  38166. SX1 B1+B1 INITIAL MCT OFFSET (START AT CP 1)
  38167. SX2 B0 INITIAL PREVIOUS INDEX
  38168. TRP2 MX5 12
  38169. SB4 B4-B1
  38170. ZR B4,TRP5 IF END OF MCT
  38171. SA3 B3+X1 MCT ENTRY
  38172. BX4 X5*X3 BACKWARD LINK
  38173. AX4 48-1
  38174. BX4 X4-X2
  38175. NZ X4,TRP52 IF BACKWARD LINK INCORRECT
  38176. LX5 -12
  38177. BX2 X1 NEW PREVIOUS INDEX
  38178. BX1 X5*X3 FORWARD LINK
  38179. AX1 36-1
  38180. MX7 -24
  38181. BX5 -X7*X3 HOLE(N-1)
  38182. BX3 X2
  38183. LX7 12
  38184. LX3 7-1
  38185. IX6 X2-X0
  38186. NG X6,TRP3 IF CP
  38187. LX6 7-1
  38188. SX3 B6+X6
  38189. TRP3 SA4 X3+STSW
  38190. SX3 X3+FLSW
  38191. LX4 59-53
  38192. SA3 X3+B7 CURRENT *FLSW*/*ECSW*
  38193. NG X4,TRP53 IF ACTIVITY UNDERFLOW
  38194. BX4 X1
  38195. LX4 7-1
  38196. IX6 X1-X0
  38197. NG X6,TRP4 IF CP
  38198. LX6 7-1
  38199. SX4 B6+X6
  38200. TRP4 SX4 X4+FLSW
  38201. SA4 X4+B7 NEXT *FLSW*/*ECSW*
  38202. BX6 -X7*X4 RA(N) SHIFTED LEFT 12
  38203. BX7 -X7*X3 RA(N-1) SHIFTED LEFT 12
  38204. IX6 X6-X7 RA(N) - RA(N-1) SHIFTED LEFT 12
  38205. NG X6,TRP51 IF RA-S OUT OF ORDER
  38206. LX6 -12
  38207. IX6 X6-X5 RA(N) - RA(N-1) - HOLE(N-1)
  38208. MX5 12
  38209. BX7 X5*X4 NFL(N)
  38210. LX7 -48
  38211. IX6 X6-X7 RA(N) - RA(N-1) - HOLE(N-1) - NFL(N)
  38212. MX5 -12
  38213. BX7 -X5*X3 FL(N-1)
  38214. IX6 X6-X7 SUBTOTAL - FL(N-1)
  38215. ZR X6,TRP2 IF ALL IS WELL
  38216. EQ TRP55 HANG DUE TO MISPOSITIONED HOLE
  38217.  
  38218. TRP5 TB4 1,MCT
  38219. EQ B3,B4,TRP6 IF EM ALREADY VALIDATED
  38220. SA1 ECRL
  38221. SB3 B4+
  38222. SB7 ECSW-FLSW
  38223. NZ X1,TRP1 IF EM PRESENT
  38224. TRP6 SA1 TRPB RESTORE (B7)
  38225. SB7 X1+
  38226.  
  38227. * VERIFY EJT/PCPA INTEGRITY.
  38228.  
  38229. TRP7 SA1 TRPA
  38230. TB3 1,EJTM MAXIMUM EJT ORDINAL
  38231. LX1 59-42
  38232. PL X1,TRP11 IF NOT SELECTED
  38233. MX6 -5
  38234. TX7 SC SYSTEM CONTROL POINT NUMBER
  38235. MX4 -12
  38236. TRP8 SB3 B3-B1 DECREMENT EJT INDEX
  38237. ZR B3,TRP9 IF END OF SCAN
  38238. SX1 B3
  38239. CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  38240. TA2 X2+JSNE,EJT
  38241. BX5 X4*X2
  38242. ZR X5,TRP8 IF VACANT ENTRY
  38243. LX2 -1
  38244. BX0 -X6*X2 JOB STATUS
  38245. SX5 X0-EXJS
  38246. NG X2,TRP8 IF JOB INTERLOCK SET
  38247. SA3 A2+SCHE-JSNE
  38248. LX3 -12
  38249. BX3 -X4*X3
  38250. NZ X5,TRP8 IF NOT EXECUTING JOB
  38251. IX3 X3-X7
  38252. PL X3,TRP56 IF INVALID CONTROL POINT NUMBER
  38253. EQ TRP8 CONTINUE
  38254.  
  38255. * VALIDATE PCPA-S.
  38256.  
  38257. TRP9 TB3 SC
  38258. MX4 -5
  38259. TB4 -1,NMCT
  38260. TB6 -200B,PCPA
  38261. SB5 B4-B3 NUMBER OF PCP-S
  38262. MX7 12
  38263. TRP10 ZR B5,TRP11 IF ALL PCP-S CHECKED
  38264. SX6 B5
  38265. SB5 B5-B1 DECREMENT PCP ORDINAL
  38266. LX6 7
  38267. SX6 B6+X6 PCPA ADDRESS
  38268. SA1 X6+TFSW
  38269. BX1 X7*X1 EJT ORDINAL
  38270. ZR X1,TRP10 IF VACANT PCP
  38271. LX1 -48
  38272. CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  38273. TA1 X2+JSNE,EJT
  38274. LX1 59-0
  38275. BX2 -X4*X1 JOB STATUS
  38276. NG X1,TRP10 IF JOB INTERLOCKED
  38277. SX2 X2-PCJS
  38278. NZ X2,TRP57 IF INCORRECT JOB STATUS
  38279. SA2 A1+B1
  38280. ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
  38281. LX2 12
  38282. BX2 X7*X2
  38283. LX2 -48
  38284. SX3 B3
  38285. IX2 X3-X2
  38286. PL X2,TRP57 IF INCORRECT PCP NUMBER
  38287. EQ TRP10 CONTINUE
  38288.  
  38289. * CHECK FOR DEAD JOBS.
  38290.  
  38291. TRP11 SA2 TRPA
  38292. SA1 DSSL
  38293. LX2 59-43
  38294. PL X2,TRP14 IF DEAD JOB CHECK NOT SELECTED
  38295. LX1 59-2
  38296. NG X1,TRP14 IF DEADSTART IN PROGRESS
  38297. SA1 /MONITOR/JAVA
  38298. SX6 B7
  38299. SA6 TRPB SAVE (B7)
  38300. BX6 X1
  38301. SA6 TRPC SAVE *JAVA* INSTRUCTION WORD
  38302. SA2 TRPD
  38303. SB3 TRP12 SET *JAV* NON-FAILURE EXIT ADDRESS
  38304. BX6 X2
  38305. SA6 A1 SET *JAV* FAILURE EXIT
  38306. TRP12 SB5 B5-B1
  38307. ZR B5,TRP13 IF END OF SCAN
  38308. SX1 B5
  38309. LX1 7
  38310. SB7 X1
  38311. EQ /MONITOR/JAV CHECK FOR DEAD JOB
  38312.  
  38313. TRP13 SA1 TRPB RESTORE (B7)
  38314. SA2 TRPC RESTORE *JAVA* INSTRUCTION WORD
  38315. SB7 X1
  38316. BX6 X2
  38317. SA6 /MONITOR/JAVA
  38318.  
  38319. * VALIDATE NFL.
  38320.  
  38321. TRP14 SA1 TRPA
  38322. TB3 SC
  38323. LX1 59-45
  38324. PL X1,TRP19 IF NFL VALIDATION NOT SELECTED
  38325. SB4 B0
  38326. SX7 QFBN
  38327. SB6 B0+
  38328. TRP15 SB3 B3-B1
  38329. ZR B3,TRP18 IF THROUGH WITH CP-S OR PCP-S
  38330. MX0 12
  38331. SX6 B3+B6
  38332. SA1 CMCL
  38333. BX1 X0*X1
  38334. LX1 12
  38335. BX3 X1-X6
  38336. ZR X3,TRP15 IF STORAGE MOVE IN PROGRESS
  38337. LX6 7
  38338. SX6 X6+B4 ADD BIAS FOR PCPA
  38339. SA1 X6+TFSW
  38340. SA2 X6+FLSW
  38341. BX1 X0*X1
  38342. BX4 X0*X2
  38343. ZR X1,TRP15 IF CP/PCP NOT ACTIVE
  38344. ZR X4,TRP15 IF NO NFL ASSIGNED
  38345. LX1 12
  38346. CX6 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  38347. TA1 X6+JSNE,EJT
  38348. LX1 59-6
  38349. NG X1,TRP15 IF JOB ADVANCE SET
  38350. AX2 12 COMPUTE RA
  38351. SX2 X2
  38352. LX2 6 RA
  38353. IX2 X2-X7 FWA OF QUEUED FUNCTION BUFFER
  38354. SX6 -QFBL
  38355. TRP16 SX6 X6+B1 READ NEXT ENTRY
  38356. IX4 X2-X6
  38357. ERX4 X4
  38358. ZR X4,TRP17 IF ZERO ENTRY
  38359. AX4 48 CHECK ENTRY
  38360. SX4 X4-DTKM
  38361. NZ X4,TRP58 IF NOT *DTKM*
  38362. TRP17 NG X6,TRP16 IF NOT END OF BUFFER
  38363. EQ TRP15 CHECK NEXT CP/PCP
  38364.  
  38365. TRP18 NZ B4,TRP19 IF THROUGH CHECKING PCP-S
  38366. TB4 NMCT
  38367. TB6 SC
  38368. SB3 B4-B6 NUMBER OF PCPS+1
  38369. TB4 -CPAS,PCPA PCPA BIAS
  38370. EQ TRP15 CHECK PCP-S
  38371.  
  38372. * VALIDATE CM FIELD.
  38373.  
  38374. TRP19 SA1 TRPA
  38375. BX2 X1
  38376. LX2 59-47
  38377. PL X2,TRP20 IF CM VALIDATION NOT SELECTED
  38378. SETFLD
  38379. RJ CFD CHECK FIELD
  38380. NZ X3,TRP50 IF ERROR
  38381.  
  38382. * VALIDATE CPA FIELD.
  38383.  
  38384. TRP20 SA1 TRPA
  38385. BX2 X1
  38386. LX2 59-46
  38387. PL X2,/MONITOR/MTRX+1 IF CPA VALIDATION NOT SELECTED
  38388. SETFLD
  38389. TX5 SC SET OFFSET
  38390. SB3 X3
  38391. SB4 B3
  38392. SB6 7
  38393. TRP21 SX5 X5-1
  38394. ZR X5,TRP22 IF THROUGH CHECKING CP-S OR PCP-S
  38395. LX3 X5,B6
  38396. SX3 X3+B4 ADD WORD ADDRESS AND PCPA BIAS
  38397. RJ CFD CHECK FIELD
  38398. NZ X3,TRP50 IF ERROR
  38399. EQ TRP21 CHECK NEXT CP/PCP
  38400.  
  38401. TRP22 NE B3,B4,/MONITOR/MTRX+1 IF THROUGH CHECKING PCP-S
  38402. TB4 -CPAS,PCPA SET PCPA BIAS
  38403. TX3 NMCT
  38404. TX5 SC
  38405. SB4 B4+B3 ADD WORD ADDRESS TO BIAS
  38406. IX5 X3-X5 NUMBER OF PCPS+1
  38407. EQ TRP21 CHECK PCPA-S
  38408.  
  38409.  
  38410. * TRAP CONTROL WORDS.
  38411.  
  38412. TRPA VFD 12/TRCM DSD OUTPUT REGISTER FROM *TRCM*
  38413. VFD 1/0 CM FIELD VALIDATION
  38414. VFD 1/0 CPA FIELD VALIDATION
  38415. VFD 1/0 NFL VALIDATION
  38416. VFD 1/0 MCT VALIDATION
  38417. VFD 1/0 DEAD JOB CHECK
  38418. VFD 1/0 EJT/PCPA VALIDATION
  38419. VFD 1/0 TRAP ON NONZERO VALUE FLAG (FIELD VAL.)
  38420. VFD 17/0 UNUSED
  38421. VFD 24/0 ADDRESS OF WORD TO TRAP/TRACE
  38422. VFD 30/0 UNUSED
  38423. VFD 6/0 LENGTH OF FIELD (FIELD VAL.)
  38424. VFD 18/0 UNUSED
  38425. VFD 6/0 LOW BIT OF FIELD TO CHECK (FIELD VAL.)
  38426. CON 0 VALUE TO CHECK (FIELD VAL.)
  38427.  
  38428. * MISCELLANEOUS CELLS.
  38429.  
  38430. TRPB CON 0 (B7) SAVE AREA
  38431. TRPC CON 0 *JAV* INSTRUCTION WORD SAVE AREA
  38432. TRPD EQ TRP54 *JAV* FAILURE INSTRUCTION
  38433.  
  38434.  
  38435. * DISPLAY MESSAGE AND HANG SYSTEM.
  38436.  
  38437. TRP50 SB4 MSGB FIELD ERROR
  38438. EQ TRP59 DISPLAY MESSAGE AND HANG
  38439.  
  38440. TRP51 SB4 MSGC RA-S MISORDERED
  38441. EQ TRP59 DISPLAY MESSAGE AND HANG
  38442.  
  38443. TRP52 SB4 MSGD MCT LINKAGE ERROR
  38444. EQ TRP59 DISPLAY MESSAGE AND HANG
  38445.  
  38446. TRP53 SB4 MSGE ACTIVITY UNDERFLOW
  38447. EQ TRP59 DISPLAY MESSAGE AND HANG
  38448.  
  38449. TRP54 SB4 MSGF DEAD JOB FOUND
  38450. EQ TRP59 DISPLAY MESSAGE AND HANG
  38451.  
  38452. TRP55 SB4 MSGG MISPOSITIONED HOLE
  38453. EQ TRP59 DISPLAY MESSAGE AND HANG
  38454.  
  38455. TRP56 SB4 MSGH EJT ERROR
  38456. EQ TRP59 DISPLAY MESSAGE AND HANG
  38457.  
  38458. TRP57 SB4 MSGI PCPA ERROR
  38459. EQ TRP59 DISPLAY MESSAGE AND HANG
  38460.  
  38461. TRP58 SB4 MSGJ NFL ERROR
  38462. EQ TRP59 DISPLAY MESSAGE AND HANG
  38463.  
  38464. TRP59 RJ /MONITOR/SVR SAVE ALL REGISTERS
  38465. RJ /CPB/RAR RESTORE ALL REGISTERS
  38466. SA1 B4
  38467. SA2 MSGA
  38468. BX6 X2
  38469. TB5 MS2W,SCA
  38470. SA6 B5
  38471. BX7 X1
  38472. SA7 B5+B1
  38473. SA1 B4+B1
  38474. BX6 X1
  38475. SA6 A7+B1
  38476. + EQ * HANG
  38477.  
  38478.  
  38479. MSGA DATA 10LTRAP HIT -
  38480. MSGB DATA C*FIELD ERROR*
  38481. MSGC DATA C*RA-S MISORDERED*
  38482. MSGD DATA C*MCT LINKAGE ERROR*
  38483. MSGE DATA C*ACTIVITY UNDERFLOW*
  38484. MSGF DATA C*DEAD JOB*
  38485. MSGG DATA C*MISPOSITIONED HOLE*
  38486. MSGH DATA C*EJT ERROR*
  38487. MSGI DATA C*PCPA ERROR*
  38488. MSGJ DATA C*NFL QFBN ERROR*
  38489. CFD SPACE 4,10
  38490. ** CFD - CHECK FIELD.
  38491. *
  38492. * ENTRY (X1) .LT. 0 IF TRAPPING ON ANY NONZERO VALUE.
  38493. * (X2) = VALUE TO CHECK AGAINST.
  38494. * = 0 IF TRAPPING ON ANY NONZERO VALUE.
  38495. * (X3) = WORD ADDRESS.
  38496. * (X6) = MASK.
  38497. * (B5) = LOW BIT POSITION OF FIELD.
  38498. *
  38499. * EXIT (X3) = NON-ZERO IF FIELD ERROR.
  38500. *
  38501. * USES X - 3.
  38502. * A - 3.
  38503.  
  38504.  
  38505. CFD SUBR ENTRY/EXIT
  38506. ERX3 X3 GET WORD
  38507. AX3 B5
  38508. BX3 X6*X3 ISOLATE FIELD CONTENTS
  38509. BX3 X2-X3 COMPARE
  38510. NG X1,CFDX IF TRAPPING ON ANY NONZERO VALUE
  38511. ZR X3,CFD1 IF ERROR IN FIELD
  38512. SX3 -1
  38513. CFD1 SX3 X3+1
  38514. EQ CFDX RETURN
  38515. PMN SPACE 4,10
  38516. ** PMN - MTR FUNCTIONS.
  38517. *
  38518. * ENTRY SEE */MONITOR/PMN* EXIT CONDITIONS.
  38519. *
  38520. * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
  38521. *
  38522. * USES X - 1, 3, 4, 6, 7.
  38523. * A - 1, 3, 4, 6, 7.
  38524.  
  38525.  
  38526. PMN SA1 SSTL
  38527. SX6 X0
  38528. LX1 59-13
  38529. NG X1,/MONITOR/RB6 IF SYSTEM DEBUG MODE DISABLED
  38530. SA4 PMNA CHECK IF THIS FUNCTION TO BE TRACED
  38531. NG X4,PMN2 IF ALL FUNCTIONS TO BE TRACED
  38532. PMN1 ZR X4,/MONITOR/RB6 IF TRACE NOT SELECTED FOR THIS ONE
  38533. MX1 -12
  38534. BX1 -X1*X4
  38535. BX1 X1-X6
  38536. AX4 12
  38537. NZ X1,PMN1 IF NOT A MATCH
  38538.  
  38539. * CREATE TRACE BUFFER ENTRY.
  38540.  
  38541. PMN2 SX1 X6-ARTF
  38542. ZR X1,/MONITOR/RB6 IF *ARTF* FUNCTION
  38543. SA1 PMNB GET *IN* POINTER
  38544. SA4 PDTL SAVE TIME STAMP ENTRY
  38545. MX3 -24
  38546. BX3 -X3*X4
  38547. SA4 =3L***
  38548. LX3 18
  38549. BX6 X4+X3
  38550. SA4 RTCL
  38551. MX3 -18
  38552. BX3 -X3*X4
  38553. BX6 X6+X3
  38554. SA6 X1
  38555. BX7 X0 SAVE REQUEST
  38556. SA4 PMND GET LIST OF ABSOLUTE ADDRESSES TO SAVE
  38557. SA7 A6+B1
  38558. SX3 X4
  38559. ERX3 X3
  38560. BX6 X3
  38561. SA6 A7+B1 SAVE FIRST WORD
  38562. AX4 24
  38563. ERX4 X4
  38564. BX7 X4
  38565. SA7 A6+B1 SAVE SECOND WORD
  38566. TA3 -1,MCT
  38567. SX1 B0+
  38568. PMN3 SA3 A3+B1 GET NEXT MCT ENTRY
  38569. BX6 X3
  38570. SA6 A7+1
  38571. SA3 A3+1
  38572. BX7 X3
  38573. SA7 A6+B1
  38574. SX7 X1+
  38575. TX4 1,SC
  38576. IX6 X1-X4
  38577. LX7 7
  38578. NG X6,PMN4 IF NOT A PCP
  38579. LX6 7
  38580. TX7 X6,PCPA
  38581. PMN4 SA4 PMNE GET ADDRESSES OF CPA WORDS TO STORE
  38582. LX4 -24
  38583. SX3 X4 GET SECOND ADDRESS
  38584. AX4 36 GET FIRST ADDRESS
  38585. IX4 X4+X7
  38586. SA4 X4
  38587. BX6 X4
  38588. SA6 A7+B1 SAVE FIRST CPA WORD
  38589. IX4 X3+X7
  38590. SA4 X4
  38591. BX6 X4
  38592. SA6 A6+B1 SAVE SECOND CPA WORD
  38593. SA4 X7+TFSW
  38594. BX6 X4
  38595. AX4 48
  38596. SA6 A6+B1 STORE *TFSW* IN TRACE BUFFER ENTRY
  38597. CX7 X4,EJT CONVERT EJT ORDINAL TO OFFSET
  38598. TA4 X7+JSNE,EJT
  38599. BX7 X4
  38600. SA7 A6+B1 STORE *JSNE* IN TRACE BUFFER ENTRY
  38601. SX1 X1+B1
  38602. TX4 NMCT
  38603. IX4 X1-X4
  38604. NG X4,PMN3 IF NOT END OF MCT
  38605. SX1 PMNC+PMNCL
  38606. SX6 A7+B1
  38607. TX4 NMCT
  38608. LX7 X4,B1 *NMCT* * 2
  38609. LX4 2 *NMCT* * 4
  38610. IX4 X4+X7 *NMCT* * 6
  38611. SX7 B0+
  38612. IX4 X6+X4
  38613. SX4 X4+TBUFE
  38614. IX4 X4-X1
  38615. NG X4,PMN5 IF NOT AT TRACE BUFFER LIMIT
  38616. SX6 PMNC
  38617. PMN5 SA6 A1 UPDATE *IN* POINTER
  38618. BX7 X7-X7 RESTORE (X7)
  38619. JP B6 EXIT TO FUNCTION PROCESSOR
  38620.  
  38621.  
  38622. PMNA CON 0 MTR FUNCTION TRACE LIST
  38623.  
  38624. PMNB CON PMNC TRACE BUFFER *IN* POINTER
  38625.  
  38626. PMNC BSS 0 TRACE BUFFER
  38627.  
  38628. TBUF DUP 10
  38629.  
  38630. LOC 0
  38631.  
  38632. CON 0 TIME STAMP
  38633. CON 0 (X0)
  38634. CON 0 VARIABLE - SEE *PMND*
  38635. CON 0 VARIABLE - SEE *PMND*
  38636.  
  38637. TBUFE BSS 0
  38638. LOC *O
  38639.  
  38640. MCT DUP NCPS+2+20B ALLOW MAXIMUM CP-S AND 20B PCP-S
  38641.  
  38642. CON 0,0 MCT
  38643. CON 0 VARIABLE - SEE *PMNE*
  38644. CON 0 VARIABLE - SEE *PMNE*
  38645. CON 0 *TFSW*
  38646. CON 0 *JSNE*
  38647.  
  38648. MCT ENDD
  38649. SPACE 4
  38650. ERRNG PMNCL-6*NCPS-6*NPPS-4-TBUFE BUFFER TOO SMALL
  38651.  
  38652. TBUF ENDD
  38653.  
  38654. PMNCL EQU *-PMNC TRACE BUFFER TABLE LENGTH
  38655.  
  38656. PMND VFD 12/0,24/SMRL,24/CMCL ADDRESSES OF ABS WORDS TO SAVE
  38657. PMNE VFD 12/0,24/STSW,24/FLSW ADDRESSES OF CPA WORDS TO SAVE
  38658. PPR SPACE 4,10
  38659. ** PPR - PP FUNCTION REQUESTS.
  38660. *
  38661. * ENTRY SEE */MONITOR/PPR* EXIT CONDITIONS.
  38662. *
  38663. * EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
  38664. *
  38665. * USES X - 0, 2, 4, 6, 7.
  38666. * A - 2, 4, 6, 7.
  38667.  
  38668.  
  38669. PPR SA4 SSTL
  38670. BX0 X5
  38671. LX4 59-13
  38672. NG X4,PPR4 IF SYSTEM DEBUG MODE DISABLED
  38673. SA4 PPRA CHECK IF THIS FUNCTION TO BE TRACED
  38674. NG X4,PPR2 IF ALL FUNCTIONS TO BE TRACED
  38675. AX0 48
  38676. PPR1 ZR X4,PPR4 IF THIS FUNCTION NOT TO BE TRACED
  38677. MX6 -12
  38678. BX6 -X6*X4
  38679. BX6 X6-X0
  38680. AX4 12
  38681. NZ X6,PPR1 IF NOT A MATCH
  38682. PPR2 SA2 PPRB GET *IN* POINTER
  38683. SA4 PDTL GET TIME STAMP
  38684. MX7 -24
  38685. BX7 -X7*X4
  38686. SA4 =3L***
  38687. LX7 18
  38688. BX6 X4+X7
  38689. SA4 RTCL
  38690. MX7 -18
  38691. BX7 -X7*X4
  38692. BX6 X6+X7
  38693. SA6 X2
  38694. SA2 A5-B1 PP INPUT REGISTER
  38695. BX7 X2
  38696. SA7 A6+B1
  38697. BX6 X5 PP OUTPUT REGISTER
  38698. SA2 A5+B1 MB + 0
  38699. BX7 X2
  38700. SA6 A7+B1
  38701. SA4 A2+B1 MB + 1
  38702. SA7 A6+B1
  38703. BX6 X4
  38704. SA2 A4+B1 MB + 2
  38705. SA6 A7+B1
  38706. BX7 X2
  38707. SA4 A2+B1 MB + 3
  38708. SA7 A6+B1
  38709. BX6 X4
  38710. SA2 A4+B1 MB + 4
  38711. SA6 A7+B1
  38712. BX7 X2
  38713. SA4 A2+B1 MB + 5
  38714. SA7 A6+B1
  38715. BX6 X4
  38716. SA6 A7+B1
  38717. SA2 PMND GET LIST OF ABSOLUTE ADDRESSES TO SAVE
  38718. SX4 X2 GET FIRST ADDRESS
  38719. AX2 24 GET SECOND ADDRESS
  38720. ERX4 X4
  38721. ERX2 X2
  38722. BX7 X4
  38723. BX6 X2
  38724. SA7 A6+B1
  38725. SA6 A7+B1
  38726. SX4 PPRC+PPRCL
  38727. SX6 A6+B1
  38728. IX4 X6-X4
  38729. SA2 A5-1
  38730. NG X4,PPR3 IF NOT AT TRACE BUFFER LIMIT
  38731. SX6 PPRC
  38732. PPR3 SA6 PPRB UPDATE *IN* POINTER
  38733. BX7 X7-X7 RESET (X7)
  38734. LX2 -36+7 RESET (X2)
  38735. PPR4 SX4 7600B RESTORE (X4)
  38736. JP B6 EXIT TO FUNCTION PROCESSOR
  38737.  
  38738.  
  38739. PPRA CON 0 PPU FUNCTION TRACE LIST
  38740.  
  38741. PPRB CON PPRC TRACE BUFFER *IN* POINTER
  38742.  
  38743. PPRC BSS 0 TRACE BUFFER
  38744.  
  38745. TBUF DUP 20D
  38746.  
  38747. CON 0 TIME STAMP
  38748. CON 0 PP INPUT REGISTER
  38749. CON 0 PP OUTPUT REGISTER
  38750. CON 0,0,0,0,0,0 PP MESSAGE BUFFER
  38751. CON 0 VARIABLE - SEE *PMND*
  38752. CON 0 VARIABLE - SEE *PMND*
  38753.  
  38754. TBUF ENDD
  38755.  
  38756. PPRCL EQU *-PPRC TRACE BUFFER LENGTH
  38757. TRC SPACE 4,10
  38758. ** TRC - PROCESS TRAP/TRACE REQUEST.
  38759. *
  38760. * ENTRY SEE */PPR/TRCM*.
  38761. *
  38762. * EXIT TPRA/PPRA/PMNA/PMND/PMNE SET UP.
  38763. *
  38764. * USES X - 2, 3, 5, 6.
  38765. * A - 3, 6.
  38766.  
  38767. TRC BSS 0 ENTRY
  38768. LX5 0-37
  38769. SA3 A5+B1 GET MB+0
  38770. MX2 -4
  38771. BX2 -X2*X5
  38772. ZR X2,TRC1 IF NOT *TRACE,XXX*
  38773. BX6 X3
  38774. AX2 1
  38775. SA3 X2+TRCA GET LIST POINTER FOR *TRACE* REQUESTS
  38776. SA6 X3+
  38777. EQ TRC2 RETURN
  38778.  
  38779. TRC1 BX6 X1
  38780. SA6 TRPA SAVE *DSD* OR
  38781. BX6 X3
  38782. SA6 A6+B1 SAVE MB+0
  38783. SA3 A3+B1
  38784. BX6 X3
  38785. SA6 A6+B1 SAVE MB+1
  38786. TRC2 JP /MONITOR/PPR1 EXIT
  38787.  
  38788.  
  38789. TRCA CON PMNE *TRACE,SET,CPA* ADDRESS LIST
  38790. CON PMND *TRACE,SET,ABS* ADDRESS LIST
  38791. CON PPRA *TRACE,PPU* FUNCTION LIST
  38792. CON 0 (UNUSED)
  38793. CON PMNA *TRACE,MTR* FUNCTION LIST
  38794.  
  38795. ENDBLK
  38796. BLOCK CPB,(CPUMTR BREAKPOINT PACKAGE)
  38797. BKP SPACE 4,10
  38798. ** BKP - *CPUMTR* BREAKPOINT.
  38799. *
  38800. * THE DSD COMMAND *CPB,BKP,/B/N* IS USED TO SET A BREAKPOINT.
  38801. * *DSD* SAVES THE WORD AT THE INDICATED ADDRESS IN THE BREAK-
  38802. * POINT TABLE AND REPLACES IT WITH A *RJ BKP*. WHEN THE
  38803. * SPECIFIED LOCATION IS HIT, THE *RJ* TAKES THE CPU TO THIS
  38804. * ROUTINE, WHERE ALL REGISTERS ARE STORED IN THE EXCHANGE
  38805. * PACKAGE DISPLAY AREA. *CPUMTR* THEN LOOPS, WAITING FOR
  38806. * /CPB/CPFG TO BECOME ZERO. THE *DSD* COMMAND *CPB,GO.*
  38807. * ZEROES THIS WORD, ALLOWING *CPUMTR* TO RESTORE ALL
  38808. * REGISTERS AND CONTINUE EXECUTION.
  38809. *
  38810. * THIS ROUTINE IS VALID IN PROGRAM AND MONITOR MODE.
  38811. *
  38812. * ENTRY (CALLED ON *CPUMTR* BREAKPOINT).
  38813. *
  38814. * EXIT (ALL REGISTERS RESTORED).
  38815.  
  38816.  
  38817. BKP1 SA1 /MONITOR/BXP
  38818. SA2 CHTP CHECK *DSD* ACTIVE
  38819. LX6 18+18
  38820. BX7 X6+X1 INSERT *P* INTO EXCHANGE PACKAGE
  38821. SX6 B1
  38822. SA7 A1
  38823. AX2 12
  38824. SA3 X2+B1 FETCH DISPLAY CHANNEL STATUS
  38825. MX2 -6
  38826. AX3 12
  38827. BX3 -X2*X3
  38828. IX3 X3-X6
  38829. NZ X3,BKP3 IF CHANNEL NOT RESERVED TO *DSD*
  38830. SA6 /MONITOR/BXP+CPFG
  38831. BKP2 SA3 A3 CHECK *DSD* ACTIVE
  38832. AX3 12
  38833. SA1 /MONITOR/BXP+CPFG CHECK BREAKPOINT FLAG
  38834. BX3 -X2*X3
  38835. BX1 X3-X1
  38836. ZR X1,BKP2 IF FLAG NOT CLEARED AND *DSD* HAS CHANNEL
  38837. SA2 /MONITOR/BXP
  38838. SA3 BKPB (NO / NO / EQ ** )
  38839. SX6 0
  38840. TA6 MS2W,SCA CLEAR MESSAGE
  38841. AX2 36
  38842. BX6 X2+X3 CONSTRUCT RETURN ADDRESS
  38843. SA6 BKP
  38844. BKP3 RJ RAR RELOAD ALL REGISTERS
  38845.  
  38846. BKP PS ENTRY/EXIT
  38847. RJ /MONITOR/SVR SAVE ALL REGISTERS
  38848. SA1 =C$CPUMTR BREAKPOINT HIT$
  38849. SA2 A1+B1
  38850. SA3 A2+B1
  38851. BX6 X1
  38852. BX7 X2
  38853. SA2 BKP GET RETURN ADDRESS
  38854. SA1 /MONITOR/BXP+CPBA BREAKPOINT ADDRESS
  38855. TA6 MS2W,SCA
  38856. BX6 X3
  38857. SA7 A6+B1
  38858. SA6 A7+B1
  38859. AX2 30
  38860. SX6 X2-1 RETURN ADDRESS - 1
  38861. BX7 X6-X1 CHECK FOR SAME ADDRESS
  38862. SX6 X6+B1
  38863. NZ X7,BKP1 IF NOT AT BREAKPOINT ADDRESS
  38864. SA2 /MONITOR/BXP+CPBW
  38865. SA7 A2 CLEAR BREAKPOINT WORD
  38866. SA7 A1 ZERO BREAKPOINT ADDRESS
  38867. SX6 X6-1
  38868. BX7 X2 RESET BREAKPOINT WORD
  38869. SA7 X6
  38870. EQ BKP1 CHECK *DSD* ACTIVE
  38871.  
  38872.  
  38873. BKPB NO PROTOTYPE RETURN INSTRUCTION
  38874. NO
  38875. EQ ** (RETURN ADDRESS INSERTED HERE)
  38876. RAR SPACE 4,10
  38877. ** RAR - RELOAD ALL REGISTERS.
  38878. *
  38879. * ENTRY REGISTER DATA AT */MONITOR/BXP*.
  38880. *
  38881. * EXIT ALL REGISTERS RELOADED.
  38882.  
  38883.  
  38884. RAR PS ENTRY/EXIT
  38885. SB7 /MONITOR/BXP
  38886. SB1 1 SET REGISTER ARRAY FOR *B0* - *B7*, *A0*
  38887. SB4 3
  38888. MX0 42
  38889. SA3 B7 FETCH *A0*
  38890. AX3 18
  38891. SA2 B7+7
  38892. RAR1 SA1 B4+RARB GET RESET INSTRUCTION
  38893. BX2 -X0*X2
  38894. BX3 -X0*X3
  38895. IX6 X2+X1 *B7*/*B5*/*B3*/*B1* TO RESET INSTRUCTION
  38896. SB2 B2-2
  38897. LX6 30
  38898. IX6 X6+X3 *AO*/*B6*/*B4*/*B2* TO RESET INSTRUCTION
  38899. SA6 B4+RARA STORE RESET INSTRUCTION
  38900. SB4 B4-B1
  38901. SA3 A2-B1 FETCH *B6*/*B4*/*B2*
  38902. SA2 A3-B1 FETCH *B5*/*B3*/*B1*
  38903. PL B4,RAR1 IF MORE TO GO
  38904. SA1 B7+7 *A7*
  38905. AX1 18
  38906. SA2 X1 OLD VALUE AT *A7*
  38907. BX7 X2
  38908. SA3 A1-B1 *A6*
  38909. AX3 18
  38910. SA4 X3 OLD VALUE AT *A6*
  38911. LX6 X4
  38912. SA7 X1+777777B RESTORE *A7*
  38913. SA6 X3+777777B RESTORE *A6*
  38914. SA1 B7+17B *X7*
  38915. SA2 A1-B1
  38916. BX7 X1 RESTORE *X7*
  38917. LX6 X2 RESTORE *X6*
  38918. SA3 A3-B1 *A5*
  38919. SA1 A2-B1 *X5*
  38920. AX3 18
  38921. SA5 X3+777777B RESTORE *A5*
  38922. SA3 A3-B1 *A4*
  38923. SA2 A1-B1 *X4*
  38924. AX3 18
  38925. BX5 X1 RESTORE *X5*
  38926. SA4 X3+777777B RESTORE *A4*
  38927. SA3 A3-B1 *A3*
  38928. SA1 A2-B1 *X3*
  38929. BX4 X2 RESTORE *X4*
  38930. SA2 A3-B1 *A2*
  38931. AX2 18
  38932. AX3 18
  38933. SA3 X3+777777B RESTORE *A3*
  38934. SA2 X2+777777B RESTORE *A2*
  38935. BX3 X1 RESTORE *X3*
  38936. SA1 A1-B1 *X2*
  38937. BX2 X1 RESTORE *X2*
  38938. SA1 A1-B1 *X1*
  38939. UX0 B1,X1 START UNPACKING *X1*
  38940. LX0 11
  38941. UX1 B2,X0 CONTINUE UNPACK
  38942. LX1 11
  38943. UX0 B3,X1
  38944. LX0 11
  38945. UX1 B4,X0
  38946. MX0 60
  38947. SA0 X0+777777B -0 TO *A0*
  38948. LX1 11
  38949. UX0 B5,X1
  38950. SA1 A1-1 *X0*
  38951. LX0 11
  38952. SB7 X0+777777B SIGN OF *X1* TO *B7*
  38953. UX0 B6,X0 COMPLETE UNPACK
  38954. BX0 X1 RESTORE *X0*
  38955. NO
  38956. SA1 A1-7 *A1*
  38957. AX1 18
  38958. SA1 X1+777777B RESTORE *A1*
  38959. SX1 B7-B0 RESTORE SIGN OF *X1*
  38960. PX1 B6,X1 START REPACKING *X1*
  38961. AX1 11
  38962. PX1 B5,X1
  38963. AX1 11
  38964. PX1 B4,X1
  38965. AX1 11
  38966. PX1 B3,X1
  38967. AX1 11
  38968. PX1 B2,X1
  38969. AX1 11
  38970. PX1 B1,X1 COMPLETE RESTORATION OF *X1*
  38971. RARA DATA 0,0,0,0
  38972. EQ RAR RETURN
  38973.  
  38974.  
  38975. RARB SB2 A0+0 RESET INSTRUCTIONS
  38976. SB1 A0+0
  38977. SB4 A0+0
  38978. SB3 A0+0
  38979. SB6 A0+0
  38980. SB5 A0+0
  38981. SA0 A0+0
  38982. SB7 A0+0
  38983. SPACE 4,10
  38984. ENDBLK
  38985. BLOCK SCP,(SYSTEM CONTROL POINT FACILITY.),MONITOR
  38986. TITLE SCP MAIN ROUTINES.
  38987. SSC SPACE 4,10
  38988.  
  38989. *** *SSC*.
  38990. * A SUBSYSTEM CALL FROM A USER CONTROL POINT (UCP) WHICH
  38991. * USES THE SYSTEM CONTROL POINT FACILITY. THIS UCP CALL IS SENT
  38992. * TO THE APPROPIATE SUBSYSTEM DETERMINED BY THE SUBSYSTEM
  38993. * IDENTIFICATION (SID). THE SUBSYSTEM IS CHECKED TO SEE IF
  38994. * IT HAS ATTAINED *SYSTEM CONTROL POINT* (SCP) STATUS, THAT IS
  38995. * THE SUBSYSTEM IDENTIFICATION WORD (SSIW) IS INITIALIZED. IF
  38996. * NOT THE *SUBSYSTEM NOT PRESENT* STATUS IS RETURNED. ALSO,
  38997. * THE SUBSYSTEM RECEIVING BUFFER (SSCR) IS EXAMINED TO SEE
  38998. * WHETHER OR NOT THE SUBSYSTEM IS READY TO RECEIVE REQUESTS.
  38999. * IF UNABLE TO THE *SUBSYSTEM BUSY* STATUS IS RETURNED.
  39000. *
  39001. *T 18/ *SSC*,1/,1/R,4/,18/ SID,18/ ADDR
  39002. *
  39003. * ADDR = ADDRESS OF A PARAMETER BLOCK.
  39004. * R = 1 IF AUTO-RECALL SELECTED.
  39005. * SID = SUBSYSTEM IDENTIFICATION.
  39006. * IF ZERO, SCP IS READY TO ACCEPT REQUESTS
  39007. * FROM UCPS.
  39008. * IF NONZERO, *ADDR* IS THE FIRST WORD OF A BLOCK
  39009. * OF DATA TO BE PROCESSED BY THE SCP.
  39010. *
  39011. *T ADDR 24/ RSUB,12/ RINS,6/WCNT,4/RCDC,2/RT,11/ ES,1/C
  39012. *T ADDR+1 60/ SUBSYSTEM SPECIFIED PARAMETERS
  39013. *T ADDR+N 60/ LAST WORD OF PARAMETER BLOCK
  39014. *
  39015. * C = 1, WHEN REQUEST HAS BEEN COMPLETED.
  39016. * ES = ERROR AND STATUS INFORMATION -
  39017. *
  39018. * BIT DESCRIPTION
  39019. *
  39020. * 1 0 = SUBSYSTEM PRESENT.
  39021. * 1 = SUBSYSTEM NOT RUNNING.
  39022. * 2 0 = SUBSYSTEM ACCEPTED REQUEST.
  39023. * 1 = SUBSYSTEM TOO BUSY TO ACCEPT REQUEST.
  39024. * 3 0 = SUBSYSTEM IS DEFINED.
  39025. * 1 = SUBSYSTEM IS UNDEFINED.
  39026. * 4 - 5 RESERVED FOR CDC.
  39027. * 6 - 11 OTHER ERRORS -
  39028. * 00 = NO OTHER ERROR.
  39029. * 01-17 = RESERVED FOR CDC SYSTEM ERRORS.
  39030. * 20-67 = RESERVED FOR CDC SUBSYSTEM ERRORS.
  39031. * 70-77 = RESERVED FOR INSTALLATIONS.
  39032. *
  39033. * RT = STATUS RETURN DIRECTIVE -
  39034. *
  39035. * BIT DESCRIPTION
  39036. *
  39037. * 12 0 = IF SUBSYSTEM BUSY, HALT PROGRAM UNTIL
  39038. * REQUEST CAN BE POSTED TO SUBSYSTEM.
  39039. * 1 = IF SUBSYSTEM BUSY, SET BIT 2 IN ES AND
  39040. * ALLOW PROGRAM TO CONTINUE.
  39041. * 13 0 = ABORT PROGRAM ON ALL ERRORS.
  39042. * 1 = ABORT PROGRAM ONLY ON FATAL ERRORS.
  39043. * RCDC = RESERVED FOR CDC.
  39044. * WCNT = WORD COUNT - 1 OF PARAMETER BLOCK.
  39045. * RINS = RESERVED FOR INSTALLATION.
  39046. * RSUB = RESERVED FOR SUBSYSTEM.
  39047.  
  39048.  
  39049. SSC SX7 B0+ CLEAR COMMUNICATION BUFFER ADDRESS WORD
  39050. SA7 APQA
  39051. SA7 SSFG CLEAR *STSW* STATUS
  39052. SA7 SSTA CLEAR FST ADDRESS FOR *SST* CALLS
  39053. SX6 X4-3RSSF
  39054. SX7 X4-3RSST
  39055. ZR X6,SSF IF *SSF*
  39056. SX4 X4-3RSSC
  39057. ZR X7,SST IF *SST*
  39058. NZ X4,APJ IF NOT *SSC*
  39059.  
  39060. * CHECK CALL ARGUMENTS.
  39061.  
  39062. SB5 X5 CHECK ADDR WITHIN RANGE
  39063. LX5 -18 EXTRACT SUBSYSTEM ID
  39064. LE B5,B1,CPE IF ADDR .LE. 1
  39065. SB4 B4-B5
  39066. SX7 -B4
  39067. LE B4,B1,CPE IF ADDR+1 .GE. FL
  39068. SX6 B5 CHECK COMPLETE BIT
  39069. SA3 B3
  39070. IX4 X3+X6
  39071. ERX3 X4
  39072. BX6 X0*X3 CLEAR ERROR STATUS FIELD
  39073. LX3 -1
  39074. NG X3,CPE IF COMPLETE BIT ALREADY SET
  39075. EWX6 X4
  39076. SX2 X5 SET SSID
  39077. SA4 B7+SSCW SUBSYSTEM CONTROL WORD
  39078. ZR X2,SSC11 IF SPECIAL SUBSYSTEM INITIALIZATION CALL
  39079. SB4 SSC1 RETURN ADDRESS FOR *CSC*
  39080. BX3 X4
  39081. EQ CSC CHECK SUBSYSTEM CONNECTION
  39082.  
  39083. SSC1 SX1 X5
  39084. PX5 X1,B6 SAVE SHIFT COUNT AND SSID
  39085. SA2 B7+AACW CHECK VALIDATION OF CP AS UCP
  39086. SX6 EC01 * TOO MANY SCP CONNECTIONS.*
  39087. LX6 6
  39088. SX6 X6+B1 SET COMPLETION BIT
  39089. ZR B6,SSC3.1 IF REQUEST TO 6TH SUBSYSTEM (*SSCW* FULL)
  39090. LX2 59-11
  39091. MX3 -3
  39092. LX4 B6 POSITION *SSCW*
  39093. BX6 -X3*X4 NUMBER OF REQUESTS
  39094. SX6 X6-MAXR
  39095. SB3 SSC4 RETURN ADDRESS
  39096. ZR X6,SSC10 IF MAXIMUM NUMBER OF REQUESTS
  39097. NG X2,RSC IF VALIDATED
  39098. SA2 B7+SEPW CHECK FOR *SSJ=* ENTRY POINT
  39099. LX2 59-50
  39100. NG X2,RSC IF *SSJ=* ENTRY POINT
  39101.  
  39102. * ABORT UNAUTHORIZED UCP WITH NO EXIT OR REPRIEVE PROCESSING.
  39103. * *1MA* CALLED TO ISSUE *ILLEGAL USER ACCESS* ERROR MESSAGE
  39104. * AND SET *SYET* ERROR FLAG.
  39105.  
  39106. SSC2 MX0 1 FORCE UCP INTO RECALL
  39107. SA2 RA1 RA+1 ADDRESS
  39108. ERX5 X2
  39109. LX0 40-59
  39110. BX6 X5+X0
  39111. EWX6 X2
  39112. LX0 18-59-40+59 SET *1MA* MESSAGE INDEX
  39113. SX2 B1+B1 SET *1MA* FUNCTION CODE
  39114. SX5 B7 SET UCP CP ADDRESS
  39115. EQ SSC15 CALL *1MA* TO ISSUE MESSAGE AND SET ERROR
  39116.  
  39117. * PROCESS SUBSYSTEM NOT PRESENT.
  39118.  
  39119. SSC3 SX6 ES1+1 * SUBSYSTEM NOT PRESENT.*
  39120. SSC3.1 SA1 RA RA OF USER
  39121. SX3 B5 PARAMETER ADDRESS
  39122. IX3 X3+X1 ABSOLUTE ADDRESS
  39123. ERX1 X3 SET ERROR STATUS AND COMPLETION BIT
  39124. BX6 X6+X1 MERGE ERROR STATUS
  39125. LX1 59-13 CHECK ABORT DESIRED
  39126. BX7 X7-X7
  39127. EWX6 X3
  39128. PL X1,CPE IF ABORT
  39129. EQ MTRP EXIT TO STORE OUTPUT REGISTER
  39130.  
  39131. * RETURN FROM *RSC* WITH -
  39132. *
  39133. * (A2) = SUBSYSTEM *STSW* WORD IN CP AREA.
  39134. * (B5) = RELATIVE ADDRESS OF USER PARAMETER AREA.
  39135. * (X0) = -7777B.
  39136. * (X3) = SUBSYSTEM RA.
  39137. * (X5) = SHIFT COUNT AND SUBSYSTEM IDENTIFICATION.
  39138. * (X6) = SUBSYSTEM FL.
  39139. * (X7) = -(NUMBER OF WORDS ALLOWED FOR PARAMETER AREA.)
  39140. *
  39141. * *RSC* ERROR EXIT ADDRESSES -
  39142.  
  39143. + VFD 12/SSC3-SSC4,18/SSC12,12/SSC10-SSC4,18/SSC10
  39144.  
  39145. SSC4 SX4 SSIW CHECK SUBSYSTEM IDENTIFICATION WORD
  39146. IX4 X4+X3
  39147. ERX4 X4
  39148. BX4 X4-X5
  39149. SX1 X4
  39150. NZ X1,SSC3 IF SUBSYSTEM NOT INITIALIZED AS SCP
  39151. SA4 A2-STSW+EECW GET REPRIEVE STATUS
  39152. LX4 59-58
  39153. LX1 X4,B1
  39154. PL X4,SSC4.1 IF NOT EXTENDED REPRIEVE MODE
  39155. NG X1,SSC10 IF INTERRUPT HANDLER ACTIVE
  39156. SSC4.1 SA4 A2-STSW+SSOW GET OUTSTANDING CONNECTION COUNT
  39157. SX1 SSCR
  39158. IX1 X1+X3
  39159. ERX1 X1 READ SUBSYSTEM RECEIVING BUFFER POINTER
  39160. BX2 X0+X4
  39161. SB6 X6 (B6) = SUBSYSTEM FL
  39162. SA4 B7+SEPW CHECK FOR SSJ= ENTRY POINT
  39163. LX6 X1,B1
  39164. LX4 59-50
  39165. PL X6,SSC5 IF NO RESTRICTION ON UCP ACCESS
  39166.  
  39167. * ALLOW PRIVILEGED PROGRAM UCP ONLY (SSJ= ENTRY POINT OR
  39168. * SUBSYSTEM).
  39169.  
  39170. NG X4,SSC5 IF SSJ= ENTRY POINT
  39171. SA4 B7+JCIW CHECK FOR SUBSYSTEM
  39172. LX4 36
  39173. BX4 -X0*X4
  39174. ZR X4,SSC2 IF NOT AUTHORIZED UCP
  39175. SSC5 SB3 X1 RECEIVING BUFFER ADDRESS
  39176. ZR X2,SSC10 IF MAXIMUM NUMBER OF REQUESTS OUTSTANDING
  39177. AX1 18
  39178. NG X1,SSC10 IF SUBSYSTEM NOT READY FOR DATA
  39179. BX2 -X0*X1 LENGTH OF PARAMETER AREA (LP)
  39180. ZR B3,SSC10 IF NO SUBSYSTEM RECEIVING BUFFER POINTER
  39181. LE B3,B1,SSC13 IF AP OUT OF RANGE
  39182. SB4 X1-HDRL (B4) = LP - HDRL
  39183. AX1 18 EXTRACT XP
  39184. SA4 RA
  39185. SX6 B5
  39186. IX4 X6+X4
  39187. ERX4 X4 READ VARIABLE LENGTH WORD COUNT
  39188. MX6 -6
  39189. SB3 B3+HDRL DATA ADDRESS
  39190. PL B4,SSC6 IF NOT VARIABLE LENGTH WORD COUNT
  39191. LX4 -18
  39192. BX4 -X6*X4 VARIABLE LENGTH OF BUFFER (WC)
  39193. SX6 X4+HDRL
  39194. IX6 X6-X2
  39195. PL X6,CPE IF WC .GT. LP
  39196. SB4 X4+B1 (B4) = VARIABLE LENGTH WORD COUNT
  39197. SSC6 SX4 B4-MAXB-1
  39198. SX6 B4+X7
  39199. SX7 B3-B6
  39200. PL X6,CPE IF PARAMETER BLOCK BEYOND UCP FL
  39201. SX2 X7+B4
  39202. BX4 X4*X2
  39203. SX1 X1+
  39204. SX2 B5+ FWA OF PARAMETER BLOCK
  39205. PL X4,SSC13 IF LP .GE. FL(SS) OR LP .GT. MAXIMUM
  39206. ZR X1,SSC8 IF NO XP TO MOVE
  39207.  
  39208. * MOVE EXCHANGE PACKAGE.
  39209.  
  39210. PX2 X2,B4 SAVE (B4)
  39211. IX0 X1+X3 ABSOLUTE ADDRESS OF XP MOVE
  39212. SB4 20B NUMBER OF WORDS TO TRANSFER
  39213. SB5 X1+B4 LWA+1 OF XP MOVE
  39214. SX6 B2 ADDRESS OF EXCHANGE PACKAGE
  39215. GE B5,B6,SSC13 IF XP MOVE BEYOND FL
  39216. SB6 SSC7 *MSM* *MSR* RETURN ADDRESS
  39217. IX1 X6-X0 COMPUTE INCREMENT
  39218. SX0 B2 FWA TO TRANSFER
  39219. TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
  39220.  
  39221. SSC7 UX2,B4 X2 (B4) = LENGTH OF PARAMETER BLOCK
  39222. SB5 X2+ (B5) = FIRST WORD OF PARAMETER BLOCK
  39223.  
  39224. * MOVE PARAMETER BLOCK.
  39225.  
  39226. SSC8 SA1 RA USER RA
  39227. SX6 B5
  39228. IX0 X6+X1 FWA OF TRANSFER
  39229. SX1 B3+
  39230. IX1 X3+X1 FWA OF DATA BUFFER
  39231. IX1 X0-X1
  39232. SB6 SSC9 *MSM* *MSR* RETURN ADDRESS
  39233. TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
  39234.  
  39235. * STORE HEADER INFORMATION.
  39236.  
  39237. SSC9 SA1 B7+TFSW GET EJT ORDINAL
  39238. SA4 B7+SEPW
  39239. MX0 -12
  39240. SX6 10000B
  39241. LX1 12
  39242. LX4 12-52
  39243. BX1 -X0*X1
  39244. BX6 X6*X4
  39245. CX4 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  39246. BX1 X6+X1 MERGE *DMP=* FLAG AND EJT ORDINAL
  39247. TA4 X4+JSNE,EJT GET JOB SEQUENCE NUMBER
  39248. SX6 4000B
  39249. MX7 24
  39250. BX7 X7*X4
  39251. BX6 X4+X6 SET SCP CONNECTION FLAG
  39252. SA6 A4
  39253. BX7 X7+X1
  39254. SX1 B3-B1
  39255. IX1 X1+X3
  39256. EWX7 X1 STORE SECOND HEADER WORD
  39257. UX2,B3 X5 (B3) = SHIFT COUNT, (X2) = SSID
  39258. SX6 B1
  39259. SA5 RA1
  39260. ERX5 X5 READ (RA+1)
  39261. IX1 X1-X6
  39262. SX6 X5 ADDRESS OF UCP PARAMETER BLOCK
  39263. EWX6 X1 STORE FIRST HEADER WORD
  39264.  
  39265. * SET CPU INTERLOCK BIT.
  39266.  
  39267. SX1 SSCR
  39268. IX7 X1+X3
  39269. ERX1 X7
  39270. MX0 1
  39271. BX6 X0+X1
  39272. TIC DCPC INVALIDATE OTHER CPU CACHE IF PRESENT
  39273. EWX6 X7
  39274.  
  39275. * UPDATE CPA-S.
  39276.  
  39277. SX3 B1
  39278. SA4 A2-STSW+SSOW INCREMENT NUMBER OF OUTSTANDING REQUESTS
  39279. IX7 X4+X3
  39280. SA1 B7+SSCW
  39281. SA7 A4
  39282. LX1 B3 POSITION WAIT RESPONSE INDICATORS
  39283. SX6 X2-LSSI ADD SUBSYSTEM INDEX TO *SSCW*
  39284. LX6 6
  39285. BX6 X1+X6
  39286. IX6 X3+X6 INCREMENT WAIT RESPONSE INDICATORS
  39287. SB6 60
  39288. SB3 B6-B3
  39289. LX6 B3
  39290. BX7 X5
  39291. SA6 A1
  39292. MX0 -36
  39293. LX7 59-40 CHECK AUTO RECALL DESIRED
  39294. SA1 RC BUILD *RCLP* REQUEST
  39295. BX5 -X0*X5
  39296. AX7 59
  39297. BX6 X1+X5
  39298. BX6 X7*X6 CLEAR (RA+1) IF RECALL NOT SELECTED
  39299. SB3 SSC9.1 *RCC* RETURN ADDRESS
  39300. SA1 RA1
  39301. EWX6 X1
  39302. MX1 -3
  39303. SA2 A2+ CHECK CPU STATUS
  39304. LX2 3
  39305. BX2 -X1*X2
  39306. SX2 X2-XCPS
  39307. NZ X2,SSC9.2 IF NOT *X* STATUS
  39308. SA7 T1 SAVE (X7)
  39309. SB6 A2-STSW SET EXCHANGE PACKAGE ADDRESS
  39310. EQ RCC RECALL SCP
  39311.  
  39312. SSC9.1 SA1 T1 RESTORE (X7)
  39313. BX7 X1
  39314. SSC9.2 NG X7,MTR IF RECALL DESIRED
  39315. EQ MTRX EXIT
  39316.  
  39317. * PROCESS SUBSYSTEM BUSY.
  39318.  
  39319. SSC10 SA1 RA
  39320. SX2 B5
  39321. IX2 X2+X1 CHECK RECALL DESIRED
  39322. ERX1 X2
  39323. SX4 ES2+1 * SUBSYSTEM BUSY.*
  39324. BX6 X1+X4
  39325. LX1 59-12
  39326. BX7 X7-X7
  39327. PL X1,SXS IF RECALL DESIRED
  39328. EWX6 X2
  39329. EQ MTRP EXIT
  39330.  
  39331. * PROCESS SPECIAL SUBSYSTEM INITIALIZATION CALL.
  39332.  
  39333. SSC11 SB6 SSC12 SET RETURN ADDRESS FOR *RSI*
  39334. EQ RSI RETURN SUBSYSTEM INFORMATION
  39335.  
  39336. * PROCESS ILLEGAL SUBSYSTEM IDENTIFICATION.
  39337.  
  39338. SSC12 SX7 ES3+1 *SUBSYSTEM ID ILLEGAL.*
  39339. EQ SSC12.1 SET ERROR STATUS
  39340.  
  39341. * RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
  39342.  
  39343. + SX7 B1+ SET COMPLETION BIT
  39344. SB6 X3+11 SET SUBSYSTEM ACTIVE FLAG IN *SSCT*
  39345. LX6 X7,B6
  39346. BX6 X2+X6
  39347. SA6 A2+
  39348. SSC12.1 SA1 RA SET RETURN CODE
  39349. SX2 B5
  39350. IX2 X2+X1
  39351. ERX1 X2
  39352. BX6 X1+X7
  39353. MX7 0
  39354. EWX6 X2
  39355. EQ MTRP EXIT
  39356.  
  39357. * ABORT SUBSYSTEM FOR ILLEGAL XP, AP, OR LP PARAMETERS.
  39358. *
  39359. * (B5) = ADDRESS OF UCP PARAMETER AREA.
  39360. * (X3) = SUBSYSTEM RA.
  39361. * (A2) = *STSW* WORD IN SUBSYSTEM CP AREA.
  39362.  
  39363. SSC13 SX6 B5 SAVE UCP PARAMETER ADDRESS
  39364. LX3 30 SAVE SCP RA
  39365. BX6 X3+X6
  39366. SX0 B0 FORCE SCP ABORT
  39367. SA6 T2
  39368. SX5 A2-STSW SUBSYSTEM CP ADDRESS
  39369. SX2 2 SET *1MA* FUNCTION CODE
  39370.  
  39371. * CALL *1MA*. (ALSO ENTERED HERE FROM *SSF*.)
  39372. *
  39373. * (X0) = 36/0, 6/INDX, 18/ADDR
  39374. * INDX = SUBSYSTEM INDEX, OR MESSAGE INDEX IF ADDR = 0.
  39375. * ADDR = RELATIVE ADDRESS OF SUBSYSTEM PARAMETER WORD.
  39376. * = 0, IF *CPUMTR* REQUESTING ABORT.
  39377. * (X2) = *1MA* FUNCTION CODE.
  39378. * (X5) = CP ADDRESS.
  39379.  
  39380. SSC15 SA4 X5+STSW CHECK ROLLOUT REQUESTED
  39381. SX6 3R1MA BUILD *1MA* REQUEST
  39382. BX7 X0 SAVE *1MA* PARAMETER
  39383. SA7 T1
  39384. LX6 59-17
  39385. SB3 SSC17 SET RETURN ADDRESS
  39386. LX2 24
  39387. BX6 X6+X0
  39388. LX4 59-24
  39389. BX6 X6+X2
  39390. NG X4,SSC19 IF ROLLOUT REQUESTED
  39391. SX0 B7 SAVE CONTROL POINT ADDRESS
  39392. SB7 X5
  39393. SB4 -1 PROHIBIT QUEUING
  39394. MX1 1 SET CHECK ACTIVITY FLAG
  39395. BX0 X0+X1
  39396. SB6 SSC16 SET RETURN IF NOT AT ACTIVITY LIMIT
  39397. EQ CAL CHECK ACTIVITY LIMIT
  39398.  
  39399. SSC16 SX0 X0 CLEAR CHECK ACTIVITY FLAG
  39400. TJP (/DCP/APQ,DCPC,/MONITOR/APQ) ASSIGN PP
  39401.  
  39402. SSC17 SB5 B7+ SAVE CPA ADDRESS
  39403. SB7 X0 RESTORE (B7)
  39404. BX7 X7-X7
  39405. NG X0,SSC19 IF TOO MUCH ACTIVITY
  39406. NZ X1,SSC17.2 IF PP ASSIGNED
  39407. MX7 1 SETUP TO QUEUE THE REQUEST
  39408. SA2 APQA
  39409. SB7 B5 RESTORE CONTROL POINT ADDRESS
  39410. BX7 X7+X2
  39411. SX2 NPQ
  39412. SA7 AQRA
  39413. SB3 SSC17.1
  39414. EQ AQR QUEUE AS A NO ROLL REQUEST
  39415.  
  39416. SSC17.1 SB7 X0+ RESTORE (B7)
  39417. SX7 B0+
  39418. SSC17.2 SA1 T1 CHECK *1MA* PARAMETER
  39419. NZ X1,SSC18 IF NOT SCP ABORT
  39420. SA3 T2 GET UCP PARAMETER ADDRESS AND SCP RA
  39421. SA1 RA GET UCP RA
  39422. SX2 X3
  39423. AX3 30
  39424. IX2 X1+X2
  39425. ERX1 X2 SET ERROR STATUS IN UCP PARAMETER BLOCK
  39426. ERRNZ ES1-2 CODE DEPENDS ON VALUE OF *ES1*
  39427. MX6 -2
  39428. BX6 -X6+X1
  39429. EWX6 X2
  39430. SX2 SSIW CLEAR SUBSYSTEM IDENTIFICATION WORD
  39431. IX2 X3+X2
  39432. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  39433. EWX7 X2
  39434. SSC18 SA2 RA1
  39435. ERX5 X2 GET CALL ADDRESS
  39436. MX6 -36
  39437. BX0 -X6*X5
  39438. LX5 59-40
  39439. SA4 RC BUILD *RCLP* REQUEST
  39440. SA1 B5+STSW UPDATE *STSW*
  39441. SA3 SSFG
  39442. BX6 X1+X3
  39443. SA6 A1
  39444. PL X5,MTRP IF NOT AUTO RECALL
  39445. BX7 X4+X0 SET *RCLP* REQUEST
  39446. EWX7 X2
  39447. EQ MTR ENTER RECALL STATUS
  39448.  
  39449. SSC19 SA1 APQA CLEAR BUFFER INTERLOCK
  39450. SA2 RA1
  39451. ZR X1,SSC20 IF NO BUFFER
  39452. BX6 X6-X6
  39453. SA6 X1
  39454. SSC20 SA4 SSTA
  39455. ERX1 X2 GET RA+1 REQUEST
  39456. ZR X4,SXS IF NO FNT INTERLOCK TO CLEAR
  39457. LX1 17-59 POSITION REQUEST NAME
  39458. SX1 X1-3RSST
  39459. ZR X1,SST9 IF *SST* REQUEST
  39460. EQ SXS SET *X* STATUS
  39461.  
  39462. * THE FOLLOWING CHECKS ARE MADE TO INSURE THAT THESE TAGS
  39463. * ARE BENEATH RA+100B OF SUBSYSTEM FL.
  39464.  
  39465. ERRNG 77B-SSIW
  39466. ERRNG 77B-SSCR
  39467. SSF SPACE 4,10
  39468. *** *SSF*.
  39469. * PROCESS SUBSYSTEM FUNCTION CALLS.
  39470. *
  39471. *T 18/ *SSF*,1/ ,1/R,4/ ,18/0,18/ ADDR
  39472. *
  39473. *T ADDR 6/ RC,12/ FP,18/ UCPA,18/ SCPA,6/ FC
  39474. *T ADDR+1 24/ JSEQ,23/0,1/D,12/ JEJT
  39475. *T ADDR+2 1/U,1/S,10/ 0,24/ EUCPA,24/ ESCPA
  39476. *
  39477. * FC FUNCTION CODE -
  39478. * 02 SEND DAYFILE MESSAGE AND/OR ABORT USER.
  39479. * 04 UPDATE USER JOB ACCOUNTING.
  39480. * 06 COMPLETE USER REQUEST.
  39481. * 10 READ USER JOB MEMORY.
  39482. * 12 RETURN USER JOB STATUS.
  39483. * 14 WRITE USER JOB MEMORY.
  39484. * 16 EXIT FROM SYSTEM CONTROL POINT STATUS.
  39485. * 24 ALLOW USER SWAPPING.
  39486. * 26 SWAP IN USER JOB.
  39487. * 30 SET LONG TERM CONNECTION.
  39488. * 32 CLEAR LONG TERM CONNECTION.
  39489. * 34 ALLOW MULTIPLE REQUEST CAPABILITY.
  39490. * 40 EXTENDED READ USER JOB CM/ECS.
  39491. * 42 EXTENDED MULTIPLE REQUEST PROCESSING.
  39492. * 44 EXTENDED WRITE USER JOB CM/ECS.
  39493. * 46 RETURN USER JOB IDENTIFICATION.
  39494. * 50-66 RESERVED FOR CDC.
  39495. * 70-76 RESERVED FOR INSTALLATIONS.
  39496. * SCPA A DATA ADDRESS WITHIN THE SUBSYSTEM MEMORY.
  39497. * UCPA A DATA ADDRESS WITHIN A USER JOB MEMORY.
  39498. * FP A PARAMETER MEANINGFUL TO A PARTICULAR FUNCTION.
  39499. * RC SYSTEM REPLY - (SEE *COMSSCP*)
  39500. * 34-37 RESERVED FOR INSTALLATIONS.
  39501. * 40 AT LEAST ONE ERROR ENCOUNTERED IN LIST.
  39502. * 41 JOB IDENTIFIER IS INVALID.
  39503. * 42 SCP CM/ECS ADDRESS OUT OF RANGE.
  39504. * 43 UCP CM/ECS ADDRESS OUT OF RANGE.
  39505. * 44 USER JOB IS SWAPPED OUT.
  39506. * 45 USER JOB IS NOT IN THE SYSTEM.
  39507. * 46 SWAP IN REQUEST TEMPORARILY PROHIBITED.
  39508. * 47-55 RESERVED FOR CDC.
  39509. * 56 ECS ABORT/PARITY ERROR.
  39510. * 57 CONNECTION PREVIOUSLY ESTABLISHED.
  39511. * 60 CONNECTION REJECTED.
  39512. * 61 CONNECTION NOT PREVIOUSLY ESTABLISHED.
  39513. * 62 WORD TRANSFER TOO LONG.
  39514. * 63 UCP NOT ESTABLISHED WITH SUBSYSTEM.
  39515. * 64 SUBSYSTEM IS ESTABLISHED WITH RECEIVER.
  39516. * 65 ATTEMPT TO SET ILLEGAL ERROR FLAG.
  39517. * 66 ILLEGAL DAYFILE PROCESSING FLAG.
  39518. * 67-73 RESERVED FOR CDC.
  39519. * 74-77 RESERVED FOR INSTALLATIONS.
  39520. * JEJT JOB EJT ORDINAL.
  39521. * D IF SET, UCP MUST BE *DMP=* PROGRAM, OTHERWISE UCP MUST
  39522. * NOT BE *DMP=* PROGRAM.
  39523. * JSEQ JOB SEQUENCE NUMBER.
  39524. * EUCPA UCP CM OR ECS ADDRESS, FOR SF.XRED (40) AND
  39525. * SF.XWRT (44) FUNCTIONS ONLY.
  39526. * ESCPA SCP CM OR ECS ADDRESS, FOR SF.XRED (40) AND
  39527. * SF.XWRT (44) FUNCTIONS ONLY.
  39528. * U IF SET, EUCPA IS UCP ECS ADDRESS, OTHERWISE EUCPA
  39529. * IS UCP CM ADDRESS.
  39530. * S IF SET, ESCPA IS SCP ECS ADDRESS, OTHERWISE ESCPA
  39531. * IS SCP CM ADDRESS.
  39532.  
  39533.  
  39534. SSF BSS 0 ENTRY
  39535.  
  39536. * CHECK CALL ARGUMENTS.
  39537.  
  39538. SA2 B7+JCIW CHECK SUBSYSTEM CALL
  39539. SB6 X5 CHECK ADDR WITHIN RANGE
  39540. LX2 -24
  39541. LE B6,B1,CPE IF ADDR .LE. 1
  39542. SA3 B3 RA OF SUBSYSTEM
  39543. SX1 SSIW SUBSYSTEM IDENTIFICATION WORD
  39544. IX1 X3+X1
  39545. ERX1 X1
  39546. BX7 -X0*X1 SUBSYSTEM IDENTIFICATION FROM RA+SSIW
  39547. GE B6,B4,CPE IF ADDR .GE. FL
  39548. BX4 -X0*X2 SUBSYSTEM IDENTIFICATION FROM CPA
  39549. SX1 B6
  39550. IX6 X3+X1
  39551. ERX3 X6 READ (ADDR)
  39552. SA6 T1 ABSOLUTE *ADDR*
  39553. BX7 X4-X7
  39554. SX4 X4-LSSI-1
  39555. NZ X7,CPE IF SUBSYSTEM CODE NOT INITIALIZED
  39556. NG X4,CPE IF CALLER NOT SUBSYSTEM
  39557. MX2 -18
  39558. BX4 -X2*X1
  39559. SX6 MSFO*10B SET MAXIMUM SFCALL OVERHEAD
  39560. SA6 SSFE
  39561.  
  39562. * CHECK USER JOB.
  39563. * (X0) = -7777B.
  39564. * (X3) = SFCALL FUNCTION WORD.
  39565. * (X4) = LIST PROCESSING FLAG.
  39566. * (B3) = (RA).
  39567. * (B4) = SUBSYSTEM FL.
  39568.  
  39569. SSF1 MX7 -6 CHECK FUNCTION CODE (FC) FOR LEGALITY
  39570. SA1 SSFB CHECK IF SCPA VALIDITY CHECKING NEEDED
  39571. BX7 -X7*X3
  39572. SA2 SSFE DECREMENT REMAINING MONITOR TIME
  39573. LX3 59-0
  39574. SB5 X7 FUNCTION CODE (FC)
  39575. TX6 X2,-SFFO
  39576. SA6 A2
  39577. LX1 X1,B5
  39578. NG X3,CPE IF COMPLETION BIT ALREADY SET
  39579. SX6 B5-EXIT
  39580. SX2 B5-REGR
  39581. ZR X6,S16 IF *SF.EXIT* REQUEST
  39582. LX3 59-41-59+0 EXTRACT FUNCTION PARAMETER
  39583. BX7 -X0*X3 FP
  39584. LX3 -6-12-6 EXTRACT SCPA
  39585. PX7,B5 X7 SAVE FC AND FP
  39586. SB6 X3 SCPA
  39587. LE B5,B1,CPE IF ILLEGAL FC
  39588. SB5 X7+B6
  39589. PL X1,SSF3 IF NO SCPA CHECKING REQUIRED
  39590.  
  39591. * CHECK SCPA OUT OF RANGE.
  39592.  
  39593. NZ X2,SSF2 IF NOT *SF.REGR*
  39594. ZR B6,SSF3 IF NO MESSAGE ADDRESS SPECIFIED
  39595. SB5 B6+MESL CHECK MESSAGE LENGTH
  39596. SSF2 LE B6,B1,SSF20 IF SCPA .LE. 1
  39597. NG B5,SSF20 IF (SCPA + FP) EXCEED 17 BITS
  39598. GT B5,B4,SSF20 IF SCPA LWA .GT. FL
  39599.  
  39600. * CHECK OTHER USER JOB INFORMATION.
  39601.  
  39602. SSF3 NG X4,SSF4 IF LIST PROCESSING IN EFFECT
  39603. SB6 SSF21 SET RETURN ADDRESS IF INVALID EJT ORDINAL
  39604. SB5 SSF3.1 SET NORMAL RETURN ADDRESS FOR *CUI*
  39605. EQ CUI CHECK UCP IDENTIFICATION
  39606.  
  39607. SSF3.1 NZ X6,SSF18 IF NO MATCH ON JOB SEQUENCE NUMBER
  39608. SX6 A1 SAVE UCP EJT ENTRY ABSOLUTE ADDRESS
  39609. ERX3 X3 READ PARAMETER WORD
  39610. SA6 SSFF
  39611. NZ X2,SSF14 IF UCP NOT AT CONTROL POINT
  39612. SA2 CMCL CHECK FOR STORAGE MOVE
  39613. AX2 48
  39614. LX2 7
  39615. BX2 X5-X2
  39616. ZR X2,SXS IF UCP JOB MOVING
  39617. LX3 -6
  39618. LX5 18
  39619. BX4 X4+X5 SAVE UCP CPA
  39620. LX1 59-6
  39621. NG X1,SSF14.1 IF JOB ADVANCE SET
  39622. BX5 X3 SAVE REGISTERS
  39623. SB5 B4
  39624. SA2 B7+JCIW GET SSID
  39625. LX2 -24
  39626. BX2 -X0*X2
  39627. LX4 -18
  39628. SA3 X4+SSCW
  39629. SB4 SSF3.2 RETURN ADDRESS FOR *CSC*
  39630. EQ CSC CHECK SUBSYSTEM CONNECTION
  39631.  
  39632. SSF3.2 LX4 -18 SAVE SHIFT COUNT
  39633. SX1 B6+
  39634. BX3 X5 RESTORE (X5)
  39635. BX4 X4+X1
  39636. SB4 B5+ RESTORE (B4)
  39637. LX4 36
  39638.  
  39639. * CHECK IF SWPO HAS BEEN ISSUED BY REQUESTING SCP.
  39640. * IF SO RETURN *ROLLED OUT* STATUS (RC=44).
  39641.  
  39642. SSF4 UX1,B5 X7 EXTRACT FC
  39643. SX5 B5-SWPI
  39644. ZR X5,SSF5 IF SF.SWPI FUNCTION
  39645. BX5 X5-X5
  39646. LX4 -18
  39647. SA2 X4+SSCW GET UCP CONTROL WORD
  39648. LX4 -18
  39649. SB6 X4
  39650. LX4 36
  39651. ZR B6,SSF5 IF NO CONNECTION
  39652. LX5 X2,B6 POSITION ROLLOUT ALLOWED FLAG
  39653. LX5 59-4
  39654.  
  39655. * CHECK UCPA OUT OF RANGE
  39656.  
  39657. SSF5 SA2 SSFC CHECK IF UCPA VALIDITY CHECKING NEEDED
  39658. LX2 X2,B5
  39659. LX1 X2,B1
  39660. SX6 B5-ENDT CHECK FOR SF.ENDT FUNCTION
  39661. LX3 -18
  39662. SB6 X3 UCPA
  39663. LX3 18
  39664. NZ X6,SSF6 IF NOT SF.ENDT REQUEST
  39665. SX6 B6
  39666. NG B6,SSF8 IF SPECIAL SF.ENDT (UCPA .LT. 0)
  39667. NG X5,SSF15 IF SF.SWPO ISSUED, RETURN RC44 STATUS
  39668. ZR B6,SSF8 IF SPECIAL SF.ENDT (UCPA = 0)
  39669. BX7 X0*X7 CLEAR FUNCTION PARAMETER FIELD
  39670. SSF6 NG X5,SSF15 IF SF.SWPO ISSUED, RETURN RC44 STATUS
  39671. PL X2,SSF8 IF NO UCPA CHECKING REQUIRED
  39672. PL X1,SSF7 IF NOT EXTENDED UCPA
  39673. MX5 2
  39674. BX5 X5*X4 CALCULATE EXTENDED ADDRESS WORD BIAS
  39675. SX1 B1+B1
  39676. LX5 2
  39677. BX1 X5-X1 0 = LIST, 1 = XLST, 2 = XRED/XWRT
  39678. SB6 X1
  39679. ZR X1,CPE IF SF.XRED/SF.XWRT IN SF.LIST
  39680. SA5 B3 RA
  39681. SX1 X4+B6
  39682. IX6 X5+X1
  39683. ERX1 X6 GET EXTENDED UCPA ADDRESS
  39684. SA6 T2
  39685. NG X1,SSF8 IF EUCPA IS ECS ADDRESS
  39686. LX1 -24 VALIDATE EXTENDED UCP CM ADDRESS
  39687. SB6 X1
  39688. SSF7 LX4 -18
  39689. SA5 X4+FLSW GET UCP RA AND FL
  39690. LX4 18
  39691. BX2 -X0*X5 FL/100
  39692. MX0 -RMSK
  39693. AX5 RSHF
  39694. LE B6,B1,SSF11 IF UCP ADDRESS OUT OF RANGE
  39695. BX6 -X0*X5 UCP RA/100
  39696. MX0 -12
  39697. LX2 6 FL
  39698. SX5 X7+B6 UCPA LWA + 1
  39699. LX6 6
  39700. IX2 X2-X5 FL - (LWA+1)
  39701. NG X5,SSF11 IF (UCPA + FP) EXCEED 17 BITS
  39702. SX1 B6
  39703. IX6 X1+X6 X6 = UCPA ABSOLUTE
  39704. NG X2,SSF11 IF UCPA OUT OF RANGE
  39705.  
  39706. * EXIT TO FUNCTION PROCESSOR.
  39707.  
  39708. SSF8 LX4 -36
  39709. SB6 X4 SHIFT COUNT
  39710. MX5 -3
  39711. LX4 18
  39712. SA2 X4+SSCW GET SCP CONTROL WORD OF UCP
  39713. LX4 18
  39714. LX2 B6
  39715. BX1 -X5*X2 WAIT RESPONSE INDICATOR FOR THIS SUBSYSTEM
  39716. SX5 B5-2 CHECK FUNCTION CODE
  39717. LX5 -2
  39718. SX3 X3+ EXTRACT SCPA
  39719. SB5 X5-MXSF
  39720. PL B5,CPE IF ILLEGAL FUNCTION CODE
  39721. NZ B6,SSF8.1 IF VALID *SSCW*
  39722. SX1 B0+ CLEAR WAIT RESPONSE INDICATORS
  39723. SX2 B0+ CLEAR *SSCW*
  39724. SSF8.1 JP B5+SSFA+MXSF PROCESS FUNCTION
  39725. SPACE 4
  39726. * EXIT TO FUNCTION PROCESSOR WITH -
  39727. *
  39728. * (T2) = ABSOLUTE ADDRESS OF EXTENDED ADDRESS WORD.
  39729. * IF EXTENDED ADDRESS FUNCTION.
  39730. * (A2) = *SSCW* ADDRESS IN UCP CPA.
  39731. * (T1) = ABSOLUTE ADDRESS OF FUNCTION PARAMETER WORD.
  39732. * ((B3)) = SUBSYSTEM RA.
  39733. * (B4) = SUBSYSTEM FL.
  39734. * (B5) = JUMP POSITION IN TABLE.
  39735. * (B6) = SUBSYSTEM INDICATOR SHIFT COUNT.
  39736. * (X0) = -7777B.
  39737. * (X1) = WAIT RESPONSE INDICATORS FOR THIS UCP.
  39738. * (X2) = *SSCW* WORD OF UCP CPA SHIFTED TO SCP BYTE.
  39739. * (X3) = SCPA (RELATIVE ADDRESS).
  39740. * (X4) = LIST PROCESSING FLAG.
  39741. *T 1/L,1/E,1/A,3/0,18/ INDX,18/ CPA,18/ SFA
  39742. * L = SET IF LIST PROCESSING IN EFFECT (SF.LIST
  39743. * OR SF.XLST FUNCTION).
  39744. * E = SET IF EXTENDED LIST PROCESSING IN EFFECT
  39745. * (SF.XLST WITH 2 WORDS PER LIST ENTRY).
  39746. * A = SET IF NO ADVANCE ON FUNCTIONS IN LIST.
  39747. * INDX = SHIFT COUNT.
  39748. * CPA = UCP CONTROL POINT ADDRESS.
  39749. * SFA = CURRENT FUNCTION RELATIVE ADDRESS.
  39750. * OR LIST ENTRY).
  39751. * (X6) = UCPA ABSOLUTE.
  39752. * (X7) = 12/FC,30/ ,18/FP
  39753. * FC = FUNCTION CODE.
  39754. * FP = FUNCTION PARAMETER WORD.
  39755. *
  39756. * FUNCTION JUMP TABLE. TWO FUNCTIONS PER WORD.
  39757.  
  39758. SSFA BSS 0
  39759. LOC 0
  39760. + PL X5,S02 SF.REGR (02)
  39761. EQ SSF19 SF.TIM (04) - NOT IMPLEMENTED
  39762. + PL X5,S06 SF.ENDT (06)
  39763. EQ S10 SF.READ (10)
  39764. + PL X5,S12 SF.STAT (12)
  39765. EQ S10 SF.WRIT (14)
  39766. + PL X5,S16 SF.EXIT (16)
  39767. EQ CPE SF.INUF (20) - NOT IMPLEMENTED
  39768. + PL X5,CPE SF.RTUF (22) - NOT IMPLEMENTED
  39769. EQ S24 SF.SWPO (24)
  39770. + PL X5,S24 SF.SWPI (26)
  39771. EQ S30 SF.SLTC (30)
  39772. + PL X5,S30 SF.CLTC (32)
  39773. EQ S34 SF.LIST (34)
  39774. + PL X5,CPE SF.RERN (36) - NOT IMPLEMENTED
  39775. EQ S40 SF.XRED (40)
  39776. + PL X5,S42 SF.XLST (42)
  39777. EQ S40 SF.XWRT (44)
  39778. PL X5,S46 SF.CPID (46)
  39779. EQ CPE (50) - NOT IMPLEMENTED
  39780. LOC *O
  39781. MXSF EQU *-SSFA
  39782.  
  39783. * FUNCTION 02 - SEND MESSAGE TO USER JOB.
  39784.  
  39785. S02 MX6 -4
  39786. SA1 A2-SSCW+JCIW CHECK SUBSYSTEM CONNECTED WITH UCP
  39787. BX7 -X6*X2
  39788. LX1 36
  39789. ZR X7,SSF16 IF UCP NOT ESTABLISHED WITH SUBSYSTEM
  39790. BX2 -X0*X1 CHECK IF UCP IS A SUBSYSTEM
  39791. SX1 X2-LSSI-1
  39792. NG X1,S022 IF UCP NOT A SUBSYSTEM
  39793.  
  39794. * NOTE - IF TWO SUBSYSTEMS ARE CONNECTED TO ONE ANOTHER,
  39795. * THE UCP CANNOT ISSUE AN SF.REGR REQUEST ON THE SCP.
  39796.  
  39797. SB5 B4 SAVE REGISTERS
  39798. BX5 X3
  39799. SA3 B7+SSCW
  39800. SB4 S021 RETURN ADDRESS FOR *CSC*
  39801. EQ CSC CHECK SUBSYSTEM CONNECTION
  39802.  
  39803. S021 SA3 A3 CHECK SCP CONNECTED TO UCP
  39804. LX3 B6
  39805. MX6 -4
  39806. BX2 -X6*X3
  39807. BX3 X5 RESTORE REGISTERS
  39808. SB4 B5
  39809. ZR B6,S022 IF NOT CONNECTED
  39810. SX5 RC64 * UCP IS ESTABLISHED WITH RECEIVER.*
  39811. NZ X2,SSF12 IF SUBSYSTEM (SCP) ESTABLISHED WITH UCP
  39812. S022 SX5 A1-JCIW UCP CP ADDRESS
  39813. EQ SSF9 FORMAT 1MA REQUEST
  39814.  
  39815. * FUNCTION 06 - COMPLETE USER REQUEST.
  39816.  
  39817. S06 ZR X3,S062 IF NO UCP ACCOUNT PROCESSING
  39818. SB5 X3 VALIDATE ADDRESS
  39819. SA5 B3 RA OF SCP
  39820. LT B5,B1,SSF20 IF SCPA .LT. 0
  39821. SB5 B5+4 ADD PARAMETER BLOCK LENGTH
  39822. GT B5,B4,SSF20 IF PARAMETER BLOCK OUTSIDE FL
  39823. IX2 X5+X3 SET ABSOLUTE PARAMETER BLOCK ADDRESS
  39824. SA6 S06A SAVE UCPA ABSOLUTE
  39825. MX7 -18 GET UCP CP ADDRESS
  39826. LX7 18
  39827. BX7 -X7*X4
  39828. AX7 18
  39829. BX6 X4 SAVE LIST PROCESSING FLAG
  39830. SA6 S06B
  39831. SX6 B3 SAVE SUBSYSTEM RA ADDRESS
  39832. LX6 18
  39833. SX4 B4 SAVE SUBSYSTEM FL
  39834. BX6 X6+X4
  39835. LX6 18
  39836. SX4 B6 SAVE SHIFT COUNT
  39837. BX6 X6+X4
  39838. SA6 S06C
  39839. SX6 B7 SAVE SCP CP ADDRESS
  39840. SA6 S06D
  39841. BX5 X1 SAVE WAIT RESPONSE INDICATORS
  39842. SB7 X7 SET UCP CP ADDRESS
  39843. SB3 S061 SET EXIT ADDRESS
  39844. EQ IAA INCREMENT AUC ACCUMULATOR
  39845.  
  39846. S061 SA2 B7+SSCW RESTORE REGISTERS
  39847. SA3 S06D
  39848. SB7 X3
  39849. SA3 S06C
  39850. SB6 X3
  39851. AX3 18
  39852. SB4 X3
  39853. AX3 18
  39854. SB3 X3
  39855. SA4 S06B
  39856. SA1 S06A
  39857. BX6 X1
  39858. BX1 X5
  39859. MX0 -12
  39860. LX2 B6
  39861. NE B5,B0,SSF22 IF EXCESSIVE AUC INCREMENT
  39862. S062 SX3 B1
  39863. IX7 X2-X3 DECREMENT WAIT RESPONSE INDICATORS
  39864. PL X6,S063 IF ONLY ONE FUNCTION TO SET COMPLETE
  39865. LX3 3
  39866. BX5 X3*X2 LONG TERM CONNECTION INDICATOR
  39867. LX5 -3
  39868. IX1 X1+X5 COUNT OF CONNECTION INDICATORS
  39869. LX3 X1
  39870. BX7 X0*X2 CLEAR ALL CONNECTION INDICATORS
  39871. S063 ZR X1,SSF16 IF NO CONNECTION INDICATORS SET
  39872. MX5 -4
  39873. BX1 -X5*X7 NEW CONNECTION INDICATORS
  39874. NZ X1,S064 IF STILL CONNECTIONS TO THIS SCP
  39875. BX7 X0*X2 CLEAR ALL CONNECTION INDICATORS
  39876. S064 SB5 60
  39877. SB5 B5-B6
  39878. LX7 B5 UPDATE *SSCW*
  39879. SA7 A2+
  39880. SA1 B7+SSOW UPDATE OUTSTANDING CONNECTION COUNT
  39881. IX7 X1-X3
  39882. BX5 X5-X5 REPLY CODE (NO ERRORS)
  39883. SA7 A1+
  39884. SB5 A2-SSCW UCP CONTROL POINT ADDRESS
  39885. SB6 -B5
  39886. ZR X6,SSF12 IF NO COMPLETION BIT TO SET
  39887. NG X6,SSF12 IF NO COMPLETION BIT TO SET
  39888. ERX1 X6 SET COMPLETION BIT
  39889. BX7 X3+X1
  39890. EWX7 X6
  39891. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  39892. EQ SSF12 COMPLETE REQUEST
  39893.  
  39894. S06A CON 0 SAVE UCPA ABSOLUTE
  39895. S06B CON 0 SAVE LIST PROCESSING FLAG
  39896. S06C CON 0 SAVE B REGISTERS
  39897. S06D CON 0 SAVE SCP CP ADDRESS
  39898.  
  39899. * FUNCTIONS 10 AND 14 - READ/WRITE DATA.
  39900.  
  39901. S10 ZR X1,SSF16 IF NO WAIT RESPONSE INDICATORS SET
  39902. SX5 B5+MXSF-WRIT/4+1
  39903. SX7 X7 WORD COUNT
  39904. SA1 B3 RA OF SCP
  39905. LX6 30
  39906. IX1 X1+X3 ABSOLUTE SCPA
  39907. IX6 X6+X1 30/UCPA ABS, 30/SCPA ABS
  39908. SX1 X7-MAXB-1 CHECK TRANSFER SIZE
  39909. NG X1,S401 IF TRANSFER SIZE NOT TOO LARGE
  39910. SX5 RC62 * WORD TRANSFER TOO LONG.*
  39911. EQ SSF12 SET COMPLETE BIT AND ERROR CODE
  39912.  
  39913. * FUNCTIONS 40 AND 44 - EXTENDED READ/WRITE DATA.
  39914.  
  39915. S40 ZR X1,SSF16 IF NO WAIT RESPONSE INDICATORS SET
  39916. SX5 B5+MXSF-XWRT/4+1 CHECK FOR READ OR WRITE FUNCTION
  39917. SX7 X7 WORD COUNT
  39918. SA2 T2
  39919. ERX2 X2 VALIDATE SCPA CM ADDRESS
  39920. LX1 X2,B1
  39921. BX3 X1*X2
  39922. SB5 X2+ ESCPA
  39923. NG X3,CPE IF BOTH ECS ADDRESSES
  39924. SX3 X2
  39925. TNG X1,(/SCPUEC/SFE1,UEC,/MONITOR/SSF20) IF SCP ECS
  39926. SB6 B5+X7 VALIDATE SCP EXTENDED CM ADDRESS
  39927. LE B5,B1,SSF20 IF ESCPA .LE. 1
  39928. SA1 B3
  39929. LX6 30
  39930. IX1 X1+X3 ABSOLUTE SCP CM ADDRESS
  39931. IX6 X6+X1 UCP/SCP
  39932. GT B6,B4,SSF20 IF ESCPA + FP .GT. FL
  39933. TNG X2,(/SCPUEC/SFE,UEC,/MONITOR/SSF11) IF UCP ECS
  39934. S401 SB6 S402 SET RETURN ADDRESS FOR *CWT*
  39935. EQ CWT CALCULATE WORD TRANSFER SIZE
  39936.  
  39937. S402 BX2 X4 SAVE LIST FLAG
  39938. NZ X5,S403 IF SF.READ
  39939. LX6 30 REVERSE PARAMETERS FOR WRITE
  39940. S403 MX5 30
  39941. BX1 -X5*X6 ADDRESS TO MOVE TO
  39942. LX6 30
  39943. BX0 -X5*X6 ADDRESS TO MOVE FROM
  39944. IX1 X0-X1 DIFFERENCE
  39945. SB6 S404 SET *MSM*/*MSR* RETURN ADDRESS
  39946. SX5 B4 SAVE TRANSFER SIZE
  39947. TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
  39948.  
  39949. * RESTORE REGISTERS. UPDATE REMAINING WORD COUNT AND
  39950. * SCP/UCP ADDRESSES FOR EXTENDED MODE READ/WRITE.
  39951. *
  39952. * (X2) = LIST PROCESSING FLAG.
  39953. * (X3) = SCP FL.
  39954. * (X5) = TRANSFER SIZE.
  39955.  
  39956. S404 TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  39957. BX4 X2 RESTORE LIST PROCESSING FLAG
  39958. SB4 X3 RESTORE SUBSYSTEM FL
  39959. SA1 B3 RA
  39960. SX2 X4 RELATIVE ADDRESS
  39961. IX2 X2+X1
  39962. ERX1 X2 GET FUNCTION PARAMETER WORD
  39963. MX2 -6
  39964. BX2 -X2*X1 FUNCTION CODE
  39965. MX0 -12
  39966. SX2 X2-XRED CHECK FOR EXTENDED MODE READ/WRITE
  39967. NG X2,SSF19 IF NOT EXTENDED READ/WRITE
  39968. LX1 18 DECREMENT WORD COUNT
  39969. IX6 X1-X5
  39970. BX3 -X0*X6 CHECK IF TRANSFER COMPLETE
  39971. SA2 T2
  39972. ERX2 X2 ADVANCE UCP AND SCP ADDRESSES
  39973. LX6 -18
  39974. IX7 X2+X5
  39975. SA2 B3 RA
  39976. SX0 X4 REL ADDRESS
  39977. IX2 X2+X0
  39978. EWX6 X2
  39979. MX0 -12
  39980. LX5 24
  39981. IX7 X7+X5
  39982. SA2 T2
  39983. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  39984. EWX7 X2
  39985. MX2 1
  39986. ZR X3,SSF19 IF TRANSFER COMPLETE
  39987. LX2 -2
  39988. BX4 X4+X2 SET NO ADVANCE ON LIST
  39989. EQ SSF19 SET COMPLETE BIT AND NO ERROR
  39990.  
  39991. * FUNCTION 12 - RETURN STATUS OF USER JOB.
  39992. *
  39993. * ENTER HERE TO COMPLETE FUNCTION 46 (SF.CPID) SUBFUNCTION TO
  39994. * RETURN APPLICATION ACCESS LEVEL TO A PRIVILEGED USER.
  39995. * (B4) = 1.
  39996.  
  39997. S12 MX6 -4 RETURN LONG TERM CONNECTION, WAIT RESPONSE
  39998. SA1 SSFF GET UCP EJT ENTRY ADDRESS
  39999. SA1 X1+SCLE GET JOB ORIGIN
  40000. LX1 -48
  40001. BX1 -X6*X1
  40002. BX5 -X6*X2 1/LONG TERM CONNECTION, 3/WAIT RESPONSE
  40003.  
  40004. * CHECK FOR PRIVILEGED PROGRAM AND PRIVILEGED USER.
  40005. * A PRIVILEGED PROGRAM IS ONE WITH AN SSJ= ENTRY POINT
  40006. * OR A SUBSYSTEM. A PRIVILEGED USER IS A SYSTEM
  40007. * ORIGIN JOB OR A USER WITH SYSTEM ORIGIN PRIVILEGES
  40008. * WHEN THE SYSTEM IS IN *DEBUG* MODE.
  40009.  
  40010. BX7 X3
  40011. SX3 X1-SYOT CHECK FOR SYSTEM ORIGIN JOB
  40012. SA1 B3 RELATIVE ADDRESS
  40013. IX7 X7+X1 SCPA
  40014. SA2 A2+JCIW-SSCW CHECK FOR SUBSYSTEM IDENTIFICATION
  40015. SA1 A2+SEPW-JCIW CHECK FOR SSJ= ENTRY POINT
  40016. LX2 36
  40017. BX6 -X0*X2
  40018. SA2 A2+AACW-JCIW CHECK FOR SYSTEM ORIGIN PRIVILEGES
  40019. LX1 59-50
  40020. SX6 X6-LSSI-1
  40021. BX1 -X6+X1
  40022. PL X1,S121 IF NOT SUBSYSTEM AND NOT SSJ=
  40023. SX5 X5+40B SET PRIVILEGED PROGRAM STATUS
  40024. S121 ZR X3,S122 IF *SYOT* JOB
  40025. SA1 SSTL CHECK FOR *DEBUG* MODE
  40026. LX2 59-4
  40027. LX1 59-12
  40028. BX3 X1*X2 CHECK FOR *SYOT* PRIVILEGES AND *DEBUG*
  40029. BX3 -X3
  40030. S122 NG X3,S123 IF NOT PRIVILEGED USER
  40031. SX5 X5+20B SET PRIVILEGED USER STATUS
  40032. S123 EQ B4,B1,S124 IF SF.CPID SUBFUNCTION
  40033. SA1 B3 RA
  40034. SX2 X4 RELATIVE ADDRESS
  40035. IX2 X2+X1
  40036. ERX1 X2 RETURN STATUS INFORMATION
  40037. LX1 18
  40038. BX1 X0*X1
  40039. BX6 X1+X5
  40040. LX6 -18
  40041. EWX6 X2
  40042. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  40043. EQ SSF19 SET COMPLETE BIT AND NO ERROR
  40044.  
  40045. * COMPLETE FUNCTION 46 (SF.CPID) WITH *FP* = 1.
  40046.  
  40047. S124 SB4 X5 SAVE PRIVILEGES
  40048. SB3 A2 SAVE PRIVILEGES ADDRESS
  40049. SB6 CPE SET ERROR ADDRESS FOR *CUI*
  40050. SB5 S125 SET RETURN ADDRESS FOR *CUI*
  40051. EQ CUI GET JSN
  40052.  
  40053. S125 SA2 B3+ RESTORE PRIVILEGES ADDRESS
  40054. MX6 24
  40055. BX6 X6*X1 JSN
  40056. SA1 A2+AALW-AACW ADD APPLICATION ACCESS LEVEL
  40057. MX3 -6
  40058. BX1 -X3*X1
  40059. BX6 X6+X1
  40060. SX5 B4 SET PRIVILEGES
  40061. LX5 6
  40062. BX6 X6+X5
  40063. EWX6 X7
  40064. EQ SSF19 SET COMPLETE BIT AND NO ERROR
  40065.  
  40066. * FUNCTION 16 - EXIT FROM SYSTEM CONTROL POINT STATUS.
  40067.  
  40068. S16 SB6 S16 SET RETURN ADDRESS FOR *RSI*
  40069. EQ RSI RETURN SUBSYSTEM IDENTIFICATION
  40070.  
  40071. * RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
  40072.  
  40073. + SX6 B1 CLEAR SUBSYSTEM ACTIVE FLAG
  40074. SB6 X3+11
  40075. LX6 B6
  40076. BX6 -X6*X2
  40077. SA1 B7+SSOW CHECK FOR OUTSTANDING CONNECTION
  40078. SA6 A2
  40079. SA3 B3
  40080. SX6 SSIW
  40081. IX3 X3+X6
  40082. BX6 X6-X6
  40083. BX5 -X0*X1
  40084. EWX6 X3 CLEAR SUBSYSTEM IDENTIFICATION WORD
  40085. ZR X5,SSF19 IF SCP HAS NO OUTSTANDING CONNECTIONS
  40086. SA5 B3+B1 ADDRESS OF RA+1
  40087. MX7 1
  40088. ERX3 X5 READ RA+1
  40089. LX7 40-59
  40090. BX7 X7+X3
  40091. SX2 4 SET *1MA* FUNCTION CODE
  40092. EWX7 X5
  40093. SX3 -B1 INDICATE NO DATA FOR MESSAGE BUFFER
  40094. SX5 B7 SCP CPA
  40095. EQ SSF9 CALL *1MA*
  40096.  
  40097. * FUNCTION 24 AND 26 - SET/CLEAR ROLLOUT ALLOWED.
  40098.  
  40099. S24 SX3 1S4 SET ROLLOUT ALLOWED BIT
  40100. ZR X2,SSF16 IF NOT CONNECTED
  40101. BX7 X3+X2
  40102. LX2 X1
  40103. SB5 B5+MXSF-SWPO/4+1
  40104. SA1 A2+STSW-SSCW
  40105. BX5 X5-X5 REPLY CODE COMPLETE, NO ERRORS
  40106. ZR B5,S241 IF SWAPOUT ALLOWABLE (SF.SWPO) REQUEST
  40107. LX1 59-29
  40108. NG X1,SSF14.1 IF USER JOB IN PROCESS OF ROLLOUT
  40109. BX6 -X3*X7 CLEAR ROLLOUT ALLOWED INDICATOR
  40110. SB5 60
  40111. SB5 B5-B6
  40112. LX6 B5
  40113. SA6 A2
  40114. EQ SSF12 COMPLETE REQUEST
  40115.  
  40116. S241 ZR X2,SSF16 IF NO WAIT RESPONSE INDICATORS SET
  40117. SA1 A2+FLSW-SSCW READ UCP STATUS WORD IN CP AREA
  40118. BX2 -X0*X1
  40119. SB5 60
  40120. SB5 B5-B6
  40121. LX7 B5
  40122. SA7 A2 SET ROLLOUT ALLOWED INDICATOR
  40123. MX6 -RMSK
  40124. AX1 RSHF
  40125. BX6 -X6*X1
  40126. LX6 6
  40127. ZR X2,SSF12 IF UCP HAS NO FL
  40128. SA1 RC *RCLP*
  40129. BX3 X1
  40130. SX1 B1
  40131. IX6 X6+X1
  40132. ERX1 X6 READ (RA+1)
  40133. BX3 X3-X1
  40134. AX3 36
  40135. NZ X3,SSF12 IF UCP NOT IN RECALL ON *CALLSS* REQUEST
  40136. SB5 5
  40137. MX1 1
  40138. LX1 -1 LONG TERM CONNECTION MASK
  40139. SX3 176B SUBSYSTEM ID MASK
  40140. BX1 X1+X3
  40141. MX3 5 ROLLOUT AND WAIT RESPONSE MASK
  40142. LX7 7
  40143. S242 BX7 -X1*X7 CLEAR LTC FLAG
  40144. PL X7,S243 IF NO ROLLOUT ALLOWED
  40145. BX7 -X3*X7 CLEAR ROLLOUT AND WAIT RESPONSE
  40146. S243 LX7 12
  40147. SB5 B5-B1
  40148. NZ B5,S242 IF MORE BYTES TO CHECK
  40149. NZ X7,SSF12 IF ANY WAIT RESPONSE INDICATORS SET
  40150. SX6 B1
  40151. SA1 A2+JCIW-SSCW CHECK IF UCP IS SUBSYSTEM
  40152. LX1 36
  40153. BX7 -X0*X1
  40154. SB5 X7-LSSI-1
  40155. PL B5,SSF12 IF UCP IS A SUBSYSTEM
  40156. SX5 A2-SSCW UCP CP ADDRESS
  40157. LX6 29-0
  40158. BX3 X3-X3
  40159. SA6 SSFG
  40160. EQ SSF9 CALL *1MA*
  40161.  
  40162. * FUNCTIONS 30 AND 32 - SET/CLEAR LONG TERM CONNECTION.
  40163.  
  40164. S30 SX6 1S3
  40165. BX7 X6*X2 LONG TERM CONNECTION INDICATOR
  40166. PL X5,S301 IF CLEAR LTC FUNCTION
  40167. SX3 B1+
  40168. ZR X1,SSF16 IF WAIT RESPONSE NOT SET
  40169. SX5 RC57 * CONNECTION PREVIOUSLY ESTABLISHED.*
  40170. NZ X7,SSF12 IF LTC ALREADY SET
  40171. EQ S302 CONTINUE
  40172.  
  40173. S301 SX3 -1
  40174. SX5 RC61 * CONNECTION NOT PREVIOUSLY ESTABLISHED.*
  40175. ZR X7,SSF12 IF LTC ALREADY CLEAR
  40176. S302 LX5 X1
  40177. SA1 B7+SSOW INCREMENT/DECREMENT CONNECTION COUNT
  40178. IX7 X1+X3
  40179. BX6 X6-X2 SET/CLEAR LONG TERM CONNECTION
  40180. SA7 A1
  40181. LX7 X6
  40182. NZ X5,S303 IF WAIT RESPONSE REMAINING FOR SCP
  40183. BX6 X0*X7 CLEAR CONNECTIONS TO THIS SCP
  40184. S303 SB5 60
  40185. SB5 B5-B6
  40186. LX6 B5 UPDATE *SSCW*
  40187. SA6 A2
  40188. EQ SSF19 COMPLETE
  40189.  
  40190. * FUNCTION 42 - EXTENDED LIST PROCESSING (2 WORDS PER
  40191. * LIST ENTRY).
  40192.  
  40193. S42 MX2 1 SET EXTENDED LIST PROCESSING FLAG
  40194. LX2 -1
  40195. BX4 X2+X4
  40196. * EQ S34 INITIATE LIST PROCESSING
  40197.  
  40198. * FUNCTION 34 - PROCESS LIST OF REQUESTS.
  40199.  
  40200. S34 SX5 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
  40201. NG X4,SSF12 IF NESTED SF.LIST FUNCTION
  40202. SX5 RC42 * SCPA NOT WITHIN SUBSYSTEM FL.*
  40203. UX7 X7 EXTRACT FUNCTION PARAMETER WORD (FP)
  40204. MX2 1 SF.LIST PROCESSING IN PROGRESS FLAG
  40205. ZR X7,SSF12 IF NO ENTRIES IN LIST
  40206. SA1 B3+ RA
  40207. IX1 X3+X1
  40208. SX5 X3
  40209. ERX1 X1 READ FILE SF.XXXX PARAMETER WORD
  40210. BX4 X2+X4
  40211. MX6 -54
  40212. SA3 T1
  40213. BX7 X3
  40214. ERX3 X3 CLEAR LIST REPLY CODE
  40215. MX2 42 SAVE RELATIVE ADDRESS OF FIRST LIST ENTRY
  40216. BX6 -X6*X3
  40217. BX4 X2*X4
  40218. LX3 X1
  40219. BX5 -X2*X5
  40220. EWX6 X7
  40221. BX4 X4+X5
  40222. EQ SSF1 PROCESS FIRST FUNCTION IN LIST
  40223.  
  40224. * FUNCTION 46 - RETURN USER JOB IDENTIFICATION.
  40225.  
  40226. S46 SB5 X3+2 VALIDATE SCPA CM ADDRESS
  40227. GE B5,B4,SSF20 IF SCPA LWA .GE. FL
  40228. SB4 X7
  40229. ZR B4,S461 IF *FP* EQUALS 0
  40230. NE B4,B1,SSF19 IF *FP* NOT EQUAL TO 1
  40231. EQ S12 VALIDATE SCPA
  40232.  
  40233. S461 SA1 A2-SSCW+PFCW FIND USER FAMILY NAME
  40234. LX1 -12
  40235. MX2 -12
  40236. BX2 -X2*X1
  40237. CX1 X2,EST CONVERT EST ORDINAL TO OFFSET
  40238. TA1 X1+EQDE,EST READ EST ENTRY
  40239. BX1 -X0*X1
  40240. LX1 3
  40241. SA1 X1+PFGL READ FAMILY NAME FROM MST
  40242. MX2 42
  40243. BX6 X2*X1
  40244. SA1 B3 RA
  40245. IX5 X1+X3 ABSOLUTE SCPA
  40246. EWX6 X5 RETURN FAMILY NAME
  40247. SA1 A2+UIDW-SSCW USER NUMBER FROM CP AREA
  40248. SX3 B1
  40249. IX5 X5+X3
  40250. BX6 X2*X1
  40251. EWX6 X5 RETURN USER NUMBER
  40252. IX5 X5+X3
  40253. SA1 A2-SSCW+AACW GET ACCESS WORD
  40254. MX6 -1
  40255. LX1 0-18
  40256. BX6 -X6*X1 PROVIDE *NVE* ACCESS WORD BIT
  40257. EWX6 X5 RETURN VALIDATION WORD
  40258. EQ SSF19 SET COMPLETE BIT AND NO ERROR
  40259. SPACE 4,10
  40260. * THESE FUNCTIONS ARE PROCESSED BY 1MA.
  40261. * FUNCTION 02 - SEND DAYFILE MESSAGE AND/OR ABORT USER JOB.
  40262. * FUNCTION 16 - EXIT FROM SCP STATUS.
  40263. * FUNCTION 24 - SWAP OUT USER JOB.
  40264. *
  40265. * (B3) = (RA).
  40266. * (T1) = ABSOLUTE ADDRESS OF SF.XXXX FUNCTION.
  40267. * (X3) .LT. 0, IF NO DATA TO BE PASSED IN MESSAGE BUFFER.
  40268. * = 0, IF ONLY FUNCTION PARAMETER WORD AND UCP JOB
  40269. * IDENTIFIER TO BE PASSED IN MESSAGE BUFFER.
  40270. * = MESSAGE ADDRESS (RELATIVE TO SCP) IF MESSAGE TO
  40271. * BE PASSED IN MESSAGE BUFFER IN ADDITION TO
  40272. * FUNCTION PARAMETER WORD AND UCP JOB IDENTIFIER.
  40273. * (X5) = CP ADDRESS.
  40274. * (X4) = LIST PROCESSING FLAG.
  40275.  
  40276. SSF9 SA1 B3 ADDRESS OF RA
  40277. BX7 X1
  40278. SA1 T1
  40279. IX7 X1-X7 RELATIVE ADDRESS OF PARAMETER WORD
  40280. SA1 B7+JCIW GET SSID
  40281. LX1 -24
  40282. BX6 -X0*X1
  40283. SX0 X6-LSSI SET INDEX FOR *1MA*
  40284. LX0 18
  40285. BX0 X7+X0
  40286. NG X3,SSC15 IF NO DATA TO PASS
  40287. SB3 SSF9.1 SET *ACB* RETURN ADDRESS
  40288. EQ ACB ASSIGN COMMUNICATION BUFFER
  40289.  
  40290. SSF9.1 ZR X1,SXS IF NO BUFFER AVAILABLE
  40291. BX7 X1 SET PARAMETER WORD
  40292. SB6 X1
  40293. SA7 APQA
  40294. SA1 T1
  40295. SX7 B1
  40296. IX7 X1+X7
  40297. SA1 RA GET RA
  40298. SX4 X4 LIST PROCESSING FLAG
  40299. IX1 X4+X1 ABSOLUTE ADDRESS OF CURRENT SFCALL
  40300. ERX1 X1 CURRENT SFCALL FUNCTION
  40301. BX6 X1
  40302. SA6 B6+B1 STORE IN COMMUNICATION BUFFER
  40303. ERX4 X7 JOB IDENTIFIER
  40304. LX7 X4
  40305. SX2 B1+B1 SET *1MA* FUNCTION CODE
  40306. SA7 A6+B1
  40307. ZR X3,SSC15 IF NO MESSAGE FOR MESSAGE BUFFER
  40308. SA4 RA GET RA
  40309. IX7 X4+X3
  40310. ERX4 X7
  40311. SB6 MESL SET MESSAGE LENGTH
  40312.  
  40313. * SET MESSAGE INTO MONITOR COMMUNICATION BUFFER.
  40314.  
  40315. SSF10 BX6 X4
  40316. SB6 B6-B1
  40317. SA6 A6+B1
  40318. SX4 B1
  40319. IX7 X7+X4
  40320. ERX4 X7
  40321. NZ B6,SSF10 IF MORE DATA TO PASS
  40322. EQ SSC15 CALL *1MA*
  40323.  
  40324. SSF11 SX5 RC43 * UCP CM/ECS ADDRESS OUT OF RANGE.*
  40325. SB6 B1 INDICATE NO ERROR
  40326. MX0 -12
  40327. * EQ SSF12
  40328.  
  40329. * COMPLETE.
  40330. *
  40331. * (T1) = ABSOLUTE ADDRESS OF FUNCTION PARAMETER WORD.
  40332. * (X0) = -7777B.
  40333. * (X4) = LIST PROCESSING FLAG.
  40334. * (X5) = REPLY CODE.
  40335. * (B6) = -CPA, IF SF.ENDT REQUEST.
  40336. * = -1, IF FATAL ERROR.
  40337. * .GE. 0 IF NO ERROR CONDITION.
  40338.  
  40339. SSF12 SA3 T1
  40340. ERX1 X3 SET COMPLETION AND RETURN STATUS
  40341. MX6 -54
  40342. LX5 54 RC
  40343. SX2 B1
  40344. BX7 -X6*X1 CLEAR STATUS
  40345. SB5 X4 SAVE LAST FUNCTION ADDRESS
  40346. PL X4,SSF13 IF LIST PROCESSING NOT IN EFFECT
  40347.  
  40348. * PROCESS NEXT FUNCTION IN LIST.
  40349.  
  40350. BX3 X1
  40351. SX7 X4 RELATIVE ADDRESS
  40352. SA1 B3+ RA
  40353. IX7 X7+X1
  40354. SA7 T2
  40355. ERX1 X7 GET CURRENT ENTRY IN LIST
  40356. BX7 X3
  40357. LX3 X4
  40358. LX3 2
  40359. NG X3,SSF13 IF NO ADVANCE ON LIST FUNCTION
  40360. LX7 -6
  40361. BX3 X2*X3 GET EXTENDED LIST INDICATOR
  40362. IX3 X3+X2 LIST ADDRESS INCREMENT
  40363. IX7 X7+X3 POINT SCPA TO NEXT ENTRY IN LIST
  40364. LX7 6+18
  40365. IX7 X7-X2 DECREMENT NUMBER OF FUNCTIONS LEFT IN LIST
  40366. BX1 -X6*X1 CLEAR STATUS
  40367. IX4 X4+X3 ADVANCE LIST ABSOLUTE ADDRESS
  40368. BX3 -X0*X7 NUMBER OF ENTRIES REMAINING IN LIST
  40369. BX1 X5+X1 SET STATUS IN SF.XXXX
  40370. BX6 X1+X2 SET SF.XXXX COMPLETE BIT
  40371. LX7 -18
  40372. SX5 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
  40373. SA1 T2
  40374. EWX6 X1
  40375. LX5 54
  40376. NG X6,SSF13 IF ERRORS ENCOUNTERED
  40377. SX5 B0+
  40378. ZR X3,SSF13 IF NO MORE ENTRIES IN LIST
  40379. SA1 SSFE CHECK IF MONITOR MODE TIME EXHAUSTED
  40380. TX3 X1,-SFFO SFCALL FUNCTION OVERHEAD
  40381. NG X3,SSF13 IF MONITOR MODE TIME EXHAUSTED
  40382. SA1 B3
  40383. SX3 X4
  40384. IX1 X3+X1 RA + RELATIVE LIST ADDRESS
  40385. ERX3 X1 READ NEXT ENTRY
  40386. SA1 T1
  40387. EWX7 X1 UPDATE SF.LIST FUNCTION WORD
  40388. PL B6,SSF1 IF NOT FATAL ERROR OR SF.ENDT
  40389. SSF13 BX6 X5+X7 INSERT REPLY CODE
  40390. BX6 X2+X6 SET COMPLETION BIT
  40391. SA1 T1
  40392. BX7 X7-X7
  40393. EWX6 X1
  40394. PL B6,MTRP IF NO ERROR
  40395. SA1 B3
  40396. SX2 B5
  40397. IX1 X2+X1
  40398. ERX1 X1 GET FUNCTION JUST PROCESSED
  40399. SB6 -B6
  40400. LE B6,B1,CPE IF FATAL ERROR
  40401.  
  40402. * THE *SF.ENDT* REQUEST ENTERS HERE TO CHECK TO SEE IF THE
  40403. * UCP IS IN RECALL ON THIS REQUEST.
  40404.  
  40405. SA3 B3+B1
  40406. EWX7 X3 CLEAR (RA+1)
  40407. SA2 RC CHECK *RCLP* REQUEST
  40408. BX7 X1
  40409. AX1 18+6
  40410. SA4 B6+FLSW READ UCP RA
  40411. SX3 X1 GET UCPA
  40412. BX2 X3+X2
  40413. BX3 -X0*X4
  40414. MX0 -RMSK
  40415. AX4 RSHF
  40416. BX4 -X0*X4
  40417. MX0 -12
  40418. LX4 6
  40419. ZR X3,MTRX IF NO UCP FL
  40420. LX0 18
  40421. SX3 B1
  40422. IX3 X3+X4
  40423. ERX3 X3 READ UCP (RA+1)
  40424. BX3 X0*X3
  40425. BX6 X2-X3
  40426. LX7 59-42
  40427. NZ X6,MTRX IF NO RECALL FOR THIS REQUEST
  40428. SA1 B6+STSW CHECK CPU STATUS
  40429. MX2 -3
  40430. LX1 3
  40431. BX2 -X2*X1
  40432. SX2 X2-XCPS
  40433. NZ X2,MTRX IF NOT *X* STATUS
  40434. SB3 MTRX SET *RCC* RETURN ADDRESS
  40435. EQ RCC RECALL CPU
  40436.  
  40437. SSF14 UX3,B5 X7 GET FUNCTION CODE
  40438. LX1 59-6
  40439. SX3 B5-SWPI
  40440. NZ X3,SSF14.1 IF NOT SF.SWPI
  40441. NG X1,SSF14.1 IF JOB ADVANCE SET
  40442. LX1 59-0-59+6
  40443. NG X1,SSF14.1 IF JOB EJT INTERLOCK SET
  40444. SX3 X2-SIJS+EXJS
  40445. LX1 0-59
  40446. LX3 1
  40447. SX7 X2-ROJS+EXJS
  40448. ZR X7,SSF14.2 IF UCP JOB STATUS = SCHEDULER ROLLOUT
  40449. SX7 X2-TOJS+EXJS
  40450. ZR X7,SSF14.2 IF UCP JOB STATUS = TIMED/EVENT ROLLOUT
  40451. SX7 X2-SOJS+EXJS
  40452. ZR X7,SSF14.2 IF UCP JOB STATUS = SCP ROLLOUT
  40453. SX5 RC46 *SWAP-IN REQUEST TEMPORARILY PROHIBITED.*
  40454. NZ X3,SSF12 IF UCP JOB STATUS NOT SCP ROLLIN
  40455. SSF14.1 SX5 RC44 * USER JOB SWAPPED OUT.*
  40456. SB6 B1+ INDICATE NO FATAL ERROR
  40457. EQ SSF12 SET REPLY CODE
  40458.  
  40459. SSF14.2 IX6 X1-X3 CHANGE JOB STATUS TO SCP ROLLIN
  40460. SA5 B3 GET RA
  40461. SA3 T1 GET ABSOLUTE ADDRESS OF PARAMETER BLOCK
  40462. SA2 B7+JCIW GET SUBSYSTEM IDENTIFICATION
  40463. SA6 A1
  40464. LX2 36
  40465. IX6 X3-X5 RELATIVE ADDRESS OF PARAMETER WORD
  40466. BX2 -X0*X2
  40467. LX6 12
  40468. SA1 A1+B1 CHANGE SCHEDULING DATA IN EJT ENTRY
  40469. ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
  40470. MX3 30
  40471. BX6 X6+X2
  40472. BX1 X3*X1
  40473. BX6 X6+X1
  40474. SA6 A1
  40475. MX6 59
  40476. SA1 A1+SCLE-SCHE CLEAR FORCED ROLLOUT FLAG
  40477. LX6 53-0
  40478. SB5 B7 (B5) = CP ADDRESS FOR *SSC*
  40479. BX6 X6*X1
  40480. SA6 A1
  40481. EQ SSC18 EXIT
  40482.  
  40483. SSF15 SA1 SSFC CHECK CONNECTIONS REQUIRED FOR FUNCTION
  40484. UX2,B5 X7
  40485. LX1 B5
  40486. PL X1,SSF14.1 IF NO CONNECTION CHECKING NECESSARY
  40487. LX4 -18
  40488. SA2 X4+SSCW GET UCP CONTROL WORD
  40489. LX4 -18
  40490. SB6 X4 SHIFT COUNT
  40491. LX4 36
  40492. MX6 -4
  40493. LX2 B6
  40494. BX6 -X6*X2
  40495. ZR B6,SSF16 IF NO CONNECTION
  40496. NZ X6,SSF14.1 IF CONNECTIONS ESTABLISHED
  40497. SSF16 SX5 RC63 * UCP NOT ESTABLISHED WITH SUBSYSTEM.*
  40498. EQ SSF12 SET REPLY CODE
  40499.  
  40500. SSF18 SX5 RC45 * USER JOB IS NOT IN SYSTEM.*
  40501. EQ SSF12 SET REPLY CODE
  40502.  
  40503. SSF19 BX5 X5-X5 RC = COMPLETE, NO ERRORS
  40504. SB6 B1
  40505. EQ SSF12 COMPLETE REQUEST
  40506.  
  40507. SSF20 SX5 RC42 * SCP CM/ECS ADDRESS OUT OF RANGE.*
  40508. SB6 -B1 SET FATAL ERROR
  40509. MX0 -12
  40510. EQ SSF12 COMPLETE REQUEST
  40511.  
  40512. SSF21 SX5 RC41 * JOB IDENTIFIER INVALID.*
  40513. EQ SSF12 COMPLETE REQUEST
  40514.  
  40515. SSF22 SX5 RC67 * EXCESSIVE ACCUMULATOR INCREMENT.*
  40516. EQ SSF12 COMPLETE REQUEST
  40517.  
  40518.  
  40519. * TABLE OF FUNCTIONS WHICH REQUIRE SCPA VALIDITY CHECKING.
  40520. *
  40521. * 2 BITS PER SFCALL FUNCTION - 1/A, 1/R
  40522. * A IF SET, SCPA VALIDATION IS REQUIRED.
  40523. * R RESERVED.
  40524. *
  40525. * NOTE - INSTALLATION RESERVED SFCALL FUNCTIONS (70-76)
  40526. * SHOULD USE ADDITIONAL VALIDATION WORD.
  40527.  
  40528. SSFB BSS 0
  40529. POS 60-REGR SF.REGR
  40530. VFD 1/1
  40531. POS 60-READ SF.READ
  40532. VFD 1/1
  40533. POS 60-WRIT SF.WRIT
  40534. VFD 1/1
  40535. POS 60-LIST SF.LIST
  40536. VFD 1/1
  40537. POS 60-XLST SF.XLST
  40538. VFD 1/1
  40539. POS 60-CPID SF.CPID
  40540. VFD 1/1
  40541. POS 1
  40542. VFD 1/0 AVOID *PASS* INSTRUCTIONS
  40543. BSS 0 FORCE UPPER
  40544.  
  40545.  
  40546. * TABLE OF FUNCTIONS WHICH REQUIRE UCPA VALIDITY CHECKING.
  40547. *
  40548. * 2 BITS PER SFCALL FUNCTION - 1/A, 1/B
  40549. * A IF SET, UCPA VALIDATION IS REQUIRED.
  40550. * B IF SET, UCPA TO BE VERIFIED IS EXTENDED ADDRESS.
  40551. *
  40552. * NOTE - INSTALLATION RESERVED SFCALL FUNCTIONS (70-76)
  40553. * SHOULD USE ADDITIONAL VALIDATION WORD.
  40554.  
  40555. SSFC BSS 0
  40556. POS 60-ENDT SF.ENDT
  40557. VFD 1/1
  40558. VFD 1/0
  40559. POS 60-READ SF.READ
  40560. VFD 1/1
  40561. VFD 1/0
  40562. POS 60-WRIT SF.WRIT
  40563. VFD 1/1
  40564. VFD 1/0
  40565. POS 60-XRED SF.XRED
  40566. VFD 1/1
  40567. VFD 1/1
  40568. POS 60-XWRT SF.XWRT
  40569. VFD 1/1
  40570. VFD 1/1
  40571. POS 1
  40572. VFD 1/0 AVOID *PASS* INSTRUCTIONS
  40573. BSS 0 FORCE UPPER
  40574.  
  40575.  
  40576. SSFE CON 0 SFCALL REMAINING MONITOR MODE TIME
  40577.  
  40578. SSFF CON 0 UCP EJT ENTRY ABSOLUTE ADDRESS
  40579. SSFG CON 0 *STSW* FLAGS FOR FUNCTION 24
  40580. EJECT
  40581. SST SPACE 4,10
  40582. *** *SST*
  40583. * PROCESS FILE SWITCHING.
  40584. *
  40585. *T 18/ *SST*,1/ ,1/R,10/ ,12/ SS,18/ ADDR
  40586. *
  40587. * SS SUBSYSTEM IDENTIFICATION OF PARTNER (FCN = 1 OR 2).
  40588. *
  40589. *T ADDR 12/ FNTR,12/ FNTS,18/ RSV,6/ FCN,11/ ST,1/C
  40590. *T ADDR+1 24/ JSN,24/ 0,12/ JEJT
  40591. *
  40592. * C COMPLETION BIT.
  40593. * FCN FUNCTION CODE -
  40594. * CUSU = 1 CALLER UCP - SCP TO UCP SWITCH.
  40595. * CUUS = 2 CALLER UCP - UCP TO SCP SWITCH.
  40596. * CSUS = 3 CALLER SCP - UCP TO SCP SWITCH.
  40597. * CSSU = 4 CALLER SCP - SCP TO UCP SWITCH.
  40598. * FNTR FNT ORDINAL IN RECEIVER-S FNT (RETURNED PARAMETER).
  40599. * (SET TO PARTNER CPA BY *CPUMTR* FOR *1MA*.)
  40600. * FNTS FNT ORDINAL IN SOURCES FNT.
  40601. * JEJT PARTNERS EJT ORDINAL (FCN = 3 OR 4).
  40602. * JSN JOB SEQUENCE NUMBER FOR PARTNER (FCN = 3 OR 4).
  40603. * RSV RESERVED FOR CDC.
  40604. * ST RETURN STATUS CODE -
  40605. * 00 SWITCH COMPLETED NORMALLY.
  40606. * 01 FILE BUSY.
  40607. * 02 PARTNER ROLLED OUT.
  40608. * 03 INCORRECT FILE TYPE.
  40609. * 04 PARTNERS IDENTIFICATION NOT KNOWN.
  40610. * 05 NO SPACE IN RECEIVER-S NFL.
  40611. * 06 LOCAL FILE LIMIT (MAXIMUM NFL).
  40612. * 07 FILE *FNTS* NOT FOUND.
  40613.  
  40614.  
  40615. * GET FUNCTION CODE.
  40616.  
  40617. SST SB6 X5 CHECK *ADDR* WITHIN RANGE
  40618. LE B6,B1,CPE IF *ADDR* .LE. 1
  40619. MX2 -6
  40620. GT B6,B4,CPE IF *ADDR* .GE. FL
  40621. SX3 X5
  40622. SA1 B3 RA
  40623. IX6 X3+X1
  40624. ERX1 X6 GET (ADDR)
  40625. SA6 T1 SAVE ABSOLUTE ADDRESS OF PARAMETER BLOCK
  40626. LX1 59-0
  40627. NG X1,CPE IF COMPLETION BIT ALREADY SET
  40628. LX1 49 VALIDATE FUNCTION CODE
  40629. BX3 -X2*X1
  40630. SB5 X3-FCNM
  40631. ZR X3,CPE IF *FCN* INVALID
  40632. SX7 X3-1 FUNCTION CODE - 1
  40633. SX3 X3-CSUS
  40634. PL B5,CPE IF *FCN* INVALID
  40635. PL X3,SST2 IF CALL FROM SCP
  40636.  
  40637. * PROCESS REQUEST FROM UCP TYPE CALLER.
  40638.  
  40639. LX5 -18 GET SUBSYSTEM CODE
  40640. BX1 -X0*X5
  40641. LX5 18
  40642. SX2 X1-LSSI-1
  40643. NG X2,CPE IF NOT SUBSYSTEM
  40644. SA2 B7+AACW CHECK VALIDATION OF CALLER AS UCP
  40645. LX2 59-11
  40646. BX4 X1 SAVE SSID
  40647. SB3 SST1 SET EXIT ADDRESS FOR *RSC*
  40648. NG X2,RSC IF VALIDATED, RETURN SUBSYSTEM CONTROL
  40649. EQ CPE UNAUTHORIZED UCP
  40650.  
  40651. * RETURN FROM *RSC* WITH -
  40652. * (A2) SUBSYSTEM CPA + STSW.
  40653. * (B7) CALLER-S CPA.
  40654. * (X0) -7777B.
  40655. * (X3) SUBSYSTEM RA.
  40656. * (X4) SUBSYSTEM ID.
  40657. * (X6) SUBSYSTEM FL.
  40658. * (X7) FUNCTION CODE - 1.
  40659.  
  40660. * *RSC* ERROR EXIT ADDRESSES -
  40661.  
  40662. + VFD 12/SST7-SST1,18/SST7,12/SST10-SST1,18/SST1
  40663.  
  40664. SST1 SX1 SSIW CHECK SUBSYSTEM IDENTIFICATION
  40665. IX1 X3+X1
  40666. ERX1 X1
  40667. SB6 A2-STSW SCP CPA
  40668. BX1 X1-X4 COMPARE WITH SUBSYSTEM IDENTIFICATION
  40669. SX2 SSCR
  40670. IX2 X2+X3
  40671. ERX3 X2 SUBSYSTEM RECEIVING BUFFER
  40672. BX1 -X0*X1
  40673. LX3 1
  40674. NZ X1,CPE IF SUBSYSTEM NOT INITIALIZED
  40675. SB4 B7 UCP CPA
  40676. SA1 B4+JCIW CHECK IF UCP IS SUBSYSTEM
  40677. LX1 36
  40678. PL X3,SST1.1 IF NO RESTRICTIONS ON UCP ACCESS
  40679.  
  40680. * VALIDATE PERMISSION STATUS.
  40681.  
  40682. SA2 B4+SEPW READ SPECIAL ENTRY POINT WORD
  40683. BX1 -X0*X1
  40684. LX2 59-50
  40685. NG X2,SST1.1 IF SSJ= ENTRY POINT
  40686. ZR X1,CPE IF NOT AUTHORIZED UCP
  40687. SST1.1 SA3 T1 GET ABSOLUTE ADDRESS OF PARAMETER BLOCK
  40688. SX2 B1
  40689. IX2 X2+X3
  40690. SA1 B6+TFSW GET SCP EJT ORDINAL
  40691. LX1 12
  40692. BX7 -X0*X1
  40693. EWX7 X2
  40694. EQ SST3 CONTINUE PROCESSING
  40695.  
  40696. * PROCESS REQUEST FROM SCP TYPE CALLER.
  40697. * ENSURE THAT CALLER IS SUBSYSTEM AND
  40698. * THAT SUBSYSTEM IDENTIFICATION WORD MATCHES CALLER.
  40699.  
  40700. SST2 SA2 B7+JCIW CHECK SUBSYSTEM CALL
  40701. LX2 -24 GET SUBSYSTEM IDENTIFICATION
  40702. BX4 -X0*X2
  40703. SA1 RA
  40704. SX7 SSIW READ SUBSYSTEM IDENTIFICATION WORD
  40705. IX1 X1+X7
  40706. ERX1 X1
  40707. BX7 -X0*X1 SUBSYSTEM CODE
  40708. BX7 X4-X7
  40709. SX2 X4-LSSI-1
  40710. NZ X7,CPE IF SUBSYSTEM NOT INITIALIZED
  40711. NG X2,CPE IF CALLER IS NOT A SUBSYSTEM
  40712.  
  40713. * VALIDATE *JSN* AND *JEJT* FROM (*ADDR*+1).
  40714.  
  40715. SB6 CPE SET ERROR RETURN FOR *CUI*
  40716. SB5 SST2.1 SET NORMAL RETURN FOR *CUI*
  40717. EQ CUI CHECK UCP IDENTIFICATION
  40718.  
  40719. SST2.1 BX7 X6 SAVE JOB SEQUENCE NUMBER MATCH STATUS
  40720. SX6 RC04 * PARTNERS IDENTIFICATION NOT KNOWN.*
  40721. SB4 X5 UCP CPA
  40722. NZ X7,SST6 IF JOB SEQUENCE NUMBER MISMATCH
  40723. SX6 RC02 * PARTNER ROLLED OUT.*
  40724. NZ X2,SST6 IF UCP NOT AT CONTROL POINT
  40725. SA2 CMCL CHECK FOR STORAGE MOVE
  40726. AX2 48
  40727. LX2 7
  40728. BX2 X2-X5
  40729. ZR X2,SXS IF UCP MOVING, SET *X* STATUS
  40730. SA2 X5+STSW
  40731. SB6 X5 PARTNERS CPA
  40732. LX2 59-24
  40733. NG X2,SST6 IF ROLLOUT REQUESTED ON UCP
  40734.  
  40735. * CONTINUE PROCESSING ALL FUNCTIONS.
  40736. *
  40737. * (X3) = ABSOLUTE ADDRESS OF STATUS WORD.
  40738. * (X4) = SSID.
  40739. * (B4) = UCP CPA.
  40740. * (B6) = CPA OF PARTNER.
  40741. * (B7) = CPA OF CALLER.
  40742.  
  40743. * CHECK LONG TERM CONNECTION.
  40744.  
  40745. SST3 BX2 X4 SSID
  40746. BX5 X3 SAVE REGISTERS
  40747. SB5 B6
  40748. SB3 B4
  40749. SA3 B4+SSCW
  40750. SB4 SST3.1 RETURN ADDRESS FOR *CSC*
  40751. EQ CSC CHECK SUBSYSTEM CONNECTION
  40752.  
  40753. SST3.1 ZR B6,CPE IF NOT CONNECTED
  40754. SA3 A3
  40755. LX3 B6
  40756. SB6 B5
  40757. SB4 B3
  40758. LX3 59-3
  40759. PL X3,CPE IF NO LONG TERM CONNECTION
  40760. BX3 X5
  40761. ERX2 X3 READ (ADDR)
  40762.  
  40763. * VALIDATE *FNTS* ADDRESS.
  40764.  
  40765. LX2 59-12
  40766. SB5 B6 GET PARTNER FL STATUS WORD
  40767. NG X2,SST4 IF FCN = 1 OR 3
  40768. SB5 B7+ GET CALLER FL STATUS WORD
  40769. SST4 LX2 59-35-59+12
  40770. SA1 B5+FLSW
  40771. BX4 -X0*X2 FNTS
  40772. LX1 12
  40773. SB4 X4
  40774. BX2 -X0*X1 NFL SIZE
  40775. LX2 6
  40776. SB5 X2
  40777. MX6 -RMSK
  40778. GE B4,B5,CPE IF *FNTS* OUT OF RANGE
  40779. SB5 FNTN
  40780. LE B4,B5,CPE IF *FNTS* BELOW RANGE
  40781. LX1 -24 SHIFT TO RA
  40782. BX1 -X6*X1
  40783. LX1 6
  40784. IX4 X1-X4 READ *FNTS*
  40785. SX6 RC07 * FILE NOT FOUND.*
  40786. ERX2 X4
  40787. ZR X2,SST6 IF FNT EMPTY
  40788.  
  40789. * VALIDATE *FNTS* FILE TYPE.
  40790.  
  40791. MX6 -6
  40792. LX2 0-6
  40793. BX1 -X6*X2
  40794. SB4 X1+
  40795. SX6 RC03
  40796. SB5 59
  40797. SA1 SLFT SET VALID FILE TYPES MASK
  40798. SB4 B5-B4 SET SHIFT BIAS
  40799. LX1 X1,B4
  40800. PL X1,SST6 IF FILE TYPE NOT VALID
  40801.  
  40802. * CHECK FILE BUSY STATUS.
  40803.  
  40804. R= X6,RC01 * FILE BUSY.*
  40805. IX4 X4+X6
  40806. ERRNZ RC01-1
  40807. ERX1 X4
  40808. LX1 59-0
  40809. PL X1,SST6 IF FILE *FNTS* BUSY
  40810. LX1 1 SET FILE BUSY
  40811. BX7 -X6*X1
  40812. ERRNZ RC01-1
  40813. R= X6,RC00 NORMAL RETURN
  40814. ERX2 X3 GET FUNCTION CODE
  40815. LX2 59-12
  40816. NG X2,SST5 IF FCN = 1 OR 3
  40817. EWX7 X4 UPDATE FST
  40818. BX7 X4 SAVE FST ADDRESS FOR *1MA* CALL REJECT
  40819. SA7 SSTA
  40820. SST5 ERX2 X3 GET PARAMETER WORD
  40821. SX1 B6 PARTNER-S CP ADDRESS
  40822. MX7 -48
  40823. LX1 -12
  40824. BX2 -X7*X2 CLEAR *FNTR* FIELD
  40825. BX7 X0*X2 CLEAR STATUS FIELD
  40826. BX7 X1+X7 INSERT CP ADDRESS (FOR *1MA*)
  40827. BX7 X6+X7 INSERT RETURN STATUS
  40828. ZR X6,SST8 IF NO ERROR CODE RETURNED
  40829. SX6 B1 SET COMPLETION BIT
  40830. BX6 X6+X7
  40831. EWX6 X3
  40832. BX7 X7-X7 CLEAR RA+1
  40833. EQ MTRP RETURN TO CALLER
  40834.  
  40835. * ERROR PROCESSING.
  40836.  
  40837. SST6 SB6 B0 NO *FNTR* (CPA) ENTRY ON ERROR
  40838. LX6 1
  40839. EQ SST5 COMPLETE PROCESSING
  40840.  
  40841. SST7 EQ CPE ERROR EXIT FROM *RSC*
  40842.  
  40843. * CALL *1MA* TO PROCESS FILE SWITCH.
  40844.  
  40845. SST8 EWX7 X3
  40846. SB3 SST8.1 *ACB* RETURN ADDRESS
  40847. EQ ACB ASSIGN COMMUNICATION BUFFER
  40848.  
  40849. SST8.1 ZR X1,SST9 IF NO BUFFER AVAILABLE
  40850. BX6 X1 SET PARAMETER WORD
  40851. SA7 X1+B1 SET (*ADDR*) IN BUFFER
  40852. SA6 APQA
  40853. SA5 RA1 GET (RA+1)
  40854. ERX5 X5
  40855. SX1 B1 GET (*ADDR*+1)
  40856. IX3 X3+X1
  40857. ERX1 X3
  40858. MX0 -18
  40859. BX0 -X0*X5 EXTRACT *ADDR*
  40860. BX7 X1
  40861. SA7 A7+B1 SET (*ADDR*+1) IN BUFFER
  40862. SX5 B7+ SET CPA
  40863. SX2 3 *1MA* FUNCTION CODE
  40864. EQ SSC15 CALL *1MA*
  40865.  
  40866. SST9 ERX2 X4 RESET FILE NOT BUSY
  40867. SX6 B1
  40868. BX6 X2+X6
  40869. EWX6 X4
  40870. SST10 EQ SXS SET *X* STATUS
  40871.  
  40872. * *SST* REQUEST LEGAL FILE TYPES.
  40873.  
  40874. QFFT DECMIC QFFT QUEUE FILE
  40875. PMFT DECMIC PMFT DIRECT ACCESS PERMANENT FILE
  40876. LOFT DECMIC LOFT LOCAL FILE
  40877. LIFT DECMIC LIFT
  40878.  
  40879. SLFT CON 1S"QFFT"+1S"PMFT"+1S"LOFT"+1S"LIFT"
  40880. SSTA CON 0 FST ADDRESS
  40881. TITLE SCP SUBROUTINES.
  40882. CSC SPACE 4,20
  40883. ** CSC - CHECK SUBSYSTEM CONNECTION.
  40884. *
  40885. * CSC WILL DETERMINE IF THE UCP IS CURRENTLY CONNECTED TO
  40886. * THE SPECIFIED SUBSYSTEM AS A UCP, BASED ON WORD *SSCW*.
  40887. *
  40888. * ENTRY (X0) = -7777B.
  40889. * (X2) = SSID.
  40890. * (X3) = *SSCW* WORD TO CHECK.
  40891. * (B4) = RETURN ADDRESS.
  40892. *
  40893. * EXIT (B6) = SHIFT COUNT TO SHIFT *SSCW* SO THAT THE
  40894. * BYTE FOR THE SPECIFIED SUBSYSTEM IS IN THE
  40895. * BOTTOM. IF THE UCP IS NOT CONNECTED TO THE
  40896. * SPECIFIED SUBSYSTEM, THE SHIFT COUNT IS
  40897. * FOR AN EMPTY BYTE, IF THERE IS ONE.
  40898. * (B6) = 0, IF THE UCP IS CURRENTLY CONNECTED TO 5
  40899. * SCP-S, NONE OF WHICH IS THE SPECIFIED ONE.
  40900. *
  40901. * USES X - 1, 2, 3, 6.
  40902. * B - 6.
  40903.  
  40904.  
  40905. CSC BSS 0 ENTRY
  40906. SB6 60 INITIALIZE SHIFT COUNT
  40907. SX6 B0+
  40908. SX2 X2-LSSI SUBSYSTEM INDEX
  40909. CSC1 BX1 -X0*X3
  40910. LX3 -12
  40911. ZR X1,CSC3 IF NO CONNECTION IN THIS BYTE
  40912. AX1 6
  40913. IX1 X1-X2
  40914. ZR X1,/MONITOR/RB4 IF SPECIFIED SUBSYSTEM
  40915. CSC2 SB6 B6-12
  40916. NZ B6,CSC1 IF MORE TO CHECK
  40917. SB6 X6
  40918. JP B4 RETURN
  40919.  
  40920. CSC3 NZ X6,CSC2 IF EMPTY BYTE ALREADY FOUND
  40921. SX6 B6+
  40922. EQ CSC2 CONTINUE
  40923. CUI SPACE 4,25
  40924. ** CUI - CHECK UCP IDENTIFICATION.
  40925. *
  40926. * ENTRY (B5) = RETURN ADDRESS IF NO ERROR.
  40927. * (B6) = RETURN ADDRESS IF INVALID EJT ORDINAL.
  40928. * (X0) = -7777B.
  40929. * (T1) = ABSOLUTE ADDRESS OF PARAMETER BLOCK.
  40930. *
  40931. * EXIT (A1) = ABSOLUTE ADDRESS OF UCP EJT ENTRY.
  40932. * (X0) = -7777B.
  40933. * (X1) = *JSNE* WORD OF UCP EJT ENTRY.
  40934. * (X2) = UCP JOB STATUS - EXJS (IF A *DMP=* PROGRAM IS
  40935. * EXECUTING AND THE *DMP=* FLAG IS NOT SET IN THE
  40936. * REQUEST, THE UCP JOB STATUS WILL BE FLAGGED AS
  40937. * MXJS TO INDICATE JOB ROLLED OUT).
  40938. * (X3) = ABSOLUTE ADDRESS OF PARAMETER BLOCK.
  40939. * (X5) = UCP CONTROL POINT ADDRESS IF (X2) = 0.
  40940. * (X6) .NE. 0 IF SPECIFIED JSN DOES NOT MATCH JSN IN
  40941. * SPECIFIED EJT ORDINAL OR IF THE *DMP=* FLAG IS
  40942. * SET AND A *DMP=* PROGRAM IS NOT EXECUTING.
  40943. *
  40944. * USES A - 1, 2, 3.
  40945. * B - 6.
  40946. * X - 0, 1, 2, 3, 5, 6.
  40947.  
  40948.  
  40949. CUI BSS 0 ENTRY
  40950. SA3 T1 GET UCP IDENTIFICATION
  40951. SX1 B1
  40952. IX1 X3+X1
  40953. ERX2 X1
  40954. BX1 -X0*X2 UCP EJT ORDINAL
  40955. TX6 X1,-EJTM
  40956. ZR X1,RB6 IF NO EJT ORDINAL
  40957. PL X6,RB6 IF EJT ORDINAL EXCEEDS MAXIMUM
  40958. CX6 X1,EJT CONVERT EJT ORDINAL TO OFFSET
  40959. TA1 X6+JSNE,EJT GET UCP EJT ENTRY
  40960. MX6 24
  40961. BX0 X2
  40962. BX2 X6*X2 JOB SEQUENCE NUMBER FROM CALL
  40963. SB6 B5 SET NORMAL RETURN ADDRESS
  40964. BX5 X6*X1 JOB SEQUENCE NUMBER FROM EJT ENTRY
  40965. ZR X5,CUI1 IF EJT ENTRY NOT IN USE
  40966. BX6 X2-X5
  40967. SA2 A1+SCHE-JSNE
  40968. NZ X6,CUI1 IF JOB SEQUENCE NUMBER DOES NOT MATCH
  40969. LX0 59-12
  40970. LX2 59-32
  40971. BX0 X0-X2
  40972. MX6 -6
  40973. PL X0,CUI0.1 IF NO *DMP=* CONFLICT
  40974. PL X2,CUI1 IF *DMP=* REQUEST ON NON-*DMP=* PROGRAM
  40975. SX2 MXJS INDICATE *DMP=* ROLLOUT STATUS
  40976. EQ CUI0.2 SET EXIT CONDITIONS
  40977.  
  40978. CUI0.1 LX2 0-12-59+32
  40979. BX0 -X6*X1
  40980. BX5 -X6*X2 CP NUMBER IF *EXJS* STATUS
  40981. AX2 X0,B1 JOB STATUS
  40982. CUI0.2 LX5 7 CP ADDRESS IF *EXJS* STATUS
  40983. SX2 X2-EXJS
  40984. SX6 B0 SET NO ERROR
  40985. CUI1 MX0 -12
  40986. JP B6 RETURN
  40987. CWT SPACE 4,10
  40988. ** CWT - CALCULATE WORD TRANSFER SIZE (CM OR ECS).
  40989. *
  40990. * THE ENTIRE BLOCK WILL BE TRANSFERRED IF .LE. *MAXB* WORDS
  40991. * ARE REQUESTED, IF THE REMAINING *SFCALL* MONITOR MODE TIME
  40992. * IS SUFFICIENT, OR IF THE REQUESTED DATA TRANSFER SIZE IS
  40993. * WITHIN 40B WORDS OF THE AMOUNT THAT CAN BE TRANSFERRED IN
  40994. * THE REMAINING TIME. OTHERWISE, THE DATA TRANSFER SIZE WILL
  40995. * BE SET TO THE MAXIMUM OF *MAXB* AND THE REMAINING TIME
  40996. * TRANSFER SIZE (IN MULTIPLE OF 10B).
  40997. *
  40998. * ENTRY (X7) = WORD COUNT.
  40999. * (B6) = EXIT ADDRESS IF CM TRANSFER.
  41000. * = COMPLEMENT OF EXIT ADDRESS IF ECS TRANSFER.
  41001. * (B4) = SCP FL.
  41002. * (SSFE) = SFCALL REMAINING MONITOR MODE TIME.
  41003. *
  41004. * EXIT (X3) = SCP FL.
  41005. * (B4) = WORD TRANSFER SIZE.
  41006. * (SSFE) = MONITOR MODE TIME REMAINING AFTER TRANSFER.
  41007. *
  41008. * USES X - 1, 2, 3, 7.
  41009. * A - 1, 7.
  41010. * B - 4, 6.
  41011.  
  41012.  
  41013. CWT SX3 B4+ SAVE SCP FL
  41014. SA1 SSFE GET REMAINING MONITOR MODE TIME
  41015. TB4 SFCS SET CM TRANSFER RATE SHIFT
  41016. PL B6,CWT1 IF CM TRANSFER
  41017. TB4 SFES SET ECS TRANSFER RATE SHIFT
  41018. SB6 -B6 SET RETURN ADDRESS
  41019. CWT1 SX2 X7-MAXB-1
  41020. NG X2,CWT2 IF .LE. *MAXB* WORDS TO BE TRANSFERRED
  41021. AX1 B4 TRANSFER SIZE FOR REMAINING TIME
  41022. AX1 3 ROUND DOWN TO MULTIPLE OF 10B
  41023. LX1 3
  41024. IX2 X7-X1
  41025. NG X2,CWT2 IF TIME TO COMPLETE TRANSFER
  41026. AX2 5
  41027. ZR X2,CWT2 IF WITHIN 40B WORDS OF COMPLETION
  41028. SX7 MAXB TRANSFER AT LEAST *MAXB* WORDS
  41029. IX2 X1-X7
  41030. NG X2,CWT2 IF TRANSFER MINIMUM WORDS
  41031. LX7 X1
  41032. CWT2 BX2 X7 CALCULATE TRANSFER TIME
  41033. SA1 A1
  41034. LX2 B4
  41035. SB4 X7 SET TRANSFER SIZE
  41036. IX7 X1-X2 DECREMENT REMAINING MONITOR MODE TIME
  41037. SA7 A1
  41038. JP B6 RETURN
  41039. SCB SPACE 4,10
  41040. ** SCB - SET COMPLETION BIT SPECIFIED BY *ADDRESS*.
  41041. *
  41042. * SCB SETS THE COMPLETION BIT FOR AN SF.XXXX FUNCTION OR
  41043. * AN SF.XXXX FUNCTION WITHIN A LIST.
  41044. *
  41045. * ENTRY (A2) = SUBSYSTEM *STSW* WORD.
  41046. * (A5) = PPU OR ADDRESS.
  41047. * (X3) = SUBSYSTEM RA.
  41048. * (X5) = PPU OUTPUT REGISTER.
  41049. * (B3) = SUBSYSTEM FL.
  41050. * (B5) = RELATIVE ADDRESS OF COMPLETION BIT WORD.
  41051. *
  41052. * EXIT TO *PPRX* OR *PPR1* TO COMPLETE PP REQUEST.
  41053.  
  41054.  
  41055. SCB GE B5,B3,SCB3 IF WORD TO SET COMPLETE OUTSIDE SCP FL
  41056. AX5 18
  41057. SX4 B1
  41058. MX0 -6
  41059. SX1 B5
  41060. IX7 X3+X1
  41061. ERX1 X7 SET COMPLETION BIT
  41062. SA7 T1 SAVE ABSOLUTE ADDRESS
  41063. BX5 -X0*X5 REPLY CODE
  41064. BX7 X4+X1
  41065. SX6 X1-LIST CHECK LIST PROCESSING IN EFFECT
  41066. MX2 -54
  41067. BX0 -X0*X6
  41068. LX5 -6
  41069. BX1 -X2*X7
  41070. LX7 -6
  41071. BX6 X5+X1
  41072. ZR X0,SCB0 IF LIST PROCESSING IN EFFECT
  41073. SX0 X0-XLST+LIST
  41074. NZ X0,SCB2 IF NOT EXTENDED LIST PROCESSING
  41075. SX0 B1+
  41076. SCB0 ZR X5,SCB1 IF NO ERROR ENCOUNTERED
  41077. SX6 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
  41078. LX6 54
  41079. BX1 X1+X6
  41080. SCB1 SB6 X7
  41081. BX5 X4+X5 REPLY CODE AND COMPLETION BIT FOR SF.XXXX
  41082. GE B6,B3,SCB3 IF WORD TO SET COMPLETE OUTSIDE SCP FL
  41083. SX6 B6
  41084. IX6 X6+X3
  41085. ERX3 X6 FUNCTION PARAMETER WORD
  41086. SA6 T2 SAVE ABSOLUTE ADDRESS
  41087. IX0 X0+X4 LIST ADDRESS INCREMENT
  41088. LX0 6
  41089. BX2 -X2*X3
  41090. IX6 X0+X1 POINT TO NEXT FUNCTION IN LIST
  41091. BX7 X2+X5 SET COMPLETION BIT AND REPLY CODE
  41092. LX4 42
  41093. SA3 T2
  41094. EWX7 X3
  41095. IX6 X6-X4 DECREMENT NUMBER OF FUNCTIONS IN LIST
  41096. SCB2 BX7 X7-X7 CLEAR OUTPUT REGISTER, NO ERRORS
  41097. SA3 T1
  41098. EWX6 X3
  41099. EQ PPR1 EXIT TO STORE OUTPUT REGISTER
  41100.  
  41101. * EXIT FOR INVALID SCP PARAMETERS. (ALSO ENTERED HERE
  41102. * FROM *SSR*.)
  41103.  
  41104. SCB3 SA2 A2-STSW+TFSW GET SCP EJT ORDINAL
  41105. MX0 -12
  41106. LX2 12
  41107. BX2 -X0*X2
  41108. CX1 X2,EJT CONVERT EJT ORDINAL TO OFFSET
  41109. TA1 X1+JSNE,EJT GET SCP JOB SEQUENCE NUMBER
  41110. SX7 X2+5*10000B STATUS = SCP INVALID PARAMETERS
  41111. MX0 24
  41112. BX1 X0*X1
  41113. BX7 X7+X1
  41114. LX7 24
  41115. SA7 A5 STORE PP OUTPUT REGISTER
  41116. EQ PPRX EXIT
  41117. SSR SPACE 4,10
  41118. ** SSR - SET SPECIAL RECEIVING BUFFER.
  41119. *
  41120. * SSR SETS UP A DATA TRANSFER TO THE SCP RECEIVING BUFFER
  41121. * POINTED TO BY *SSCR* WITHIN THE SUBYSTEM FL.
  41122. *
  41123. * ENTRY (A2) = SUBSYSTEM *STSW* WORD.
  41124. * (A5) = PPU OR ADDRESS.
  41125. * (X0) = -7777B.
  41126. * (X5) = PPU OUTPUT REGISTER.
  41127. * (X3) = SUBSYSTEM RA.
  41128. * (X7) = NOT READY FOR DATA STATUS (2).
  41129. * (B3) = SUBSYSTEM FL.
  41130. *
  41131. * EXIT (X7) = NEW PP OUTPUT REGISTER.
  41132. * TO *HNG* IF WORD COUNT EXCEEDS MESSAGE BUFFER LENGTH.
  41133. * TO *PPR1* IF NOT READY FOR DATA.
  41134. * TO *SCB3* IF BUFFER ADDRESS OUTSIDE SCP FL.
  41135. * TO *TDA2.3* IF TRANSFER COMPLETE.
  41136. * TO *TDA3* IF IDENTIFICATION WORD NOT INITIALIZED.
  41137.  
  41138.  
  41139. SSR SX1 SSIW CHECK SUBSYSTEM IDENTIFICATION WORD
  41140. SX2 X1+B1 SUBSYSTEM RECEIVING BUFFER POINTER WORD
  41141. ERRNZ SSIW+1-SSCR CODE DEPENDS ON VALUE
  41142. IX1 X1+X3
  41143. MX4 6 EXTRACT WORD COUNT
  41144. ERX1 X1
  41145. LX5 -24 COMPARE SUBSYSTEM IDENTIFICATIONS
  41146. BX4 X4*X5
  41147. BX5 X1-X5
  41148. LX4 6
  41149. IX1 X2+X3
  41150. ERX1 X1
  41151. SB5 X4
  41152. BX2 -X0*X5
  41153. LX5 X1
  41154. SX1 B1
  41155. SX4 X4-7 VALIDATE THE WORD COUNT
  41156. NZ X2,TDA3 IF IDENTIFICATION WORD NOT INITIALIZED
  41157. PL X4,HNG IF WC .GT. MESSAGE BUFFER
  41158. SA4 A5+B1
  41159. LX4 59-20
  41160. PL X4,SSR1 IF NOT SUBSYSTEM ABORTED *TDAM* CALL
  41161. SA4 RC CHECK RCLP REQUEST
  41162. IX1 X3+X1
  41163. ERX1 X1 RA+1 OF SCP RECEIVING NOTIFICATION
  41164. BX6 X4-X1
  41165. AX6 18 COMPARE SUBSYSTEM IDENTIFIERS
  41166. SA4 A5+2
  41167. BX6 X6-X4
  41168. SX1 X1 ADDRESS OF RECALL WORD
  41169. NZ X6,SSR1 IF RECEIVER NOT IN RECALL ON ABORTED SCP
  41170. IX4 X3+X1 ABSOLUTE ADDRESS OF RECALL WORD
  41171. ERX1 X4
  41172. SX6 ES1+1 SUBSYSTEM NOT PRESENT STATUS
  41173. BX6 X1+X6
  41174. EWX6 X4
  41175. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  41176. SSR1 NG X5,PPR1 IF NOT READY FOR DATA
  41177. SB6 X5
  41178. MX6 1
  41179. ZR B6,PPR1 IF NOT READY FOR DATA
  41180. LE B6,B1,SCB3 IF BUFFER ADDRESS INVALID
  41181. SX0 X5+
  41182. SB6 X5+B5 CHECK ADDRESS OUT OF RANGE
  41183. IX0 X0+X3 ABSOLUTE ADDRESS OF RECEIVING BUFFER
  41184. GT B6,B3,SCB3 IF BUFFER ADDRESS OUTSIDE SCP FL
  41185. SA4 A5+B1 MOVE 2 WORDS OF DATA TO RECEIVING BUFFER
  41186. BX6 X6+X5 SET CPU INTERLOCK BIT
  41187. LX7 X4
  41188. SA4 A4+B1
  41189. EWX7 X0
  41190. BX7 X4
  41191. SX1 B1
  41192. IX0 X1+X0
  41193. SB5 B5-2
  41194. EWX7 X0
  41195. LE B5,B0,SSR3 IF ALL WORDS MOVED
  41196. SSR2 SA4 A4+B1 MOVE REMAINING WORDS
  41197. IX0 X0+X1
  41198. SB5 B5-1
  41199. BX7 X4
  41200. EWX7 X0
  41201. GT B5,B0,SSR2 IF MORE WORDS TO MOVE
  41202. SSR3 BX7 X7-X7
  41203. SX1 SSCR
  41204. IX1 X1+X3
  41205. TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
  41206. EWX6 X1 SUBSYSTEM RECEIVING BUFFER POINTER WORD
  41207. EQ TDA2.3 RESTART SCP CPU
  41208.  
  41209. ENDBLK
  41210. BLOCK SCPUEC,(SCP FACILITY ECS INTERFACE.)
  41211. SFE SPACE 4,10
  41212. ** SFE - SFCALL SF.READ/SF.WRIT ECS TRANSFER.
  41213. *
  41214. * SF.READ - TRANSFER DATA FROM UCP CM TO SCP ECS (WRITE ECS)
  41215. * OR TRANSFER DATA FROM UCP ECS TO SCP CM (READ ECS).
  41216. *
  41217. * SF.WRIT - TRANSFER DATA FROM SCP CM TO UCP ECS (WRITE ECS)
  41218. * OR TRANSFER DATA FROM SCP ECS TO UCP CM (READ ECS).
  41219. *
  41220. * ENTRY (A0) = CPU NUMBER (0 OR 1).
  41221. * (X0) = -7777B.
  41222. * (X2) = EXTENDED ADDRESS WORD.
  41223. * (X4) = LIST PROCESSING FLAG.
  41224. * (X5) = 0, IF SF.WRIT OR SF.XWRT, .LT. 0 IF SF.READ
  41225. * OR SF.XRED.
  41226. * (X6) = UCP/SCP ABSOLUTE CM ADDRESS.
  41227. * (X7) = WORD COUNT.
  41228. * ((B3)) = SCP RA.
  41229. * (B4) = SCP FL.
  41230. * (B7) = SCP CPA.
  41231. *
  41232. * EXIT TO */MONITOR/S404* IF ECS TRANSFER COMPLETE.
  41233. * (A0) = CPU NUMBER.
  41234. * (X2) = LIST PROCESSING FLAG.
  41235. * (X3) = SCP FL.
  41236. * (X5) = TRANSFER SIZE.
  41237. *
  41238. * TO */MONITOR/CPE* IF NOT IN CPU 0 FOR ECS TRANSFER.
  41239. * (A0) UNCHANGED.
  41240. *
  41241. * TO */MONITOR/SSF11* IF UCP ECS ADDRESS ILLEGAL.
  41242. * (A0), (B4) UNCHANGED.
  41243. *
  41244. * TO */MONITOR/SSF20* IF SCP ECS ADDRESS ILLEGAL.
  41245. * (A0), (B4) UNCHANGED.
  41246. *
  41247. * TO */MONITOR/SSF12* IF ECS ABORT OR PARITY ERROR.
  41248. * (A0), (X0), (B4) RESTORED.
  41249. * (X5) = REPLY CODE.
  41250. * (B6) .GT. 0 TO INDICATE NOT FATAL OR FORCED ERROR.
  41251. *
  41252. * USES A - 0, 1.
  41253. * B - 4, 5, 6.
  41254. * X - ALL.
  41255. *
  41256. * CALLS /MONITOR/CWT.
  41257. *
  41258. * MACROS PER, RUE, WUE.
  41259.  
  41260.  
  41261. * PROCESS UCP ECS TO/FROM SCP CM TRANSFER.
  41262.  
  41263. SFE LX4 -18 GET UCP CONTROL POINT ADDRESS
  41264. SA1 X4+ECSW GET UCP ECS RA AND FL
  41265. LX4 18
  41266. LX2 -24
  41267. SB5 /MONITOR/SSF11-/MONITOR/SSF20 SET ADDRESS ERROR EXIT
  41268. EQ SFE2 VALIDATE UCP ECS ADDRESS
  41269.  
  41270. * PROCESS UCP CM TO/FROM SCP ECS TRANSFER.
  41271.  
  41272. SFE1 SB5 B0 SET ADDRESS ERROR EXIT BIAS
  41273. SA1 B7+ECSW GET SCP ECS RA AND FL
  41274. BX5 -X5 SET WE FOR SF.READ, RE FOR SF.WRIT
  41275.  
  41276. * VALIDATE SCP OR UCP ECS ADDRESS.
  41277.  
  41278. SFE2 BX3 -X0*X1 SCP OR UCP ECS FL/*UEBS*
  41279. LX1 -12
  41280. BX1 -X0*X1 SCP OR UCP ECS RA/*UEBS*
  41281. TLX3 9,UESC
  41282. MX0 -24
  41283. TLX1 9,UESC
  41284. BX2 -X0*X2 SCP OR UCP RELATIVE ECS ADDRESS
  41285. IX3 X3-X2 CHECK BLOCK LWA .GT. ECS FL
  41286. IX0 X2+X1 SCP OR UCP ABSOLUTE ECS ADDRESS
  41287. SB6 SFE3 SET RETURN ADDRESS FOR *CWT*
  41288. IX3 X3-X7
  41289. SB6 -B6 INDICATE ECS TRANSFER
  41290. PL X3,/MONITOR/CWT IF ECS ADDRESS LEGAL
  41291. JP B5+/MONITOR/SSF20 EXIT TO SET ERROR CODE
  41292.  
  41293. SFE3 SB5 A0 SAVE CPU NUMBER
  41294. SA0 X6 SET SCP OR UCP CM ADDRESS
  41295. TNZB5 /MONITOR/CPE,NOTDCE IF NOT CPU 0
  41296. MX2 -24
  41297. BX0 -X2*X0
  41298. SB6 SFE5 SET RETURN ADDRESS
  41299. BX6 -X2*X6
  41300. LX6 30
  41301. BX0 X6+X0
  41302. BX2 X4 SAVE LIST PROCESSING FLAG
  41303. PL X5,SFE4 IF WRITE ECS
  41304. RUE MONITOR READ (B4) WORDS FROM USER ECS
  41305. PER /SCPUEC/SFE6,/ECS/PER IF PARITY ERROR
  41306. EQ SFE5 RESTORE REGISTERS AND EXIT
  41307.  
  41308. SFE4 WUE MONITOR WRITE (B4) WORDS TO USER ECS
  41309. PER /SCPUEC/SFE6,/ECS/PER IF PARITY ERROR
  41310. SFE5 SA0 B5 RESET CPU NUMBER
  41311. SX5 B4 SET TRANSFER LENGTH
  41312. EQ /MONITOR/S404 EXIT
  41313.  
  41314. SFE6 SX5 RC56 * ECS ABORT/PARITY ERROR.*
  41315. SA0 B5 RESET CPU NUMBER
  41316. MX0 -12
  41317. SB4 X3 RESTORE SCP FL
  41318. SB6 B1 INDICATE NO ERROR
  41319. EQ /MONITOR/SSF12 SET COMPLETE BIT AND ERROR CODE
  41320.  
  41321. ENDBLK
  41322. BLOCK SUBCP,(SUB-CONTROL POINT PROCESSING.),MONITOR
  41323. BCE SPACE 4,15
  41324. ** BCE - BEGIN CONTROL POINT EXECUTIVE.
  41325. *
  41326. * ENTRY (B7) = CONTROL POINT ADDRESS.
  41327. *
  41328. * EXIT TO *ESC0*.
  41329. *
  41330. * USES X - 0, 2, 4.
  41331. * A - 2.
  41332. * B - 3.
  41333. *
  41334. * CALLS CPT.
  41335.  
  41336.  
  41337. BCE SB3 BCE1 *CPT* RETURN ADDRESS
  41338. TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
  41339. ,/CPT)
  41340.  
  41341. BCE1 SA2 B7+STSW
  41342. MX4 1
  41343. SX0 B1 SET CP EXEC AS NEXT JOB
  41344. LX4 56-59 SUB-CP BIT
  41345. EQ ESC0 END SUB-CONTROL POINT
  41346. ESC SPACE 4,25
  41347. ** ESC - END SUB-CONTROL POINT.
  41348. *
  41349. * CLEAR SUB-CONTROL POINT ACTIVE STATUS, RELATIVIZE SUB-CONTROL
  41350. * POINT EXCHANGE PACKAGE, AND RETURN CONTROL TO NEW JOB OR
  41351. * CONTROL POINT EXECUTIVE.
  41352. *
  41353. * IF ENTERED AT *ESC*, THE CPU WILL BE SWITCHED TO A NEW JOB
  41354. * ON EXIT TO *BNJ*. IF ENTERED AT *ESC0*, CONTROL WILL BE
  41355. * RETURNED TO THE CONTROL POINT EXECUTIVE.
  41356. *
  41357. * ENTRY (X2) = STSW OF CONTROL POINT.
  41358. * (X4) = SUB CONTROL POINT ACTIVE BIT.
  41359. * (A2) = ADDRESS OF STSW IN CONTROL POINT AREA.
  41360. * (X1 BITS 0-17) = CONTROL POINT ADDRESS IF ENTERED AT
  41361. * *ESC*.
  41362. *
  41363. * EXIT TO *BNJ3* TO START NEW JOB IF ENTERED AT *ESC*.
  41364. * (CPAL+A0) SET WITH USER EXCHANGE PACKAGE ADDRESS IF
  41365. * ENTERED AT *ESC*.
  41366. * TO *BNJ20* TO RESTART CONTROL POINT EXECUTIVE IF
  41367. * ENTERED AT *ESC0*.
  41368. *
  41369. * USES X - 1, 2, 3, 4, 5, 6, 7.
  41370. * A - 2, 3, 4, 6, 7.
  41371. * B - 2, 3, 6, 7.
  41372.  
  41373.  
  41374. ESC SB3 B0+ SET NEW JOB AS NEXT ONE
  41375. SB7 X1+ SET CONTROL POINT ADDRESS
  41376.  
  41377. * ENTRY FROM *BCE*.
  41378.  
  41379. ESC0 BX7 -X4*X2 CLEAR SUBCP ACTIVE BIT
  41380. SA7 A2
  41381.  
  41382. * RELATIVIZE SUB-CONTROL POINT P, RA, AND RAX.
  41383.  
  41384. SA3 B7+4 READ RAX(CP)
  41385. SA4 B2+4 READ RAX(S)
  41386. MX2 24
  41387. BX3 X2*X3
  41388. IX7 X4-X3
  41389. SA3 B7+B1 READ RA(CP)
  41390. SA7 A4+
  41391. SA4 B2+1 READ RA(S)
  41392. BX1 X2*X3
  41393. IX7 X4-X1
  41394. SA7 A4+
  41395. SA3 RTCL CHECK FOR TIME LIMIT
  41396. SA4 ACPL+A0
  41397. BX3 -X2*X3
  41398. BX4 -X2*X4
  41399. AX1 36
  41400. IX4 X3-X4
  41401. SA3 A2-2 READ X6
  41402. SX5 B1 READ RA+1
  41403. IX5 X5+X1
  41404. ERX2 X5
  41405. MX6 -18
  41406. BX7 -X6*X2
  41407. IX1 X7+X1 ADDRESS OF USER EXCHANGE PACKAGE
  41408. UX3,B6 X3 CHECK ERROR FLAG
  41409. NZ B3,ESC1 IF TO RETURN TO CP EXECUTIVE
  41410. NZ B6,ESC1 IF ERROR FLAG
  41411. NG X4,ESC2 IF NOT TIME LIMIT
  41412. SB6 TLET
  41413.  
  41414. * TERMINATE SUB-CONTROL POINT ACTIVITY.
  41415.  
  41416. ESC1 SA4 A3-16B+12B READ START TIME
  41417. PX7 X3,B6
  41418. BX6 X4
  41419. SA4 B7+CPTW
  41420. IX6 X4-X6 COMPUTE TIME USED
  41421. SA6 A3+B1
  41422. SA7 A3+
  41423. BX7 X7-X7 CLEAR RA+1
  41424. EWX7 X5
  41425. ZR B3,ESC3 IF NOT TO RETURN TO CP EXECUTIVE
  41426.  
  41427. * EXIT TO CONTROL POINT EXECUTIVE.
  41428.  
  41429. SA2 B7+1 GET CONTROL POINT RA
  41430. SX3 B7
  41431. SX7 B7 SET EXCHANGE PACKAGE ADDRESS
  41432. LX3 24
  41433. BX7 X3+X7 SET CONTROL POINT ADDRESS
  41434. MX6 24
  41435. SA7 CPAL+A0 UPDATE *CPAL*
  41436. SX3 B2 SET EXCHANGE ADDRESS
  41437. BX6 X6*X2 SET CONTROL POINT RA
  41438. IX1 X3-X1 SET EXCHANGE PACKAGE MOVE DIFFERENTIAL
  41439. SA6 ACPL+A0 UPDATE *ACPL*
  41440. SB2 B7 SET CP EXECUTIVE EXCHANGE ADDRESS
  41441. EQ /MONITOR/BNJ20 COPY EXCHANGE PACKAGE
  41442.  
  41443. * SET REMAINING TIME IN RA+1.
  41444.  
  41445. ESC2 LX4 18 SET REMAINING TIME REQUESTED IN XJP CALL
  41446. LX6 18
  41447. BX6 X6*X2 CLEAR OLD TIME
  41448. BX6 -X4+X6 SET NEW TIME
  41449. EWX6 X5
  41450.  
  41451. * EXIT TO BEGIN NEW JOB.
  41452.  
  41453. ESC3 SA3 CPAL+A0 SET *CPAL* FOR EXCHANGE PACKAGE COPY
  41454. MX6 36
  41455. BX7 X6*X3
  41456. BX7 X7+X1 INSERT USER EXCHANGE PACKAGE ADDRESS
  41457. SA7 A3
  41458. EQ /MONITOR/BNJ3 SELECT NEXT JOB
  41459. TITLE CPU REQUEST PROCESSORS.
  41460. SSE SPACE 4,10
  41461. ** SSE - SET SUBCONTROL POINT ERROR.
  41462. *
  41463. * ENTRY (X7) = ERROR FLAG.
  41464. * (B7) = CP ADDRESS.
  41465. *
  41466. * EXIT TO *SEF1* IF NOT ALLOWABLE SUBCP ERROR.
  41467. * TO *BCE* IF SUBCP ERROR ALLOWED.
  41468. *
  41469. * USES X - 1, 2, 6.
  41470. * B - 3.
  41471. * A - 2, 6.
  41472.  
  41473.  
  41474. SSE SA2 SSEA
  41475. SB3 X7
  41476. LX1 X2,B3
  41477. PL X1,SEF1 IF ERROR NOT ALLOWED
  41478. SA2 B7+16B SET ERROR IN X6 OF XP
  41479. PX6 X2,B3
  41480. SA6 A2
  41481. EQ BCE BEGIN CONTROL POINT EXECUTIVE
  41482.  
  41483. SSEA BSS 0 ALLOWABLE SUBCP ERROR FLAGS
  41484. POS 60-ARET
  41485. VFD 1/1
  41486. POS 60-PSET
  41487. VFD 1/1
  41488. POS 60-TLET
  41489. VFD 1/1
  41490. BSS 0
  41491. XJP SPACE 4,25
  41492. *** *XJP*.
  41493. * INITIATE SUB-CONTROL POINT.
  41494. *
  41495. *T 18/ *XJP*,6/ ,18/ TIML,18/ ADDR
  41496. * TIML CPU TIME LIMIT FOR SUB-CONTROL POINT IN MILLISECONDS.
  41497. * ADDR ADDRESS OF SUB-CONTROL POINT EXCHANGE PACKAGE.
  41498. *
  41499. * RESPONSE AFTER CONTROL RETURNED TO CALLER.
  41500. *T, X2 60/ CPTW BEFORE SUBCP INITIATION.
  41501. *T, X6 12/ 200B+EF,48/ RA OF SUBCP.
  41502. *T, X7 60/ CPU TIME USED BY SUBCP.
  41503. * THIS TIME HAS THE ACCOUNTING MULTIPLIERS APPLIED
  41504. * AND IS IN QUARTER NANO SECONDS.
  41505. * EF ERROR FLAG CAUSED BY SUB-CONTROL POINT.
  41506. *
  41507. * IF AN ERROR IS ENCOUNTERED DURING PROCESSING OF THE
  41508. * *XJP* REQUEST, CERTAIN VALUES MAY HAVE ALREADY BEEN
  41509. * ALTERED BY CPUMTR. THESE INCLUDE:
  41510. * RA, EM, AND RAX IN THE SUB-CP EXCHANGE PACKAGE.
  41511. * X2, AND X6 OF THE REQUESTING PROGRAM.
  41512.  
  41513.  
  41514. XJP SB5 X5 ADDR
  41515. MX0 24
  41516. SB6 X5+20B
  41517. LE B5,B1,CPE IF ILLEGAL ADDRESS
  41518. GE B6,B4,CPE IF ILLEGAL ADDRESS
  41519. NG B6,CPE IF ILLEGAL ADDRESS
  41520. SA4 A0+TXJP READ EXCHANGE PACKAGE ADDRESS AND (MA)
  41521.  
  41522. * MOVE EXCHANGE PACKAGE TO SUB CONTROL POINT EXCHANGE AREA.
  41523.  
  41524. SA5 B3 RA
  41525. SX6 B5 EXCHANGE ADDRESS
  41526. IX5 X5+X6 ABSOLUTE ADDRESS OF SUBCP XP
  41527. ERX3 X5 READ P
  41528. LX2 36 POSITION RA
  41529. BX6 X3
  41530. SX3 B1
  41531. IX5 X5+X3 RA ADDRESS
  41532. ERX3 X5 READ RA
  41533. SA6 X4
  41534. IX7 X2+X3 RA(S) + RA(CP)
  41535. BX3 X0*X3
  41536. LX3 24
  41537. PX6 X3
  41538. SA7 X4+B1
  41539. IX1 X1-X3 FL(CP) - RA(S)
  41540. SX3 B1
  41541. IX5 X5+X3 FL ADDRESS
  41542. ERX3 X5 FL(S)
  41543. SA6 B2+16B SET EXIT CONDITION IN (X6)
  41544. BX2 X0*X3
  41545. BX7 X3
  41546. LX2 24
  41547. SA7 A7+B1
  41548. IX1 X1-X2 FL(CP) - RA(S) - FL(S)
  41549. SX3 B1
  41550. IX5 X5+X3
  41551. ERX3 X5 EM
  41552. SX7 B1 CLEAR COPY FLAG
  41553. LX7 56-0
  41554. TSX2 UEM SET COPY FLAG IF REQUIRED
  41555. BX3 -X7*X3
  41556. LX2 56-0
  41557. BX7 X2+X3
  41558. SA2 B2+4 READ RAX(CP)
  41559. SX3 B1
  41560. IX5 X5+X3
  41561. ERX3 X5 RAX(S)
  41562. NG X1,CPE IF RA(S) + FL(S) .GT. FL(CP)
  41563. SA1 A2+B1 FLX(CP)
  41564. BX2 X0*X2
  41565. BX1 X0*X1
  41566. IX6 X2+X3 RAX(S) + RAX(CP)
  41567. BX3 X0*X3
  41568. SA7 A7+B1
  41569. IX1 X1-X3 FLX(CP) - RAX(S)
  41570. SX3 B1
  41571. IX5 X5+X3
  41572. ERX3 X5 FLX(S)
  41573. SA6 A7+B1
  41574. BX7 X3
  41575. BX3 X0*X3
  41576. LX4 36
  41577. IX1 X1-X3 FLX(CP) - RAX(S) - FLX(S)
  41578. SX3 B1
  41579. IX5 X5+X3
  41580. ERX3 X5 MA
  41581. LX1 24
  41582. NG X1,CPE IF RAX(S) + FLX(S) .GT. FLX(CP)
  41583. BX3 -X0*X3
  41584. SA7 A6+B1
  41585. BX7 X4+X3
  41586. MX6 -11B SET LENGTH OF MOVE
  41587. SA7 A7+B1
  41588. SX3 B1
  41589. IX5 X5+X3
  41590. ERX3 X5
  41591. BX3 -X0*X3
  41592. BX3 X4+X3
  41593.  
  41594. * MOVE REMAINDER OF EXCHANGE PACKAGE.
  41595.  
  41596. XJP1 BX7 X3
  41597. AX6 1
  41598. SA7 A7+B1
  41599. SX3 B1
  41600. IX5 X5+X3
  41601. ERX3 X5
  41602. NZ X6,XJP1 IF NOT END OF MOVE
  41603. SA3 B7+STSW SET SUBCP ACTIVE BIT
  41604. SX7 B1
  41605. LX7 56
  41606. BX7 X7+X3
  41607. SA7 A3
  41608. SB3 XJP2 *CPT* RETURN ADDRESS
  41609. TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
  41610. ,/CPT)
  41611.  
  41612. XJP2 SA2 RA1 CHECK FOR INITIAL CALL
  41613. SX1 B1
  41614. ERX5 X2
  41615. LX1 41
  41616. BX7 X1+X5
  41617. BX1 X1*X5
  41618. EWX7 X2 SET NON-INITIAL CALL FLAG
  41619. NZ X1,XJP3 IF NOT INITIAL CALL
  41620. SA6 B2+12B SET (X2) TO START TIME
  41621. XJP3 SA2 A0+TXJP
  41622. SA1 RTCL
  41623. SX7 B7 CONTROL POINT ADDRESS
  41624. LX5 -18
  41625. MX0 -36
  41626. LX7 24
  41627. MX6 -18
  41628. SA4 X2+B1 RA(S)
  41629. BX7 X7+X2 SET CP AND EXCHANGE PACKAGE ADDRESSES
  41630. BX1 -X0*X1 MILLISECOND CLOCK
  41631. BX5 -X6*X5 REQUESTED TIME LIMIT
  41632. SA7 CPAL+A0 UPDATE *CPAL*
  41633. IX5 X5+X1
  41634. BX4 X0*X4 SUBCP RA
  41635. SX3 B2 SET OLD EXCHANGE ADDRESS
  41636. BX6 X5+X4
  41637. SX1 B2-B7 SET EXCHANGE PACKAGE MOVE DIFFERENTIAL
  41638. SA6 ACPL+A0 UPDATE *ACPL*
  41639. SB2 X2+ SET SUBCP EXCHANGE ADDRESS
  41640. EQ /MONITOR/BNJ20 CHECK EXCHANGE PACKAGE COPY
  41641. TXJP SPACE 4,10
  41642. ** TXJP - TABLE OF SUB-CONTROL POINT EXCHANGE PACKAGES.
  41643. *
  41644. * INDEXED BY CPU NUMBER.
  41645.  
  41646.  
  41647. TXJP VFD 42/0,18/SCX
  41648. VFD 42/0,18//DCP/SCX1
  41649. SPACE 4
  41650. ** SCX - SUB-CONTROL POINT EXCHANGE PACKAGE.
  41651.  
  41652.  
  41653. SCX EXP
  41654.  
  41655. ENDBLK
  41656. BLOCK CSE,(CLEAR CM STORAGE VIA ECS.),PROGRAM
  41657. CSE SPACE 4,10
  41658. ** CSE - CLEAR CM STORAGE VIA ECS. (PROGRAM MODE)
  41659. *
  41660. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  41661. * (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
  41662. * (X5) = PPU OUTPUT REGISTER.
  41663. *
  41664. * USES X - 0, 1, 2, 3, 5.
  41665. * A - 0, 1, 2, 3.
  41666. * B - 3, 4, 5.
  41667.  
  41668.  
  41669. CSE TA2 EEN GET ECS EST ENTRY
  41670. LX2 59-49
  41671. TNG X2,(/PROGRAM/CSC,CMU,/PROGRAM/CSP) IF EM OFF OR DOWN
  41672.  
  41673. * ENTRY FOR CME MAINFRAMES.
  41674. * THE UEM FAKE READ IS USED ON ALL CYBER 170-8X5
  41675. * MAINFRAMES WHEN NO EXTERNAL ECS DEVICE IS DEFINED.
  41676. * NOTE THAT EVEN WHEN EXTERNAL ECS IS DEFINED ON A
  41677. * CYBER 170-865/875, THE SMU DOES NOT ACCESS THE DEVICE
  41678. * IF A FAKE READ IS ISSUED, SO NO CHECK IS NEEDED FOR EM
  41679. * DEVICE LOGICALLY TURNED OFF.
  41680.  
  41681. CSE1 LX5 59-43
  41682. TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEAR USER ECS
  41683. LX5 -24-59+43
  41684. SB3 X5 (B3) = 0 IF LIST PRESENT
  41685. NZ B3,CSE2 IF NOT LIST OPTION
  41686. SA1 A5+B1 GET LIST ENTRY
  41687. CSE2 SA0 X1
  41688. MX5 -21
  41689. TSX0 (LCCB-1,CP176,1-1)
  41690. SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
  41691. NZ X0,CSE3 IF NOT A 990
  41692. SA3 ECRL GET RAE FOR ZERO UEM BLOCK
  41693. LX3 0-12
  41694. MX0 -24
  41695. BX0 -X0*X3
  41696. TLX0 9-21+60,UESC
  41697. CSE3 BX5 -X5*X1 GET CM ADDRESS
  41698. AX1 24
  41699. SB5 X1
  41700. TLX0 (0,CP176,21)
  41701. TLX0 (3,ESM170,0)
  41702. TLX0 (4,UEM180,0)
  41703. LX5 30
  41704. BX0 X0+X5 COMBINE CM AND EM ADDRESSES
  41705. SB4 MECB SET WORD CLEAR COUNT
  41706. SX5 B4
  41707. LX5 30
  41708. CSE4 GE B5,B4,CSE5 IF MORE THAN 400B WORDS LEFT
  41709. SB4 B5+ PICK UP REMAINDER
  41710. CSE5 RE B4 CLEAR MEMORY FROM EM
  41711. SB0 B0+ HALF EXIT FOR FAKE READ
  41712. SB5 B5-B4 DECREMENT WORD COUNT
  41713. SA0 A0+B4 INCREMENT ADDRESS
  41714. IX0 X0+X5
  41715. GT B5,CSE4 IF MORE WORDS TO CLEAR
  41716. TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
  41717. SA1 A1+1 GET NEXT LIST ENTRY
  41718. NZ X1,CSE2 IF NOT END OF LIST
  41719. TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
  41720.  
  41721. ENDBLK
  41722. BLOCK UEC,(USER ECS PROCESSING ROUTINES.)
  41723. SPACE 4
  41724. ** ASSEMBLE CONSTANTS.
  41725.  
  41726. MECB EQU 400B
  41727. SPACE 4
  41728. ** MONITOR/UEC BLOCK EQUIVALENCES.
  41729.  
  41730. CPE EQU /MONITOR/CPE
  41731. MTRX EQU /MONITOR/MTRX
  41732. SFL2 EQU /MONITOR/SFL2
  41733. UMT1 EQU /MONITOR/UMT1
  41734. UMTA EQU /MONITOR/UMTA
  41735. MFX SPACE 4,10
  41736. ** MFX - CHANGE FL FOR USER EXTENDED MEMORY.
  41737. *
  41738. * ENTRY (X0) = INCREMENT.
  41739. * (B3) = ADDRESS OF CP USING CURRENT CPU.
  41740. * (B6) = EXCHANGE PACKAGE ADDRESS.
  41741. * (B7) = CP/PCP ADDRESS.
  41742. *
  41743. * USES X - 1, 2, 3, 4, 6, 7.
  41744. * A - 1, 2, 3, 4, 6, 7.
  41745.  
  41746.  
  41747. MFX BSS 0 ENTRY
  41748. SA3 B7+ECSW READ FL CONTROL WORD
  41749. TX6 UEM
  41750. SA4 B7+3 SET UEM ENABLED FLAG
  41751. LX6 56-0
  41752. BX6 X4+X6
  41753. SA6 A4
  41754. IX7 X3+X0
  41755. SA7 A3+ UPDATE FLX IN FL CONTROL WORD
  41756. SA1 B6+4
  41757. MX2 -36
  41758. SA4 A1+B1
  41759. BX4 -X2*X4
  41760. MX2 -12
  41761. BX6 -X2*X7 PICK UP INCREMENTED CP FLE
  41762. TLX6 0,UESC
  41763. TLX6 (36+3,ESM170,36+9)
  41764. MX2 -24 MASK FOR RAE FROM *ECSW*
  41765. BX7 X6+X4
  41766. SA7 A4 WRITE UPDATED FLE TO EXCHANGE PACKAGE
  41767. AX3 RSHF
  41768. ZR X6,MFX1 IF FLX = 0
  41769. BX6 -X2*X3
  41770. MFX1 SA4 UMTA
  41771. SA3 UEML FETCH UEM PRESENT STATUS
  41772. TA2 X4+1,MCT
  41773. IX7 X2-X0 ADJUST UNASSIGNED XM ABOVE CP/PCP
  41774. BX4 X3
  41775. SA7 A2 UPDATE MCT ENTRY
  41776. MX2 -36
  41777. LX4 59-1
  41778. BX7 -X2*X1 XP RAX = *ECSW* RAX + UEM BASE ADDRESS
  41779. MX2 12
  41780. NG X4,MFX2 IF UEM PRESENT
  41781. SX3 B0
  41782. MFX2 BX3 X2*X3 EXTRACT UEM BASE ADDRESS
  41783. LX3 -3
  41784. TLX6 36+9,UESC
  41785. IX6 X3+X6
  41786. TLX6 (60-6,ESM170,0)
  41787. IX6 X7+X6
  41788. ZR B7,SFL2 IF SYSTEM EXTENDED MEMORY REQUEST
  41789. SA6 A1+
  41790. EQ SFL2 CHECK CPU ACTIVITY
  41791. MRX SPACE 4,10
  41792. ** MRX - CHANGE RA FOR USER EXTENDED MEMORY.
  41793. *
  41794. * ENTRY (X0) = INCREMENT.
  41795. * (B4) = EXIT ADDRESS FOR *UMT*.
  41796. * (B7) = CP/PCP ADDRESS.
  41797. *
  41798. * USES X - 2, 7.
  41799. * B - 5.
  41800. * A - 2, 7.
  41801.  
  41802.  
  41803. MRX BSS 0 ENTRY
  41804. SA2 B7+ECSW READ FL CONTROL WORD
  41805. LX0 12
  41806. IX7 X2+X0 INCREMENT RAX
  41807. SB5 1
  41808. LX0 -12 RESTORE INCREMENT
  41809. SA7 A2
  41810. EQ UMT1 UPDATE MEMORY CONTROL TABLE
  41811. EJECT
  41812. TITLE USER ECS PROGRAM MODE ROUTINES.
  41813. QUAL PROGRAM
  41814. MECB SPACE 4,10
  41815. ** DEFINE BLOCK SIZE FOR USER ECS OPERATIONS.
  41816.  
  41817.  
  41818. MECB EQU 400B
  41819. CEC SPACE 4,10
  41820. ** CEC - CLEAR USER ECS STORAGE.
  41821. * SET THE SPECIFIED AREA OF USER ECS TO ZERO. THIS ROUTINE IS
  41822. * EXECUTED IN PROGRAM MODE AND UTILIZES THE PROGRAM MODE
  41823. * BUFFER FOR CLEARING ECS.
  41824. *
  41825. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  41826. *
  41827. * EXIT CLEAR OUTPUT REGISTER.
  41828. *
  41829. * USES X - 0, 1, 2, 3, 4, 6, 7.
  41830. * A - 0, 1, 2, 3, 7.
  41831. * B - 4, 6.
  41832. *
  41833. * MACROS PER, WUE.
  41834.  
  41835.  
  41836. CEC TSX0 (LCCB-1,CP176,1-1)
  41837. SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
  41838. NZ X0,CEC1 IF NOT CYBER 990 TYPE MAINFRAME
  41839. SA2 ECRL GET RAE FOR ZERO UEM BLOCK
  41840. LX2 0-12
  41841. MX0 -24
  41842. BX0 -X0*X2
  41843. TLX0 9-21+60,UESC
  41844. CEC1 SA0 PBUF SET FWA OF CM BUFFER
  41845. TLX0 (0,CP176,21)
  41846. SB4 MECB SET WORD COUNT
  41847. TLX0 (3,ESM170,0)
  41848. TLX0 (4,UEM180,0)
  41849. SA2 A5
  41850. SX1 A0
  41851. LX1 30
  41852. BX0 X0+X1
  41853. + RE B4 CLEAR CM BUFFER
  41854.  
  41855. * NOTE - HALF EXIT WILL BE TAKEN ON EXTENDED MEMORY READ
  41856. * BECAUSE OF OUT-OF-RANGE ADDRESS SPECIFIED
  41857. * TO CAUSE ZEROES TRANSFER TO CM.
  41858.  
  41859. SB0 B0+
  41860. SX0 X2 ECS ADDRESS/1000B
  41861. LX2 59-42
  41862. TLX0 9,UESC
  41863. MX6 -RMSK
  41864. PL X2,CEC2 IF ABSOLUTE ADDRESS
  41865. SA3 B7+ECSW GET RAE
  41866. LX3 -RSHF
  41867. BX4 -X6*X3
  41868. TLX4 9,UESC RAE*(UEBS)
  41869. IX0 X4+X0
  41870. CEC2 LX2 -24-59+42
  41871. SX3 X2 BLOCK COUNT
  41872. ZR X3,HNG IF ZERO BLOCK COUNT
  41873. TLX3 9,UESC WORD COUNT
  41874. BX0 X1+X0
  41875. SX6 B4+
  41876. SB6 CEC4 SET RETURN ADDRESS
  41877. CEC3 WUE PROGRAM WRITE (B4) WORDS TO USER EM
  41878. PER /PROGRAM/CEC5
  41879. CEC4 IX3 X3-X6 DECREMENT WORD COUNT
  41880. IX0 X0+X6 INCREMENT ECS ADDRESS
  41881. NZ X3,CEC3 IF MORE TO CLEAR
  41882.  
  41883. * STORAGE CLEARED, CLEAR PPU OR AD EXIT.
  41884.  
  41885. CEC5 BX7 X7-X7
  41886. TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
  41887. MEC SPACE 4,8
  41888. ** MEC - MOVE ECS STORAGE.
  41889. *
  41890. * ENTRY (B7) = CP/PCP ADDRESS.
  41891. *
  41892. * USES X - ALL.
  41893. * B - 5.
  41894. * A - ALL.
  41895. *
  41896. * CALLS PER.
  41897.  
  41898.  
  41899. MEC BSS 0 ENTRY
  41900.  
  41901. * INITIALIZE MOVE PARAMETERS.
  41902.  
  41903. SA2 B7+ECSW GET RAE AND FLE
  41904. TSA1 (UEML,UEM,ZERL) GET UEM BASE ADDRESS
  41905. SA5 SMIN
  41906. MX0 -12
  41907. MX6 -RMSK
  41908. BX4 -X0*X2
  41909. LX1 12
  41910. AX2 RSHF
  41911. BX1 -X0*X1
  41912. BX2 -X6*X2
  41913. LX1 9 UEM BASE ADDRESS IF UEM PRESENT
  41914. TLX2 9,UESC
  41915. TLX4 9,UESC FLE IN WORDS
  41916. IX2 X1+X2 RAE WORD ADDRESS
  41917. TLX5 9,UESC INCREMENT IN WORDS
  41918. BX3 X5
  41919. SX6 -MECB WORD COUNT
  41920. IX0 X2+X4
  41921. IX0 X0+X6 SET FWA ECS TO READ FROM (RA+FL-BLOCK SIZE)
  41922. SA0 UBUF CM BUFFER ADDRESS
  41923. PL X5,MEC1 IF MOVING CP UP ( TOWARDS HIGH CORE )
  41924. LX1 X0
  41925. BX6 -X6
  41926. LX0 X2 SET FWA ECS TO RAE FOR LOWER MOVE
  41927. BX2 X1
  41928. MEC1 IX6 X6-X3
  41929. SX5 A0+
  41930. LX5 30
  41931. BX0 X5+X0
  41932. MX5 -24
  41933.  
  41934. * MAIN MOVE LOOP.
  41935.  
  41936. MEC2 RE MECB READ ECS
  41937. RJ MEC3 IF EXTENDED MEMORY ERROR
  41938. IX4 X0-X2
  41939. IX0 X0+X3 SET FWA ECS TO WRITE TO
  41940. WE MECB WRITE ECS
  41941. RJ MEC3 IF EXTENDED MEMORY ERROR
  41942. IX0 X0+X6 SET NEXT ADDRESS TO READ FROM
  41943. BX1 -X5*X4
  41944. NZ X1,MEC2 IF MORE BLOCKS TO MOVE
  41945.  
  41946. * MOVE COMPLETED.
  41947.  
  41948. TNO /MCE/MEC,MCE IF MEMORY CLEARING ENABLED
  41949. MEC2.1 TA2 EMMS,SDA GET EM MOVE COUNT
  41950. SA5 SMIN GET MOVE INCREMENT
  41951. SA1 B7+ECSW GET *ECSW*
  41952. TSA3 (UEML,UEM,ZERL) GET UEM BASE ADDRESS
  41953. SA4 B7+4 GET EXCHANGE PACKAGE RAE
  41954. SX7 B1
  41955. MX0 -RMSK
  41956. MX6 12
  41957. LX0 12
  41958. IX7 X7+X2 COUNT MOVE
  41959. LX5 RSHF
  41960. SA7 A2 UPDATE EM MOVE COUNT
  41961. IX7 X1+X5 SET NEW RA IN *ECSW*
  41962. BX3 X6*X3
  41963. SA7 A1 UPDATE *ECSW*
  41964. BX7 -X0*X7
  41965. LX3 24 UEM BASE ADDRESS IF UEM PRESENT
  41966. TLX7 0,UESC
  41967. MX0 -36
  41968. IX7 X7+X3
  41969. BX4 -X0*X4
  41970. TLX7 (24+3,ESM170,24+9)
  41971. BX6 X4+X7
  41972. BX7 X7-X7 CLEAR REPLY
  41973. SA6 A4 UPDATE EXCHANGE PACKAGE RAE
  41974. EQ SMPX RETURN
  41975.  
  41976. * PROCESS EXTENDED MEMORY ERROR.
  41977.  
  41978. MEC3 PS ENTRY/EXIT
  41979. SX1 400B WORD COUNT
  41980. RJ /ECS/RSE REPORT STORAGE MOVE EXTENDED MEMORY ERROR
  41981. SA1 SMRL SET EXTENDED MEMORY ERROR STATUS
  41982. SX7 B1
  41983. LX7 36
  41984. SB5 MEC3 *MSC* RETURN ADDRESS
  41985. BX7 X1+X7
  41986. SA7 A1
  41987. SX1 MSEA * EXTENDED MEMORY ERROR - STORAGE MOVE.*
  41988. EQ /MONITOR/MSC ISSUE ERROR MESSAGE
  41989. TEC SPACE 4,10
  41990. ** TEC - PERFORM USER ECS TRANSFER FOR *ECXM* FUNCTION.
  41991. *
  41992. * USES X - ALL.
  41993. * B - 3, 4, 5, 6, 7.
  41994. * A - 0, 1, 2, 4, 6, 7.
  41995. *
  41996. * MACROS PER, RUE, WUE.
  41997.  
  41998.  
  41999. TEC SA4 A5+B1 READ PARAMETERS
  42000. AX2 24
  42001. MX6 48
  42002. SB7 X2 SET CP/PCP ADDRESS
  42003. SX0 X4 ECS ADDRESS/1000B
  42004. LX4 12 GET WORD COUNT
  42005. BX3 -X6*X4
  42006. LX0 9 ECA*1000B
  42007. LX4 24 GET CM ADDRESS
  42008. SB3 X3 SET WC FOR ECS TRANSFER
  42009. BX4 -X6*X4
  42010. MX7 1
  42011. SA2 B7+ECSW GET CP/PCP RAE,FLE
  42012. LX7 -12
  42013. BX7 X7+X2 SET *ECXM* STORAGE MOVE INTERLOCK
  42014. SA7 A2
  42015. BX7 -X6*X2 FLE
  42016. LX2 -RSHF
  42017. BX2 -X6*X2 RAE
  42018. TLX7 9,UESC FLE*(UEBS)
  42019. IX3 X0+X3 ECA+WC
  42020. TLX2 9,UESC RAE
  42021. IX0 X2+X0 RAE+ECA=ABSOLUTE ECS ADDRESS
  42022. SA2 B7+FLSW
  42023. IX1 X7-X3 FLE - (ECA + WC)
  42024. BX7 -X6*X2 CM FL
  42025. MX6 -RMSK
  42026. AX2 RSHF
  42027. BX2 -X6*X2 CM RA
  42028. LX7 6 FL*100B
  42029. LX4 6 CMA*100B
  42030. SX3 X4+B3 CMA + WC
  42031. IX7 X7-X3 FL-(CMA+WC)
  42032. BX7 X1+X7
  42033. NG X7,HNG IF CMA OR ECA OUT OF RANGE
  42034. LX2 6 RA*100B
  42035. IX4 X2+X4 RA+CMA
  42036. BX7 X7-X7
  42037. SA0 X4 SET ABSOLUTE FWA OF CM BUFFER
  42038. LX4 30
  42039. BX0 X4+X0
  42040. SB5 X5+ SAVE RESPONSE ADDRESS
  42041. SB4 MECB
  42042. SB6 TEC3 SET RETURN ADDRESS
  42043. LX5 59-18
  42044. SA7 A5 CLEAR PP OUTPUT REGISTER NOW
  42045. TEC1 GE B3,B4,TEC2 IF NOT LAST SHORT BLOCK
  42046. SB4 B3+
  42047. TEC2 NG X5,TEC4 IF WRITE
  42048. RUE PROGRAM READ (B4) WORDS FROM USER ECS
  42049. PER /PROGRAM/TEC6 PARITY ERROR PROCESSOR
  42050. TEC3 EQ B3,B4,TEC5 IF END OF BLOCK
  42051. SB3 B3-B4 DECREMENT WORD COUNT
  42052. SX2 B4 INCREMENT ADDRESSES
  42053. SA0 A0+B4
  42054. IX0 X0+X2
  42055. LX2 30
  42056. IX0 X0+X2
  42057. EQ TEC1 LOOP FOR NEXT TRANSFER
  42058.  
  42059. TEC4 WUE PROGRAM WRITE (B4) WORDS TO USER ECS
  42060. PER /PROGRAM/TEC6 PARITY ERROR PROCESSOR
  42061. TEC5 NE B3,B4,TEC3 IF NOT END OF BLOCK
  42062. SA1 B7+ECSW CLEAR *ECXM* STORAGE MOVE INTERLOCK
  42063. MX6 59
  42064. LX6 47-0
  42065. BX6 X6*X1
  42066. SA6 A1
  42067. SA7 B5 SET RESPONSE
  42068. EQ PRG EXIT
  42069.  
  42070. TEC6 MX7 12 RETURN ERROR STATUS
  42071. LX7 -12
  42072. EQ TEC5 RETURN
  42073. UBUF SPACE 4,10
  42074. * USER ECS STORAGE MOVE BUFFER.
  42075.  
  42076. UBUF BSS MECB
  42077. SPACE 4
  42078. QUAL UEC
  42079.  
  42080. ENDBLK
  42081. BLOCK VMS,(VALIDATE MASS STORAGE.)
  42082. VMSM SPACE 4,10
  42083. ** VMSM - VALIDATE MASS STORAGE.
  42084. *
  42085. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  42086.  
  42087.  
  42088. VMS SX4 X1
  42089. AX4 12
  42090. SB3 VMS1 *CTR* RETURN ADDRESS
  42091. ZR X4,/PROGRAM/CTR IF INTERLOCKING MST/TRT
  42092. AX4 1
  42093. SB6 B0
  42094. ZR X4,/PROGRAM/CTR IF VALIDATE WITH NO INTERLOCK
  42095. SB3 VMS8 *CTR* RETURN ADDRESS
  42096. EQ /PROGRAM/CTR
  42097.  
  42098. * VALIDATE EQUIPMENT.
  42099.  
  42100. VMS1 BX2 -X5*X3 AVAILABLE TRACKS
  42101. MX0 -4 (X0) = PRESERVED BIT MASK
  42102. SA4 A3+B1 READ PRESERVED FILE COUNT
  42103. SA1 B6 READ FIRST WORD OF TRT
  42104. AX3 24
  42105. AX4 24
  42106. BX3 -X5*X3 TRT LENGTH
  42107. BX4 -X4+X5 - PRESERVED FILE COUNT
  42108. SB4 X3 (B4) = LENGTH OF TRT
  42109. LX0 8
  42110. SB2 B6+X3 (B2) = LWA+1 OF TRT, *VTC* ENTRY CONDITION
  42111. LX3 2
  42112. SB5 X4 (B5) = - PRESERVED FILE COUNT
  42113. IX7 X2-X3
  42114. MX4 -4 (X4) = RESERVATION BIT MASK
  42115. SB3 X7 (B3) = - TRACKS RESERVED
  42116.  
  42117. * COUNT RESERVATION AND PRESERVED FILE BITS.
  42118.  
  42119. VMS2 SB7 X4 (B7) = -15 = LOOP COUNTER
  42120. BX7 X7-X7
  42121. SB4 B7+B4
  42122. BX6 X6-X6
  42123. PL B4,VMS3 IF NOT LAST SHORT LOOP
  42124. SB7 B7-B4 SET TO SHORT LOOP WORD COUNT
  42125. VMS3 LX7 4
  42126. BX5 -X0*X1 EXTRACT PRESERVED FILE BITS
  42127. SB7 B7+B1
  42128. BX6 X6+X5
  42129. BX5 -X4*X1 EXTRACT RESERVATION BITS
  42130. LX6 4
  42131. SA1 A1+B1
  42132. BX7 X7+X5
  42133. NZ B7,VMS3 IF NOT END OF LOOP
  42134.  
  42135. CX6 X6 COUNT PRESERVED FILE BITS
  42136. CX7 X7 COUNT RESERVATION BITS
  42137. SB5 B5+X6
  42138. SB3 B3+X7
  42139. GT B4,B0,VMS2 IF NOT END OF TRT
  42140. SX3 B1
  42141. MX0 -8
  42142. SA4 A3+PUGL CHECK FOR CATALOGS ON DEVICE
  42143. BX7 X7-X7
  42144. ZR B3,VMS4 IF RESERVATION BIT COUNT OK
  42145. BX7 X7+X3 SET ERROR FLAG
  42146. VMS4 LX7 -1
  42147. ZR B5,VMS5 IF PRESERVATION BIT COUNT OK
  42148. BX7 X7+X3 SET ERROR FLAG
  42149. VMS5 BX2 -X0*X4 EXTRACT DEVICE MASK
  42150. LX7 -4
  42151. ZR X2,VMS7 IF NO CATALOGS ON DEVICE
  42152.  
  42153. * VALIDATE PERMIT, LABEL-CATALOG, IAF TRACK CHAINS.
  42154.  
  42155. SB7 B1+B1
  42156. SA2 A4-B7 READ FIRST TRACK OF CHAINS
  42157. MX4 -11
  42158. AX2 12
  42159. SB3 VMS6 *VTC* RETURN ADDRESS
  42160. LX7 4
  42161. MX0 -2
  42162.  
  42163. * VALIDATE INDIRECT ACCESS FILE CHAIN.
  42164.  
  42165. VMS6 AX2 12
  42166. LX7 -1
  42167. BX6 -X0*X2
  42168. BX1 -X4*X2
  42169. SB7 B7-1
  42170. NZ X2,VTC IF MORE CHAINS TO VALIDATE
  42171.  
  42172. * RETURN STATUS, INTERLOCK DEVICE IF ERRORS.
  42173.  
  42174. VMS7 SX3 B1 SET *CDI* ENTRY CONDITIONS
  42175. BX1 X1-X1
  42176. SX5 B1
  42177. SB4 B0
  42178. SB5 /PROGRAM/PRG
  42179. TZR X7,(/ISD/VMS1,ISD,/PROGRAM/CDI) IF NO ERRORS
  42180. LX3 4
  42181. SA2 A3+B1 SET DEVICE ERROR IDLE
  42182. BX6 X2+X3
  42183. LX7 5+36
  42184. SA6 A2
  42185. TEQ (/LSPMMF/VMS,LSPMMF,/ISD/VMS1,ISD,/PROGRAM/CSM1) EXIT
  42186.  
  42187. * VALIDATE TRACK CHAIN.
  42188.  
  42189. VMS8 AX3 24 SET TRT LENGTH
  42190. SB3 VMS9
  42191. BX3 -X5*X3
  42192. MX4 -11
  42193. SB2 B6+X3 (B2) = LWA + 1 OF TRT
  42194. MX0 -2
  42195. BX7 X7-X7
  42196. SB7 B1
  42197. EQ VTC1 VALIDATE TRACK CHAIN
  42198.  
  42199. VMS9 LX7 36 RETURN STATUS
  42200. SA7 A5
  42201. EQ /PROGRAM/PRG EXIT
  42202. VTC SPACE 4,15
  42203. ** VTC - VALIDATE TRACK CHAIN.
  42204. * VTC VALIDATES A TRACK CHAIN TO INSURE ALL TRACKS ARE RESERVED,
  42205. * NO CIRCULAR CHAIN EXISTS AND ALL TRACKS ARE WITHIN THE TRT.
  42206. *
  42207. * ENTRY ENTER AT VTC1 IF NOT TO CHECK PRESERVED FILE BIT.
  42208. * (X0) = -3
  42209. * (X1) = FIRST TRACK.
  42210. * (X2) = TRACK IF ENTERED AT VTC.
  42211. * (X4) = -3777B
  42212. * (X6) = BITS 0 AND 1 OF TRACK IF ENTERED AT VTC.
  42213. * (B2) = LWA + 1 OF TRT.
  42214. * (B3) = EXIT ADDRESS.
  42215. * (B6) = FWA OF TRT.
  42216. * (B7) = 0 IF CHECKING CATALOG CHAIN.
  42217. * (A3) = ADDRESS OF TDGL IN MST.
  42218. *
  42219. * EXIT (X7) = BIT 0 SET IF ERROR DETECTED IN CHAIN.
  42220. *
  42221. * USES X - 1, 3, 5, 6, 7.
  42222. * B - 4, 5, 7.
  42223. * A - 1.
  42224.  
  42225.  
  42226. VTC AX1 2
  42227. SB4 X6+48 PRESERVATION BIT SHIFT COUNT
  42228. SA1 B6+X1
  42229. LX6 X1,B4
  42230. PL X6,VTC6 IF PRESERVATION BIT NOT SET
  42231. BX1 -X4*X2
  42232.  
  42233. * ENTER HERE IF NOT CHECKING PRESERVATION BIT.
  42234.  
  42235. VTC1 SX3 B6-B2 SET NUMBER OF TRACKS
  42236. BX1 -X4*X1
  42237. LX3 2
  42238. SB4 X1
  42239.  
  42240. * TRACK VALIDATION LOOP.
  42241.  
  42242. VTC2 BX1 -X4*X1 TRACK
  42243. SX3 X3+B1
  42244. BX6 -X0*X1 BYTE NUMBER
  42245. SB5 X1
  42246. NZ B7,VTC3 IF NOT CHECKING CATALOG CHAIN
  42247. NE B4,B5,VTC5 IF TRACKS NON-CONTIGUOUS
  42248. VTC3 SX1 B5
  42249. SB5 X6+56 RESERVATION BIT SHIFT COUNT
  42250. LX6 2 TRACK LINK SHIFT COUNT * 4
  42251. SB4 X1+B1
  42252. AX1 2
  42253. SA1 B6+X1 READ TRT WORD
  42254. LX5 X1,B5 POSITION RESERVATION BIT
  42255. SB5 X6
  42256. LX6 1 TRACK LINK SHIFT COUNT * 8
  42257. BX5 X5*X3
  42258. SB5 B5+X6 TRACK LINK SHIFT COUNT * 12
  42259. SX6 A1-B2 CHECK OUT OF TRT
  42260. LX1 X1,B5 POSITION TRACK LINK BIT
  42261. BX6 X6*X5
  42262. AX1 48
  42263. PL X6,VTC6 IF NOT RESERVED, OUT OF TRT, OR CIRCULAR
  42264. NG X1,VTC2 IF TRACK LINKED
  42265. NZ B7,VTC4 IF NOT CHECKING CATALOG CHAIN
  42266. SA1 A3+ALGL
  42267. SX5 B6-B2 TRT LENGTH
  42268. LX1 -12
  42269. LX5 2 SET NUMBER OF TRACKS
  42270. BX1 -X4*X1 CATALOG TRACK COUNT FROM MST
  42271. IX5 X3-X5 NUMBER OF TRACKS IN CATALOG CHAIN
  42272. CX3 X1
  42273. IX6 X1-X5
  42274. SB4 X3
  42275. PL X6,VTC6 IF NOT ENOUGH CATALOG TRACKS
  42276. NE B4,B1,VTC6 IF CATALOG TRACK COUNT NOT POWER OF TWO
  42277. VTC4 JP B3 RETURN
  42278.  
  42279. VTC5 SA1 A3+PUGL CHECK CATALOG CHAIN CONTIGUOUS/OVERFLOW
  42280. LX1 59-17
  42281. PL X1,VTC3 IF CATALOG CHAIN NON-CONTIGUOUS
  42282. SA1 A3+ACGL
  42283. LX1 59-57
  42284. NG X1,VTC3 IF CATALOG TRACK OVERFLOW
  42285. VTC6 SX3 B1 RETURN ERROR STATUS
  42286. BX7 X3+X7
  42287. JP B3 RETURN
  42288.  
  42289. ENDBLK
  42290. BLOCK EUE,(ECS AND USER ECS PROCESSING ROUTINES.),ECS
  42291. ECSM SPACE 4
  42292. ** ECSM - ECS TRANSFER.
  42293. *
  42294. * ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
  42295. *
  42296. * USES X - 0, 1, 2, 3, 4, 5, 6.
  42297. * B - 3, 4, 5, 6.
  42298. * A - 0, 1, 2, 3, 6.
  42299. *
  42300. * CALLS CFR, EAB, SFR.
  42301. *
  42302. * MACROS PER, RUE, WUE.
  42303.  
  42304.  
  42305. ECS SB3 A0 SAVE CPU NUMBER
  42306. LX5 59-23
  42307. PL X5,ECS2 IF OPTIONS 0 - 3
  42308. LX1 -42
  42309. LX2 X5,B1
  42310. SB4 X1 LIST SIZE/BIT NUMBER
  42311. LX5 X2,B1
  42312. NG X2,ECS1 IF OPTION 6 OR 7
  42313. SB6 ECSX *SFR*/*CFR* RETURN ADDRESS
  42314. TPL X5,(/ECS/SFR,EEC,/MONITOR/HNG) IF *SFRS* FUNCTION
  42315. TEQ (/ECS/CFR,EEC,/MONITOR/HNG) PROCESS *CFRS* FUNCTION
  42316.  
  42317. ECS1 NG X5,/MONITOR/HNG IF OPTION 7
  42318. LX5 1 NEGATIVE = WRITE ECS, POSITIVE = READ ECS
  42319. MX2 1
  42320. BX3 X2*X5
  42321. LX2 -1
  42322. BX2 X2*X5
  42323. LX2 2
  42324. SB5 X2 0 = ABS SYSTEM ECS, 1 = ABS USER ECS
  42325. LX1 18
  42326. SA1 X1 GET FIRST LIST ENTRY
  42327. SX4 B4 INDICATE LIST SUBFUNCTION
  42328. ZR B4,/MONITOR/HNG IF NO ENTRIES IN LIST
  42329. MX5 -18
  42330. SX2 A1+B4 CM ADDRESS OF DATA BUFFER
  42331. BX2 -X5*X2
  42332. BX5 X3+X2
  42333. SX2 B0+
  42334. EQ ECS11 PRESET LIST REGISTERS
  42335.  
  42336. ECS2 LX1 -24 CM ADDRESS OF BUFFER
  42337. MX3 -17
  42338. LX5 2 NEGATIVE = WRITE ECS, POSITIVE = READ ECS
  42339. SX4 B1
  42340. BX4 -X5*X4
  42341. MX2 1
  42342. BX5 X2*X5
  42343. LX4 1
  42344. SB5 X4 0 = ABS SYSTEM ECS, 2 = RELATIVE USER ECS
  42345. BX3 -X3*X1
  42346. LX1 -18
  42347. MX6 -RMSK
  42348. PL X1,ECS3 IF ABSOLUTE CM ADDRESS
  42349. SA2 B7+FLSW ABSOLUTIZE CM BUFFER ADDRESS
  42350. AX2 RSHF
  42351. BX2 -X6*X2 RA/100
  42352. LX2 6
  42353. IX3 X3+X2
  42354. ECS3 BX5 X5+X3
  42355. LX1 42
  42356. SX4 B0+ INDICATE NOT LIST SUBFUNCTION
  42357. SB4 B1+ BIAS FOR WORD COUNT
  42358. MX3 -21 ADDRESS MASK
  42359. ECS4 MX6 -21
  42360. BX0 -X3*X1 ECS ADDRESS
  42361. MX3 -6
  42362. LX1 -42
  42363. BX1 -X3*X1 WORD COUNT
  42364. SB4 X1+B4 WORD COUNT OF TRANSFER
  42365. BX1 -X6*X5 CM ADDRESS OF BUFFER
  42366. SA0 X1
  42367. TX3 MECNF MACHINE ECS FL / 1000B
  42368. TLX3 60-0,-UESC
  42369. ZR B5,ECS6 IF ABSOLUTE SYSTEM ECS ADDRESS
  42370. EQ B5,B1,ECS5 IF ABSOLUTE USER ECS ADDRESS
  42371. SA3 B7+ECSW GET ECS RA AND FL
  42372. MX2 -12
  42373. BX6 -X2*X3
  42374. AX3 RSHF
  42375. TLX6 9,UESC
  42376. MX2 -RMSK
  42377. BX3 -X2*X3
  42378. SX2 B4-B1
  42379. TLX3 9,UESC
  42380. IX2 X0+X2
  42381. IX2 X2-X6
  42382. IX0 X0+X3 ABSOLUTIZE ECS ADDRESS
  42383. PL X2,EAB3 IF ECA + WC .GT. FLX
  42384. ECS5 TA3 ECSW,SCA SET LWA+1 USER ECS / 1000B
  42385. MX2 -12
  42386. BX6 -X2*X3
  42387. AX3 RSHF
  42388. MX2 -RMSK
  42389. BX3 -X2*X3
  42390. IX3 X3+X6
  42391. ECS6 TLX3 9,UESC
  42392. SX2 B4-B1
  42393. LX1 30
  42394. IX2 X0+X2 LWA OF TRANSFER
  42395. BX0 X1+X0
  42396. IX2 X2-X3
  42397. SX3 B1+
  42398. SX6 A1 SAVE LIST ENTRY ADDRESS
  42399. SA6 ECSA
  42400. BX6 X6-X6
  42401. PL X2,EAB10 IF ILLEGAL ADDRESS
  42402. SB6 ECS10 SET RETURN ADDRESS
  42403. NZ B5,ECS8 IF USER EXTENDED MEMORY READ/WRITE
  42404. NG X5,ECS7 IF WRITE SYSTEM ECS
  42405. + RE B4 READ (B4) WORDS FROM SYSTEM ECS
  42406. PER EAB PROCESS EXTENDED MEMORY ERROR
  42407. EQ ECS10 COMPLETE PROCESSING
  42408.  
  42409. ECS7 WE B4 WRITE (B4) WORDS TO SYSTEM ECS
  42410. PER EAB PROCESS EXTENDED MEMORY ERROR
  42411. EQ ECS10 COMPLETE PROCESSING
  42412.  
  42413. ECS8 NG X5,ECS9 IF WRITE USER ECS
  42414. RUE MONITOR READ (B4) WORDS FROM USER ECS
  42415. PER EAB PROCESS EXTENDED MEMORY ERROR
  42416. EQ ECS10 COMPLETE PROCESSING
  42417.  
  42418. ECS9 WUE MONITOR WRITE (B4) WORDS TO USER ECS
  42419. PER EAB PROCESS EXTENDED MEMORY ERROR
  42420. ECS10 ZR X4,ECSX IF NOT PROCESSING LIST
  42421. SA1 ECSA GET LIST ENTRY ADDRESS
  42422. SA6 X1+ SET/CLEAR ERROR FLAGS
  42423. SX2 B4+ ADVANCE CM BUFFER ADDRESS
  42424. SA1 A6+B1 GET NEXT LIST ENTRY
  42425. IX4 X4-X3
  42426. ZR X4,ECSX IF END OF LIST
  42427. ECS11 IX5 X5+X2
  42428. SB4 B0+
  42429. TMX3 (36,ESM170,39)
  42430. EQ ECS4 PROCESS NEXT LIST ENTRY
  42431.  
  42432.  
  42433. ECSA CON 0 LIST ENTRY ADDRESS
  42434. EAB SPACE 4,20
  42435. ** EAB - ECS ABORT PROCESSOR. (MONITOR MODE)
  42436. *
  42437. * ENTRY (X0) = ECS ADDRESS OF ERROR.
  42438. * (X3) = 1.
  42439. * (X4) = 0 IF NOT PROCESSING LIST.
  42440. * (X5) .LT. 0 IF WRITE ECS, OTHERWISE READ ECS.
  42441. * (X6) = 0.
  42442. * (X7) = 0 OR ERROR STATUS.
  42443. * (B3) = CPU NUMBER.
  42444. * (B4) = WORD COUNT OF TRANSFER.
  42445. * (A0) = CM ADDRESS OF TRANSFER.
  42446. * (A5) = OUTPUT REGISTER ADDRESS.
  42447. *
  42448. * EXIT (X6) = ERROR FLAGS FOR LIST ENTRY.
  42449. * TO *ECS10* IF PROCESSING LIST.
  42450. * TO *PPRX* IF FUNCTION COMPLETE.
  42451. *
  42452. * USES A - 0, 7.
  42453. * B - 6, 7.
  42454. * X - 0, 1, 2, 6, 7.
  42455.  
  42456.  
  42457. * PROCESS EXTENDED MEMORY ERROR.
  42458.  
  42459. EAB NZ X4,EAB4 IF PROCESSING LIST
  42460. MX7 12 SET ERROR STATUS
  42461. LX7 -12
  42462. EAB1 MX6 -24
  42463. BX0 -X6*X0
  42464. BX7 X7+X0
  42465. EAB2 SA0 B3 RESTORE CPU NUMBER
  42466. SA7 A5 STORE RESPONSE
  42467. EQ /MONITOR/PPRX EXIT
  42468.  
  42469. * PROCESS INVALID RELATIVE ADDRESS.
  42470.  
  42471. EAB3 SX7 B1 SET ERROR STATUS
  42472. LX7 36
  42473. EQ EAB1 RETURN ERROR STATUS
  42474.  
  42475. * PROCESS EXTENDED MEMORY ERROR DURING LIST PROCESSING.
  42476.  
  42477. EAB4 SX1 B1
  42478. LX1 30
  42479. BX1 X3+X1
  42480. SB6 B4
  42481. EAB5 SB7 B4-B6
  42482. SB6 B6-B1
  42483. NG X5,EAB8 IF WRITE ECS
  42484. + RE 1 RETRY READ ONE WORD AT A TIME
  42485. EQ EAB9 PROCESS EXTENDED MEMORY ERROR
  42486. EAB6 SA0 A0+B1
  42487. IX0 X0+X1
  42488. NZ B6,EAB5 IF NOT END OF BUFFER
  42489. EAB7 MX7 12 INDICATE TRANSFER ABORTED
  42490. LX7 -12
  42491. EQ ECS10 CONTINUE PROCESSING LIST
  42492.  
  42493. EAB8 WE 1 RETRY WRITE ONE WORD AT A TIME
  42494. EQ EAB9 PROCESS EXTENDED MEMORY ERROR
  42495. EQ EAB6 CONTINUE RETRY FOR ENTIRE BUFFER
  42496.  
  42497. EAB9 LX2 X3,B7
  42498. BX6 X6+X2 SET ERROR FLAG FOR THIS WORD
  42499. EQ EAB6 CONTINUE RETRY FOR ENTIRE BUFFER
  42500.  
  42501. * PROCESS INVALID ECS ADDRESS IN LIST.
  42502.  
  42503. EAB10 ZR X4,/MONITOR/HNG IF ILLEGAL ADDRESS AND NOT LIST
  42504. MX6 60 RETURN ERROR STATUS IN ALL BITS
  42505. MX7 12 INDICATE TRANSFER ABORTED
  42506. LX7 -12
  42507. EQ ECS10 CONTINUE PROCESSING LIST
  42508.  
  42509. ECSX EQU EAB2 EXIT ADDRESS FOR *ECS*
  42510.  
  42511. ENDBLK
  42512. BLOCK ECS,(ECS PROCESSING ROUTINES.)
  42513. PIOM SPACE 4,10
  42514. ** PIO - *PIOM* PP I/O CPU TRANSFERS (MONITOR MODE).
  42515. *
  42516. * ENTRY (A0) = CPU NUMBER.
  42517. * (A5) = *OR* ADDRESS.
  42518. * (B2) = EXCHANGE PACKAGE ADDRESS.
  42519. * (B7) = CP ADDRESS.
  42520. * (B5) = SUBFUNCTION - 1.
  42521. * (X2) = MASK OF -12.
  42522. * (X5) = (OR).
  42523. * (X7) = 0.
  42524. * SEE *PIOM* DOCUMENTATION FOR *OR*, *MB* AND *MB*+1
  42525. * DESCRIPTION.
  42526. *
  42527. * EXIT A0, A5, B2, B7 SAME AS ON ENTRY.
  42528. * TO /MONITOR/HNG, FOR FOLLOWING CONDITIONS -
  42529. * (1) ILLEGAL SUBFUNCTION
  42530. * (2) BUFFER PREVIOUSLY RESERVED FOR SUBFUNCTION 0
  42531. * (RESERVE WRITE BUFFER)
  42532. * (3) PP BUFFER RESERVED BUT NOT INTERLOCKED
  42533. * TO THIS PP.
  42534. * (4) PP BUFFER NOT PREVIOUSLY RESERVED FOR
  42535. * SUBFUNCTION 2 (WRITE PRU).
  42536. * (5) BUFFERED I/O REQUEST WITHOUT
  42537. * *BUFIO* BLOCK PRESENT.
  42538. * (6) FUNCTION FLAG SELECTION NOT LEGAL FOR THIS
  42539. * SUBFUNCTION.
  42540. * TO /BUFIO/PBF, FOR SUBFUNCTION 5 (I/O BUFFER FLUSH),
  42541. * AFTER SWITCH TO PROGRAM MODE.
  42542. * TO /PROGRAM/PDT, FOR ECS DIRECT TRANSFER,
  42543. * AFTER SWITCH TO PROGRAM MODE.
  42544. * TO /BUFIO/PST, FOR BUFFERED DEVICE DIRECT TRANSFER,
  42545. * AFTER SWITCH TO PROGRAM MODE.
  42546. * TO /BUFIO/PST, IF BUFFERED I/O PRU TRANSFER.
  42547.  
  42548.  
  42549. PIO TX1 A5-1,-FP
  42550. SA3 CMCL
  42551. LX1 PPXES-PPCES
  42552. SA4 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
  42553. TA1 X1+ACPP,FPX GET CP ASSIGNMENT
  42554. SA7 A4+1
  42555. SB4 FLBS-1
  42556. BX3 X1-X3
  42557. TSB6 (/BUFIO/PBF,BUFIO,/PROGRAM/HNG)
  42558. AX3 48
  42559. SX1 REIS RETURN STATUS = *PAUSE* REQUIRED
  42560. ZR X3,PIOX IF STORAGE MOVE REQUIRED
  42561. EQ B5,B4,PIOP IF I/O BUFFER FLUSH
  42562. GE B5,B4,/MONITOR/HNG IF ILLEGAL SUBFUNCTION
  42563. LX4 24 POSITION EST ORDINAL
  42564. BX0 -X2*X4
  42565. LX4 -12 POSITION PP I/O BUFFER
  42566. CX1 X0,EST CONVERT EST ORDINAL TO OFFSET
  42567. TA1 X1+EQDE,EST READ EST ENTRY
  42568. BX1 -X2*X1 GET MST ADDRESS FOR EQUIPMENT
  42569. LX1 3
  42570. SA1 X1+DILL GET BUFFERED DEVICE FLAG
  42571. SX0 B1+
  42572. BX3 -X2*X4 PP I/O BUFFER INCREMENT
  42573. LX1 0-22
  42574. BX6 X0*X1
  42575. SA6 A4+B1 SAVE DEVICE INDICATOR IN MESSAGE BUFFER
  42576. SA1 PFFV VALIDATE FUNCTION FLAGS
  42577. SB3 B5+B1
  42578. SB6 B3+B3
  42579. LX5 18
  42580. SB6 B6+B3
  42581. SB6 B6+B6
  42582. LX1 B6
  42583. BX1 X1*X5
  42584. MX6 6
  42585. BX6 X6*X1
  42586. LX5 -18
  42587. NZ X6,/MONITOR/HNG IF ILLEGAL FUNCTION FLAGS
  42588. BX6 X4
  42589. LX6 59-6-12
  42590. NG X6,PIO6 IF RECALL AFTER FLUSH
  42591. BX6 X2*X4 CLEAR PP I/O BUFFER INCREMENT
  42592. LX4 59-0-12
  42593. LX6 -12
  42594. PL X4,PIO4 IF PP I/O BUFFER NOT RESERVED
  42595.  
  42596. * VALIDATE PP I/O BUFFER INTERLOCK.
  42597.  
  42598. SX1 A5
  42599. TA3 X3,ECSB CHECK PP I/O BUFFER INTERLOCK
  42600. NG B5,/MONITOR/HNG IF RESERVE WRITE BUFFER SUBFUNCTION
  42601. IX1 X3-X1
  42602. BX6 -X0*X6 CLEAR PP I/O BUFFER RESERVED FLAG
  42603. NZ X1,/MONITOR/HNG IF NOT RESERVED TO THIS PP
  42604. LE B5,B1,PIO6 IF NOT DIRECT TRANSFER
  42605.  
  42606. * RELEASE PP I/O BUFFER AND SWITCH TO PROGRAM MODE
  42607. * FOR DIRECT TRANSFER (SF = 3, 4).
  42608.  
  42609. SA7 A3 CLEAR PP I/O BUFFER INTERLOCK
  42610. SA6 A4
  42611. PIO2 LX4 59-8-59+0
  42612. SA1 A4+B1 GET DEVICE INDICATOR
  42613. NG X4,PIO3 IF NOT INITIAL CALL
  42614. LX0 8
  42615. BX6 X0+X6
  42616. SA6 A4+
  42617. PIO3 SB6 /PROGRAM/PDT
  42618. ZR X1,PIOP IF ECS REQUEST
  42619. TSB6 (/BUFIO/PST,BUFIO,/PROGRAM/HNG)
  42620. EQ PIOP SWITCH TO PROGRAM MODE
  42621.  
  42622. * RESERVE PP I/O BUFFER (SF = 0, 1).
  42623.  
  42624. PIO4 GT B5,B1,PIO2 IF DIRECT TRANSFER
  42625. EQ B5,B1,/MONITOR/HNG IF SECTOR WRITE
  42626. TX1 B0,ECSBL GET PP I/O BUFFER LENGTH
  42627. SX7 A5
  42628. BX6 X0+X6 SET PP I/O BUFFER RESERVED FLAG
  42629. PIO5 SX1 X1-ECBL
  42630. NG X1,PIOR IF NO PP BUFFER AVAILABLE
  42631. TA3 X1,ECSB CHECK BUFFER INTERLOCK
  42632. NZ X3,PIO5 IF BUFFER RESERVED
  42633. LX1 -12
  42634. BX6 X6+X1 SET PP I/O BUFFER INCREMENT
  42635. SA7 A3 SET PP BUFFER INTERLOCK
  42636. SA6 A4
  42637.  
  42638. * PROCESS ECS PRU TRANSFER.
  42639.  
  42640. PIO6 TA1 EQDE,EEN CHECK TRACK COUNT
  42641. BX1 -X2*X1
  42642. LX1 3
  42643. SA1 X1+TDGL
  42644. LX4 0-12-59+0+60
  42645. SB6 A0 SAVE (A0)
  42646. BX3 -X2*X4 SECTOR
  42647. LX1 12
  42648. BX6 -X2*X1 TRACK COUNT
  42649. SA1 A4+B1
  42650. TNZ X1,(/BUFIO/PST,BUFIO,/MONITOR/HNG) IF BUFFERED
  42651. NG B5,PIOX IF RESERVE BUFFER SUBFUNCTION
  42652. TB3 0,-TCNT
  42653. SX0 X3+B3
  42654. PL X0,PIO6.1 IF SECTOR .GT. LIMIT
  42655. LX6 1
  42656. LX4 -11
  42657. LX7 X3
  42658. BX0 -X2*X4 TRACK * 2
  42659. LX7 6 SECTOR * 100B
  42660. IX1 X0-X6
  42661. PL X1,PIO6.1 IF TRACK .GT. LIMIT
  42662. SA0 A3+1 LINKAGE WORD ADDRESS
  42663. BX6 -X2*X4
  42664. TLX0 9,TNSC TRACK * WORDS PER TRACK
  42665. IX7 X7-X3 SECTOR * 77B
  42666. TLX6 3,TNSC TRACK * SECTORS PER TRACK
  42667. TX7 X7,TCNT
  42668. IX0 X0+X6 TRACK * WORDS + LINKAGE WORDS
  42669. SX1 -DSTE SET *DEVICE ERROR* STATUS
  42670. IX0 X0+X3 HEADER ADDRESS = TRACK * WORDS + SECTOR
  42671. SX2 A0
  42672. LX2 30
  42673. BX0 X2+X0
  42674. EQ B5,B1,PIO7 IF WRITE SECTOR SUBFUNCTION
  42675. RE 1 READ HEADER WORD
  42676. PER PIOX3 PROCESS ECS PARITY ERROR
  42677. SX1 PARE SET *PARITY ERROR* STATUS
  42678. SA0 A0+B1 INCREMENT ADDRESSES
  42679. IX0 X0+X7 TRACK*WORDS + SECTOR*100B + TCNT
  42680. SX2 B1+
  42681. LX2 30
  42682. IX0 X0+X2
  42683. RE 100B READ SECTOR OF DATA
  42684. PER PIOX3 PROCESS ECS PARITY ERROR
  42685. SA0 B6 RESTORE (A0)
  42686. BX1 X1-X1 RETURN STATUS = NO ERROR
  42687. EQ PIOX EXIT
  42688.  
  42689. PIO6.1 SX1 -ADDE SET *ADDRESS ERROR* STATUS
  42690. EQ PIOX RETURN ERROR STATUS
  42691.  
  42692. PIO7 WE 1 WRITE HEADER WORD
  42693. PER PIOX3 PROCESS ECS PARITY ERROR
  42694. BX2 X5
  42695. SX1 PARE SET *PARITY ERROR* STATUS
  42696. LX2 59-37 RELEASE PP BUFFER IF FLUSH BIT SET
  42697. SA0 A0+B1 INCREMENT ADDRESSES
  42698. AX2 59
  42699. IX0 X0+X7 DATA ADDRESS=TRACK*2020B+SECTOR*100B+20B
  42700. BX1 X1-X2
  42701. SX3 B1+
  42702. LX3 30
  42703. IX0 X0+X3
  42704. WE 100B WRITE SECTOR OF DATA
  42705. PER PIOX3 PROCESS ECS PARITY ERROR
  42706. SA0 B6 RESTORE (A0)
  42707. BX1 X2 RETURN STATUS = NO ERROR
  42708. EQ PIOX EXIT
  42709.  
  42710.  
  42711. PFFV VFD 6/4,6/7,6/4,6/3,6/5,30/0 FUNCTION FLAG VALIDATIONS
  42712. PIOX SPACE 4,10
  42713. ** PIOX - EXIT FROM *PIOM*.
  42714. *
  42715. * ENTRY (A5) = PP *OR* ADDRESS.
  42716. * (A0) = CPU NUMBER, IF ENTRY AT *PIOX*, *PIOX1*,
  42717. * OR *PIOX2* FROM MONITOR MODE.
  42718. * (B6) = CPU NUMBER, IF ENTRY AT *PIOX3*.
  42719. * (X0) = ADDRESS OF UNRECOVERED ECS PARITY ERROR,
  42720. * IF ENTRY AT *PIOX3*.
  42721. * (X1) = RETURN STATUS.
  42722. * (X1) = COMPLEMENT OF RETURN STATUS,
  42723. * IF PP BUFFER TO BE RELEASED.
  42724. * (X5) = (OR), IF ENTRY AT *PIOX1*, *PIOX2*, OR *PIOX3*.
  42725. * (MB+1) .LT. 0, IF PROGRAM MODE EXIT.
  42726.  
  42727.  
  42728. PIOX3 MX2 30 RETURN ECS PARITY ERROR ADDRESS
  42729. BX6 X2*X5
  42730. BX0 -X2*X0
  42731. BX6 X6+X0
  42732. SA6 A5+
  42733. SA0 B6+ RESTORE (A0)
  42734.  
  42735. PIOX SA5 A5+
  42736. MX2 -36
  42737. LX1 -24
  42738. BX5 -X2*X5
  42739. PL X1,PIOX2 IF NO RELEASE OF PP BUFFER
  42740. BX1 -X1
  42741. PIOX1 SA4 A5+B1
  42742. BX7 X7-X7
  42743. MX2 12
  42744. BX3 X2*X4 PP I/O BUFFER INCREMENT
  42745. BX4 -X2*X4 CLEAR PP I/O BUFFER INCREMENT
  42746. LX4 59-0
  42747. PL X4,PIOX2 IF NO PP BUFFER ASSIGNED
  42748. LX3 12
  42749. MX2 -59
  42750. BX6 -X2*X4 CLEAR BUFFER RESERVATION FLAG
  42751. LX6 0-59
  42752. TX3 X3,ECSB FWA PP BUFFER
  42753. SA6 A4
  42754. SA7 X3
  42755. PIOX2 SX6 B1
  42756. BX7 X5+X1
  42757. SX3 A5+B1
  42758. LX6 46-0
  42759. + SA3 X3+B1 **** PERFORM IN ONE WORD ****
  42760. BX6 X6*X3 **** PERFORM IN ONE WORD ****
  42761. BX6 X7+X6 **** PERFORM IN ONE WORD ****
  42762. SA6 A3 **** PERFORM IN ONE WORD ****
  42763. NG X3,/PROGRAM/PRG1 IF EXIT FROM PROGRAM MODE
  42764. EQ /MONITOR/PPR1 EXIT FROM MONITOR MODE
  42765. PIOR SPACE 4,10
  42766. ** PIOR - REISSUE *PIOM* REQUEST.
  42767. *
  42768. * ENTRY (A5) = PP *OR* ADDRESS.
  42769. * (B5) = *PIOM* SUBFUNCTION - 1.
  42770. * (MB+1) .LT. 0, IF EXIT FROM PROGRAM MODE.
  42771. *
  42772. * EXIT TO /ECS/PIOX1, IF PP BUFFER NOT TO BE RELEASED.
  42773. * TO /ECS/PIOX2, IF PP BUFFER TO BE RELEASED.
  42774.  
  42775. PIOR SA5 A5 SET BIT 59 OF *OR* FOR REISSUE
  42776. MX1 1
  42777. EQ B5,B1,PIOX2 IF WRITE PRU FUNCTION
  42778. EQ PIOX1 RELEASE PP BUFFER
  42779. PIOP SPACE 4,10
  42780. ** PIOP - SWITCH TO PROGRAM MODE *PIOM*.
  42781. *
  42782. * ENTRY (A0) = CPU NUMBER.
  42783. * (A5) = PP *OR* ADDRESS.
  42784. * (B6) = PROGRAM MODE PROCESSOR ADDRESS.
  42785. *
  42786. * EXIT TO /PROGRAM/PMR.
  42787.  
  42788.  
  42789. PIOP SX6 B6 SAVE PROGRAM MODE RETURN ADDRESS
  42790. SA3 A5+2 SET PROGRAM MODE FLAG
  42791. LX6 18
  42792. MX1 1
  42793. BX6 X6+X3
  42794. SA5 A5
  42795. BX6 X6+X1
  42796. SA6 A3
  42797. EQ /MONITOR/PMR SWITCH TO PROGRAM MODE
  42798. TITLE ECS PROGRAM MODE ROUTINES.
  42799. QUAL PROGRAM
  42800. PDT SPACE 4,10
  42801. ** PDT - *PIOM* ECS DIRECT TRANSFER (SF = 3, 4).
  42802. *
  42803. * ENTRY IN PROGRAM MODE ONLY.
  42804. * REFER TO *PIP* EXIT CONDITIONS.
  42805. *
  42806. * EXIT TO /PROGRAM/HNG, IF ILLEGAL SECTOR OR A SHORT SECTOR
  42807. * WAS ENCOUNTERED AND NOT READING TO EOR.
  42808. * TO /ECS/PIOX, IF UNRECOVERED HARDWARE ERROR, ADDRESS
  42809. * ERROR OR TRANSFER COMPLETE.
  42810.  
  42811.  
  42812. PDT11 SX1 ADDE SET *ADDRESS ERROR* STATUS
  42813. EQ /ECS/PIOX RETURN ERROR
  42814.  
  42815. PDT SA5 A5 VALIDATE *OR* PARAMETERS
  42816. SB7 X5
  42817. TA4 EQDE,EEN CHECK TRACK COUNT
  42818. MX0 -12
  42819. BX4 -X0*X4
  42820. LX4 3
  42821. SA4 X4 + TDGL
  42822. ERRNZ TDGL
  42823. LX5 -18
  42824. LX4 12
  42825. BX0 -X0*X4 TRACK COUNT
  42826. SX6 X5
  42827. NG B7,HNG IF ILLEGAL ADDRESS
  42828. LX0 1
  42829. MX2 -12
  42830. SA4 A5+B1 FETCH *MB* PARAMETERS
  42831. NG X6,HNG IF ILLEGAL SECTOR COUNT / LWA+1
  42832. LX4 -12
  42833. BX3 -X2*X4 CURRENT SECTOR
  42834. SB7 B1+B1
  42835. LX4 -11
  42836. SB3 X3
  42837. BX4 -X2*X4 CURRENT TRACK * 2
  42838. IX0 X0-X4
  42839. TB6 TCNT
  42840. NG X0,PDT11 IF TRACK .GT. LIMIT
  42841. BX0 X4
  42842. SX7 B5-B7
  42843. GE B3,B6,PDT11 IF ILLEGAL SECTOR
  42844. SA2 RWEI+X7 GET ECS TRANSFER INSTRUCTION
  42845. TLX0 4-1,TNSC TRACK * SECTOR LIMIT
  42846. TA0 TKLB,TCNT = *TKLW*
  42847. TLX4 10-1,TNSC
  42848. BX7 X2
  42849. IX0 X0+X4 WORDS/TRACK + LINK WORDS
  42850. LX5 59-38+18
  42851. AX6 24-18
  42852. SA7 PETA STORE READ / WRITE INSTRUCTION
  42853. SX1 DSTE SET *DEVICE ERROR* STATUS
  42854. SX7 B0+ CLEAR EOR READ INDICATOR
  42855. SA7 PAS4
  42856. EQ B5,B7,PDT1 IF READ REQUEST
  42857. SB4 B6-B3 SECTOR COUNT TO END OF TRACK
  42858. SB2 A0-B6 (B2) = *TKLB*
  42859. SX2 A0+
  42860. LX2 30
  42861. BX0 X2+X0
  42862. RE B6 PRESERVE LINKAGE WITHIN TRACK
  42863. PER /ECS/PIOX PROCESS PARITY ERROR
  42864. SB3 B0
  42865. IX0 X0+X3
  42866. SA0 B2+X3
  42867. MX7 -24
  42868. BX0 -X7*X0
  42869. SX2 A0
  42870. LX2 30
  42871. BX0 X2+X0
  42872. WE B4 TRANSFER LINKAGE WORDS THRU ECS
  42873. PER /ECS/PIOX PROCESS PARITY ERROR
  42874. ZR X3,PDT6 IF FILE ON TRACK BOUNDARY
  42875. SB3 B6 SET LINKAGE BUFFER OFFSET
  42876. SA0 A0+B6
  42877. BX0 -X7*X0
  42878. SX2 A0
  42879. LX2 30
  42880. BX0 X2+X0
  42881. RE B4 ASSEMBLE LINKAGE BUFFER
  42882. PER /ECS/PIOX PROCESS PARITY ERROR
  42883. PDT1 PL X5,PDT6 IF NOT READ TO EOR
  42884. MX6 59 (X6) = -1
  42885. SB4 B6 SET TO READ LINKAGE
  42886. BX2 X4
  42887. SB2 60-7
  42888. EQ PDT3 SEARCH FOR EOR
  42889.  
  42890. PDT2 SB3 B0+ RESET LINKAGE INDEX
  42891. LX1 42-59
  42892. MX7 -11-4
  42893. AX1 48-4
  42894. PL X1,HNG IF BAD SECTOR LINKAGE
  42895. BX2 -X7*X1
  42896. SX0 X2+ TRACK * 20B
  42897. SA6 A1
  42898. TLX0 0,TNSC COMPUTE LINK WORDS PER TRACK
  42899. TLX2 6,TNSC COMPUTE WORDS PER TRACK
  42900. SX1 -DSTE SET *DEVICE ERROR* STATUS
  42901. IX0 X0+X2 LINKAGE ADDRESS
  42902. PDT3 MX5 -24
  42903. BX0 -X5*X0
  42904. SX5 A0+
  42905. LX5 30
  42906. BX0 X5+X0
  42907. RE B4 READ LINKAGE
  42908. PER /ECS/PIOX PROCESS PARITY ERROR
  42909. PDT4 EQ B3,B6,PDT2 IF END OF TRACK
  42910. TA1 B3+TKLB,TCNT CHECK SECTOR LINKAGE
  42911. SB3 B3+B1 ADVANCE SECTOR NUMBER
  42912. BX0 X1
  42913. LX1 59-42
  42914. SX6 X6+B1 ADVANCE SECTOR COUNT
  42915. BX7 X7-X7
  42916. AX0 48-0
  42917. ZR X0,PDT4.1 IF EOF OR EOI TRACK
  42918. NG X1,PDT4 IF NOT EOR
  42919. AX7 X1,B2 SHORT SECTOR WORD COUNT
  42920. PDT4.1 TLX2 36-10,-TNSC POSITION EOR TRACK
  42921. SX5 B3-B1
  42922. IX7 X2+X7
  42923. LX5 18 POSITION EOR SECTOR
  42924. BX7 X7+X5
  42925. SA7 A2-B7 SAVE WORD COUNT + EOR TRACK AND SECTOR
  42926. ERRNZ PAS4+2-RWEI CODE DEPENDS ON VALUE
  42927. NE B3,B6,PDT5 IF NEXT SECTOR WITHIN TRACK
  42928. LX1 42-59
  42929. MX7 -11-4
  42930. SB3 B0 SET NEXT SECTOR
  42931. AX1 48-4
  42932. BX2 -X7*X1 EXTRACT NEXT TRACK
  42933. LX2 36-4
  42934. PDT5 SX5 B3 SAVE FILE POSITION AFTER EOR
  42935. AX2 36-12
  42936. BX7 X2+X5
  42937. SA7 A7+B1
  42938. PDT6 SB2 X3 CURRENT SECTOR
  42939. BX5 X6 SECTOR COUNT
  42940. SX1 B1
  42941. BX6 X6-X6
  42942. ZR X3,PDT7 IF CURRENT POSITION ON TRACK BOUNDARY
  42943. SX6 B6-B2 SECTOR COUNT FOR PASS 1
  42944. IX2 X5-X6
  42945. PL X2,PDT7 IF PASS 1 .GE. TOTAL REQUEST
  42946. BX6 X5
  42947. SX1 B0
  42948. PDT7 IX2 X5-X6 SECTORS REMAINING AFTER PASS 1
  42949. BX7 X2
  42950. SA6 PAS1
  42951. TLX7 3,-TNSC TRACK COUNT FOR PASS 2
  42952. AX7 7
  42953. IX1 X1+X7
  42954. SA7 A6+B1
  42955. TLX7 4,TNSC
  42956. IX7 X2-X7 SECTOR COUNT FOR PASS 3
  42957. TLX4 60-10,-TNSC
  42958. BX2 X1+X7
  42959. SA7 A6+B7
  42960. NZ X2,PDT8 IF PASS 2 AND/OR PASS 3 SET
  42961. SA7 A6 CLEAR PASS 1
  42962. SA6 A6+B7 SET PASS 3 = PASS 1
  42963. PDT8 TX1 A5-1,-FP
  42964. SB4 MECB BLOCK TRANSFER SIZE
  42965. LX1 PPXES-PPCES
  42966. BX6 X5 SECTOR COUNT
  42967. TA1 X1+ACPP,FPX GET CP/PCP ASSIGNMENT
  42968. SA5 A5+
  42969. MX2 -12
  42970. AX1 24
  42971. SA3 X1+FLSW GET RA AND FL OF CP/PCP
  42972. BX1 -X2*X3 FL/100B
  42973. LX3 -RSHF
  42974. MX2 -RMSK
  42975. BX3 -X2*X3 RA/100B
  42976. LX1 6 FL
  42977. BX7 X5 OUTPUT REGISTER
  42978. LX3 6 RA
  42979. SB2 X5 RELATIVE CM ADDRESS
  42980. LX7 59-38
  42981. BX2 X6
  42982. SB6 X1 FL
  42983. SA0 X3+B2 ABSOLUTE CM ADDRESS
  42984. SX0 X5
  42985. IX3 X3+X0
  42986. SX0 X6+
  42987. PL X7,PDT10 IF NOT READ TO EOR
  42988. SA1 PAS4
  42989. SX0 X1+
  42990. ZR X0,PDT9 IF NO SHORT SECTOR
  42991. SX2 X2+B1 ADVANCE SECTOR COUNT
  42992. IX5 X5+X1 ADVANCE CM ADDRESS
  42993. PDT9 AX7 59-38+18
  42994. SB2 X7
  42995. GT B2,B6,PET7 IF LWA+1 OF TRANSFER .GT. FL
  42996. BX0 X0-X0
  42997. ZR B2,PDT10 IF LWA+1 OF TRANSFER NOT SPECIFIED
  42998. SB6 X7 CHANGE FL CHECK
  42999. PDT10 LX6 6 WORD COUNT = SECTOR COUNT * 100B
  43000. IX5 X5+X6 ADVANCE CM ADDRESS IN *OR*
  43001. LX0 24
  43002. SB2 X5
  43003. GT B2,B6,PET7 IF LWA+1 OF TRANSFER .GT. FL
  43004. IX7 X5-X0 DECREMENT SECTOR COUNT IN *OR*
  43005. SA1 A5+B1
  43006. NG B2,HNG IF ILLEGAL LWA+1 SPECIFICATION
  43007. LX2 48
  43008. SA7 A5
  43009. MX5 12
  43010. IX6 X1+X2 UPDATE SECTORS TRANSFERED IN *MB*
  43011. BX6 X5*X6 CLEAR POSSIBLE OVERFLOW INTO *CHRV*
  43012. BX2 -X5*X1 CLEAR OLD SECTOR COUNT
  43013. BX6 X6+X2 MERGE NEW SECTOR COUNT
  43014. SX5 B7+B7
  43015. TLX5 0,TNSC
  43016. SB6 X5 BLOCK COUNT
  43017. ERRNZ 2000B/MECB-4 CODE DEPENDS ON VALUE
  43018. SA6 A1+
  43019. SX7 PET2 SET RETURN FROM READ/WRITE PROCESSOR
  43020. SA7 PETB
  43021. SA2 PAS2
  43022. MX7 12
  43023. SB2 X2 TRACK COUNT FOR PASS 2
  43024. LX7 -36
  43025. SA2 A2-B1
  43026. BX5 X7*X6 EXTRACT CURRENT SECTOR
  43027. AX5 12-6
  43028. ZR X2,PET IF NO PASS 1
  43029. SB2 B2+B1
  43030. BX6 -X7*X6 CLEAR CURRENT SECTOR
  43031. SB6 X2 SECTOR COUNT FOR PASS 1
  43032. SB4 100B BLOCK TRANSFER SIZE
  43033. SA6 A6
  43034.  
  43035. * PROCESS ECS TRANSFER.
  43036.  
  43037. PET ZR B2,PET3 IF END OF FULL TRACK TRANSFERS
  43038. TX0 X5,TCNT
  43039. TLX4 4,TNSC TRACK * LINKAGE WORDS PER TRACK
  43040. IX0 X0+X4
  43041. LX4 6 TRACK * WORDS PER TRACK
  43042. IX0 X0+X4
  43043. PET1 MX7 -24
  43044. BX0 -X7*X0
  43045. BX7 X3
  43046. LX7 30
  43047. BX0 X0+X7
  43048. SX1 PARE SET *PARITY ERROR* STATUS
  43049. SB6 B6-B1 DECREMENT BLOCK COUNT
  43050. PETA RE B4 READ ECS BLOCK
  43051. * WE B4 (WRITE ECS BLOCK)
  43052. PER /ECS/PIOX PROCESS PARITY ERROR
  43053. SX7 B4
  43054. IX3 X7+X3 ADVANCE CM ADDRESS
  43055. SA0 X3
  43056. IX0 X0+X7 ADVANCE ECS ADDRESS
  43057. NZ B6,PET1 IF NOT END OF TRANSFER
  43058. SA1 PETB
  43059. BX5 X5-X5 SET NEXT SECTOR = 0
  43060. SB4 X1 RETURN ADDRESS
  43061. JP B4 EXIT TO POST PROCESSOR
  43062.  
  43063. * SET NEXT TRACK.
  43064.  
  43065. PET2 TLX4 60-10,-TNSC REPOSITION TRACK NUMBER
  43066. MX6 -2
  43067. BX7 -X6*X4 TRT BYTE INDEX
  43068. AX2 B7,X4 TRT WORD INDEX
  43069. SB4 MECB WORD COUNT PER ECS ACCESS
  43070. TA4 TRLL,EMS CALCULATE TRT ADDRESS
  43071. IX4 X2+X4
  43072. SA2 X4 READ TRT WORD
  43073. SB2 B2-B1 DECREMENT TRACK COUNT
  43074. LX7 2 BYTE INDEX * 4
  43075. LX4 B1,X7 BYTE INDEX * 8
  43076. IX4 X7+X4 BYTE INDEX * 12
  43077. SB6 X4 SET SHIFT COUNT
  43078. MX6 -11
  43079. LX4 B6,X2 POSITION NEXT TRACK
  43080. AX4 48
  43081. PL X4,HNG IF NO NEXT TRACK
  43082. SX1 B7+B7
  43083. TLX1 0,TNSC
  43084. SB6 X1 BLOCK COUNT
  43085. ERRNZ 2000B/MECB-4 CODE DEPENDS ON VALUE
  43086. BX4 -X6*X4 REMOVE TRACK BIT
  43087. EQ B5,B7,PET IF READ REQUEST
  43088. MX6 1
  43089. LX4 48
  43090. SA0 B3+TKLB ADDRESS OF LINKAGE BUFFER
  43091. BX1 X6+X4
  43092. LX6 1-18 WORD COUNT = 100B
  43093. SX7 2020B
  43094. TLX7 0,TNSC
  43095. IX0 X0-X7 ECS ADDRESS FOR SECTOR LINKAGE
  43096. BX6 X1+X6
  43097. R= X1,ERRS RETURN STATUS = UNRECOVERABLE ERROR
  43098. TA6 A0-1,TCNT
  43099. MX7 -24
  43100. BX0 -X7*X0
  43101. SX7 A0
  43102. SB7 B4
  43103. LX7 30
  43104. BX0 X0+X7
  43105. TB4 0,TCNT
  43106. WE B4
  43107. PER /ECS/PIOX PROCESS PARITY ERROR
  43108. SB3 B0+
  43109. AX4 48 REPOSITION TRACK NUMBER
  43110. SA0 X3 RESTORE CM ADDRESS
  43111. SB4 B7
  43112. SB7 B1+B1
  43113. PET3 NZ B2,PET IF MORE TRACKS
  43114. MX6 12
  43115. SA2 A5+B1 FETCH *MB* PARAMETERS
  43116. LX6 -24
  43117. SX7 X4+4000B
  43118. BX6 -X6*X2 CLEAR TRACK
  43119. SB4 100B
  43120. SA2 PAS3 CHECK PASS 3
  43121. SB6 X2+ PASS 3 SECTOR COUNT
  43122. LX7 24
  43123. BX6 X6+X7 SET CURRENT TRACK
  43124. LX2 12
  43125. IX6 X6+X2 UPDATE CURRENT SECTOR
  43126. SX7 PET6 SET RETURN FROM PASS 3
  43127. SA7 PETB
  43128. SA6 A5+1
  43129. PET4 SB2 B1
  43130. NZ B6,PET IF PASS 3 PRESENT
  43131. SA1 A2+B1 FETCH PASS 4
  43132. ZR X1,/ECS/PIOX IF NOT READ TO EOR
  43133. BX7 X7-X7
  43134. SA7 A1 CLEAR PASS 4 INDICATOR
  43135. SB4 X1 SET WORD COUNT
  43136. AX1 18
  43137. BX4 X1
  43138. SB6 B1 SET BLOCK COUNT FOR FINAL READ
  43139. SX5 X1 SECTOR NUMBER FOR FINAL READ
  43140. MX7 24
  43141. SA1 A1+B1 FETCH FILE POSITION AFTER EOR
  43142. SX2 B1
  43143. LX7 -24
  43144. BX6 -X7*X6 REMOVE CURRENT TRACK AND SECTOR
  43145. LX2 35
  43146. LX1 12
  43147. BX2 X2+X1 ADD TRACK BIT
  43148. LX5 6 SECTOR * 100B
  43149. BX6 X6+X2 SET FILE POSITION AFTER EOR
  43150. AX4 18 TRACK NUMBER FOR FINAL READ
  43151. SX7 PET4 SET RETURN FROM FINAL READ
  43152. SA7 PETB
  43153. SA6 A6 STORE *MB* PARAMETERS
  43154. NZ B4,PET IF NOT EMPTY SECTOR
  43155. BX1 X1-X1 RETURN STATUS = NO ERROR
  43156. JP /ECS/PIOX EXIT - FUNCTION COMPLETE
  43157.  
  43158. PET6 EQ B5,B7,PET4 IF READ REQUEST
  43159. LX6 -12
  43160. MX2 -12
  43161. BX0 X4
  43162. AX4 10-4
  43163. BX2 -X2*X6 EXTRACT CURRENT SECTOR
  43164. IX0 X0+X4 ECS ADDRESS OF LINKAGE
  43165. SX2 X2+B3
  43166. BX7 X7-X7
  43167. SA3 X2+TKLB SAVE LINKAGE WORD
  43168. SA0 B3+TKLB
  43169. SX1 DSTE SET *DEVICE ERROR* STATUS
  43170. SA7 A3+ SET EOI IN LINKAGE BLOCK
  43171. SX7 A0
  43172. LX7 30
  43173. BX0 X7+X0
  43174. LX6 X3
  43175. TB4 0,TCNT
  43176. WE B4
  43177. PER /ECS/PIOX PROCESS PARITY ERROR
  43178. BX1 X1-X1 RETURN STATUS = NO ERROR
  43179. SA6 A3 RESTORE LINKAGE WORD
  43180. JP /ECS/PIOX EXIT - FUNCTION COMPLETE
  43181.  
  43182. PET7 SA5 A5 CHECK REQUEST
  43183. R= X1,IFLS SET STATUS = INSUFFICIENT FL FOR LOAD
  43184. LX5 59-38
  43185. NG X5,/ECS/PIOX IF READ TO EOR
  43186. JP HNG HANG PP
  43187.  
  43188.  
  43189. PETB BSS 1 RETURN ADDRESS
  43190.  
  43191. PAS1 CON 0 PASS 1 SECTOR COUNT
  43192. PAS2 CON 0 PASS 2 TRACK COUNT
  43193. PAS3 CON 0 PASS 3 SECTOR COUNT
  43194. PAS4 CON 0,0 PASS 4 WORD COUNT (READ TO EOR ONLY)
  43195. RWEI RE B4
  43196. PER /ECS/PIOX PROCESS PARITY ERROR
  43197.  
  43198. + WE B4
  43199. PER /ECS/PIOX PROCESS PARITY ERROR
  43200. SPACE 4,10
  43201. * TRACK LINKAGE BUFFERS.
  43202. *
  43203. * SPACE IS ALLOCATED FOR A MAXIMUM TRACK SIZE (200B SECTORS).
  43204. * *CPUMLD* WILL REDUCE THE BLOCK *LWA* FOR SMALLER TRACK SIZES.
  43205. * *TKLW* IS NOW REFERENCED BY *TKLB+TCNT*.
  43206.  
  43207.  
  43208. TKLB BSS 0
  43209. .A SET 1
  43210. .B DUP 200B
  43211. VFD 12/.A,12/100B,36/0
  43212. .A SET .A+1
  43213. .B ENDD
  43214.  
  43215. BSS 200B *TLKW*
  43216. QUAL ECS
  43217.  
  43218. ENDBLK
  43219. BLOCK EEC,(EXTERNAL ECS PROCESSING ROUTINES.),ECS
  43220. SPACE 4,10
  43221. ** ASSEMBLY CONSTANTS.
  43222.  
  43223.  
  43224. FRWC EQU 1 FLAG REGISTER FUNCTION WORD COUNT
  43225. CFR SPACE 4
  43226. ** CFR - CLEAR FLAG REGISTER BIT.
  43227. *
  43228. * ENTRY (B3) = CPU NUMBER TO BE RESTORED TO (A0).
  43229. * (B4) = BIT NUMBER TO CLEAR.
  43230. * (B6) = EXIT ADDRESS.
  43231. *
  43232. * EXIT (A0) = CPU NUMBER = (B3).
  43233. *
  43234. * USES X - 0, 2.
  43235. * A - 0.
  43236.  
  43237.  
  43238. CFR SA0 ZERL SET WORD TO WRITE TO ECS
  43239. TX0 B4+ETLT*100B+FRET,ECLT
  43240. TX0 X0,TCNT
  43241. SX2 A0+
  43242. LX2 30
  43243. BX0 X0+X2
  43244. WE 1 CLEAR WHO HAS BIT INTERLOCKED
  43245. RJ ECH HANG ON WRITE ERROR
  43246. SX2 B1+
  43247. TSX0 (403B,ESM,7B)
  43248. LX0 21
  43249. LX2 X2,B4 POSITION FLAG BIT
  43250. BX0 X0+X2
  43251. RE FRWC CLEAR FLAG REGISTER BIT
  43252. RJ ECH HANG ON HALF EXIT
  43253. SA0 B3 RESTORE CPU NUMBER
  43254. JP B6 RETURN
  43255. SFR SPACE 4
  43256. ** SFR - SET FLAG REGISTER BIT.
  43257. *
  43258. * ENTRY (B3) = CPU NUMBER TO BE RESTORED TO (A0).
  43259. * (B4) = BIT NUMBER TO SET.
  43260. * (B6) = EXIT ADDRESS.
  43261. *
  43262. * EXIT (X7) = 12/0,12/7777B,36/0 IF BIT ALREADY SET.
  43263. * (X7) = 0 IF BIT NOT PREVIOUSLY SET.
  43264. * (A0) = CPU NUMBER = (B3).
  43265. *
  43266. * USES X - 0, 2, 7.
  43267. * A - 0.
  43268.  
  43269.  
  43270. SFR SX2 B1
  43271. TSX0 (400B,ESM,4B)
  43272. LX0 21 SET FLAG REGISTER FUNCTION
  43273. LX2 X2,B4 POSITION BIT TO SET
  43274. BX0 X0+X2
  43275. SA0 MMFL ENSURE (A0) .LT. FL FOR FLAG OPERATION
  43276. SX2 A0
  43277. MX7 12
  43278. LX2 30
  43279. LX7 -12
  43280. RE FRWC TEST AND SET FLAG BIT
  43281. EQ SFR1 IF BIT PREVIOUSLY SET
  43282. TX0 B4+ETLT*100B+FRET,ECLT
  43283. TX0 X0,TCNT
  43284. SX7 B0
  43285. BX0 X2+X0
  43286. WE 1 WRITE INDICATION OF WHICH MACHINE HAS INTER
  43287. RJ ECH HANG ON WRITE ERROR
  43288. SFR1 SA0 B3 RESTORE CPU NUMBER
  43289. JP B6 RETURN
  43290. TITLE EXTERNAL ECS PARITY ERROR PROCESSING.
  43291. SPACE 4,10
  43292. ** MC - INPUT REGISTER FOR ECS PARITY ERROR PROCESSING ROUTINE.
  43293.  
  43294.  
  43295. MC VFD 18/0L1MC
  43296. TVFD 6/,SC
  43297. TVFD 12/,EEM
  43298. VFD 24/0
  43299. ECH SPACE 4,10
  43300. ** ECH - EXTENDED MEMORY ERROR HANG.
  43301. *
  43302. * ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
  43303. * INSTRUCTION IN THE CASE OF A FLAG REGISTER CLEAR FUNCTION.
  43304. * IN THE CASE OF AN WRITE ERROR REPORTING IS DONE BY *RPE*
  43305. * WHICH THEN EXITS TO *ECH1* IF THE ERROR IS UNRECOVERED.
  43306.  
  43307.  
  43308. ECH PS ENTRY
  43309. ECH1 SX1 ECHM SET ERROR MESSAGE ADDRESS
  43310. SB5 ECH2 SET *MSC* RETURN
  43311. EQ /MONITOR/MSC SEND MESSAGE TO SYSTEM CONTROL POINT
  43312.  
  43313. ECH2 EQ * HANG CPUMTR
  43314. PER SPACE 4
  43315. ** PER - PROCESS ECS PARITY ERROR. (MONITOR MODE)
  43316. *
  43317. * ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
  43318. * INSTRUCTION.
  43319. *
  43320. * EXIT RETURNS TO CALLER IF ERROR RECOVERED ON RETRY.
  43321. * (X0) = ADDRESS OF ECS PARITY ERROR, IF UNRECOVERED.
  43322. *
  43323. * USES X - NONE.
  43324. * B - NONE.
  43325. * A - 1, 2, 6, 7.
  43326. *
  43327. * CALLS RPE.
  43328.  
  43329.  
  43330. PERX SB7 X1+ RESTORE (B7)
  43331. SA1 A1+1 RESTORE (X1)
  43332. PER PS 0 ENTRY/EXIT
  43333. SA7 PERA SAVE REGISTERS
  43334. BX7 X5
  43335. SX5 B7
  43336. SB7 PERX *RPE* RETURN ADDRESS
  43337. EQ RPE
  43338.  
  43339. PERA BSS 9 REGISTER SAVE BUFFER
  43340. RPE SPACE 4
  43341. ** RPE - RECOVER AND REPORT ECS PARITY ERROR.
  43342. * THE WORD COUNT FOR ECS READ/WRITES MUST BE EXPRESSED AS
  43343. * A CONSTANT OR AS A CONSTANT + (B4).
  43344. *
  43345. * ENTRY (X5) = VALUE TO BE RESTORED TO B7.
  43346. * (X7) = VALUE TO BE RESTORED TO X5.
  43347. * (B7) = EXIT ADDRESS.
  43348. * (B7)+1 = WORD RETURN JUMPED TO FROM ECS INSTRUCTION.
  43349. * (A7) = FIRST WORD ADDRESS OF REGISTER SAVE BUFFER.
  43350. * (X0) = ADDRESS OF ECS PARITY ERROR, IF UNRECOVERED.
  43351. *
  43352. * EXIT (X1) = VALUE TO BE RESTORED TO B7.
  43353.  
  43354.  
  43355. RPE SA6 A7+B1 SAVE REGISTERS - (X6)
  43356. LX6 X4
  43357. SA7 A6+B1 SAVE (X5)
  43358. SA6 A7+B1 SAVE (X4)
  43359. BX7 X3
  43360. LX6 X2
  43361. SA7 A6+B1 SAVE (X3)
  43362. SA6 A7+B1 SAVE (X2)
  43363. SX7 A0
  43364. MX2 -18
  43365. SX3 B3
  43366. BX7 -X2*X7
  43367. SX4 B4
  43368. BX3 -X2*X3
  43369. LX7 18
  43370. BX4 -X2*X4
  43371. BX7 X3+X7
  43372. SX3 B6
  43373. BX6 -X2*X5
  43374. LX7 18
  43375. BX3 -X2*X3
  43376. LX6 18
  43377. BX7 X7+X4
  43378. SX4 B5
  43379. SA7 A6+B1 SAVE (A0), (B3), (B4)
  43380. BX4 -X2*X4
  43381. BX6 X6+X3
  43382. LX6 18
  43383. BX6 X6+X4
  43384. SA6 A7+B1 SAVE (B7), (B6), (B5)
  43385. BX7 X1
  43386. SA7 A6+B1 SAVE (X1)
  43387. SA1 B7+B1 FIND ECS INSTRUCTION
  43388. SB6 PERX
  43389. AX1 30
  43390. SA2 X1-1 READ INSTRUCTION
  43391. AX2 30
  43392. SX3 X2 SET CONSTANT PORTION OF WORD COUNT
  43393. LX2 59-20 POSITION REGISTER PORTION OF WORD COUNT
  43394. PL X2,RPE1 IF (B4) NOT USED IN WORD COUNT
  43395. SX3 X3+B4
  43396. RPE1 SA1 MC
  43397. BX1 X1+X3 MERGE WORD COUNT IN CALL
  43398. MX6 -3
  43399. BX6 -X6*X2 EXTRACT READ/WRITE PORTION OF INSTRUCTION
  43400. LX6 18
  43401. BX5 X1+X6 *1MC* CALL
  43402. BX1 X5
  43403. BX6 X5
  43404. SA6 RPEA SAVE *1MC* CALL
  43405. SB3 RPE2 *APS* RETURN ADDRESS
  43406. NE B6,B7,/PROGRAM/APS IF IN PROGRAM MODE
  43407. SX7 B7 SAVE (B7)
  43408. SB3 RPE1.1 *CAL* *ACB* RETURN ADDRESS
  43409. BX1 X1-X1 PRESET NO BUFFER AVAILABLE
  43410. SA7 /MONITOR/T1
  43411. SB6 /MONITOR/ACB *CAL* RETURN ADDRESS
  43412. TB7 SCA SET SYSTEM CONTROL POINT ADDRESS
  43413. EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
  43414.  
  43415. RPE1.1 ZR X1,RPE1.3 IF NO BUFFER AVAILABLE
  43416. SB3 RPE1.2 *APQ* RETURN ADDRESS
  43417. BX7 X1
  43418. BX6 X5 *1MC* CALL
  43419. SA7 /MONITOR/APQA PARAMETER WORD
  43420. SB4 B0 SET LIBRARY SEARCH NEEDED
  43421. EQ /MONITOR/APQ ASSIGN PP
  43422.  
  43423. RPE1.2 SA1 /MONITOR/APQA GET BUFFER ADDRESS
  43424. RPE1.3 SA2 /MONITOR/T1 RESTORE (B7)
  43425. SB7 X2+ RESTORE (B7)
  43426. RPE2 SA2 RPEA *1MC* PP CALL
  43427. SB5 X2 WORD COUNT
  43428. LX2 -2
  43429. BX5 X0
  43430. SB4 X2 READ/WRITE FLAG
  43431. SB3 B0+ SET NO ERRORS REPORTED
  43432. ZR X1,RPE6 IF NO BUFFER ASSIGNED
  43433. SX6 B0+ INITIALIZE BUFFER
  43434. SA6 X1+4
  43435. SA6 X1+7
  43436. SA6 X1+1
  43437.  
  43438. * RETRY WITH SINGLE WORD TRANSFERS.
  43439.  
  43440. RPE6 LX0 30 READ DATA
  43441. ERX2 X0
  43442. SX3 501B SET UNRECOVERED WITH GOOD DATA PRESENT
  43443. LX0 30
  43444. BX6 X2 POSSIBLE BAD DATA (READ OPERATION)
  43445. * GOOD DATA (WRITE OPERATION)
  43446. NG B4,RPE8 IF WRITE
  43447. SX3 601B SET UNRECOVERED WITH BAD DATA PRESENT
  43448. RE 1
  43449. EQ RPE7 IF ERROR
  43450. LX0 30
  43451. ERX2 X0 VERIFY DATA
  43452. LX0 30
  43453. BX7 X2-X6
  43454. SX3 301B RECOVERED WITH GOOD AND BAD DATA
  43455. CX7 X7
  43456. ZR X7,RPE9 IF DATA VERIFIES
  43457. RPE7 GT B3,B1,RPE9 IF TWO ERRORS REPORTED
  43458. LX3 -18
  43459. SB3 B3+B1 INCREMENT ERRORS REPORTED
  43460. ZR X1,RPE9 IF NO BUFFER ASSIGNED
  43461. LX3 -18
  43462. MX4 -24
  43463. LX0 30
  43464. BX7 -X4*X0 CM ADDRESS OF TRANSFER
  43465. LX0 30
  43466. BX4 -X4*X0 ECS ADDRESS OF TRANSFER
  43467. LX7 24
  43468. BX3 X3+X4
  43469. BX7 X7+X3
  43470. SA7 A6 STATUS WORD
  43471. SA6 A7+B1 BAD DATA
  43472. BX7 X2
  43473. BX6 X6-X6
  43474. SA7 A6+B1 GOOD DATA
  43475. SA6 A7+B1
  43476. EQ RPE9 CONTINUE ONE-WORD TRANSFER
  43477.  
  43478. RPE8 WE 1
  43479. EQ RPE7
  43480. RPE9 SA0 A0+B1 INCREMENT ADDRESSES
  43481. SX3 B1
  43482. SB5 B5-B1
  43483. IX0 X0+X3
  43484. LX3 30
  43485. IX0 X0+X3
  43486. GT B5,B0,RPE6 IF MORE WORDS TO CHECK
  43487. ZR X1,RPE9.2 IF NO BUFFER ASSIGNED
  43488. NZ B3,RPE9.1 IF NOT ALL ERRORS RECOVERED
  43489. MX0 -24
  43490. BX7 -X0*X5 ECS ADDRESS
  43491. SX3 B1 RECOVERED WITH NO GOOD OR BAD DATA
  43492. LX5 -30
  43493. LX3 -18
  43494. BX0 -X0*X5 CM ADDRESS
  43495. BX6 X3+X7
  43496. LX0 24
  43497. LX5 30
  43498. BX6 X6+X0
  43499. SA6 A6+ STATUS WORD
  43500. RPE9.1 SA1 X1 SET BUFFER FULL FLAG
  43501. MX6 1
  43502. BX6 X1+X6
  43503. SA6 A1
  43504. RPE9.2 ZR B3,RPE12 IF ERROR RECOVERED
  43505.  
  43506. * SET UNRECOVERED ERROR EXIT ADDRESS.
  43507.  
  43508. SA1 TPER-1
  43509. MX4 18
  43510. SA2 B7+1
  43511. LX4 -12
  43512. SB5 RPE12 *MSC* RETURN ADDRESS
  43513. RPE10 SA1 A1+B1
  43514. BX6 X1-X2
  43515. BX7 X4*X6
  43516. LX1 30
  43517. NZ X7,RPE10 IF EXIT ADDRESS NOT FOUND
  43518. BX7 X6-X1
  43519. SA7 A2 STORE JUMP TO EXIT ADDRESS
  43520. SX1 ECEM
  43521. JP /MONITOR/MSC SET *EXTENDED MEMORY ERROR.* MESSAGE
  43522.  
  43523. * RESTORE REGISTERS.
  43524.  
  43525. RPE12 SA1 B7+4
  43526. SA2 A1+B1
  43527. BX0 X5 RESTORE (X0)
  43528. BX7 X1 RESTORE (X7)
  43529. LX6 X2 RESTORE (X6)
  43530. SA1 A2+B1 RESTORE (X5)
  43531. SA2 A1+B1 RESTORE (X4)
  43532. BX5 X1
  43533. SA1 A2+B1 RESTORE (X3)
  43534. LX4 X2
  43535. BX3 X1
  43536. SA2 A1+B1 RESTORE (X2)
  43537. SA1 A2+B1
  43538. SB4 X1 RESTORE (B4)
  43539. AX1 18
  43540. SB3 X1 RESTORE (B3)
  43541. AX1 18
  43542. SA0 X1 RESTORE (A0)
  43543. SA1 A1+B1
  43544. SB5 X1 RESTORE (B5)
  43545. AX1 18
  43546. SB6 X1 RESTORE (B6)
  43547. AX1 18
  43548. JP B7
  43549.  
  43550. RPEA BSS 1 *1MC* PP CALL WORD
  43551.  
  43552. ECHM CON 10H HUNG -
  43553. ECEM DATA C* EXTENDED MEMORY ERROR.*
  43554. RSE SPACE 4,10
  43555. ** RSE - REPORT STORAGE MOVE EXTENDED MEMORY ERROR.
  43556. *
  43557. * ENTRY (A0) = CM ADDRESS.
  43558. * (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
  43559. * (X1) = WORD COUNT.
  43560.  
  43561.  
  43562. RSE PS ENTRY/EXIT
  43563. SA6 RSEA SAVE (X6)
  43564. BX6 X0
  43565. SA6 A6+B1 SAVE (X0)
  43566. BX6 X2
  43567. SA6 A6+B1 SAVE (X2)
  43568. BX6 X3
  43569. SA6 A6+B1 SAVE (X3)
  43570. BX6 X4
  43571. SA6 A6+B1 SAVE (X4)
  43572. BX6 X5
  43573. SA6 A6+B1 SAVE (X5)
  43574. SX6 A0+
  43575. SA6 A6+1 SAVE (A0)
  43576. BX5 X1 WORD COUNT
  43577. SA1 SMRL
  43578. LX1 59-37
  43579. NG X1,RSE5 IF PREVIOUS ERROR
  43580. SB3 RSE1 *ACB* RETURN ADDRESS
  43581. EQ /MONITOR/ACB ASSIGN COMMUNICATION BUFFER
  43582.  
  43583. RSE1 ZR X1,RSE5 IF NO BUFFER ASSIGNED
  43584. SB4 X5
  43585. LX5 24
  43586. BX6 X5+X1
  43587. SA6 RSEB DATA FOR *1MC* CALL
  43588. SX6 B1
  43589. SA2 SMRL SET EXTENDED MEMORY ERROR DURING MOVE
  43590. LX6 37
  43591. BX6 X6+X2
  43592. SA6 A2
  43593. SB3 B0 INITIALIZE NO ERRORS
  43594. BX6 X6-X6
  43595. SA6 X1+B1
  43596. RSE2 SX3 601B UNRECOVERED WITH BAD DATA
  43597. LX0 30
  43598. ERX2 X0 READ BAD DATA
  43599. LX0 30
  43600. RE 1
  43601. EQ RSE6 IF ERROR
  43602. LX0 30
  43603. ERX4 X0 READ GOOD DATA
  43604. LX0 30
  43605. SX3 301B RECOVERED WITH GOOD AND BAD DATA
  43606. BX5 X4-X2
  43607. CX5 X5
  43608. NZ X5,RSE6 IF COMPARE ERROR
  43609. RSE3 SX3 B1
  43610. IX0 X0+X3 INCREMENT ECS ADDRESS
  43611. LX0 30
  43612. IX0 X0+X3 INCREMENT CM ADDRESS
  43613. SA0 X0+
  43614. LX0 30
  43615. SB4 B4-B1
  43616. NZ B4,RSE2 IF MORE WORDS TO CHECK
  43617. NZ B3,RSE4 IF ERRORS REPORTED
  43618. SA2 RSEA+1 (X0)
  43619. MX0 -24
  43620. BX5 -X0*X2 ECS ADDRESS
  43621. SX3 B1 RECOVERED - NO GOOD OR BAD DATA
  43622. LX2 -30
  43623. LX3 -18
  43624. BX0 -X0*X2 CM ADDRESS
  43625. BX6 X3+X5
  43626. LX0 24
  43627. BX6 X6+X0
  43628. SA6 A6 SET STATUS WORD IN BUFFER
  43629. RSE4 SA1 X1 SET BUFFER COMPLETE
  43630. MX6 1
  43631. BX6 X6+X1
  43632. SA6 A1
  43633. RSE5 SA1 RSEA RESTORE REGISTERS
  43634. BX6 X1 RESTORE (X6)
  43635. SA1 A1+B1
  43636. BX0 X1 RESTORE (X0)
  43637. SA2 A1+B1 RESTORE (X2)
  43638. SA3 A2+B1 RESTORE (X3)
  43639. SA4 A3+B1 RESTORE (X4)
  43640. SA1 A4+B1
  43641. BX5 X1 RESTORE (X5)
  43642. SA1 A1+B1
  43643. SA0 X1 RESTORE (A0)
  43644. EQ RSE RETURN
  43645.  
  43646. RSE6 GT B3,B1,RSE3 IF TWO ERRORS REPORTED
  43647. SB3 B3+B1
  43648. MX6 -24
  43649. BX7 -X6*X0 ECS ADDRESS
  43650. LX0 30
  43651. BX6 -X6*X0 CM ADDRESS
  43652. LX0 30
  43653. LX3 -18
  43654. LX6 24
  43655. BX7 X7+X3
  43656. BX6 X6+X7
  43657. SA6 A6 STATUS WORD
  43658. BX6 X2 BAD DATA
  43659. BX7 X4 GOOD DATA
  43660. SA6 A6+B1
  43661. SA7 A6+B1
  43662. BX6 X6-X6
  43663. SA6 A7+B1
  43664. EQ RSE3 PROCESS NEXT WORD
  43665.  
  43666.  
  43667. RSEA BSS 7 REGISTER SAVE AREA
  43668. RSEB BSS 1 *1MC* CALL DATA
  43669. TSM SPACE 4,10
  43670. ** TSM - EXTENSION FOR EXTERNAL ECS PARITY ERROR PROCESSING
  43671. * DURING STORAGE MOVE.
  43672. *
  43673. * EXIT (X4) = RESTORED TO (SMRL) SHIFTED IF ENTRY AT *TSM4*.
  43674. * TO */MONITOR/BNJ1* IF ENTRY AT *TSM8*.
  43675. * TO */MONITOR/TSM1* IF ENTRY AT *TSM4*.
  43676. *
  43677. * USES X - 1, 2, 4, 6, 7.
  43678. * A - 1, 2, 4, 6, 7.
  43679. * B - 3, 4, 6.
  43680. *
  43681. * CALLS /MONITOR/APQ,/MONITOR/CAL.
  43682.  
  43683.  
  43684. TSM4 SA2 RSEB GET ERROR DATA
  43685. SA1 MC
  43686. SB4 B0 SET LIBRARY SEARCH NEEDED
  43687. BX7 X2
  43688. SA7 /MONITOR/APQA PARAMETER WORD (BUFFER ADDRESS)
  43689. AX2 24
  43690. BX6 X1+X2
  43691. SB6 TSM5 *CAL* RETURN ADDRESS - NO LIMIT
  43692. SB3 TSM6 *CAL* RETURN ADDRESS - IF LIMIT
  43693. EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
  43694.  
  43695. TSM5 SB3 TSM7 *APQ* RETURN ADDRESS
  43696. EQ /MONITOR/APQ ASSIGN PP
  43697.  
  43698. TSM6 SA1 /MONITOR/APQA CLEAR BUFFER INTERLOCK
  43699. BX6 X6-X6
  43700. SA6 X1
  43701. TSM7 SA4 SMRL RESTORE (X4)
  43702. NO
  43703. LX4 59-37
  43704. EQ /MONITOR/TSM2 RE-ENTER MAIN PROCESSING
  43705.  
  43706. * ERROR OCCURED DURING STORAGE MOVE OF USER ECS.
  43707. * JOB MUST NOT BE RESTARTED, AND *MTR* WILL SET AN
  43708. * ERROR FLAG ON THE JOB AND ABORT IT.
  43709.  
  43710. TSM8 SX6 B1 SET XM ERROR RESPONSE
  43711. LX6 36
  43712. SA6 SMRL SET RESPONSE
  43713. EQ /MONITOR/BNJ1 BEGIN NEW JOB
  43714. TITLE EXTERNAL ECS PROGRAM MODE ROUTINES.
  43715. QUAL PROGRAM
  43716. MSE SPACE 4
  43717. ** MSE - MOVE STORAGE THROUGH ECS.
  43718. *
  43719. * ENTRY (B7) = CP/PCP ADDRESS.
  43720. *
  43721. * EXIT TO *MST2* TO UPDATE REFERENCE ADDRESS.
  43722. *
  43723. * USES X - 0, 1, 3, 4, 5, 6, 7.
  43724. * B - 2, 3, 4, 5.
  43725. * A - 1, 5, 6, 7.
  43726.  
  43727.  
  43728. MSE TA1 EEN CHECK ECS STATUS
  43729. SB4 BTRI
  43730. LX1 59-49
  43731. NO
  43732. NG X1,MST IF EXTENDED MEMORY OFF OR DOWN
  43733. SB6 MSE1 SET *SFR* RETURN
  43734. TNO /ECS/SFR,MMF SET *BTRI* INTERLOCK
  43735.  
  43736. MSE1 NZ X7,MST IF UNABLE TO INTERLOCK FLAG REGISTER
  43737. SA5 SMIN
  43738. SA2 B7+FLSW GET FL STATUS WORD
  43739. MX1 -12
  43740. BX4 -X1*X2
  43741. LX5 6
  43742. LX2 -12
  43743. NO
  43744. LX4 6 FL
  43745. BX3 -X1*X2
  43746. LX2 12+12
  43747. LX3 6 RA
  43748. BX2 -X1*X2
  43749. LX2 6 NFL
  43750. SB5 X5+ SET MOVE INCREMENT
  43751. IX3 X3-X2 SUBTRACT NFL SIZE FROM RA
  43752. TX0 SMLT*100B,ECLT
  43753. TX0 X0,TCNT
  43754. IX4 X4+X2 ADD NFL SIZE TO FIELD LENGTH
  43755. MX6 30
  43756. SB4 X4
  43757. LX5 30
  43758. SB6 30
  43759. SX2 100B
  43760. NG X5,MSE3 IF DOWNWARD MOVE
  43761. IX3 X3+X4
  43762. IX3 X3-X2
  43763. BX2 -X2
  43764. SA0 X3
  43765. LX4 X3,B6
  43766. BX0 X4+X0
  43767.  
  43768. * MOVE 100B WORDS THROUGH ECS.
  43769.  
  43770. MSE2 WE 100B WRITE 100B WORDS
  43771. EQ MSE4 IF EXTENDED MEMORY ERROR
  43772. SA0 A0+B5 SET ADDRESS PLUS INCREMENT
  43773. IX0 X0+X5
  43774. RE 100B
  43775. EQ MSE4 IF EXTENDED MEMORY ERROR
  43776. IX3 X3+X2
  43777. SB4 B4-100B DECREMENT WORD COUNT
  43778. MSE3 LX4 X3,B6
  43779. BX0 -X6*X0
  43780. BX0 X4+X0
  43781. SA0 X3
  43782. NZ B4,MSE2 IF NOT END OF MOVE
  43783. SB4 BTRI SET FLAG BIT TO CLEAR
  43784. SB6 MST2 SET *CFR* RETURN
  43785. TEQ (/ECS/CFR,MMF,/PROGRAM/MST2)
  43786.  
  43787. * COMPLETE MOVE WITHOUT ECS.
  43788.  
  43789. MSE4 SX4 B1+
  43790. LX5 30 MOVE DIFFERENTIAL
  43791. IX1 X3-X4
  43792. SX6 MST DISABLE STORAGE MOVE THROUGH ECS
  43793. SA6 TMNR+MSTF
  43794. NG X5,MSE6 IF DOWNWARD MOVE
  43795. BX4 -X4
  43796. IX1 X1-X2
  43797. MSE6 IX1 X1+X4
  43798. ERX2 X1
  43799. SB4 B4-B1
  43800. IX7 X1+X5
  43801. BX6 X2
  43802. EWX6 X7
  43803. NZ B4,MSE6 IF MOVE NOT COMPLETE
  43804. SX1 100B WORD COUNT
  43805. RJ /ECS/RSE REPORT STORAGE MOVE EXTENDED MEMORY ERROR
  43806. SB5 MST2 *MSC* RETURN ADDRESS
  43807. SX1 MSEA * EXTENDED MEMORY ERROR - STORAGE MOVE.*
  43808. EQ /MONITOR/MSC ISSUE ERROR MESSAGE
  43809.  
  43810.  
  43811. MSEA DATA C* EXTENDED MEMORY ERROR - STORAGE MOVE.*
  43812. PER SPACE 4
  43813. ** PER - PROCESS ECS PARITY ERROR. (PROGRAM MODE)
  43814. *
  43815. * ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
  43816. * INSTRUCTION.
  43817. *
  43818. * EXIT RETURNS TO CALLER IF ERROR RECOVERED ON RETRY.
  43819. *
  43820. * USES X - NONE.
  43821. * B - NONE.
  43822. * A - 1, 2, 6, 7.
  43823. *
  43824. * CALLS RPE.
  43825.  
  43826.  
  43827. PERX SB7 X1+ RESTORE (B7)
  43828. SA1 A1+1 RESTORE (X1)
  43829.  
  43830. PER PS 0 ENTRY/EXIT
  43831. SA7 PERA SAVE REGISTERS
  43832. BX7 X5
  43833. SX5 B7
  43834. SB7 PERX *RPE* RETURN ADDRESS
  43835. EQ /ECS/RPE
  43836.  
  43837. PERA BSS 9 REGISTER SAVE BUFFER
  43838. TITLE ECS PARITY ERROR PROCESSING PARAMETERS.
  43839. QUAL ECS
  43840. TPER SPACE 4
  43841. ** TPER - TABLE OF PROCESSORS FOR UNRECOVERED ERRORS.
  43842. * ENTRY 1 WORD.
  43843. *
  43844. *T 12/,18/ ADD,12/,18/ EXIT
  43845. * ADD ADDRESS + 1 OF ECS INSTRUCTION.
  43846. * EXIT UNRECOVERED ERROR EXIT ADDRESS.
  43847.  
  43848.  
  43849. TPER BSS 0
  43850.  
  43851. TPER HERE
  43852.  
  43853. CON 0
  43854.  
  43855. ENDBLK
  43856. BLOCK SUE,(SIMULTANEOUS UEM/ESM.)
  43857. SPACE 4,10
  43858. CME$ EQU 1 DEFINE CME INSTRUCTION BLOCK
  43859. RUM SPACE 4,10
  43860. ** RUM - READ USER ECS DATA FROM UEM TO CM.
  43861. *
  43862. * ENTRY AT *RUM* IF PROGRAM MODE.
  43863. * AT *RUM1* IF MONITOR MODE.
  43864. * (B4) = WORD COUNT TO TRANSFER.
  43865. * (B6) = RETURN ADDRESS FOR *RUE* MACRO, OR
  43866. * COMPLEMENT OF RETURN ADDRESS FOR *WUE* MACRO.
  43867. * (X0) = 30/ ABSOLUTE CM ADDRESS, 30/ UEM ADDRESS.
  43868. *
  43869. * EXIT X0, X1, X2, X3, X4, X6, X7, B4, B5, B6 RESTORED.
  43870. *
  43871. * USES A - 2, 3, 6, 7.
  43872. * B - 4, 5, 6.
  43873. * X - 0, 1, 2, 3, 4, 6, 7.
  43874. *
  43875. * CALLS /CME/PSM.
  43876.  
  43877.  
  43878. RUM SA7 PMRG+4 SAVE PROGRAM MODE REGISTERS
  43879. EQ RUM2 SAVE REGISTERS
  43880.  
  43881. RUM1 SA7 MMRG+4 SAVE MONITOR MODE REGISTERS
  43882.  
  43883. * SAVE X0, X1, X4, X6, X7, B4, B5, B6, X2, X3
  43884. * IN PROGRAM OR MONITOR MODE BUFFER.
  43885.  
  43886. RUM2 SA6 A7-B1
  43887. SX7 B4
  43888. BX6 X4
  43889. SA7 A7+B1
  43890. SA6 A6-B1
  43891. SX7 B5
  43892. LX6 X1
  43893. SA7 A7+B1
  43894. MX4 -12
  43895. SX7 B6
  43896. SA7 A7+B1
  43897. SA6 A6-B1
  43898. BX7 X2
  43899. SA2 UEML GET UEM BASE ADDRESS
  43900. BX6 X0
  43901. LX2 12
  43902. SA7 A7+B1
  43903. LX7 X3
  43904. BX2 -X4*X2
  43905. SA6 A6-B1
  43906. LX2 9
  43907. SA7 A7+B1
  43908. IX0 X0+X2 ABSOLUTIZE UEM ADDRESS
  43909. PL B6,RUM3 IF TRANSFER DATA FROM UEM TO CM
  43910. LX0 30 TRANSFER DATA FROM CM TO UEM
  43911. SB6 -B6
  43912. SX7 B6+ SAVE RETURN ADDRESS
  43913. SA7 A7-2
  43914. RUM3 MX2 30
  43915. BX1 X2*X0 ADDRESS TO TRANSFER TO
  43916. SB6 RUM7 SET RETURN ADDRESS
  43917. BX0 -X2*X0 ADDRESS TO TRANSFER FROM
  43918. SB5 RUM4 SET RETURN ADDRESS
  43919. LX1 30
  43920. IX1 X0-X1
  43921. EQ /CME/PSM PRESET TRANSFER
  43922.  
  43923. * TRANSFER 10B WORD BLOCKS THROUGH REGISTERS.
  43924.  
  43925. RUM4 ERX2 X0
  43926. IX0 X0+X4
  43927. ERX3 X0
  43928. IX0 X0+X4
  43929. ERX6 X0
  43930. IX0 X0+X4
  43931. ERX7 X0
  43932. IX0 X0+X4
  43933. EQ B4,B1,RUM6 IF ONLY ONE BLOCK TO TRANSFER
  43934. RUM5 EWX2 X1
  43935. IX1 X1+X4
  43936. ERX2 X0
  43937. IX0 X0+X4
  43938. SB4 B4-1
  43939. EWX3 X1
  43940. IX1 X1+X4
  43941. ERX3 X0
  43942. IX0 X0+X4
  43943. EWX6 X1
  43944. IX1 X1+X4
  43945. ERX6 X0
  43946. IX0 X0+X4
  43947. EWX7 X1
  43948. IX1 X1+X4
  43949. ERX7 X0
  43950. IX0 X0+X4
  43951. EWX2 X1
  43952. IX1 X1+X4
  43953. ERX2 X0
  43954. IX0 X0+X4
  43955. EWX3 X1
  43956. IX1 X1+X4
  43957. ERX3 X0
  43958. IX0 X0+X4
  43959. EWX6 X1
  43960. IX1 X1+X4
  43961. ERX6 X0
  43962. IX0 X0+X4
  43963. EWX7 X1
  43964. IX1 X1+X4
  43965. ERX7 X0
  43966. IX0 X0+X4
  43967. GT B4,B1,RUM5 IF MORE 10B WORD BLOCKS TO TRANSFER
  43968. RUM6 EWX2 X1
  43969. IX1 X1+X4
  43970. ERX2 X0
  43971. IX0 X0+X4
  43972. EWX3 X1
  43973. IX1 X1+X4
  43974. ERX3 X0
  43975. IX0 X0+X4
  43976. EWX6 X1
  43977. IX1 X1+X4
  43978. ERX6 X0
  43979. IX0 X0+X4
  43980. EWX7 X1
  43981. IX1 X1+X4
  43982. ERX7 X0
  43983. EWX2 X1
  43984. IX1 X1+X4
  43985. EWX3 X1
  43986. IX1 X1+X4
  43987. EWX6 X1
  43988. IX1 X1+X4
  43989. EWX7 X1
  43990.  
  43991. * RESTORE REGISTERS.
  43992.  
  43993. RUM7 SA2 A6
  43994. SA3 A6+B1
  43995. BX0 X2
  43996. LX1 X3
  43997. SA2 A3+B1
  43998. SA3 A2+B1
  43999. BX4 X2
  44000. LX6 X3
  44001. SA2 A3+B1
  44002. SA3 A2+B1
  44003. BX7 X2
  44004. SB4 X3
  44005. SA2 A3+B1
  44006. SA3 A2+B1
  44007. SB5 X2
  44008. SB6 X3
  44009. SA2 A3+B1
  44010. SA3 A2+B1
  44011. JP B6 RETURN
  44012. WUM SPACE 4,10
  44013. ** WUM - WRITE USER ECS DATA FROM CM TO UEM.
  44014. *
  44015. * ENTRY AT *WUM* IF PROGRAM MODE.
  44016. * AT *WUM1* IF MONITOR MODE.
  44017. * (B4) = WORD COUNT TO TRANSFER.
  44018. * (B6) = RETURN ADDRESS.
  44019. * (X0) = 30/ ABSOLUTE CM ADDRESS, 30/ UEM ADDRESS.
  44020. *
  44021. * EXIT TO *RUM* IF PROGRAM MODE.
  44022. * TO *RUM1* IF MONITOR MODE.
  44023.  
  44024.  
  44025. WUM SB6 -B6 INDICATE TRANSFER FROM CM TO UEM
  44026. EQ RUM TRANSFER DATA FOR PROGRAM MODE
  44027.  
  44028. WUM1 SB6 -B6 INDICATE TRANSFER FROM CM TO UEM
  44029. EQ RUM1 TRANSFER DATA FOR MONITOR MODE
  44030. SPACE 4,10
  44031. MMRG BSS 10 MONITOR MODE X0,X1,X4,X6,X7,B4,B5,B6,X2,X3
  44032.  
  44033. PMRG BSS 10 PROGRAM MODE X0,X1,X4,X6,X7,B4,B5,B6,X2,X3
  44034.  
  44035. ENDBLK
  44036. BLOCK ECSBUF,(ECS BUFFER SPACE.),PROGRAM
  44037. SPACE 4
  44038. PBUF BSS 21B PROGRAM MODE BUFFER
  44039.  
  44040. ENDBLK
  44041. BLOCK MMFBUF,(MMF BUFFER SPACE.),PROGRAM
  44042.  
  44043. * THIS BUFFER IS SHARED BY MMF AND USER ECS SUBROUTINES.
  44044. * THE BUFFER WILL BE ALLOCATED IF EITHER MMF OR USER ECS IS
  44045. * DEFINED OR IF BOTH ARE DEFINED.
  44046. SPACE 4
  44047. BSS MECB-21B
  44048.  
  44049. ENDBLK
  44050. BLOCK EXPACS,(EXCHANGE PACKAGES.),MONITOR
  44051. .EXPACS BSS 0 FWA OF BLOCK
  44052. MXP SPACE 4
  44053. ** MXP - PPU MONITOR EXCHANGE PACKAGE.
  44054.  
  44055.  
  44056. MXP EXP P=PMN,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,B2=MXP,EM=(,
  44057. ,XPFE)
  44058. BXP SPACE 4,10
  44059. ** BXP - BREAKPOINT EXCHANGE PACKAGE.
  44060.  
  44061.  
  44062. BXP BSS /CPB/CPBAL REGISTERS / BREAKPOINT DATA
  44063. ORG BXP+/CPB/CPBA
  44064. VFD 60/0 CLEAR PREVIOUS BREAKPOINT ADDRESS
  44065. + RJ /CPB/BKP BREAKPOINT PROTOTYPE
  44066. - VFD 30/0
  44067. ORG BXP+/CPB/CPBAL
  44068. IXP SPACE 4,10
  44069. ** IXP - IDLE EXCHANGE PACKAGE.
  44070.  
  44071.  
  44072. IXP EXP P=2,RA=/PROGRAM/IDL,FL=5,MA=IXP,EM=EEMC,EA=IXP,X1=77B
  44073.  
  44074. * *STSW*.
  44075.  
  44076. VFD 3/ACPS *A* CPU STATUS
  44077. VFD 57/0
  44078.  
  44079. * *CWQW*.
  44080.  
  44081. VFD 2/1
  44082. VFD 7/IDCS CPU PRIORITY
  44083. VFD 1/0
  44084. VFD 1/1 CPU SLICE ACTIVE
  44085. VFD 1/0 RECALL FLAG
  44086. VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
  44087. VFD 2/0
  44088. VFD 9/0 SERVICE CYCLE
  44089. VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
  44090. VFD 1/0 *MTR* BYPASS FLAG
  44091. VFD 2/1 SELECT CPU 0
  44092. VFD 3/0
  44093. VFD 3/MIXT MAIN IDLE PACKAGE EXCHANGE PACKAGE TYPE
  44094. VFD 18/0 *WQ* LINKAGE
  44095.  
  44096. * *CSAW*.
  44097.  
  44098. VFD 60/0
  44099.  
  44100. * *CTMW*.
  44101.  
  44102. VFD 60/0
  44103. SPACE 4
  44104. ** PXP - PPU EXCHANGE PACKAGES.
  44105. * COPIED ONCE FOR EACH PPU EXCEPT 0 AND 1.
  44106. * (A5) = PPU OUTPUT REGISTER ADDRESS.
  44107.  
  44108.  
  44109. PXP EXP P=PPR,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,B2=PXP,A5=(2
  44110. ,1B,FP),EM=(,XPFE)
  44111.  
  44112. VFD 60/10RPPU EXPACK
  44113.  
  44114.  
  44115. ERRNZ MXP-.EXPACS-/EXPACS/MXP *COMSMSC* MUST BE CHANGED
  44116. ERRNZ BXP-.EXPACS-/EXPACS/BXP *COMSMSC* MUST BE CHANGED
  44117. ERRNZ IXP-.EXPACS-/EXPACS/IXP *COMSMSC* MUST BE CHANGED
  44118. ERRNZ PXP-.EXPACS-/EXPACS/PXP *COMSMSC* MUST BE CHANGED
  44119. LBAT SPACE 4,10
  44120. ** LBAT - LOADED *CPUMTR* BLOCK ADDRESS TABLE.
  44121. *
  44122. * ONE ENTRY FOR EACH BLOCK LOADED. SPACE IS ALLOCATED FOR THE
  44123. * MAXIMUM POSSIBLE NUMBER OF BLOCKS.
  44124. *
  44125. *T W0 VFD 42/ 0,18/ FWA *CPUMTR* MAIN BLOCK
  44126. *T WN VFD 42/ NAME,18/ FWA ADDITIONAL ENTRIES
  44127. *T VFD 60/ 0 END OF TABLE
  44128. *
  44129. * NAME NAME OF BLOCK LOADED.
  44130. * FWA ABSOLUTE CM ADDRESS OF BLOCK.
  44131.  
  44132.  
  44133. LBAT BSS /DSL/CPBL
  44134. SPACE 4,10
  44135.  
  44136. ENDBLK
  44137. BLOCK XP176,(CYBER 176 EXCHANGE PACKAGES.),MONITOR
  44138. MCU SPACE 4
  44139. ** MCU - DEAD START EXCHANGE PACKAGE.
  44140.  
  44141.  
  44142. MCU EXP P=CXJ,FL=(,MCM),EM=EEMC+20B,MA=IXP
  44143. CXP SPACE 4
  44144. ** CXP - CLOCK EXCHANGE PACKAGE.
  44145.  
  44146.  
  44147. CXP EXP P=CXJ,FL=(,MCM),FLX=(,MEC),B1=1,B2=CXP,EM=(,EXPFEB),X0=
  44148. ,400000B,MA=CXP
  44149. EEA SPACE 4
  44150. ** EEA - ERROR EXIT EXCHANGE PACKAGE.
  44151.  
  44152.  
  44153. EEA EXP P=EXP+1,B1=1,FL=(,MCM),B2=EEA,EM=(,EXPFEB),MA=EEA,EA=40
  44154. ,0000B,X0=77770000777777777777B,X4=1
  44155. SPACE 4,10
  44156. BSS 20B
  44157.  
  44158. ENDBLK
  44159. BLOCK XP819,(CYBER 176/FLPP INTERRUPT PACKAGES.),IH819
  44160. XP819 SPACE 4,10
  44161. MCU EQU /MONITOR/MCU
  44162. XP819 SPACE 4,10
  44163. ** CHANNEL 2 INPUT PACKAGE.
  44164.  
  44165.  
  44166. C2I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C2I,A0=
  44167. ,(MCU+400B),A1=C3I,B2=3,B4=2
  44168. SPACE 4,10
  44169. ** CHANNEL 2 OUTPUT PACKAGE.
  44170.  
  44171.  
  44172. C2O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C2O,A0
  44173. ,=(MCU+400B),A1=C3O,B2=3,B4=2
  44174. SPACE 4,10
  44175. ** CHANNEL 3 INPUT PACKAGE.
  44176.  
  44177.  
  44178. C3I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C3I,A0=
  44179. ,(MCU+400B),A1=C2I,B2=2,B4=3
  44180. SPACE 4,10
  44181. ** CHANNEL 3 OUTPUT PACKAGE.
  44182.  
  44183.  
  44184. C3O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C3O,A0
  44185. ,=(MCU+400B),A1=C2O,B2=2,B4=3
  44186. SPACE 4,10
  44187. ** CHANNEL 4 INPUT PACKAGE.
  44188.  
  44189.  
  44190. C4I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C4I,A0=
  44191. ,(MCU+1000B),A1=C5I,B2=5,B4=4
  44192. SPACE 4,10
  44193. ** CHANNEL 4 OUTPUT PACKAGE.
  44194.  
  44195.  
  44196. C4O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C4O,A0
  44197. ,=(MCU+1000B),A1=C5O,B2=5,B4=4
  44198. SPACE 4,10
  44199. ** CHANNEL 5 INPUT PACKAGE.
  44200.  
  44201.  
  44202. C5I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C5I,A0=
  44203. ,(MCU+1000B),A1=C4I,B2=4,B4=5
  44204. SPACE 4,10
  44205. ** CHANNEL 5 OUTPUT PACKAGE.
  44206.  
  44207.  
  44208. C5O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C5O,A0
  44209. ,=(MCU+1000B),A1=C4O,B2=4,B4=5
  44210. SPACE 4,10
  44211. ** CHANNEL 6 INPUT PACKAGE.
  44212.  
  44213.  
  44214. C6I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C6I,A0=
  44215. ,(MCU+1400B),A1=C7I,B2=7,B4=6
  44216. SPACE 4,10
  44217. ** CHANNEL 6 OUTPUT PACKAGE.
  44218.  
  44219.  
  44220. C6O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C6O,A0
  44221. ,=(MCU+1400B),A1=C7O,B2=7,B4=6
  44222. SPACE 4,10
  44223. ** CHANNEL 7 INPUT PACKAGE.
  44224.  
  44225.  
  44226. C7I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C7I,A0=
  44227. ,(MCU+1400B),A1=C6I,B2=6,B4=7
  44228. SPACE 4,10
  44229. ** CHANNEL 7 OUTPUT PACKAGE.
  44230.  
  44231.  
  44232. C7O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C7O,A0
  44233. ,=(MCU+1400B),A1=C6O,B2=6,B4=7
  44234.  
  44235. ENDBLK
  44236. BLOCK PRESET,(PRESET.)
  44237.  
  44238. PRSB EQU * DEFINE BEGINNING OF *PRESET* BLOCK
  44239.  
  44240. *CALL COMSMST
  44241. QUAL DEFINE SYMBOLS USED GLOBALLY
  44242. LPTU EQU /PRESET/LPTU
  44243. QUAL *
  44244. *CALL COMS1DS
  44245. PRS SPACE 4
  44246. ** PRS - PRESET MONITOR.
  44247. *
  44248. * PRESET IS OVERLAYED BY PPU EXCHANGE PACKAGES.
  44249. *
  44250. * ENTRY (X4) = MACHINE CM FL.
  44251. * (X5) = MACHINE ECS FL.
  44252. * (EFRL) = 30/,6/ LS,12/,12/ LT.
  44253. * LS = 40, IF TO INITIALIZE LINK DEVICE.
  44254. * LS = 20, IF TO PRESET LINK DEVICE.
  44255. * LT = LABEL TRACK OF LINK DEVICE.
  44256. *
  44257. * EXIT (0) = RUNNING LENGTH OF CPUMTR.
  44258. * (ACPL) = EXCHANGE ADDRESS FOR CPU 0.
  44259. * (ACPL+1) = EXCHANGE ADDRESS FOR CPU 1.
  44260.  
  44261.  
  44262. PRS SB1 1 (B1) = 1
  44263. RJ DBL DETERMINE BLOCKS LOADED
  44264. RJ SSP SET SYSTEM PARAMETERS
  44265. RJ SAC SET ADDRESS CONSTANTS
  44266. RJ SDT SET DATE AND TIME
  44267.  
  44268. * COPY SYSTEM EXCHANGE PACKAGE TO CP AREA.
  44269.  
  44270. SB2 17B
  44271. TB3 SCA
  44272. PRS1 SA1 SXP+B2
  44273. BX6 X1
  44274. SA6 B3+B2
  44275. SB2 B2-1
  44276. PL B2,PRS1
  44277. RJ CIR CLEAR INTERLOCKS
  44278. RJ SCM SET CPU MULTIPLIERS
  44279. RJ SJB SETUP JOB CONTROL BLOCKS
  44280. RJ SCS SET CPU STATUS
  44281. RJ CLE CLEAR EXTENDED MEMORY
  44282. RJ IBO INITIALIZE BUFFERED I/O
  44283. RJ SCD SET CHANNEL DATA
  44284. RJ SDT SET DATE AND TIME AGAIN
  44285.  
  44286. * INITIALIZE OPTICAL DISK SCANNER TIMER.
  44287.  
  44288. SA1 OSTP READ *OSTP*
  44289. MX2 48
  44290. BX6 X2*X1 CLEAR SCAN INTERVAL COUNTER
  44291. SX2 63 SET LONG TIMER AT DEAD START
  44292. IX6 X6+X2
  44293. SA6 A1 REWRITE *OSTP*
  44294.  
  44295. * CLEAR SYSTEM CONTROL POINT MESSAGES.
  44296.  
  44297. SX6 B0+
  44298. TA6 SNSW,SCA
  44299. TA6 MS2W,SCA
  44300.  
  44301. * TERMINATE CPU WAIT AND RECALL QUEUES.
  44302.  
  44303. SX6 /MONITOR/WT TERMINATE *WQ*
  44304. SA6 WQRL
  44305. SX6 PTMF BUILD RECALL ENTRY
  44306. MX2 36
  44307. LX6 -12
  44308. LX2 -12
  44309. BX0 X2+X6
  44310. SX6 3REND PP NAME
  44311. SB3 PRSX SET *AQR* RETURN ADDRESS
  44312. LX6 -18
  44313. R= X2,/MONITOR/RQ SET QUEUE TYPE
  44314. TB7 SCA SET SYSTEM CONTROL POINT
  44315. EQ /MONITOR/AQR ASSIGN QUEUE REQUEST
  44316. SPACE 4
  44317. ** SXP - SYSTEM JOB EXCHANGE PACKAGE. (PROGRAM MODE MONITOR)
  44318. * COPIED TO SYSTEM CONTROL POINT.
  44319.  
  44320.  
  44321. SXP EXP P=/PROGRAM/PRG,FL=(,MCM),RAX=(,RXX),FLX=(,MECPRG),MA=(,
  44322. ,SCA),B1=1,EM=(,PXPFE),EA=(,SCA)
  44323. TITLE PRESET SUBROUTINES.
  44324. SAC SPACE 4,10
  44325. ** SAC - SET ADDRESS CONSTANTS.
  44326.  
  44327.  
  44328. SAC PS ENTRY/EXIT
  44329. MX0 -6
  44330. SA5 REL FIRST ENTRY
  44331. MX4 1
  44332. SAC1 SA1 X5 READ DATA WORD
  44333. LX5 6 SET POSITION
  44334. BX2 -X0*X5
  44335. LX5 6 SET FIELD WIDTH
  44336. BX3 -X0*X5
  44337. LX5 18 SET RELOCATION VALUE ADDRESS
  44338. SB3 X3
  44339. SA3 X5 READ RELOCATION VALUE
  44340. UX5,B5 X5 GET NUMBER OF CONDITIONS
  44341. SB4 B3-B1 GENERATE MASK
  44342. SB2 X2 SET MASK SHIFT COUNT
  44343. AX6 X4,B4
  44344. SB3 B2-B3
  44345. LX6 X6,B2 POSITION MASK
  44346. AX5 48
  44347. BX7 X6*X1 EXTRACT ORIGINAL FIELD
  44348. BX2 X3-X5
  44349. SA5 A5+B1 READ NEXT WORD
  44350. ZR B5,SAC4 IF NO CONDITIONAL VALUE SETTING
  44351. BX2 X5
  44352. BX7 X7-X7 CLEAR ORIGINAL VALUE
  44353. EQ B5,B1,SAC3 IF THIS IS THE LAST CONDITION
  44354. SAC2 NZ X3,SAC3 IF THE CONDITION IS MET
  44355. SA5 A5+B1 GET THE NEXT CONDITION
  44356. SB5 B5-B1
  44357. SA3 X5+
  44358. GT B5,B1,SAC2 IF NOT THE LAST CONDITION
  44359. SAC3 ZR X3,SAC4 IF CONDITION NOT MET
  44360. AX5 30
  44361. BX2 X5
  44362. SAC4 SA5 A5+B5 GET FIRST WORD OF NEXT ENTRY
  44363. LX3 X2,B3 SHIFT VALUE
  44364. BX1 -X6*X1 CLEAR FIELD
  44365. BX2 -X6+X3
  44366. IX3 X7+X2 RELOCATE FIELD
  44367. BX2 X6*X3
  44368. BX7 X1+X2 STORE RELOCATED WORD
  44369. SA7 A1
  44370.  
  44371. * CHECK IF THIS BLOCK WAS LOADED BY CPUMLD.
  44372.  
  44373. SAC5 NZ X5,SAC1 IF NOT END OF LIST
  44374. SA5 A5+B1
  44375. MX2 42
  44376. ZR X5,SAC IF END OF BLOCK LISTS
  44377. SA1 BLKT
  44378. SAC6 ZR X1,SAC7 IF BLOCK NOT LOADED
  44379. BX3 X2*X1
  44380. BX5 X2*X5
  44381. SA1 A1+B1
  44382. BX3 X5-X3
  44383. NZ X3,SAC6 IF NO MATCH ON BLOCK NAME
  44384. SA5 A5+B1
  44385. EQ SAC5 SET ADDRESS CONSTANTS FOR THIS BLOCK
  44386.  
  44387. * BLOCK WAS NOT LOADED - IGNORE ANY RELOCATION ADDRESSES.
  44388.  
  44389. SAC7 SA5 A5+1
  44390. NZ X5,SAC7 IF NOT END OF BLOCK TABLE
  44391. EQ SAC5 PROCESS NEXT BLOCK TABLE
  44392.  
  44393.  
  44394. * RELOCATION VALUES.
  44395.  
  44396. OB VFD 42/0,18/ORG
  44397. CX VFD 42/0,18/CL+CACX
  44398. ACAD CON 2 ADJUSTMENT FOR ACCOUNTING OVERHEAD
  44399. ACAD2 CON 1 ACAD/2
  44400. CMCF CON 0 CENTRAL MEMORY COPY FLAG
  44401. DCPC CON 0 DUAL CPU MACHINE WITH CACHE
  44402. DP CON 0 DAYFILE POINTERS FWA
  44403. DSCB CON 0 *DSCB* ADDRESS
  44404. ECCM CON 0 LOCATION OF ECS CLOCK FOR THIS MACHINE
  44405. ECLT CON 0 LOCATION OF EXTENDED MEMORY LABEL TRACK
  44406. ECSB CON 17000B PP/ECS BUFFER
  44407. ECSBL CON ECBL PP ECS I/O BUFFERS LENGTH
  44408. EEAD CON 0 ERROR EXIT ADDRESS FOR CYBER 176
  44409. EEN CON 0 ECS EST ADDRESS
  44410. EJT CON 0 FWA EJT
  44411. EJTM CON 0 MAXIMUM NUMBER OF ENTRIES IN EJT
  44412. EMS CON 0 MST ADDRESS OF ECS EQUIPMENT
  44413. EEM CON 0 EXTENDED MEMORY EST ORDINAL (CPU ACCESS)
  44414. ESM170 CON 0 170 ESM MODE FLAG
  44415. ESM CON 0 ESM MODE FLAG
  44416. EST CON 6500B FWA EST
  44417. ESTL CON 100B EST LENGTH
  44418. EMB CON 0 FWA OF ERROR MESSAGE BUFFER
  44419. EVT CON 0 FWA EVENT TABLE
  44420. EXPA CON 0 EXCHANGE PACKAGE ADDRESS FOR CYBER 176
  44421. CCMB CON 1 CLEAR CM BUFFER (0=LARGE MEMORY CYBER 990)
  44422. FNT CON 6600B FWA OF FNT
  44423. FNTLWA CON 7600B LWA OF FNT
  44424. FNTM CON 400B MAXIMUM NUMBER OF ENTRIES IN SYSTEM FNT
  44425. FP CON 0 ADDRESS OF FIRST PP COMMUNICATION AREA
  44426. FPC CON 0 ADDRESS OF FIRST CPP COMMUNICATION AREA
  44427. FP8 CON 0 ADDRESS OF FIRST PP COMMUNICATION AREA/8
  44428. FPX CON 0 ADDRESS OF FIRST EXTENDED PP COMM. BLOCK
  44429. JCB CON 0 FWA OF JOB CONTROL BLOCK TABLE
  44430. MCM CON 200000B MACHINE FL
  44431. MCT CON 0 FWA OF MEMORY CONTROL TABLE
  44432. NMCT CON 0 NUMBER OF MCT ENTRIES
  44433. RAE CON 0 XM BASE ADDRESS
  44434. RAEX CON 0 XM BASE ADDRESS SHIFTED
  44435. RXX CON 0 RAE/100 IN EXPANDED MODE, ELSE RAE
  44436. MEC CON 1000000B MACHINE FLX
  44437. MCMS CON 2000B MACHINE FL SHIFTED
  44438. MECS CON 0 MACHINE FLX FLAG BIT SHIFTED
  44439. MECNF CON 0 MACHINE FLE / 1000B
  44440. MECPRG CON 57000000B MACHINE FLX (PROGRAM MODE)
  44441. MESC CON 0 EM ADDRESSING SHIFT COUNT (-3,-4,-5,-6)
  44442. MID CON 2RAA MACHINE ID
  44443. MIN CON 0 MACHINE INDEX
  44444. MMK CON 0 MACHINE MASK
  44445. MIL CON 0 MIN*2+1 (MST INTERLOCKS)
  44446. MRT CON 0 MRT ADDRESS (MIN * 100B)
  44447. MSL CON 0 MST LOCAL AREA OFFSET (MIN * 6)
  44448. MSA CON 0 MASS STORAGE ALLOCATION AREA ADDRESS
  44449. MDWB CON 0 MAXIMUM DATA WRITTEN BUFFER COUNT
  44450. NCME CON 1 1 IF NOT CME MACHINE, 0 IF CME MACHINE
  44451. NDCPC CON 1 NOT A DUAL CPU MACHINE WITH CACHE
  44452. NTRACE CON 1 NON-ZERO IF TRACE DISABLED
  44453. OSSM CON 0 OPERATING SYSTEM SECURITY MODE
  44454. BDT CON 0 FWA - BDT
  44455. IBST CON 0 FWA - IBST NOTE - THESE ADDRESSES
  44456. PLT CON 0 FWA - PLT MUST BE CONSECUTIVE
  44457. CCT CON 0 FWA - CCT SO THAT THEY MATCH
  44458. PUT CON 0 FWA - PUT THE ORDER IN *BDT*.
  44459. FTT CON 0 FWA - FTT
  44460. HAT CON 0 FWA - HAT
  44461. CBT CON 0 FWA - CBT
  44462. BLMB CON 0 BUFFER LIST MANAGEMENT POINTERS
  44463. EMTB CON 0 EMPTY BUFFER LIST
  44464. DWTB CON 0 DATA WRITTEN LIST
  44465. DRDB CON 0 DATA READ LIST
  44466. WRTB CON 0 WRITE BUFFER LIST
  44467. IORQ CON ZERL I/O REQUEST
  44468. NIOB CON 0 NUMBER OF I/O BUFFERS
  44469. NRUN CON 0 NUMBER OF BUFFERED DEVICE UNITS
  44470. MXM CON 0 MAXIMUM MEMORY - CM + ECS/ESM/UEM
  44471. NOTDCE CON 1 DUAL CPU USER ECS TRANSFER NOT ALLOWED
  44472. NOTUEM CON 0 NON-UEM FLAG
  44473. UEM CON 0 UEM FLAG
  44474. UEM180 CON 0 FLAG FOR 180 IN EXTENDED MODE WITH UEM
  44475. XUEM CON 0 USER EM IN EXTERNAL EXTENDED MEMORY FLAG
  44476. CXPFE CON EEMC CPUCIO PSEUDO PP XP FLAGS AND EXIT MODE
  44477. EXPFEB CON 7027B 176 CHANNEL EXCHANGE PACKAGE FLAGS
  44478. EXPFEC CON 0
  44479. PXPFE CON EEMC-1 PROGRAM MODE XP FLAGS AND EXIT MODE
  44480. XPFE CON EEMC MONITOR MODE XP FLAGS AND EXIT MODE
  44481. PCPA CON 0 FWA OF PSEUDO CONTROL POINT AREA
  44482. NPCP CON 0 NUMBER OF PCP-S
  44483. PCM2 CON 0 (LAST PCP NUMBER + 1) * 200B
  44484. SCA CON 6000B ADDRESS OF SYSTEM CONTROL POINT
  44485. SC CON 30B SYSTEM CONTROL POINT NUMBER
  44486. SDA CON 0 FWA OF STATISTICAL DATA AREA
  44487. SFCS CON 4 SFCALL CM TRANSFER RATE SHIFT
  44488. SFES CON 3 SFCALL ECS TRANSFER RATE SHIFT
  44489. SFFO CON 70D*10B SFCALL FUNCTION OVERHEAD (MICROSEC*10B)
  44490. SMXF CON 0 STORAGE MOVE XP MODIFICATION FLAG
  44491. SP CON 0 PSEUDO-PP INPUT REGISTER ADDRESS
  44492. SPX CON 0 PSEUDO-PP EXTENDED COMM. BLOCK ADDRESS
  44493. SSCT CON 0 FWA TABLE OF SUBSYSTEM CONTROL POINTS
  44494. NVESS CON 0 *SSCT* WORD CONTAINING *NVE* BYTE
  44495. NVEOS CON 0 OFFSET OF *NVE* BYTE IN *SSCT* WORD
  44496. TNSC CON 0 TRACK SHIFT COUNT
  44497. TCNT CON 20B TRACK SIZE
  44498. TM64 VFD 42/0,18/MP64
  44499. TM66 VFD 42/0,18/MP66
  44500. T173 VFD 42/0,18/MP73
  44501. T175 VFD 42/0,18/MP75
  44502. T176 VFD 42/0,18/MP76
  44503. T810 VFD 42/0,18/MP10
  44504. T815 VFD 42/0,18/MP15
  44505. T825 VFD 42/0,18/MP25
  44506. T830 VFD 42/0,18/MP30
  44507. T835 VFD 42/0,18/MP35
  44508. T840 VFD 42/0,18/MP40
  44509. T845 VFD 42/0,18/MP45
  44510. T850 VFD 42/0,18/MP50
  44511. T855 VFD 42/0,18/MP55
  44512. T860 VFD 42/0,18/MP60
  44513. T865 VFD 42/0,18/MP86
  44514. T875 VFD 42/0,18/MP87
  44515. T961 VFD 42/0,18/MP961
  44516. T963 VFD 42/0,18/MP963
  44517. T990 VFD 42/0,18/MP90
  44518. UESC CON 0 USER EM SHIFT COUNT
  44519.  
  44520. ** THE FOLLOWING LOCATIONS DEFINE CONDITIONS WHICH ARE PRESENT.
  44521.  
  44522.  
  44523. TDBL BSS 0 TABLE OF BLOCKS FOR LOAD
  44524.  
  44525. CME VFD 60/0LCME NON ZERO IF CME BLOCK PRESENT
  44526. CMU VFD 60/0LCMU NON-ZERO IF CMU PRESENT
  44527. CMUMTR VFD 60/0LCMUMTR NON-ZERO IF CMUMTR BLOCK PRESENT
  44528. CPB VFD 60/0LCPB NON-ZERO IF CPUMTR BREAKPOINT PRESENT
  44529. CPP VFD 60/0LCPP NON-ZERO IF CPP-S ARE PRESENT
  44530. CP176 VFD 60/0LCP176 NON-ZERO IF 176 CPU PRESENT
  44531. CP830 VFD 60/0LCP830 NON-ZERO IF CYBER 810/830 WITH 20 PP-S
  44532. DCP VFD 60/0LDCP NON-ZERO IF DUAL CPU PRESENT
  44533. ECS VFD 60/0LECS NON-ZERO IF ECS PRESENT
  44534. EEC VFD 60/0LEEC NONZERO IF EXTERNAL ECS PRESENT
  44535. EUE VFD 60/0LEUE NONZERO IF ECS OR USER ECS PRESENT
  44536. BIOMMF VFD 60/0LBIOMMF
  44537. BUFIO VFD 60/0LBUFIO NON-ZERO IF BUFFERED I/O IN USE
  44538. IH819 VFD 60/0LIH819 NON-ZERO IF 819 DEVICES IN USE
  44539. IHPFMD VFD 60/0LIHPFMD NON-ZERO IF 885-42 DEVICES IN USE
  44540. ISD VFD 60/0LISD NON-ZERO IF INDEPENDENT SHARED DEVICES
  44541. ISDMMF VFD 60/0LISDMMF NON-ZERO IF ISD OR MMF
  44542. LSPMMF VFD 60/0LLSPMMF NON-ZERO IF ONLY LSP ACCESS TO MMF LINK
  44543. MMF VFD 60/0LMMF NON-ZERO IF MMF VIA CPU ACCESS
  44544. NVE VFD 60/0LNVE NON-ZERO IF *DSCB* PRESENT
  44545. PCP VFD 60/0LPCP NON-ZERO IF PSEUDO-CONTROL POINTS PRESENT
  44546. SUBCP VFD 60/0LSUBCP NON-ZERO IF SUB-CONTROL POINTS ALLOWED
  44547. SCP VFD 60/0LSCP NON-ZERO IF SYSTEM CONTROL POINT PRESENT
  44548. SUE VFD 60/0LSUE NONZERO IF SIMULTANEOUS UEM/ESM PRESENT
  44549. PROBE VFD 60/0LPROBE NON-ZERO IF PROBE ENABLED
  44550. MCE VFD 60/0LMCE NON-ZERO IF MEMORY CLEARING ENABLED
  44551. TRACE VFD 60/0LTRACE NON-ZERO IF TRACE ENABLED
  44552. UEC VFD 60/0LUEC NON-ZERO IF USER ECS IS PRESENT
  44553. VMS VFD 60/0LVMS NON-ZERO IF MASS STORAGE VALIDATION ENABLED
  44554.  
  44555. TDBLL CON 0 END OF TABLE
  44556.  
  44557. ECM CON 0 NON-ZERO IF ECS PREFERRED FOR STORAGE MOVE
  44558. * WHICH IS ECS SIZE .GT. 256K OR NO CMU
  44559. SCM SPACE 4,10
  44560. ** SCM - SET CP TIME MULTIPLIERS.
  44561. * ENTRY (CPUL) = CPU FLAGS.
  44562. * EXIT (/MONITOR/CPTA) = CPU 0 MULTIPLIER (S0).
  44563. * (/MONITOR/CPTA+1) = CPU 1 MULTIPLIER (S1).
  44564. *
  44565. * THE MULTIPLIERS ARE USED BY /MONITOR/CPT WHEN
  44566. * CALCULATING CP TIME (CP = S0*CP0 + S1*CP1). IF A
  44567. * MULTIPLIER IS DEFINED AS 0.0 OR 1.0, AN INTEGER ZERO (60/0)
  44568. * IS STORED AND THE MULTIPLY IS NOT PERFORMED. A MULTIPLY
  44569. * BY 0.0 WOULD NEGATE CP ACCUMULATION AND PREVENT TIME-SLICING.
  44570. * A MULTIPLY BY 1.0 IS REDUNDANT. /MONITOR/CPT PERFORMS A ZERO
  44571. * CHECK BEFORE PERFORMING THE MULTIPLY.
  44572.  
  44573.  
  44574. SCM PS ENTRY/EXIT
  44575. MX0 0
  44576. BX4 X4-X4
  44577. SA1 IPRL RETRIEVE IPRDECK PARAMETERS FROM CPM ENTRY
  44578. MX2 -6
  44579. LX1 6
  44580. BX3 -X2*X1
  44581. LX1 6
  44582. BX2 -X2*X1
  44583. ZR X2,SCM1 IF NO CPU0 PARAMETER
  44584. SX0 TIPR-1+X2 ADDRESS OF CPU0 VALUE
  44585. MX4 30
  44586. LX0 30 POSITION FOR CPU0
  44587. SCM1 ZR X3,SCM2 IF NO CPU1 VALUE
  44588. SX3 TIPR-1+X3 ADDRESS OF CPU1 VALUE
  44589. BX0 X3+X0
  44590. MX2 -18
  44591. BX4 -X2+X4
  44592. SCM2 ZR X4,SCM4 IF NO IPRDECK CHANGES
  44593. SB3 TCPML NUMBER OF ENTRIES TO MODIFY
  44594. SCM3 SB3 B3-B1
  44595. SA1 TCPM+B3 RETRIEVE ENTRY
  44596. BX6 -X4*X1 CLEAR ADDRESSES TO BE REPLACED
  44597. BX6 X0+X6 INSERT NEW ADDRESSES
  44598. SA6 A1 REPLACE ENTRY
  44599. NZ B3,SCM3 IF NOT END OF ENTRIES
  44600. SCM4 SA1 MABL FORM INDEX INTO MULTIPLIER TABLE
  44601. MX2 -2
  44602. LX1 59-47
  44603. NG X1,SCM7 IF NOT CYBER 170-8X5
  44604. SX7 4000 SET MULTIPLIERS FOR MICRO SECOND COUNTER
  44605. SA7 /MONITOR/CPTA
  44606. SA7 /MONITOR/CPTA+1
  44607. LX1 59-42-59+47
  44608. PL X1,SCM6 IF CYBER 170-865/875
  44609. SA1 TMNBA GET *TCPM* INDEX
  44610. ZR X1,SCM IF INDEX NOT FOUND
  44611. EQ SCM8 PROCESS CPU MULTIPLIER
  44612.  
  44613. SCM6 LX1 0-38-59+42 GET 865/875 FLAG
  44614. SX6 B1+
  44615. BX1 X6*X1
  44616. SX1 X1+TCPMH-TCPM
  44617. EQ SCM8 PROCESS CPU MULTIPLIER
  44618.  
  44619. SCM7 LX1 0-37-59+47
  44620. MX2 -1
  44621. BX3 -X2*X1 CPU 1 PRESENT FLAG
  44622. LX1 1-40-0+37
  44623. LX2 1-0
  44624. BX6 -X2*X1 INSTRUCTION STACK PRESENT FLAG
  44625. BX3 X3+X6
  44626. LX1 2-42-1+40
  44627. LX2 2-1
  44628. BX6 -X2*X1 CYBER 170 FLAG
  44629. BX3 X6+X3
  44630. MX2 -3
  44631. BX3 -X3 COMPLEMENT FLAGS
  44632. BX1 -X2*X3
  44633. SX6 X1-TCPML
  44634. PL X6,SCM IF INDEX OUT OF RANGE
  44635. TX3 EXPA
  44636. ZR X3,SCM8 IF NOT A CYBER 176
  44637. SX1 7 SET CYBER 176 INDEX
  44638. SX7 110 SET CONVERSION FACTOR TO CONVERT CLOCK
  44639. SA7 /MONITOR/CPTA CYCLES TO QUARTER NANOSECONDS
  44640. SA7 /MONITOR/CPTA+1
  44641. SCM8 SA1 TCPM+X1 GET TABLE ENTRY
  44642. SX2 X1 (X2) = CPU 1 MULTIPLIER ADDR
  44643. AX1 30 (X1) = CPU 0 MULTIPLIER ADDR
  44644.  
  44645. * SET CPU 0 MULTIPLIER (S0).
  44646.  
  44647. ZR X1,SCM9 IF NO CPU 0 MULTIPLIER
  44648. SA1 X1+ GET MULTIPLIER
  44649. SA3 SCMA
  44650. BX6 X1-X3
  44651. SA3 A3+B1
  44652. ZR X6,SCM9 IF NULTIPLIER = 0.0
  44653. BX6 X1-X3
  44654. ZR X6,SCM9 IF MULTIPLIER = 1.0
  44655. SA3 /MONITOR/CPTA BIAS CONSTANTS WITH CPU 0 MULTIPLIER
  44656. PX3 X3
  44657. NX3 X3
  44658. RX7 X3*X1
  44659. UX7,B3 X7
  44660. LX7 B3
  44661. SA7 A3+
  44662.  
  44663. * SET CPU 1 MULTIPLIER (S1).
  44664.  
  44665. SCM9 ZR X2,SCM10 IF NO CPU 1 MULTIPLIER
  44666. SA2 X2+ GET MULTIPLIER
  44667. SA3 SCMA
  44668. BX6 X2-X3
  44669. SA3 A3+B1
  44670. ZR X6,SCM10 IF MULTIPLIER = 0.0
  44671. BX6 X2-X3
  44672. ZR X6,SCM10 IF MULTIPLIER = 1.0
  44673. SA3 /MONITOR/CPTA+1 BIAS CONSTANT WITH CPU 1 MULTIPLIER
  44674. PX3 X3
  44675. NX3 X3
  44676. RX7 X3*X2
  44677. UX7,B3 X7
  44678. LX7 B3
  44679. SA7 A3
  44680.  
  44681. * SET MULTIPLIER FOR APPLICATION USAGE ACCOUNTING.
  44682.  
  44683. SCM10 SA4 ACPL CHECK FOR CPU 0
  44684. SA3 SCMB
  44685. NG X4,SCM11 IF CPU 0 OFF
  44686. ZR X1,SCM IF CPU 0 MULTIPLIER = 0.0
  44687. BX7 X1-X3
  44688. ZR X7,SCM IF CPU 0 MULTIPLIER = 1.0
  44689. BX6 X1
  44690. EQ SCM12 CALCULATE INVERSE MULTIPLIER
  44691.  
  44692. SCM11 ZR X2,SCM IF CPU 1 MULTIPLIER = 0.0
  44693. BX7 X2-X3
  44694. ZR X7,SCM IF CPU 1 MULTIPLIER = 1.0
  44695. BX6 X2
  44696.  
  44697. SCM12 RX6 X3/X6 CALCULATE RECIPROCAL OF CPU MULTIPLIER
  44698. SA6 /MONITOR/ACTC SET APPLICATION ACCOUNTING MULTIPLIER
  44699. EQ SCM EXIT
  44700.  
  44701. SCMA CON 0.0
  44702. SCMB CON 1.0
  44703. TCPM SPACE 4
  44704. ** TABLE OF ADDRESSES FOR CPU 0 (S0) AND CPU 1 (S1) MULTIPLIERS.
  44705. *
  44706. * ENTRY FORMAT.
  44707. * 30/ ADDR OF CPU 0 MULTIPLIER,30/ ADDR OF CPU 1 MULTIPLIER
  44708. *
  44709. * INDEX TO ENTRY FOR CYBER 176 IS 7.
  44710. * INDEX TO ENTRY FOR CYBER 170-815/825/835/855 IS
  44711. * 12D + CYBER 865/875 FLAG (0 OR 1).
  44712. * INDEX FOR ALL OTHER CYBER 6000 AND CYBER 170
  44713. * MAINFRAMES IS CALCULATED BY THE FORMULA -
  44714. * 1/ X,1/ Y,1/ Z
  44715. * X = CYBER 170.
  44716. * Y = CPU 0 HAS INSTRUCTION STACK
  44717. * Z = CPU 1 EXISTS.
  44718. * X, Y, AND Z ARE EXTRACTED FROM CM WORD *MABL*.
  44719.  
  44720.  
  44721. TCPM BSS 0 FWA
  44722.  
  44723. TVFD 30/,TM64 6200/6400
  44724. VFD 30/0
  44725.  
  44726. TVFD 30/,TM64 6500
  44727. TVFD 30/,TM64
  44728.  
  44729. TVFD 30/,TM66 6600
  44730. VFD 30/0
  44731.  
  44732. TVFD 30/,TM66 6700
  44733. TVFD 30/,TM64
  44734.  
  44735. TVFD 30/,T173 CYBER 172/173
  44736. VFD 30/0
  44737.  
  44738. TVFD 30/,T173 CYBER 174
  44739. TVFD 30/,T173
  44740.  
  44741. TVFD 30/,T175 CYBER 175
  44742. VFD 30/0
  44743.  
  44744. TVFD 30/,T176 CYBER 176
  44745. VFD 30/0
  44746.  
  44747. TCPMA TVFD 30/,T815 CYBER 170-815
  44748. VFD 30/0
  44749.  
  44750. TCPMB TVFD 30/,T825 CYBER 170-825
  44751. VFD 30/0
  44752.  
  44753. TCPMC TVFD 30/,T835 CYBER 170-835
  44754. VFD 30/0
  44755.  
  44756. TCPMD TVFD 30/,T845 CYBER 170-845
  44757. VFD 30/0
  44758.  
  44759. TCPME TVFD 30/,T855 CYBER 170-855
  44760. VFD 30/0
  44761.  
  44762. TCPMF TVFD 30/,T810 CYBER 180-810
  44763. TVFD 30/,T810
  44764.  
  44765. TCPMG TVFD 30/,T830 CYBER 180-830
  44766. TVFD 30/,T830
  44767.  
  44768. TCPMI TVFD 30/,T840 CYBER 180-840
  44769. VFD 30/0
  44770.  
  44771. TCPMJ TVFD 30/,T850 CYBER 180-850
  44772. VFD 30/0
  44773.  
  44774. TCPMK TVFD 30/,T860 CYBER 180-860
  44775. TVFD 30/,T860
  44776.  
  44777. TCPMH TVFD 30/,T865 CYBER 170-865
  44778. TVFD 30/,T865
  44779.  
  44780. TVFD 30/,T875 CYBER 170-875
  44781. TVFD 30/,T875
  44782.  
  44783. TCPMN TVFD 30/,T961 CYBER 180-960-11
  44784. VFD 30/0
  44785.  
  44786. TCPMO TVFD 30/,T963 CYBER 180-960-31/32
  44787. TVFD 30/,T963
  44788.  
  44789. TCPMM TVFD 30/,T990 CYBER 180-990
  44790. TVFD 30/,T990
  44791.  
  44792. TCPML EQU *-TCPM NUMBER OF ENTRIES
  44793. TMNB SPACE 4,10
  44794. ** TMNB - TABLE OF CYBER 180 MODEL NUMBERS.
  44795. *
  44796. * *TMNB* IS USED TO DETERMINE THE INDEX INTO
  44797. * THE *TCPM* TABLE BASED ON THE MODEL NUMBER
  44798. * ASSOCIATED WITH THE CYBER 180 PROCESSOR.
  44799. * *TMNB* ALSO CONTAINS THE ACCOUNTING ADJUSTMENT
  44800. * FOR THE ASSOCIATED PROCESSORS.
  44801. *
  44802. *T 12/ ACCT ADJ,18/ *TCPM* INDEX,30/ MODEL NUMBER
  44803.  
  44804.  
  44805. TMNB BSS 0
  44806. VFD 12/38,18/TCPMF-TCPM,30/0#14 CYBER 180-810
  44807. VFD 12/38,18/TCPMA-TCPM,30/0#11 CYBER 170-815
  44808. VFD 12/38,18/TCPMA-TCPM,30/0#15 CYBER 180-815S
  44809. VFD 12/34,18/TCPMB-TCPM,30/0#10 CYBER 170-825
  44810. VFD 12/34,18/TCPMB-TCPM,30/0#12 CYBER 170-825
  44811. VFD 12/34,18/TCPMB-TCPM,30/0#16 CYBER 180-825S
  44812. VFD 12/34,18/TCPMG-TCPM,30/0#13 CYBER 180-830
  44813. VFD 12/28,18/TCPMC-TCPM,30/0#20 CYBER 170-835
  44814. VFD 12/28,18/TCPMI-TCPM,30/0#34 CYBER 180-840
  44815. VFD 12/28,18/TCPMD-TCPM,30/0#37 CYBER 180-840S
  44816. VFD 12/24,18/TCPMD-TCPM,30/0#31 CYBER 170-845
  44817. VFD 12/24,18/TCPMD-TCPM,30/0#35 CYBER 180-845S
  44818. VFD 12/24,18/TCPMJ-TCPM,30/0#33 CYBER 180-850
  44819. VFD 12/20,18/TCPME-TCPM,30/0#30 CYBER 170-855
  44820. VFD 12/20,18/TCPME-TCPM,30/0#36 CYBER 180-855S
  44821. VFD 12/20,18/TCPMK-TCPM,30/0#32 CYBER 180-860
  44822. VFD 12/18,18/TCPMN-TCPM,30/0#3B CYBER 180-960-11
  44823. VFD 12/12,18/TCPMO-TCPM,30/0#3A CYBER 180-960-31/32
  44824. VFD 12/06,18/TCPMM-TCPM,30/0#40 CYBER 180-990
  44825. VFD 12/06,18/TCPMM-TCPM,30/0#41 CYBER 180-990 MODEL B
  44826. VFD 12/06,18/TCPMM-TCPM,30/0#44 CYBER 180-994
  44827. CON 0 END OF TABLE
  44828. TMNBA CON 0 *TCPM* INDEX SET BY *SSP*
  44829.  
  44830. * HARDWARE DETECTABLE CPU HEAD TYPES.
  44831.  
  44832. MP64 CON "CP64M" 6200/6400
  44833. MP66 CON "CP66M" 6600
  44834. MP73 CON "C173M" CYBER 172/173
  44835. MP75 CON "C175M" CYBER 175
  44836. MP76 CON "C176M" CYBER 176
  44837. MP10 CON "C810M" CYBER 180-810
  44838. MP15 CON "C815M" CYBER 170-815
  44839. MP25 CON "C825M" CYBER 170-825
  44840. MP30 CON "C830M" CYBER 180-830
  44841. MP35 CON "C835M" CYBER 170-835
  44842. MP40 CON "C840M" CYBER 180-840
  44843. MP45 CON "C845M" CYBER 170-845
  44844. MP50 CON "C850M" CYBER 180-850
  44845. MP55 CON "C855M" CYBER 170-855
  44846. MP60 CON "C860M" CYBER 180-860
  44847. MP86 CON "C865M" CYBER 170-865
  44848. MP87 CON "C875M" CYBER 170-875
  44849. MP961 CON "C961M" CYBER 180-960-11
  44850. MP963 CON "C963M" CYBER 180-960-31/32
  44851. MP90 CON "C990M" CYBER 180-990
  44852. TIPR SPACE 4
  44853. * SELECTABLE (VIA IPRDECK ENTRY CPM) CPU HEAD TYPES.
  44854. *
  44855. * THIS LIST MUST BE IN THE SAME ORDER AS THE LIST IN *COMSSRU*.
  44856.  
  44857. TIPR BSS 0
  44858. LOC 1
  44859.  
  44860. CON "CP62M" 6200
  44861. CON "CP64M" 6400
  44862. CON "CP65M" 6500
  44863. CON "CP66M" 6600
  44864. CON "CP67M" 6700
  44865. CON "CP71M" CYBER 71
  44866. CON "CP72M" CYBER 72
  44867. CON "CP73M" CYBER 73
  44868. CON "CP74M" CYBER 74
  44869. CON "C171M" CYBER 171
  44870. CON "C172M" CYBER 172
  44871. CON "C173M" CYBER 173
  44872. CON "C174M" CYBER 174
  44873. CON "C175M" CYBER 175
  44874. CON "C176M" CYBER 176
  44875. CON "C720M" CYBER 170-720
  44876. CON "C730M" CYBER 170-730
  44877. CON "C740M" CYBER 170-740
  44878. CON "C750M" CYBER 170-750
  44879. CON "C760M" CYBER 170-760
  44880. CON "C810M" CYBER 180-810
  44881. CON "C815M" CYBER 170-815
  44882. CON "C825M" CYBER 170-825
  44883. CON "C830M" CYBER 180-830
  44884. CON "C835M" CYBER 170-835
  44885. CON "C840M" CYBER 180-840
  44886. CON "C845M" CYBER 170-845
  44887. CON "C850M" CYBER 180-850
  44888. CON "C855M" CYBER 170-855
  44889. CON "C860M" CYBER 180-860
  44890. CON "C865M" CYBER 170-865
  44891. CON "C875M" CYBER 170-875
  44892. CON "C961M" CYBER 180-960-11
  44893. CON "C963M" CYBER 180-960-31/32
  44894. CON "C990M" CYBER 180-990
  44895. CON "ICM1M" INSTALLATION DEFINED - 1
  44896. CON "ICM2M" INSTALLATION DEFINED - 2
  44897. CON "ICM3M" INSTALLATION DEFINED - 3
  44898. CON "ICM4M" INSTALLATION DEFINED - 4
  44899. CON "ICM5M" INSTALLATION DEFINED - 5
  44900. ERRNZ *-TIPRL TABLE SIZE CHANGED
  44901.  
  44902. LOC *O
  44903. SCD SPACE 4,10
  44904. ** SCD - SET CHANNEL DATA.
  44905. *
  44906. * THIS SUBROUTINE RECONSTRUCTS THE CHANNEL ACCESS BYTE IN EACH
  44907. * MST ENTRY, CLEARS THE IDLE FLAG IN EACH CHANNEL STATUS TABLE
  44908. * ENTRY AND ENSURES THAT ALL CHANNEL STATES ARE EITHER *UP* OR
  44909. * *DOWN*.
  44910. *
  44911. * CALLS /MONITOR/RCB, /MONITOR/SCH.
  44912.  
  44913.  
  44914. SCD PS ENTRY/EXIT
  44915. SX7 3 CHANNEL STATE MASK
  44916. SB4 NOPE
  44917. SA2 ESTP
  44918. MX0 -12
  44919. AX2 12
  44920. BX2 -X0*X2 LAST MASS STORAGE ORDINAL + 1
  44921. SB7 X2-1
  44922. SCD1 LT B7,B4,SCD4 IF END OF EST SCAN
  44923. SX1 B7
  44924. SB7 B7-B1 DECREMENT EST ORDINAL
  44925. SB5 48
  44926. SB2 B5+B1
  44927. CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
  44928. TA3 X3+EQDE,EST READ EST ENTRY
  44929. PL X3,SCD1 IF NOT MASS STORAGE
  44930. SCD2 SB5 B5-12
  44931. SB3 B5-12
  44932. SB6 SCD1 *RCB* EXIT ADDRESS
  44933. EQ B3,B0,SCD3 IF BOTH CHANNELS PROCESSED
  44934. SB3 B2-B5
  44935. LX6 X3,B3
  44936. AX6 59
  44937. BX6 X6*X7 =0 IF *UP*/*IDLE*, =3 IF *DOWN*
  44938. SB6 SCD2 *SCH* EXIT ADDRESS
  44939. EQ /MONITOR/SCH SET CHANNEL STATE
  44940.  
  44941. SCD3 BX5 -X0*X3
  44942. LX5 3 MST ADDRESS
  44943. EQ /MONITOR/RCB RECONSTRUCT CHANNEL ACCESS BYTE IN MST
  44944.  
  44945. SCD4 SA2 CHTP
  44946. SA3 SCDA IDLE FLAG MASK
  44947. SB6 CTALL CHANNEL TABLE LENGTH
  44948. SB7 B0
  44949. AX2 12
  44950. SCD5 SA4 X2+B7 READ NEXT CHANNEL TABLE WORD
  44951. SB7 B7+B1 ADVANCE CHANNEL TABLE INDEX
  44952. BX7 -X3*X4 CLEAR IDLE FLAGS
  44953. SA7 A4
  44954. EQ B7,B6,SCD IF END OF CHANNEL TABLE
  44955. EQ SCD5 PROCESS NEXT CHANNEL TABLE WORD
  44956.  
  44957.  
  44958. SCDA CON 01000100010001000100B IDLE FLAG MASK
  44959. SCS SPACE 4
  44960. ** SCS - SET CPU STATUS.
  44961. *
  44962. * EXIT (A0) = NEXT EXCHANGE ADDRESS.
  44963.  
  44964.  
  44965. SCS PS ENTRY/EXIT
  44966. SA2 ACPL SET CPU 0 IDLE
  44967. SA3 A2+B1
  44968. BX6 X2+X3
  44969. SX7 B1
  44970. BX1 X3
  44971. PL X6,SCS2 IF 2 CPU,S
  44972. SX7 B0
  44973. SB4 TPPR CLEAR CPU SELECTION BITS
  44974. SB5 TPPRL
  44975. SX4 B1
  44976. LX4 58-0
  44977. TJP (/PRESET/SCS0,SUBCP,/PRESET/SCS1) CHECK SUBCP
  44978.  
  44979. SCS0 SA3 /MONITOR/TXJP DISABLE SUBCONTROL POINT XP FOR CPU1
  44980. BX6 X3
  44981. SA6 A3+B1
  44982. SCS1 SA3 B4
  44983. BX6 -X4*X3
  44984. SB4 B4+B1
  44985. SA6 A3
  44986. NE B4,B5,SCS1 IF NOT END OF TABLE
  44987. SCS2 TA3 CWQW,SCA SET CPU SELECTION FOR PROGRAM MODE
  44988. LX7 24-0
  44989. BX7 X3+X7
  44990. SA7 A3
  44991. SX3 /MONITOR/IXP
  44992. SX4 MIXT
  44993. BX6 X2+X3
  44994. NG X6,SCS3 IF CPU 0 TURNED OFF
  44995. NG X1,SCS4 IF 1 CPU
  44996. SA6 A2
  44997. LX4 42
  44998. BX6 X4+X3 SET EXCHANGE PACKAGE TYPE AND ADDRESS
  44999. SA3 SCA
  45000. LX3 24
  45001. BX6 X6+X3 SET SYSTEM CONTROL POINT
  45002. SA6 CPAL
  45003. SA3 SCSC ENABLE DUAL-CP EXTENSIONS
  45004. BX7 X3
  45005. SA3 A3+B1
  45006. ERRNZ SCSD-SCSC-1
  45007. SA7 /MONITOR/BNJ15
  45008. NO
  45009. BX7 X3
  45010. SA7 /MONITOR/RCCB
  45011. SX3 /DCP/IXP1
  45012. SX4 DIXT
  45013. SCS3 SA2 A2+1 SET CPU 1 IDLE PACKAGE
  45014. BX6 X2+X3
  45015. SCS4 SA6 A2
  45016. LX4 42
  45017. BX6 X4+X3 SET EXCHANGE PACKAGE TYPE AND ADDRESS
  45018. SA3 SCA
  45019. LX3 24
  45020. BX6 X6+X3 SET SYSTEM CONTROL POINT
  45021. SA6 A2+CPAL-ACPL
  45022. SA1 DCPC
  45023. ZR X1,SCS5 IF NOT DUAL CPU MACHINE WITH CACHE
  45024. SA1 EIBP SET EXCHANGE PACKAGE ADDRESS
  45025. MX7 42
  45026. LX7 32
  45027. SX6 /DCP/SCX1 EXCHANGE PACKAGE FOR IDLE PROGRAM STARTUP
  45028. BX1 X7*X1
  45029. LX6 32
  45030. BX6 X1+X6
  45031. SA6 A1
  45032. SA1 SCSE SET IDLE PACKAGE PROGRAM FOR CPU1
  45033. BX6 X1
  45034. SA6 /DCP/IDL1+2
  45035. SCS5 SA0 /MONITOR/PXP
  45036. EQ SCS RETURN
  45037.  
  45038. SCSC EQ /DCP/BNJ
  45039.  
  45040. SCSD EQ /DCP/RCC
  45041.  
  45042. SCSE EQ 2 LOOP WITHOUT DELAY
  45043. SDT SPACE 4,20
  45044. ** SDT - SET DATE AND TIME FROM *CTI*-SUPPLIED VALUES.
  45045. *
  45046. * IN ORDER TO PROVIDE A VALID DATE AND TIME ON THE DISPLAY
  45047. * AS SOON AS POSSIBLE, THIS ROUTINE IS CALLED AT THE BEGINNING
  45048. * OF *CPUMTR* PRESET. BECAUSE OF THE LENGTH OF TIME REQUIRED
  45049. * TO EXECUTE *CPUMTR* PRESET, THIS ROUTINE WILL BE CALLED AGAIN
  45050. * AT THE END OF *CPUMTR* PRESET TO MAINTAIN CLOCK PRECISION.
  45051. *
  45052. * THIS CODE IS DERIVED FROM THE *FTN5* COMPILER OBJECT
  45053. * CODE PRODUCED FOR A FORTRAN VERSION OF THE ALGORITHM
  45054. * DEVELOPED IN *CYBIL* FOR NOS/VE.
  45055. *
  45056. * ENTRY (TIML) = *CTI*-SUPPLIED PACKED BASE TIME (FIRST CALL).
  45057. * (DTEL) = *CTI*-SUPPLIED PACKED BASE DATE (FIRST CALL).
  45058. * (PDTL) = *CTI*-SUPPLIED *FRC* BASE VALUE (FIRST CALL).
  45059. *
  45060. * EXIT (DTEL) = CURRENT DISPLAY CODE DATE.
  45061. * (TIML) = CURRENT DISPLAY CODE TIME.
  45062. *
  45063. * USES X - ALL.
  45064. * A - 1, 2, 3, 4, 5, 6, 7.
  45065. * B - 2, 7.
  45066. *
  45067. * MACROS EDATE, ETIME.
  45068.  
  45069.  
  45070. SDT SUBR ENTRY/EXIT
  45071.  
  45072. * SAVE *CTI*-SUPPLIED VALUES ON INITIAL CALL.
  45073.  
  45074. SA1 SDTB
  45075. NZ X1,SDT0 IF NOT FIRST CALL TO *SDT*
  45076. SA1 TIML SAVE *CTI*-SUPPLIED PACKED BASE TIME
  45077. SA2 DTEL SAVE *CTI*-SUPPLIED PACKED BASE DATE
  45078. BX6 X1
  45079. LX7 X2
  45080. SA1 PDTL SAVE *CTI*-SUPPLIED *FRC* BASE VALUE
  45081. SA6 SDTA
  45082. SA7 SDTB
  45083. BX6 X1
  45084. SA6 SDTC
  45085.  
  45086. * CHECK MAINFRAME TYPE.
  45087.  
  45088. SDT0 SA1 MABL
  45089. LX1 59-47
  45090. NG X1,SDTX IF NOT A CME MAINFRAME
  45091.  
  45092. * INITIALIZE *RTC* VARIABLES.
  45093.  
  45094. SA3 /CME/RTCC INITIALIZE REAL TIME CLOCK
  45095. RC X6 GET CURRENT *FRC* VALUE
  45096. BX7 X3
  45097. SA6 /CME/RTCA INITIALIZE WHOLE MILLISECOND BASE TIME
  45098. SA7 RTCL
  45099. SA6 /CME/RTCB INITIALIZE WHOLE SECOND BASE TIME
  45100. LX1 59-42-59+47
  45101. PL X1,SDTX IF CYBER 865/875
  45102.  
  45103. * CALCULATE ELAPSED TIME SINCE CTI-SUPPLIED DATE/TIME.
  45104.  
  45105. SA5 SDTC GET CTI-SUPPLIED *FRC* VALUE
  45106. IX6 X6-X5
  45107. PL X6,SDT1 IF CTI *FRC* VALID (.LT. CURRENT *FRC*)
  45108. SX6 0 USE CTI-SUPPLIED DATE/TIME INTACT
  45109. SDT1 SA6 FRC
  45110. SA4 =500000 ROUND UP TO NEAREST WHOLE SECOND
  45111. SA3 =1000000.0
  45112. IX0 X6+X4
  45113. PX7 X0
  45114. FX0 X7/X3
  45115. UX7,B2 X0
  45116.  
  45117. * CALCULATE CURRENT TIME.
  45118.  
  45119. SA5 =60.0 ADVANCE SECONDS
  45120. LX0 B2,X7
  45121. PX7 X0
  45122. FX6 X7/X5
  45123. UX7,B2 X6
  45124. SA5 SDTA CONVERT PACKED DECIMAL SECONDS AND MINUTES
  45125. BX6 X5
  45126. BX4 X5
  45127. MX3 -4
  45128. LX6 56
  45129. LX4 44
  45130. BX2 -X3*X6
  45131. BX6 -X3*X4
  45132. BX4 X2
  45133. LX7 B2,X7 UPDATE *FRC* TO BE ELAPSED MINUTES
  45134. SX1 60
  45135. LX4 2
  45136. IX2 X4+X2
  45137. BX4 X6
  45138. LX4 2
  45139. IX6 X4+X6
  45140. DX4 X7*X1
  45141. LX2 1
  45142. IX0 X0-X4 CALCULATE NUMBER OF SECONDS TO ADVANCE
  45143. BX4 X5
  45144. BX5 -X3*X5
  45145. LX4 48
  45146. LX6 1
  45147. IX2 X5+X2
  45148. BX5 -X3*X4
  45149. IX6 X5+X6
  45150. SA7 FRC
  45151. IX7 X0+X2
  45152. SA6 MN
  45153. SA7 SS
  45154. IX7 X7-X1
  45155. NG X7,SDT2 IF NO MINUTE CHANGE
  45156. SA7 A7
  45157. SX0 B1
  45158. IX7 X0+X6
  45159. SA7 A6
  45160. SDT2 SA5 FRC ADVANCE MINUTES
  45161. SA4 =60.0
  45162. PX0 X5
  45163. FX7 X0/X4
  45164. SA4 SDTA CONVERT PACKED DECIMAL HOURS
  45165. BX0 X4
  45166. LX0 32
  45167. UX2,B2 X7
  45168. BX7 -X3*X0
  45169. SX0 60
  45170. LX6 B2,X2 UPDATE *FRC* TO BE ELAPSED HOURS
  45171. BX2 X7
  45172. DX1 X6*X0
  45173. LX2 2
  45174. IX7 X2+X7
  45175. SA2 MN
  45176. LX4 36
  45177. IX1 X5-X1 CALCULATE NUMBER OF MINUTES TO ADVANCE
  45178. BX5 -X3*X4
  45179. LX7 1
  45180. IX7 X5+X7
  45181. SA6 A5
  45182. IX6 X2+X1
  45183. SA7 HH
  45184. SA6 A2
  45185. IX6 X6-X0
  45186. NG X6,SDT3 IF NO HOUR CHANGE
  45187. SX0 B1
  45188. IX7 X0+X7
  45189. SA6 A6
  45190. SA7 A7
  45191. SDT3 SA5 FRC ADVANCE HOURS
  45192. SA4 =24.0
  45193. PX0 X5
  45194. FX7 X0/X4
  45195. SA4 SDTB CONVERT PACKED DECIMAL DAYS
  45196. BX0 X4
  45197. LX0 56
  45198. UX2,B2 X7
  45199. BX7 -X3*X0
  45200. SX0 24
  45201. LX6 B2,X2 UPDATE *FRC* TO ELAPSED DAYS
  45202. BX2 X7
  45203. DX1 X6*X0
  45204. LX2 2
  45205. IX7 X2+X7
  45206. SA2 HH
  45207. BX3 -X3*X4
  45208. IX4 X5-X1 CALCULATE NUMBER OF HOURS TO ADVANCE
  45209. LX7 1
  45210. IX7 X3+X7
  45211. SA6 A5
  45212. IX6 X2+X4
  45213. SA7 DD
  45214. SA6 A2
  45215. IX6 X6-X0
  45216. NG X6,SDT4 IF NO DAY CHANGE
  45217. SA6 A6
  45218. SX0 B1
  45219. IX6 X0+X7
  45220. SA6 A7
  45221.  
  45222. * CALCULATE CURRENT DATE.
  45223.  
  45224. SDT4 SA5 SDTB ADVANCE DATE
  45225. BX0 X5
  45226. LX0 32
  45227. MX7 -4 CONVERT PACKED DECIMAL MONTH AND YEAR
  45228. BX4 X5
  45229. BX3 -X7*X0
  45230. LX4 44
  45231. BX0 X3
  45232. BX2 -X7*X4
  45233. LX0 2
  45234. BX4 X2
  45235. BX1 X5
  45236. IX3 X0+X3
  45237. LX4 2
  45238. LX1 36
  45239. IX0 X4+X2
  45240. BX4 -X7*X1
  45241. LX3 1
  45242. LX5 48
  45243. IX6 X4+X3
  45244. BX4 -X7*X5
  45245. LX0 1
  45246. SA6 YY
  45247. IX6 X4+X0
  45248. SA6 MM
  45249.  
  45250. * CALCULATE CURRENT MONTH AND DAY.
  45251.  
  45252. SA5 MM
  45253. SA4 YY
  45254. SA3 DD
  45255. SA2 FRC
  45256. IX3 X3+X2
  45257.  
  45258. * ADJUST YEAR, MONTH, DAY UNTIL DAY FITS WITHIN MONTH.
  45259.  
  45260. SDT5 MX7 -2 CHECK FOR LEAP YEAR
  45261. SX6 28
  45262. BX7 -X7*X4
  45263. NZ X7,SDT5.1 IF NOT LEAP YEAR
  45264. SX6 29
  45265. SDT5.1 SA6 DAYS+1 RESET NUMBER OF DAYS IN FEBRUARY
  45266. SDT6 SA1 X5+DAYS-1 ADJUST ELAPSED DAYS BY DAYS IN MONTH
  45267. IX2 X1-X3
  45268. PL X2,SDT7 IF DAYS FIT WITHIN CURRENT MONTH
  45269. SX5 X5+B1 ADVANCE MONTH
  45270. IX3 X3-X1 DECREMENT ELAPSED DAYS
  45271. SB7 X5-13
  45272. NG B7,SDT6 IF NOT YEAR ROLLOVER
  45273. SX5 B1 RESET MONTH TO JANUARY
  45274. SX4 X4+B1 ADVANCE YEAR
  45275. EQ SDT5 RECHECK FOR LEAP YEAR
  45276.  
  45277. * CONVERT CALCULATED VALUES TO DISPLAY WALL CLOCK DATE/TIME.
  45278.  
  45279. SDT7 SX1 X4-70 BIAS YEAR BY 1970
  45280. PL X1,SDT8 IF YEAR BEFORE 2000
  45281. SX1 X1+100 ADJUST BIAS FOR YEARS 2000 - 2033
  45282. SDT8 LX1 12 PACK DATE
  45283. LX5 6
  45284. BX1 X1+X5
  45285. BX1 X1+X3
  45286. EDATE X1 CONVERT PACKED DATE TO DISPLAY CODE
  45287. SA6 DTEL
  45288. SA1 HH PACK TIME
  45289. LX1 12
  45290. SA2 MN
  45291. LX2 6
  45292. SA3 SS
  45293. BX1 X1+X2
  45294. BX1 X1+X3
  45295. ETIME X1 EDIT TIME
  45296. SA6 TIML
  45297. EQ SDTX RETURN
  45298.  
  45299.  
  45300. SDTA CON 0 *CTI*-SUPPLIED PACKED BASE TIME
  45301. SDTB CON 0 *CTI*-SUPPLIED PACKED BASE DATE
  45302. SDTC CON 0 *CTI*-SUPPLIED BASE *FRC* VALUE
  45303.  
  45304. * DATE/TIME CELLS.
  45305.  
  45306. YY BSS 1 YEAR
  45307. MM BSS 1 MONTH
  45308. DD BSS 1 DAY
  45309. HH BSS 1 HOUR
  45310. MN BSS 1 MINUTE
  45311. SS BSS 1 SECOND
  45312. FRC BSS 1 FREE RUNNING CLOCK
  45313.  
  45314. * ARRAY CONTAINING THE NUMBER OF DAYS IN EACH MONTH.
  45315.  
  45316. DAYS DATA 31,28,31,30,31,30,31,31,30,31,30,31
  45317. *DAYS DATA 31,29,31,30,31,30,31,31,30,31,30,31 (LEAP YEAR)
  45318. SJB SPACE 4,10
  45319. ** SJB - SETUP JOB CONTROL BLOCK TABLE.
  45320. *
  45321. * EXIT JCB SET UP FOR ALL SERVICE CLASSES.
  45322. *
  45323. * USES X - 4.
  45324. * B - 3.
  45325. *
  45326. * CALLS /MONITOR/CCP.
  45327.  
  45328.  
  45329. SJB SUBR ENTRY/EXIT
  45330. SX4 MXJC SET MAXIMUM SERVICE CLASS
  45331. SB3 SJB1 SET RETURN ADDRESS
  45332. SJB1 SX4 X4-1
  45333. ZR X4,SJBX IF ALL SERVICE CLASSES PROCESSED
  45334. EQ /MONITOR/CCP CONVERT CPU SCHEDULING PARAMETERS
  45335. SSP SPACE 4,10
  45336. ** SSP - SET SYSTEM PARAMETERS.
  45337.  
  45338.  
  45339. SSP7.9 SA1 BIOL
  45340. AX1 24
  45341. SX7 X1
  45342. ZR X7,SSP IF NO BUFFERED I/O
  45343. SB6 X1+CBTP LAST ENTRY
  45344. SA7 BDT
  45345. MX3 -18
  45346. SX7 X7+BDTL
  45347. SA2 X1-1
  45348. SSP8 SA2 A2+B1 NEXT ENTRY
  45349. BX6 X7+X2
  45350. LX2 -24
  45351. SA7 A7+B1
  45352. SA6 A2
  45353. BX4 -X3*X2
  45354. IX7 X7+X4
  45355. SX4 A2-B6
  45356. NZ X4,SSP8 IF MORE ENTRIES TO PROCESS
  45357. SX6 X1+EMTP
  45358. SX7 X1+DWTP
  45359. SA6 EMTB
  45360. SA7 DWTB
  45361. SX6 X6-1
  45362. SA6 BLMB
  45363. SX6 X1+DRDP
  45364. SX7 X1+WRTP
  45365. SA6 DRDB
  45366. SA7 WRTB
  45367. SA2 X1+CBTP GET NUMBER OF I/O BUFFERS
  45368. SA4 X1+PUTP
  45369. SX7 X1+IORQP
  45370. LX2 12
  45371. MX3 -12
  45372. SA7 IORQ
  45373. BX6 -X3*X2
  45374. LX4 12
  45375. SA6 NIOB
  45376. BX7 -X3*X4
  45377. AX6 2 SET MAXIMUM DATA WRITTEN TO 1/4 OF TOTAL
  45378. SA7 NRUN
  45379. SA6 MDWB
  45380.  
  45381. SSP PS ENTRY/EXIT
  45382. SA2 EMBP
  45383. LX2 -24 SET *EMB* POINTER
  45384. SX7 X2
  45385. SA7 EMB
  45386.  
  45387. * SET CONTROL POINT AND PSEUDO-CONTROL POINT PARAMETERS.
  45388.  
  45389. SA1 PCPP
  45390. SX6 X1 SET PCP AREA ADDRESS
  45391. MX0 -12
  45392. ERRNZ MCTP-PCPP CODE DEPENDS ON VALUE
  45393. AX1 24
  45394. BX7 -X0*X1 NUMBER OF MCT ENTRIES
  45395. SA6 PCPA
  45396. AX1 12 POSITION TO MCT ADDRESS
  45397. BX6 X1
  45398. SA7 NMCT SET MCT ENTRY COUNT
  45399. SA6 MCT
  45400. SA1 NCPL SET SYSTEM CONTROL POINT NUMBER
  45401. AX1 36
  45402. BX6 -X0*X1
  45403. SX6 X6+B1
  45404. SA6 SC
  45405. SX2 X6+B1 NUMBER OF CP-S (INCLUDING CP-0)
  45406. LX6 7
  45407. SA6 SCA SET SYSTEM CONTROL POINT ADDRESS
  45408. IX6 X7-X2 CALCULATE PCP COUNT
  45409. SA6 NPCP
  45410. LX7 7
  45411. SA7 PCM2 SET MAXIMUM PCP OFFSET
  45412.  
  45413. * SET PP CONFIGURATION PARAMETERS.
  45414.  
  45415. SA2 PPCP SET FIRST PP COMMUNICATION ADDRESS
  45416. BX7 -X0*X2
  45417. SA7 FP
  45418. BX6 X7 SET FIRST PP COMMUNICATION ADDRESS/8
  45419. AX6 3
  45420. SA6 FP8
  45421. LX2 -36
  45422. SX6 X2
  45423. SX3 X2
  45424. SA6 FPX SET EXTENDED PP COMMUNICATION BLOCKS FWA
  45425. SA1 PPUL SET CPP-S COMMUNICATION ADDRESS
  45426. SX2 X1 GET NUMBER OF PHYSICALLY PRESENT CPP-S
  45427. AX2 12D
  45428. LX1 -24
  45429. BX1 -X0*X1
  45430. SX6 20D NUMBER OF PP-S IN 2 BARREL SYSTEM
  45431. SB2 X1-11D
  45432. PL B2,SSP.0 IF NOT 2 BARRELS
  45433. SX6 10D
  45434. SSP.0 LX6 3
  45435. IX6 X6+X7
  45436. SA6 FPC ADDRESS OF CPP COMMUNICATION AREA
  45437. ZR X2,SSP0.1 IF NO CPP-S
  45438. LX2 3
  45439. IX6 X2+X6
  45440. SSP0.1 SA6 SP ADDRESS OF PSEUDO PP COMMUNICATION AREA
  45441. IX7 X6-X7
  45442. LX7 PPXES-PPCES
  45443. IX7 X3+X7
  45444. SA7 SPX SET PSEUDO PP EXTENDED BLOCK ADDRESS
  45445. SX7 0 CLEAR INPUT REGISTER
  45446. SA7 X6+
  45447.  
  45448. * SET CENTRAL AND EXTENDED MEMORY CONFIGURATION PARAMETERS.
  45449.  
  45450. SA1 CFGL GET HARDWARE ECS/ESM MODE
  45451. SX6 B1+
  45452. AX1 22
  45453. BX6 X6*X1
  45454. SA6 ESM SET ESM MODE IF BIT IS SET
  45455. SA1 MABL CHECK FOR 8XX
  45456. ZR X6,SSP0.11 IF NOT ESM MODE
  45457. LX1 59-47
  45458. NG X1,SSP0.10 IF NOT CYBER 8XX
  45459. LX1 59-42-59+47
  45460. NG X1,SSP0.11 IF NOT CYBER 865/875
  45461. SSP0.10 SA6 ESM170 SET 170 ESM MODE
  45462. SSP0.11 BX6 X4 SET FL
  45463. AX6 36
  45464. BX7 X5 SET FLX
  45465. LX7 -36
  45466. SA6 MCM
  45467. SA1 MEFL GET EXPANDED ADDRESSING FLAG
  45468. SA7 MEC
  45469. SA7 MXM SET MAXIMUM MEMORY
  45470. AX6 6 SET FL SHIFTED
  45471. SA6 MCMS
  45472. LX1 59-31
  45473. MX4 37
  45474. SA3 EEC
  45475. BX4 X4*X7
  45476. BX7 X4-X7
  45477. PL X1,SSP0.12 IF NOT EXPANDED ADDRESSING
  45478. SA6 ESM170 SET EXPANDED ADDRESSING INDICATOR
  45479. LX7 6
  45480. SSP0.12 AX4 9
  45481. AX7 9 SET FLE / 1000B
  45482. SA7 MECNF
  45483. BX7 X4+X7 SET FLX FLAG BIT SHIFTED
  45484. SA7 MECS
  45485. MX4 -2 SET EXTENDED MEMORY SHIFT COUNT
  45486. LX1 0-29-59+31
  45487. BX7 -X4*X1
  45488. SA7 TNSC
  45489. SB4 X7
  45490. SX7 X7-6 (0 TO 3)-6 = (-6 TO -3)
  45491. MX4 -3 SET USER EM SHIFT COUNT
  45492. SA7 MESC
  45493. LX1 0-33-0+29 POSITION USER EM SHIFT COUNT
  45494. BX7 -X4*X1
  45495. SA7 UESC STORE USER EM SHIFT COUNT
  45496. SX1 20B
  45497. LX7 B4,X1
  45498. SA7 TCNT SET TRACK SIZE
  45499. SA1 MABL
  45500. LX1 59-47
  45501. NG X1,SSP0.3 IF NOT CME
  45502. LX6 6 SET MAXIMUM MEMORY
  45503. SA6 MXM
  45504. SX6 B0+ CLEAR THE NON-CME INDICATOR
  45505. SA6 NCME
  45506. SA1 MABL
  45507. LX1 59-42
  45508. MX7 -8
  45509. PL X1,SSP0.15 IF 170 - 865/875
  45510. SA1 EABL+CPEI GET PROCESSOR DESCRIPTOR POINTER
  45511. LX1 18
  45512. SA4 X1 ISOLATE MODEL NUMBER
  45513. AX4 28
  45514. SX2 TMNB
  45515. SA1 X1+3 GET CYBER 990 LARGE MEMORY INDICATOR
  45516. LX1 59-12
  45517. PL X1,SSP0.14 IF NOT A LARGE MEMORY CYBER 990
  45518. SX6 B0+
  45519. SA6 CCMB
  45520. SA1 MEC SET PROGRAM MODE FLE TO MACHINE FLE
  45521. BX6 X1
  45522. SA6 MECPRG
  45523. SSP0.14 SA1 X2
  45524. ZR X1,SSP0.16 IF END OF TABLE
  45525. SX2 X2+B1
  45526. BX6 X1-X4
  45527. BX6 -X7*X6
  45528. NZ X6,SSP0.14 IF NO MATCH ON MODEL NUMBER
  45529. AX1 30 SET *TCPM* INDEX
  45530. SX7 X1
  45531. SA7 TMNBA
  45532. MX7 -12
  45533. AX1 18 SET ACCOUNTING ADJUSTMENT
  45534. BX7 -X7*X1
  45535. AX6 X7,B1
  45536. SA7 ACAD
  45537. SA6 ACAD2
  45538. EQ SSP0.16 SET/CLEAR CM COPY FLAG
  45539.  
  45540. SSP0.15 SA4 UEML SET USER EM IN EXTERNAL EM FLAG
  45541. SX2 B1+B1
  45542. BX6 X2*X4
  45543. SA6 XUEM
  45544. SSP0.16 SX6 EEMC+100B CLEAR CM COPY FLAG TO ACCESS EXTERNAL EM
  45545. SX7 EEMC+100B-1
  45546. SX2 B1+B1
  45547. SX4 B1+B1
  45548. NZ X3,SSP0.2 IF EXTERNAL ECS PRESENT
  45549. SX6 EEMC+500B SET CM COPY FLAG TO ACCESS INTERNAL ECS
  45550. SX7 EEMC+500B-1
  45551. SX4 B0+
  45552. SSP0.2 SA1 ESM170 GET ADDRESSING MODE
  45553. ZR X1,SSP0.21 IF NOT EXPANDED ADDRESSING
  45554. SX1 200B SET EXPANDED ADDRESSING FLAG
  45555. BX6 X6+X1
  45556. BX7 X7+X1
  45557. SSP0.21 SA6 XPFE
  45558. SA7 PXPFE
  45559. SA6 CXPFE
  45560. SX6 EEMC-1+400B+100B
  45561. BX6 X6+X1
  45562. SA6 EXPFEC
  45563. SA1 UEML
  45564. BX2 X2*X1
  45565. BX6 -X2*X4
  45566. LX6 59-1
  45567. AX6 18
  45568. SA4 UEC SET STORAGE MOVE XP FLAG IF EXTERNAL UEC
  45569. LX1 12
  45570. BX6 X6*X4
  45571. SA6 SMXF
  45572. ZR X2,SSP0.3 IF UEM NOT PRESENT
  45573. NZ X3,SSP0.3 IF SIMULTANEOUS UEM/ESM
  45574. BX6 -X0*X1
  45575. SA2 MABL CHECK FOR CYBER 180
  45576. LX2 59-42
  45577. SA1 ESM170 PICK UP EXPANDED MODE FLAG
  45578. PL X2,SSP0.22 IF CY170-865/875
  45579. ZR X1,SSP0.22 IF NOT IN EXPANDED MODE
  45580. SA6 UEM180 SET 180 EXPANDED MODE FOR FAKE READ
  45581. SSP0.22 BX2 X6 PRESERVE RAE/1000
  45582. LX6 3 RAE/100
  45583. NZ X1,SSP0.23 IF EXPANDED MODE
  45584. LX6 6 RAE
  45585. SSP0.23 SA6 RXX SET RXX VALUE FOR EXCHANGE PACKAGES
  45586. BX6 X2 RESTORE RAE/1000 TO X6
  45587. SA6 RAEX
  45588. LX6 9
  45589. SA1 MCM INCLUDE UEM IN MAXIMUM MACHINE FL
  45590. SA2 MEC
  45591. SA6 A6-B1
  45592. ERRNZ RAEX-RAE-1 CODE DEPENDS ON CONSECUTIVE LOCATIONS
  45593. IX6 X1+X2
  45594. SA6 MXM
  45595.  
  45596. * SET TABLE POINTERS.
  45597.  
  45598. SSP0.3 SA1 SSTL
  45599. LX1 59-29
  45600. NG X1,SSP0.32 IF TRACE DISABLED
  45601. SX7 B0+
  45602. SA7 NTRACE CLEAR NON-TRACE INDICATOR
  45603. SSP0.32 SA1 ESTP READ EST POINTER
  45604. LX1 24 SET EST FWA
  45605. SX7 X1
  45606. LX1 12 SET EST LENGTH
  45607. BX6 -X0*X1
  45608. SA7 EST
  45609. SA6 ESTL
  45610. LX1 12 SET LAST MASS STORAGE ORDINAL + 1
  45611. BX6 -X0*X1
  45612. SA6 IBOP SAVE IN ROUTINE *IBO*
  45613. SA1 EVTP GET EVENT TABLE POINTER
  45614. AX1 36
  45615. SX6 X1 FWA EVENT TABLE
  45616. SA6 EVT
  45617. SA1 EPBP GET ECS PP BUFFER POINTER
  45618. MX4 -6
  45619. SX6 X1 FWA ECS PP BUFFERS
  45620. SA6 ECSB
  45621. LX1 -18
  45622. SX2 ECBL LENGTH OF EACH PP ECS BUFFER
  45623. BX4 -X4*X1 NUMBER OF PP ECS BUFFERS
  45624. IX6 X4*X2
  45625. SA6 ECSBL SET PP ECS BUFFERS TOTAL LENGTH
  45626. SA1 SSML GET OPERATING SYSTEM SECURITY MODE
  45627. MX6 -6
  45628. LX1 12
  45629. BX6 -X6*X1
  45630. SA6 OSSM
  45631. SA1 EXML GET EXTENDED MEMORY EST ORDINAL
  45632. MX6 -9
  45633. BX6 -X6*X1
  45634. SA6 EEM
  45635. SA1 DFPP SET DAYFILE POINTERS FWA
  45636. LX1 24
  45637. SB6 X6 (B6) = EM EST ORDINAL (CPU ACCESS)
  45638. CX4 X6,EST CONVERT EST ORDINAL TO OFFSET
  45639. IX7 X7+X4
  45640. SX6 X1
  45641. SA6 DP
  45642. SA1 FNTP SET FWA/LWA OF FNT
  45643. MX4 -24
  45644. LX1 24
  45645. BX6 -X4*X1
  45646. BX2 X6
  45647. SA6 FNT
  45648. LX1 12
  45649. BX6 -X0*X1 EXTRACT NUMBER OF ENTRIES IN FNT
  45650. SA6 FNTM
  45651. CX1 X6,FNT LENGTH OF FNT
  45652. IX6 X2+X1
  45653. SA1 X7+ GET MST ADDRESS OF ECS
  45654. NZ B6,SSP0.4 IF ECS EQUIPMENT DEFINED
  45655. SX7 B0 CLEAR ECS EST AND MST ADDRESSES
  45656. BX1 X1-X1
  45657. SSP0.4 SA6 FNTLWA LWA+1 OF SYSTEM FNT
  45658. SA7 EEN
  45659. BX7 -X0*X1
  45660. LX7 3 MST ADDRESS
  45661. SA7 EMS
  45662. SA1 EJTP GET FWA OF EJT
  45663. LX1 24
  45664. BX6 -X4*X1
  45665. SA6 EJT
  45666. LX1 12
  45667. BX6 -X0*X1 MAXIMUM NUMBER OF ENTRIES IN EJT
  45668. SA6 EJTM
  45669. SA1 SDAP SET FWA STATISTICAL DATA AREA
  45670. LX1 24
  45671. BX6 -X4*X1
  45672. SA6 SDA
  45673. SA2 SSCP GET FWA *SSCT* TABLE
  45674. LX2 -12
  45675. BX7 -X4*X2
  45676. SA7 SSCT
  45677. SA2 MABL CHECK FOR CMU
  45678. LX2 59-39
  45679. PL X2,SSP1 IF CMU PRESENT
  45680. BX1 X2 CHECK IF CPU 0 HAS INSTRUCTION STACK
  45681. LX1 59-40-59+39
  45682. NG X1,SSP2 IF NOT STACK MACHINE
  45683. SA4 SFFO DECREASE SFCALL FUNCTION TIME BY 1/2
  45684. AX6 X4,B1
  45685. SA6 A4
  45686. SX7 B1 875 CM TRANSFER RATE SHIFT
  45687. LX1 59-38-59+40
  45688. SA7 SFCS
  45689. NG X1,SSP2 IF AN 875
  45690. SSP1 SX7 2 SET SFCALL CM TRANSFER RATE SHIFT
  45691. SA7 SFCS
  45692. SSP2 SA4 UEML
  45693. LX4 0-1
  45694. SX6 B1
  45695. BX6 X6*X4
  45696. SA6 UEM SET/CLEAR UEM FLAG
  45697. NZ X6,SSP4.1 IF UEM
  45698. SX6 B1 SET NON-UEM FLAG
  45699. SA6 NOTUEM
  45700. ZR B6,SSP5 IF NO EXTERNAL ECS EQUIPMENT
  45701. SA1 MECNF
  45702. SX6 X1-500000/1000B
  45703. SX7 B0+
  45704. PL X6,SSP3 IF ECS SIZE .GE. 500K
  45705. SX6 X1-256000/1000B
  45706. SX7 B1
  45707. PL X6,SSP3 IF ECS SIZE .GE. 256K
  45708. SX7 B1+B1
  45709. SSP3 SA7 SFES SET SFCALL ECS TRANSFER RATE SHIFT
  45710. SA1 CME
  45711. NZ X1,SSP4.1 IF CME AVAILABLE
  45712. PL X6,SSP4 IF ECS SIZE .GE. 256K
  45713. PL X2,SSP4.1 IF CMU PRESENT
  45714. SSP4 SX7 B1+ SET TO USE ECS
  45715. SA7 ECM
  45716. SSP4.1 SA1 UEC
  45717. ZR X1,SSP5 IF USER ECS NOT PRESENT
  45718. BX7 X7-X7
  45719. SA7 NOTDCE ALLOW DUAL CPU USER ECS TRANSFER
  45720. SX7 B1
  45721. LX2 59-47-59+39
  45722. PL X2,SSP5 IF CM EXTENSION PRESENT
  45723. SA1 /PROGRAM/SMPXP+CWQW FORCE INTO CPU-0
  45724. SA7 A7 PREVENT DUAL CPU USER ECS TRANSFER
  45725. LX7 24
  45726. BX7 X1+X7
  45727. SA7 A1
  45728. SSP5 SA1 JBCP SET FWA OF JOB CONTROL BLOCK TABLE
  45729. AX1 36
  45730. BX6 X1
  45731. SA6 JCB
  45732. SA1 DSSL GET RECOVERY MODE
  45733. MX0 -2
  45734. BX7 -X0*X1
  45735. SA7 CIRA SET RECOVERY MODE
  45736. SA2 MCE
  45737. ZR X2,SSP5.1 IF MEMORY CLEARING NOT ENABLED
  45738. SA7 /MCE/PRSA SET RECOVERY LEVEL
  45739. SSP5.1 SA2 MSAP SET DEVICE SELECTION ADDRESS
  45740. AX2 36
  45741. BX6 X2
  45742. SA6 MSA
  45743. SA2 MABL CHECK MAINFRAME TYPE
  45744. MX3 2
  45745. LX2 59-46
  45746. BX2 X3*X2
  45747. BX2 X2-X3
  45748. NZ X2,SSP6 IF NOT CYBER 176 MAINFRAME
  45749. SX6 EEMC+60B-1 SET XP FLAG AND EXIT MODE FOR CYBER 176
  45750. SA6 XPFE
  45751. SA2 EST LOCATE CYBER 176 EXCHANGE PACKAGE AREA
  45752. SA3 ESTL
  45753. CX6 X3,EST LWA+1 OF EST
  45754. IX2 X2+X6
  45755. MX0 4
  45756. SX2 X2+777B
  45757. LX0 4+9
  45758. BX6 X0*X2
  45759. SX7 X6+/MONITOR/EEA-/MONITOR/MCU
  45760. SA6 EXPA
  45761. SA7 EEAD
  45762. SSP6 SA1 MMFL
  45763. LX1 15
  45764. AX1 60-9
  45765. ZR X1,SSP7 IF NOT MMF CONFIGURATION
  45766. RJ ILD INITIALIZE LINK DEVICE
  45767. NZ B6,SSP7 IF ERROR FOUND
  45768. SA1 SFES DECREASE ECS TRANSFER RATE BY 1/2
  45769. SX6 X1+B1
  45770. SA6 A1
  45771. MX0 -12
  45772. SA1 MMFL SET MMF PARAMETERS
  45773. BX6 -X0*X1
  45774. MX4 -MXMF
  45775. LX1 -12
  45776. SA6 MIN SET MACHINE INDEX
  45777. BX7 -X4*X1
  45778. LX2 X6,B1 SET MST INTERLOCKS
  45779. LX6 6
  45780. SA6 MRT SET MRT ADDRESS
  45781. SA7 MMK SET MACHINE MASK
  45782. SX7 X2+B1
  45783. SA7 MIL
  45784. LX1 -36
  45785. BX7 -X0*X1
  45786. SA7 MID SET MACHINE ID
  45787. BX1 X6 COMPUTE MST LOCAL AREA OFFSET
  45788. AX6 1
  45789. IX6 X1+X6
  45790. AX6 4
  45791. SA6 MSL
  45792. SSP7 SA1 EIBP SET FWA OF *EICB*
  45793. SX6 X1
  45794. SA6 DSCB
  45795. ZR X6,SSP7.9 IF NO *EICB*
  45796. RT X1,/DST/EICB TELL *EI* WHERE THE *EICB* IS
  45797. SX7 SVNL SET SYSTEM VERSION NAME POINTER IN *EICB*
  45798. SA7 X6+/DST/D7SV+2
  45799. SX7 SYTL SET SYSTEM TITLE LINE POINTER IN *EICB*
  45800. SA7 X6+/DST/D7SV+3
  45801. LX1 59-58
  45802. PL X1,SSP7.1 IF NOT DUAL CPU MACHINE WITH CACHE
  45803. SX6 B1
  45804. BX7 X7-X7
  45805. SA6 DCPC SET DUAL CPU MACHINE WITH CACHE FLAGS
  45806. SA7 NDCPC
  45807. SSP7.1 SA1 SSTL
  45808. LX1 59-44
  45809. NG X1,SSP7.2 IF HARDWARE FAULT INJECTION IS DISABLED
  45810. SA1 X6+/DST/D7JP SET *V1*, *V2* AND *V3* BITS IN *EICB*
  45811. MX6 3
  45812. LX6 16-57
  45813. BX6 X1+X6
  45814. SA6 A1
  45815. SSP7.2 SA1 SSCT
  45816. SX6 X1-1
  45817. SX1 NVSI-MXSI-1
  45818. SSP7.3 SX1 X1+5
  45819. SX6 X6+1
  45820. NG X1,SSP7.3 IF NOT TO *NVE* ENTRY WORD YET
  45821. SA6 NVESS ADDRESS OF WORD WITH *NVE* ENTRY
  45822. LX1 2
  45823. LX6 X1,B1
  45824. IX1 X1+X6
  45825. SX6 48
  45826. IX6 X6-X1
  45827. SA6 NVEOS SHIFT COUNT GETS *NVE* ENTRY IN BITS 59-48
  45828. EQ SSP7.9 CHECK FOR BUFFERED I/O
  45829. IBO SPACE 4,10
  45830. ** IBO - INITIALIZE FOR BUFFERED I/O.
  45831. *
  45832. * ENTRY (CIRA) = RECOVERY LEVEL.
  45833. *
  45834. * CALLS RBT.
  45835.  
  45836.  
  45837. IBO21 RJ RBT RECOVER BUFFERED I/O TABLES
  45838.  
  45839. IBO PS ENTRY/EXIT
  45840. SA1 BIOL
  45841. AX1 24
  45842. SX1 X1
  45843. ZR X1,IBO IF NO BUFFERED I/O
  45844. SA1 CIRA GET RECOVERY LEVEL
  45845. SX1 X1-3
  45846. ZR X1,IBO21 IF CM RECOVERY
  45847. TA3 NOPE*ESTE-1*ESTE,EST
  45848. SB2 NOPE-1 INITIALIZE EQUIPMENT INDEX
  45849. SA5 IBOP
  45850. SB7 A0 SAVE (A0)
  45851. SB6 X5
  45852. TNO /PRESET/IBO2,IHPFMD IF NO 819 DEVICES
  45853. SX6 100B INITIALIZE CCT FOR 819-S
  45854. SX4 202B
  45855. LX6 36
  45856. LX4 36
  45857. TA6 CCNT,CCT SET UP CCT
  45858. SB3 NCCT-1
  45859. IBO1 IX6 X6+X4
  45860. SB3 B3-B1
  45861. SA6 A6+CCTL
  45862. NZ B3,IBO1 IF NOT COMPLETE
  45863. TX6 NCCT*CCTL,CCT
  45864. SA6 IBOD SET NEW LWA+1 OF *CCT*
  45865.  
  45866. IBO2 SA5 IBOA-1
  45867. SX0 7777B
  45868. IBO3 SA3 A3+ESTE CHECK NEXT EST ENTRY
  45869. SB2 B2+B1
  45870. BX4 X0*X3
  45871. EQ B2,B6,IBO15 IF END OF EST
  45872. PL X3,IBO3 IF NOT MASS STORAGE DEVICE
  45873. LX4 3
  45874. SA1 X4+DILL FETCH DRIVER WORD FROM MST
  45875. LX1 59-22
  45876. PL X1,IBO3 IF NOT BUFFERED DEVICE
  45877. MX0 -11
  45878. LX3 -12
  45879. IBO4 SA5 A5+B1
  45880. ZR X5,IBO2 IF END OF TABLE (NOT BUFFERED DEVICE)
  45881. BX6 X5-X3
  45882. BX6 -X0*X6
  45883. NZ X6,IBO4 IF NO DEVICE MATCH
  45884. BX6 -X0*X3
  45885. BX7 X5
  45886. SA6 IBOK DEVICE CODE
  45887. MX2 -6
  45888. LX1 22-59
  45889. SA7 IBOQ SAVE DRIVER NAME
  45890. BX6 -X2*X1 ALGORITHM INDEX
  45891. SX2 X6-AIAB
  45892. NG X2,IBO4.1 IF NOT DAS DEVICE
  45893. SX2 X6-AIAE
  45894. PL X2,IBO4.1 IF NOT DAS DEVICE
  45895. SA2 A1+STLL-DILL
  45896. PL X2,IBO4.1 IF FORMAT NOT PENDING
  45897. SX6 B0+
  45898. IBO4.1 SA6 IBOF SET DAS FORMAT PENDING FLAG
  45899. SA2 A1+DDLL-DILL
  45900. MX6 -3
  45901. BX7 X2
  45902. LX2 -48
  45903. BX6 -X6*X2 NUMBER OF UNITS - 1
  45904. SX6 X6+B1
  45905. LX3 12-24
  45906. SA7 IBOG UNIT LIST
  45907. LX2 -6
  45908. MX7 -3
  45909. BX7 -X7*X2
  45910. SA7 IBOR EQUIPMENT (CONTROLLER) NUMBER
  45911. BX1 -X0*X3
  45912. LX3 24-36
  45913. SA6 IBOH NUMBER OF UNITS
  45914. BX3 -X0*X3
  45915. LX1 12
  45916. SA2 A5+IBOS-IBOA SET READ AHEAD PARAMETERS
  45917. BX6 X1+X3
  45918. SA6 IBOM CHANNEL LIST
  45919. LX7 X2
  45920. SA2 A1+BDLL-DILL
  45921. MX6 -30
  45922. LX6 18
  45923. BX2 -X6*X2
  45924. BX7 X2+X7
  45925. SA1 A1+ *DILL* WORD OF CURRENT MST
  45926. SA7 A2
  45927. MX0 -12
  45928. LX1 -24
  45929. BX7 -X0*X1 PRIOR PARTITION EST ORDINAL
  45930. SA7 IBOT FLAG WHETHER *PUT* PREVIOUSLY ESTABLISHED
  45931. ZR X7,IBO5 IF NO PRIOR PARTITION
  45932. BX1 X0*X1 CLEAR ORDINAL FIELD
  45933. CX3 X7,EST CONVERT EST ORDINAL TO OFFSET
  45934. TA2 X3+EQDE,EST GET PRIOR PARTITION EST ENTRY
  45935. BX2 -X0*X2
  45936. LX2 3 PRIOR PARTITION MST ADDRESS
  45937. SA2 X2+DILL *DILL* WORD OF PRIOR PARTITION MST
  45938. LX2 -24
  45939. BX2 -X0*X2 *PUT* ORDINAL FROM PRIOR PARTITION MST
  45940. BX7 X1+X2 MERGE AND STORE *PUT* ORDINAL
  45941. LX7 24
  45942. SA7 A1+
  45943. IBO5 SA2 IBOH NUMBER OF UNITS
  45944. ZR X2,IBO2 IF NO MORE UNITS
  45945. SX6 X2-1
  45946. SA6 A2
  45947. SB3 B0 PRESET NO CHANNELS PROCESSED
  45948. SA2 IBOM SET CHANNELS FOR UNIT PROCESSING
  45949. SA1 IBOT
  45950. BX6 X2
  45951. SA6 IBOI
  45952. NZ X1,IBO8 IF *PUT*(S) ALREADY ESTABLISHED
  45953. SA1 IBOB NEXT AVAILABLE PUT ENTRY
  45954. SX6 X1+PUTL
  45955. SA6 A1+
  45956. SA2 IBOG UNIT LIST
  45957. MX6 -6
  45958. BX6 -X6*X2 NEXT UNIT
  45959. SA6 IBOL UNIT NUMBER
  45960. AX2 6
  45961. BX7 X2
  45962. SA7 A2
  45963. SX2 B2 EST ORDINAL
  45964. LX6 48
  45965. LX2 36
  45966. SA4 IBOR EQUIPMENT (CONTROLLER) NUMBER
  45967. BX6 X2+X6
  45968. LX4 54
  45969. BX6 X4+X6
  45970. MX0 -6
  45971. SA6 X1+UNCT UNIT CONTROL WORD OF *PUT*
  45972. SA2 IBOF
  45973. NZ X2,IBO5.1 IF NOT DAS DEVICE WITH FORMAT PENDING
  45974. MX7 1
  45975. LX7 16-59
  45976. SA7 X1+PILL SET *FORMAT* SPECIAL REQUEST FLAG
  45977. IBO5.1 SA1 IBOQ NUMBER OF PARTITIONS AND SECTORS/BUFFER
  45978. SA2 IBOC FWA OF NEXT AVAILABLE HAT ENTRY
  45979. MX3 6
  45980. LX1 42
  45981. SX4 HATLE
  45982. BX3 X3*X1 PHYSICAL SECTORS PER I/O BUFFER
  45983. BX1 -X0*X1 NUMBER OF PARTITIONS
  45984. IX6 X1*X4 *HAT* SPACE FOR ALL PARTITIONS OF DEVICE
  45985. IX7 X2+X6
  45986. LX2 24
  45987. SA7 A2 NEXT FWA OF NEXT AVAILABLE HAT
  45988. SX6 B1
  45989. BX2 X3+X2
  45990. IX6 X4-X6 HASHING MASK
  45991. LX6 42
  45992. BX6 X6+X2
  45993. SA6 A6+HSCT-UNCT HASH TABLE CONTROL
  45994. TX7 A6-HSCT,-PUT COMPUTE PUT ORDINAL
  45995. AX7 PUTLS
  45996. SA3 A3 EST ENTRY
  45997. MX6 -12
  45998. BX3 -X6*X3
  45999. LX3 3 MST ADDRESS
  46000. SA1 X3+DILL *PUT* ORDINAL OF FIRST UNIT IN CHAIN
  46001. LX1 -24
  46002. BX5 -X6*X1
  46003. NZ X5,IBO6 IF MORE UNITS IN CHAIN
  46004. BX7 X7+X1 SET *PUT* ORDINAL IN MST FOR FIRST UNIT
  46005. LX7 24
  46006. SA7 A1
  46007. EQ IBO8 PROCESS CHANNELS
  46008.  
  46009. IBO6 LX5 PUTLS
  46010. TA1 X5+HSCT,PUT CHECK NEXT *PUT* IN CHAIN
  46011. BX5 -X6*X1
  46012. NZ X5,IBO6 IF NOT END OF CHAIN
  46013. BX7 X7+X1 SET CURRENT *PUT* ORDINAL
  46014. SA7 A1
  46015.  
  46016. * PROCESS CHANNELS.
  46017.  
  46018. IBO8 SA2 IBOI
  46019. MX0 -6
  46020. BX1 -X0*X2 EXTRACT ONE CHANNEL
  46021. BX7 X2
  46022. AX7 12 REMOVE CHANNEL FROM LIST
  46023. SA7 IBOI
  46024. ZR B3,IBO9 IF NO CHANNELS PROCESSED
  46025. ZR X2,IBO5 IF NO CHANNEL PRESENT
  46026. IBO9 SA2 IBOD FWA OF NEXT AVAILABLE *CCT*
  46027. TX3 CCT FWA OF *CCT*
  46028. IBO10 BX6 X2-X3
  46029. ZR X6,IBO11 IF END OF CURRENT CCT-S
  46030. SA4 X3+CCNT
  46031. LX4 -36
  46032. BX7 -X0*X4
  46033. BX6 X1-X7
  46034. ZR X6,IBO12 IF CHANNEL MATCH
  46035. SX3 X3+CCTL ADVANCE *CCT* ADDRESS
  46036. TNO /PRESET/IBO10,IHPFMD IF NO 819 DEVICES
  46037. LX4 -6
  46038. BX7 -X0*X4
  46039. BX6 X1-X7
  46040. ZR X6,IBO12 IF CHANNEL MATCH
  46041. EQ IBO10 CONTINUE SEARCH
  46042.  
  46043. IBO11 BX7 X1 CHANNEL
  46044. LX7 36
  46045. SA7 X2+CCNT CREATE NEW *CCT* ENTRY
  46046. SX7 X2+CCTL ADVANCE CCT ADDRESS
  46047. SA7 A2
  46048. SA2 IBOQ DRIVER PP NAME(S)
  46049. SX7 40B
  46050. BX7 X7*X1
  46051. ZR X7,IBO11.1 IF NOT A CONCURRENT CHANNEL
  46052. LX2 18 SET FOR CONCURRENT PP DRIVER
  46053. IBO11.1 AX2 42 REMOVE ALL BUT PP NAME
  46054. LX2 42 (CODE ASSUMES VALID PP NAME)
  46055. BX7 X2+X1 MERGE PP NAME AND CHANNEL NUMBER
  46056. TX2 X3,-CCT
  46057. LX2 30-CCTLS *CCT* ORDINAL
  46058. BX7 X7+X2
  46059. SA7 X3+CUN1
  46060. IBO12 SB3 B3+B1 ADVANCE CHANNEL PROCESSED
  46061. TNO /PRESET/IBO14,IHPFMD IF NO 819 DEVICES
  46062. SA2 IBOL UNIT NUMBER
  46063. TX7 A6-HSCT,-PUT
  46064. AX7 PUTLS *PUT* ORDINAL
  46065. SX1 12 COMPUTE BYTE POSITION
  46066. IX1 X1*X2
  46067. SB4 X1
  46068. SB5 B4-4*12
  46069. NG B5,IBO13 IF UNITS 0 - 3
  46070. SB4 B5
  46071. SX3 X3+CUN2-CUN1
  46072. IBO13 SA1 X3+CUN1
  46073. LX7 B4 POSITION PUT ORDINAL
  46074. BX7 X7+X1
  46075. SA7 A1
  46076. IBO14 LE B3,B1,IBO8 IF BOTH CHANNELS NOT PROCESSED
  46077. EQ IBO5 PROCESS NEXT UNIT
  46078.  
  46079. * INITIALIZE CONTROL BUFFERS.
  46080.  
  46081. IBO15 SA0 IBOE READ IBDT
  46082. TX0 ETLT*100B+IBDT,ECLT
  46083. TX0 X0,TCNT
  46084. SX1 A0
  46085. LX1 30
  46086. BX0 X0+X1
  46087. RE MXMF
  46088. + SA1 A0-B1
  46089. SA2 MMFL
  46090. MX0 12
  46091. SB2 MXMF
  46092. IBO16 SA1 A1+B1 SEARCH FOR ID
  46093. BX3 X1-X2
  46094. BX3 X0*X3
  46095. ZR X3,IBO17 IF ID MATCH
  46096. SB2 B2-B1
  46097. NZ B2,IBO16 IF NOT END OF IBDT
  46098. EQ * HANG - ID NOT FOUND
  46099.  
  46100. IBO17 MX0 -12
  46101. LX1 -12
  46102. BX7 -X0*X1 FWA OF I/O BUFFERS
  46103. TLX7 9,TNSC
  46104. SB6 B1
  46105. SX3 PSLB
  46106. LX3 9
  46107. TB2 1,NIOB
  46108. SB3 IOLK+CBTL
  46109. IBO18 TA7 B3,CBT I/O BUFFER ADDRESS
  46110. SX6 B1
  46111. LX6 21
  46112. SA6 A7+HSLK-IOLK LIST INDEX
  46113. IX7 X7+X3 INCREMENT I/O BUFFER ADDRESS
  46114. SX0 B6-B1
  46115. SB6 B6+B1
  46116. SX6 B6
  46117. LX0 36
  46118. LX6 24
  46119. BX6 X6+X0
  46120. SA6 A6+LSLK-HSLK CONTROL BUFFER LINK(S)
  46121. SB3 B3+CBTL NEXT BUFFER
  46122. LT B6,B2,IBO18 IF MORE BUFFERS
  46123. AX6 36
  46124. LX6 36
  46125. SA6 A6 CLEAR LAST LINK ON LIST
  46126. SX7 B6-B1
  46127. SX2 B1
  46128. LX7 18
  46129. BX2 X7+X2
  46130. LX7 18
  46131. BX7 X2+X7
  46132. TA7 EMTB SET EMPTY LIST CONTROL WORD
  46133. SA0 B7 RESTORE (A0)
  46134.  
  46135. * PROCESS SYSTEM DEVICE(S).
  46136.  
  46137. MX0 -12 SET UP SYSTEM DEVICE TABLES
  46138. SB3 B0
  46139. SX7 NOPE INITIALIZE EST ORDINAL FOR SEARCH
  46140. IBO19 CX1 X7,EST CONVERT EST ORDINAL TO OFFSET
  46141. TA1 X1+EQDE,EST READ EST ENTRY
  46142. PL X1,IBO20 IF NOT MASS STORAGE DEVICE
  46143. BX2 X1
  46144. LX1 59-58
  46145. PL X1,IBO20 IF NOT SYSTEM DEVICE
  46146. SA7 /BUFIO/RDBA+B3 SET EST ORDINAL IN TABLE
  46147. BX6 -X0*X2
  46148. LX6 3
  46149. SX6 X6+DALL
  46150. SA6 /BUFIO/RDBB+B3
  46151. SB3 B3+1 ADVANCE INDEX
  46152. IBO20 SX7 X7+B1 ADVANCE EST ORDINAL
  46153. SA1 IBOP
  46154. IX1 X7-X1
  46155. NG X1,IBO19 IF NOT END OF MASS STORAGE DEVICES
  46156. SX7 B0+
  46157. SA7 /BUFIO/RDBB+B3 TERMINATE TABLE
  46158. GT B3,B1,IBO IF MORE THAN ONE SYSTEM DEVICE
  46159. SA1 IBOO
  46160. BX6 X1
  46161. SA6 /BUFIO/RDB14
  46162. EQ IBO RETURN
  46163. TBLM SPACE 4,10
  46164. ** TBLM - GENERATE TABLE OF BUFFERED I/O PARAMETERS.
  46165.  
  46166.  
  46167. PURGMAC TBLM
  46168. TBLM MACRO EQ
  46169. .A IFGE AI_EQ,AIBB
  46170. .B IFLT AI_EQ,AIBD
  46171. VFD 18/3R"NPP_EQ",18/3R"CPP_EQ",6/PNUN_EQ,6/PSBF_EQ,12/2R_EQ
  46172. IBOS RMT
  46173. VFD 42/0,6/BCT_EQ,6/RAT_EQ,6/RBT_EQ
  46174. IBOS RMT
  46175. .B ENDIF
  46176. .A ENDIF
  46177. ENDM
  46178.  
  46179. ** BUFFERED I/O DEVICE SUPPORT TABLE *IBOA*.
  46180. *
  46181. *T,IBOA 18/ NPP, 18/ CPP, 6/ PUN, 6/ SS, 12/ DM
  46182. *
  46183. *
  46184. * NPP NIO PP DRIVER NAME.
  46185. * CPP CIO PP DRIVER NAME.
  46186. * PUN PARTITIONS PER PHYSICAL DEVICE.
  46187. * SS PHYSICAL SECTOR SIZE RELATIVE TO I/O BUFFER SIZE.
  46188. * DM DEVICE MNEMONIC.
  46189.  
  46190. IBOA BSS 0
  46191.  
  46192. LIST G
  46193. TBL "MSEQ"
  46194. CON 0
  46195.  
  46196. ** BUFFERED I/O DEVICE SUPPORT TABLE *IBOS*.
  46197. *
  46198. *T,IBOS 42/ , 6/ BC, 6/ RT, 6/ RB
  46199. *
  46200. *
  46201. * BC DEFAULT BUFFER COUNT.
  46202. * RT READ-AHEAD THRESHOLD (NTH BUFFER IN).
  46203. * RB DEFAULT READ BUFFER THRESHOLD.
  46204. *
  46205. * NOTE - TABLE *IBOS* PARALLELS TABLE *IBOA*.
  46206.  
  46207. IBOS BSS 0
  46208.  
  46209. IBOS HERE
  46210. LIST *
  46211. PURGMAC TBLM
  46212.  
  46213. IBOB TVFD 60/PUTL,PUT CURRENT LWA+1 OF *PUT*
  46214. IBOC TVFD 60/0,HAT CURRENT LWA+1 OF *HAT*
  46215. IBOD TVFD 60/0,CCT CURRENT LWA+1 OF *CCT*
  46216. IBOE BSS MXMF *IBDT* BUFFER
  46217. IBOF CON 1 ZERO IF 583X DEVICE WITH FORMAT PENDING
  46218. IBOG CON 0 UNIT LIST
  46219. IBOH CON 0 NUMBER OF UNITS
  46220. IBOI CON 0 CHANNELS (DURING UNIT PROCESSING)
  46221. IBOK CON 0 DEVICE TYPE (CODE)
  46222. IBOL CON 0 UNIT NUMBER
  46223. IBOM CON 0 CHANNELS
  46224. IBOO SB0 0 NO OPERATION(S)
  46225. SB0 0
  46226. IBOP CON 0 LAST MASS STORAGE ORDINAL + 1 (*SSP*)
  46227. IBOQ CON 0 SAVE AREA FOR BUFFERED I/O DRIVER NAME
  46228. IBOR CON 0 EQUIPMENT (CONTROLLER) NUMBER
  46229. IBOT CON 0 ZERO IF *PUT* NOT ALREADY ESTABLISHED
  46230. RBS SPACE 4,10
  46231. ** RBS - RECOVER BUFFER STATUS TABLES.
  46232. *
  46233. * EXIT READ ONLY ACCESS AND *MTE* REQUEST FLAGS CLEARED.
  46234. *
  46235. * USES X - 0, 1, 2, 3, 6, 7.
  46236. * A - 1, 3, 7.
  46237. * B - 2, 3, 4.
  46238.  
  46239.  
  46240. RBS PS ENTRY/EXIT
  46241. SA1 BIOMMF
  46242. ZR X1,RBS IF NO SHARED DEVICES PRESENT
  46243. SA1 IBOP
  46244. SB2 NOPE-1
  46245. SB3 X1+ LAST MASS STORAGE ORDINAL + 1
  46246. RBS1 SB2 B2+B1
  46247. EQ B2,B3,RBS IF ALL MASS STORAGE EQUIPMENTS CHECKED
  46248. SX1 B2
  46249. CX2 X1,EST
  46250. TA1 X2+EQDE,EST
  46251. MX0 -12
  46252. SX7 5040B
  46253. BX2 -X0*X1
  46254. LX1 12
  46255. BX1 X7*X1
  46256. IX1 X1-X7
  46257. NZ X1,RBS1 IF NOT SHARED BUFFERED MASS STORAGE DEVICE
  46258. LX2 3 SET MST ADDRESS
  46259. SA1 X2+BDLL GET BST POINTER
  46260. LX1 -24
  46261. SA3 RBSA GET WRITE ACCESS MASK
  46262. SA1 X1-1
  46263. SB4 BSTL
  46264. RBS2 SA1 A1+B1 GET BST WORD
  46265. SB4 B4-B1
  46266. ZR B4,RBS1 IF END OF BST
  46267. BX6 X3*X1
  46268. BX7 X3*X1 PRESERVE WRITE ACCESS
  46269. LX6 -1
  46270. BX7 X7+X6 SET READ ACCESS WITH WRITE ACCESS
  46271. SA7 A1 UPDATE BST
  46272. EQ RBS2 PROCESS NEXT BST WORD
  46273.  
  46274.  
  46275. RBSA DATA 44444444444444440000B
  46276. RBT SPACE 4,10
  46277. ** RBT - RECOVER BUFFERED I/O TABLES.
  46278. *
  46279. * EXIT (EFRL) = 2000B IF ERROR FOUND DURING RECOVERY.
  46280. *
  46281. * CALLS RBS, RCB, VUQ, VWL.
  46282.  
  46283.  
  46284. RBT9 SA1 EFRL SET ABORT FLAG
  46285. SX6 2000B
  46286. BX6 X6+X1
  46287. SA6 A1
  46288.  
  46289. RBT PS ENTRY/EXIT
  46290. TA1 IBSP,BDT INITIALIZE TABLE ADDRESS
  46291. RBT1 SA2 A1+B1 READ NEXT ENTRY
  46292. MX3 6
  46293. LX3 18-54
  46294. BX6 -X3*X1 CLEAR INTERLOCKS
  46295. SA6 A1
  46296. MX7 12
  46297. BX6 X7*X1 NUMBER OF ENTRIES IN CURRENT TABLE (NE)
  46298. MX7 -6
  46299. LX1 18
  46300. LX6 12
  46301. TB3 A1-PUTP,-BDT
  46302. ZR B3,RBT2 IF *PUT* POINTER
  46303. SB3 B3+PUTP-FTTP
  46304. ZR B3,RBT2 IF *FTT* POINTER
  46305. SB3 B3+FTTP-CBTP
  46306. RBT2 NZ B3,RBT3 IF NOT *CBT* POINTER
  46307. SX6 X6+1
  46308. RBT3 BX5 -X7*X1 LENGTH OF ENTRY (LE)
  46309. LX1 18
  46310. MX7 -18
  46311. IX3 X6*X5 NE*LE
  46312. BX4 -X7*X1 TABLE LENGTH (LT)
  46313. IX3 X4-X3
  46314. NZ X3,RBT9 IF (NE*LE) .NE. (LT)
  46315. TB3 A1-CBTP,-BDT
  46316. ZR B3,RBT4 IF LAST ENTRY IN TABLE
  46317. LX1 24
  46318. BX3 -X7*X2 FWA OF NEXT TABLE
  46319. BX5 -X7*X1 FWA OF CURRENT TABLE
  46320. IX6 X5+X4 FWA + LT
  46321. BX7 X6-X3
  46322. NZ X7,RBT9 IF (FWA+LT) .NE. (NEXT FWA)
  46323. SA1 A2
  46324. EQ RBT1 LOOP
  46325.  
  46326. RBT4 RJ VUQ VALIDATE UNIT I/O QUEUES
  46327. RJ VWL VALIDATE WRITE LIST
  46328. RJ RCB RECOVER CBT
  46329. NZ X6,RBT9 IF ERROR FOUND
  46330. RJ RBS RECOVER BUFFER STATUS TABLES
  46331.  
  46332. * CLEAN UP CHANNEL CONTROL TABLE(S).
  46333.  
  46334. TA1 CCTP,BDT GET TABLE DESCRIPTOR
  46335. LX1 -24
  46336. SB2 X1 LENGTH OF TABLE
  46337. SB3 B0 INITIALIZE INDEX
  46338. MX0 -48
  46339. SX6 B0
  46340. RBT5 TA6 B3+CREQ,CCT CLEAR ENTRY
  46341. TA1 B3+CCNT,CCT
  46342. BX7 -X0*X1
  46343. SA7 A1
  46344. SB3 B3+CCTL INCREMENT INDEX
  46345. LT B3,B2,RBT5 IF NOT END OF TABLE
  46346.  
  46347. * CLEAN UP PHYSICAL UNIT AND FUNCTION TIMEOUT TABLES.
  46348.  
  46349. TA1 PUTP,BDT GET TABLE DESCRIPTOR
  46350. LX1 -24
  46351. SB2 X1 LENGTH OF TABLE
  46352. SB3 PUTL INITIALIZE INDEX
  46353. MX0 -54
  46354. TNO RBT5.1,IH819 CLEAR READ RECOVERY INDEX FOR 819-S
  46355. MX0 -57 PRESERVE EQUIPMENT NUMBER FOR 9853/*DAS*
  46356. RBT5.1 MX2 27
  46357. MX3 18
  46358. LX2 24+27
  46359. LX3 12+0
  46360. BX2 X2+X3
  46361. BX7 X7-X7
  46362. RBT6 TA1 B3+UNCT,PUT CLEAR INTERLOCK AND FLAGS
  46363. SX4 B3
  46364. BX6 -X0*X1
  46365. TA3 B3+HSCT,PUT
  46366. AX4 PUTLS-FTTLS
  46367. SA6 A1
  46368. TA7 X4,FTT CLEAR FTT ENTRY
  46369. BX6 X2*X3
  46370. SA6 A3
  46371. SB3 B3+PUTL INCREMENT INDEX
  46372. LT B3,B2,RBT6 IF NOT END OF TABLE
  46373.  
  46374. * CLEAN UP PLT.
  46375.  
  46376. SB2 PLTL LENGTH OF TABLE
  46377. SB3 B0+ INITIALIZE INDEX
  46378. SX7 B0+
  46379. SX6 B0+
  46380. RBT8 TA7 B3,PLT CLEAR TABLE
  46381. TA6 B3+1,PLT
  46382. SB3 B3+2
  46383. LT B3,B2,RBT8 IF NOT END OF TABLE
  46384. EQ RBT RETURN
  46385. RCB SPACE 4,15
  46386. ** RCB - RECOVER CBT.
  46387. *
  46388. * EXIT (X6) = 0 IF NO ERROR.
  46389. * (X6) .NE. 0 IF ERROR DETECTED.
  46390. * BUFFER INTERLOCKS CLEARED.
  46391. * I/0 ACTIVITY FLAGS AND UNIT QUEUE LINKAGE CLEARED.
  46392. * READ BUFFERS DROPPED AND LINKED TO EMPTY LIST.
  46393. * WRITE BUFFERS LINKED TO WRITE LIST.
  46394. *
  46395. * USES X - ALL.
  46396. * A - 0, 1, 2, 3, 4, 6, 7.
  46397. * B - 2, 3, 6, 7.
  46398. *
  46399. * CALLS /BUFIO/DCH, /BUFIO/LCC.
  46400.  
  46401.  
  46402. RCB9 SX6 1 SET ERROR STATUS
  46403.  
  46404. RCB PS ENTRY/EXIT
  46405.  
  46406. * CLEAN UP BUFFER MANAGER LIST POINTERS.
  46407.  
  46408. SX6 B0+
  46409. TA6 EMTB CLEAR EMPTY LIST POINTER
  46410. TA6 DWTB CLEAR DATA WRITTEN LIST POINTER
  46411. TA6 DRDB CLEAR READ LIST POINTER
  46412. TA6 WRTB CLEAR WRITE LIST POINTER
  46413.  
  46414. * DETERMINE BASE ADDRESS OF DATA BUFFERS.
  46415.  
  46416. SB7 A0+ SAVE (A0)
  46417. SA0 IBOE CM BUFFER
  46418. TX0 ETLT*100B+IBDT,ECLT
  46419. TX0 X0,TCNT *IBDT* ADDRESS
  46420. SX1 A0
  46421. LX1 30
  46422. BX0 X0+X1
  46423. RE MXMF READ *IBDT*
  46424. EQ RCB9 RETURN ERROR ON HALF-EXIT
  46425.  
  46426. SA3 A0-B1
  46427. SA4 MMFL GET MACHINE ID
  46428. MX0 12
  46429. SB2 MXMF LENGTH OF *IBDT*
  46430. SA0 B7 RESTORE (A0)
  46431. RCB1 SA3 A3+1 NEXT ENTRY
  46432. BX5 X3-X4 CHECK MACHINE ID
  46433. BX5 X0*X5
  46434. ZR X5,RCB2 IF THIS MACHINE
  46435. SB2 B2-1
  46436. NZ B2,RCB1 IF NOT END OF TABLE
  46437. EQ RCB9 RETURN ERROR
  46438.  
  46439. RCB2 MX0 -12
  46440. LX3 -12
  46441. BX7 -X0*X3
  46442. TLX7 9,TNSC FWA OF I/O BUFFERS
  46443. SB3 RCBA SET REGISTER SAVE BUFFER ADDRESS
  46444. SX1 LSLB*100B
  46445. SX0 B0+ INITIALIZE BUFFER ORDINAL
  46446. IX7 X7-X1 INITIALIZE BUFER ADDRESS
  46447.  
  46448. * CHECK NEXT BUFFER.
  46449.  
  46450. RCB3 SX1 LSLB*100B
  46451. SX0 X0+B1 ADVANCE CBT ORDINAL
  46452. IX7 X7+X1 ADVANCE DATA BUFFER ADDRESS
  46453. BX5 X0
  46454. TX6 X0-1,-NIOB
  46455. LX5 CBTLS SET CBT OFFSET
  46456. ZR X6,RCB IF ALL BUFFERS PROCESSED
  46457. TA1 X5+IOLK,CBT
  46458. TA2 X5+HSLK,CBT
  46459. SX6 B0+
  46460. TA6 X5+LSLK,CBT CLEAR LIST LINKAGE AND FLAGS
  46461. MX6 -48
  46462. LX1 59-57
  46463. BX6 -X6*X2 CLEAR *HSLK* FLAGS
  46464. SA6 A2
  46465. PL X1,RCB5 IF NO WRITE DATA IN BUFFER
  46466.  
  46467. * PROCESS WRITE BUFFER.
  46468.  
  46469. LX1 59-54-59+57
  46470. NG X1,RCB4 IF RECOVERED FLAG SET
  46471. SA2 REML SET ERROR FLAG
  46472. SX6 WLNL *NON-LINKED WRITE BUFFER.*
  46473. BX6 X6+X2
  46474. SA6 A2
  46475. RCB4 LX1 54-54-59+54 RESTORE *IOLK*
  46476. MX3 -24
  46477. BX3 -X3*X1 DATA BUFFER ADDRESS
  46478. BX3 X3-X7
  46479. NZ X3,RCB9 IF DATA BUFFER ADDRESS INCORRECT
  46480. SX6 B1
  46481. LX6 57-0
  46482. BX6 X6+X7 SET WRITE FLAG AND BUFFER ADDRESS
  46483. SA6 A1 UPDATE *IOLK*
  46484. TX1 WRTB SET WRITE LIST
  46485. EQ RCB8 LINK BUFFER TO WRITE LIST
  46486.  
  46487. * PROCESS READ BUFFER.
  46488.  
  46489. RCB5 LX1 59-54-59+57
  46490. PL X1,RCB6 IF RECOVERED FLAG NOT SET
  46491. SA2 REML SET RECOVERY ERROR
  46492. SX6 WLRD *READ DATA ON WRITE LIST.*
  46493. BX6 X2+X6
  46494. SA6 A2
  46495. RCB6 SX6 B0
  46496. TA6 X5+PAD1,CBT CLEAN UP BUFFER
  46497. SA6 A6+B1
  46498. ERRNZ PAD2-PAD1-1
  46499. SA6 A6+B1
  46500. ERRNZ PAD3-PAD2-1
  46501. SA6 A6+B1
  46502. ERRNZ PAD4-PAD3-1
  46503. TA7 X5+IOLK,CBT SET BUFFER ADDRESS
  46504. SB6 RCB7 SET *DCH* RETURN ADDRESS
  46505. EQ /BUFIO/DCH DELINK BUFFER FROM HASH LIST
  46506.  
  46507. RCB7 TX1 EMTB SET EMPTY LIST
  46508.  
  46509. * LINK BUFFER TO WRITE OR EMPTY LIST.
  46510.  
  46511. RCB8 SB6 RCB3 SET *LCC* RETURN ADDRESS
  46512. EQ /BUFIO/LCC SET LIST LINKAGE
  46513.  
  46514.  
  46515. RCBA BSS 2 REGISTER SAVE BUFFER
  46516. VUQ SPACE 4,10
  46517. ** VUQ - VALIDATE UNIT I/O QUEUE(S).
  46518.  
  46519.  
  46520. VUQ PS ENTRY/EXIT
  46521. SA1 REML CLEAR PREVIOUS ERRORS
  46522. MX7 48
  46523. BX7 X7*X1
  46524. SA7 A1
  46525.  
  46526. * SCAN PUT(S), DELETING READ REQUEST(S) FROM QUEUE(S).
  46527.  
  46528. TA1 PUTP,BDT TABLE DESCRIPTOR
  46529. LX1 -24
  46530. SB2 X1 LENGTH OF TABLE(S)
  46531. SB6 PUTL INITIALIZE INDEX
  46532. MX6 -12
  46533. VUQ1 TA2 B6+UNCT,PUT READ QUEUE CONTROL
  46534. BX7 X7-X7
  46535. SA7 A2+PILL-UNCT CLEAR PREVIOUS ERRORS, INTERLOCK, FLAGS
  46536. MX7 24 CLEAR I/O QUEUE
  46537. BX7 X7*X2
  46538. SA7 A2
  46539. LX2 -24
  46540. BX3 -X6*X2
  46541. LX2 24
  46542. BX0 -X6*X2 FIRST
  46543. LX0 CBTLS
  46544. NZ X3,VUQ1.1 IF QUEUE SIZE .NE. 0
  46545.  
  46546. * QUEUE SIZE IS ZERO - VERIFY IT IS EMPTY.
  46547.  
  46548. MX3 -24
  46549. BX2 -X3*X2
  46550. ZR X2,VUQ6 IF FIRST AND CURRENT .EQ. 0
  46551. SA3 A2+PILL-UNCT SET ERROR FLAG
  46552. SX7 IOQS *I/O QUEUE SIZE.*
  46553. LX7 48
  46554. BX7 X7+X3
  46555. SA7 A3
  46556. VUQ1.1 ZR X0,VUQ IF FIRST .EQ. 0
  46557. TA3 X0+IOLK,CBT
  46558. LX3 -36
  46559. BX2 -X6*X3
  46560. NZ X2,VUQ8 IF BACKWARD LINK OF FIRST BUFFER .NE. 0
  46561. VUQ2 TA3 X0+IOLK,CBT READ BUFFER
  46562. LX3 -24
  46563. BX7 X0
  46564. BX0 -X6*X3 NEXT BUFFER
  46565. ZR X0,VUQ3 IF END OF QUEUE
  46566. AX7 CBTLS
  46567. LX0 CBTLS
  46568. TA4 X0+IOLK,CBT CHECK BACKWARD LINK OF NEXT BUFFER
  46569. LX4 -36
  46570. BX4 -X6*X4
  46571. BX2 X4-X7
  46572. NZ X2,VUQ8 IF BACKWARD LINK NOT CORRECT
  46573. VUQ3 LX3 59-57+24
  46574. PL X3,VUQ5 IF NOT WRITE DATA IN BUFFER
  46575.  
  46576. * WRITE DATA FOUND IN BUFFER.
  46577.  
  46578. SA4 A3+HSLK-IOLK GET *PUT* ORDINAL
  46579. SX5 B6
  46580. BX4 -X6*X4
  46581. AX5 PUTLS
  46582. BX4 X5-X4
  46583. NZ X4,VUQ10 IF PUT ORDINAL INCORRECT
  46584. LX3 59-54-59+57
  46585. NG X3,VUQ8 IF RECOVERED FLAG ALREADY SET
  46586. MX7 1
  46587. BX7 X3+X7 SET RECOVERED FLAG
  46588. LX7 54-59
  46589. PL X7,VUQ8 IF I/O INTERLOCK NOT SET
  46590. SA7 A3
  46591. VUQ5 MX6 -12
  46592. NZ X0,VUQ2 IF NOT END OF QUEUE
  46593. VUQ6 SB6 B6+PUTL INCREMENT *PUT* INDEX
  46594. LT B6,B2,VUQ1 IF NOT END OF *PUT*-S
  46595. EQ VUQ RETURN
  46596.  
  46597.  
  46598. VUQ8 SX7 IOQL * I/O QUEUE LINKAGE.*
  46599. VUQ9 LX7 48
  46600. SA3 A2+PILL-UNCT SET ERROR FLAG
  46601. BX7 X7+X3
  46602. SA7 A3
  46603. EQ VUQ6 CHECK NEXT *PUT*
  46604.  
  46605. VUQ10 SX7 IOQP * I/O QUEUE *PUT* ORDINAL.*
  46606. EQ VUQ9 CONTINUE
  46607. VWL SPACE 4,10
  46608. ** VWL - VALIDATE WRITE LIST.
  46609.  
  46610.  
  46611. VWL7 SA1 REML SET ERROR FLAG
  46612. BX7 X7+X1
  46613. SA7 A1
  46614.  
  46615. VWL PS ENTRY/EXIT
  46616. TA2 WRTB WRITE LIST POINTER(S)
  46617. LX2 -36
  46618. SB2 X2 BUFFER COUNT
  46619. ZR B2,VWL IF NO WRITE BUFFERS
  46620. TA1 WRTB
  46621. SX3 X1 FIRST
  46622. SB4 B0 PRESET BUFFER COUNT
  46623. SX5 B0 PRESET BACKWARD LINK
  46624. MX0 -12
  46625. ZR X3,VWL3 IF FIRST BUFFER .EQ. 0
  46626. VWL1 LX3 CBTLS
  46627. TA3 X3+LSLK,CBT READ BUFFER
  46628. LX3 -36
  46629. BX4 -X0*X3
  46630. BX5 X5-X4
  46631. NZ X5,VWL3 IF BACKWARD LINK INCORRECT
  46632. SA5 A3+IOLK-LSLK
  46633. LX5 59-54
  46634. NG X5,VWL3 IF RECOVERED FLAG ALREADY SET
  46635. MX7 1
  46636. BX7 X5+X7 SET RECOVERED FLAG
  46637. LX7 59-57-59+54
  46638. PL X7,VWL4 IF NOT WRITE DATA
  46639. LX7 57-59
  46640. NG X7,VWL5 IF I/O INTERLOCK SET
  46641. SA7 A5
  46642. SB4 B4+B1 COUNT BUFFER
  46643. LX3 12
  46644. BX3 -X0*X3
  46645. TX5 A5-IOLK,-CBT
  46646. AX5 CBTLS
  46647. NZ X3,VWL1 IF FORWARD LINK .NE. 0
  46648. NE B4,B2,VWL6 IF COUNT NOT CORRECT
  46649. LX1 -18
  46650. SX1 X1
  46651. BX5 X1-X5
  46652. ZR X5,VWL IF LAST POINTER CORRECT
  46653.  
  46654. VWL3 SX7 WLLE * WRITE LIST LINKAGE.*
  46655. EQ VWL7 CONTINUE
  46656.  
  46657. VWL4 SX7 WLRD * READ DATA ON WRITE LIST.*
  46658. EQ VWL7 CONTINUE
  46659.  
  46660. VWL5 SX7 WLIB * INTERLOCKED BUFFER ON WRITE LIST.*
  46661. EQ VWL7 CONTINUE
  46662.  
  46663. VWL6 SX7 WLBC * WRITE LIST BUFFER COUNT.*
  46664. EQ VWL7 CONTINUE
  46665.  
  46666. CIR SPACE 4
  46667. ** CIR - CLEAR INTERLOCKS.
  46668.  
  46669.  
  46670. CIRX SA0 B3+ RESTORE (A0)
  46671. CIR PS ENTRY/EXIT
  46672. SA1 CIRA CHECK RECOVERY MODE
  46673. SB2 1000B INTERLOCK RETRY COUNT
  46674. SX1 X1-3
  46675. NZ X1,CIR IF NOT LEVEL THREE RECOVERY
  46676. SB3 A0+ SAVE (A0)
  46677.  
  46678. * CLEAR FLAG REGISTER BITS IF MMF PRESENT.
  46679.  
  46680. TX5 MMK
  46681. SB4 CIRI
  46682. CIR1 SB6 CIR2
  46683. TJP (/ECS/SFR,MMF,/PRESET/CIR11)
  46684.  
  46685. CIR2 SA0 /MMF/MBUF
  46686. TX0 ETLT*100B+FRET,ECLT
  46687. TX0 X0,TCNT
  46688. SX2 A0+
  46689. LX2 30
  46690. BX0 X0+X2
  46691. RE 18
  46692. EQ CIR9 IF PARITY ERROR
  46693. SB6 CIR5
  46694. TSX0 (402B,ESM,6B)
  46695. LX0 21
  46696. BX0 X0+X5
  46697. ZR X7,CIR4 IF INTERLOCK OBTAINED
  46698. SA2 A0+B4
  46699. LX2 6
  46700. SX2 X2
  46701. AX2 6
  46702. TX2 X2,-MIN
  46703. NZ X2,CIR4 IF INTERLOCK HELD BY THIS MACHINE
  46704. SB2 B2-B1 DECREMENT RETRY COUNT
  46705. PL B2,CIR1 IF NOT END OF RETRY COUNT
  46706. JP CIR11
  46707.  
  46708. CIR3 SX2 X5+.TRTI CLEAR TRTI INTERLOCK
  46709. TSX0 (403B,ESM,7B)
  46710. LX0 21
  46711. BX0 X0+X2
  46712. CIR4 RE /ECS/FRWC
  46713. EQ CIR3
  46714. SB4 18
  46715.  
  46716. CIR5 SB4 B4-B1
  46717. SA0 /MMF/MBUF
  46718. SA3 A0+B4
  46719. NG B4,CIR9 IF END OF FLAG BITS
  46720. AX3 12
  46721. BX3 X5*X3
  46722. NZ X3,/ECS/CFR IF INTERLOCK HELD BY THIS MACHINE
  46723. EQ CIR5
  46724.  
  46725. * CLEAR DEVICE INTERLOCKS FOR SHARED DEVICES IN ECS.
  46726.  
  46727. CIR9 TX5 MIN SET MACHINE INDEX
  46728. MX7 -6
  46729. SB7 B0-B1 SET START OF EST SEARCH
  46730. SA0 /MMF/MBUF
  46731. SB5 CIR10 *SSD* RETURN
  46732. JP /PROGRAM/SSD SEARCH FOR SHARED DEVICE
  46733.  
  46734. CIR10 NG B7,CIR11 IF END OF SHARED DEVICES
  46735. SX1 A0+
  46736. SX0 X4+SDGL
  46737. LX1 30
  46738. BX0 X0+X1
  46739. RE 1 READ DEVICE INTERLOCK
  46740. JP /PROGRAM/SSD
  46741. SA1 A0
  46742. BX2 -X7*X1
  46743. AX2 B1
  46744. BX2 X5-X2
  46745. NZ X2,/PROGRAM/SSD IF NOT INTERLOCKED BY THIS MACHINE
  46746. BX6 X7*X1
  46747. SA6 A1
  46748. WE 1 WRITE CLEARED INTERLOCK
  46749. JP /PROGRAM/SSD
  46750.  
  46751. CIR11 SA2 ESTP SET LAST MASS STORAGE ORDINAL + 1
  46752. MX4 -12
  46753. AX2 12
  46754. BX2 -X4*X2
  46755. SB7 X2+
  46756. CIR12 ZR B7,CIR13 IF END OF DEVICES
  46757. SX2 B7-B1
  46758. CX1 X2,EST CONVERT EST ORDINAL TO OFFSET
  46759. TA1 X1+EQDE,EST READ EST ENTRY
  46760. SB7 B7-B1
  46761. BX2 -X4*X1
  46762. PL X1,CIR12 IF NOT MASS STORAGE
  46763. LX2 3
  46764. MX6 12
  46765. SA1 X2+DULL CLEAR INTERLOCKS
  46766. LX6 -12
  46767. BX6 -X6*X1
  46768. SA6 A1
  46769. BX6 X6-X1
  46770. SA1 X2+TDGL
  46771. IX6 X1-X6
  46772. SA6 A1
  46773. EQ CIR12
  46774.  
  46775. * CLEAR INTERLOCKS AND EXIT.
  46776.  
  46777. CIR13 NG B2,CIRX IF NO INTERLOCK TO CLEAR
  46778. SB6 CIRX
  46779. SB4 CIRI
  46780. TJP (/ECS/CFR,MMF,/PRESET/CIRX) CLEAR INTERLOCK IF MMF
  46781.  
  46782. CIRA CON 0 RECOVERY MODE
  46783. CLE SPACE 4,10
  46784. ** CLE - CLEAR ECS.
  46785. *
  46786. * FOR UEM AND ESM, WRITE MEMORY WITH ALL ZEROS. FOR ECS AND
  46787. * LCME, WRITE MEMORY WITH ALL ONES AND REWRITE WITH ALL ZEROS.
  46788. *
  46789. * EXIT (A0) RESTORED.
  46790. * (X0) RESTORED.
  46791. *
  46792. * USES A - 0, 1, 2, 4, 6, 7.
  46793. * B - 2, 4, 5, 6, 7.
  46794. * X - ALL.
  46795.  
  46796.  
  46797. CLE15 SA1 CCMB
  46798. NZ X1,CLE IF NOT LARGE MEMORY 990
  46799. SA0 CLEE
  46800. LX2 X0 SAVE (X0)
  46801. BX6 X6-X6
  46802. SX0 A0 SET BUFFER ADDRESS
  46803. SB6 377B
  46804. LX0 30
  46805. CLE16 SA6 A0+B6 CLEAR BUFFER
  46806. SB6 B6-B1
  46807. PL B6,CLE16 IF MORE TO CLEAR
  46808. WE 400B
  46809. + SA0 B2 RESTORE REGISTERS
  46810. BX0 X2
  46811. SA7 CLEA SET *CLE* RAN INDICATOR
  46812.  
  46813. CLE PS ENTRY/EXIT
  46814. SA1 CLEA
  46815. NZ X1,CLE IF *CLE* HAS BEEN RUN
  46816. SA1 EMS CHECK FOR FULL INITIALIZE PENDING
  46817. MX7 -3
  46818. SB2 A0
  46819. ZR X1,CLE15 IF NO XM EQUIPMENT
  46820. SA1 X1+DILL
  46821. AX1 18 EXTRACT XM TYPE
  46822. BX7 -X7*X1
  46823. SA0 CLEE
  46824. BX6 X0 SAVE (X0)
  46825. SX7 X7-5
  46826. SA6 A0-B1
  46827. NZ X7,CLE1 IF NOT ESM
  46828. SA2 ESM
  46829. SA4 CLEB
  46830. LX2 3+21 FUNCTION TO MATCH *POWER ON* STATUS
  46831. BX0 X4+X2
  46832. RE /ECS/FRWC
  46833. CLE1 SA1 A1+STLL-DILL
  46834. SX7 X7+1
  46835. AX7 60 = 0 FOR ESM/UEM, -0 FOR ECS/LCME
  46836. LX1 59-LIAL
  46837. PL X1,CLE9 IF FULL INITIALIZE NOT SELECTED
  46838. SA2 MECNF
  46839. SX4 400B EXTENDED MEMORY INCREMENT
  46840. LX2 1
  46841. SB4 X2 NUMBER OF 400 WORD BLOCKS TO TEST
  46842. SA1 CLEC
  46843. SB5 B0
  46844. BX6 X1 SET MESSAGE FOR DISPLAY
  46845. SA6 DSCP*CPAS+MS1W
  46846. SA1 A1+1
  46847. SA2 A1+1
  46848. BX6 X1
  46849. MX3 -3
  46850. SA6 A6+B1
  46851. BX6 X2
  46852. SA1 A2+B1
  46853. SA6 A6+B1
  46854. BX6 X1
  46855. SA6 A6+B1
  46856. CLE2 SX0 A0 SET ADDRESSES FOR TRANSFER
  46857. SB6 377B
  46858. LX0 30
  46859. CLE3 SA7 A0+B6 STORE TEST PATTERN IN BUFFER
  46860. SB6 B6-B1
  46861. PL B6,CLE3 IF NOT END OF BUFFER
  46862. CLE4 SX1 B5
  46863. BX6 X2
  46864. LX1 2 EXTENDED MEMORY ADDRESS / 100B
  46865. SB7 B0
  46866. CLE5 BX5 -X3*X1 EXTRACT NEXT DIGIT
  46867. AX1 3
  46868. SX5 X5+1R0-1R
  46869. LX5 B7 CONVERT NUMBER FOR MESSAGE
  46870. SB7 B7+6
  46871. IX6 X6+X5
  46872. NZ X1,CLE5 IF MORE DIGITS
  46873. SA6 DSCP*CPAS+MS1W+2
  46874. WE 400B
  46875. - EQ * (HANG ON HALF-EXIT)
  46876. + SB5 B5+B1 INCREMENT BLOCK COUNT
  46877. IX0 X0+X4
  46878. NE B5,B4,CLE4 IF NOT END OF EXTENDED MEMORY
  46879. CLE6 SX1 B5-B1
  46880. BX6 X2
  46881. LX1 2 EXTENDED MEMORY ADDRESS / 100B
  46882. SB7 B0
  46883. BX7 -X7
  46884. SA7 CLEE INSURE COMPARE ERROR IF NO TRANSFER
  46885. BX7 -X7
  46886. CLE7 BX5 -X3*X1 EXTRACT NEXT DIGIT
  46887. AX1 3
  46888. SX5 X5+1R0-1R
  46889. LX5 B7 CONVERT NUMBER FOR MESSAGE
  46890. SB7 B7+6
  46891. IX6 X6+X5
  46892. NZ X1,CLE7 IF MORE DIGITS
  46893. SB6 377B
  46894. SA6 DSCP*CPAS+MS1W+2
  46895. IX0 X0-X4 DECREMENT EXTENDED MEMORY ADDRESS
  46896. SB5 B5-B1
  46897. RE 400B FILL BUFFER
  46898. - EQ * (HANG ON HALF-EXIT)
  46899. CLE8 SA1 A0+B6
  46900. SB6 B6-1
  46901. BX1 X1-X7
  46902. + NG X1,* IF COMPARE ERROR
  46903. - NZ X1,* IF COMPARE ERROR
  46904. PL B6,CLE8 IF NOT END OF BUFFER
  46905. NZ B5,CLE6 IF NOT END OF EXTENDED MEMORY
  46906. BX7 -X7
  46907. SX6 B0
  46908. PL X7,CLE2 IF BOTH PATTERNS NOT USED
  46909. SA6 DSCP*CPAS+MS1W
  46910. EQ CLE10 PROCESS *IBDT*
  46911.  
  46912. * CHECK FOR CYBER 8XX MACHINE AND LEVEL 1 OR 2 DEADSTART.
  46913.  
  46914. CLE9 SA1 MABL CHECK MACHINE TYPE
  46915. SA4 CIRA GET RECOVERY LEVEL
  46916. LX1 59-47
  46917. NG X1,CLE14 IF NOT CYBER 170-8X5
  46918. SX4 X4-1
  46919. ZR X4,CLE10 IF LEVEL 1 DEADSTART
  46920. SX4 X4-1
  46921. NZ X4,CLE14 IF NOT LEVEL 2 DEADSTART
  46922.  
  46923. * BUILD *IBDT* AND ENTER IN LABEL TRACK.
  46924.  
  46925. CLE10 SA1 EEM CHECK FOR LINK DEVICE
  46926. SA4 MMFL
  46927. MX6 -9 MASK FOR EST ORDINAL
  46928. AX4 36
  46929. BX4 X4-X1
  46930. BX4 -X6*X4
  46931. SB4 1 (B4) = IBDT LIMIT
  46932. SX6 1000B
  46933. NZ X4,CLE11 IF NOT LINK DEVICE
  46934. SB4 MXMF
  46935. CLE11 SA1 TNSC
  46936. SB7 60
  46937. SA2 TCNT EXTENDED MEMORY SECTOR LIMIT
  46938. SB5 X1
  46939. SB7 B7-B5
  46940. SA1 EMS GET TRACK COUNT FROM MST
  46941. LX6 B5
  46942. SA1 X1
  46943. ERRNZ TDGL CODE DEPENDS ON VALUE
  46944. SX4 20B*101B
  46945. AX1 48
  46946. LX4 B5
  46947. SX6 X6-1
  46948. IX1 X1*X4
  46949. IX4 X1+X6
  46950. AX4 9 FWA OF BUFFERS IS END OF DEVICE
  46951. LX4 B7
  46952. SA1 DSDL
  46953. MX0 -12
  46954. SB5 12
  46955. LX6 X0,B5 POSITION MASK
  46956. CLE12 SA1 A1+B1
  46957. MX0 -12
  46958. BX7 X6*X1 CLEAR FWA FIELD
  46959. BX0 -X0*X1 LENGTH
  46960. ZR X0,CLE13 IF NO I/O BUFFERS ON THIS MAINFRAME
  46961. LX1 X4,B5 POSITION FWA
  46962. BX7 X7+X1
  46963. CLE13 SA7 A1
  46964. IX4 X4+X0 NEW FWA
  46965. SB6 A1-DSDL
  46966. NE B4,B6,CLE12 IF NOT END OF *IBDT*
  46967. SA0 DSDL+1 WRITE TO LABEL TRACK
  46968. SA1 ECLT EXTENDED MEMORY LABEL TRACK ADDRESS
  46969. SX0 X1+ETLT*100B+IBDT
  46970. SX1 A0
  46971. IX0 X0+X2
  46972. LX1 30
  46973. BX0 X0+X1
  46974. WE B4
  46975. CLE14 SX6 B1 SET *CLE* RAN INDICATOR
  46976. BX7 X7-X7
  46977. SA6 CLEA
  46978. SA2 CLED RESTORE REGISTERS
  46979. BX0 X2
  46980. SA0 B2
  46981. EQ CLE RETURN
  46982.  
  46983.  
  46984. CLEA CON 0
  46985. CLEB VFD 36/0,3/2,21/377B
  46986. CLEC DATA C*TESTING EXTENDED MEMORY 00*
  46987. CLED CON 0
  46988. CLEE BSS 400B EXTENDED MEMORY PRESET BUFFER
  46989. DBL SPACE 4
  46990. ** DBL - DETERMINE BLOCKS LOADED.
  46991. * *DBL* SETS THE CONDITION WORDS IN *TDBL* WHICH TELL IF A
  46992. * BLOCK HAS BEEN LOADED. THESE CONDITION WORDS ARE USED FOR
  46993. * SETTING THE CONDITIONAL VALUES IN THE *T* INSTRUCTIONS.
  46994. *
  46995. * EXIT TDBL IS SET ACCORDING TO THE BLOCKS LOADED.
  46996.  
  46997.  
  46998. DBL PS ENTRY/EXIT
  46999. SA1 TDBL-1 CONDITION WORDS TO SET
  47000. SB2 BLKT LOADED BLOCK TABLE ADDRESS
  47001. DBL1 SA1 A1+B1
  47002. ZR X1,DBL IF END OF CONDITION WORDS
  47003. SA2 B2-B1
  47004. DBL2 SA2 A2+B1 READ LOADED BLOCKS
  47005. BX6 X2-X1
  47006. AX6 18
  47007. BX7 X7-X7
  47008. ZR X6,DBL1 IF BLOCK PRESENT
  47009. NZ X2,DBL2 IF NOT END OF LOADED BLOCKS
  47010. SA7 A1 CLEAR CONDITION WORD - BLOCK NOT PRESENT
  47011. EQ DBL1
  47012. ILD SPACE 4
  47013. ** ILD - INITIALIZE MULTI-MAINFRAME LINK DEVICE.
  47014. *
  47015. * ENTRY (EFRL) = 30/,6/ LS,12/,12/ LT.
  47016. * LS = 40, IF TO INITIALIZE LINK DEVICE.
  47017. * LS = 20, IF TO PRESET LINK DEVICE.
  47018. * LT = LABEL TRACK OF LINK DEVICE.
  47019. *
  47020. * EXIT ERROR CODES PASSED TO *RMS* IN (EFRL) -
  47021. * 1 = EXTENDED MEMORY LABEL TRACK NOT FOUND.
  47022. * 2 = RECOVERY DS. PREVENTED FOR THIS MACHINE ID.
  47023. * 3 = MACHINE ID IN USE.
  47024. * 4 = MMFL SLOT UNAVAILABLE.
  47025. * 5 = EXTENDED MEMORY READ/WRITE PARITY ERRORS.
  47026. * 6 = PRESET NOT ALLOWED.
  47027. *
  47028. * (B6) = ERROR CODE.
  47029.  
  47030.  
  47031. ILD33 SX6 /LSPMMF/TMMF MERGE MMF TABLE ADDRESS IN *EFRL*
  47032. LX6 36
  47033. MX7 24
  47034. BX7 -X7*X1
  47035. BX6 X6+X7
  47036. SA6 EFRL
  47037.  
  47038. ILD PS ENTRY/EXIT
  47039. SA1 DSSL SET RECOVERY LEVEL
  47040. MX7 -2
  47041. BX7 -X7*X1
  47042. SA1 EFRL GET PRESET, INITIALIZE FLAGS
  47043. SB2 X7
  47044. SB6 B0
  47045. SA2 LSPMMF CHECK FOR LSP LINK DEVICE
  47046. NZ X2,ILD33 IF NO CPU PATH
  47047. MX4 -12
  47048. BX7 -X4*X1 EXTENDED MEMORY LABEL TRACK
  47049. LX1 59-29
  47050. SX6 2020B
  47051. SA3 TNSC
  47052. SB5 X3
  47053. LX6 B5,X6
  47054. MX4 -11
  47055. BX0 -X4*X7
  47056. LX3 X1,B1 POSITION INITIALIZE BIT
  47057. SA0 /PROGRAM/PBUF SET ECS BUFFER ADDRESS
  47058. IX0 X0*X6
  47059. SX2 A0+
  47060. LX2 30
  47061. BX0 X2+X0
  47062. NG X3,ILD2 IF INITIALIZE OF LINK DEVICE
  47063. SA3 ILDA
  47064.  
  47065. * SEARCH FOR LABEL TRACK.
  47066.  
  47067. ILD1 RE 1 READ LABEL SECTOR LINK WORD
  47068. NO IGNORE EXTENDED MEMORY ERROR
  47069. + SA2 A0
  47070. BX2 X2-X3
  47071. ZR X2,ILD2 IF LABEL TRACK FOUND
  47072. SX2 X7+1-LTKL
  47073. IX0 X0+X6 ADVANCE LABEL TRACK ADDRESS
  47074. SX7 X7+B1 ADVANCE LABEL TRACK NUMBER
  47075. NZ X2,ILD1 IF NOT AT LIMIT OF LABEL TRACK SEARCH
  47076. SB6 1
  47077. EQ ILD10 RETURN ERROR STATUS
  47078.  
  47079. ILD2 MX6 -24
  47080. BX6 -X6*X0 SET LABEL TRACK ADDRESS IN PRESET TABLE
  47081. SA7 A1 SET LABEL TRACK NUMBER IN EFRL
  47082. SA6 ECLT
  47083. ILD3 SX2 .PRSI SET PRESET INTERLOCK
  47084. SA3 ESM
  47085. SX0 400B
  47086. NZ X3,ILD3.1 IF ESM ENABLED
  47087. SX0 4B
  47088. ILD3.1 LX0 21
  47089. BX0 X0+X2
  47090. RE /ECS/FRWC
  47091. PL X1,ILD3 IF NOT PRESET
  47092. SA3 MMFL
  47093. BX7 X7-X7
  47094. SB4 B1+B1
  47095. PL X1,ILD11 IF NO PRESET OF LINK DEVICE
  47096.  
  47097. * VALIDATE NO ACTIVITY IN ECS.
  47098.  
  47099. SA4 TCNT
  47100. IX4 X6+X4
  47101. SX0 X4+ETLT*100B+SMET
  47102. SX4 A0
  47103. LX4 30
  47104. BX0 X0+X4
  47105. RE MXMF
  47106. EQ ILD6 PRESET VALID IF EXTENDED MEMORY ERROR
  47107. SA4 RTCL
  47108. SB5 X4+1200 WAIT 1.2 SECONDS
  47109. ILD4 CX4 X4 DELAY
  47110. CX4 X4
  47111. SA4 RTCL
  47112. SB6 X4
  47113. LT B6,B5,ILD4 IF NOT END OF WAIT
  47114. SA0 A0+MXMF
  47115. SB6 5
  47116. SX4 MXMF
  47117. LX4 30
  47118. IX0 X0+X4
  47119. RE MXMF
  47120. EQ ILD9 RETURN EXTENDED MEMORY ERROR STATUS
  47121. SB6 6 *PRESET NOT ALLOWED.*
  47122. SA1 A0
  47123. SB4 A1
  47124. ILD5 SA1 A1-B1 VALIDATE THAT CLOCKS ARE THE SAME
  47125. SA4 A1+MXMF
  47126. SB5 A4
  47127. BX1 X1-X4
  47128. SA0 A1 RESET A0
  47129. NZ X1,ILD9 IF MACHINE ACTIVE
  47130. GT B5,B4,ILD5 IF MORE MACHINES TO CHECK
  47131. SB6 5 SET EXTENDED MEMORY ERROR STATUS
  47132. ILD6 BX1 X0 CLEAR FLAG REGISTER EXCEPT *PRSI*
  47133. BX0 -X2
  47134. MX6 -18
  47135. BX0 -X6*X0
  47136. SA2 ESM
  47137. SX6 403B
  47138. NZ X2,ILD6.1 IF ESM ENABLED
  47139. SX6 7B
  47140. ILD6.1 LX6 21
  47141. BX0 X6+X0
  47142. RE /ECS/FRWC
  47143. EQ ILD9
  47144. BX0 X1 RESTORE X0
  47145. RJ CLE CLEAR ECS
  47146.  
  47147. * CLEAR ENVIRONMENT SECTOR.
  47148.  
  47149. SA3 A3 RESTORE (X3) = *MMFL*
  47150. SB5 77B
  47151. BX7 X7-X7
  47152. ILD7 SA7 A0+B5 CLEAR SECTOR OF DATA
  47153. SB5 B5-B1
  47154. PL B5,ILD7 IF MORE TO CLEAR
  47155. SX1 B1 SET MACHINE INDEX 1
  47156. SX0 X0-SMET
  47157. SX4 A0
  47158. LX4 30
  47159. BX0 X0+X4
  47160. WE IBDT
  47161. EQ ILD9 PROCESS ERROR
  47162. SX1 1 SET MACHINE INDEX
  47163. SB6 5 SET EXTENDED MEMORY ERROR RETURN
  47164. * SX0 X0+MFET
  47165.  
  47166. * WRITE MMFL WORD IN MFET SLOT.
  47167.  
  47168. ILD8 SB5 X1+11 SET MACHINE INDEX
  47169. SX4 B1
  47170. IX0 X0-X4
  47171. LX4 X4,B5 MACHINE MASK
  47172. IX0 X0+X1 ADDRESS IN MFET
  47173. IX4 X4+X1
  47174. BX6 X3+X4 SET MACHINE MASK AND INDEX IN MMFL
  47175. SA0 A3
  47176. SA6 A3
  47177. SX6 X0+SMET-MFET
  47178. MX2 -24
  47179. BX0 -X2*X0
  47180. SX2 A0
  47181. LX2 30
  47182. BX0 X2+X0
  47183. WE 1
  47184. EQ ILD9 EXTENDED MEMORY ERROR
  47185. IX0 X6-X1
  47186. SA0 /MMF/ARMA INITIALIZE MACHINE CLOCK TEMPORARIES
  47187. SX0 X0+B1 ADDRESS OF MACHINE CLOCKS
  47188. MX2 -24
  47189. BX0 -X2*X0
  47190. SX2 A0
  47191. LX2 30
  47192. BX0 X0+X2
  47193. RE MXMF
  47194. EQ ILD9 EXTENDED MEMORY ERROR
  47195. SB6 B0 CLEAR ERROR STATUS
  47196. SA6 ECCM SET MACHINE CLOCK LOCATION
  47197.  
  47198. * CLEAR FLAG REGISTER INTERLOCK AND RETURN IF NO ERROR.
  47199.  
  47200. ILD9 SA2 ESM
  47201. SX0 403B CLEAR FLAG BIT FUNCTION
  47202. NZ X2,ILD9.1 IF ESM ENABLED
  47203. SX0 7B
  47204. ILD9.1 LX0 21
  47205. SX2 .PRSI
  47206. BX0 X0+X2
  47207. RE /ECS/FRWC
  47208. ILD10 SX7 B6 SET ERROR CODE
  47209. SA7 EFRL
  47210. ZR B6,ILD IF NO ERROR
  47211. SX6 B0 CLEAR FURTHER MMF PROCESSING
  47212. SA6 MMF
  47213. EQ ILD RETURN
  47214.  
  47215. * ASSIGN/RECOVER MMFL SLOT IN ENVIRONMENT TABLE.
  47216.  
  47217. ILD11 SA2 TCNT
  47218. IX2 X6+X2
  47219. SX0 X2+ETLT*100B+MFET
  47220. SX1 A0
  47221. LX1 30
  47222. BX0 X1+X0
  47223. SB6 5 EXTENDED MEMORY ERROR FLAG
  47224. MX4 24
  47225. MX1 MXMF-1
  47226. RE MXMF
  47227. EQ ILD9 IF ERROR
  47228. SA2 A0 PRESET STATE TABLE
  47229. BX6 X4*X2
  47230. SA6 /MMF/TMMF+MFST
  47231. ILD11.1 SA2 A2+B1
  47232. BX6 X4*X2
  47233. LX1 1
  47234. SA6 A6+B1
  47235. NG X1,ILD11.1 IF NOT END OF MACHINES
  47236. MX1 -12
  47237. MX4 12
  47238. SB3 MXMF-1
  47239. LE B2,B4,ILD12 IF NOT LEVEL 3 RECOVERY
  47240.  
  47241. * VERIFY MMFL WITH MFET IF LEVEL 3 RECOVERY.
  47242.  
  47243. BX1 -X1*X3 MACHINE INDEX
  47244. MX4 24+12
  47245. SA2 /PROGRAM/PBUF-1+X1 VERIFY ENTRY
  47246. LX4 12
  47247. BX2 X2-X3
  47248. BX2 X4*X2
  47249. ZR X2,ILD8 IF ENTRY VERIFIES
  47250. JP ILD14
  47251.  
  47252. * CHECK IF ENTRY EXISTS OR IF EMPTY SLOT. (LEVEL 0, 1, 2.)
  47253.  
  47254. ILD12 SA2 A0+B3 READ ENTRY
  47255. NZ X2,ILD13 IF NOT EMPTY ENTRY
  47256. SX1 B3+B1 SET EMPTY SLOT FOUND
  47257. ILD13 BX6 X2-X3
  47258. BX5 X4*X6
  47259. ZR X5,ILD15 IF MATCHING MACHINE ID
  47260. SB3 B3-B1 CHECK NEXT ENTRY
  47261. PL B3,ILD12 IF NOT END OF ENTRIES
  47262.  
  47263. * MACHINE ID NOT FOUND - ASSIGN EMPTY ENTRY.
  47264.  
  47265. NZ B2,ILD14 IF NOT LEVEL ZERO
  47266. PL X1,ILD8 IF EMPTY ENTRY FOUND
  47267. SB6 4 *MID SPOT UNAVAILABLE.*
  47268. JP ILD9
  47269.  
  47270. ILD14 SB6 2 *RECOVERY DEADSTART PREVENTED THIS MID.*
  47271. JP ILD9
  47272.  
  47273. * MACHINE ID FOUND - VERIFY IF FOR THIS MACHINE.
  47274.  
  47275. ILD15 SX1 B3+B1 SET MACHINE INDEX
  47276. LX4 -12
  47277. BX6 X4*X2
  47278. NZ B2,ILD16 IF RECOVERY DEADSTART
  47279. ZR X6,ILD8 IF LINK EQUIPMENT NOT PRESENT
  47280. SB6 3 *MACHINE ID IN USE.*
  47281. JP ILD9
  47282.  
  47283. * LINK DEVICE MUST BE PRESENT IN *MFET* FOR RECOVERY DEADSTART.
  47284.  
  47285. ILD16 NZ X6,ILD8 IF LINK EQUIPMENT PRESENT
  47286. JP ILD14 *RECOVERY DEADSTART PREVENTED THIS MID.*
  47287.  
  47288. ILDA VFD 24/37770077B,36/0LLABEL
  47289. SPACE 4,10
  47290. * INSURE PP EXCHANGE PACKAGES AND TABLE OF LOADED BLOCKS FIT.
  47291.  
  47292.  
  47293. PRSO EQU *-PRSB LENGTH OF OVERLAYABLE PRESET CODE
  47294. ERRPL 21D*28D+/DSL/CPBL-PRSO OVERFLOW
  47295. COMMON SPACE 4,10
  47296. * COMMON DECKS.
  47297.  
  47298.  
  47299. QUAL
  47300. *CALL COMCCDD
  47301. *CALL COMCEDT
  47302. QUAL *
  47303. SPACE 4,10
  47304. TITLE NON-OVERLAYED PRESET.
  47305. SPACE 4
  47306. ** PRSX - OVERLAY PRESET WITH PPU EXCHANGE PACKAGES.
  47307.  
  47308.  
  47309. PRSX RJ SPS SET PPU STATUS
  47310. SX6 CL
  47311. SA1 BLKT-1 *CPUMLD* LOADED BLOCKS TABLE
  47312. SA6 A0+B1 SET MAIN BLOCK ADDRESS IN BLOCK TABLE
  47313. SX7 A6
  47314. SA7 CL+CBLP SET *CPUMTR* LOADED BLOCK POINTER
  47315. PRSX1 SA1 A1+B1 MOVE LOADED BLOCK TABLE
  47316. BX6 X1
  47317. SA6 A6+B1
  47318. NZ X1,PRSX1 IF NOT END OF TABLE
  47319. TSX2 (/MONITOR/BXP,CPB,0)
  47320. SA0 A6 UPDATE (A0)
  47321. LX7 36
  47322. SA6 A6-B1 REMOVE *PRESET* FROM BLOCK TABLE
  47323. BX7 X7+X2
  47324. SA7 CMBL STORE BREAKPOINT POINTER WORD
  47325. TNO /MCE/PRS,MCE IF MEMORY CLEARING ENABLED
  47326. SX6 A0 SET LWA+1 OF CPUMTR
  47327. SA6 B0
  47328. EQ CPSL BRANCH TO STOP
  47329. SPS SPACE 4
  47330. ** SPS - SET PPU STATUS.
  47331. *
  47332. * ENTRY (A0) = LAST ADDRESS OF CPUMTR.
  47333. *
  47334. * EXIT (A0) = LAST ADDRESS OF CPUMTR.
  47335.  
  47336.  
  47337. SPS PS ENTRY/EXIT
  47338.  
  47339. * ASSIGN SYSTEM CONTROL POINT PP-S.
  47340.  
  47341. TX1 0,SC SET SYSTEM CP FOR PP ASSIGNMENT
  47342. LX1 36
  47343. SX6 3RMTR
  47344. SX7 3RDSD
  47345. LX6 42
  47346. LX7 42
  47347. BX6 X6+X1
  47348. BX7 X7+X1
  47349. TA6 0,FP ASSIGN *MTR* TO PP 0
  47350. TA7 1*PPCE,FP ASSIGN *DSD* TO PP 1
  47351. SX6 3RSTL
  47352. SX7 3RDIO
  47353. LX6 42
  47354. LX7 42
  47355. BX6 X6+X1
  47356. BX7 X7+X1
  47357. TA6 2*PPCE,FP ASSIGN *STL* TO PP 2
  47358. TA7 10B*PPCE,FP ASSIGN *DIO* TO PP 10
  47359. TA1 STSW,SCA
  47360. SX2 4
  47361. LX2 48
  47362. IX6 X1+X2 INCREMENT SYSTEM CP PP COUNT
  47363. SA6 A1+
  47364. SA1 PPUL READ PPU STATUS
  47365. SB2 20-2 PRESET 20 PPU
  47366. LX1 -24
  47367. SB6 PPCE
  47368. MX3 -12
  47369. BX4 -X3*X1
  47370. SX3 X4-11
  47371. SB3 B1
  47372. MX6 1
  47373. BX7 X7-X7 CLEAR ASSEMBLY
  47374. LX6 -12-1 POSITION TO PP 1
  47375. TA1 1*PPCE,FP SET PPU 1
  47376. PL X3,SPS1 IF MORE THAN 10 PPU
  47377. SB2 10D-2 SET 10 PPU
  47378.  
  47379. * BUILD THE PP ALLOCATION BIT MAP.
  47380.  
  47381. SPS1 SA1 A1+B6 READ NEXT INPUT REGISTER
  47382. AX6 B3,X6 POSITION ALLOCATION BIT
  47383. SB4 B2-10D
  47384. NZ B4,SPS1.1 IF PP NOT PP20
  47385. SB3 -B1 SWITCH SHIFT DIRECTION
  47386. AX6 10D-1 REPOSITION PP AVAILABLE FLAG
  47387. SPS1.1 SB2 B2-B1
  47388. NZ X1,SPS2 IF NOT AVAILABLE
  47389. BX7 X7+X6 MERGE ALLOCATION BIT
  47390. SPS2 NZ B2,SPS1 IF NOT END OF PPU
  47391. SA5 /MONITOR/PXP SET EXCHANGE PACKAGE FIRST WORD
  47392. SB7 A1+B6 SET LAST PPU ADDRESS
  47393.  
  47394. * CALCULATE LENGTH OF ALL EXCHANGE PACKAGES FOR CPP-S
  47395. * AND CPP AVAILABLE COUNT.
  47396.  
  47397. SA2 CPPL
  47398. LX2 0-12
  47399. MX0 -6
  47400. BX2 -X0*X2
  47401. BX0 X0-X0
  47402. ZR X2,SPS2.3 IF NO CPP-S PRESENT
  47403. SB2 X2
  47404. SPS2.1 SA1 A1+B6 READ NEXT INPUT REGISTER
  47405. NZ X1,SPS2.2 IF CPP NOT AVAILABLE
  47406. SX0 X0+B1 INCREMENT CPP AVAILABLE COUNT
  47407. SPS2.2 SB2 B2-B1
  47408. NZ B2,SPS2.1 IF MORE CPP-S TO CHECK
  47409. LX0 12-0
  47410. BX7 X7+X0
  47411. LX2 PPCES
  47412. SB7 B7+X2 ADD IN CPP-S EXCHANGE PACKAGES
  47413.  
  47414. * GENERATE PPU EXCHANGE PACKAGES.
  47415.  
  47416. SPS2.3 SA7 PPAL SAVE ALLOCATION STATUS AND CPP COUNT
  47417. SX6 A0
  47418. SA6 PXPP SET ADDRESS OF FIRST PP EXCHANGE PACKAGE
  47419. BX6 X5
  47420. TB4 2*PPCE,FP PP 2 COMMUNICATION AREA ADDRESS
  47421. SA6 A6+B1
  47422. SA1 A0+20B PRESET (A6)
  47423. BX6 X1
  47424. SA6 A1
  47425. SX4 21B SET EXCHANGE PACKAGE ADDRESS INCREMENT
  47426. SX3 B6 SET A5 INCREMENT
  47427. LX3 18
  47428. SPS3 SB4 B4+B6 INCREMENT PP ADDRESS
  47429. MX7 -21B
  47430. GE B4,B7,SPS5 IF END OF PPU-S
  47431. SPS4 BX6 X5 COPY PREVIOUS EXCHANGE PACKAGE
  47432. AX7 1
  47433. SA6 A6+B1
  47434. SA5 A5+B1
  47435. NZ X7,SPS4 IF NOT END OF EXCHANGE PACKAGE
  47436. SA1 A6-20B+5 INCREMENT (A5)
  47437. IX7 X1+X3
  47438. SA7 A1
  47439. SA1 A1-5+2 INCREMENT (B2)
  47440. IX7 X1+X4
  47441. SA7 A1
  47442. SA2 B4
  47443. LX2 12
  47444. SX2 X2-2R**
  47445. ZR X2,SPS3 IF NO PP PRESENT
  47446. SA0 A6 SET LWA OF EXCHANGE PACKAGES IN USE
  47447. EQ SPS3
  47448.  
  47449. * INITIALIZE EXTENDED PP CONTROL BLOCKS.
  47450.  
  47451. SPS5 TX6 0,SCA
  47452. BX1 X6
  47453. LX1 48-7
  47454. BX7 X1+X6
  47455. LX6 24
  47456. BX6 X6+X7 *ACPP* FOR SYSTEM CP ASSIGNMENT
  47457. MX7 12
  47458. TB4 0,FP START OF PP COMMUNICATION AREA
  47459. TB3 0,FPX START OF EXTENDED PP CONTROL BLOCKS
  47460. SPS6 SA1 B4 READ NEXT INPUT REGISTER
  47461. SA7 B3+DRQP INITIALIZE PENDING DISK REQUEST STATUS
  47462. LX1 12
  47463. ZR X1,SPS7 IF NOT ASSIGNED PP
  47464. SX1 X1-2R**
  47465. ZR X1,SPS7 IF NOT ASSIGNED PP
  47466. SA6 B3+ACPP SET SYSTEM CP ASSIGNMENT
  47467. SPS7 SB4 B4+PPCE
  47468. SB3 B3+PPXE
  47469. LE B4,B7,SPS6 IF NOT PAST PSEUDO-PP
  47470. EQ SPS RETURN
  47471.  
  47472.  
  47473. PRBL EQU *-PRSB LENGTH OF *PRESET* BLOCK
  47474. REL SPACE 4
  47475. ** TERMINATE THE *TREL* BLOCK WHICH CONTAINS THE RELOCATION
  47476. * INFORMATION FOR PRESET.
  47477.  
  47478.  
  47479. USE /TREL/
  47480. CON 0,0
  47481.  
  47482. TRELL EQU *-REL LENGTH OF *TREL* BLOCK
  47483. USE *
  47484. TJMP SPACE 4,10
  47485. ** TERMINATE TJMP BLOCK.
  47486.  
  47487.  
  47488. USE /TJMP/
  47489. CON 0,0
  47490.  
  47491. TJMPL EQU *-TJMP LENGTH OF *TJMP* BLOCK
  47492. USE *
  47493. SPACE 4,10
  47494. ** BLKT - LOADED BLOCK NAME TABLE DECLARATION.
  47495.  
  47496.  
  47497. USE /TBLK/
  47498. BLKT BSS 0 LOADED BLOCK NAME TABLE
  47499.  
  47500. TBLKL EQU /DSL/CPBL MAXIMUM LENGTH OF *TBLK* BLOCK
  47501. USE *
  47502. SPACE 4
  47503. PRSL EQU PRBL+TRELL+TJMPL+TBLKL
  47504.  
  47505. ERRNG /DSL/PRSL*100B-PRSL IF *PRESET* OVERFLOW
  47506. QUAL
  47507. CPUMTR EQU /PRESET/PRS
  47508. SPACE 4
  47509. TTL CPUMTR - CPU MONITOR.
  47510. SAC HERE
  47511.  
  47512. END CPUMTR
cdc/nos2.source/opl871/cpumtr.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator