{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: ILLPERI70)}}
====== ILLPERI70 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:CHECKBX|CHECKBX]], [[george:macro:FPCACA|FPCACA]], [[george:macro:FPERENT|FPERENT]], [[george:macro:GETWORDX|GETWORDX]], [[george:macro:HUNT2|HUNT2]], [[george:macro:HUNTW|HUNTW]], [[george:macro:JWPR|JWPR]], [[george:macro:LPROP|LPROP]], [[george:macro:OUTPACK|OUTPACK]], [[george:macro:OUTPARAM|OUTPARAM]], [[george:macro:PERTYPNO|PERTYPNO]], [[george:macro:SEGENTRY|SEGENTRY]]
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