13 22FL SEG CAFSPERI,865,D. A. BELL 4 22KH ...# 16 22PD ...# COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 4 22T* ...# 4 22_= # 4 23DW # 20 23YG # THIS SEGMENT DEALS WITH THE UDAS MODES #12 AND #13 THAT ARE 19 24D6 # USED TO ISSUE TASKS TO A CAFS SUBSYSTEM. THEY ARE ONLY 20 24XQ # PERMITTED ON AN ONLINE *DA CHANNEL AND ARE DIVERTED TO THIS 10 25CB # SEGMENT FROM PERION 4 25X2 # 4 26BL # 4 26W= # 11 27*W SEGENTRY K1CAFSPERI,XK1 4 27TG # 4 28*6 # 17 28SQ # FIRST WE HAVE SOME DEFINITIONS OF USEFUL LOCATIONS 18 29#B # THAT WILL CONTAIN INFORMATION TAKEN FROM THE OBJECT 16 29S2 # PROGRAM AS PART OF PROCESSING THE EXTRACODE 4 2=?L # 9 2=R= #DEF TASKLEN=ACOMMUNE3 9 2?=W #DEF TASKADDR=ACOMMUNE4 8 2?QG #DEF TASKMINLEN=5 9 2#=6 #DEF TASKMODE=ACOMMUNE1 10 2#PQ #DEF TASKCSNDV=ACOMMUNE3 9 2*9B #DEF TASKCSN=ACOMMUNE5 4 2*P2 # 9 2B8L #DEF TASKCYL=ACOMMUNE2 4 2BN= # 21 2C7W # NOW WE HAVE SOME PRESETS (MAINLY MESSAGE IDENTIFIERS FOR ILLEGALS) 4 2CMG # 4 2D76 # 9 2DLQ XMODE +JYMODE 9 2F6B XRVCA +JYNOCA 10 2FL2 XRESV +JYRESVIOL 10 2G5L XNOWR +JYNOWRITE 4 2GK= # 4 2H4W # 18 2HJG SEGENTRY K50CAFSPERI [USED BY CAFSPRIV MACRO 4 2J46 # 10 2JHQ PRIVNAME 8HCAFSMODE 4 2K3B # 21 2KH2 QFABSNB 4,12HDA [FRAME OF /FABSNB FOR SECURITY CHECKS 4 2L2L # 5 2LG= SLINK1 9 2L_W LINK PERION,1 4 2MFG # 4 2M_6 # 11 2NDQ XK1 [ENTRY POINT ONE 4 2NYB # 20 2PD2 # WE CAN BE ENTERED HERE FOR EITHER MODE #12 OR MODE #13 ORDERS 21 2PXL # AND THE FIRST THING WE MUST DO IS TO SEPARATE ONE FROM THE OTHER 4 2QC= # 4 2QWW # 20 2RBG LDEX 0 EVENT4(2) [GET MODE OF OBJ PROG PERI ORDER 8 2RW6 SBN 0 #12 19 2S*Q BNZ 0 SMODE13 [JIF THIS IS A MODE #13 ORDER 4 2STB # 4 2T*2 # 20 2TSL # THIS IS THE CODE FOR THE MODE #12 PERI TO ISSUE A CAFS TASK 4 2W#= # 21 2WRW # IT IS ONLY ENTERED WHEN THE INFORMATION AVAILABLE TO EXECUTIVE IS 19 2X?G # NOT SUFFICIENT FOR FOR THE TRANSFER TO BE HANDLED DIRECTLY 4 2XR6 # 21 2Y=Q # THE REASON FOR ENTRY IS GIVEN IN THE WORD 'CFREASON' IN THE OLPA 14 2YQB # AND CURRENT PERMITTED SETTINGS ARE: 4 2_=2 # 20 2_PL # 0 - READ VALIDATION CHECKS HAVE FAILED (IE APPROPRIATE BIT 13 329= # IN 'CFRDBITS' IS NOT SET) 16 32NW # 1 - CHANNEL NOT YET INITIALISED FOR CAFS 19 338G # 2 - 'CAFS WRITE' TRANSFER (FOR CYLINDER VALIDATION) 19 33N6 # 3 - OUTSTANDING ENGAGE BUTTONS ON THE SPECIFIED DRIVE 14 347Q # (IE GEORGE IS LAGGING BEHIND) 4 34MB # 21 3572 # FIRST WE CHECK THAT THE CONTROL AREA (5 WORDS) IN IN RESERVATIONS 21 35LL # AND WE EXTRACT THE FIRST FOUR WORDS INTO THE ACOMMUNE AREA OF THE 6 366= # OLPA 4 36KW # 20 375G LDX 7 XRVCA(1) [PRESET CORRECT ILLEGAL MESSAGE 16 37K6 LDN 6 5 [LENGTH TO CHECK 20 384Q CHECKEXT EVENT2(2),6,XILLOLPA,APETADDR(2),W,XCHECKEXT,HLOCK1 4 38JB # 6 3942 XCHECKEXT 20 39HL LDX 1 APETADDR(2) [NOW WE CAN MOVE THE C/A INTO THE 19 3=3= LDX 4 EVENT2(2) [ACOMMUNE WORDS OF THE OLPA 10 3=GW LDN 5 ACOMMUNE1(2) 20 3?2G LDN 6 4 [MOVE FOUR WORDS INTO ACOMMUNE1 11 3?G6 FOUTMOVE 1,4,5,6,HLOCK1,2 4 3?_Q # 20 3#FB LDN 4 TASKMINLEN [THERE MUST BE A CERTAIN MINIMUM 20 3#_2 BXGE 4 TASKLEN(2),WRNGSPEC [NUMBER OF WORDS IN THE TASK SPEC 4 3*DL # 20 3*Y= # NOW WE CAN CHECK THAT THE SPEC IS WITHIN RESERVATIONS AND IF 20 3BCW # IT IS, WE CAN MOVE THE FIRST FOUR WORDS INTO THE ACOMMUNE AREA 4 3BXG # 18 3CC6 LDX 4 TASKLEN(2) [GET LENGTH OF TASK SPEC 20 3CWQ LDX 3 TASKADDR(2) [GET OBJ PROG ADDR OF TASK SPEC 4 3DBB # 8 3DW2 SMO FX1 21 3F*L LDX 7 XRESV [PRESET THE CORRECT ILLEGAL MESSAGE 4 3FT= # 17 3G#W CHECKB 3,4,XILLOLPA,APETADDR(2),,XCHECKB,HLOCK2 4 3GSG # 5 3H#6 XCHECKB 10 3HRQ LDX 1 APETADDR(2) 21 3J?B LDN 4 ACOMMUNE1(2) [NOW WE CAN MOVE FOUR WORDS FROM THE 21 3JR2 LDN 5 4 [TASK SPEC INTO ACOMMUNE1 OF THE OLPA 11 3K=L FOUTMOVE 1,3,4,5,HLOCK2,2 4 3KQ= # 4 3L9W # 19 3LPG # THERE ARE TWO PLACES IN THE TASK SPECIFICATION WHERE THE 20 3M96 # GEOGRAPHIC UNIT NUMBER MAY BE SUPPLIED. THE PREFERRED PLACE 20 3MNQ # IS IN THE LEAST SIGNIFICANT 9 BITS OF THE FIRST WORD OF THE 21 3N8B # SPEC. HOWEVER, IT MAY ALSO OCCUR IN THE TOP 6 BITS OF THE 'CSN' 6 3NN2 # WORD. 4 3P7L # 19 3PM= LDEX 5 TASKMODE(2) [TRY PREFERRED LOCATION FIRST 20 3Q6W BNZ 5 SGOTGEOG [JIF WE WERE RIGHT FIRST TIME!! 18 3QLG LDCH 5 TASKCSNDV(2) [ELSE TRY THE 'CSN' WORD 20 3R66 BZE 5 WRNGSPEC [JIF NO GEOG UNIT NUMBER SUPPLIED 4 3RKQ # 5 3S5B SGOTGEOG 21 3SK2 FINDPERE 3,APGEOG,5 [& FIND DEVICE LIST ENTRY FOR DRIVE 18 3T4L BNG 3 WRNGSPEC [JIF DRIVE DOES NOT EXIST 4 3TJ= # 15 3W3W # NOW WE CAN DO SEVERAL CHECKS ON THE DRIVE 4 3WHG # 20 3X36 JNCAFSDV 3,WRNGDRV [JIF THE DRIVE IS NOT ON 'CAFS' 4 3XGQ # 20 3Y2B # WE ONLY NEED TO ALLOW GEORGE TO CATCH UP WITH ENGAGE BUTTONS 16 3YG2 # WHEN EXEC ASKS US TO!! (I.E. FOR CFREASON=3) 4 3Y_L # 19 3_F= LDX 0 CFREASON(2) [GET THE REASON FOR REFERRAL 21 3_YW SBN 0 3 [& JIF WE ARE NOT TO WAIT FOR ENGAGE 16 42DG BNZ 0 XNOENBU [BUTTONS TO CLEAR 4 42Y6 # 20 43CQ LDN 7 5 [WE ARE ONLY PREPARED TO WAIT FOR 21 43XB # [APPROX 1 SEC BEFORE WE REPORT BACK 16 44C2 # [TO THE PROGRAM 4 44WL # 5 45B= XENGBU 21 45TW JNCFENBU 3,XNOENBU [JIF NO ENGAGE BUTTONS OUTSTANDING 19 46*G COOR3 #41 [ELSE ALLOW THEM TO CLEAR AND 15 46T6 BCT 7 XENGBU [TRY AGAIN 21 47#Q BRN REASON3 [JIF WE HAVE WAITED FOR APPROX 1 SEC 4 47SB # 5 48#2 XNOENBU 21 48RL LADDP 3,1 [GET ADDRESS OF APIA FOR OUR DRIVE 8 49?= LDCT 0 #20 20 49QW ANDX 0 BSUNIT(1) [CHECK THE BSTS 'ENGAGED' MARKER 21 4==G BZE 0 WRNGDRV [& JIF DEVICE NOT OFFICIALLY ENGAGED 4 4=Q6 # 20 4?9Q # THAT COMPLETES THE CHECKS THAT ARE COMMON TO ALL THE ENTRIES 14 4?PB # THAT ARE MADE FOR MODE #12 TRANSFERS 4 4#92 # 20 4#NL # WE CAN NOW THE 'REASON' WORD TO JUMP TO THE APPROPRIATE CODE 8 4*8= # TO CONTINUE 4 4*MW # 10 4B7G SMO CFREASON(2) 7 4BM6 BRN / 17 4C6Q BRN REASON0 [READ VALIDATION FAIL 19 4CLB BRN REASON1 [CHANNEL NEEDS INITIALISATION 16 4D62 BRN REASON2 [CAFS WRITE ORDER 19 4DKL BRN REASON3 [ENGAGE BUTTONS OUTSTANDING 4 4F5= # 4 4FJW # 5 4G4G REASON0 4 4GJ6 # 16 4H3Q # READ VALIDATION CAN FAIL FOR SEVERAL REASONS: 4 4HHB # 21 4J32 # 1. THE DRIVE HAS NOT BEEN USED FOR CAFS BY THIS CHANNEL BEFORE 19 4JGL # 2. THE DRIVE HAS CHANGED STATUS SINCE IT WAS LAST USED 20 4K2= # 3. A FILE HAS BEEN OPENED/CLOSED FOR WRITING ON THIS DRIVE 4 4KFW # 19 4K_G # SOME OF THE EVENTS CAN BE DEALT WITH FROM THE OLPA, BUT IF 20 4LF6 # EXOFILE SECURITY IS SWITCHED ON AND EXOFILE TRAPS HAVE TO BE 17 4LYQ # CHECKED, IT IS NECESSARY TO TRANSFER TO THE CPAT 4 4MDB # 20 4MY2 # WE FIRST MAKE A SIMPLE CHECK TO SEE IF THE ENTRY IN THE OLPA'S 20 4NCL # LOCAL CAFS CSN TABLE MATCH THE CENTRAL TABLE. THIS IS THE 20 4NX= # STATE THAT EXISTS WHEN A DRIVE WAS IN USE, BUT FILE HAS BEEN 13 4PBW # OPENED FOR WRITING ON THAT DRIVE. 4 4PWG # 21 4QB6 LDX 1 CAFSPTR [GET ADDRESS OF BSA/CAFSACT ACTIVITY 20 4QTQ SBX 5 CFLOWGEOG(1) [AND CONVERT DRIVE NUMBER TO USE 17 4R*B SMO 5 [AS TABLE MODIFIER 20 4RT2 LDX 6 CFDRVTAB(1) [GET CENTRAL TABLE CSN FOR DRIVE 4 4S#L # 21 4SS= MHUNTW 1,CAFS,CFCSNTABLE [FIND THE LOCAL TABLE WITH THE OLPA 21 4SWK BRN REVALIDATE [J TO VALIDATE RIGHTS OF ACCESS TO 16 4SYY # [SPECIFIED DISC 6 4T3? SDISCEVENT 4 4T5L # 20 4T7_ # WE COME HERE WHEN THERE IS AN OUTSTANDING EVENT(S) LIKE A NEW 20 4T=# # DISC BEING LOADED OR A FILE OPEN/CLOSED FOR WRITING ON A DISC 21 4T#M # THAT WE ARE VALIDATED TO USE. WE GET HERE BY WAY OF A REASON1 21 4TC2 # EVENT WHICH NORMALLY INDICATES CHANNEL NOT YET VALIDATED FOR CAFS 4 4TF* # 20 4THN LDN 5 0 [SET INITIAL TABLE ENTRY ADDRESS 18 4TL3 LDX 0 ALOGLEN(1) [& GET LENGTH OF TABLE 4 4TNB # 6 4TQP SEARCHCSNS1 7 4TT4 SMO 5 20 4TXC LDXC 6 CFTDRVTAB(1) [LOOK FOR EVENT BITS IN CSN TABLE 19 4T_Q BCS SFOUNDEVENT [JIF WE HAVE FOUND AN EVENT 4 4W45 # 21 4W6D ADN 5 1 [ELSE GO FOR THE NEXT ENTRY IN THE 14 4W8R BCT 0 SEARCHCSNS1 [TABLE 4 4W?6 # 19 4W*F # NO EVENT FOUND!! (PERHAPS THE DISC HAS BEEN UNLOADED) 4 4WCS # 21 4WG7 LDCT 0 #400 [WE MERELY SET 'INITIALISED-FOR-CAFS' 21 4WJG ORS 0 CFRDBITS(2) [IN THE OLPA AND ASK THE PROGRAM TO 15 4WLT BRN STRYAGAIN [TRY AGAIN 4 4WP8 # 6 4WRH SFOUNDEVENT 7 4WTW SMO 5 21 4WY9 STO 6 CFTDRVTAB(1) [CLEAR THE EVENT BIT IN THE CSN TABLE 4 4X2J # 21 4X4X ADX 1 5 [NOW LOOK TO SEE IF THIS IS THE ONLY 19 4X7= LDN 4 0 [EVENT WAITING TO BE NOTIFIED 4 4X9K # 6 4X?Y SEARCHCSNS2 21 4XB? LDXC 7 CFTDRVTAB(1) [BY USING CARRY WE MAKE X4 NON-ZERO 21 4XDL ADN 4 0 [IF THERE ARE STILL EVENTS WAITING 7 4XG_ ADN 1 1 10 4XK# BCT 0 SEARCHCSNS2 4 4XMM # 21 4XQ2 BNZ 4 STILLEVENTS [JIF THERE ARE STILL EVENTS WAITING 4 4XS* # 20 4XWN LDCT 0 #400 [ELSE SET CAFS INITIALISED MARKER 16 4X_3 ORS 0 CFRDBITS(2) [AGAIN IN OLPA 4 4Y3B # 6 4Y5P STILLEVENTS 21 4Y84 LDN 0 0 [FINALLY WE CHECK IF WE CAN RESET THE 21 4Y=C LDX 1 CAFSPTR [READ-VALIDATED BIT FOR THE CURRENT 21 4Y#Q SMO 5 [DRIVE IN THE OLPA 'READ BITS' WORDS 20 4YC5 TXU 6 CFDRVTAB(1) [THIS ONLY DONE IF THE LOCAL CSN 20 4YFD ADN 0 0 [ENTRY MATCHES THE CENTRAL ONE!! 4 4YHR # 20 4YL6 LDCT 7 #120 [SET 'EVENT-ON-CARTRIDGE' REPLY 20 4YNF ANDX 6 BSB18 [ENSURE ONLY CSN IS PASSED OVER!! 7 4YQS ORX 7 6 4 4YT7 # 21 4YXG BNZ 0 SETREPLY [JIF CENTRAL/LOCAL CSN ENTRY MISMATCH 4 4Y_T # 21 4_48 ADX 5 CFLOWGEOG(1) [ELSE FIND THE DEVICE LIST ENTRY FOR 17 4_6H FINDPERE 3,APGEOG,5 [THE SELECTED DRIVE 4 4_8W # 6 4_NG SETRDBITS 4 5286 # 20 52MQ # HERE WE SET THE BIT IN 'CFRDBITS' OF THE OLPA THAT CORRESPONDS 8 537B # TO OUR DRIVE 4 53M2 # 20 546L LDX 4 CFRDBITMASK(3) [COLLECT THE 42-BIT MASK FROM THE 15 54L= LDX 5 CFRDBITMASK+1(3) [DEVICE LIST 21 555W ANDX 4 BSB18 [CLEAR OUT BITS THAT ARE NOT REQUIRED 10 55KG ORS 4 CFRDBITS(2) 21 5656 ORS 5 CFRDBITS+1(2) [SET APPROPRIATE READ VALIDATION BIT 4 56JQ # 5 574B SETREPLY 4 57J2 # 20 583L # HERE WE SET THE REPLY IN X7 INTO THE REPLY WORD IN THE PROGRAM 12 58H= # AND THEN WE END THE TRANSFER 4 592W # 20 59GG LDX 3 EVENT2(2) [GET THE REPLY WORD ADDRESS AND 20 5=26 ADN 3 1 [CONVERT IT INTO A GEORGE ADDRESS 10 5=FQ LDX 1 APETADDR(2) 10 5=_B FADDRESS 1,3,HLOCK1 4 5?F2 # 19 5?YL STO 7 0(3) [SET THE PROGRAM REPLY WORD 20 5#D= LDX 1 FX1 [END THE TRANSFER, RESETTING THE 19 5#XW OLPFIN1 SLINK1(1) [OLPA'S LINK BACK TO PERION 4 5*CG # 4 5*X6 # 5 5BBQ REASON1 4 5BDF # 21 5BG8 # WE MAY GET A TRANSFER REFERRED BY EXEC WHEN AN EVENT HAS OCCURRED 21 5BHX # ON A CARTRIDGE THAT IS BEING USED ON CAFS. WE DETECT THIS BY THE 20 5BKL # PRESENCE OF A LOCAL CSN TABLE BLOCK (CAFS/CFCSNTABLE) WITH THE 9 5BM* # OLPA'S DATA BLOCKS 4 5BP4 # 11 5BQR HUNTW 1,CAFS,CFCSNTABLE 21 5BSG BPZ 1 SDISCEVENT [JIF WE ARE ALREADY CAFS INITIALISED 4 5BWB # 20 5CB2 # FURTHER VALIDATION CHECKS REQUIRE A CHANGE TO THE CPAT SO THAT 16 5CTL # FILES CAN BE OPENED, PRIVILEGES CHECKED, ETC 4 5D*= # 21 5DSW # PARAMETERS FOR THE CHECKS THAT ARE TO BE MADE ARE SENT TO THE CPAT 20 5F#G # BY PLACING THEM IN THE AWORK WORDS OF THE PCA. CAPCA THEN 17 5FS6 # TRANSFERS THEM INTO THE AWORK WORDS OF THE CPAT. 4 5G?Q # 17 5GRB LDX 1 APETADDR(2) [GET ADDRESS OF PCA 21 5H?2 STOZ AWORK1(1) [AND INDICATE CHANNEL INITIALISATION 8 5HQL BRN TOPCA 4 5J== # 4 5JPW # 6 5K9G REVALIDATE 4 5KP6 # 20 5L8Q # IF THE CARTRIDGE ON A DRIVE HAS CHANGED OR IF WE HAVE NOT USED 20 5LNB # THE DRIVE BEFORE, READ VALIDATION FAILURE CAN OCCUR. IT IS 20 5M82 # NECESSARY TO GO TO THE CPAT TO REVALIDATE RIGHTS OF ACCESS TO 7 5MML # THE DRIVE 4 5N7= # 19 5NLW # HOWEVER, IF EXOFILE SECURITY IS NOT IN USE, WE CAN MERELY 14 5P6G # CLEAR THE DRIVE FOR USE AND CONTINUE 4 5PL6 # 8 5Q5Q LDX 0 EDSQ 21 5QKB BZE 0 QUICKREVAL [JIF EXOFILE SECURITY NOT BEING USED 4 5R52 # 21 5RJL LDX 1 APETADDR(2) [ELSE INDICATE REVALIDATION REQUIRED 15 5S4= STO 1 AWORK1(1) [IN THE PCA. 4 5SHW # 4 5T3G # 5 5TH6 TOPCA 19 5W2Q # BEFORE TRANSFERRING TO THE PCA, WE SET UP THE REST OF THE 13 5WGB # PARAMETERS THAT WE WILL REQUIRE 4 5X22 # 20 5XFL STO 3 AWORK2(1) [DEVICE LIST ADDRESS FOR DRIVE 9 5X_= LDX 0 ACTNUM(2) 18 5YDW STO 0 AWORK3(1) [ACTIVITY NUMBER OF OLPA 9 5YYG LDX 0 EVENT2(2) 7 5_D6 ADN 0 1 19 5_XQ STO 0 AWORK4(1) [OBJ PROG REPLY WORD ADDRESS 4 62CB # 21 62X2 LDX 1 FX1 [TRANSFER TO THE PCA, RESETTING THE 20 63BL TOPCA1 SLINK1(1) [LINK IN THE OLPA IN THE PROCESS 4 63W= # 21 64*W # ****************************************************************** 4 64TG # 12 65*6 # WE ARE NOW RUNNING IN THE PCA 4 65SQ # 21 66#B # ****************************************************************** 4 66S2 # 17 67?L UNPLUG [UNPLUG THE PROGRAM 18 67R= CAPCA [AND TRANSFER TO THE CPAT 4 68=W # 21 68QG # ****************************************************************** 4 69=6 # 12 69PQ # WE ARE NOW RUNNING IN THE CPAT 4 6=9B # 21 6=P2 # ****************************************************************** 4 6?8L # 9 6?N= LDX 0 AWORK1(2) 19 6#7W BNZ 0 SETUPNOW [JIF DOING REVALIDATION ONLY 4 6#MG # 18 6*76 # HERE WE ARE GOING TO INITIALISE THE CHANNEL FOR CAFS 4 6*LQ # 21 6B6B # FIRST WE CHECK THAT THE USER IS SUITABLY PRIVILEGED TO USE CAFS 4 6BL2 # 12 6C5L CHEKPRIV ,PRIVNAME,XCHEKPRIV 18 6CK= BRN XCANUSECAFS [JIF USER CAN USE CAFS 4 6D4W # 6 6DJG XCHEKPRIV 12 6F46 TESTREP2 NOSUCH,XCANUSECAFS 4 6FHQ # 20 6G3B # IF THE USER IS NOT SUITABLY PRIVILEGED, THE MODE #12 ORDER IS 7 6GH2 # ILLEGEAL 4 6H2L # 19 6HG= LDX 7 XMODE(1) [ILLEGAL MESSAGE IDENTIFIER 4 6H_W # 5 6JFG XILLEGAL 17 6J_6 ILLEGALX 7 [SEND PROGRAM ILLEGAL 4 6KDQ # 4 6KYB # 5 6LD2 XILLOLPA 4 6LXL # 20 6MC= # BEFORE WE CAN SEND THE PROGRAM ILLEGAL, WE MUST GO TO THE PCA 4 6MWW # 21 6NBG LDX 1 FX1 [TRANSFER TO PCA AND RESET THE LINK 18 6NW6 TOPCA1 SLINK1(1) [IN THE OLPA ON THE WAY 4 6P*Q # 21 6PTB # ****************************************************************** 4 6Q*2 # 12 6QSL # WE ARE NOW RUNNING IN THE PCA 4 6R#= # 21 6RRW # ****************************************************************** 4 6S?G # 21 6SR6 UNPLUG [UNPLUG THE PROGRAM BEFORE SENDING IT 14 6T=Q BRN XILLEGAL [ILLEGAL 4 6TQB # 4 6W=2 # 6 6WPL XCANUSECAFS 4 6X9= # 21 6XNW # WE ARE SUITABLY PRIVILEGED TO USE CAFS AND MUST THEREFORE SET UP 11 6Y8G # THE OLPA FOR USE WITH CAFS 4 6YN6 # 20 6_7Q LDX 3 CAFSPTR [FIND THE BSA/CAFSACT ACTIVITY 19 6_MB LDX 3 CFDRVTABLEN(3) [& GET THE DRIVE TABLE LENGTH 20 7272 SETUPCOR 3,1,CAFS,CFCSNTABLE [SET UP A BLOCK TO HOLD THE TABLE 4 72LL # 20 736= STOZ CFTDRVTAB(1) [INITIALISE THE TABLE TO ZEROS 10 73KW LDN 4 CFTDRVTAB(1) 11 745G LDN 5 CFTDRVTAB+1(1) 8 74K6 MOVE 4 -1(3) 4 754Q # 20 75JB # THIS TABLE BLOCK IS GOING TO BELONG TO THE OLPA AND SO WE MUST 11 7642 # GIVE IT TO THE OLPA NOW 4 76HL # 19 773= FPCACA 3,2 [GET THE ADDRESS OF THE PCA 20 77GW LDX 4 AWORK3(2) [AND USE THE OLPA ACTIVITY NUMBER 17 782G FINDACTX 3,4 [TO LOCATE THE OLPA 20 78G6 CHAIN 1,3 [GIVE THE TABLE BLOCK TO THE OLPA 4 78_Q # 20 79FB # TO EASILY LOCATE ALL VALIDATED CAFS CHANNELS, THE OLPAS ARE 20 79_2 # RINGED TO THE BSA/CAFSACT THROUGH THE CFRING ELEMENT (RENAMED 8 7=DL # WORKFILE RING) 4 7=Y= # 9 7?CW SMO CAFSPTR 20 7?XG LDN 2 CFRING [ADDR OF CAFS RING IN BSA/CAFSACT 19 7#C6 LDN 1 CFRING(3) [ADDR OF CAFS RING IN OLPA 8 7#WQ ENRING 1,2 4 7*BB # 21 7*W2 LDCT 0 #400 [MARK OLPA AS INITIALISED FOR CAFS 21 7B*L ORS 0 CFRDBITS(3) [(NB DON'T CLEAR ANY BIT MAP BITS!!) 4 7C#W # 4 7CSG # 5 7D#6 SETUPNOW 4 7DRQ # 16 7F?B # NOW WE GET THE CARTRIDGE NUMBER FOR OUR DRIVE 4 7FR2 # 19 7G=L LADDP AWORK2(2),1 [GET ADDR OF APIA FOR DRIVE 20 7GQ= LDCT 0 #20 [& CHECK THAT CARTRIDGE IS STILL 14 7H9W ANDX 0 BSUNIT(1) [THERE 21 7HPG BZE 0 SNODRIVE [AFTER ALL THAT, THE DRIVE IS DOWN 20 7J96 LDX 7 BSUNIT5(1) [PICK UP THE CSN FOR THE DRIVE 20 7JNQ LDX 5 7 [AND MAKE A COPY FOR USE LATER 4 7K8B # 20 7KN2 # WE ARE NOW READY TO CHECK THAT THE USER IS ALLOWED TO ACCESS 14 7L7L # THE CARTRIDGE ON THE SPECIFIED DRIVE 4 7LM= # 20 7M6W LDN 3 0 [INDICATE LOGACCESS NOT REQUIRED 21 7MLG LDX 0 EDSQ [CHECK WHETHER EXOFILE SECURITY IN 18 7N66 BZE 0 SETBITS [USE - JIF NOT BEING USED 4 7NKQ # 21 7P5B # NOW WE SET UP A FILE/FABSNB TO OPEN THE DIRECTORY FOR :DANNNNNN 21 7PK2 # AS CAFS ACCESS REQUIRES A READ TRAP FOR THE CARTRIDGE'S DIRECTORY 4 7Q4L # 20 7QJ= SETNCORE 4,3,FILE,FABSNB [/FABSNB NEEDS ONLY FOUR WORDS 8 7R3W ADN 3 A1 17 7RHG LDN 2 QFABSNB(1) [SET UP FRAME OF NAME 7 7S36 MOVE 2 4 8 7SGQ LDX 2 FX2 4 7T2B # 20 7TG2 BCHX 3 / [STEP THE POINTER IN X3 BY TWO 15 7T_L BCHX 3 / [CHARACTERS 20 7WF= SLL 7 6 [PREPARE CASN FOR CONVERSION INTO 15 7WYW LDN 4 6 [OCTAL DIGITS 4 7XDG # 6 7XY6 STILLZERO 4 7YCQ # 21 7YXB # EXOFILE DIRECTORIES ARE NAMED :DANNNNNN WHERE 'NNNNNN' IS THE CSN 11 7_C2 # WITH LEADING ZEROS OMITTED 4 7_WL # 19 82B= LDN 6 0 [GET NEXT OCTAL DIGIT INTO X6 7 82TW SLL 67 3 20 83*G BNZ 6 NOWDUMPCHAR [JIF WE HAVE A SIGNIFICANT DIGIT 17 83T6 BCT 4 STILLZERO [OMIT LEADING ZEROS 18 84#Q BRN (GEOERR) [ERROR - CSN IS ALL ZEROS 4 84SB # 5 85#2 NEXTCHAR 7 85RL LDN 6 0 19 86?= SLL 67 3 [GET NEXT OCTAL DIGIT INTO X6 4 86QW # 6 87=G NOWDUMPCHAR 19 87Q6 DCH 6 1(3) [PUT OCTAL DIGIT INTO /FABSNB 21 889Q BCHX 3 / [STEP POINTERS AND GO FOR NEXT CHAR 9 88PB BCT 4 NEXTCHAR 4 8992 # 19 89NL # THE /FABSNB IS NOW COMPLETE AND WE CAN OPEN THE DIRECTORY 4 8=8= # 12 8=MW OPENDIR (GEOERR),READ,QUERY 4 8?7G # 15 8?M6 TESTREP2 OK,SCHECKTRAPS,CLUDGE,SNOTRAPS 4 8#6Q # 20 8#LB # FURTHER ACTION DEPENDS ON THE TYPE OF EXOFILE SECURITY IN USE 4 8*62 # 21 8*KL LDX 0 EDSQ [IF SECURITY IS MANDATORY, FAILURE 21 8B5= BNG 0 SNOTRAPS [TO OPEN THE DIRECTORY MEANS NO TRAP 4 8BJW # 21 8C4G # FOR OPTIONAL SECURITY WE ALLOW ACCESS IF THE DIRECTORY DOES NOT 6 8CJ6 # EXIST 4 8D3Q # 19 8DHB LDN 3 0 [INDICATE DON'T 'LOGACCESS' 19 8F32 BRN SETBITS [SET THE READ VALIDATION BIT 4 8FGL # 6 8G2= SCHECKTRAPS 4 8GFW # 20 8G_G # HERE THE DIRECTORY IS OPEN AND WE MUST CHECK THE USER'S RIGHT 10 8HF6 # TO READ THE DIRECTORY 4 8HYQ # 7 8JDB CHECKTRAPS 18 8JY2 TESTTRAP READ [CHECK FOR A READ TRAP 4 8KCL # 20 8KX= LDN 3 7 [INDICATE 'ACCESS FRUSTRATED' FOR 18 8LBW TESTREP2 NOTRAP,NOTFORUSE [LOGACCESS AND TEST REPLY 4 8LWG # 20 8MB6 LDN 3 2 [INDICATE 'ACCESS PERMITTED' FOR 4 8MTQ # 5 8N*B SETBITS 4 8NT2 # 18 8P#L # HERE WE CAN SET THE 'READ VALIDATION BIT' IN THE OLPA 4 8PS= # 21 8Q?W FPCACA 1,2 [FIND THE PCA AND FROM THERE LOCATE 20 8QRG LDX 4 AWORK3(2) [THE OLPA BY ITS ACTIVITY NUMBER 8 8R?6 FINDACTX 1,4 4 8RQQ # 18 8S=B LDX 2 AWORK2(2) [GET DEVICE LIST ADDRESS 21 8SQ2 LDX 6 CFRDBITMASK(2) [AND PICK UP THE READ VALIDATION BIT 19 8T9L LDX 7 CFRDBITMASK+1(2) [FROM THE 42-BIT MASK AREA 20 8TP= ANDX 6 BSB18 [REMOVE UNWANTED BITS AT THE TOP 21 8W8W ORS 6 CFRDBITS(1) [SET THE READ VALIDATION BIT IN THE 13 8WNG ORS 7 CFRDBITS+1(1) [OLPA 4 8X86 # 17 8XMQ # WE MUST ALSO PUT THE CSN INTO THE OLPA'S CSN LIST 4 8Y7B # 20 8YM2 LGEOG 2,6 [GET THE DRIVE'S GEOG UNIT NUMBER 20 8_6L SMO CAFSPTR [AND CONVERT IT TO USE AS A TABLE 14 8_L= SBX 6 CFLOWGEOG [MODIFIER 4 925W # 21 92KG HUNT2J 1,CAFS,CFCSNTABLE,,(GEOERR) [FIND BLOCK HOLDING CSN TABLE 7 9356 SMO 6 21 93JQ STO 5 CFTDRVTAB(1) [STORE CSN IN TABLE(KEPT FROM ABOVE) 4 944B # 6 94J2 NOTFORUSE 4 953L # 15 95H= # WE MUST NOW LOG THE ACCESS AS APPROPRIATE 4 962W # 21 96GG BZE 3 TRYAGAIN [JIF ACCESS LOGGING IS NOT REQUIRED 4 9726 # 18 97FQ LDN 7 CREAD [SET 'READ' ACCESS MODE 16 97_B LOGACCES 0(3),7 [& LOG THE ACCESS 4 98F2 # 19 98YL MFREE FILE,ENT [TIDY UP FROM TRAP CHECKING 18 99D= CLOSETOP [AND CLOSE THE DIRECTORY 4 99XW # 7 9=CG SBN 3 2 19 9=X6 BNZ 3 SNOTRAPS [JIF ACCESS WAS NOT PERMITTED 4 9?BQ # 5 9?WB TRYAGAIN 4 9#B2 # 17 9#TL # INDICATE TO THE PROGRAM THAT IT MAY TRY AGAIN NOW 4 9**= # 8 9*SW LDCT 7 #020 4 9B#G # 5 9BS6 SETREP 4 9C?Q # 18 9CRB # HERE WE ARE GOING TO SET A REPLY IN THE OBJECT PROGRAM 4 9D?2 # 19 9DQL VFREE FILE,FABSNB [TIDY UP FROM TRAP CHECKING 4 9F== # 8 9FPW LDX 2 FX2 21 9G9G GETWORD AWORK4(2),3,WRITE [GET GEORGE ADDR OF OBJ PROG REPLY WD 21 9GP6 TESTRPN2 OK,(GEOERR) [FATAL ERROR IF CAN'T ACCESS PROGRAM 18 9H8Q STO 7 0(3) [SET REPLY INTO PROGRAM 7 9HNB WORDFIN 19 9J82 RUNPROG [SET PROGRAM RUNNING AGAIN 4 9JML # 4 9K7= # 5 9KLW SNOTRAPS 4 9KQ2 # 9 9KT6 OUTPACK 5,1,CSN 18 9KY= MONOUT EWSTUC [REPORT TRAP FAIL TO M/F 4 9L3B # 18 9L6G LDCT 7 #040 [SET TRAPS CLOSED REPLY 9 9LL6 BRN SETREP 4 9M5Q # 5 9MKB SNODRIVE 18 9N52 LDCT 7 #410 [SET DRIVE FAILED REPLY 9 9NJL BRN SETREP 4 9P4= # 5 9PHW WRNGSPEC 19 9Q3G LDCT 7 #440 [SET ILLEGAL TASK SPEC REPLY 9 9QH6 BRN SETREPLY 4 9R2Q # 5 9RGB WRNGDRV 18 9S22 LDCT 7 #410 [SET DRIVE FAILED REPLY 9 9SFL BRN SETREPLY 4 9S_= # 5 9TDW REASON3 4 9TL4 # 6 9TR= STRYAGAIN 4 9TYG # 20 9WD6 # BECAUSE WE HAVE ALREADY WAITED FOR ENGAGE BUTTONS TO CLEAR, WE 16 9WXQ # MERELY ASK THE PROGRM TO REPEAT THE TRANSFER 4 9XCB # 18 9XX2 LDCT 7 #020 [SET 'TRY AGAIN' REPLY 9 9YBL BRN SETREPLY 4 9YW= # 4 9_*W # 6 9_TG QUICKREVAL 4 =2*6 # 20 =2SQ # WE NEED ONLY SET THE TRY AGAIN REPLY AND RE-INSTATE THE READ 17 =3#B # VALIDATION BIT IF EXOFILE SECURITY IS SWITCHED OFF 4 =3S2 # 20 =4?L SMO 5 [RE-INSTATE TABLE ENTRY FROM DATA 19 =4R= STO 6 CFTDRVTAB(1) [LEFT OVER FROM CODE ABOVE!!! 4 =5=W # 18 =5QG LDCT 7 #020 [SET 'TRY AGAIN' REPLY 21 =6=6 BRN SETRDBITS [& AND GO TO SET READ VALIDATION BIT 4 =6PQ # 4 =79B # 5 =7P2 REASON2 4 =88L # 19 =8N= # ALL CAFS WRITE MODE TRANSFERS ARE REFERRED TO GEORGE FOR 20 =97W # VALIDATION. THE CHECKS THAT ARE CARRIED OUT ARE AS FOLLOWS: 4 =9MG # 14 ==76 # 1. THAT THE FILE IS OPEN FOR WRITING 19 ==LQ # 2. THAT THE CYLINDER IS PART OF A FULL-WIDTH FILE AREA 17 =?6B # 3. THAT THE FILE AREA IS ON THE STATED CARTRIDGE 16 =?L2 # 4. THAT THE CARTRIDGE IS ON THE STATED DRIVE 4 =#5L # 4 =#K= # 21 =*4W LDX 5 TASKCSNDV(2) [GET CSN FROM TASK SPEC COPIED INTO 17 =*JG ANDX 5 BSB18 [OLPA ACOMMUNE AREA 21 =B46 BXU 5 BSUNIT5(1),WRNGDRV [JIF CSN IS NOT ON SPECIFIED DRIVE 4 =BHQ # 21 =C3B LDX 6 TASKCYL(2) [PICK UP SPECIFIED CYLINDER NUMBER 4 =CH2 # 21 =D2L MFINDEXO 1,EXNUM(2) [FIND THE EWDAS/EXOF BLOCK FOR FILE 4 =DG= # 9 =D_W LDXC 0 EXMARK(1) 20 =FFG BCC XNOTOFW [JIF FILE IS NOT OPEN FOR WRITING 4 =F_6 # 20 =GDQ LDX 7 FIP+5(1) [GET NUMBER OF FILE AREA CELLS 16 =GYB ANDX 7 BSP16 [IN /EXOF BLOCK 18 =HD2 BZE 7 WRNGSPEC [JIF FILE HAS NO AREAS 20 =HXL ADN 1 FDCELLS [GET ADDR OF 'FDCELLS' AREA IN X1 4 =JC= # 6 =JWW ROUNDAGAIN 21 =KBG BXU 5 0(1),NEXTAREA [JIF CSN DOES MATCH THIS FILE AREA 21 =KW6 BXL 6 1(1),NEXTAREA [JIF AREA STARTS AFTER REQUIRED CYL 21 =L*Q LDX 0 1(1) [FIND END OF AREA CYLINDER NUMBER + 1 8 =LTB ADXC 0 3(1) 21 =M*2 BCS NEXTAREA [JIF THIS IS NOT A FULL WIDTH AREA 21 =MSL BXL 6 0,THISAREA [JIF ALL CHECKS SUCCESSFULLY PASSED 4 =N#= # 5 =NRW NEXTAREA 18 =P?G ADN 1 6 [UPDATE FDCELLS POINTER 21 =PR6 BCT 7 ROUNDAGAIN [GO ROUND AGAIN IF UNPROCESSED CELLS 4 =Q=Q # 21 =QQB BRN WRNGSPEC [COULDN'T MATCH CYLINDER, SO ERROR 4 =R=2 # 5 =RPL THISAREA 4 =S9= # 4 =SNW # 20 =T8G # HAVING SUCCESSFULLY CHECKED OUR CYLINDER, WE MUST GIVE DETAILS 18 =TN6 # OF THE TRANSFER BACK TO EXECUTIVE FOR IMPLEMENTATION. 4 =W7Q # 20 =WMB # THIS IS DONE BY ISSUING A MODE #0 ORDER FOR THE CAFS DEVICE 4 =X72 # 20 =XLL # THE DETAILS SET INTO THE DEVICE LIST ARE SOMEWHAT UNUSUAL BUT 21 =Y6= # ALLOW EXEC TO DEAL WITH THE REST OF THE TRANSFER WITHOUT COMING 8 =YKW # BACK TO GEORGE 4 =_5G # 20 =_K6 # BEFORE THE PERI IS ISSUED, WE SET AN INTERIM REPLY INTO THE 8 ?24Q # OBJECT PROGRAM 4 ?2JB # 4 ?342 # 20 ?3HL SMO CAFSPTR [GET DEVICE LIST ADDRESS FOR CAFS 14 ?43= LDX 1 CPPTR [DEVICE 4 ?4GW # 7 ?52G LDN 0 0 17 ?5G6 DCA 1,DLA,0,MODE [SET MODE #0 ORDER 4 ?5_Q # 10 ?6FB SMO APETADDR(2) 9 ?6_2 LDX 0 ALIMIT 18 ?7DL DCA 1,STO,0,COUNT [SET OBJECT PROGRAM LIMIT 4 ?7Y= # 10 ?8CW SMO APETADDR(2) 9 ?8XG LDX 0 ADATUM 18 ?9C6 DCA 1,STO,0,CTSA [SET OBJECT PROGRAM DATUM 4 ?9WQ # 20 ?=BB DCA 1,STO,6,DTSA [SET VALIDATED CYLINDER NUMBER 4 ?=W2 # 21 ??*L STO 3 CFREASON(2) [EXEC WILL GET DEVICE LIST ADDRESS 19 ??T= # [AND OTHER DETAILS FROM OLPA 4 ?##W # 20 ?#SG LDX 1 APETADDR(2) [FIND OBJ PROG REPLY WORD ADDRESS 9 ?*#6 LDX 3 EVENT2(2) 7 ?*RQ ADN 3 1 10 ?B?B FADDRESS 1,3,HLOCK1 4 ?BR2 # 20 ?C=L LDCT 7 #400 [SET INTERIM REPLY WORD FOR OBJ 13 ?CQ= STO 7 0(3) [PROG 4 ?D9W # 9 ?DPG SMO CAFSPTR 21 ?F96 LDX 1 CPPTR [RESTORE CAFS DEVICE LIST ADDRESS & 18 ?FNQ GPERI 1,2,NC [ISSUE ORDER TO EXECUTIVE 4 ?G8B # 8 ?GN2 LDX 1 FX1 20 ?H7L OLPFIN1 SLINK1(1) [THAT'S IT FROM OUR POINT OF VIEW 4 ?HM= # 4 ?J6W # 5 ?JLG XNOTOFW 4 ?K66 # 8 ?KKQ SMO FX1 21 ?L5B LDX 7 XNOWR [ILLEGAL - FILE NOT OPEN FOR WRITING 9 ?LK2 BRN XILLOLPA 4 ?M4L # 4 ?MJ= # 4 ?N3W # 4 ?NHG # 5 ?P36 SMODE13 4 ?PGQ # 19 ?Q2B # THIS IS THE CODE FOR THE MODE #13 PERI ORDER WHICH REPORTS 19 ?QG2 # DETAILS OF FILES WHICH ARE OPEN FOR WRITING. THE CONTROL 10 ?Q_L # AREA IS OF THE FORM: 4 ?RF= # 17 ?RYW # WORD 0 - STANDARD WITH MODE BITS SET TO #13 16 ?SDG # WORD 1 - REPLIES - BO = 0 ORDER COMPLETED 19 ?SY6 # B1 = 1 DATA LOST, BUFFER TOO SHORT 21 ?TCQ # B6-23 ADDRESS OF WORD AFTER VALID DATA 15 ?TXB # IN BUFFER 14 ?WC2 # WORD 2 - BUFFER LENGTH IN WORDS 14 ?WWL # WORD 3 - BUFFER ADDRESS IN WORDS 20 ?XB= # WORD 4 - WORD CONTAINING 'CSN' OF CARTRIDGE FOR WHICH THE 13 ?XTW # REPORT IS REQUIRED 4 ?Y*G # 4 ?YT6 # 20 ?_#Q # THE FORMAT OF THE DATA RETURNED IN THE BUFFER IS AS FOLLOWS: 4 ?_SB # 20 #2#2 # FOR EACH FILE AREA ON THE CARTRIDGE THAT IS PART OF A FILE 20 #2RL # THAT IS OPEN FOR WRITING, A TWO WORD ELEMENT IS RETURNED. 15 #3?= # THE FORMAT OF THE TWO WORD ENTRY IS 4 #3QW # 18 #4=G # WORD 0 - BO = 1 FILE AREA IS NOT FULL WIDTH 19 #4Q6 # B1-11 FILE AREA START CYLINDER NUMBER 18 #59Q # B12-23 FILE AREA SIZE IN CYLINDERS 18 #5PB # WORD 1 - B0-11 START BLOCK WITHIN CYLINDERS 17 #692 # B12-23 NUMBER OF BLOCKS/SEEK AREA 4 #6NL # 20 #78= # IF THERE IS MORE FILE AREA DATA THAN THE BUFFER CAN HOLD, THE 19 #7MW # 'DATA LOST' BIT IS SET IN THE REPLY WORD AND THE REPORT IS 19 #87G # INCOMPLETE. NOTE THAT THE DATA RETURNED TO THE PROGRAM IS 20 #8M6 # IS ALWAYS AN EVEN NUMBER OF WORDS AND SO THE 'DATA LOST' REPLY 20 #96Q # MAY OCCUR WHEN THERE IS APPARENTLY STILL ONE WORD SPARE IN THE 6 #9LB # BUFFER 4 #=62 # 4 #=KL # 4 #?5= # 21 #?JW # FIRST WE CHECK THAT THE CONTROL AREA (5 WORDS) IS IN RESERVATIONS 20 ##4G # AND WE COPY THE FIVE WORDS INTO THE ACOMMUNE AREA OF THE OLPA 4 ##J6 # 21 #*3Q LDX 7 XRVCA(1) [PRESET THE CORRECT ILLEGAL MESSAGE 16 #*HB LDN 6 5 [LENGTH TO CHECK 20 #B32 CHECKEXT EVENT2(2),6,XILLOLPA,APETADDR(2),W,YCHECKEXT,HLOCK1 4 #BGL # 6 #C2= YCHECKEXT 20 #CFW LDX 1 APETADDR(2) [NOW WE CAN MOVE THE C/A INTO THE 19 #C_G LDX 4 EVENT2(2) [ACOMMUNE WORDS IN THE OLPA 10 #DF6 LDN 5 ACOMMUNE1(2) 20 #DYQ FOUTMOVE 1,4,5,6,HLOCK1,2 [MOVE THE DATA FROM THE OBJ PROG 4 #FDB # 18 #FY2 # NOW WE CAN CHECK THAT THE PROGRAM'S BUFFER IS ALSO IN 19 #GCL # RESERVATIONS AND THAT WE CAN WRITE TO IT (FOR GEORGE 4). 4 #GX= # 19 #HBW LDX 4 TASKLEN(2) [GET LENGTH OF PROGRAM BUFFER 19 #HWG LDX 3 TASKADDR(2) [AND ADDR OF OBJ PROG BUFFER 20 #JB6 SMO FX1 [PRESET CORRECT ILLEGAL MESSAGE 8 #JTQ LDX 7 XRESV 4 #K*B # 17 #KT2 CHECKB 3,4,XILLOLPA,APETADDR(2),W,YCHECKB,HLOCK2 4 #L#L # 5 #LS= YCHECKB 20 #M?W LDX 7 TASKCSN(2) [GET 'CSN' REQUESTED FOR REPORT 4 #MRG # 20 #N?6 # WE NOW EXAMINE ALL /EXOF BLOCKS ON THE CARTRIDGE CONTROL CHAIN 20 #NQQ # TRYING TO MATCH 'OUR CSN' IN ANY FILE THAT IS OPEN FOR WRITING 4 #P=B # 20 #PQ2 LDN 3 BCCB [START ADDR OF CART CONT CHAIN 4 #Q9L # 5 #QP= NEXTEXOF 20 #R8W LDX 3 BPTR(3) [GET ADDR OF NEXT BLOCK ON CHAIN 19 #RNG BXE 3 CXCC,SNONELEFT [& JIF ALL BLOCKS PROCESSED 20 #S86 LDX 0 BACK2(3) [JIF NO MORE /EXOF BLOCKS (ONLY 19 #SMQ BZE 0 SNONELEFT [THINGS LIKE /ASTUCS LEFT!!) 4 #T7B # 20 #TM2 LDXC 0 EXMARK(3) [JIF THIS FILE IS NOT OPEN FOR 14 #W6L BCC NEXTEXOF [WRITING 4 #WL= # 20 #X5W # WE CAN NOW SEARCH ALL THE FILE AREAS OF THE FILE TO TRY AND 9 #XKG # MATCH 'OUR CSN'. 4 #Y56 # 20 #YJQ LDX 6 FIP+5(3) [FIND OUT NUMBER OF FILE AREAS 8 #_4B ANDX 6 BSP16 17 #_J2 BZE 6 NEXTEXOF [IGNORE IF NO CELLS 21 *23L STO 3 AWORK1(2) [REMEMBER ADDR OF THIS /EXOF BLOCK 4 *2H= # 5 *32W NEXTCELL 21 *3GG BXU 7 FDCELLS(3),STEPON [JIF FILE AREA NOT IN OUR CARTRIDGE 4 *426 # 21 *4FQ # NOW WE FORMAT THE TWO WORD ELEMENT TO PUT IN THE OBJ PROG BUFFER 4 *4_B # 18 *5F2 LDX 0 FDCELLS+1(3) [START CYLINDER NUMBER 8 *5YL SLL 0 12 20 *6D= ORX 0 FDCELLS+3(3) [ADD IN NUMBER OF CYLINDERS ETC 19 *6XW STO 0 ACOMMUNE7(2) [PUT ELEMENT IN ACOMMUNE7/8 20 *7CG LDX 0 FDCELLS+2(3) [START BLOCK NUMBER IN CYLINDER 8 *7X6 SLL 0 12 21 *8BQ ORX 0 FDCELLS+4(3) [ADD IN NUMBER OF BLOCKS/SEEK AREA 10 *8WB STO 0 ACOMMUNE8(2) 4 *9B2 # 20 *9TL # HAVING PREPARED THE TWO WORD DATA ELEMENT, WE ASSESS WHETHER 16 *=*= # THERE IS ROOM IN THE BUFFER TO TAKE THE DATA. 4 *=SW # 21 *?#G LDX 0 TASKLEN(2) [GET CURRENT UNEXPIRED BUFFER LENGTH 21 *?S6 SBN 0 2 [AND DECREMENT LENGTH BY TWO WORDS 19 *#?Q BNG 0 SOVERFLOW [JIF BUFFER WOULD OVERFLOW 21 *#RB STO 0 TASKLEN(2) [ELSE REMEMBER NEW UNEXPIRED LENGTH 4 **?2 # 21 **QL LDX 1 APETADDR(2) [PREPARE TO PUT DATA INTO OBJ PROG 20 *B== LDX 5 TASKADDR(2) [CURRENT OBJ PROG BUFFER ADDRESS 19 *BPW LDN 4 ACOMMUNE7(2) [GEORGE ADDR FOR DATA ELEMENT 17 *C9G LDN 7 2 [DATA ELEMENT LENGTH 13 *CP6 FINMOVE 1,5,4,7,HLOCK2,2,NOTSTART 4 *D8Q # 21 *DNB ADS 7 TASKADDR(2) [UPDATE CURRENT OBJ PROG BUFFER ADDR 20 *F82 LDX 7 TASKCSN(2) [RESTORE 'CSN' WORD FOR COMPARES 4 *FML # 5 *G7= STEPON 19 *GLW ADN 3 6 [POINT TO NEXT FILE AREA CELL 18 *H6G BCT 6 NEXTCELL [JIF STILL CELLS TO CHECK 4 *HL6 # 19 *J5Q # HERE WE HAVE DEALT WITH A COMPLETE FILE AND MUST LOOK FOR 7 *JKB # ANOTHER 4 *K52 # 21 *KJL LDX 3 AWORK1(2) [RESTORE CURRENT /EXOF BLOCK POINTER 9 *L4= BRN NEXTEXOF 4 *LHW # 4 *M3G # 6 *MH6 SNONELEFT 4 *N2Q # 20 *NGB # WHEN WE HAVE DEALT WITH ALL THE FILES WE SET THE REPLY WORD 17 *P22 # TO INDICATE HOW MUCH DATA THERE IS IN THE BUFFER 4 *PFL # 20 *P_= LDX 7 TASKADDR(2) [THE 'NEXT WORD' IN THE BUFFER 20 *QDW ANDX 7 BSB18 [IS IN THE OLPA (MASK TO 18 BITS) 9 *QYG BRN SETREPLY 4 *RD6 # 6 *RXQ SOVERFLOW 4 *SCB # 20 *SX2 # IF THE BUFFER IS TOO SMALL, THE REPLY HAS BIT 1 SET AS WELL 4 *TBL # 19 *TW= LDX 7 TASKADDR(2) ['NEXT WORD' PART OF REPLY 20 *W*W ANDX 7 BSB18 [AGAIN SUITABLY MASKED TO 18 BITS 8 *WTG LDCT 0 #200 19 *X*6 ORX 7 0 [SET 'BUFFER OVERFLOW' BIT 9 *XSQ BRN SETREPLY 4 *Y#B # 4 *YS2 # 4 *_?L # 4 *_R= # 4 B2=W #END 8 ____ ...26452123000200000000