1 2 /PAL III SOURCE LISTING 3 /DEC-08-LPALA-A-LA 4 5 /COPYRIGHT 1970,1971,1972 DIGITAL EQUIPMENT CORPORATION 6 / MAYNARD, MASSACHUSETTS 01754 7 8 9 10 /ASSEMBLY INSTRUCTIONS 11 /.R PAL8 OR .R PAL10 12 /PAL3,PAL3_PAL3 13 14 15 /PAGE 1 16 /PAGE ZERO CONSTANTS AND STORAGE 17 / TIME-OUT DELAY TO ACCOMODATE PHOTO-ELECTRIC READER 18 *1 19 000001 0000 WAIT, 0 20 000002 1073 TAD M2 21 000003 3014 DCA 14 22 000004 2014 ISZ 14 23 000005 5004 JMP .-1 24 000006 2001 ISZ WAIT 25 000007 5401 JMP I WAIT 26 /INDIRECT REFERENCE TABLE 27 *20 28 000020 0000 AAA, 0 /POINTER TO READ ROUTINE 29 000021 0000 BBB, 0 /POINTER TO PUNCH ROUTINE 30 000022 0000 DDD, 0 /POINTER TO TYPE ROUTINE 31 000023 1000 SPECI, SPSHUL /SPECIAL CHARACTER HANDLER 32 000024 2031 NCHEKI, NCHEK /CHARACTER TYPE PROCESSOR 33 000025 1506 CHEKI, CHEK /CHECKS CHARACTER LEGALITY 34 000026 1125 SYMCMI, SYMCOM /SYMBOL COMPARISON ROUTINE 35 000027 1275 PUNI, BINP /BINARY PUNCH ROUTINE 36 000030 1200 EEE, ALFO /ALPHA OUTPUT ROUTINE 37 000031 1243 OCTI, OCTO /OCTAL OUTPUT ROUTINE 38 000032 1344 NUMBI, NMBR /OCTAL NUMBER PROCESSOR 39 000033 1420 SPACI, SPACE /SPACE HANDLER 40 000034 0465 CARRI, CARR /CARRIAGE RETURN HANDLER 41 000035 0600 DOLLI, DOLLAR /END-OF-PASS ROUTINE 42 000036 2000 STARI, STAR /ORIGIN HANDLER 43 000037 1417 ADDI, ADD /SET SIGN FOR ADD 44 000040 2131 SYMSTI, SYMSTO /COMMA HANDLER 45 000041 1416 SUBI, SUB /SET SIGN FOR SUBTRACT 46 000042 0567 POINTI, POINT /PERIOD PROCESSOR 47 000043 2213 EQUALI, EQUAL /PARAMETER ASSIGNMENTS 48 000044 0340 FFF, CSYM /MAIN EXPRESSION HANDLER 49 000045 1163 PUSHJI, PUSHJM /PUSHJ ROUTINE 50 000046 0246 POPJMI, POPJMP /POPJ ROUTINE 51 000047 1323 PUSHI, PUSHIN /PUSH ROUTINE 52 000050 0536 POPMI, POPM /POP ROUTINE 53 000051 1264 LDTI, LDTR /LEADER-TRAILER GENERATOR 54 000052 0361 LOPUNI, LOPUN /ASR 33 PUNCH 55 000053 0161 HIPUNI, HIPUN /75 A PUNCH 56 000054 1400 LOREDI, LOREAD /ASR 33 READER 57 000055 1426 HIREDI, HIREAD /750 READER 58 000056 2257 IORIN, IOR /POINTER TO INCLUSIVE OR ROUTINE 59 000057 0240 NEXI, NXPA /POINTER TO NEXT PASS 60 61 62 63 64 65 /PAGE 2 66 /NUMERICAL CONSTANTS 67 000060 0002 C2, 0002 68 000061 0003 C3, 0003 69 000062 0004 C4, 0004 70 000063 0005 C5, 0005 71 000064 0006 C6, 0006 72 000065 0200 C200, 0200 73 000066 0211 C211, 0211 74 000067 0214 C214, 0214 75 000070 0215 C215, 0215 76 000071 0377 C377, 0377 77 000072 4000 C4TH, 4000 78 79 000073 7776 M2, -0002 80 000074 7775 M3, -0003 81 000075 7766 M12, -0012 82 000076 7755 M23, -0023 83 000077 7774 M4, -0004 84 000100 7761 M17, -0017 85 000101 7563 M215, -0215 86 000102 7600 M200, -0200 87 000103 7777 M1, -0001 88 000104 7772 M6, -0006 89 000105 7567 M211, -0211 90 000106 7566 M212, -0212 91 92 93 /TEMPORARY REGISTERS 94 95 000107 0000 ITEM, 0 /USED BY INCLUSIVE OR ROUTINE 96 000110 0000 TEM5, 0 /USED BY EQUAL ROUTINE 97 000111 0000 TEM1, 0 /AVAILABLE TO ALL ROUTINES 98 000112 0000 TEM2, 0 /... 99 000113 0000 TEM3, 0 /... 100 000114 0000 POPTEM, 0 /USED BY PUSH,POP,ETC 101 102 103 104 105 106 /PAGE 3 107 /SYMBOLIC CONSTANTS AND POINTERS 108 109 000115 3071 IAM1, SYTA-1 /USED FOR AUTO-INDEX REGISTERS 110 000116 7600 MPAGE, 7600 /MASK FOR PAGE BITS 111 000117 4543 CRLF, 4543 /CONSTANT FOR CR,LF 112 000120 3777 MASK, 3777 /MASKS OFF UNDEFINED BIT 113 000121 0007 SL3, 0007 /MASK FOR THREE BIT OCTAL # 114 000122 0177 SL7, 0177 /MASK FOR SEVEN BIT ADDRESS 115 000123 0077 SL6, 0077 /MASK FOR 6-BIT ALPHA CHAR 116 000124 6000 SF2, 6000 /MASK OFF PASS BITS 117 000125 0000 RBGN, 0 /BEGINNING OF READER BUFFER 118 000126 7204 RKON, -574 /SIZE OF READER BUFFER 119 000127 2015 P1BGN, PSHLST /BEGINNING OF PUSHDOWN LIST 120 000130 5753 P1END, -PSHLST-10 /CONSTANT FOR PDL OVERFLOW 121 000131 7450 TBUF, 7450 /BEGINNING OF PASS 3 BUFFER 122 000132 6650 GOREAD, 6650 /BUFFER WITH HIGH SPEED READER 123 000133 0400 C400, 0400 /INDIRECT BIT 124 125 126 127 128 129 130 /PAGE 4 131 /DATA REGISTERS 132 133 000134 0000 PF, 0 /PASS FLAG 134 000135 0000 SPNT, 0 /POINTER TO END OF SYMBOL TABLE 135 000136 0000 CHAR, 0 /CURRENT CHARACTER BEING PROCESSED 136 000137 0000 INFO, 0 /INFORMATION FLAG 137 000140 0000 BINW, 0 /12 BINARY ASSEMBLED WORD 138 000141 0000 OCWD, 0 /12 BIT OCTAL WORD 139 000142 0000 AACT, 0 /ABSOLUTE ADDRESS COUNTER 140 000143 0000 ADDR, 0 /12 BIT ASSEMBLED ADDRESS 141 000144 0000 SYMVAL, 0 /OCTAL VALUE OF SYMBOL 142 000145 0000 SYM1, 0 /FIRST TWO CHARACTERS OF 6-LETTER SYMBOL 143 000146 0000 SYM2, 0 /2ND TWO CHARACTERS 144 000147 0000 SYM3, 0 /3RD TWO CHARACTERS 145 000150 0000 CKSM, 0 /CURRENT BINARY CHECKSUM 146 000151 0000 INSF, 0 /INSTRUCTION FLAG; 1 IF INSTRUCTION 147 000152 0000 ZFLG, 0 /Z FLAG; 1 IF PAGE ZERO REFERENCE 148 000153 0000 FLAG, 0 /COMMENT FLAG; 1 IF IN A COMMENT 149 000154 0000 SIGN, 0 /SIGN ASSOCIATED WITH PRESENT ATOM 150 000155 0000 TYPE, 0 /SYMBOL TYPE 151 000156 0000 SWITCH, 0 /END-OF-TAPE FLAG 152 000157 0000 RCNT, 0 /NUMBER OF CHARACTERS LEFT IN BUFFER 153 000160 0000 PSHPN1, 0 /PUSH DOWN POINTER 154 155 /75A PUNCH ROUTINE 156 /LENGTH: 6 REGISTERS 157 000161 0000 HIPUN, 0 158 000162 6021 PSF 159 000163 5162 JMP .-1 160 000164 6026 PLS 161 000165 7200 CLA /EXIT WITH C(AC)=0 162 000166 5561 JMP I HIPUN 163 164 165 166 167 168 /PAGE 5 169 /PARAMETER ASSIGNMENTS 170 171 PUSHJ=JMS I PUSHJI 172 POPJ=JMP I POPJMI 173 174 AUTOA=10 175 AUTOB=11 176 AUTOC=13 177 178 SORT1=16 179 SORT2=17 180 181 POP=JMS I POPMI 182 PUSH=JMS I PUSHI 183 184 /DECIMAL AND OCTAL PSEUDO-OPS 185 /TO SET CURRENT RADIX 186 /LENGTH : 8 REGISTERS 187 188 000167 1174 DECMA, TAD INST1 /NOP INSTRUCTION 189 000170 3576 DCA I SWTCHN /STORE IN SWITCH 190 000171 5446 POPJ 191 000172 1175 OCTALP, TAD INST2 /SKP INSTRUCTION 192 000173 5170 JMP .-3 /STORE AND EXIT 193 000174 7000 INST1, NOP 194 000175 7410 INST2, SKP 195 000176 1350 SWTCHN, NSWTCH /LOCATION IN "NMBR" 196 000177 0204 C204, 0204 197 L00, /END OF PAGE MARKER 198 199 200 201 202 203 204 /PAGE 6 205 /BEGINNING OF PAL 206 /DETERMINES TYPE OF I-O TO BE USED 207 /CALCULATES PASS NUMBER FROM SWITCH SETTINGS 208 /LENGTH: 34 REGISTERS 209 *200 210 211 000200 3111 SPAL, DCA TEM1 /0 TO COUNTER 212 000201 6026 PLS /SELECT PUNCH 213 000202 6014 RFC /SELECT READER 214 000203 6011 RSF /READER FLAG SET? 215 000204 4001 JMS WAIT 216 000205 5242 JMP HREAD /YES: HIGH READER INPUT 217 000206 2111 ISZ TEM1 /WAITED ENOUGH? 218 000207 5203 JMP .-4 /NO: TRY AGAIN 219 000210 1054 TAD LOREDI /YES: LOW SPEED READER 220 000211 3020 DCA AAA 221 000212 1131 TAD TBUF /ALL OF CORE FOR SYMBOLS 222 000213 3125 DCA RBGN 223 000214 7604 TPUN, LAS /CHOOSE MAIN OUTPUT DEVICE 224 000215 7010 RAR /BIT 11 TO LINK 225 000216 7630 SZL CLA /HIGH SPEED PUNCH??? 226 000217 1053 TAD HIPUNI /YES 227 000220 7420 SNL 228 000221 1052 TAD LOPUNI /NO 229 000222 3021 DCA BBB 230 000223 6032 PASS, KCC /INITIALIZE DEVICES 231 000224 6046 TLS 232 000225 6026 PLS 233 000226 7604 CLA OSR 234 000227 0124 AND SF2 /WAS PASS NUMBER SET? 235 000230 7450 SNA 236 000231 5240 JMP NXPA /NO, HALT 237 000232 7104 RAL CLL /GET HIGH ORDER BIT 238 000233 7420 SNL /WAS IT SET? 239 000234 5251 JMP PASS1 /NO, PASS 1 240 000235 7700 SMA CLA /YES, WHAT ABOUT LOW ORDER? 241 000236 5256 JMP PASS2 /NOT ON, PASS 2 242 000237 5263 JMP PASS3 /ON, PASS3 243 000240 7402 NXPA, HLT 244 000241 5214 JMP TPUN 245 246 247 248 249 250 251 /PAGE 7 252 /HREAD 253 /ROUTINE TO SET POINTER FOR READ 254 /LENGTH: 4 REGISTERS 255 256 257 000242 1055 HREAD, TAD HIREDI 258 000243 3020 DCA AAA 259 000244 1132 TAD GOREAD 260 000245 5213 JMP TPUN-1 261 /POPJ ROUTINE TO EXIT RECURSIVELY FROM SUBROUTINES 262 /CHECKS FOR PUSHDOWN UNDERFLOW VIA POP ROUTINE 263 /LENGTH: 3 REGISTERS 264 265 000246 4450 POPJMP, POP /GET RETURN ADDRESS 266 000247 3114 DCA POPTEM /STICK IT IN POPTEM 267 000250 5514 JMP I POPTEM /EXIT 268 269 270 /ROUTINES TO SET PASS FLAG AND APPROPRIATE POINTERS 271 /LENGTH: 13 REGISTERS 272 273 000251 7200 PASS1, CLA /SET PASS FLAG TO ZERO 274 000252 3134 DCA PF 275 000253 1115 TAD IAM1 /INITIALIZE SYMBOL TABLE POINTER 276 000254 3135 DCA SPNT 277 000255 5266 JMP INITAL /GO INITIALIZE FLAGS,STORAGE 278 000256 7001 PASS2, IAC /SET PASS FLAG TO ONE 279 000257 3134 DCA PF 280 000260 3150 DCA CKSM /CLEAR THE CHECKSUM 281 000261 4451 JMS I LDTI /PUNCH LEADER-TRAILER 282 000262 5266 JMP INITAL /INITALIZE FLAGS AND STORAGE 283 000263 7040 PASS3, CMA /SET PASS FLAG TO -1 284 000264 3134 DCA PF 285 000265 4451 JMS I LDTI /PUNCH LEADER/TRAILER 286 287 288 289 290 291 292 /PAGE 8 293 /INITIAL ROUTINE 294 /ROUTINE TO INITIALIZE FLAGS, BUFFERS, AND STORAGE 295 /LENGTH: 15 REGISTERS 296 297 000266 3156 INITAL, DCA SWITCH /SET END OF TAPE SWITCH 298 000267 1131 TAD TBUF /SET PASS3 BUFFER 299 000270 3013 DCA AUTOC 300 000271 1127 TAD P1BGN /SET PUSHJ,POPJ BUFFER 301 000272 3160 DCA PSHPN1 302 000273 7040 CMA /SET HIGH SPEED READER BUFFER 303 000274 3157 DCA RCNT 304 000275 1065 TAD C200 /SET ORIGIN TO 200 305 000276 4445 PUSHJ /SET 306 000277 2003 STAR+3 /AND PUNCH IF PASS 2 307 000300 1052 TAD LOPUNI /TYPE ON PASS 3 308 000301 3022 DCA DDD 309 000302 3153 DCA FLAG /COMMENT SWITCH 310 000303 4445 PUSHJ /SET RADIX TO OCTAL 311 000304 0172 OCTALP 312 313 314 315 316 317 /PAGE 9 318 /MAIN ROUTINE 319 /MAIN CALLS CSYM TO ASSEMBLE A LINE OF CODE 320 /AND DECIDES IF ANY PUNCHING OR PRINTING IS TO BE DONE 321 /AND WHETHER THE AACT SHOULD BE INCREMENTED 322 /LENGTH: 27 REGISTERS 323 324 000305 3151 MAIN, DCA INSF /CLEAR INSTRUCTION FLAG 325 000306 3143 DCA ADDR /CLEAR 12-BIT ADDRESS WORD 326 000307 3140 DCA BINW /CLEAR BINARY WORD 327 000310 3141 DCA OCWD /CLEAR OCTAL WORD 328 000311 3144 DCA SYMVAL /CLEAR SYMBOL VALUE 329 000312 3152 DCA ZFLG /CLEAR Z-BIT FLAG 330 000313 3137 DCA INFO /CLEAR INFORMATION FLAG 331 000314 3154 DCA SIGN /RESET SIGN TO "IOR" 332 000315 4445 PUSHJ /RECURSIVE CALL TO "CSYM" 333 000316 0340 CSYM /ADDRESS FOR PUSHJ HANDLER 334 000317 1134 TAD PF /WHICH PASS? 335 000320 7450 SNA /DON'T PUNCH ON PASS1 OR PASS3 336 000321 5332 JMP MOUT /PASS1, JUST RESET POINTERS 337 000322 7710 SPA CLA /PASS 3? 338 000323 5737 JMP I POUTI /YES: ASSEMBLY LISTING 339 000324 1137 TAD INFO /NO,PASS 2, ANYTHING TO PUNCH? 340 000325 7650 SNA CLA 341 000326 5332 JMP MOUT /NO, RESET FLAGS 342 000327 7100 CLL /CLEAR LINK FOR BINP ROUTINE 343 000330 1140 TAD BINW /GET ASSEMBLED BINARY WORD 344 000331 4427 JMS I PUNI /PUNCH IT 345 000332 1137 MOUT, TAD INFO /WAS THERE VALID INFORMATION ON THIS LINE? 346 000333 7640 SZA CLA 347 000334 2142 ISZ AACT /YES,INCREMENT CURRENT LOCATION COUNTER 348 000335 7000 NOP /PREPARE FOR ASSEMBLING INTO 7777 349 000336 5305 JMP MAIN /GO BACK TO MAIN LOOP 350 000337 1655 POUTI, POUT /ADDRESS OF PASS 3 HANDLER 351 352 353 354 355 356 357 /PAGE 10 358 /MAIN CHARACTER PROCESSOR 359 /GATHERS SYMBOLS ON A LINE-BY-LINE BASIS 360 /SYMBOLS MUST BEGIN WITH A LETTER 361 /LENGTH: 17 REGISTERS 362 363 000340 3145 CSYM, DCA SYM1 /CLEAR SYMBOL STORAGE WORDS 364 000341 3146 DCA SYM2 365 000342 3147 DCA SYM3 366 000343 4420 JMS I AAA /GET A LEGAL CHARACTER 367 000344 4424 JMS I NCHEKI /WHAT KIND OF CHARACTER IS IT? 368 000345 5432 JMP I NUMBI /NUMBER - GO PROCESS 369 000346 2137 ISZ INFO /LETTER, INDICATE VALID INFORMATION 370 000347 1073 TAD M2 /GET UP COUNTERS - 2 CHARS PER WORD 371 000350 3111 DCA TEM1 372 000351 1077 TAD M4 /AND 3 WORDS PER SYMBOL 373 000352 3112 DCA TEM2 374 000353 5760 JMP I GETSP /GO PACK IT 375 376 000354 4420 NXCH, JMS I AAA /GET A LEGAL CHARACTER 377 000355 4424 JMS I NCHEKI /WHAT TYPE OF CHARACTER IS IT? 378 000356 5760 JMP I GETSP /NUMBER LEGAL NOW 379 000357 5760 JMP I GETSP /LETTER- GO PACK IT 380 000360 0400 GETSP, GETS 381 382 383 /PAL PUNCH AND TYPE ROUTINE 384 /LENGTH: 6 REGISTERS 385 386 000361 0000 LOPUN, 0 387 000362 6041 TSF 388 000363 5362 JMP .-1 389 000364 6046 TLS 390 000365 7200 CLA /EXIT WITH CLEARED AC 391 000366 5761 JMP I LOPUN 392 393 /THE PAUSE PSEUDO-OP 394 /LENGTH: 5 REGISTERS 395 000367 7602 STOP, HLT CLA /HALT 396 000370 3156 DCA SWITCH /RESET END-OF-TAPE SWITCH 397 000371 7040 CMA /EMPTY READER 398 000372 3157 DCA RCNT /BUFFER 399 000373 5446 POPJ /EXIT 400 401 L02, /END OF PAGE 402 403 404 405 406 407 408 /PAGE 11 409 /ROUTINE TO PACK SIX CHARACTERS IN SYM1, SYM2, SYM3 410 /LENGTH: 25 REGISTERS 411 *400 412 413 000400 2111 GETS, ISZ TEM1 /SHOULD CHARACTER BE ROTATED? 414 000401 5213 JMP ROTE /YES 415 000402 1073 TAD M2 /RESET 416 000403 3111 DCA TEM1 /ROTATION COUNTER 417 000404 1227 PUT, TAD PNTR /WHICH WORD IS THIS? 418 000405 1112 TAD TEM2 /ADDRESS IS FORMED FROM CNTR2 AND A 419 000406 3113 DCA TEM3 /POINTER, TO GET RELEVANT SYMBOL WORD 420 000407 1136 TAD CHAR /GET CHARACTER 421 000410 1513 TAD I TEM3 /ADD IN PREVIOUS CHARACTER 422 000411 3513 DCA I TEM3 /STORE IT 423 000412 5630 JMP I NXCHP /GO GET NEXT CHARACTER 424 000413 2112 ROTE, ISZ TEM2 /THE FOURTH? 425 000414 5221 JMP .+5 /NO: ROTATE IT 426 000415 3111 DCA TEM1 /YES: ARRANGE COUNTERS 427 000416 7040 CMA /SO THAT ALL OTHERS ARE 428 000417 3112 DCA TEM2 /IGNORED 429 000420 5630 JMP I NXCHP /KEEP ACCEPTING CHARS. 430 000421 1136 TAD CHAR 431 000422 7106 CLL RTL /SIX BITS LEFT 432 000423 7006 RTL 433 000424 7006 RTL 434 000425 3136 DCA CHAR /PUT IT BACK IN CHAR 435 000426 5204 JMP PUT /GOT STORE CHARACTER 436 000427 0150 PNTR, SYM3+1 /WORD POINTER 437 000430 0354 NXCHP, NXCH /NEXT CHARACTER ROUTINE 438 439 440 441 442 443 /PAGE 12 444 /PAL SPACE HANDLER 445 /WHEN CALLED, THE SYMBOL TYPE IS IN TYPE 446 /AND THE SIGN ASSOCIATED WITH THE SYMBOL IS IN SIGN 447 /VALUE OF SYMBOL IS IN SYMVAL. 448 /MEMORY REFERENCE INSTRUCTIONS ARE IORED INTO BINW 449 /IF CALLED WITH A + OR -, THE ADDRESS IS ADDED OR SUBTRACTED FROM ADDR 450 /LENGTH: 28 REGISTERS 451 452 453 000431 1137 SPAC, TAD INFO /ANYTHING TO PROCESS? 454 000432 7650 SNA CLA 455 000433 5446 POPJ /NO: EXIT 456 000434 1155 TAD TYPE /YES: GET SYMBOL TYPE 457 000435 7650 SNA CLA /IS IT ZERO? 458 000436 5257 JMP INST /YES, INSTRUCTION 459 000437 1154 CMBN, TAD SIGN /GET SIGN 460 000440 7450 SNA /IS IT ZERO? 461 000441 5253 JMP IORC /COMBINE SYMVAL AND ADDR WITH AN IOR 462 000442 7710 SPA CLA /WAS SIGN +? 463 000443 5250 JMP SUBC /NO, SUBTRACT 464 000444 1144 ADDC, TAD SYMVAL /ADD ROUTINE - ADD SYMVAL 465 000445 1143 TAD ADDR /AND ADDR 466 000446 3143 DCA ADDR /AND PUT RESULTS BACK IN ADDR 467 000447 5446 POPJ /RECURSIVE EXIT 468 000450 1144 SUBC, TAD SYMVAL /SUBTRACT ROUTINE - NEGATE 469 000451 7041 CMA IAC /SYMVAL 470 000452 5245 JMP ADDC+1 /JUMP INTO ADD ROUTINE 471 000453 1143 IORC, TAD ADDR /IOR ADDR AND SYMVAL 472 000454 4456 JMS I IORIN /GO TO IOR SUBROUTINE 473 000455 3143 DCA ADDR /LEAVE RESULTS IN ADDR 474 000456 5446 POPJ /RECURSIVE EXIT 475 000457 7240 INST, CLA CMA /SET INSTRUCTION FLAG 476 000460 3151 DCA INSF 477 000461 1140 TAD BINW /IOR BINW AND SYMVAL 478 000462 4456 JMS I IORIN 479 000463 3140 DCA BINW /LEAVE RESULTS IN BINW 480 000464 5446 POPJ /EXIT 481 482 483 484 485 /PAGE 13 486 /ROUTINE TO HANDLE CARRIAGE RETURNS 487 /LENGTH: 40 REGISTERS 488 489 000465 4445 CARR, PUSHJ /RECURSIVE CALL TO SPACE HANDLER 490 000466 0431 SPAC /ADDRESS OF SPACE HANDLER FOR PUSHJ 491 000467 1143 TAD ADDR /GET 12 BIT ADDRESS 492 000470 2151 ISZ INSF /WAS THERE AN INSTRUCTION? 493 000471 5306 JMP DPST /NO 494 000472 0116 AND MPAGE /LOOK AT PAGE BITS 495 000473 7440 SZA /PAGE ZERO REFERENCE? 496 000474 5310 JMP TPAGE /NO, CHECK ILLEGAL PAGE REFERENCE 497 000475 2152 ISZ ZFLG /PUT UP PAGE ZERO FLAG 498 000476 1143 IGO2, TAD ADDR /GET ADDRESS 499 000477 0122 AND SL7 /SAVE SEVEN BITS 500 000500 3143 DCA ADDR /SAVE IT 501 000501 1152 TAD ZFLG /IS THIS A PAGE ZERO REFERENCE? 502 000502 7650 SNA CLA 503 000503 1065 TAD C200 /NO, PICK UP A 1 IN BIT 4 504 000504 1143 TAD ADDR /GET REST OF ADDRESS 505 000505 1140 TAD BINW /GET INSTRUCTION PART 506 000506 3140 DPST, DCA BINW /THIS IS THE ASSEMBLED WORD 507 000507 5446 POPJ /RECURSIVE EXIT 508 000510 3111 TPAGE, DCA TEM1 /TEST EQUALITY OF PAGE BITS 509 000511 1134 TAD PF /BUT ONLY ON PASS2 OR PASS3 510 000512 7650 SNA CLA /SINCE REFERENCE MAY STILL BE 511 000513 5276 JMP IGO2 /UNDEFINED ON PASS1 512 000514 1142 TAD AACT /LOOK AT PAGE BITS OF AACT 513 000515 0116 AND MPAGE 514 000516 7041 CMA IAC /NEGATE IT 515 000517 1111 TAD TEM1 /COMPARE IT WITH CURRENT REFERENCE 516 000520 7650 SNA CLA /ARE THEY EQUAL? 517 000521 5276 JMP IGO2 /YES, RETURN TO PROCESSOR 518 000522 1134 TAD PF /NO, CHANGE PF TO PASS1 519 000523 4447 PUSH /TO FAKE OUT THE ERROR ROUTINE 520 000524 3134 DCA PF /SAVE PF ON PUSHDOWN, SET TO 0 521 000525 1143 TAD ADDR /PUT ADDR ON STACK, ALSO 522 000526 4447 PUSH 523 000527 1063 TAD C5 /CODE FOR IR IS 5 524 000530 4445 PUSHJ /GO TO ERROR ROUTINE 525 000531 1626 ERROR2 526 000532 4450 POP /RESTORE PF 527 000533 3134 DCA PF 528 000534 5276 JMP IGO2 /RETURN TO PROCESSOR 529 530 /HANDLER FOR Z PSEUDO-OP 531 532 000535 5446 ZPAGE, POPJ /IGNORE Z 533 534 535 536 537 /PAGE 14 538 /POP ROUTINE TO RECOVER ITEMS FROM THE 539 /PUSHDOWN LIST 540 /CHECKS FOR PUSHDOWN UNDERFLOW 541 /LENGTH: 18 REGISTERS 542 543 000536 0000 POPM, 0 544 000537 1160 TAD PSHPN1 /CHECK FOR PUSHDOWN UNDERFLOW 545 000540 7041 CMA IAC 546 000541 1127 TAD P1BGN /PSHPN1 SHOULD BE GREATER THAN 547 000542 7710 SPA CLA /P1BGN 548 000543 5353 JMP POPM2 /POINTER IS OK 549 000544 1160 TAD PSHPN1 /UNDERFLOW 550 000545 4447 PUSH /PUT POINTER ON LIST 551 000546 1121 TAD SL3 /PDL CODE IS 7 552 000547 4445 PUSHJ /CALL ERROR ROUTINE 553 000550 1626 ERROR2 554 000551 7402 HLT 555 000552 5351 JMP .-1 /DEAD END 556 000553 7040 POPM2, CMA /RESET POINTER 557 000554 1160 TAD PSHPN1 /SET IT BACK 1 558 000555 3160 DCA PSHPN1 559 000556 1560 TAD I PSHPN1 /GET ITEM FROM LIST 560 000557 5736 JMP I POPM /EXIT WITH ITEM IN AC 561 562 /ROUTINE TO FIX ENTIRE SYMBOL TABLE 563 /LENGTH: 7 REGISTERS 564 565 000560 3137 FIXT, DCA INFO /NO PUNCHING IN MAIN 566 000561 1134 TAD PF /ONLY ON PASS 1 567 000562 7640 SZA CLA 568 000563 5446 POPJ /NOT PASS1: EXIT 569 000564 1135 TAD SPNT /ADJUST POINTER 570 000565 3115 DCA IAM1 571 000566 5446 POPJ /EXIT 572 573 574 575 /ROUTINE TO HANDLE "." 576 /LENGTH: 6 REGISTERS 577 000567 4445 POINT, PUSHJ /REVISION TO TREAT . AS A TERMINATOR 578 000570 0431 SPAC / EXAMPLE - JMP. = JMP . 579 000571 1142 TAD AACT /VALUE OF . IS AACT 580 000572 3144 DCA SYMVAL 581 000573 2137 ISZ INFO /REPRESENTS VALID INFO 582 000574 7201 CLA IAC /TREAT AS SYMBOL 583 000575 3155 DCA TYPE 584 000576 5433 JMP I SPACI 585 586 L04, 587 588 589 590 591 592 /PAGE 15 593 /DOLLAR ROUTINE 594 /LENGTH: 65 REGISTERS 595 *600 596 000600 1134 DOLLAR, TAD PF /WHICH PASS IS THIS? 597 000601 7740 SZA SMA CLA /PASS 1 OR PASS3? 598 000602 5700 JMP I EPASS2 /NOPE, IT'S PASS2 599 000603 7604 CLA OSR 600 000604 7006 RTL 601 000605 7510 SPA /TEST BIT 2 602 000606 5457 JMP I NEXI /SUPPRESS SYMBOL TABLE 603 000607 7012 RTR 604 000610 7010 RAR 605 000611 7620 SNL CLA /LOOK AT BIT 11 606 000612 5215 JMP .+3 /IT IS 0; FORGET IT 607 000613 1021 TAD BBB /IT IS 1; SET TO PUNCH 608 000614 3022 DCA DDD 609 000615 1117 TAD CRLF /CR,LF 610 000616 4430 JMS I EEE 611 000617 4451 JMS I LDTI /OUTPUT LEADER-TRAILER 612 000620 1071 TAD C377 /OUTPUT A RUBOUT FOR DDT 613 000621 4422 JMS I DDD 614 000622 3372 DCA LOW /INITIALIZE SORT ROUTINE 615 000623 3373 DCA LOW+1 616 000624 3374 DCA LOW+2 617 000625 1117 ELOOP, TAD CRLF /CARRIAGE RETURN, LINE FEED 618 000626 4430 JMS I EEE 619 000627 5301 JMP SORT /GET A SYMBOL FROM SORT 620 000630 1513 ELUP2, TAD I TEM3 /GET FIRST WORD OF SYMBOL 621 000631 7510 SPA /WAS IT DEFINED? 622 000632 5257 JMP UASYM /NO, BIT0 IS 1, ERROR 623 000633 4430 JMS I EEE /YES, OUTPUT FIRST WORD 624 000634 2113 ISZ TEM3 /INCREMENT POINTER TO NEXT WORD 625 000635 1513 TAD I TEM3 /PICK IT UP 626 000636 4430 JMS I EEE /TYPE IT OUT 627 000637 2113 ISZ TEM3 /POINTER TO THIRD WORD 628 000640 1513 TAD I TEM3 /PICK IT UP 629 000641 4430 JMS I EEE /TYPE IT 630 000642 4430 JMS I EEE /TYPE TWO SPACES 631 000643 2113 ISZ TEM3 /INCREMENT POINTER TO VALUE 632 000644 1513 TAD I TEM3 /GET VALUE OF SYMBOL 633 000645 4431 JMS I OCTI /GO TO OCTAL OUTPUT ROUTINE 634 000646 5225 JMP ELOOP /RETURN FOR MORE SYMBOLS 635 000647 1177 OUT1, TAD C204 /OUTPUT AN EOT FOR DDT 636 000650 4422 JMS I DDD 637 000651 1117 TAD CRLF /TYPE A CRLF FOR DDT 638 000652 4430 JMS I EEE 639 000653 1071 TAD C377 /TYPE A RUBOUT FOR DDT 640 000654 4422 JMS I DDD 641 000655 4451 JMS I LDTI /MORE LEADER-TRAILER 642 000656 5457 JMP I NEXI /GO TO NEXT PASS 643 644 645 646 647 /PAGE 16 648 000657 7200 UASYM, CLA 649 000660 1113 TAD TEM3 /GET ADDRESS OF SYMBOL 650 000661 4447 PUSH /ON PUSHDOWN LIST 651 000662 1113 TAD TEM3 /GET CURRENT LOCATION 652 000663 1061 TAD C3 /COUNTER WHEN THE SYMBOL 653 000664 3113 DCA TEM3 /WAS LAST SEEN 654 000665 1513 TAD I TEM3 /PUT INTO AACT 655 000666 3142 DCA AACT 656 000667 7001 IAC 657 000670 4445 PUSHJ /GO TO ERROR ROUTINE 658 000671 1600 ERROR1 /CODE FOR UA IS 1 659 000672 2112 ISZ TEM2 660 000673 1512 TAD I TEM2 /RESET VALUE TO HIGHEST 661 000674 0116 AND MPAGE /ADDRESS ON PAGE 662 000675 1122 TAD SL7 /SET LOW 7 BITS TO 1 663 000676 3512 DCA I TEM2 664 000677 5225 JMP ELOOP /RETURN FOR MORE SYMBOLS 665 000700 2315 EPASS2, BINPUN /PUNCH BINARY TAPE 666 667 668 669 670 671 672 673 /PAGE 17 674 /SYMBOL SORTING ROUTINE 675 /LENGTH: 63 REGISTERS 676 677 000701 3137 SORT, DCA INFO /INDICATOR TELLS IF ANY SYMBOLS WERE SORTED 678 000702 1115 TAD IAM1 /POINTER TO BEGINNING OF SYMBOL TABLE 679 000703 3375 DCA PNT1 /PUT IT IN ADDRESS POINTER 680 000704 7040 CMA /SET HIGH SYMBOL TO 7777 7777 7777 681 000705 3367 DCA HIGH 682 000706 7040 CMA 683 000707 3370 DCA HIGH+1 684 000710 7040 CMA 685 000711 3371 DCA HIGH+2 686 000712 1375 LCHK, TAD PNT1 /HAVE WE CHECKED ALL OF SYMBOL TABLE? 687 000713 7141 CLL CMA IAC /COMPARE POINTER WITH ANOTHER POINTER 688 000714 1135 TAD SPNT /TO THE END OF THE SYMBOL TABLE 689 000715 7650 SNA CLA 690 000716 5355 JMP AOUT /ALL THROUGH 691 000717 1376 TAD LOWPNT /SET UP POINTERS FOR CYMBOL COMPARISON 692 000720 3016 DCA SORT1 /TO SSEE IF SYM IS GREATER THAN LOW 693 000721 1375 TAD PNT1 /GET ADDRESS OF CURRENT SYMBOL 694 000722 3017 DCA SORT2 695 000723 4426 JMS I SYMCMI /GO TO SYMBOL COMPARISON ROUTINE 696 000724 5351 JMP INC /SYM IS EQUAL TO LOW 697 000725 5351 JMP INC /SYM IS LESS THAN LOW 698 000726 1377 TAD HIPNT /SYM IS GREATER THAN LOW 699 000727 3017 DCA SORT2 /NOW SET UP POINTERS FOR CHECK3 ROUTINE 700 000730 1375 TAD PNT1 /TO SEE IF SYM IS LESS THAN HIGH 701 000731 3016 DCA SORT1 702 000732 4426 JMS I SYMCMI /GO TO SYMBOL COMPARISON ROUTINE 703 000733 5351 JMP INC /SYM IS EQUAL TO HIGH 704 000734 5351 JMP INC /SYM IS GREATER THAN HIGH 705 000735 2137 ISZ INFO /SYM IS LESS THAN HIGH 706 000736 1375 TAD PNT1 /GET ADDRESS OF SYMBOL 707 000737 3016 DCA SORT1 /IN AN INDEX REGISTER 708 000740 1416 TAD I SORT1 /PUT THE SYMBOL IN HIGH 709 000741 0120 AND MASK /GET RID OF THE UNDEFINED BIT 710 000742 3367 DCA HIGH 711 000743 1016 TAD SORT1 /PUT ADDRESS OF SYMBOL IN ADDR FOR DOLL 712 000744 3113 DCA TEM3 713 000745 1416 TAD I SORT1 /FINISH PUTTING SYMBOL IN HIGH 714 000746 3370 DCA HIGH+1 715 000747 1416 TAD I SORT1 716 000750 3371 DCA HIGH+2 717 718 719 720 721 /PAGE 18 722 000751 1062 INC, TAD C4 /INCREMENT POINTER 723 000752 1375 TAD PNT1 /FOR NEXT COMPARE 724 000753 3375 DCA PNT1 /PUT IT BACK IN PNT1 725 000754 5312 JMP LCHK /GO LOOK AT NEXT SYMBOL 726 000755 1367 AOUT, TAD HIGH /ALL THROUGH, NOW PUT HIGH INTO LOW 727 000756 3372 DCA LOW 728 000757 1370 TAD HIGH+1 /HIGH+1 GOES INTO LOW+1 729 000760 3373 DCA LOW+1 730 000761 1371 TAD HIGH+2 /HIGH+2 GOES INTO LOW+2 731 000762 3374 DCA LOW+2 732 000763 1137 TAD INFO /WERE ANY SWITCHES MADE IN THIS PASS? 733 000764 7650 SNA CLA 734 000765 5247 JMP OUT1 /NO: ALL DONE 735 000766 5230 JMP ELUP2 736 000767 0000 HIGH, 0 /STORAGE FOR HIGH SYMBOL 737 000770 0000 0 738 000771 0000 0 739 000772 0000 LOW, 0 /STORAGE FOR LOW SYMBOL 740 000773 0000 0 741 000774 0000 0 742 000775 0000 PNT1, 0 /STORAGE FOR ADDRESS OF CURRENT SYMBOL 743 000776 0771 LOWPNT, LOW-1 /POINTER USED WITH AUTO INDEX REGISTER 744 000777 0766 HIPNT, HIGH-1 /POINTER USED WITH AUTO INDEX REGISTER 745 746 747 748 L06, /END OF PAGE 749 750 751 752 753 754 /PAGE 19 755 *1000 756 /ROUTINE TO PROCESS SPECIAL CHARACTERS 757 /CALLED BY ROUTINE NCHEK WHEN IT DISCOVERS A SPECIAL CHARACTER 758 /SPSHUL ASSUMES THAT THE SPECIAL CHARACTER DELIMITS A SYMBOL OR OCTAL WORD 759 /A SEARCH IS MADE THROUGH THE SYMBOL TABLE FOR THE SYMBOL, IF ANY 760 /THE VALUE OF THE SYMBOL, OR OCTAL WORD, IS LEFT IN REGISTER SYMVAL 761 /THE SYMBOL TYPE IS LEFT IN REGISTER TYPE 762 /CODES FOR SYMBOL TYPES ARE AS FOLLOWS: 763 /MEMORY REF INSTRUCTIONS 0 764 /USER SYMBOLS& MICRO OPS +1 765 766 /LENGTH: 85 REGISTERS 767 768 769 770 771 /PAGE 20 772 001000 7200 SPSHUL, CLA /JUNK IN AC WHEN SPSHUL IS CALLED 773 001001 1145 TAD SYM1 /SYMBOL TO HANDLE? 774 001002 7650 SNA CLA 775 001003 5316 JMP OCTALW /NO, GO PROCESS OCTAL WORD 776 001004 4724 JMS I SMGETI /SEARCH FOR SYMBOL 777 001005 5277 JMP PUTIN /NOT THERE, PUT IT IN THE SYMBOL TABLE 778 001006 7100 CLL 779 001007 1323 TAD OPCDP /IS IT A PSEUDO-CODE? 780 001010 7420 SNL 781 001011 5270 JMP PSEUDA /YES: PROCESS IT 782 001012 1322 TAD MICRP /NO: IS IT A MICRO INSTR.? 783 001013 7620 SNL CLA 784 001014 7001 IAC /YES: CODE=+1 785 001015 3155 PUSHSP, DCA TYPE /STORE CODE IN REGISTER TYPE 786 001016 1136 TAD CHAR /GET THE SPECIAL CHARACTER 787 001017 1105 TAD M211 /IS IT A TAB? 788 001020 7450 SNA 789 001021 5433 JMP I SPACI /YES; TREAT AS A SPACE 790 001022 1077 TAD M4 /IS IT A CARRIAGE RETURN? 791 001023 7450 SNA 792 001024 5434 JMP I CARRI /YES, PROCESS CARRIAGE RETURN 793 001025 1076 TAD M23 /IS IT A SPACE (CODE 240)? 794 001026 7450 SNA 795 001027 5433 JMP I SPACI /YES: PROCESS SPACE 796 001030 1077 TAD M4 /IS IT A DOLLAR SIGN (CODE 244)? 797 001031 7450 SNA 798 001032 5435 JMP I DOLLI /YES, PROCESS $ 799 001033 1104 TAD M6 /IS IT A STAR (CODE 252)? 800 001034 7450 SNA 801 001035 5436 JMP I STARI /YES, PROCESS STAR 802 001036 1103 TAD M1 /IS IT PLUS(CODE 253)? 803 001037 7450 SNA 804 001040 5437 JMP I ADDI /YES, PROCESS PLUS 805 001041 1103 TAD M1 /IS IT A COMMA (CODE 254)? 806 001042 7450 SNA 807 001043 5440 JMP I SYMSTI /YES, PROCESS COMMA 808 001044 1103 TAD M1 /IS IT A MINUS (CODE 255)? 809 001045 7450 SNA 810 001046 5441 JMP I SUBI /YES, PROCESS MINUS 811 001047 1103 TAD M1 /IS IT A PERIOD (CODE 256)? 812 001050 7450 SNA 813 001051 5442 JMP I POINTI /YES, PROCESS PERIOD 814 001052 1100 TAD M17 /IS IT AN = (CODE 275)? 815 001053 7450 SNA 816 001054 5443 JMP I EQUALI /YES, PROCESS EQUAL SIGN 817 001055 1060 TAD C2 /IS IT A SEMI-COLON? 818 001056 7650 SNA CLA 819 001057 5434 JMP I CARRI /YES: TREAT AS CR 820 821 822 823 824 825 826 /PAGE 21 827 001060 1136 ERRORN, TAD CHAR /NO, ILLEGAL CHARACTER 828 001061 4447 PUSH /SAVE IT 829 001062 1062 TAD C4 /CODE FOR IC IS 4 830 001063 4445 PUSHJ /CALL ERROR 831 001064 1626 ERROR2 832 001065 4420 JMS I AAA /GET ANOTHER 833 001066 5667 JMP I .+1 /RETURN TO NCHEK 834 001067 2032 NCHEK+1 835 001070 7200 PSEUDA, CLA /CLEAR INFO FOR ALL PSEUDO-OPS 836 001071 3137 DCA INFO 837 001072 1144 TAD SYMVAL /GET ADDRESS OF ROUTINE 838 001073 3275 DCA .+2 839 001074 4445 PUSHJ /CALL ROUTINE 840 001075 0000 0 841 001076 5215 JMP PUSHSP /HANDLE TERMINATOR 842 001077 1103 PUTIN, TAD M1 /STORE SYMBOL WITH AUTO-INDEXC 843 001100 3010 DCA AUTOA /ADDRESS-1 GOES INTO AUTOA 844 001101 1145 TAD SYM1 /FIRST WORD OF SYMBOL 845 001102 1072 TAD C4TH /PUT IN UNDEFINED BIT 846 001103 3410 DCA I AUTOA 847 001104 1146 TAD SYM2 /SECOND WORD OF SYMBOL 848 001105 3410 DCA I AUTOA 849 001106 1147 TAD SYM3 /THIRD WORD OF SYMBOL 850 001107 3410 DCA I AUTOA 851 001110 1142 TAD AACT /VALUE OF SYMBOL 852 001111 3410 DCA I AUTOA 853 001112 1062 TAD C4 /MOVE S.T. POINTER BACK 4 REGISTERS 854 001113 1135 TAD SPNT 855 001114 3135 DCA SPNT 856 001115 5214 JMP PUSHSP-1 857 001116 1141 OCTALW, TAD OCWD /GET OCTAL WORD 858 001117 3144 DCA SYMVAL /SAVE IT AS THE SYMBOL VALUE 859 001120 3141 DCA OCWD 860 001121 5214 JMP PUSHSP-1 /PROCESS AS USER SYMBOL 861 862 001122 7710 MICRP, OPCD-MICR 863 001123 5412 OPCDP, -OPCD 864 001124 2060 SMGETI, SYMGET 865 866 867 868 869 /PAGE 22 870 /SYMBOL COMPARISON ROUTINE 871 /COMPARES SYMBOLS: ADDRESSES IN INDEX REGISTERS 872 /SORT1 AND SORT2. 873 /THE ROUTINE COMPARES A(I) WITH B(I) 874 /EXITS TO CALLING ADDRESS+1 IF A=B 875 /EXITS TO CALLING ADDRESS+2 IF A>B 876 /EXITS TO CALLING ADDRESS+3 IF ASYMBOL2 909 001162 5725 C5OUT, JMP I SYMCOM /EXIT IF SYMBOL1=SYMBOL1 910 911 912 913 914 915 /PAGE 23 916 /PUSHJ ROUTINE TO RECURSIVELY CALL SUBROUTINES 917 /CHECKS FOR PUSHDOWN OVERFLOW VIA THE 918 /PUSH ROUTINE 919 /LENGTH: 9 REGISTERS 920 921 001163 0000 PUSHJM, 0 922 001164 3107 DCA ITEM /CARRY C(AC) TO SUBROUTINE 923 001165 1763 TAD I PUSHJM /ADDRESS OF WHERE TO JUMP 924 001166 3114 DCA POPTEM /SAVE IT 925 001167 1363 TAD PUSHJM /GET RETURN 926 001170 7001 IAC 927 001171 4447 PUSH /PUSH DOWN 928 001172 1107 TAD ITEM /RESTORE C(AC) 929 001173 5514 JMP I POPTEM /CALL SUBROUTINE 930 931 /SET INDIRECT BIT 932 /LENGTH: 4 REGISTERS 933 001174 1133 INDI, TAD C400 /"I"= 0400 934 001175 3144 DCA SYMVAL 935 001176 2137 ISZ INFO /I= VALID INFORMATION 936 001177 5446 POPJ /RETURN 937 938 939 L10, 940 941 942 943 944 /PAGE 24 945 /ALPHABETIC OUTPUT ROUTINE 946 /CALLED BY JMS I EEE, WITH PACKED SIXBIT WORD IN AC 947 /A CALL WITH 0 IN THE AC, WILL GENERATE TWO SPACES 948 /LENGTH: 35 REGISTERS 949 *1200 950 001200 0000 ALFO, 0 951 001201 3241 DCA ALFTEM /SAVE THE PACKED CHARACTER 952 001202 1073 TAD M2 /PUT -2 IN THE COUNTER - 2 WORD TO 953 001203 3242 DCA ALFTEM+1 /BE OUTPUTTED 954 001204 1241 TAD ALFTEM /GET FIRST CHARACTER 955 001205 7012 RTR /ROTATE INTO POSITION 956 001206 7012 RTR 957 001207 7012 RTR 958 001210 0123 NXCL, AND SL6 /MASK OFF EXTRANEOUS BITS 959 001211 7450 SNA /IS THE CHARACTER A ZERO? 960 001212 5224 JMP ALFL-1 /YES, OUTPUT A SPACE 961 001213 1236 TAD M43 /CHECK FOR LINE FEED -43 962 001214 7450 SNA 963 001215 5233 JMP FLF /GO TO SPECIAL LINE FEED SECTION 964 001216 1073 TAD M2 /CHECK FOR CARRIAGE RETURN -45 965 001217 7450 SNA 966 001220 5234 JMP FCR /GO TO SPECIAL CR SECTION 967 001221 1063 TAD C5 /CALCULATE CHAR -40 968 001222 7510 SPA /IF RESULT IS .GE. 0, ADD 240 969 001223 1237 TAD C100 /OTHERWISE, ADD 340 970 001224 1240 TAD C240 971 001225 4422 ALFL, JMS I DDD /GO TO TYPEOUT ROUTINE 972 001226 1241 NEXL, TAD ALFTEM /PICK UP PACKED WORD 973 001227 2242 ISZ ALFTEM+1 /ALL DONE? 974 001230 5210 JMP NXCL /NO, GO PROCESS IT 975 001231 7200 CLA /YES, EXIT WITH CLEARED AC 976 001232 5600 JMP I ALFO /EXIT 977 978 001233 1074 FLF, TAD M3 /GET LF CODE(212) 979 001234 1070 FCR, TAD C215 /GET THE CODE FOR CARRIAGE RETURN 980 001235 5225 JMP ALFL /GO OUTPUT IT 981 001236 7735 M43, -0043 982 001237 0100 C100, 0100 983 001240 0240 C240, 0240 984 001241 0000 ALFTEM, 0 985 001242 0000 0 986 987 988 989 990 /PAGE 25 991 /OCTAL OUTPUT ROUTINE 992 /CALLED WITH JMS I OCTI, OCTAL NUMBER IN THE ACCUMULATOR 993 /LENGTH: 17 REGISTERS 994 995 001243 0000 OCTO, 0 996 001244 3241 DCA ALFTEM /SAVE WORD 997 001245 1077 TAD M4 /COUNTER FOR 4 CHARACTERS 998 001246 3242 DCA ALFTEM+1 999 001247 1241 NEXT2, TAD ALFTEM /PICK UP OUTPUT WORD 1000 001250 7004 RAL /ROTATE THREE BITS LEFT 1001 001251 7006 RTL 1002 001252 3241 DCA ALFTEM /SAVE RESULTS 1003 001253 1241 TAD ALFTEM /PICK IT UP AGAIN 1004 001254 7004 RAL /GET LAST BIT FROM LINK 1005 001255 0121 AND SL3 /TRIM TO 3 BITS 1006 001256 1263 TAD C260 /CONVERT TO ASCII 1007 001257 4422 JMS I DDD /OUTPUT IT 1008 001260 2242 ISZ ALFTEM+1 /DONE 4? 1009 001261 5247 JMP NEXT2 /NO 1010 001262 5643 JMP I OCTO /YES, EXIT 1011 001263 0260 C260, 0260 1012 1013 1014 /ROUTINE TO GENERATE LEADER-TRAILER 1015 /LENGTH: 9 REGISTERS 1016 001264 0000 LDTR, 0 1017 001265 1274 TAD KONS /SET COUNTER FOR 1018 001266 3112 DCA TEM2 /# OF CODES 1019 001267 1065 LD1, TAD C200 1020 001270 4421 JMS I BBB /PUNCH ONE FRAME OF LEADER TRAILER 1021 001271 2112 ISZ TEM2 /DONE? 1022 001272 5267 JMP LD1 /NO: CONTINUE 1023 001273 5664 JMP I LDTR /YES: EXIT ROUTINE 1024 001274 7740 KONS, -40 / L/T CONSTANT 1025 1026 1027 1028 1029 1030 /PAGE 26 1031 /BINARY PUNCH ROUTINE 1032 /LINK = 1 IF ORIGIN SETTING 1033 /CALLED WITH JMS I PUNI, BINARY WORD IN ACCUMULATOR 1034 /LENGTH: 22 REGISTERS 1035 1036 001275 0000 BINP, 0 1037 001276 3111 DCA TEM1 /SAVE WORD TO BE PUNCHED 1038 001277 1111 TAD TEM1 /LINK IS ONE IF ORIGIN 1039 001300 7012 RTR /PUT CHARACTER INTO POSITION 1040 001301 7012 RTR 1041 001302 7012 RTR 1042 001303 0122 AND SL7 /SAVE SEVEN BITS 1043 001304 3113 DCA TEM3 /SAVE IT 1044 001305 1113 TAD TEM3 /PICK IT UP 1045 001306 4421 JMS I BBB /AND GO TO PUNCH ROUTINE 1046 001307 1150 TAD CKSM /UPDATE CHECKSUM 1047 001310 1113 TAD TEM3 1048 001311 3150 DCA CKSM 1049 001312 1111 TAD TEM1 /PICK UP ORIGINAL CHARACTER AGAIN 1050 001313 0123 AND SL6 /SAVE LOW ORDER SIX BITS 1051 001314 3113 DCA TEM3 /SAVE IT FOR CHECKSUM 1052 001315 1113 TAD TEM3 /PICK IT UP 1053 001316 4421 JMS I BBB /PUNCH IT 1054 001317 1150 TAD CKSM /UPDATE CHECKSUM 1055 001320 1113 TAD TEM3 1056 001321 3150 DCA CKSM 1057 001322 5675 JMP I BINP /EXIT 1058 1059 1060 1061 1062 1063 /PAGE 27 1064 /ROUTINE TO PLACE ITEMS ON PUSHDOWN LIST 1065 /CHECKS FOR PUSHDOWN OVERFLOW 1066 /LENGTH: 17 REGISTERS 1067 1068 001323 0000 PUSHIN, 0 1069 001324 3560 DCA I PSHPN1 /SAVE AC ON PUSHDOWN LIST 1070 001325 2160 ISZ PSHPN1 /INCREMENT PUSHDOWN POINTER 1071 001326 1130 TAD P1END /CHECK FOR PUSHDOWN OVERFLOW 1072 001327 1160 TAD PSHPN1 /HAS POINTER PASSED P1END? 1073 001330 7710 SPA CLA 1074 001331 5723 JMP I PUSHIN /NO, POINTER IS OK, EXIT 1075 001332 1160 TAD PSHPN1 /GET ADDRESS OF PUSHDOWN LIST FOR ERROR 1076 001333 3560 DCA I PSHPN1 /SAVE IT ON LIST FOR ERROR PICKUP 1077 001334 2160 ISZ PSHPN1 /INCREMENT PUSHDOWN POINTER 1078 001335 1340 TAD PERR1 /GET RETURN ADDRESS FOR ERROR CALL 1079 001336 3560 DCA I PSHPN1 /THUS SIMULATING A PUSHJ 1080 001337 5743 JMP I PERR3 /HOP INTO THE ERROR ROUTINE 1081 001340 1341 PERR1, .+1 /ERROR RETURN ADDRESS 1082 001341 7402 HLT /HALT ON ERROR RETURN 1083 001342 5341 JMP .-1 /NO RECOVERY 1084 001343 1573 PERR3, MCRIP+1 /ERROR ADDRESS FOR SIMULATED PUSHJ 1085 1086 /ROUTINE TO ASSEMBLE OCTAL AND DECIMAL 1087 /NUMBERS : SWITCH IS MADE BY OCTAL AND DECIMA 1088 /PSEUDO OPS 1089 /LENGTH: 22 REGISTERS 1090 1091 001344 2137 NMBR, ISZ INFO /VALID INFORMATION 1092 001345 1141 NEXNUM, TAD OCWD /GET CURRENT WORD 1093 001346 7104 CLL RAL 1094 001347 7104 CLL RAL 1095 001350 7000 NSWTCH, NOP /SWITCH FOR OCTAL;DECIMA 1096 001351 1141 TAD OCWD 1097 001352 7104 CLL RAL 1098 001353 3141 DCA OCWD /STORE OCWD*8 OR OCWD*10 1099 001354 1136 TAD CHAR 1100 001355 1370 TAD M60 /TURN INTO DIGIT 1101 001356 1141 TAD OCWD /ADD TO CURRENT 1102 001357 3141 DCA OCWD 1103 001360 4420 JMS I AAA /FETCH A CHARACTER 1104 001361 4424 JMS I NCHEKI /CHECK IT 1105 001362 5345 JMP NEXNUM /ALL VALID NUMBERS 1106 001363 5771 JMP I RONGI /LETTER IN WORD BEGUN WITH NUMBER 1107 001364 7240 CLA CMA 1108 001365 1424 TAD I NCHEKI /DECREASE RETURN ADDRESS IN NCHEK 1109 001366 3424 DCA I NCHEKI 1110 001367 5363 JMP .-4 1111 001370 7720 M60, -60 1112 001371 1060 RONGI, ERRORN /CALL ERROR-COMBINATION NOT LEGAL 1113 L12, 1114 1115 1116 1117 /PAGE 28 1118 /ASR 33 I/O ROUTINES 1119 /CALLED BY JMS I AAA 1120 /EXITS WITH LEGAL CHARACTER IN CHAR 1121 /LENGTH: 14 REGISTERS 1122 *1400 1123 1124 001400 0000 LOREAD, 0 1125 001401 6031 KSF 1126 001402 5201 JMP .-1 1127 001403 6036 KRB /READ THE CHARACTER 1128 001404 7450 SNA /BLANK TAPE? 1129 001405 5201 JMP LOREAD+1 /IGNORE 1130 001406 1102 TAD M200 /LEADER? 1131 001407 7450 SNA 1132 001410 5201 JMP LOREAD+1 /IGNORE 1133 001411 1065 TAD C200 1134 001412 3136 DCA CHAR /SAVE CHAR 1135 001413 4425 JMS I CHEKI /IS IT LEGAL? 1136 001414 5201 JMP LOREAD+1 /NO, TRY AGAIN 1137 001415 5600 JMP I LOREAD 1138 1139 /ROUTINE TO SET SIGN FOR 1140 /ADD OR SUBTRACT OR IOR 1141 /LENGTH: 8 REGISTERS 1142 001416 1073 SUB, TAD M2 /SIGN FOR SUBTRACT IS -1 1143 001417 7001 ADD, IAC /SIGN FOR ADD IS +1 1144 001420 3112 SPACE, DCA TEM2 /SIGN FOR IOR IS 0 1145 001421 4445 PUSHJ /GO PROCESS THE INFORMATION 1146 001422 0431 SPAC /ADDRESS 1147 001423 1112 TAD TEM2 1148 001424 3154 DCA SIGN /SET SIGN 1149 001425 5444 JMP I FFF /GO BACK TO CSYM 1150 1151 1152 1153 1154 /PAGE 29 1155 /PAL 750 READ ROUTINE 1156 /CALLED BY JMS I AAA 1157 /EXITS WITH LEGAL CHARACTER IN CHAR 1158 /LENGTH: 48 REGISTERS 1159 1160 001426 0000 HIREAD, 0 1161 001427 2157 ISZ RCNT /IS BUFFER EMPTY? 1162 001430 5275 JMP GETCHR /NO, FETCH A CHARACTER 1163 001431 2156 ISZ SWITCH /DID TAPE END? 1164 001432 7410 SKP /NO 1165 001433 5302 JMP ENDBF /YES, GO HALT 1166 001434 3156 DCA SWITCH /SET SWITCH AGAIN 1167 001435 1125 TAD RBGN /POINTER TO BEGINNING OF BUFFER 1168 001436 3010 DCA AUTOA /IN AN AUTO-INDEX REGISTER 1169 001437 1126 TAD RKON /CONSTANT FOR SIZE OF BUFFER 1170 001440 3157 DCA RCNT /IN READ COUNTER 1171 001441 6014 READIN, RFC /FETCH A CHARACTER 1172 001442 3113 DCA TEM3 /START COUNTING 1173 001443 2113 ISZ TEM3 /OVERFLOW? 1174 001444 4001 JMS WAIT 1175 001445 5263 JMP FULL1 /YES, SET SWITCH, TAPE ENDED 1176 001446 6011 RSF /CHARACTER READY YET? 1177 001447 5243 JMP .-4 /NO, TRY AGAIN 1178 001450 6012 RRB 1179 001451 7450 SNA /IS IT BLANK TAPE? 1180 001452 5241 JMP READIN /IGNORE BLANK TAPE 1181 001453 1102 TAD M200 /IS IT LEADER-TRAILER? 1182 001454 7450 SNA 1183 001455 5241 JMP READIN /IGNORE LEADER-TRAILER 1184 001456 1065 TAD C200 /RESTORE ORIGINAL CODE 1185 001457 3410 DCA I AUTOA /SAVE IT 1186 001460 2157 ISZ RCNT /BUFFER FULL YET? 1187 001461 5241 JMP READIN /NO, GET SOME MORE 1188 001462 5267 JMP FULL /FULL 1189 001463 7240 FULL1, CLA CMA /SET TAPE SWITCH TO 7777 1190 001464 3156 DCA SWITCH 1191 001465 1157 TAD RCNT /GET ALTERED COUNT FOR BUFFER 1192 001466 7041 CMA IAC 1193 001467 1126 FULL, TAD RKON 1194 001470 7450 SNA /WAS BUFFER COMPLETELY EMPTY? 1195 001471 5302 JMP ENDBF /YES 1196 001472 3157 DCA RCNT /NO, COUNT OF BUFFER SIZE 1197 001473 1125 TAD RBGN /RESET BUFFER POINTER 1198 001474 3011 DCA AUTOB 1199 001475 1411 GETCHR, TAD I AUTOB /GET A CHARACTER FROM BUFFER 1200 001476 3136 DCA CHAR 1201 001477 4425 JMS I CHEKI /IS IT LEGAL? 1202 001500 5227 JMP HIREAD+1 /NO 1203 001501 5626 JMP I HIREAD /YES 1204 001502 7240 ENDBF, CLA CMA /SET COUNT TO EMPTY 1205 001503 3157 DCA RCNT 1206 001504 7402 HLT /HALT 1207 001505 5227 JMP HIREAD+1 /TRY AGAIN 1208 1209 1210 1211 /PAGE 30 1212 /CHECK FOR SPECIAL CHARACTERS IN READ ROUTINES 1213 /EXIT TO CALLING ADDRESS+1 IF CHAR IS TO BE IGNORED 1214 /EXIT TO CALLING ADDRESS+2 IF CHAR IS LEGAL 1215 /THE FOLLOWING CHARACTERS ARE IGNORED: 1216 / 0 BLANK TAPE 1217 /200 LEADER-TRAILER 1218 /212 LINE FEED 1219 /214 FORM FEED 1220 /377 RUBOUT 1221 1222 /LENGTH: 40 REGISTERS 1223 1224 001506 0000 CHEK, 0 1225 001507 1136 TAD CHAR 1226 001510 0122 AND SL7 /SET CHANNEL 8 1227 001511 1065 TAD C200 /IN CASE OF PARITY 1228 001512 3136 DCA CHAR /INPUT 1229 001513 1136 TAD CHAR 1230 001514 1355 TAD M377 /IGNORE RUBOUT 1231 001515 7650 SNA CLA 1232 001516 5706 JMP I CHEK 1233 001517 1134 TAD PF /PASS 3? 1234 001520 7700 SMA CLA 1235 001521 5324 JMP .+3 1236 001522 1136 TAD CHAR /GET CHARACTER 1237 001523 3413 DCA I AUTOC /STORE IN PASS3 BUFFER 1238 001524 1136 TAD CHAR /CHECK FOR A COMMENT 1239 001525 1101 TAD M215 /CARRIAGE RETURN? 1240 001526 7650 SNA CLA 1241 001527 5351 JMP ECMN /YES, END OF COMMENT 1242 001530 1153 TAD FLAG /NO, ARE WE PRESENTLY IN A COMENT? 1243 001531 7640 SZA CLA 1244 001532 5706 JMP I CHEK /YES, IGNORE THE CHARACTER 1245 001533 1136 TAD CHAR 1246 001534 1106 TAD M212 /LINE FEED? 1247 001535 7450 SNA 1248 001536 5706 JMP I CHEK /YES, IGNORE LINE FEED 1249 001537 1073 TAD M2 /FORM FEED? 1250 001540 7450 SNA 1251 001541 5706 JMP I CHEK /YES, IGNORE FORM FEED 1252 1253 1254 1255 1256 1257 1258 /PAGE 31 1259 1260 001542 1354 TAD M43A /IS IT A SLASH?? 1261 001543 7650 SNA CLA 1262 001544 5347 JMP COMMNT /YES: START OF COMMENT 1263 001545 2306 ISZ CHEK /NO, LEGAL CHARACTER 1264 001546 5706 JMP I CHEK /EXIT 1265 1266 001547 2153 COMMNT, ISZ FLAG /BEGINNING OF COMMENT 1267 001550 5706 JMP I CHEK /SET FLAG TO ZERO, EXIT 1268 001551 3153 ECMN, DCA FLAG /END OF COMMENT 1269 001552 2306 ISZ CHEK /GET CHARACTER 1270 001553 5706 JMP I CHEK /EXIT 1271 1272 001554 7735 M43A, -0043 1273 001555 7401 M377, -0377 1274 1275 /THE EXPUNGE PSEUDO-OP 1276 /LENGTH: 13 REGISTERS 1277 1278 001556 3137 EXPN, DCA INFO /NO PUNCHING 1279 001557 1134 TAD PF /WHICH PASS IS THIS? 1280 001560 7640 SZA CLA /IGNORE IT ON PASS 2 OR 3 1281 001561 5446 POPJ /EXIT 1282 001562 7040 CMA /MOVE SYMBOL TABLE BACK 1283 001563 1371 TAD MCRI /TO PSEUDO-OPS 1284 001564 3115 DCA IAM1 1285 001565 1115 TAD IAM1 1286 001566 3135 DCA SPNT 1287 001567 3772 DCA I MCRIP 1288 001570 5446 POPJ /EXIT 1289 1290 001571 2366 MCRI, OPCD 1291 001572 1122 MCRIP, MICRP 1292 001573 1064 TAD C6 /SET TABLE FOR ENTRY 1293 001574 2160 ISZ PSHPN1 /RESET POINTER FOR RETURN TO ERROR HALT 1294 001575 5776 JMP I .+1 1295 001576 1626 ERROR2 1296 1297 L14, 1298 1299 1300 1301 1302 *1600 1303 /PAGE 32 1304 /ERROR ROUTINES FOR PAL III 1305 /LENGTH: 45 REGISTERS 1306 1307 /THE ERROR ROUTINES ARE OF TWO TYPES 1308 / TYPE 1 CONSISTS OF 1309 / UA UNDEFINED ADDRESS 1310 / DT DOUBLE TAG 1311 / ST SYMBOL TABLE OVERFLOW 1312 / RD REDEFINITION BY PARAMETER ASSIGN. 1313 / TYPE 1 ERRORS ARE CALLED BY 1314 / PUSHJ 1315 / ERROR1 1316 1317 /WITH THE ADDRESS OF THE OFFFENDING SYMBOL ON THE PUSHDOWN LIST 1318 /AND WITH THE CODE FOR THE ERROR IN C(AC) 1319 /THE ERROR PRINTOUT IS 1320 / XX YYYYYY AT ZZZZ 1321 /WHERE XX REPRESENTS THE PARTICULAR ERROR CODE INVOLVED 1322 /YYYYYY REPRESENTS THE SYMBOL THAT CAUSED THE ERROR 1323 /ZZZZ REPRESENTS THE LOCATION IN THE USER'S PROGRAM AT WHICH THE 1324 /ERROR OCCURRED 1325 1326 /TYPE 2 ERRORS CONSIST OF 1327 / IC ILLEGAL CHARACTER 1328 / IR ILLEGAL REFERENCE 1329 / PO PUSHDOWN OVERFLOW 1330 / PU PUSHDOWN UNDERFLOW 1331 /TYPE 2 ERRORS ARE CALLED BY 1332 / PUSHJ 1333 / ERROR2 1334 /WITH THE VALUE OF THE ILLEGAL CHARACTER, LITERAL, OR ORIGIN ON THE 1335 /PUSHDOWN LIST AND THE CODE FOR THE ERROR IN THE ACCUMULATOR 1336 /THE ERROR PRINTOUT IS 1337 /XX YYYY AT ZZZZ 1338 /WHERE XX REPRESENTS THE PARTICULAR ERROR CODE INVOLVED 1339 /YYYY REPRESENTS THE VALUE OF THE ILLEGAL CHARACTER OR REFERENCE 1340 /ZZZZ REPRESENTS THE LOCATION IN THE USER'S PROGRAM AT WHICH THE ERROR 1341 / OCCURRED 1342 1343 /NUMBER CODE FOR ERRORS 1344 /1 UA 1345 /2 DT 1346 /3 ST 1347 /4 IC 1348 /5 IR 1349 /6 PO 1350 /7 PU 1351 /10 RD 1352 1353 1354 1355 1356 1357 1358 /PAGE 33 1359 001600 4231 ERROR1, JMS ETYPO /TYPE ERROR CODE 1360 001601 3112 DCA TEM2 /SAVE SYMBOL ADDRESS AS A POINTER 1361 001602 1512 TAD I TEM2 /GET FIRST WORD OF SYMBOL 1362 001603 0120 AND MASK /GET RID OF UNDEFINED BIT 1363 001604 3512 DCA I TEM2 /SYMBOL IS DEFINED FOR FUTURE REFERENCE 1364 001605 1512 TAD I TEM2 /GET IT BACK IN THE AC 1365 001606 4430 JMS I EEE /TYPE OUT THE FIRST WORD OF THE SYMBOL 1366 001607 2112 ISZ TEM2 /INCREMENT THE POINTER TO THE 2ND WORD 1367 001610 1512 TAD I TEM2 /PICK UP THE 2ND WORD 1368 001611 4430 JMS I EEE /TYPE IT OUT 1369 001612 2112 ISZ TEM2 /MOVE THE POINTER TO THE THIRD WORD 1370 001613 1512 TAD I TEM2 /PICK UP THE THIRD WORD 1371 001614 4430 JMS I EEE /TYPE IT OUT 1372 001615 4430 ECOMON, JMS I EEE /TYPE TWO SPACES 1373 001616 1377 TAD ATCODE /GET "AT" 1374 001617 4430 JMS I EEE /TYPE IT 1375 001620 4430 JMS I EEE /TYPE TWO SPACES 1376 001621 1142 TAD AACT /GET THE ABSOLUTE ADDRESS COUNTER 1377 001622 4431 JMS I OCTI /TYPE IT OUT 1378 001623 1071 TAD C377 /TYPE A RUBOUT 1379 001624 4422 JMS I DDD 1380 001625 5511 JMP I TEM1 /EXIT 1381 001626 4231 ERROR2, JMS ETYPO /TYPE THE ERROR CODE 1382 001627 4431 JMS I OCTI /TYPE THE VALUE OF IC, PO, OR PU 1383 001630 5215 JMP ECOMON /TYPE "AT" AND AACT 1384 1385 001631 0000 ETYPO, 0 /SUBROUTINE TO TYPE ERROR CODE 1386 001632 1376 TAD TBLEAD /ADD ERROR CODE TO TABLE POINTER 1387 001633 3112 DCA TEM2 /SAVE POINTER TO CODE IN TEMP 1388 001634 4450 POP /GET EXIT ADDRESS FROM PDL 1389 001635 3111 DCA TEM1 /SAVE IT, ERROR ADDRESS NOW AVAILABLE 1390 001636 1134 TAD PF /WHICH PASS IS THIS? 1391 001637 7640 SZA CLA /ERROR PRINTOUTS ONLY ON PASS1 1392 001640 5252 JMP ERROUT /OTHERWISE, EXIT FROM ERROR ROUTINE 1393 001641 1071 TAD C377 /TYPE A RUBOUT IN CASE OF IR 1394 001642 4422 JMS I DDD 1395 001643 1117 TAD CRLF /CARRIAGE RETURN, LINE FEED 1396 001644 4430 JMS I EEE 1397 001645 1512 TAD I TEM2 /GET THE ERROR CODE LETTERS 1398 001646 4430 JMS I EEE /TYPE THE ERROR CODE 1399 001647 4430 JMS I EEE /TYPE TWO SPACES 1400 001650 4450 POP /GET SYMBOL ADDRESS OR IC, IL, IO VALUE 1401 001651 5631 JMP I ETYPO /EXIT WITH IT IN THE AC 1402 1403 001652 4450 ERROUT, POP /CLEAR JUNK OFF THE PUSHDOWN LIST 1404 001653 7200 CLA 1405 001654 5511 JMP I TEM1 /EXIT 1406 1407 1408 1409 1410 /PAGE 34 1411 /PASS3 ROUTINE 1412 /ASSEMBLY LISTING ON ASR33 IF SW11 DOWN, 75A IF UP 1413 /LENGTH: 80 REGISTERS 1414 1415 001655 7604 POUT, CLA OSR /GET SWITCH REGISTER 1416 001656 7110 CLL RAR /WAS BIT 11 SET? 1417 001657 7620 SNL CLA 1418 001660 5264 JMP PART1 /NO 1419 001661 1021 TAD BBB /YES, RESET PRINT POINTER 1420 001662 3022 DCA DDD /FOR 75A PUNCH 1421 001663 3355 DCA TCNT /ZERO CHARACTER COUNTER 1422 001664 1117 PART1, TAD CRLF /CARRIAGE RETURN, LINE FEED 1423 001665 4430 JMS I EEE 1424 001666 1137 TAD INFO /ANY INFORMATION ON THIS LINE? 1425 001667 7640 SZA CLA 1426 001670 5277 JMP PART2 /YES 1427 001671 1104 TAD M6 /NO, TYPE 12 SPACES 1428 001672 3113 DCA TEM3 1429 001673 4430 JMS I EEE 1430 001674 2113 ISZ TEM3 1431 001675 5273 JMP .-2 1432 001676 5305 JMP .+7 /DON'T TYPE AACT 1433 001677 1142 PART2, TAD AACT /VALID INFO, TYPE AACT 1434 001700 4431 JMS I OCTI 1435 001701 4430 JMS I EEE /TYPE 2 SPACES 1436 001702 1140 TAD BINW /TYPE ASSEMBLED VALUE 1437 001703 4431 JMS I OCTI 1438 001704 4430 JMS I EEE /TYPE TWO SPACES 1439 001705 1136 TAD CHAR /WAS IT A CR? 1440 001706 1101 TAD M215 1441 001707 7440 SZA 1442 001710 1356 TAD M56 /IS IT ;?? 1443 001711 7640 SZA CLA 1444 001712 5753 JMP I TABIT-1 /NO: RETURN 1445 001713 7240 CLA CMA /YES: PUT STATEMENT 1446 001714 3413 DCA I AUTOC /DELIMITER IN BUFFER 1447 001715 1131 PART3, TAD TBUF /SET BUFFER 1448 001716 3013 DCA AUTOC 1449 001717 1413 PART4, TAD I AUTOC /GET CHARACTER 1450 001720 1105 TAD M211 /TAB? 1451 001721 7450 SNA 1452 001722 5754 JMP I TABIT /YES, TYPE TAB RUBOUT OR TAB STOP 1453 001723 1103 TAD M1 /LINE FEED? 1454 001724 7450 SNA 1455 001725 5317 JMP PART4 /YES, IGNORE IT 1456 001726 1073 TAD M2 /FORM FEED? 1457 001727 7450 SNA 1458 001730 5357 JMP FFEED /YES, TYPE FORM FEED 1459 001731 1103 TAD M1 /CARRIAGE RETURN? 1460 001732 7440 SZA 1461 001733 5336 JMP .+3 1462 001734 3355 DCA TCNT /ZERO COUNTER FOR NUMBER OF CHARACTERS 1463 001735 5317 JMP PART4 /YES 1464 1465 1466 /PAGE 35 1467 001736 1070 TAD C215 /RESTORE ORIGINAL CHARACTER 1468 001737 7510 SPA /RUBOUT 1469 001740 5345 JMP PART5 /YES, ALL DONE 1470 001741 7440 SZA /IGNORE CHARRIAGE RETURN 1471 001742 4422 JMS I DDD /NO, TYPE OR PUNCH CHARACTER 1472 001743 2355 ISZ TCNT /COUNT A CHARACTER 1473 001744 5317 JMP PART4 1474 1475 001745 7200 PART5, CLA /ALL DONE 1476 001746 1131 TAD TBUF /RESET BUFFER 1477 001747 3013 DCA AUTOC 1478 001750 1052 TAD LOPUNI /RESET PUNCH POINTER 1479 001751 3022 DCA DDD 1480 001752 5753 JMP I .+1 1481 001753 0332 MOUT /RETURN TO MAIN 1482 001754 2266 TABIT, TAB 1483 001755 0000 TCNT, 0 1484 001756 7722 M56, -56 1485 1486 001757 1104 FFEED, TAD M6 /TYPE SIX BLANK LINES 1487 001760 3113 DCA TEM3 1488 001761 1117 TAD CRLF 1489 001762 4430 JMS I EEE 1490 001763 2113 ISZ TEM3 1491 001764 5361 JMP .-3 1492 001765 1067 TAD C214 /TYPE FORM FEED 1493 001766 4422 JMS I DDD 1494 001767 1104 TAD M6 /TYPE SIX MORE BLANK LINES 1495 001770 3113 DCA TEM3 1496 001771 1117 TAD CRLF 1497 001772 4430 JMS I EEE 1498 001773 2113 ISZ TEM3 1499 001774 5371 JMP .-3 1500 001775 5317 JMP PART4 /RETURN 1501 1502 1503 001776 2246 TBLEAD, TABLE-1 /POINTER FOR ERROR CODES 1504 001777 0124 ATCODE, 0124 /AT 1505 1506 1507 L16, 1508 1509 1510 1511 1512 1513 1514 /PAGE 36 1515 *2000 1516 1517 1518 /ROUTINE TO HANDLE ORIGINS 1519 /LENGTH: 13 REGISTERS 1520 1521 002000 4445 STAR, PUSHJ /ORIGIN SETTING, GO ASSEMBLE EXPRESSION 1522 002001 0340 CSYM /ADDRESS FOR PUSHJ HANDLER 1523 002002 1140 TAD BINW /PICK UP ASSEMBLED BINARY WORD 1524 002003 3142 DCA AACT /RESET ABSOLUTE ADDRESS COUNTER 1525 002004 3137 DCA INFO /SAY NO TO MAIN 1526 002005 7040 CMA /WHICH PASS IS THIS? 1527 002006 1134 TAD PF /DO NOT PUNCH ON PASS1 OR PASS3 1528 002007 7640 SZA CLA 1529 002010 5446 POPJ /EXIT ON PASS1 OR PASS3 1530 002011 7120 CLL CML /SET LINK FOR ORIGIN PUNCH IN BINP 1531 002012 1142 TAD AACT /PICK UP ORIGIN 1532 002013 4427 JMS I PUNI /GO PUNCH IT 1533 002014 5446 POPJ /EXIT 1534 1535 1536 002015 0000 PSHLST, 0 /PUSH DOWN LIST 1537 *.+13 1538 1539 1540 1541 /PAGE 37 1542 /CHECK ROUTINE 1543 1544 /DISTINGUISHES BETWEEN NUMBERS, LETTERS, SPECIAL CHARACTERS 1545 /NUMBERS HAVE CODES BETWEEN 260 AND 271 1546 /LETTERS HAVE CODES BETWEEN 301 AND 332 1547 /ANY CHARACTER NOT A NUMBER OR A LETTER IS A SPECIAL CHARACTER 1548 /HOWEVER, SPECIAL CHARACTERS ARE MEANT TO INCLUDE ONLY 1549 /PLUS, MINUS, COMMA, EQUAL, STAR, PERIOD, SPACE, RETURN, DOLLAR 1550 1551 /EXIT TO SPSHUL IF CHAR IS A SPECIAL CHARACTER 1552 /EXIT TO CALLING ADDRESS+1 IF CHAR IS NUMBER 1553 /EXIT TO CALLING ADDRESS +2 IF CHAR IS LETTER 1554 1555 /LENGTH: 23 REGISTERS 1556 1557 002031 0000 NCHEK, 0 1558 002032 1136 TAD CHAR /IS CHAR < 260? 1559 002033 1255 TAD M260 /GET CHAR-260 1560 002034 7510 SPA 1561 002035 5423 JMP I SPECI /CHAR<260,SPECIAL CHARACTER 1562 002036 1075 TAD M12 /IS CHAR<272? 1563 002037 7510 SPA /FORM CHAR-272 1564 002040 5250 JMP NUMBEX /YES, 260