(George Source)
Macros used: ACROSS, ALTLEN, AUTFIN, AUTSTART, BACKWAIT, BLAM, BS, BXE, BXGE, BXL, BXU, CHAIN, CHECKA, DOWN, FILEAUTR, FILEAUTW, FILEREAD, FILETRAN, FINDCORE, FINMOVE, FOUTMOVE, FREECORE, GETCORE, GETCOREN, INMOVE, JBC, JBS, MENDAREA, MHUNT, MHUNTW, NAME, OUTMOVE, PMODES, R, READ, SEGENTRY, TOPFCA2, TOPFCB2, UP
22FL #OPT K0EDOBJ=K0OLP 22^= #OPT K6EDOBJ=K6OLP 23DW #LIS K0EDOBJ 23YG #SEG EDOBJ72 [7OPAE 24D6 8HEDOBJ7 24XQ SEGENTRY K1EDOBJ,Z1EDOBJ 25CB ... SEGENTRY K2EDOBJ,NINCRCUBS 25X2 ... SEGENTRY K21EDOBJ,Z1CONFURWB 26BL ... SEGENTRY K22EDOBJ,Z2CONFURWB 26W= ...[ 29S2 # THIS SEGMENT IMPLEMENTS TRANSFER MODE PERIS TO AN OFF-LINE DA FILE. 2=?L # ILLEGAL PERIS OR NON-TRANSFER MODES CAUSE ENTRY TO EDSTART. 2=R= # 2?=W 2#PQ 2*P2 FILETRAN 2*P^ ...[ 2*QY ...XCHECK [CHECKA SUBROUTINE: LINK X7; EXIT+2 IF OK ELSE EXIT+0 2*RX ...[ X6=PROG START ADDRESS; X5=LENGTH TO CHECK; X2=FX2 2*SW ...[ (G4:- X3=PERMISSIONS REQUIRED) 2*TT ...[ LEAVES X1=FX1 & X2=FX2; X3-X6 UNCHANGED 2*WS ...#SKI G4 2*XR ... SBX 7 FX1 [CAN COORDINATE IN G4 2*YQ ... CHECKA 6,5,XCHECKERR,APETADDR(2),3,XCHECKCOOR,,,K1EDOBJ 2*^P ...XCHECKCOOR 2B2N ... ADN 7 2 2B3M ...XCHECKERR 2B4L ...#SKI G4 2B5K ... ADX 7 FX1 2B6J ... EXIT 7 0 2B7H ...[ 2B8L 2B=J ...#SKI G4 [TO SAVE SPACE IN G4 2B#G ...( 2BBD ...OUTMOVE 2BDB ... OUTMOVE APETADDR(2),6,7,5 2BG# ... EXIT 3 0 2BJ= ...) 2BL8 ...[ 2BN= Z1EDOBJ [NORMAL RE-ENTRY AFTER PREVIOUS PERI 2C7W 2CMG ... LDX 3 EVENT4(2) [TYPE-MODE WORD 2F6B LDCH 4 3 [B18-23 OF MODE 2FL2 SRL 3 6 2G5L LDX 6 3 2GK= ANDN 3 #17 [B14-17 OF MODE 2H4W BNZ 3 NOTRAN [JIF NOT A TRANSFER MODE 2HJG ... LDN 3 FYMODE 2K3B ANDN 4 #37 2KH2 SBN 4 4 2L2L BNG 4 TRAM [JIF MODE 0-3 2LG= SBN 4 3 2L^W ... BNZ 4 XILL [JIF NOT MODE 7 2MFG NGN 4 1 2M^6 BRN MADD 2NDQ TRAM 2NYB LDN 4 1 2PD2 ... ANDX 4 EVENT4(2) [X4=0 FOR READ, 1 FOR WRITE 2PXL BNZ 4 NADD40 [JIF WRITE, ADDITIVE #40 OK 2QC= MADD 2QWW LDN 0 #40 2RBG ... ANDX 0 EVENT4(2) 2RW6 ... BNZ 0 XILL [ADDITIVE #40 NOT ALLOWED 2S*Q NADD40 2STB ANDN 6 #760 [ISOLATE ADDITIVE MODES 2T*2 BZE 6 MADDOK [JIF NONE 2TSL SBN 6 #200 2W#= BZE 6 MADDOK [JIF #20000 2WRW SBN 6 #100 2X?G ... BNZ 6 XILL [JIF NOT #30000 2XR6 MADDOK 2Y=Q BZE 4 NCHWR [JIF NOT TO CHECK WRITE ACCESS 2YQB BNG 4 NCHWR [ DITTO 2^=2 ... LDN 3 FYNOWRITE 2^PL ... JBC XILL,FILERING(2),BAMWRITE 338G NCHWR 33N6 LDN 5 5 3572 LDX 6 ACAP(2) 359K ...#SKI G4 35#8 ... LDN 3 CHREAD+CHWRITE [NEED READ & WRITE ACCESS TO CONTROL 35BR ... CALL 7 XCHECK [CHECK RESERVATIONS ETC. 35FB ... LDN 3 FYNOCA 35H^ ... BRN XILL [J IF RESERVATION OR PERMISSION VIOLA 35LL LDN 7 ACA1(2) 35SW ...#SKI G3 3636 ... FOUTMOVE APETADDR(2),6,7,5 [MOVE CA TO AOLPT 369B ...#SKI G4 36CL ... CALL 3 OUTMOVE [MOVE CA TO AOLPT 36KW BNG 4 OKB [IGNORE COUNT & ADDRESS IF MODE 7 375G NGX 0 ACA3(2) 37CX ... LDN 3 FYCOUNT 37Q# ... BPZ 0 XILL [JIF COUNT -VE OR ZERO 384Q LDN 0 2 38JB ANDX 0 ACA1(2) 3942 BNZ 0 TCYL [JIF MODE 2 OR 3 39HL LDX 0 AEORG(2) 3=3= ANDN 0 #77 3=GW SLL 0 7 3?2G BXGE 0 ACA3(2),OKCT 3?G6 STO 0 ACA3(2) [RESET COUNT IF > BKT SIZE 3?^Q TCYL 3#FB OKCT 3#^2 PMODES 3,APETADDR(2) 3*DL LDX 0 BSP16 3*Y= ANDN 3 #10 3BCW BZE 3 RADD 3BXG LDX 0 BITS22LS 3CC6 RADD 3CWQ ANDS 0 ACA4(2) [MASK OUT UNWANTED BITS IN ADDR 3DBB #SKI G4 3DW2 ( 3F*L ... LDN 3 CHWRITE [CHECK WRITE ACCESS TO BUFFER IF READ 3FT= BZE 4 WCH 3G#W ... LDN 3 CHREAD [CHECK READ ACCESS TO BUFFER IF WRITE 3GSG WCH 3H#6 ) 3HRQ ... LDX 5 ACA3(2) [COUNT 3J?B ... LDX 6 ACA4(2) [BUFFER ADDRESS 3JR2 ... CALL 7 XCHECK [CHECK RESERVATIONS ETC. 3K=L ... LDN 3 FYNOBUF 3KQ= ... BRN XILL [J IF RESERVATION OR PERMISSION VIOLA 3L9W ...OKB 3LPG ... LDX 6 ACA5(2) 3M96 ... SBN 6 1 3MNQ ... BNG 6 OUTRANGE [JIF BKT NO. -VE OR ZERO 3N8B ... TOPFCA2 1 3NN2 ... ADX 6 FREADWORD(1) [E.O.F. BKT IF OFFSET 3P7L ... SMO ALOG(2) 3PM= ... SLL 6 0 [CONVERT TO START WD IN FILE 3Q6W ... ADX 1 FBACKPOINT(1) 3QLG ... LDX 1 BPTR(1) [-> FCB 3R66 ... LDX 5 FSIZE(1) 3RKQ ... SLL 5 GSBSLOG 3S5B ... BXGE 6 5,OUTRANGE [JIF BKT NOT IN FILE 3SK2 ... LDN 7 0 3T4L ... BNG 4 REPLY [JUST SET REPLY IF MODE 7 3TJ= ... STO 6 ACA5(2) [START WORD ADDRESS IN FILE 3W3W ... ADX 6 ACA3(2) 3WHG ... BXGE 5 6,OKBUCK [JIF TRANSFER WITHIN FILE 3X36 ... LDN 7 #20 [B1=OVER SEEK AREA BOUNDARY 3XGQ ... SBX 5 ACA5(2) 3Y2B ... STO 5 ACA3(2) [REDUCE COUNT 3YG2 ...OKBUCK 3Y^L ... LDX 6 ACA4(2) 3^F= ... ADX 6 ACA3(2) 3^YW ... STO 6 ACA2(2) 42DG ... DCH 7 ACA2(2) 42Y6 ... LDX 3 ACA5(2) 43CQ ... ADX 3 ACA3(2) 43XB ... SBN 3 1 44C2 ... SRL 3 GSBSLOG [GIVING LAST BLK NO. OF TRANSFER 44WL ... STO 3 ACA9(2) 45B= ... BZE 4 NINCRCUBS [JIF READ 45TW ... ADN 3 FBLKS-A1 46*G ... BXL 3 FBLMOD(1),NINCRCUBS [JIF BLK ALREADY WRITTEN TO 46T6 ... LDN 6 1(3) 47#Q ... SBX 6 FBLMOD(1) 47SB ... ACROSS EDSTART,2 [TO INCREASE CUBS 48#2 ...NINCRCUBS 48RL ... LDX 0 GSIGN 49?= ... ORS 0 ALTMARK(2) [SET "OPEN" MARKER 49QW ... AUTSTART [RESTART OBJ PROG 4==G ... BZE 4 NOALTBLOX [JIF READ 4=Q6 ... TOPFCB2 1 4?9Q ... BS 1,BFALTR [FILE ALTERED BIT 4?PB ... BXL 3 FBLMOD(1),NOALTBLOX [JIF BLK ALREADY WRITTEN TO 4#92 ... BXL 3 FUSEBL(1),NOMOREBLOX [JIF FILE HAS THE BLOX FOR TRANSFER 4#NL ... DOWN EDSTART,3 [GET MORE BLOCKS 4*8= ... TOPFCB2 1 4*MW ...NOMOREBLOX 4B7G ... ADS 6 FBLMOD(1) [INCR FBLMOD 4BM6 ... BS 1,BFALTB [BLOCKS ALTERED BIT 4C6Q ...NOALTBLOX 4CLB ... LDX 6 ACA5(2) 4D62 ... LDN 7 0 4DKL ... SRL 67 GSBSLOG [X6=START BLK, X7(B0-1)=START BLT 4F5= ... STO 6 ACA8(2) [REMEMBER START BLK 4FJW ... STO 7 ACA6(2) [REMEMBER START BLT 4G4G ... SLC 7 GSBSLOG 4GJ6 ... SBN 7 GSBS 4H3Q ... NGX 7 7 [GIVING REMAINING WDS IN 1ST BLK 4HHB ... BXL 7 ACA3(2),USEREM 4J32 ... LDX 7 ACA3(2) [ BUT USE [ACA3] IF LESS 4JGL ...USEREM 4K2= ... NGN 0 WAIT+1 4KFW ... ANDS 0 EDBUFR(2) [CLEAR AUTONOMOUS TRANSFER INDICATOR 4K^G ...NEXTBLK 4LF6 ... BNZ 4 NCHBLK [JIF WRITE 4LYQ ... TOPFCB2 1 4MDB ... LDX 0 6 4MY2 ... ADN 0 FBLKS-A1 4NCL ... BXGE 0 FBLMOD(1),TRANEND [JIF READ ON BLK NOT YET WRITTEN 4NX= ...NCHBLK 4PBW ... STO 6 ACA5(2) [REMEMBER CURRENT BLK 4PWG ... STO 7 ACA7(2) [ & WD COUNT 4QB6 ...# 4QTQ ...# AND HERE IS YER ACTUAL "BUFFERED *DA" CODE. 4R*B ...# 4RT2 ...# NOTATION 4S#L ...# X = POSITION IN FILE OF "CURRENT CONCEPTUAL BUFFER BLOCK" 4SS= ...# Y = POSITION IN FILE OF BLOCK FOR THIS TRANSFER 4T?W ...# S = A SCORE OF 0 TO 'MEMORY'-1 INDICATING (WE HOPE) WHETHER 4TRG ...# BUFFERING WILL WORK 4W?6 ...# W = A SWITCH SET WHEN BLOCK X HAS NOT HAD A READ SINCE X WAS 4WQQ ...# SET 4X=B ...# R = A SWITCH SET WHEN BLOCK X HAS NOT HAD A WRITE SINCE X 4XQ2 ...# WAS SET 4Y9L ...# 4YP= ...#DEF MEMORY=8 4^8W ...#DEF W=#4 4^NG ...#DEF R=#2 5286 ...#DEF WAIT=#1000 [SET IN EDBUFR WHEN A DIRECT TRANSFER 52MQ ...# IS TO BE BACKWAITED FOR 537B ...# 53M2 ...# FIRST OF ALL WE SEE IF THE TRANSFER SCORES A HIT, A NEAR MISS 546L ...# (ADJACENT BLOCK) OR A COMPLETE MISS ON THE BUFFER AND ADJUST S 54L= ...# ACCORDINGLY. 555W ...# 55KG ... JBS OBJDIR,FILERING(2),BACLEAN [DIRECT TRANSFER IF USERCLEAN 5656 ... BXU 6 ACA8(2),RIDBUFF [DON'T ADJUST S IF NOT 1ST BLK OF 56JQ ... LDCH 5 EDBUFR(2) [GET S TRANSFER 574B ... LDEX 0 EDBUFR(2) [GET X 57J2 ... SBX 0 ACA5(2) [X-Y 583L ... BNZ 0 NOTHIT [JIF NOT A DIRECT HIT 58H= ... LDCT 0 W 592W ... BZE 4 R1 59GG ... LDCT 0 R 5=26 ...R1 ANDX 0 EDBUFR(2) 5=FQ ... BZE 0 UPS 5=^B ... [THIS TRANSFER IS A READ ON THE BUFFER AFTER ONLY A WRITE 5?F2 ... [OR VICE VERSA, SO BUFFERING WOULDN'T SAVE A TRANSFER 5?YL ... ERS 0 EDBUFR(2) [UNSET R/W 5#D= ... BRN TESTBUFF 5#XW ...UPS 5*CG ... ADN 5 5 [S = S+5 5*X6 ... CALL 0 RESETS 5BBQ ... BRN TESTBUFF 5BWB ...NOTHIT 5CB2 ... BPZ 0 SQ 5CTL ... NGX 0 0 5D*= ...SQ SBN 0 1 5DSW ... BNZ 0 NOTNEAR [JIF NOT A NEAR MISS 5F#G ... SBN 5 1 [S = S-1 5FS6 ... CALL 0 RESETS 5G?Q ... BRN RIDBUFF [J TO HEAVE OLD BUFFER (IF ANY) 5GRB ...NOTNEAR 5H?2 ... SBN 5 2 [S = S-2 5HQL ... CALL 0 RESETS 5J== ... SBN 5 MEMORY/4 5JPW ... BPZ 5 TESTBUFF [JIF THIS IS A SUDDEN ABERATION 5K9G ... [ (DON'T HEAVE OLD BUFFER) 5KP6 ...RIDBUFF 5L8Q ... LDEX 6 EDBUFR(2) 5LNB ... CALL 0 SBUFF 5M82 ... BNG 3 NORID [JIF NO BUFFER TO HEAVE 5MML ... LDX 0 ATYPE(3) 5N7= ... SRL 0 12 5NLW ... ERN 0 FILE+FURRB 5P6G ... BNZ 0 NFURRB [JIF NOT A READ BUFFER (MUST BE A 5PL6 ... FREECORE 3 [FREE FURRB WRITE) 5Q5Q ... BRN NORID 5QKB ...NFURRB 5R52 ... CHAIN 3,2 [GET FURWB OUT OF FILE CHAIN 5RJL ... STOZ AWORK4(2) [FILE DEPTH = 0 5S4= ... ADN 6 FBLKS 5SHW ... BRN WRFURWB 5T3G ...# 5TH6 ...# THE FOLLOWING ENTRY POINTS (K21 & K22) ARE FROM THE 5W2Q ...# CONFURWB MACRO TO WRITE AWAY A FURWB LEFT LYING AROUND. IN ALL 5WGB ...# CASES THE FURWB IS CHAINED IN THE ACT CHAIN ON ENTRY. 5X22 ...# 5XFL ...Z1CONFURWB 5X^= ... LDX 0 ACOMMUNE4(2) [FILE DEPTH 5YDW ... BRN SPARS 5YYG ...[ 5^D6 ...Z2CONFURWB 5^XQ ... LDN 0 0 [ZERO FILE DEPTH 62CB ...SPARS 62X2 ... STO 0 AWORK4(2) [PRES. FILE DEPTH 63BL ... LDX 4 GSIGN [INDICATE CONFURWB MACRO 63W= ... MHUNT 3,FILE,FURWB 64*W ... CHAIN 3,2 [CHAIN FURWB IMED. AFTER ACT 64TG ... BLAM AWORK4(2) [GET FREADBLOCK TYPE POINTER TO BLK 65*6 ... LDX 6 1 [ INTO X6 65SQ ... JBC NOCHECK,2,BFMT [J UNLESS MT FILE 66#B ... DOWN MTCHECK,4 [ENSURE DATA VALID (ELSE BREAK) 66J8 ... MHUNTW 3,FILE,FURWB 66S2 ...NOCHECK 67?L ... LDX 2 FX2 67R= ...WRFURWB 68=W ... STO 4 AWORK3(2) 68QG ...# 69=6 ...# IT IS POSSIBLE TO HAVE SUCH AN ARRANGEMENT OF RUBBISH AND 69PQ ...# NON-RUBBISH BLOCKLETS THAT WE HAVE TO WRITE THE BLOCK IN MORE 6=9B ...# THAN ONE TRANSFER. HERE WE SEE WHICH BITS ARE SET IN ATYPE AND 6=P2 ...# DECIDE IF THIS IS NECESSARY. 6?8L ...# 6?N= ... LDX 4 ALOGLEN(3) 6#7W ... SRL 4 GSBSLOG-BLS [GIVING NO. BLTS 6#MG ...WHATLEFT 6*76 ... LDN 7 0 [THIS WILL BE THE WD COUNT OF BLT(S) 6*LQ ...WHATBITS [ TO BE WRITTEN 6B6B ... LDCT 0 #400 6BL2 ... SMO 4 6C5L ... SLC 0 0 [1BIT MASK (STARTING WITH HIGHEST BLT 6CK= ... ANDX 0 ATYPE(3) [ NO.) 6D4W ... BZE 0 NRUBB [JIF NOT A RUBBISH BLT 6DJG ... BNZ 7 SOME [BUT J IF PREV. NON-RUBBISH BLT(S) 6F46 ... BCT 4 WHATBITS 6FHQ ... BRN (GEOERR) [WHOLE BLK IS RUBBISH (SHOULD NEVER 6G3B ...NRUBB ADN 7 GSBS/BLN [INCR. WD COUNT HAPPEN) 6GH2 ... BCT 4 WHATBITS 6H2L ... BRN NOMOVE [JIF NO NEED TO SPLIT TRANSFER 6HG= ...SOME SRL 0 1 6H^W ... BZE 0 MOVEDOWN [AS ABOVE BUT MOVE BLT(S) TO START OF 6JFG ... ANDX 0 ATYPE(3) [ BLK 6J^6 ... BNZ 0 SOME [SEE IF ANY MORE NON-RUBBISH BLT(S) 6KDQ ...# 6KYB ...# HAVING FOUND THAT WE NEED TO SPLIT THE TRANSFER, WE GET A BLOCK 6LD2 ...# OF CORE, MOVE THE BLT(S) INTO IT TO WRITE THEM AWAY. 6LXL ...# 6MC= ... STO 4 AWORK2(2) [REMEMBER WHERE WE ARE IN THE BLK 6MWW ... SRC 4 BLS 6NBG ... ORX 6 4 [SET BLT MOD 6NW6 ... GETCORE 7,1 6P*Q ... MHUNT 3,FILE,FURWB 6PTB ... SLC 4 GSBSLOG 6Q*2 ... ADN 4 A1(3) 6QSL ... FINDCORE 5 6R#= ... ADN 5 A1 6RRW ... SMO 7 6S?G ... MOVE 4 0 [MOVE BLT(S) INTO NEW BLOCK 6SR6 ... BRN WRITEAWAY 6T=Q ...# 6TQB ...# HERE WE CAN DO THE TRANSFER FROM THE ORIGINAL BLOCK BUT WE MUST 6W=2 ...# MOVE THE BLT(S) DOWN TO THE START OF THE BLOCK. 6WPL ...# 6X9= ...MOVEDOWN 6XNW ... SRC 4 BLS 6Y8G ... ORX 6 4 [SET BLT MOD 6YN6 ... SLC 4 GSBSLOG 6^7Q ... ADN 4 A1(3) 6^MB ... LDN 5 A1(3) 7272 ... SMO 7 72LL ... MOVE 4 0 736= ...NOMOVE 73KW ... STOZ AWORK2(2) [INDICATE LAST/ONLY TRANSFER 745G ... BXE 7 ALOGLEN(3),WRITEAWAY 74K6 ... ALTLEN 3,7 754Q ...WRITEAWAY 75JB ... LDX 4 AWORK4(2) 7642 ... FILEAUTW 4,FAIL+FREE,EX7,6,,,NOCHECK 76HL ... LDX 4 AWORK2(2) 773= ... BZE 4 WRITBUFF [JIF ALL (NON-RUBBISH) BLTS WRITTEN 77GW ... MHUNT 3,FILE,FURWB [RE-LOCATE FURWB 782G ... CHAIN 3,2 [ & CHAIN IT FOR NEXT TRANSFER 78G6 ... ANDN 6 #1777 [MASK OUT BLT MOD 78^Q ... BRN WHATLEFT [J TO SEE WHAT'S LEFT 79FB ...WRITBUFF 79^2 ... LDXC 4 AWORK3(2) 7=DL ... BCC NORID [JIF NOT CONFURWB 7=Y= ... UP 7?CW ...# 7?XG ...# AFTER DISPOSING OF THE OLD BUFFER (IF ANY) WE SET UP POINTERS, ETC 7#C6 ...# FOR THE NEW BUFFER (WHICH WE MAY OR MAY NOT ACTUALLY SET UP). 7#WQ ...# 7*BB ...NORID 7*W2 ... LDX 6 ACA5(2) 7B*L ... DEX 6 EDBUFR(2) [X' = Y 7BT= ... LDCT 0 R+W 7C#W ... ORS 0 EDBUFR(2) 7CSG ... LDCT 0 W 7D#6 ... BZE 4 R2 7DRQ ... LDCT 0 R 7F?B ...R2 ERS 0 EDBUFR(2) [SET R IF READ, W IF WRITE 7FR2 ...# 7G=L ...# BEFORE WE START MUCKIN' ABOUT ACCESSING OR SETTING UP BUFFERS, 7GQ= ...# WE'LL FIND OUT WHICH ATYPE TYPE BITS WILL BE AFFECTED BY THIS 7H9W ...# TRANSFER. 7HPG ...# 7J96 ...TESTBUFF 7JNQ ... STOZ AWORK4(2) 7K8B ... LDX 3 ACA6(2) 7KN2 ... SLC 3 BLS 7L7L ... LDN 0 1 7LM= ... SLL 0 0(3) [SET BIT IN START BLT POSITION 7M6W ... LDX 5 ACA7(2) 7MLG ... ADN 5 GSBS/BLN-1 7N66 ... SRL 5 GSBSLOG-BLS [GIVING NO. BLTS IN TRANSFER 7NKQ ...TBITS ORS 0 AWORK4(2) [SET 1 BIT FOR EACH BLT 7P5B ... SLL 0 1 7PK2 ... BCT 5 TBITS 7Q4L ...# 7QJ= ...# NOW WE SEE IF THERE'S A BUFFER FOR THIS TRANSFER (WE ALWAYS USE 7R3W ...# IT IF THERE IS, EVEN IF IT'S NOT OURS). IF THERE ISN'T A BUFFER 7RHG ...# WE CHECK IF IT'S OK TO SET ONE UP. 7S36 ...# 7SGQ ... CALL 0 SBUFF 7T2B ... BNG 3 NOBUFF [JIF BUFFER DOESN'T EXIST 7TG2 ... BNZ 4 WRITEVB [JIF WRITE TO WRITE VIA THE BUFFER 7T^L ... LDX 0 ATYPE(3) 7WF= ... ANDX 0 AWORK4(2) 7WYW ... BZE 0 MOVEIN [JIF NONE OF REQD BLTS ARE RUBBISH 7XDG ... CALL 5 READFILE [READ WHOLE BLK FROM BS 7XY6 ... CALL 0 SBUFF 7YCQ ... BPZ 3 RIDRUBBISH [JIF BUFFER STILL THERE 7YXB ... CALL 0 SETUPQUERY [BUFFER DISAPPEARED. CAN WE SET ONE 7^C2 ... BRN NOSETUP [NO. UP? 7^WL ... BRN SETUPFURRB [YES! J TO SET UP BREAD AS A FURRB 82B= ...NOSETUP 82TW ... MHUNTW 3,BSTB,BREAD 83*G ... CALL 7 MOVEINR [MOVE INTO PROG FROM BREAD (AS IT'S 83T6 ... FREECORE 3 [FREE BREAD THERE) 84#Q ... BRN TESTEND 84SB ...# 85#2 ...# THINGS TEND TO GET A BIT FIDDLY HERE WITH THE POSSIBILITY OF 85RL ...# BUFFERS APPEARING & DISAPPEARING OVER CO-ORDINATIONS, BUT THIS IS 86?= ...# THE GENERAL IDEA:- 86QW ...# NO BUFFER HAS BEEN FOUND FOR THIS BLOCK SO WE DECIDE IF IT IS 87=G ...# WORTH SETTING ONE UP ('S' HIGH ENOUGH, NOT A TRANSFER OUT OF STEP, 87Q6 ...# NO COREJAM SINCE LAST PERI AND NOT WHOLE BLOCK TRANSFER). IF WE 889Q ...# CAN SET UP A BUFFER, READ BUFFERS ARE SET UP BY READING THE B.S. 88PB ...# BLOCK, WRITE BUFFERS BY GETTING CORE & RENAMING IT. 8992 ...# 89NL ...NOBUFF 8=8= ... CALL 0 SETUPQUERY [CAN WE SET UP A BUFFER? 8=MW ... BRN OBJDIR [NO. DO TRANSFER DIRECT 8?7G ... GETCOREN GSBS,0 [YES. GET THE CORE FOR A BUFFER 8?M6 ... BRN OBTAINED [JIF WE'VE GOT THE CORE 8#6Q ... LDX 0 CLEANCT 8#LB ... STO 0 CJTIME [KID OTHER *DA OLPAS THERE'S BEEN A 8*62 ... BRN OBJDIR [ COREJAM 8*KL ...OBTAINED 8B5= ... FINDCORE 1 8BJW ... BZE 4 RDCOROK [JIF TO SET UP A READ BUFFER 8C4G ... CALL 0 SBUFF 8CJ6 ... BPZ 3 POPPEDUP [JIF A BUFFER HAS APPEARED 8D3Q ... TOPFCB2 3 8DHB ... LDX 0 BSPRE(3) 8F32 ... STO 0 BACK1(1) [NEW BUFFER SO SET UP BACK1, 8FGL ... SMO ACA5(2) 8G2= ... LDX 0 FBLKS(3) 8GFW ... STO 0 BACK2(1) [ BACK2 8G^G ... STOZ A1(1) [ ZEROISE THE BUFFER. THIS IS FOR 8HF6 ... LDN 4 A1(1) [ THE BENEFIT OF PROGRAMS THAT 8HYQ ... LDN 5 A1+1(1) [ ASSUME UNWRITTEN WORDS IN A 8JDB ... MOVE 4 GSBS-1 [ H/W BLOCK ARE ZERO (E.G. XEKB) 8JY2 ... LDX 2 FPTR(3) 8KCL ... LDX 3 1 8KX= ... CHAIN 1,2 [ & CHAIN AFTER FSTACK 8LBW ... LDX 5 AWORK4(2) 8LWG ... ERN 5 #17 8MB6 ... BRN MOVEOUT [J TO BUNG DATA INTO IT 8MTQ ...POPPEDUP 8N*B ... FREECORE 1 [FREE "GETCORED" BLOCK 8NT2 ...WRITEVB 8P#L ... LDX 5 ATYPE(3) 8PS= ... ORX 5 AWORK4(2) 8Q?W ... ERX 5 AWORK4(2) [UNSET RELEVENT ATYPE BITS 8QRG ...MOVEOUT 8R?6 ... NAME 3,FILE,FURWB 8RQQ ... DSA 5 ATYPE(3) 8S=B ... LDX 6 ACA4(2) [PROGRAM ADDRESS 8SQ2 ... LDX 7 ACA6(2) 8T9L ... SLC 7 GSBSLOG 8TP= ... ADN 7 A1(3) [GIVING ADDR WITHIN BUFFER 8W8W ...#SKI G3 8WNG ... FOUTMOVE APETADDR(2),6,7,ACA7(2) [MOVE DATA TO BUFFER 8X86 ...#SKI G4 8XMQ ...( 8Y7B ... LDX 5 ACA7(2) 8YM2 ... CALL 3 OUTMOVE 8^6L ...) 8^L= ... LDN 4 1 [INDICATE WRITE 925W ... BRN TESTEND 92KG ...RDCOROK 9356 ... CALL 0 SBUFF 93JQ ... BNG 3 READABUFF [JIF BUFFER NOT APPEARED DURING 944B ... LDX 0 ATYPE(3) [ GETCORE 94J2 ... ANDX 0 AWORK4(2) 953L ... BNZ 0 READABUFF [JIF BUFFER APPEARED BUT ISN'T 95H= ... FREECORE 1 [FREE "GETCORED" BLOCK SUITABLE 962W ... BRN MOVEIN [ & J TO USE BUFFER THAT APPEARED 96GG ...READABUFF 9726 ... NAME 1,BSTB,BFREEW 97FQ ... CALL 5 READFILE [READ BS BLK INTO BFREEW 97^B ... CALL 0 SBUFF 98F2 ... BNG 3 SETUPFURRB [JIF BUFFER NOT APPEARED 98YL ...RIDRUBBISH 99D= ... MHUNTW 1,BSTB,BREAD 99XW ... LDX 7 ATYPE(3) 9=CG ... LDN 0 BLN 9=X6 ... LDN 4 A1(1) 9?BQ ... LDN 5 A1(3) 9?WB ...MORE SRC 7 1 9#B2 ... BPZ 7 NCBLT 9#TL ... MOVE 4 GSBS/BLN [COPY NON-RUBBISH BLT FROM BREAD 9**= ...NCBLT ADN 4 GSBS/BLN 9*SW ... ADN 5 GSBS/BLN 9B#G ... BCT 0 MORE 9BS6 ... DSA 0 ATYPE(3) [CLEAR ALL RUBBISH BITS 9C?Q ... FREECORE 1 [FREE BREAD 9CRB ... BRN MOVEIN 9D?2 ...SETUPFURRB 9DQL ... MHUNTW 3,BSTB,BREAD 9F== ... LDX 2 FILERING(2) 9FPW ... ADX 2 FBACKPOINT(2) 9G9G ... CHAIN 3,2 [CHAIN BREAD AFTER FSTACK 9GP6 ... NAME 3,FILE,FURRB [ & CALL IT A FURRB 9H8Q ...MOVEIN 9HNB ... CALL 7 MOVEINR 9J82 ... BRN TESTEND 9JML ...# 9K7= ...# A FEW S/RS USED BY BUFFERING CODE 9KLW ...# 9L6G ...MOVEINR [MOVE BLOCKLET(S) FROM BUFFER TO PROGRAM 9LL6 ... LDX 4 ACA6(2) 9M5Q ... SLC 4 GSBSLOG 9MKB ... ADN 4 A1(3) [GIVING ADDR WITHIN BUFFER 9N52 ... LDX 5 ACA4(2) [OBJ PROG ADDR 9NJL ...#SKI G3 9P4= ... FINMOVE APETADDR(2),5,4,ACA7(2) 9PHW ...#SKI G4 9Q3G ... INMOVE APETADDR(2),5,4,ACA7(2) 9QH6 ... LDN 4 0 [INDICATE READ 9R2Q ... EXIT 7 0 9RGB ...# 9S22 ...RESETS [STORE VALUE OF 'S' AFTER CHECKING THAT IT'S WITHIN BOUNDS 9SFL ... LDN 3 MEMORY 9S^= ... BXL 5 3,RSTS1 9TDW ... BNG 5 RSTS2 9TYG ... LDN 5 MEMORY-1 9WD6 ... BRN RSTS1 9WXQ ...RSTS2 LDN 5 0 9XCB ...RSTS1 DCH 5 EDBUFR(2) 9XX2 ... EXIT 0 0 9YBL ...# 9YW= ...SBUFF [SEARCH FILE CHAIN FOR BUFFER FOR BLOCK WHOSE POSITION IN 9^*W ... [THE FILE IS IN X6. GIVES POINTER IN X3 (-VE IF BUFFER NOT 9^TG ... [ FOUND) =2*6 ... STO 0 GEN0 =2SQ ... STO 6 GEN1 =3#B ... TOPFCB2 3 =3S2 ... SMO 6 =4?L ... LDX 6 FBLKS(3) [BACK2 BLK NO. =4R= ... LDX 3 FPTR(3) [SKIP FSTACK =5=W ...SBUF2 LDX 3 FPTR(3) =5QG ...#SKI IFS<1$1 =6=6 ... BXE 3 CXFI,SBUF1 [NOT FOUND - END OF FILE CHAIN =6PQ ... LDX 0 ATYPE(3) =79B ... SRL 0 12 =7P2 ... ERN 0 FILE+FCB =88L ... BZE 0 SBUF1 [NOT FOUND - NEXT FILE'S FCB =8N= ... ERN 0 FEXTRA$FCB =97W ... BZE 0 SBUF1 [NOT FOUND - FEXTRA FOR THIS WORKFILE =9MG ... BXU 6 BACK2(3),SBUF2 [JIF NOT REQD USAGE BLK ==76 ... LDX 6 GEN1 ==LQ ... ERN 0 FURRB$FEXTRA =?6B ... BZE 0 (GEN0) [JIF IT'S A FURRB =?L2 ... ERN 0 FURWB$FURRB =#5L ... BNZ 0 (GEOERR) [JIF IT'S NOT A FURWB =#K= ... BRN (GEN0) =*4W ...SBUF1 NGN 3 1 =*JG ... LDX 6 GEN1 =B46 ... BRN (GEN0) =BHQ ...# =C3B ...READFILE [NON-AUTONOMOUS READ ROUTINE =CH2 ... SBX 5 FX1 =D2L ... ADN 6 FBLKS =DG= ... FILEREAD ,FAIL+BUSE,,6,,,NOCHECK =D^W ... SBN 6 FBLKS =FFG ... ADX 5 1 =F^6 ... EXIT 5 0 =GDQ ...# =GYB ...SETUPQUERY [SEE IF IT'S OK TO SET UP A BUFFER. =HD2 ... [EXIT TO CALL +1 - NO, CALL +2 - YES =HXL ... LDCH 5 EDBUFR(2) =JC= ... SBN 5 MEMORY/2 =JWW ... BNG 5 (0) [NO - S TOO LOW =KBG ... LDEX 5 EDBUFR(2) =KW6 ... TXU 5 ACA5(2) =L*Q ... BCS (0) [NO - SUDDEN ABERATION =LTB ... LDX 5 EDPTIME(2) =M*2 ... TXL 5 CJTIME =MSL ... BCS (0) [NO - CORE JAM SINCE LAST PERI =N#= ... BNZ 4 SUPQ1 [JIF WRITE (ALWAYS FASTER VIA BUFFER =NRW ... [ - GETCORE & MOVE) =P?G ... TXU 6 ACA9(2) =PR6 ... BCS (0) [NO - NOT LAST/ONLY BLK OF TRANSFER =Q=Q ... LDX 5 ACA7(2) =QQB ... TXU 5 BSBS =R=2 ... BCC (0) [NO - WHOLE BLK READ =RPL ...SUPQ1 EXIT 0 1 [YES!!! =S9= ...# =SNW ...# HERE WE DO A DIRECT PROGRAM/B.S. TRANSFER WHEN BUFFERING ISN'T =T8G ...# ADVISABLE. =TN6 ...# =W7Q ...OBJDIR =WMB ... LDN 0 WAIT =X72 ... ORS 0 EDBUFR(2) [INDICATE AN AUTONOMOUS TRANSFER =XLL ... ADN 6 FBLKS =Y6= ... ORX 6 ACA6(2) [SET BLT MOD =YKW ... LDX 5 ACA4(2) [OBJ PROG ADDR =^5G ... LDX 7 ACA7(2) [LENGTH =^K6 ... BZE 4 READ ?24Q ... LDX 4 APETADDR(2) [NB- X4 STILL NON-ZERO ?2JB ... FILEAUTW ,BSET+BOBJ+FAIL,EX7,6,EX5,EX4 ?342 ... BRN TESTEND ?3HL ...READ ?43= ... LDX 4 APETADDR(2) ?4GW ... FILEAUTR ,FAIL+BSET+BOBJ,EX7,6,EX5,EX4 ?52G ... LDN 4 0 [INDICATE READ ?5G6 ...TESTEND ?5^Q ... LDX 0 ACA7(2) ?6FB ... ADS 0 ACA4(2) [INCR. PROG ADDR ?6^2 ... SBS 0 ACA3(2) [DECR. COUNT ?7DL ... LDX 7 ACA3(2) ?7Y= ... BZE 7 TRANEND [JIF END OF TRANSFER ?8CW ... LDX 6 ACA5(2) ?8XG ... ADN 6 1 [INCR. BLK MOD ?9C6 ... STOZ ACA6(2) [FURTHER TRANSFERS START AT BLT 0 ?9WQ ... BXL 7 BSBS1,NEXTBLK [TRANS LENGTH = REM. COUNT IF < 1BLK ?=BB ... LDN 7 GSBS [ OR GSBS IF >1BLK ?=W2 ... BRN NEXTBLK ??*L ...TRANEND ??T= ... LDN 0 WAIT ?##W ... ANDX 0 EDBUFR(2) ?#SG ... BZE 0 NOWAIT [JIF NO AUTONOMOUS TRANSFERS ?*#6 ... BACKWAIT [WAIT FOR END OF BS TRANSFER(S) ?*RQ ...NOWAIT ?B?B ... LDX 0 CLEANCT ?BR2 ... STO 0 EDPTIME(2) [REMEMBER TIME OF PERI ?C=L ... LDX 7 ACA2(2) ?CQ= ...REPLY ?D9W ... AUTFIN 7 [SET OBJ PROG REPLY & CHECK SPOUT ?DPG ... BRN K1EDOBJ ?F96 ... ?FNQ ...OUTRANGE ?G8B ... LDCT 7 #10 [B5 IN REPLY = BKT OUT OF RANGE ?GN2 ... BRN REPLY ?H7L ... ?HM= ...NOTRAN ?J6W ... ACROSS EDSTART,1 ?JLG ... ?K66 ...XILL ?KKQ ... ACROSS OLPODD,5 ?L5B ... MENDAREA AOLPGAP,K99EDOBJ ?LK2 ...#END ^^^^ ...154342500001