ILLPERI70
(George Source)
Macros used: ACROSS, CHECKBX, FPCACA, FPERENT, GETWORDX, HUNT2, HUNTW, JWPR, LPROP, OUTPACK, OUTPARAM, PERTYPNO, SEGENTRY
- ILLPERI70.txt
22FL #SEG ILLPERI70 [E. WILLIAMS 22^= #OPT K0ILLPERI=0 23DW #LIS K0ILLPERI>K0ALLGEO 23YG 8HILLPERI 24D6 SEGENTRY K1ILLPERI,XENT1 24XQ # THIS SEGMENT PERFORMS THE ANALYSIS OF AN ILLEGAL'PERI'INSTRUCTION 25CB #DEF VPERI=4 25X2 # POSNS USED IN'ILLEGAL'(APED,ANOMESS BLOCK) 26BL #DEF VSPROG=A1 26W= #DEF VSCOND=A1+2 27*W #DEF VMASK=A1+5 27TG #DEF VACC=A1+12 28*6 #DEF VINSTR=A1+24 28SQ #DEF VCAREA=A1+27 29#B # VARIOUS CONSTANTS 29S2 Q5 +5 2=?L Q17777777 #17777777 2=R= Q41737 #41737 [MASK OUT ADDITIVE MODES 2?=W XJYUNALLOC +JYUNALLOC 2?QG XACCESS +GREAD+GNOMESS 2#=6 XTYPE +10 2#PQ # RETURN TO OPILLS(IN FACT END PART OF OPILLS COULD BE INSERTED HERE 2*9B XFIN ACROSS OPILLS,2 2*P2 # THIS SUBR SETS X2->APED,ANOMESS 2B8L X2HUNT2 2BN= HUNT2 2,APED,ANOMESS,FX2 2C7W EXIT 4 0 2CMG # THIS SEGMENT IS ENTERED TO DECIDE WHY A PERI IS ILLEGAL & TO STORE 2D76 # THE CONTROL AREA IN THE APED ANOMESS BLOCK.ON ENTRY X3 POINTS TO 2DLQ # FIRST WORD OF C/A 2F6B XENT1 2FL2 CALL 4 X2HUNT2 2G5L LDX 0 VINSTR+2(2) 2GK= SMO FX2 2H4W STO 0 AWORK3 [REMEMEBER O/P ADDRESS 2HJG LDX 3 VINSTR+1(2) 2J46 SRL 3 21 [ACCUMULATOR OF INSTRUCTION 2JHQ BPZ 6 ZA1 [J IF NOT REPLACED 2K3B SMO 3 2KH2 LDX 3 VACC(2) [GET VALUE OF ACCUMULATOR 2KL6 ... LDCT 0 #77 2KP= ... ANDX 0 6 2KSB ... SLC 0 9 2KXG ... SBN 0 6 2L2L ... SEGENTRY K90ILLPERI 2L5Q ... ANDN 3 #77 [FOR MANYDA SPECIAL 2L8W ... BZE 0 TYPE6 2L#2 ... ANDN 3 #77 2LC6 ...TYPE6 2LG= ZA1 LDCT 7 #77 2L^W ANDX 7 6 [TYPE IN B0-9 OF X7 2MFG ORX 7 3 [TYPE/UNIT IN X7 2M^6 #SKI JNLPACK 2NDQ LDX 5 7 2NYB #SKI JNLPACK<1$1 2PD2 ( 2PXL PERTYPNO 7 [CONVERT TO CHARACTERS 2QC= LDX 5 ACOMMUNE9(2) [REMEMBER IT 2QWW CALL 4 X2HUNT2 2RBG ) 2RW6 STO 5 VCAREA+1(2) 2S*Q LDX 0 7 2STB SRL 0 15 [TYPE IN X0 2T*2 TXL 0 XTYPE(1) 2TSL BCC ZA2 [J IF >9 2W#= SMO 0 2WRW BRN XTABLE [BRN TO BRANCH TABLE 2X?G ZA2 SBN 0 13 2XR6 BZE 0 XFDS [FDS 2Y=Q SBN 0 12 2YQB BZE 0 XDR [HSD 2^=2 SBN 0 3 2^PL BZE 0 XIPC [IPC 329= SBN 0 23 32NW BZE 0 XFR [FR 338G SBN 0 1 33N6 BZE 0 XFW [FW 347Q SBN 0 9 34MB BZE 0 XCI [CI 3572 ZA3 35LL CALL 3 XGETCA [GET A WORD CONTROL AREA ANYWAY 366= +4 36KW BRN XFIN 375G # 37K6 # SWITCH TABLE FOR VARIOUS TYPES 384Q # 38JB # AT THIS STAGE X5=NAME OF PERIPHERAL,X6=ADDRESS OF CONTROL AREA, 3942 # X7=TYPE/UNIT NO 39HL XTABLE 3=3= BRN XTR 3=GW BRN XTP 3?2G BRN XLP 3?G6 BRN XCR 3?^Q BRN XCP 3#FB BRN XMT 3#^2 BRN XEDS 3*DL BRN XMCF 3*Y= BRN ZA3 3BCW BRN XDR 3BXG # THIS SECTION DEALS WITH A TR. 3CC6 # ITS ANNOTATION SERVES AS A MODEL FOR OTHERS. 3CWQ XTR 3DBB CALL 3 XALLOC [REPORT IF DEVICE NOT ALLOCATED 3DW2 CALL 3 XGETCA [CHECK THAT THE PERI CONTROL AREA IS 3F*L +4 [RESERVATION & MOVE IT TO APED,ANOMES 3FT= CALL 3 XCHCA [CHECK CONTROL AREA ACCORDIN TO 3 PAR 3G#W +129 3GSG +0 [NO FORCED OR MIN VALUE 3H#6 BRN XCHAR [CHAR PERIP,CHAR ADDR PERMITTED 3HRQ BRN XFIN 3J?B # THIS SECTION DEALS WITH A TP 3JR2 XTP BRN XTR 3K=L # THIS SECTION DEALS WITH A LP 3KQ= XLP CALL 3 XALLOC 3L9W CALL 3 XGETCA 3LPG +4 3M96 CALL 3 XCHCA 3MNQ +162 3N8B +121.2 [MIN VALUE OF COUNT CHECKED 3NN2 BRN XLPC 3P7L BRN XFIN 3PM= # THIS SECTION DEALS WITH A CP 3Q6W XCP CALL 3 XALLOC 3QLG CALL 3 XGETCA 3R66 +4 3RKQ CALL 3 XCHCA 3S5B +81 3SK2 +80 3T4L BRN XCHWD 3TJ= BRN XFIN 3W3W # THIS SECTION DEALS WITH A CR.THIS DEPENDS ON PROPERTIES 3WHG XCR CALL 3 XALLOC [CHECK ALLOCATED TO PROG 3X36 CALL 3 XGETCA 3XGQ +4 3Y2B SMO FX2 3YG2 LDX 6 AWORK1 [PTR TO DEVICE LIST 3Y^L BZE 6 ZCR1 [J IF OFF-LINE 3^F= LPROP 6,5 [PROPS IN X5 3^YW ANDN 5 #10 [IS CARD IMAGE SPECIFIED 42DG BZE 5 ZCR1 [J IF NOT 42Y6 LDN 0 #77 [JUMP IF CARD IMAGE NOT SPECIFIED 43CQ ANDX 0 VCAREA+3(2) 43XB BZE 0 ZCR1 44C2 CALL 3 XCHCA [CHECK CA 44WL +161 45B= +0 45TW BRN XCHWD 46*G BRN XFIN 46T6 ZCR1 CALL 3 XCHCA 47#Q +81 47SB +0 48#2 BRN XCHWD 48RL BRN XFIN 49?= # THIS SECTION DEALS WITH MAG TAPE 49QW XMT CALL 3 XALLOC 4==G ANDN 6 #1777 [ISOLATE MODE 4=Q6 SBN 6 #10 4?9Q BNG 6 XMT30 [JUMP IF MODE 0-7 4?PB SBN 6 #70 4#92 BNG 6 XMT10 [JUMP IF MODE #10-#77 4#NL SBN 6 #700 4*8= BNG 6 XMT20 [JUMP IF MODE #100-#777 4*MW BZE 6 XMT11 [JUMP IF MODE #1000 4B7G SBN 6 7 4BM6 BZE 6 XMT11 [OR MODE #1007 4C6Q XMT10 CALL 7 XSETMESS 4CLB +JYMNOTREC [ILLEGAL:MODE NOT RECOGNISED 4D62 XMT11 CALL 3 XGETCA [TWO WORD 4DKL +2 [CONTROL AREA 4F5= BRN XFIN 4FJW # MODES #100-#777 4G4G XMT20 ADN 6 #100 4GJ6 BZE 6 XMT21 [JUMP IF #700 4H3Q ADN 6 #200 4HHB BZE 6 XMT23 [JUMP IF #500 4J32 ADN 6 #500 4JGL LDCH 0 6 4K2= BZE 0 XMT22 [JUMP IF #100,200,300,400,600 4KFW XMT21 CALL 7 XSETMESS 4K^G +JYMNOTREC [ILLEGAL:MODE NOT RECOGNISED 4LF6 BRN XMT23 4LYQ XMT22 CALL 7 XSETMESS 4MDB +JYALLOC [ILLEGAL:DEVICE ALREADY ALLOCATED 4MY2 XMT23 CALL 3 XGETCA 4NCL +9 4NX= BRN XFIN 4PBW # MODES 0-7 4PWG XMT30 ADN 6 #10 [SWITCH ON MODE 4QB6 SMO 6 4QTQ BRN XMT300 4R*B XMT300 4RT2 BRN XMT32 [MODE 0 4S#L BRN XMT33 [MODE 1 4SS= BRN XMT31 [MODE 2 4T?W BRN XMT34 [MODE 3 4TRG BRN XMT34 [MODE 4 4W?6 BRN XMT36 [MODE 5 4WQQ BRN XMT37 [MODE 6 4X=B BRN XMT11 [MODE 7 4XQ2 # MODE 2 4Y9L XMT31 LDN 6 #20 [CHECK MODE 2 AVAILABLE 4YP= CALL 7 XPROPS 4^8W +JYMODENAV 4^NG # MODE 0 5286 XMT32 CALL 3 XGETCA [4-WORD C/A 52MQ +4 537B CALL 3 XCHCA [WORD COUNT:MIN 1,MAX 8192 53M2 +8193 546L +0 54L= BRN XWORD 555W BRN XMT35 55KG # MODE 1 5656 XMT33 CALL 7 XWPR [CHECK WPR AVAILABLE 56JQ +JYNOWPR 574B CALL 3 XGETCA [4-WORD C/A 57J2 +4 583L CALL 3 XCHCA [WORD COUNT:MIN 5,MAX 8192 58H= +8193 592W +0 59GG BRN XWORD 5=26 BRN XMT35 5=FQ # MODE 3 AND 4 5=^B XMT34 CALL 3 XGETCA [2-WORD C/A 5?F2 +2 5?YL XMT35 CALL 7 XSETMESS [DEFAULT- SEQUENCE ERROR 5#D= +JYMODESEQ 5#XW BRN XFIN 5*CG # MODE 5 5*X6 XMT36 CALL 7 XWPR [CHECK WPR AVAILABLE 5BBQ +JYNOWPR 5BWB BRN XMT34 5CB2 # MODE 6 5CTL XMT37 LDN 6 #10 [CHECK MODE 6 AVAILABLE 5D*= CALL 7 XPROPS 5DSW +JYMODENAV 5F#G BRN XMT34 5FS6 # THIS SUBR CHECKS THAT SPECIFIED PROPS ARE AVAILABLE-CALLS XSETMESS 5G?Q XPROPS 5GRB LDX 2 FX2 5H?2 LPROP AWORK1(2),2 [GET PROPS 5HQL SMO FX2 5J== ANDX 0 2 5JPW BNZ 0 XPROPS1 [J IF PROPERTY BIT SET 5K9G SMO FX2 5KP6 LDX 0 AWORK1 5L8Q BZE 0 XPROPS1 [JUMP IF NO PROPERTIES-I.E.OFFLINE 5LNB BRN XSETMESS [SET ERROR MESSAGE 5M82 XPROPS1 5MML EXIT 7 1 [EXIT 5N7= # THIS SUBR CHECKS THAT A WPR IS ATTACHED. 5NLW XWPR SMO FX2 5P6G LDX 0 AWORK1 5PL6 BZE 0 XWPR1 [J IF OFFLINE 5Q5Q LDX 2 FX2 5QKB JWPR AWORK1(2),XWPR1 [J IF WPR IS PRESENT 5R52 BRN XSETMESS [REPORT ERROR 5RJL XWPR1 EXIT 7 1 5S4= #SKI IPCV1 5SHW ( 5T3G # THIS SECTION DEALS WITH IPC.(A PSEUDO OFF LINE PERIPHERAL) 5TH6 # ONLY CHECKS IF ALLOCATED 5W2Q XIPC CALL 3 XALLOC 5WGB ANDN 6 #5777 [MASK OUT MODES 5X22 SBN 6 #100 [MODES<#100 5XFL BNG 6 XCI [4 WORD CONTROL AREA 5X^= SBN 6 #400 [MODES #100-#400 5YDW BNG 6 ZDS1 [5 WORD CONTROL AREA 5YYG SBN 6 #300 [MODE #1000 5^D6 BZE 6 ZDR1 [2 WORD CONTROL AREA 5^XQ SBN 6 #700 [MODE #1700 62CB BZE 6 ZDS1 [5 WORD CONTROL AREA 62X2 BRN XCI [4 WORD CONTROL AREA ANYWAY 63BL ) 63W= # THIS SECTION DEALS WITH DISCS&GETS CONTROL AREA ONLY 64*W # THERE IS NO NEED TO DO ANY FURTHER CHECKING SINCE ALL DISCS & DRUM 64TG # ARE OFF-LINE 65*6 XMCF 65SQ XFDS 66#B XEDS CALL 3 XALLOC 66S2 ANDX 6 Q41737(1) 67?L SBN 6 #100 67R= BNG 6 ZDS1 [J IF MODE <#100 68=W SBN 6 #1601 68QG BPZ 6 ZDS4 [ILLEGAL MODE 69=6 ADN 6 #1601 69PQ SRL 6 6 6=9B SMO 6 6=P2 BRN ZLEN 6?8L ZLEN 6?N= #REP 4 6#7W BRN ZDS2 [MODE #100,200,300,400 6#MG BRN ZDS1 [MODE #500 6*76 BRN ZDS1 [MODE #600 6*LQ BRN ZDS3 [MODE #700 6B6B BRN ZDS4 [MODE #1000 6BL2 BRN ZDR1 [MODE #1100 6C5L BRN ZDS2 [MODE #1200 6CK= BRN ZDR1 [MODE #1300 6D4W BRN ZDS3 [MODE #1400 6DJG BRN ZDR2 [MODE #1500 6F46 BRN ZDS1 [MODE #1600 6FHQ BRN ZDS1 [MODE #1700 6G3B ZDS4 CALL 3 XGETCA 6GH2 +3 [3 WORD CONTROL AREA 6H2L BRN XFIN 6HG= ZDS1 CALL 3 XGETCA 6H^W +5 [5 WD CA 6JFG BRN XFIN 6J^6 ZDS2 CALL 3 XGETCA 6KDQ +9 [9 WD CA 6KYB BRN XFIN 6LD2 ZDS3 CALL 3 XGETCA 6LXL +7 6MC= BRN XFIN [7 WD CA 6MWW # THIS SECTION DEALS WITH DRUMS.GETS CONTROL AREA ONLY 6NBG XDR CALL 3 XALLOC 6NW6 ANDX 6 Q41737(1) 6P*Q SBN 6 #100 6PTB BNG 6 ZDS1 6Q*2 SBN 6 #700 6QSL BPZ 6 ZDR1 6R#= ZDR2 CALL 3 XGETCA 6RRW +6 6S?G BRN XFIN 6SR6 ZDR1 CALL 3 XGETCA 6T=Q +2 6TQB BRN XFIN 6W=2 # THIS SECTION DEALS WITH FILE HANDLERS & COMMAND ISSUERS 6WPL XFR 6X9= XFW CALL 3 XALLOC 6XNW XCI CALL 3 XGETCA 6Y8G +4 6YN6 BRN XFIN 6^7Q # 6^MB # 7272 # SUBROUTINES 72LL # ----------- 736= # 73KW # THIS SUBROUTINE CHECKS TO SEE WHETHER THE DEVICE IS ALLOCATED TO 745G # THE PROGRAM AND IF NOT SETS THIS AS THE REASON FOR THE ILLEGALITY. 74K6 # ON ENTRY X7=TYPE/UNIT NO.ON EXIT AWORK1 CONTAINS THE PTR. TO THE 754Q # DEVICE LIST IF ONLINE,OTHERWISE IT IS ZERO 75JB XALLOC 7642 FPCACA 2,FX2 76HL HUNT2 2,APERI,APERIRES [X2-> PRB 773= ADN 2 A1 77GW FPERENT 7,2,2 [FIND RELEVANT ENTRY 782G BNG 2 ZALL1 [NOT ALLOCATED 78G6 LDX 0 1(2) 78^Q LDX 2 FX2 79FB BPZ 0 ZALL3 [J IF ON-LINE 79^2 STOZ 0 7=DL ZALL3 7=Y= STO 0 AWORK1(2) [STORE DEVICE LIST PTR IF ONLINE 7?CW EXIT 3 0 7?XG ZALL1 7#C6 SBX 3 FX1 7#WQ HUNTW 2,APED,ANOMESS [FIND THE ILLEGAL BLOCK 7*BB LDX 0 VSCOND(2) 7*W2 BNZ 0 ZALL2 [J IF ILL ID. ALREADY PRESENT 7B*L LDX 0 XJYUNALLOC(1) 7BT= STO 0 VSCOND(2) [SET REASON FOR ILLEGALITY 7C#W LDX 2 FX2 7CSG #SKI JNLPACK 7D#6 OUTPACK 5,1,PERINAME 7DRQ #SKI JNLPACK<1$1 7F?B ( 7FR2 STO 5 ACOMMUNE5(2) 7G=L LDN 0 4 7GQ= OUTPARAM 0,ACOMMUNE5 7H9W ) 7HPG ZALL2 7J96 ADX 3 FX1 7JNQ SMO FX2 7K8B STOZ AWORK1 7KN2 EXIT 3 0 7L7L # THIS SUBROUTINE CHECKS THAT THE CONTROL AREA LENGTH LOCATED BY 7LM= # THE LINK(X3) IS WITHIN RESERVATIONS & IF SO MOVES IT INTO THE 7M6W # ILLEGAL BLOCK 7MLG XGETCA 7N66 LDX 4 0(3) [X4=LENGTH OF CONTROL AREA 7NKQ SBX 3 FX1 7P5B SMO FX2 7PK2 LDX 5 AWORK3 [X5=O/P ADDRESS OF C/A 7Q4L STOZ 7 7QJ= XGETCA1 7QPD ... SMO FX1 7QWL ... ANDX 5 Q17777777 7R3W GETWORDX 5,1,XACCESS(1),6,4 [GET CONTROL AREA 7R?N ... LDX 5 AWORK3(2) 7RHG TESTREPN OK,XNOCA [J IF NOT O.K. 7S36 HUNT2 2,APED,ANOMESS 7SGQ ADN 2 VCAREA+3 7T2B ADX 2 7 7TG2 TXL 6 4 7T^L BCC XGETCA2 [J IF ALL WORDS OBTAINED 7WF= SMO 6 7WYW MOVE 1 0 [MOVE INTO ILLEGAL BLOCK 7XDG SBX 4 6 [RESET COUNT 7XY6 ADX 5 6 [RESET ADDRESS 7YCQ ADX 7 6 [AND ADDRESS 7YXB LDX 1 FX1 7^C2 BRN XGETCA1 7^WL XGETCA2 82B= SMO 4 82TW MOVE 1 0 83*G CALL 4 X2HUNT2 83T6 LDN 0 VPERI 84#Q STO 0 VCAREA(2) [STORE CATEGORY OF C/A 84SB LDX 1 FX1 85#2 ADX 3 1 85RL LDX 0 0(3) 86?= STO 0 VCAREA+2(2) [STORE LENGTH OF C/A 86QW EXIT 3 1 87=G # THIS SUBROUTINE SETS THE REASON FOR AN ILLEGALITY IN THE ILLEGAL 87Q6 # BLOCK IF NO OTHER REASON HAS YET BEEN FOUND 889Q XSETMESS 88PB CALL 4 X2HUNT2 8992 LDX 0 VSCOND(2) 89NL BNZ 0 ZNOSET 8=8= SMO 7 8=MW LDX 0 0 8?7G STO 0 VSCOND(2) 8?M6 ZNOSET 8#6Q EXIT 7 1 8#LB # THIS SUBROUTINE CHECKS A CONTROL AREA ACCORDING TO THREE PARAMS 8*62 # LOCATED BY THE LINK X3.IF AN ERROR IS FOUND IT EXITS TO THE 8*KL # APPROPRIATE LABEL. 8B5= # 1ST PARAM:-MAX VALUE OF COUNT+1.MIN VALUE ASSUMED=1 8BJW # 2ND PARAM:-ZERO OR IF+VE FORCED VALUE FOR COUNT OR IF B0=1 MIN VAL 8C4G # 3RD PARAM:-SWITCH FOR BUFFER CHECK(CHARS,CHAR+WORDS,WORDS ETC) 8CJ6 # 8D3Q XCHCA 8DHB LDX 5 VCAREA+6(2) [BUFFER ADDRESS 8F32 LDX 6 VCAREA+5(2) [COUNT 8FGL BZE 6 XCOUNT [J IF ZERO COUNT 8G2= TXL 6 0(3) 8GFW BCC XCOUNT [J IF > THAN MAX COUNT 8G^G LDX 0 1(3) 8HF6 BZE 0 ZCH1 [J IF NO FORCED OR MIN VALUE 8HYQ BPZ 0 ZCH2 [J IF NO MIN VALUE 8JDB ANDX 0 Q17777777(1) 8JY2 ZCH2 TXL 0 6 8KCL BCS ZCH1 8KX= LDX 6 0 8LBW ZCH1 8LWG ADN 3 2 8MB6 EXIT 3 0 8MTQ # 8N*B # CHARACTER COUNT & CHARACTER ADDRESS (TR,TP) 8NT2 # 8P#L XCHAR 8PS= LDCT 0 #600 8Q?W ANDX 0 5 8QRG SLC 0 2 8R?6 ADX 6 0 8RQQ # 8S=B # CHARACTER COUNT & WORD ADDRESS (CR,CP) 8SQ2 # 8T9L XCHWD 8TP= ADN 6 3 8W8W SRL 6 2 8WNG # 8X86 # WORD COUNT AND WORD ADDRESS (MT) 8XMQ # 8Y7B XWORD 8YM2 ANDX 5 VMASK(2) 8^6L FPCACA 2,FX2 8^L= CHECKBX 5,6,XNOBUFF,2 925W EXIT 3 1 92KG # 9356 # IF LP CHECK THAT CHARACTER ADDRESS=.3 93JQ # 944B XLPC LDX 0 5 94J2 SRL 0 22 953L SBN 0 3 95H= BZE 0 XCHAR 962W CALL 7 XSETMESS [REPORT'ILLEGAL OR NOT VALID' 96GG +JYCHAR 9726 BRN XFIN 97FQ # 97^B # REPORT VARIOUS OTHER ILLEGALS 98F2 # 98YL XNOCA CALL 7 XSETMESS ['CONTROL AREA OUT OF RESERVATIONS' 99D= +JYNOCA 99XW BRN XFIN 9=CG # 9=X6 XNOBUFF 9?BQ CALL 7 XSETMESS ['BUFFER OUT OF RESERVATIONS' 9?WB +JYNOBUF 9#B2 BRN XFIN 9#TL XCOUNT 9**= CALL 7 XSETMESS ['COUNT OUT OF RANGE 9*SW +JYCOUNT 9B#G BRN XFIN 9BS6 # 9C?Q XMODE CALL 7 XSETMESS ['MODE NOT RECOGNISED' 9CRB +JYMODE 9D?2 BRN XFIN 9DQL # 9F== # 9FPW # 9G9G # 9HNB #END ^^^^ ...55300774000400000000