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