{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: MTCODE864)}}
====== MTCODE864 ======
(George Source)
**Macros used:** [[george:macro:ALTLENGD|ALTLENGD]], [[george:macro:BACKWAIT|BACKWAIT]], [[george:macro:BFCBX|BFCBX]], [[george:macro:BLAM|BLAM]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHAIN|CHAIN]], [[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:FREEBAX|FREEBAX]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GETBAX|GETBAX]], [[george:macro:GETCORE|GETCORE]], [[george:macro:HUNTW|HUNTW]], [[george:macro:INMOVE|INMOVE]], [[george:macro:MBS|MBS]], [[george:macro:MEND|MEND]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:OUTMOVE|OUTMOVE]], [[george:macro:PSTAC|PSTAC]], [[george:macro:READ|READ]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETNCORE|SETNCORE]], [[george:macro:SETREP|SETREP]], [[george:macro:SETREP2|SETREP2]], [[george:macro:SUBCUBS|SUBCUBS]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TOPFCA2|TOPFCA2]], [[george:macro:TOPFCAB2|TOPFCAB2]], [[george:macro:TOPFCB2|TOPFCB2]], [[george:macro:TRACEIF|TRACEIF]], [[george:macro:UP|UP]], [[george:macro:VFREEW|VFREEW]]
22FL ... SEG MTCODE,8,FILE,OLP
22^= ... SEGENTRY K1MTCODE,Z1MTCODE [ROUTINE TO EXTEND BULK FILE
23DW ... [ BY [X3] BLOCKS
23YG ... SEGENTRY K2MTCODE,Z2MTCODE [ROUTINE TO CONTRACT INDEX FILE
24D6 ... SEGENTRY K4MTCODE,Z4MTCODE [ROUTINE TO EXTEND INDEX FILE
24XQ ... SEGENTRY K5MTCODE,ZTRANSTYPE [ROUTINE TO TRANSFER BULK
25CB ... [ DATA TO PROGRAM
25X2 ... SEGENTRY K7MTCODE,ZGETBUFF [ROUTINE TO GET A FURB
26BL ...[
26W= ...[ THIS SEGMENT CONTAINS ROUTINES TO PERFORM VARIOUS FUNCTIONS FOR
27*W ...[ MTSTART,MTOBJ AND MATALO.
27TG ...
28*6 ...[ IT IS ASSUMED THAT COMMUNAL WRITING IS FORBIDDEN.
28SQ ...[
29#B ...[ FOR FORMAT OF FILESTORE MAGNETIC TAPE FILES SEE PRM 5.5.3.2
29S2 ...[
2=?L ...
2=R= ...[
2?=W ...MEND 4HEND
2?QG ...ZFEXTRA
2#=6 ...#HAL FILE+FEXTRA,0
2#PQ ...[
2*9B ... FILETRAN [SUBROUTINES FOR TRANSFER MACROS
2*P2 ...[
2B8L ...MOVEIN [MOVE DATA INTO OBJECT PROGRAM
2BN= ...#SKI G3
2C7W ... FINMOVE 3,2,1,4
2CMG ...#SKI G4 [FINMOVE NO GOOD IN G4:START ADDRESS
2D76 ... INMOVE 3,2,1,4 [ NOT IN 1ST K OF CHECKED AREA
2DLQ ... LDX 2 FX2
2F6B ... EXIT 6 0
2FL2 ...[
2G5L ...MOVEOUT [MOVE DATA OUT OF OBJECT PROGRAM
2GK= ...#SKI G3
2H4W ... FOUTMOVE 3,1,2,4
2HJG ...#SKI G4 [SAME PROBLEM IN G4 AS FINMOVE
2J46 ... OUTMOVE 3,1,2,4
2JHQ ... LDX 2 FX2
2K3B ... EXIT 6 0
2KH2 ...[
2L2L ...[
2LG= ...[ ROUTINE TO INCREASE FBLMOD BY [X3], GETTING NEW BLOCKS IF
2LQ4 ...[ NECESSARY. NOTE THAT FBLMOD IS NOT ACTUALLY INCREASED BECAUSE
2L^W ...[ IT WOULD LEAVE THE INDEX APPARENTLY CORRUPT: THE CALLING
2M9N ...[ ROUTINE MUST DO THIS ITSELF AT AN APPROPRIATE TIME
2MFG ...[ OUTPUT FILE FULL (EXCEEDING MAX FILE SIZE) AND END-OF-TAPE (WITHIN
2M^6 ...[ 4K OF MAX FILE SIZE) CONDITIONS CHECKED FOR.
2NDQ ...[
2NYB ...Z1MTCODE
2PD2 ...[
2PXL ... TRACEIF K6MTCODE,199,299,3,XTNDBULK
2QC= ... LDX 7 1 [X7-FX1=0 TO INDICATE ENTRY BY DOWN
2QWW ... TOPFCB2 2
2RBG ...XTNDBULK [ENTRY FROM ROUTINE TO EXTEND INDEX
2RW6 ... SBX 7 FX1 [ (LINK X7)
2S*Q ... LDX 6 3
2STB ... ADX 3 FBLMOD(2)
2T*2 ... SBN 3 FBLKS-A1+1 [GIVING REQD FILE SIZE -1
2TSL ... BXGE 3 FSIZE(2),OUTFULL [J IF WOULD EXCEED MAX FILE SIZE
2W#= ... INCRECUB ANSWER,,6 [INCR CUBS - X6=AMOUNT
2WRW ... TESTREP2 REFUSED,REFUSED [J IF BS LIMIT EXCEEDED
2X?G ... TOPFCB2 2
2XR6 ...[
2Y=Q ... SEGENTRY K77MTCODE [TO MEND E.O.T. POSITION (FOR OPCS)
2YQB ...[
2^=2 ... LDN 0 4096/GSBS(3)
2^PL ... BXL 0 FSIZE(2),NOTEOT [J IF NOT WITHIN 4K OF MAX FILE SIZE
329= ... LDCT 0 #20
32NW ... SMO FX2
338G ... ORS 0 ACA2 [SET E.O.T. BIT 4
33N6 ...NOTEOT
347Q ... LDN 0 FBLKS-A1(3)
34MB ... BXL 0 FUSEBL(2),NOMOREBLOX [J IF ENUFF SPARE BLOX
3572 ... ADN 3 10 [TRY TO GET REQD NO. OF BLOX +10
35LL ... BXL 3 FSIZE(2),NOTMAX
366= ... LDX 3 FSIZE(2) [TOO MUCH - GET AS MUCH AS POSS
36KW ... SBN 3 1
375G ...NOTMAX
37K6 ... ADN 3 FBLKS-A1
384Q ... LDX 5 FUSEBL(2)
38JB ... BXL 3 ALOGLEN(2),NOALTLEN [J IF ROOM IN FCB FOR NEW BLOCKS
3942 ... LDX 4 2
39HL ... ALTLENGD 4,1(3),REFINDFCB [LENGTHEN FCB
3=3= ...NOALTLEN
3=GW ... ADN 3 3 [GIVING NEW FCB SIZE +2
3?2G ... SBX 3 5 [NOW = NO. OF NEW BLOX +2
3?G6 ... SETUPCOR 3,1,BSTB,EMPTYB
3?^Q ... STO 3 A1(1) [RECORD HEADER FOR EMPTYB
3#FB ...NEWBLOX
3#^2 ... TOPFCB2 2
3*DL ... LDX 4 BSPRE(2)
3*Y= ... STO 4 A1+1(1) [RESIDENCE
3BCW ... GETBAX [GET NEW BLOX
3BXG ... TOPFCB2 2
3CC6 ... BXE 4 BSPRE(2),NCOPIED [J IF RESIDENCE NOT CHANGED
3CWQ ... FREEBAX [FREE NEW BLOX ON OLD RESIDENCE
3DBB ... MHUNTW 1,BSTB,EMPTYB
3DW2 ... BRN NEWBLOX [J TO GET BLOX ON NEW RESIDENCE
3F*L ...
3FT= ...REFINDFCB
3G#W ... TOPFCB2 2 [RE-LOCATE FCB FOR ALTLENG
3GSG ... EXIT 1 0
3H#6 ...
3HRQ ...NCOPIED
3J?B ... MHUNTW 1,BSTB,FULLB
3JR2 ... LDN 4 A1+2(1) [-> NEW BLK NOS.
3K=L ... ADN 5 A1(2) [-> END OF BLK NOS. IN FCB
3KQ= ... SBN 3 2
3L9W ... MOVE 4 0(3) [BUNG IN NEW BLOX
3LPG ... ADS 3 FUSEBL(2) [UPDATE NO. OF BLOX THE FILE OWNS
3M96 ... FREECORE 1 [FREE FULLB
3MNQ ... TOPFCB2 2
3N8B ...NOMOREBLOX
3NN2 ... MBS 2,BFALTB,BFALTR
3P7L ... BZE 7 XBUP [JIF NOT EXTENDING INDEX
3PM= ... ADX 7 FX1
3Q6W ... EXIT 7 0
3QLG ...XBUP
3RKQ ... SETREP OK
3S5B ... UP
3SK2 ...
3T4L ...OUTFULL
3TJ= ... SETREP FILEFULL
3W3W ...REFUSED [BS LIMIT EXCEEDED
3WHG ... UP
3X36 ...[
3XGQ ...[
3Y2B ...[
3YG2 ...[ ROUTINE TO CONTRACT FILE BY MOVING BULK BLOCKS "DOWN" AND
3Y^L ...[ EXPECTS FREADWORD->POSITION @ WHICH FILE IS TO BE
3^F= ...[ TRUNCATED AND [AWORK2]=CORRESPONDING POSITION IN BULK FILE.
3^YW ...[
42DG ...Z2MTCODE
42Y6 ...[
43CQ ... TOPFCA2 3
43XB ... LDX 4 FREADWORD(3)
44C2 ... TRACEIF K6MTCODE,199,299,4,CONTRACT
44WL ... SRL 4 12 [GET NO. OF INDEX BLKLETS(+FBLKS*BLN)
45B= ... SRL 4 BLS [CONVERT TO BLOCKS
45TW ... SBN 4 A1-1 [CURRENT INDEX BLK +1 (+FBLKS-A1)
46*G ... LDX 5 AWORK2(2) [CURRENT BULK FILE WORD ADDRESS
46T6 ... ADN 5 GSBS-1 [ROUND UP & CONVERT TO BLOCKS
47#Q ... SRL 5 GSBSLOG [NO. OF BULK BLOX STILL REQD
47SB ... PSTAC 3,3 [X3->FSTACK
48#2 ... BFCBX 3,3 [X3->FCB
48RL ... LDX 7 4
49?= ... ADX 7 5 [TOTAL NO. OF BLOX = INDEX + BULK
49QW ... SBX 7 FBLMOD(3) [ - ORIGINAL NUMBER
4==G ... BPZ 7 NOREDCUBS [J IF NO CHANGE
4=Q6 ... NGX 7 7 [NUMBER OF BLOCKS TO BE FREED
4?9Q ... SUBCUBS ,7,JOB,DEPTH [REDUCE "CURRENT USED B.S."
4?PB ... TOPFCB2 3
4#92 ... SBS 7 FBLMOD(3) [FBLMOD = NO. OF INDEX + BULK BLOX
4#NL ...NOREDCUBS
4*8= ... MBS 3,BFALTB,BFALTR
4*MW ... LDX 0 BULKMOD(3) [ORIGINAL SIZE OF INDEX
4B7G ... SBN 4 FBLKS-A1 [NEW SIZE OF ONDEX
4BM6 ... STO 4 BULKMOD(3) [BULKMOD = END OF INDEX BLOX
4C6Q ... SBX 4 0
4CLB ... BPZ 4 NOFREEINDX [JIF NO FREE INDEX BLOX
4D62 ... BZE 5 NOBULK [JIF NO BULK BLOX TO MOVE "DOWN"
4DKL ... NGX 4 4 [NO. OF FREE INDEX BLOX
4F5= ... ADN 0 FBLKS(3) [-> BULK BLOX
4FJW ... LDX 1 0
4G4G ...[
4GJ6 ...MOVEDOWN [MOVE BULK BLOCKS DOWN ONE AT A TIME & REPLACE FREED
4H3Q ...[ INDEX BLOCKS IN VACATED LOCATION AT END OF BULK BLOCKS
4HHB ... SBN 1 1 [->LAST INDEX BLOCK
4J32 ... LDX 7 0(1) [KEEP A FREE INDEX BLK
4JGL ... SMO 5
4K2= ... MOVE 0 0 [MOVE BULK BLOX "DOWN"
4KFW ... SMO 5
4K^G ... STO 7 0(1) [AND PUT INDEX BLK ON END OF BULK
4LF6 ... SBN 0 1 [ BLOCKS
4LYQ ... BCT 4 MOVEDOWN [LOOP FOR FURTHER FREE INDEX BLOX
4MDB ...NOBULK [INDEX BLOCKS ALREADY @ END OF FBLMOD
4MY2 ...NOFREEINDX
4NCL ... LDX 1 FPTR(3) [X1->FSTACK
4NX= ...[
4PBW ...ZWRIT [NOW GET RID OF UNWANTED FUWB(OTHER TYPES DON'T MATTER)
4PWG ...[
4QB6 ... LDX 1 FPTR(1)
4QTQ ... BXE 1 CXFI,ZUP [J IF END OF FILE CHAIN
4R*B ... LDX 0 ATYPE(1)
4RT2 ... SMO FX1
4S#L ... BXE 0 ZFEXTRA,ZUP [J IF END OF WORKFILE RTNG
4SS= ... BXE 0 FFSFCB,ZUP
4T?W ... BXU 0 FFSFUWB,ZWRIT
4TRG ... LDX 2 FBLMOD(3) [CAN FREE WRITE BLOX IF NO LONGER
4W?6 ... SBN 2 FBLKS-A1 [ WITHIN FILE
4WQQ ... BZE 2 ZFREE [FILE EMPTY - FREE ALL BLOX
4X=B ... LDX 0 BACK2(1)
4XQ2 ...ZLOOP BXE 0 FBLKS(3),ZUP [JIF STILL WITHIN FILE
4Y9L ... BUX 3 £
4YP= ... BCT 2 ZLOOP
4^8W ...ZFREE FREECORE 1
4^NG ...ZUP
5286 ... UP
52MQ ...[
537B ...[
53M2 ...ZBLAM [CONVERT BLOCK NO. IN BACK2 TO FREADBLOCK-TYPE POINTER
546L ...[ EXPECTS X3->BLOCK; LINK X0: LEAVES X1=POINTER; X2->FCB
54L= ...[ X3-X7 UNCHANGED
555W ... STO 0 GEN0 [SAVE LINK
55KG ... BLAM ,3 [DEPTH ZERO(%A NULL)
5656 ... BRN (GEN0) [EXIT
56JQ ...[
574B ...[
57J2 ...[ ZFINDBUFF SUBROUTINE
583L ...[ ON ENTRY X2=FX2 X5=REC SA X6=LINK
58H= ...[ ON EXIT THE USAGE BLOCK GIVEN FOR THE WORD POINTER IN X5 WILL
592W ...[ BE CHAINED IN THE FILE CHAIN
59GG ...[ X1-> USAGE BLOCK X2=FX2 X0,X3,X4,X5 DESTROYED
5=26 ...[ X7 PRESERVED UNCHANGED
5=FQ ...[ AN UNUSED USAGE BLOCK (IF ANY) WILL BE DISPOSED OF
5=^B ...[
5?F2 ...[ IF THE BLOCK CANNOT BE FOUND & X7 IS ZERO (I.E. WRITING)
5?YL ...[ AND LS 9 BITS OF X5=0 (I.E. TRANSFER BRGINS ON BLOCK
5#D= ...[ BOUNDARY), IT WILL BE SET UP BY A GETCORE
5#XW ...[
5*CG ...ZFINDBUFF
5*X6 ... SBX 6 FX1
5BBQ ... STO 6 AWORK3(2)
5BWB ... TOPFCAB2 3,1 [X3->FCA; X1->FCB
5CB2 ... LDN 6 0
5CTL ... BNZ 7 NOTWRITING [J IF READ TRANSFER
5D*= ... LDEX 0 5 [GET B15-23 OF BULK FILE ADDRESS
5DSW ... BNZ 0 NOTWRITING [J UNLESS WRITING FROM START OF BLK
5F#G ... LDX 6 GSIGN [SET "DON'T BACKREAD" MARKER
5FS6 ...NOTWRITING
5G?Q ... SRL 5 GSBSLOG [CONVERT BULK FILE ADDRESS TO BLOCKS
5GRB ... ADX 5 BULKMOD(1) [MAKE IT RELATIVE TO BOF
5H?2 ... ADN 5 FBLKS [MAKE IT RELATIVE TO A0 OF FCB
5HQL ... ORX 6 5 [AS STANDARD FREADBLOCK POINTER
5J== ... STO 6 FREADBLOCK(3) [SAVE IT
5JPW ...ZRESTART [(RE)CALCULATE BLOCK NUMBER (AFTER COOR DURING
5K9G ...[ WHICH RESIDENCE MAY HAVE CHANGED DUE TO COPYFILE).
5KP6 ... SMO 6
5L8Q ... LDX 5 0(1) [ BLK NO
5LNB ... LDN 6 0 [BLOCK NOT FOUND
5M82 ... LDX 3 FPTR(1) [X3->FSTACK
5MML ...ZMOREBL
5N7= ... LDX 1 FX1
5NLW ... LDX 2 FX2
5P6G ... LDX 3 FPTR(3) [ NEXT BLK
5PL6 ... BXE 3 CXFI,NOTFOUND [J IF END OF FILE CHAIN
5Q5Q ... LDX 0 ATYPE(3)
5QKB ... BXE 0 FFSFCB,NOTFOUND [J IF NEXT FCB
5R52 ... BXE 0 ZFEXTRA(1),NOTFOUND [J IF END OF !RING
5RJL ... BXE 0 FFSFURB,READ
5S4= ... BXU 0 FFSFUWB,ZMOREBL
5SHW ...[
5T3G ...[ FUWB FOUND SO CAN'T BE ANY MORE BUFFERS
5TH6 ...[
5W2Q ... BXE 5 BACK2(3),ZOUT [J IF RIGHT BLOCK FOUND
5WGB ... CHAIN 3,2 [MOVE TO ACTIVITY CHAIN
5X22 ... CALL 0 ZBLAM [GET STANDARD FREADBLOCK-TYPE POINTER
5XFL ... LDX 4 1
5X^= ... FILEAUTW ,FAIL+FREE,,4,,,NOCHECK [WRITE BLOCK AWAY AUTONOMOUSLY
5YDW ... BRN NOTFOUND
5YYG ...[
5^D6 ...READ
5^XQ ... BXU 5 BACK2(3),WRONGBLOCK [J UNLESS RIGHT BLOC
62CB ... BNZ 6 (GEOERR) [SHOULDN'T FIND SAME BLOCK TWICE
62X2 ... LDX 6 3 [KEEP ADDRESS OF BLOCK
63BL ... BRN ZMOREBL [LOOK FOR MORE UNUSED BLOCKS
63W= ...[
64*W ...WRONGBLOCK
64TG ...[
65*6 ...[ FREE THE BLOCK IF NO ONE ELSE IS USING IT.
65SQ ...[
66#B ... TOPFCA2 2
66S2 ... PSTAC 2,2 [X2->FSTACK
67?L ... LDEX 4 ARINGNO(2) [ NO 0F ELEMENTS
67R= ... SBN 4 1
68=W ... BZE 4 ZREADFREE [ ONE 0WNER
68QG ... ADN 4 1
69=6 ... CALL 0 ZBLAM [GET FREADBLOCK-TYPE POINTER
69PQ ... LDX 2 FPTR(2) [X2->FSTACK
6=9B ...ZFELL
6=P2 ... BXE 1 A1+FREADBLOCK(2),ZMOREBL [J IF IN USE
6?8L ... ADN 2 FELLEN [ NEXT ELEMENT
6?N= ... BCT 4 ZFELL
6#7W ...ZREADFREE
6#MG ... LDX 3 BPTR(3) [KEEP ADDRESS OF PREVIOUS BLOCK
6*76 ... FREECORE FPTR(3) [FREE UNUSED BLOCK
6*LQ ... BRN ZMOREBL
6B6B ...[
6BL2 ...NOTFOUND
6C5L ... LDX 3 6 [ADDRESS OF FOUND BLOCK
6CK= ... BNZ 3 ZOUT [J IF BLOCK LOCATED
6D4W ... HUNTW 3,BSTB,BREAD
6DJG ... BPZ 3 ZNAMEFURB [J IF FILEREAD ALREADY DONE
6F46 ... SMO FILERING(2)
6FHQ ... LDX 6 FREADBLOCK
6G3B ... BPZ 6 ZFREAD [J UNLESS "DON'T BACKREAD" MARKER SET
6GH2 ... GETCORE BSBS,1 [BLOCK NOT YET USED
6H2L ... FINDCORE 3
6HG= ... TOPFCB2 1
6H^W ... LDX 0 BSPRE(1) [RESIDENCE NO. MAY HAVE CHANGED
6JFG ... STO 0 BACK1(3) [DURING GETCORE DUE TO COPYFILE
6J^6 ... SMO 6
6KDQ ... LDX 0 0(1) [RECOVER BLOCK NO. USING FREADBLOCK
6KYB ... STO 0 BACK2(3) [ POINTER
6LD2 ... BRN ZNAMEFURB [REJOIN MAIN PATH
6LXL ...[
6MC= ...ZFREAD
6MWW ... FILEREAD ,FAIL,,6,,,NOCHECK
6NBG ...
6NW6 ...[ NOW CHECK NO-ONE ELSE HAS SET UP THE SAME BLOCK
6P*Q ...
6PTB ... TOPFCB2 1
6Q*2 ... BRN ZRESTART [START AGAIN
6QSL ...[
6R#= ...ZNAMEFURB
6RRW ... NAME 3,FILE,FURB
6S?G ... TOPFCA2 2
6SR6 ... PSTAC 2,2 [X2->FSTACK
6T=Q ... CHAIN 3,2 [PUT IN FILE CHAIN
6TQB ...ZOUT
6W=2 ... VFREEW BSTB,BREAD [UNUSED BREAD:- SOMEONE ELSE READ IT
6WPL ... LDX 2 FX2
6X9= ... LDX 1 3 [PUT BLOCK ADDRESS IN X1 AS WELL
6XNW ... LDX 6 AWORK3(2)
6Y8G ... ADX 6 FX1
6YN6 ... EXIT 6 0
6^7Q ...[
6^MB ...[
7272 ...[ ENTRY TO GET A FURB
72LL ...[
736= ...ZGETBUFF
73KW ... LDX 5 AWORK3(2) [BULK FILE ADDRESS IN WORDS
745G ... LDN 7 1 [MARKER TO INDICATE READING
74K6 ... CALL 6 ZFINDBUFF [ENSURE FURB IN FILE CHAIN
754Q ... UP
75JB ...[
7642 ...[
76HL ...[ ROUTINE TO SET UP A NEW INDEX BLOCKLET. A BLOCK IS TAKEN FROM THE
773= ...[ END OF THE BULK FILE IF THE INDEX REQUIRES EXTENSION.
77GW ...[
782G ...[
78G6 ...Z4MTCODE
78^Q ...[
79FB ... TOPFCA2 2
79^2 ... LDX 0 FREADWORD(2)
7=DL ... TRACEIF K6MTCODE,199,299,0,XTNDINDX
7=Y= ... SRL 0 12
7?CW ... SBN 0 FBLKS*BLN-1
7?XG ... SRL 0 BLS [GIVING BLK HOLDING NEXT INDEX BLT
7#C6 ... PSTAC 2,2
7#WQ ... BFCBX 2,2
7*BB ... BXL 0 BULKMOD(2),NONEWBLK [JIF NO NEED TO EXTEND INDEX
7*W2 ... TRACEIF K6MTCODE,199,299,BULKMOD(2),NEWIXBLK
7B*L ... LDN 3 1
7BT= ... CALL 7 XTNDBULK [CHECK FOR FILE FULL & E.O.T. AND
7C#W ... LDX 5 FBLMOD(2) [ GET NEW BLK IF NECESSARY
7CSG ... SBN 5 FBLKS-A1
7D#6 ... SBX 5 BULKMOD(2)
7DRQ ... BZE 5 NBULK [JIF NO BULK BLOX IN FILE
7F?B ... LDX 1 2
7FR2 ... ADX 1 FBLMOD(2) [-> TO END OF BULK FILE
7G=L ... LDX 7 A1(1) [PINCH A BLK FROM THE END
7GQ= ...MOVEUP
7H9W ... LDX 0 A1-1(1)
7HPG ... STO 0 A1(1) [MOVE BULK BLOX "UP"
7J96 ... SBN 1 1
7JNQ ... BCT 5 MOVEUP
7K8B ... STO 7 A1(1) [POP IN THE NEW INDEX BLK
7KN2 ...NBULK
7L7L ... ADS 6 FBLMOD(2) [INCREMENT BY 1 : LEFT BY XTNDBULK
7LM= ... ADS 6 BULKMOD(2) [ DITTO
7M6W ...NONEWBLK
7MLG ... SETNCORE GSBS4,3,FILE,FINDEXW
7N66 ... TOPFCA2 1
7NKQ ... LDX 7 FREADWORD(1)
7P5B ... ANDX 7 HALFTOP
7PK2 ... ADX 7 BIT11 [ADD 1 TO BLOCKLET POINTER
7Q4L ... STO 7 FREADWORD(1) [ & ZEROIZE WORD POINTER
7QJ= ... PSTAC 1,1
7R3W ... BFCBX 1,1
7RHG ... LDX 0 BSPRE(1)
7S36 ... STO 0 BACK1(3) [SET UP BACK1 OF NEW BLT
7SGQ ... SRL 7 12
7T2B ... LDX 0 7
7TG2 ... ANDN 0 BLN-1 [ISOLATE BLT WITHIN BLK
7T^L ... SRL 7 BLS
7WF= ... SMO 7
7WYW ... ORX 0 0(1) [ & ADD IN BLK NO.
7XDG ... STO 0 BACK2(3) [GIVING BACK2 OF NEW BLT
7XY6 ... TRACEIF K6MTCODE,199,299,AWORK2(2),NEW A1
7YCQ ... LDX 0 AWORK2(2)
7YXB ... STO 0 A1(3) [1ST WD = LAST USED BULK WD +1
7^C2 ... SMO FX1
7^WL ... LDX 0 MEND
82B= ... STO 0 A1+1(3) [SET 'END '
82TW ... LDX 2 FPTR(1) [X2->FSTACK
83*G ... CHAIN 3,2 [CHAIN NEW FINDEXW IN FRONT OF
83T6 ... SETREP2 OK [ FSTACK
84#Q ... UP
84SB ...[
85#2 ...[
85RL ...[ ZTRANSTYPE SUBROUTINE
86?= ...[
86QW ...[ REGION A B C D X
87=G ...[ TRANSFER *** **** *** OR *
87Q6 ...[ BLOCK BOUNDARY ^ ^ ^ ^ ^ ^
889Q ...[ X5=END ADDRESS OF PERI IN BULK FILE
88PB ...[ X6=LENGTH OF TRANSFER REQUIRED
8992 ...[ ON EXIT ACA4=NEXT OBJECT PROGRAM BUFFER ADDRESS; ACA6-9 DESTROYED
89NL ...[ USAGE ACA6=A OR D TYPE LENGTH
8=8= ...[ ACA7=B TYPE LENGTH
8=MW ...[ ACA8=C TYPE LENGTH
8?7G ...ZTRANSTYPE
8?M6 ... SBX 5 6 [START ADDRESS IN BULK FILE
8#6Q ... STO 5 ACA9(2) [SET UP START ADDRESS IN ACA9
8#LB ... LDEX 4 5 [X4=0 IF STARTING ON BLOCK BOUNDARY
8*62 ... LDN 0 GSBS
8*KL ... SBX 0 4 [X0=A OR D+X
8B5= ... BXL 0 6,ZNOTYPED [J UNLESS TYPE D OR A+B+C WHERE A=C=0
8BJW ... STO 6 ACA6(2) [SET TYPE D COUNT IN ACA6
8C4G ... TRACEIF K6MTCODE,199,299,ACA6(2),TYPE D
8CJ6 ... STOZ ACA7(2) [NO TYPE B
8D3Q ... STOZ ACA8(2) [NO TYPE C
8DHB ... BRN TYPED [TYPE D TRANSFER ONLY
8F32 ...[
8FGL ...ZNOTYPED
8G2= ... STO 0 ACA6(2) [SET TYPE A COUNT IN ACA6
8GFW ... SBS 0 6 [X6=REMAINDER COUNT
8G^G ... LDEX 0 6 [TYPE C COUNT
8HF6 ... STO 0 ACA8(2)
8HYQ ... ERX 0 6 [TYPE B COUNT
8JDB ... STO 0 ACA7(2) [SET TYPE B COUNT IN ACA7
8JY2 ... LDX 0 ACA6(2)
8KCL ... TRACEIF K6MTCODE,199,299,ACA6(2),TYPE A
8KX= ... TRACEIF K6MTCODE,199,299,ACA7(2),TYPE B
8LBW ... TRACEIF K6MTCODE,199,299,ACA8(2),TYPE C
8LWG ... BZE 0 ONOTYPEA
8MB6 ...[
8MTQ ...TYPED [TYPE A OR D TRANSFER
8N*B ...[
8NT2 ... CALL 6 ZFINDBUFF [X1->USAGE BLOCK
8P#L ... LDX 5 ACA9(2) [BULK FILE START ADDRESS
8PS= ... ADX 5 ACA6(2) [NEXT BULK FILE START ADDRESS
8Q?W ... LDX 3 APETADDR(2)
8QRG ... LDX 4 ACA6(2) [TYPE A OR D LENGTH
8R?6 ... BNZ 7 ONORITEA [J IF READING
8RQQ ...[
8S=B ...[ WRITE TYPE A OR D
8SQ2 ...[
8T9L ... NAME 1,FILE,FUWB [ENSURE USAGE BLOCK WRITTEN
8TP= ... LDEX 0 ACA9(2) [START ADDRESS WITHIN USAGE BLOCK
8W8W ... ADN 1 A1
8WNG ... ADX 1 0
8X86 ... LDX 2 1 [X2->START ADDRESS OF DATA AREA IN US
8XMQ ... SMO FX2
8Y7B ... LDX 1 ACA4 [OBJECT PROGRAM BUFFER ADDRESS
8YM2 ... CALL 6 MOVEOUT [MOVE DATA TO OBJECT PROGRAM
8^6L ... BRN OA
8^L= ...[
925W ...ONORITEA [READ TYPE A OR D
92KG ...[
9356 ... LDEX 0 ACA9(2)
93JQ ... ADX 1 0
944B ... ADN 1 A1 [X1->DATA AREA IN USAGE BLOCK
94J2 ... LDX 2 ACA4(2) [X2->START OF OBJECT PROGRAM BUFFER
953L ... CALL 6 MOVEIN [MOVE DATA OUT OF OBJECT PROGRAM
95H= ...[
962W ...OA [UPDATE POINTERS
96GG ...[
9726 ... LDX 0 ACA6(2) [TYPE A OR D LENGTH
97FQ ... ADS 0 ACA4(2) [UPDATE OBJECT PROGRAM BUFFER ADDRESS
97^B ...[
98F2 ...ONOTYPEA
98YL ... LDX 6 ACA7(2)
99D= ... BZE 6 ONOTYPEB [J IF NO TYPE B TRANSFERS
99XW ...[
9=CG ...[ TYPE B TRANSFERS ARE DONE DIRECTLY BETWEEN THE PROGRAM AND BS.
9=X6 ...[ THIS MEANS THAT MULTIPLE READERS MAY FAIL TO SHARE TRANSFERS BUT
9?BQ ...[ TRANSFERS RARELY EXCEED GSBS WORDS AND MULTIPLE READING IS ALSO RARE.
9?WB ...[ THE ADVANTAGE OF DIRECT TRANSFERS IS THAT READS CAN BE AUTONOMOUS
9#B2 ...[ AND THAT WRITES DO NOT FILL UP CORE WITH BWRITE BLOCKS.
9#TL ...[
9**= ... SRL 6 GSBSLOG [CONVERT TYPE B COUNT TO BLOCKS
9*SW ...[
9B#G ...OSTA LDX 4 5 [BULK FILE START ADDRESS
9BS6 ... SRL 4 GSBSLOG [CONVERT TO BLOCKS
9C?Q ... TOPFCB2 1
9CRB ... ADN 4 FBLKS
9D?2 ... ADX 4 BULKMOD(1) [CONVERT TO FREADBLOCK-TYPE POINTER
9DQL ... STO 6 AWORK3(2)
9F== ... LDX 6 ACA4(2) [OBJECT PROGRAM BUFFER ADDRESS
9FPW ... BNZ 7 ONORITEB
9G9G ... LDX 7 APETADDR(2)
9GP6 ... FILEAUTW ,FAIL+BOBJ,,4,EX6,EX7
9H8Q ... LDN 7 0 [RESTORE X7=0 (I.E. WRITING)
9HNB ... BRN OB
9J82 ...[
9JML ...ONORITEB
9K7= ... LDX 7 APETADDR(2) [N.B. X7 NOT = 0 (I.E. READING)
9KLW ... FILEAUTR ,FAIL+BOBJ,,4,EX6,EX7
9L6G ...[
9LL6 ...OB LDX 6 AWORK3(2) [COUNT OF TYPE B TRANSFERS
9M5Q ... LDN 0 GSBS
9MKB ... ADS 0 ACA4(2) [UPDATE OBJECT PROGRAM BUFFER ADDRESS
9N52 ... ADS 0 5 [UPDATE BULK FILE ADDRESS IN X5
9NJL ... BCT 6 OSTA [J IF MORE
9P4= ...[
9PHW ...ONOTYPEB
9Q3G ... LDX 0 ACA8(2)
9QH6 ... BZE 0 ONOTYPEC [J IF NO TYPE C TRANSFER
9R2Q ... CALL 6 ZFINDBUFF [X1->USAGE BLOCK
9RGB ... LDX 3 APETADDR(2)
9S22 ... LDX 4 ACA8(2) [TYPE C LENGTH
9SFL ... BNZ 7 ONORITEC [J IF READING
9S^= ... NAME 1,FILE,FUWB [ENSURE USAGE BLOCK IS WRITTEN
9TDW ... ADN 1 A1
9TYG ... LDX 2 1 [X2->A1 OF USAGE BLOCK
9WD6 ... SMO FX2
9WXQ ... LDX 1 ACA4 [X1->OBJECT PROGRAM BUFFER AREA
9XCB ... CALL 6 MOVEOUT [MOVE DATA TO OBJECT PROGRAM
9XX2 ... BRN OC
9YBL ...[
9YW= ...ONORITEC
9^*W ... ADN 1 A1 [X1->A1 OF USAGE BLOCK
9^TG ... LDX 2 ACA4(2) [X2->OBJECT PROGRAM BUFFER AREA
=2*6 ... CALL 6 MOVEIN [MOVE DATA OUT OF OBJECT PROGRAM
=2SQ ...[
=3#B ...OC
=3S2 ... LDX 0 ACA8(2)
=4?L ... ADS 0 ACA4(2) [UPDATE NEXT PROGRAM BUFFER ADDRESS
=4R= ...ONOTYPEC
=5=W ... LDX 0 ACA7(2)
=5QG ... BZE 0 OUP [J IF NO TYPE B TRANSFERS
=6=6 ... BACKWAIT [WAIT FOR AUTO TRANSFERS TO FINISH
=6PQ ...OUP
=79B ... UP
=7P2 ...[
=88L ... MENDAREA 30,K99MTCODE
=8N= ...#END
^^^^ ...702575260001