{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: ALTINST60)}}
====== ALTINST60 ======
(George Source)
**Macros used:** [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CHNUMCO1|CHNUMCO1]], [[george:macro:COMBRKIN|COMBRKIN]], [[george:macro:COMERR|COMERR]], [[george:macro:ENDCOM|ENDCOM]], [[george:macro:ERROR|ERROR]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GETWORDX|GETWORDX]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MFREE|MFREE]], [[george:macro:MHUNT|MHUNT]], [[george:macro:MOCH|MOCH]], [[george:macro:PARANEXT|PARANEXT]], [[george:macro:PARANOT|PARANOT]], [[george:macro:PARANUMB|PARANUMB]], [[george:macro:PARAPASS|PARAPASS]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:TESTREP|TESTREP]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TESTREPNOT|TESTREPNOT]], [[george:macro:WORDFIN|WORDFIN]]
22FL #SEG ALTINST60 [E WILLIAMS
22^= 8HALTINST
23DW SEGENTRY K1ALTINST,XENT1
23YG #OPT K0ALTINST=0
24D6 #OPT K6ALTINST=K6ALLGEO>K6GREATGEO
24XQ #LIS K0ALTINST>K0ALLGEO>K0GREATGEO
25CB # THE ALTINST COMMAND
25X2 # THIS ALLOWS AN OBJECT PROGRAM LOCATION TO BE ALTERED TO
26BL # THE INSTRUCTION SPECIFIED AS THE SECOND COMMAND PARAMETER
26W= #
27*W #
27TG MSK1 #777777 [TO LOSE TOP CHAR.
28*6 MSK2 #37777 [14-BIT MASK
28SQ TWB +4096 [TWELVE BITS+1
29#B FIFB +32768 [FIFTEEN BITS+1
29S2 TENB +1024 [TEN BITS+1
2=?L MIN8192 #77760000
2=R= XBIT9 #00040000
2?=W XACCESS +GWRITE+CHNSHARED
2?QG XACCESS1 +CHWRITE
2#=6 #
2#PQ PERTAB [PERIPHERAL FOR SUSSB,REL,DIS ETC.
2*9B #00006462 [TR
2*P2 #00016460 [TP
2B8L #00025460 [LP
2BN= #00034362 [CR
2C7W #00044360 [CP
2CMG #00055564 [MT
2D76 #00064544 [ED
2DLQ #00075543 [MC
2F6B #00114462 [DR
2FL2 #00125164 [IT
2G5L #00135570 [MX
2GK= #00144364 [CT
2H4W #00154644 [FD
2HJG #00244760 [GP
2J46 #00000000 [END OF TABLE
2JHQ #
2K3B #
2KH2 PARGET
2L2L SBX 6 FX1
2LG= PARAPASS 5
2L^W MHUNT 3,CPB,CUNI
2MFG ADX 6 FX1
2M^6 EXIT 6 0
2NDQ #
2NYB #
2PD2 XGET
2PXL SBX 7 FX1
2QC= LDN 5 1 [GET ACCUMULATOR FIELD
2QWW CALL 6 PARGET
2RBG LDCH 5 APARA(3)
2RW6 ADX 7 FX1
2S*Q LDX 6 ANUM(3)
2STB ANDN 6 #7777
2T*2 LDX 0 APARA(3)
2TSL SRL 0 12
2W#= BCT 6 Q2 [J IF NOT JUST 1 CHAR
2WRW ANDN 0 #7000
2X?G BNZ 0 XERR5 [ERROR IF CHAR NOT IN RANGE
2XR6 EXIT 7 1 [EXIT FOR 1 CHAR
2Y=Q Q2 BCT 6 XERR5 [ERROR IF NOT 1 OR 2 CHARS
2YQB ANDN 0 #7070
2^=2 BNZ 0 XERR5 [ERROR IF CHARS NOT IN RANGE
2^PL EXIT 7 0 [EXIT FOR 2 CHARS
329= #
32NW MOCH
338G SBX 7 FX1
33N6 LDN 5 1
347Q CALL 6 PARGET
34MB ADX 7 FX1
3572 NGX 5 ANUM(3)
35LL BPZ 5 XFR2
366= NGX 5 5
36KW SRL 5 12
375G SBN 5 3
37K6 EXIT 7 1
384Q XFR2
38JB EXIT 7 0
3942 #
39HL MGET
3=3= SBX 7 FX1
3=GW LDX 5 AWORK2(2)
3?2G ANDX 5 BITS22LS
3?G6 LDN 6 1
3?^Q PARANEXT ,6,5 [DPLIT PARAM.
3#FB TESTREP UNPAIR,XERR9
3#LJ ...#UNS ANSTOOMANY
3#RQ ... TESTREP2 TOOMANY,XERRA
3#^2 LDN 5 2
3*DL CALL 6 PARGET
3*Y= LDX 5 ANUM(3) [GET M-FIELD
3BCW BZE 5 XERR9 [ERROR IF NULL
3BXG LDN 6 4
3CC6 BCHX 3 £
3CWQ LDCH 5 APARA(3) [GET MOD. CHAR.
3DBB ANDX 3 BITS22LS
3DW2 TXL 5 6 [ILLEGAL IF M>3
3F*L BCC XERR9
3FT= BZE 5 XERR9 [ILLEGAL IF M=0
3G#W SLL 5 12
3GSG ORX 4 5 [SET M-FIELD
3H#6 FREECORE 3
3HRQ MHUNT 3,CPB,CUNI [GET N-FIELD BLOCK
3J?B ADX 7 FX1
3JR2 EXIT 7 0
3K=L #
3KQ= NGET
3L9W SBX 7 FX1
3LPG MHUNT 3,CPB,CUNI
3M96 NGX 5 ANUM(3)
3MNQ BPZ 5 XERR6 [ERROR IF NO PARAM.
3N8B CALL 6 XCON
3NN2 ADX 7 FX1
3P7L LDX 5 ACOMMUNE1(2)
3PM= NCHL
3Q6W LDX 6 AWORK1(2)
3QLG LDX 0 AWORK2(2)
3R66 SLL 0 1
3RKQ BPZ 0 NFC [J AS MNEMONIC PARAMETER FOR SHIFT
3S5B ERN 6 #140 [SET 12-BIT N-RANGE AS FN. CODE
3SK2 NFC ANDN 6 #160 [[MASK NQRANGE
3T4L LDN 0 #40
3TJ= TXU 0 6
3W3W BCS N12 [BRANCH IF NOT 12-BIT LIMIT
3WHG TXL 5 TWB(1)
3X36 BCC XERR7 [BRANCH IF NOT IN RANGE
3XGQ BRN PQR5
3Y2B N12 LDN 0 #20
3YG2 TXU 0 6
3Y^L BCS N15 [BRANCH IF NOT 15-BIT LIMIT
3^F= TXL 5 FIFB(1)
3^YW BCC XERR7 [BRANCH IF NOT IN RANGE
42DG BRN PQR5
42Y6 N15 TXL 5 TENB(1)
43CQ BCC XERR7 [J IF NOT IN RANGE
43XB EXIT 7 0
44C2 #
44WL #
45B= XCON
45TW SBX 6 FX1
46*G #SKI ADELO
46T6 CHNUMCO1 1,ZBRKN
47#Q #SKI ADELO<1$1
47SB CHNUMCO1 1
48#2 TESTREP CHNUMERR,XERR7
48RL ADX 6 FX1
49?= EXIT 6 0
49QW #
4==G XDUB [CHECKS IF 2* LENGTH ACC FIELD LEGAL & CORRECT FORMAT
4=Q6 LDX 0 AWORK1(2)
4?9Q ANDN 0 #10
4?PB BZE 0 XERR5 [ERROR IF 2* LENGTH ACC FIELD ILLEGAL
4#92 LDX 0 APARA(3)
4#NL SRL 0 12
4*8= SBN 0 1
4*MW ANDN 0 7
4B7G BXU 0 5,XERR5 [ERROR IF NOT 01,12 ETC OR 70
4BM6 ORX 4 XBIT9(1) [INSERT '2* LENGTH' BIT IN INSR WORD
4C6Q EXIT 7 0
4CLB #
4D62 XENT1
4DKL LDN 5 1
4F5= PARANUMB 7,5 [NO. OF PARAMS. INTO X7
4FJW ORS 7 AWORK2(2)
4G4G SMO 6
4GJ6 BRN ROUTS [BRANCH TO APPROPRIATE ROUTINE
4H3Q ROUTS BRN ROUT0 [NORMAL ROUTINE
4HHB BRN ROUT1 [BRANCH ROUTINE
4J32 BRN ROUT2 [DEFINED ACCUMULATOR ROUTINE
4JGL BRN ROUT3 [SHIFT ROUTINE
4K2= BRN ROUT4 [PERIPHERAL ROUTINE
4KFW BRN ROUT5 [SPECIAL ROUTINE
4K^G BRN ROUT6 [ACCUMULATOR BRANCH ROUTINE
4LF6 #
4LYQ OUT
4MDB MFREE CPB,CUNI
4MY2 LDX 5 AWORK4(2) [GET CONVERSION
4NCL #SKI G4
4NX= (
4PBW LDN 3 0
4PWG PARANOT 1,3
4QB6 MHUNT 3,CPB,CUNI
4QTQ LDCH 0 APARA(3)
4R*B SBN 0 #60
4RT2 BNZ 0 NPURE
4S#L LDX 3 XACCESS(1)
4SS= BRN PURE
4T?W NPURE
4TRG )
4W?6 LDX 3 XACCESS1(1)
4WQQ PURE
4X=B #SKI ADELO<1$1
4XQ2 GETWORDX 5,6,3
4Y9L #SKI ADELO
4YP= (
4^8W GETWORDX 5,6,3,,,ZBRKN
4^NG TESTREP LOADERR,XERR2
5286 )
52MQ TESTREPNOT NOCORE,XNEX
537B ERROR GWERNO
53M2 BRN XUP
546L XNEX TESTREPNOT RESVIOL,XOK
54L= ERROR GWERRES
555W BRN XWF
55KG XOK SMO 6
5656 STO 4 0 [CHANGE WORD
56JQ XWF WORDFIN [TIDY UP OBJ. PROG.
574B XUP ENDCOM
57J2 #
583L #
58H= # ERROR IF NUMBER FORMAT ERROR OR RES. VIOC.
592W XERR8 WORDFIN
59GG XERR2 ENDCOM
5=26 #
5=^B # ERROR FOR INVALID ACCUMULATOR FIELD
5?F2 XERR5
5?YL COMERR JINVACC
5#D= # INSTRUCTION FORMAT ERROR
5#XW XERR6
5*CG COMERR JINSFERR
5*X6 # ERROR FOR INVALID OPERAND FIELDS
5BBQ XERR7
5BWB COMERR JINVOP
5CB2 # ERROR FOR INVALID MODIFIER FIELD
5CTL XERR9
5D*= COMERR JINVMOD
5DCT ...#UNS ANSTOOMANY
5DGD ...(
5DK3 ...XERRA
5DML ... COMERR JMAXPAR
5DQ9 ...)
5DSW #SKI ADELO
5F#G ...ZBRKN COMBRKIN
5FS6 #
5G?Q #
5GRB ROUT0
5H?2 SBN 7 4
5HQL BPZ 7 XERR6 [ERROR IF 4 PARAMS.
5J== ADN 7 4
5JPW LDX 6 AWORK1(2)
5K9G ANDN 6 5
5KP6 SBN 6 5
5L8Q BZE 6 PQR1 [J IF 3 FIELDS REQD.
5LNB SBN 7 3
5M82 BZE 7 XERR6 [J IF THREE FIELDS
5MML ADN 6 4
5N7= BNZ 6 PQR8 [J IF OMLY N-FIELD
5NLW ADN 7 4 [DROP THROUGH AS ONLY X-FIELD
5P6G PQR1 SBN 7 3
5PL6 BNZ 7 XERR6 [J IF ONLY 2 FIELDS
5Q5Q CALL 7 XGET
5QKB CALL 7 XDUB [2* LENGTH OK FOR NORM INSTR
5R52 PQR2 SRC 5 3 [PLACE X-FIELD
5RJL ORX 4 5 [PLACE X-FIELD
5S4= PQR6 FREECORE 3
5SHW PQR8 CALL 7 MOCH
5T3G BRN PQR3
5TH6 ADN 5 1
5W2Q BZE 5 XERR7 [ERROR IF M-FIELD WITHOUT N-FIELD
5WGB BNG 5 PQR4 [BRANCH IF NO M-FIELD
5X22 PQR7 LDX 7 AWORK1(2)
5XFL ANDN 7 2
5X^= BZE 7 XERR6 [J IF NO M-FIELD ALLOWED
5YDW CALL 7 MGET
5YYG PQR3 LDX 2 AWORK1(2)
5^D6 ANDN 2 4
5^XQ BNZ 2 PQR4 [J IF N-FIELD NECESSARY
62CB STOZ 5
62X2 BRN PQR5 [BRANCH AS NO N-FIELD
63BL PQR4 CALL 7 NGET
63W= PQR5 MFREE CPB,CUNI
64*W ORX 4 5 [SET N-FIELD
64TG BRN OUT [EXIT TO MAIN ROUTINE
65*6 #
65SQ ROUT1
66#B SBN 7 3
66S2 BNZ 7 XERR6 [ERROR IF NOT 3 FIELDS
67?L CALL 7 XGET
67R= BRN XERR5 [ERROR IF >1 CHAR.
68=W SRC 5 3
68QG ORX 4 5 [SET X-FIELD
69=6 RST6 FREECORE 3
69PQ RST4 CALL 7 MOCH
6=9B BRN XERR6
6=P2 BZE 5 XERR6
6?8L ADN 5 1
6?N= BNZ 5 RST1 [J AS NOT REPLACED
6#7W RST5 LDX 0 AWORK1(2)
6#MG ANDN 0 #200
6*76 BZE 0 XERR7 [ERROR IF REPLACED BRANCH NOT ALLOWED
6*LQ CALL 6 XCON [REPLACED JUMP OPERAND STILL VALID
6B6B [ FOR CHNUMCO1 THOUGH ENCLOSED IN ()
6BL2 LDX 5 ACOMMUNE1(2)
6C5L LDCT 6 1
6CK= SRL 6 1
6D4W ORX 5 6 [SET REPLACED BIT
6DJG BRN RST3
6F46 RST1 LDCH 7 APARA(3)
6FHQ SBN 7 #32
6G3B BNZ 7 RST2 [IF 1ST CHAR NOT A *,BRANCH
6GH2 LDX 0 MSK1(1) [ OTHERWISE OVERWRITE BY 0
6H2L ANDS 0 APARA(3)
6HG= RST2 CALL 6 XCON [CONVERTED NUMBER
6H^W LDX 5 ACOMMUNE1(2) [ TO X5
6JFG MFREE CPB,CUNI
6J^6 BNZ 7 RST10 [IF 1ST CHAR NOT A *,BRANCH
6KDQ ADX 5 AWORK4(2) [ OTHERWISE MAKE RELATIVE BRANCH ABS.
6KYB RST10 BPZ 5 RST3
6LD2 BXL 5 MIN8192(1),XERR7 [REL BRN OF OVER -8192 ILLEGAL
6LXL ANDX 5 MSK2(1)
6MC= RST3 CALL 7 NCHL
6MWW BRN OUT [EXIT
6NBG #
6NW6 ROUT2
6P*Q LDN 0 PQR8 [SET EXIT ADDRESS
6PTB OPQ2 LDX 6 AWORK2(2)
6Q*2 STO 0 AWORK3(2) [[STORE EXIT POINT
6QSL BPZ 6 XMN [J IF MNEMONIC PARAMETER
6R#= CALL 7 XGET [OTHERWISE ASSUME FN. CODE
6RRW BRN XERR5 [J IF ILLEGAL ACCUMULATOR
6S?G SRC 5 3
6SR6 ORX 4 5 [SET ACCUMULATOR FIELD
6T=Q FREECORE 3
6TQB BRN OPQ1
6W=2 XMN SBN 7 2
6WPL BNZ 7 XERR6 [ERROR IF F,X, AND N SPECIFIED
6X9= LDX 6 AWORK1(2)
6XNW LDCT 7 #700 [MASK ACCUMULATOR FIELD
6Y8G ANDS 7 6
6YN6 ORX 4 6 [SET XQFIELD
6^7Q OPQ1 LDX 7 AWORK3(2) [GET EXIT ADDRESS
6^MB ADX 7 FX1
7272 EXIT 7 0
72LL #
736= ROUT3
73KW SBN 7 3
745G BNZ 7 XERR6 [ERROR IF NOT X,F,N FIELDS PRESENT
74K6 LDX 2 FX2
754Q LDX 7 AWORK2(2)
75JB BNG 7 UVW4 [J IF FN. CODE PARAMETER
7642 LDX 6 AWORK1(2) [GET BIT-PATTERN
76HL SRL 6 11
773= ANDN 6 #6000 [MASK OUT UNWANTED BITS
77GW ORX 4 6 [SET IN SHIFT DEFINITION FIELD
782G UVW4 CALL 7 XGET
78G6 CALL 7 XDUB [CHECK FOR 2* LENGTH SHIFT
78^Q SRC 5 3 [SHIFT X-FIELD
79FB ORX 4 5 [SET IN WORD
79^2 LDX 6 AWORK2(2)
7=DL BPZ 6 UVW3 [J IF NOT FN. CODE PARAMETER
7=Y= LDCT 6 #200
7?CW ORS 6 AWORK2(2) [SET BIT TO SHOW FN. CODE SHIFT
7?XG UVW3 BRN PQR6 [J TO SET N-FIELD
7#C6 #
7#WQ ROUT4
7*BB LDX 0 7
7*W2 SBN 0 3
7B*L BZE 0 ROUT0
7BT= LDN 5 1
7C#W CALL 6 PARGET [GET FIRST PARAM
7CSG LDCH 6 APARA(3)
7D#6 SBN 6 #41
7DRQ BNG 6 XERR6 [ERROR IF NOT PERIPH. TYPE
7F?B LDX 5 APARA(3)
7FR2 SRL 5 12 [TYPE IN X5
7G=L LDN 1 PERTAB(1) [START OF TABLE
7GQ= XYZ4 LDX 6 0(1)
7H9W BZE 6 XERR6 [ERROR IF END OF TABLE
7HPG ANDN 6 #7777 [TYPE IN X6
7J96 SBX 6 5
7JNQ BZE 6 XYZ3 [J IF TYPE FOUND
7K8B ADN 1 1
7KN2 BRN XYZ4 [LOOP
7L7L XYZ3 LDX 5 0(1) [GET PERIPH TYPE
7LM= SRL 5 12
7M6W ORX 4 5 [SET IN X4
7MLG LDX 6 ANUM(3)
7N66 ANDN 6 #77
7NKQ SBN 6 3
7P5B BNZ 6 XERR6 [ERROR IF NOT 3 CHARS.
7PK2 LDX 6 APARA(3) [GET PARAM.
7Q4L SRL 6 6
7QJ= ANDN 6 #77
7R3W SBN 6 8
7RHG BPZ 6 XERR7
7S36 ADN 6 8
7SGQ SRC 6 3 [POSITION UNIT NO.
7T2B ORX 4 6 [SET UNIT NUMBER
7TG2 FREECORE 3
7T^L BRN OUT [EXIT
7WF= #
7WYW ROUT5
7XDG SBN 7 1
7XY6 BZE 7 SINP [J IF ONE
7YCQ SBN 7 1
7YXB BZE 7 TWOP [J IF TWO
7^C2 SBN 7 1
7^WL BNZ 7 XERR6 [J IF >3
82B= CALL 7 XGET [GET X-FIELD
82TW ... BRN XERR5
83*G LDX 6 4
83T6 SRC 6 12
84#Q LDN 7 PQR6 [SET EXIT LOCN.
84SB SBN 6 #714
85#2 BNZ 6 VOK1 [J IF NOT AUTO
85RL XAUT SBN 5 4
86?= BNG 5 VOK1
86QW BRN XERR5 [ERROR IF X>4
87=G VOK1 LDCH 5 APARA(3)
87Q6 SRC 5 3
889Q ORX 4 5
88PB ADX 7 FX1
8992 EXIT 7 0 [J TO NEXT ROUTINE
89NL SINP
8=8= LDX 6 4
8=MW SRC 6 15
8?7G SBN 6 #57
8?M6 BNZ 6 XERR6 [ERROR IF NOT LFPZ
8#6Q LDCT 6 #100
8#LB ORX 4 6
8*62 BRN PQR8
8*KL TWOP
8B5= LDX 6 4
8BJW SRC 6 12
8C4G SBN 6 #474
8CJ6 BZE 6 VOX
8D3Q SBN 6 #100
8DHB BNZ 6 XERR6 [ERROR IF NOT SMO OR SFPZ
8F32 VOX BRN PQR8
8FGL #
8G2= #
8GFW ROUT6
8G^G LDN 0 RST4 [SET ECIT POINT
8HF6 BRN OPQ2
8HYQ #
8JDB #
8JY2 ... MENDAREA 30,K100ALTINST
8KX= #END
^^^^ ...12321524000400000000