{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: MATALO860)}}
====== MATALO860 ======
(George Source)
**Macros used:** [[george:macro:ALTLEN|ALTLEN]], [[george:macro:BITDEFS|BITDEFS]], [[george:macro:BS|BS]], [[george:macro:BXE|BXE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:DOWN|DOWN]], [[george:macro:FINMOVE|FINMOVE]], [[george:macro:FPCACA|FPCACA]], [[george:macro:INMOVE|INMOVE]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCAB2|TOPFCAB2]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]]
22FL ... SEG MATALO,8,FILE,OLP
22^= ... SEGENTRY K1MATALO,ZMAGSTEP [MAGSTEP MACRO ENTRY
23DW ... SEGENTRY K2MATALO,ZMAGREAD [MAGREAD MACRO ENTRY
23YG ... SEGENTRY K3MATALO,ZFTM [FTM MACRO ENTRY
24D6 [
24RN ...[ THIS SEGMENT IMPLEMENTS THE FILESTORE MAGNETIC TAPE FILE ACCESS
257= ...[ MACROS USED BY LOAD & CONT EXTRACODE (& BY RV TESTING SYSTEM).
25GS ...[ IT DOES NOT PERFORM ANY TRANSFERS ON THE FILE, THESE BEING DONE
25WB ...[ VIA BUFFERS ORGANIZED BY ENTRY TO K7MTOBJ FOR INDEX BUFFERS & K7MTCODE
269Y ...[ FOR BULK BUFFERS.
26KG ...[ THE FILE MUST BE OPEN IN READR OR WRITE MODE @ DEPTH ZERO.
26^4 ...[
27#L ...[ FOR FORMAT OF MT FILESTORE FILES SEE PRM 5.5.3.2
27N8 ...[ FREADWORD : B0-11 :INDEX BLOCKLET POINTER RELATIVE TO FBLKS*BLN
283Q ...[ B12-23:WORD POINTER WITHIN INDEX BLOCKLET
28C# ...[
28QW ...[ USE OF WORKING SPACE
296D ...[ AWORK1 -B0-5 =LENGTH OF B TYPE TRANSFER (IN BS BLOCKS)
29G2 ...[ B6-14 =LENGTH OF A TYPE TRANSFER
29TJ ...[ B15-23=LENGTH OF C OR D TYPE TRANSFER
2=96 ... BITDEFS AWORK2,0,STEP,SKIP,READ,MAGLONG
2=JN ...[ AWORK3 WORD POINTER IN BULK FILE
2=Y= ...[ AWORK4 MAGSTEP = DENOTES PROGRAM ADDRESS
2??S ...[ MAGREAD = AMOUNT OF DATA ALREADY MOVED TO FRRB
2?MB ...[
2#2Y ...SFINDEX
2#BG ...#HAL FILE+FINDEX,0 [INDEX READ BLOCK
2#Q4 ...SFINDEXW
2*5L ...#HAL FILE+FINDEXW,0 [INDEX WRITE BLOCK
2*F8 ...SFEXTRA
2*SQ ...#HAL FILE+FEXTRA,0
2B8L TMARK 4HMARK
2BN= TEND 4HEND
2C7W #
2CKY ...SBUFF [SEARCH FOR BULK OR INDEX BUFFER BLOCK
2D42 ...[ REQUIRES X4=BLOCK PTR OF REQUIRED BLOCK
2DG4 ...[ X2->FCB
2DY6 ...[ LINK X5; X0,X6 DESTROYED
2FB8 ...[ GIVES X1->REQUIRED BLOCK IF AVAILABLE, X2=FX2
2FS= ...[ IF THE BLOCK IS LOCATED THE EXIT IS ON X7, IT BEING ASSUMED
2G=# ...[ THAT THE SUBROUTINE IS CALLED FROM SFINDBUFF OR SFINDINDX WHICH ARE
2GNB ...[ THEMSELVES CALLED ON X7.
2H6D ...[ IF THE BLOCK IS NOT FOUND EXIT IS ON X5 TO ENABLE THE CALLING SUB-
2HJG ...[ ROUTINE TO ENTER K7MTOBJ OR K7MTCODE AS APPROPRIATE BEFORE
2J2J ...[ REPEATING THE SEARCH.
2JDL ...[
2JWN ... LDX 1 FPTR(2) [MISS OUT THE FSTACK
2K#Q ... LDX 6 4 [BLOCK POINTER
2KQS ... SLC 6 2 [BLOCKLET BITS
2L8W ... ANDN 6 3 [MASK OUT OTHERS
2LLY ... SMO 4
2M52 ... ORX 6 0(2) [BLOCK(LET) NUMBER
2MH4 ... LDX 2 FX2
2M^6 SLOOP
2NDQ LDX 1 FPTR(1)
2NYB ... BXE 1 CXFI,(5) [EXIT IF END OF FILE CHAIN
2PD2 ... LDX 0 ATYPE(1)
2PXL ... BXE 0 FFSFCB,(5) [EXIT IF NEXT FCB
2QC= ... SMO FX1
2QWW ... BXE 0 SFEXTRA,(5) [ EXIT IF END OF ! RING
2RBG ... BXE 0 FFSFURB,SFURB [J IF FURB FOUND
2RW6 ... BXE 0 FFSFUWB,SFURB [J IF FUWB FOUND
2S*Q ... SMO FX1
2STB ... BXE 0 SFINDEXW,SFURB [J IF FINDEXW
2T*2 ... SMO FX1
2TSL ... BXU 0 SFINDEX,SLOOP [TRY NEXT BLOCK IF NOT FINDEX
2W#= ...SFURB
2WRW ... BXE 6 BACK2(1),(7) [EXIT IF RIGHT BLOCK
2X?G ... BRN SLOOP [ELSE TRY NEXT
2XR6 ...[
2Y=Q ...SFINDINDX [FIND THE CURRENT INDEX BLOCKLET
2YQB ...[ EXPECTS X2=FX2; LINK X7; X0,X4,X5,X6 DESTROYED
2^=2 ...[ ON EXIT X1->FINDEX, X2=FX2, X3->FCA
2^PL ...[
329= ... TOPFCAB2 3,2 [X3->FCA : X2->FCB
32NW ... LDX 4 FREADWORD(3) [PICK UP BLOCK MOD
338G ... BPZ 4 SNOINIT [J.UNLESS INITIALISATION REQUIRED
33N6 ... LDX 4 FBLMOD(2) [FILE HAS NOT BEEN ACCESSED YET
347Q ... SBN 4 FBLKS-A1
34MB ... BZE 4 SEOF [J. IF FILE IS EMPTY
3572 ...[THE BLOCK PTR IS THE USUAL DISTANCE THROUGH FCB BUT IN BITS 0-9
35LL ...[B10,11 GIVE THE BLOCKLET WITHIN THE BLOCK
366= ... LDN 4 FBLKS*4
36KW ... SLL 4 12
375G ... STO 4 FREADWORD(3) [SET BLOCKLET POINTER TO B.O.F.
37K6 SNOINIT
384Q ... SRL 4 12
38JB ... SRC 4 2 [CONVERT TO PTR IN FCB
3942 ... CALL 5 SBUFF [LOCATE BUFFER : EXIT ON X7 IF FOUND
39HL ... SBX 7 FX1 [BUFFER NOT FOUND
3=3= ... DOWN MTOBJ,7 [GET BLOCK INTO FILE CHAIN
3=GW ... TESTRPN2 OK,SEOF [TREAT AS EOF IF FAILED OR CORRUPT
3?2G ... ADX 7 FX1
3?G6 ... BRN SFINDINDX [START AGAIN
3?^Q ...[
3#FB ...[
3#^2 ...SFINDBUFF [FIND THE CURRENT BULK BUFFER BLOCK
3*DL ...[ EXPECTS X2=FX2; LINK X7: ON EXIT X1->FURB, X2->FCB
3*Y= ...[ X0,X4,X5,X6 DESTROYED: X3 UNCHANGED
3BCW ...[
3BXG ... LDX 4 AWORK3(2) [BULK FILE ADDRESS
3CC6 ... TOPFCB2 2
3CWQ ... SRL 4 9 [CONVERT TO BLOCKS
3DBB ... ADX 4 BULKMOD(2) [PLUS NUMBER OF INDEX BLOCKS
3DW2 ... ADN 4 FBLKS [GET BLOCK NO. IN X4
3F*L ... CALL 5 SBUFF [LOCATE BUFFER : EXIT ON X7 IF FOUND
3FT= ... SBX 7 FX1 [NOT FOUND
3G#W ... DOWN MTCODE,7 [GET INDEX BLOCK INTO FILE CHAIN
3GSG ... ADX 7 FX1
3H#6 ... BRN SFINDBUFF [START AGAIN
3HRQ ...[
3J?B ...[
3JR2 ...SFREEFRRB [GET RID OF FRRB IF MAGREAD MACRO
3K=L ... JBC (7),FX2,READ [J IF MAGREAD
4WJG ... MFREEW FILE,FRRB
4WL4 ... EXIT 7 0
4WML ...[
4WP8 ...[
4WQQ #
4X=B ...[ FTM MACRO ENTRY
4XQ2 ZFTM
4Y9L [
4YJ3 ... STOZ AWORK2(2) [CLEAR SWITCH WORD
4YWD ... BS 2,SKIP [SET FTM MACRO ENTRY MARKER
4^8W BRN READASWELL
4^NG [
5286 ZMAGSTEP [ENTRY FROM MAGSTEP MACRO
52MQ [
52^6 ... STOZ AWORK2(2) [CLEAR SWITCH WORD
53=G ... BS 2,STEP [SET MAGSTEP MACRO ENTRY MARKER
53HW ... LDX 0 ACOMMUNE8(2) [OBJECT PROGRAM ADDRESS
53T= ... STO 0 AWORK4(2)
546L BRN READASWELL
54L= [
555W ZMAGREAD [ENTRY FROM MAGREAD MACRO
55KG [
562G ... STOZ AWORK2(2) [CLEAR SWITCH WORD
56CG ... BS 2,READ [SET MAGREAD MACRO ENTRY MARKER
56SG ... STOZ AWORK4(2) [AMOUNT OF DATA ALREADY MOVED TO FRRB
579G ... SETUPCOR ACOMMUNE9(2),3,FILE,FRRB [BUFFER FOR MAGREAD
57LG ...[
583L READASWELL
58H= ...[
592W ... LDX 0 ACOMMUNE9(2)
59GG STO 0 AWORK1(2)
5=26 ... TRACEIF K6MATALO,99,299,AWORK2(2),MTMACRO [B0=STEP;B1=FTM;B2=READ
5=FQ ...[
5?YL RESTMERJ
5#D= ...[
5#XW ... CALL 7 SFINDINDX [X1->FINDEX
5*CG ... TRACEIF K6MATALO,99,299,FREADWORD(3),MTPOSN
5*X6 ... LDEX 0 FREADWORD(3) [WORD POINTER IN FINDEX
5BWB ADX 1 0
5CB2 ... LDN 7 0 [ZERO POINTER INCREMENT 1ST TIME
5CTL ...[
5J== SFTMERGE
5JPW ...[
5K9G ... ADX 1 7 [INCREMENT POINTER TO INDEX BLOCK
5QKB LDX 4 A1+1(1) [PICK UP NEXT WORD IN INDEX
5R52 BZE 4 XLASTREC [J.IF AT THE END OF A BLOCKLET
5RG2 ... BNG 4 NOBULK [J UNLESS BULK RECORD
5RX2 ... LDN 7 AMTDATA
5S#2 ... ADS 7 FREADWORD(3) [INCREMENT WORD POINTER
5SP2 ... JBS SFTMERGE,2,SKIP [J TO TRY NEXT RECORD IF FTM
5T62 ...[ MAGREAD & MAGSTEP ONLY FROM HERE: TRANSFER FROM BULK FILE
5TH6 SBX 4 AWORK1(2)
5W2Q BZE 4 RIGHTLEN [COUNT=RECORD LENGTH
5WGB ... BNG 4 SHORTBLOCK [J IF COUNT>RECORD LENGTH
5X22 ... BS 2,MAGLONG [SET LONG BLOCK MARKER
5XFL ... BRN RIGHTLEN
5X^= ...[
5YDW SHORTBLOCK
5YYG ADS 4 AWORK1(2) [USE RECORD LENGTH AS COUNT
5^D6 ... JBS RIGHTLEN,2,STEP [J IF MAGSTEP
62CB MHUNTW 3,FILE,FRRB
62X2 ALTLEN 3,AWORK1(2) [SHORTEN BLOCK
63BL ... CALL 7 SFINDINDX [RECOVER POINTER TO INDEX RECORD
63W= ... LDEX 0 FREADWORD(3)
64*W ... SBN 0 AMTDATA
65SQ ADX 1 0
66#B ...[
66S2 RIGHTLEN
678G ...[
67K2 ...[ REGION A B C D X
67^G ...[ TRANSFER *** **** *** OR *
68B2 ...[ BLOCK BOUNDARY ^ ^ ^ ^ ^ ^
68QG ...[
6972 ... LDX 0 AMTDATA+A1(1) [BULK FILE ADDRESS OF NEXT RECORD
69HG ... SBX 0 A1+1(1) [ -LENGTH OF THIS RECORD=
69Y2 ... STO 0 AWORK3(2) [ CURRENT BULK FILE ADDRESS (S)
6=#G ... ADX 0 AWORK1(2) [ + TRANSFER LENGTH=S+A+B+C OR S+D
6=P2 ... ANDN 0 #777 [GIVES C OR D+X
6?5G ... LDX 3 AWORK1(2) [TRANSFER LENGTH (A+B+C) OR D
6?G2 ... STO 0 AWORK1(2) [B15-23=C OR D+X (B0-14=0)
6?WG ... SBX 0 3 [C-(A+B+C)=-A-B OR D+X-D=-X
6#?2 ... NGX 0 0 [GIVES B+A OR -X
6#MG BNG 0 TYPED [ THE PRESENCE OF X DENOTES TYPE D
6*76 ... SLL 0 9 [MOVE B+A TO B0-14
6*LQ TYPED
6B6B ... ADS 0 AWORK1(2) [HENCE B+A+C OR D IN AWORK1
6BL2 ... TRACEIF K6MATALO,199,299,AWORK1(2),TYPE BAC
6C5L ... LDX 3 AWORK1(2)
6CK= ... SRL 3 9
6D4W ... ANDN 3 #777 [PICK UP A
6DJG ... BZE 3 QNOTA [J IF NO TYPE A TRANSFER
6F46 ... CALL 7 SFINDBUFF [GET X1->FURB
6FHQ ...[
6G3B ...MOREBL
6GH2 ...[
6H2L ... LDEX 4 AWORK3(2) [B15-23 OF S GIVE START ADDRESS
6HG= ... ADN 4 A1(1) [GET X4->(NEXT) CHUNK OF DATA
6H^W ...[
6JFG ...QUALMOVE [TRANSFER FROM INDEX FILE MERGES HERE
6J^6 ...[
6KDQ ... JBS MAGSTEPA,2,STEP [J IF MAGSTEP
6LXL MHUNTW 1,FILE,FRRB
6M=3 ... LDN 5 A1(1) [GET ADDRESS OF A1 OF FRRB
6MJD ... ADX 5 AWORK4(2) [JUMP OVER DATA ALREADY INSERTED
6MWT ... MOVE 4 0(3) [MOVE IN THIS CHUNK
6N9= ... BRN QNOTAX [MERGE WITH MAGSTEP
6NHM ...[
6NW6 MAGSTEPA
6P*Q ... LDX 5 AWORK4(2) [OBJECT PROGRAM ADDRESS
6PTB ... FPCACA 1,2 [GET X1->APET
6Q*2 ...#SKI G4 [USE INMOVE IN G4 BECAUSE START
6QSL ... INMOVE 1,5,4,3 [ADDRESS NOT IN 1ST K OF CHECKED AREA
6R#= ...#SKI G3
6RRW ... FINMOVE 1,5,4,3 [MOVE DATA INTO PROGRAM AREA
6S?G ...[
6SR6 ...QNOTAX [UPDATE POINTERS WITH LENGTH OF DATA MOVED
6T=Q ...[
6TQB ... ADS 3 AWORK3(2) [UPDATE S
6W=2 ... ADS 3 AWORK4(2) [UPDATE PROGRAM OR FRRB ADDRESS
6WPL ...[
6X9= ...QNOTA [CHECK FOR MORE DATA
6XNW ...[
6Y8G ... LDCH 7 AWORK1(2) [PICK UP B (B0-5)
745G BZE 7 QNOTB [J.IF NO TYPE B TRANSFER
74K6 ... SBN 7 1 [DECREMENT B
754Q ... DCH 7 AWORK1(2) [ & RESTORE
75JB ... CALL 7 SFINDBUFF [GET X1->FURB
7642 ... LDN 3 GSBS [SET TRANSFER LENGTH=WHOLE BLOCK
76HL ... BRN MOREBL [MOVE DATA
773= ...[
7LM= QNOTB
7M6W ... LDEX 3 AWORK1(2) [PICK UP C OR D (B15-23)
7MLG ... BZE 3 QNOTC [J IF NO TYPE C OR D TRANSFER
7N66 ... ERS 3 AWORK1(2) [CLEAR C OR D
7NKQ ... CALL 7 SFINDBUFF [GET X1->FURB
7P5B ... BRN MOREBL
7PK2 ...[
7Q4L ...XLASTREC [END OF INDEX BLOCKLET
7QJ= ... TOPFCA2 3
8992 LDX 0 FREADWORD(3)
89NL ... ADX 0 BIT11 [INCREMENT BLOCKLET POINTER
8=8= ... ANDX 0 HALFTOP [ & ZEROIZE WORD POINTER
8=MW ... STO 0 FREADWORD(3) [RESET
8#6Q BRN RESTMERJ
8#F7 ...[
8#RJ ...NOBULK [ALL MACROS FROM HERE
8*62 LDX 3 FX1
8*KL BXE 4 TEND(3),SEOF [J IF EOF REACHED
8G2= BXE 4 TMARK(3),SMARK [J IF TAPEMARK
8GFW ...[ MUST BE QUAL OR HDDR
8G^G ... LDN 7 AMTQUAL
8HF6 ... TOPFCA2 3
8HYQ ... ADS 7 FREADWORD(3) [INCREMENT WORD POINTER
8JDB ... JBS SFTMERGE,2,SKIP [J IF FTM
8JY2 ... LDN 4 A1+2(1) [ADDRESS OF QUALIFIER DATA
8KCL ... LDN 3 AMTSENT [LENGTH OF DATA
8KX= ... BXL 3 AWORK1(2),NOTLONG
8LBW ... BXE 3 AWORK1(2),NOTLONG [J IF BUFFER>=DATA LENGTH
8LWG ... BS 2,MAGLONG [SET LONG BLOCK MARKER
8MB6 ... LDX 3 AWORK1(2) [CUT TRANSFER LENGTH TO BUFFER SIZE
8MTQ ...NOTLONG
8N*B ... STOZ AWORK1(2) [SET A,B & C ZERO
8NT2 ... BRN QUALMOVE [MOVE DATA TO PROGRAM OR FRRB
8P#L ...[
8PS= ...QNOTC [TRANSFER COMPLETE
8Q?W ...[
8QRG ... JBC NORMALEXIT,2,MAGLONG[J UNLESS LONG BLOCK
95H= UPPLUS 2 [LONG BLOCK
95R4 ...[
962W NORMALEXIT
96GG UPPLUS 3
96Q# ...[
9726 SEOF
98NS ... CALL 7 SFREEFRRB
98YL UP [END OF FILE
99=2 ...[
99HB ...SMARK [TAPEMARK FOUND
99SQ ...[
9=66 ... TOPFCA2 3
9=CG LDN 0 AMTMARK
9=X6 ADS 0 FREADWORD(3) [UPDATE THE POINTERS
9?6Y ... CALL 7 SFREEFRRB
9?BQ UPPLUS 1 [TAPE MARK
9?LJ ...[
9?WB [
9#B2 MENDAREA AOLPGAP,K99MATALO
9#TL #END
^^^^ ...74137221000300000000