GETWORD867
(George Source)
Macros used: BACKREAD, BACKWRITE, BBS, BBUS, BXL, CHAIN, CHECKB, CLEAR, DOWN, ELSE, ENDPAXES, FADDRESS, FI, FJOCA, FPCACA, FREECORE, GEOERR, HUNT, HUNT2, HUNTW, IF, JBC, JBS, JMBAC, LDBIT, LOADNOW, LOCKC, MENDAREA, MFREEW, MHUNTW, NAME, PROGAXES, SEG, SEGENTRY, SETBIT, SETREP, SETUPCORE, SWAPOUT, TBS, TESTLOAD, THEN, TRACE, TRYCORE, UNLOCK, UNSETBIT, UP, UPPLUS, VFREEW
- GETWORD867.txt
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