{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: GETWORD867)}}
====== GETWORD867 ======
(George Source)
**Macros used:** [[george:macro:BACKREAD|BACKREAD]], [[george:macro:BACKWRITE|BACKWRITE]], [[george:macro:BBS|BBS]], [[george:macro:BBUS|BBUS]], [[george:macro:BXL|BXL]], [[george:macro:CHAIN|CHAIN]], [[george:macro:CHECKB|CHECKB]], [[george:macro:CLEAR|CLEAR]], [[george:macro:DOWN|DOWN]], [[george:macro:ELSE|ELSE]], [[george:macro:ENDPAXES|ENDPAXES]], [[george:macro:FADDRESS|FADDRESS]], [[george:macro:FI|FI]], [[george:macro:FJOCA|FJOCA]], [[george:macro:FPCACA|FPCACA]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:HUNT|HUNT]], [[george:macro:HUNT2|HUNT2]], [[george:macro:HUNTW|HUNTW]], [[george:macro:IF|IF]], [[george:macro:JBC|JBC]], [[george:macro:JBS|JBS]], [[george:macro:JMBAC|JMBAC]], [[george:macro:LDBIT|LDBIT]], [[george:macro:LOADNOW|LOADNOW]], [[george:macro:LOCKC|LOCKC]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:PROGAXES|PROGAXES]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETBIT|SETBIT]], [[george:macro:SETREP|SETREP]], [[george:macro:SETUPCORE|SETUPCORE]], [[george:macro:SWAPOUT|SWAPOUT]], [[george:macro:TBS|TBS]], [[george:macro:TESTLOAD|TESTLOAD]], [[george:macro:THEN|THEN]], [[george:macro:TRACE|TRACE]], [[george:macro:TRYCORE|TRYCORE]], [[george:macro:UNLOCK|UNLOCK]], [[george:macro:UNSETBIT|UNSETBIT]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]], [[george:macro:VFREEW|VFREEW]]
22BG ... SEG GETWORD,,CENT(LOAD OBJ PROG)
22R2 ...[
237G ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982
23J2 ...[
23YG #
24D6 #
24XQ SEGENTRY K1GETWORD,XENT1
25CB SEGENTRY K2GETWORD,XENT2
25X2 SEGENTRY K3GETWORD,XENT3
26BL SEGENTRY K4GETWORD,XENT4
26W= #
27*W # ENTRIES 1 AND 2 ARE FROM THE GETWORD MACRO VIA DOWN WITH
27TG # %C SET TO READ OR WRITE RESPECTIVELY
28*6 # ENTRY 3 IS FROM THE WORDFIN MACRO VIA DOWN
28SQ #
29#B # ENTRY 4 IS FROM THE GETWORDX MACRO VIA DOWN WITH %C SET TO
29S2 # ANY COMBINATION OF CHOBEYP, CHWRITEP, CHREADP, CHNSHARED
2=?L # CHUSED, GWRITE, GOBEY, GREAD, AND GNOMESS.
2=R= #
2?=W # THE ACOMMUNE WORDS ARE USED TO PASS INFORMATION BETWEEN THE
2?QG # GETWORD (AND GETWORDX) MACROS AND THIS ROUTINE AS FOLLOWS:
2#=6 # ON ENTRY:-
2#PQ # [ACOMMUNE1]=%A=WD CONTAINING ADDR OF WD TO BE ACCESSED RELATIVE
2*9B # TO PROGRAM DATUM
2*P2 # [ACOMMUNE2]=%E=WD CONTAINING NO OF WORDS DESIRED TO ACCESS FROM
2B8L # AND INCLUDING THE WD SPECIFIED BY %A
2BN= # ON EXIT:-
2C7W # [ACOMMUNE1]=%B=WD CONTAINING THE GEORGE ADDR OF THE WD SPECIFIED
2CMG # BY %A
2D76 # [ACOMMUNE2]=%D=WD CONTAINING NO OF WORDS WHICH CAN BE ACCESSED
2DLQ # FROM AND INCLUDING THE WD SPECIFIED BY %A
2F6B # %D MAY BE LESS THAN,GREATER THAN,OR EQUAL TO %E.HENCE IT MUST
2FL2 # BE CHECKED BY ALL ROUTINES WHICH SPECIFY %E. (IF %E IS NULL ITS
2G5L # VALUE IS SET TO 1 BY THE GETWORD MACRO.)
2GK= #
2H4W #
2HJG # IN ADDITION, FOR GETWORDX, THE ACOMMUNE3 WORD IS USED
2J46 # TO PASS THE INFORMATION SPECIFIED IN %C.
2JHQ #
2K3B #
2KH2 # THE WORD EXTPS+1 IN THE COMMAND PROCESSING ACTIVITY IS USED
2L2L # AS FOLLOWS:-
2LG= #
2L^W # B0=1 AREA HAS BEEN WRITTEN TO,I.E. IF THE O/P IS S/O THE
2MFG # AGETWORD BLOCK ASSOCIATED WITH THE AREA MUST BE WRITTEN
2M^6 # AWAY AFTER THE LAST ACCESS
2NDQ # B1=1 A GETWORD WITH A WRITE ACCESS IS BEING OBEYED,I.E. IF
2NYB # THIS INVOLVES GETTING A NEW AGETWORD BLOCK,THAT BLOCK
2PD2 # WILL HAVE TO BE WRITTEN AWAY EVENTUALLY
2PXL #
2QC= # B2=1 NOT FIRST GETWORD
2QWW #
2RBG # B3=1 ADATA/AGETWORD BLOCK CREATED * NECESSARY IF ALL GETWORDS
2RW6 # B4=1 FAILED RESVIOL * IN SEQUENCE FAIL RESVIOL
2S*Q #
2STB # B5=1 NO CORE IMAGE MARKER- WORDFIN OPTIONAL
2T*2 #
2TSL # B6=1 IF GETWORDX BEING OBEYED
2W#= #
2WFD #
2WLL # B7=1 GETWORD BLOCK DERIVED FROM VALID FPB/FREE PAGE
2WRW # B9-23 ADDR REL TO O/P DATUM/BLOCKLET SIZE OF WD REPRESENTED
2X?G # BY A1 OF POSSIBLE AGETWORD BLOCK,I.E. NO OF FIRST
2XR6 # BLOCKLET WITHIN PROGRAM IN THIS AGETWORD BLOCK
2Y=Q #
2YQB # THE FOLLOWING NOTATION IS USED IN THE CALCULATION OF
2^=2 # PARAMETERS FOR O/P BS TFRS
2^PL #
329= # OBJPROG ADDR/SHEETSIZE=QUOTIENT 'Q1' =SHEET NO WITHIN PROGRAM
32NW # +REMAINDER'R1' =ADDR WITHIN SHEET
338G #
33N6 # R1/BLOCKLET SIZE= Q2 =BLOCKLET NO WITHIN SHEET
347Q # + R2 =ADDR WITHIN BLOCKLET
34MB #
3572 #
35LL #
366= #
36KW #
375G #
37K6 # CONSTANTS
384Q #
38JB #
3942 ZBIT2 #10000000
39HL ZBIT3 #4000000
3=3= ZBIT4 #2000000
3=GW ZBIT5 #1000000
3?2G ZNOTBIT5 #76777777
3?G6 ZBIT9 #40000
3?^Q ZBIT10 #20000
3#FB ZBIT11 #10000
3#^2 ZBITS15LS #77777
3*DL MNOTB6 #77377777
3*Y= MB8T23 #00177777
3BCW ZBLKLETSIZE #200 [BLOCKLET SIZE IN WORDS.THIS IS THE
3BXG # [SMALLEST UNIT OF TRANSFER ON EDS/FDS
3CC6 #
3CWQ #
3DBB #
3DW2 # LOCAL DEFINITIONS
3F*L #
3FT= #DEF ASHEETSIZE=BSSS
3G#W #
3GSG #
3H#6 #
3HRQ XENT2 [WRITE G/W
3J?B NGNC 0 1
3JR2 XENT1 [READ G/W
3K=L LDN 7 0 [SET R/W MARKER
3KQ= LDX 0 MNOTB6(1)
3L9W ANDS 0 EXTPS+1(2) [INDICATE GETWORD
3LPG N1
3M96 #SKI K6GETWORD>199-199
3MNQ TRACE ACOMMUNE1(2),GETWORD
3N8B LDX 0 ZNOTBIT5(1)
3NN2 ANDS 0 EXTPS+1(2) [CLEAR NO C/I MARKER
3P7L LDCH 4 ATYPE(2)
3PM= SBN 4 CPAT/64
3Q6W BZE 4 N2 [J IF ISSUED FROM CPA
3QLG GEOERR 1,NOT CPA
3R66 N2 LDX 5 CONTEXT(2)
3RKQ ANDN 5 #1000
3S5B BNZ 5 N21
3SK2 SETREP NOCORE
3T4L STOZ EXTPS+1(2)
3TJ= SETBIT 5,EXTPS+1(2) [SET NO C/I MARKER
3W3W UPPLUS 1
3WHG N21 LDN 5 1
3X36 SBS 5 ACOMMUNE2(2) [%E-1=E
3XGQ LDXC 5 ACOMMUNE1(2)
3Y2B STO 4 AWORK1(2) [SET=1 IF SWAPOUT REQUESTED
3YG2 STO 5 ACOMMUNE1(2)
3Y^L ADX 5 ACOMMUNE2(2) [A+E=HIGHEST ADDR
3^F= FPCACA 3,2 [LOCATE PCA
3^YW TXL 5 ALIMIT(3)
42DG BCS N3 [J IF NOT RESVIOL
43CQ N4B
43XB N4 SETREP RESVIOL
44C2 N4A SETBIT 4,EXTPS+1(2) [IN CASE IMMEDIATE WAORDFIN
44WL UPPLUS 1
4G4G ZBRKIN
4GJ6 UP
4H3Q #
4HHB ZLDERR
4J32 SETREP LOADERR
4JGL UPPLUS 1 [RETURN TO CALLING ROUTINE
4K2= N3 FJOCA 3,2 [LOCATE JOB BLOCK
4KFW TESTLOAD 3,N3A
4K^G LDX 4 EXTPS+1(2)
4LF6 LDX 5 ACOMMUNE1(2)
4LYQ LDX 6 ACOMMUNE2(2)
4MDB LDX 3 ACOMMUNE3(2)
4MY2 LOADNOW ZBRKIN,ZLDERR,0
4NCL STO 4 EXTPS+1(2)
4NX= STO 5 ACOMMUNE1(2)
4PBW STO 6 ACOMMUNE2(2)
4PWG STO 3 ACOMMUNE3(2)
4QB6 FJOCA 3,2
4QTQ N3A
4R*B BBS 11,JMISC(3),N5 [J IF S/O
4RT2 BBUS 12,JMISC(3),N6 [J IF NOT BEING SWAPPED
4S#L SWAPOUT [WAIT FOR S/O
4SS= BRN N5 [NOW S/O
4T?W N6 BBS 2,EXTPS+1(2),N20 [J IF SUBSEQUENT G/W
4TRG SETBIT 2,EXTPS+1(2)
4W?6 PROGAXES 3,N3 [IF CANT ACCESS PROG,WAIT & J TO N3
4WQQ N20 BBUS 10,JMISC(3),N7 [J IF NOT SWAPABLE
54L= LDX 0 AWORK1(2)
555W BZE 0 N61 [J IF SWAPOUT NOT REQUIRED
55KG SWAPIT
5656 ENDPAXES 3 [SIGNAL END OF PROGRAM ACCESS
56JQ SWAPOUT
574B STOZ AWORK1(2) [PROGRAM WILL NOT BE SWAPPED
57J2 UNSETBIT 2,EXTPS+1(2) [OUT IF REALTIME SO RECHECK
583L BRN N3
58H= N61
592W UNSETBIT 10,JMISC(3)
59GG SETBIT 9,JMISC(3) [MAKE NOT SUAPABLE
5=26 N7 FPCACA 3,2 [LOCATE PCA
5=FQ CLEAR 3,0,,3
5=^B LDX 5 ACOMMUNE2(2) [
5?F2 LDX 4 3 [KEEP PCA POIOTER
5?YL ADN 5 1 [LENGTH OF AREA
5#D= LDX 3 ACOMMUNE1(2) [START ADDRESS
5#XW LDX 0 EXTPS+1(2)
5*CG SLL 0 6
5*X6 LDX 6 ACOMMUNE3(2) [PERM IF G/WX
5BBQ BNG 0 XCHECKB [J IF G/WX
5BWB LDN 6 CHREAD [PERM IF READ G/W
5CB2 BZE 7 XCHECKB [J IF READ
5CTL LDN 6 CHREAD+CHWRITE [PERM IF WRITE G/W
5D*= XCHECKB
5DSW CHECKB ACOMMUNE1(2),5,N4B,4,6,N10,,4
5F#G N10
5FS6 FPCACA 1,2 [FIND PCA
5G?Q LDX 5 3 [REMEMBER O/P ADDRESS
5GRB FADDRESS 1,3,HLOCK1,1
5H?2 STO 3 ACOMMUNE1(2) [GEORGE ADDRESS
5JPW HUNT2 1,BSTB,BSCB
5K9G LDX 6 ACORSZ(1)
5KP6 SBX 6 5 [MINUS START ADDR
5L8Q STO 6 ACOMMUNE2(2) [=LENGTH ACCESSIBLE
5Q5Q N11 SETREP OK
5QKB UPPLUS 1
5R52 N16 STO 7 EXTPS+1(2) [CLEAR WRITING BIT
5RCB CALL 7 UPDATFPB [UPDATE FPB IF ONE EXISTS
5RJL CHAIN 3,2 [CHAIN AFTER CPA
5RPS ...#UNS BIWRFL
5RX2 ... JBS N14,2,BRWRITEFAIL [BSTB/BSCB WILL BE INVALID
5S4= BACKWRITE ASWAP,ALOGLEN(3),N18
5SHW BRN N14
5T3G N5 LDX 4 ACOMMUNE1(2) [PROGRAM IS S/O HERE
5TH6 DVS 3 ASHEETSIZE
5W2Q STO 4 AWORK1(2) [Q1(A)
5WGB STO 3 AWORK3(2) [R1(A)
5X22 LDX 6 ACOMMUNE1(2)
5XFL ADX 6 ACOMMUNE2(2)
5X^= STO 6 ACOMMUNE2(2) [A+E=HIGHEST ADDR
5YDW DVS 5 ASHEETSIZE
5YYG STO 5 AWORK4(2) [R1(A+E)
5^D6 STO 6 AWORK2(2) [Q1(A+E)
5^XQ TXU 6 4
62CB BCC N12 [J IF AREA IN ONE SHEET
62X2 LDX 5 ASHEETSIZE
63BL MPA 4 5 [AREA REDUCED SO THAT TFR
63W= SBN 5 1 [DOES NOT SPAN A SHEET BOUNDARY
64*W STO 5 ACOMMUNE2(2)
64TG DVS 4 ASHEETSIZE [RECALCULATE PARAMETERS
65*6 STO 4 AWORK4(2)
65SQ STO 5 AWORK2(2)
66#B N12
6B6B SRC 7 2
6BL2 ORX 7 ZBIT2(1) [SET MODE OF ACCESS AND
6C5L ORS 7 EXTPS+1(2) [NOT FIRST GETWORD BITS
6CK= LDX 7 EXTPS+1(2)
6D4W ANDX 7 ZBIT3(1)
6DJG BZE 7 N14 [JUMP IF NO ADATA/AGETWORD
6F46 [BLOCK CREATED
6FHQ HUNT2 3,ADATA,AGETWORD,2
6G3B LDX 7 EXTPS+1(2)
6GH2 #SKI K6GETWORD>299-299
6H2L TRACE 7,SUBSGETW
6HG= ANDX 7 BSP16 [CURES OLD STANDIN BUG
6H^W SLA 7 7 [*128
6JFG LDX 0 ACOMMUNE1(2) [A
6J^6 TXL 0 7
6KDQ BCS N13 [J IF NEW BLOCK NEEDED
6KYB ADX 7 ALOGLEN(3) [HIGHEST ADDR+1
6LD2 LDX 6 ACOMMUNE2(2) [A+E
6LXL TXL 6 7
6MC= BCC N13 [J IF NEW BLOCK NEEDED
6MWW SBS 0 7 [CORRECT BLOCK IN CORE
6NBG LDX 6 ALOGLEN(3)
6NW6 SBS 7 6
6P*Q ADN 6 A1(3)
6PTB STO 6 ACOMMUNE1(2) [GEORGE ADDR
6Q*2 STO 7 ACOMMUNE2(2) [AREA ACCESSIBLE
6QSL #SKI K6GETWORD>299-299
6R#= TRACE 7,SAMEBLOK
6RRW BRN N19
6S?G N13
6SR6 #SKI K6GETWORD>299-299
6T=Q TRACE EXTPS+1(2),NEWBLOK
6TQB LDXC 7 EXTPS+1(2)
6W=2 BCS N16 [J IF WRITING BACK REQUIRED
6WPL NAME 3,BSTB,BFREEW [BSTS CAN PICK THIS UP TO READ INTO
6X9= UNLOCK 3
6XNW N14
6Y8G #
6YN6 # AT THIS STAGE WORKING LOCATIONS ARE AS FOLLOWS
6^7Q #
6^MB # [ACOMMUNE1]=A [ACOMMUNE2]=A+E [AWORK1]=Q1(A)
7272 # [AWORK2]=Q1(A+E) [AWORK3]=R1(A) [AWORK4]=R1(A+E)
72LL #
736= LDCT 5 #777 [CLEAR OUT
73KW ANDS 5 EXTPS+1(2) [OLD BLKLET ADDR
745G LDX 5 AWORK3(2) [R1(A)
74K6 DVS 4 ZBLKLETSIZE(1) [[4]=R2(A),[5]=Q2(A)
754Q LDX 7 AWORK4(2)
75JB DVS 6 ZBLKLETSIZE(1) [[7]=Q2(A+E)
7642 LDX 0 AWORK1(2) [Q1(A)
76HL MPY 0 ASHEETSIZE [*SHEET SIZE
773= SRL 1 7 [/128
77GW ADX 1 5 [+Q2(A)
782G ANDX 1 BSP16 [OLD BUG !
78G6 ORS 1 EXTPS+1(2) [NEW BLKLET ADDR
78^Q #SKI K6GETWORD>299-299
79FB TRACE EXTPS+1(2),NEWBLTAD
79^2 LDN 6 1 [ [1
7=DL ADX 6 7 [ +Q2(A+E)
7=Y= SBX 6 5 [ -Q2(A)]
7?CW SLL 6 7 [ *128 = LENGTH OF TFR
7#D* LDX 3 1 [BLKLET NO. IN PROGRAM
7#DQ SLL 3 7 [ & CONVERT TO WORD ADDR.
7#F7 TRYCORE XNOFPB,1,3 [SEE IF FPB EXISTS
7#FJ SETUPCORE 6,2,ADATA,AGETWORD,1
7#F^ LOCKC 2,REFIND
7#GB TRYCORE XNOFPB1,6,3 [CHECK IF FPB STILL EXISTS
7#GR [
7#H8 [ X6 NOW CONTAINS CORE ADDR. OF START OF REQ'D BLKLET
7#HK [
7#J2 MHUNTW 3,ADATA,AGETWORD
7#JC SETBIT 7,EXTPS+1(2) [SET VALID FPB MARKER
7#JS SETBIT 3,EXTPS+1(2)
7#K9 VFREEW BSTB,BFREEW [NOT REQ'D AS NO READ TO DO
7#KL FPCACA 1,2 [LOCATE PCA
7#L3 HUNT2 1,BSTB,BSCB
7#LD LDX 0 AOBJLF(1)
7#LT STO 0 BACK1(3) [STO LOGICAL FILE NO.
7#M= SMO AWORK1(2)
7#MM LDX 0 AOBJST(1)
7#N4 ADX 0 5
7#NF STO 0 BACK2(3) [STO B.S. BLOCK NO.
7#NW LDX 0 6 [START OF MOVE IN FPB
7#P? LDN 1 A1(3) [DESTINATION OF MOVE IN GETWORD BLK
7#PN LDX 6 ALOGL(3) [LENGTH OF MOVE
7#Q5 CALL 5 XMOVE
7#QG BRN N30C
7#QX REFIND
7#R# MHUNTW 2,ADATA,AGETWORD [RELOCATE BLK FOR LOCKC
7#RP EXIT 1 0
7#S6 XNOFPB1
7#SH MFREEW ADATA,AGETWORD [FREE BLK AS VALID FPB GONE
7#SY XNOFPB
7#TH ...#UNS BIWRFL
7#W6 ... JBS N30,2,BRWRITEFAIL [BSTB/BSCB WILL BE INVALID
7#WQ FPCACA 1,2 [LOCATE PCA
7*BB HUNT2 3,BSTB,BSCB,1
7*W2 SMO AWORK1(2)
7B*L LDX 1 AOBJST(3) [UNDATUMISED SHEET ADDRESS
7BT= ADX 1 5 [UNDATUMISED ADDR OF START OF TFR
7C#W ... BACKREAD ASWAP+BUSE,EX6,,AOBJLF(3),1
7H=9 N30
7HBN [
7HF5 [ THE FOLLOWING CODE HAS BEEN INSERTED DUE TO BUG 0622(DP 113)
7HHG [ 'BROKE IN PROCONTF AT ADDRESS 467
7HKX [ OBEYING GEOERR - LOCKBLOCK'
7HN# [
7HQP [
7HT6 [ THIS WAS CAUSED BY A MARK 8 'IMPROVEMENT' WHICH DID NOT WORK
7HXH [ IT WAS THOUGHT THAT 'LOCKC' WOULD PUT BLOCK IN LONGLOCK AREA
7H^Y [ HOWEVER THIS FAILED SO WE ARE NOW REVERTING TO THE OLD TRUSTED
7J4* [ MARK 7 CODE ..
7J6Q [
7J97 [ DONE 24.JULY.74 :CENT
7J?J [
7J#N HUNTW 3,ADATA,AGETWORD
7J*4 BPZ 3 N30C [J IF WE FOUND VALID FPB
7J*^ SETUPCORE 6,5,ADATA,AGETWORD,1 [ FIND AND LOCK ...
7JDB LOCKC 5,RFIN [ ... LONGLOCK AREA
7JGR SETBIT 3,EXTPS+1(2) [MARK BLOCK CREATED
7JK8 CALL 1 RFIN [RE-FIND AGETWORD
7JKC ...#UNS BIWRFL
7JKL ...(
7JKT ... LDX 1 FX2
7JL4 ... JBC N30D,1,BRWRITEFAIL [NO READ - NO BSTB/BREAD
7JL? ... LDX 3 2
7JLG ... LDX 2 FX2
7JLP ... BRN N30C
7JLY ...N30D
7JM7 ...)
7JMK HUNT 3,BSTB,BREAD
7JQ2 NAME 3,ADATA,AGETWORD [NAME BLOCK AGETWORD
7JSC LDX 1 2
7JWS LDX 0 3
7J^9 ADN 0 BACK1
7K3L ADN 1 BACK1
7K63 MOVE 0 2 [GIVE BUFFER A B/S HOME
7K8D STOZ BACK1(3)
7K=T
7K*= STOZ BACK2(3)
7KCM ADN 0 A1-BACK1
7KG4 ADN 1 A1-BACK1
7L75 CALL 5 XMOVE
7L7P LDX 6 2
7L=6 FREECORE 3 [FREE THE OLD AGETWORD(BSREAD)
7L#H LDX 3 6
7LBY [
7LF* [ END OF BUG CORRECTION
7LHQ [
7LKG N30C
7LM= ADN 4 A1(3)
7MLG LDX 6 ACOMMUNE1(2) [X6=START ADDRESS
7N66 STO 4 ACOMMUNE1(2) [GEORGE ADDR
7NKQ SLL 7 7 [Q2(A+E)*128
7P5B ADN 7 #200 [+BLKLET SIZE
7PK2 SBX 7 AWORK3(2) [-R1(A)
7R3W FPCACA 1,2
7RHG LDX 0 ALIMIT(1)
7S36 ADX 6 7 [X6=LAST ADRS IN AREA
7SGQ SBX 0 6
7T2B BPZ 0 N19A [JUMP IF AREA IS WHOLLY
7TG2 [CONTAINED IN PROGRAM
7T^L ADX 7 0 [OTHERWISE ADJUST LENGTH SO THAT
7WF= [PROGRAM LIMIT IS NOT EXCEEDED
7WYW N19A
7XY6 STO 7 ACOMMUNE2(2) [ACCESSIBLE AREA
7YCQ N19 LDCT 5 #200
7YXB ANDX 5 EXTPS+1(2)
7^C2 ERS 5 EXTPS+1(2) [RESET ACCESS MARKERS
7^WL SLL 5 1
82B= ORS 5 EXTPS+1(2)
82CQ ...[ CORRECTION FOR B2554 (19-11-82)
82F= ...[ BRANCH TO BREAKIN EXIT AFTER SETTING UP ADATA/AGETWORD
82GQ ...[ SO THAT CALLING ROUTINES WHICH DO NOT DETECT BREAKIN CAN CONTINUE
82J= ...#UNS BIWRFL
82KQ ... JMBAC N11,2,BRREADFAIL,BRWRITEFAIL
82M= ...#UNS BIWRFL
82NQ ...#SKI
82Q= ... JBC N11,2,BRREADFAIL
82RQ ... SETREP OK
82T= ... BRN ZBRKIN
82WX [
82X= [ SUBROUTINE TO MOVE X6 WORDS FROM X0->X1 IN 512 WORD MOVES UNTIL
82XK [ NECESSARY.X5 IS LINK ACC.
82XY [
82Y? XMOVE
82YL N30B BXL 6 B513,N30A [JUMP IF CAN DO IN ONE 512 WD 'MOVE'
82Y^ MOVE 0 0 [DO A 512 WORD 'MOVE'
82^# ADN 0 512
82^M ADN 1 512
8322 SBN 6 512 [DO ACCOUNTING
832* BRN N30B
832N N30A SMO 6
8333 MOVE 0 0 [MOVE THE LAST COUPLR OF WORDS
833B EXIT 5 0
833P [
8344 [ SUBROUTINE TO TEST IF THE GETWORD BLK ABOUT TO BE WRITTEN AWAY
834C [ CORRESPONDS TO A VALID FPB/PAGE & IF SO TO UPDATE THE FPB/PAGE.
834Q [ LINK = X5, ON ENTRY X2 = FX2
8355 [
835D UPDATFPB
835R LDBIT 7,0
8366 ANDX 0 EXTPS+1(2)
836F BZE 0 UPDAT1 [J IF NO FPB INVOLVED
836S ERS 0 EXTPS+1(2) [CLEAR FPB MARKER
838H LDX 6 EXTPS+1(2)
838W ANDX 6 BSP16 [LOAD BLKLET NO.
8399 SLL 6 7 [CONVERT TO WORDS
839J TRYCORE UPDAT1,1,6 [SEE IF FPB STILL EXISTS
839X [
83== [ IF SO X1 NOW POINTS TO CORRECT AREA IN FPB
83=K [
83=L [ NOW MOVE THE ADATA/GETWORD BACK TO THE FPB
83=M [ THE ADATA/GETWORD BLOCK MAY BE LONGER THAN THE DISTANCE
83=N [ FROM THE START OF THE MOVE TO THE END OF THE PROGRAM.
83=P [ SO CHECK FOR THIS.
83=Q [
83=R FPCACA 2 [FIND PCA(APET) FROM CPAT
83=S LDX 0 ALIMIT(2) [SIZE OF PROGRAM
83=T SBX 0 6 [X6 = PROGRAM ADDRESS OF START OF MOV
83=W IF 0,L,ALOGL(3) [IF AREA TO MOVE TO < ADATA/GETWORD
83=X THEN
83=Y LDX 6 0 [MOVE THIS LENGTH
83=^ ELSE
83?2 LDX 6 ALOGL(3) [ELSE MOVE BLOCK LENGTH
83?3 FI
83?4 LDN 0 A1(3) [AREA IN GETWORD BLK
83?5 LDX 2 FX2 [RESET X2 TO CPAT
83?L CALL 5 XMOVE [MOVE GETWORD CONTENTS INTO FPB
83## UPDAT1
83#M EXIT 7 0
83*G #
83T6 # ACTION TAKEN ON ENCOUNTERING HARDWARE FAILURE IN BACKING STORE TFR
85#2 # WRITE FAILURE
85F8 ...#UNS BIWRFL
85LB ...#SKI
85RL N18 GEOERR 1,WRIFAIL
85RX ...#UNS BIWRFL
85S8 ...(
85SF ...#
85SQ ...# IMPROVED HANDLING OF WRITE TRANSFER FAILURE ON SWAP FILE
85T3 ...# DS8224 IMPLEMENTED NOVEMBER 1982 FOR MK867
85T# ...# 1) SET BRWRITEFAIL IN JOBEVENTS SO JOB WILL BE ABANDONED
85TK ...# 2) REMOVE FAILING SHEET FROM BSTB/BSCB SO IT WON'T BE
85TW ...# RELEASED AND REUSED WHEN PROGRAM DELETED
85W7 ...# 3) FOR GETWORD(X) CASE SET UP DUMMY ADATA/AGETWORD SO
85WD ...# CALLING ROUTINE CAN CONTINUE AS IF READ FOLLOWING
85WP ...# FAILED WRITE HAD BEEN SUCCESSFUL
85X2 ...#
85X? ...N18
85XJ ... LDN 7 0 [GETWORD(X)
85XT ... BRN N18B
85Y6 ...N18A
85YC ... LDN 7 1 [WORDFIN
85YN ...N18B
85Y^ ... LDX 6 JOBNO(2)
85^= ... DOWN PROCONTX,25 [TO SET BRWRITEFAIL
85^H ... BRN N18D [JOB NOT STOPPABLE
85^S ...# NOW CALCULATE SHEET ON WHICH WRITE FAILURE HAS OCCURRED
8625 ... LDX 6 EXTPS+1(2)
862B ... ANDX 6 BSP16 [X6 = BLOCKLET IN PROG
862M ... SLA 6 7 [*128 = WORD IN PROG
862Y ... DVS 5 ASHEETSIZE [/ASHEETSIZE X6 = SHEET IN PROG
8639 ... FPCACA 3,2
863G ... HUNT2 3,BSTB,BSCB
863R ... LDX 0 BSHEET(3)
8644 ... SBX 0 6
864* ... SBN 0 1 [X0 = NO OF SHEETS TO MOVE UP
864L ... BZE 0 N18C
864X ... SMO 6 [MOVE UP ENTRIES IN BSTB/BSCB
8658 ... LDN 5 AOBJST(3) [SO AS TO REMOVE FAILING SHEET
865F ... ADN 6 1 [FROM LIST
865Q ... SMO 6
8663 ... LDN 4 AOBJST(3)
866# ... SMO 0
866K ... MOVE 4 0
866W ...N18C
8677 ... LDX 6 BSHEET(3)
867D ... SBN 6 1 [REDUCE NO OF SHEETS IN LIST
867P ... STO 6 BSHEET(3)
8682 ... SMO 6
868? ... STOZ AOBJST(3) [ZEROIZE OLD LAST SHEET
868J ... MHUNTW 3,BSTB,BWRITE
868T ... FREECORE 3 [FREE BSTB/BWRITE
8696 ... BZE 7 N14 [GETWORD(X)
869C ... BRN N51 [WORDFIN
869N ...[
869^ ...N18D
86== ... GEOERR 0,BRWRFAIL [JOB NOT STOPPABLE
86=H ...[
86=S ...)
86?= #
86QW # ENTRY FROM WORDFIN MACRO
87=G XENT3
87Q6 #SKI K6GETWORD>199-199
889Q TRACE JOBNO(2),WORDFIN
88PB LDCH 4 ATYPE(2)
8992 SBN 4 CPAT/64
89NL BZE 4 N54 [J IF ISSUED FROM CPA
8=8= GEOERR 1,NOT CPA
8=MW N54 BBS 2,EXTPS+1(2),N50 [J IF SUBSEQUENT G/Q
8?7G BBUS 5,EXTPS+1(2),N51A [J IF NO C/I
8?M6 N50 FJOCA 3,2
8#6Q BBS 11,JMISC(3),N52 [J IF S/O
8#BH LDX 0 APROCTIME
8#F6 STO 0 JCTLR(3) [TO WARD OFFF TRUE DORMANCY
8#LB TBS 9,JMISC(3),0
8*62 BZE 0 N50A [J IF SWAPABLE
8*KL ERS 0 JMISC(3)
8B5= ENDPAXES 3 [SIGNAL END OF PROGRAM ACCESS
8BJW N50A
8C4G SETBIT 10,JMISC(3) [BACK TO NORMAL
8CJ6 N51
8GFW N51A
8G^G STOZ EXTPS+1(2) [RESET ALL MARKERS
8HF6 UP
8HYQ N52
8JDB LDX 4 EXTPS+1(2)
8JY2 ANDX 4 ZBIT3(1)
8KCL BZE 4 N51 [NO ADATA/AGETWORD BLK
8KX= HUNT2 3,ADATA,AGETWORD,2
8LBW LDXC 5 EXTPS+1(2)
8LWG BCC N53 [J IF NO WRITING BACK
8M8W CALL 7 UPDATFPB [UPDATE FPB IF ONE EXISTS
8MB6 CHAIN 3,2
8MD4 ...#UNS BIWRFL
8MG2 ...(
8MHY ... JBS N53,2,BRWRITEFAIL [BSTB/BSCB INVALID
8MKW ... BACKWRITE ASWAP+FREE,ALOGLEN(3),N18A
8MMS ...)
8MPQ ...#UNS BIWRFL
8MRN ...#SKI
8MTQ BACKWRITE ASWAP+FREE,ALOGLEN(3),N18
8N*B BRN N51
8NT2 N53 FREECORE 3 [DISPOSE OF AGETWORD BLOCK
8P#L BRN N51
8PS= #
8Q?W # ENTRY POINT FOR GETWORDX
8QRG #
8R?6 XENT4
8RQQ SETBIT 6,EXTPS+1(2) [MARK AS G/WX
8S=B LDN 7 GWRITE
8SQ2 ANDX 7 ACOMMUNE3(2) [SET X7 ZERO IF READ
8T9L BRN N1 [AND NON-ZERO FOR WRITE
8TP= #
8W8W # THE FOLLOWING SUBROUTINE SETS THE NOTUSED REPLY AND PLACES THE
8WNG # NUMBER OF WORDS TO THE END OF THE PAGE OR SEGMENT INTO ACOMMUNE2.
8X86 # UPON ENTRY X3 SHOULD CONTAIN THE REPLY FROM THE PTENTRY MACRO(OR
8XMQ # CHECKB) AND X5 SHOULD CONTAIN THE VIRTUAL ADDRESS OF THE
8Y7B # START OF THE AREA
8YM2 #
8^6L XNUSEREP
8^L= SETREP NOTUSED [SET REPLY
925W LDN 0 #1000 [MASK OUT BIT IN CHECKPTE REPLY WHICH
92KG ANDX 0 3 [INDICATES PAGE OR SEGMENT NOT USED
9356 BNZ 0 SEGREP [JUMP IF SEGMENT NOT USED
93JQ ANDN 5 #1777 [OTHERWISE PAGE NOT USED AND MASK
944B [OUT WORD NO.WITHIN PAGE OF START
94J2 [OF AREA
953L LDN 0 1024
95H= SBX 0 5 [X0=NO OF WORDS TO THE END OF PAGE
962W BRN XREPST
96GG SEGREP
9726 LDCT 0 2 [X0=64K
97FQ FPCACA 3,2,N
97^B LDX 7 ALIMIT(3) [X7=PROGRAM LIMIT
98F2 SBX 7 5 [NO OF WORDS TO THE END OF PROGRAM
98YL ANDX 5 MB8T23(1) [MASK OUT WORD NO WITHIN SEGMENT
99D= SBX 0 5 [X0=NO. OF WORDS TO END OF SEGMENT
99XW TXL 0 7 [SEE WHICH IS SMALLER
9=CG BCS XREPST
9=X6 LDX 0 7
9?BQ XREPST
9?WB STO 0 ACOMMUNE2(2)
9#B2 EXIT 6 0
9**= # S/R FOR LOCKC OR ADATA/AGETWORD BLOCK
9*SW #
9B#G RFIN
9BS6 HUNT 2,ADATA,AGETWORD
9C?Q EXIT 1 0
9CRB MENDAREA 50,K99GETWORD
9D?2 #END
^^^^ ...57602645000200000000