EDOBJ864

(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

EDOBJ864.txt
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