22FL ...#SEG LOADERDA86 [M. DRUKKER 22J9 ...# ######################################################## 22LS ...# 22PC ...# (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 22S2 ...# 22WK ...# ######################################################### 22^= #LIS K0LOADER>K0ALLGEO>K0LOADERMT 23DW # 23YG # THIS SEGMENT HANDLES DISCS,I.E. IT IS ENTERED WHEN ONE 24D6 # OF THE FOLLOWING COMMANDS IS INPUT: 24XQ # 25CB # DA ED FD CT DS EF #SKI ENTWINE (DC UN) 25X2 # 26BL # 26Q* ...OSCA +JLSCA [THESE ARE BUFFERS IN LOADERDB 2764 ...OSCAFAC +JLSCAFAC [THEY ARE DATUMISED IN LOADERMT 27FR ...FIXDB +0 [INTENDED(0) / PREVIOUS(<0) PERI 27TG SDSWFIX +0 [FOR SEARCHDISC 28*6 JLSWFIX 28SQ SWFIX -1 [SETTING DETERMINES ACTION BY 29#B # [PERIDISC OVER FIXES/FAILS 29S2 [ZERO -> FIXES IGNORED & FAILS REPORT 2=?L [-1 -> FIXES REPORTED & WAITED ON, 2=R= # [ & FAILS REPORTED & RETURNED TO COM 2?=W STRGLINK +0 [FOR STRINGOUT 2?QG SLINK +0 [FOR SEARCHDISC 2#=6 SNLINK +0 [FOR SEARCHBYSN 2#PQ PDLINK +0 [PERIDISC LINK 2*9B PDINOP +0 [-VE AS SOON AS INOP DISC FOUND 2*P2 [DURING DISC SEARCHES 2B8L WDPART +0 [FROM CONVERSION ROUTINE XCONV 2BN= XSURF +BSURF [BLKS/SURFACE ON 2B 2C7W # 2CMG TYPEDISC +0 [SUBTYPE OF DISC IN CT COMMAND 2D76 SDISCDL +0 [DL PTR OF DISC IN CT COMMAND 2DLQ PHLAGS #70000000 [ALL FLAGS SET 2F6B SPACE 4H000 2F?J ...OXSYF 2FDR ...XSYF 4HSYFL 2FL2 WDAC 4H0DA, [FOR CT COMMAND 2G5L SERIALNUM +0 [USN 2GK= XFILES [DATA FROM DS COMMANDS 2H4W #REP 16 2HJG +0 2J46 MAXSIZE +0 [NO.OF CYLS ON DISC IN CT COMMAND 2JHQ STOR +0 [WORK WD 2K3B JLNOB 2KH2 NOBPERC +0 [NO.OF BLKS/CYL ON DEVICE CONCERNED 2L2L PLAST #37777777 [LAST FIC WD.0 2L*3 ...SUBTYPES +EDS,+EMDS [DISC SUBTYPES 2LMD ...XSHARE #4000000 2L^W # 2MFG TEMPLATE [FILE INDEX CELL TEMPLATE 2M^6 +0 [NEXT CELL CONTIGUOUS 2NDQ +0 [ADDR OF FAC 2NYB +0,+0,+0 [FILENAME 2PD2 +0 2PXL +0 [GEN/VERSION NOS. 2QC= #20000001 [INTEGRITY/NO.OF FACS 2QWW +0 [DATE 2RBG +0 [RETENTION PERIODS 2RW6 +1 [BLKS/BKT 2S*Q +0 2STB +1 [LOG.BKT.NO OF EOF TAG 2T*2 +0,+0,+0,+0 [RESERVED 2TSL ...SDISCA +0,+128,+JLSCA,+0 [MODE/COUNT/CTSA/DTSA FOR SCA 2W#= ...SDISCB +0,+128,+JLSCAFAC,+0 [MODE/COUNT/CTSA/DTSA FOR FAC CHAIN 2WRW # [OR FIC CHAIN 2X?G ONE +1 2XR6 TWO +2 2Y=Q THREE +3 2YQB XFIVE +5 2^=2 #SKI 77?<515$515 [SKIP LABEL IF GIN515 OR LATER 2^PL OCT8 329= +8 32NW THIRTEEN +13 32W4 ...OXDEVICE 333= ...XDEVICE +0 [STORE FOR DL POINTER 338G # AREAS FOR HANDLING INOP DISCS DURING SEARCHES 33D# ...OSTRGMK 33N6 STRGMK #400:0 [0->REPORT FIXES DURING SEARCHES, -VE FOR NOT. 347Q ON 4HON [RP... 34MB OFF 4HOFF [..PARAMETERS. 3572 JLNUMIN 35LL NUMINOP +0 [NO. OF GEOGNOS IN LIST 366= STRINOP +8,8H UNITS 36KW #REP 25 375G 4H 37K6 STRREST 16H INOPERABLE^* 384Q NEWLINE +2,2H^* 38JB ...OPRINT +16,16H = #00000000^*^* 3942 ...JLRSW +0 [PTR TO TABLE JLRTAB 39HL # AREAS FOR DC/UN 3=3= # 3=GW JLUNDC 3?2G UNDCADDR +AUNRES+DCDUM [FOR UN 3?G6 +ARES+DCDUM [FOR DC 3?PY ...OSMOTAB 3?^Q SMOTAB +0 [ABS PTR TO TABUNDC 3#9J ...OUNDCTAB 3#FB UNDCTAB 3#P8 ...OTABUNDC 3#^2 TABUNDC [FOR PARAMS IN DC/UN COMMAND 3*DL #REP 2*24 3*Y= +0 3BXG # 3CC6 # FURTHER ERROR MESSAGES 3CWQ # 3DBB XEM1 +32,32H CARTRIDGE/UNIT NOT FOUND^*^* 3DNR ...OXEM2 3F38 ...XEM2 +25,25H UNIT 000 NOT UDAS^*^* 3F*L XEM3 +34,34H DISC NOT NEWLY INITIALISED^*^* 3FT= XEM4 +21,21H WRONG CONTEXT^*^* 3G#W XEM5 +26,26H INVALID CYL.NO(S).^*^* 3GG4 ...XEM6 +43,24H FILENAME 3GM= ... 19H CANNOT BE SHARED^* 3GSG # 3H#6 SPACES 4H 3J?B # 3JR2 # 3K=L # S/R TO PERFORM DISC TRANSFERS 3KQ= # CALLED VIA X0 3L9W # EXPECTS X3 -> RELEVANT DL 3LPG # X1 -> CA WORDS 3M96 # FIX/FAIL ACTION: 3MNQ # SWFIX=0 & FIX -> EXIT 0 0 3N8B # & FAIL -> OUTPUT FAIL MESS & EXIT 0 0 3NN2 # SWFIX=-1 & FIX -> OUTPUT FIX MESS & WAIT TILL OPERABLE 3P7L # & FAIL -> OUTPUT FAIL MESS & GO TO JLER 3PM= # NORMAL EXIT 0 1 3Q6W # IF DISC IS INOP PDINOP IS SET -VE BEFORE EXIT 0, 3QLG # (I.E. WHEN SWFIX=0) ELSE IT IS ZERO ON EXIT. 3R66 JLPDISC 3RKQ PERIDISC 3S5B STO 0 PDLINK(2) 3SK2 STOZ PDINOP(2) [CLEAR INOP DISC MARKER 3T4L STO 3 JLPSBS(2) [DL PTR TO PSEUDO-ACT.BLK 3TJ= LDX 0 0(1) 3W3W DCA 3,STO,0,MODE 3WHG LDX 0 1(1) 3X36 DCA 3,STO,0,COUNT 3XGQ LDX 0 2(1) 3Y2B DCA 3,STO,0,CTSA 3YG2 DCA 3,ADS,2,CTSA [DATUMISE 3Y^L LDX 0 3(1) 3^F= DCA 3,STO,0,DTSA 3^YW # 42DG # READY TO ATTEMPT TRANSFER 42Y6 # 43CQ JDISENG 3,PD4 [UNIT NOT ENGAGED 43J8 ...PD5 43NL ...#SKI G3 43T4 ... LDX 0 JLSWBUF(2) 43^G ... LDN 1 JLPSBS-CPPTR(2) [POINT TO PSEUDO-ACT.BLK 445Y ...#SKI G3 44=B ... BNZ 0 PD1 [DOUBLE BUFFERING 44C2 GPERI 3,1,NC [INITIATE TRANSFER 44WL PD1 JBUSY 3,PD1 [WAIT FOR TERMINATION 45B= JFAIL 3,PD2 [TRANSFER FAILURE 45DT ...#SKI G3 45HD ...( 45L3 ... LDX 0 JLSWBUF(2) 45NL ... BZE 0 PD10 [SINGLE BUFFERING 45R9 ... GPERI 3,1,NC [INITIATE TRANSFER 45TS ... LDX 0 FIXDB(2) 45YC ... BZE 0 PD10 [NOTHING OUTSTANDING FROM FIX 4632 ... STOZ FIXDB(2) [NOW DO INTENDED TRANSFER 465K ... BRN PD11 4688 ...) 46=R ...PD10 LDCT 0 #400 46*G STO 0 SWFIX(2) [FIX MESSAGE REQUIRED 46T6 LDX 0 PDLINK(2) 47#Q EXIT 0 1 [NORMAL EXIT 47SB PD2 LDX 1 JLPSBS+1(2) [GET REPLY 48#2 SRL 1 18 48RL BNZ 1 PD6 [REAL FAIL 49?= PD4 LDX 0 SWFIX(2) 49QW BNZ 0 PD3 [ACTION REQUIRED ON FIX 4==G PD7 LDCT 0 #400 [NONE NEEDED 4=Q6 STO 0 SWFIX(2) [RESET SWITCH 4?9Q STO 0 PDINOP(2) [NOTE UNIT INOP FOR SEARCH ROUTINES 4?PB PD9 LDX 0 PDLINK(2) 4#92 EXIT 0 0 4#NL PD3 LDN 1 JLFIXM(2) 4*8= CALL 0 JLGEOG [CONSTRUCT MESSAGE 4*MW CALL 6 JLOUT [& OUTPUT IT 4B7G LDX 3 JLPSBS(2) [RESTORE DL PTR 4BM6 PD8 JDISENG 3,PD8 [WAIT FOR FIX 4BNN ...#SKI G4 4BQ= ... BRN PD5 [TRY AGAIN 4BRS ...#SKI G3 4BTB ...( 4BWY ... LDX 0 JLSWBUF(2) 4BYG ... BZE 0 PD5 [SGLE BFFRG - TRY AGAIN 4C24 ... LDX 0 FIXDB(2) 4C3L ... BNZ 0 PD5 [REPEATED FIX 4C58 ... LDCT 0 #400 4C6Q ... STO 0 FIXDB(2) [SET FOR FIX BUFFER 4C8# ...PD11 LDX 0 JLTDOUBUF(2) 4C9W ... LDX 6 512 4C?D ... BZE 0 PD12 [FROM JLBUFF TO JLBUFF+512 4C*2 ... SBX 6 1024 [SET MINUS 4CBJ ...PD12 ADS 6 ICTSA(3) 4CD6 ... LDN 0 #1000 4CFN ... ERS 0 JLTDOUBUF(2) [SWITCH JLTDOUBUF 4CH= ... BRN PD5 [TRY AGAIN 4CJS ...) 4CLB PD6 LDN 1 JLFAILM(2) 4D62 CALL 0 JLGEOG [CONSTRUCT A FAIL MESSAGE 4DKL LDX 0 SWFIX(2) [GET SWITCH 4F5= LDCT 6 #400 4FJW STO 6 SWFIX(2) [RESET SW 4G4G BNZ 0 JLER [ACTION REQUIRED 4GJ6 CALL 6 JLOUT [OUTPUT MESS 4H3Q LDX 3 JLPSBS(2) [RESTORE DL PTR 4HHB BRN PD9 [ & DO NO MORE 4J32 # 4JGL # 4K2= # S/R TO CONVERT WD-ADDR IN X1 TO HARDWARE ADDRESS IN X0. 4KFW # DEVICE SUBTYPE EXPECTED IN JLBSUB. 4K^G # NO.BLKS/CYL EXPECTED IN NOBPERC. 4LF6 # START CYLNO OF SU EXPECTED IN JLSTART. 4LYQ # LEAVES WORD PART IN WDPART. 4MDB # CALLED VIA X6. 4MY2 # 4NCL JLCONV 4NX= XCONV LDN 0 0 4PBW SLL 01 17 4PWG SRL 1 17 4QB6 STO 1 WDPART(2) 4QTQ LDX 1 0 4QX^ ...# 4R28 ...# [X1]=HARDWARE BLOCK ADDRESS 4R4C ...# 4R6L ...JLCONV2 4R8T ...XCONV2 4R?4 ... 4R*B DVS 0 NOBPERC(2) [/BLKSPERCYL 4RT2 # 4S#L # [X0]=BLKNO & [X1]=CYLNO 4SS= # 4T?W JLCONV1 [ENTRY HERE FOR READING SCA'S 4TRG XCONV1 4W?6 ADX 1 JLSTART(2) [+BASE OF SU 4WQQ SMO JLBSUB(2) 4X=B BRN £ [BRANCH TO RELEVANT ROUTINE 4XQ2 X 4Y9L #TRA X+EDS 4YP= BRN XCEDS 4^8W #TRA X+EMDS 4^NG BRN XCEMDS 5286 ...#TRA EDS>EMDS+X+1 54=5 ...XCEDS 54*J ... JNENVX NOEMU,MEEP,7 [J IF NOT EMULATING 54F3 ... LDX 7 1 54JG ... MPA 7 NOBPERC(2) [CONVERT BACK TO BLOCKS 54M^ ... LDCT 1 #400 54RD ... ADX 0 1 54WX ... EXIT 6 0 54^9 ...NOEMU 553H ... LDN 7 0 555W SLL 70 21 55KG SLL 7 3 5656 SLL 70 3 56JQ SLL 01 20 574B SLL 0 2 57J2 SLL 01 16 583L ORX 0 7 58H= EXIT 6 0 5BWB # 5CB2 ...# EDS30 ADDRESSES. 5CTL # 5DSW XCEMDS 5F#G SLL 0 12 5FS6 SRC 01 12 5G?Q EXIT 6 0 5GRB # 5H?2 # 5HQL # S/R TO SEARCH SPECIFIED DISC (BY DL) FOR GIVEN FILE 5J== # EXPECTS X3-> DL FOR A DISC, JLBSUB TO CONTAIN SUBTYPE OF 5JPW # DISC & FINAME TO CONTAIN NAME OF FILE TO BE FOUND. 5K9G # CALLED VIA X0. ON RETURN X3-> DL STILL. 5KP6 # EXITS 0 IF FILE NOT FOUND ELSE EXITS 1 HAVING SET 5L8Q # X1->FAC FOR THE FILE, & HAVING FILLED IN BLDISC, BLADDR, 5LNB # BLSER, & BLSTART AT K18-K42, & NOBPERC. 5M82 # SWFIX IS RENEWED BEFORE EACH CALL OF PERIDISC 5MML # TO ENSURE CORRECT ACTION OVER FIXED/FAILING DISCS. 5N7= # IF DISC WAS INOP, ITS GEOGNO IS PLACED IN STRINOP. 5NLW # 5P6G SEARCHDISC 5PL6 STO 0 SLINK(2) [STORE LINK 5Q5Q LDX 0 SWFIX(2) 5QKB STO 0 SDSWFIX(2) [SAVE SWFIX 5R52 LDN 4 0 [SU 0 5RJL LDX 7 JLBSUB(2) [SUBTYPE OF DISC TO BE SEARCHED 5S4= STUBASEX 4,6,7 [GET BASE OF SU(4) 5SHW STO 6 JLSTART(2) [FOR XCONV 5T3G SMO JLCOMM(2) 5TH6 STO 6 BLSTART [& FOR LOADER 5W2Q LDN 1 0 [CYLNO 0 5WGB LDN 0 1 [BLKNO 1 FOR SCA 5X22 CALL 6 XCONV1 [ HA -> X0 5XFL LDN 1 SDISCA(2) 5X^= STO 0 3(1) [DTSA FOR SCA 5YDW STOZ 0(1) [READ MODE 5YYG LDX 0 SDSWFIX(2) 5^D6 STO 0 SWFIX(2) 5^XQ CALL 0 PERIDISC [READ SCA 62CB BRN SDINOPFL [INOP/FAIL SO NOT FOUND 62JJ ... CALL 0 CHECKDISC 62PQ ... BRN SDINOPFL 62YN ... SMO OSCA(2) 637L ... LDX 0 13 [GET NO. OF BLKS/CYL 63BL STO 0 NOBPERC(2) 63P3 ... SMO OSCA(2) 643D ... LDX 0 5 [GET USN 64*W SLL 0 6 64TG SRL 0 6 [ISOLATE & 65*6 SMO JLCOMM(2) 65SQ STO 0 BLSER [STORE FOR LOADER 6677 ... LDX 1 OSCA(2) 66FJ ... ADN 1 19 [FIRST FIC 66S2 LDN 5 147 [BS ADDR OF IT, BLK 1 WD 19 67?L # 67R= SD5 LDX 4 0(1) 68=W BNG 4 SDNO [LAST CELL JUST GONE 68QG SD1 LDX 0 2(1) 69=6 LDX 6 3(1) 69PQ LDX 7 4(1) [GET FILENAME FROM FIC 6=9B TXU 0 FINAME(2) 6=P2 TXU 6 FINAME+1(2) 6?8L TXU 7 FINAME+2(2) [& COMPARE WITH THAT REQUIRED 6?N= BCC SD3 [THIS IS IT 6#7W SD6 TXU 4 PLAST(2) 6#MG BCC SDNO [LAST CELL 6*76 BNZ 4 SD4 [NEXT CELL IN DIFFERENT BLK 6*LQ ADN 1 17 [UPDATE CORE &... 6B6B ADN 5 17 [BS ADDRESSES 6BL2 BRN SD5 [TRY AGAIN 6C5L # 6CK= SD4 STO 4 1 [X1=PTR TO NEXT FIC FOR XCONV 6D4W STO 4 5 [DESTINED FOR BLADDR 6DJG CALL 6 XCONV [GET HA OF FIC 6F46 LDN 1 SDISCB(2) 6FHQ STO 0 3(1) [DTSA 6G3B STOZ 0(1) [READ MODE 6GH2 LDX 0 SDSWFIX(2) 6H2L STO 0 SWFIX(2) 6HG= CALL 0 PERIDISC [GET NEXT FIC 6H^W BRN SDINOPFL [INOP/FAIL SO NOT FOUND 6JFG ... LDX 1 OSCAFAC(2) [POINT TO IT IN CORE 6J^6 ... ADX 1 WDPART(2) 6KDQ BRN SD5 [& HAVE A LOOK AT IT 6KYB # 6LD2 SD3 LDX 0 6(1) [HAVE FOUND FIC 6LXL SRL 0 12 6MC= BNZ 0 SD6 [MUST HAVE GENNO=0 6MWW SMO JLCOMM(2) 6NBG LDN 2 BLDISC 6NW6 MOVE 1 17 [MOVE FIC TO K18-K42 6P*Q LDX 2 G3DOL 6PTB SMO JLCOMM(2) 6Q*2 STO 5 BLADDR [WD.ADDR OF FAC 6QSL LDX 1 1(1) [WD.ADDR OF FAC 6R#= CALL 6 XCONV [HA ADDR -> X0 6RRW LDN 1 SDISCB(2) 6S?G STO 0 3(1) [DTSA 6SR6 STOZ 0(1) [READ MODE 6T=Q LDX 0 SDSWFIX(2) 6TQB STO 0 SWFIX(2) 6W=2 CALL 0 PERIDISC [READ DOWN BLK CONTAINING FAC 6WPL BRN SDINOPFL [INOP[FAIL SO NOT FOUND 6X9= ... LDX 0 OSCAFAC(2) 6XNW ... ADX 0 WDPART(2) 6Y8G SMO JLCOMM(2) 6YN6 LDN 1 BLFAC 6^7Q LDX 6 3(1) [GET SERIAL NUMBER OF FA UNIT 6^MB SLL 6 6 7272 SRL 6 6 72LL BZE 6 SD7 736= SMO JLCOMM(2) [& COMPARE WITH THAT OF HOME UNIT 73KW TXU 6 BLSER 745G BCS SDNO [ON ANOTHER UNIT SO IGNORE 74K6 SD7 754Q MOVE 0 5 [MOVE FAC FOR LOADER 7553 ...# THIS CODE IS FOR THE FULL 755# ...# IMPLEMENTATION OF SHARE 755M ... JENVNOT N2CME,CME 756J ... JNCMESH 3,N2CME 7572 ...# THE BRN SHOULD BE REMOVED 757D ...# WHEN (IF) FULL SHARE IS IMPLEMENTED 757W ... BRN N2CME 758B ... LDX 0 XSHARE(2) 759? ... LDN 1 JLCOMM(2) 75=8 ... ADX 0 BLSER(1) 75?5 ... LDX 1 BLADDR(1) 75#2 ... SHOPEN ,,SD71 75#X ... BRN N2CME 75*S ...SD71 LDN 5 FINAME(2) 75BP ... LDN 6 XEM6+4(2) 75CL ... MOVE 5 3 75DH ... LDN 1 XEM6(2) 75FD ... BRN JLER 75G* ...N2CME SMO JLCOMM(2) 75H= ... LDN 1 BLFAC 75JB LDX 0 SLINK(2) 7642 EXIT 0 1 [FILE FOUND 76HL # 773= SDINOPFL 77GW LDX 0 PDINOP(2) 782G BZE 0 SDNO [IT FAILED 78G6 SMO NUMINOP(2) [INOP; ADD GEOGNO TO LIST 78^Q LDN 1 STRINOP(2) [LOCATE FREE WD. -2 IN MESSAGE 79FB CALL 0 JLGEOG [INSERT GEOGNO 79^2 LDN 0 1 7=DL ADS 0 NUMINOP(2) [UPDATE COUNT FO GEOGNOS 7=Y= SLL 0 2 7?CW ADS 0 STRINOP(2) [UPDATE MESSAGE COUNT 7?XG SDNO LDX 0 SLINK(2) 7#C6 EXIT 0 0 [FILE NOT FOUND 7#WQ # 7*BB # 7*W2 # 7B*L # S/R TO SEARCH ALL DISCS FOR SU WHOSE SERIAL NUMBER IS IN LOCATION 7BT= # SERIALNUM. CALLED VIA X0 7C#W # IF FOUND EXIT 0 1 HAVING LEFT DL PTR IN JLPSBS, & RELEVANT 7CSG # BLOCK 1 OF DISC AT SCA, & DEVICE SUBTYPE IN X7,& JLBSUB 7D#6 # ALSO NOBPERC FILLED IN. ELSE EXIT 0 0 7DRQ # IF DISC WAS INOP, ITS GEOGNO IS PLACED IN STRINOP. 7F?B # 7FR2 SEARCHBYSN 7G=L STO 0 SNLINK(2) 7GQ= LDN 0 6 7H9W LDN 7 EDS [EDS SEARCHED FIRST 7HPG SN1 STO 0 JLBS(2) 7J96 STO 7 JLBSUB(2) [FOR XCONV 7JNQ FINDPEREC 3,APFOTY,JLBS(2),SN2 7K8B BNG 3 SN3 [NO MORE UNITS OF THIS TYPE 7KN2 LDX 7 JLBS(2) 7PK2 SN6 LDN 0 0 [*** TEMPORARY *** 7Q4L STUBASEX 0,6,JLBSUB(2) 7QJ= STO 6 JLSTART(2) [STORE START ADDRESS 7R3W LDN 1 0 [CL 0 7RHG LDN 0 1 [BLKNO 1 FOR SCA 7S36 CALL 6 XCONV1 7SGQ LDN 1 SDISCA(2) [CONVERT TO HA 7T2B STO 0 3(1) [& PLACE IN CA 7TG2 STOZ 0(1) [READ MODE 7T^L STOZ SWFIX(2) 7WF= CALL 0 PERIDISC [READ CONTROL HEADER 7WP4 ... BRN SN7 7WYW ... CALL 0 CHECKDISC 7X8N ... BRN SN2 7XDG ... SMO OSCA(2) 7XN# ... LDX 0 5 [GET USN 7XY6 SLL 0 6 7YCQ SRL 0 6 [ISOLATE IT 7YXB TXU 0 SERIALNUM(2) [THAT REQUIRED? 7^C2 BCS SN2 [NO, TRY NEXT UNIT 7^PC ... SMO OSCA(2) 823S ... LDX 0 13 [NO. BLKS/CYL 82B= STO 0 NOBPERC(2) 82TW STO 3 JLPSBS(2) [YES 83*G LDX 0 SNLINK(2) 83T6 EXIT 0 1 84#Q # 84SB SN3 LDX 0 JLBS(2) [WASN'T FOUND ON THAT SUBTYPE 85#2 SBN 0 6 8992 BNZ 0 SN5 [NOT FOUND ANYWHERE 89NL LDN 0 26 [TRY EDS30'S. 8=8= LDN 7 EMDS 8=MW BRN SN1 8?7G # 8?M6 # DEVICE WAS INOP OR FAILED. WHICH? 8#6Q SN7 LDX 0 PDINOP(2) 8#LB BZE 0 SN2 [DEVICE WAS OPERABLE & FAILED 8*62 SMO NUMINOP(2) 8*KL LDN 1 STRINOP(2) 8B5= CALL 0 JLGEOG [INSERT GEOGNO IN LIST 8BJW LDN 0 1 8C4G ADS 0 NUMINOP(2) [UPDATE COUN OF GEOGNOS 8CJ6 SLL 0 2 8D3Q ADS 0 STRINOP(2) [UPDATE MESS. CHAR COUNT 8DHB BRN SN2 [TRY NEXT UNIT 8DKK ...SN63 LDN 1 XEM2(2) 8DMS ... STO 3 XDEVICE(2) 8DQ3 ... CALL 0 JLGEOG 8DS= ... CALL 6 JLOUT 8DWF ... LDX 3 XDEVICE(2) 8DYN ... BRN SN2 8F32 # 8FGL SN5 LDX 0 SNLINK(2) [NOT FOUND EXIT 8G2= EXIT 0 0 8GFW # 8G^G # 8HF6 # MT LOADER COMES HERE ON RECEIPT OF ED/FD/DA COMMAND. 8HYQ # THEY ARE TREATED AS DA. 8JDB # SEARCH IS EDS -> FDS -> EDS30. 8JY2 # SERIAL NUMBER IS OPTIONAL 1ST PARAMETER, 8KCL ...# E.G. DA *777777,FILENAME (* AND , OPTIONAL). 8KX= # IF FILE IS NOT FOUND & SOME DISCS WERE INOP, 8LBW # THE INOP DISC STRING IS OUTPUT, SIMILARLY IF A SERIAL 8LWG # NO. WAS SPECIFIED & DISC WAS NOT FOUND. 8MB6 JLDA 8MTQ CALL 0 JLSWAPCH [CHECK SWAPFILE DECLARED 8N*B CALL 0 JLPOINT 8NT2 LDCH 0 0(1) [GET 1ST CHAR 8P4S ... SBN 0 #10 [OCTAL 8P#L ... BNG 0 TDA15 [SERIAL NO. SPECIFIED 8PJD ... SBN 0 #22 [#32=* 8PS= BZE 0 TDA5 [SERIAL NO. SPECIFIED 8Q?W CALL 0 JLFNAME [EXTRACT FILENAME 8QRG LDN 0 6 8R?6 STO 0 JLBS(2) [EDS SEARCHED 1ST 8RQQ LDN 0 EDS 8S=B STO 0 JLBSUB(2) [EDS SUBTYPE FOR STUBASEX IN SEARCHDI 8SQ2 TDA2 FINDPEREC 3,APFOTY,JLBS(2),TDA1 8T9L BNG 3 TDA3 [NO MORE UNITS OF THIS TYPE 8TP= LDX 0 JLBS(2) 925W TDA10 STOZ SWFIX(2) 92KG CALL 0 SEARCHDISC 9356 BRN TDA1 [NOT THERE 93?B ...TDAEM 93FL ...#SKI G3 93MW ... JENV K1LOADEREM,MEEP [FOUND IT - EMULATION 93W6 ... BRN K2LOADERMT [FOUND IT - REAL 1900 944B # 94J2 TDA3 LDX 0 JLBS(2) 953L SBN 0 6 98F2 BNZ 0 TDA12 [NOT FOUND ANYWHERE 98YL LDN 0 26 99D= STO 0 JLBS(2) 99XW LDN 0 EMDS 9=CG STO 0 JLBSUB(2) 9=X6 BRN TDA2 [TRY EDS30'S 9?BQ # 9?P7 ...TDA5 BCHX 1 £ [* GIVEN 9#3J ...TDA15 LDN 7 0 [NO * 9#B2 LDN 6 7 9#KS ... BRN TDA16 9#TL TDA6 BCHX 1 £ 9**= ...TDA16 LDCH 5 0(1) 9*SW TXL 5 OCT8(2) 9B#G BCS TDA7 [OCTAL CHAR 9BS6 SBN 6 7 9C?Q BZE 6 TDA14 [NULL SN 9CRB SBN 5 #20 [SPACE? 9D?2 BZE 5 TDA8 [YES, FOUND SN 9DQL SBN 5 #14 [COMMA? 9F== BZE 5 TDA8 [YES 9FPW SERIALBAD 9G9G TDA14 LDN 1 JLSERBAD(2) [BAD SN. 9GP6 BRN JLER 9H8Q TDA7 BCT 6 TDA9 9HNB BRN TDA14 [TOO MANY DIGITS 9J82 TDA9 SLL 7 3 9JML ADX 7 5 [ADD IN DIGIT 9K7= BRN TDA6 [GET NEXT 9KLW TDA8 STO 7 SERIALNUM(2) [NOW HAVE SN 9L6G BCHX 1 £ [STEP OVER COMMA/SPACE 9LL6 CALL 0 JLFNAME [EXTRACT FILENAME 9M5Q CALL 0 SEARCHBYSN [SEARCH FOR DISC 9MKB BRN TDA13 [NOT FOUND 9N52 CALL 0 SEARCHDISC [SEARCH SPECIFIED DISC 9NJL BRN JLNOFILE [FILE NOT FOUND 9P4= ... BRN TDAEM [FOUND IT 9PHW # 9Q3G TDA12 CALL 5 STRINGOUT 9QH6 BRN JLNOFILE 9R2Q TDA13 CALL 5 STRINGOUT 9RGB BRN XERR1 9S22 # 9SFL # S/R TO OUTPUT 'UNITS INOP' MESSAGE. 9S^= # CALLED VIA X5, USES ALL ACCS. 9TDW STRINGOUT 9TYG STO 5 STRGLINK(2) [STORE LINK 9WD6 LDX 7 STRGMK(2) [REPORTING REQUIRED? 9WXQ BNG 7 STR2 [NO 9XCB LDX 7 NUMINOP(2) 9XX2 BZE 7 STR1 [ALL UNITS WERE OPERABLE 9YBL LDX 6 NUMINOP(2) 9YW= BZE 6 STR1 9^*W ADN 6 STRINOP+3(2) 9^TG LDN 5 STRREST(2) [MOVE 'INOPERABLE^*' TO =2*6 MOVE 5 4 [BACK OF MESSAGE =2SQ LDN 0 16 =3#B ADS 0 STRINOP(2) =3S2 SBN 7 1 =4?L BNZ 7 STR1 =4R= LDN 0 #6420 =5=W DSA 0 STRINOP+2(2) [REMOVE 'S' =5QG STR1 LDN 1 NEWLINE(2) =6=6 CALL 6 JLOUT [TROW TO NEXT LINE =6PQ LDN 1 STRINOP(2) =79B CALL 6 JLOUT [OUTPUT MESSAGE =7P2 STR2 LDN 0 8 =88L STO 0 STRINOP(2) [RECONSTRUCT MESSAGE =8N= LDX 0 SPACES(2) =97W STO 0 STRINOP+3(2) =9MG LDN 3 STRINOP+3(2) ==76 LDN 4 1(3) ==LQ MOVE 3 24 [CLEAR OUT LINE =?6B LDN 0 #6463 =?L2 DSA 0 STRINOP+2(2) [RESET 'S' =#5L LDX 5 STRGLINK(2) [RELOAD LINK =#K= EXIT 5 0 =M*2 # =MSL # =N#= # MT LOADER COMES HERE ON RECEIPT OF CT COMMAND =NRW # =P?G # CHECK FOR VALID MNEMONIC AS 1ST PARAM =PR6 JLCT LDCT 0 #400 =Q=Q ORS 0 PHLAGS(2) [ENSURE F0 SET =QQB W06 CALL 0 JLPOINT =R=2 LDN 2 0 =RPL MVCH 1 3 =S9= LDX 2 G3DOL =SNW SRL 0 6 =T8G SBX 0 WDAC(2) [ = DA, ? =TN6 BNZ 0 JLWRC [NO! =W7Q # EXTRACT SERIAL NO. - 2ND PARAMETER =WMB W01 LDN 7 0 [CLEAR RESULT ACC. =X72 LDN 6 7 [DIGIT CHECK COUNT =XLL W04 LDCH 5 0(1) =Y6= TXL 5 OCT8(2) =YKW BCS W02 [OCTAL CHAR =^5G SBN 6 7 =^K6 BZE 6 SERIALBAD [NULL SN. ?24Q TXU 5 SPACE(2) ?2JB BCC W05 [END OF USN ?342 BRN SERIALBAD [NOT A SPACE OR OCTAL ?3HL W02 BCT 6 W03 [CHECK NO.OF DIGITS ?43= BRN SERIALBAD [TOO MANY ?4GW W03 SLL 7 3 ?52G ADX 7 5 [ADD IN THIS DIGIT ?5G6 BCHX 1 £ ?5^Q BRN W04 [GO FOR ANOTHER CHAR ?6FB W05 STO 7 SERIALNUM(2) [STORE CONVERTED RESULT ?6^2 CALL 0 SEARCHBYSN [SEARCH FOR DISC HOLDING SU ?7DL BRN W16 [NOT FOUND ?7Y= STO 7 TYPEDISC(2) ?8CW # UNIT HAS BEEN LOCATED & DL POINTER IS IN JLPSBS, SUBTYPE IN X7. ?8XG # THE 1ST 128 WDS OF THE CONTROL HEADER BEGIN AT SCA. ?##W LDX 3 JLPSBS(2) ?#SG # ?*#6 # NOW HAVE FOLLOWING DETAILS OF DISC: ?*RQ # SERIALNUMBER IN SERIALNUM ?B?B # SUBTYPE IN X7 & JLBSUB ?BR2 # DL POINTER IN JLPSBS & X3 ?C=L # BLKS/CYL IN NOBPERC ?CQ= # NO.OF CYLS IN MAZSIZE ?D9W # ?DPG # MUST CHECK DISC TO BE INITIALISED : ?F96 # ?FNQ # *** BLOCK 1 *** ?G8B # ?GN2 # WDS 0-4 RED TAPE. ?H7L # 5-18 CONTROL HEADER. ?HM= # 19-54 2 FILE INDEX CELLS (FOR SYFLE & ICLSCAFILE). ?J6W # 55-72 UNASSIGNED FIC. ?JLG # ?K66 # *** BLOCK 2 *** ?KKQ # ?L5B # WDS 0-4 RED TAPE ?LK2 # 5-14 FACS FOR SYFLE & ICLSCAFILE ?M4L # 16-20 FIRST CELL IN CHAIN FOR UNALLOCATED AREAS ?MJ= # ?N3W # ?NHG # FIRST GET UNALLOC CHAIN HEAD: ?P36 # ?P*H ... SMO OSCA(2) ?PMY ... LDX 1 10(2) [GET POINTR FROM SCA ?Q2B BZE 1 XERR3 [NO UNALLOC AREAS ?QG2 CALL 6 XCONV [CONVERT TO HA ?Q^L STO 0 SDISCB+3(2) [INTO CA ?RF= LDN 1 SDISCB(2) ?RYW STOZ SDISCB(2) ?SDG CALL 0 PERIDISC [READ DOWN CHAIN ?SY6 NULL ?TCQ # ?TXB # BLOCK CONTAINING START OF CHAIN OF FAC'S FOR UNALLOC AREAS ?WC2 # NOW AT SCAFAC. CHAIN STARTS [WDPART] WDS FROM SCAFAC. ?WWL # WE LOOK FOR LAST CELL IN CHAIN WHICH SHOULD DESCRIBE ?XB= # ALMOST ALL OF THE DISC AS UNALLOCATED. ?XTW # ?Y*G ... LDX 1 OSCAFAC(2) ?YT6 W15 SMO WDPART(2) ?^#Q LDX 0 0(1) [GET FPTR ?^SB BZE 0 W14 [END OF CHAIN #2#2 ANDN 0 #177 [EXTRACT NEW PTR #2RL STO 0 WDPART(2) #3?= BRN W15 [TRY AGAIN #3KM ...W14 SMO OSCA(2) #3Y4 ... LDX 0 14 [NO. OF CYS ON DISC #4=G STO 0 MAXSIZE(2) [FOR DS COMMAND #4Q6 # #59Q # NO FOREIGN FILES ARE PERMITTED SO... #5PB # #63R ... SMO OSCA(2) #6B8 ... LDX 0 11 #6NL BNZ 0 XERR3 [NOT INITIALISED #78= # #7MW # THERE SHOULD BE FICS FOR SYFLE & ICLSCAFILE ONLY #87G # I.E. WD 53 OF SCA SHOULD BE #400:0 #8M6 # #96Q LDCT 0 #400 #9F7 ... SMO OSCA(2) #9RJ ... SBX 0 53 #=62 BNZ 0 XERR3 [NOT INITIALISED #=KL # #?5= # EVERYTHING SEEMS OK #?JW # ##4G LDCT 5 #300 ##J6 STO 5 PHLAGS(2) [F0=0,F2=F1=1 #*3Q STOZ XFILES(2) [CLEAR COUNT OF DS'S #*HB STO 3 SDISCDL(2) #B32 BRN JLXOK #BGL # #C2= W16 CALL 5 STRINGOUT [OUPUT ANY INOP UNITS #CFW BRN XERR1 #C^G # #DF6 # #DYQ # #FDB # MT LOADER COMES HERE IF A DS COMMAND IS RECEIVED. #FY2 # THE COMMAND IS VALIDATED & CONTENTS PLACED IN TABLE #GCL # XFILES; 5WD ENTRIES AFTER WD 0. #GX= # WD0 OF XFILES CONTAINS NO. OF CORRECT DS COMMANDS #HBW # SO FAR RECEIVED & THEN: #HWG # WDS0-2 FILENAME #JB6 # WD3 START CYLNO OF FILE #JTQ # WD4 END CYLNO OF FILE #K*B # #KT2 JLDS LDX 0 PHLAGS(2) #L#L BNG 0 XERR4 [WRONG CONTEXT #LS= SLL 0 2 #M?W BZE 0 XERR4 [WRONG CONTEXT #MRG LDN 0 1 #N?6 ADX 0 XFILES(2) #NQQ SBN 0 4 #P=B BPZ 0 XERR4 [ALREADY HAVE 3 GOOD DS COMMANDS #PQ2 CALL 0 JLPOINT #Q9L LDX 6 XFILES(2) #QP= MPY 6 XFIVE(2) #R8W ADN 7 XFILES+1(2) #RNG # EXTRACT FIRST PARAMETER [X7]-> VACANT WD IN FILE LIST #S86 CALL 0 JLFNAMEC [GET FILENAME #SMQ # #T7B # MUST CHECK THAT FILENAME HAS NOT APPEARED IN A PREVIOUS DS #TM2 # #W6L LDX 0 XFILES(2) #WL= BZE 0 ZDS9 [THIS DS #1 #X5W LDN 3 XFILES+1(2) #XKG LDX 4 FINAME(2) #Y56 LDX 5 FINAME+1(2) #YJQ LDX 6 FINAME+2(2) #^4B ZDS10 TXU 4 0(3) #^J2 TXU 5 1(3) *23L TXU 6 2(3) *2H= BCC XERR7 [= NAMES *32W ADN 3 5 [ELSE LOOK AT REST *3GG BCT 0 ZDS10 [IF ANY *426 ZDS9 *4FQ LDN 6 FINAME(2) *4^B MOVE 6 3 [PUT IN LIST *5F2 SMO 7 *5YL LDN 3 3 [POINTER THIS ENTRY IN XFILES, WD 3 *6D= ZDS8 LDN 4 2 [2 NUMBERS TO CONVERT *6XW ZDS5 BCHX 1 £ [LOOK AT NEXT OPERAND *7CG LDN 6 0 [CLEAR X *7X6 LDN 7 0 [CLEAR X* *8BQ ZDS6 CDB 6 0(1) *8WB BCS ZDS7 [NON-NUMERIC CHAR *9B2 BCHX 1 £ [GO FOR NEXT *9TL BRN ZDS6 *=*= ZDS7 BNZ 6 XERR5 [HUGE OPERAND *=SW BZE 7 XERR5 [SUMMAT WRONG *?#G LDCH 5 0(1) *?S6 TXU 4 ONE(2) *#?Q TXU 5 SPACE(2) *#RB BCC ZDS3 [SPACE AT END OF 3RD PARAM **?2 TXU 4 TWO(2) **QL TXU 5 COMMA(2) *B== BCS XERR5 [ERROR SOMEWHERE *BPW ZDS3 TXL 7 MAXSIZE(2) [COMPARE WITH MAX *C9G BCC XERR5 [CYLNO TOO BIG *CP6 STO 7 0(3) [INSERT STARTCYLNO *D8Q ADN 3 1 [ *DNB BCT 4 ZDS2 [GO FOR ANOTHER PARAM *F82 NGX 5 STOR(2) [X5]= -START CYLNO *FML ADX 5 7 [X5]= END - START *G7= BNG 5 XERR5 [INVALID *GLW LDX 0 XFILES(2) *H6G BZE 0 ZDS1 [FINISHED SINCE 1ST DS *HL6 SBN 3 6 [POINT TO LAST EC *J5Q LDX 6 0(3) [GET IT *JKB SBX 6 4(3) [- THIS SC *K52 ADN 6 1 [+1 *KJL BNZ 6 XERR5 [NOT CONTIGUOUS FILES *L4= BRN ZDS1 *LHW # *M3G ZDS2 STO 7 STOR(2) [STORE FIRST BIN VALUE *MH6 LDX 0 XFILES(2) *N2Q BNZ 0 ZDS5 [NOT 1ST DS *NGB # *P22 # FILES ARE TO START ON 1ST AVAILABLE CYLINDER *PFL # *P^= LDX 6 7 *QDW MPY 6 NOBPERC(2) [START BLKNO ASKED FOR *QQ= ... LDX 5 OSCAFAC(2) *R3L ... ADN 5 1 *R*2 ... SMO 5 *RLB ... TXU 7 WDPART(2) *RXQ BCS XERR5 [NOT THE SAME *SCB BRN ZDS5 *SX2 # *TBL ZDS1 LDN 0 1 *TW= ADS 0 XFILES(2) [UPDATE CORRECT DS COUNT *W*W LDCT 0 #500 *WTG ANDS 0 PHLAGS(2) [ENSURE F1=0 *X*6 BRN JLXOK *XSQ # *Y#B # *YS2 # *^?L # MT LOADER COMES HERE ON RECEIPT OF AN EF COMMAND. *^R= # WE NOW SET ABOUT ALLOCATING THE REQUESTED FILES. B2=W # B2QG # B3=6 JLEF LDX 0 PHLAGS(2) B3PQ SLL 0 1 B49B BNG 0 XERR4 [WRONG CONTEXT B4P2 SLL 0 1 B58L BZE 0 XERR4 [WRONG CONTEXT B5N= # B67W # FAC FORMAT: B6MG # B776 # WD 0 = 0-> END OF CHAIN B7LQ # 1 = BLK ADDR OF 1ST BLK IN FILE AREA B86B # 2 = BLK ADDR OF LAST BLK+1 IN FILE AREA B8L2 # 3 = SERIAL NO. B95L # 4 = BLKS/CYL OF UNIT B9K= # B=4W # DATA: B=JG # B?46 # SERIALNUM - SERIAL NO OF UNIT B?HQ # SDISCDL - PTR TO DL FOR DISC B#3B # TYPEDISC - DISC SUBTYPE B#H2 # XFILES - NO.OF FILES B*2L # XFILES+1->15 - DETAILS OF FILES B*G= # B*^W # BBFG LDN 5 0 [FIC POINTER BB^6 LDX 0 NOBPERC(2) BCDQ LDX 4 XFILES(2) [NO.OF FILES TO BE ALLOCATED. BCYB SMO WDPART(2) BD=R ... LDX 1 OSCAFAC(2) BDK8 ... ADN 1 5 [START OF VACENT FAC CHAIN BDXL LDN 3 XFILES+1(2) [START OF FILE INFO. BF=3 ...QEF1 SMO OSCA(2) BFJD ... LDX 6 12 [POINTER TO FAC WHICH IS... BFWW STO 6 TEMPLATE+1(2) [TO BE USED FOR THIS FILE. BGBG LDX 6 0(1) [UPDATE FREE FAC... BGNX ... SMO OSCA(2) BH3# ... STO 6 12 [CHAIN POINTER. BH*Q STOZ 0(1) [MARK FAC AS LAST. BHTB LDX 6 3(3) [START CYLNO OF FILE... BJ*2 MPY 6 0 [*NO.BLKS/CYL... BJSL STO 7 1(1) [GIVES START BLKNO OF FILE. BK#= LDX 6 4(3) [GET END CYLNO. BKRW ADN 6 1 BL?G MPY 6 0 BLR6 STO 7 2(1) [END BLKNO+1 BM=Q LDX 6 SERIALNUM(2) BMQB STO 6 3(1) [STORE SERIALNUM IN FAC BN=2 STO 0 4(1) [STORE BLKS/CYL IN FAC BNPL LDN 6 0(3) [->FILENAME BP9= LDN 7 TEMPLATE+2(2) BPNW MOVE 6 3 [->FIC & MOVE IN FN BQ8G LDN 6 TEMPLATE(2) BQN6 SMO 5 BR2H ... LDX 7 OSCA(2) BR#Y ... ADN 7 53 BRMB MOVE 6 17 [MOVE FIC ENTRY TO BUFFER BS72 # BSLL ADN 1 5 [POINT TO NEXT VACANT FAC BT6= ADN 3 5 BTKW ADN 5 17 BW5G BCT 4 QEF1 BWK6 # BX4Q # MUST UPDATE FAC FOR UNALLOCATED AREA. FILES HAVE BEEN BXJB # CLOSEPACKED SO NO NEW CELLS ARE NEEDED. BY42 # [X1]-3 IS ADDRESS OF WORD CONTAINING END BLKNO+1 OF LAST BYHL # FILE ALLOCATED, I.E. START BLKNO OF UNALLOCATED AREA B^3= # B^GW SBN 1 3 C22G LDX 6 0(1) C2?W ...QEF2 LDX 1 OSCAFAC(2) C2K= ... ADN 1 1 C2WL ... SMO WDPART(2) C382 ... STO 6 0(1) C3FB # C3^2 QEF4 C4DL # C4Y= # INSERT NEW CHECKSUMS C5CW # C5XG ... LDX 1 OSCA(2) C6C6 SUM 0 128 C6Q? ... SMO OSCA(2) C75D ... SBS 0 1 [BLOCK 1 C7DK ... LDX 1 OSCAFAC(2) C7RQ ... SUM 0 128 C86X ... SMO OSCAFAC(2) C8G4 ... SBS 0 1 [BLK CONTAINING FAC'S C8T= # C9#W # REWRITE BUFFERS C9SG # C=#6 LDN 1 SDISCA(2) [FOR SCA C=RQ LDN 7 1 C??B STO 7 0(1) [WRITE MODE C?R2 STO 7 SDISCB(2) [WRITE MODE C#=L LDX 3 SDISCDL(2) [DL PTR C#Q= CALL 0 PERIDISC [REWRITE SCA C*9W NULL C*PG LDN 1 SDISCB(2) [FOR FAC BLK CB96 CALL 0 PERIDISC [REWRITE FAC BLK CBNQ NULL CC8B LDCT 6 #200 CCN2 STO 6 PHLAGS(2) [F0=0,F1=1,F2=0 CD7L BRN JLXOK CDM= # CF6W # CFLG # CG66 # CGKQ # ERROR PATHS FOR CT,DS,EF DIRECTIVES CH5B # CHK2 XERR1 LDN 1 XEM1(2) CJ4L BRN JLER CKHG XERR3 LDN 1 XEM3(2) CL36 BRN JLER CLGQ XERR4 LDN 1 XEM4(2) CM2B BRN JLER CMG2 XERR5 LDN 1 XEM5(2) CM^L BRN JLER CNF= XERR6 BRN JLWRC CNYW XERR7 BRN JLUSED CPDG # CPY6 # DDWG ) DFB6 # DFTQ # DG5J ...#GAP 1023-0? DG*B #END ^^^^ ...260311030001