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