PERCON867
(George Source)
Macros used: ALTLEND, AND, BXE, BXGE, BXL, BXU, CHNUMCO1, CHNUMCOD, ERRORX, FI, HUNT, IF, JANAL, JBC, LOCK, MENDAREA, MFREE, MHUNT, MONOUT, NAME, OUTNUM, PARABEG, PARAFREE, PARALYSE, PARANOTX, PARANUMB, PARAPASS, QLOGIC, QTABENT, SEG, SEGENTRY, SETNCORE, SETREP, TESTREP, TESTREP2, THEN, TRACE, UNLOCK, UP
- PERCON867.txt
2278 ... SEG PERCON,867,SECTION CENT,,G505 22#B ...[ 22FJ ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 22LQ ...[ THIS EXCLUDES CODE UNDER #SKI G505 22RY ...[ 22^= #OPT K0PERCON=0 23DW #LIS K0PERCON>K0ALLGEO>K0GREATGEO>K0UTILITY 23YG #DEF TRACE=K6PERCON 24D6 [ 24XQ [ THIS SEGMENT SERVICES THE PERCON,PERCONA AND QUALCON MACROS 25CB [ 25JJ ...#OPT G505 = 0 25PQ ...#SKI G505&1 25WY ...# WITH UGUG EDIT M505 (3-SHIFT WORKING FOR MOP ONLINE PROGRAMS) 2646 ...[ 269# ...[ 26BL [ 26W= [ ENTRY POINTS 27*W SEGENTRY K1PERCON,ZEP1 [ENTRY FROM PERCON MACRO 27TG SEGENTRY K2PERCON,ZEP2 [ENTRY FROM QUALCON MACRO 28*6 SEGENTRY K3PERCON,ZEP3 [ENTRY FROM PERCONA MACRO 28SQ [ 29#B THIRTEEN +13 29J8 TWELVE +12 29S2 TEN +10 2=?L THREE +3 2=HD TWO56 +256 2=R= SIXFOUR +64 2?=W TYPBAD #4000 2?QG X4 +4 2#=6 X161 +161 2#PQ # 2*9B # ERROR MESSAGES 2*P2 QERM +ILLQUAL [%C CONTAINS ILLEGAL QUALIFIER 2B8L UERM +ERRPERC [%C IS NOT A CORRECT PERIPHERAL NAME 2BDD TERM +JMAXPAR [>24 PARAMS WITHIN BRACKETS 2BN= XERM +ERUNPAIR [%C CONTAINS AN UNPAIRED DELIMETER 2C7W ZERM +INCOMQU [%C CONTAINS INCOMPATIBLE QUALIFIERS 2CMG # 2D76 # IDENTIFIERS IN THE QTABENT MACRO ENTRIES 2DLQ #DEF WFLAG=0 2F6B #DEF WQUAL=WFLAG+1 2FL2 #DEF WPER2=WQUAL+2 2G5L #DEF WPER3=WPER2+1 2GK= #DEF WPER4=WPER3+1 2H4W #DEF WENTR=WPER4+1 [SIZE OF ENTRY 2HJG [LIST OF ACCEPTABLE PERIPHERAL MNEMONICS AND CORRESPONDING NUMERICAL 2J46 [CODES 2JHQ [ 2K3B TYPES #00006462 [TYPE 0 TR TAPE READER 2KH2 #01006460 [TYPE 1 TP TAPE PUNCH 2L2L #02005460 [TYPE 2 LP LINE PRINTER 2LG= #03004362 [TYPE 3 CR CARD READER 2L^W #04004360 [TYPE 4 CP CARD PUNCH 2MFG #05005564 [TYPE 5 MT MAGNETIC TAPE 2M^6 #06004544 [TYPE 6 ED EXCHANGEABLE DISC STORE 2NDQ #06004441 [TYPE 6 ALSO DA UNDER UDAS 2NYB #07005543 [TYPE 7 MC MAG CARD FILE 2PD2 #10004444 [TYPE 8 DD DATA DISC STORE 2PXL #11004462 [TYPE 9 DR MAGNETIC DRUM 2QC= #12005164 [TYPE 10 IT UNIPLEXOR 2QWW #12006570 [TYPE 10 UNIPLEXOR 2RBG #12006556 [TYPE 10 UNIPLEXOR 2RW6 #13005570 [TYPE 11 MX MULTIPLEXOR 2S*Q #14004364 [TYPE12 CT CASSETTE TAPE 2STB #06004644 [TYPE 6 (PRE-UDAS13) FD FIXED DISC 2T*2 #SKIP APER14 2TSL #HAL #1601,+APER14 2W#= #SKIP APER15 2WRW #HAL #1701,+APER15 2X?G #SKIP APER16 2XR6 #HAL #2001,+APER16 2Y=Q #SKIP APER17 2YQB #HAL #2101,+APER17 2^=2 #SKIP APER18 2^PL #HAL #2201,+APER18 329= #SKIP APER19 32NW #HAL #2301,+APER19 338G #SKIP APER20 33N6 #HAL #2401,+APER20 347Q #SKIP APER21 34MB #HAL #2501,+APER21 3572 #SKIP APER22 35LL #HAL #2601,+APER22 366= #SKIP APER23 36KW #HAL #2701,+APER23 375G #SKIP APER24 37K6 #HAL #3001,+APER24 384Q #SKIP APER25 38JB #HAL #3101,+APER25 3942 #SKIP APER26 39HL #HAL #3201,+APER26 3=3= #SKIP APER27 3=GW #HAL #3301,+APER27 3?2G #SKIP APER28 3?G6 #HAL #3401,+APER28 3?^Q #SKIP APER29 3#FB #HAL #3501,+APER29 3#^2 #SKIP APER30 3*DL #HAL #3601,+APER30 3*Y= #SKIP APER31 3BCW #HAL #3701,+APER31 3BXG #SKIP APER32 3CC6 #HAL #4001,+APER32 3CWQ #SKIP APER33 3DBB #HAL #4101,+APER33 3DW2 #SKIP APER34 3F*L #HAL #4201,+APER34 3FT= #SKIP APER35 3G#W #HAL #4301,+APER35 3GSG #SKIP APER36 3H#6 #HAL #4401,+APER36 3HRQ #SKIP APER37 3J?B #HAL #4501,+APER37 3JR2 #SKIP APER38 3K=L #HAL #4601,+APER38 3KQ= #SKIP APER39 3L9W #HAL #4701,+APER39 3LPG #SKIP APER40 3M96 #HAL #5001,+APER40 3MNQ #SKIP APER41 3N8B #HAL #5101,+APER41 3NN2 #SKIP APER42 3P7L #HAL #5201,+APER42 3PM= #SKIP APER43 3Q6W #HAL #5301,+APER43 3QLG #SKIP APER44 3R66 #HAL #5401,+APER44 3RKQ #SKIP APER45 3S5B #HAL #5501,+APER45 3SK2 #SKIP APER46 3T4L #HAL #5601,+APER46 3TJ= #SKIP APER47 3W3W #HAL #5701,+APER47 3WHG #SKIP APER48 3X36 #HAL #6001,+APER48 3XGQ #SKIP APER49 3Y2B #HAL #6101,+APER49 3YG2 #SKIP APER50 3Y^L #HAL #6201,+APER50 3^F= #SKIP APER51 3^YW #HAL #6301,+APER51 42DG #SKIP APER52 42Y6 #HAL #6401,+APER52 43CQ #SKIP APER53 43XB #HAL #6501,+APER53 44C2 #SKIP APER54 44WL #HAL #6601,+APER54 45B= #SKIP APER55 45TW #HAL #6701,+APER55 46*G #SKIP APER56 46T6 #HAL #7001,+APER56 47#Q #SKIP APER57 47SB #HAL #7101,+APER57 48#2 #SKIP APER58 48RL #HAL #7201,+APER58 49?= #SKIP APER59 49QW #HAL #7301,+APER59 4==G #SKIP APER60 4=Q6 #HAL #7401,+APER60 4?9Q #SKIP APER61 4?PB #HAL #7501,+APER61 4#92 #SKIP APER62 4#NL #HAL #7601,+APER62 4*8= #SKIP APER63 4*MW #HAL #7701,+APER63 4B7G #REP 5 4BM6 +0 [END OF TABLE MARKER 4C6Q [ 4CLB [LIST OF QUALIFIER TABLES . EACH TYPE HAS A HALF WORD ENTRY IN THE 4D62 [FOLLOWING FORMAT : #4000 IF TYPE IS ILLEGAL (EG *HD TYPE 25) 4DKL [ ELSE ADDRESS OF HEAD OF QUALIFIER TABLE 4F5= [ 0 IF TYPE CAN HAVE NO QUALIFIERS 4FJW [ 4G4G TYPLIST 4GJ6 #HAL +TYP0,+TYP1 [TR TP 4H3Q #HAL +TYP2,+TYP3 [LP CR 4HHB #HAL +TYP4,+TYP5 [CP MT 4J32 #HAL +TYP6,+0 [DA 7 4JGL #HAL +0,+TYP9 [8 DR 4K2= #HAL +0,+0 [10 MX 4KFW #HAL +0,#4000 [12 13 (*13 -> *06 BEFORE HERE 4K^G #HAL +0,+0 [14 15 4LF6 #HAL +0,+0 [16 17 4LYQ #HAL +0,+0 [18 19 4MDB #HAL +0,+0 [20 21 4MY2 #HAL +0,+0 [22 23 4NCL #HAL TYP24,#4000 [CC HD 4NX= #HAL #4000,+0 [26 (EDS30) 27 4PBW #HAL +TYP28,+0 [PB 29 4PWG #HAL +0,+0 [30 31 4QB6 #HAL +0,+0 [32 33 4QTQ #HAL +0,+0 [34 35 4R*B #HAL +0,+0 [36 37 4RT2 #HAL +0,+0 [38 39 4S#L #HAL +0,+0 [40 41 4SS= #HAL +0,+0 [42 43 4T?W #HAL +0,+0 [44 45 4TRG #HAL +0,+0 [46 47 4W?6 #HAL +0,+0 [48 49 4WQQ #HAL +TYP50,+TYP51 [FR FW 4X2J #SKI JSKI19<1$1 4X=B #HAL +0,+0 [52 53 4XCJ #SKI JSKI19 4XJQ #HAL +TYP52,+0 [52 53 4XQ2 #HAL +0,+0 [54 55 4Y9L #HAL +0,+0 [56 57 4YP= #HAL +0,+0 [58 59 4^8W #HAL +TYP60,+0 [CI 61 4^NG #HAL +0,+0 [62 63 5286 [ 52MQ [THERE NOW FOLLOWS THE QUALIFIER TABLES ACCESSED THROUGH TYPLIST.EACH 537B [HAS HEADER,ENTRY LIST,TAIL. 53M2 [HEADER IS POINTER TO APPROPRIATE LOGIC TABLE 546L [EACH ENTRY IS EITHER A QTABENT MACRO ENTRY (QV) OR,IF B0 OF WORD 0 54L= [ IS SET,B12-23 POINT TO NEXT ENTRY 555W [TAIL IS A ZERO WORD 55KG [ 5656 [EACH QUALIFIER HAS A LEVEL NUMBER (LN). NO 2 QUALS WITH SAME LN CAN 56JQ [OCCUR TOGETHER. P<LN> IS'TRUE'IF QUALIFIER IS PRESENT,ELSE'FALSE';THE 574B [CONJUNCTION OF THE PARAMETERS OF THE APPROPRIATE QLOGIC MACRO IS'TRUE' 57J2 [IF THE CORRESPONDING QUALIFIER COMBINATION IS ILLEGAL 583L [ 58H= TYP2 +TYP2L 592W QTABENT 4,AUTO,1,0,0,0,XTAUTO 59=N QTABENT 8,EXTENDED,1,#00040000,0,0 59*K ...#SKI G505&1 59DG ... +TYP3+1.2 59HC ...#SKI G505&1$1 59LC +TYP1+1.2 [-> OTHER SLOW PERIPHERALS 5=26 [ 5=9Y TYP0 +TYP0L 5=FQ QTABENT 6,NLNULL,1,#00020000,0,0 5=J* ...#SKI G505&1 5=LY ... QTABENT 6,CURSOR,1,0,0,#20060000 5=PJ +TYP1+1.2 5=^B TYP1 5?3# ...#SKI G505&1 5?5= ...( 5?78 ... +TYP0L 5?96 ... QTABENT 6,NORMAL,1,0,0,#00040000 5??4 ... QTABENT 7,ALLCHAR,1,0,0,#00060000 5?*2 ... +TYP3+1.2 5?BY ...) 5?F2 TYP3 5?YL TYP4 5#4H TYP50 5#8D TYP51 5##* TYP52 5#D= +TYP0L 5#XW QTABENT 8,IDENTIFY,0,0,0,0.2 5*CG +TYPCOMMON+1.2 [-> COMMON QUALIFIERS 5*X6 [ 5BBQ TYP5 +TYP5L 5BWB QTABENT 4,MODE,1,0,#74,0,XTMODE 5CB2 T5AND28 5CTL QTABENT 4,READ,0,0,1,0 5D*= QTABENT 5,WRITE,0,1,1,0 5DSW +TYPCOMMON+1.2 [-> COMMON QUALIFIERS 5F#G TYP6 5FS6 TYP13 5G?Q +TYP6L 5GRB QTABENT 4,READ,0,#200,0,0 5H?2 QTABENT 5,WRITE,0,#300,0,0 5HQL QTABENT 7,OVERLAY,0,#100,0,0 5J== QTABENT 6,OFFSET,0,#400,0,0 5JPW QTABENT 7,SCRATCH,0,#600,0,0 5K9G +TYPCOMMON+1.2 [-> COMMON QUALIFIERS 5KP6 TYP28 5L8Q +TYP28L 5LNB QTABENT 3,IMC,1,0,2,0 5M82 QTABENT 3,WMC,1,2,2,0 5MML QTABENT 5,DELAY,2,0,0,0,XTDELAY 5N7= +T5AND28.2 [-> READ & WRITE - SAME AS *MT 5NLW [ NOW THE COMMON QUALIFIERS. THE NUMBER OF COMMON QUALIFIER LEVELS IS 5P6G [ THE VALUE OF GCOMQU , DEFINED IN COMPS PERCON 5PL6 TYPCOMMON 5Q5Q TYP9 5QKB TYP11 5R52 TYP24 5SHW TYP60 5T3G +TYPCOMMONL 5TH6 #SKI ARETLO 5W2Q QTABENT 4,KEEP,-1,0,0,0.1 5WGB +0 [END OF TABLES - (IE ROOT OF TREE) 5X22 [ 5XFL [ NOW THE LOGIC TABLES - IN FACT THEY ARE ALL DEGENERATE , SO WE MAP 5X^= [ THEM ALL INTO A SINGLE QLOGIC ENTRY 5YDW TYP0L 5YYG TYP2L 5^D6 TYP5L 5^XQ TYP6L 62CB TYP28L 62X2 TYPCOMMONL 63BL QLOGIC -GCOMQU,2 63W= [ 64*W [ NOW THE ACTUAL CODE 64TG [ AWORK1,2 ARE USED AS FOLLOWS 65*6 [ AWORK1 B0-5 CP LEVEL OF MULTI BLOCK HOLDING QUALIFIERS 65SQ [ B12 SET IF NO UNIT NUMBER SPECIFIED 66#B [ B13 SET IF ENTERED FROM PERCON 66S2 [ B14 SET IF ENTERED FROM QUALCON 67?L [ B15 SET IF UNI CNTG PERL NAME+ QUALS SET UP 67R= [ B16 SET IF CPAR/GPERCON BLOCK SET UP 68=W [ AWORK2 B0-11 ADDRESS OF QLOGIC ENTRY FOR THIS TYPE 68QG [ B12-23 ADDRESS OF CURRENT QTABENT ENTRY 69=6 [ 69PQ ZEP1 [ENTRY FROM PERCON MACRO 6=9B LDN 0 #2000 6=P2 STO 0 AWORK1(2) [CLEAR FLAGS - B13=1 FOR PERCON ENTRY 6?8L LDX 4 ACOMMUNE7(2) 6?N= BZE 4 UXIST [J IF UNI BLOCK PASSED TO MACRO 6#7W PARANOTX 4 [ ELSE SET UP ONE FOR ERROR MESSAGES 6#MG LDN 0 #400 6*76 ORS 0 AWORK1(2) [ AND SET FLAG TO REMEMBER IT 6*LQ UXIST HUNT 3,CPB,CUNI 6B6B BNG 3 (GEOERR) [GEORGE ERROR IF NOT FOUND 6BL2 NGX 0 ANUM(3) 6C5L BPZ 0 UERR [ERROR IF ITS NULL OR ABSENT 6CK= LDX 4 ATYPE(3) 6D4W ANDN 4 #7777 [GET PARAMETER NUMBER 6DJG SET LDN 5 0 [SET ANALYSIS LEVEL 6F46 PARALYSE ,5,4 [SPLIT INTO <PERIPHERAL NAME> AND 6F9# #UNS ANSTOOMANY 6FBG #SKI 6FHQ TESTREP UNPAIR,XERR [J IF ANALYSIS ERROR 6FNY #UNS ANSTOOMANY 6FW6 TESTREP2 UNPAIR,XERR,TOOMANY,TERR [J IF ANALYSIS ERROR 6G3B PARANUMB 4 6GH2 BXGE 4 THREE(1),UERR 6H2L BZE 4 UERR [J IF NOT 1 OR 2 PARAMETERS PRODUCED 6HG= PARAPASS [GET <PERIPHERAL NAME> 6H^W BRN START 6JFG [ 6J^6 ZEP3 [ENTRY FROM PERCONA MACRO 6KDQ STOZ AWORK1(2) [CLEAR FLAGS - B13=0 FOR PERCONA ENTR 6KYB START MHUNT 3,CPB,CUNI [LOCATE PARAMETER 6LD2 LDX 6 ANUM(3) 6LXL BNG 6 UERR1 [J IF NON-EXISTENT 6MC= BZE 6 UERR1 [ OR NULL 6MWW ANDN 6 #7777 6NBG ADN 3 APARA 6NW6 LDCH 0 0(3) 6P*Q SBN 0 #32 6PTB BNZ 0 UERR2 [J IF FIRST CHARACTER NOT * 6Q*2 CALL 0 ZCHAR [ADVANCE TO NEXT CHARACTER 6QSL BRN UERR2 [ AND J IF THERE IS NONE 6R#= CALL 7 ZNUM [TRY TO CONVERT NEXT TWO 'NUMBERS' 6RRW BZE 7 NUM [J IF TWO NUMBERS CONVERTED OK 6S?G SBN 7 1 6SR6 BZE 7 UERR2 [J IF JUST ONE NUMBER CONVERTED-ERROR 6T=Q CALL 7 ZMNEM [ ELSE TRY TO MATCH UP MNEMONIC 6TQB BRN UERR2 [J IF MNEMONIC NOT RECOGNISED 6W=2 NUM BXGE 5 SIXFOUR(1),UERR2 [J IF CONVERTED TYPE NOT < 64 6WPL BXU 5 THIRTEEN(1),NFD [REPLACE TYPE 13 BY TYPE 6 6X9= LDN 5 6 6XNW NFD SRC 5 9 6Y8G STO 5 AWORK2(2) [TYPE TO B0-8 6Y9# SEGENTRY K90PERCON [ENTRY FOR MANYDA RESTORE MACRO 6Y=6 BRN XK91 6Y=Y SLC 5 9 6Y?Q SBN 5 6 6Y#J BNZ 5 XK91 [J IF NOT DA 6Y*B BZE 6 NOUNNO [J IF NO UNIT NO 6YB8 LDN 7 3 [CHAR CT FOR UNIT NO 6YC2 LDN 4 0 6YCS LDN 5 0 6YDL ZUNUM CDB 4 0(3) 6YFD BCS ZUNUM1 6YG= CALL 0 ZCHAR [GET PTR TO NEXT CHAR 6YH4 BRN ZUNUM1 [J IF END 6YHW BCT 7 ZUNUM 6YJN ZUNUM1 6YKG BXGE 5 TWO56(1),UERR2 [J IF TOO BIG 6YL# BRN UNITN 6YLP XK91 6YM6 SEGENTRY K91PERCON 6YN6 CALL 7 ZNUM [TRY TO CONVERT NEXT NUMBER(S) 6^7Q BXGE 5 SIXFOUR(1),UERR2 [J IF CONVERTED UNIT NO NOT < 64 6^MB SBN 7 2 7272 BNZ 7 UNITN [J IF UNIT NO WAS ACTUALLY SPECIFIED 72BS NOUNNO 72LL LDN 0 #4000 736= ORS 0 AWORK1(2) [ ELSE SET 'NO UNIT NO' SWITCH 73KW UNITN ORS 5 AWORK2(2) [AWORK2:B0-8 TYPE B9-23 UNIT NO 745G LDX 0 AWORK1(2) 74K6 ANDN 0 #2000 754Q BNZ 0 NOTA [J IF NOT PERCONA 75JB [ 7642 [ALTHOUGH IT IS ERRONEOUS FOR QUALIFIERS TO OCCUR WITH PERCONA WE CHECK 76HL [THAT THE TYPE IS NOT SUCH THAT A QUALIFIER IS MANDATORY (CURRENTLY 773= [THERE ARE NO SUCH TYPES) 77GW [ 782G BZE 6 NIQ [J IF NO MORE CHARACTERS LEFT 78G6 LDCH 0 0(3) [ ELSE ERROR . 'ILLEGAL QUALIFIER' 78^Q SBN 0 #30 [ IF FIRST CHAR '(' ELSE 'INCORRECT 79FB BZE 0 QERR [ PERIPHERAL NAME 79^2 BRN UERR 7=DL NIQ LDX 5 AWORK2(2) [X5=PERIPHERAL TYPE NUMBER 7=Y= SLC 5 9 7?CW ANDN 5 #77 7?XG CALL 7 QTAB 7#C6 BRN UERR [ERROR IF ILLEGAL TYPE 7#WQ BZE 3 NOQU [J IF CANNOT HAVE QUALIFIERS 7*BB SMO FX1 7*W2 LDX 6 0(3) [ ELSE GET QUALIFIER LOGIC ADDRESS 7B*L LDN 3 0 [INDICATE NO QUALIFIERS 7BT= CALL 7 ZLOGIC [CHECK THIS IS OK WITH LOGIC 7C#W BRN ZERR1 7CSG NOQU LDX 0 AWORK1(2) 7D#6 ANDN 0 #4000 7DRQ SLL 0 12 7F?B STO 0 ACOMMUNE2(2) [SET B0 IF'NO UNIT NUMBER' SWITCH SET 7FR2 LDX 0 AWORK2(2) 7G=L STO 0 ACOMMUNE1(2) [SET RESULT 7GQ= SETREP OK 7H9W #SKI TRACE>999-999 7HPG ( 7J96 OUTNUM ACOMMUNE1(2),OCTAL 7JNQ OUTNUM ACOMMUNE2(2),OCTAL 7K8B MONOUT IPLISTING 7KN2 ) 7L7L UP [RETURN 7LM= NOTA 7LSD [ 7L^L [ NOT PERCONA 7M6W BNZ 6 UERR2 [INVALID NAME IF ANY EXTRA CHARS 7MLG HUNT 3,CPB,CUNI [RENAME PARAMETER BLOCK 7N66 NAME 3,CPAR,GPERCON 7NKQ ALTLEND 3,4 7P5B LDN 0 #200 7PK2 ORS 0 AWORK1(2) [REMEMBER CPAR/GPERCON BLOCK SET UP 7Q4L HUNT 3,CPAR,GPERCON 7QJ= LDX 5 AWORK2(2) 7R3W STO 5 GPER1(3) [SET PERIPHERAL NAME 7RHG SRL 5 15 [TYPE -> B15-23 7S36 STOZ GPER2(3) [INITIALISE QUALIFIER WORDS 7SGQ STOZ GPER3(3) 7T2B STOZ GPER4(3) 7TG2 LDN 6 1 7T^L LDN 7 2 7WF= PARALYSE #34,6,7 7WLD #UNS ANSTOOMANY 7WRL #SKI 7WYW TESTREP UNPAIR,XERR [J IF ERROR IN SPLITTING 7X64 #UNS ANSTOOMANY 7X?= TESTREP2 UNPAIR,XERR,TOOMANY,TERR [J IF ERROR IN SPLITTING 7XDG DCH 7 AWORK1(2) [STORE ANALYSIS LEVEL 7XY6 BRN PBEF 7YCQ ZEP2 [ENTRY FROM QUALCON MACRO 7YXB LDX 5 ACOMMUNE7(2) 7^C2 LDX 0 ACOMMUNE8(2) 7^WL SLL 0 18 82B= ORN 0 #1200 82TW STO 0 AWORK1(2) [DUMP ANALYSIS LEVEL & CLEAR FLAGS, 83*G [ SETTING B14 FOR QUALCON ENTRY 83T6 [ & B16 FOR GPERCON BLOCK SET UP 84#Q SETNCORE 4,3,CPAR,GPERCON 84SB STOZ GPER1(3) [INITIALISE QUALIFIER WORDS 85#2 STOZ GPER2(3) 85RL STOZ GPER3(3) 86?= STOZ GPER4(3) 86QW PBEF LDCH 7 AWORK1(2) 87=G PARANUMB 6,7 87Q6 BNG 6 (GEOERR) [GEORGE ERROR IF NO MULTI BLOCK 889Q BZE 6 NOQUA [J IF NO QUALIFIERS 88PB CALL 7 QTAB [CHECK TYPE LEGALITY,FIND QUAL TABLE 8992 BRN ZERR 89NL BZE 3 QERR [ERROR IF TYPE HAS NO QUALIFIERS 8=8= SMO FX1 8=MW LDX 0 0(3) [GET RELATIVE ADDRESS OF LOGIC ENTRY 8?7G SLL 0 12 8?M6 STO 0 AWORK2(2) [ & REMEMBER IT 8#6Q ADN 3 1(1) [STEP X3 TO POINT TO FIRST QUAL ENTRY 8#LB NXQU LDXC 4 WFLAG(3) [GET NEXT ENTRY 8*62 BCC NOTR [J IF ITS NOT A REPLACER 8*KL LDX 3 4 [ ELSE J TO REPLACED ADDRESS 8B5= ADX 3 FX1 8BJW BRN NXQU 8BSN [ 8C4G NOTR BZE 4 QERR [ERROR IF END OF TABLE 8CJ6 #SKI TRACE>599-599 8D3Q TRACE WQUAL(3),TESTQUAL 8DHB LDX 5 4 8F32 ANDN 5 #17 [NUMBER OF CHARACTERS IN STRING 8FGL LDCH 7 AWORK1(2) [GET ANALYSIS LEVEL 8G2= LDX 0 3 8GFW SBX 0 FX1 8G^G DSA 0 AWORK2(2) [REMEMBER RELATIVISED ENTRY ADDRESS 8HF6 PARABEG 1,5,WQUAL(3),7 8HYQ HUNT 3,CPB,CUNI 8JDB LDX 5 ANUM(3) 8JY2 BPZ 5 XMFND [J IF MATCH FOUND 8KCL LDX 3 AWORK2(2) [ELSE RESET X3 ->CURRENT ENTRY & J 8KX= ANDN 3 #7777 8LBW ADX 3 FX1 8LWG BRN XSTEP 8M6# [ 8MB6 XMFND LDX 0 4 8MTQ SRL 0 12 8N*B ANDN 0 #1777 8NT2 BZE 0 NOFAG [J IF NO FAG END ANALYSIS 8P#L ADX 0 FX1 8PS= CALL 7 (0) [CALL FAG END ANALYSIS SUBROUTINE 8Q?W BRN QUOK 8QRG NOFAG BNZ 5 QERR1 [ERROR IF FAG END BUT NO ANALYSIS S/R 8R?6 QUOK LDX 3 AWORK2(2) 8RQQ ANDN 3 #7777 8S=B ADX 3 FX1 [FETCH & DATUMISE ENTRY POINTER 8SQ2 MHUNT 2,CPAR,GPERCON 8T9L LDX 0 WPER4(3) 8TP= ANDX 0 GPER4(2) 8W8W ANDN 0 #7777 8WNG BNZ 0 ZERR1 [J IF CURRENT QUAL LEV ALREADY FOUND 8X86 LDX 0 WPER2(3) ['OR' IN THE CODE WORDS 8XMQ ORS 0 GPER2(2) 8Y7B LDX 0 WPER3(3) 8YM2 ORS 0 GPER3(2) 8^6L LDX 0 WPER4(3) 8^L= ORS 0 GPER4(2) 8^M5 ...[ 8^MY ...[ 8^NR ...#SKI G505&1 8^PL ...( 8^QF ...[ MEND EXCHANGE SCHEME CODE 8^R# ... LDXC 0 0 8^S7 ... ANDX 0 HALFTOP 8^T2 ... IF 0,NZ 8^TT ... LDCT 0 #076 8^WN ... ANDX 0 GPER1(2) 8^XH ... AND 0,ZE [ *TR OR *TP 8^YB ... THEN [ SHIFT QUALS ON *TR/*TP 8^^9 ... JBC QERR1,FX2,CXTMOP [ - MUST BE MOP ONLINE 9224 ... FI 922X ...) 923Q ...[ 924K ...[ 925W LDX 2 FX2 92KG SBN 6 1 [DECREMENT COUNT OF QUALIFIERS TO CHK 9356 XSTEP MFREE CPB,CUNI 93JQ ADN 3 WENTR 944B BNZ 6 NXQU [J IF MORE QUALIFIERS TO CHECK 94J2 LDX 6 AWORK2(2) 953L SRL 6 12 [GET LOGIC TABLE ADDRESS 95H= XEND2 MHUNT 3,CPAR,GPERCON 962W LDX 3 GPER4(3) 96GG ANDN 3 #7777 [POINTS TO TRUTH TABLE ENTRY REQUIRED 9726 CALL 7 ZLOGIC [CHECK COMPATIBILITY OF QUALIFIERS 97FQ BRN ZERR 97^B XEND1 SETREP OK 98F2 XFIN LDX 0 AWORK1(2) 98YL ANDN 0 #2000 99D= BZE 0 NOTPC [J IF ENTRY NOT BY PERCON MACRO 99XW PARAFREE [ ELSE FREE MULTI BLOCKS 9=CG LDX 0 AWORK1(2) 9=X6 ANDN 0 #400 9?BQ BZE 0 NOTPC [J IF WE DIDNT SET UP CUNI AT START 9?WB MFREE CPB,CUNI [ ELSE FREE IT 9#B2 NOTPC 9#TL #SKI TRACE>999-999 9**= ( 9*SW MHUNT 3,CPAR,GPERCON 9B#G BNG 3 ZZ2 9BS6 LOCK 3 9C?Q LDN 7 4 9CRB ZZ1 OUTNUM GPER1(3),OCTAL 9D?2 ADN 3 1 9DQL BCT 7 ZZ1 9F== MONOUT IPLISTING 9FPW SBN 3 4 9G9G UNLOCK 3 9GP6 ZZ2 9H8Q ) 9HNB UP 9J82 [ 9JML [ENTER HERE IF NO QUALIFIERS GIVEN,WITH TYPE NUMBER IN X5 9K7= [ 9KLW NOQUA CALL 7 QTAB 9L6G BRN UERR 9LL6 LDX 2 FX2 9M5Q BZE 3 XEND1 [J IF TYPE CANNOT HAVE QUALIFIERS 9MKB SMO FX1 9N52 LDX 6 0(3) [ OTHERWISE CHECK FOR MANDATORY QUAL 9NJL BRN XEND2 9P4= [ 9PHW [ WE NOW HAVE THE VARIOUS ERROR EXITS. 9Q3G [ LABELS WITH SUFFIX 1:QUALCON=>NO MESS;ELSE FREE FIRST UNI (UNLESS 9QH6 [ PERCONA) BEFORE ISSUING ERROR MESSAGE 9R2Q [ 9RGB XERR1 LDN 3 XERM 9S22 BRN XCOMA 9SFL UERR1 LDN 3 UERM 9S^= BRN XCOMA 9TDW QERR1 LDN 3 QERM 9TYG BRN XCOMA 9WD6 ZERR1 LDN 3 ZERM 9WXQ XCOMA LDX 0 AWORK1(2) 9XCB ANDN 0 #2000 9XX2 BZE 0 XCOMB [J IF ENTERED IN PERCONA 9YBL MFREE CPB,CUNI [ ELSE FREE FIRST CUNI BLOCK 9YW= BRN ZEND1 9^*W [ 9^TG [ LABELS WITH SUFFIX 2 : QUALCON=> NO MESS; ELSE FREE FIRST UNI =2*6 [ (UNLESS PERCONA) AFTER ISSUING ERROR MESSAGE =2SQ [ =3#B UERR2 LDN 3 UERM =3S2 LDN 7 1 =4?L BRN ZEND =4R= [ =5=W [ LABELS WITHOUT SUFFIX 1 :QUALCON=> NO MESSAGE;ELSE ISSUE =5QG [ APPROPRIATE ERROR MESSAGE =6=6 [ =6PQ XERR LDN 3 XERM =79B BRN XCOMB =7P2 UERR LDN 3 UERM =88L BRN XCOMB =8N= QERR LDN 3 QERM =97W BRN XCOMB =9*4 TERR LDN 3 TERM =9G= BRN XCOMB =9MG ZERR LDN 3 ZERM ==76 XCOMB LDX 0 AWORK1(2) ==LQ ANDN 0 #1000 =?6B BNZ 0 ZEND2 [J IF ENTERED FROM QUALCON =?L2 ZEND1 LDN 7 0 =#5L ZEND SMO FX1 =#K= LDX 4 0(3) =#T4 ... JANAL ZEND2 =*4W ERRORX 4 =*JG ZEND2 BZE 7 QUAERR =B46 MFREE CPB,CUNI [IF SUBSCRIPT 2 ENTRY , FREE UNI BLK =BHQ QUAERR =C3B LDX 0 AWORK1(2) =CH2 ANDN 0 #200 =D2L BZE 0 QUA1 =DG= MFREE CPAR,GPERCON [FREE CPAR/GPERCON IF IT EXISTS =D^W QUA1 SETREP PARERR =FFG BRN XFIN =F^6 [ =GDQ [ THERE NOW FOLLOW VARIOUS SUBROUTINES =GYB [ =HD2 [ =HXL [ FINDS NEXT NON-SPACE CHARACTER.ENTER X3-> STRING, X6=COUNT REMAINING =JC= [ EXIT :FAILURE - NO NON SPACE CHAR FOUND EXIT TO CALL - X6=0 =JWW [ :SUCCESS - X3,X6 REFER TO THAT CHAR , EXIT TO CALL+1 =KBG [ LINK X0 , X0 DESTROYED , V PRESERVED =KW6 [ =L*Q ZCHAR =LTB STO 0 GEN0 =M*2 BZE 6 ZCHA2 =MSL ZCHA1 BCHX 3 £ =N#= BCT 6 ZCHA3 =NRW ZCHA2 LDX 0 GEN0 =P?G EXIT 0 0 =PR6 ZCHA3 LDCH 0 0(3) =Q=Q SBN 0 #20 =QQB BZE 0 ZCHA1 =R=2 LDX 0 GEN0 =RPL EXIT 0 1 =S9= [ =SNW [TRIES TO CONVERT A NUMBER OF UP TO 2 CHARS =T8G [ENTER:X3-> STRING,X6=COUNT,LINK X7 =TN6 [EXIT :X5=RESULT,X7=2-(NO OF CHARS CONVERTED),X3,X6 -> CHAR AFTER LAST =W7Q [ CONVERTED ,X0,X4 DESTROYED =WMB [ =X72 ZNUM STO 7 GEN1 [STORE LINK =XLL LDN 7 2 =Y6= LDN 4 0 =YKW LDN 5 0 =^5G BZE 6 ZNUM1 [J IF END OF STRING =^K6 ZNUM3 CDB 4 0(3) [CONVERT CHARACTER ?24Q BCS ZNUM1 ?2JB SBN 7 1 [DECREMENT CNT OF CHARS CONVERTED OK ?342 CALL 0 ZCHAR [STEP TO NEXT CHAR ?3HL BRN ZNUM1 [J IF END OF STRING ?43= BNZ 7 ZNUM3 [J IF < 2 CHARS CONVERTED ?4GW ZNUM1 BRN (GEN1) ?52G [ ?5G6 [TRIES TO RECOGNISE A TWO CHARACTER MNEMONIC ?5^Q [ENTER X3-> STRING,X6=COUNT,LINK X7 ?6FB [EXIT-FAIL (<2 CHARS OR NEXT 2 CHARS UNRECOGNISED) X0,4,7 DESTRD,X1=FX1 ?6^2 [ EXIT TO CALL ?7DL [ SUCCESS X3,X6 REFER TO NEXT CHAR,X5=TYPE NO ,X0,4,7 DESTRD,X1=FX1 ?7Y= [ EXIT TO CALL+1 ?8CW [ ?8XG ZMNEM ?9C6 LDCT 1 #400 ?9WQ LDN 4 0 ?=BB ZMN3 BZE 6 ZMN1 [J IF NO CHARS LEFT ?=W2 LDCH 0 0(3) ??*L DCH 0 4(1) [COPY NEXT CHARACTER TO X4 ??T= CALL 0 ZCHAR [ADVANCE X3 ?##W NULL [IGNORE IF NO MORE CHARS ?#SG BCHX 1 £ [ADVANCE X1 ?*#6 BVCI ZMN3 [J IF JUST ONE CHARACTER FOUND SO FAR ?*RQ LDN 1 TYPES-1 ?B?B ADX 1 FX1 ?BR2 ZMN4 ADN 1 1 ?C=L LDX 0 0(1) [GET NEXT ENTRY IN MNEMONIC TABLE ?CQ= BZE 0 ZMN1 [J IF END OF TABLE - MATCH NOT FOUND ?D9W ANDN 0 #7777 ?DPG BXU 0 4,ZMN4 [J BACK IF THIS ENTRY DOESNT MATCH ?F96 LDCH 5 0(1) [MATCH FOUND - GET TYPE NUMBER ?FNQ LDX 1 FX1 ?G8B EXIT 7 1 [SUCCESS EXIT ?GN2 ZMN1 LDX 1 FX1 ?H7L EXIT 7 0 [FAILURE EXIT ?HM= [ ?J6W [CHECKS LEGALITY OF A GIVEN TYPE ,AND GIVES QUALIFIER TABLE ENTRY ?JLG [ENTER : X5=TYPE , LINK X7 ?K66 [EXIT : IF TYPE ILLEGAL EXIT TO CALL, X0,X3 DESTROYED ?KKQ [ : OTHERWISE EXIT TO CALL+1,X3-> QUAL TABLE (0 IF NONE),X0 DESTRD ?L5B [ ?LK2 QTAB ?M4L SRC 5 1 ?MJ= SMO 5 ?N3W LDX 3 TYPLIST(1) [GET WORD CONTAINING HALF WORD ENTRY ?NHG BNG 5 QTAB1 ?P36 SRL 3 12 [GET CORRECT HALF OF WORD ?PGQ QTAB1 SLC 5 1 ?Q2B ANDN 3 #7777 [ERASE THE REST ?QG2 BXE 3 TYPBAD(1),(7) [EXIT TO CALL IF ILLEGAL ?Q^L EXIT 7 1 ?RF= [ ?RYW [THIS SUBROUTINE CHECKS FOR QUALIFIER LOGIC ERROR ?SDG [ENTER : X6-> LOGIC TABLE (REL TO FX1) X3=LOGIC NUMBER (TRUTH VECTOR) ?SY6 [EXIT : IF LOGIC ERROR EXIT TO CALL X0,3,4 DESTROYED ?TCQ [ OTHERWISE EXIT TO CALL+1 X0,3,4 DESTROYED ?TXB [ ?WC2 ZLOGIC ?WWL SRL 34 4 ?XB= ADX 3 FX1 ?XTW SMO 6 ?Y*G LDX 0 0(3) [GET RIGHT WORD IN LOGIC TABLE ?YT6 SLL 34 4 ?^#Q ANDN 3 #17 ?^SB SLL 0 0(3) [GET RIGHT BIT #2#2 BNG 0 (7) [BIT SET => ILLEGAL QUAL COMBINATION #2RL EXIT 7 1 #3?= [ #3QW [ THE FOLLOWING SUBROUTINES ANALYSE FAG ENDS OF QUALIFIERS.THEY SHARE #4=G [ THE FOLLOWING SPEC. #4Q6 [ ENTRY:X3-> CUNI BLOCK CONTAINING FAG END ,X1=FX1 ,X2=FX2 #59Q [ EXIT :SUBROUTINE MAY DESTROY (1) ACCS BAR X6 (2)ACOMMUNE WORDS #5PB [ (3) AWORK3,4 BUT NOTHING ELSE,& MUST NOT FREE CUNI BLOCK (UNLESS #692 [ TAKING ERROR EXIT).LINK IS X7 #6NL [ #78= XTMODE [ *MT MODE QUALIFIER #7MW NGX 0 ANUM(3) #87G BPZ 0 QERR1 [ERROR IF NO FAG END GIVEN #8M6 SBX 7 FX1 #96Q CHNUMCO1 [CONVERT NUMBER FOLLOWING MODE #9LB TESTREP OK,XTMO1 [J IF NOT ERROR #=62 MFREE CPB,CUNI [ ELSE CLEAR UP & TERMINATE - ERROR #=KL BRN QUAERR [ MESSAGE ALREADY OUTPUT #?5= XTMO1 LDX 4 ACOMMUNE1(2) #?JW SRC 4 2 ##4G BXGE 4 TWELVE(1),QERR1 [J IF NOT 0,4,8,12,...36,40,44 ##J6 SLC 4 2 #*3Q HUNT 3,CPAR,GPERCON #*HB ORS 4 GPER2(3) #B32 ADX 7 FX1 #BGL EXIT 7 0 #C2= [ #CFW XTDELAY [ *PB DELAY QUALIFIER #C^G NGX 0 ANUM(3) #DF6 BPZ 0 QERR1 [ERROR IF NO FAG END GIVEN #DYQ SBX 7 FX1 #FDB CHNUMCO1 [CONVERT NUMBER FOLLOWING DELAY #FY2 TESTREP OK,XTDE1 [J IF NOT ERROR #GCL MFREE CPB,CUNI [ ELSE CLEAR UP & TERMINATE - ERROR #GX= BRN QUAERR [ MESSAGE ALREADY OUTPUT #HBW XTDE1 LDX 4 ACOMMUNE1(2) #HWG BXGE 4 BIT11,QERR1 [J IF NOT IN RANGE 0 TO 4095 #JB6 HUNT 3,CPAR,GPERCON #JTQ SLL 4 12 #K*B ORS 4 GPER2(3) #KT2 ADX 7 FX1 #L#L EXIT 7 0 #LS= [ #M?W XTAUTO [*LP AUTO QUALIFIER #MRG LDN 4 120 #N?6 LDX 5 ANUM(3) #NQQ ANDN 5 #7777 #P=B BZE 5 XTAU1 [J IF NO FAG END #PLG CHNUMCOD 1,3 #Q2L TESTREP2 CHNUMERR,QERR1 #QBQ LDX 4 ACOMMUNE1(2) #QQW BXL 4 X4(1),QERR1 #R72 BXGE 4 X161(1),QERR1 #RH6 ANDN 4 3 #RX= BNZ 4 QERR1 #S?B LDX 4 ACOMMUNE1(2) #SMQ XTAU1 MHUNT 3,CPAR,GPERCON #T7B ORS 4 GPER2(3) #TM2 EXIT 7 0 #W6L [ #WL= MENDAREA 25 #X5W #END ^^^^ ...64460017000300000000