{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: EDOBJ864)}}
====== EDOBJ864 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:AUTFIN|AUTFIN]], [[george:macro:AUTSTART|AUTSTART]], [[george:macro:BACKWAIT|BACKWAIT]], [[george:macro:BLAM|BLAM]], [[george:macro:BS|BS]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHECKA|CHECKA]], [[george:macro:DOWN|DOWN]], [[george:macro:FILEAUTR|FILEAUTR]], [[george:macro:FILEAUTW|FILEAUTW]], [[george:macro:FILEREAD|FILEREAD]], [[george:macro:FILETRAN|FILETRAN]], [[george:macro:FINDCORE|FINDCORE]], [[george:macro:FINMOVE|FINMOVE]], [[george:macro:FOUTMOVE|FOUTMOVE]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GETCORE|GETCORE]], [[george:macro:GETCOREN|GETCOREN]], [[george:macro:INMOVE|INMOVE]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:OUTMOVE|OUTMOVE]], [[george:macro:PMODES|PMODES]], [[george:macro:R|R]], [[george:macro:READ|READ]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:UP|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