IMD 1.16: 2/09/2008 14:39:18 84-93737-02 a000 f73702 6502 microprocessor firmware assembler (listing) 6aug82    @0|)wwЀЀtQql)  " }gA `_l M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIOS4 MF182080609555304820806140433 820806140433MF73702 VOL6502 MICROPROCESSOR FIRMWARE ASSEMBLER LISTING 84-93737-XX A000   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_l M@iGyy GGG`HZ@ b G`^Y e IQ BBp@;:9 :7P@ G:پN 8!0. * C'xC# b# }B @0DAJL w+™ЀЀΖQA1"   i ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G9H@pܾrCHC C GTq` Lg"gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYS"iwvc Bc A@6<# Ic B# gIjHc r1PAGE 1 1982/08/06 10:53:52.00 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300)  ASM6502 .FTN 0001 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 0002 IMPLICIT INTEGER(A-Z) 0003 C 0004 C 0005 C 0006 C 0007 C--- ASSEMBLER FOR THE MOS TECHNOLOGY MCS-650X SERIES 0008 C--- OF MICRO PROCESSORS. 0009 C 0010 C--- WRITTEN BY MARK S SIMS - 1978 0011 C--- SOUTHERN METHODIST UNIVERSITY 0012 C--- 0013 C---  COPYRIGHT 1978 BY MARK S. SIMS ALL RIGHTS RESERVED. 0014 C 0015 C--- REVISED MAY 1979 FOR CAI FORTRAN 0016 C 0017 C 0018 C 0019 C--- DEFINITION OF COMMON BLOCK VARIABLES 0020 C 0021 C 0022 C--- BLOCK /LNKLST/ 0023 C--- AVLIST: ARRAY IS A LINKED LIST USED FOR FREE STORAGE 0024 C--- FOR VARIOUS STACKS AND THE XREF CHAINS IN THE SYMBOL TABLE. 0025 C--- AVSIZE: THE MAXIMUM SIZE OF THE AVAILABLE LIST 0026 C 0027 C 0028 C--- BLOCK /OPTIONS/ 0029 C 0030 C--- NOLIST: THIS IS THE FLAG AS TO WHETHER OR NOT THE SOURCE LISTING 0031 C--- IS TO BE PRODUCED. 0=LIST, 1=DO NOT LIST. 0032 C--- NOOBJ: FLAGS WHETEHER OR NOT THE OBJECT FILE IS TO BE PRODUCED. 1PAGE 2 1982/08/06 10:53:53.25 C   6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN 0033 C---  0=PRODUCE OBJECT FILE. 1=DO NOT PRODUCE OBJECT FILE. 0034 C--- NOXREF: FLAGS WHETHER OR NOT A CROSS REFERENCE AND SYMBOL TABLE 0035 C--- DUMP ARE TO BE GENERATED. 0=PRODUCE CROSS REFERENCE. 0036 C--- 1=DO NOT PRODUCE CROSS REFERENCE. 0037 C--- NOGEN: 1=DO NOT LIST MULTIPLE LINES OF DATA GENERATION PSEUDO 0038 C--- OPS. 0=LIST ALL LINES OF DATA GENERATED DATA. 0039 C 0040 C 0041 C 0042 C--- BLOCK /STATUS/ - VARIOUS ASSEMBLER STATUS WORDS 0043 C 0044 C 0045 C--- CARD: THE LINE NUMBER OF THE CURRENT LINE OF SOURCE TEXT AS 0046 C--- PRINTED ONTO THE SOURCE LISTING AND USED IN PRODUCING 0047 C--- THE CROSS REFERENCE LISTING. 0048 C--- PASS: THE CURRENT PASS OF THE ASSEMBLER. PASS=0 MEANS IN PASS 1 0049 C--- BUT WE ARE GOING TO BE EVALUATING EXPRESSIONS FOR CERTAIN 0050 C---  THAT MUST HAVE ALL SYMBOLS DEFINED (EQU, BSS, ORG, ETC.) 0051 C--- PASS=1 MEANS PASS 1. PASS=2 MEANS PASS 2. 0052 C--- PCOUNT: THE VALUE OF THE LOCATION COUNTER. 0053 C--- AVAIL: THE POINTER TO THE CURRENT TOP OF THE AVAILABLE STORAGE 0054 C--- POOL. (FROM WHICH ALL STORAGE FOR ANY OF THE DYNAMIC LISTS 0055 C--- IS ALLOCATED) 0056 C--- ERRNUM: THE ERROR NUMBER WORD. UP TO 4 4-BIT ERROR NUMBER CODES 0057 C--- ARE PACKED INTO THE WORD. ERRORS GENERATED IN PASS 1 ARE 0058 C--- SENT TO PASS 2 THROUGH THE SCRATCH FILE. 0059 C--- ERRCNT: A COUNTER OF THE NUMBER OF ERROR MESSAGES PRINTED. 0060 C 0061 C 0062 C 0063 C--- BLOCK /FIELDS/ - THE VARIOUS FIELDS OF THE INPUT CARD AS RETURNED 0064 C--- BY THE PARSER. 0065 C--- ARRAY LABEL - THE LABEL FIELD 1PAGE 3 1982/08/06 10:53:54.75 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN 0066 C--- ARRAY OPCODE - THE OPCODE FIELD 0067 C--- ARRAY SYMBOL - THE OPERAND FIELD 0068 C--- OPTR - THE NUMBER OF CHARACTERS IN THE OPCODE FIELD 0069 C--- LABPTR - THE NUMBER OF CHARACTERS IN THE LABEL FIELD 0070 C--- SYMPTR - THE NUMBER OF CHARACTERS IN THE OPERAND FIELD. 0071 C 0072 C 0073 C 0074 C--- BLOCK /FILES/ - FILE ASSIGNMENT NUMBERS. 0075 C 0076 C--- INFILE: SOURCE FILE NUMBER (5) 0077 C--- OUTFIL: LISTING FILE NUMBER (6) 0078 C--- OBJ: OBJECT FILE NUMBER (8) 0079 C 0080 C 0081 C--- BLOCK /SYMBLK/ - THE SYMBOL TABLE VARIABLES 0082 C 0083 C--- SYMTAB: THIS ARRAY IS THE SYMBOL TABLE 0084 C--- SYMLEN: THE NUMBER OF CHARACTERS LONG A SYMBOL CAN BE. 0085 C--- MAXSYM: THE MAXIMUM NUMBER OF SYMBOLS THAT CAN BE DEFINED. 0086 C 0087 C 0088 C--- BLOCK /HEAD/ - PAGE HEADING AND CONTROL INFORMATION 0089 C 0090 C--- TITLE: CONTAINS THE CURRENT TITLE WHICH IS TO BE PRINTED AT 0091 C--- THE TOP OF EACH PAGE (IN 80A1 FORMAT). 0092 C--- LINENO: CONTAINS THE LINE NUMBER OF THE NEXT LINE TO BE 0093 C--- PRINTED ON THE PAGE. 0094 C--- PAGE: CONTAINS THE PAGE NUMBER OF THE CURREN PAGE OF SOURCE 0095 C--- LISTING 0096 C--- C OMCOL: THE COLUMN IN WHICH THE OPERAND MUST BEGIN IN BEFORE 0097 C--- BEING CONSIDERED A COMMENT 0098 C--- MAXLIN: THE NUMBER OF LINES LONG A PAGE IS. RESETABLE 1PAGE 4 1982/08/06 10:53:56.00 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN 0099 C--- VIA THE 'PAGE' PSEUDO OP. 0100 C 0101 C 0102 C--- BLOCK /PTRS/ - ARRAY 'PTR' CONTAINS THE LIST OF POINTERS 0103 C--- TO THE BEGINNING AND END OF EACH FIELD (PARAMETER) 0104 C--- IN THE OPERAND (USUALLY) ARRAY. FUNCTION 'SETPTR' 0105 C--- IS CALLED TO LOAD THIS ARRAY WITH THE POINTERS. 0106 C--- THE START OF THE N'TH FIELD IS IN PTR(N,1) AND THE END 0107 C--- OF THE N'TH FIELD IS POINTED TO BY PTR(N,2). IF A FIELD 0108 C--- IS A NULL FIELD THEN PTR(N,1) WILL BE SET \ PTR(N,2) (OR TO 0109 C--- ZERO). 0110 C 0111 C 0112 C 0113 C--- BLOCK /BUFFER/ - ARRAY 'LINE' CONTAINS THE CURRENT SOURCE CARD 0114 C--- IMAGE BEING ASSEMBLED (80A1 FORMAT). THE IMAGE IS OBTAIND 0115 C--- FROM EITHE THE SOURCE FILE OR THE SCRATCH FILE. 0116 C 0117 C 0118 C 0119 C 0120 C 0121 C 0122 C--- THE AVAILABLE STORAGE POOL FOR THE DYNAMIC LISTS IS STORED IN BLANK 0123 C--- COMMON 0124 C 0125 COMMON/LNKLST/ AVLIST(2000,2), AVSIZE 0126 COMMON/OPTIONS/ NOLIST,NOOBJ,NOXREF,NOGEN 0127 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 0128 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 0129 COMMON /SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM 0130 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 0131 C 1PAGE 5 1982/08/06 10:53:58.50 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN 0132 DATA TITLE/0,26*1H ,1HM,1HC,1HS,1H-,1H6,1H5,1H0,1HX,1H ,1HM,1HA, 0133 +1HC,1HR,1HO,1H ,1HA,1HS,1HS,1HE,1HM,1HB,1HL,1HE,1HR,29*1H / 0134 C 0135 DATA SYMTAB/3600*0/ 0136 DATA MAXSYM/400/ 0137 DATA SYMLEN/7/ 0138 DATA LASTSYM/0/ 0139 C 0140 C 0141 DATA AVSIZE/2000/ 0142 DATA AVLIST/4000*0/ 0143 C 0144 DATA LINENO/100/ 0145 DATA PAGE/0/ 0146 DATA COMCOL/29/ 0147 DATA MAXLIN/59/ 0148 C 0149 DATA INFILE /5/ 0150 DATA OUTFIL /6/ 0151  DATA OBJ /4/ 0152 C 0153 DATA PASS/1/ 0154 DATA ERRCNT/0/ 0155 DATA PCOUNT/0/ 0156 DATA CARD/0/ 0157 C 0158 C--- LISTING/OUTPUT OPTIONS 0159 C 0160 DATA NOLIST/0/ 0161 DATA NOOBJ/0/ 0162  DATA NOXREF/0/ 0163 DATA NOGEN/0/ 0164 C 1PAGE 6 1982/08/06 10:54:01.00 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN 0165 C 0166 C--- INITIALIZE THE AVAILABLE LIST FOR STACKS AND XREF CHAINS 0167 C 0168 DO 20 I=1,AVSIZE 0169 AVLIST(I,1)=0 0170 AVLIST(I,2)=I+1 0171 20 CONTINUE 0172 AVLIST(AVSIZE,2)=0 0173 AVAIL=1 0174 C 0175 C 0176 C--- INITIALIZE FILES 0177 C 0178 REWIND INFILE 0179 REWIND OUTFIL 0180 REWIND OBJ 0181 PAGE=0 0182 CARD=0 0183 C 0 184 C--- START THE ASSEMBLY 0185 C 0186 100 CONTINUE 0187 CALL PASS1 0188 IF(ERRCNT.NE.0) CALL HEADING(0,0) 0189 C 0190 C 0191 C--- GENERATE THE XREF LISTING 0192 C 0193 200 CONTINUE 0194 CARD=0 0195 CALL PASS2 0196 CALL SYMOUT 0197 C 1PAGE 7 1982/08/06 10:54:03.50 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN 0198 C--- PRINT THE STATISTICS 0199 C 0200 CALL HEADING(-3,1) 0201 CALL HEADING(1,1) 0202 WRITE(OUTFIL,300) ERRCNT 0203 300 FORMAT(I6,' ERROR MESSAGES WERE PRINTED.') 0204 C 0205 REWIND INFILE 0206 REWIND OUTFIL 0207 REWIND OBJ 0208 IF(ERRCNT .EQ. 0) STOP 0209 STOP 9999 0210 END 1PAGE 8 1982/08/06 10:54:06.25 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/LNKLST/ ALLOCATION 0FA1 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 AVLIST 4000 ARRAY INTEGER*2 0FA0 AVSIZE 1 SCALAR INTEGER*2 COMMON BLOCK/OPTION/ ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 NOLIST 1 SCALAR INTEGER*2 0001 NOOBJ 1 SCALAR INTEGER*2 0002 NOXREF 1 SCALAR INTEGER*2 0003 NOGEN 1 SCALAR INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ 1 SCALAR INTEGER*2 COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 0E12 LASTSY 1 SCALAR INTEGER*2 1PAGE 9 1982/08/06 10:54:06.75 C 6502 MICROPROCESSOR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 1 SCALAR INTEGER*2 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE 0025 I 1 SCALAR INTEGER*2 1PAGE 10 1982/08/06 10:55:11.50 C 6502 MICROPROCESS OR FIRMWARE ASSEMBLER 84-93737-10 A000 FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS F:RREW RUNTIME  PASS1 USER 0 HEADIN USER 2 PASS2 USER 0 SYMOUT USER 0 F:RWEF RUNTIME F:RIOL RUNTIME F:RETF RUNTIME F:RSTO RUNTIME F:RSTU RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0020 #20 DO END 0037 #100 UNUSED 0042 #200 UNUSED 0004 #300 FORMAT 0042 #M4 006A #M5 0018 #M6 0042 #M7  006A #M8 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 2 0017 125 0017 126 0017 127 0017 128 0017 129 0017 130 0017 132 0017 135 0017 136 0017 137 0017 138 0017 141 0017 142 0017 144 0017 145 0017  146 0017 147 0017 149 0017 150 0017 151 0017 153 0017 154 0017 155 0017 156 0017 160 0017 161 0017 162 0017 163 0017 168 0017 169 0019 170 001C 171 0020 172 0025 173 0029 178  002B 179 002E 180 0031 181 0034 182 0036 186 0037 187 0037 188 003A 193 0042 194 0042 195 0044 196 0047 200 004A 201 0050 202 0056 203 005D 205 005D 206 0060 207 0063 208 0066  209 006A 210 006C ENTRY=0016 PROGRAM SIZE=007F WORDS DATA SIZE=0026 WORDS LONG INSTRUCTIONS USED 0 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 11 1982/08/06 10:55:15.00 SUBROUTINE PASS1  FORTRAN(F300) ASM6502 .FTN 0211 SUBROUTINE PASS1 0212 IMPLICIT INTEGER (A-Z) 0213 COMMON/LNKLST/ AVLIST(2000,2), AVSIZE 0214 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 0215 COMMON/PTRS/ PTR(41,2) 0216 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 0217 COMMON/BUFFER/ LINE(80) 0218  COMMON /SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM 0219 COMMON/FIELDS/ LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 0220 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 0221 COMMON/OPTIONS/ NOLIST,NOOBJ,NOXREF,NOGEN 0222 C 0223 LOGICAL STATE,QUOTE 0224 C 0225 C 0226 C--- THIS PROGRAM PERFORMS PASS 1 ONE THE ASSEMBLER. 0227 C  0228 C 0229 C 0230 C--- INITIALIZE FILES AND VARIABLES 0231 C 0232 C 0233 C--- READ IN A CARD AND PARSE IT 0234 C 0235 C 0236 1 CONTINUE 0237 PASS=1 0238 TYPE=0 0239 ERRNUM=0 0240 CALL PARSE 0241 C 0242 C--- LOOK UP THE OPCODE IN THE OPCODE TABLE 0243 C 1PAGE 12 1982/08/06 10:55:17.75 SUBROUTINE PASS1  FORTRAN(F300) ASM6502 .FTN 0244 IN=OPLOOK(OPCODE,1,OPTR,TYPE2,OPVALU) 0245 IF(IN.GT.0) GO TO 60 0246 LEN=0 0247 CALL ADDLAB(PCOUNT) 0248 GO TO 82 0249 C 0 250 C--- THE OPCODE WAS IN THE OPCODE TABLE 0251 C 0252 60 CONTINUE 0253 TYPE=(-TYPE2) 0254 C 0255 C--- SEE IF IT WAS AN END PSEUDO OP 0256 C 0257 IF(TYPE.EQ.5) GO TO 500 0258 IF(TYPE2.LT.0) GO TO 90 0259 C 0260 C--- OPCODE WAS A MACHINE INSTRUCTION, UPDATE PCOUNTER 0261 C 0262 CALL ADDLAB(PCOUNT) 0263 LEN=TYPE2 0264 IF(TYPE2.EQ.0) LEN=2 0265 IF(LEN.EQ.3) GO TO 82 0266 C 0267 81 CONTINUE 0268 PCOUNT=PCOUNT+LEN  0269 GO TO 5000 0270 C 0271 C--- SEE IF A 3 BYTE OPCODE CAN BE FORCED INTO A TWO BYTE ONE 0272 C 0273 82 CONTINUE 0274 TEMP=OPTR+1 0275 IF(TEMP.GT.7) GO TO 81 0276 OPCODE(TEMP)=1HZ 1PAGE 13 1982/08/06 10:55:20.50 SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN 0277 C  0278 I=OPLOOK(OPCODE,1,TEMP,TYPE2,OPVALU) 0279 IF(I.LE.0) GO TO 81 0280 IF(TYPE2.NE.2) GO TO 81 0281  TEMPERR=ERRNUM 0282 ERRNUM=0 0283 I=EVAL(SYMBOL,1,SYMPTR) 0284 J=ERRNUM 0285 ERRNUM=TEMPERR 0286 C 0287 IF(J.NE.0) GO TO 81 0288 CALL BYTES(I,IHI,ILO) 0289 IF(IHI.NE.0) GO TO 81 0290 LEN=2 0291 GO TO 81 0292 C 0293 C 0294 C--- OPCODE WAS A PSEUDO OP, SO BRANCH TO THE CORRECT SERVICE ROUTINE 0295 C 0296 C 0297 90 CONTINUE 0298 GO TO (100,200,300,400,500,100,100,100,900,1000,1000,800, 0299 + 100,100,100,100,100,100,1900,100,100,100,2200,100, 0300 + 100,100,100,100,100,2800,100,100,100,100,100),TYPE 0301 C 0302 C--- PSEUDO OPS THAT REQUIRE NO PASS1 ACTION EXCEPT LABELS 0303 C 0304 100 CONTINUE 0305 CALL ADDLAB(PCOUNT) 0306 GO TO 5000 0307 C 0308 C--- ORG, RESET PROGRAM COUNTER 0309 C 1PAGE 14 1982/08/06 10:55:23.25 SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN 0310 200 CONTINUE 0311 PASS=0 0312 PCOUNT=EVAL(SYMBOL,1,SYMPTR) 0313 CALL ADDLAB(PCOUNT) 0314 PASS=1 0315 GO TO 5000 0316 C 0317 C--- BSS, ADD OPERAND TO PCOUNTER 0318 C 0319 300 CONTINUE 0320 CALL ADDLAB(PCOUNT) 0321 PASS=0 0322 PCOUNT=PCOUNT+EVAL(SYMBOL,1,SYMPTR) 0323 PASS=1 0324 GO TO 5000 0325 C 0326 C--- EQU, INSERTS LABEL WITH VALUE EQUAL TO THE OPERAND 0327 C 0328 400 CONTINUE 0329 IF(LABPTR.EQ.1.AND.LABEL(LABPTR).EQ.1H.) GO TO 200 0330 PASS=0 0331 NUM=EVAL(SYMBOL,1,SYMPTR) 0332 CALL ADDLAB(NUM) 0333 PASS=1 0334 GO TO 5000 0335 C 0336 C--- END, RETURN TO MAIN PROGRAM FOR PASS2 0337 C 0338 500 CONTINUE 0339 CALL ADDLAB(PCOUNT) 0340 RETURN 0341 C 0342 C--- ROM LOADER CHECKSUM BYTE 1PAGE 15 1982/08/06 10:55:25.50 SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN 0343 C 0344 800 CONTINUE 0345 CALL ADDLAB(PCOUNT) 0346 PCOUNT = PCOUNT + 1 0347 GOTO 5000 0348 C 0349 C--- DB, INCREMENT PCOUNTER BY ONE FOR EACH OPERAND 0350 C 0351 900 CONTINUE 0352 CALL ADDLAB(PCOUNT) 0353   J=SETPTR(SYMBOL,1,SYMPTR) 0354 PCOUNT=PCOUNT+J 0355 GO TO 5000 0356 C 0357 C--- DW AND DA, INCREMENT PCOUNTER BY TWO FOR EACH OPERAND 0358 C 0359 1000 CONTINUE 0360 CALL ADDLAB(PCOUNT) 0361 J=SETPTR(SYMBOL,1,SYMPTR) 0362 PCOUNT=PCOUNT+2*J 0363 GO TO 5000 0364 C 0365 C--- PAGE, SET THE PAGE LENGTH 0366 C 0367 1900 CONTINUE 0368 PASS=0 0369 MAXLIN=EVAL(SYMBOL,1,SYMPTR) 0370 IF(MAXLIN.LE.5) MAXLIN=59 0371 PASS=1 0372 GO TO 5000 0373 C 0374 C 0375 C--- END OF FILE PSEUDO OP (..) 1PAGE 16 1982/08/06 10:55:28.00  SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN 0376 C 0377 C 0378 2200 CONTINUE 0379 RETURN 0380 C 0381 C 0382 C--- TITLE PSEUDO OP, MOVE TITLE TO HEADING BUFFER 0383 C 0384 C 0385 2300 CONTINUE 0386 CALL ADDLAB(PCOUNT) 0387 IF(TITLE(1).NE.0) GO TO 5000 0388 DO 2320 I=1,80 0389 TITLE(I)=1H 0390 2320 CONTINUE 0391 IF(SYMPTR.LE.2) GOTO 5000 0392 K=SYMPTR-1 0393  DO 2340 I=2,K 0394 TITLE(I-1)=SYMBOL(I) 0395 2340 CONTINUE 0396 GO TO 5000 0397 C 0398 C 0399 C 0400 C 0401 C--- ASC - DEFINE AN ASCII CHARACTER STRING 0402 C 0403 C 0404 2800 CONTINUE 0405 CALL ADDLAB(PCOUNT) 0406 PCOUNT=PCOUNT+MAX0(0,SYMPTR-2) 0407 GO TO 5000 0408 C 1PAGE 17 1982/08/06 10:55:30.00 SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN 0409 C 0410 C 0411 C--- WRITE LINE TO THE SCRATCH FILE AND GO GET ANOTHER 0412 C 0413 C 0414 5000 CONTINUE 0415 IF(ERRNUM.EQ.0) GO TO 1 0416 CALL OUTPUT(0,0,4,0) 0417 GO TO 1 0418 END 1PAGE 18 1982/08/06 10:55:32.50 SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/LNKLST/ ALLOCATION 0FA1 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 AVLIST 4000 ARRAY INTEGER*2 0FA0 AVSIZE 1 SCALAR INTEGER*2 COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ  1 SCALAR INTEGER*2 COMMON BLOCK/PTRS / ALLOCATION 0052 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 PTR 82 ARRAY INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE  MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2  0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 COMMON BLOCK/BUFFER/ ALLOCATION 0050 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME   WORDS TYPE MODE 0000 LINE 80 ARRAY INTEGER*2 1PAGE 19 1982/08/06 10:55:33.25 SUBROUTINE PASS1  FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 0E12 LASTSY  1 SCALAR INTEGER*2 COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LABEL 7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY  INTEGER*2 000E SYMBOL 80 ARRAY INTEGER*2 005E OPTR 1 SCALAR INTEGER*2 005F LABPTR 1 SCALAR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 1 SCALAR INTEGER*2 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 COMMON BLOCK/OPTION/ ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 NOLIST 1 SCALAR INTEGER*2 0001 NOOBJ 1 SCALAR INTEGER*2 0002 NOXREF 1 SCALAR INTEGER*2 0003 NOGEN 1 SCALAR INTEGER*2 1PAGE 20 1982/08/06 10:55:34.00  SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0030 TYPE 1 SCALAR INTEGER*2 0031 IN 1 SCALAR INTEGER*2 0032 TYPE2 1 SCALAR INTEGER*2 0033 OPVALU 1 SCALAR INTEGER*2 0034 LEN 1 SCALAR INTEGER*2 0035 TEMP 1 SCALAR INTEGER*2 0036 I 1 SCALAR INTEGER*2 0037 TEMPER 1 SCALAR INTEGER*2 0038 J 1 SCALAR INTEGER*2 0039 IHI 1 SCALAR INTEGER*2 003A ILO 1 SCALAR INTEGER*2 003B NUM 1 SCALAR INTEGER*2 003C K 1 SCALAR INTEGER*2 1PAGE 21 1982/08/06 10:55:55.25 SUBROUTINE PASS1 FORTRAN(F300) ASM6502  .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS  NAME TYPE ARGS PARSE USER 0 OPLOOK USER 5 ADDLAB USER 1 EVAL USER 3 BYTES USER 3 F:RCGO RUNTIME SETPTR USER 3 MAX0 KNOWN 0 OUTPUT USER 4 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0006 #1 0025 #60 003D #82 0101 #500 0081 #90 0039 #81  0189 #5000 00A7 #100 00AD #200 00CB #300 00E2 #400 0110 # 900 0124 #1000 0108 #800 0139 #1900 014F #2200 0179 #2800 0151 #2300 UNUSED 015D #2320 DO END 0173 #2340 DO END 0025 #M20 0101 #M21 0081 #M22  0036 #M23 0036 #M24 003D #M25 0043 #M26 0039 #M27 0039 #M28 0039 #M29 0067 #M30 0039 #M31 0039 #M32 00BB #M33 00E9 #M34 00AD #M35 00FF #M36 014C #M37 014A #M38 014C #M39 0189 #M40 015A #M41 0167 #M42 0189 #M43 016B #M44 016F #M45 0006 #M46 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 211 0004 212 0006 213 0006 214 0006 215 0006 216 0006 217 0006 218 0006 219 0006 220 0006 221 0006 223 0006 236 0006 237 0006 238 0008 239 000A 240 000B  244 000E 245 001C 246 001D 247 001F 248 0024 252 0025 253 0025 257 0028 258 002A 262 002C 263 0031 264 0033 265 0036 267 0039 268 0039 269 003C 273 003D 274 003D 275 0040 276  0043 278 0046 279 0054 280 0055 281 0058 282 005A 283 005C 284 006F 285 0071 287 0073 288 0075 289 007C 290 007E 291 0080 297 0081 298 0081 304 00A7 305 00A7 306 00AC 310 00AD  311 00AD 312 00AF 313 00C3 314 00C8 315 00CA 319 00CB 320 00CB 1PAGE 22 1982/08/06 10:55:57.00  SUBROUTINE PASS1 FORTRAN(F300) ASM6502 .FTN 321 00D0 322 00D2 323 00DF 324 00E1 328 00E2 329 00E2 330 00E9 331 00EB 332 00F7 333 00FC 334 0100 338 0101 339 0101 340 0106 344 0108 345 0108 346 010D 347 010F 351 0110 352 0110 353 0115 354 0121 355 0123 359 0124 360 0124 361 0129 362 0135 363 0138 367 0139 368 0139 369  013B 370 0147 371 014C 372 014E 378 014F 379 014F 385 0151 386 0151 387 0156 388 0159 389 015B 390 015D 391 0161 392 016B 393 016E 394 0170 395 0173 396 0178 404 0179 405 0179  406 017E 407 0188 414 0189 415 0189 416 018B 417 0193 418 0194 ENTRY=0004 PROGRAM SIZE=01AB WORDS DATA SIZE=003E WORDS LONG INSTRUCTIONS USED 9 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 23 1982/08/06 10:56:00.00 SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN 0419 SUBROUTINE PASS2 0420 IMPLICIT INTEGER (A-Z) 0421 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 0422 COMMON/OPTIONS/ NOLIST,NOOBJ,NOXREF,NOGEN 0423 COMMON/PTRS/ PTR(41,2) 0424 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 0425 COMMON/BUFFER/ LINE(80) 0426 COMMON /SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM   0427 COMMON/FIELDS/ LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 0428 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 0429 C 0430 LOGICAL QUOTE 0431 C 0432 C 0433 REWIND INFILE 0434 5 CONTINUE 0435 PASS=2 0436 PCOUNT=0 0437 C 0438 C--- READ IN A LINE AND PARSE IT 0439 C 0440 10 CONTINUE 0441 CALL PARSE 0442 C 0443 C--- CHECK THE OPCODE TO SEE IF A PSEUDO OP OR A MACHINE INSTRUCTION 0444 C 0445 II=OPLOOK(OPCODE,1,OPTR,TYPE2,OPVALU) 0446 IF(II.LE.0) GO TO 11 0447 IF(TYPE2.LT.0) GO TO 100 0448 IF(SYMPTR.NE.0) GOTO 11 0449 IF(TYPE2.EQ.1) GOTO 11 0450 ERRNUM=ERRNUM*16+1 0451 C 1PAGE 24 1982/08/06 10:56:03.00 SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN 0452 C--- IT WAS A MACHINE INSTRUCTION 0453 C 0454 11 CONTINUE 0455 VAL=0 0456 IF(SYMPTR.NE.0.AND.TYPE2.NE.1) VAL=EVAL(SYMBOL,1,SYMPTR) 0457 IF(II.LE.0) GO TO 15 0458 IF(TYPE2.EQ.0) GO TO 30 0459 IF(TYPE2.EQ.3) GO TO 15 0460 C 0461 12 CONTINUE 0462 IF(II.LE.0) GO TO 1500 0463 CALL BYTES(VAL,J,IDUMMY) 0464 IF(TYPE2.EQ.2.AND.J.NE.0.AND.J.NE.255) ERRNUM=ERRNUM*16+2 0465 CALL OUTPUT(OPVALU,VAL,TYPE2,EXPTYP) 0466 GO TO 10 0467 C 0468 C--- SEE IF A THREE BYTE OPCODE CAN BE FORCED INTO A 2 BYTE ONE 0469 C 0470 15 CONTINUE 0471 CALL BYTES(VAL,J,IDUMMY) 0472 IF(J.NE.0) GO TO 12 0473 TEMP=OPTR+1 0474 IF(TEMP.GT.7) GO TO 12 0475 OPCODE(TEMP)=1HZ 0476 C 0477 I=OPLOOK(OPCODE,1,TEMP,TTYPE2,TOPVAL) 0478 IF(I.LT.0) GO TO 12 0479 IF(TTYPE2.NE.2) GO TO 12 0480 C 0481 TYPE2=TTYPE2 0482 OPVALU=TOPVAL 0483 II=1 0484 GO TO 12 1PAGE 25 1982/08/06 10:56:06.00 SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN  0485 C 0486 C--- THE INSTRUCTION WAS A PC RELATIVE BRANCH 0487 C 0488 30 CONTINUE 0489 VAL2=VAL-PCOUNT-2 0490 CALL BYTES(VAL2,I,J) 0491 IF(I.NE.0.AND.I.NE.255) ERRNUM=ERRNUM*16+2 0492 CALL OUTPUT(OPVALU,J,2,0)  0493 GO TO 10 0494 C 0495 C 0496 C--- THE OPCODE WAS A PSEUDO OP 0497 C--- BRANCH TO THE CORRECT SERVICE ROUTINE 0498 C 0499 100 CONTINUE 0500 TYPE=(-TYPE2) 0501 GO TO (600,200,300,900,1300,700,500,1100,400,400,400, 0502 + 1000,600,920,600,600,600,100,1900,600,600,600,1400, 0503 + 600,600,600,600,600,1200,1600,600,600,600,600,600),TYPE 0504 C 0505 C 0506 C--- ORG 0507 C 0508 C 0509 200 CONTINUE 0510 CALL PUSH(PCOUNT,ORGPTR) 0511 I=EVAL(SYMBOL,1,SYMPTR) 0512 PCOUNT=I 0513 CALL OUTPUT(0,PCOUNT,4,0) 0514 GO TO 10 0515 C 0516 C 0517 C--- BSS - RESERVE STORAGE BLOCK 1PAGE 26 1982/08/06 10:56:08.75 SUBROUTINE PASS2  FORTRAN(F300) ASM6502 .FTN 0518 C 0519 C 0520 300 CONTINUE 0521 I=EVAL(SYMBOL,1,SYMPTR) 0522 CALL OUTPUT(0,PCOUNT,4,0) 0523 PCOUNT=PCOUNT+I 0524 GO TO 10 0525 C 0526 C  0527 C--- DB, DW, AND DA 0528 C 0529 C 0530 400 CONTINUE 0531 TEMP=NOLIST 0532 LEN=2 0533 IF(TYPE.EQ.9) LEN=1 0534 C 0535 NUM=SETPTR(SYMBOL,1,SYMPTR) 0536 IF(NUM.LE.0) GO TO 460 0537 C 0538 C--- EVALUATE EACH PARAMETER IN THE PARAMETER LIST 0539 C 0540 DO 440 I=1,NUM 0541 VALUE=EVAL(SYMBOL,PTR(I,1),PTR(I,2)) 0542 CALL BYTES(VALUE,PCH,PCL) 0543 IF(PCH.NE.0.AND.PCH.NE.255.AND.LEN.EQ.1) 0544 +ERRNUM=ERRNUM*16+2 0545 C 0546 C--- OUTPUT THE PARAMETER 0547 C 0548 IF(TYPE.EQ.9) CALL OUTPUT(PCL,0,1,EXPTYP) 0549 N=PCL*256+PCH 0550 IF(TYPE.EQ.11) CALL OUTPUT(0,N,7,EXPTYP) 1PAGE 27 1982/08/06 10:56:11.50 SUBROUTINE PASS2  FORTRAN(F300) ASM6502 .FTN 0551 IF(TYPE.EQ.10) CALL OUTPUT(1,VALUE,7,EXPTYP) 0552 LABPTR=0 0553 C 0554 C--- SET THE LISTING FLAG FOR THE REMAINING PARAMETERS 0555 C 0556 IF(NUM.EQ.1) GO TO 440 0557 IF(I.NE.1) GO TO 440 0558 IF(NOLIST.EQ.1) GO TO 440 0559 NOLIST=NOGEN 0560 C 0561 C--- BLANK THE LINE 0562 C 0563 DO 420 N=1,80 0564 LINE(N)=1H 0565 420 CONTINUE 0566 440 CONTINUE 0567 NOLIST=TEMP 0568 GO TO 10 0569 C 0570 C--- NO OPERAND WAS GIVEN 0571 C 0572 460 CONTINUE 0573 ERRNUM=ERRNUM*16+3 0574 CALL OUTPUT(0,0,5,0) 0575 GO TO 10 0576 C 0577 C 0578 C--- TITLE  0579 C 0580 C 0581 500 CONTINUE 0582 DO 510 I=1,80 0583 TITLE(I)=1H 1PAGE 28 1982/08/06 10:56:13.75  SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN 0584 510 CONTINUE 0585 IF(SYMPTR.LE.2) GO TO 580 0586 J=SYMPTR-1 0587 DO 540 I=2,J 0588 TITLE(I-1)=SYMBOL(I) 0589 540 CONTINUE 0590 C 0591 580 CONTINUE 0592 GO TO 10 0593 C 0594 C 0595 C--- PSEUDO OPS THAT REQUIRE NO PASS 2 ACTION 0596 C 0597 C 0598 600 CONTINUE 0599 CALL OUTPUT(0,0,5,0) 0600 GO TO 10 0601 C 0602 C 0603 C--- OPTIONS 0604 C 0605 C 0606 700 CONTINUE 0607 J=SETPTR(SYMBOL,1,SYMPTR) 0608 IF(J.LE.0) GO TO 460 0609 C 0610 C--- PROCESS EACH PARAMETER 0611 C 0612 DO 760 I=1,J 0613 IF(PTR(I,1).GT.PTR(I,2)) GO TO 760 0614 K=0 0615 IF(SYMBOL(PTR(I,2)).EQ.1H-) K=1 0616 IF(SYMBOL(PTR(I,1)).EQ.1HL) NOLIST=K 1PAGE 29 1982/08/06 10:56:16.25 SUBROUTINE PASS2 FORTRAN(F300)  ASM6502 .FTN 0617 IF(SYMBOL(PTR(I,1)).EQ.1HO) NOOBJ=K 0618 IF(SYMBOL(PTR(I,1)).EQ.1HG) NOGEN=K 0619  IF(SYMBOL(PTR(I,1)).EQ.1HX) NOXREF=K 0620 760 CONTINUE 0621 CALL OUTPUT(0,0,5,0) 0622 GO TO 10 0623 C  0624 C 0625 C 0626 C--- EQU - EQUATE SYMBOL 0627 C 0628 900 CONTINUE 0629 IF(LABPTR.EQ.1.AND.LABEL(LABPTR).EQ.1H.) GO TO 200 0630 920 CONTINUE 0631 I=EVAL(SYMBOL,1,SYMPTR) 0632 CALL OUTPUT(0,I,6,EXPTYP) 0633  GO TO 10 0634 C 0635 C 0636 C--- GENERATE LOADER ROM CHECKSUM WORD 0637 C 0638 C 0639 1000 CONTINUE 0640   WRITE(OBJ,1020) PCOUNT 0641 1020 FORMAT(1X,'C',Z4,' 00') 0642 CALL OUTPUT(0,0,4,0) 0643 PCOUNT = PCOUNT + 1 0644 GO TO 10 0645 C 0646 C 0647 C 0648 C 0649 C--- PAGE EJECT 1PAGE 30 1982/08/06 10:56:18.75 SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN 0650 C 0651 C 0652 1100 CONTINUE 0653 CALL HEADING(0,0) 0654 GO TO 10 0655 C 0656 C 0657 C--- SPACE 0658 C 0659 C 0660 1200 CONTINUE 0661 I=EVAL(SYMBOL,1,SYMPTR) 0662 I=MAX0(1,I) 0663 CALL HEADING(-I,0) 0664 GO TO 10 0665 C 0666 C 0667 C--- END CARD 0668 C 0669 C 0670 1300 CONTINUE 0671 CALL OUTPUT(0,0,5,0) 0672 RETURN 0673 C 0674 C 0675 C--- END OF FILE CARD 0676 C 0677 C 0678 1400 CONTINUE 0679 RETURN 0680 C 0681 C 0682 C--- A BAD OPCODE WAS FOUND 1PAGE 31 1982/08/06 10:56:20.50 SUBROUTINE PASS2  FORTRAN(F300) ASM6502 .FTN 0683 C 0684 C 0685 1500 CONTINUE 0686 ERRNUM=ERRNUM*16+4 0687 CALL OUTPUT(0,0,5,0) 0688 GO TO 10 0689 C 0690 C 0691 C--- ASCII STRINGS 0692 C 0693 C 0694 1600 CONTINUE 0695 IF(SYMPTR.LE.2) GO TO 460 0696 TEMP=NOLIST 0697 J=SYMPTR-1 0698 C 0699 C--- OUTPUT THE STRING 0700 C 0701 DO 1640 I=2,J 0702 CALL OUTPUT(ASCII(SYMBOL(I)),0,1,0) 0703  LABPTR=0 0704 IF(J.EQ.2) GO TO 1640 0705 IF(I.NE.2) GO TO 1640 0706 C 0707 C--- BLANK THE LISTING LINE 0708 C 0709 IF(NOLIST.EQ.1) GO TO 1640 0710 DO 1620 K=1,80 0711 LINE(K)=1H 0712 1620 CONTINUE 0713  NOLIST=NOGEN 0714 1640 CONTINUE 0715 NOLIST=TEMP 1PAGE 32 1982/08/06 10:56:23.25 SUBROUTINE PASS2  FORTRAN(F300) ASM6502 .FTN 0716 GO TO 10 0717 C 0718 C--- PAGE - SET PAGE LENGTH 0719 C 0720 C 0721 1900 CONTINUE 0722 MAXLIN=EVAL(SYMBOL,1,SYMPTR) 0723 IF(MAXLIN.LE.5) MAXLIN=59 0724 GO TO 10 0725 C 0726 END 1PAGE 33 1982/08/06 10:56:25.75 SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ  1 SCALAR INTEGER*2 COMMON BLOCK/OPTION/ ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 NOLIST 1 SCALAR INTEGER*2 0001 NOOBJ 1 SCALAR INTEGER*2 0002 NOXREF 1 SCALAR INTEGER*2 0003 NOGEN 1 SCALAR INTEGER*2 COMMON BLOCK/PTRS / ALLOCATION 0052 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 PTR 82 ARRAY INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MO  DE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 COMMON BLOCK/BUFFER/ ALLOCATION 0050 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LINE 80 ARRAY INTEGER*2 1PAGE 34 1982/08/06 10:56:26.25 SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 0E12 LASTSY 1 SCALAR INTEGER*2 COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LABEL 7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY INTEGER*2 000E SYMBOL 80 ARRAY INTEGER*2 005E OPTR 1 SCALAR INTEGER*2 005F LABPTR 1 SCALAR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 1 SCALAR INTEGER*2 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0030 II 1 SCALAR INTEGER*2 0031 TYPE2 1 SCALAR INTEGER*2 0032 OPVALU 1 SCALAR INTEGER*2 0033 VAL 1 SCALAR INTEGER*2 0034 J 1 SCALAR INTEGER*2 0035 IDUMMY 1 SCALAR INTEGER*2 0036 EXPTYP 1 SCALAR INTEGER*2 0037 TEMP 1 SCALAR INTEGER*2 0038 I 1 SCALAR INTEGER*2 0039 TTYPE2 1 SCALAR INTEGER*2 003A TOPVAL 1 SCALAR INTEGER*2 003B VAL2 1 SCALAR INTEGER*2 003C TYPE 1 SCALAR INTEGER*2 003D ORGPTR 1 SCALAR INTEGER*2 003E LEN 1 SCALAR INTEGER*2 003F NUM 1 SCALAR INTEGER*2 0040 VALUE 1 SCALAR INTEGER*2 0041 PCH 1 SCALAR INTEGER*2 1PAGE 35 1982/08/06 10:56:27.50 SUBROUTINE PASS2  FORTRAN(F300) ASM6502 .FTN 0042 PCL 1 SCALAR INTEGER*2 0043 N 1 SCALAR INTEGER*2 0044 K 1 SCALAR INTEGER*2 1PAGE 36 1982/08/06 10:57:06.75 SUBROUTINE PASS2  FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS F:RREW RUNTIME PARSE USER 0  OPLOOK USER 5 EVAL USER 3 BYTES USER 3 OUTPUT USER 4 F:RCGO RUNTIME PUSH USER   2 SETPTR USER 3 F:RWEF RUNTIME F:RIOL RUNTIME F:RETF RUNTIME HEADIN USER 2 MAX0 KNOWN 0 ASCII USER 1 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0012 #5 UNUSED 0016 #10 0034 #11  00C6 #100 0076 #15 00A2 #30 004F #12 02B4 #1500 01E7 #600 00EE #200 010E #300 024D #900 02A8 #1300 01F0 #700 01CC  #500 027C #1100 0127 #400 026A #1000 0254 #920 0307 #1900 02B2 #1400 028B #1200 02C1 #1600 01BF #460 01B2 #440 01AE #420 DO END 01D0  #510 DO END 01E6 #580 01E1 #540 DO END 023A #760 0004 #1020 FORMAT 02FF #1640 02F9 #1620 DO END 0034 #M33 00C6 #M34 0034 #M35 0034 #M36 0048 #M37  0048 #M38 0048 #M39 0076 #M40 00A2 #M41 0076 #M42 02B4 #M43  0063 #M44 0063 #M45 0063 #M46 0063 #M47 006D #M48 004F #M49 0085 #M50 004F #M51 004F #M52 004F #M53 00B5 #M54 00B5 #M55  00B5 #M56 00BD #M57 00FC #M58 0130 #M59 0130 #M60 01BF #M61 0171 #M62 017C #M63 0191 #M64 019C #M65 013F #M66 0145  #M67 0171 #M68 0171 #M69 0171 #M70 017C #M71 0191 #M72 019C #M73 01B2 #M74 01B2 #M75 01B2 #M76 01AA #M77 01B7 #M78  01CD #M79 01E6 #M80 01D9 #M81 01DD #M82 01F4 #M83 01BF #M84 0203 #M85 020A #M86 023A #M87 0216 #M88 021F #M89 0228 #M90  0231 #M91 023A #M92 0216 #M93 021F #M94 0228 #M95 0231 #M96  023A #M97 0241 #M98 0254 #M99 1PAGE 37 1982/08/06 10:57:08.50 SUBROUTINE PASS2 FORTRAN(F300) ASM6502 .FTN 00EE #M100 0284 #M101  01BF #M102 02C6 #M103 02CC #M104 02D6 #M105 02FF #M106 02FF #M107 02FF #M108 02F5 #M109 031E #M110 0311 #M111 031C #M112 031E #M113 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE  LOCN LINE LOCN LINE LOCN 419 000D 420 000F 421 000F 422 000F 423 000F 424 000F 425 000F 426 000F 427 000F 428 000F 430 000F 433 000F 434 0012 435 0012 436 0014 440 0016 441 001 6 445 0019 446 0028 447 0029 448 002B 449 002D 450 0030 454 0034 455 0034 456 0036 457 0048 458 004A 459 004C 461 004F 462 004F 463 0051 464 0058 465 0063 466 0075 470 0076 471 0076 472 007D 473 007F 474 0082 475 0085 477 0088 478 0097 479 0098 481 009B 482 009D 483 009F 484 00A1 488 00A2 489 00A2 490 00A6 491 00AD 492 00B5 493 00C5 499 00C6 500 00C6 501 00C9 509 00EE 510 00EE 511 00F4 512 0104 513 0105 514 010D 520 010E 521 010E 522 011B 523 0123 524 0126 530 0127 531 0127 532 0129 533 012B 535 0130 536 013D 540 013E 541  0140 542 015E 543 0165 548 0171 549 017C 550 0186 551 0191 552 019C 556 019E 557 01A1 558 01A4 559 01A7 563 01A9 564 01AC 565 01AE 566 01B2 567 01BC 568 01BE 572 01BF 573 01BF 574 01C3 575 01CB 581 01CC 582 01CC 583 01CE 584 01D0 585 01D4 586 01D9 587 01DC 588 01DE 589 01E1 591 01E6 592 01E6 598 01E7 599 01E7 600 01EF 606 01F0 607 01F0 608 0201 612  0202 613 0204 614 020A 615 020D 616 0216 617 021F 618 0228 619 0231 620 023A 621 0244 622 024C 628 024D 629 024D 630 0254 631 0254 632 0261 633 0269 639 026A 640 026A 641 0271  642 0271 643 0279 644 027B 652 027C 653 027C 654 028A 660 028B 661 028B 662 0298 663 029E 664 02A7 670 02A8 671 02A8 672 02B0 678 02B2 679 02B2 685 02B4 686 02B4 687 02B8 688  02C0 694 02C1 695 02C1 696 02C6 697 02C8 701 02CB 702 02CD 703 02E9 704 02EB 705 02EE 709 02F1 710 02F4 711 02F7 712 02F9 713 02FD 714 02FF 715 0304 716 0306 721 0307 722 0307  723 0319 724 031E 726 031F 1PAGE 38 1982/08/06 10:57:10.50 SUBROUTINE PASS2  FORTRAN(F300) ASM6502 .FTN ENTRY=000D PROGRAM SIZE=0357 WORDS DATA SIZE=0048 WORDS LONG INSTRUCTIONS USED 44 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 39 1982/08/06 10:57:13.00 SUBROUTINE ADDLAB(VALUE) FORTRAN(F300) ASM6502 .FTN 0727 SUBROUTINE ADDLAB(VALUE) 0728 IMPLICIT INTEGER(A-Z) 0729 COMMON/FIELDS/LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 0730 COMMON /SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM 0731 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 0732 C 0733 C--- THIS SUBROUTINE IS USED TO INSERT A LABEL (IF IT EXISTS) INTO 0734 C--- THE SYMBOL TABLE. THE LABEL IS ASSIGNED A VALUE EQUAL TO THE 0735 C--- PARAMETER 'VALUE'. 0736 C 0737 C--- THE FIRST WORD OF THE ATTRIBUTE INFO FOR THE LABEL IS 0738 C--- THE LABEL'S VALUE. THE SECOND WORD IS USED AS A POINTER 0739 C--- TO THE LABEL'S XREF CHAIN  0740 C 0741 C 0742 IF(LABPTR.EQ.0) RETURN 0743 IF(LABPTR.EQ.1.AND.LABEL(1).EQ.1H.) RETURN 0744 ATTR= VALUE 0745 XPTR=0 0746 IN=MANGER(LABEL,1,LABPTR,ATTR,XPTR,0) 0747 IF(IN.NE.(-1)) RETURN 0748 ERRNUM=ERRNUM*16+6 0749 RETURN 0750 END 1PAGE 40 1982/08/06 10:57:16.75 SUBROUTINE ADDLAB(VALUE)  FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LABEL  7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY INTEGER*2 000E SYMBOL 80 ARRAY INTEGER*2 005E OPTR 1 SCALAR  INTEGER*2 005F LABPTR 1 SCALAR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 0E12 LASTSY  1 SCALAR INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 VALUE 1 SCALAR INTEGER*2 1PAGE 41 1982/08/06 10:57:17.50 SUBROUTINE ADDLAB(VALUE) FORTRAN(F300) ASM6502 .FTN  SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 001A ATTR 1 SCALAR INTEGER*2 001B XPTR 1 SCALAR INTEGER*2 001C IN 1 SCALAR INTEGER*2 1PAGE 42 1982/08/06 10:57:23.00 SUBROUTINE ADDLAB(VALUE) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS MANGER USER 6 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE  LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 000A #M0 0013 #M1 002A #M2 000A #M3 0013 #M4 0013 #M5 002A #M6 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 727 0004 728 0006 729 0006 730 0006 731 0006 742 0006 743 000A 744 0013 745 0015 746 0017 747 0026 748 002A 749 002E 750 0030 ENTRY=0004 PROGRAM SIZE=0035 WORDS DATA SIZE=001E WORDS LONG INSTRUCTIONS USED 1 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 43 1982/08/06 10:57:26.00  INTEGER FUNCTION SETPTR(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 0751 INTEG ER FUNCTION SETPTR(LINE,START,FINISH) 0752 IMPLICIT INTEGER(A-Z) 0753 COMMON/PTRS/ PTR(41,2) 0754 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 0755 DIMENSION LINE(80) 0756 C 0757 C 0758 C--- THIS FUNCTION WILL CONSTRUCT AN ARRAY CONTAINING POINTERS 0759 C--- TO THE BEGINNING AND END OF EACH PARAMETER IN A 0760 C--- PARAMETER LIST CONTAINED IN FORMAL PARAMETER ARRAY 'LINE'. 0761 C--- PARAMETERS ARE SEPARATED BY ,'S NOT ENCLOSED WITHIN A LEVEL 0762 C--- OF PARENTHESIS. 0763 C--- THE FUNCTION IS RETURNED AS THE NUMBER OF PARAMETERS FOUND 0764 C--- ARRAY 'PTRS' CONTAINS THE POINTERS TO THE PARAMETERS 0765 C--- IF A PARAMETER IS A NULL FIELD, THEN THAT PARAMETER WILL 0766 C--- BE GIVEN A STARTING LOCATION GREATER THAN THE THE ENDING LOCATION 0767 C--- A MAXIMUM OF 40 PARAMETERS CAN BE POINTED TO. 0768 C  0769 C 0770 C 0771 LOGICAL QUOTE 0772 QUOTE=.FALSE. 0773 J=0 0774 PAREN=0 0775 S=START 0776 I=START-1 0777 C 0778 C--- SCAN FOR COMMAS 0779 C 0780 10 CONTINUE 0781 I=I+1 0782 IF(I.GT.FINISH) GO TO 30 0783 IF(LINE(I).EQ.1H') QUOTE=.NOT.QUOTE 1PAGE 44 1982/08/06 10:57:28.50 INTEGER FUNCTION SETPTR(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 0784 IF(QUOTE) GO TO 10 0785 IF(LINE(I).EQ.1H() PAREN=PAREN+1 0786 IF(LINE(I).EQ.1H).AND.PAREN.GT.0) PAREN=PAREN-1 0787 IF(PAREN.NE.0) GO TO 10 0788 IF(LINE(I).NE.1H,) GO TO 10 0789 C 0790 C--- STORE POINTER IN THE POINTER ARRAY 0791 C 0792 30 CONTINUE 0793 J=J+1 0794 IF(J.GT.40) GO TO 40 0795 PTR(J,1)=S 0796 PTR(J,2)=I-1 0797  IF(LINE(S).EQ.1H() PTR(J,1)=PTR(J,1)+1 0798 IF(LINE(S).EQ.1H() PTR(J,2)=PTR(J,2)-1 0799 S=I+1 0800 IF(I.LE.FINISH) GOTO 10 0801 GO TO 45 0802 C 0803 C--- ZERO OUT ANY OTHER PARAMETERS 0804 C 0805 40 CONTINUE 0806 ERRNUM=ERRNUM*16+5 0807 45 CONTINUE 0808 J=MIN0(J+1,41) 0809 DO 50 I=J,41 0810 PTR(I,1)=0 0811 PTR(I,2)=0 0812 50 CONTINUE 0813 SETPTR=J-1 0814 RETURN 0815 END 1PAGE 45 1982/08/06 10:57:33.00 INTEGER FUNCTION SETPTR(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/PTRS / ALLOCATION 0052 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 PTR 82 ARRAY INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL  1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 LINE 1 ARRAY INTEGER*2 0008 START 1 SCALAR INTEGER*2 0009 FINISH 1 SCALAR INTEGER*2 SCALAR A LLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0013 :FNVAL 1 SCALAR INTEGER*2 0014 QUOTE 1 SCALAR LOGICAL 0015 J 1 SCALAR INTEGER*2 0016 PAREN  1 SCALAR INTEGER*2 0017 S 1 SCALAR INTEGER*2 0018 I 1 SCALAR INTEGER*2 1PAGE 46 1982/08/06 10:57:42.50 INTEGER FUNCTION SETPTR(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN  SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS MIN0 KNOWN 0 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE  LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0012 #10 0035 #30 005D #40 0061 #45 0071 #50 DO END 0018 #M5 0035 #M6 001F #M7  001F #M8 0012 #M9 0027 #M10 002F #M11 0027 #M12 002F #M13  002F #M14 0012 #M15 0012 #M16 003B #M17 005D #M18 004B #M19 0054 #M20 004B #M21 0054 #M22 0012 #M23 005C #M24 006B #M25  STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE  LOCN LINE LOCN 751 0004 752 0006 753 0006 754 0006 755 0006 771 0009 772 0009 773 000B 774 000D 775 000E 776 0010 780 0012 781 0012 782 0014 783 0018 784 001F 785 0021 786 0027 787 002F 788 0031 792 0035 793 0035 794 0037 795 003B 796 003F 797 0043 798 004B 799  0054 800 0057 801 005C 805 005D 806 005D 807 0061 808 0061 809 006A 810 006C 811 006F 812 0071 813 0076 814 0079 815 007B ENTRY=0004 PROGRAM SIZE=0084 WORDS DATA SIZE=001A WORDS LONG INSTRUCTIONS USED 0 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 47 1982/08/06 10:57:46.00 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN 0816 SUBROUTINE PARSE 0817  IMPLICIT INTEGER(A-Z) 0818 COMMON/FIELDS/LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 0819 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 0820 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 0821 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 0822 COMMON/BUFFER/ LINE(80) 0823 COMMON/FMT/OUT(110),LABST,LABEND,OPCST,OPCEND,OPRST,OPREND,COMST 0824 LOGICAL QUOTE, LABFLG, LABERR, PSEUDO, OPERR, OPEN 0825 C 0826 C--- THIS SUBROUTINE WILL OBTAIN A LINE OF SOURCE TEXT AND THEN 0827 C--- BREAK IT UP INTO THE VARIOUS FIELDS OF THE ASSEMBLER COMMANDS. 0828 C 0829 C--- THE LABEL FIELD IS PUT INTO ARRAY 'LABEL' AND VARIABLE 'LABPTR' 0830 C--- CONTAINS THE NUMBER OF CHARACTERS IN THE LABEL. 0831 C 0832 C--- THE OPCODE (WITH APPROPRIATE ADDRESSING MODE INFORMATION 0833 C--- IF SYNATCTICALLY DEFINED) IS PUT  INTO ARRAY 'OPCODE' AND 0834 C--- VARIABLE 'OPTR' IS SET TO THE LENGTH OF THE OPCODE. 0835 C 0836 C 0837 C--- THE OPERAND FIELD (LESS ANY ADDRESSING MODE CHARACTERS 0838 C--- USED BY SYNTACTICALLY DEFINED OPCODES) IS PUT INTO ARRAY 0839 C--- 'SYMBOL' AND VARIABLE 'SYMPTR' IS SET TO THE NUMBER OF 0840 C--- CHARACTERS IN THE OPERAND FIELD. 0841 C 0842 C--- IF AN END OF FILE IS READ, A DUMMY '..' PSEUDO OP IS 0843 C--- GENERATED. 0844 C 0845 C 0846 C--- ADDRESSING MODE INFORMATION IS EXTRACTED FROM THE OPERAND 0847 C--- FIELD AND MOVED TO THE OPCODE FIELD BY: 0848 C--- 1) DELETING ('S 1PAGE 48 1982/08/06 10:57:48.25 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN 0849 C--- 2) MOVING )'S TO THE OPCODE FIELD 0850 C--- 3) DELETING ,'S AND MOVING THE CHARACTER FOLLOWING THE ',' 0851 C--- TO THE OPCODE FIELD. 0852 C--- 4) IF THE OPERAND FIELD IS NULL THEN A '*' IS APPENDED TO 0853 C--- THE OPCODE FIELD 0854 C--- 5) MOVING A LEADING '#' IN THE OPERAND TO THE OPCODE FIELD 0855 C--- THUS THE LINE: 0856 C--- LAB LDA (BUFFER),X 0857 C--- WOULD SET ARRAY LABEL TO 'LAB' AND VARIABLE LABPTR=3 0858 C--- ARRAY OPCODE TO 'LDA)X' AND VARIABLE OPTR TO 5 0859 C--- ARRAY SYMBOL TO 'BUFFER' AND VARIABLE SYMPTR=6 0860 C 0861 C---  NOTE THAT IF A LABEL IS TERMINATED BY A ':' THE ':' IS NOT 0862 C--- MOVED TO THE ARRAY 'LABEL'. 0863 C 0864 C 0865 C 0866 C 0867 C--- INITIALIZE VARIABLES 0868 C 0869 LABFLG=.FALSE. 0870 OPERR=.FALSE. 0871 LABERR=.FALSE. 0872 QUOTE=.FALSE. 0873 OPEN=.FALSE. 0874 ERRNUM=0 0875 PSEUDO=.TRUE. 0876 OPTR=0 0877 LABPTR=0 0878 SYMPTR=0 0879 PAREN=0 0880 LABST=0 0881 LABEND=0 1PAGE 49 1982/08/06 10:57:49.75 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN 0882 OPCST=0 0883 OPCEND=0 0884 OPRST=0 0885 OPREND=0 0886 COMST=0 0887 C 0888 C--- GET THE LINE FROM THE SOURCE FILE 0889 C 0890 C 0891 IF(PASS.EQ.2) GO TO 8 0892 READ(INFILE,2,END=500) LINE 0893 GO TO 10 0894 2 FORMAT(80A1) 0895 C 0896 C--- PASS 2 READ 0897 C 0898 8 CONTINUE 0899  READ(INFILE,2,END=600) LINE 0900 C 0901 C--- CHECK FOR A LABEL OR COMMENT 0902 C 0903 10 CONTINUE 0904  I=0 0905 CARD=CARD+1 0906 IF(LINE(1).EQ.1H;) GO TO 300 0907 IF(LINE(1).EQ.1H*) GO TO 300 0908 IF(LINE(1).EQ.1H ) GO TO 30 0909 LABST=1 0910 C 0911 C--- A LABEL IS PRESENT. MOVE IT TO THE LABEL BUFFER 0912 C 0913 20 CONTINUE 0914 I=I+1 1PAGE 50 1982/08/06 10:57:52.75 SUBROUTINE PARSE  FORTRAN(F300) ASM6502 .FTN 0915 IF(I.GT.80) GO TO 300 0916 IF(LINE(I).EQ.1H ) GO TO 30 0917 LABEND=I 0918 IF(LINE(I).EQ.1H:) GO TO 30 0919 IF(LABPTR.GE.7) LABERR=.TRUE. 0920  IF(LABERR) GO TO 20 0921 LABPTR=LABPTR+1 0922 LABEL(LABPTR)=LINE(I) 0923 GO TO 20 0924 C 0925 C-- - END OF LABEL. SPAN BLANKS TO THE OPCODE FIELD 0926 C 0927 30 CONTINUE 0928 I=I+1 0929 IF(I.GT.80) GO TO 300 0930 IF(LINE(I).EQ.1H ) GO TO 30 0931 OPCST=I 0932 I=I-1 0933 C 0934 C--- MOVE THE OPCODE FIELD TO THE OPCODE BUFFER 0935 C 0936 40 CONTINUE 0937 I=I+1 0938 IF(I.GT.80) GO TO 300 0939 IF(LINE(I).EQ.1H ) GO TO 60 0940 IF(LINE(I).EQ.1H;) GO TO 290 0941 OPCEND=I 0942 IF(OPTR.GE.7) OPERR=.TRUE. 0943 IF(OPERR) GO TO 40 0944 OPTR=OPTR+1 0945 OPCODE(OPTR)=LINE(I) 0946 GO TO 40 0947 C 1PAGE 51 1982/08/06 10:57:55.50 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN 0948 C--- END OF OPCODE. SPAN BLANKS TO THE OPERAND FIELD 0949 C 0950 60 CONTINUE 0951 I=I+1 0952 IF(I.GT.80) GOTO 300 0953 IF(LINE(I).EQ.1H ) GO TO 60 0954 C 0955 C--- SEE IF THE OPCODE CAN BE A SYNTACTICALLY DEFINED MACHINE OP 0956 C 0957 65 CONTINUE 0958 OPRST=I 0959 I=I-1 0960 IF(OPTR.NE.3) GO TO 100 0961 J=OPLOOK(OPCODE,1,OPTR,TYPE2,OPVALU) 0962 IF(J.LE.0.OR.TYPE2.GE.1) PSEUDO=.FALSE. 0963 IF(TYPE2.NE.1) GO TO 100 0964 OPRST=0 0965 OPREND=0 0966 I=I+1 0967 GOTO 290 0968 C 0969 C--- SCAN THE OPERAND FIELD, MOVING THE INFORMATION TO THE 0970 C--- OPCODE OR OPERAND BUFFERS AS NEEDED 0971 C 0972 100  CONTINUE 0973 I=I+1 0974 IF(I.GT.80) GO TO 300 0975 IF(LINE(I).EQ.1H') QUOTE=.NOT.QUOTE 0976 IF(QUOTE) GO TO 220 0977 IF(PAREN.NE.0) GO TO 200 0978 IF(LINE(I).EQ.1H ) GO TO 260 0979 IF(LINE(I).EQ.1H;) GO TO 295 0980 OPREND=I 1PAGE 52 1982/08/06 10:57:58.75 SUBROUTINE PARSE  FORTRAN(F300) ASM6502 .FTN 0981 IF(PSEUDO) GO TO 200 0982 C 0983 C--- WE HAVE WHAT IS MOST LIKELY A SYNTACTIACLLY DEFINED MACHINE OP. 0984 C--- MOVE SYNTAX INFORMATION TO THE OPCODE FIELD. 0985 C 0986  IF(LINE(I).EQ.1H#) GO TO 120 0987 IF(LINE(I).EQ.1H() GO TO 130 0988 IF(LINE(I).EQ.1H)) GO TO 120 0989 IF(LINE(I).NE.1H,) GO TO 200 0990 C 0991 I=I+1 0992 IF(I.GT.80) OPERR=.TRUE. 0993 IF(OPERR) GO TO 100  0994 OPREND=I 0995 C 0996 C--- MOVE CHARACTER TO THE OPCODE FIELD 0997 C 0998 120 CONTINUE 0999 IF(OPTR.GE.7) OPERR=.TRUE. 1000 IF(OPERR) GO TO 100 1001 OPTR=OPTR+1 1002 OPCODE(OPTR)=LINE(I) 1003 IF(LINE(I).EQ.1H#) PSEUDO=.TRUE. 1004 GO TO 100 1005 C 1006 130 CONTINUE 1007 IF(OPEN) GO TO 200 1008  OPEN=.TRUE. 1009 GO TO 100 1010 C 1011 C--- MOVE CHARACTER TO THE OPERAND BUFFER 1012 C 1013 200 CONTINUE 1PAGE 53 1982/08/06 10:58:01.50 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN 1014 IF(LINE(I).EQ.1H() PAREN=PAREN+1 1015 IF(LINE(I).EQ.1H)) PAREN=PAREN-1 1016 IF(PAREN.LT.0) ERRNUM=ERRNUM*16+9 1017 C 1018 220 CONTINUE 1019 SYMPTR=SYMPTR+1 1020 SYMBOL(SYMPTR)=LINE(I ) 1021 GO TO 100 1022 C 1023 C--- FIND START OF COMMENT 1024 C 1025 260 CONTINUE 1026 I=I+1 1027  IF(I.GT.80) GOTO 300 1028 IF(LINE(I).EQ.1H ) GOTO 260 1029 GOTO 295 1030 C 1031 C 1032 C--- END OF SCAN. CHECK FOR SPECIAL OPERANDS. 1033 C 1034 C 1035 290 CONTINUE 1036 PSEUDO=.FALSE. 1037 C 1038 295 CONTINUE 1039 COMST=I 1040 300 CONTINUE 1041 IF(PSEUDO.AND.OPTR.NE.0) GO TO 350 1042 IF(SYMPTR.NE.1) GOTO 350 1043 IF(SYMBOL(SYMPTR).NE.1HA) GOTO 350 1044 IF(OPTR.GE.7) OPERR=.TRUE. 1045 IF(OPERR) GO TO 350  1046 OPTR=OPTR+1 1PAGE 54 1982/08/06 10:58:04.50 SUBROUTINE PARSE  FORTRAN(F300) ASM6502 .FTN 1047 OPCODE(OPTR)=1HA 1048 C 1049 C--- EXIT PARSE BY CHECKING FOR SCAN ERRORS AND COMMENT LINES 1050 C 1051 350 CONTINUE 1052 IF(OPTR.EQ.0) OPCODE(1)=1H* 1053 IF(OPTR.EQ.0) OPTR=1 1054 IF(OPERR) ERRNUM=ERRNUM*16+7 1055 IF(LABERR) ERRNUM=ERRNUM*16+8 1056 IF(PAREN.NE.0) ERRNUM=ERRNUM*16+9 1057 RETURN 1058 C 1059 C--- IF THE END OF FILE ON PASS 1 THEN CREATE A .. PSEUDO OP 1060 C 1061 500 CONTINUE 1062 LINE(1)=1H 1063 LINE(2)=1H. 1064 OPCODE(1)=1H. 1065 LINE(3)=1H. 1066 OPCODE(2)=1H. 1067 OPTR=2 1068 LABPTR=0 1069 RETURN 1070 C 1071 C--- PASS 2 END OF FILE. CREATE A DUMMY END PSEUDO OP 1072 C 1073 600 CONTINUE 1074 OPCODE(1)=1H. 1075 OPCODE(2)=1HE 1076 OPCODE(3)=1HN 1077 OPCODE(4)=1HD 1078 OPTR=4 1079 LABPTR=0 1PAGE 55 1982/08/06 10:58:07.75 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN 1080 SYMPTR=0 1081 RETURN 1082 C 1083 END 1PAGE 56 1982/08/06 10:58:09.50 SUBROUTINE PARSE  FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LABEL 7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY INTEGER*2 000E SYMBOL 80 ARRAY INTEGER*2 005E OPTR 1 SCALAR INTEGER*2 005F LABPTR 1 SCALAR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 1 SCALAR INTEGER*2 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WOR DS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ 1 SCALAR INTEGER*2 COMMON BLOCK/BUFFER/ ALLOCATION 0050 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LINE 80 ARRAY INTEGER*2 1PAGE 57 1982/08/06 10:58:10.50 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/FMT / ALLOCATION 0075 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 OUT 110 ARRAY INTEGER*2 006E LABST 1 SCALAR INTEGER*2 006F LABEND 1 SCALAR INTEGER*2 0070 OPCST 1 SCALAR INTEGER*2 0071 OPCEND 1 SCALAR INTEGER*2 0072 OPRST 1 SCALAR INTEGER*2 0073 OPREND 1 SCALAR INTEGER*2 0074 COMST 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0027 LABFLG 1 SCALAR LOGICAL 0028 OPERR  1 SCALAR LOGICAL 0029 LABERR 1 SCALAR LOGICAL 002A QUOTE 1 SCALAR LOGICAL 002B OPEN 1 SCALAR LOGICAL 002C PSEUDO 1 SCALAR LOGICAL 002D PAREN 1 SCALAR INTEGER*2 002E I 1 SCALAR INTEGER*2 002F J 1 SCALAR INTEGER*2 0030 TYPE2 1 SCALAR INTEGER*2 0031 OPVALU 1 SCALAR INTEGER*2 1PAGE 58 1982/08/06 10:58:40.00 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS F:RREF RUNTIME F:RIUS RUNTIME F:RETF RUNTIME OPLOOK USER 5 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE  LOCN LABEL USE 002E #8 0004 #2 FORMAT 01AA #500 0039 #10 01BC  #600 016C #300 006A #30 004B #20 0078 #40 00A1 #60 0168 #290  00AB #65 UNUSED 00DC #100 0156 #220 0139 #200 015D #260 016A #295 0121 #120 0134 #130 018D #350 002E #M20 016C #M21 016C #M22 006A #M23 0051 #M24 016C #M25 006A #M26 006A #M27  0061 #M28 0061 #M29 005F #M30 004B #M31 0070 #M32 016C #M33  006A #M34 0085 #M35 0088 #M36 016C #M37 00A1 #M38 0168 #M39  0098 #M40 0098 #M41 0096 #M42 0078 #M43 00A7 #M44 016C #M45  00A1 #M46 00DC #M47 00D3 #M48 00C2 #M49 00D1 #M50 00D3 #M51   00D1 #M52 00DC #M53 00E2 #M54 016C #M55 00E9 #M56 00E9 #M57 0156 #M58 0139 #M59 015D #M60 016A #M61 0139 #M62 0121 #M63 0134 #M64 010D #M65 0121 #M66 0139 #M67 011D #M68  011D #M69 011B #M70 00DC #M71 0127 #M72 0127 #M73 0125 #M74 00DC #M75 0133 #M76 0133 #M77 0139 #M78 0149 #M79 0150 #M80  0156 #M81 0149 #M82 0147 #M83 0150 #M84 0156 #M85 0163 #M86  016C #M87 015D #M88 0170 #M89 018D #M90 018D #M91 018D #M92  0186 #M93 0181 #M94 0186 #M95 0184 #M96 018D #M97 0192 #M98 0196 #M99 019C #M100 01A2 #M101 01A8 #M102 0192 #M103 0196 #M104 019C #M105 01A2 #M106 01A8 #M107 1PAGE 59 1982/08/06 10:58:41.50 SUBROUTINE PARSE FORTRAN(F300) ASM6502 .FTN STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 816 0007 817 0009 818 0009 819 0009 820 0009 821 0009 822 0009 823 0009 824 0009 869 0009 870  000B 871 000C 872 000D 873 000E 874 000F 875 0011 876 0013 877 0015 878 0016 879 0017 880 0018 881 0019 882 001A 883 001B 884 001C 885 001D 886 001E 891 001F 892 0022 893 002D 894 002E 898 002E 899 002E 903 0039 904 0039 905 003B 906 003D 907 0041 908 0045 909 0049 913 004B 914 004B 915 004D 916 0051 917 0055 918 0057 919 005B 920 0061 921 0063 922 0065 923 0069 927 006A 928 006A 929 006C 930 0070 931 0074 932 0076 936 0078 937 0078 938  007A 939 0088 940 008C 941 0090 942 0092 943 0098 944 009A 945 009C 946 00A0 950 00A1 951 00A1 952 00A3 953 00A7 957 00AB 958 00AB 959 00AD 960 00AF 961 00B2 962 00CC 963 00D3 964 00D6 965 00D8 966 00D9 967 00DB 972 00DC 973 00DC 974 00DE 975 00E2 976 00E9 977 00EB 978 00ED 979 00F1 980 00F5 981 00F7 986 00F9 987 00FD 988 0101 989 0110 991 0114 992  0116 993 011D 994 011F 998 0121 999 0121 1000 0127 1001 0129 1002 012B 1003 012F 1004 0133 1006 0134 1007 0134 1008 0136 1009 0138 1013 0139 1014 0139 1015 0149 1016 0150 1018 0156 1019 0156 1020 0158 1021 015C 1025 015D 1026 015D 1027 015F 1028 0163 1029 0167 1035 0168 1036 0168 1038 016A 1039 016A 1040 016C 1041 016C 1042 0170 1043 0173 1044 0177 1045 0186 1046 0188 1047 018A 1051   018D 1052 018D 1053 0192 1054 0196 1055 019C 1056 01A2 1057 01A8 1061 01AA 1062 01AA 1063 01AD 1064 01B0 1065 01B2 1066 01B4 1067 01B6 1068 01B8 1069 01BA 1073 01BC 1074 01BC 1075 01BF 1076 01C2  1077 01C5 1078 01C8 1079 01CA 1080 01CC 1081 01CD 1083 01CF ENTRY=0007 PROGRAM SIZE=01DA WORDS DATA SIZE=0033 WORDS LONG INSTRUCTIONS USED 3 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 60 1982/08/06 10:58:45.75 SUBROUTINE ERROR FORTRAN(F300) ASM6502 .FTN 1084 SUBROUTINE ERROR 1085 IMPLICIT INTEGER(A-Z) 1086 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 1087 COMMON/FIELDS/LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 1088 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 1089 LOGICAL DIDIT(15) 1090 C 1091 C--- THIS SUBROUTINE HANDLES THE PRINTING OF ERROR MESSAGES 1092 C 1093 IF(ERRNUM.EQ.0) RETURN 1094 DO 5 I=1,15 1095 DIDIT(I)=.FALSE. 1096 5 CONTINUE 1097 C 1098 CALL HEADING(1,1) 1099 CALL HEADING(-1,1) 1100 C WRITE(OUTFIL,777) LABPTR,LABEL,OPTR,OPCODE,SYMPTR,SYMBOL 1101 C777 FORMAT(1X,I5,1X,7A1,/,1X,I5,1X,7A1,/,1X,I5,1X,80A1) 1102 C 1103 C--- LOOP FOR THE ERRORS IN THE ERROR WORD 1104 C 1105 10 CONTINUE 1106 IF(ERRNUM.EQ.0) RETURN 1107 ERRCNT=ERRCNT+1 1108 ERR=ERRNUM-ERRNUM/16*16 1109  ERR=IABS(ERR) 1110 ERRNUM=ERRNUM/16 1111 ERRNUM=IABS(ERRNUM) 1112 CALL HEADING(1,1) 1113 GO TO (500,1000,1200, 1114 + 1400,1800,1900,2000,2100,2200,2400, 1115 + 2500,2700,10,10),ERR 1116 C 1PAGE 61 1982/08/06 10:58:48.75 SUBROUTINE ERROR FORTRAN(F300) ASM6502 .FTN 1117 C 1118 500 CONTINUE 1119 IF(DIDIT(1)) GO TO 10 1120 WRITE(OUTFIL, 550 ) 1121 DIDIT(1)=.TRUE. 1122 GO TO 10 1123 550 FORMAT(' *** ERROR. REQUIRED FIELD IS MISSING. CARD IS IGN', 1124 + 'ORED.') 1125 C 1126 C 1127 1000 CONTINUE 1128 IF(DIDIT(2)) GO TO 10 1129 WRITE(OUTFIL, 1050 ) 1130 DIDIT(2)=.TRUE. 1131 GO TO 10 1132 1050 FORMAT(' *** ERROR. OPERAND IS OUT OF RANGE. ONLY LOW ORDER', 1133 + ' BITS ARE USED.') 1134 C 1135 C 1136 1200 CONTINUE 1137 IF(DIDIT(3)) GO TO 10 1138 WRITE(OUTFIL, 1250 ) 1139  DIDIT(3)=.TRUE. 1140 GO TO 10 1141 1250 FORMAT(' *** ERROR. REQUIRED FIELD IS MISSING.') 1142 C 1143 C 1144 1400 CONTINUE 1145 IF(DIDIT(4)) GO TO 10 1146 WRITE(OUTFIL, 1450 ) 1147 DIDIT(4)=.TRUE. 1148 GO TO 10 1PAGE 62 1982/08/06 10:58:52.00 SUBROUTINE ERROR FORTRAN(F300) ASM6502 .FTN 1149 1450 FORMAT(' *** ERROR. INVALID OPCODE AND/OR ADDRESSING MODE CO', 1150 + 'NFLICT.') 1151 C 1152 C 1153 C 1154 1800 CONTINUE 1155 IF(DIDIT(5)) GO TO 10 1156 WRITE(OUTFIL, 1850 ) 1157 DIDIT(5)=.TRUE. 1158 GO TO 10 1159 1850 FORMAT(' *** ERROR. TOO MANY FIELDS IN OPERAND. EXCESS ARE ', 1160  + 'IGNORED.') 1161 C 1162 C 1163 1900 CONTINUE 1164 IF(DIDIT(6)) GO TO 10 1165 WRITE(OUTFIL, 1950 ) 1166 DIDIT(6)=.TRUE. 1167 GO TO 10 1168 1950 FORMAT(' *** ERROR. DUPLICATE SYMBOL DEFINITION. FIRST DEFI', 1169 + 'NITION HOLDS.') 1170 C 1171 C 1172 2000 CONTINUE 1173 IF(DIDIT(7)) GO TO 10 1174 WRITE(OUTFIL, 2050 ) 1175 DIDIT(7)=.TRUE. 1176 GO TO 10 1177 2050 FORMAT(' *** ERROR. OPCODE TRANSLATION WAS TOO LONG. EXCESS', 1178 + ' TRUNCATED.') 1179 C 1180 C 1181 2100 CONTINUE 1PAGE 63 1982/08/06 10:58:54.50 SUBROUTINE ERROR FORTRAN(F300) ASM6502 .FTN 1182 IF(DIDIT(8)) GO TO 10 1183 WRITE(OUTFIL, 2150 ) 1184 DIDIT(8)=.TRUE. 1185 GO TO 10 1186 2150 FORMAT(' *** ERROR.  LABEL WAS TOO LONG. EXCESS IS TRUNCATED.') 1187 C 1188 C 1189 2200 CONTINUE 1190 IF(DIDIT(9)) GO TO 10 1191  WRITE(OUTFIL, 2250 ) 1192 DIDIT(9)=.TRUE. 1193 GO TO 10 1194 2250 FORMAT(' *** ERROR. UNBALANCED PARENTHESIS.') 1195 C 1196 C 1197 2400 CONTINUE 1198 IF(DIDIT(10)) GO TO 10 1199 WRITE(OUTFIL, 2450 ) 1200  DIDIT(10)=.TRUE. 1201 GO TO 10 1202 2450 FORMAT(' *** ERROR. SYMBOL HAS NOT YET BEEN DEFINED IN THIS ', 1203  + 'ASSEMBLY.') 1204 C 1205 C 1206 2500 CONTINUE 1207 IF(DIDIT(11)) GO TO 10 1208 WRITE(OUTFIL, 2550 ) 1209 DIDIT(11)=.TRUE. 1210 GO TO 10 1211 2550 FORMAT(' *** ERROR. INVALID DIGIT IN NUMERIC CONSTANT') 1212 C 1213 C 1214 2700 CONTINUE 1PAGE 64 1982/08/06 10:58:57.75 SUBROUTINE ERROR  FORTRAN(F300) ASM6502 .FTN 1215 WRITE(OUTFIL,2750) 1216 2750 FORMAT(' *** ERROR. SYMBOL TABLE FULL. ALL FOLLOWING ', 1217 +'SYMBOL DEFINITIONS IGNORED.') 1218 GO TO 10 1219 END 1PAGE 65 1982/08/06 10:58:59.50 SUBROUTINE ERROR FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LABEL 7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY INTEGER*2 000E SYMBOL 80 ARRAY INTEGER*2 005E OPTR 1 SCALAR INTEGER*2 005F LABPTR 1 SCALAR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL  1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ 1 SCALAR INTEGER*2 SCALAR ALLOCATIO N LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 001A I  1 SCALAR INTEGER*2 001B ERR 1 SCALAR INTEGER*2 1PAGE 66 1982/08/06 10:59:00.25 SUBROUTINE ERROR FORTRAN(F300) ASM6502 .FTN ARRAY ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 001C DIDIT 15 ARRAY LOGICAL 1PAGE 67 1982/08/06 10:59:18.75 SUBROUTINE ERROR  FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE  ARGS NAME TYPE ARGS NAME TYPE ARGS HEADIN USER 2 IABS INLINE F:RCGO RUNTIME F:RWEF RUNTIME F:RETF RUNTIME F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE  LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 018D #5 DO END 019D #10 01CC #500 01D8 #1000 01E4 #1200 01F0 #1400 01FC #1800 0210 #1900 021C #2000 0228 #2100 0234 #2200 0240 #2400 024C #2500 0261 #2700  0004 #550 FORMAT 0024 #1050 FORMAT 004A #1250 FORMAT 0060 #1450 FORMAT 0082 #1850 FORMAT 00A4 #1950 FORMAT 00C9 #2050 FORMAT 00ED #2150 FORMAT 010A #2250 FORMAT 011E #2450 FORMAT 0141 #2550 FORMAT 015A #2750 FORMAT 0189 #M26 0189 #M27 018A #M28 01A1 #M29 01A1 #M30  01AF #M31 01B4 #M32 019D #M33 019D #M34 019D #M35 019D #M36 019D #M37 0207 #M38 019D #M39 019D #M40 019D #M41 019D #M42 019D #M43 0255 #M44 019D #M45 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1084 0183 1085 0185 1086 0185 1087 0185 1088 0185 1089 0185 1093 0185 1094 0189 1095 018B 1096 018D 1098 0191 1099 0197 1105 019D 1106 019D 1107 01A1 1108 01A3 1109 01AD 1110 01B0 1111 01B2 1112 01B5 1113 01BB 1118 01CC 1119 01CC 1120 01CF 1121 01D4 1122 01D7 1123 01D8 1127 01D8 1128 01D8 1129 01DB 1130 01E0 1131 01E3 1132 01E4 1136 01E4 1137 01E4 1138 01E7 1139 01EC 1140 01EF 1141 01F0 1144 01F0 1145 01F0 1146 01F3 1147 01F8 1148 01FB 1149 01FC 1154 01FC 1155 01FC 1156 01FF 1157 020C 1158 020F 1159 0210 1163  0210 1164 0210 1165 0213 1166 0218 1167 021B 1168 021C 1172 021C 1173 021C 1174 021F 1175 0224 1176 0227 1177 0228 1PAGE 68 1982/08/06 10:59:20.75 SUBROUTINE ERROR  FORTRAN(F300) ASM6502 .FTN 1181 0228 1182 0228 1183 022B 1184 0230 1185 0233 1186 0234 1189  0234 1190 0234 1191 0237 1192 023C 1193 023F 1194 0240 1197 0240 1198 0240 1199 0243 1200 0248 1201 024B 1202 024C 1206 024C 1207 024C 1208 0258 1209 025D 1210 0260 1211 0261 1214 0261 1215 0261 1216 0266 1218 0266 1219 0267 ENTRY=0183 PROGRAM SIZE=0276 WORDS DATA SIZE=002C WORDS LONG INSTRUCTIONS USED 1 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 69 1982/08/06 10:59:23.50 SUBROUTINE HEADING(VALUE,FORCE) FORTRAN(F300) ASM6502 .FTN 1220 SUBROUTINE HEADING(VALUE,FORCE) 1221 IMPLICIT INTEGER(A-Z) 1222 COMMON/OPTIONS/ NOLIST,NOOBJ,NOXREF,NOGEN 1223 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 1224 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 1225 C 1226 C--- THIS SUBROUTINE WILL PRINTS OUT A HEADING AT THE TOP OF A PAGE 1227 C--- AND CONTROLS SPACING OF LINES, ETC. 1228 C 1229 C--- PARAMETER 'VALUE' IS A FUNCTION CODE. IF 0 THEN (-VALUE) BLANK 1230 C--- LINES WILL BE PRINTED. IF VALUE = 0, THEN A PAGE EJECT WILL OCCUR.  1231 C--- IF 'VALUE' \ 0, THEN THE LINE COUNTER WILL BE INCREMENTED BY 1232 C--- 'VALUE' LINES AND ANY NECESSARY PAGING WILL BE TAKEN IF THE 1233 C--- LINE COUNT IS \ THE MAXIMUM NUMBER OF LINES ON A PAGE. 1234 C 1235 C 1236 C--- CHECK LISTING OPTIONS AND FORCED OVERIDE PARAMETER ('FORCE'=1 1237 C--- MEANS TO FORCE PRINTING OF HEADERS REGARDLESS OF LISTING OPTIONS). 1238 C 1239 IF(NOLIST.EQ.1.AND.FORCE.EQ.0) RETURN 1240 IF(VALUE.LT.0) GO TO 200 1241 IF(VALUE.EQ.0) LINENO=10000 1242 C 1243 C--- BUMP THE LINE COUNT 1244 C 1245 LINENO=LINENO+VALUE 1246 IF(LINENO.LT.MAXLIN) RETURN 1247 C 1248 C--- PRINT A PAGE EJECT AND A HEADER LINE 1249 C 1250 50 CONTINUE 1251 PAGE=PAGE+1 1252 LINENO=3 1PAGE 70 1982/08/06 10:59:25.75 SUBROUTINE HEADING(VALUE,FORCE)  FORTRAN(F300) ASM6502 .FTN 1253 WRITE(OUTFIL,100) PAGE,TITLE 1254 100 FORMAT('1PAGE ',I5,16X,80A1,//) 1255 RETURN 1256 C 1257 C--- PRINT BLANK LINES 1258 C 1259 200 CONTINUE 1260 VAL=IABS(VALUE) 1261 LINENO=LINENO+VAL 1262 IF(LINENO.GT.MAXLIN-1) GO TO 50 1263 DO 240 I=1,VAL 1264 WRITE(OUTFIL,220) 1265 220 FORMAT(' ') 1266 240 CONTINUE 1267 RETURN 1268 END 1PAGE 71 1982/08/06 10:59:28.50 SUBROUTINE HEADING(VALUE,FORCE) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/OPTION/ ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE 0000 NOLIST 1 SCALAR INTEGER*2 0001 NOOBJ 1 SCALAR INTEGER*2 0002 NOXREF 1 SCALAR  INTEGER*2 0003 NOGEN 1 SCALAR INTEGER*2 COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ 1 SCALAR INTEGER*2 COMMO N BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 1 SCALAR INTEGER*2 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 VALUE 1 SCALAR INTEGER*2 0008 FORCE 1 SCALAR INTEGER*2 1PAGE 72 1982/08/06 10:59:29.00 SUBROUTINE HEADING(VALUE,FORCE) FORTRAN(F300) ASM6502 .FTN SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0017 VAL 1 SCALAR INTEGER*2 0018 I 1 SCALAR INTEGER*2 1PAGE 73 1982/08/06 10:59:35.50 SUBROUTINE HEADING(VALUE,FORCE) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS F:RWEF RUNTIME F:RIOL RUNTIME F:RIUS RUNTIME F:RETF RUNTIME IABS INLINE F:RGMY RUNTIME STATEMENT LABELS LOCN  LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 003E #200  002C #50 0004 #100 FORMAT 0050 #240 DO END 0011 #220 FORMAT 001D #M5 001D #M6 001D #M7 003E #M8 0023 #M9 002C #M10 0023 #M11  002A #M12 002C #M13 0041 #M14 002C #M15 0049 #M16 004A #M17 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1220 0014 1221 0016 1222 0016 1223 0016 1224 0016 1239 0016 1240 001D 1241 001F 1245 0023 1246 0026 1250 002C 1251 002C 1252 002E 1253 0030 1254 003C 1255 003C 1259 003E 1260 003E 1261 0042 1262 0044 1263 0049 1264 004B 1265 0050 1266 0050 1267 0055 1268 0057 ENTRY=0014 PROGRAM SIZE=005E WORDS DATA SIZE=0019 WORDS LONG INSTRUCTIONS USED 1 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 74 1982/08/06 10:59:39.00 INTEGER FUNCTION ASCII(CHAR) FORTRAN(F300)  ASM6502 .FTN 1269 INTEGER FUNCTION ASCII(CHAR) 1270 IMPLICIT INTEGER(A-Z) 1271 ASCII=IAND(CHAR,:7F00)/256 1272 RETURN 1273 END 1PAGE 75 1982/08/06 10:59:40.75 INTEGER FUNCTION ASCII(CHAR)  FORTRAN(F300) ASM6502 .FTN DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 CHAR 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS T YPE MODE 0009 :FNVAL 1 SCALAR INTEGER*2 1PAGE 76 1982/08/06 10:59:44.50 INTEGER FUNCTION ASCII(CHAR) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS IAND INLINE F:RGMY RUNTIME STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1269 0004 1270 0006 1271 0006 1272 000D 1273 000F ENTRY=0004 PROGRAM SIZE=0012 WORDS DATA SIZE=000A WORDS LONG INSTRUCTIONS USED 1 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE  77 1982/08/06 10:59:47.00 INTEGER FUNCTION EVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 1274 INTEGER FUNCTION EVAL(LINE,START,FINISH) 1275 IMPLICIT INTEGER(A-Z) 1276 C 1277 C 1278 C--- THIS FUNCTION IS CALLED TO EVALUATE AN EXPRESSION. THE VALUE 1279 C--- OF THE EXPRESSION IN ARRAY 'LINE' STARTING AT COLUMN 'START' AND 1280 C--- ENDING IN COLUMN 'FINISH' IS RETURNED THROUGH THE FUNCTION NAME. 1281 C 1282 C--- THE EXPRESSION CAN HAVE ANY NUMBER OF PARENTHESES NESTED, ETC. 1283 C--- THE ALLOWABLE OPERATORS AND THEIR PRECEDENCE IS AS FOLLOWS: 1284 C--- 1285 C--- * - MULTIPLICATION - 8 1286 C--- / - DIVISION - 8 1287 C--- + - ADDITION - 7 1288 C--- - - SUBTRACTION - 7 1289 C--- < - LESS THAN - 6 1290 C--- = - EQUAL TO - 6 1291 C---  > - GREATER THAN - 6 1292 C--- >= - GREATER THAN OR 1293 C--- => EQUAL TO -6 1294 C--- <= - LESS THAN OR 1295 C--- =< EQUAL TO - 6 1296 C--- <> - NOT EQUAL TO 1297 C--- >< - 6 1298 C--- ** - AND - 5 1299 C--- ++ - OR - 4 1300 C--- // - EXCLUSIVE OR - 4 1301 C--- - - UNARY MINUS  - 3 1302 C--- + - UNARY PLUS - 3 1303 C--- -- - LOGICAL NOT - 2 1304 C 1305 C 1306 DIMENSION LINE(80), OPTAB(10), PRCTAB(17) 1PAGE 78 1982/08/06 10:59:48.50 INTEGER FUNCTION EVAL(LINE,START,FINISH)  FORTRAN(F300) ASM6502 .FTN 1307 LOGICAL QUOTE 1308 DATA OPTAB/1H),1H(,1H+,1H-,1H*,1H/,1H',1H<,1H=,1H>/ 1309 DATA PRCTAB/1,2,7,7,8,8,-1,6,6,6,6,6,6,4,5,3,4/ 1310 F=FINISH 1311 EXPSTK=0 1312  OPSTAK=0 1313 QUOTE=.FALSE. 1314 I=START-1 1315 N=I 1316 S=START 1317 C 1318 C--- START SCAN OF STRING 1319 C 1320 10 CONTINUE 1321 I=N+1 1322 N=I 1323 IF(I.GT.F) GO TO 500 1324 IF(QUOTE) GO TO 300 1325 DO 20 J=1,10 1326 IF(LINE(I).NE.OPTAB(J)) GO TO 20 1327 OPER=J 1328 GO TO 40 1329 20 CONTINUE 1330 GO TO 10 1331 C 1332 C--- OPERATOR FOUND 1333 C 1334 40 CONTINUE 1335  GO TO (400,100,180,180,180,180,300,110,110,110),OPER 1336 C 1337 C--- OPEN PAREN FOUND. PUSH ON OPSTACK 1338 C 1339 100 CONTINUE 1PAGE 79 1982/08/06 10:59:51.50 INTEGER FUNCTION EVAL(LINE,START,FINISH)   FORTRAN(F300) ASM6502 .FTN 1340 CALL PUSH(2,OPSTAK) 1341 S=I+1 1342 GO TO 10 1343 C 1344 C--- RELATIONAL OPERATOR 1345 C 1346 110 CONTINUE 1347 IF(I.EQ.F) GO TO 100 1348 J=I+1 1349 IF(LINE(I).EQ.1H<.AND.LINE(J).EQ.1H=) OPER=11 1350 IF(LINE(I).EQ.1H<.AND.LINE(J).EQ.1H>) OPER=13 1351 IF(LINE(I).EQ.1H=.AND.LINE(J).EQ.1H>) OPER=12 1352 IF(LINE(I).EQ.1H=.AND.LINE(J).EQ.1H<) OPER=11 1353 IF(LINE(I).EQ.1H>.AND.LINE(J).EQ.1H=) OPER=12 1354 IF(LINE(I).EQ.1H>.AND.LINE(J).EQ.1H<) OPER=13 1355 IF(OPER.GE.11) N=J 1356 GO TO 200 1357 C 1358 C--- LOGICAL OPERATOR 1359 C 1360 180 CONTINUE 1361 IF(I.EQ.F) GO TO 200 1362 J=I+1 1363 IF(LINE(I).EQ.1H+.AND.LINE(J).EQ.1H+) OPER=14 1364 IF(LINE(I).EQ.1H*.AND.LINE(J).EQ.1H*) OPER=15 1365 IF(LINE(I).EQ.1H-.AND.LINE(J).EQ.1H-) OPER=16 1366 IF(LINE(I).EQ.1H/.AND.LINE(J).EQ.1H/) OPER=17 1367 IF(OPER.LT.14) GO TO 200 1368 N=J 1369 GO TO 200 1370 C 1371 C--- GET OPERATOR PRECEDENCE 1372 C 1PAGE 80 1982/08/06 10:59:55.75 INTEGER FUNCTION EVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 1373 200 CONTINUE 1374 PRCD=PRCTAB(OPER) 1375 C 1376 C--- SEE IF UNARY OP 1377 C 1378 IF(OPER.NE.3.AND.OPER.NE.4.AND.OPER.NE.16) GO TO 245 1379 IF(OPER.EQ.16) GO TO 245 1380 IF(I.EQ.START) CALL PUSH(0,EXPSTK) 1381 IF(I.NE.START.AND.LINE(I-1).EQ.1H() CALL PUSH(0,EXPSTK) 1382 IF(I.EQ.START) GO TO 250 1383  IF(I.NE.START.AND.LINE(I-1).EQ.1H() GO TO 250 1384 245 CONTINUE 1385 C 1386 C--- CHECK PRECEDENCE OF TOP OF OPSTACK 1387 C 1388 240 CONTINUE 1389 IF(S.GT.I-1) GO TO 250 1390 OP=POP(OPSTAK) 1391 CALL PUSH(OP, OPSTAK) 1392 STKPRCD=0 1393 IF(OP.NE.0) STKPRCD=PRCTAB(OP) 1394 VAL=TERM(LINE,S,I-1) 1395 CALL PUSH(VAL,EXPSTK) 1396 C 1397 C--- SEE IF OPERATION CAN BE GENERATED 1398 C 1399 250 CONTINUE 1400 OP=POP(OPSTAK) 1401 STKPRCD=0 1402 IF(OP.NE.0) STKPRCD=PRCTAB(OP) 1403 IF(STKPRCD.LT.PRCD) GO TO 260 1404 CALL GENOP(OP,EXPSTK) 1405 GO TO 250 1PAGE 81 1982/08/06 10:59:59.50 INTEGER FUNCTION EVAL(LINE,START,FINISH)  FORTRAN(F300) ASM6502 .FTN 1406 C 1407 C--- STACK PRECDENCE WAS LESS THAN OPERATOR PRECEDNCE 1408 C 1409 260 CONTINUE 1410 CALL PUSH(OP,OPSTAK) 1411 S=N+1 1412 CALL PUSH(OPER,OPSTAK) 1413 GO TO 10 1414 C 1415 C--- QUOTE 1416 C 1417 300 CONTINUE 1418 IF(.NOT.QUOTE) S=I 1419 IF(LINE(I).EQ.1H') QUOTE=.NOT.QUOTE 1420 IF(QUOTE) GO TO 10 1421 C 1422 C--- END OF QUOTED TOKEN 1423 C 1424 VAL=TERM(LINE,S,I) 1425 CALL PUSH(VAL,EXPSTK) 1426 S=I+1 1427 GO TO 10 1428 C 1429 C--- CLOSE PAREN. START POPPING OPSTACK UNTIL AN OPEN PAREN 1430 C 1431 400 CONTINUE 1432 VAL=0 1433 IF(S.GT.I-1) GO TO 420 1434 VAL=TERM(LINE,S,I-1) 1435 CALL PUSH(VAL,EXPSTK) 1436 420 CONTINUE 1437 S=I+1 1438 OP= POP(OPSTAK) 1PAGE 82 1982/08/06 11:00:02.25 INTEGER FUNCTION EVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 1439 IF(OP.EQ.0) GO TO 600 1440 IF(OP.EQ.2) GO TO 10 1441 CALL GENOP(OP,EXPSTK) 1442 GO TO 400 1443 C 1444 C--- END OF LINE 1445 C 1446 500 CONTINUE 1447 C 1448 IF(LINE(F).EQ.1H)) GO TO 520 1449 IF(LINE(F).EQ.1H') GO TO 520 1450 VAL=TERM(LINE,S,F) 1451 CALL PUSH(VAL,EXPSTK) 1452 C 1453 C--- FINISH OFF OPERATOR STACK 1454 C 1455 520 CONTINUE 1456 OP=POP(OPSTAK) 1457 IF(OP.LE.2) GO TO 600 1458 CALL GENOP(OP,EXPSTK) 1459 GO TO 520 1460 C 1461 C--- RETURN A VALUE 1462 C 1463 600 CONTINUE 1464 EVAL=POP(EXPSTK) 1465 RETURN 1466 END 1PAGE 83 1982/08/06 11:00:05.75 INTEGER FUNCTION EVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 LINE 1 ARRAY INTEGER*2 0008 START 1 SCALAR INTEGER*2 0009 FINISH 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  0012 :FNVAL 1 SCALAR INTEGER*2 0013 F 1 SCALAR INTEGER*2 0014 EXPSTK 1 SCALAR INTEGER*2 0015 OPSTAK 1 SCALAR INTEGER*2 0016 QUOTE 1 SCALAR LOGICAL 0017 I 1 SCALAR INTEGER*2 0018 N 1 SCALAR INTEGER*2 0019 S 1 SCALAR INTEGER*2 001A J 1 SCALAR INTEGER*2 001B OPER 1 SCALAR INTEGER*2 001C PRCD 1 SCALAR INTEGER*2 001D OP 1 SCALAR INTEGER*2 001E STKPRC 1 SCALAR INTEGER*2 001F VAL 1 SCALAR INTEGER*2 ARRAY ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0020 OPTAB 10 ARRAY INTEGER*2 002A PRCTAB 17 ARRAY INTEGER*2 1PAGE 84 1982/08/06 11:00:34.25 INTEGER FUNCTION EVAL(LINE,START,FINISH) FORTRAN(F300)  ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS F:RCGO RUNTIME PUSH USER 2 POP USER 1 TERM USER 3  GENOP USER 2 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0016 #10 01B0 #500 0160 #300 002A #20 0030 #40 0185 #400 003D #100 0095 #180 0047 #110  00D1 #200 0107 #245 0138 #250 0107 #240 UNUSED 0150 #260 019D #420 01E0 #600 01CF #520 001E #M17 01B0 #M18 0160 #M19 0021 #M20  002A #M21 003D #M22 0057 #M23 0066 #M24 0070 #M25 007A #M26   0084 #M27 008E #M28 0094 #M29 0057 #M30 0057 #M31 0066 #M32  0060 #M33 0066 #M34 0070 #M35 0070 #M36 007A #M37 007A #M38 0084 #M39 0084 #M40 008E #M41 008E #M42 0094 #M43 0092 #M44 00D1 #M45 00AC #M46 00B6 #M47 00C0 #M48 00CA #M49 009F #M50 00AC #M51 00AC #M52 00B6 #M53 00B6 #M54 00C0 #M55 00C0 #M56 00CA #M57 00CA #M58 00D1 #M59 00CE #M60 00E2 #M61  00DC #M62 00E2 #M63 0107 #M64 0107 #M65 00EE #M66 00FC #M67  00EE #M68 00FC #M69 00FC #M70 0138 #M71 0107 #M72 0138 #M73  0138 #M74 010C #M75 011F #M76 011F #M77 0127 #M78 0145 #M79 0145 #M80 0150 #M81 0149 #M82 0164 #M83 016B #M84 0164 #M85 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII! IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIe820806095553820806095553820806140517e@820806095553820806095553820806140516" e820806095553820806095553820806095553e820806095553820806095553820806095553820806095553820806095553820806095553e8208061018042582080611054850820806114810# $ % & ' ( ) * + . ASM6502 LST,  016B #M86 0016 #M87 0173 #M88 019D #M89 018C #M90 01E0 #M91 0016 #M92 01CF #M93 01CF #M94 01C9 #M95 01E0 #M96 01D9 #M97 1PAGE 85 1982/08/06 11:00:35.75 INTEGER FUNCTION EVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1274 0004 1275 0006 1306 0006 1307 0009 1308 0009 1309 0009 1310 0009 1311 000B 1312 000D 1313 000E 1314 0010 1315 0013 1316 0014 1320 0016 1321 0016 1322 0019 1323 001A 1324 001E 1325 0020 1326 0022 1327 0027 1328 0029 1329 002A 1330 002F 1334 0030 1335 0030 1339 003D 1340 003D 1341 0043 1342 0046 1346 0047 1347 0047 1348 004A 1349 004D 1350 0057 1351 0066 1352 0070 1353 007A 1354 0084 1355 008E 1356 0094 1360 0095 1361 0095 1362 0098 1363 00A2 1364 00AC 1365 00B6 1366 00C0 1367 00CA 1368 00CE 1369 00D0 1373 00D1 1374 00D1 1378 00D4 1379 00E2 1380 00E5 1381 00EE 1382 00FC 1383 00FF 1384 0107 1388 0107 1389 0107 1390 010C 1391 0112 1392 0118 1393 011A 1394 011F 1395 0132 1399 0138 1400 0138 1401 013E 1402 0140 1403 0145 1404 0149 1405 014F 1409 0150 1410 0150 1411 0156 1412 0159 1413 015F 1417 0160 1418 0160 1419 0164 1420 016B 1424 016D 1425 017B 1426 0181 1427 0184 1431 0185 1432 0185 1433 0187 1434 018C 1435 0197 1436  019D 1437 019D 1438 01A0 1439 01A6 1440 01A7 1441 01A9 1442 01AF 1446 01B0 1448 01B0 1449 01B4 1450 01B8 1451 01C0 1455 01CF 1456 01CF 1457 01D5 1458 01D9 1459 01DF 1463 01E0 1464 01E0 1465 01E6  1466 01E8 ENTRY=0004 PROGRAM SIZE=01ED WORDS DATA SIZE=003C WORDS LONG INSTRUCTIONS USED 0 COMPILATION COMPLETE  0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 86 1982/08/06 11:00:39.50 SUBROUTINE GENOP(OP,STACK)  FORTRAN(F300) ASM6502 .FTN 1467 SUBROUTINE GENOP(OP,STACK) 1468 IMPLICIT INTEGER(A-Z) 1469 C 1470 C 1471 C--- THIS SUBROUTINE GENERATES OPERATIONS UPON THE NUMBERS 1472 C--- STORED IN THE STACK POINTED TO BY PARAMETER 'STACK'. 1473 C 1474 C--- THE RESULT OF THE OPERATION IS PUT BACK ON THE STACK. 1475 C--- THE DESIRED OPERATION CODE IS PASSED IN PARAMETER 'OP'. 1476 C--- SEE THE COMMENTS IN THE ROUTINE FOR THE POSSIBLE OPERATIONS. 1477 C 1478 C 1479 OP2=POP(STACK) 1480 OP1=POP(STACK) 1481 VAL=0 1482 GO TO (100,100,300,400,500,600,100,800,900,1000,1100, 1483 + 1200,1300,1400,1500,1600,1700),OP 1484 C 1485 C--- DUMMY OPS 1486 C 1487 100  CONTINUE 1488 CALL PUSH(OP1,STACK) 1489 CALL PUSH(OP2,STACK) 1490 RETURN 1491 C 1492 C--- ADD 1493 C 1494 300 CONTINUE 1495 VAL=OP1+OP2 1496 GO TO 2000 1497 C 1498 C--- SUBTRACT 1499 C 1PAGE 87-  1982/08/06 11:00:41.75 SUBROUTINE GENOP(OP,STACK) FORTRAN(F300) ASM6502 .FTN 1500 400 CONTINUE 1501 VAL=OP1-OP2 1502 GO TO 2000 1503 C 1504 C--- MULTIPLY 1505 C 1506 500 CONTINUE 1507 VAL=OP1*OP2 1508 GO TO 2000 1509 C 1510 C--- DIVIDE 1511 C 1512 600 CONTINUE 1513 IF(OP2.NE.0) VAL=OP1/OP2 1514 GO TO 2000 1515 C 1516 C--- LESS THAN 1517 C 1518 800 CONTINUE 1519 IF(OP1.LT.OP2) VAL=(-1) 1520 GO TO 2000 1521 C 1522 C--- EQUAL 1523 C 1524 900 CONTINUE 1525  IF(OP1.EQ.OP2) VAL=(-1) 1526 GO TO 2000 1527 C 1528 C--- GREATER THAN 1529 C 1530 1000 CONTINUE 1531  IF(OP1.GT.OP2) VAL=(-1) 1532 GO TO 2000 1PAGE 88 1982/08/06 11:00:44.00 SUBROUTINE GENOP(OP,STACK)  FORTRAN(F300) ASM6502 .FTN 1533 C 1534 C--- LESS THAN OR EQUAL 1535 C 1536 1100 CONTINUE 1537 IF(OP1.LE.OP2) VAL=(-1) 1538 GO TO 2000 1539 C 1540 C--- GREATER THAN OR EQUAL TO 1541 C 1542 1200 CONTINUE 1543 IF(OP1.GE.OP2) VAL=(-1) 1544 GO TO 2000 1545 C 1546 C--- NOT EQUAL TO 1547 C 1548 1300 CONTINUE 1549 IF(OP1.NE.OP2) VAL=(-1) 1550 GO TO 2000 1551 C 1552 C--- OR 1553 C 1554 1400 CONTINUE 1555 VAL=IOR(OP1,OP2) 1556 GO TO 2000 1557 C 1558 C--- AND 1559 C 1560 1500 CONTINUE 1561 VAL=IAND(OP1,OP2) 1562 GO TO 2000 1563 C 1564 C--- NOT 1565 C 1PAGE 89 1982/08/06 11:00:45.75 SUBROUTINE GENOP(OP,STACK) FORTRAN(F300) ASM6502 .FTN 1566 1600 CONTINUE 1567 VAL=INOT(OP2) 1568 CALL PUSH(OP1,STACK) 1569 GO TO 2000 1570 C 1571 C--- EXCLUSIVE OR 1572 C 1573 1700 CONTINUE 1574 VAL=IEOR(OP1,OP2) 1575 GO TO 2000 1576 C 1577 C--- PUT RESULT BACK ON THE STACK AND RETURN 1578 C 1579 2000 CONTINUE 1580 CALL PUSH(VAL,STACK) 1581 RETURN 1582 END 1PAGE 90 1982/08/06 11:00:48.00 SUBROUTINE GENOP(OP,STACK) FORTRAN(F300) ASM6502 .FTN DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE 0007 OP 1 SCALAR INTEGER*2 0008 STACK 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 000C OP2 1 SCALAR INTEGER*2 000D OP1 1 SCALAR INTEGER*2 000E VAL 1 SCALAR INTEGER*2 1PAGE 91 1982/08/06 11:00:58.25 SUBROUTINE GENOP(OP,STACK) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS POP USER 1 F:RCGO RUNTIME PUSH USER 2 IOR INLINE  IAND INLINE INOT INLINE IEOR INLINE F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE .  LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0028 #100 0036 #300 003A #400 003E #500 0045 #600 004E #800 0056 #900 005C #1000 0064 #1100 006B #1200 0072 #1300 0078 #1400 007C #1500  0080 #1600 0090 #1700 0094 #2000 004D #M16 004D #M17 0055 #M18  0053 #M19 0055 #M20 005B #M21 005B #M22 0063 #M23 0063 #M24 0061 #M25 006A #M26 0068 #M27 006A #M28 0071 #M29 0071 #M30  006F #M31 0077 #M32 0077 #M33 0086 #M34 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1467 0004 1468 0006 1479 0006 1480 000C 1481 0012 1482 0014 1487 0028 1488 0028 1489 002E 1490 0034 1494 0036 1495 0036 1496 0039 1500 003A 1501 003A 1502 003D 1506 003E 1507 003E 1508 0044 1512 0045 1513 0045 1514 004D 1518 004E 1519 004E 1520 0055 1524 0056 1525 0056 1526 005B 1530 005C 1531 005C 1532 0063 1536 0064 1537 0064 1538 006A 1542 006B 1543 006B 1544 0071 1548 0072 1549 0072 1550 0077 1554 0078 1555 0078 1556 007B 1560 007C 1561 007C 1562 007F 1566 0080 1567 0080 1568 0089 1569 008F 1573 0090 1574 0090 1575 0093 1579 0094 1580 0094 1581 009A 1582 009C 1PAGE 92 1982/08/06 11:00:59.75 SUBROUTINE GENOP(OP,STACK) FORTRAN(F300) ASM6502 .FTN ENTRY=0004 PROGRAM SIZE=009C WORDS DATA SIZE=000F WORDS LONG INSTRUCTIONS USED 2 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 93 1982/08/06 11:01:02.25 FUNCTION NUMVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 1583 FUNCTION NUMVAL(LINE,START,FINISH) 1584 IMPLICIT INTEGER(A-Z) 1585 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 1586 DIMENSION LINE(80) 1587 C 1588 C--- THIS FUNCTION EVALUATES A NUMERIC CONSTANT IN ARRAY *LINE* FROM 1589 C--- COLUMNS *START* TO *FINISH*. BOTH PREFIXED RADIX OR 1590 C--- OR OPTIONAL POSTFIXING CAN BE HANDLED. 1591 C 1592 C--- IF AN INVALID NUMBER IS FOUND, A ERROR MESSAGE IS GENERATED 1593 C--- AND 'NUMVAL' IS RETURNED AS ZERO (0). 1594 C 1595 C--- BINARY (BASE 2) CONSTANTS CAN BE POSTFIXED WITH A 'B' OR 'S'  1596 C--- OCTAL (BASE 8) CONSTANTS CAN BE POSTFIXED WITH A 'O' OR 'Q' 1597 C--- DECIMAL (BASE 10) CONSTANTS CAN BE POSTFIXED WITH A 'D' 1598 C--- HEX (BASE 16) CONSTANTS CAN BE POSTFIXED WITH A 'H' OR 'Z' OR 1599 C---  CAN BE PREFIXED WITH A '$', A ':', OR A 0 (ZERO). 1600 C--- EXPLICIT BASE (BASE X) CAN BE POSTFIXED WITH A 'R' FOLLOWED BY 1601 C--- A SINGLE CHARACTER RADIX DIGIT (2-F) 1602 C 1603 C 1604 NUMVAL=0 1605 /  BASE=10 1606 I=START 1607 FIN=FINISH 1608 C 1609 C--- SEE IF PREFIXED RADIX 1610 C 1611 IF(LINE(I).EQ.1H$) BASE=16 1612 IF(LINE(I).EQ.1H:) BASE=16 1613 IF(BASE.NE.10) GO TO 110 1614 C 1615 C--- SEE IF POSTFIXED RADIX 1PAGE 94 1982/08/06 11:01:04.75 FUNCTION NUMVAL(LINE,START,FINISH)  FORTRAN(F300) ASM6502 .FTN 1616 C 1617 IF(LINE(FINISH-1).EQ.1HR) GO TO 300 1618 IF(LINE(FINISH).EQ.1HS) BASE=2 1619 IF(LINE(FINISH).EQ.1HB.AND.LINE(START).NE.1H0) BASE=2 1620 IF(LINE(FINISH).EQ.1HQ) BASE=8 1621 IF(LINE(FINISH).EQ.1HO) BASE=8 1622 IF(LINE(FINISH).EQ.1HZ) BASE=16 1623 IF(LINE(FINISH).EQ.1HH) BASE=16  1624 IF(BASE.NE.10) GO TO 100 1625 IF(LINE(FINISH).EQ.1HD.AND.LINE(START).NE.1H0) GO TO 100 1626 C 1627 C--- IF A LEADING ZERO AND NO POSTFIX THEN ASSUME BASE 16 1628 C 1629 IF(LINE(START).EQ.1H0) BASE=16 1630 GO TO 120 1631 C 1632 C--- ADJUST ENDING CHARACTER FOR POSTFIXED RADIX 1633 C 1634 100 CONTINUE 1635 FIN=FINISH-1  1636 GO TO 120 1637 C 1638 C--- CONSTANT EVALUATION LOOP (USES SHIFTED POLYNOMIAL TECHNIQUE) 1639 C 1640 110 CONTINUE 1641 I=I+1 1642 120 CONTINUE 1643 IF(I.GT.FIN) RETURN 1644 IF(BASE.NE.16) GO TO 140 1645 IF(LINE(I).GT.1HF) GO TO 140 1646 DIGIT=HEXVAL(LINE(I)) 1647 GO TO 150 1648 140 CONTINUE 1PAGE 95 1982/08/06 11:01:07.75 FUNCTION NUMVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 1649 DIGIT=HEXVAL(LINE(I)) 1650 150 CONTINUE 1651 IF(DIGIT.GE.BASE) GO TO 200 1652 IF(DIGIT.LT.0) GO TO 200 1653 NUMVAL=NUMVAL*BASE+DIGIT 1654 GO TO 110 1655 C 1656 C--- ERROR EXIT 1657 C 1658 200 CONTINUE 1659 ERRNUM=ERRNUM*16+11 1660 NUMVAL=0 1661 RETURN 1662 C 1663 C--- EXPLICITLY NAMED BASE 1664 C 1665 300 CONTINUE 1666 BASE=HEXVAL(LINE(FINISH)) 1667 IF(BASE.LT.2) GO TO 200 1668  IF(BASE.GT.15) GO TO 200 1669 FIN=FINISH-2 1670 GO TO 120 1671 END 1PAGE 96 1982/08/06 11:01:11.00  FUNCTION NUMVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR  INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2  DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE 0007 LINE 1 ARRAY INTEGER*2 0008 START 1 SCALAR INTEGER*2 0009 FINISH 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0013 :FNVAL 1 SCALAR INTEGER*2 0014 BASE 1 SCALAR INTEGER*2 0015 I 1 SCA0 LAR INTEGER*2 0016 FIN 1 SCALAR INTEGER*2 0017 DIGIT 1 SCALAR INTEGER*2 1PAGE 97 1982/08/06 11:01:24.75 FUNCTION NUMVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS HEXVAL USER 1 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN  LABEL USE LOCN LABEL USE LOCN LABEL USE 006B #110 00B5 #300 0067 #100  006D #120 0088 #140 0092 #150 00AD #200 0017 #M7 001D #M8  0017 #M9 001D #M10 006B #M11 00B5 #M12 002B #M13 0035 #M14 003B #M15 0041 #M16 0047 #M17 004D #M18 002B #M19 0035 #M20  0035 #M21 003B #M22 0041 #M23 0047 #M24 004D #M25 0067 #M26 0058 #M27 0067 #M28 0066 #M29 0066 #M30 0063 #M31 0075 #M32 0075 #M33 0072 #M34 0088 #M35 007D #M36 0088 #M37  0097 #M38 00AD #M39 00AD #M40 00AA #M41 00AD #M42 00C2 #M43  00C6 #M44 00AD #M45 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1583 0004 1584 0006 1585 0006 1586 0006 1604 0009 1605  000B 1606 000D 1607 000F 1611 0011 1612 0017 1613 001D 1617 0020 1618 0025 1619 002B 1620 0035 1621 003B 1622 0041 1623 0047 1624 004D 1625 0050 1629 0058 1630 0066 1634 0067 1635 0067 1636 006A  1640 006B 1641 006B 1642 006D 1643 006D 1644 0075 1645 0078 1646 007D 1647 0087 1648 0088 1649 0088 1650 0092 1651 0092 1652 0097 1653 0099 1654 00AC 1658 00AD 1659 00AD 1660 00B1 1661 00B3 1665  00B5 1666 00B5 1667 00BF 1668 00C2 1669 00C6 1670 00C9 1671 00CA 1PAGE 98 1982/08/06 11:01:26.00  FUNCTION NUMVAL(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN ENTRY=0004 PROGRAM SIZE=00CE WORDS DATA SIZE=0019 WORDS LONG INSTRUCTIONS USED 4 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 99 1982/08/06 11:01:28.50 INTEGER FUNCTION TERM(LINE,START,FINISH) FORTRAN(F300)  ASM6502 .FTN 1672 INTEGER FUNCTION TERM(LINE,START,FINISH) 1673 IMPLICIT INTEGER(A-Z) 1674 DIMENSION LINE(80) 1675 COMMON/OPTIONS/ NOLIST,NOOBJ,NOXREF,NOGEN 1676 COMMON /SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM 1677 COMMON/FIELDS/ LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 1678 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 1679 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 1680 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM1 ,ERRCNT 1681 C 1682 C--- THIS SUBROUTINE DETERMINES THE TYPE OF A TERM IN AN EXPRESSION 1683 C--- AND CALLS THE APPROPRIATE ROUTINE(S) TO OBTAIN ITS 1684 C--- BINARY VALUE. 1685 C 1686 C--- THE TERM TO BE EVALUATED IS CONTAINED IN PARAMETER ARRAY 1687 C--- 'LINE' FROM COLUMNS 'START' TO 'FINISH'. 1688 C 1689 C 1690 C 1691 C 1692 NUMBER=0 1693 TERMTYP=2 1694 S=START 1695 I=FINISH+1 1696 IF(LINE(S).EQ.1H$) GO TO 200 1697 IF(LINE(S).EQ.1H:) GO TO 200 1698 IF(1H0.LE.LINE(S).AND.LINE(S).LE.1H9) GO TO 200 1699 IF(LINE(S).EQ.1H') GO TO 300 1700 IF(START.EQ.FINISH.AND. LINE(START).EQ.1H.) GO TO 400 1701 C 1702 C--- SYMBOLIC DATA 1703 C 1704 N=I-1 1PAGE 100 1982/08/06 11:01:31.75 INTEGER FUNCTION TERM(LINE,START,FINISH) FORTRAN(F300)  ASM6502 .FTN 1705 TEMP=MANGER(LINE,S,N,SYMVAL,XPTR,1) 1706 IF(TEMP) 150,150,130 1707 130 CONTINUE 1708 NUMBER=SYMVAL 1709 C 1710 C--- ADD AN XREF ENTRY TO THE XREF CHAIN FOR THE LABEL 1711 C 1712 IF(NOXREF.EQ.1.OR.PASS.NE.2) GO TO 500 1713 CALL PUSH(CARD,XPTR) 1714 N=I-1 1715 TEMP=MANGER(LINE,S,N,SYMVAL,XPTR,2) 1716 GO TO 500 1717 C 1718 C--- UNDEFINED SYMBOL 1719 C 1720 150 CONTINUE 1721 ERRNUM=ERRNUM*16+10 1722 NUMBER=0 1723 GO TO 500 1724 C 1725 C--- NUMERIC DATA 1726 C 1727 200 CONTINUE 1728 NUMBER=NUMVAL(LINE,S,I-1) 1729 GO TO 500 1730 C 1731 C--- QUOTED ASCII DATA 1732 C 1733 300 CONTINUE 1734  J=START+1 1735 K=MIN0(FINISH-1,J+1) 1736 DO 320 I=J,K 1737 NUMBER=NUMBER*256+ASCII(LINE(I)) 1PAGE  101 1982/08/06 11:01:35.00 INTEGER FUNCTION TERM(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN 1738 320 CONTINUE 1739 GO TO 500 1740 C 1741 C--- SYMBOL IS PROGRAM COUNTER CHARACTER 1742 C  1743 400 CONTINUE 1744 NUMBER=PCOUNT 1745 C 1746 500 CONTINUE 1747 TERM=NUMBER 1748 RETURN 1749 END 1PAGE 102 1982/08/06 11:01:37.25 INTEGER FUNCTION TERM(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/OPTION/ ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 NOLIST 1 SCALAR INTEGER*2 0001 NOOBJ  1 SCALAR INTEGER*2 0002 NOXREF 1 SCALAR INTEGER*2 0003 NOGEN 1 SCALAR INTEGER*2 COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE  MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 0E12 LASTSY 1 SCALAR INTEGER*2 COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LABEL 7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY INTEGER*2 000E SYMBOL 80 ARRAY INTEGER*2 005E OPTR 1 SCALAR INTEGER*2 005F LABPTR 1 SCAL2 AR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ 1 SCALAR INTEGER*2 COMMON BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 1 SCALAR INTEGER*2 1PAGE 103 1982/08/06 11:01:38.00 INTEGER FUNCTION TERM(LINE,START,FINISH)  FORTRAN(F300) ASM6502 .FTN 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 LINE 1 ARRAY INTEGER*2 0008 START 1 SCALAR INTEGER*2 0009 FINISH 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 002D :FNVAL 1 SCALAR INTEGER*2 002E NUMBER 1 SCALAR INTEGER*2 002F TERMTY 1 SCALAR INTEGER*2 0030 S 1 SCALAR INTEGER*2 0031 I 1 SCALAR INTEGER*2 0032 N 1 SCALAR INTEGER*2 0033 TEMP 1 SCALAR INTEGER*2 0034 SYMVAL 1 SCALAR INTEGER*2 0035 XPTR 1 SCALAR INTEGER*2 0036 J 1 SCALAR INTEGER*2 0037 K 1 SCALAR INTEGER*2 1PAGE 104 1982/08/06 11:01:51.00 INTEGER FUNCTION TERM(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS MANGER USER 6 PUSH USER 2 NUMVAL USER 3 MIN0 KNOWN 0 ASCII USER 1 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE  006D #200 0079 #300 00AA #400 0066 #150 003E #130 00AC #500  00A4 #320 DO END 006D #M7 006D #M8 001F #M9 0024 #M10 006D #M11 0024 #M12 0079 #M13 002F #M14 00AA #M15 00AC #M16 00AC  #M17 005A #M18 0089 #M19 009D #M20 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1672 0004 1673 0006 1674 003 06 1675 0009 1676 0009 1677 0009 1678 0009 1679 0009 1680 0009 1692 0009 1693 000B 1694 000D 1695  000F 1696 0012 1697 0016 1698 001A 1699 0024 1700 0028 1704 002F 1705 0032 1706 003D 1707 003E 1708 003E 1712 0040 1713 0046 1714 004C 1715 004F 1716 0065 1720 0066 1721 0066 1722 006A 1723 006C 1727 006D 1728 006D 1729 0078 1733 0079 1734 0079 1735 007C 1736 0088 1737 008A 1738 00A4 1739 00A9 1743 00AA 1744 00AA 1746 00AC 1747 00AC 1748 00AE 1749 00B0 1PAGE 105 1982/08/06 11:01:52.00 INTEGER FUNCTION TERM(LINE,START,FINISH) FORTRAN(F300) ASM6502 .FTN ENTRY=0004 PROGRAM SIZE=00B6 WORDS DATA SIZE=003C WORDS LONG INSTRUCTIONS USED 2 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 106 1982/08/06 11:01:54.50 INTEGER FUNCTION HEXVAL(ARG) FORTRAN(F300) ASM6502 .FTN 1750 INTEGER FUNCTION HEXVAL(ARG) 1751 IMPLICIT INTEGER(A-Z) 1752 INTEGER CNV(16) 1753 DATA CNV/1H0,1H1,1H2,1H3,1H4,1H5,1H6,1H7,1H8,1H9,1HA,1HB,1HC, 1754 + 1HD,1HE,1HF/ 1755 DO 10 I=1,16 1756 HEXVAL=I-1 1757 IF(ARG.EQ.CNV(I)) RETURN 1758 10 CONTINUE 1759 HEXVAL=(-1) 1760 RETURN 1761 END 1PAGE 107 1982/08/06 11:01:57.25 INTEGER FUNCTION HEXVAL(ARG) FORTRAN(F300) ASM6502 .FTN DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 ARG 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 000A :FNVAL  1 SCALAR INTEGER*2 000B I 1 SCALAR INTEGER*2 ARRAY ALLOCATION LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 000C CNV 16 ARRAY INTEGER*2 1PAGE 108 1982/08/06 11:02:01.50 INTEGER FUNCTION HEXVAL(ARG) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0011 #10 DO END 0011 #M1 0007 #M2  0011 #M3 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN  LINE LOCN LINE LOCN LINE LOCN 1750 0004 1751 0006 1752 0006 1753 0006 1755 0006 1756 0008 1757  000B 1758 0011 1759 0016 1760 0018 1761 001A ENTRY=0004 PROGRAM SIZE=001B WORDS DATA SIZE=001C WORDS LONG INSTRUCTIONS USED 0 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 109 1982/08/06 11:02:04.75 SUBROUTINE PUSH(DATA,LIST) FORTRAN(F300) ASM6502 .FTN 1762 SUBROUTINE PU4 SH(DATA,LIST) 1763 IMPLICIT INTEGER(A-Z) 1764 COMMON/LNKLST/ AVLIST(2000,2), AVSIZE 1765 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 1766 COMMON/BUFFER/ LINE(80) 1767 C 1768 C 1769 C--- THIS SUBROUTINE WILL PUSH PARAMETER 'DATA' ONTO THE LINKED 1770 C--- STACK POINTED TO BY PARAMETER 'LIST'. 1771 C 1772 C--- SEE IF THERE IS ANY FREE SPACE IN THE AVAIL LIST 1773 C 1774 C 1775 P=AVAIL 1776 IF(P.EQ.0) ERRNUM=15 1777 IF(P.EQ.0) CALL ERROR 1778 C 1779 C--- PUSH THE DATA ONTO THE STACK 1780 C 1781 AVAIL=AVLIST(P,2) 1782 AVLIST(P,1)=DATA 1783 AVLIST(P,2)=LIST 1784 LIST=P 1785 RETURN 1786 END 1PAGE 110 1982/08/06 11:02:08.00 SUBROUTINE PUSH(DATA,LIST) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/LNKLST/ ALLOCATION 0FA1 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE 0000 AVLIST 4000 ARRAY INTEGER*2 0FA0 AVSIZE 1 SCALAR INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 COMMON BLOCK/BUFFER/ ALLOCATION 0050 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LINE 80 ARRAY INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 DATA 1 SCALAR INTEGER*2 0008 LIST 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0014 P 1 SCALAR INTEGER*2 1PAGE 111 1982/08/06 11:02:08.50 SUBROUTINE PUSH(DATA,LIST) FORTRAN(F300) ASM6502 .FTN 1PAGE  112 1982/08/06 11:02:13.50 SUBROUTINE PUSH(DATA,LIST) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE  ARGS NAME TYPE ARGS ERROR USER 0 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 000B #M0 0010 #M1  000B #M2 0010 #M3 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN  LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1762 0004 1763 0006 1764 0006 1765 0006 1766  0006 1775 0006 1776 0008 1777 000B 1781 0010 1782 0014 1783 0017 1784 001A 1785 001C 1786 001E ENTRY=0004 PROGRAM SIZE=0023 WORDS DATA SIZE=0015 WORDS LONG INSTRUCTIONS USED 0 COMPILATION COMPLETE 0 ERRORS (0000) 5 0 WARNINGS (0000) 1PAGE 113 1982/08/06 11:02:16.25 INTEGER FUNCTION POP(STACK)  FORTRAN(F300) ASM6502 .FTN 1787 INTEGER FUNCTION POP(STACK) 1788 IMPLICIT INTEGER(A-Z) 1789 COMMON/LNKLST/ AVLIST(2000,2), AVSIZE 1790 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 1791 C 1792 C--- THIS FUNCTION WILL POP A DATA WORD OFF OF THE STACK 1793 C--- POINTED TO BY PARAMETER 'STACK' AND RETURN IT. 'STACK' 1794 C--- IS SET TO 0 WHEN THE STACK BECOMES EMPTY. ANY ATTEMPT 1795 C--- TO POP AN EMPTY STACK WILL RETURN A DATA VALUE OF 0.  1796 C 1797 C 1798 C 1799 P=STACK 1800 POP=0 1801 IF(STACK.LE.0) RETURN 1802 STACK=AVLIST(P,2) 1803 POP=AVLIST(P,1) 1804 AVLIST(P,2)=AVAIL 1805 AVAIL=P 1806 RETURN 1807 END 1PAGE 114 1982/08/06 11:02:19.25 INTEGER FUNCTION POP(STACK) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/LNKLST/ ALLOCATION 0FA1 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 AVLIST 4000 ARRAY INTEGER*2 0FA0 AVSIZE 1 SCALAR INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 STACK 1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0011 :FNVAL 1 SCALAR  INTEGER*2 0012 P 1 SCALAR INTEGER*2 1PAGE 115 1982/08/06 11:02:24.25 INTEGER FUNCTION POP(STACK)  FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 000F #M0 000F #M1 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN  LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1787 0004 1788 0006 1789 0006 1790 0006 1799 0006 1800  0008 1801 000A 1802 000F 1803 0013 1804 0016 1805 0019 1806 001B 1807 001E ENTRY=0004 PROGRAM SIZE=0022 WORDS DATA SIZE=0013 WORDS LONG INSTRUCTIONS USED 0 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 116 1982/08/06 11:02:27.25 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN 1808 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) 1809 IMPLICIT INTEGER(A-Z) 1810 C 1811 C 1812 C--- 6 THIS SUBROUTINE CONTROLS THE GENERATION OF THE OUTPUT FILES. 1813 C--- (BOTH SOURCE AND OBJECT) 1814 C 1815 C--- PARAMETER 'OP' IS THE OPCODE TO OUTPUT 1816 C--- PARAMETER 'VAL' IS THE OPERAND TO OUTPUT 1817 C--- PARAMETER 'TYPE' IS THE TYPE OF OUTPUT TO PERFORM 1818 C--- TYPE=1: OUTPUT 1 BYTE (OPCODE) 1819 C--- TYPE=2: OUTPUT 2 BYTES (OPCODE,VAL)  1820 C--- TYPE=3: OUTPUT 3 BYTES (OPCODE,VAL) 1821 C--- TYPE=4: OUTPUT SOURCE LINE ONLY 1822 C--- TYPE=5: OUTPUT SOURCE LINE AND VAL ON LISTING ONLY 1823 C--- TYPE=6: OUTPUT SOURCE LINE AND VAL BUT DO NO PHASE ERROR 1824 C--- CHECKING ON THE LABEL IF IT IS PRESENT 1825 C--- TYPE=7: OUTPUT 2 BYTES OF DATA IN PARAMETER 'VAL' 1826 C 1827 C 1828 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 1829 COMMON/FIELDS/ LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 1830 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 1831 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 1832 COMMON /SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM 1833 COMMON/BUFFER/ LINE(80) 1834  COMMON/OPTIONS/ NOLIST,NOOBJ,NOXREF,NOGEN 1835 COMMON/FMT/OUT(110),LABST,LABEND,OPCST,OPCEND,OPRST,OPREND,COMST 1836 C 1837 C--- DETERMINE IF LISTING FLAG IS TO BE SET TO SOME CHARACTER 1838 C 1839 FLAG=1H 1840 LEN=TYPE 1PAGE 117 1982/08/06 11:02:29.75 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN 1841 IF(LEN.GT.3) LEN=0 1842 IF(LABPTR.EQ.0) GO TO 3 1843 C 1844 C--- CHECK FOR A LABEL PHASE ERROR BETWEEN PASS1 AND PASS 2 1845 C 1846 K=MANGER(LABEL,1,LABPTR,SYMVAL,XPTR,1) 1847 I=SYMVAL 1848 IF(I.NE.PCOUNT.AND.TYPE.NE.6.AND.K.GT.0) FLAG=1HP 1849 C 1850 3 CONTINUE 1851 C--- FIRST PRINT ANY ERROR MESSAGES 1852 C 1853 10 CONTINUE 1854 CALL ERROR 1855 C 1856 C--- DETERMINE THE CORECT OUTPUT GROUP 1857 C  1858 20 CONTINUE 1859 IF(NOLIST.EQ.1) GO TO 2000 1860 CALL HEADING(1,0) 1861 J=IABS(TYPE) 1862  GO TO (100,200,300,500,400,500,150),J 1863 C 1864 C--- 1 BYTE OUTPUT 1865 C 1866 100 CONTINUE 1867 CALL REFORM 1868 WRITE(OUTFIL,110) CARD,FLAG,PCOUNT,OP,OUT 1869 110 FORMAT(1X,I5,'.',1X,A1,1X,Z4,2X,Z2,9X,110A1) 1870  GO TO 1000 1871 C 1872 C--- 2 BYTE DATA WORDS 1873 C 1PAGE 118 1982/08/06 11:02:32.50 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN 1874 150 CONTINUE 1875 LEN=2  1876 CALL BYTES(VAL,N1,N2) 1877 CALL REFORM 1878 WRITE(OUTFIL,160) CARD,FLAG,PCOUNT,N1,N2,OUT 1879 160 FORMAT(1X,I5,'. ',A1,1X,Z4,5X,Z2,1X,Z2,3X,110A1) 1880 GO TO 1000 1881 C 1882 C--- 2 BYTE 1883 C 1884 200 CONTINUE 1885 CALL REFORM 1886 WRITE(OUTFIL,210) CARD,FLAG,PCOUNT,OP,VAL,OUT 1887 210 FORMAT(1X,I5,'. ',A1,1X,Z4,2X,Z2,1X,Z2,6X,110A1) 1888 GO TO 1000 1889 C 1890 C--- 3 BYTE 1891 C 1892 300 CONTINUE 1893 CALL BYTES(VAL,PCH,PCL) 1894 CALL REFORM 1895 WRITE(OUTFIL,310) CARD,FLAG,PCOUNT,OP,PCL,PCH,OUT 1896 310 FORMAT7 (1X,I5,'. ',A1,1X,Z4,2X,Z2,1X,Z2,1X,Z2,3X,110A1) 1897 GO TO 1000 1898 C 1899 C--- SOURCE LINE ONLY 1900 C 1901 400 CONTINUE 1902 WRITE(OUTFIL,410) CARD,FLAG,LINE 1903 410 FORMAT(1X,I5,'. ',A1,18X,80A1) 1904 GO TO 2000 1905 C 1906 C--- SOURCE LINE AND VAL ONLY 1PAGE 119 1982/08/06 11:02:35.50 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN 1907 C 1908 500 CONTINUE 1909 CALL REFORM 1910 WRITE(OUTFIL,510) CARD,FLAG,VAL,OUT 1911 510 FORMAT(1X,I5,'. ',A1,10X,'(',Z4,')',2X,110A1) 1912 GO TO 2000 1913 C 1914 C--- BUMP CARD COUNTER 1915 C 1916 1000 CONTINUE 1917 C 1918 C--- GENERATE THE OBJECT MODULE ENTRY 1919 C 1920 2000 CONTINUE 1921 IF(LEN.EQ.0) GO TO 2500 1922 IF(NOOBJ.EQ.1) GO TO 2500 1923 CALL BYTES(VAL,PCH,PCL) 1924 P1=PCOUNT+1 1925 P2=PCOUNT+2 1926 IF(TYPE.NE.7) GO TO 2020 1927 P1=PCOUNT 1928 P2=PCOUNT+1 1929 I=PCL 1930 PCL=PCH 1931 PCH=I 1932 GO TO 2300 1933 C 1934 C--- GENERATE THE FIRST BYTE OF OBJECT CODE 1935 C 1936 2020 CONTINUE 1937 IF(LEN.NE.0.AND.IABS(TYPE).LE.3) WRITE(OBJ,2030) PCOUNT,OP 1938 2030 FORMAT(' T',Z4,1X,Z2) 1939 C 1PAGE 120 1982/08/06 11:02:38.25 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN 1940 C--- SEE IF ANY MORE DATA TO OUTPUT 1941 C 1942 IF(LEN.EQ.1) GO TO 2500 1943 IF(LEN.NE.2) GO TO 2300 1944 C 1945 C--- OUTPUT THE SECOND BYTE OF A 2 BYTE OPCODE OR DATA WORD 1946 C 1947 WRITE(OBJ,2030) P1,PCL 1948 GO TO 2500 1949 C 1950 C--- GENERATE THE SECOND AND THIRD BYTES OF A THREE BYTE OPCODE 1951 C 1952 C 1953 2300 CONTINUE 1954 WRITE(OBJ,2030) P1,PCL 1955 WRITE(OBJ,2030) P2,PCH 1956 GO TO 2500 1957 C 1958 C--- UPDATE THE PCOUNTER 1959 C 1960 2500 CONTINUE 1961 PCOUNT=PCOUNT+LEN 1962 RETURN 1963 END 1PAGE 121 1982/08/06 11:02:41.75 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE  MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT 1 SCALAR INTEGER*2 COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE 0000 LABEL 7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY INTEGER*2 000E SYMBOL 80 ARRAY  INTEGER*2 005E OPTR 1 SCALAR INTEGER*2 005F LABPTR 1 SCALAR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 8  1 SCALAR INTEGER*2 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ 1 SCALAR INTEGER*2 COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 1PAGE 122 1982/08/06 11:02:42.75 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN 0E12 LASTSY 1 SCALAR INTEGER*2 COMMON BLOCK/BUFFER/ ALLOCATION 0050 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE 0000 LINE 80 ARRAY INTEGER*2 COMMON BLOCK/OPTION/ ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 NOLIST 1 SCALAR INTEGER*2 0001 NOOBJ 1 SCALAR INTEGER*2 0002 NOXREF 1 SCALAR INTEGER*2 0003 NOGEN 1 SCALAR INTEGER*2 COMMON BLOCK/FMT / ALLOCATION 0075 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 OUT 110 ARRAY INTEGER*2 006E LABST 1 SCALAR INTEGER*2 006F LABEND 1 SCALAR INTEGER*2 0070 OPCST 1 SCALAR INTEGER*2 0071 OPCEND 1 SCALAR INTEGER*2 0072 OPRST 1 SCALAR INTEGER*2 0073 OPREND 1 SCALAR INTEGER*2 0074 COMST 1 SCALAR INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 OP 1 SCALAR INTEGER*2 0008 VAL 1 SCALAR INTEGER*2 0009 TYPE 1 SCALAR INTEGER*2 000A REL 1 SCALAR INTEGER*2 1PAGE 123 1982/08/06 11:02:43.75 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL)  FORTRAN(F300) ASM6502 .FTN SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0037 FLAG 1 SCALAR INTEGER*2 0038 LEN  1 SCALAR INTEGER*2 0039 K 1 SCALAR INTEGER*2 003A SYMVAL 1 SCALAR INTEGER*2 003B XPTR 1 SCALAR INTEGER*2 003C I 1 SCALAR INTEGER*2 003D J 1 SCALAR INTEGER*2 003E N1 1 SCALAR INTEGER*2 003F N2 1 SCALAR INTEGER*2 0040 PCH 1 SCALAR INTEGER*2 0041 PCL 1 SCALAR INTEGER*2 0042 P1  1 SCALAR INTEGER*2 0043 P2 1 SCALAR INTEGER*2 1PAGE 124 1982/08/06 11:03:04.50 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS MANGER USER 6 9  ERROR USER 0 HEADIN USER 2 IABS INLINE F:RCGO RUNTIME REFORM USER 0 F:RWEF RUNTIME  F:RIOL RUNTIME F:RIUS RUNTIME F:RETF RUNTIME BYTES USER 3 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 00AA #3 00AA #10 UNUSED 00AD #20 UNUSED 0175 #2000 00C3 #100 0105 #200  011E #300 015E #500 014E #400 00DA #150 0004 #110 FORMAT 0175 #1000  0017 #160 FORMAT 002C #210 FORMAT 0041 #310 FORMAT 0059 #410 FORMAT 0065 #510 FORMAT 01DC #2500 019D #2020 01C5 #2300 0079 #2030 FORMAT 008D #M21 008D #M22  008B #M23 00AA #M24 00AA #M25 00AA #M26 00AA #M27 00AA #M28  0175 #M29 00B9 #M30 00F1 #M31 0131 #M32 0169 #M33 01DC #M34 01DC #M35 019D #M36 01AE #M37 01AE #M38 01A2 #M39 01A5 #M40  01AE #M41 01DC #M42 01B6 #M43 01C5 #M44 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1808 0081 1809 0083 1828 0083 1829 0083 1830 0083 1831 0083 1832 0083 1833 0083 1834 0083 1835 0083 1839 0083 1840 0085 1841 0087 1842 008D 1846 008F 1847 009F 1848 00A1 1850 00AA 1853 00AA 1854 00AA 1858 00AD 1859 00AD 1860 00B0 1861 00B6 1862 00BA 1866 00C3 1867 00C3 1868 00C6 1869 00D9 1870 00D9 1874 00DA 1875 00DA 1876 00DC 1877 00E3 1878 00E6 1879 0104 1880 0104 1884 0105 1885 0105 1886 0108 1887 011D 1888 011D 1892 011E 1893 011E 1894 0125 1895 0134 1896 014D 1897 014D 1901 014E 1902 014E 1903 015D 1904 015D 1908 015E 1909 015E 1910 0161 1911 0174 1912 0174 1916 0175 1920 0175 1921  0175 1922 0177 1923 017A 1924 0181 1PAGE 125 1982/08/06 11:03:06.00 SUBROUTINE OUTPUT(OP,VAL,TYPE,REL)  FORTRAN(F300) ASM6502 .FTN 1925 0185 1926 0189 1927 018C 1928 018F 1929 0192 1930 0195 1931 0199 1932 019C 1936 019D 1937 019D 1938 01AE 1942 01AE 1943 01B1 1947 01B9 1948 01C4 1953 01C5 1954 01C5 1955 01D0 1956 01DB 1960 01DC 1961 01DC 1962 01DF 1963 01E1 ENTRY=0081 PROGRAM SIZE=01E9 WORDS DATA SIZE=0045 WORDS LONG INSTRUCTIONS USED 16 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 126 1982/08/06 11:03:08.75 SUBROUTINE REFORM FORTRAN(F300) ASM6502 .FTN 1964 SUBROUTINE REFORM 1965 IMPLICIT INTEGER(A-Z) 1966 COMMON /FIELDS/ LABEL(7),OPCODE(7),SYMBOL(80),OPTR,LABPTR,SYMPTR 1967 COMMON/FMT/OUT(110),LABST,LABEND,OPCST,OPCEND,OPRST,OPREND,COMST 196: 8 COMMON/BUFFER/ LINE(80) 1969 C 1970 C 1971 C--- REFORM THE OUTPUT LINE TO GET A PRETTY LISTING REGARDLESS 1972 C--- OF HOW THE KLUTZ TYPED IT IN!!! 1973 C 1974 C 1975 DO 10 I=1,110 1976 OUT(I)=1H 1977 10 CONTINUE 1978 C 1979 C--- DO THE LABEL FIELD 1980 C 1981 END=0 1982 LAST=30 1983 FLD=1 1984 IF(LABST.LE.0) GO TO 40 1985 END=LABEND 1986 DO 20 I=LABST,END 1987 OUT(FLD+I-1)=LINE(I) 1988 20 CONTINUE 1989 C 1990 C--- DO THE OPCODE 1991 C 1992 40 CONTINUE 1993 IF(OPCST.LE.0) GOTO 100 1994 FLD=MAX0(END+1,10) 1995 END=OPCEND 1996 IF(END.LE.0) GOTO 100 1PAGE 127 1982/08/06 11:03:12.00 SUBROUTINE REFORM FORTRAN(F300) ASM6502 .FTN 1997 DO 60 I=OPCST,END 1998 OUT(I-OPCST+FLD)=LINE(I) 1999 60 CONTINUE 2000 C 2001 C--- DO THE OPERAND 2002 C 2003 100 CONTINUE 2004 IF(OPRST.LE.0) GOTO 200 2005 FLD=MAX0(END+1,15) 2006 END=OPREND 2007 IF(END.LE.0) GOTO 200 2008 DO 120 I=OPRST,END 2009 OUT(I+FLD-OPRST)=LINE(I) 2010 LAST=I+FLD-OPRST+2 2011 120 CONTINUE 2012 C 2013 C--- DO THE COMMENT 2014 C 2015 200 CONTINUE 2016 IF(COMST.LE.0) GOTO 300 2017 FLD=MAX0(30,LAST) 2018 DO 220 I=COMST,80 2019 OUT(I-COMST+FLD)=LINE(I) 2020 220 CONTINUE 2021 C 2022 C--- EXIT 2023 C 2024 300 CONTINUE 2025 RETURN 2026 END 1PAGE 128 1982/08/06 11:03:16.00 SUBROUTINE REFORM  FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/FIELDS/ ALLOCATION 0061 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LABEL 7 ARRAY INTEGER*2 0007 OPCODE 7 ARRAY INTEGER*2 000E SYMBOL 80 ARRAY INTEGER*2 005E OPTR 1 SCALAR INTEGER*2 005F LABPTR 1 SCALAR INTEGER*2 0060 SYMPTR 1 SCALAR INTEGER*2 COMMON BLOCK/FMT / ALLOCATION 0075 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 OUT 110 ARRAY INTEGER*2 006E LABST 1 SCALAR INTEGER*2 006F LABEND 1 SCALAR INTEGER*2 0070 OPCST 1 SCALAR INTEGER*2 0071 OPCEND 1 SCALAR INTEGER*2 0072 OPRST 1 SCALAR INTEGER*2 0073 OPREND  1 SCALAR INTEGER*2 0074 COMST 1 SCALAR INTEGER*2 COMMON BLOCK/BUFFER/ ALLOCATION 0050 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 LINE 80 ARRAY INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0017 I 1 SCALAR INTEGER*2 0018 END 1 SCALAR INTEGER*2 0019 LAST 1 SCALAR INTEGER*2 001A FLD 1 SCALAR INTEGER*2 1PAGE 129 1982/08/06 11:03:24.25 SUBROUTINE REFORM  FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARG; S NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS MAX0 KNOWN 0 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE  LOCN LABEL USE 000A #10 DO END 0026 #40 0021 #20 DO END 0042 #100 003D  #60 DO END 0061 #200 005C #120 DO END 0077 #300 0072 #220 DO END 0007 #M9 0026 #M10 0019 #M11 0042 #M12 0042 #M13 0035 #M14 0061 #M15  0061 #M16 0051 #M17 0077 #M18 006A #M19 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 1964 0004 1965 0006 1966 0006 1967 0006 1968 0006 1975 0006 1976 0008 1977 000A 1981 000E 1982 0010 1983 0012 1984 0014 1985 0016 1986 0018 1987 001A 1988 0021 1992 0026 1993 0026 1994 0028 1995 0031 1996 0033 1997 0034 1998 0036 1999 003D 2003 0042 2004 0042 2005 0044 2006 004D 2007 004F 2008 0050 2009 0052 2010 0059 2011 005C 2015 0061 2016 0061 2017 0063 2018 0069 2019 006B 2020 0072 2024 0077 2025  0077 2026 0079 ENTRY=0004 PROGRAM SIZE=007F WORDS DATA SIZE=001C WORDS LONG INSTRUCTIONS USED 0 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 130 1982/08/06 11:03:27.75 SUBROUTINE SYMOUT  FORTRAN(F300) ASM6502 .FTN 2027 SUBROUTINE SYMOUT 2028 IMPLICIT INTEGER(A-Z) 2029 COMMON/FILES/ INFILE,OUTFIL,SCR1,OBJ 2030 COMMON/OPTIONS/ NOLIST,NOOBJ,NOXREF,NOGEN 2031 COMMON/SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM 2032 COMMON/HEAD/ TITLE(80),LINENO,PAGE,COMCOL,MAXLIN 2033 DIMENSION OUT(20) 2034 C 2035 C 2036 C--- THIS SUBROUTINE PRINTS OUT THE SYMBOL TABLE AND XREF CHAINS 2037 C 2038 C 2039  IF(NOXREF.EQ.1) RETURN 2040 IF(LASTSYM.EQ.0) RETURN 2041 C 2042 C--- ITERATE FOR EACH ENTRY IN THE MAIN SYMBOL TABLE 2043 C 2044 CALL HEADING(0,1) 2045 DO 1000 I=1,LASTSYM 2046 10 FORMAT(' SYMBOL TABLE AND CROSS REFERENCE MAP',// 2047 +' SYMBOL ADDR REFERENCES',/) 2048 C 2049 C--- CHECK IF THERE IS AN ENTRY IN THE SYMBOL TABLE FOR THE LINK 2050 C--- FOLLOW THE CHAIN IF THERE IS 2051 C 2052 ADDR=SYMTAB(I,SYMLEN+1) 2053 TEMP=SYMTAB(I,SYMLEN+2) 2054 C 2055 C--- REVERSE THE LIST 2056 C 2057 CHAIN=0 2058 20 CONTINUE 2059 REF=POP(TEMP) 1PAGE 131 1982/08/06 11:03:30.25 SUBROUTINE SYMOUT FORTRAN(F300) ASM6502 .FTN 2060 CALL PUSH(REF,CHAIN) 2061 IF(TEMP.NE.0) GOTO 20 2062 DEFINED=POP(CHAIN) 2063 IF(CHAIN.EQ.0) GOTO 200 2064 K=0 2065 C 2066 DO 40 J=1,13 2067 LINE=POP(CHAIN) 2068 IF(LINE.LT.DEFINED) GOTO 44 2069 CALL PUSH(LINE,CHAIN) 2070 LINE=0-DEFINED 2071 DEFINED=32767<  2072 44 CONTINUE 2073 OUT(J)=LINE 2074 K=K+1 2075 IF(CHAIN.NE.0) GO TO40 2076 IF(DEFINED.EQ.32767) GOTO 50 2077 CALL PUSH(0-DEFINED,CHAIN) 2078 DEFINED=32767 2079 40 CONTINUE 2080 50 CONTINUE  2081 C 2082 IF(LINENO.GT.MAXLIN-5) CALL HEADING(0,1) 2083 IF(LINENO.EQ.3) WRITE(OUTFIL,10) 2084 IF(LINENO.EQ.3) LINENO=5 2085 CALL HEADING(1,1) 2086 WRITE(OUTFIL,60) (SYMTAB(I,JJ),JJ=1,SYMLEN),ADDR,(OUT(J),J=1,K) 2087 60 FORMAT(2X,7A1,2X,Z4,2X,17(1X,I5)) 2088 IF(CHAIN.EQ.0) GO TO 1000 2089 C 2090 C--- GENERATE THE FOLLOWING LINES OF OUTPUT 2091 C 2092 70 CONTINUE 1PAGE 132 1982/08/06 11:03:34.25 SUBROUTINE SYMOUT  FORTRAN(F300) ASM6502 .FTN 2093 K=0 2094 DO 80 J=1,13 2095 LINE=POP(CHAIN) 2096 IF(LINE.LT.DEFINED) GOTO 74 2097 CALL PUSH(LINE,CHAIN) 2098 LINE=0-DEFINED 2099  DEFINED=32767 2100 74 CONTINUE 2101 OUT(J)=LINE 2102 K=K+1 2103 IF(CHAIN.NE.0) GO TO 80 2104  IF(DEFINED.EQ.32767) GOTO 90 2105 CALL PUSH(0-DEFINED,CHAIN) 2106 DEFINED=32767 2107 80 CONTINUE 2108 90 CONTINUE 2109 C 2110 IF(LINENO.GT.MAXLIN-5) CALL HEADING(0,1) 2111 IF(LINENO.EQ.3) WRITE(OUTFIL,10) 2112 IF(LINENO.EQ.3) LINENO=5 2113 CALL HEADING(1,1) 2114 WRITE(OUTFIL,100)(OUT(J),J=1,K) 2115 100 FORMAT(17X,17(1X,I5)) 2116 IF(CHAIN.NE.0) GO TO 70 2117 GO TO 1000 2118 C 2119 C--- NO REFERENCES 2120 C 2121 200 CONTINUE 2122 IF(LINENO.GT.MAXLIN-5) CALL HEADING(0,1) 2123 IF(LINENO.EQ.3) WRITE(OUTFIL,10) 2124  IF(LINENO.EQ.3) LINENO=5 2125 CALL HEADING(1,1) 1PAGE 133 1982/08/06 11:03:37.75 SUBROUTINE SYMOUT  FORTRAN(F300) ASM6502 .FTN 2126 DEFINED=0-DEFINED 2127 WRITE(OUTFIL,220) (SYMTAB(I,JJ),JJ=1,SYMLEN),ADDR,DEFINED 2128 220 FORMAT(2X,7A1,2X,Z4,3X,I5,6X,'NO REFERENCES') 2129 1000  CONTINUE 2130 RETURN 2131 END 1PAGE 134 1982/08/06 11:03:40.00 SUBROUTINE SYMOUT  FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/FILES / ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 INFILE 1 SCALAR INTEGER*2 0001 OUTFIL 1 SCALAR INTEGER*2 0002 SCR1 1 SCALAR INTEGER*2 0003 OBJ 1 SCALAR INTEGER*2 COMMON BLOCK/OPTION/ ALLOCATION 0004 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 NOLIST 1 SCALAR INTEGER*2 0001 NOOBJ 1 SCALAR INTEGER*2 0002 NOXREF 1 SCALAR INTEGER*2 0003 NOGEN 1 SCALAR INTEGER*2 COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 0E12 LASTSY 1 SCALAR = INTEGER*2 COMMON BLOCK/HEAD / ALLOCATION 0054 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE  MODE LOCN NAME WORDS TYPE MODE 0000 TITLE 80 ARRAY INTEGER*2 0050 LINENO 1 SCALAR INTEGER*2 0051 PAGE 1 SCALAR INTEGER*2 0052 COMCOL 1 SCALAR INTEGER*2 0053 MAXLIN 1 SCALAR INTEGER*2 1PAGE 135 1982/08/06 11:03:41.00 SUBROUTINE SYMOUT FORTRAN(F300) ASM6502 .FTN SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE 001D I 1 SCALAR INTEGER*2 001E ADDR 1 SCALAR INTEGER*2 001F TEMP 1 SCALAR INTEGER*2 0020 CHAIN 1 SCALAR INTEGER*2 0021 REF 1 SCALAR INTEGER*2 0022 DEFINE 1 SCALAR INTEGER*2 0023 K 1 SCALAR INTEGER*2 0024 J 1 SCALAR INTEGER*2 0025 LINE 1 SCALAR INTEGER*2 0026 JJ  1 SCALAR INTEGER*2 ARRAY ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0027 OUT 20 ARRAY INTEGER*2 1PAGE 136 1982/08/06 11:03:59.25  SUBROUTINE SYMOUT FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS HEADIN USER 2 POP USER 1 PUSH USER 2 F:RWEF RUNTIME F:RETF RUNTIME F:RIOL RUNTIME  F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 01AB #1000 0004 #10 FORMAT 0076 #20 0171 #200  00B9 #40 00A4 #44 00BE #50 002D #60 FORMAT 0105 #70 0138 #80 011D #74 013D #90 003B #100 FORMAT 0043 #220 FORMAT 005E #M14 0062 #M15  005E #M16 0062 #M17 0069 #M18 0076 #M19 0171 #M20 008F #M21  00A4 #M22 0099 #M23 00B9 #M24 00BE #M25 00D1 #M26 00D9 #M27  00DE #M28 00C4 #M29 00D1 #M30 00CB #M31 00D9 #M32 00DE #M33 00E9 #M34 00F9 #M35 01AB #M36 0108 #M37 011D #M38 0112 #M39 0123 #M40 0138 #M41 013D #M42 0149 #M43 0151 #M44 0156 #M45 0143 #M46 0149 #M47 0151 #M48 0156 #M49 0161 #M50 016E #M51 0105 #M52 017D #M53 0185 #M54 018A #M55 0177 #M56  017D #M57 0185 #M58 018A #M59 0198 #M60 01AE #M61 STATEMENT LOCATION MAP  LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 2027 >  0057 2028 0059 2029 0059 2030 0059 2031 0059 2032 0059 2033 0059 2039 0059 2040 005E 2044 0062 2045 0068 2046 006A 2052 006A 2053 0071 2057 0074 2058 0076 2059 0076 2060 007C 2061 0082 2062 0084  2063 008A 2064 008C 2066 008E 2067 0090 2068 0096 2069 0099 2070 009F 2071 00A2 2072 00A4 2073 00A4 2074 00A7 2075 00A9 2076 00AB 2077 00AE 2078 00B7 2079 00B9 1PAGE 137 1982/08/06 11:04:00.75 SUBROUTINE SYMOUT FORTRAN(F300) ASM6502 .FTN 2080 00BE 2082 00BE 2083 00D1 2084 00D9 2085 00DE 2086 00E4 2087 0103 2088 0103 2092 0105 2093 0105 2094 0107 2095 0109 2096 010F 2097 0112 2098 0118 2099 011B 2100 011D 2101 011D 2102 0126 2103 0128 2104 012A 2105  012D 2106 0136 2107 0138 2108 013D 2110 013D 2111 0149 2112 0151 2113 0156 2114 015C 2115 016B 2116 016B 2117 0170 2121 0171 2122 0171 2123 017D 2124 0185 2125 018A 2126 0190 2127 0193 2128 01AB  2129 01AB 2130 01B3 2131 01B5 ENTRY=0057 PROGRAM SIZE=01C7 WORDS DATA SIZE=003C WORDS LONG INSTRUCTIONS USED 7 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 138 1982/08/06 11:04:03.75 SUBROUTINE BYTES(VALUE,UPPER,LOWER) FORTRAN(F300) ASM6502 .FTN 2132 SUBROUTINE BYTES(VALUE,UPPER,LOWER) 2133 IMPLICIT INTEGER(A-Z) 2134 C 2135 C 2136 C--- THIS SUBROUTINE RETURNS THE LOWER EIGHT BITS OF *VALUE* 2137 C--- IN PARAMETER *LOWER* AND THE NEXT EIGHT BITS IN *UPPER*. 2138 C 2139 C 2140 LOWER=IAND(VALUE,:FF) 2141 UPPER=IAND(VALUE,:7F00)/256 2142 IF(VALUE.LT.0) UPPER=IOR(UPPER,:80) 2143 RETURN 2144 END 1PAGE  139 1982/08/06 11:04:06.00 SUBROUTINE BYTES(VALUE,UPPER,LOWER) FORTRAN(F300) ASM6502 .FTN DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE 0007 VALUE 1 SCALAR INTEGER*2 0008 UPPER 1 SCALAR INTEGER*2 0009 LOWER  1 SCALAR INTEGER*2 1PAGE 140 1982/08/06 11:04:10.25 SUBROUTINE BYTES(VALUE,UPPER,LOWER)  FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS IAND INLINE IOR INLINE F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE 0015 #M0 0015 #M1 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 2132 0004 2133 0006 2140 0006 2141 0009 2142 0010 2143 0015 2144 0017 ENTRY=0004 PROGRAM SIZE=001C WORDS DATA SIZE=000B WORDS LONG INSTRUCTIONS USED 1 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 141 1982/08/06 11:04:13.00 INTEGER FUNCTION MAN? GER(NAME,START,FINISH,ATTR,XPTR,CODE) FORTRAN(F300) ASM6502 .FTN 2145 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE) 2146 IMPLICIT INTEGER(A-Z) 2147 COMMON/LNKLST/ AVLIST(2000,2), AVSIZE 2148 COMMON/SYMBLK/ SYMTAB(400,9), MAXSYM, SYMLEN, LASTSYM 2149 COMMON/STATUS/ CARD,PASS,PCOUNT,AVAIL,ERRNUM,ERRCNT 2150  INTEGER NAME(80),FNAME(7) 2151 C 2152 C 2153 C 2154 C--- THIS FUNCTION IS THE SYMBOL TABLE MANAGER. 2155 C--- IT CONTROLS ALL ACCESSES AND UPDATES TO THE TABLE. 2156 C 2157 C--- THE TABLE IS A SORTED LINEAR LIST ... 2158 C 2159 C--- PARAMETER 'NAME' IS THE NAME OF AN ARRAY WHICH CONTAINS 2160 C--- THE SYMBOL TO MANIPULATE. 2161 C 2162 C--- PARAMETERS 'START' AND 'FINISH' POINT TO THE BEGINNING AND 2163 C--- ENDING CHARACTERS OF THE SYMBOL WITHIN THE ARRAY 'NAME'. 2164 C 2165 C 2166 C 2167 C--- PARAMETER 'ATTR' IS THE ATTRRIBUTE ASSOCITAED WITH THE 2168 C--- ACCESS. 2169 C 2170 C--- PARAMETER 'XPTR' IS THE POINTER TO THE SYMBOL'S XREF CHAIN. 2171 C 2172 C--- PARAMETER 'CODE' IS THE FUNCTION TO BE PERFORMED UPON THE 2173 C--- TABLE. 2174 C--- CODE = 0: INSERT THE SYMBOL AND ATTRIBUTE 2175 C--- CODE = 1: RETREIVE THE ATTRIBUTE 2176 C--- CODE = 2: CHANGE THE ATTRIBUTE 2177 C 1PAGE 142 1982/08/06 11:04:14.75 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE) FORTRAN(F300) ASM6502 .FTN 2178 C---  THE FUNCTION RETURNS A POSITIVE NUMBER IF THE TABLE ACCESS 2179 C--- WAS SUCCESSFUL. THIS NUMBER IS THE LOCATION OF THE SYMBOL 2180 C--- IN THE LINKED LIST ARRAY. OTHER POSSIBLE VALUES RETURNED ARE: 2181 C--- MANGER = (-1): DUPLICATE SYMBOL DEFINITION AND CODE ='ED 0 2182 C--- MANGER = (-3): SYMBOL WAS UNDEFINED ON A RETREIVE. 2183 C--- MANGER = (0) : TABLE HAS OVERFLOWED. 2184 C 2185 C 2186 C 2187 C 2188 MANGER=0 2189 C 2190 C--- MOVE NAME TO ARRAY 'FNAME' FOR PROCESSING. BLANK FILL. 2191 C 2192 DO 10 I=1,SYMLEN 2193 FNAME(I)=1H 2194 J=START+I-1 2195 IF(J.GT.FINISH) GO TO 10 2196 FNAME(I)=NAME(J) 2197 10 CONTINUE 2198 IP=1 2199 IF(LASTSYM.EQ.0) GO TO 100 2200 C 2201 C--- SEARCH FOR FNAME IN THE SYMBOL TABLE 2202 C 2203 L=1 2204 U=LASTSYM 2205 LASTI=0 2206 C 2207 50 CONTINUE 2208 I=(L+U)/2 2209 IF(I.EQ.LASTI) GO TO 100 2210 LASTI=I 1PAGE 143 1982/08/06 11:04:17.00 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE) FORTRAN(F300) ASM6502 .FTN 2211 IF(U.LT.I) GO TO 100 2212 C 2213 DO 60 J=1,SYMLEN 2214 IF(FNAME(J)-SYMTAB(I,J)) 64,60,66 2215 60 CONTINUE 2216 C 2217 C--- SYMBOL FOUND 2218 C 2219 GO TO 200 2220 C 2221 C--- SYMBOL < TABLE 2222 C 2223 64 CONTINUE 2224 U=I-1 2225 IP=U 2226 GO TO 50 2227 C 2228 C--- SYMBOL > TABLE 2229 C 2230 66 CONTINUE 2231 L=I+1 2232 IP=L 2233 GO TO 50 2234 C 2235 C--- SYMBOL NOT FOUND. SEE WHAT THE CALLER WANTS TO DO. 2236 C 2237 100 CONTINUE 2238 IF(CODE.EQ.0) GO TO 120 2239 MANG@ ER=(-3) 2240 RETURN 2241 C 2242 C--- INSERT THE SYMBOL AT 'IP' IN THE LIST 2243 C 1PAGE 144 1982/08/06 11:04:19.00 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE) FORTRAN(F300) ASM6502 .FTN 2244 120 CONTINUE 2245 IF(LASTSYM.GE.MAXSYM) RETURN 2246 LASTSYM=LASTSYM+1 2247 IF(LASTSYM.GE.MAXSYM) ERRNUM=ERRNUM*16+15 2248 IF(LASTSYM.LE.1) GO TO 144 2249 SLP2=SYMLEN+2 2250 K=IP 2251 DO 140 J=K,LASTSYM 2252 DO 130 L=1,SLP2 2253 SYMTAB(LASTSYM-J+K,L)=SYMTAB(LASTSYM-J+K-1,L) 2254 130 CONTINUE 2255 140 CONTINUE 2256 C 2257 C--- PUT IT IN 2258 C 2259 144 CONTINUE 2260 DO 150 J=1,SYMLEN 2261 SYMTAB(IP,J)=FNAME(J) 2262 150 CONTINUE 2263 MANGER=IP 2264 SYMTAB(IP,SYMLEN+1)=ATTR 2265 XPTR=0 2266 CALL PUSH(CARD,XPTR) 2267 SYMTAB(IP,SYMLEN+2)=XPTR 2268 RETURN 2269 C 2270 C--- SYMBOL FOUND. ERROR IF NOT RETREVING OR MODIFYING 2271 C 2272 200 CONTINUE 2273 IF(CODE.NE.0) GO TO 220 2274 MANGER=(-1) 2275 RETURN 2276 C 1PAGE 145 1982/08/06 11:04:22.25 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE)  FORTRAN(F300) ASM6502 .FTN 2277 C--- RETREVING??? 2278 C 2279 220 CONTINUE 2280 IF(CODE.NE.1) GO TO 260 2281 ATTR=SYMTAB(I,SYMLEN+1) 2282 XPTR=SYMTAB(I,SYMLEN+2) 2283 MANGER=I 2284 RETURN 2285 C  2286 C--- MODIFYING ??? 2287 C 2288 260 CONTINUE 2289 MANGER=I 2290 SYMTAB(I,SYMLEN+1)=ATTR 2291  SYMTAB(I,SYMLEN+2)=XPTR 2292 RETURN 2293 END 1PAGE 146 1982/08/06 11:04:24.75 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE) FORTRAN(F300) ASM6502 .FTN COMMON BLOCK/LNKLST/ ALLOCATION 0FA1 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 AVLIST 4000 ARRAY INTEGER*2 0FA0 AVSIZE 1 SCALAR INTEGER*2 COMMON BLOCK/SYMBLK/ ALLOCATION 0E13 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0000 SYMTAB 3600 ARRAY INTEGER*2 0E10 MAXSYM 1 SCALAR INTEGER*2 0E11 SYMLEN 1 SCALAR INTEGER*2 0E12 LASTSY 1 SCALAR  INTEGER*2 COMMON BLOCK/STATUS/ ALLOCATION 0006 WORDS LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE  MODE LOCN NAME WORDS TYPE MODE 0000 CARD 1 SCALAR INTEGER*2 0001 PASS 1 SCALAR INTEGER*2 0002 PCOUNT 1 SCALAR INTEGER*2 0003 AVAIL 1 SCALAR INTEGER*2 0004 ERRNUM 1 SCALAR INTEGER*2 0005 ERRCNT  1 SCALAR INTEGER*2 DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 NAME 1 ARRAY INTEGER*2 0008 START 1 SCALAR INTEGER*2 0009 FINISH 1 SCALAR INTEGER*2 000A ATTR 1 SCALAR INTEGER*2 000B XPTR 1 SCALAR INTEGER*2 000C CODE  1 SCALAR INTEGER*2 1PAGE 147 1982/08/06 11:04:25.50 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,COA DE) FORTRAN(F300) ASM6502 .FTN SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 001D :FNVAL 1 SCALAR INTEGER*2 001E I 1 SCALAR INTEGER*2 001F J 1 SCALAR INTEGER*2 0020 IP 1 SCALAR INTEGER*2 0021 L 1 SCALAR INTEGER*2 0022 U 1 SCALAR INTEGER*2 0023 LASTI 1 SCALAR INTEGER*2 0024 SLP2 1 SCALAR INTEGER*2 0025 K  1 SCALAR INTEGER*2 ARRAY ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE 0026 FNAME 7 ARRAY INTEGER*2 1PAGE 148 1982/08/06 11:04:38.25 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE) FORTRAN(F300) ASM6502 .FTN SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS PUSH USER 2 F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE  LOCN LABEL USE LOCN LABEL USE 001A #10 0053 #100 0029 #50 0043 #60 0049 #64 004E #66 00C0 #200 0059 #120 0099 #144 0094 #140 DO END 008F #130 DO END 00A3 #150 DO END 00C6 #220 00D7 #260 000C #M14 0016 #M15 001A #M16 0053 #M17 0053 #M18 0037 #M19 0053 #M20  0038 #M21 0059 #M22 0060 #M23 006A #M24 0060 #M25 005D #M26  006A #M27 0066 #M28 0099 #M29 006F #M30 0075 #M31 0077 #M32 0083 #M33 009A #M34 00C6 #M35 00D7 #M36 STATEMENT LOCATION MAP LINE  LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 2145 0004  2146 0006 2147 0006 2148 0006 2149 0006 2150 0006 2188 0009 2192 000B 2193 000D 2194 000F 2195 0013 2196 0016 2197 001A 2198 001F 2199 0021 2203 0023 2204 0025 2205 0027 2207 0029 2208 0029 2209  0030 2210 0032 2211 0034 2213 0037 2214 0039 2215 0043 2219 0048 2223 0049 2224 0049 2225 004C 2226 004D 2230 004E 2231 004E 2232 0051 2233 0052 2237 0053 2238 0053 2239 0055 2240 0057 2244 0059 2245 0059 2246 0060 2247 0062 2248 006A 2249 006F 2250 0072 2251 0074 2252 0076 2253 0078 2254 008F 2255 0094 2259 0099 2260 0099 2261 009B 2262 00A3 2263 00A8 2264 00AA 2265 00B0 2266 00B2 2267 00B9 2268 00BD 2272 00C0 2273 00C0 2274 00C2 2275 00C4 2279 00C6 2280 00C6 2281 00C9 2282 00D0 2283 00D3 2284 00D5 2288 00D7 2289 00D7 2290 00D9 2291 00DF 2292 00E2 2293 00E5 1PAGE 149 1982/08/06 11:04:40.00 INTEGER FUNCTION MANGER(NAME,START,FINISH,ATTR,XPTR,CODE) FORTRAN(F300) ASM6502 .FTN ENB TRY=0004 PROGRAM SIZE=00E9 WORDS DATA SIZE=0031 WORDS LONG INSTRUCTIONS USED 7 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 1PAGE 150 1982/08/06 11:04:42.50 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU)  FORTRAN(F300) ASM6502 .FTN 2294 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) 2295 IMPLICIT INTEGER(A-Z) 2296 INTEGER NAME(80) 2297 INTEGER FOP(5) 2298 INTEGER OP1(7,10) 2299 INTEGER OP2(7,10) 2300 INTEGER OP3(7,10) 2301 INTEGER OP4(7,10) 2302 INTEGER OP5(7,11) 2303 INTEGER OP6(7,10)  2304 INTEGER OP7(7,10) 2305 INTEGER OP8(7,10) 2306 INTEGER OP9(7,10) 2307 INTEGER OP10(7,10) 2308 INTEGER OP11(7,10) 2309 INTEGER OP12(7,10) 2310 INTEGER OP13(7,10) 2311 INTEGER OP14(7,10) 2312 INTEGER OP15(7,10) 2313 INTEGER OP16(7,10) 2314 INTEGER OP17(7,10) 2315 INTEGER OP18(7,10) 2316 INTEGER OP19(7,10) 2317 INTEGER OP20(7,1) 2318 C 2319 C 2320 C--- THIS FUNCTION IS CALLED TO SEARCH THE OPCODE TABLE 2321 C--- FOR THE OPCODE CONTAINED IN ARRAY 'NAME' FROM COLUMNS 2322 C--- 'START' TO 'FINISH'. 2323 C 2324 C 2325 C--- THE FIRST WORD OF A TABLE ENTRY IS THE SYMBOL (IN A FORMAT) 2326 C--- THE FOLLOWING WORDS ARE THE ATTRIBUTE VECTOR FOR THE SYMBOL. 1PAGE 151 1982/08/06 11:04:45.50 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2327 C 2328 C--- FOR MACHINE OPS THE ATTRIBUTE VECTOR IS DEFINE AS FOLLOWS 2329 C--- WORD 1: THE OPCODE VALUE 2330 C--- WORD 2: THE INSTRUCTIONS LENGTH. A LENGTH OF ZERO MEANS THE OPCODE 2331 C--- IS A TWO BYTE PC RELATIVE BRANCH. 2332 C 2333 C--- FOR PSEUDO OPS THE ATTRIBUTE VECTOR IS DEFINED AS FOLLOWS: 2334 C--- WORD 1: ALWAYS ZERO FOR PSEUDO OPS 2335 C--- WORD 2: THIS IS THE PSEUDO OP INDEX CODE. IT IS ALWAYS NEGATIVE 2336 C 2337 C 2338 DIMENSION OPDAT(7,192) 2339 EQUIVALENCE (OP1,OPDAT(1,1))  2340 EQUIVALENCE (OP2,OPDAT(1,11)) 2341 EQUIVALENCE (OP3,OPDAT(1,21)) 2342 EQUIVALENCE (OP4,OPDAT(1,31)) 2343 EQUIVALENCE (OP5,OPDAT(1,41)) 2344 EQUIVALENCE (OP6,OPDAT(1,52)) 2345 EQUIVALENCE (OP7,OPDAT(1,62)) 2346 EQUIVALENCE (OP8,OPDAT(1,72)) 2347 EQUIVALENCE (OP9,OPDAT(1,82)) 2348 EQUIVALENCE (OP10,OPDAT(1,92)) 2349 EQUIVALENCE (OP11,OPDAT(1,102)) 2350 EQUIVALENCE (OP12,OPDAT(1,112)) 2351 EQUIVALENCE (OP13,OPDAT(1,122)) 2352 EQUIVALENCE (OP14,OPDAT(1,132)) 2353 EQUIVALENCE (OP15,OPDAT(1,142)) 2354 EQUIVALENCE (OP16,OPDAT(1,152)) 2355 EQUIVALENCE (OP17,OPDAT(1,162)) 2356 EQUIVALENCE (OP18,OPDAT(1,172)) 2357 EQUIVALENCE (OP19,OPDAT(1,182)) 2358 EQUIVALENCE (OP20,OPDAT(1,192)) 2359 DATA NUMOP / 192/ 1PAGE 152 1982/08/06 11:04:48.25 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2360 DATA OPLEN/5/ 2361 DATA OP1/ 2362 +1H*, 1H , 1H , 1H , 1H , 0, -1, 2363 +1H., 1H., 1H , 1H , 1H C , 0, -23, 2364 +1H., 1HD, 1HA, 1H , 1H , 0, -11, 2365 +1H., 1HD, 1HB, 1H , 1H , 0, -9, 2366 +1H., 1HD, 1HW, 1H , 1H , 0, -10, 2367 +1H., 1HE, 1HN, 1HD, 1H , 0, -5, 2368 +1H=, 1H , 1H , 1H , 1H , 0, -4, 2369 +1HA, 1HD, 1HC, 1H , 1H , 109, 3, 2370 +1HA, 1HD, 1HC, 1H#, 1H , 105, 2, 2371 +1HA, 1HD, 1HC, 1H), 1HY, 113, 2/ 2372 DATA OP2/ 2373 +1HA, 1HD, 1HC, 1HX, 1H , 125, 3, 2374 +1HA, 1HD, 1HC, 1HX, 1H), 97, 2, 2375 +1HA, 1HD, 1HC, 1HX, 1HZ, 117, 2, 2376 +1HA, 1HD, 1HC, 1HY, 1H , 121, 3, 2377 +1HA, 1HD, 1HC, 1HZ, 1H , 101, 2, 2378 +1HA, 1HD, 1HC, 1HZ, 1HX, 117, 2, 2379 +1HA, 1HD, 1HD, 1HR, 1H , 0, -11, 2380 +1HA, 1HN, 1HD, 1H , 1H , 45, 3, 2381 +1HA, 1HN, 1HD, 1H#, 1H , 41, 2, 2382 +1HA, 1HN, 1HD, 1H), 1HY, 49, 2/ 1PAGE 153 1982/08/06 11:04:52.50 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2383 DATA OP3/ 2384 +1HA, 1HN, 1HD, 1HX, 1H , 61, 3, 2385 +1HA, 1HN, 1HD, 1HX, 1H), 33, 2, 2386 +1HA, 1HN, 1HD, 1HX, 1HZ, 53, 2, 2387 +1HA, 1HN, 1HD, 1HY, 1H , 57, 3, 2388 +1HA, 1HN, 1HD, 1HZ, 1H , 37, 2, 2389 +1HA, 1HN, 1HD, 1HZ, 1HX, 53, 2, 2390 +1HA, 1HS, 1HC, 1HI, 1HI, 0, -30, 2391 +1HA, 1HS, 1HL, 1H , 1H , 14, 3, 2392 +1HA, 1HS, 1HL, 1HA, 1H , 10, 1, 2393 +1HA, 1HS, 1HL, 1HX, 1H , 30, 3/ 2394 DATA OP4/ 2395 +1HA, 1HS, 1HL, 1HX, 1HZ, 22, 2, 2396 +1HA, 1HS, 1HL, 1HZ, 1H , 6, 2, 2397 +1HA, 1HS, 1HL, 1HZ, 1HX, 22, 2, 2398 +1HB, 1HC, 1HC, 1H , 1H , 144, 00, 2399 +1HB, 1HC, 1HS, 1H , 1H , 176, 00, 2400 +1HB, 1HE, 1HQ, 1H , 1H , 240, 00, 2401 +1HB, 1HI, 1HT, 1H , 1H , 44, 3, 2402  +1HB, 1HI, 1HT, 1HZ, 1H , 36, 2, 2403 +1HB, 1HM, 1HI, 1H , 1H , 48, 00, 2404 +1HB, 1HN, 1HE, 1H , 1H , 208, 0/ 1PAGE 154 1982/08/06 11:04:55.00 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2405 DATA OP5/ 2406 +1HB, 1HP, 1HL, 1H , 1H , 16, 00, 2407 +1HB, 1HR, 1HK, 1H , 1H , 0, 1, 2408 +1HB, 1HS, 1HS, 1H , 1H , 0, -3, 2409 +1HB, 1HV, 1HC, 1H , 1H , 80, 00, 2410  +1HB, 1HV, 1HS, 1H , 1H , 112, 00, 2411 +1HB, 1HY, 1HT, 1HE, 1H , 0, -9, 2412 +1HC, 1HK, 1HS, 1HU, 1HM,  0, -12, 2413 +1HC, 1HL, 1HC, 1H , 1H , 24, 1, 2414 +1HC, 1HL, 1HD, 1H , 1H , 216, 1, 2415 +1HC, 1HL, 1HI, 1H , 1H , 88, 1, 2416 +1HC, 1HL, 1HV, 1H , 1H , 184, 1/ 2417 DATA OP6/ 2418 +1HC, 1HM, 1HP, 1H , 1H , 205, 3, 2419 +1HC, 1HM, 1HP, 1H#, 1H , 201, 2, 2420 +1HC, 1HM, 1HP, 1H), 1HY, 209, 2, 2421 +1HC, 1HM, 1HP, 1HX, 1H , 221, 3, 2422 +1HC, 1HM, 1HP, 1HX, 1H), 193, 2, 2423 +1HC, 1HM, 1HP, 1HX, 1HZ, 213, 2,  2424 +1HC, 1HM, 1HP, 1HY, 1H , 217, 3, 2425 +1HC, 1HM, 1HP, 1HZ, 1H , 197, 2, 2426 +1HC, 1HM, 1HP, 1HZ, 1HX, 213, 2, 2427 +1HC, 1HP, 1HX, 1H , 1H , 236, 3/ 1PAGE 155 1982/08/06 11:04:57.75 INTEGER FUNCTION OPLD OOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2428 DATA OP7/ 2429 +1HC, 1HP, 1HX, 1H#, 1H , 224, 2, 2430 +1HC, 1HP, 1HX, 1HZ, 1H , 228, 2, 2431 +1HC, 1HP, 1HY, 1H , 1H , 204, 3, 2432 +1HC, 1HP, 1HY, 1H#, 1H , 192, 2, 2433 +1HC, 1HP, 1HY, 1HZ, 1H , 196, 2, 2434 +1HD, 1HE, 1HC, 1H , 1H , 206, 3, 2435 +1HD, 1HE, 1HC, 1HX, 1H , 222, 3, 2436 +1HD, 1HE, 1HC, 1HX, 1HZ, 214, 2, 2437 +1HD, 1HE, 1HC, 1HZ, 1H , 198, 2, 2438 +1HD, 1HE, 1HC, 1HZ, 1HX, 214, 2/ 2439 DATA OP8/ 2440 +1HD, 1HE, 1HX, 1H , 1H , 202, 1, 2441 +1HD, 1HE, 1HY, 1H , 1H , 136, 1, 2442 +1HE, 1HJ, 1HE, 1HC, 1HT, 0, -8, 2443 +1HE, 1HN, 1HD, 1H , 1H , 0, -5, 2444 +1HE, 1HN, 1HD, 1H , 1H , 0, -5, 2445 +1HE, 1HO, 1HR, 1H , 1H , 77, 3, 2446 +1HE, 1HO, 1HR, 1H#, 1H , 73, 2, 2447 +1HE, 1HO, 1HR, 1H), 1HY, 81, 2, 2448 +1HE, 1HO, 1HR, 1HX, 1H , 93, 3, 2449 +1HE, 1HO, 1HR, 1HX, 1H), 65, 2/ 2450 DATA OP9/ 2451 +1HE, 1HO, 1HR, 1HX, 1HZ,  85, 2, 2452 +1HE, 1HO, 1HR, 1HY, 1H , 89, 3, 2453 +1HE, 1HO, 1HR, 1HZ, 1H , 69, 2, 2454 +1HE, 1HO, 1HR, 1HZ, 1HX, 85, 2, 2455 +1HE, 1HQ, 1HU, 1H , 1H , 0, -4, 2456 +1HH, 1HE, 1HD, 1H , 1H , 0, -7, 2457 +1HI, 1HN, 1HC, 1H , 1H , 238, 3, 2458 +1HI, 1HN, 1HC, 1HX, 1H , 254, 3, 2459 +1HI, 1HN, 1HC, 1HX, 1HZ, 246, 2, 2460 +1HI, 1HN, 1HC, 1HZ, 1H , 230, 2/ 1PAGE 156 1982/08/06 11:05:01.75 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2461 DATA OP10/ 2462 +1HI, 1HN, 1HC, 1HZ, 1HX, 246, 2, 2463 +1HI, 1HN, 1HX, 1H , 1H , 232, 1, 2464 +1HI, 1HN, 1HY, 1H , 1H , 200, 1, 2465  +1HJ, 1HM, 1HP, 1H , 1H , 76, 3, 2466 +1HJ, 1HM, 1HP, 1H), 1H , 108, 3, 2467 +1HJ, 1HS, 1HR, 1H , 1H , 32, 3, 2468 +1HL, 1HD, 1HA, 1H , 1H , 173, 3, 2469 +1HL, 1HD, 1HA, 1H#, 1H , 169, 2, 2470 +1HL, 1HD, 1HA, 1H), 1HY, 177, 2, 2471 +1HL, 1HD, 1HA, 1HX, 1H , 189, 3/ 2472 DATA OP11/ 2473 +1HL, 1HD, 1HA, 1HX, 1H), 161, 2, 2474 +1HL, 1HD, 1HA, 1HX, 1HZ, 181, 2, 2475 +1HL, 1HD, 1HA, 1HY, 1H , 185, 3, 2476 +1HL, 1HD, 1HA, 1HZ, 1H , 165, 2, 2477 +1HL, 1HD, 1HA, 1HZ, 1HX, 181, 2, 2478 +1HL, 1HD, 1HX, 1H , 1H , 174, 3, 2479 +1HL, 1HD, 1HX, 1H#, 1H , 162, 2, 2480 +1HL, 1HD, 1HX, 1HY, 1H , 190, 3, 2481 +1HL, 1HD, 1HX, 1HY, 1HZ, 182, 2, 2482 +1HL, 1HD, 1HX, 1HZ, 1H , 166, 2/ 2483 DATA OP12/ 2484 +1HL, 1HD, 1HX, 1HZ, 1HY, 182, 2, 2485 +1HL, 1HD, 1HY, 1H , 1H , 172, 3, 2486 +1HL, 1HD, 1HY, 1H#, 1H , 160, 2, 2487 +1HL, 1HD, 1HY, 1HX, 1H , 188, 3, 2488 +1HL, 1HD, 1HY, 1HX, 1HZ, 180, 2, 2489 +1HL, 1HD, 1HY, 1HZ, 1H , 164, 2, 2490  +1HL, 1HD, 1HY, 1HZ, 1HX, 180, 2, 2491 +1HL, 1HS, 1HR, 1H , 1H , 78, 3, 2492 +1HL, 1HS, 1HR, 1HA, 1H , 74, 1, 2493 +1HL, 1HS, 1HR, 1HX, 1H , 94, 3/ 1PAGE 157 1982/08/06 11:05:05.50 INTEGER FUNCTION OPLOOK(NAME,E START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2494 DATA OP13/ 2495 +1HL, 1HS, 1HR, 1HX, 1HZ, 86, 2, 2496 +1HL, 1HS, 1HR, 1HZ, 1H , 70, 2, 2497 +1HL, 1HS, 1HR, 1HZ, 1HX, 86, 2, 2498 +1HN, 1HO, 1HP, 1H , 1H , 234, 1, 2499 +1HO, 1HP, 1HT, 1H , 1H , 0, -6, 2500 +1HO, 1HR, 1HA, 1H , 1H , 13,  3, 2501 +1HO, 1HR, 1HA, 1H#, 1H , 9, 2, 2502 +1HO, 1HR, 1HA, 1H), 1HY, 17, 2, 2503 +1HO, 1HR, 1HA, 1HX, 1H , 29, 3, 2504 +1HO, 1HR, 1HA, 1HX, 1H), 1, 2/ 2505 DATA OP14/ 2506 +1HO, 1HR, 1HA, 1HX, 1HZ, 21, 2, 2507 +1HO, 1HR, 1HA, 1HY, 1H , 25, 3, 2508 +1HO, 1HR, 1HA, 1HZ, 1H , 5, 2, 2509 +1HO, 1HR, 1HA, 1HZ, 1HX, 21, 2, 2510 +1HO, 1HR, 1HG, 1H , 1H , 0, -2, 2511 +1HP, 1HA, 1HG, 1HE, 1H , 0, -19, 2512 +1HP, 1HH, 1HA, 1H , 1H , 72, 1, 2513 +1HP, 1HH, 1HP, 1H , 1H , 8, 1, 2514 +1HP, 1HL, 1HA, 1H , 1H , 104, 1, 2515 +1HP, 1HL, 1HP, 1H , 1H , 40, 1/ 2516 DATA OP15/ 2517 +1HR, 1HO, 1HL, 1H , 1H , 46,  3, 2518 +1HR, 1HO, 1HL, 1HA, 1H , 42, 1, 2519 +1HR, 1HO, 1HL, 1HX, 1H , 62, 3, 2520 +1HR, 1HO, 1HL, 1HX, 1HZ, 54, 2, 2521 +1HR, 1HO, 1HL, 1HZ, 1H , 38, 2, 2522 +1HR, 1HO, 1HL, 1HZ, 1HX, 54, 2, 2523 +1HR, 1HO, 1HR, 1H , 1H , 110, 3, 2524 +1HR, 1HO, 1HR, 1HA, 1H , 106, 1, 2525 +1HR, 1HO, 1HR, 1HX, 1H , 126,  3, 2526 +1HR, 1HO, 1HR, 1HX, 1HZ, 118, 2/ 1PAGE 158 1982/08/06 11:05:09.75 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2527 DATA OP16/ 2528 +1HR, 1HO, 1HR, 1HZ, 1H , 102, 2, 2529 +1HR, 1HO, 1HR, 1HZ, 1HX, 118, 2, 2530 +1HR, 1HT, 1HI, 1H , 1H , 64, 1, 2531 +1HR, 1HT, 1HS, 1H , 1H , 96, 1, 2532 +1HS, 1HB, 1HC, 1H , 1H , 237, 3, 2533 +1HS, 1HB, 1HC, 1H#, 1H , 233, 2, 2534 +1HS, 1HB, 1HC, 1H), 1HY, 241, 2, 2535 +1HS, 1HB, 1HC, 1HX, 1H , 253, 3, 2536 +1HS, 1HB, 1HC, 1HX, 1H), 225, 2, 2537 +1HS, 1HB, 1HC, 1HX, 1HZ, 245, 2/ 2538 DATA OP17/ 2539 +1HS, 1HB, 1HC, 1HY, 1H , 249, 3, 2540 +1HS, 1HB, 1HC, 1HZ, 1H , 229, 2, 2541 +1HS, 1HB, 1HC, 1HZ, 1HX, 245, 2, 2542 +1HS, 1HE, 1HC, 1H , 1H , 56, 1, 2543 +1HS, 1HE, 1HD, 1H , 1H , 248, 1, 2544 +1HS, 1HE, 1HI, 1H , 1H , 120, 1, 2545  +1HS, 1HP, 1HA, 1HC, 1HE, 0, -29, 2546 +1HS, 1HT, 1HA, 1H , 1H , 141, 3, 2547 +1HS, 1HT, 1HA, 1H), 1HY, 145, 2, 2548 +1HS, 1HT, 1HA, 1HX, 1H , 157, 3/ 2549 DATA OP18/ 2550 +1HS, 1HT, 1HA, 1HX, 1H), 129, 2, 2551 +1HS, 1HT, 1HA, 1HX, 1HZ, 149, 2, 2552 +1HS, 1HT, 1HA, 1HY, 1H , 153, 3, 2553 +1HS, 1HT, 1HA, 1HZ, 1H , 133, 2, 2554 +1HS, 1HT, 1HA, 1HZ, 1HX, 149, 2, 2555 +1HS, 1HT, 1HX, 1H , 1H , 142, 3, 2556 +1HS, 1HT, 1HX, 1HY, 1HZ, 150, 2, 2557 +1HS, 1HT, 1HX, 1HZ, 1H , 134, 2, 2558 +1HS, 1HT, 1HX, 1HZ, 1HY, 150, 2, 2559 +1HS, 1HT, 1HY, 1H , 1H , 140, 3/ 1PAGE 159 1982/08/06 11:05:13.50 INTEGER FUNCTION OPLOOK(NAME,START,F FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2560 DATA OP19/ 2561 +1HS, 1HT, 1HY, 1HX, 1HZ, 148, 2, 2562 +1HS, 1HT, 1HY, 1HZ, 1H , 132, 2, 2563 +1HS, 1HT, 1HY, 1HZ, 1HX, 148, 2, 2564 +1HT, 1HA, 1HX, 1H , 1H , 170, 1, 2565 +1HT, 1HA, 1HY, 1H , 1H , 168, 1, 2566 +1HT, 1HI, 1HT, 1HL, 1HE, 0, -7, 2567 +1HT, 1HS, 1HX, 1H , 1H , 186, 1, 2568 +1HT, 1HX, 1HA, 1H , 1H , 138, 1, 2569 +1HT, 1HX, 1HS, 1H , 1H , 154, 1, 2570 +1HT, 1HY, 1HA, 1H , 1H , 152, 1/ 2571 DATA OP20/ 2572 +1HW, 1HO, 1HR, 1HD, 1H , 0, -10/ 2573 C 2574 C 2575 C--- SEARCH THE TABLE FOR THE NAME (BLANK FILLED) 2576 C 2577 C 2578 DO 10 I=1,OPLEN 2579 FOP(I)=1H 2580 J=START+I-1 2581 IF(J.GT.FINISH) GO TO 10 2582 FOP(I)=NAME(J) 2583 10  CONTINUE 2584 C 2585 OPLOOK=(-1) 2586 L=1 2587 U=NUMOP 2588 LASTI=0 2589 C 2590 C--- DO A BINARY SEARCH 2591 C 2592 100 CONTINUE 1PAGE 160 1982/08/06 11:05:16.25 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN 2593 I=(L+U)/2 2594 IF(I.EQ.LASTI) RETURN 2595 LASTI=I 2596 IF(U.LT.I) RETURN 2597 C 2598 DO 120 J=1,OPLEN 2599 IF(FOP(J)-OPDAT(J,I)) 130,120,140 2600 120 CONTINUE 2601 C 2602 C--- OPCODE FOUND 2603 C 2604 OPLOOK=I 2605 OPVALU=OPDAT(OPLEN+1,I) 2606 TYPE2=OPDAT(OPLEN+2,I) 2607 RETURN 2608 C 2609 C--- NAME < TABLE 2610 C 2611 130 CONTINUE 2612 U=I-1 2613 GO TO 100 2614 C 2615 C--- NAME > TABLE 2616 C 2617 140 CONTINUE 2618 L=I+1 2619 GO TO 100 2620 END 1PAGE 161 1982/08/06 11:05:20.00 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN DUMMY ARGUMENT ALLOCATION LOCN NAME WORDS TYPE  MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 0007 NAME 1 ARRAY INTEGER*2 0008 START 1 SCALAR INTEGER*2 0009 FINISH 1 SCALAR INTEGER*2 000A TYPE2 1 SCALAR INTEGER*2 000B OPVALU  1 SCALAR INTEGER*2 SCALAR ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE  LOCN NAME WORDS TYPE MODE 0024 :FNVAL 1 SCALAR INTEGER*2 0025 NUMOP 1 SCALAR INTEGER*2 0026 OPLEN  1 SCALAR INTEGER*2 0027 I 1 SCALAR INTEGER*2 0028 J 1 SCALAR INTEGER*2 0029 L 1 SCALAR INTEGER*2 002A U 1 SCALAR INTEGER*2 002B LASTI 1 SCALAR INTEGER*2 EQUIVALENCE ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 002C OP1  70 ARRAY INTEGER*2 002C OPDAT 1344 ARRAY INTEGER*2 0072 OP2 70 ARRAY INTEGER*2 00B8 OP3 70 ARRAY  INTEGER*2 00FE OP4 70 ARRAY INTEGER*2 0144 OP5 77 ARRAY INTEGER*2 0191 OP6 70 ARRAY INTEGER*2 01D7 OP7 70 ARRAY INTEGER*2 021D OP8 70 ARRAY INTEGER*2 0263 OP9 70 ARRAY INTEGER*2 02A9 OP10 G  70 ARRAY INTEGER*2 02EF OP11 70 ARRAY INTEGER*2 0335 OP12 70 ARRAY INTEGER*2 037B OP13 70 ARRAY INTEGER*2 03C1 OP14 70 ARRAY INTEGER*2 0407 OP15 70 ARRAY INTEGER*2 044D OP16 70 ARRAY INTEGER*2 0493 OP17 70 ARRAY INTEGER*2 04D9 OP18 70 ARRAY INTEGER*2 051F OP19 70 ARRAY INTEGER*2 0565 OP20 7 ARRAY INTEGER*2 1PAGE 162 1982/08/06 11:05:21.00 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN ARRAY ALLOCATION LOCN NAME WORDS TYPE MODE LOCN NAME  WORDS TYPE MODE LOCN NAME WORDS TYPE MODE 056C FOP 5 ARRAY INTEGER*2 1PAGE 163 1982/08/06 11:05:44.50 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN  SUBPROGRAMS CALLED NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME TYPE ARGS NAME  TYPE ARGS F:RGMY RUNTIME STATEMENT LABELS LOCN LABEL USE LOCN LABEL USE LOCN LABEL USE  LOCN LABEL USE LOCN LABEL USE 0018 #10 0025 #100 0049 #120 005D #130 0061 #140 000A #M5 0014 #M6 0018 #M7 0031 #M8  003A #M9 0031 #M10 003A #M11 0037 #M12 003B #M13 STATEMENT LOCATION MAP LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN LINE LOCN 2294  0004 2295 0006 2296 0006 2297 0009 2298 0009 2299 0009 2300 0009 2301 0009 2302 0009 2303 0009 2304 0009 2305 0009 2306 0009 2307 0009 2308 0009 2309 0009 2310 0009 2311 0009 2312 0009 2313 0009 2314 0009 2315 0009 2316 0009 2317 0009 2338 0009 2339 0009 2340 0009 2341 0009 2342 0009 2343 0009 2344 0009 2345 0009 2346 0009 2347 0009 2348 0009 2349 0009 2350 0009 2351 0009 2352 0009 2353 0009 2354 0009 2355 0009 2356 0009 2357 0009 2358 0009 2359 0009 2360 0009 2361 0009 2372 0009 2383 0009 2394 0009 2405 0009 2417 0009 2428 0009 2439 0009 2450 0009 2461 0009 2472 0009 2483 0009 2494 0009 2505 0009 2516 0009 2527 0009 2538 0009 2549 0009 2560 0009 2571 0009 2578 0009 2579 000B 2580 000D 2581 0011 2582 0014 2583 0018 2585 001D 2586 001F 2587 0021 2588 0023 2592 0025 2593 0025 2594 002C 2595 0031 2596 0033 2598 003A 2599 003C 2600 0049 2604 004E 2605 0050 2606 0057 2607  005A 2611 005D 2612 005D 2613 0060 2617 0061 2618 0061 2619 0064 2620 0065 1PAGE 164 1982/08/06 11:05:45.75 INTEGER FUNCTION OPLOOK(NAME,START,FINISH,TYPE2,OPVALU) FORTRAN(F300) ASM6502 .FTN ENTRY=0004 PROGRAM SIZE=0069 WORDS DATA SIZE=0572 WORDS LONG INSTRUCTIONS USED 5 COMPILATION COMPLETE 0 ERRORS (0000) 0 WARNINGS (0000) 2C 2595 0031 2596 0033 2598 003A 2599 003C 2600 0049 2604 004E 2605 0050 2606 0057 2607 H IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII