7 22FL #BAS LOADFS,0 8 22_= #OPT K0LOADERFS=0 15 23DW #SEG LOADERFS85 [M.C.D. MANN 18 23HF ...# ######################################################## 4 23L4 ...# 16 23NM ...# (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 4 23R= ...# 18 23TT ...# ######################################################### 12 23YG #LIS K0LOADER>K0LOADERFS>K0ALLGEO 4 24D6 # 4 24XQ # 19 25CB # THIS SEGMENT IS ENTERED BY LOADERI AT K1LOADERFS : IT 18 25X2 # IMPLEMENTS THE ^FSLOAD^ MACRO BY COPYING THE FILESTORE 8 26BL # AT LOAD TIME 4 26W= # 4 27*W # 6 27TG K1LOADERFS 21 28*6 BRN X2LOADERFS [MUST BE THE FIRST WD IN THE SEGMENT 10 28SQ 8HLOADERFS 4 29#B # 4 29S2 # 19 2=?L # ^ODISC1^ AND ^ODISC2^ ARE ^DISC DESCRIPTION AREAS^ WHICH 17 2=R= # ARE SET UP BY THE OSEARCHDISC ROUTINE AND CONTAIN 19 2?=W # DESCRIPTIONS OF THE BASE AND RECIPIENT FILESTORE EXOFILES 4 2?QG # 19 2#=6 # FORMAT: BLDISC : WORDS 1-17 : FILE INDEX CELL (FIC) 20 2#PQ # BLADDR : WORD 18 : WORD ADDRESS OF THE FAC 19 2*9B # BLFAC : WORDS 19-23 : FILE AREA CELL (FAC) 20 2*P2 # BLSER : WORD 24 : CARTRIDGE SERIAL NUMBER 20 2B8L # BLSTART : WORD 25 : START ADDRESS OF THE UNIT 4 2BN= # 20 2C7W # FOR DETAILS OF FIC AND FAC FORMATS SEE PAGE 183.34 IN 1900 PRM 4 2CMG # 4 2D76 # 5 2DLQ ODISC1 5 2F6B #GAP 64 5 2FL2 ODISC2 5 2G5L #GAP 64 4 2GK= # 4 2H4W # 12 2HJG # DATA WORDS AND BUFFER AREAS: 4 2J46 # 4 2JHQ # 9 2K3B #ALT JLFSNAMES=0?+37? 17 2KH2 12HBASESTORE [DEFAULT ^BASE FILE^ 18 2L2L 12HDASTORE60 [DEFAULT ^RECIPIENT FILE^ 8 2LG= #ALT JLCOPY=0?+37? 19 2L_W -1 [ZERO IF COPYING FILESTORE 9 2MFG #ALT JLGENRES=0?+37? 21 2M_6 0 [-VE IF FORBIDDING GENERAL RESTORE 4 2NDQ # 8 2PD2 OSPACES 4H 21 2PXL OTYPECON #77 [INTERNAL TYPE OF OPERATOR'S CONSOLE 17 2QC= OLINK 0 [LINK BACK TO LOADERI 18 2QWW OINLINK 0 [LINK FOR OINCON ROUTINE 18 2RBG OUTLINK 0 [LINK FOR OUTCON ROUTINE 19 2RW6 OPDLINK 0 [LINK FOR OPERIDISC ROUTINE 19 2S*Q OSLINK 0 [LINK FOR SEARCHDISC ROUTINE 16 2STB OLGX3 0 [USED BY OLGEOG 20 2T*2 OFIXFLAG -1 [ZERO IF WE SHOULD ^FIX^ DISCS 18 2TSL OFINAME 12H [FILENAME FOR SEARCHDISC 19 2W#= ODISCP +ODISC1 [POINTER TO ODISC1 OR ODISC2 20 2WRW OBLKCYL1 0 [NO OF BLOCKS/CYL IN BASE FILE 21 2X?G OBLKCYL2 0 [NO OF BLOCKS/CYL IN RECIPIENT FILE 20 2XR6 OBLOCKCOUNT 0 [NUMBER OF BLOCKS TO BE COPIED 19 2Y=Q OPERIBLOCKS 0 [SIZE OF COPY PERI IN BLOCKS 20 2YQB OBLOCKS 0 [NUMBER OF BLOCKS COPIED SO FAR 17 2_=2 OLSTART 0 [USED BY SEARCHDISC 7 2_PL OLBS 0 20 329= OLBSUB 0 [SUB-TYPE OF LAST DISC SEARCHED 19 338G OWDPART 0 [FOR CONVERSION ROUTINE OCONV 19 33N6 ONOBPERC 0 [NO OF BLOCKS/CYL ON DEVICE 21 347Q ODCOUNT -1 [SET ZERO WHEN BOTH FILES FOUND OK 21 34MB ODISCA 0,128,+OSCA,0 [MODE/COUNT/CTSA/DTSA FOR READING SCA 21 3572 ODISCB 0,128,+OSCAFAC,0 [MODE/COUNT/CTSA/DTSA FOR FAC CHAIN 21 35LL ...ODISCINCA 0,0,+K19+(13*1024),0 [MODE/COUNT/CTSA/DTSA FOR DISC I/P 21 366= ...ODISCOUTCA 1,0,+K19+(13*1024),0 [MODE/COUNT/CTSA/DTSA FOR DISC O/P 19 36KW ODISCIN 0 [DL POINTER FOR BASE FS DISC 20 375G ODISCOUT 0 [DL POINTER FOR RECIPIENT FS DISC 20 37K6 OLAST #37777777 [LAST FIC WORD AND GENERAL MASK 20 384Q OINBUFF 8H [OPERATORS' CONSOLE INPUT BUFFER 8 388M ...XSYF 4HSYFL 9 38#J ...OOCT8 +8 9 38DF ...XSHARE #4000000 4 38JB # 4 3942 # 16 39HL # PSEUDO-ACTIVITY BLOCK FOR PERIPHERAL TRANSFERS 4 3=3= # 4 3=GW # 9 3?2G #REP CPPTR-CHAINADD+1 7 3?G6 0 19 3?_Q [DEVICE LIST POINTERS FOR: 4 3#FB # 18 3#_2 OPCONDL 0 [ 1) CENTRAL CONSOLE 7 3*DL 0 20 3*Y= ODISCDL 0 [ 2) ANY DISC DURING TRANSFER 7 3BCW 0 4 3BXG # 4 3CC6 # 13 3CWQ # MISCELLANEOUS OPERATOR MESSAGES 4 3DBB # 4 3DW2 # 15 3F*L OMCOPY 60,28H_*_*COPYING FILESTORE FROM 8 3FT= ONAME1 12H 8 3G#W 4HTO 8 3GSG ONAME2 12H 9 3H#6 4H_*_* 18 3HRQ OMNOFILE 53,40H_*_*FILENAME NOT FOUND_*IS 11 3J?B 13HIT AVAILABLE? 10 3JR2 OCANCEL 8,8H CANCEL 14 3K2S ...ONOTUDAS 23,23H UNIT 000 NOT UDAS_* 13 3K=L OMFIX 18,18H UNIT 000 FIX_* 19 3KQ= OMFAIL 42,42H UNIT 000 FAILED : FILESTORE COPY FAILED 18 3L9W OMINCOM 37,37H_*_*FILESTORE COPY FILES INCOMPATIBLE 10 3LPG OMTOOSMALL 50,8H_*_*FILE 8 3M96 OMTSNAME 12H 15 3MNQ 30H TOO SMALL FOR FILESTORE COPY 17 3N8B OMNOTFULL 33,33H_*_*FILESTORE FILE NOT FULL DEPTH 16 3NN2 OMNOCOPY 31,31H_*_*FILESTORE COPY SWITCHED OFF 16 3P7L OMGREQUEST 31,31H_*GENERAL RESTORE REQUESTED_*_* 17 3PM= OMGRSUPPRES 32,32H_*GENERAL RESTORE SUPPRESSED_*_* 16 3Q6W #SKI G4 [G4 ONLY MESSAGE 18 3QLG OMBIGEXEC 38,38HEXECUTIVE TOO LARGE FOR FILESTORE COPY 14 3QRN ...OVME 64,32H VME USING FILENAME 18 3QYW ... 32H FILESTORE COPYING ABANDONNED _* 4 3R66 # 4 3RKQ # 4 3S5B # 4 3SK2 # 11 3T4L # MISCELLANEOUS SUBROUTINES 4 3TJ= # 4 3W3W # 4 3WHG # 19 3X36 # SUBROUTINE TO INPUT A MESSAGE FROM THE CONSOLE TO OINBUFF 12 3XGQ # EXIT 1 - OK ; EXIT 0 - FAILED 4 3Y2B # 5 3YG2 OINCON 15 3Y_L STO 0 OINLINK(2) [SAVE LINK 16 3_F= LDX 4 OSPACES(2) [SPACEFILL ... 18 3_YW STO 4 OINBUFF(2) [ ... INPUT BUFFER 10 42DG STO 4 OINBUFF+1(2) 20 42Y6 LDX 3 OPCONDL(2) [OPERATOR'S CONSOLE DL POINTER 14 43CQ LDN 4 8 [COUNT 10 43XB DCA 3,STO,4,COUNT 15 44C2 LDN 4 0 [READ MODE 10 44WL DCA 3,STO,4,MODE 18 45B= LDN 4 OINBUFF(2) [ADDRESS OF INPUT BUFFER 10 45TW DCA 3,STO,4,CTSA 19 46*G LDN 1 OPCONDL-CPPTR(2) [ -> PSEUDO ACTIVITY BLOCK 17 46T6 GPERI 3,1,NC [INITIATE TRANSFER 17 47#Q OIN1 JBUSY 3,OIN1 [WAIT FOR TERMINATION 9 47JJ ... LDX 0 CPRW1(1) 7 47SB ... SLL 0 3 15 4848 ... BNG 0 OIN2 [J IF FAILED 16 48#2 LDX 0 OPCONDL+1(2) [GET REPLY WORD 7 48RL SLC 0 4 18 49?= BPZ 0 OIN3 [J IF INPUT SUCCESSFUL 19 49QW LDN 1 OCANCEL(2) [REPLY CANCELLED OR TOO LONG 19 4==G CALL 0 OUTCON [CANCEL MESSAGE TO CONSOLE 15 4=Q6 OIN2 LDX 0 OINLINK(2) [RESTORE LINK 16 4?9Q EXIT 0 0 [EXIT: FAILED 15 4?PB OIN3 LDX 0 OINLINK(2) [RESTORE LINK 15 4#92 EXIT 0 1 [EXIT: OK 4 4#NL # 19 4*8= # SUBROUTINE TO OUTPUT A MESSAGE TO THE OPERATOR'S CONSOLE 18 4*MW # MESSAGE POINTED TO BY X1 ON ENTRY - CALLED VIA X0 9 4B7G # USES X1, X3 AND X4 4 4BM6 # 5 4C6Q OUTCON 15 4CLB STO 0 OUTLINK(2) [SAVE LINK 9 4CQ? ... JENVNOT NDME,DME 10 4CW8 ... CALL 0 STOREDME 4 4D25 ...NDME 20 4D62 LDX 3 OPCONDL(2) [OPERATOR'S CONSOLE DL POINTER 14 4DKL LDX 4 0(1) [COUNT 10 4F5= DCA 3,STO,4,COUNT 18 4FJW LDN 4 1(1) [CORE ADDRESS OF MESSAGE 10 4G4G DCA 3,STO,4,CTSA 15 4GJ6 LDN 4 1 [WRITE MODE 10 4H3Q DCA 3,STO,4,MODE 19 4HHB LDN 1 OPCONDL-CPPTR(2) [ -> PSEUDO ACTIVITY BLOCK 17 4J32 TC1 GPERI 3,1,NC [INITIATE TRANSFER 17 4JGL TC2 JBUSY 3,TC2 [WAIT FOR TERMINATION 16 4K2= LDX 4 OPCONDL+1(2) [GET REPLY WORD 8 4KFW SRL 4 18 17 4K_G BNZ 4 TC1 [FAILURE...TRY AGAIN 15 4LF6 LDX 0 OUTLINK(2) [RESTORE LINK 15 4LYQ EXIT 0 0 [TRANSFER OK 4 4L_5 ...# 15 4L_D ...# ROUTINE TO STORE CONSOLE INPUT & OUTPUT 9 4L_R ...# MESSAGES FOR DME 16 4M26 ...# CALLED VIA X0 ; X1 POINTS TO MESSAGE 4 4M2F ...# 5 4M2S ...STOREDME 16 4M37 ... LDX 4 0(1) [COUNT IN CHARS 15 4M3G ... BZE 4 SDM9 [NO MESSAGE 19 4M3T ... ADN 4 7 [ROUND UP & MAKE INCLUSIVE 16 4M48 ... SRL 4 2 [FOR WORD COUNT 9 4M4H ... LDX 2 G3DOL 10 4M4W ... LDX 5 JMESSTIME(2) 17 4M59 ... BZE 5 SDM3 [NOT A VIRGIN ROUTINE 14 4M5J ... STOZ JMESSTIME(2) [LOSE IT 10 4M5X ... LDX 2 JOPMESS(2) 16 4M6= ... LDX 2 0(2) [LOOK AT K42 AREA 15 4M6K ... BNZ 2 SDM1 [CAME VIA L/A 8 4M6Y ... LDX 2 G3DOL 16 4M7? ... LDX 5 JPOSMESS(2) [BUFFER ADDRESS 10 4M7L ... SMO JOPMESS(2) 17 4M7_ ... STO 5 0 [NEEDED FOR JOURNAL 7 4M8# ... LDX 2 5 8 4M8M ... BRN SDM4 16 4M92 ...SDM2 ADX 2 5 [MOVE UP BUFFER 16 4M9* ...SDM1 LDX 5 0(2) [VALUE OF COUNT 17 4M9N ... BNZ 5 SDM2 [MORE MESSAGES THERE 8 4M=3 ... SMO G3DOL 18 4M=B ... STO 2 JPOSMESS [UPDATE BUFFER POINTER 8 4M=P ... BRN SDM4 10 4M?4 ...SDM3 LDX 2 JPOSMESS(2) 16 4M?C ...SDM4 STO 4 0(2) [STORE WORD COUNT 7 4M?Q ... LDX 5 2 16 4M#5 ... ADN 5 1 [START OF MESSAGE 8 4M#D ... LDN 4 1(1) 8 4M#R ... SMO 0(2) 16 4M*6 ... MOVE 4 0 [FILL IN BUFFER 16 4M*F ... ADX 2 0(2) [MOVE UP BUFFER 8 4M*S ... STOZ 0(2) 8 4MB7 ... SMO G3DOL 9 4MBG ... STO 2 JPOSMESS 8 4MBT ... LDX 2 18 7 4MC8 ...SDM9 EXIT 0 0 4 4MDB # 4 4MY2 # 15 4NCL # S/R TO PLACE GEOGNO IN FIX/FAIL MESSAGE 13 4NX= # CALLED VIA X0, USES X4 X5 16 4PBW # EXPECTS X3->DL FOR DEVICE, X1-> MESSAGE 4 4PWG # 5 4QB6 OLGEOG 9 4QTQ STO 3 OLGX3(2) 8 4R*B LGEOG 3,5 8 4RT2 LDN 4 10 7 4S#L DVS 4 4 7 4SS= LDX 3 4 8 4T?W LDN 4 10 7 4TRG DVS 4 4 8 4W?6 BNZ 5 XGG1 8 4WQQ LDN 5 #20 8 4X=B BNZ 4 XGG1 8 4XQ2 LDN 4 #20 8 4Y9L XGG1 SLL 5 12 7 4YP= SLL 4 6 7 4_8W ORX 5 3 8 4_NG LDCT 3 #200 7 5286 ORX 3 5 7 52MQ ORX 3 4 8 537B STO 3 3(1) 9 53M2 LDX 3 OLGX3(2) 7 546L EXIT 0 0 4 54L= # 4 555W # 4 55KG # 12 5656 # S/R TO PERFORM DISC TRANSFERS 10 56JQ # CALLED VIA X0 13 574B # EXPECTS X3 -> RELEVANT DL 12 57J2 # X1 -> CA WORDS 4 583L # 10 58H= # FAILURE CONDITIONS: 4 592W # 21 59GG # 1) DISC OFFLINE ON ENTRY : IF OFIXFLAG = 0, PRINT 21 5=26 # ^FIX^ MESSAGE AND WAIT 20 5=FQ # FOR RE-ENGAGEMENT, 18 5=_B # ELSE EXIT 0 0 20 5?F2 # 2) DISC FAIL DURING TRANSFER : PRINT ^FAIL^ MESSAGE 18 5?YL # AND EXIT 0 0 21 5#D= # 3) DISC DISENGAGED DURING TRANSFER : PRINT ^FIX^ MESSAGE AND 21 5#XW # WAIT FOR RE-ENGAGEMENT 4 5*CG # 12 5*X6 # NORMAL EXIT : EXIT 0 1 4 5BBQ # 6 5BWB OPERIDISC 10 5CB2 STO 0 OPDLINK(2) 18 5CTL STO 3 ODISCDL(2) [DL PTR TO PSEUDO-ACT.BLK 8 5D*= LDX 0 0(1) 10 5DSW DCA 3,STO,0,MODE 8 5F#G LDX 0 1(1) 10 5FS6 DCA 3,STO,0,COUNT 8 5G?Q LDX 0 2(1) 10 5GRB DCA 3,STO,0,CTSA 8 5H?2 LDX 0 3(1) 10 5HQL DCA 3,STO,0,DTSA 4 5J== # 11 5JPW # READY TO ATTEMPT TRANSFER 4 5K9G # 19 5KP6 JDISENG 3,PD7 [J IF THE UNIT ISN'T ENGAGED 18 5L8Q PD1 LDN 1 ODISCDL-CPPTR(2) [POINT TO PSEUDO-ACT.BLK 17 5LNB GPERI 3,1,NC [INITIATE TRANSFER 17 5M82 PD2 JBUSY 3,PD2 [WAIT FOR TERMINATION 9 5MCS ... LDX 0 CPRW1(1) 7 5MML ... SLL 0 3 16 5MXD ... BNG 0 PD3 [TRANSFER FAILURE 10 5N7= LDX 0 OPDLINK(2) 15 5NLW EXIT 0 1 [NORMAL EXIT 17 5P6G PD3 LDX 1 ODISCDL+1(2) [PICK UP THE REPLY 8 5PL6 SRL 1 18 17 5Q5Q BNZ 1 PD6 [J IF REAL FAILURE 17 5QKB PD4 LDN 1 OMFIX(2) [IT JUST NEEDS FIXING 18 5R52 CALL 0 OLGEOG [SO GET ITS UNIT NUMBER 20 5RJL CALL 0 OUTCON [AND ASK THE OPERATORS TO FIX IT 20 5S4= LDX 3 ODISCDL(2) [RESTORE THE DEVICE LIST POINTER 15 5SHW PD5 JDISENG 3,PD5 [WAIT FOR FIX 16 5T3G BRN PD1 [AND TRY AGAIN 9 5TH6 PD6 LDN 1 OMFAIL(2) 18 5W2Q CALL 0 OLGEOG [CONSTRUCT A FAIL MESSAGE 16 5WGB CALL 0 OUTCON [OUTPUT MESSAGE 20 5X22 LDX 3 ODISCDL(2) [RESTORE THE DEVICE LIST POINTER 20 5XFL BRN PD8 [EXIT : DISC FAIL SO ABORT COPY 18 5X_= PD7 LDX 0 OFIXFLAG(2) [THE DISC ISN'T ENGAGED 18 5YDW BZE 0 PD4 [J IF WE WANT IT FIXED 19 5YYG PD8 LDX 0 OPDLINK(2) [ELSE JUST LOOKING FOR A FILE 18 5_D6 EXIT 0 0 [SO EXIT : NOT FOUND 4 5_XQ # 4 62CB # 19 62X2 # S/R TO CONVERT WD-ADDR IN X1 TO HARDWARE ADDRESS IN X0. 15 63BL # DEVICE SUBTYPE EXPECTED IN OLBSUB. 15 63W= # NO.BLKS/CYL EXPECTED IN ONOBPERC. 16 64*W # START CYLNO OF SU EXPECTED IN OLSTART. 13 64TG # LEAVES WORD PART IN OWDPART. 10 65*6 # CALLED VIA X6. 4 65SQ # 7 66#B OCONV LDN 0 0 8 66S2 SLL 01 17 8 67?L SRL 1 17 10 67R= STO 1 OWDPART(2) 7 68=W LDX 1 0 4 68B2 ...# 12 68F6 ...# [X1]=HARDWARE BLOCK ADDRESS 4 68J= ...# 5 68MB ...OCONV2 15 68QG DVS 0 ONOBPERC(2) [/BLKSPERCYL 4 69=6 # 11 69PQ # [X0]=BLKNO & [X1]=CYLNO 4 6=9B # 5 6=P2 OCONV1 15 6?8L ADX 1 OLSTART(2) [+BASE OF SU 9 6?N= SMO OLBSUB(2) 19 6#7W BRN / [BRANCH TO RELEVANT ROUTINE 4 6#MG X 6 6*76 #TRA X+EDS 8 6*LQ BRN XCEDS 6 6B6B #TRA X+EMDS 9 6BL2 BRN XCEMDS 8 6C5L ...#TRA EDS>EMDS+X+1 5 6F7W ...XCEDS 17 6F?L ... JNENVX NOEMU,MEEP,7 [J IF NOT EMULATING 7 6FCB ... LDX 7 1 18 6FG8 ... MPA 7 ONOBPERC(2) [CONVERT BACK TO BLOCKS 8 6FK2 ... LDCT 1 #400 7 6FMS ... ADX 0 1 7 6FQL ... EXIT 6 0 5 6FTD ...NOEMU 7 6FY= ... LDN 7 0 8 6G3B SLL 70 21 7 6GH2 SLL 7 3 7 6H2L SLL 70 3 8 6HG= SLL 01 20 7 6H_W SLL 0 2 8 6JFG SLL 01 16 7 6J_6 ORX 0 7 7 6KDQ EXIT 6 0 4 6RRW # 9 6S?G ...# EDS30 ADDRESSES. 4 6SR6 # 5 6TQB XCEMDS 8 6W=2 SLL 0 12 8 6WPL SRC 01 12 7 6X9= EXIT 6 0 4 6XNW # 4 6Y8G # 18 6YN6 # S/R TO SEARCH SPECIFIED DISC (BY DL) FOR GIVEN FILE 20 6_7Q # EXPECTS X3-> DL FOR A DISC, OLBSUB TO CONTAIN SUBTYPE OF 19 6_MB # DISC & OFINAME TO CONTAIN NAME OF FILE TO BE FOUND. 16 7272 # CALLED VIA X0. ON RETURN X3-> DL STILL. 19 72LL # EXITS 0 IF FILE NOT FOUND ELSE EXITS 1 HAVING SET 20 736= # X1->FAC FOR THE FILE, & HAVING FILLED IN BLDISC, BLADDR, 19 73KW # BLSER, & BLSTART IN AREA POINTED TO BY ODISCP(2) 4 745G # 4 74K6 # 6 754Q OSEARCHDISC 16 75JB STO 0 OSLINK(2) [SAVE THE LINK 13 7642 LDN 4 0 [SU 0 20 76HL LDX 7 OLBSUB(2) [SUBTYPE OF DISC TO BE SEARCHED 17 773= STUBASEX 4,6,7 [GET BASE OF SU(4) 20 77GW STO 6 OLSTART(2) [SAVE THE BASE FOR USE BY OCONV 9 782G SMO ODISCP(2) 18 78G6 STO 6 BLSTART [AND FOR YER ACTUAL COPY 15 78_Q LDN 1 0 [CYLNO 0 AND 21 79FB LDN 0 1 [BLKNO 1 FOR THE SYSTEM CONTROL AREA 20 79_2 CALL 6 OCONV1 [CONVERT IT TO A HARDWARE ADDRESS 9 7=DL LDN 1 ODISCA(2) 18 7=Y= STO 0 3(1) [DTSA FOR READING THE SCA 16 7?CW STOZ 0(1) [SET READ MODE 20 7?XG CALL 0 OPERIDISC [AND READ THE SYSTEM CONTROL AREA 9 7?YN ... BRN SDINOPFL 19 7?_? ... LDX 0 OSCA+1(2) [ CHECK THAT DISC IS UDAS 3 7?_W ... 8 7#34 ... BZE 0 SN61 9 7#4= ... LDN 1 OSCA(2) 15 7#5D ... SUM 0 128 [ CHECKSUM 9 7#6L ... BNZ 0 XERR2 10 7#7S ...SN61 LDX 0 OSCA+21(2) 15 7#92 ... TXU 0 XSYF(2) [ SYFLE? 9 7#=8 ... BCS XERR2 8 7#?B ... LDN 0 0 8 7##J ... LDN 6 6 8 7#*Q ... LDCT 1 #400 10 7#BY ... ORN 1 OSCA+22(2) 17 7#D6 ...SN62 LDCH 5 0(1) [ CSN WITH SYFLE = 9 7#F# ... TXL 5 OOCT8(2) 17 7#GG ... BCC XERR2 [ CSN IN SCA+5 ? 8 7#HN ... SLL 0 3 8 7#JW ... ADX 0 5 8 7#L4 ... BCHX 1 / 8 7#M= ... BCT 6 SN62 10 7#ND ... LDX 6 OSCA+5(2) 8 7#PL ... SLL 6 6 8 7#QS ... SRL 6 6 8 7#S2 ... TXU 0 6 9 7#T8 ... BCS XERR2 21 7#WQ LDX 0 OSCA+13(2) [GET NUMBER OF BLOCKS PER CYLINDER 10 7*BB STO 0 ONOBPERC(2) 20 7*W2 LDX 0 OSCA+5(2) [PICK UP THE INIT'S SERIAL NUMBER 7 7B*L SLL 0 6 15 7BT= SRL 0 6 [ISOLATE IT 9 7C#W SMO ODISCP(2) 20 7CSG STO 0 BLSER [AND STORE IN ODISC1 OR ODISC2 15 7D#6 LDN 1 OSCA+19(2) [FIRST FIC 19 7DRQ LDN 5 147 [BS ADDR OF IT, BLK 1 WD 19 4 7F?B # 8 7FR2 SD5 LDX 4 0(1) 17 7G=L BNG 4 SDNO [LAST CELL JUST GONE 8 7GQ= SD1 LDX 0 2(1) 8 7H9W LDX 6 3(1) 19 7HPG LDX 7 4(1) [GET THE FILENAME FROM FIC 10 7J96 TXU 0 OFINAME(2) 10 7JNQ TXU 6 OFINAME+1(2) 20 7K8B TXU 7 OFINAME+2(2) [AND COMPARE WITH THAT REQUIRED 15 7KN2 BCC SD3 [THIS IS IT 9 7L7L SD6 TXU 4 OLAST(2) 15 7LM= BCC SDNO [LAST CELL 19 7M6W BNZ 4 SD4 [NEXT CELL IN DIFFERENT BLOCK 16 7MLG ADN 1 17 [UPDATE CORE AND 15 7N66 ADN 5 17 [BS ADDRESSES 15 7NKQ BRN SD5 [TRY AGAIN 4 7P5B # 19 7PK2 SD4 STO 4 1 [X1=PTR TO NEXT FIC FOR OCONV 17 7Q4L STO 4 5 [DESTINED FOR BLADDR 20 7QJ= CALL 6 OCONV [GET HARDWARE ADDRESS OF THE FIC 9 7R3W LDN 1 ODISCB(2) 16 7RHG STO 0 3(1) [STORE THE DTSA 16 7S36 STOZ 0(1) [SET READ MODE 19 7SGQ CALL 0 OPERIDISC [GET THE NEXT FILE INDEX CELL 18 7T2B BRN SDINOPFL [INOP/FAIL SO NOT FOUND 10 7TG2 SMO OWDPART(2) 17 7T_L LDN 1 OSCAFAC(2) [POINT TO IT IN CORE 18 7WF= BRN SD5 [AND HAVE A LOOK AT IT 4 7WYW # 19 7XDG SD3 LDX 0 6(1) [WE'VE FOUND THE REQUIRED FIC 8 7XY6 SRL 0 12 17 7YCQ BNZ 0 SD6 [MUST HAVE GENNO=0 9 7YXB SMO ODISCP(2) 9 7_C2 LDN 2 BLDISC 19 7_WL MOVE 1 17 [MOVE FIC TO ODISC1 OR ODISC2 8 82B= LDX 2 18 9 82TW SMO ODISCP(2) 17 83*G STO 5 BLADDR [WORD ADDRESS OF FAC 17 83T6 LDX 1 1(1) [WORD ADDRESS OF FAC 16 84#Q CALL 6 OCONV [HA ADDR -> X0 9 84SB LDN 1 ODISCB(2) 16 85#2 STO 0 3(1) [STORE THE DTSA 16 85RL STOZ 0(1) [SET READ MODE 21 86?= CALL 0 OPERIDISC [READ DOWN BLOCK CONTAINING THE FAC 18 86QW BRN SDINOPFL [INOP/FAIL SO NOT FOUND 10 87=G SMO OWDPART(2) 10 87Q6 LDN 0 OSCAFAC(2) 9 889Q SMO ODISCP(2) 8 88PB LDN 1 BLFAC 20 8992 LDX 6 3(1) [GET SERIAL NUMBER OF FA UNIT AND 7 89NL SLL 6 6 7 8=8= SRL 6 6 8 8=MW BZE 6 SD7 21 8?7G SMO ODISCP(2) [COMPARE IT WITH THAT OF HOME UNIT 8 8?M6 TXU 6 BLSER 21 8#6Q BCS SDNO [IT'S ON ANOTHER UNIT SO IGNORE IT 4 8#LB SD7 20 8*62 MOVE 0 5 [MOVE THE FAC TO ODISC1 OR ODISC2 11 8*6? ...# THIS CODE IS FOR THE FULL 10 8*6J ...# IMPLEMENTATION OF SHARE 10 8*6T ... JENVNOT NCME,CME 10 8*7N ... JNCMESH 3,NCME 11 8*85 ...# THE BRN SHOULD BE REMOVED 13 8*8G ...# WHEN (IF) FULL SHARE IS IMPLEMENTED 8 8*8X ... BRN NCME 10 8*9B ... LDX 0 XSHARE(2) 10 8*=9 ... LDN 1 ODISCP(2) 9 8*?4 ... ADX 0 BLSER(1) 10 8*?X ... LDX 1 BLADDR(1) 10 8*#Q ... SHOPEN ,,XFAIL 8 8**K ... BRN NCME 10 8*BD ...XFAIL LDN 6 OVME+5(2) 10 8*C? ... LDN 5 OFINAME(2) 8 8*D6 ... MOVE 5 3 8 8*D_ ... LDN 1 OVME 9 8*FS ... CALL 0 OUTCON 9 8*GM ... BRN OGRFORCE 9 8*HG ...NCME SMO ODISCP(2) 9 8*J* ... LDN 1 BLFAC 9 8*KL LDX 0 OSLINK(2) 15 8B5= EXIT 0 1 [FILE FOUND!! 16 8B8B ...XERR2 LDN 1 ONOTUDAS(2) [ FILE NOT UDAS 9 8B?G ... CALL 0 OLGEOG 9 8BBL ... CALL 0 OUTCON 10 8BFQ ... LDX 3 ODISCDL(2) 4 8BJW # 5 8C4G SDINOPFL 9 8CJ6 SDNO LDX 0 OSLINK(2) 21 8D3Q EXIT 0 0 [FILE NOT FOUND...OUR COMMISERATIONS 4 8DHB # 4 8F32 # 20 8FGL # MAIN ENTRY POINT TO LOADERFS : THIS IS WHERE THE ACTION IS 4 8G2= # 4 8GFW # 6 8G_G X2LOADERFS 4 8HF6 # 18 8HYQ CALL 2 / [DATUMISE THIS SEGMENT 10 8JDB SBN 2 X2LOADERFS+1 21 8JY2 STO 2 18 [AND SAVE BASE CORE DATUM IN WORD 18 20 8KCL STO 7 OLINK(2) [SAVE THE LINK BACK TO LOADERI 21 8KX= FINDPEREC 1,APFOTY,OTYPECON(2),XCON [SEARCH FOR A CENTRAL CONSOLE 19 8LBW BPZ 1 XCONFOUND [J IF A CONSOLE IS AVAILABLE 17 8LWG GEOERR 1,LOADNOCN [DON'T BELEIVE IT! 6 8MB6 XCONFOUND 21 8MTQ JWRONG 1,XCON [IF CONSOLE WRONGED, TRY THE NEXT ONE 21 8N*B STO 1 OPCONDL(2) [SAVE CONSOLE'S DEVICE LIST POINTER 20 8NT2 LDX 0 JLCOPY(2) [ARE WE COPYING THE FILESTORE? 14 8P#L BNG 0 ONOFSCOPY [J IF NOT 20 8PS= ADS 2 ODISCA+2(2) [DATUMISE POINTERS TO THE DISC 21 8Q?W ADS 2 ODISCB+2(2) [ CONTROL AREAS TO READ FAC + FIC 21 8QRG ADS 2 ODISCP(2) [AND THE POINTER TO FIRST FIC AREA 10 8R?6 S1 LDN 6 JLFSNAMES(2) 21 8RQQ LDN 7 OFINAME(2) [SEARCH FOR THE BASE FILESTORE FILE 7 8S=B MOVE 6 3 7 8SQ2 S2 LDN 0 6 9 8T9L STO 0 OLBS(2) 8 8TP= LDN 0 EDS 9 8W8W STO 0 OLBSUB(2) 18 8WNG S3 FINDPEREC 3,APFOTY,OLBS(2),S4 [LOOK FOR AN ONLINE DISC 20 8X86 BNG 3 S7 [J IF NO MORE DISCS OF THIS TYPE 20 944B S6 CALL 0 OSEARCHDISC [LOOK FOR THE FILE ON THIS DISC 21 94J2 BRN S4 [THE FILE ISN'T THERE: LOOK ELSEWHERE 18 953L BRN OFOUND [J IF FOUND ON THIS DISC 9 95H= S7 LDX 0 OLBS(2) 7 962W SBN 0 6 18 98YL BNZ 0 S9 [J IF NOT FOUND ANYWHERE 8 99D= LDN 0 26 9 99XW STO 0 OLBS(2) 8 9=CG LDN 0 EMDS 9 9=X6 STO 0 OLBSUB(2) 17 9?BQ BRN S3 [TRY EDS30 AND EDS60 18 9?WB S9 LDN 6 OFINAME(2) [FILE NOT FOUND ANYWHERE 10 9#B2 LDN 7 OMNOFILE+4(2) 7 9#TL BCHX 7 / 21 9**= MVCH 6 12 [SO PUT THE FILENAME IN THE MESSAGE 18 9*SW S10 LDN 1 OMNOFILE(2) [AND ASK THE OPERATORS 17 9B#G CALL 0 OUTCON [IF IT'S AVAILABLE 16 9BS6 CALL 0 OINCON [GET THEIR REPLY 20 9C?Q BRN S10 [J IF REPLY CANCELLED OR FAILED 20 9CRB LDCH 7 OINBUFF(2) [PICK UP FIRST CHARACTER OF REPLY 8 9D?2 SBN 7 #56 21 9DQL BZE 7 OGRFORCE [REPLY ^N^ SO FORCE A GENERAL RESTORE 9 9F== SBN 7 #71-#56 20 9FPW BNZ 7 S10 [J IF REPLY NOT ^Y^ - ASK AGAIN! 10 9G9G LDX 7 ODCOUNT(2) 20 9GP6 BZE 7 S11 [LOOK AGAIN FOR THE SECOND FILE 20 9H8Q BRN S2 [LOOK AGAIN FOR THE FIRST FILE 5 9HNB OFOUND 10 9J82 LDX 7 ODCOUNT(2) 18 9JML BZE 7 OFOUND2 [J IF BOTH FILES FOUND OK 21 9K7= STO 3 ODISCIN(2) [SAVE DL POINTER FOR FIRST FS DISC 20 9KLW LDX 7 ONOBPERC(2) [REMEMBER NUMBER OF BLOCKS PER 18 9L6G STO 7 OBLKCYL1(2) [CYLINDER ON THIS DEVICE 21 9LL6 STOZ ODCOUNT(2) [SET FLAG TO SEARCH FOR SECOND FILE 11 9M5Q S11 LDN 6 JLFSNAMES+3(2) 19 9MKB LDN 7 OFINAME(2) [SET SECOND DISC FILE NAME 7 9N52 MOVE 6 3 17 9NJL LDN 7 ODISC2(2) [SET FIC AREA POINTER 9 9P4= STO 7 ODISCP(2) 20 9PHW BRN S2 [AND SEARCH FOR THE SECOND FILE 6 9Q3G ONOFSCOPY 19 9QH6 LDN 1 OMNOCOPY(2) [PRINT ^FS COPY SWITCHED OFF^ 21 9R2Q CALL 0 OUTCON [MESSAGE ON THE OPERATORS' CONSOLE 21 9RGB LDX 7 JLGENRES(2) [IS A GENERAL RESTORE BEING FORCED? 20 9S22 BNG 7 ONOGENRES [J IF NOT AND SUPPRESS A GEN RES 4 9SFL # 21 9S_= BRN OGRFORCE [OTHERWISE FORCE A GENERAL RESTORE 4 9TDW # 4 9TYG # 5 9WD6 OFOUND2 20 9WXQ STO 3 ODISCOUT(2) [SAVE DL POINTER FOR 2ND FS DISC 20 9XCB LDX 7 ONOBPERC(2) [REMEMBER NUMBER OF BLOCKS PER 18 9XX2 STO 7 OBLKCYL2(2) [CYLINDER ON THIS DEVICE 20 9YBL TXU 7 OBLKCYL1(2) [ARE THE TWO FILES COMPATIBLE? 21 9YW= BCC OSTARTCOPY [J IF THEY ARE (EQUAL BLOCKS/CYLINDER 19 9_*W LDN 1 OMINCOM(2) [PRINT ^FILES INCOMPATIBLE^ 21 9_TG CALL 0 OUTCON [MESSAGE ON THE OPERATORS' CONSOLE 19 =2*6 BRN OGRFORCE [AND FORCE A GENERAL RESTORE 4 =2SQ # 4 =3#B # 15 =3S2 #ALT K9LOADERFS=0?+37? [MEND AREA 6 =4?L #GAP 100 4 =4R= # 4 =5=W # 4 =5QG #END 6 ____ ...415271750001