1 / SPACE WAR 2 / 3 / INTERPLANETARY DEATH AND DESTRUCTION ON YOUR 4 / LAB-8 5 / 6 / EVAN SUITS 7 / 8 / THIS VERSION WORKS OFF EITHER THE BLUE RIBBON CONNECTOR OR THE 9 / SR. WHEN THE PROGRAM IS STARTED (AT 0200) OR RESTARTED THE 10 / SR WILL BE TESTED AND IF =0000 WILL BE USED FOR THE COMMAND 11 / INPUT. OTHERWISE, THE BLUE RIBBON CONNECTOR (AX08 * C0-C7 * 12 / XR OPTION ONLY) CONTINGENCY INPUTS WILL BE USED. 13 / 14 / WHEN THE PROGRAM IS STARTED THE TWO SHIPS SHOULD 15 / APPEAR ON THE SCREEN WITH SHIP 'ONE' ON THE LEFT, SHIP 16 / 'TWO' ON THE RIGHT. 17 / 18 / THE COMMAND WORD BIT ASSIGNMENTS ARE: 19 / 20 / SR BIT: C: FUNCTION: 21 / 22 / 0 0 SHIP ONE ROTATES LEFT 23 / 24 / 1 1 SHIP ONE ROTATES RIGHT 25 / 26 / 2 2 SHIP ONE ACCELERATES 27 / 28 / 3 3 SHIP ONE FIRES 29 / 30 / 31 / 32 / 8 4 SHIP TWO ROTATES LEFT 33 / 34 / 9 5 SHIP TWO ROTATES RIGHT 35 / 36 / 10 6 SHIP TWO ACCELERATES 37 / 38 / 11 7 SHIP TWO FIRES 39 / 40 / 41 / 42 / NOTE THAT TURNING RIGHT AND LEFT SIMULTANEOUSLY THROWS 43 / THE SHIP INTO HYPERSPACE. IN THE CURRENT VERSION THE ODDS 44 / ARE IN FAVOR OF YOUR MAKING IT BACK SAFELY. THE GAME IS OVER 45 / WHEN ONE OR BOTH OF THE SHIPS HAVE BEEN DESTROYED AND THE 46 / WINNER (IF ANY) IS IN NORMAL SPACE. WHEN THE WINNER 47 / HAS BEEN ANNOUNCED, HIT ANY TTY KEY TO RESTART. 48 / 49 50 51 52 / SYMBOL DEFINITIONS FOR PAL8-PAL10 53 54 ZTEN=6342 55 OTEN=6344 56 57 XRIN=6331 58 XRCL=6334 59 60 SKXK=6321 61 CLXK=6352 62 63 DSB=6324 64 65 DXC=6301 66 DYC=6311 67 DXL=6302 68 DYL=6312 69 DIS=6304 70 71 CRF=6072 72 CCF=6052 73 74 / 75 / THIS PROGRAM RELIES ON THE PROGRAM INTERUPT FACILITY FOR 76 / REAL WORLD TIMING PURPOSES. 77 / 78 79 *0 80 81 000000 0000 0 /EFFECTIVE JMS 0 ON PROGRAM INTERUPT 82 000001 5402 JMP I 2 /EXIT IMMEDIATLY TO SERVICE ROUTINE 83 000002 0313 INTSER 84 85 000003 0000 EMPTY, 0 /THESE LOCATIONS ARE RESERVED FOR 86 000004 0000 ODT1, 0 /DEBUGGERS, ETC. 87 000005 0000 ODT2, 0 88 000006 0000 ODT3, 0 89 90 / 91 / ALL THE AUTO INDEX REGISTERS ARE NAMED BUT NOT ALL OF 92 / THEM ARE USED. THE STATUS OF ANY GIVEN REGISTER CANNOT 93 / BE DETERMINED AT ANY TIME EXCEPT BY CAREFUL INSPECTION OF 94 / THE CODE. 95 / 96 97 *10 98 99 000010 0000 AUTO10, 0 100 000011 0000 AUTO11, 0 101 000012 0000 AUTO12, 0 102 000013 0000 AUTO13, 0 103 000014 0000 AUTO14, 0 104 000015 0000 AUTO15, 0 105 000016 0000 AUTO16, 0 106 000017 0000 AUTO17, 0 107 108 / 109 / THE FOLLOWING ARE THE DATA FILES FOR THE TWO SPACE SHIPS 110 / AS WELL AS CERTAIN OTHER PARAMETERS FOR CALCULATING POSITIONS 111 / AND SO ON. THE ORDER OF THE LOCATIONS MUST BE PRESERVED 112 / ALTHOUGH THE SIZE OF THE TABLES MAY BE VARIED 113 / 114 115 *20 116 117 000020 0000 ONEOUT, 0 /IF NON-ZERO CONTAINS REAMINING TIME OF EXPLOSION 118 000021 0000 ONECNT, 0 /NUMBER OF POINTS IN FIGURE TO BE DISPLAYED 119 000022 0000 ONEFLG, 0 /IN OR OUT OF NORMAL SPACE 120 000023 0000 ONETHE, 0 /ANGLE OF ORIENTATION ON SCREEN 121 000024 0000 ONEVEX, 0 /X COMPONENT OF VELOCITY 122 000025 0000 ONEVEY, 0 /Y COMPONENT OF VELOCITY 123 000026 0000 ONEPEX, 0 /X POSITION (12 BITS) 124 000027 0000 ONEPEY, 0 /Y POSITION (12 BITS) 125 000030 0000 ONESIN, 0 /SINE OF ANGLE 126 000031 0000 ONECOS, 0 /COSINE OF ANGLE 127 000032 0000 ONEFIN, 0 /SET WHEN EXPLOSION DIES OUT 128 129 000033 0000 TWOOUT, 0 /SAME CONTENT AND ORDER 130 000034 0000 TWOCNT, 0 /AS ABOVE 131 000035 0000 TWOFLG, 0 132 000036 0000 TWOTHE, 0 133 000037 0000 TWOVEX, 0 134 000040 0000 TWOVEY, 0 135 000041 0000 TWOPEX, 0 136 000042 0000 TWOPEY, 0 137 000043 0000 TWOSIN, 0 138 000044 0000 TWOCOS, 0 139 000045 0000 TWOFIN, 0 140 141 142 / 143 / THESE LOCATIONS ARE USED BY THE "VECTOR GENERATOR" IN 144 / DISPLAYING THE FIGURES. A FOUR DOT VECTOR WILL BE DRAWN 145 / FROM XONE,YONE TO XTWO,YTWO WITH STEPS OF SIZE DIXTEM,DIYTEM 146 / 147 148 000046 0000 XONEDS, 0 149 000047 0000 YONEDS, 0 150 000050 0000 XTWODS, 0 151 000051 0000 YTWODS, 0 152 000052 0000 DIXTEM, 0 153 000053 0000 DIYTEM, 0 154 000054 0000 DISCNT, 0 155 156 157 / 158 / THE NEXT LOCATIONS ARE USED BY CALPOS TO DO A FAST 159 / MULTIPLY TO HELP CALCULATE THE DISPLAY FILES. 160 / 161 000055 0000 T10SIN, 0 162 000056 0000 T20SIN, 0 163 000057 0000 T30SIN, 0 164 000060 0000 T10COS, 0 165 000061 0000 T20COS, 0 166 000062 0000 T30COS, 0 167 168 000063 0000 CALSIN, 0 169 000064 0000 CALCOS, 0 170 171 172 / 173 / NOW COME THE VARIOUS ODDS AND ENDS ONE USUALLY FINDS ON 174 / PAGE ZERO 175 / 176 177 000065 6400 SINE, SINEIN 178 000066 6463 COSINE, COSINI 179 000067 6621 MULT, MULTI 180 000070 6675 RSHIFT, SHIFTR 181 000071 1475 VECTOR, DISPLY 182 000072 6703 CALPOS, POSCAL 183 000073 0000 INTWRD, 0 184 000074 0000 INTCNT, 0 185 000075 0000 CLOCK, 0 186 000076 2200 HYPER, HYPSET 187 000077 7000 MESOUT, CHARS 188 000100 2475 THEADJ, THEAJI 189 000101 2451 VEESCL, VEELIM 190 000102 1535 ISHFT, DISHFT 191 000103 1675 RESET1, RESE1 192 000104 0000 GAMOVR, 0 193 000105 0000 ACCFLG, 0 194 000106 7750 ACCPER, -30 195 000107 7400 MEXP, -400 196 197 000110 0000 PROX, 0 198 000111 0000 PROY, 0 199 000112 7420 PROLIF, -360 200 000113 0000 BUFTMP, 0 201 000114 7400 ONEFIL, DISBUF 202 000115 7440 TWOFIL, DISBUF+40 203 204 000116 0005 P5, 5 205 000117 0010 P10, 10 206 000120 0017 P17, 17 207 000121 0020 P20, 20 208 000122 0037 P37, 37 209 000123 0040 P40, 40 210 000124 0100 P100, 100 211 000125 0132 P132, 132 212 000126 0200 P200, 200 213 000127 0400 P400, 400 214 000130 0550 P550, 550 215 000131 3777 P3777, 3777 216 217 000132 7774 M4, -4 218 000133 7772 M6, -6 219 000134 7770 M10, -10 220 000135 7767 M11, -11 221 000136 7514 M264, -264 222 000137 7600 M200, -200 223 000140 7400 M400, -400 224 000141 7230 M550, -550 225 226 227 / 228 / THE PROGRAM MAY BE STARTED OR RESTARTED AT ANYTIME AT 0200. 229 / THE DATA FILE ON PAGE ZERO IS CLEARED, ALL FLAGS INITIALIZED, 230 / AND THE SR EXAMINED. IF THE SR=0 THE DISPLAY UPDATE ROUTINES 231 / ARE SET TO PICK UP THE STATUS WORD FROM THE SR. IF THE SR 232 / DOES NOT EQUAL ZERO, THE STATUS WORD IS READ FROM THE EIGHT 233 / CONTINGENCY INPUTS ON THE BLUE RIBBON CONNECTOR OF THE AX08 234 / (XR OPTION ONLY). JUMP IS THEN TO THE DISPLAY 235 / FILE UPDATE TO START OFF THE GAME. 236 / 237 238 *200 239 240 000200 7300 START, CLA CLL /START OR RESTART HERE ANY OLD TIME 241 000201 7604 LAS /SR 242 000202 7650 SNA CLA 243 000203 1311 TAD SWRD /USE THE SR 244 000204 1312 TAD XROPT /USE THE BLUE RIBBON CONNECTOR 245 000205 3251 DCA COLDST /AND LEAVE IN THE TRAP LOCATION 246 247 000206 7240 RESTRT, CLA CMA 248 000207 6334 XRCL 249 000210 7300 CLA CLL 250 251 000211 1120 TAD P17 /FIRST CLEAR THE POSITION AND DATA 252 000212 3010 DCA AUTO10 /TABLES OF THE TWO SHIPS 253 000213 1303 TAD TABLEN 254 000214 3011 DCA AUTO11 255 000215 3410 DCA I AUTO10 256 000216 2011 ISZ AUTO11 257 000217 5215 JMP .-2 258 259 000220 1307 TAD STRT1 /SET THE STARTING POSITIONS OF THE 260 000221 3026 DCA ONEPEX /TWO SHIPS 261 000222 1310 TAD STRT2 262 000223 3041 DCA TWOPEX 263 000224 1122 TAD P37 /SET TRIG FUNCTIONS JUST IN CASE 264 000225 3031 DCA ONECOS 265 000226 1122 TAD P37 266 000227 3044 DCA TWOCOS /ZERO DEGREES IS POINTING STRAIGHT UP 267 000230 1106 TAD ACCPER /SET COUNT FOR VELOCITY INCREASE 268 000231 3105 DCA ACCFLG 269 000232 3032 DCA ONEFIN /CLEAR ALL GAME END FLAGS 270 000233 3045 DCA TWOFIN 271 000234 3104 DCA GAMOVR 272 000235 4702 JMS I BUFSET /RESET ALL PROJECTILE DISPLAY BUFFERS 273 000236 1127 TAD P400 /START UP THE CRYSTAL CLOCK IN THE AX08 274 000237 6342 ZTEN 275 000240 6344 OTEN 276 000241 6042 TCF /CLEAR OTHER REMAINING LIKELY FLAGS 277 000242 6022 PCF 278 000243 6012 RRB 279 000244 6072 CRF 280 000245 6052 CCF 281 000246 7200 CLA 282 000247 5251 JMP COLDST /AND GO TO IT 283 284 285 / 286 / UPDATE IS REACHED WHENEVER THE PROGRAM IS STARTED OR THE 287 / CLOCK COUNT OVERFLOWS INDICATING TIME TO RECALCULATE THE 288 / THE DISPLAY FILES AND REFRESH THE DISPLAY. THE INTERUPT 289 / COUNT IS RESTORED, THE STATUS WORD IS PICKED UP FROM EITHER 290 / THE SR OR BRC, AND THE RECALCULATION PROCESS BEGUN. 291 / 292 293 000250 7300 UPDATE, CLA CLL /HERE ON CLOCK COUNT OVERFLOW. 294 /START NEXT SWEEP 295 000251 0000 COLDST, 0 /TRAP TO READ SR OR BRC 296 000252 7604 LAS /HERE FOR SR 297 000253 3073 DCA INTWRD /STORE TEMPORARILY 298 000254 1073 TAD INTWRD /MASK OUT LEFTMOST 4 BITS 299 000255 7012 RTR /FOR NUMBER ONE 300 000256 7012 RTR 301 000257 0305 AND LFTHAF 302 000260 3304 DCA INTTEM /AND STORE 303 000261 1073 TAD INTWRD /MASK OUT RIGHTMOST BITS FOR NUMBER TWO 304 000262 0306 AND RYTHAF 305 000263 1304 TAD INTTEM /ADD TOGETHER 306 000264 5267 JMP .+3 /AND CONTINUE 307 308 000265 6331 CODST, XRIN /HERE FOR BRC - PICK UP AND CLEAR 309 000266 6334 XRCL 310 000267 3073 DCA INTWRD /CONTINUE 311 000270 1141 TAD M550 /RESTORE INTERUPT COUNT BEFORE NEXT 312 000271 3074 DCA INTCNT /UPDATE 313 000272 6001 ION /GET READY FOR THE NEXT CYCLE 314 000273 1105 TAD ACCFLG /ALLOW VELOCITY INCREASE THIS TIME? 315 000274 7001 IAC /ONLY WHEN ACCFLG=0 316 000275 7540 SMA SZA 317 000276 1106 TAD ACCPER /IF ZERO, RESET COUNT 318 000277 3105 DCA ACCFLG 319 320 000300 5701 JMP I .+1 /NOW GET DOWN TO WORK. 321 000301 0400 ONEUP 322 323 000302 1726 BUFSET, SETBUF 324 000303 7733 TABLEN, AUTO17-CALCOS 325 000304 0000 INTTEM, 0 326 000305 0360 LFTHAF, 0360 327 000306 0017 RYTHAF, 0017 328 000307 1000 STRT1, 1000 329 000310 7000 STRT2, -1000 330 000311 1513 SWRD, 2000-CODST 331 000312 5265 XROPT, JMP CODST 332 333 334 / 335 / THIS IS THE INTERUPT SERVICE ROUTINE. MOST OF THE 336 / INTERUPTS WILL BE FROM THE CRYSTAL CLOCK WHICH WILL BE 337 / COUNTED AND UNLESS THE COUNT OVERFLOWS THE INTERUPT IS 338 / DISMISSED IMMEDIATLY. IF THE COUNT OVER FLOWS, JMP IS TO 339 / UPDATE WITH IOF. 340 / 341 / SPECIAL CASE IS KEYBOARD INTERUPT WHEN THE GAMOVR FLAG IS 342 / SET IN WHICH CASE THE GAME IS RESTARTED. 343 / 344 / UNEXPECTED INTERUPTS ARE COUNTED AND AFTER ENOUGH OF THEM 345 / HAPPEN THE PROGRAM HALTS. IF THIS HAPPENS RELOAD OR FIND THE 346 / STRANGE FLAG 347 / 348 349 000313 3346 INTSER, DCA INTACC /HERE RIGHT AFTER INTERUPT - STORE 350 000314 7010 RAR /AC AND LINK 351 000315 3347 DCA INTLNK /FOR POSSIBLE CONTINUATION 352 000316 6321 SKXK /WAS IT THE CRYSTAL CLOCK? 353 000317 5326 JMP INTBUS /NO TRY SOMETHING ELSE 354 000320 6352 CLXK /YES CLEAR THE FLAG 355 000321 2075 ISZ CLOCK /AND BUMP CLOCK COUNTER 356 000322 7000 NOP /IGNORE OVERFLOW 357 000323 2074 ISZ INTCNT /TIME FOR AN UPDATE? 358 000324 5340 JMP INTRET /NO, DISMISS THE INTERUPT 359 000325 5250 JMP UPDATE /YES, GO TO IT 360 361 000326 6031 INTBUS, KSF /HERE ON NON-CLOCK INTERUPT 362 000327 5334 JMP .+5 /NOT THE KEYBOARD 363 000330 6032 KCC /CLEAR KEYBOARD FLAG 364 000331 1104 TAD GAMOVR /IS THE GAMEOVER 365 000332 7640 SZA CLA 366 000333 5206 JMP RESTRT /YES, RESTART 367 000334 6042 TCF /NO, HELL WITH IT 368 000335 2350 ISZ INTGLH /COUNT ONE BADDIE 369 000336 7410 SKP 370 000337 7402 HLT /HALT IF TOO MANY BADDIES 371 372 000340 7300 INTRET, CLA CLL /HERE TO DISMISS THE INTERUPT 373 000341 1347 TAD INTLNK 374 000342 7004 RAL 375 000343 1346 TAD INTACC 376 000344 6001 ION 377 000345 5400 JMP I 0 378 379 000346 0000 INTACC, 0 380 000347 0000 INTLNK, 0 381 000350 0000 INTGLH, 0 382 383 384 / 385 / NOW BEGINS THE GREAT UPDATE PROCEEDURE, FIRST FOR SHIP 386 / NUMBER ONE (THE DELTA SHAPED SHIP WHICH APPEARS ON 387 / THE LEFT AT THE START OF THE GAME). IF ALIVE THE STATUS 388 / WORD (INTWRD) IS TESTED FOR REQUESTS FOR LEFT TURN, 389 / RIGHT TURN, THRUST ON, AND LAUNCH PROJECTILE. THESE ACTIONS 390 / MAY OR MAY NOT BE ACTED UPON DEPENDING ON COUNTS AND FLAGS. 391 / WHEN THIS IS COMPLETE THE SAME OPERATION IS PERFORMED FOR 392 / NUMBER TWO. 393 / 394 395 *400 396 397 000400 1022 ONEUP, TAD ONEFLG /FIRST SEE IF IT'S IN NORMAL SPACE 398 000401 7450 SNA 399 000402 5210 JMP ONEOK /YES IT IS 400 000403 7001 IAC /NO, BUT IS IT JUST COMING OUT? 401 000404 7450 SNA 402 000405 1032 TAD ONEFIN /YES, THROW BACK IN IF ALREADY DESTROYED 403 000406 3022 DCA ONEFLG /OTHERWISE JUST COUNT ONE 404 000407 5752 JMP I ITWOUP /AND GO TO FIX UP NUMBER TWO 405 406 000410 1020 ONEOK, TAD ONEOUT /IN NORMAL SPACE - IS IT EXPLODING? 407 000411 7640 SZA CLA 408 000412 5237 JMP ONEFIG /IF YES, ALLOW NO CONTROLS 409 000413 1045 TAD TWOFIN /HAS THE ENEMY BEEN VANQUISHED? 410 000414 7640 SZA CLA 411 000415 4756 JMS I ONEWN /YES, SIGNAL VICTORY 412 000416 1073 TAD INTWRD /NOW BEGIN TEST OF REQUEST 413 000417 0354 AND OP300 /LEFT AND RIGHT TURN TOGETHER MEAN HYPERSPACE! 414 000420 1355 TAD OM300 /TEST BITS 4 AND 5 415 000421 7640 SZA CLA 416 000422 5225 JMP ONELEF /NOPE, CONTINUE 417 000423 7040 CMA /YES, CALL HYPER WITH AC=-1 FOR NUMBER ONE 418 000424 5476 JMP I HYPER 419 000425 1073 ONELEF, TAD INTWRD /REQUEST FOR LEFT TURN? 420 000426 0126 AND P200 /TEST BIT 4 421 000427 7650 SNA CLA 422 000430 5233 JMP ONERYT /NO 423 000431 7340 CLA CLL CMA /YES DECREMENT ANGLE 424 000432 5237 JMP ONEFIG 425 426 000433 1073 ONERYT, TAD INTWRD /HOW ABOUT RIGHT TURN 427 000434 0124 AND P100 /TEST BIT 5 428 000435 7640 SZA CLA 429 000436 7001 IAC /YES, INCREMENT ANGLE 430 431 000437 1023 ONEFIG, TAD ONETHE /PICK UP AND ADJUST ANGLE (MAYBE) 432 000440 4500 JMS I THEADJ /BRING BACK WITHIN LIMITS OF TRIG FUNCTIONS 433 000441 3023 DCA ONETHE /AND STORE 434 000442 1023 TAD ONETHE /FIND THEM TRIG FUNCTIONS 435 000443 4465 JMS I SINE /AND STORE ONCE AND FOR ALL 436 000444 3030 DCA ONESIN /IN THE APPROPRIATE PLACES 437 000445 1023 TAD ONETHE 438 000446 4466 JMS I COSINE 439 000447 3031 DCA ONECOS 440 000450 1020 TAD ONEOUT /DO NOT ALLOW THRUST IF EXPLODING 441 000451 7640 SZA CLA 442 000452 5272 JMP ONEVEL 443 444 445 446 000453 1105 ONEMOV, TAD ACCFLG /ALLOW ANY VELOCITY INCREASE THIS CYCLE? 447 000454 7640 SZA CLA 448 000455 5272 JMP ONEVEL /NOPE 449 000456 1073 TAD INTWRD /YES, ANY REQUESTED? 450 000457 0123 AND P40 /TEST BIT 6 451 000460 7650 SNA CLA 452 000461 5272 JMP ONEVEL /NONE REQUESTED 453 000462 1031 TAD ONECOS /YES, ADD IN VELOCITY INCREMENT DEPENDING 454 000463 1025 TAD ONEVEY /ON ORIENTATION 455 000464 4501 JMS I VEESCL /BUT DO NOT ALLOW TO EXCEED MAXIMUM 456 000465 3025 DCA ONEVEY /AND STORE 457 000466 1030 TAD ONESIN /DO THE SAME FOR THE OTHER (X) COMPONENT 458 000467 1024 TAD ONEVEX 459 000470 4501 JMS I VEESCL 460 000471 3024 DCA ONEVEX 461 462 463 464 000472 1024 ONEVEL, TAD ONEVEX /NOW UPDATE THE POSITION WITH THE 465 000473 4502 JMS I ISHFT /VELOCITY COMPONENTS DIVIDED BY 4 466 000474 4502 JMS I ISHFT /THIS MAINTAINS MAXIMUM RESOLUTION 467 000475 1026 TAD ONEPEX 468 000476 3026 DCA ONEPEX /IGNORE ANY OVERFLOW 469 000477 1025 TAD ONEVEY /DO THE SAME FOR Y COORDINATE 470 000500 4502 JMS I ISHFT /AND VELOCITY COMPONENT 471 000501 4502 JMS I ISHFT 472 000502 1027 TAD ONEPEY 473 000503 3027 DCA ONEPEY 474 000504 1020 TAD ONEOUT /DO NOT ALLOW PROJECTILE LAUNCH IF 475 000505 7640 SZA CLA /EXPLODING 476 000506 5752 JMP I ITWOUP 477 478 479 480 000507 1353 ONELNC, TAD LNC1FG /OTHERWISE, SEE IF RELOAD IS FINISHED 481 000510 7650 SNA CLA 482 000511 5314 JMP .+3 483 000512 2353 ISZ LNC1FG /NO, CONTINUE RELOADING 484 000513 5752 JMP I ITWOUP /AND EXIT 485 000514 1073 TAD INTWRD /YES, READY TO LAUNCH, TRIGGER BEEN PULLED? 486 000515 0121 AND P20 /TEST BIT7 487 000516 7650 SNA CLA 488 000517 5752 JMP I ITWOUP /NO, WAIT FOR A BETTER SHOT 489 /.....I GUESS..... 490 000520 1112 TAD PROLIF /YES, SET CYCLE COUNT FOR THIS LAUNCH 491 000521 3416 DCA I AUTO16 /AUTO16 ALWAYS POINTS AT THE NEXT SLOT IN THE FILE 492 000522 1024 TAD ONEVEX /ADD SHIPS VELOCITY (SCALED OF COURSE) 493 000523 4502 JMS I ISHFT /TO ORIENTATION TO EXTABLISH X VELOCITY 494 000524 4470 JMS I RSHIFT /COMPONENT OF PROJECTILE 495 000525 1030 TAD ONESIN 496 000526 4470 JMS I RSHIFT /AND STICK IT IN THE FILE 497 000527 3416 DCA I AUTO16 498 000530 1030 TAD ONESIN /MOVE THE LAUNCH POINT OUTSIDE THE 499 000531 7106 CLL RTL /SHIP OF ORIGIN 500 000532 1026 TAD ONEPEX 501 000533 3416 DCA I AUTO16 /AND STORE X POSITION 502 000534 1025 TAD ONEVEY /NOW DO THE SAME FOR THE Y VELOCITY AND 503 000535 4502 JMS I ISHFT /POSITION 504 000536 4470 JMS I RSHIFT 505 000537 1031 TAD ONECOS 506 000540 4470 JMS I RSHIFT 507 000541 3416 DCA I AUTO16 508 000542 1031 TAD ONECOS 509 000543 7106 CLL RTL 510 000544 1027 TAD ONEPEY 511 000545 3416 DCA I AUTO16 512 000546 1137 TAD M200 /START RELOAD CYCLE 513 000547 3353 DCA LNC1FG 514 000550 4503 JMS I RESET1 /RESET AUTO16 TO NEXT HOLE 515 516 000551 5752 JMP I .+1 /NOW TO FIX IT UP WITH NUMBER TWO 517 000552 0600 ITWOUP, TWOUP 518 519 000553 0000 LNC1FG, 0 /PROJECTILE LAUNCH ENABLE 520 521 000554 0300 OP300, 300 /HYPERSPACE REQUEST CODE BITS 4 AND 5 522 000555 7500 OM300, -300 523 000556 2507 ONEWN, ONEWIN /POINTER TO VICTORY MESSAGE 524 525 526 / 527 / HERE BEGINS THE UPDATE PROCEEDURE FOR SHIP NUMBER TWO. 528 / OPERATION IS THE SAME AS FOR NUMBER ONE ABOVE. 529 / 530 531 *600 532 533 000600 1035 TWOUP, TAD TWOFLG /FIRST SEE IF IT'S IN NORMAL SPACE 534 000601 7450 SNA 535 000602 5210 JMP TWOOK /YES, CONTINUE 536 000603 7001 IAC /NO, BUMP COUNT AND TEST FOR REENTRY 537 000604 7450 SNA 538 000605 1045 TAD TWOFIN /IF RE-ENTERING THROW BACK OUT IF FINISHED 539 000606 3035 DCA TWOFLG /AND CONTINUE 540 000607 5750 JMP I IONEST 541 542 000610 1033 TWOOK, TAD TWOOUT /HERE WHEN READY TO UPDATE IN NORMAL SPACE 543 000611 7640 SZA CLA /IS IT EXPLODING? 544 000612 5235 JMP TWOFIG /YES DO NOT ALLOW HYPERSPACE 545 000613 1032 TAD ONEFIN /DID WE JUST WIN? 546 000614 7640 SZA CLA 547 000615 4754 JMS I TWOWN /YES ENABLE END OF GAME MESSAGE 548 000616 1073 TAD INTWRD /TEST FOR HYPERSPACE REQUEST 549 000617 0352 AND OP14 550 000620 1353 TAD OM14 /BITS 8 AND 9 MUST BE SET 551 000621 7650 SNA CLA 552 000622 5476 JMP I HYPER /8 AND 9 SET. ENTER HYPER ROUTINE WITH AC=0 553 /FOR SHIP NUMBER 2 554 000623 1073 TWOLEF, TAD INTWRD /TEST FOR LEFT TURN - BIT 8 555 000624 0117 AND P10 556 000625 7650 SNA CLA 557 000626 5231 JMP TWORYT /NOT SET 558 000627 7340 CLA CLL CMA /SET, DECREMENT TWOTHE BY 1 DEGREE 559 000630 5235 JMP TWOFIG /SKIP TEST FOR RIGHT TURN 560 561 000631 7307 TWORYT, CLA CLL IAC RTL /TEST FOR RIGHT TURN - BIT 9 562 000632 0073 AND INTWRD 563 000633 7640 SZA CLA 564 000634 7001 IAC /IF SET INCREMENT TWOTHE BY 1 DEGREE 565 566 000635 1036 TWOFIG, TAD TWOTHE /UPDTAE TWOTHE 567 000636 4500 JMS I THEADJ /BRING TO WITHIN LIMITS OF SINE,COSINE 568 000637 3036 DCA TWOTHE /AND STORE 569 000640 1036 TAD TWOTHE 570 000641 4465 JMS I SINE /CALCULATE SINE AND COSINE FUNCTIONS 571 000642 3043 DCA TWOSIN /AND STORE IN DATA TABLE 572 000643 1036 TAD TWOTHE 573 000644 4466 JMS I COSINE 574 000645 3044 DCA TWOCOS 575 000646 1033 TAD TWOOUT /DO NOT ALLOW VELOCITY CHANGE IF EXPLODING 576 000647 7640 SZA CLA 577 000650 5270 JMP TWOVEL 578 579 580 581 000651 1105 TWOMOV, TAD ACCFLG /NOW FOR ACCELERATION. TEST TO SEE IF ALLOWED 582 000652 7640 SZA CLA /DURING THIS UPDATE CYCLE 583 000653 5270 JMP TWOVEL /NOPE 584 000654 7105 CLL IAC RAL /YES, TEST FOR BIT 2 SET 585 000655 0073 AND INTWRD 586 000656 7650 SNA CLA 587 000657 5270 JMP TWOVEL /NOT SET 588 589 000660 1043 TAD TWOSIN /UPDATE X VELOCITY COMPONENT BY SINE OF 590 000661 1037 TAD TWOVEX /ANGLE OF ORIENTATION 591 000662 4501 JMS I VEESCL /AND SCALE TO NOT EXCEED MAX 592 000663 3037 DCA TWOVEX /UPDATE Y COMPONENT WITH COSINE 593 594 000664 1044 TAD TWOCOS 595 000665 1040 TAD TWOVEY 596 000666 4501 JMS I VEESCL 597 000667 3040 DCA TWOVEY 598 599 600 601 000670 1037 TWOVEL, TAD TWOVEX /NOW UPDATE THE POSITION WITH THE VELOCITY 602 000671 4502 JMS I ISHFT /COMPONENTS/16 603 000672 4502 JMS I ISHFT 604 000673 1041 TAD TWOPEX 605 000674 3041 DCA TWOPEX 606 000675 1040 TAD TWOVEY 607 000676 4502 JMS I ISHFT 608 000677 4502 JMS I ISHFT 609 000700 1042 TAD TWOPEY 610 000701 3042 DCA TWOPEY 611 000702 1033 TAD TWOOUT 612 000703 7640 SZA CLA 613 000704 5750 JMP I IONEST 614 615 616 617 000705 1351 TWOLNC, TAD LNC2FG /NOW CHECK FOR PROJECTILE LAUNCH. FIRST 618 000706 7650 SNA CLA /TEST TO SEE IF RELOAD COMPLETE 619 000707 5312 JMP .+3 620 000710 2351 ISZ LNC2FG /NO, COUNT ONE CYCLE AND EXIT 621 000711 5750 JMP I IONEST 622 000712 7001 IAC /YES, TEST TRIGGER BIT 11 623 000713 0073 AND INTWRD 624 000714 7650 SNA CLA 625 000715 5750 JMP I IONEST /NOT SET, HELL WITH IT 626 627 000716 1112 TAD PROLIF /OK, SET PROJECTILE LIFE 628 000717 3416 DCA I AUTO16 /AUTO16 IS ALWAYS POINTING AT THE NEXT SLOT 629 000720 1037 TAD TWOVEX /ADD SHIPS VELOCITY 630 000721 4502 JMS I ISHFT /(ADJUSTED) 631 000722 4470 JMS I RSHIFT 632 000723 1043 TAD TWOSIN /TO THAT OF PROJECTILE - AGAIN X COMPONENT 633 000724 4470 JMS I RSHIFT /FROM SINE OF ANGLE OF ORIENTATION 634 000725 3416 DCA I AUTO16 635 000726 1043 TAD TWOSIN /SET INITIAL POSITION TO BE JUST AHEAD 636 000727 7106 CLL RTL /OF THE SHIP 637 000730 1041 TAD TWOPEX /X COMPONENT 638 000731 3416 DCA I AUTO16 639 000732 1040 TAD TWOVEY /NOW THE Y COMPONENTS FROM Y VELOCITY 640 000733 4502 JMS I ISHFT /Y POSITION AND COSINE 641 000734 4470 JMS I RSHIFT 642 000735 1044 TAD TWOCOS 643 000736 4470 JMS I RSHIFT 644 000737 3416 DCA I AUTO16 645 000740 1044 TAD TWOCOS 646 000741 7106 CLL RTL 647 000742 1042 TAD TWOPEY 648 000743 3416 DCA I AUTO16 649 000744 1137 TAD M200 650 000745 3351 DCA LNC2FG /200 CYCLES OF RELOAD 651 000746 4503 JMS I RESET1 /DRINK LEADEN DEATH, NUMBER ONE! 652 653 000747 5750 JMP I .+1 /FINAL EXIT TO DISPLAY FILE CALCULATIONS 654 000750 1000 IONEST, ONESET 655 656 000751 0000 LNC2FG, 0 /RELOAD COUNT 657 658 000752 0014 OP14, 14 /HYPERSPACE CODE 659 000753 7764 OM14, -14 660 000754 2515 TWOWN, TWOWIN 661 662 663 / 664 / HERE BEGINS THE DISPLAY CALCULATIONS FOR THE TWO SHIPS. AT 665 / THIS POINT ONLY THE POSITION AND ORIENTATION OF EACH VESSEL 666 / IS ONF INTEREST SINCE THE VELOCITY AND ALL THAT HAVE ALREADY 667 / BEEN TAKEN CARE OF. FOR THE BOTH SHIPS THE DISPLAY FILES ARE 668 / CALCULATED AS A SERIES OF PAIRS OF X,Y COORDINATES. BETWEEN 669 / EACH PAIR OF POINTS A FOUR POINT VECTOR WILL BE DRAWN. THE 670 / ACTUAL COORDINATES ARE CALCULATED AS DISPLACEMENTS 671 / FROM THE CENTRAL PSOTION OF THE SHIP, TAKING INTO ACCOUNT THE 672 / ANGLE OF ORIENTATION. THE FORMULAS FOLLOWED ARE: 673 / 674 / X(POINT)=X(BASE)+X(REL)*COS[THE]+Y(REL)*SINE[THE] 675 / 676 / Y(POINT)=Y(BASE)+Y(REL)*COS[THE]-X(REL)*SINE[THE] 677 / 678 / WHERE SINE[THE] AND COS[THE] ARE THE FUNCTIONS OF THE 679 / ANGLE OF ORIENTATION, X(BASE) AND Y(BASE) ARE THE 680 / COORDINATES OF THE SHIPS POSITION AND X(REL) AND Y(REL) 681 / CORRESPOND TO DISPLACEMENT PAIRS DEPENDING ON THE SHAPE 682 / OF THE FIGURE. ALL X AND Y RELS LIE WITHIN THE RANGE 0-3 AND 683 / THERE FORE ALL NECESSARY DISPLACEMENTS FROM BASE COORDINATES 684 / MAY BE CALCULATEDFROM DIFFERENT COMBINATIONS OF T10SIN, T20COS 685 / ETC. THESE VALUES ARE CALCULATED BY A CALL TO POSCAL WITH THE SINE 686 / AND COSINE OF THE ANGLE OF INTEREST IN CALSIN AND CALCOS. 687 / 688 / FOLLOWING THIS METHOD ANY FIGURE DESCRIBABLE WITH A 7 BY 7 689 / MATRIX OF POINTS MAY BE QUICKLY CALCULATED. 690 / 691 / BEGINNING AT ONESET DIFFERENT DISPLACEMENT PAIRS ARE CALCULATED 692 / AND DEPOSITIED THROUGH AUTO10 TO FORM THE DISPLAY FILE FOR SHIP NUMBER ONE. 693 / 694 695 696 *1000 697 698 001000 7300 ONESET, CLA CLL /BEGIN DISPLAY FILE FOR NUMBER ONE 699 001001 1022 TAD ONEFLG /DONT BOTHER IF NOT IN NORMAL SPACE 700 001002 7640 SZA CLA 701 001003 5753 JMP I ITWOST 702 001004 1030 TAD ONESIN /SET UP FOR MATRIX COMPONENT CALCULATIONS 703 001005 3063 DCA CALSIN 704 001006 1031 TAD ONECOS 705 001007 3064 DCA CALCOS 706 001010 4472 JMS I CALPOS /CALL THE CALCULATOR 707 708 / 709 / CONSIDER THE 7 BY 7 MATRIX OF DISPLACEMENT POINTS WITH THE 710 / CENTER AT 0,0 CORRESPONDING TO THE SHIPS POSITION. A SERIES 711 / OF POINTS IS NOW DESCRIBED AROUND THIS CENTER USING THE 712 / MULTIPLES OF THE TRIG FUNCTIONS JUST CALCULATED 713 / SO THAT ANY POINT ON THE OUTLINE IS DESCRIBABLE AS X,Y 714 / DISPLACED BY X,Y OF THE SHIP ITSELF 715 / 716 717 001011 1114 TAD ONEFIL /SET UP AUTO10 AS THE DISPLAY FILE 718 001012 3010 DCA AUTO10 /POINTER 719 001013 1026 TAD ONEPEX /THE FIRST POINT OF THE OUTLINE IS 720 001014 1057 TAD T30SIN 721 001015 3410 DCA I AUTO10 / 0,3 OR TOP CENTER 722 001016 1027 TAD ONEPEY 723 001017 1062 TAD T30COS 724 001020 3410 DCA I AUTO10 725 726 001021 1060 TAD T10COS 727 001022 7041 CIA /THE SECOND IS 728 001023 1026 TAD ONEPEX 729 001024 3410 DCA I AUTO10 / -1,0 730 001025 1055 TAD T10SIN /OR JUST LEFT OF DEAD CENTER 731 001026 1027 TAD ONEPEY /AND SO ON 732 001027 3410 DCA I AUTO10 733 734 001030 1057 TAD T30SIN 735 001031 1062 TAD T30COS /THE THIRD POINT IS 736 001032 7041 CIA 737 001033 1026 TAD ONEPEX / -3,-3 738 001034 3410 DCA I AUTO10 739 001035 1062 TAD T30COS /OR BOTTOM LEFT HAND CORNER 740 001036 7041 CIA 741 001037 1057 TAD T30SIN 742 001040 1027 TAD ONEPEY 743 001041 3410 DCA I AUTO10 744 745 746 747 001042 1055 TAD T10SIN 748 001043 7041 CIA /FOURTH POINT 749 001044 1026 TAD ONEPEX 750 001045 3410 DCA I AUTO10 / 0,-1 751 001046 1060 TAD T10COS 752 001047 7041 CIA /OR JUST BELOW CENTER 753 001050 1027 TAD ONEPEY 754 001051 3410 DCA I AUTO10 755 756 001052 1073 FLAM1, TAD INTWRD /TEST FOR POWER ON. IF ON, DRAW THE 757 001053 0123 AND P40 /FLAME WITH AN EXTRA POINT SOME 758 001054 7650 SNA CLA /DISTANCE DIRECTLY BELOW THE SHIP 759 001055 5321 JMP ONECON /POWER NOT ON - CONTINUE 760 001056 1020 TAD ONEOUT /DO NOT ALLOW IF EXPLODING 761 001057 7640 SZA CLA 762 001060 5321 JMP ONECON 763 764 001061 1354 TAD ONFG1 /USE ONFG1 TO TURN THE FLAME ON AND 765 001062 7450 SNA /OFF TO MAKE IT FLICKER. DISPLAY THE 766 001063 7344 CLA CLL CMA RAL /FLAME ONE TIME OUT OF THREE 767 001064 3354 DCA ONFG1 768 769 001065 2354 ISZ ONFG1 770 001066 5321 JMP ONECON /ONE OUT OF THREE TIMES THIS WILL SKIP 771 772 001067 1355 TAD ONFG2 /VARY ALSO THE LENGHT OF THE FLAME 773 001070 7040 CMA /WITH LONG SHORT LONG SHORT 774 001071 3355 DCA ONFG2 775 776 001072 1355 TAD ONFG2 /TIP OF FLAME AT EITHER 777 001073 7650 SNA CLA 778 001074 1055 TAD T10SIN / 0,-4 OR 779 001075 1057 TAD T30SIN / 0,-3 780 001076 7041 CIA 781 001077 1026 TAD ONEPEX 782 001100 3410 DCA I AUTO10 783 001101 1355 TAD ONFG2 784 001102 7650 SNA CLA 785 001103 1060 TAD T10COS 786 001104 1062 TAD T30COS 787 001105 7041 CIA 788 001106 1027 TAD ONEPEY 789 001107 3410 DCA I AUTO10 790 791 001110 1055 TAD T10SIN 792 001111 7041 CIA 793 001112 1026 TAD ONEPEX /RETURN DISPLAY TO 0,-1 794 001113 3410 DCA I AUTO10 795 001114 1060 TAD T10COS 796 001115 7041 CIA 797 001116 1027 TAD ONEPEY 798 001117 3410 DCA I AUTO10 799 001120 7344 CLA CLL CMA RAL /ADD -2 TO POINT COUNT 800 801 802 803 001121 1133 ONECON, TAD M6 /SET POINT COUNT TO -6 OR -8 804 001122 3021 DCA ONECNT 805 806 001123 1057 TAD T30SIN /CONTINUE WITH DISPLAY FILE - THIS POINT 807 001124 7041 CIA 808 001125 1062 TAD T30COS / AT 3,-3 809 001126 1026 TAD ONEPEX / 810 001127 3410 DCA I AUTO10 /OR LOWER RIGHT HAND CORNER 811 001130 1057 TAD T30SIN 812 001131 1062 TAD T30COS 813 001132 7041 CIA 814 001133 1027 TAD ONEPEY 815 001134 3410 DCA I AUTO10 816 817 001135 1060 TAD T10COS /NEXT 818 001136 1026 TAD ONEPEX / 819 001137 3410 DCA I AUTO10 / 1,0 820 001140 1055 TAD T10SIN / 821 001141 7041 CIA / OR JUST RIGHT OF CENTER 822 001142 1027 TAD ONEPEY 823 001143 3410 DCA I AUTO10 824 825 001144 1057 TAD T30SIN /FINALLY BACK TO 826 001145 1026 TAD ONEPEX / 827 001146 3410 DCA I AUTO10 / 0,3 828 001147 1062 TAD T30COS / 829 001150 1027 TAD ONEPEY / TOP CENTE 830 001151 3410 DCA I AUTO10 831 832 001152 5753 JMP I ITWOST /NOW FOR NUMBER TWO 833 001153 1200 ITWOST, TWOSET 834 835 001154 0000 ONFG1, 0 /USED TO COUNT FLICKERS 836 001155 0000 ONFG2, 0 /SHORT OR LONG FLAG 837 838 839 / 840 / HERE BEGINS THE DISPLAY FILE GENERATOR FOR SHIP TWO. 841 / IT WORKS JUST LIKE THE ONE FOR NUMBER ONE BUT WITH 842 / DIFFERENT DISPLACEMENT PAIRS AND TWO EXTRA POINTS 843 / 844 845 *1200 846 847 001200 7300 TWOSET, CLA CLL /DONT BOTHER IF NOT IN NORMAL SPACE 848 001201 1035 TAD TWOFLG 849 001202 7640 SZA CLA 850 001203 5775 JMP I IFILDS 851 001204 1043 TAD TWOSIN /SET UP TO HAVE DISPLACEMENT INCREMENTS 852 001205 3063 DCA CALSIN /CALCULATED 853 001206 1044 TAD TWOCOS 854 001207 3064 DCA CALCOS 855 001210 4472 JMS I CALPOS 856 857 001211 1115 TAD TWOFIL /SET AUTO10 TO POINT TO SECOND DISPLAY 858 001212 3010 DCA AUTO10 /FILE 859 001213 1057 TAD T30SIN /FIRST POINT AT 860 001214 1041 TAD TWOPEX / 861 001215 3410 DCA I AUTO10 / 0,3 862 001216 1062 TAD T30COS / 863 001217 1042 TAD TWOPEY / OR TOP CENTER 864 001220 3410 DCA I AUTO10 865 866 001221 1061 TAD T20COS 867 001222 7041 CIA 868 001223 1056 TAD T20SIN 869 001224 1041 TAD TWOPEX 870 001225 3410 DCA I AUTO10 871 001226 1056 TAD T20SIN 872 001227 1061 TAD T20COS /SECOND POINT 873 001230 1042 TAD TWOPEY / -2,2 874 001231 3410 DCA I AUTO10 875 876 001232 1061 TAD T20COS /THIRD POINT 877 001233 7041 CIA / -2,0 878 001234 1041 TAD TWOPEX 879 001235 3410 DCA I AUTO10 880 001236 1056 TAD T20SIN 881 001237 1042 TAD TWOPEY 882 001240 3410 DCA I AUTO10 883 884 885 886 001241 1061 TAD T20COS 887 001242 1057 TAD T30SIN 888 001243 7041 CIA 889 001244 1041 TAD TWOPEX /FOURTH POINT 890 001245 3410 DCA I AUTO10 / -2,-3 891 001246 1062 TAD T30COS 892 001247 7041 CIA 893 001250 1056 TAD T20SIN 894 001251 1042 TAD TWOPEY 895 001252 3410 DCA I AUTO10 896 897 898 899 001253 1056 TAD T20SIN 900 001254 7041 CIA /NEXT 901 001255 1041 TAD TWOPEX / 0,-2 902 001256 3410 DCA I AUTO10 903 001257 1061 TAD T20COS 904 001260 7041 CIA 905 001261 1042 TAD TWOPEY 906 001262 3410 DCA I AUTO10 907 908 001263 7305 FLAM2, CLA CLL IAC RAL /NOW THE FLAME BIT. CHECK FOR POWER ON 909 001264 0073 AND INTWRD 910 001265 7650 SNA CLA 911 001266 5332 JMP TWOCON /NO, FORGET IT 912 001267 1033 TAD TWOOUT /NOT ALLOWED IF EXPLODING 913 001270 7640 SZA CLA 914 001271 5332 JMP TWOCON 915 916 001272 1376 TAD TWFG1 /SET THE 1-3 FLICKER AS WITH #1 917 001273 7450 SNA 918 001274 7344 CLA CLL CMA RAL 919 001275 3376 DCA TWFG1 920 921 001276 2376 ISZ TWFG1 /ALSO THE LENGHT VARIATION 922 001277 5332 JMP TWOCON 923 924 001300 1377 TAD TWFG2 /EVERY OTHER TIME LONG 925 001301 7040 CMA 926 001302 3377 DCA TWFG2 927 /FLAME TIP AT EITHER 928 001303 1377 TAD TWFG2 / 0,-3 929 001304 7650 SNA CLA /OR 930 001305 1056 TAD T20SIN / 0,-5 931 001306 1057 TAD T30SIN 932 001307 7041 CIA 933 001310 1041 TAD TWOPEX 934 001311 3410 DCA I AUTO10 935 001312 1377 TAD TWFG2 936 001313 7650 SNA CLA 937 001314 1061 TAD T20COS 938 001315 1062 TAD T30COS 939 001316 7041 CIA 940 001317 1042 TAD TWOPEY 941 001320 3410 DCA I AUTO10 942 943 001321 1056 TAD T20SIN /NOW BACK UP TO THE SHIP 944 001322 7041 CIA 945 001323 1041 TAD TWOPEX 946 001324 3410 DCA I AUTO10 947 001325 1061 TAD T20COS 948 001326 7041 CIA 949 001327 1042 TAD TWOPEY 950 001330 3410 DCA I AUTO10 951 952 001331 7344 CLA CLL CMA RAL /ADD -2 TO POINT COUNT 953 954 955 956 001332 1134 TWOCON, TAD M10 /SET POINT COUNT TO -8 OR -10 957 001333 3034 DCA TWOCNT 958 959 001334 1057 TAD T30SIN /CONTINUE WITH DISPLAY FILE 960 001335 7041 CIA /NEXT POINT AT 2,-3 961 001336 1061 TAD T20COS 962 001337 1041 TAD TWOPEX 963 001340 3410 DCA I AUTO10 964 001341 1062 TAD T30COS 965 001342 1056 TAD T20SIN 966 001343 7041 CIA 967 001344 1042 TAD TWOPEY 968 001345 3410 DCA I AUTO10 969 970 971 972 001346 1061 TAD T20COS /NEXT POINT 973 001347 1041 TAD TWOPEX / 974 001350 3410 DCA I AUTO10 / 2,0 975 001351 1056 TAD T20SIN 976 001352 7041 CIA 977 001353 1042 TAD TWOPEY 978 001354 3410 DCA I AUTO10 979 980 001355 1061 TAD T20COS /AND THE NEXT AT 981 001356 1056 TAD T20SIN 982 001357 1041 TAD TWOPEX / 2,2 983 001360 3410 DCA I AUTO10 984 001361 1056 TAD T20SIN 985 001362 7041 CIA 986 001363 1061 TAD T20COS 987 001364 1042 TAD TWOPEY 988 001365 3410 DCA I AUTO10 989 990 001366 1057 TAD T30SIN 991 001367 1041 TAD TWOPEX 992 001370 3410 DCA I AUTO10 993 001371 1062 TAD T30COS /AND THE LAST AT 994 001372 1042 TAD TWOPEY / 995 001373 3410 DCA I AUTO10 / 0,3 996 997 001374 5775 JMP I IFILDS /NOW TO DISPLAY THE WHOLE MESS 998 001375 1400 IFILDS, FILDIS 999 1000 001376 0000 TWFG1, 0 /FLIK THE FLAME 1001 001377 0000 TWFG2, 0 /LONG OR SHORT 1002 1003 1004 / 1005 / HERE TO DISPLAY THE TWO SHIPS. CHECK FIRST FOR COLLISION 1006 / AND THEN SET THE TWO PAIRS OF COORDENATES FOR THE END 1007 / POINTS AND CALL THE "VECTOR GENERATOR" TO DRAW THE DOTS 1008 / IN BETWEEN. WHEN THE COUNT OVERFLOWS DO THE SAME FOR 1009 / NUMBER TWO. THEN EXIT TO DISPLAY ALL THE PROJECTILES. 1010 / 1011 1012 *1400 1013 1014 001400 7300 FILDIS, CLA CLL /ALL SET TO GO 1015 001401 4672 JMS I COLIDE /TEST FOR COLLISION FIRST 1016 001402 6325 DSB 1 /IF NO COLLISION 1017 001403 1022 TAD ONEFLG /SKIP NUMBER ONE IF NOT IN NORMAL 1018 001404 7640 SZA CLA /SPACE 1019 001405 5236 JMP TWODIS 1020 1021 001406 1114 TAD ONEFIL /SET UP POINTERS TO DISPLAY FILE 1022 001407 3010 DCA AUTO10 /FOR NUMBER ONE 1023 001410 1021 TAD ONECNT /ALONG WITH VECTOR COUNT 1024 001411 3011 DCA AUTO11 1025 001412 1410 TAD I AUTO10 /SET OUT THE FIRST POINT PAIR 1026 001413 3046 DCA XONEDS 1027 001414 1410 TAD I AUTO10 1028 001415 3047 DCA YONEDS 1029 001416 1020 TAD ONEOUT /NORMAL DISPLAY OR EXPLOSION? 1030 001417 7640 SZA CLA 1031 001420 5673 JMP I IONEEX /GO ELSE WHERE FOR EXPLOSION 1032 1033 001421 1410 FILONE, TAD I AUTO10 /STEP TO NEXT PAIR OF POINTS 1034 001422 3050 DCA XTWODS /SET X AND Y TO NEW POINT 1035 001423 1410 TAD I AUTO10 1036 001424 3051 DCA YTWODS 1037 001425 4471 JMS I VECTOR /CALL THE DOT DRAWING MACHINE 1038 001426 2011 ISZ AUTO11 1039 001427 7410 SKP /COUNT 1040 001430 5236 JMP TWODIS /DO NUMBER TWO ON OVERFLOW 1041 001431 1050 TAD XTWODS /SWAP POINTS FOR NEXT PAIR 1042 001432 3046 DCA XONEDS 1043 001433 1051 TAD YTWODS /THE GENERATOR DRAWS FROM ONE 1044 001434 3047 DCA YONEDS /TOWARDS TWO 1045 001435 5221 JMP FILONE 1046 1047 1048 1049 001436 1035 TWODIS, TAD TWOFLG /HERE TO DO NUMBER TWO 1050 001437 7640 SZA CLA /BUT NOT IF IN HYPER SPACE 1051 001440 5664 JMP I IPRODS 1052 1053 001441 1115 TAD TWOFIL /SET UP FILE POINTER AS IN ONE 1054 001442 3010 DCA AUTO10 1055 001443 1034 TAD TWOCNT /AND THE COUNT 1056 001444 3011 DCA AUTO11 1057 001445 1410 TAD I AUTO10 /I SUPPOSE THIS COULD BE A SUBROUTINE TOO 1058 001446 3046 DCA XONEDS 1059 001447 1410 TAD I AUTO10 1060 001450 3047 DCA YONEDS 1061 001451 1033 TAD TWOOUT /IS IT EXPLODING? 1062 001452 7640 SZA CLA 1063 001453 5674 JMP I ITWOEX /YES, HOW EXCITING 1064 1065 001454 1410 TWDLOP, TAD I AUTO10 /NO HOW DULL, STICK IN NEXT PAIR OF 1066 001455 3050 DCA XTWODS /POINTS 1067 001456 1410 TAD I AUTO10 1068 001457 3051 DCA YTWODS /AND CALL THE VECTOR SEQUENCE 1069 001460 4471 JMS I VECTOR 1070 001461 2011 ISZ AUTO11 1071 001462 5265 JMP .+3 1072 1073 001463 5664 JMP I .+1 /WHEN COUNT OVERFLOWS GO ON TO 1074 001464 1600 IPRODS, PRODIS /DO THE PROJECTILE THING 1075 1076 001465 1050 TAD XTWODS /OTHERWISE SWAP ON TO THE NEXT PAIR 1077 001466 3046 DCA XONEDS /OF POINTS 1078 001467 1051 TAD YTWODS 1079 001470 3047 DCA YONEDS 1080 001471 5254 JMP TWDLOP 1081 1082 001472 2074 COLIDE, COLLID 1083 001473 2271 IONEEX, ONEEXP 1084 001474 2310 ITWOEX, TWOEXP 1085 1086 1087 / 1088 / THIS IS THE SO CALLED "VECTOR GENERATOR" WHICH DRAWS A 1089 / SERIES OF DOTS FROM XONEDS,YONEDS TO XTWODS,YTWODS. 1090 / THE COORDINATE COMPONENTS ARE DIVIDED INTO FOURTHS AND 1091 / FOUR DOTS DRAWN ON THE SCOPE SCREEN. NOTE THAT NO DOT 1092 / IS DRAWN AT XONEDS,YONEDS. THIS IS COMPENSATED FOR ELSEWHERE. 1093 / 1094 1095 1096 001475 0000 DISPLY, 0 /ENTER TO DRAW A FOUR POINT VECTOR 1097 001476 1046 TAD XONEDS /FROM XONEDS,YONEDS 1098 001477 7041 CIA /TO XTWODS,YTWODS 1099 001500 1050 TAD XTWODS /DIVIDE COORDINATE DIFERENCES INTO 1100 001501 4335 JMS DISHFT /FOURTHS 1101 001502 3052 DCA DIXTEM /AND STORE INCREMENT 1102 001503 1047 TAD YONEDS 1103 001504 7041 CIA 1104 001505 1051 TAD YTWODS 1105 001506 4335 JMS DISHFT 1106 001507 3053 DCA DIYTEM 1107 001510 1132 TAD M4 /FOR FOUR DOTS 1108 001511 3054 DCA DISCNT 1109 1110 001512 1046 DISLOP, TAD XONEDS /ADD INCREMENT TO CURRENT X AND Y 1111 001513 1052 TAD DIXTEM 1112 001514 3046 DCA XONEDS /NOTE THAT THIS ROUTINE DESTROYS 1113 001515 1047 TAD YONEDS /XONEDS AND YONEDS 1114 001516 1053 TAD DIYTEM 1115 001517 3047 DCA YONEDS 1116 001520 1046 TAD XONEDS 1117 001521 7012 RTR /DIVIDE BY 8 TO FIT SCREEN SIZE 1118 001522 7010 RAR 1119 001523 6303 DXC DXL /SET X VALUE 1120 001524 7200 CLA 1121 001525 1047 TAD YONEDS /DO THE SAME FOR Y 1122 001526 7012 RTR 1123 001527 7010 RAR 1124 001530 6317 DYC DYL DIS /AT LAST SOMETHING TO SEE!! 1125 001531 7200 CLA 1126 001532 2054 ISZ DISCNT /DONE YET? 1127 001533 5312 JMP DISLOP /NOPE 1128 001534 5675 JMP I DISPLY /YUP 1129 1130 1131 001535 0000 DISHFT, 0 /A GENERALIZED SHIFT ROUTINE CALLED 1132 001536 7100 CLL /FROM EVERYWHERE TO DIVIDE THE 1133 001537 7510 SPA /AC BY FOUR WITH AN ASR RIGHT 1134 001540 7021 CML IAC /NOTE THAT NEGATIVE NUMBERS ARE 1135 001541 7010 RAR /ROUNDED UPWARDS (TOWARD ZERO) 1136 001542 7100 CLL /TO MAKE IT COME OUT RIGHT 1137 001543 7510 SPA 1138 001544 7021 CML IAC /EVEN SO THERE ARE SOME ROUNDING ERRORS 1139 001545 7010 RAR /SOMEWHERE. SO MUCH FOR 12 BIT MACHINES 1140 001546 5735 JMP I DISHFT 1141 1142 1143 / 1144 / HERE TO DISPLAY ALL THE PROJECTILES AND TEST FOR HITS. 1145 / THE PROJECTILE DISPLAY FILE IS SEARCHED FOR PROJECTILES WITH 1146 / NON-ZERO COUNTS AND WHEN ONE IS FOUND THE POSITION IS 1147 / UPDATED BY THE VELOCITY, THE POINT DISPLAYED AND TESTED FOR 1148 / A HIT. 1149 / 1150 1151 *1600 1152 1153 001600 7300 PRODIS, CLA CLL / BEGIN DISPLAY OF THE PROJECTILES 1154 001601 1272 TAD BUFST /POINT TO BEGINNING OF DISPLAY FILE 1155 001602 3113 DCA BUFTMP 1156 001603 6326 DSB 2 /SET EXTRA BRIGHT FOR SINGLE POINTS 1157 1158 001604 1513 PROLOP, TAD I BUFTMP /PICK UP NEXT COUNT 1159 001605 7450 SNA 1160 001606 5262 JMP EXPIRE /THIS ONE IS DEAD - GO TO THE NEXT 1161 001607 7001 IAC /INCREMENT COUNT AND REPLACE 1162 001610 3513 DCA I BUFTMP 1163 001611 2113 ISZ BUFTMP /BUMP POINTER TO X VELOCITY 1164 001612 1513 TAD I BUFTMP 1165 001613 2113 ISZ BUFTMP /THEN TO XPOSITION AND UPDATE X POSITION 1166 001614 1513 TAD I BUFTMP /WITH THE VELOCITY WHICH IS CONSTANT 1167 001615 3513 DCA I BUFTMP 1168 001616 1513 TAD I BUFTMP 1169 001617 3110 DCA PROX /AND STORE X POSITION FOR DISPLAY AND TEST 1170 001620 2113 ISZ BUFTMP /NOW TO Y POSITION AND VELOCITY 1171 001621 1513 TAD I BUFTMP 1172 001622 2113 ISZ BUFTMP 1173 001623 1513 TAD I BUFTMP /SAME LITTLE GAME 1174 001624 3513 DCA I BUFTMP 1175 001625 1513 TAD I BUFTMP 1176 001626 3111 DCA PROY /STORE THE NEW Y VALUE 1177 1178 001627 1110 TAD PROX /DISPLAY THE POINT WITH 1179 001630 7012 RTR /THE SAME SHIFT AS FOR THE SHIPS 1180 001631 7010 RAR /FOR THE SMALL SCREEN 1181 001632 6303 DXC DXL 1182 001633 7200 CLA 1183 001634 1111 TAD PROY 1184 001635 7012 RTR / 1185 001636 7010 RAR 1186 001637 6317 DYC DYL DIS /THERE IT IS!! 1187 001640 7200 CLA 1188 001641 4674 JMS I CHKOUT /TEST FOR A HIT 1189 001642 2113 ISZ BUFTMP /MOVE POINTER ON AND TEST FOR END 1190 001643 1113 TAD BUFTMP /OF BUFFER 1191 001644 1273 TAD BUFLIM 1192 001645 7640 SZA CLA 1193 001646 5204 JMP PROLOP /NOT AT END - CONTINUE 1194 1195 / 1196 / HERE AT THE END OF THE PROJECTILE DISPLAY. IF THE GAMOVR 1197 / FLAG IS SET, GO ON TO THE MESSAGE DISPLAY - VICTORY LAP 1198 / SECTION. OTHERWISE PICK UP THE REMAINING CLOCK COUNT 1199 / TO GIVE THE FANS SOMETHING TO LOOK AT, AND MOVE THE 1200 / ELECTRON BEAM TO A LOWER CORNER. THE COUNT DISPLAYED 1201 / IN THE AC IS THE NUMBER OF 100 USEC CLOCK TICKS REMAINING 1202 / WHEN THIS CODE IS REACHED BEFORE THE NEXT UPDATE WOULD 1203 / BEGIN. TURNS OUT THAT ROUGHLY 2/3 OF THE CPU IS LEFT 1204 / OVER SHOULD ANYONE WANT TO DO ANYTHING VERY FANCY. 1205 / 1206 1207 1208 001647 1104 FINISH, TAD GAMOVR /IS THIS THE VICTORY LAP OR WHAT? 1209 001650 7640 SZA CLA 1210 001651 5661 JMP I ENDGAM /YES, GO TO PUT UP THE MESSAGE 1211 001652 1140 TAD M400 /MOVE THE BEAM OFF SCREEN 1212 001653 6313 DYC DYL 1213 001654 7300 CLA CLL 1214 001655 6303 DXC DXL 1215 001656 1074 TAD INTCNT /PICK UP THE COUNT 1216 001657 7041 CIA 1217 001660 5260 JMP . 1218 1219 001661 2527 ENDGAM, JOBLOP 1220 1221 1222 1223 001662 1113 EXPIRE, TAD BUFTMP /HERE TO ADVANCE THE BUFFER 1224 001663 1116 TAD P5 /POINTER TO THE NEXT PROJECTILE 1225 001664 3113 DCA BUFTMP /UNLESS THE END 1226 001665 1113 TAD BUFTMP /OF THE BUFFER 1227 001666 1273 TAD BUFLIM /IS REACHED 1228 001667 7640 SZA CLA /IN WHICH CASE 1229 001670 5204 JMP PROLOP /IT 1230 001671 5247 JMP FINISH /QUITS 1231 1232 001672 7501 BUFST, DISBUF+101 1233 001673 0203 BUFLIM, -DISBUF-175 1234 001674 2000 CHKOUT, CHECK 1235 1236 001675 0000 RESE1, 0 /THIS IS CALLED TO SET THE POINTER 1237 001676 1323 TAD MRES /(AUTO16) TO THE NEXT FREE SLOT 1238 001677 3324 DCA RESCNT /FOR A PROJECTILE LAUNCH. 12 POSSIBLE 1239 1240 001700 1325 RESLOP, TAD RESPNT /MOVE THE POINTER TO THE NEXT SLOT 1241 001701 1116 TAD P5 1242 001702 3325 DCA RESPNT 1243 001703 1325 TAD RESPNT /RESTE IF AT END OF BUFFER 1244 001704 1273 TAD BUFLIM 1245 001705 7640 SZA CLA 1246 001706 5311 JMP RESCON 1247 001707 1272 TAD BUFST 1248 001710 3325 DCA RESPNT 1249 1250 001711 1725 RESCON, TAD I RESPNT /FIND A HOLE YET? 1251 001712 7650 SNA CLA 1252 001713 5317 JMP RESFND /YES, SET UP AUTO16 1253 001714 2324 ISZ RESCNT /NO COUNT 1254 001715 5300 JMP RESLOP /AND TRY AGAIN 1255 001716 7402 HLT /NO HOLES AT ALL? 1256 1257 001717 7040 RESFND, CMA /BACK THE POINTER FOR AUTO INDEXING 1258 001720 1325 TAD RESPNT 1259 001721 3016 DCA AUTO16 1260 001722 5675 JMP I RESE1 1261 1262 001723 7764 MRES, -14 1263 001724 0000 RESCNT, 0 1264 001725 0000 RESPNT, 0 1265 1266 001726 0000 SETBUF, 0 1267 001727 7040 CMA /THIS ROUTINE IS CALLED FROM THE 1268 001730 1272 TAD BUFST /STARTING SEQUENCE TO INITIALIZE ALL 1269 001731 3016 DCA AUTO16 /THE BUFFER POINTERS AND SO ON 1270 001732 1272 TAD BUFST 1271 001733 3113 DCA BUFTMP 1272 001734 1272 TAD BUFST 1273 001735 3325 DCA RESPNT 1274 001736 1272 TAD BUFST 1275 001737 3347 DCA SETPNT 1276 001740 3747 SETLOP, DCA I SETPNT 1277 001741 2347 ISZ SETPNT 1278 001742 1347 TAD SETPNT 1279 001743 1273 TAD BUFLIM 1280 001744 7640 SZA CLA 1281 001745 5340 JMP SETLOP 1282 001746 5726 JMP I SETBUF 1283 1284 001747 0000 SETPNT, 0 1285 1286 1287 / 1288 / THIS HERE NOW THING CHECKS THE COORDINATES OF THE MOST RECENTLY 1289 / DISPLAYED PROJECTILE AGAINST THOSE OF THE SHIPS ON THE SCREEN. 1290 / IF WITH A COLLISION LIMIT A HIT IS RECORDED AND THE LIFE 1291 / COUNT OF THE PROJECTILE ZEROED TO REMOVE IT. A HIT SHIP 1292 / IS SUITABLY FLAGGED 1293 / 1294 1295 *2000 1296 1297 002000 0000 CHECK, 0 /HERE TO TEST FOR A PROJECTILE HIT 1298 002001 1022 TAD ONEFLG /CANT HIT SOMETHING IN HYPERSPACE 1299 002002 7640 SZA CLA 1300 002003 5232 JMP CHECK2 1301 002004 1020 TAD ONEOUT /OR SOMETHING THAT'S BEEN HIT 1302 002005 7640 SZA CLA 1303 002006 5232 JMP CHECK2 1304 1305 002007 1110 TAD PROX /CHECK X COORDINATES OF SHIP ONE 1306 002010 7041 CIA /AND PROJECTILE 1307 002011 1026 TAD ONEPEX /THIS SORT OF THING IS WHY THE 1308 002012 7510 SPA /COORDINATES HAVE TO BE MAINTAINED TO 12 1309 002013 7041 CIA /BITS 1310 002014 1264 TAD LIMIT /CLOSE ENOUGH? 1311 002015 7700 SMA CLA 1312 002016 5232 JMP CHECK2 /IF X ISN' CLOSE ENOUGH THEN NO HIT 1313 002017 1111 TAD PROY /X WAS CLOSE ENOUGH, HOW ABOUT Y? 1314 002020 7041 CIA 1315 002021 1027 TAD ONEPEY 1316 002022 7510 SPA 1317 002023 7041 CIA 1318 002024 1264 TAD LIMIT 1319 002025 7700 SMA CLA 1320 002026 5232 JMP CHECK2 /NO HIT 1321 1322 002027 1107 TAD MEXP /DEPOSIT EXPLOSION COUNT IN ONEOUT 1323 002030 3020 DCA ONEOUT /ALL THAT IS NECESSARY 1324 002031 4265 JMS CUTOUT /REMOVE PROJECTILE 1325 1326 1327 1328 002032 1035 CHECK2, TAD TWOFLG /NO HIT ON NUMBER ONE, TRY NUMBER TWO 1329 002033 7640 SZA CLA 1330 002034 5600 JMP I CHECK /BUT NOT IF IN HYPERSPACE 1331 002035 1033 TAD TWOOUT /OR IF ALREADY HIT 1332 002036 7640 SZA CLA 1333 002037 5600 JMP I CHECK 1334 1335 002040 1110 TAD PROX /CHECK X'S FIRST 1336 002041 7041 CIA 1337 002042 1041 TAD TWOPEX 1338 002043 7510 SPA /GET ABSOLUTE VALUE OF DIFFERENCE 1339 002044 7041 CIA 1340 002045 1264 TAD LIMIT /AND TEST MAGNITUDE AGAINST PROXIMITY 1341 002046 7700 SMA CLA /LIMIT 1342 002047 5600 JMP I CHECK /NOWHERE NEAR CLOSE 1343 1344 002050 1111 TAD PROY /NYAH, NYAH 1345 002051 7041 CIA /TRY THE Y'S 1346 002052 1042 TAD TWOPEY 1347 002053 7510 SPA 1348 002054 7041 CIA /ABSOLUTE VALUE OF DIFFERENCE 1349 002055 1264 TAD LIMIT 1350 002056 7700 SMA CLA 1351 002057 5600 JMP I CHECK /CLEAN MISS! 1352 1353 002060 1107 TAD MEXP /HIT ON TWO - END EVERYTHING BY SETTING 1354 002061 3033 DCA TWOOUT /TWOOUT TO NON-ZERO EXPLOSION COUNT 1355 002062 4265 JMS CUTOUT 1356 002063 5600 JMP I CHECK /EXIT AFTER DESTOYING PROJECTILE 1357 1358 002064 7660 LIMIT, -120 /PROXIMITY LIMIT FOR WHAT CONSTITUTES A HIT 1359 1360 002065 0000 CUTOUT, 0 /THIS ROUTINE ZEROES OUT THE MOST RECENTLY 1361 002066 1132 TAD M4 /DISPLAYED PROJECTILE BY ZEROEING THE 1362 002067 1113 TAD BUFTMP /COUNT 1363 002070 3273 DCA CUTPNT 1364 002071 3673 DCA I CUTPNT 1365 002072 5665 JMP I CUTOUT 1366 1367 002073 0000 CUTPNT, 0 1368 1369 1370 / 1371 / THIS ROUTINE IS CALLED TO TEST FOR A COLLISION BETWEEN THE 1372 / TWO SHIPS. THE COORDINATES OF BOTH ARE COMPARED 1373 / AND IFF SUFFICIENTLY CLOSE BOTH ARE DESTROYED BY SETTING 1374 / THEIR EXPLOSION COUNTS NON-ZERO. 1375 / 1376 1377 1378 002074 0000 COLLID, 0 /HERE TO TEST FOR COLLISION 1379 002075 1022 TAD ONEFLG /NO TEST IF EITHER SHIP IS IN 1380 002076 7640 SZA CLA /HYPERSPACE OR EXPLODING 1381 002077 5674 JMP I COLLID 1382 002100 1035 TAD TWOFLG 1383 002101 7640 SZA CLA 1384 002102 5674 JMP I COLLID 1385 002103 1020 TAD ONEOUT 1386 002104 7640 SZA CLA 1387 002105 5674 JMP I COLLID 1388 002106 1033 TAD TWOOUT 1389 002107 7640 SZA CLA 1390 002110 5674 JMP I COLLID 1391 1392 002111 1026 TAD ONEPEX /BOTH SHIPS AVAILABLE FOR COLLISION 1393 002112 7041 CIA /CHECK X COORDINATES FIRST 1394 002113 1041 TAD TWOPEX 1395 002114 7510 SPA /GET ABSOLUTE VALUE OF DIFFERENCE 1396 002115 7041 CIA 1397 002116 1336 TAD COLLIM /CLOSE ENOUGH? 1398 002117 7700 SMA CLA 1399 002120 5674 JMP I COLLID /NOPE, FORGET IT 1400 1401 002121 1027 TAD ONEPEY /YES, NOW TRY THE Y COORDINATES 1402 002122 7041 CIA 1403 002123 1042 TAD TWOPEY 1404 002124 7510 SPA 1405 002125 7041 CIA /GET MAGNITUDE ONLY 1406 002126 1336 TAD COLLIM 1407 002127 7700 SMA CLA /CLOSE ENOUGH? 1408 002130 5674 JMP I COLLID 1409 002131 1107 TAD MEXP /YES, SET BOTH EXPLOSION COUNTS 1410 002132 3020 DCA ONEOUT 1411 002133 1107 TAD MEXP 1412 002134 3033 DCA TWOOUT 1413 002135 5674 JMP I COLLID 1414 1415 002136 7500 COLLIM, -300 1416 1417 / 1418 / THIS ROUTINE IS CALLED TO SET ONE OF THE TWO SHIPS INTO 1419 / HYPERSPACE. ON ENTRY THE AC=-1 FOR SHIP #1, 0 FOR SHIP 1420 / NUMBER 2. THE LOCATION CLOCK IS USED FOR A RANDOM 1421 / ADDRESS POINTER FROM WHICH WILL BE DRAWN THE 1422 / VARIOUS PARAMETERS FOR REENTRY. 1423 / 1424 1425 *2200 1426 1427 002200 3253 HYPSET, DCA RTNFLG /HERE WITH AC=-1 OR 0 1428 002201 1253 TAD RTNFLG /SET UP LIST POINTER 1429 002202 7640 SZA CLA 1430 002203 1251 TAD ONEDIF /TO APPROPRIATE SHIP FILE 1431 002204 1252 TAD TWOLST 1432 002205 3015 DCA AUTO15 1433 1434 002206 1075 TAD CLOCK /SET UP "RANDOM NUMBER GENERATOR" 1435 002207 3017 DCA AUTO17 1436 002210 1417 TAD I AUTO17 /PICK UP FIRST THE AMOUNT OF TIME 1437 002211 0250 AND TIMOUT /OUT OF NOMAL SPACE LIMITED TO -777 1438 002212 7041 CIA /UPDATE CYCLES ( ABOUT 15 SECONDS) 1439 002213 3415 DCA I AUTO15 /AND STORE IN ONEOUT OR TWO OUT 1440 1441 002214 1417 TAD I AUTO17 /THE NEXT RANDOM NUMBER BECOMES THE 1442 002215 4500 JMS I THEADJ /ANGLE OR ORIENTATION ON REENTRY 1443 002216 3415 DCA I AUTO15 1444 002217 1417 TAD I AUTO17 /AND THE NEXT BECOMES THE X VELOCITY 1445 002220 4260 JMS VEESET /COMPONENT 1446 002221 3415 DCA I AUTO15 1447 002222 1417 TAD I AUTO17 /AND THEN THE Y COMPONENT 1448 002223 4260 JMS VEESET 1449 002224 3415 DCA I AUTO15 1450 002225 1417 TAD I AUTO17 1451 002226 3415 DCA I AUTO15 1452 1453 002227 1417 TAD I AUTO17 1454 002230 3415 DCA I AUTO15 1455 1456 002231 1417 TAD I AUTO17 /FINALLY SEE IF RETURN WILL BE SUCCESSFLY 1457 002232 0250 AND TIMOUT 1458 002233 1257 TAD MHYP /ABOUT 3/4 CHANCE 1459 002234 7700 SMA CLA 1460 002235 5245 JMP HYPRET /OK 1461 002236 1253 TAD RTNFLG /THIS IS THE ONE TIME IN FOUR. SET 1462 002237 7640 SZA CLA /UP FOR EXPLOSION ON REENTRY 1463 002240 1251 TAD ONEDIF 1464 002241 1256 TAD OUTLOC 1465 002242 3260 DCA VEESET 1466 002243 1107 TAD MEXP 1467 002244 3660 DCA I VEESET 1468 1469 002245 2253 HYPRET, ISZ RTNFLG 1470 002246 5655 JMP I TWORTN 1471 002247 5654 JMP I ONERTN 1472 1473 002250 0777 TIMOUT, 777 1474 002251 7765 ONEDIF, ONEFLG-TWOFLG 1475 002252 0034 TWOLST, TWOFLG-1 1476 002253 0000 RTNFLG, 0 1477 002254 0600 ONERTN, TWOUP 1478 002255 1000 TWORTN, ONESET 1479 002256 0033 OUTLOC, TWOOUT 1480 002257 7600 MHYP, -200 1481 1482 1483 1484 002260 0000 VEESET, 0 /HERE TO LIMIT VELOCITY COMPONENTS 1485 002261 7100 CLL 1486 002262 7510 SPA /GET MAGNITUDE 1487 002263 7020 CML 1488 002264 0270 AND HM177 /LIMIT TO 177 1489 002265 7530 SZL CLL 1490 002266 7041 CIA 1491 002267 5660 JMP I VEESET /AND EXIT 1492 1493 002270 0177 HM177, 177 1494 1495 002271 7300 ONEEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER ONE AS 1496 002272 1023 TAD ONETHE /AN EXPLOSION 1497 002273 1333 TAD INCONE /FIRST ROTATE IT BY A GOOD DOLLOP 1498 002274 3023 DCA ONETHE 1499 002275 4732 JMS I IXPDIS /THEN CALL THE EXPLOSION GENERATOR 1500 002276 2020 ISZ ONEOUT /DONE WITH THE EXPLOSION? 1501 002277 5727 JMP I NOWTWO /NO, NORMAL RETURN 1502 1503 002300 7001 IAC /YES, SET INTO PSEUDO HYPER SPACE 1504 002301 3022 DCA ONEFLG 1505 002302 7001 IAC /DISABLE RETURN FROM HYPER SPACE 1506 002303 3032 DCA ONEFIN 1507 1508 002304 1045 TAD TWOFIN /IS NUMBER TWO STILL AROUND? 1509 002305 7650 SNA CLA 1510 002306 5727 JMP I NOWTWO /YES, RETURN 1511 002307 5731 JMP I TIEUP /NO, TIE BALL GAME 1512 1513 1514 002310 7300 TWOEXP, CLA CLL /HERE TO DISPLAY SHIP NUMBER TWO 1515 002311 1036 TAD TWOTHE /AS AN EXPLOSION. BASH IT AROUND 1516 002312 1334 TAD INCTWO 1517 002313 3036 DCA TWOTHE 1518 002314 4732 JMS I IXPDIS /THEN DISPLAY IT 1519 002315 2033 ISZ TWOOUT /DONE WITH EXPLOSION? 1520 002316 5730 JMP I NOWPRO /NO, NORMAL RETURN 1521 1522 002317 7001 IAC /YES, SEND INTO PSEUDO HYPER SPACE 1523 002320 3035 DCA TWOFLG 1524 002321 7001 IAC /DISABLE NORMAL RETURN FROM HYPERSPACE 1525 002322 3045 DCA TWOFIN 1526 /CHECK NUMBER ONE 1527 002323 1032 TAD ONEFIN 1528 002324 7640 SZA CLA /STILL ALIVE AND WELL? 1529 002325 5731 JMP I TIEUP /NO, TIE GAME 1530 002326 5730 JMP I NOWPRO /YES, CONTINUE ON 1531 002327 1436 NOWTWO, TWODIS 1532 002330 1600 NOWPRO, PRODIS 1533 002331 2523 TIEUP, NOWIN 1534 002332 2400 IXPDIS, EXPDIS 1535 002333 0055 INCONE, 55 1536 002334 0055 INCTWO, 55 1537 1538 1539 / 1540 / HERE TO DISPLAY THE FIGURE POINTED TO BY AUTO10 AS 1541 / AN EXPLOSION. THIS WORKS THE SAME WAY AS THE NORMAL 1542 / DISPLAY ROUTINE EXCEPT THAT THE COORDINATE INCREMENTS 1543 / ARE INVERTED TURNING THE FIGURE INSIDE OUT FOR S 1544 / A SORT OF CLOBBY EXPLOSION. 1545 / 1546 1547 *2400 1548 1549 002400 0000 EXPDIS, 0 /HERE TO DISPLAY A FIGURE INSIDE OUT 1550 002401 1410 TAD I AUTO10 /WITH THE POINTERS AND COUNTS ALREADY 1551 002402 3050 DCA XTWODS /SET UP BY FILDIS OR TWODIS 1552 002403 1410 TAD I AUTO10 /STICK NEXT TWO POINTS INTO LINE 1553 002404 3051 DCA YTWODS 1554 1555 002405 1050 TAD XTWODS 1556 002406 7041 CIA /CALCULATE INCREMENT THE WRONG WAY 1557 002407 1046 TAD XONEDS 1558 002410 3052 DCA DIXTEM /AND STORE 1559 002411 1051 TAD YTWODS 1560 002412 7041 CIA 1561 002413 1047 TAD YONEDS 1562 002414 3053 DCA DIYTEM /SAME FOR Y 1563 1564 002415 1132 TAD M4 /4 DOTS IN THE VECTOR" 1565 002416 3054 DCA DISCNT /COULD HAVE CALLED THE OTHER 1566 /VECTOR GENERATOR I SUPPOSE 1567 002417 1046 EXPLOP, TAD XONEDS 1568 002420 1052 TAD DIXTEM /ADD X AND Y INCREMENTS TO THE RUNNING 1569 002421 3046 DCA XONEDS /TOTALS AND DISPLAY THE RUNNING 1570 002422 1047 TAD YONEDS /TOTALS NORMAL SIZE 1571 002423 1053 TAD DIYTEM 1572 002424 3047 DCA YONEDS 1573 1574 002425 1046 TAD XONEDS 1575 002426 7012 RTR /COULD MAKE TWICE AS BIG BY NOP-ING 1576 002427 7010 RAR /THE RAR'S BUT THE SCREEN IS SMALL ENOUGH 1577 002430 6303 DXC DXL /AS IT IS 1578 002431 7200 CLA 1579 002432 1047 TAD YONEDS 1580 002433 7012 RTR 1581 002434 7010 RAR 1582 002435 6317 DYC DYL DIS 1583 002436 7200 CLA 1584 002437 2054 ISZ DISCNT /DONE 4 DOTS? 1585 002440 5217 JMP EXPLOP /NO 1586 1587 002441 2011 ISZ AUTO11 /DONE ALL VECTORS IN THE FILE? 1588 002442 7410 SKP 1589 002443 5600 JMP I EXPDIS /YES, EXIT 1590 1591 002444 1050 TAD XTWODS /NO SWAP TO NEXT PAIR OF POINTS 1592 002445 3046 DCA XONEDS 1593 002446 1051 TAD YTWODS 1594 002447 3047 DCA YONEDS 1595 002450 5201 JMP EXPDIS+1 1596 1597 1598 1599 / 1600 / VEELIM IS THE SCALING ROUTINE FOR VELOCITY COMPONENTS. 1601 / THE COMPONENTS ARE SCALED TO REMAIN IN THE RANGE 140 1602 / TO -140. THIS IS NECESSARY TO AVOID ASTRONOMICAL SPPED 1603 / BUILDUP ON THE SMALL SCREEN. UNFORTUNATELY THE X AND Y 1604 / COMPONENTS ARE SCALED SEPARATELY WHICH GIVES SLIGHT BUT 1605 / NOTICABLE DISTORTIONS IN DIAGONAL FLIGHT PATHS. IN THE 1606 / NORMAL HEAT OF THE BATTLE NO ONE WILL REALLY NOTICE. 1607 / 1608 1609 1610 002451 0000 VEELIM, 0 /ENTER TO SCALE VELOCITY HELD IN 1611 002452 3272 DCA VEEHLD /AC 1612 002453 1272 TAD VEEHLD 1613 002454 7500 SMA /BRANCH FOR POSITIVE OR NEGATIV 1614 002455 5263 JMP VEEPOS 1615 002456 1274 TAD VEEMAX 1616 002457 7700 SMA CLA /GREATER THAN MAXIMUM POSITIVE? 1617 002460 5270 JMP VEECLR /NO 1618 002461 1273 TAD VEEMIN /I MEAN MAXIMUM NEGATIVE - YES SET 1619 002462 5651 JMP I VEELIM /TO MAX NEGATIV 1620 1621 002463 1273 VEEPOS, TAD VEEMIN /GREATER THAN MAX? 1622 002464 7710 SPA CLA 1623 002465 5270 JMP VEECLR /NO 1624 002466 1274 TAD VEEMAX /YES SET TO MAX 1625 002467 5651 JMP I VEELIM 1626 1627 002470 1272 VEECLR, TAD VEEHLD /IT WAS IN RANGE ALL ALONG 1628 002471 5651 JMP I VEELIM 1629 1630 002472 0000 VEEHLD, 0 1631 002473 7640 VEEMIN, -140 1632 002474 0140 VEEMAX, 140 1633 1634 002475 0000 THEAJI, 0 /HERE TO ADJUST THE ANGLE TO A RANGE 1635 002476 7500 SMA /0-550 OR 0-360 DEGREES. THIS IS 1636 002477 5302 JMP .+3 /NECESSARY TO INSURE THAT PUSHDOWN OVERFLOW 1637 002500 1130 TAD P550 /WILL NOT HAPPEN IN THE SINE AND COSINE 1638 002501 5276 JMP .-3 /ROUTINES. THIS SIMPLY TAKES THE AC 1639 002502 1141 TAD M550 /MODULO 360 AND EXITS 1640 002503 7500 SMA 1641 002504 5302 JMP .-2 1642 002505 1130 TAD P550 /FOLLOW IT THROUGH AND SEE IF IT DOESN'T 1643 002506 5675 JMP I THEAJI 1644 1645 1646 / 1647 / ONE OF THESE ROUTINE IS ENTERED WHEN A WINNER IS DECLARED. 1648 / THE ADDRESS OF THE VICTORY MESSAGE IS PLACED IN MESS AND 1649 / THE GAMOVR FLAG SET TO CAUSE A BRANCH TO JOBLOP WHEN THE 1650 / DISPLAY CYCLE IS COMPLETED. THE ROUTINE WILL THEN DISPLAY 1651 / THE APPROPRIATE MESSAGE OVER THE REMAINING SHIPS IF 1652 / ANY UNTIL THE KEYBOARD IS MOLESTED OR THE CLOCK RUNS OUT 1653 / AND THE NEXT DISPLAY UPDATE CYCLE IS SET. AT ANY RATE THE 1654 / PROGRAM WILL REACH HERE ONLY WHEN SOMEONE HAS BITTEN THE 1655 / INTERGALACTIC DUST. 1656 / 1657 1658 1659 002507 0000 ONEWIN, 0 /THIS IS CALLED WHEN TWOFIN IS SET 1660 002510 1342 TAD MES1 /AND ONE FIN IS NOT. SET ONE TO VICTOR 1661 002511 3347 DCA MESS /AND SET GAMOVR FLAG 1662 002512 7001 IAC 1663 002513 3104 DCA GAMOVR 1664 002514 5707 JMP I ONEWIN /THEN RETURN TO UPDATE CYCLE 1665 1666 002515 0000 TWOWIN, 0 /THIS IS CALLED WHEN ONEFIN IS SET 1667 002516 1343 TAD MES2 /AND TWO FIN IS NOT 1668 002517 3347 DCA MESS /SET ALSO GAMOVR 1669 002520 7001 IAC 1670 002521 3104 DCA GAMOVR 1671 002522 5715 JMP I TWOWIN 1672 1673 002523 1345 NOWIN, TAD MES4 /GET HERE WHEN BOTH ONEFIN AND TWOFIN 1674 002524 3347 DCA MESS /ARE SET . 1675 002525 7001 IAC 1676 002526 3104 DCA GAMOVR /NOBODY EVER REALLY WINDS 1677 /UP THE WINNER IN THESE THINGS 1678 002527 6325 JOBLOP, DSB 1 /THIS IS ENTERED FROM FINISH WHEN 1679 002530 1341 TAD MES0 /GAMOVR IS SET AND SERVES TO DISPLAY 1680 002531 4477 JMS I MESOUT /THE VICTORY MESSAGE ON THE SCREEN 1681 002532 1347 TAD MESS /USING THE CHARACTER GENERATOR SOMEWHAT 1682 002533 4477 JMS I MESOUT /FURTHER ON UNTIL THE GAME IS RESTARTED 1683 002534 1346 TAD MES5 /OR UNTIL THE INTERRUPT COUNT OVERFLOWS 1684 002535 4477 JMS I MESOUT /AND THE UPDATE CYCLE IS RESTARTED 1685 002536 1344 TAD MES3 1686 002537 4477 JMS I MESOUT 1687 002540 5327 FINITO, JMP JOBLOP 1688 1689 002541 7337 MES0, MESS0 1690 002542 7344 MES1, MESS1 1691 002543 7346 MES2, MESS2 1692 002544 7350 MES3, MESS3 1693 002545 7353 MES4, MESS4 1694 002546 7340 MES5, MESS5 1695 002547 0000 MESS, 0 1696 1697 1698 / 1699 / THE FOLLOWING ARE THE SINE AND COSINE ROUTINES CUSTOMIZED 1700 / FOR THIS PROGRAM FROM ANOTHER I WORKED ON. CALL EITHER 1701 / SINE OR COSINE WITH ANGLE IN DEGREES IN AC. THE ARGUEMENT 1702 / IS REDUCED THROUGH RECURSION UNTIL BETWEEN 0-89 DEGREES 1703 / AND THEN A TABLE LOOKUP DONE TO OBTAIN THE VALUE. IT TAKES 1704 / UP A FAIR AMOUNT OF SPACE BUT IT WORKS JUST FASTER 1705 / THAN SHEEP. THE COSINE CALL JUST TRANSFORMS THE ARGUEMENT 1706 / THROUGH SOME TRIGONOMETRIC GARBAGE AND CALLS THE SINE 1707 / ROUTINE. NOTE THAT CALLING EITHER ROUTINE WITH TOO 1708 / LARGE AN ARGUEMENT WILL CAUSE PUSHDOWN OVERFLOW AND THEN 1709 / ALL HELL WILL BREAK LOOSE. THE ORIGINAL ROUTINE FROM WHICH 1710 / THIS WAS STOLEN HAD FULL WORD PRECISION. 1711 / 1712 1713 *6400 1714 1715 006400 0000 SINEIN, 0 /I REALLY CANT BRING MYSELF TO COMMENT 1716 006401 3252 DCA SINARG /THIS. IT'S VERY STRAIGHFORWARD 1717 006402 1200 TAD SINEIN 1718 006403 3653 DCA I SINPSH 1719 006404 2253 ISZ SINPSH 1720 006405 1252 TAD SINARG 1721 006406 7440 SZA 1722 006407 5217 JMP SINNG2 1723 1724 006410 7340 SINPOP, CLA CLL CMA 1725 006411 1253 TAD SINPSH 1726 006412 3253 DCA SINPSH 1727 006413 1653 TAD I SINPSH 1728 006414 3200 DCA SINEIN 1729 006415 1252 TAD SINARG 1730 006416 5600 JMP I SINEIN 1731 1732 006417 7500 SINNG2, SMA 1733 006420 5226 JMP SINPOS 1734 006421 7041 CIA 1735 006422 4200 JMS SINEIN 1736 1737 006423 7041 SINNEG, CIA 1738 006424 3252 DCA SINARG 1739 006425 5210 JMP SINPOP 1740 1741 006426 1136 SINPOS, TAD M264 1742 006427 7510 SPA 1743 006430 5232 JMP .+2 1744 006431 5222 JMP SINNEG-1 1745 006432 1125 TAD P132 1746 006433 7510 SPA 1747 006434 5244 JMP SINELK 1748 006435 7640 SZA CLA 1749 006436 5241 JMP .+3 1750 006437 1122 TAD P37 1751 006440 5224 JMP SINNEG+1 1752 1753 006441 1252 TAD SINARG 1754 006442 1136 TAD M264 1755 006443 5222 JMP SINNEG-1 1756 1757 006444 1125 SINELK, TAD P132 1758 006445 1262 TAD SINTAB 1759 006446 3200 DCA SINEIN 1760 006447 1600 TAD I SINEIN 1761 006450 3252 DCA SINARG 1762 006451 5210 JMP SINPOP 1763 1764 1765 1766 006452 0000 SINARG, 0 1767 006453 6454 SINPSH, SINLST 1768 006454 0000 SINLST, 0 1769 006455 0000 0 1770 006456 0000 0 1771 006457 0000 0 1772 006460 0000 0 1773 006461 0000 0 1774 1775 006462 6467 SINTAB, SINES-1 1776 1777 006463 0000 COSINI, 0 1778 006464 7041 CIA 1779 006465 1125 TAD P132 1780 006466 4200 JMS SINEIN 1781 006467 5663 JMP I COSINI 1782 1783 1784 1785 006470 0000 SINES, 00 /1 1786 006471 0001 01 /2 1787 006472 0001 01 /3 1788 006473 0002 02 /4 1789 006474 0002 02 /5 1790 006475 0003 03 /6 1791 006476 0003 03 /7 1792 006477 0004 04 /8 1793 006500 0005 05 /9 1794 006501 0005 05 /10 1795 006502 0006 06 /11 1796 006503 0006 06 /12 1797 006504 0007 07 /13 1798 006505 0007 07 /14 1799 006506 0010 10 /15 1800 006507 0010 10 /16 1801 006510 0011 11 /17 1802 006511 0011 11 /18 1803 006512 0012 12 /19 1804 006513 0012 12 /20 1805 006514 0013 13 /21 1806 006515 0013 13 /22 1807 006516 0014 14 /23 1808 006517 0015 15 /24 1809 006520 0015 15 /25 1810 006521 0016 16 /26 1811 006522 0016 16 /27 1812 006523 0017 17 /28 1813 006524 0017 17 /29 1814 006525 0020 20 /30 1815 006526 0020 20 /31 1816 006527 0020 20 /32 1817 006530 0021 21 /33 1818 006531 0021 21 /34 1819 006532 0022 22 /35 1820 006533 0022 22 /36 1821 006534 0023 23 /37 1822 006535 0023 23 /38 1823 006536 0024 24 /39 1824 006537 0024 24 /40 1825 006540 0025 25 /41 1826 006541 0025 25 /42 1827 006542 0025 25 /43 1828 006543 0026 26 /44 1829 006544 0026 26 /45 1830 006545 0027 27 /46 1831 006546 0027 27 /47 1832 006547 0027 27 /48 1833 006550 0030 30 /49 1834 006551 0030 30 /50 1835 006552 0030 30 /51 1836 006553 0031 31 /52 1837 006554 0031 31 /53 1838 006555 0031 31 /54 1839 006556 0032 32 /55 1840 006557 0032 32 /56 1841 006560 0032 32 /57 1842 006561 0033 33 /58 1843 006562 0033 33 /59 1844 006563 0033 33 /60 1845 006564 0033 33 /61 1846 006565 0034 34 /62 1847 006566 0034 34 /63 1848 006567 0034 34 /64 1849 006570 0035 35 /65 1850 006571 0035 35 /66 1851 006572 0035 35 /67 1852 006573 0035 35 /68 1853 006574 0035 35 /69 1854 006575 0036 36 /70 1855 006576 0036 36 /71 1856 006577 0036 36 /72 1857 006600 0036 36 /73 1858 006601 0036 36 /74 1859 006602 0036 36 /75 1860 006603 0037 37 /76 1861 006604 0037 37 /77 1862 006605 0037 37 /78 1863 006606 0037 37 /79 1864 006607 0037 37 /80 1865 006610 0037 37 /81 1866 006611 0037 37 /82 1867 006612 0037 37 /83 1868 006613 0037 37 /84 1869 006614 0037 37 /85 1870 006615 0037 37 /86 1871 006616 0037 37 /87 1872 006617 0037 37 /88 1873 006620 0037 37 /89 1874 1875 1876 1877 006621 0000 MULTI, 0 /THIS IS STANDARD SINGLE PRECISION 1878 006622 7100 CLL /MULTIPLY ROUTINE WHICH WAS ONCE 1879 006623 7510 SPA /USED. I'VE LEFT IT IN SINCE 1880 006624 7061 CMA CML IAC /THERE IS LOTS OF CORE LEFT OVER AND 1881 006625 3271 DCA MULMP1 /MAYBLE SOMEDAY I'LL NEED IT TO PUT 1882 006626 3272 DCA MULMP5 /IN A SUN OR SOMETHING. THIS IS THE 1883 006627 1621 TAD I MULTI /STANDARD DEC SUBROUTINE WITH DIFFERENT 1884 006630 7450 SNA /LABELS 1885 006631 5255 JMP MULPSN+2 1886 006632 7510 SPA 1887 006633 7061 CMA CML IAC 1888 006634 3273 DCA MULMP2 1889 006635 1270 TAD MULTHR 1890 006636 3274 DCA MULMP3 1891 1892 006637 1271 MULMP4, TAD MULMP1 1893 006640 7010 RAR 1894 006641 3271 DCA MULMP1 1895 006642 1272 TAD MULMP5 1896 006643 7430 SZL 1897 006644 1273 TAD MULMP2 1898 006645 7110 CLL RAR 1899 006646 3272 DCA MULMP5 1900 006647 2274 ISZ MULMP3 1901 006650 5237 JMP MULMP4 1902 006651 1271 TAD MULMP1 1903 006652 7010 RAR 1904 006653 7430 MULPSN, SZL 1905 006654 5261 JMP MULCMP 1906 006655 3271 DCA MULMP1 1907 006656 1272 TAD MULMP5 1908 006657 2221 MULMPZ, ISZ MULTI 1909 006660 5621 JMP I MULTI 1910 1911 006661 7141 MULCMP, CMA CLL IAC 1912 006662 3271 DCA MULMP1 1913 006663 1272 TAD MULMP5 1914 006664 7040 CMA 1915 006665 7430 SZL 1916 006666 7001 IAC 1917 006667 5257 JMP MULMPZ 1918 1919 006670 7764 MULTHR, 7764 1920 006671 0000 MULMP1, 0 1921 006672 0000 MULMP5, 0 1922 006673 0000 MULMP2, 0 1923 006674 0000 MULMP3, 0 1924 1925 1926 / 1927 / SHIFTR DIVIDES THE AC BY TWO WHETHER POSITIVE OR NEGATIVE 1928 / AND IS CALLED FROM VARIOUS PLACES. NOT ENTIRELY MYSTERIOUS 1929 / 1930 1931 1932 006675 0000 SHIFTR, 0 1933 006676 7100 CLL 1934 006677 7510 SPA 1935 006700 7021 CML IAC 1936 006701 7010 RAR 1937 006702 5675 JMP I SHIFTR 1938 1939 1940 / 1941 / POSCAL IS CALLED TO CALCULATE THE COORDINATE INCREMENTS 1942 / NECESSARY TO PRODUCE THE SHIP FIGURES. RATHER THAN DOING 1943 / A LOT OF EXPENSIVE MATH THIS DOES A QUICK PRODUCTION 1944 / OF 1, 2, AND 3 TIMES THE SIN AND COSINE VALUES FOUND 1945 / IN CALSIN AND CALCOS LEAVING THEM IN THE TABLE FOR 1946 / ONESET AND TWOSET. IF THE SCOPE WERE ANY BETTER 1947 / THIS PROBABLY WOULDN'T BE NEAR GOOD ENOUGH BUT.... 1948 / 1949 1950 006703 0000 POSCAL, 0 1951 006704 1063 TAD CALSIN 1952 1953 006705 3055 DCA T10SIN 1954 006706 1055 TAD T10SIN 1955 006707 7104 CLL RAL 1956 006710 3056 DCA T20SIN 1957 006711 1055 TAD T10SIN 1958 006712 1056 TAD T20SIN 1959 006713 3057 DCA T30SIN 1960 1961 006714 1064 TAD CALCOS 1962 1963 006715 3060 DCA T10COS 1964 006716 1060 TAD T10COS 1965 006717 7104 CLL RAL 1966 006720 3061 DCA T20COS 1967 006721 1060 TAD T10COS 1968 006722 1061 TAD T20COS 1969 006723 3062 DCA T30COS 1970 006724 5703 JMP I POSCAL 1971 1972 1973 *7000 1974 1975 /GENERAL PURPOSE SYMBOL GENERATOR 1976 / 1977 007000 0000 CHARS, 0 /ENTRY TO PLOT CHARACTER STRING 1978 007001 3330 DCA ADDR /STORE STRING ADDRESS 1979 007002 1730 TAD I ADDR /FETCH DOUBLE CHARACTER 1980 007003 7012 RTR /SHIFT 1981 007004 7012 RTR / FOR FIRST 1982 007005 7012 RTR / CHARACTER 1983 007006 4216 JMS CHAR /PLOT CHARACTER 1984 007007 7410 SKP /NORMAL RETURN -- SKIP 1985 007010 5600 JMP I CHARS /TERMINATION RETURN -- EXIT 1986 007011 1730 TAD I ADDR /RECALL DOUBLE CHARACTER 1987 007012 2330 ISZ ADDR /ADVANCE STRING ADDRESS 1988 007013 4216 JMS CHAR /PLOT CHARACTER 1989 007014 5202 JMP CHARS+2 /NORMAL RETURN -- REPEAT 1990 007015 5600 JMP I CHARS /TERMINATION RETURN -- EXIT 1991 / 1992 007016 0000 CHAR, 0 /ENTRY TO PLOT SINGLE CHARACTER 1993 007017 0334 AND K77 /MASK OUT UPPER BITS 1994 007020 7104 CLL RAL /MULTIPLY CODE BY TWO 1995 007021 1336 TAD TABLE /ADD TABLE BASE ADDRESS 1996 007022 3335 DCA POINT /CONSTRUCT POINTER TO 24-BIT CODE 1997 007023 7040 CMA /INITIALIZE COUNTER FOR 1998 007024 3332 DCA COUNT2 / TWO PLOT WORDS 1999 007025 1735 TAD I POINT /FETCH FIRST PLOT WORD 2000 007026 2335 ISZ POINT /INCREMENT POINTER FOR NEXT ONE 2001 007027 7450 SNA /SKIP IF NOT SPECIAL CHARACTER 2002 007030 5274 JMP SPCHAR /ELSE GO PROCESS IT 2003 007031 3327 DCA CURPLT /SAVE CURRENT PLOT BITS 2004 007032 1333 XPLOT, TAD KM6 /INITIALIZE 6-BIT 2005 007033 3331 DCA COUNT6 / COUNTER 2006 007034 1323 TAD YVALUE /RESET Y TEMPORARY 2007 007035 3326 DCA YTEMP / VALUE FOR CHARACTER 2008 007036 1322 TAD XVALUE /OUTPUT CURRENT 2009 007037 6303 DXC DXL / X-VALUE TO CRT 2010 007040 1324 TAD XINCR /INCREMENT 2011 007041 3322 DCA XVALUE / ABSCISSA 2012 007042 1327 YPLOT, TAD CURPLT /RECALL CURRENT PLOT BITS 2013 007043 7104 CLL RAL /GET NEXT BIT 2014 007044 3327 DCA CURPLT /SAVE REMAINING PLOT BITS 2015 007045 7420 SNL /SKIP IF POINT TO PLOT 2016 007046 5255 JMP CNTINU /ELSE JUMP AHEAD 2017 007047 1326 TAD YTEMP /OUTPUT CURRENT 2018 007050 6317 DYC DYL DIS / Y-VALUE TO CRT 2019 007051 7300 CLA CLL /CLEAR AC 2020 007052 1327 TAD CURPLT /RECALL CURRENT PLOT BITS 2021 007053 7650 SNA CLA /SKIP IF POINTS REMAINING 2022 007054 5263 JMP WRDEND /ELSE WORD IS FINISHED 2023 007055 1326 CNTINU, TAD YTEMP /INCREMENT TEMPORARY 2024 007056 1325 TAD YINCR / Y-VALUE FOR NEXT 2025 007057 3326 DCA YTEMP / CHARACTER STEP 2026 007060 2331 ISZ COUNT6 /SKIP IF 6 BITS PLOTTED 2027 007061 5242 JMP YPLOT /ELSE PLOT NEXT ONE 2028 007062 5232 JMP XPLOT /GO UPDATE X-VALUE 2029 007063 2332 WRDEND, ISZ COUNT2 /SKIP IF ANOTHER BIT WORD 2030 007064 5270 JMP EXIT /ELSE EXIT 2031 007065 1735 TAD I POINT /FETCH SECOND BIT WORD 2032 007066 7440 SZA /SKIP IF NO PLOT POINTS 2033 007067 5231 JMP XPLOT-1 /ELSE GO PLOT THEM 2034 007070 1322 EXIT, TAD XVALUE /INCREMENT ABSCISSA 2035 007071 1324 TAD XINCR / FOR SPACE BETWEEN 2036 007072 3322 DCA XVALUE / SYMBOLS 2037 007073 5616 JMP I CHAR /EXIT FROM CHAR 2038 / 2039 007074 1735 SPCHAR, TAD I POINT /FETCH TRANSFER VECTOR 2040 007075 3335 DCA POINT /STORE AS INDIRECT ADDRESS 2041 007076 5735 JMP I POINT /GO TO APPROPRIATE ROUTINE 2042 007077 1324 SPACE, TAD XINCR /FETCH BASIC ABSCISSA INCREMENT 2043 007100 7106 CLL RTL /MULTIPLY BY FOUR AND 2044 007101 5270 JMP EXIT / GO CREATE SPACE 2045 007102 1320 CRLF, TAD INITX /"CARRIAGE RETURN" RESETS X 2046 007103 3322 DCA XVALUE / TO ITS ORIGINAL VALUE 2047 007104 1325 LF, TAD YINCR /"LINE FEED" 2048 007105 7106 CLL RTL / DECREMENTS THE 2049 007106 7145 CLL CIA RAL / Y-VALUE BY 2050 007107 1323 TAD YVALUE / EIGHT SCALE 2051 007110 3323 DCA YVALUE / STEPS 2052 007111 5616 JMP I CHAR /EXIT FROM CHAR 2053 007112 1320 RESET, TAD INITX /"RESET" RESETS 2054 007113 3322 DCA XVALUE / X AND Y TO 2055 007114 1321 TAD INITY / THEIR ORIGINAL 2056 007115 5310 JMP RESET-2 / VALUES 2057 007116 2216 TERM, ISZ CHAR /TERMINATE CODE CAUSES 2058 007117 5616 JMP I CHAR / EXIT TO P+2 2059 / 2060 007120 0000 INITX, 0 /INITIAL X-VALUE 2061 007121 0327 INITY, 327 /INITIAL Y-VALUE 2062 007122 0000 XVALUE, 0 /CURRENT X-VALUE 2063 007123 0000 YVALUE, 0 /CURRENT Y-VALUE 2064 007124 0006 XINCR, 6 /BASIC X INCREMENT VALUE 2065 007125 0010 YINCR, 10 /BASIC Y INCREMENT VALUE 2066 007126 0000 YTEMP, 0 /TEMPORARY Y-VALUE 2067 007127 0000 CURPLT, 0 /CURRENT PLOT BITS 2068 007130 0000 ADDR, 0 /CURRENT STRING ADDRESS 2069 007131 0000 COUNT6, 0 /6-BIT COUNTER 2070 007132 0000 COUNT2, 0 /2-WORD COUNTER 2071 007133 7772 KM6, -6 /CONSTANT FOR COUNT6 2072 007134 0077 K77, 77 /CHARACTER CODE MASK 2073 007135 0000 POINT, 0 /TABLE POINTER 2074 / 2075 2076 / 2077 007136 7137 TABLE, .+1 /TABLE BASE ADDRESS 2078 007137 0000 0 /SPECIAL CHARACTER (00) 2079 007140 7116 TERM /TERMINATION CODE 2080 007141 7611 7611 / A 2081 007142 1176 1176 2082 007143 7745 7745 / B 2083 007144 4532 4532 2084 007145 3641 3641 / C 2085 007146 4122 4122 2086 007147 7741 7741 / D 2087 007150 4136 4136 2088 007151 7745 7745 / E 2089 007152 4541 4541 2090 007153 7705 7705 / F 2091 007154 0501 501 2092 007155 7741 7741 / G 2093 007156 5173 5173 2094 007157 7710 7710 / H 2095 007160 1077 1077 2096 007161 4177 4177 / I 2097 007162 4100 4100 2098 007163 2040 2040 / J 2099 007164 4037 4037 2100 007165 7714 7714 / K 2101 007166 2241 2241 2102 007167 7740 7740 / L 2103 007170 4040 4040 2104 007171 7702 7702 / M 2105 007172 0277 277 2106 007173 7706 7706 / N 2107 007174 3077 3077 2108 007175 7741 7741 / O 2109 007176 4177 4177 2110 007177 7705 7705 / P 2111 007200 0502 502 2112 007201 3641 3641 / Q 2113 007202 6176 6176 2114 007203 7715 7715 / R 2115 007204 2542 2542 2116 007205 2245 2245 / S 2117 007206 5122 5122 2118 007207 0177 177 / T 2119 007210 0100 100 2120 007211 3740 3740 / U 2121 007212 4037 4037 2122 007213 1720 1720 / V 2123 007214 4037 4037 2124 007215 7730 7730 / W 2125 007216 3077 3077 2126 007217 4136 4136 / X 2127 007220 3641 3641 2128 007221 0374 374 / Y 2129 007222 7403 7403 2130 007223 6151 6151 / Z 2131 007224 4543 4543 2132 007225 7741 7741 / [ 2133 007226 0000 0 2134 007227 0204 204 / \ 2135 007230 1020 1020 2136 007231 4177 4177 / ] 2137 007232 0000 0 2138 007233 0436 436 / ^ 2139 007234 0400 400 2140 007235 0000 0 /SPECIAL CHARACTER (37) 2141 007236 7112 RESET /RESET 2142 007237 0000 0 /SPECIAL CHARACTER (40) 2143 007240 7077 SPACE /SPACE 2144 007241 5600 5600 / ! 2145 007242 0000 0 2146 007243 0303 303 / " 2147 007244 0000 0 2148 007245 1477 1477 / # 2149 007246 7714 7714 2150 007247 2277 2277 / MARKER 2151 007250 2200 2200 2152 007251 2313 2313 / % 2153 007252 6462 6462 2154 007253 7777 7777 / BLOCK 2155 007254 7777 7777 2156 007255 0300 300 / ' 2157 007256 0000 0 2158 007257 3641 3641 / ( 2159 007260 0000 0 2160 007261 4136 4136 / ) 2161 007262 0000 0 2162 007263 4040 4040 / UNDERSCORE (52) 2163 007264 4040 4040 2164 007265 1034 1034 / + 2165 007266 1000 1000 2166 007267 0000 0 /SPECIAL CHARACTER (54) 2167 007270 7104 LF /LINE FEED 2168 007271 1010 1010 / - 2169 007272 1000 1000 2170 007273 4000 4000 / . 2171 007274 0000 0 2172 007275 2010 2010 / / 2173 007276 0402 402 2174 007277 3641 3641 / 0 2175 007300 4136 4136 2176 007301 4442 4442 / 1 2177 007302 7740 7740 2178 007303 4261 4261 / 2 2179 007304 5146 5146 2180 007305 2145 2145 / 3 2181 007306 5321 5321 2182 007307 1710 1710 / 4 2183 007310 1077 1077 2184 007311 4745 4745 / 5 2185 007312 4531 4531 2186 007313 7750 7750 / 6 2187 007314 5070 5070 2188 007315 6111 6111 / 7 2189 007316 0503 503 2190 007317 2255 2255 / 8 2191 007320 5522 5522 2192 007321 0705 705 / 9 2193 007322 0577 577 2194 007323 2400 2400 / : 2195 007324 0000 0 2196 007325 0000 0 /SPECIAL CHARACTER (73) 2197 007326 7102 CRLF /CARRIAGE RETURN; LINE FEED 2198 007327 1024 1024 / > 2199 007330 4200 4200 2200 007331 1212 1212 / = 2201 007332 1200 1200 2202 007333 4224 4224 / < 2203 007334 1000 1000 2204 007335 0255 255 / ? 2205 007336 0300 300 2206 2207 2208 / 2209 / HERE FOLLOW THE PACKED ASCII TEXTS FOR THE VARIOUS 2210 / VICTORY MESSAGES. PERSONS ADVENTEROUS TO FIND THIS MIGH CARE 2211 / TO TOGGLE IN SOME CUTE LITTLE MESSAGES OF THEIR OWN. 2212 / 2213 2214 007337 3773 MESS0, 3773 2215 007340 7340 MESS5, 7340 2216 007341 4040 4040 2217 007342 4040 4040 2218 007343 4000 4000 2219 2220 007344 1716 MESS1, 1716 2221 007345 0500 0500 2222 2223 007346 2427 MESS2, 2427 2224 007347 1700 1700 2225 2226 007350 2711 MESS3, 2711 2227 007351 1623 1623 2228 007352 4100 4100 2229 2230 007353 1617 MESS4, 1617 2231 007354 0217 0217 2232 007355 0431 0431 2233 007356 0000 0000 2234 2235 2236 *7400 2237 2238 007400 0000 DISBUF, 0 2239 2240 / THE DISPLAY BUFFERS BEGIN HERE AND EXTEND UP SOMEWHERE TO 2241 / AROUND 7575 OR SO. 2242 / 2243 / 2244 / 2245 / 2246 / 2247 2248 2249 2250 $ ACCFLG 0105 ACCPER 0106 ADDR 7130 AUTO10 0010 AUTO11 0011 AUTO12 0012 unreferenced AUTO13 0013 unreferenced AUTO14 0014 unreferenced AUTO15 0015 AUTO16 0016 AUTO17 0017 BUFLIM 1673 BUFSET 0302 BUFST 1672 BUFTMP 0113 CALCOS 0064 CALPOS 0072 CALSIN 0063 CCF 6052 CHAR 7016 CHARS 7000 CHECK 2000 CHECK2 2032 CHKOUT 1674 CLOCK 0075 CLXK 6352 CNTINU 7055 CODST 0265 COLDST 0251 COLIDE 1472 COLLID 2074 COLLIM 2136 COSINE 0066 COSINI 6463 COUNT2 7132 COUNT6 7131 CRF 6072 CRLF 7102 CURPLT 7127 CUTOUT 2065 CUTPNT 2073 DIS 6304 DISBUF 7400 DISCNT 0054 DISHFT 1535 DISLOP 1512 DISPLY 1475 DIXTEM 0052 DIYTEM 0053 DSB 6324 DXC 6301 DXL 6302 DYC 6311 DYL 6312 EMPTY 0003 unreferenced ENDGAM 1661 EXIT 7070 EXPDIS 2400 EXPIRE 1662 EXPLOP 2417 FILDIS 1400 FILONE 1421 FINISH 1647 FINITO 2540 unreferenced FLAM1 1052 unreferenced FLAM2 1263 unreferenced GAMOVR 0104 HM177 2270 HYPER 0076 HYPRET 2245 HYPSET 2200 IFILDS 1375 INCONE 2333 INCTWO 2334 INITX 7120 INITY 7121 INTACC 0346 INTBUS 0326 INTCNT 0074 INTGLH 0350 INTLNK 0347 INTRET 0340 INTSER 0313 INTTEM 0304 INTWRD 0073 IONEEX 1473 IONEST 0750 IPRODS 1464 ISHFT 0102 ITWOEX 1474 ITWOST 1153 ITWOUP 0552 IXPDIS 2332 JOBLOP 2527 K77 7134 KM6 7133 LF 7104 LFTHAF 0305 LIMIT 2064 LNC1FG 0553 LNC2FG 0751 M10 0134 M11 0135 unreferenced M200 0137 M264 0136 M4 0132 M400 0140 M550 0141 M6 0133 MES0 2541 MES1 2542 MES2 2543 MES3 2544 MES4 2545 MES5 2546 MESOUT 0077 MESS 2547 MESS0 7337 MESS1 7344 MESS2 7346 MESS3 7350 MESS4 7353 MESS5 7340 MEXP 0107 MHYP 2257 MRES 1723 MULCMP 6661 MULMP1 6671 MULMP2 6673 MULMP3 6674 MULMP4 6637 MULMP5 6672 MULMPZ 6657 MULPSN 6653 MULT 0067 unreferenced MULTHR 6670 MULTI 6621 NOWIN 2523 NOWPRO 2330 NOWTWO 2327 ODT1 0004 unreferenced ODT2 0005 unreferenced ODT3 0006 unreferenced OM14 0753 OM300 0555 ONECNT 0021 ONECON 1121 ONECOS 0031 ONEDIF 2251 ONEEXP 2271 ONEFIG 0437 ONEFIL 0114 ONEFIN 0032 ONEFLG 0022 ONELEF 0425 ONELNC 0507 unreferenced ONEMOV 0453 unreferenced ONEOK 0410 ONEOUT 0020 ONEPEX 0026 ONEPEY 0027 ONERTN 2254 ONERYT 0433 ONESET 1000 ONESIN 0030 ONETHE 0023 ONEUP 0400 ONEVEL 0472 ONEVEX 0024 ONEVEY 0025 ONEWIN 2507 ONEWN 0556 ONFG1 1154 ONFG2 1155 OP14 0752 OP300 0554 OTEN 6344 OUTLOC 2256 P10 0117 P100 0124 P132 0125 P17 0120 P20 0121 P200 0126 P37 0122 P3777 0131 unreferenced P40 0123 P400 0127 P5 0116 P550 0130 POINT 7135 POSCAL 6703 PRODIS 1600 PROLIF 0112 PROLOP 1604 PROX 0110 PROY 0111 RESCNT 1724 RESCON 1711 RESE1 1675 RESET 7112 RESET1 0103 RESFND 1717 RESLOP 1700 RESPNT 1725 RESTRT 0206 RSHIFT 0070 RTNFLG 2253 RYTHAF 0306 SETBUF 1726 SETLOP 1740 SETPNT 1747 SHIFTR 6675 SINARG 6452 SINE 0065 SINEIN 6400 SINELK 6444 SINES 6470 SINLST 6454 SINNEG 6423 SINNG2 6417 SINPOP 6410 SINPOS 6426 SINPSH 6453 SINTAB 6462 SKXK 6321 SPACE 7077 SPCHAR 7074 START 0200 unreferenced STRT1 0307 STRT2 0310 SWRD 0311 T10COS 0060 T10SIN 0055 T20COS 0061 T20SIN 0056 T30COS 0062 T30SIN 0057 TABLE 7136 TABLEN 0303 TERM 7116 THEADJ 0100 THEAJI 2475 TIEUP 2331 TIMOUT 2250 TWDLOP 1454 TWFG1 1376 TWFG2 1377 TWOCNT 0034 TWOCON 1332 TWOCOS 0044 TWODIS 1436 TWOEXP 2310 TWOFIG 0635 TWOFIL 0115 TWOFIN 0045 TWOFLG 0035 TWOLEF 0623 unreferenced TWOLNC 0705 unreferenced TWOLST 2252 TWOMOV 0651 unreferenced TWOOK 0610 TWOOUT 0033 TWOPEX 0041 TWOPEY 0042 TWORTN 2255 TWORYT 0631 TWOSET 1200 TWOSIN 0043 TWOTHE 0036 TWOUP 0600 TWOVEL 0670 TWOVEX 0037 TWOVEY 0040 TWOWIN 2515 TWOWN 0754 UPDATE 0250 VECTOR 0071 VEECLR 2470 VEEHLD 2472 VEELIM 2451 VEEMAX 2474 VEEMIN 2473 VEEPOS 2463 VEESCL 0101 VEESET 2260 WRDEND 7063 XINCR 7124 XONEDS 0046 XPLOT 7032 XRCL 6334 XRIN 6331 XROPT 0312 XTWODS 0050 XVALUE 7122 YINCR 7125 YONEDS 0047 YPLOT 7042 YTEMP 7126 YTWODS 0051 YVALUE 7123 ZTEN 6342