TQQ TITLE 'DMSTQQ (CMS) VM/370 - RELEASE 6' 00001000 SPACE 2 00002000 *. 00003000 * MODULE NAME: 00008000 * 00009000 * DMSTQQ 00010000 * 00011000 * SUBROUTINE NAME: 00012000 * 00013000 * DMSTQQ 00014000 * 00015000 * FUNCTION: 00016000 * 00017000 * TO ALLOCATE A 200-BYTE FIRST CHAIN LINK (FCL) TO A 00018000 * CALLING PROGRAM. 00019000 * 00020000 * ATTRIBUTES: 00021000 * 00022000 * REENTRANT, NUCLEUS-RESIDENT. 00023000 * 00024000 * ENTRY POINTS: 00025000 * 00026000 * DMSTQQ 00027000 * 00028000 * CALLING SEQUENCE: 00029000 * 00030000 * L R15, AQQTRK WHERE AQQTRK=V(DMSTQQ) 00031000 * BALR R14, R15 00032000 * 00033000 * ENTRY CONDITIONS: 00034000 * 00035000 * R1 MUST POINT TO ACTIVE DISK TABLE BLOCK 00036000 * R13 MUST POINT TO FVS AREA 00037000 * 00038000 * EXIT CONDITIONS: 00039000 * 00040000 * NORMAL RETURN 00041000 * 00042000 * R1 CONTAINS DISK-ADDRESS OF AVAILABLE 200-BYTE AREA. 00043000 * (SEE FIGURE 24 FOR FORMAT) 00044000 * R15=0 (AND CONDITION-CODE=0) 00045000 * 00046000 * NO 200 BYTE AREA AVAILABLE (ERROR 1) 00047000 * 00048000 * R1=0 00049000 * R15=1 (AND CONDITION-CODE=2) 00050000 * 00051000 * ERROR BY CALLER (ERROR 2) 00052000 * 00053000 * R1 SAME AS AT ENTRY 00054000 * R15=2 (AND CONDITION-CODE=2) 00055000 * 00056000 * CALLS TO OTHER ROUTINES: 00057000 * 00058000 * DMSTRKA, DMSTRKX 00059000 * 00060000 * EXTERNAL REFERENCES: 00061000 * 00062000 * ADTSECT, FVSECT, DMSNUC 00063000 * 00064000 * TABLES/WORKAREAS: 00065000 * 00066000 * NONE 00067000 * 00068000 * REGISTER USAGE: 00069000 * 00070000 * R13, FVSECT 00071000 * R11, BASE 00072000 * R1 , ADSTSECT 00073000 * REST WORK 00074000 * MACROS USED: 00075000 * 00076000 * ADT, FVS 00077000 * 00078000 * OPERATION: 00079000 * 00080000 * DMSTQQ FIRST CHECKS TO SEE THAT THE DISK IS LOGGED IN 00081000 * AND READ/WRITE. THE QQMASK TABLE IN THE ADT IS THEN 00082000 * SEARCHED FOR AN AVAILABLE ENTRY. IF ONE IS FOUND, 00083000 * THE ADDRESS IN THE TABLE ENTRY IS RETURNED TO THE 00084000 * CALLER IN REGISTER 1 AND THE ENTRY IN THE TABLE IS 00085000 * ZEROED. IF NO ENTRY IS FOUND, DMSTRKA IS CALLED TO 00086000 * GET ANOTHER 800-BYTE BLOCK ADDRESS. 00087000 * AN ENTRY WILL BE FOUND ONLY FOR A 2314. IF THE 00088100 * DEVICE IS NOT A 2314 OR IF THE BLOCK NUMBER IS GREATER 00088200 * THAN 8191 THE ENTIRE BLOCK IS RETURNED TO THE CALLER. 00090000 * IF THE BLOCK NUMBER IS NOT GREATER THAN 8191, THE 00091000 * ADDRESS OF THE LAST 200 BYTES IS RETURNED TO THE 00092000 * CALLER, AND THE ADDRESSES OF THE FIRST 3 SLOTS ARE 00093000 * PUT IN THE QQMASK TABLE. 00094000 * 00095000 * NOTES: AT ENTRY, DMSTQQ CHECKS THAT THE POINTER TO 00096000 * ADT BLOCK IN R1 IS POSITIVE AND NONZERO, THAT THE 00097000 * DISK REFERENCED THEREBY IS READ-WRITE, AND THAT THE 00098000 * USER FILE DIRECTORY, INCLUDING THE QQMSK TABLE, IS 00099000 * INDEED IN MEMORY. 00100000 * 00101000 * WHEN CALLING DMSTRKA, IF DMSTQQ OBTAINS AN ERROR 4 00102000 * INDICATING "VERY FEW" RECORDS LEFT, DMSTQQ RETURNS 00103000 * THE RECORD JUST OBTAINED VIA DMSTRKX BEFORE 00104000 * RETURNING WITH ERROR-CODE 1 TO THE CALLER, SO THAT 00105000 * SUFFICIENT RECORDS ARE HELD IN RESERVE TO UPDATE THE 00106000 * FILE DIRECTORY IN HANDLING THE FULL-DISK SITUATION. 00107000 * 00108000 * MODULE NAME: 00109000 * 00110000 * DMSTQQ 00111000 * 00112000 * SUBROUTINE NAME: 00113000 * 00114000 * DMSTQQX 00115000 * 00116000 * FUNCTION: 00117000 * 00118000 * TO MAKE A 200-BYTE AREA THAT IS NO LONGER NEEDED BY 00119000 * ONE PROGRAM AVAILABLE FOR ALLOCATION TO ANOTHER. 00120000 * 00121000 * ENTRY POINTS: 00122000 * 00123000 * DMSTQQX 00124000 * 00125000 * CALLING SEQUENCE: 00126000 * 00127000 * L R15, AQQTRKX WHERE AQQTRKX=V(DMSTQQX) 00128000 * BALR R14, R15 00129000 * 00130000 * ENTRY REQUIREMENTS: 00131000 * 00132000 * R0 (RIGHTMOST 16 BITS) MUST HOLD THE DISK ADDRESS 00133000 * OF THE 200-BYTE DISK AREA BEING RETURNED. (SEE 00134000 * FIGURE 24 FOR FORMAT.) 00135000 * 00136000 * R1 MUST POINT TO ACTIVE DISK TABLE BLOCK. 00137000 * 00138000 * R13 MUST POINT TO "FVS" AREA. 00139000 * 00140000 * EXIT CONDITIONS: 00141000 * 00142000 * NORMAL RETURN 00143000 * 00144000 * R15=0 (AND CONDITION-CODE=0) 00145000 * 00146000 * IF NO ERRORS ARE DETECTED, R15 IS ZERO. 00147000 * 00148000 * IF THE DISK IS NOT LOGGED IN OR IF IT IS NOT A 00149000 * READ/WRITE DISK, R15 EQUALS 2. 00150000 * 00151000 * IF THE QQMASK IS FULL R15 EQUALS 1. 00152000 * 00153000 * CALLS TO OTHER ROUTINES: 00154000 * 00155000 * DMSTRKX 00156000 * 00157000 * EXTERNAL REFERENCES: 00158000 * 00159000 * ADSTSECT, FVSECT, DMSNUC 00160000 * 00161000 * TABLES/WORKAREAS: 00162000 * 00163000 * NONE 00164000 * 00165000 * REGISTER USAGE: 00166000 * 00167000 * R11, BASE 00168000 * R13, FVSECT 00169000 * R1 , ADTSECT 00170000 * REST WORK 00171000 * 00172000 * OPERATION: 00173000 * 00174000 * DMSTQQX FIRST CHECKS TO SEE THAT THE DISK IS LOGGED 00175000 * IN AND A READ/WRITE DISK. IF THE DISK IS NOT A 2314 OR 00176100 * THE BLOCK ADDRESS INDICATES THE WHOLE BLOCK IS IN USE 00177000 * (BIT 3=1), 00178000 * DMSTRKX IS CALLED TO RETURN THE 800 BYTE DISK BLOCK. 00179000 * OTHERWISE, THE BLOCK ADDRESS IS ADDED TO THE QQMASK 00180000 * TABLE. THE TABLE IS THEN SEARCHED TO SEE IF ALL FOUR 00181000 * 200 BYTE BLOCKS WITHIN THE SAME 800 BYTE BLOCK ARE IN 00182000 * THE TABLE. 00183000 * IF THEY ARE, THEY ARE REMOVED AND DMSTRKX CALLED TO 00184000 * RELEASE THE 800 BYTE BLOCK. 00185000 * 00186000 * NOTES: LIKE DMSTQQ, DMSTQQX CHECKS FOR ERRORS BY THE 00187000 * CALLER. 00188000 * 00189000 * IF A USER HAD AN EXTREMELY LARGE NUMBER OF FILES AND 00190000 * ERASED THEM SPORADICALLY, IT IS THEORETICALLY 00191000 * POSSIBLE THAT THE QQMSK TABLE COULD BECOME FULL FROM 00192000 * THE OTHER THREE PARTS OF 800-BYTE RECORDS BEING 00193000 * RETURNED FOR EACH RETURNED 200-BYTE RECORD. IF THIS 00194000 * OCCURS, THE TABLE IS NOT PERMITTED TO OVERFLOW. 00195000 * AN ERROR 3 IS GIVEN, WHICH IS NONFATAL. 00196000 * PROCESSING CONTINUES, AND A USER'S FILES ARE INTACT 00197000 * (EXCEPT THOSE INTENTIONALLY ERASED). THE QQMSK TABLE 00198000 * WOULD THEN CONTAIN SOME ENTRIES FOR WHICH ALL FOUR 00199000 * PARTS WOULD NOT SUBSEQUENTLY BE FOUND, BUT THESE 00200000 * WOULD STILL BE AVAILABLE FOR ALLOCATION BY DMSTQQ. 00201000 * 00202000 * DMSTQQX IS AN ENTRY-POINT IN THE DMSTQQ ROUTINE. 00203000 * 00204000 *. 00205000 EJECT 00206000 QQTRK START 0 00207000 SPACE 00208000 ENTRY DMSTQQ P3035 00209000 DMSTQQ EQU QQTRK P3035 00210000 ENTRY DMSTQQX P3035 00211000 ENTRY QQTRKX 00212000 SPACE 00213000 USING FVSECT,R13 00214000 USING NUCON,R0 00215000 * 00216000 ********************************************************************** 00217000 * 00218000 * QQTRK 00219000 * 00220000 ********************************************************************** 00221000 * 00222000 STM R2,R14,0(R13) SAVE REGISTERS 00223000 LR R11,R15 ADDRESSABILITY INTO R11 00224000 USING QQTRK,R11 ... 00225000 BAL RET,GETLOC GET LOC. OF APPROPRIATE DISK TABLE 00226000 * 00227000 * SEARCH FOR AVAILABLE 1/16 TRACK 00228000 * 00229000 LM XR1,XR3,TABSCH SET REGISTERS FOR BXLE 00230000 SR ZERO,ZERO INITIALIZE 00231000 LA RET,FOUND (FOR 'BCR' BELOW -- FASTER THAN 'BC') 00232000 CLI DTADT(R6),T2314 IS THIS A 2314 ? @V2A2014 00233100 BNE NOQQT NO...BR @V2A2014 00233200 LOOK CH ZERO,0(QQTBL,XR1) SEARCH FOR NON-ZERO ENTRY 00235000 BCR 7,RET 'BNZ' TO 'FOUND' IF SUCCESS. 00236000 BXLE XR1,XR2,LOOK ... 00237000 * 00238000 * IF NO 16TH TRACKS LEFT, GET ANOTHER QTR-TRK FROM TRKLKP... 00239000 * 00240000 NOQQT L R15,ATRKLKP SET R15 = A(TRKLKP), 00241000 LR SAVSAV,R13 SAVE ORIGINAL SAVE-AREA 00242000 LA R13,TRKLSAVE 11-WORD SAVE-AREA FOR TRKLKP INTO 13 00243000 BALR R14,R15 CALL TRKLKP 00244000 LR R13,SAVSAV RESTORE R13 TO A(FVS) POST-HASTE 00245000 BNZ CHKERR CHECK ERROR-CODE IF NOT ZERO. 00246000 CLI DTADT(R6),T2314 IS THIS A 2314 ? @V2A2014 00247100 BNE RETURNQ NO...BR @V2A2014 00247200 CH R1,H8192 IS THE BLOCK-NUMBER NO MORE THAN 8191 ? 00249000 BL STORE3 BL IF YES, USE OLD-TYPE LOGIC. 00250000 CH R1,H16384 IF NOT, OK 'AS IS' UP TO 16383 00251000 BL RETURNQ BL IF ALL RIGHT, R1 OK AS IS. 00252000 CH R1,H24576 WATCH FOR RANGE 16384-24575 00253000 BNL RETURNQ BNL IF 24576 OR MORE (R1 OK AS IS) 00254000 AH R1,X6000 ADD +6000 (HEX) FOR 16384-24575 ONLY 00255000 B RETURNQ GO EXIT. 00256000 * 00257000 STORE3 STH R1,0(,QQTBL) STORE IN FIRST 3 00258000 STH R1,2(,QQTBL) SLOTS IN THE QQMSK 00259000 STH R1,4(,QQTBL) (KNOWN TO BE EMPTY), AND 00260000 OC 0(6,QQTBL),QUART 'OR' IN THE '16TH TRACK' BITS. 00261000 RETURNQ LM R2,R14,0(R13) RESTORE R2 THRU R14 00262000 LTR R15,R15 SET CONDITION-CODE FOR CONVENIENCE OF CALLER 00263000 BR R14 AND EXIT (R15 ZERO OR ALL SET). 00264000 * 00265000 FOUND LH R1,0(QQTBL,XR1) GET DISK ADDRESS 00266000 STH ZERO,0(QQTBL,XR1) ZERO OUT ENTRY 00267000 * 00268000 RETURN LM R2,R14,0(R13) RESTORE REGISTERS 00269000 SR R15,R15 AND RETURN 00270000 BR R14 ... 00271000 * 00272000 DROP R11 00273000 EJECT 00274000 ********************************************************************** 00275000 * 00276000 * QQTRKX 00277000 * 00278000 ********************************************************************** 00279000 * 00280000 USING *,15 00281000 QQTRKX STM R2,R14,0(R13) SAVE REGISTERS 00282000 DMSTQQX EQU QQTRKX P3035 00283000 L R11,AQQTRK SET UP COMPATIBLE BASE REGISTER 00284000 DROP R15 00285000 USING QQTRK,R11 00286000 BAL RET,GETLOC GET LOC. OF APPROPRIATE DISK TABLE 00287000 CLI DTADT(R6),T2314 IS THIS A 2314 ? @V2A2014 00288100 BNE LETRKX NO...BR @V2A2014 00288200 LR SAVSAV,0 SAVE DISK ADDRESS 00290000 LH R4,X2000 PREPARE TO CHECK 3RD BIT FROM LEFT, 00291000 NR R4,R0 IS 3RD BIT OF BLOCK NUMBER '0' OR '1' ? 00292000 BZ NR0 BZ IF = 0, USE REGULAR (OLD) LOGIC 00293000 L R4,X8000 IF 1, PREPARE TO CHECK LEFTMOST BIT, 00294000 NR R4,R0 IS IT A '0' OR '1' ? 00295000 BZ LETRKX IF = 0, R0 OK AS IS, LET TRKLKPX DO WORK. 00296000 N R0,F65535 MAKE SURE WE HAVE RIGHTMOST 16 BITS ONLY 00297000 SH R0,X6000 SUBTRACT 6000 FOR SPECIAL RANGE 00298000 B LETRKX AND LET 'TRKLKPX' FINISH THE JOB. 00299000 * 00300000 NR0 LH R12,RIGHT14 X'3FFF' INTO R12 (REFERENCED SEVERAL TIMES) 00301000 NR R0,R12 REMOVE 1/4 OF 1/4-TRACK BITS 00302000 * 00303000 * SEARCH FOR REMAINDER OF 1/4 TRACK 00304000 * 00305000 LM XR1,XR3,TABSCH SET FOR BXLE 00306000 SR ZERO,ZERO INITIALIZE 00307000 LA COUNT,3 WE WANT 3 1/16 TRACKS 00308000 LOOK2 CH ZERO,0(QQTBL,XR1) IS THERE A 1/16 TRACK ADDRESS 00309000 BNE NOZERO BNE IF NOT ZERO, TEST IT 00310000 BACK BXLE XR1,XR2,LOOK2 IF ZERO, KEEP LOOKING 00311000 * 00312000 * INSERT 1/16 TRACK ADDRESS INTO TABLE 00313000 * 00314000 SR XR1,XR1 RE-INITIALIZE XR1 FOR BXLE (XR2 & 3 OK) 00315000 LA COUNT,L2 (FOR 'BCR' BELOW -- FASTER THAN 'BC') 00316000 L1 CH ZERO,0(QQTBL,XR1) IS THIS SPACE AVAILABLE 00317000 BCR 8,COUNT 'BZ' TO 'L2' IF YES. 00318000 BXLE XR1,XR2,L1 NO, TRY THE NEXT ONE 00319000 LA R15,3 ERROR 3 IF DROPS THRU BXLE - QQMSK FULL 00320000 B RETURNQ 30 MAY 1969 (JAS) - HOPEFULLY NON-FATAL. 00321000 * EMPTY HALFWORD FOUND ... 00322000 L2 STH SAVSAV,0(QQTBL,XR1) STORE 1/16TH TRACK ADDRESS 00323000 B RETURN RESTORE REGISTERS AND RETURN. 00324000 * 00325000 NOZERO LH ADDR,0(QQTBL,XR1) GET DISK ADDRESS 00326000 NR ADDR,R12 CONVERT TO 1/4 TRACK ADDRESS 00327000 CR R0,ADDR ARE THEY THE SAME 00328000 BNE BACK BNE IF NOT, TRY AGAIN 00329000 BCT COUNT,BACK YES, FIND ALL THREE OF THEM 00330000 * ALL THREE FOUND, GET RID OF THEM 00331000 * 00332000 * REMOVE THE 3 1/16TH TRACKS 00333000 * 00334000 SR XR1,XR1 RE-INITIALIZE XR1 FOR BXLE (XR2 & 3 OK) 00335000 LA COUNT,BUMPXR (FOR 'BCR' BELOW -- FASTER THAN 'BC') 00336000 GETLP LH ADDR,0(QQTBL,XR1) GET 1/16TH ADDRESS 00337000 NR ADDR,R12 CONVERT TO 1/4 TRACK ADDRESS 00338000 CR R0,ADDR ARE THEY THE SAME 00339000 BCR 7,COUNT 'BNE' TO 'BUMPXR' IF NO, TRY AGAIN. 00340000 STH ZERO,0(QQTBL,XR1) ZERO OUT ENTRY 00341000 BUMPXR BXLE XR1,XR2,GETLP FIND ALL THREE BY SEARCHING ALL 00342000 * 00343000 * RETURN 1/4 TRACK ADDRESS TO FREE DISK 00344000 * STORAGE 00345000 * 00346000 LETRKX L R15,ATRKLKPX LET 'TRKLKPX' DO THE REST OF THE WORK! 00347000 LM R2,R14,0(R13) RESTORE ORIGINAL REGISTERS 00348000 * NOTE -- OK TO PASS THE R13 FROM OUR CALLER ALONG TO TRKLKPX. 00349000 * NOTE -- R14 STILL = RETURN-ADDRESS TO OUR CALLER. 00350000 BR R15 (TRKLKPX RETURNS DIRECTLY TO CALLER.) 00351000 EJECT 00352000 ********************************************************************** 00353000 * 00354000 * DETERMINE FROM GPR1 00355000 * WHICH ACTIVE DISK TABLE 00356000 * 00357000 ********************************************************************** 00358000 GETLOC LTR SAVPAM,R1 SAVE P-LIST POINTER & CHECK IT 00359000 BNP ERR2 ERROR UNLESS PLUS & NONZERO 00360000 USING ADTSECT,R1 REFERENCE ACTIVE DISK TABLE 00361000 TM ADTFLG1,ADTFRW MUST BE A READ-WRITE DISK 00362000 BZ ERR2 ERROR IF NOT 00363000 L R6,ADTDTA LOAD DEVICE TABLE ADDRESS. 00364000 CLI DTADT(R6),T2314 IS THIS A 2314 ? @V2A2014 00365100 BCR 7,RET NO...BR @V2A2014 00365200 TM ADTFLG2,ADTFMFD AND MFD MUST BE IN CORE 00367000 BZ ERR2 ERROR IF NOT 00368000 L QQTBL,ADTQQM GET LOCATION OF QQMSK TABLE 00369000 LTR QQTBL,QQTBL MAKE SURE TABLE IS REALLY THERE 00370000 BCR 7,RET OK IF YES, RETURN TO QQTRK OR QQTRKX. 00371000 * 00372000 * PROCEED TO 'ERROR 2' IF QQMSK NOT THERE AT ALL ... 00373000 * 00374000 ********************************************************************** 00375000 * 00376000 * ERROR ROUTINES 00377000 * 00378000 ********************************************************************** 00379000 SPACE 00380000 ERR2 LA R15,2 ERROR NO. 2 00381000 DC H'0002' *****ENTER DEBUG - PROGRAM BUG SOMEPLACE******** 00382000 B RETURNQ GO RESTORE REGISTERS & EXIT. 00383000 * 00384000 DROP R1 00385000 EJECT 00386000 ********************************************************************** 00387000 * 00388000 * STORAGE AND DEFINITIONS 00389000 * 00390000 ********************************************************************** 00391000 PRINT DATA 00392000 QUART DC X'C00080004000' BITS FOR '16TH TRACKS' 00393000 * 00394000 H8192 DC H'8192' FOR 1-8191 00395000 H16384 DC H'16384' FOR 8192-16383 00396000 H24576 DC H'24576' FOR 16384-24575 00397000 X2000 EQU H8192 TO CHECK 3RD BIT FROM LEFT IN BLOCK NO. 00398000 X6000 EQU H24576 ADJUSTER FOR BLOCK NOS. 16384-24575. 00399000 * 00400000 RIGHT14 DC X'3FFF' RIGHTMOST 14 BITS OF BLOCK NUMBER ONLY 00401000 * 00402000 F4 DC F'4' 00403000 X8000 DC A(X'8000') TO CHECK LEFT-MOST BIT OF BLOCK-NUMBER 00404000 * 00405000 TABSCH DC F'0,2,198' LIMITS FOR TABLE SEARCH 00406000 * 00407000 * 00408000 * THE FOLLOWING CODE (USED VERY SELDOM) IS PURPOSELY 'AT THE END' 00409000 * FOR PAGING EFFICIENCY (IN CASE QQTRK 'SPILLS OVER' END OF PAGE) 00410000 * 00411000 * COMES HERE IF ERROR-CODE FROM 'TRKLKP' 00412000 * 00413000 CHKERR C R15,F4 IS R15 = 4 ('VERY FEW' TRACKS LEFT ? ) 00414000 BNE SR11 BNE IF NOT, GO CLEAR R1 AND EXIT. 00415000 L R15,ATRKLKPX IF ERROR-CODE 4, 00416000 LR R6,R0 SAVE R0, 00417000 LR R0,R1 SET UP R0 FOR TRKLKPX, 00418000 LR R1,SAVPAM ALSO R1, 00419000 LR SAVSAV,R13 SAVE R13, 00420000 LA R13,TRKLSAVE SET UP SAVE-AREA FOR TRKLKPX, 00421000 BALR R14,R15 GIVE THE TRACK BACK - WE WON'T BE USING IT 00422000 LR R13,SAVSAV RESTORE R13 TOUT SUITE 00423000 LR R0,R6 RESTORE R0, 00424000 SR11 SR R1,R1 CLEAR R1 TO SHOW NO TRACK AVAILABLE 00425000 LA R15,1 ERROR-CODE 1 00426000 B RETURNQ GO RESTORE REGISTERS AND EXIT. 00427000 * 00428000 CANSPILL EQU *-CHKERR ****SHOWS HOW MANY BYTES CAN SPILL OVER OK**** 00429000 EJECT 00430000 * 00431000 * DEFINITIONS 00432000 * 00433000 R0 EQU 0 00434000 R1 EQU 1 00435000 R2 EQU 2 00436000 SAVPAM EQU R2 00437000 QQTBL EQU 3 00438000 R4 EQU 4 00439000 ZERO EQU R4 00440000 R5 EQU 5 00441000 SAVSAV EQU 5 00442000 RET EQU 5 00443000 R6 EQU 6 00444000 XR1 EQU 7 POINTER 00445000 XR2 EQU 8 INCREMENT 00446000 XR3 EQU 9 COMPARAND 00447000 COUNT EQU 10 00448000 R11 EQU 11 00449000 R12 EQU 12 00450000 R13 EQU 13 00451000 R14 EQU 14 00452000 R15 EQU 15 00453000 ADDR EQU R15 00454000 SPACE 1 00454100 T3340 EQU X'07' @V2A2014 00454200 T2314 EQU X'08' @V2A2014 00454300 T3330 EQU X'09' @V2A2014 00454400 * 00455000 EJECT 00456000 NUCON 00457000 ADT 00458000 EJECT 00459000 FVS 00460000 END 00461000