VMI TITLE 'DMKVMI (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 00002000
*. 00003000
* 00004000
* MODULE NAME - 00005000
* 00006000
* DMKVMI 00007000
* 00008000
* FUNCTION - 00009000
* 00010000
* TO SIMULATE A USER'S IPL I/O SEQUENCE 00011000
* 00012000
* ATTRIBUTES - 00013000
* 00014000
* RESIDENT IN A PAGE OF THE USER'S VIRTUAL MEMORY, DMKVMI RUNS 00015000
* IN THE VIRTUAL MACHINE UNDER CONTROL OF THE USER'S VIRTUAL 00016000
* PSW AND IN PROBLEM STATE. SIO INSTRUCTIONS ISSUED BY THE 00017000
* IPL SIMULATOR ARE HANDLED EITHER BY CCW TRANSLATION OR SIMU- 00018000
* LATION BY DMKVSPEX. 00019000
* 00020000
* ENTRY POINTS - 00021000
* 00022000
* DMKVMIPL 00023000
* 00024000
* ENTRY CONDITIONS - 00025000
* 00026000
* THE FOLLOWING LOCATIONS IN THE USER'S VIRTUAL PAGE ZERO WILL 00027000
* BE FILLED IN BY THE IPL COMMAND HANDLER DMKCFP BEFORE THE 00028000
* USER'S MACHINE IS DISPATCHED - 00029000
* 00030000
* LOCATION 0 VIRTUAL IPL CYLINDER NUMBER 00031000
* LOCATION 2 IPL DEVICE ADDRESS 00032000
* LOCATION 8 VMMLEVEL FLAG BYTE FROM USER'S VMBLOK 00033000
* LOCATION A IPL STOP FLAG BYTE 00034000
* 00035000
* EXIT CONDITIONS - 00036000
* 00037000
* WHEN DMKVMI HAS COMPLETED PROCESSING, THE ENTIRE IPL CHANNEL 00038000
* PROGRAM HAS BEEN INTERPRETED. THE IPL DEVICE ADDRESS IS 00039000
* PLACED IN LOCATION X'2' OF THE USER'S VIRTUAL MEMORY OR 00040000
* X'BA' FOR A MACHINE WITH THE EXTENDED MODE BIT ON IN THE 00041000
* IPL PSW. THE IPL PSW AT LOCATION X'0' IS THEN LOADED. 00042000
* 00043000
* CALLS TO OTHER ROUTINES - 00044000
* 00045000
* NONE 00046000
* 00047000
* EXTERNAL REFERENCES - 00048000
* 00049000
* NONE 00050000
* 00051000
* TABLES / WORKAREAS - 00052000
* 00053000
* NONE 00054000
* 00055000
* REGISTER USAGE - 00056000
* 00057000
* GPR0-9 - SCRATCH 00058000
* GPR10 - ADDRESS OF THE NEXT CCW TO BE VALIDATED 00059000
* GPR11 - ADDRESS OF 1ST CCW IN SEQUENCE TO BE EXECUTED 00060000
* GPR12 - INTERNAL SUBROUTINE LINKAGE 00061000
* GPR13 - IPL DEVICE ADDRESS 00062000
* GPR14 - VIRTUAL OPERATOR'S CONSOLE ADDRESS 00063000
* GPR15 - DMKVMIPL BASE REGISTER 00064000
* 00065000
* NOTES - 00066000
* 00067000
* NONE 00068000
* 00069000
* OPERATION - 00070000
* 00071000
* 1. SAVE REGISTERS AND ESTABLISH MODULE BASE REGISTER. 00072000
* 2. GET IPL AND CONSOLE DEVICE ADDRESSES. 00073000
* 3. SAVE USER CAW AND IPL DEVICE CLASS AND TYPE. 00074000
* 4. IF DEVICE CLASS IS DASD GOTO DISK ROUTINE. 00075000
* 5. IF DEVICE CLASS IS TAPE GOTO TAPE ROUTINE. 00076000
* 6. IF DEVICE CLASS IS EITHER UNIT RECORD INPUT OR SPECIAL 00077000
* (CTCA), GO TO READER ROUTINE. 00078000
* 7. IF DEVICE CLASS IS NONE OF THE ABOVE, GIVE MESSAGE 00079000
* 'INVALID IPL DEVICE TYPE' AND LOAD DISABLED WAIT STATE. 00080000
* 00081000
* (OPERATION OF THE DISK, TAPE, AND READER ROUTINES BELOW) 00082000
* 00083000
* 7. EXECUTE THE LAST CCW. 00084000
* 8. IF THE PSW AT VIRTUAL X'0' HAS THE EXTENDED BIT ON PLACE 00085000
* THE IPL DEVICE ADDRESS IN VIRTUAL LOCATION X'BA'; 00086000
* OTHERWISE PLACE IT IN VIRTUAL LOCATION X'2'. 00087000
* 9. RESTORE REGISTERS AND LATEST CAW. 00088000
* 9A. FOR IPL STOP OPTION GET THE PSW ADDRESS FROM 00089000
* LOCATION 4 AND CONVERT TO AN ADSTOP ADDRESS. 00090000
* ISSUE CP DIAGNOSE 8 TO SET ADSTOP AT PSW LOCATION. 00091000
* 10. LOAD PSW AT VIRTUAL LOCATION X'0'. 00092000
* 00093000
* MESSAGES - 00094000
* 00095000
* DMKVMI022E VADDR MISSING OR INVALID 00096100
* DMKVMI230E IPL SIO ERROR 00097100
* DMKVMI231E IPL TIO ERROR 00098100
* DMKVMI232E IPL UNIT ERROR, CSW=XXXXXXXX XXXXXXXX, SENSE=XX 00099100
* DMKVMI233E IPL OVERLAY ERROR 00100100
* DMKVMI234E IPL SENSE ERROR 00101100
* 00102000
*. 00103000
EJECT 00104000
COPY OPTIONS 00105000
COPY LOCAL 00106000
EJECT 00107000
PUNCH 'SPB' 00108000
DMKVMI CSECT 00109000
ENTRY DMKVMIPL 00110000
SPACE 3 00111000
USING PSA,R0 00112000
SPACE 3 00113000
DMKVMIPL EQU * 00114000
ST R15,IPLSAVE SAVE REGISTER NEEDED FOR BASE 00115000
BALR R15,R0 ESTABLISH ADDRESSABILITY 00116000
USING *,R15 ... 00117000
BASEADD EQU * 00118000
LA R15,0(0,R15) STRIP HIGH-ORDER BYTE FROM BASE REG 00119000
SH R15,=AL2(BASEADD-DMKVMI) 00120000
USING DMKVMI,R15 00121000
STM R0,R14,SAVEREGS SAVE THE USER'S REGS 00122000
MVC SAVEREGS+4*R15(4),IPLSAVE RETRIEVE R15 00123000
LA R15,0(,R15) STRIP HIGH BYTE (FROM BALR) FROM BASE REG 00124000
SLR R14,R14 SET DIAG REG TO -1 @VM08862 00125000
BCTR R14,0 LOCATE CONSOLE ADDRESS @VM08862 00126000
DC X'83E10024' .. @VM08862 00127000
MVC SAVECAW(4),CAW SAVE USER'S CAW 00128000
LA R1,SENSDATA FILL IN RELOCATED ADDRESS OF "SENSDATA" 00129000
STCM R1,B'0111',SENSE+1 (FOR GENERAL USE) 00130000
MVC CODEBYTE,IPLERRCD SAVE ERROR LEVEL CODE BYTE @VM08862 00131000
MVC FLAG2(1),FLAG1 SAVE IPLSTOP FLAG BYTE @VM08862 00132000
LH R13,IPLADDR ADDRESS OF IPL'ED DEVICE @VM08862 00133000
DC X'83D10024' GET VDEVTYPC,VDEVTPE,RDEVFTR @VM08862 00134000
STCM R1,B'1100',CLASS SAVE VDEVTYPC AND VDEVTYPE @VM08862 00135000
BC 2,CHKNXT BRANCH IF NO REAL DEVICE BLOCK @VM08862 00136000
CLC CLASS(2),=AL1(CLASSPEC,TYPUNSUP) UNSUPPORTED ?? @VM08862 00137000
BNE CHKNXT NO - PROCESS @VM08862 00138000
STC R2,CLASS SPECIAL CASE USE RDEVFTR @VM08862 00139000
CLI CLASS,CLASURI READER CLASS TYPE @VM08862 00140000
BNE *+8 NO - LEAVE TYPE AS IS @VM08862 00141000
MVI TYPE,TYPRDR SET TO READER TYPE @VM08862 00142000
CHKNXT TM CLASS,CLASDASD DASD DEVICE ?? @VM08862 00143000
BO DISK YES -- 00144000
TM CLASS,CLASTAPE OR TAPE ?? 00145000
BO TAPE YES -- 00146000
CLC CLASS(2),=AL1(CLASSPEC,TYPCTCA) OR CTCA ?? @VM08862 00147000
BE READER YES -- @VM08862 00148000
TM CLASS,CLASURI THE ONLY ONE LEFT 00149000
BNO BADEVICE NO GOOD IF NOT THIS ONE 00150000
TM TYPE,TYPRDR MUST BE A CARD READER 00151000
BO READER GO GET IT 00152000
SPACE 00153000
BADEVICE EQU * HERE IF DEVICE TYPE IS UNSUPPORTED 00154000
LA R4,ERRTYP LOAD THE ERROR MSG ADDRESS 00155000
LA R5,L'ERRTYP LOAD ERROR MSG LENGTH 00156000
B PRINT PRINT ERROR AND DIE 00157000
EJECT 00158000
*. 00159000
* OPERATION OF CARD READER IPL SIMULATION - 00160000
* 00161000
* 1. READ FIRST 24 BYTES INTO VIRTUAL LOCATION X'0'. 00162000
* 2. SET THE CCW POINTER TO THE IPL CCW LOCATED AT VIRTUAL 00163000
* X'8'. 00164000
* 3. VALIDATE THE DATA ADDRESS OF THE CURRENT CCW TO INSURE 00165000
* THAT THE IPL SIMULATOR DOES NOT GET OVERWRITTEN. 00166000
* 4. IF THE CURRENT CCW OP-CODE IS A TIC, SET THE 00167000
* CURRENT CCW POINTER TO THE DATA ADDRESS AND THEN PROCEED 00168000
* TO STEP 3. 00169000
* 5. IF THE CHAIN DATA FLAG IN THE CURRENT CCW IS NOT ON 00170000
* GO TO STEP 19. 00171000
* 6. AFTER HAVING SAVED THE OP-CODE IN THE CURRENT CCW 00172000
* CHANGE THIS CCW'S OP-CODE TO A X'C2' (READ-BUFFER). 00173000
* 7. RESET ALL CHAINING FLAGS IN THE CURRENT CCW. 00174000
* 8. VALIDATE THE CCW DATA ADDRESS. 00175000
* 9. EXECUTE THE CCW. 00176000
* 10. IF THE CURRENT CCW WAS OVERLAID PROCEED TO STEP 00177000
* 11; OTHERWISE RECHAIN THE CCW IN CASE IT 00178000
* GETS RE-EXECUTED VIA A TIC. 00179000
* 11. ADVANCE CCW POINTER BY 8. 00180000
* 12. IF THE CHAIN DATA FLAG IS ON GO TO 00181000
* STEP 7; OTHERWISE RESTORE OP-CODE OF FIRST CHAIN 00182000
* DATA CCW. 00183000
* 13. IF THE COMMAND CHAINING FLAG IS NOT ON IN THE 00184000
* CURRENT CCW GO TO STEP 24. 00185000
* 14. RESET ALL CHAINING FLAGS. 00186000
* 15. VALIDATE CCW DATA ADDRESS. 00187000
* 16. EXECUTE ALL CCWS SINCE START OF CHAIN DATA. 00188000
* 17. IF THE CURRENT CCW WAS OVERLAID PROCEED TO STEP 00189000
* 18; OTHERWISE RECHAIN THE CCW IN CASE IT GETS 00190000
* RE-EXECUTED VIA A TIC. 00191000
* 18. ADVANCE CCW POINTER BY 8 AND PROCEED TO STEP 3. 00192000
* 19. IF THE COMMAND CHAINING FLAG IS NOT ON IN THE 00193000
* CURRENT CCW GO TO STEP 24. 00194000
* 20. RESET ALL CHAINING FLAGS. 00195000
* 21. EXECUTE THIS CCW ALONE. 00196000
* 22. IF THE CURRENT CCW WAS OVERLAID PROCEED TO STEP 23; 00197000
* OTHERWISE RECHAIN THE CCW IN CASE IT GETS RE-EXECUTED 00198000
* VIA A TIC. 00199000
* 23. ADVANCE CCW POINTER BY 8 AND PROCEED TO STEP 3. 00200000
* 24. RETURN TO STEP 7 IN MAIN PROLOG. 00201000
* 00202000
*. 00203000
SPACE 1 00204000
READER EQU * 00205000
LA R11,CARDCCW SET CCW POINTER TO LOAD-KEY CCW'S 00206000
BAL R12,IO GET THE 24 BYTES 00207000
LA R11,IPLCCW1 SET CCW POINTER TO FIRST USER CCW 00208000
NEXTCARD LR R10,R11 GIVE CCW ADDRESS TO ADDRTEST 00209000
BAL R12,ADDRTEST VALIDATE CCW ADDRESS, PREVENT OVERLAY 00210000
TM 0(R10),X'08' IS OPCODE A TIC? 00211000
BZ *+12 BRANCH IF NOT TIC 00212000
TM 0(R10),X'07' ARE YOU SURE IT'S A TIC? 00213000
BZ TICCARD BRANCH IF IT'S A TIC 00214000
TM 4(R11),CD IS THE CD FLAG SET? 00215000
BO CDCARD BRANCH IF YES 00216000
TM 4(R11),CC IS THE CC FLAG SET? 00217000
BNO IPLDONE BRANCH IF NOT AND EXECUTE LAST CCW 00218000
SPACE 1 00219000
CCCARD EQU * HERE TO PROCESS COMMAND CHAINING FLAG 00220000
NI 4(R11),X'FF'-CC DECHAIN THE CCW 00221000
MVI 5(R11),HEXFF FLAG CURRENT CCW 00222000
BAL R12,IO EXECUTE THE STAND ALONE CCW 00223000
CLI 5(R11),HEXFF DID CURRENT CCW GET OVERLAID? 00224000
BNE *+8 YES 00225000
OI 4(R11),CC RESET COMMAND CHAINING BIT *00226000
FOR RE-EXECUTION (IF NEEDED) 00227000
LA R11,8(,R11) ADVANCE CCW POINTER 00228000
B NEXTCARD GET NEXT USER CCW 00229000
SPACE 1 00230000
CDCARD EQU * HERE TO PROCESS DATA CHAINING FLAG 00231000
MVC OPCODE,0(R11) SAVE THE VALID OPCODE 00232000
MVI 0(R10),X'C2' SET OPCODE TO A READ-BUFFER 00233000
CSCATTER NI 4(R10),X'FF'-(CD+CC) RESET ALL CHAINING FLAGS 00234000
OI 4(R10),SILI PROTECT FROM A PARTIAL READ 00235000
MVI 5(R10),HEXFF FLAG CURRENT CCW 00236000
BAL R12,ADDRTEST VALIDATE THE CCW ADDRESS 00237000
CLI TYPE,TYP2501 IS IT 2501? @VA02056 00238000
BE AFTERIO YES, DON'T ACTUALLY DO ANY I/O @VA02056 00239000
BAL R12,IO EXECUTE THE CCW 00240000
AFTERIO CLI 5(R10),HEXFF DID CURRENT CCW GET OVERLAID? @VA02056 00241000
BNE *+8 YES 00242000
OI 4(R10),CD RESET THE FLAG FOR RE-EXECUTION *00243000
IF CHAIN GETS RESTARTED VIA TIC 00244000
LA R10,8(,R10) ADVANCE POINTER TO LAST ATTACHED CCW 00245000
TM 4(R10),CD MORE DATA CHAINING? 00246000
BO CSCATTER BRANCH IF YES 00247000
SPACE 00248000
* HERE IF SCATTER READ CHAIN HAS ENDED 00249000
BAL R12,ADDRTEST VALIDATE THE CCW ADDRESS @VA02056 00250000
MVC 0(1,R11),OPCODE RESTORE THE OPCODE IN THE FIRST CCW 00251000
TM 4(R10),CC IS THE CC FLAG SET? 00252000
BZ IPLDONE BRANCH IF NO, LAST CCW READY FOR EXEC 00253000
SPACE 00254000
* HERE IF LAST CCW IN DATA CHAIN SEQUENCE HAS CC FLAG 00255000
NI 4(R10),X'FF'-CC RESET THE CC FLAG 00256000
MVI 5(R10),HEXFF FLAG CURRENT CCW 00257000
BAL R12,IO EXECUTE THE ENTIRE CHAIN 00258000
CLI 5(R10),HEXFF DID CURRENT CCW GET OVERLAID? 00259000
BNE *+8 YES 00260000
OI 4(R10),CC RESET THE FLAG FOR RE-EXECUTION *00261000
IF CHAIN GETS RESTARTED VIA TIC 00262000
LA R11,8(,R10) SET POINTER TO DECODE NEXT CCW 00263000
B NEXTCARD PROCESS COMMAND CHAINED CCW 00264000
SPACE 1 00265000
TICCARD EQU * HERE TO PROCESS TIC CCW 00266000
L R11,0(,R11) LOAD OPCODE AND DATA ADDRESS 00267000
LA R11,0(,R11) ISOLATE DATA ADDRESS 00268000
B NEXTCARD GET NEXT USER CCW 00269000
EJECT 00270000
*. 00271000
* OPERATION OF DISK IPL SIMULATION - 00272000
* 00273000
* 1. IF DEVICE TYPE IS NOT 2311,2314,3330,3340,3350 OR 2305 00274000
* PRINT ERROR MESSAGE "INVALID DEVICE TYPE" 00275000
* AND LOAD DISABLED WAIT STATE PSW. 00276000
* 2. READ FIRST 24 BYTES INTO VIRTUAL LOCATION X'0'. 00277000
* 3. SET THE CCW POINTER TO THE IPL CCW LOCATED AT VIRTUAL 00278000
* X'8'. 00279000
* 4. VALIDATE THE DATA ADDRESS OF THE CURRENT CCW TO 00280000
* INSURE THAT THE IPL SIMULATOR DOES NOT GET 00281000
* OVERWRITTEN. 00282000
* 5. IF THE CURRENT CCW OP-CODE IS A TIC, SET THE 00283000
* CURRENT CCW POINTER TO THE DATA ADDRESS AND THEN 00284000
* PORCEED TO STEP 4. 00285000
* 6. IF THE OP-CODE IS NOT A SEARCH GO TO STEP 19. 00286000
* 7. IF THE OP-CODE OF THE NEXT CCW IS A TIC GO TO 00287000
* STEP 11. 00288000
* 8. VALIDATE DATA ADDRESS OF NEXT CCW (CURRENT CCW+8). 00289000
* 9. ADVANCE CCW POINTER BY 16. 00290000
* 10. GO TO STEP 4. 00291000
* 11. IF THE DATA ADDRESS OF THE TIC FOLLOWING THE SEARCH 00292000
* POINTS BACK TO THE SEARCH GO TO STEP 19. 00293000
* 12. SAVE AND CHANGE THE OP-CODE OF THE FIRST AND 00294000
* SECOND CCWS AFTER THE SEARCH TO NO-OPS. 00295000
* 13. REMOVE ALL CHAINING FLAGS FROM BOTH CCWS AFTER SEARCH. 00296000
* 14. EXECUTE ALL CCWS TO THIS POINT. 00297000
* 15. RESTORE OP-CODES FOR BOTH CCWS AFTER SEARCH. 00298000
* 16. IF THE SECOND CCW WAS OVERLAID PROCEED TO STEP 17; 00299000
* OTHERWISE RECHAIN THIS CCW IN CASE IT GETS 00300000
* RE-EXECUTED VIA A TIC. 00301000
* 17. IF THE SEARCH WAS SUCCESSFULL (LAST CHANNEL PROGRAM 00302000
* STOPED WITH CSW POINTING TO SECOND CCW) GO TO STEP 9. 00303000
* 18. SETCCW POINTER TO DATA ADDRESS OF THE TIC CCW 00304000
* AFTER THE SEARCH. 00305000
* 19. IF THE CHAIN DATA FLAG IS NOT ON GO TO STEP 26. 00306000
* 20. REMOVE ALL CHAINING FLAGS FROM THE CURRENT CCW. 00307000
* 21. TURN ON THE SILI FLAG TO PREVENT THE CHANNEL PROGRAM 00308000
* FROM TERMINATING FROM AN INCORRECT LENGTH INDICATION. 00309000
* 22. EXECUTE ALL CCWS TO THIS POINT. 00310000
* 23. IF THE CURRENT CCW WAS OVERLAID PROCEED TO STEP 24; 00311000
* OTHERWISE RECHAIN THIS CCW IN CASE IT GETS RE- 00312000
* EXECUTED VIA A TIC. 00313000
* 24. ADVANCE CCW POINTER BY 8. 00314000
* 25. GO TO STEP 4. 00315000
* 26. IF THE COMMAND CHAIN FLAG IS NOT ON IN THE CURRENT CCW 00316000
* GO TO STEP 31. 00317000
* 27. REMOVE ALL CHAINING FLAGS. 00318000
* 28. IS THIS CCW HAS BEEN PROCESSED BY THE IPL SIMULATOR 00319000
* BEFORE TURN THE SKIP FLAG OFF; OTHERWISE PROCEED. 00320000
* 29. EXECUTE ALL CCWS TO THIS POINT. 00321000
* 30. GO TO STEP 23. 00322000
* 31. RETURN TO STEP 7 IN MAIN PROLOG. 00323000
* 00324000
*. 00325000
SPACE 1 00326000
DISK EQU * 00327000
MVC CYLAD(2),IPLCYLNO SET CYLINDER NO 00328000
LA R1,SEEK RELOCATE CCW ADDRESSES 00329000
STCM R1,B'0111',DISKCCW+1 ... 00330000
LA R1,SEEK+2 ... 00331000
STCM R1,B'0111',DISKCCW+9 ... 00332000
LA R1,DISKCCW+8 ... 00333000
STCM R1,B'0111',DISKCCW+17 ... 00334000
LA R11,DISKCCW SET CCW POINTER TO LOAD-KEY CCW 00335000
BAL R12,IO GET THE 24 BYTES 00336000
MVI READCCW+4,CC+SILI+SKIP CHAIN TIC CCW TO IPLCCW1 00337000
LA R10,IPLCCW1 SET CCW POINTER TO USER'S CCW 00338000
NEXTDISK BAL R12,ADDRTEST VALIDATE CCW ADDRESS, PREVENT OVERLAY 00339000
TM 0(R10),X'08' IS COMMAND CODE A TIC? 00340000
BNO *+12 BRANCH IF NOT A TIC 00341000
TM 0(R10),X'07' ARE YOU SURE IT IS A TIC? 00342000
BZ TICDISK BRANCH IF IT IS A TIC 00343000
LA R1,LIST SET INDEX TO BEGIN OF LIST 00344000
LA R2,1 SET INCREMENT TO ONE BYTE 00345000
LA R3,LISTEND SET COMPARAND TO END OF LIST 00346000
LOOP1 CLC 0(1,R10),0(R1) IS OP-CODE A SEARCH? 00347000
BE SEARCH BRANCH IF YES 00348000
BXLE R1,R2,LOOP1 TEST NEXT IF NO 00349000
SPACE 00350000
* HERE IF OP-CODE IS NOT A SEARCH 00351000
CLI 0(R10),X'07' SEEK COMMAND ? 00352000
BNE *+6 NO 00353000
LR R11,R10 RESTART CHANNEL PROGRAM FROM HERE 00354000
TM 4(R10),CD IS THE CD FLAG SET 00355000
BO CDDISK BRANCH IF YES 00356000
TM 4(R10),CC IS CC FLAG SET? 00357000
BO CCDISK BRANCH IF YES 00358000
B IPLDONE EXECUTE THE LAST CCW 00359000
SPACE 00360000
* LIST OF ALL STANDARD DISK SEARCH CCW OPCODES 00361000
LIST EQU * 00362000
DC X'31' ID EQUAL 00363000
DC X'B1' ID EQUAL - MT 00364000
DC X'29' KEY EQUAL 00365000
DC X'A9' KEY EQUAL - MT 00366000
DC X'39' HOME ADDRESS EQUAL 00367000
DC X'B9' HOME ADDRESS EQUAL - MT 00368000
DC X'51' ID HIGH 00369000
DC X'D1' ID HIGH - MT 00370000
DC X'71' ID EQUAL OR HIGH 00371000
DC X'F1' ID EQUAL OR HIGH - MT 00372000
DC X'69' KEY EQUAL OR HIGH 00373000
DC X'E9' KEY EQUAL OR HIGH - MT 00374000
DC X'49' KEY HIGH 00375000
LISTEND DC X'C9' KEY HIGH - MT 00376000
SPACE 2 00377000
TICDISK DS 0H PROCESS TIC CCW 00378000
L R10,0(,R10) LOAD COMMAND CODE AND DATA ADDRESS 00379000
LA R10,0(,R10) ISOLATE DATA ADDRESS 00380000
B NEXTDISK EXAMINE NEXT CCW 00381000
SPACE 1 00382000
SEARCH EQU * PROCESS SEARCH CCW 00383000
TM 8(R10),X'08' IS NEXT OP-CODE A TIC 00384000
BZ SNOTIC BRANCH IF NOT 00385000
TM 8(R10),X'07' ARE YOU SURE IT IS A TIC? 00386000
BNZ SNOTIC BRANCH IF IT IS NOT A TIC 00387000
L R1,8(,R10) LOAD COMMAND CODE AND DATA ADDRESS 00388000
LA R1,0(,R1) ISOLATE DATA ADDRESS 00389000
CR R1,R10 IS IT A SEARCH-TIC LOOP? 00390000
BE SUPDATE BRANCH IF YES 00391000
SPACE 00392000
* HERE IF SEARCH IS FOLLOWED BY A TIC WHICH DOES NOT POINT 00393000
* BACK TO THE SEARCH. THE TWO CCWS AFTER THE SEARCH ARE 00394000
* CHANGED TO NO-OPS. ALL CCWS ARE EXECUTED AND THE CSW IS 00395000
* EXAMINED TO DETERMINE WHETHER THE SEARCH IS SUCCESSFULL. 00396000
MVI 8(R10),NOOP CHANGE TIC TO NOOP 00397000
NI 12(R10),X'FF'-CC INSURE NO COMMAND CHAINING 00398000
MVC OPCODE,16(R10) SAVE 2ND CCW OPCODE 00399000
MVI 16(R10),NOOP CHANGE 2ND CCW TO NOOP 00400000
TM 20(R10),CC COMMAND CHAINING IN 2ND CCW? 00401000
BNO *+12 BRANCH IF NO 00402000
NI 20(R10),X'FF'-CC TURN OFF COMMAND CHAINING 00403000
MVI 21(R10),HEXFF FLAG AS HAVING DONE SO 00404000
BAL R12,IO EXECUTE CCWS UP TO THIS POINT 00405000
MVI 8(R10),TIC RESTORE TIC OPCODE 00406000
MVC 16(1,R10),OPCODE RESTORE 2ND CCW OPCODE 00407000
CLI 21(R10),HEXFF DOES CHAINING HAVE TO BE TURNED BACK ON? 00408000
BNE *+12 NO 00409000
OI 20(R10),CC TURN COMMAND CHAINING BACK ON 00410000
MVI 21(R10),ZERO AND TURN FLAG OFF IN CASE CHAIN GETS *00411000
RESTARTED VIA TIC 00412000
L R2,CSW GET LAST CCW EXECUTED + 8 *00413000
(NOTING CSW KEY SHOULD BE ZERO) 00414000
LA R3,16(,R10) GET PTR TO 1ST CCW + 8 00415000
CR R2,R3 WAS SEARCH UNSUCCESSFULL? 00416000
BNE SUPDATE NO FOLLOW PRIMARY CHAIN 00417000
L R10,8(,R10) FOLLOW ALTERNATE CHAIN 00418000
LA R10,0(,R10) CLEAR HIGH BYTE 00419000
B NEXTDISK ... 00420000
SPACE 00421000
SUPDATE LA R10,16(,R10) INCREMENT POINTER BY TWO CCW'S 00422000
B NEXTDISK EXAMINE NEXT CCW 00423000
SPACE 1 00424000
SNOTIC EQU * HERE TO PROCESS NON-TIC CCW AFTER SEARCH 00425000
LR R1,R10 SAVE THE CONTENTS OF R10 00426000
LA R10,8(,R10) ISOLATE DATA ADDRESS OF NEXT CCW 00427000
BAL R12,ADDRTEST VALIDATE CCW'S ADDRESS 00428000
LR R10,R1 RESTORE R10 00429000
B SUPDATE BRANCH TO UPDATE CCW ADDRESS 00430000
SPACE 00431000
CCDISK EQU * HERE TO PROCESS COMMAND CHAINING FLAG 00432000
NI 4(R10),X'FF'-CC DECHAIN CCW 00433000
TS 5(R10) IPL SIMULATOR FIDDLED? 00434000
BZ *+8 NO 00435000
NI 4(R10),X'FF'-SKIP ASSUME IPL TURNED THE SKIP FLAG ON 00436000
BAL R12,IO EXECUTE ALL CCW'S UP TO THIS POINT 00437000
CLI 5(R10),HEXFF DID CURRENT CCW GET OVERLAID? 00438000
BNE NOCHAIN YES @VA09681 00439100
CLI 0(R10),X'05' WRITE COMMAND? @VA09681 00439200
BNE CCNOWRT NO @VA09681 00439300
MVI 0(R10),X'06' CHANGE TO READ COMMAND FOR SKIP @VA09681 00439400
* TO BE EFFECTIVE 00439500
CCNOWRT DS 0H @VA09681 00439600
OI 4(R10),CC+SKIP RECHAIN CCW 00440000
NOCHAIN DS 0H @VA09681 00440100
LA R10,8(,R10) ADVANCE CCW POINTER 00441000
B NEXTDISK EXAMINE NEXT CCW 00442000
SPACE 00443000
CDDISK EQU * PROCESS DATA CHAINING FLAG 00444000
NI 4(R10),X'FF'-(CD+CC) DECHAIN THE CCW 00445000
OI 4(R10),SILI PREVENT INCORRECT LENGTH INDICATION *00446000
CAUSED BY A PARTIAL READ 00447000
MVI 5(R10),HEXFF FLAG CURRENT CCW 00448000
BAL R12,IO EXECUTE ALL CCW'S TO THIS POINT 00449000
CLI 5(R10),HEXFF DID CURRENT CCW GET OVERLAID? 00450000
BNE *+8 YES 00451000
OI 4(R10),CD RECHAIN THE CCW 00452000
LA R10,8(,R10) ADVANCE THE CCW POINTER 00453000
B NEXTDISK EXAMINE THE NEXT CCW 00454000
EJECT 00455000
*. 00456000
* OPERATION OF TAPE IPL SIMULATION - 00457000
* 00458000
* 1. ISSUE A SENSE CCW TO DETERMINE WHETHER THE TAPE IS 7 OR 00459000
* 9 TRACK. 00460000
* 2. IF THE TAPE IS 7 TRACK ISSUE A MODE SET CCW TO SET THE 00461000
* DEFAULT CHARACTERISTICS. 00462000
* 3. READ FIRST 24 BYTES INTO VIRTUAL LOCATION X'0'. 00463000
* 4. SET THE CCW POINTER TO START INTERPRETATION OF THE CCW 00464000
* LOCATED AT VIRTUAL LOCATION X'8'. 00465000
* 5. VALIDATE THE DATA ADDRESS OF THE CURRENT CCW TO INSURE 00466000
* THAT THE IPL SIMULATOR DOES NOT GET OVERWRITTEN. 00467000
* 6. IF THE CURRENT CCW OP-CODE IS A TIC, SET THE 00468000
* CURRENT CCW POINTER TO THE DATA ADDRESS AND THEN PROCEED 00469000
* TO STEP 5. 00470000
* 7. IF THE CHAIN DATA FLAG IN THE CURRENT CCW IS NOT ON 00471000
* GO TO STEP 17. 00472000
* 8. RESET ALL CHAINING FLAGS IN THE CURRENT CCW. 00473000
* 9. TURN ON THE SILI FLAG TO PREVENT THE CHANNEL 00474000
* PROGRAM FROM TERMINATING FROM AN INCORRECT LENGTH 00475000
* INDICATION. 00476000
* 10. VALIDATE THE CCW DATA ADDRESS. 00477000
* 11. EXECUTE THE CCW STRING. 00478000
* 12. IF THE CURRENT CCW WAS OVERLAID PROCEED TO STEP 00479000
* 13; OTHERWISE RECHAIN THE CCW IN CASE IT GETS RE- 00480000
* EXECUTED VIA A TIC. 00481000
* 13. EXECUTE A BACK SPACE RECORD CCW. 00482000
* 14. ADVANCE CCW POINTER BY 8. 00483000
* 15. IF THE CHAIN DATA FLAG IS ON GO TO STEP 8. 00484000
* 16. IF THE COMMAND CHAIN FLAG IS NOT ON GO TO STEP 21; 00485000
* OTHERWISE GO TO STEP 18. 00486000
* 17. IF THE COMMAND CHAIN FLAG IS NOT ON GO TO STEP 21. 00487000
* 18. RESET ALL CHAINING FLAGS. 00488000
* 19. EXECUTE CCW STRING. 00489000
* 20. IF THE CURRENT CCW WAS OVERLAID PROCEED TO STEP 21; 00490000
* OTHERWISE RECHAIN THE CCW IN CASE IT GETS RE- 00491000
* EXECUTED VIA A TIC. 00492000
* 21. RETURN TO STEP 7 IN MAIN PROLOG. 00493000
* 00494000
*. 00495000
SPACE 1 00496000
TAPE EQU * 00497000
LA R11,SENSE LOAD IO REG FOR SENSE OPERATION 00498000
BAL R12,IO EXECUTE A SENSE 00499000
TM SENSDATA+1,X'10' IS TAPE A 7 OR 9 TRACK? 00500000
BO SEVENTK BRANCH IF SEVEN TRACK 00501000
SPACE 00502000
* HERE IF UNIT IS A NINE TRACK DRIVE 00503000
LA R11,TAPE9CCW SET LOAD-KEY CCW POINTER 00504000
BAL R12,IO EXECUTE THE LOAD-KEY CCW 00505000
LA R10,IPLCCW1 SET POINTER TO FIRST USER CCW 00506000
LA R9,NEXTAPE9 INITIALIZE THE RETURN FROM CC AND CD 00507000
NEXTAPE9 LR R11,R10 SET POINTER FOR ADDRESS TEST 00508000
BAL R12,ADDRTEST VALIDATE THE CCW ADDRESS 00509000
TM 0(R11),X'08' IS OPCODE A TIC? 00510000
BNO *+12 BRANCH IF NOT 00511000
TM 0(R11),X'07' ARE YOU SURE IT IS A TIC? 00512000
BZ TICTAPE BRANCH IF IT IS A TIC 00513000
TM 4(R11),CD IS THE CD FLAG SET? 00514000
BO CDTAPE BRANCH IF YES 00515000
TM 4(R11),CC IS THE CC FLAG SET? 00516000
BO CCTAPE BRANCH IF YES 00517000
B IPLDONE EXECUTE THE LAST CCW 00518000
SPACE 00519000
SEVENTK EQU * HERE IF UNIT IS A SEVEN TRACK DRIVE 00520000
LA R2,TAPE9CCW ADDRESS OF LOAD-KEY CCW 00521000
STCM R2,B'0111',TTICCCW+1 STORE ADDRESS IN TAPE TIC 00522000
LA R11,TAPE7CCW ADDRESS OF SET MODE CCW 00523000
BAL R12,IO GET LOAD-KEY 24 BYTES 00524000
LA R9,NEXTAPE7 SAVE EXIT ADDRESS FROM CD AND CC 00525000
LA R10,IPLCCW1 POINTER TO FIRST USER CCW 00526000
NEXTAPE7 STCM R10,B'0111',TTICCCW+1 STORE ADDRESS IN TAPE TIC 00527000
BAL R12,ADDRTEST VALIDATE THE CCW ADDRESS 00528000
TM 0(R10),X'08' IS CCW A TIC? 00529000
BNO *+12 BRANCH IF IT IS NOT 00530000
TM 0(R10),X'07' ARE YOU SURE IT IS A TIC? 00531000
BZ TICTAPE BRANCH IF IT IS A TIC 00532000
TM 4(R10),CD IS CD FLAG SET? 00533000
BO CDTAPE BRANCH IF YES 00534000
TM 4(R10),CC IS CC FLAG SET? 00535000
BO CCTAPE BRANCH IF YES 00536000
B IPLDONE EXECUTE THE LAST CCW 00537000
SPACE 1 00538000
TICTAPE EQU * HERE TO PROCESS TIC CCW 00539000
L R10,0(,R10) LOAD OPCODE AND DATA ADDRESS 00540000
LA R10,0(,R10) ISOLATE DATA ADDRESS 00541000
BR R9 RETURN TO CALLER 00542000
SPACE 1 00543000
CDTAPE EQU * HERE TO PROCESS DATA CHAINING CCW 00544000
NI 4(R10),X'FF'-(CD+CC) DECHAIN CCW 00545000
OI 4(R10),SILI PROTECT FROM PARTIAL READ 00546000
MVI 5(R10),HEXFF FLAG CURRENT CCW 00547000
BAL R12,ADDRTEST VALIDATE THE CCW ADDRESS 00548000
BAL R12,IO EXECUTE CCW'S CONSTRUCTED TO HERE 00549000
CLI 5(R10),HEXFF DID CURRENT CCW GET OVERLAID? 00550000
BNE *+8 YES 00551000
OI 4(R10),CD RECHAIN CCW TO OTHERS 00552000
LR R4,R11 SAVE R11 IN R 4 00553000
LA R11,BACKSPAC GET ADDRESS OF BACKSPACE CCW 00554000
BAL R12,IO EXECUTE A TAPE BACKSPACE 00555000
LR R11,R4 RESTORE R11 00556000
LA R10,8(,R10) ADVANCE POINTER TO NEXT CCW 00557000
TM 4(R10),CD IS CD FLAG SET? 00558000
BO CDTAPE BRANCH IF YES 00559000
TTESTCC TM 4(R10),CC IS CC FLAG SET? 00560000
BZ IPLDONE BRANCH IF NOT 00561000
BAL R12,ADDRTEST VALIDATE THE CCW ADDRESS 00562000
CCTAPE NI 4(R10),X'FF'-CC DECHAIN CCW 00563000
MVI 5(R10),HEXFF FLAG CURRENT CCW 00564000
BAL R12,IO EXECUTE THE CHAIN DATA STRING 00565000
CLI 5(R10),HEXFF DID CURRENT CCW GET OVERLAID? 00566000
BNE *+8 YES 00567000
OI 4(R10),CC RESET THE FLAG FOR RE-EXECUTION *00568000
IF CHAIN GETS RESTARTED VIA TIC 00569000
LA R10,8(,R10) ADVANCE THE CCW POINTER 00570000
BR R9 RETURN TO CALLER 00571000
EJECT 00572000
*. 00573000
* OPERATION OF THE IO SUBROUTINE - 00574000
* 00575000
* 1. SET CAW WITH CURRENT CCW POINTER. 00576000
* 2. SAVE CSW. 00577000
* 3. ISSUE SIO. 00578000
* 4. IF THE CONDITION CODE IS 0 GOTO STEP 10. 00579000
* 5. IF THE CONDITION CODE IS 2 OR 3 PRINT "SIO ERROR" MSG. 00580000
* 6. SAVE CSW. 00581000
* 8. IF UNIT CHECK, GOTO STEP 22. 00582000
* 9. IF CHANNEL END NOT RECEIVED, GO BACK TO STEP 3. 00583000
* 10. ISSUE TIO. 00584000
* 11. IF THE CONDITION CODE IS 0 GOTO STEP 18. 00585000
* 12. IF THE CONDITION CODE IS 2 GO BACK TO STEP 10. 00586000
* 13. IF THE CONDITION CODE IS 3 PRINT "IPL TIO ERROR" MSG. 00587000
* 14. IF THE DEVICE IS BUSY GO BACK TO STEP 10. 00588000
* 15. COMBINE CSW WITH PREVIOUSLY SAVED CSW. 00589000
* 16. IF THERE ARE ANY CHANNEL ERRORS OR UNEXPECTED STATUS, 00590000
* PRINT THE "IPL UNIT ERROR" MSG. 00591000
* 17. IF CHAN. END REC'D WITHOUT DEV. END, GO BACK TO STEP 10. 00592000
* 18. IF UNIT CHECK RECEIVED, GO TO STEP 22. 00593000
* 19. RESTORE CSW. 00594000
* 20. IF THE CURRENT CAW WAS OVERLAID DURING THE I/O OPERATION, 00595000
* SAVE ITS MOST RECENT VALUE. 00596000
* 21. RETURN. 00597000
* 22. ISSUE SENSE. IF UNIT CHECK WAS FOR UNUSUAL COMMAND 00598000
* SEQUENCE ON 2540 READER, IGNORE IT AND RETURN. OTHERWISE 00599000
* ISSUE APPROPRIATE ERROR MSG. 00600000
* 00601000
*. 00602000
SPACE 1 00603000
IO EQU * 00604000
ST R11,CAW STORE CCW ADDRESS IN CAW 00605000
LM R5,R6,CSW SAVE CSW 00606000
RESTART EQU * @VA02796 00607000
XC CSWSAVE(8),CSWSAVE CLEAR CSW SAVE AREA @VA02796 00608000
SIO 0(R13) START UP DEVICE @VA02796 00609000
BC 8,INTTEST DRAIN INTERRUPT @VA02796 00610000
BC 3,SIOERR BUSY OR NOT OPERATIONAL...ERROR @VA02796 00611000
MVC CSWSAVE(8),CSW SAVE ENTIRE CSW @VA02796 00612000
TM CSW+4,UC UNIT CHECK? @VA02796 00613000
BO DOSENSE YES, GO DO SENSE @VA02796 00614000
TM CSW+5,255-IL ANY CHANNEL ERRORS? @VA04206 00615000
BNZ UNITERR YES, ERROR @VA04206 00616000
TM CSW+4,CE CHANNEL END? @VA02796 00617000
BZ RESTART NO, RETRY THE START I/O @VA02796 00618000
SPACE 1 00619000
INTTEST EQU * @VA02796 00620000
LM R5,R6,CSW SAVE CONTENTS OF CSW @VA04372 00620500
TIO 0(R13) DRAIN INTERRUPT @VA02796 00621000
BC 8,UCHKTEST NO INTERRUPT @VA02796 00622000
BC 2,INTTEST BUSY...LOOP BACK @VA02796 00623000
BC 1,TIOERR NOT OPERATIONAL...ERROR @VA02796 00624000
TM CSW+4,BUSY STILL BUSY? @VA02796 00625000
BO INTTEST YES, RETRY @VA02796 00626000
CSWJOIN EQU * @VA04372 00626500
OC CSWSAVE(8),CSW COMBINE CSW WITH PREVIOUS @VA02796 00627000
TM CSW+5,255-IL CHANNEL ERRORS? @VA02796 00628000
BNZ UNITERR YES @VA02796 00629000
TM CSW+4,ATTN+UE+SM UNEXPECTED STATUS? @VA02796 00630000
BNZ UNITERR YES...ERROR @VA02796 00631000
TM CSWSAVE+4,CE HAVE WE GOTTEN CHANNEL END? @VA02796 00632000
BZ UCHKTEST NO @VA02796 00633000
TM CSW+4,DE YES - DEVICE END TOO? @VA02796 00634000
BNZ UCHKTEST YES @VA04372 00634200
DEVTIO EQU * @VA04372 00634400
TIO 0(R13) WAIT FOR DEVICE END @VA04372 00634600
BC 8,UCHKTEST NO INTERRUPT @VA04372 00634800
BC 2,DEVTIO BUSY...HANG IN THERE @VA04372 00635000
BC 1,TIOERR NOT OPERATIONAL...ERROR @VA04372 00635200
TM CSW+4,BUSY STILL BUSY? @VA04372 00635400
BO DEVTIO YES...HANG IN THERE SOME MORE @VA04372 00635600
B CSWJOIN JOIN CODE TO TEST STATUS @VA04372 00635800
SPACE 1 00636000
UCHKTEST EQU * @VA02796 00637000
TM CSWSAVE+4,UC UNIT CHECK? @VA02796 00638000
BO DOSENSE YES, GO DO SENSE @VA02796 00639000
STM R5,R6,CSW RESTORE SAVED CSW 00640000
C R11,CAW HAS THE CAW BEEN OVERLAYED? 00641000
BCR 8,R12 (BER) BRANCH IF NOT 00642000
MVC SAVECAW,CAW SAVE MOST RECENT CAW 00643000
BR R12 RETURN TO CALLER 00644000
SPACE 00645000
DOSENSE EQU * 00646000
C R11,CAW HAS THE CAW BEEN OVERLAID? 00647000
BE *+10 NO 00648000
MVC SAVECAW,CAW SAVE MOST RECENT CAW 00649000
LA R0,SENSE SET SENSE CCW 00650000
ST R0,CAW ... 00651000
SIO 0(R13) EXECUTE CCW 00652000
BC 7,SIOERR BRANCH IF BAD START 00653000
TIO 0(R13) DRAIN INTERRUPT 00654000
BC 2,*-4 BRANCH IF STILL BUSY 00655000
BC 9,TIOERR BRANCH IF BAD EXECUTION 00656000
CLI CSW+4,CE+DE DID SENSE GET CHANNEL END AND DEVICE END 00657000
BNE SENSERR BRANCH IF IT DID NOT 00658000
CLI TYPE,TYP2540R IS DEVICE READER? 00659000
BNE UNITERR NO, GIVE ERROR MESSAGE 00660000
TM SENSDATA,UNUSUAL UNUSUAL COMMAND SEQUENCE ? 00661000
BNO UNITERR NO, GIVE ERROR MESSAGE 00662000
STM R5,R6,CSW RESTORE LATEST CSW 00663000
BR R12 YES, IGNORE 00664000
EJECT 00665000
*. 00666000
* OPERATION OF THE ADDRTEST SUBROUTINE - 00667000
* 00668000
* 1. IF CURRENT CCW IS A READ BACKWARD PROCEED TO STEP 6. 00669000
* 2. IF THE CURRENT CCW DATA ADDRESS 00670000
* IS GREATER THAN OR EQUAL TO THE 00671000
* ADDRESS OF THE END OF THE IPL SIMULATOR RETURN. 00672000
* 3. IF THE CURRENT CCW DATA ADDRESS PLUS THE CURRENT 00673000
* CCW COUNT IS LESS THAN OR EQUAL TO THE STARTING 00674000
* ADDRESS OF THE IPL SIMULATOR RETURN. 00675000
* 4. PRINT ERROR MESSAGE "DMKVMI233 IPL OVERLAY ERROR". 00676000
* 5. LOAD DISABLED WAIT STATE PSW. 00677000
* 6. IF THE CURRENT CCW DATA ADDRESS IS LESS THAN THE START 00678000
* OF THE IPL SIMULATOR RETURN. 00679000
* 7. IF THE CURRENT CCW DATA ADDRESS MINUS THE CURRENT CCW 00680000
* COUNT IS EQUAL TO OR GREATER THAN THE END OF THE IPL 00681000
* SIMULATOR RETURN. 00682000
* 8. GO TO STEP 4. 00683000
* 00684000
*. 00685000
SPACE 1 00686000
ADDRTEST EQU * 00687000
L R2,0(,R10) LOAD COMMAND CODE AND DATA ADDRESS 00688000
LA R2,0(,R2) ISOLATE DATA ADDRESS 00689000
LA R3,SIMEND LOAD HIGHEST SIMULATOR ADDRESS 00690000
TM 0(R10),X'0C' IS CCW A READ BACKWARD? 00691000
BNO UPTEST NO 00692000
TM 0(R10),X'03' ARE YOU SURE? 00693000
BNZ UPTEST YES 00694000
CR R2,R15 IS DATA START LOWER THAN IPL START? 00695000
BCR 4,R12 (BLR) BRANCH IF YES (NO OVERLAY) 00696000
SLR R7,R7 CLEAR A REGISTER @VA04700 00697100
ICM R7,B'0011',6(R10) GET CCW DATA COUNT @VA04700 00697200
SR R2,R7 FIND END OF DATA @VA04700 00697300
CR R2,R3 IS THE END OF DATA IN THE SIMULATOR? 00698000
BL OVERLAY YES 00699000
BR R12 RETURN TO CALLER 00700000
SPACE 00701000
UPTEST CR R2,R3 IS DATA START HIGHER THAN SIMEND? 00702000
BCR 11,R12 (BNLR) RETURN, NO OVERLAY IF >= @VA00869 00703000
SLR R7,R7 CLEAR A REGISTER @VA04700 00704100
ICM R7,B'0011',6(R10) GET CCW DATA COUNT @VA04700 00704200
AR R2,R7 ADD COUNT TO START @VA04700 00704300
CR R2,R15 IS THE END OF DATA IN THE SIMULATOR? 00705000
BH OVERLAY YES, GO TREAT OVERLAY @VA00869 00706000
BR R12 RETURN TO CALLER 00707000
EJECT 00708000
* ERROR MESSAGES AND PRINT / DIE ROUTINE 00709000
SPACE 00710000
SIOERR EQU * 00711000
LA R4,ERRSIO LOAD MESSAGE ADDRESS 00712000
LA R5,L'ERRSIO LOAD MESSAGE LENGTH 00713000
B PRINT PRINT ERROR AND DIE 00714000
SPACE 00715000
TIOERR EQU * 00716000
LA R4,ERRTIO LOAD MESSAGE ADDRESS 00717000
LA R5,L'ERRTIO LOAD MESSAGE LENGTH 00718000
B PRINT PRINT ERROR AND DIE 00719000
SPACE 00720000
UNITERR EQU * 00721000
LA R4,ERRMESS LOAD MESSAGE ADDRESS 00722000
LA R5,ERRLNTH1 GET MESSAGE LENGTH *00723000
(ASSUME SHORT MESSAGE FIRST) 00724000
UNPK ERRCSW(9),CSWSAVE(5) CONSTRUCT MESSAGE 00725000
TR ERRCSW(8),TRTBL ... 00726000
MVI ERRCSW+8,C' ' ... 00727000
UNPK ERRCSW+9(9),CSWSAVE+4(5) ... 00728000
TR ERRCSW+9(8),TRTBL ... 00729000
TM CSWSAVE+4,UC UNIT CHECK ON? 00730000
BNO PRINT NO, PRINT MESSAGE WITHOUT SENSE INFO 00731000
MVI ERRSENSM,C',' RESTORE COMMA 00732000
UNPK ERRSENS(13),SENSDATA(7) ... 00733000
UNPK ERRSENS+12(13),SENSDATA+6(7) ... 00734000
UNPK ERRSENS+24(13),SENSDATA+12(7) ... 00735000
UNPK ERRSENS+36(13),SENSDATA+18(7) ... 00736000
TR ERRSENS(48),TRTBL ... 00737000
LA R5,L'ERRSENSM(,R5) SENSE MSG LENGTH @VM08862 00738000
LA R0,24 MAXIMUN SENSE LENGTH @VM08862 00739000
SH R0,CSW+6 SUBSTRACT RESIDUAL COUNT @VM08862 00740000
CL R0,=F'24' OVER MAXIMUN ? @VM08862 00741000
BL *+8 LESS THAN 24 BYTES BRANCH @VM08862 00742000
L R0,=F'24' USE DEFAULT OF 24 BYTES @VM08862 00743000
SLL R0,1 TIMES 2 FOR BYTE COUNT @VM08862 00744000
AR R5,R0 ADD TO MESSAGE LENGTH @VM08862 00745000
B PRINT GO PRINT SENSE MESSAGE @VM08862 00746000
UNITERRT TM TYPE,TYP2401+TYP2415+TYP2420 2400 TAPE DRIVE ? 00747000
BM PRINT BRANCH IF YES (6 SENSE BYTES) 00748000
LA R5,36(,R5) 24 SENSE BYTES 00749000
B PRINT 00750000
SPACE 00751000
OVERLAY EQU * 00752000
LA R4,ERRLAY LOAD MESSAGE ADDRESS 00753000
LA R5,L'ERRLAY LOAD MESSAGE LENGTH 00754000
B PRINT PRINT ERROR AND DIE 00755000
SPACE 00756000
SENSERR EQU * 00757000
LA R4,SENSMESS LOAD MESSAGE ADDRESS 00758000
LA R5,L'SENSMESS LOAD MESSAGE LENGTH 00759000
B PRINT PRINT ERROR AND DIE 00760000
SPACE 00761000
PRINT EQU * 00762000
LA R0,PRINTCCW GET THE CCW ADDRESS 00763000
ST R0,CAW TELL THE CHANNEL WHERE IT IS 00764000
TM CODEBYTE,VMMCODE+VMMTEXT RECEIVING CODE & TEXT ? 00765000
BZ WAITDIE NO -- NO MSG 00766000
BO SETCNT YES -- ALL OF MSG 00767000
TM CODEBYTE,VMMCODE CODE ? 00768000
BO PRCODE YES -- 00769000
LA R4,11(,R4) SET FOR MSG TEXT ONLY @VA05494 00770100
SH R5,=H'11' ADJUST LENGTH @VA05494 00771100
B SETCNT 00772000
PRCODE EQU * 00773000
LA R5,10 LENGTH FOR MSG CODE ONLY @VA05494 00774100
SETCNT EQU * 00775000
STH R5,PRINTCCW+6 STORE MSG COUNT IN CCW 00776000
ST R4,PRINTCCW STORE MESSAGE ADDRESS IN PRINT CCW 00777000
MVI PRINTCCW,X'09' LOAD CONSOLE OP-CODE 00778000
TIO 0(R14) CLEAR ANY PENDING INTERRUPTS 00779000
BC 4+2,*-4 CC=1, CC=2 CSW STORED OR BUSY 00780000
SIO 0(R14) SEND ERROR TO USER CONSOLE 00781000
CNOP 4,8 SET ALLIGNMENT FOR LPSW 00782000
SPACE 00783000
WAITDIE LPSW *+4 00784000
DC XL2'0002' INTERRUPS OFF, WAIT ON 00785000
DC XL6'00' 00786000
EJECT 00787000
IPLDONE EQU * HERE IF ALL CCW'S ARE PRESENT AND VALIDATED 00788000
* AFTER EXECUTION CONTROL WILL BE PASSED TO THE USER VIA 00789000
* THE PSW IN LOCATION 0 (AFTER STORING THE IPL DEVICE 00790000
* ADDRESS IN THE INTERRUPT CODE FIELD OF THE IPLPSW) 00791000
BAL R12,IO EXECUTE THE LAST CCW 00792000
TM FLAG2,IPLST IPLSTOP REQUESTED? 00793000
BZ LOADNOW NO - DON'T DO IT 00794000
UNPK CPARG(6+1),IPLPSW+5(3+1) GET PSW ADDR IN EBCDIC @V200930 00795000
TR CPARG(6),TAB-C'0' TANSLATE TO EBCDIC @V200930 00796000
MVI CPARG+6,C' ' ADD A BLANK AT THE END @V200930 00797000
LA R0,CPCOM COMMAND ADDRESS @V200930 00798000
LA R1,14 LENGTH OF ADSTOP COMMAND @V200930 00799000
DC X'83010008' DIAGNOSE TO ISSUE ADSTOP @V200930 00800000
LOADNOW EQU * 00801000
TM IPLPSW+1,EXTMODE EXTENDED MODE? 00802000
BO *+12 YES 00803000
STH R13,IPLPSW+2 SET IPL DEVICE ADDRESS 00804000
B *+8 00805000
STH R13,INTTIO SET IPL DEVICE ADDRESS IN EXT MODE 00806000
MVC CAW(4),SAVECAW RESTORE USER'S CAW 00807000
LM R0,R15,SAVEREGS RESTORE THE USER'S REGISTERS 00808000
LPSW IPLPSW AND AWAY WE GO 00809000
FLAG2 DC XL1'00' FLAG TO DETERMINE IF STOP TO BE SET 00810000
CPCOM DC CL7'ADSTOP ' @V200930 00811000
CPARG DC CL7'000000 ' @V200930 00812000
TAB DC C'0123456789ABCDEF' HEX TRANSLATE TABLE @V200930 00813000
EJECT 00814000
* CONSTANTS 00815000
SPACE 00816000
SENSE CCW X'04',SENSDATA-DMKVMI,SILI,24 SENSE CCW 00817000
SPACE 1 00818000
PRINTCCW CCW X'09',*-*,SILI,0 CONSOLE ERROR MESSAGE CCW 00819000
SPACE 1 00820000
BACKSPAC CCW X'27',0,SILI,1 TAPE BACKSPACE FOR READ DATA 00821000
SPACE 1 00822000
TAPE7CCW CCW X'93',0,CC+SILI,1 7 TRACK TAPE MODE-SET CCW 00823000
TTICCCW CCW X'08',*-*,SILI,1 TIC TO 7 TRACK TAPE OPERATION 00824000
SPACE 1 00825000
CARDCCW EQU * LOAD KEY CCW FOR CARD READER 00826000
TAPE9CCW CCW X'02',0,SILI,24 LOAD KEY CCW FOR TAPE 00827000
SPACE 1 00828000
DISKCCW CCW X'07',SEEK-DMKVMI,CC+SILI,6 SEEK 00829000
CCW X'31',SEEK+2-DMKVMI,CC+SILI,5 SEARCH 00830000
CCW X'08',*-8-DMKVMI,0,1 TIC 00831000
READCCW CCW X'06',0,SILI,24 READ DATA 00832000
CCW X'08',IPLCCW1-PSA,0,1 TIC TO USER'S IPLCCW1 00833000
SPACE 1 00834000
CSWSAVE DS 1D SAVE CSW FOR ERROR ANALYSIS 00835000
SPACE 00836000
LTORG 00837000
* FULLWORDS 00838000
SAVECAW DS F 00839000
SAVEREGS DS 16F 00840000
SPACE 00841000
* UNALIGNED DATA GOES AFTER THIS POINT 00842000
ERRSIO DC C'DMKVMI230E IPL SIO ERROR' @VA04551 00843000
ERRTIO DC C'DMKVMI231E IPL TIO ERROR' @VA04551 00844000
ERRMESS DC C'DMKVMI232E IPL UNIT ERROR, CSW=' @VA04551 00845000
ERRCSW DC C'XXXXXXXX XXXXXXXX' 00846000
ERRLNTH1 EQU *-ERRMESS LENGTH OF SHORT MESSAGE 00847000
ERRSENSM DC C', SENSE=' 00848000
ERRSENS DC C'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' 00849000
DS X 00850000
ERRLAY DC C'DMKVMI233E IPL OVERLAY ERROR' @VA04551 00851000
ERRTYP DC C'DMKVMI022E VADDR MISSING OR INVALID' @VA04551 00852000
SENSMESS DC C'DMKVMI234E IPL SENSE ERROR' @VA04551 00853000
SENSDATA DC XL24'0' AREA FOR SENSE DATA 00854000
SEEK DC XL7'1' BBCCHHR 00855000
CYLAD EQU SEEK+2 00856000
OPCODE DS XL1 OPCODE SAVE AREA 00857000
CLASS DS 1X IPL DEVICE CLASS 00858000
TYPE DS 1X IPL DEVICE TYPE 00859000
CODEBYTE DS 1X ERROR LEVEL CODE BYTE 00860000
TRTBL EQU *-C'0' TRANSLATE TABLE TO CONVERT TO HEX 00861000
DC C'0123456789ABCDEF' 00862000
SPACE 00863000
SIMEND EQU * END OF IPL SIMULATOR CODE 00864000
EJECT 00865000
* EQUATES 00866000
ZERO EQU X'00' 00867000
HEXFF EQU X'FF' OVERLAY ANALYSIS FLAG BYTE 00868000
NOOP EQU 3 NOOP CCW OPCODE 00869000
TIC EQU 8 TIC CCW OPCODE 00870000
UNUSUAL EQU X'02' UNUSUAL SENSE BYTE FROM 2821 CONTROL UNIT 00871000
SPACE 2 00872000
LTORG 00873000
EJECT 00874000
COPY EQU 00875000
COPY DEVTYPES 00876000
COPY VMBLOK 00877000
PSA 00878000
EJECT 00879000
ORG IPLPSW 00880000
SPACE 00881000
IPLCYLNO DS H VIRTUAL IPL CYLINDER NUMBER @VM08862 00882000
IPLADDR DS H IPL DEVICE ADDRESS 00883000
IPLSAVE DS F SAVE AREA FOR R15 AT ENTRY TO IPL 00884000
IPLERRCD DS X VMMLEVEL BYTE FROM USER'S VMBLOK 00885000
DS XL1 DON'T WANT TO OVERLAY IPL STOP FLAG 00886000
FLAG1 DS XL1 FLAG FOR IPLSTOP STORED HERE 00887000
IPLST EQU X'80' BIT ONE IN THE FLAG BYTE 00888000
END 00889000