Show pageBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{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]] <code - LOADERFS867.txt>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 </code> Last modified: 17/01/2024 11:55by 127.0.0.1 Log In