├── LICENSE ├── README.md ├── spacewar_pdp9_graphics2.lst └── spacewar_pdp9_graphics2.src /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PDP9-SPACEWAR 2 | Source code for PDP-9 SPACEWAR! binary found at Dartmouth College in the early 1970s 3 | -------------------------------------------------------------------------------- /spacewar_pdp9_graphics2.src: -------------------------------------------------------------------------------- 1 | .COND OFF,.COND,.INDEX,.TITLE,.STITL,.EJECT 2 | .INDEX ON 3 | .TITLE PDP-9/GRAPHIC II VERSION OF SPACEWAR 4 | .STITL ASSEMBLY CONTROL 5 | .PCC ON 6 | 7 | .PMC ON 8 | 9 | .DET ON 10 | 11 | .REF LNRSM,ON 12 | 13 | .REFMA ON 14 | 15 | .LIST ON 16 | 17 | .CRSM ON 18 | 19 | 20 | THREE: .EQU 3 21 | 22 | 23 | NUMSHP: .EQU 3 THREE SHIPS 24 | 25 | NUMBLT: .EQU 21. TWENTY ONE BULLETS 26 | 27 | NUMOBJ: .EQU NUMSHP+NUMBLT NUMBER OF OBJECTS IS SUM OF ABOVE 28 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- HARDWARE 29 | .LOC 0 30 | * 31 | * 32 | *PI SUBROUTINE 33 | * 34 | PI: XX 35 | JMP INT JUMP TO INTERUPT HANDLING ROUTINE 36 | * 37 | * 38 | *RESERVED WORDS 39 | * 40 | .BLOCK 6-2+1 RESERVED FOR PDP-9 SYSTEM PROGRAMS 41 | * 42 | * 43 | *CLOCK 44 | * 45 | CLOCK: .BLOCK 1 STORES REAL-TIME CLOCK COUNT 46 | * 47 | * 48 | *AUTOINDEX REGISTERS 49 | * 50 | X0: .BLOCK 1 AUTOINDEX REGISTER 0 51 | X1: .BLOCK 1 AUTOINDEX REGISTER 1 52 | X2: .BLOCK 1 AUTOINDEX REGISTER 2 53 | X3: .BLOCK 1 AUTOINDEX REGISTER 3 54 | X4: .BLOCK 1 AUTOINDEX REGISTER 4 55 | X5: .BLOCK 1 AUTOINDEX REGISTER 5 56 | X6: .BLOCK 1 AUTOINDEX REGISTER 6 57 | X7: .BLOCK 1 AUTOINDEX REGISTER 7 58 | * 59 | * 60 | *CAL SUBROUTINE 61 | * 62 | XX 63 | HLT "HALT PROGRAM IMMEDIATELY UPON EXECUTION OF A CAL 64 | * 65 | * 66 | *RESERVED WORDS 67 | * 68 | .BLOCK 27-22+1 RESERVED FOR PDP-9 SYSTEM PROGRAMS 69 | * 70 | * 71 | *FOUR PAIRS OF WORD COUNTER/CURRENT ADDRESS REGISTERS FOR USE WITH DATA CHANNELS 0-3 72 | * 73 | .BLOCK 4*2 74 | * 75 | * 76 | *API ROUTINES 77 | * 78 | .BLOCK 32. 79 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- RESTART ADDRESSES 80 | * 81 | * 82 | *RESTART AT LOCATION 100 FOR NORMAL (?) SPACEWAR 83 | * 84 | JMP AGAIN 85 | * 86 | * 87 | *RESTART AT LOCATION 101 FOR RANDOM PLACEMENT OF THE SUN 88 | * 89 | JMP RNDSUN 90 | * 91 | * 92 | *RESTART AT LOCATION 102 TO PUT THE SUN BACK IN THE CENTER OF THE SCREEN 93 | * 94 | JMP CENTER 95 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- DISABLE TABLE 96 | .LOC 120 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 97 | 98 | .HEAD X 99 | 100 | DTAB: ... 101 | 102 | * 103 | * 104 | *DESTROY SHIP TOTALLY 105 | * 106 | 777777 "DESTROY SHIP TOTALLY 107 | 777777 "DESTROY SHIP TOTALLY 108 | * 109 | * 110 | *DISABLE BULLET-FIRING 111 | * 112 | 020000 "DISABLE BULLET-FIRING 113 | 020000 "DISABLE BULLET-FIRING 114 | 020000 "DISABLE BULLET-FIRING 115 | * 116 | * 117 | * 118 | *DISABLE THRUST 119 | * 120 | 040000 "DISABLE THRUST 121 | 040000 "DISABLE THRUST 122 | 040000 "DISABLE THRUST 123 | * 124 | * 125 | *DISABLE LEFT TURN 126 | * 127 | 200000 "DISABLE LEFT TURN 128 | 200000 "DISABLE LEFT TURN 129 | 200000 "DISABLE LEFT TURN 130 | 201000 "DISABLE LEFT TURN; TURN ON ANGULAR MOMENTUM 131 | * 132 | * 133 | *DISABLE RIGHT TURN 134 | * 135 | 100000 "DISABLE RIGHT TURN 136 | 100000 "DISABLE RIGHT TURN 137 | 100000 "DISABLE RIGHT TURN 138 | 101000 "DISABLE RIGHT TURN; TURN ON ANGULAR MOMENTUM 139 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- HANDICAP TABLE 140 | .LOC 140 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 141 | 142 | .HEAD X 143 | 144 | GRAVT: 4 "GRAVITY CONSTANT 145 | 146 | THRUS: LRSS 11. THRUST FACTOR 147 | 148 | ROLL: 48. "AMOUNT OF ROLL FORCE 149 | 150 | FUEL: -1536.-1 "FUEL SUPPLY FOR SHIPS 151 | 152 | BLNUM: -32.-1 "NUMBER OF BULLETS PER SHIP PER GAME 153 | 154 | BLVEL: LRSS 2 BULLET VELOCITY FACTOR 155 | 156 | BLTIM: -128.-1 "AMOUNT OF TIME THAT A BULLET LASTS 157 | 158 | BLINT: -12.-1 "INTERVAL THAT BULLETS CAN BE SHOT 159 | 160 | SUNSZ: -2560.-1 "SIZE OF THE SUN 161 | 162 | SHPSZ: -2048.-1 "SIZE OF THE SHIPS AND BULLETS 163 | 164 | WTIME: -64.-1 "AMOUNT OF TIME THAT A WARP LASTS 165 | 166 | STIME: -96.-1 "AMOUNT OF TIME THAT A WARP STAR LASTS 167 | 168 | DTIME: -128.-1 "AMOUNT OF TIME UNTIL NEXT POSSIBLE WARP 169 | 170 | WAREA: LRSS 0 HOW FAR FROM WHERE YOU WARP DO YOU COME BACK? 171 | 172 | WVELO: LRSS 5 HOW FAST ARE YOU GOING WHEN YOU COME BACK? 173 | 174 | WFACT: 040000 "WARP FACTOR 175 | 176 | FRICT: 400000 "FRICTION FACTOR 177 | 178 | TTIME: -262143.-1 "THRUST RESTORATION AFTER PARTIAL DAMAGE TIMER 179 | 180 | BTIME: -1024.-1 "BULLET RESTORATION AFTER PARTIAL DAMAGE TIMER 181 | 182 | LTIME: -262143.-1 "LEFT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 183 | 184 | RTIME: -262143.-1 "RIGHT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 185 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- DISABLE TABLE -- 1 186 | .LOC 220 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 187 | 188 | .HEAD 1 189 | 190 | DTAB: ... 191 | * 192 | * 193 | *DESTROY SHIP TOTALLY 194 | * 195 | 777777 "DESTROY SHIP TOTALLY 196 | 777777 "DESTROY SHIP TOTALLY 197 | * 198 | * 199 | *DISABLE BULLET-FIRING 200 | * 201 | 020000 "DISABLE BULLET-FIRING 202 | 020000 "DISABLE BULLET-FIRING 203 | 020000 "DISABLE BULLET-FIRING 204 | * 205 | * 206 | * 207 | *DISABLE THRUST 208 | * 209 | 040000 "DISABLE THRUST 210 | 040000 "DISABLE THRUST 211 | 040000 "DISABLE THRUST 212 | * 213 | * 214 | *DISABLE LEFT TURN 215 | * 216 | 200000 "DISABLE LEFT TURN 217 | 200000 "DISABLE LEFT TURN 218 | 200000 "DISABLE LEFT TURN 219 | 201000 "DISABLE LEFT TURN; TURN ON ANGULAR MOMENTUM 220 | * 221 | * 222 | *DISABLE RIGHT TURN 223 | * 224 | 100000 "DISABLE RIGHT TURN 225 | 100000 "DISABLE RIGHT TURN 226 | 100000 "DISABLE RIGHT TURN 227 | 101000 "DISABLE RIGHT TURN; TURN ON ANGULAR MOMENTUM 228 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- HANDICAP TABLE -- 1 229 | .LOC 240 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 230 | 231 | .HEAD 1 232 | 233 | GRAVT: 4 "GRAVITY CONSTANT 234 | 235 | THRUS: LRSS 11. THRUST FACTOR 236 | 237 | ROLL: 48. "AMOUNT OF ROLL FORCE 238 | 239 | FUEL: -1536.-1 "FUEL SUPPLY FOR SHIPS 240 | 241 | BLNUM: -32.-1 "NUMBER OF BULLETS PER SHIP PER GAME 242 | 243 | BLVEL: LRSS 2 BULLET VELOCITY FACTOR 244 | 245 | BLTIM: -128.-1 "AMOUNT OF TIME THAT A BULLET LASTS 246 | 247 | BLINT: -12.-1 "INTERVAL THAT BULLETS CAN BE SHOT 248 | 249 | SUNSZ: -2560.-1 "SIZE OF THE SUN 250 | 251 | SHPSZ: -2048.-1 "SIZE OF THE SHIPS AND BULLETS 252 | 253 | WTIME: -64.-1 "AMOUNT OF TIME THAT A WARP LASTS 254 | 255 | STIME: -96.-1 "AMOUNT OF TIME THAT A WARP STAR LASTS 256 | 257 | DTIME: -128.-1 "AMOUNT OF TIME UNTIL NEXT POSSIBLE WARP 258 | 259 | WAREA: LRSS 0 HOW FAR FROM WHERE YOU WARP DO YOU COME BACK? 260 | 261 | WVELO: LRSS 5 HOW FAST ARE YOU GOING WHEN YOU COME BACK? 262 | 263 | WFACT: 040000 "WARP FACTOR 264 | 265 | FRICT: 400000 "FRICTION FACTOR 266 | 267 | TTIME: -262143.-1 "THRUST RESTORATION AFTER PARTIAL DAMAGE TIMER 268 | 269 | BTIME: -1024.-1 "BULLET RESTORATION AFTER PARTIAL DAMAGE TIMER 270 | 271 | LTIME: -262143.-1 "LEFT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 272 | 273 | RTIME: -262143.-1 "RIGHT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 274 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- DISABLE TABLE -- 2 275 | .LOC 320 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 276 | 277 | .HEAD 2 278 | 279 | DTAB: ... 280 | * 281 | * 282 | *DESTROY SHIP TOTALLY 283 | * 284 | 777777 "DESTROY SHIP TOTALLY 285 | 777777 "DESTROY SHIP TOTALLY 286 | * 287 | * 288 | *DISABLE BULLET-FIRING 289 | * 290 | 020000 "DISABLE BULLET-FIRING 291 | 020000 "DISABLE BULLET-FIRING 292 | 020000 "DISABLE BULLET-FIRING 293 | * 294 | * 295 | * 296 | *DISABLE THRUST 297 | * 298 | 040000 "DISABLE THRUST 299 | 040000 "DISABLE THRUST 300 | 040000 "DISABLE THRUST 301 | * 302 | * 303 | *DISABLE LEFT TURN 304 | * 305 | 200000 "DISABLE LEFT TURN 306 | 200000 "DISABLE LEFT TURN 307 | 200000 "DISABLE LEFT TURN 308 | 201000 "DISABLE LEFT TURN; TURN ON ANGULAR MOMENTUM 309 | * 310 | * 311 | *DISABLE RIGHT TURN 312 | * 313 | 100000 "DISABLE RIGHT TURN 314 | 100000 "DISABLE RIGHT TURN 315 | 100000 "DISABLE RIGHT TURN 316 | 101000 "DISABLE RIGHT TURN; TURN ON ANGULAR MOMENTUM 317 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- HANDICAP TABLE -- 2 318 | .LOC 340 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 319 | 320 | .HEAD 2 321 | 322 | GRAVT: 4 "GRAVITY CONSTANT 323 | 324 | THRUS: LRSS 11. THRUST FACTOR 325 | 326 | ROLL: 48. "AMOUNT OF ROLL FORCE 327 | 328 | FUEL: -1536.-1 "FUEL SUPPLY FOR SHIPS 329 | 330 | BLNUM: -32.-1 "NUMBER OF BULLETS PER SHIP PER GAME 331 | 332 | BLVEL: LRSS 2 BULLET VELOCITY FACTOR 333 | 334 | BLTIM: -128.-1 "AMOUNT OF TIME THAT A BULLET LASTS 335 | 336 | BLINT: -12.-1 "INTERVAL THAT BULLETS CAN BE SHOT 337 | 338 | SUNSZ: -2560.-1 "SIZE OF THE SUN 339 | 340 | SHPSZ: -2048.-1 "SIZE OF THE SHIPS AND BULLETS 341 | 342 | WTIME: -64.-1 "AMOUNT OF TIME THAT A WARP LASTS 343 | 344 | STIME: -96.-1 "AMOUNT OF TIME THAT A WARP STAR LASTS 345 | 346 | DTIME: -128.-1 "AMOUNT OF TIME UNTIL NEXT POSSIBLE WARP 347 | 348 | WAREA: LRSS 0 HOW FAR FROM WHERE YOU WARP DO YOU COME BACK? 349 | 350 | WVELO: LRSS 5 HOW FAST ARE YOU GOING WHEN YOU COME BACK? 351 | 352 | WFACT: 040000 "WARP FACTOR 353 | 354 | FRICT: 400000 "FRICTION FACTOR 355 | 356 | TTIME: -262143.-1 "THRUST RESTORATION AFTER PARTIAL DAMAGE TIMER 357 | 358 | BTIME: -1024.-1 "BULLET RESTORATION AFTER PARTIAL DAMAGE TIMER 359 | 360 | LTIME: -262143.-1 "LEFT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 361 | 362 | RTIME: -262143.-1 "RIGHT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 363 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- DISABLE TABLE -- 3 364 | .LOC 420 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 365 | 366 | .HEAD 3 367 | 368 | DTAB: ... 369 | * 370 | * 371 | *DESTROY SHIP TOTALLY 372 | * 373 | 777777 "DESTROY SHIP TOTALLY 374 | 777777 "DESTROY SHIP TOTALLY 375 | * 376 | * 377 | *DISABLE BULLET-FIRING 378 | * 379 | 020000 "DISABLE BULLET-FIRING 380 | 020000 "DISABLE BULLET-FIRING 381 | 020000 "DISABLE BULLET-FIRING 382 | * 383 | * 384 | * 385 | *DISABLE THRUST 386 | * 387 | 040000 "DISABLE THRUST 388 | 040000 "DISABLE THRUST 389 | 040000 "DISABLE THRUST 390 | * 391 | * 392 | *DISABLE LEFT TURN 393 | * 394 | 200000 "DISABLE LEFT TURN 395 | 200000 "DISABLE LEFT TURN 396 | 200000 "DISABLE LEFT TURN 397 | 201000 "DISABLE LEFT TURN; TURN ON ANGULAR MOMENTUM 398 | * 399 | * 400 | *DISABLE RIGHT TURN 401 | * 402 | 100000 "DISABLE RIGHT TURN 403 | 100000 "DISABLE RIGHT TURN 404 | 100000 "DISABLE RIGHT TURN 405 | 101000 "DISABLE RIGHT TURN; TURN ON ANGULAR MOMENTUM 406 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- HANDICAP TABLE -- 3 407 | .LOC 440 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 408 | 409 | .HEAD 3 410 | 411 | GRAVT: 4 "GRAVITY CONSTANT 412 | 413 | THRUS: LRSS 11. THRUST FACTOR 414 | 415 | ROLL: 48. "AMOUNT OF ROLL FORCE 416 | 417 | FUEL: -1536.-1 "FUEL SUPPLY FOR SHIPS 418 | 419 | BLNUM: -32.-1 "NUMBER OF BULLETS PER SHIP PER GAME 420 | 421 | BLVEL: LRSS 2 BULLET VELOCITY FACTOR 422 | 423 | BLTIM: -128.-1 "AMOUNT OF TIME THAT A BULLET LASTS 424 | 425 | BLINT: -12.-1 "INTERVAL THAT BULLETS CAN BE SHOT 426 | 427 | SUNSZ: -2560.-1 "SIZE OF THE SUN 428 | 429 | SHPSZ: -2048.-1 "SIZE OF THE SHIPS AND BULLETS 430 | 431 | WTIME: -64.-1 "AMOUNT OF TIME THAT A WARP LASTS 432 | 433 | STIME: -96.-1 "AMOUNT OF TIME THAT A WARP STAR LASTS 434 | 435 | DTIME: -128.-1 "AMOUNT OF TIME UNTIL NEXT POSSIBLE WARP 436 | 437 | WAREA: LRSS 0 HOW FAR FROM WHERE YOU WARP DO YOU COME BACK? 438 | 439 | WVELO: LRSS 5 HOW FAST ARE YOU GOING WHEN YOU COME BACK? 440 | 441 | WFACT: 040000 "WARP FACTOR 442 | 443 | FRICT: 400000 "FRICTION FACTOR 444 | 445 | TTIME: -262143.-1 "THRUST RESTORATION AFTER PARTIAL DAMAGE TIMER 446 | 447 | BTIME: -1024.-1 "BULLET RESTORATION AFTER PARTIAL DAMAGE TIMER 448 | 449 | LTIME: -262143.-1 "LEFT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 450 | 451 | RTIME: -262143.-1 "RIGHT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 452 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- DISABLE TABLE 453 | .LOC 520 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 454 | 455 | .HEAD 456 | 457 | DTAB: ... 458 | * 459 | * 460 | *DESTROY SHIP TOTALLY 461 | * 462 | 777777 "DESTROY SHIP TOTALLY 463 | 777777 "DESTROY SHIP TOTALLY 464 | * 465 | * 466 | *DISABLE BULLET-FIRING 467 | * 468 | 020000 "DISABLE BULLET-FIRING 469 | 020000 "DISABLE BULLET-FIRING 470 | 020000 "DISABLE BULLET-FIRING 471 | * 472 | * 473 | * 474 | *DISABLE THRUST 475 | * 476 | 040000 "DISABLE THRUST 477 | 040000 "DISABLE THRUST 478 | 040000 "DISABLE THRUST 479 | * 480 | * 481 | *DISABLE LEFT TURN 482 | * 483 | 200000 "DISABLE LEFT TURN 484 | 200000 "DISABLE LEFT TURN 485 | 200000 "DISABLE LEFT TURN 486 | 201000 "DISABLE LEFT TURN; TURN ON ANGULAR MOMENTUM 487 | * 488 | * 489 | *DISABLE RIGHT TURN 490 | * 491 | 100000 "DISABLE RIGHT TURN 492 | 100000 "DISABLE RIGHT TURN 493 | 100000 "DISABLE RIGHT TURN 494 | 101000 "DISABLE RIGHT TURN; TURN ON ANGULAR MOMENTUM 495 | .STITL LOW CORE DEFINITIONS -- RESERVED ADDRESSES -- SOFTWARE -- HANDICAP TABLE 496 | .LOC 540 ESTABLISH CANONICAL LOCATION FOR PATCHING FACILITY 497 | 498 | .HEAD 499 | 500 | GRAVT: 4 "GRAVITY CONSTANT 501 | 502 | THRUS: LRSS 11. THRUST FACTOR 503 | 504 | ROLL: 48. "AMOUNT OF ROLL FORCE 505 | 506 | FUEL: -1536.-1 "FUEL SUPPLY FOR SHIPS 507 | 508 | BLNUM: -32.-1 "NUMBER OF BULLETS PER SHIP PER GAME 509 | 510 | BLVEL: LRSS 2 BULLET VELOCITY FACTOR 511 | 512 | BLTIM: -128.-1 "AMOUNT OF TIME THAT A BULLET LASTS 513 | 514 | BLINT: -12.-1 "INTERVAL THAT BULLETS CAN BE SHOT 515 | 516 | SUNSZ: -2560.-1 "SIZE OF THE SUN 517 | 518 | SHPSZ: -2048.-1 "SIZE OF THE SHIPS AND BULLETS 519 | 520 | WTIME: -64.-1 "AMOUNT OF TIME THAT A WARP LASTS 521 | 522 | STIME: -96.-1 "AMOUNT OF TIME THAT A WARP STAR LASTS 523 | 524 | DTIME: -128.-1 "AMOUNT OF TIME UNTIL NEXT POSSIBLE WARP 525 | 526 | WAREA: LRSS 0 HOW FAR FROM WHERE YOU WARP DO YOU COME BACK? 527 | 528 | WVELO: LRSS 5 HOW FAST ARE YOU GOING WHEN YOU COME BACK? 529 | 530 | WFACT: 040000 "WARP FACTOR 531 | 532 | FRICT: 400000 "FRICTION FACTOR 533 | 534 | TTIME: -262143.-1 "THRUST RESTORATION AFTER PARTIAL DAMAGE TIMER 535 | 536 | BTIME: -1024.-1 "BULLET RESTORATION AFTER PARTIAL DAMAGE TIMER 537 | 538 | LTIME: -262143.-1 "LEFT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 539 | 540 | RTIME: -262143.-1 "RIGHT TURN RESTORATION AFTER PARTIAL DAMAGE TIMER 541 | .STITL INITIALIZATION ROUTINES -- START OF NEW PROGRAM 542 | .LOC 600 543 | * 544 | * 545 | *CLEAR ALL FLAGS 546 | * 547 | START: CAF "CLEAR ALL FLAGS 548 | CDF "CLEAR DISPLAY FLAGS 549 | * 550 | * 551 | *SET UP POINTERS TO THE SCOPE BUFFERS 552 | * 553 | LAC (3000) SIZE OF A SCOPE BUFFER FOR SHIPS AND BULLETS 554 | DAC OFFSET KEEP IT AROUND 555 | 556 | LAC PSCBUF ADDRESS OF SCOPE BUFFER 557 | 558 | ADD (777) ADD THE LENGTH OF THE STAR SCOPE BUFFER 559 | DAC STREND TO GET THE ADDRESS OF THE STAR SCOPE BUFFER TRAP WORD 560 | 561 | ADD (1) ADD ONE 562 | DAC PBUFF1 TO GET THE ADDRESS OF THE FIRST SCOPE BUFFER 563 | 564 | ADD OFFSET ADD THE SIZE OF A SCOPE BUFFER 565 | DAC PBUFF2 TO GET THE ADDRESS OF THE SECOND SCOPE BUFFER 566 | * 567 | * 568 | *FILL UP ALL THE SCOPE BUFFERS WITH CONTROL WORDS 569 | * 570 | ADD OFFSET *** 571 | CMA "* CALCULATE THE COMBINED LENGTH OF ALL THE SCOPE BUFFERS 572 | ADD PSCBUF *** 573 | DAC TEMP0 574 | 575 | LAW -1 *** 576 | ADD PSCBUF * SET UP A POINTER TO THE BEGINNING OF THE SCOPE BUFFERS 577 | DAC X5 *** 578 | 579 | LAC (300000) LOAD A CONTROL WORD 580 | 581 | DAC X5,I *** 582 | ISZ TEMP0 * FILL UP ALL THE SCOPE BUFFERS WITH CONTROL WORDS 583 | JMP .-2 *** 584 | .EJECT 585 | * 586 | * 587 | *INITIALIZE SCOPE BUFFER PARAMETER AND TRAP WORDS 588 | * 589 | LAC (065040) GET A PARAMETER WORD 590 | DAC PSCBUF,I PUT IT AT THE BEGINNING OF THE STAR SCOPE BUFFER 591 | 592 | LAC (400000) *** 593 | ADD PSCBUF * LINK THE STAR SCOPE BUFFER ONTO THE END OF THE FIRST SCOPE BUFFER 594 | DAC PBUFF2,I *** 595 | 596 | LAC (400000) *** 597 | ADD PBUFF2 * LINK THE SECOND SCOPE BUFFER ONTO THE END OF THE STAR SCOPE BUFFER 598 | DAC STREND,I *** 599 | * 600 | * 601 | *CREATE A REAL-TIME ENVIRONMENT 602 | * 603 | LAC PSCBUF 604 | 605 | CLON "TURN ON THE CLOCK 606 | 607 | ION "TURN ON THE PROGRAM INTERRUPT SYSTEM 608 | 609 | BEG "TURN ON THE SCOPE DISPLAY 610 | .EJECT 611 | * 612 | * 613 | *SET UP THE STARS 614 | * 615 | LAW -16.-1 INITIALIZE THE STAR TIMER 616 | DAC STIMER 617 | 618 | LAC PSCBUF GET A POINTER TO THE STAR SCOPE BUFFER 619 | DAC X1 620 | 621 | LAC (STABLE-1) GET A POINTER TO THE STAR TABLE 622 | DAC X2 623 | 624 | START1: LAC X2,I PICK UP THE X-COORDINATE 625 | SPA "SEE IF THIS IS A STARTING STAR 626 | JMP START2 IF NOT, WE'RE DONE WITH THE SETTING UP 627 | 628 | DAC TEMP0 IF SO, SAVE THE X-COORDINATE 629 | 630 | LAC X2,I PICK UP THE Y-COORDINATE AND INTENSITY 631 | LMQ!EAECLA!LLSS 3 RIGHT JUSTIFY INTENSITY IN AC 632 | XOR (040000) OR IN SCOPE COMMAND 633 | DAC X1,I PUT IN STAR SCOPE BUFFER 634 | 635 | LAC TEMP0 GET BACK X-COORDINATE 636 | XOR (140000) OR IN SCOPE COMMAND 637 | DAC X1,I PUT IN STAR SCOPE BUFFER 638 | 639 | EAECLA!LLSS 18.-3 GET BACK Y-COORDINATE 640 | XOR (174000) OR IN SCOPE COMMAND 641 | DAC X1,I PUT IN STAR SCOPE BUFFER 642 | 643 | JMP START1 644 | 645 | START2: LAC X2 SAVE FINAL POINTER TO STAR TABLE 646 | DAC PSTABL 647 | 648 | LAC X1 *** 649 | DAC PSBUF2 * SAVE FINAL POINTER TO STAR SCOPE BUFFER 650 | ISZ PSBUF2 *** 651 | 652 | LAC PSCBUF *** 653 | DAC PSBUF1 * INITIALIZE POINTER TO BEGINNING OF STAR SCOPE BUFFER 654 | ISZ PSBUF1 *** 655 | 656 | DZM SRANGE INITIALIZE X-COORDINATE RANGE 657 | .STITL INITIALIZATION ROUTINES -- START OF NEW GAME 658 | AGAIN: LAW SXTRAN-1 SET UP A POINTER TO THE OBJECT DEFINITION TABLE 659 | DAC X5 660 | 661 | LAW -ODTLEN GET THE SIZE OF THE OBJECT DEFINITION TABLE 662 | DAC TEMP0 663 | 664 | DZM X5,I *** 665 | ISZ TEMP0 * ZERO OUT THE OBJECT DEFINITION TABLE 666 | JMP .-2 *** 667 | * 668 | * 669 | *DEFINE TRANSFER VECTOR ENTRIES FOR EACH SHIP 670 | * 671 | LAC (S1SHIP+300000) SET UP MANAGEMENT ROUTINE ADDRESS FOR SHIP 1 672 | DAC S1TRAN 673 | 674 | LAC (S2SHIP+300000) SET UP MANAGEMENT ROUTINE ADDRESS FOR SHIP 2 675 | DAC S2TRAN 676 | 677 | LAS "GET THE SWITCHES 678 | DAC SWITCH SAVE THE SWITCHES 679 | 680 | AND (002000) CHECK FOR THIRD SHIP 681 | SZA!CLL 682 | LAC (S3SHIP+300000) SET UP MANAGEMENT ROUTINE ADDRESS FOR SHIP 3 683 | DAC S3TRAN 684 | * 685 | * 686 | *SAVE NUMBER OF SHIPS PARTICPATING IN THIS GAME 687 | * 688 | RTL 689 | GLK 690 | CMA 691 | DAC NSHIP INITIALIZE COUNTER OF SURVIVING SHIPS 692 | * 693 | * 694 | *FLAG THAT EACH SHIP IS INITIALLY UNDAMAGED 695 | * 696 | DAC S1DAMS NO DAMAGE TO SHIP 1 INITIALLY 697 | DAC S2DAMS NO DAMAGE TO SHIP 2 INITIALLY 698 | DAC S3DAMS NO DAMAGE TO SHIP 3 INITIALLY 699 | * 700 | * 701 | *CALCULATE AMOUNT OF TIME THAT GAME LASTS AFTER LAST SHOTS HAVE BEEN FIRED 702 | * 703 | LAC X$BLTIM AMOUNT OF TIME THAT A BULLET LASTS 704 | ALSS 1 TIMES TWO 705 | DAC GAMTIM YIELDS PAUSE TIME BETWEEN GAMES 706 | .EJECT 707 | * 708 | * 709 | *SET UP RANDOM POSITIONS OF EACH SHIP 710 | * 711 | JMS RNDPOS GET RANDOM POSITIONS 712 | DAC S1XLOC SET UP RANDOM X LOCATION OF SHIP 1 713 | LACQ "SET UP RANDOM POSITION OF SHIP 1 714 | DAC S1YLOC SET UP RANDOM Y LOCATION OF SHIP 1 715 | 716 | JMS RNDPOS GET RANDOM POSITIONS 717 | DAC S2XLOC SET UP RANDOM X LOCATION OF SHIP 2 718 | LACQ "SET UP RANDOM POSITION OF SHIP 2 719 | DAC S2YLOC SET UP RANDOM Y LOCATION OF SHIP 2 720 | 721 | JMS RNDPOS GET RANDOM POSITIONS 722 | DAC S3XLOC SET UP RANDOM X LOCATION OF SHIP 3 723 | LACQ "SET UP RANDOM POSITION OF SHIP 3 724 | DAC S3YLOC SET UP RANDOM Y LOCATION OF SHIP 3 725 | * 726 | * 727 | *SET UP RANDOM ORIENTATIONS OF EACH SHIP 728 | * 729 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 730 | DAC S1ANGL 731 | 732 | RTL "ROTATE A LITTLE 733 | DAC S2ANGL 734 | 735 | RTL "ROTATE A LITTLE MORE 736 | DAC S3ANGL 737 | .EJECT 738 | * 739 | * 740 | *SUPPLY EACH SHIP WITH FUEL AND BULLETS 741 | * 742 | LAC X$FUEL GET INITIAL FUEL SUPPLY FOR EACH SHIP 743 | DAC S1FUEL SUPPLY SHIP 1 WITH FUEL 744 | DAC S2FUEL SUPPLY SHIP 2 WITH FUEL 745 | DAC S3FUEL SUPPLY SHIP 3 WITH FUEL 746 | 747 | LAC X$BLNUM GET INITIAL BULLET SUPPLY FOR EACH SHIP 748 | DAC S1BULL SUPPLY SHIP 1 WITH BULLETS 749 | DAC S2BULL SUPPLY SHIP 2 WITH BULLETS 750 | DAC S3BULL SUPPLY SHIP 3 WITH BULLETS 751 | 752 | LAC SWITCH GET BACK THE SWITCHES 753 | AND (000200) SEE IF SWITCH 10 SET 754 | SNA "YES, SHIPS HAVE INDIVIDUAL SUPPLIES DEFINED FOR THEM 755 | JMP AGAIN1 "NO, FUEL SUPPLIES ARE THE SAME FOR ALL THREE SHIPS 756 | 757 | LAC 1$FUEL SUPPLY SHIP 1 WITH FUEL 758 | DAC S1FUEL 759 | 760 | LAC 2$FUEL SUPPLY SHIP 2 WITH FUEL 761 | DAC S2FUEL 762 | 763 | LAC 3$FUEL SUPPLY SHIP 3 WITH FUEL 764 | DAC S3FUEL 765 | 766 | LAC 1$BLNUM SUPPLY SHIP 1 WITH BULLETS 767 | DAC S1BULL 768 | 769 | LAC 2$BLNUM SUPPLY SHIP 2 WITH BULLETS 770 | DAC S2BULL 771 | 772 | LAC 3$BLNUM SUPPLY SHIP 3 WITH BULLETS 773 | DAC S3BULL 774 | 775 | AGAIN1: LAC SWITCH GET BACK THE SWITCHES 776 | ALS 7. CHECK FOR THIRD SHIP 777 | SMA!RAL "SHIP IS PRESENT, MAINTAIN ITS BULLET SUPPLY 778 | DZM S3BULL SHIP IS NOT PRESENT, WIPE OUT ITS BULLET SUPPLY 779 | .EJECT 780 | * 781 | * 782 | *ALLOW PLAYERS TO CHOOSE DIFFERENT SHIPS 783 | * 784 | LAC SWITCH GET BACK THE SWITCHES 785 | AND (000100) CHECK BIT 11 786 | SNA "SKIP IF PLAYERS WANT CHOICE IN MATTER 787 | JMP SETUP1 "NO, THEY'RE NOT FUSSY 788 | 789 | LAW SETUP1 *** 790 | LMQ "* POINT TO INSTRUCTIONS USED TO SET UP POINTERS TO PICTURES OF SHIP 1 791 | LAW SETUD1 *** 792 | JMS SELECT 793 | 794 | LAW SETUP2 *** 795 | LMQ "* POINT TO INSTRUCTIONS USED TO SET UP POINTERS TO PICTURES OF SHIP 2 796 | LAW SETUD2 *** 797 | JMS SELECT 798 | 799 | SNL "CHECK FOR THIRD SHIP 800 | JMP SETUP1 801 | 802 | LAW SETUP3 *** 803 | LMQ "* POINT TO INSTRUCTIONS USED TO SET UP POINTERS TO PICTURES OF SHIP 3 804 | LAW SETUD3 *** 805 | JMS SELECT 806 | * 807 | * 808 | *SET UP POINTERS TO PICTURES OF SHIPS 809 | * 810 | SETUP1: LAW S1PIC-1 LONG, SLIM SHIP 811 | DAC S1PICP 812 | 813 | SETUP2: LAW S2PIC-1 SHORT, FAT SHIP 814 | DAC S2PICP 815 | 816 | SETUP3: LAW S3PIC-1 U.S.S. ENTERPRISE 817 | DAC S3PICP 818 | * 819 | * 820 | *SET UP POINTERS TO PICTURES OF DAMAGED SHIPS 821 | * 822 | SETUD1: LAW S1PICD-1 LONG, SLIM SHIP 823 | DAC S1PICN 824 | 825 | SETUD2: LAW S2PICD-1 SHORT, FAT SHIP 826 | DAC S2PICN 827 | 828 | SETUD3: LAW S3PICD-1 U.S.S. ENTERPRISE 829 | DAC S3PICN 830 | 831 | JMP BUMP 832 | .EJECT 833 | 834 | 835 | SELECT: XX 836 | 837 | DAC DAMSET *** 838 | LACQ "* SAVE PROGRAM INSERTION ADDRESSES 839 | DAC PICSET *** 840 | 841 | LAW SBANK-2-1 SET UP A POINTER TO BEGINNING OF SHIP TABLE 842 | DAC X7 843 | 844 | SEL1: LPB 845 | WBL "ACKNOWLEDGE DEPRESSED PUSHBUTTONS 846 | 847 | SNA "SKIP IF PUSHBUTTON DEPRESSED 848 | JMP SEL1 JUMP IF NOT 849 | 850 | LMQ "SET UP PUSHBUTTON READING FOR SHIFT INTO ACCUMULATOR 851 | 852 | LAC (500000) INITIALIZE DELAY COUNT 853 | DAC TEMP0 854 | 855 | LPB "*** 856 | ISZ TEMP0 * PAUSE FOR A FRACTION OF A SECOND 857 | JMP .-2 *** 858 | 859 | SEL2: LLS 1 LOOK FOR PUSHED BUTTON 860 | 861 | ISZ X7 BUMP TABLE POINTER 862 | ISZ X7 BY ONE DOUBLE-WORD ENTRY 863 | 864 | SNA "SKIP IF THIS WAS THE PUSHED BUTTON 865 | JMP SEL2 866 | 867 | LAC X7,I GET INSTRUCTION TO SET UP POINTER TO PICTURE 868 | DAC PICSET,I INSERT IT IN THE PROGRAM 869 | 870 | LAC X7,I GET INSTRUCTION TO SET UP POINTER TO DAMAGED PICTURE 871 | DAC DAMSET,I INSERT IT IN THE PROGRAM 872 | 873 | JMP SELECT,I AND EXIT 874 | 875 | 876 | PICSET: 0 877 | DAMSET: 0 878 | .STITL OBJECT MANAGEMENT ROUTINES -- COLLISION CHECKING -- INITIALIZATION 879 | * 880 | * 881 | *SET CLOCK 882 | * 883 | BUMP: LAW -2 SET CLOCK TO INTERRUPT AFTER TWO TIMER UNITS HAVE EXPIRED 884 | DAC CLOCK 885 | * 886 | * 887 | *SET UP IDLE LOOP 888 | * 889 | LAC (JMP THREE) SET UP IDLE LOOP TO IDLE 890 | DAC THREE 891 | * 892 | * 893 | *GET AND SAVE THE PUSHBUTTONS AND THE SWITCHES 894 | * 895 | LPB "GET THE PUSHBUTTONS 896 | WBL "ACKNOWLEDGE DEPRESSED PUSHBUTTONS 897 | DAC BUTTON SAVE THE PUSHBUTTONS 898 | 899 | LAS "GET THE SWITCHES 900 | DAC SWITCH SAVE THE SWITCHES 901 | * 902 | * 903 | *SET UP A COPY OF THE APPROPRIATE HANDICAP TABLE 904 | * 905 | AND (000200) SEE IF SWITCH 10 SET 906 | SZA "*** 907 | LAC (100) * GET A POINTER TO THE APPROPRIATE COMMAND TABLE 908 | ADD (1$DTAB-100-1) *** 909 | 910 | DAC HANDI INITIALIZE HANDICAP TABLE POINTER 911 | DAC X6 912 | 913 | LAW DTAB-1 GET A POINTER TO THE TABLE USED BY THE PROGRAM 914 | DAC X7 915 | 916 | LAW -RTIME+DTAB-1 GET THE COMPLEMENT OF THE SIZE FOR USE AS A COUNTER 917 | DAC TEMP0 USE A TEMPORARY TO HOLD THE COUNTER 918 | 919 | LAC X6,I *** 920 | DAC X7,I * COPY OVER THE APPROPRIATE TABLE 921 | ISZ TEMP0 *** 922 | JMP .-3 923 | .EJECT 924 | * 925 | * 926 | *SWITCH SCOPE BUFFERS 927 | * 928 | LAC OFFSET *** 929 | CMA "* GET A POINTER TO THE NEW SCOPE BUFFER 930 | ADD STREND,I *** 931 | 932 | ADD (-1-1) *** 933 | AND (8.*1024.-1) * ADJUST, TRIM, AND SAVE IT 934 | DAC X0 *** 935 | * 936 | * 937 | *INITIALLY INSTRUCT PROGRAM TO INCREMENT VARIOUS SHIP DEFINITION POINTERS 938 | * 939 | LAC (SKP) CHECK SHIPS FIRST 940 | DAC DONE 941 | * 942 | * 943 | *INITIALIZE COUNTER OF SHIPS CHECKED AGAINST COLLISION 944 | * 945 | LAW -NUMSHP INITIALIZE COUNTER OF SHIPS CHECKED AGAINST COLLISION 946 | DAC SHPCNT 947 | * 948 | * 949 | *INITIALIZE COUNTER OF OBJECTS CHECKED AGAINST COLLISION 950 | * 951 | LAW -NUMOBJ INITIALIZE COUNTER OF OBJECTS CHECKED AGAINST COLLISION 952 | DAC OBJCNT 953 | .EJECT 954 | * 955 | * 956 | *INITIALIZE POINTERS TO THE OBJECT DEFINITION TABLE 957 | * 958 | LAW SXTRAN 959 | DAC SQTRAN 960 | 961 | LAW SXXLOC 962 | DAC SQXLOC 963 | 964 | LAW SXYLOC 965 | DAC SQYLOC 966 | 967 | LAW SXXVEL 968 | DAC SQXVEL 969 | 970 | LAW SXYVEL 971 | DAC SQYVEL 972 | 973 | LAW SXTIME 974 | DAC SQTIME 975 | 976 | LAW SXDIST 977 | DAC SQDIST 978 | .EJECT 979 | LAW SXANGL 980 | DAC SQANGL 981 | 982 | LAW SXROLL 983 | DAC SQROLL 984 | 985 | LAW SXFUEL 986 | DAC SQFUEL 987 | 988 | LAW SXBULL 989 | DAC SQBULL 990 | 991 | LAW SXPICP 992 | DAC SQPICP 993 | 994 | LAW SXPICN 995 | DAC SQPICN 996 | 997 | LAW SXWTIM 998 | DAC SQWTIM 999 | 1000 | LAW SXWFAC 1001 | DAC SQWFAC 1002 | 1003 | LAW SXINVF 1004 | DAC SQINVF 1005 | 1006 | LAW SXINVT 1007 | DAC SQINVT 1008 | 1009 | LAW SXDAMS 1010 | DAC SQDAMS 1011 | 1012 | LAW SXTTIM 1013 | DAC SQTTIM 1014 | 1015 | LAW SXBTIM 1016 | DAC SQBTIM 1017 | 1018 | LAW SXLTIM 1019 | DAC SQLTIM 1020 | 1021 | LAW SXRTIM 1022 | DAC SQRTIM 1023 | .EJECT 1024 | * 1025 | * 1026 | *TERMINATE GAME IF LESS THAN TWO SHIPS SURVIVE 1027 | * 1028 | LAC NSHIP *** 1029 | SMA "* TERMINATE GAME IF LESS THAN TWO SHIPS SURVIVE 1030 | JMP ENDGAM *** 1031 | * 1032 | * 1033 | *TERMINATE GAME IF ALL THE SHIPS ARE OUT OF BULLETS 1034 | * 1035 | LAC S1BULL GET BULLET SUPPLY OF SHIP 1 1036 | ADD S2BULL ADD BULLET SUPPLY OF SHIP 2 1037 | ADD S3BULL ADD BULLET SUPPLY OF SHIP 3 1038 | SNA 1039 | 1040 | ENDGAM: ISZ GAMTIM IS THE GAME OVER YET? 1041 | JMP BUMP1 NO, SO RETURN 1042 | 1043 | JMP AGAIN YES, SO RESTART 1044 | .STITL OBJECT MANAGEMENT ROUTINES -- COLLISION CHECKING 1045 | * 1046 | * 1047 | *CHECK FOR COLLISION OF EVERY OBJECT WITH EVERY OTHER OBJECT 1048 | * 1049 | BUMP1: LAC SQTRAN,I GET AN ENTRY OUT OF TRANSFER VECTOR 1050 | 1051 | SNA 1052 | JMP NEXT GO AND BUMP ALL THE POINTERS IF NOTHING IS THERE 1053 | 1054 | SPA 1055 | JMP GOTOIT IF THE ENTRY IS NEGATIVE, THE OBJECT IS EITHER EXPLODING OR WARPED 1056 | 1057 | LAC SQTRAN GET A POINTER TO THE TRANSFER VECTOR 1058 | DAC X5 1059 | 1060 | LAC SQXLOC GET A POINTER TO THE X LOCATION 1061 | DAC X6 1062 | 1063 | LAC SQYLOC GET A POINTER TO THE Y LOCATION 1064 | DAC X7 1065 | 1066 | AND (8.*1024.-1) EXTRACT ADDRESS BITS 1067 | ADD (-SXYLOC-NUMOBJ) SUBTRACT THE END OF THE TABLE 1068 | DAC TEMP0 TO GET THE NUMBER OF ENTRIES TO CHECK 1069 | 1070 | BUMP2: ISZ TEMP0 INCREMENT COUNT OF OBJECTS CHECKED 1071 | SKP "SKIP IF MORE OBJECTS TO CHECK 1072 | JMP BUMP5 JUMP IF NO MORE OBJECTS TO CHECK 1073 | 1074 | LAC X5,I GET THE NEXT ENTRY IN THE TRANSFER VECTOR 1075 | SPA!SNA "IF IT'S NEGATIVE, IT'S NOT REALLY THERE 1076 | JMP BUMP3 SO GO BUMP THE REST OF THE POINTER 1077 | 1078 | LAC X6,I GET THE X LOCATION OF ANOTHER OBJECT 1079 | CMA "COMPLEMENT IT 1080 | ADD SQXLOC,I SUBTRACT IT FROM THE X LOCATION OF THE OBJECT UNDER SCRUTINY 1081 | GSM "GET THE MAGNITUDE OF THE DISTANCE BETWEEN THEM 1082 | ADD SHPSZ SUBTRACT THE SIZE OF THE OBJECT UNDER SCRUTINY 1083 | SMA "ARE THEY CLOSE ENOUGH TO COLLIDE? 1084 | JMP BUMP4 NO 1085 | 1086 | LAC X7,I GET THE Y LOCATION OF ANOTHER OBJECT 1087 | CMA "COMPLEMENT IT 1088 | ADD SQYLOC,I SUBTRACT IT FROM THE X LOCATION OF THE OBJECT UNDER SCRUTINY 1089 | GSM "GET THE MAGNITUDE OF THE DISTANCE BETWEEN THEM 1090 | ADD SHPSZ SUBTRACT THE SIZE OF THE OBJECT UNDER SCRUTINY 1091 | SMA "ARE THEY CLOSE ENOUGH TO COLLIDE? 1092 | JMP BUMP2 NO 1093 | 1094 | JMP ZONK YES, SO GO ZONK BOTH OBJECTS 1095 | .EJECT 1096 | BUMP3: ISZ X6 BUMP THE X LOCATION POINTER 1097 | 1098 | BUMP4: ISZ X7 BUMP THE Y LOCATION POINTER 1099 | 1100 | JMP BUMP2 AND GO CHECK THE NEXT OBJECT 1101 | * 1102 | * 1103 | *CHECK FOR COLLISION OF THE OBJECT CURRENTLY UNDER SCRUTINY WITH THE SUN 1104 | * 1105 | BUMP5: LAC SQXLOC,I GET THE X LOCATION 1106 | GSM "ITS MAGNITUDE 1107 | DAC TEMP0 SAVE IT 1108 | 1109 | LAC SQYLOC,I GET THE Y LOCATION 1110 | GSM "ITS MAGNITUDE 1111 | ADD TEMP0 ADD THE X LOCATION 1112 | RCR "DIVIDE BY TWO 1113 | ADD SUNSZ SUBTRACT THE SIZE OF THE SUN 1114 | SPA "IS IT CLOSE ENOUGH TO COLLIDE? 1115 | JMP KILL YES 1116 | "NO, SO FALL INTO THIS PARTICULAR OBJECT'S MANAGEMENT ROUTINE 1117 | * 1118 | * 1119 | *CALL IN THE MANAGEMENT ROUTINE ASSOCIATED WITH THIS OBJECT 1120 | * 1121 | GOTOIT: LAC SQTRAN,I GET THE ADDRESS OF THE SUBROUTINE 1122 | DAC TEMP0 SAVE IT TO TRANSFER THROUGH 1123 | JMP TEMP0,I NOW TRANSFER THROUGH IT 1124 | .EJECT 1125 | NEXT: LAC SQTRAN GET THE TRANSFER VECTOR ENTRY FOR THE LAST OBJECT 1126 | AND (8*1024.-1) EXTRACT ADDRESS BITS 1127 | TAD (-SXTRAN-NUMSHP) END OF SHIP ENTRIES 1128 | SPA "SEE IF THIS OBJECT IS A BULLET 1129 | JMP NEXT1 NO, IT IS A SHIP 1130 | 1131 | LAC (X$DTAB-1) ASSUME THAT THE NORMAL HANDICAP TABLE IS TO BE USED 1132 | SAD HANDI SEE IF IT'S ALREADY IN USE ANYWAY 1133 | JMP NEXT3 NO NEED TO COPY IT OVER IF SO 1134 | 1135 | JMP NEXT2 1136 | 1137 | NEXT1: LAC SWITCH GET BACK THE SWITCHES 1138 | AND (000200) SEE IF SWITCH 10 SET 1139 | SNA "YES, MUST INCREMENT TABLE POINTER 1140 | JMP NEXT3 NO, JUST USE NORMAL TABLE 1141 | 1142 | LAC (100) INCREMENT HANDICAP TABLE POINTER 1143 | ADD HANDI 1144 | 1145 | NEXT2: DAC HANDI UPDATE HANDICAP TABLE POINTER 1146 | DAC X6 SET UP AN AUTOINDEX REGISTER 1147 | 1148 | LAW DTAB-1 GET A POINTER TO THE TABLE THE PROGRAM USES 1149 | DAC X7 1150 | 1151 | LAW -RTIME+DTAB-1 GET THE COMPLEMENT OF THE SIZE FOR USE AS A COUNTER 1152 | DAC TEMP0 USE A TEMPORARY TO HOLD THE COUNTER 1153 | 1154 | LAC X6,I *** 1155 | DAC X7,I * COPY OVER THE APPROPRIATE TABLE 1156 | ISZ TEMP0 *** 1157 | JMP .-3 1158 | .EJECT 1159 | NEXT3: ISZ SQTRAN 1160 | ISZ SQXLOC 1161 | ISZ SQYLOC 1162 | ISZ SQXVEL 1163 | ISZ SQYVEL 1164 | ISZ SQTIME 1165 | ISZ SQDIST 1166 | 1167 | ISZ OBJCNT SEE IF DONE COLLISION CHECKING 1168 | 1169 | DONE: HLT "NO, PROCEED TO CHECK NEXT OBJECT 1170 | 1171 | JMP TWINKL YES, GO FORM THE SUN, MOVE THE STARS, AND WAIT 1172 | 1173 | ISZ SQANGL 1174 | ISZ SQROLL 1175 | ISZ SQFUEL 1176 | ISZ SQBULL 1177 | ISZ SQPICP 1178 | ISZ SQPICN 1179 | ISZ SQWTIM 1180 | ISZ SQWFAC 1181 | ISZ SQINVF 1182 | ISZ SQINVT 1183 | ISZ SQDAMS 1184 | ISZ SQTTIM 1185 | ISZ SQBTIM 1186 | ISZ SQLTIM 1187 | ISZ SQRTIM 1188 | 1189 | ISZ SHPCNT SEE IF DONE CHECKING SHIPS 1190 | 1191 | JMP BUMP1 NO, CONTINUE UPDATING POINTERS USED FOR SHIPS ONLY 1192 | 1193 | LAC (JMP BUMP1) YES, SO DON'T BOTHER UPDATING POINTERS USED FOR SHIPS ONLY 1194 | DAC DONE 1195 | 1196 | JMP BUMP1 AND CONTINUE COLLISION CHECKING FOR BULLETS ON SCREEN 1197 | .EJECT 1198 | ZONK: LAC X5 SET UP A POINTER TO THE TRANSFER VECTOR 1199 | DAC TEMP0 1200 | 1201 | ADD (SXTIME-SXTRAN) SET UP A POINTER TO THE TIMER 1202 | DAC TEMP1 1203 | 1204 | LAC TEMP0,I GET THE TRANSFER VECTOR ENTRY FOR THIS OBJECT 1205 | AND (-8.*1024.-400000) CLEAR OUT OLD MANAGEMENT ROUTINE ADDRESS 1206 | ADD (BLOWUP+400000) REPLACE IT WITH THE ADDRESS OF THE EXPLOSION ROUTINE 1207 | DAC TEMP0,I PLUS THE BIT SIGNIFYING NON-EXISTENCE OF THE OBJECT 1208 | 1209 | AND (-400000-1) REMOVE THE SIGN BIT FOR UPCOMING SHIFT 1210 | LRSS 18.-1-4 RIGHT JUSTIFY THE TYPE BITS IN AC 1211 | ADD (3) ADD THREE 1212 | CMA "TO GET THE AMOUNT OF TIME THIS EXPLOSION IS TO LAST 1213 | DAC TEMP1,I AND PUT IT IN THE TIMER CELL 1214 | 1215 | LAC TEMP0,I GET BACK THE TRANSFER VECTOR ENTRY FOR THIS OBJECT 1216 | AND (300000) EXTRACT TYPE BITS 1217 | SNA "SKIP IF SHIP 1218 | JMP MAIM JUMP IF BULLET 1219 | 1220 | ISZ NSHIP DECREMENT COUNTER OF SURVIVING SHIPS 1221 | NOP 1222 | 1223 | 1224 | KILL: LAC SQTRAN,I GET TRANSFER VECTOR ENTRY FOR THIS OBJECT 1225 | AND (300000) EXTRACT TYPE BITS 1226 | SNA "SKIP IF SHIP 1227 | JMP KILL1 JUMP IF BULLET 1228 | 1229 | DZM SQBULL,I WIPE OUT ITS BULLETS 1230 | 1231 | ISZ NSHIP COUNT SHIP BLOWN UP 1232 | NOP 1233 | 1234 | KILL1: LAC SQTRAN,I GET THE TRANSFER VECTOR ENTRY FOR THIS OBJECT 1235 | AND (-8.*1024.-400000) CLEAR OUT OLD MANAGEMENT ROUTINE ADDRESS 1236 | ADD (BLOWUP+400000) REPLACE IT WITH THE ADDRESS OF THE EXPLOSION ROUTINE 1237 | DAC SQTRAN,I PLUS THE BIT SIGNIFYING NON-EXISTENCE OF THE OBJECT 1238 | 1239 | AND (-400000-1) REMOVE THE SIGN BIT FOR UPCOMING SHIFT 1240 | LRSS 18.-1-4 RIGHT JUSTIFY THE TYPE BITS IN AC 1241 | ADD (3) ADD THREE 1242 | CMA "TO GET THE AMOUNT OF TIME THIS EXPLOSION IS TO LAST 1243 | DAC SQTIME,I AND PUT IT IN THE TIMER CELL 1244 | 1245 | JMP GOTOIT AND GO TO IT 1246 | .EJECT 1247 | MAIM: LAC SWITCH GET BACK THE SWITCHES 1248 | AND (004000) *** 1249 | SNA "* SEE IF PARTIAL DAMAGE FEATURE IS DESIRED 1250 | JMP KILL *** 1251 | 1252 | MAIM1: JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1253 | AND (17) NARROW ITS RANGE 1254 | ADD (DTAB) SET UP FOR RANDOM SELECTION FROM BIT TABLE 1255 | DAC TEMP0 SET UP FOR INDIRECT 1256 | LAC TEMP0,I GET BITS CODING SWITCHES TO BE DISABLED 1257 | 1258 | SAD (777777) FIRST CHECK FOR TOTAL DESTRUCTION 1259 | JMP KILL 1260 | 1261 | AND SQDAMS,I AND OUT PREVIOUSLY DISABLED SWITCHES 1262 | AND (-001000-1) REMOVE INCIDENTAL DAMAGES FROM CONSIDERATION 1263 | SNA!RTL "AND SEE IF IT'S LEFT 1264 | JMP MAIM1 IF IT'S GONE, TRY TO DAMAGE SOMETHING ELSE 1265 | 1266 | SNL!RAL "SEE IF LEFT TURN DISABLEMENT 1267 | JMP MAIM2 NO 1268 | 1269 | LAC LTIME GET TIMER FOR LEFT TURN RESTORATION 1270 | DAC SQLTIM,I START IT TICKING 1271 | 1272 | JMP MAIM5 1273 | 1274 | MAIM2: SNL!RAL "SEE IF RIGHT TURN DISABLEMENT 1275 | JMP MAIM3 NO 1276 | 1277 | LAC RTIME GET TIMER FOR RIGHT TURN RESTORATION 1278 | DAC SQRTIM,I START IT TICKING 1279 | 1280 | JMP MAIM5 1281 | 1282 | MAIM3: SNL!RAL "SEE IF THRUST DISABLEMENT 1283 | JMP MAIM4 NO 1284 | 1285 | LAC SQFUEL,I SEE IF FUEL HAS RUN OUT 1286 | SNA "NO 1287 | JMP MAIM1 YES, NO SENSE DISABLING THRUST IN THAT CASE 1288 | 1289 | LAC TTIME GET TIMER FOR THRUST RESTORATION 1290 | DAC SQTTIM,I START IT TICKING 1291 | 1292 | JMP MAIM5 1293 | 1294 | MAIM4: SNL "SEE IF BULLET-FIRING DISABLEMENT 1295 | JMP MAIM5 NO 1296 | 1297 | LAC SQBULL,I SEE IF BULLET SUPPLY HAS BEEN EXHAUSTED 1298 | SNA "NO 1299 | JMP MAIM1 YES, NO SENSE DISABLING BULLETS IN THAT CASE 1300 | 1301 | LAC BTIME GET TIMER FOR BULLET RESTORATION 1302 | DAC SQBTIM,I START IT TICKING 1303 | 1304 | MAIM5: LAC SQDAMS,I GET PREVIOUSLY DISABLED SWITCHES 1305 | XOR TEMP0,I DISABLE ANOTHER ONE 1306 | AND (-010000-1) DISABLE INVISIBILITY 1307 | DAC SQDAMS,I UPDATE 1308 | 1309 | JMP GOTOIT AND EXIT 1310 | .STITL OBJECT MANAGEMENT ROUTINES -- EXPLOSIONS 1311 | BLOWUP: LAC SQTRAN,I *** 1312 | AND (-400000-1) * CALCULATE THE SIZE OF THE EXPLOSION 1313 | LRSS 18.-3 *** 1314 | DAC TEMP0 1315 | 1316 | LLSS 2 *** 1317 | ALSS 3 * CALCULATE THE DENSITY OF THE EXPLOSION 1318 | CMA "*** 1319 | DAC TEMP1 1320 | 1321 | LAC (040006) PUT A 'SET INTENSITY 2' COMMAND IN THE SCOPE BUFFER 1322 | DAC X0,I 1323 | 1324 | BLOW1: JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1325 | AND (3) *** 1326 | ADD TEMP0 * GENERATE AN 'ALSS' INSTRUCTION 1327 | ADD (ALSS 0) *** 1328 | DAC TEMP2 1329 | 1330 | LAC RND GET BACK THE PSEUDO-RANDOM NUMBER 1331 | LRSS 10. *** 1332 | XCT TEMP2 * GENERATE A RANDOM X LOCATION FOR THIS POINT 1333 | ADD SQXLOC,I *** 1334 | DAC XLOC 1335 | 1336 | LACQ "GET BACK THE PSEUDO-RANDOM NUMBER 1337 | LRSS 10. *** 1338 | XCT TEMP2 * GENERATE A RANDOM Y LOCATION FOR THIS POINT 1339 | ADD SQYLOC,I *** 1340 | DAC YLOC 1341 | 1342 | JMS SCOPE DISPLAY ANOTHER POINT ON THE SCOPE 1343 | 1344 | ISZ TEMP1 INCREMENT THE NUMBER OF POINTS WE GENERATED 1345 | JMP BLOW1 RETURN FOR MORE 1346 | 1347 | ISZ SQTIME,I WHEN THE TIMER TIMES OUT, WE 1348 | JMP NEXT 1349 | 1350 | DZM SQTRAN,I ZERO OUT SLOT IN TRANSFER VECTOR 1351 | JMP NEXT AND RETURN 1352 | .STITL BULLET MANAGEMENT ROUTINE 1353 | * 1354 | * 1355 | *BULLET MANAGEMENT ROUTINE 1356 | * 1357 | BULLET: JMS GRAV CALCULATE THE EFFECT OF GRAVITY ON THE BULLET 1358 | * 1359 | * 1360 | *REDUCE VELOCITY BY GRAVITY AND FRICTION FACTORS 1361 | * 1362 | JMS UPDATE REDUCE VELOCITY BY GRAVITY AND FRICTION FACTORS 1363 | * 1364 | * 1365 | *UPDATE THE POSITION OF THE BULLET ON THE SCREEN 1366 | * 1367 | LAC SQXLOC,I GET X LOCATION 1368 | DAC XLOC 1369 | 1370 | LAC SQYLOC,I GET Y LOCATION 1371 | DAC YLOC 1372 | 1373 | LAC (040007) PUT A 'SET INTENSITY 3' COMMAND IN THE SCOPE BUFFER 1374 | DAC X0,I 1375 | 1376 | JMS SCOPE AND PUT THE POINT ON THE SCOPE 1377 | * 1378 | * 1379 | *DESTROY THE BULLET IF IT TIMES OUT 1380 | * 1381 | ISZ SQTIME,I INCREMENT THE BULLET TIMER 1382 | JMP NEXT 1383 | 1384 | JMP KILL1 AND DESTROY IT IF IT TIMES OUT 1385 | .STITL SUN MANAGEMENT ROUTINE 1386 | * 1387 | * 1388 | *SUN MANAGEMENT ROUTINE 1389 | * 1390 | TWINKL: LAC (040007) PUT A 'SET INTENSITY 3' COMMAND IN THE SCOPE BUFFER 1391 | DAC X0,I 1392 | 1393 | DZM XLOC ZERO X-COORDINATE 1394 | DZM YLOC ZERO Y-COORDINATE 1395 | 1396 | JMS SCOPE DRAW THE POINT IN THE CENTER 1397 | 1398 | LAC (040006) PUT A 'SET INTENSITY 2' COMMAND IN THE SCOPE BUFFER 1399 | DAC X0,I 1400 | 1401 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1402 | AND (004747) MASK TO 'SHORT VECTOR' X AND Y COMPONENTS 1403 | XOR (220000) OR IN THE 'DRAW SHORT VECTOR' COMMAND 1404 | DAC X0,I PUT THE RESULTANT COMMAND IN THE SCOPE BUFFER 1405 | 1406 | LAC (040007) PUT A 'SET INTENSITY 3' COMMAND IN THE SCOPE BUFFER 1407 | DAC X0,I 1408 | 1409 | JMS SCOPE REDRAW THE POINT IN THE CENTER 1410 | 1411 | LAC (040006) PUT A 'SET INTENSITY 2' COMMAND IN THE SCOPE BUFFER 1412 | DAC X0,I 1413 | 1414 | LAC RND GET BACK THE PSEUDO-RANDOM NUMBER 1415 | AND (004747) MASK TO 'SHORT VECTOR' X AND Y COMPONENTS 1416 | XOR (224040) OR IN THE 'DRAW SHORT VECTOR' COMMAND 1417 | DAC X0,I PUT THE RESULTANT COMMAND IN THE SCOPE BUFFER 1418 | 1419 | 1420 | LAC (400000) *** 1421 | ADD PSCBUF * LINK THE STAR SCOPE BUFFER ONTO THE END OF THE CURRENT SCOPE BUFFER 1422 | DAC X0,I *** 1423 | 1424 | LAC OFFSET *** 1425 | CMA "* FLIP THE OFFSET -- EFFECTIVELY SWAP SCOPE BUFFERS 1426 | DAC OFFSET *** 1427 | 1428 | ADD STREND,I AND ADD IT TO THE STAR BUFFER TRAP WORD 1429 | DAC STREND,I SO THAT IT POINTS TO THE BUFFER WE JUST WROTE 1430 | .STITL STAR MANAGEMENT ROUTINE 1431 | * 1432 | * 1433 | *STAR MANAGEMENT ROUTINE 1434 | * 1435 | ISZ STIMER HAS TIMER TIMED OUT YET? 1436 | JMP THREE NO, DON'T MOVE THE STARS UNTIL IT DOES 1437 | 1438 | LAW -16.-1 INITIALIZE THE STAR TIMER 1439 | DAC STIMER 1440 | 1441 | ISZ SRANGE INCREMENT X-COORDINATE RANGE 1442 | NOP 1443 | 1444 | LAC PSBUF1 GET A POINTER TO THE STAR SCOPE BUFFER 1445 | DAC X1 1446 | * 1447 | * 1448 | *MOVE THE STARS FROM LEFT TO RIGHT ON THE SCREEN 1449 | * 1450 | STARS1: ISZ X1,I MOVE A STAR FROM LEFT TO RIGHT 1451 | 1452 | ISZ X1 BUMP STAR TABLE POINTER 1453 | ISZ X1 1454 | 1455 | STARS2: LAC X1 GET BACK POINTER TO STAR TABLE 1456 | SAD PSBUF2 SEE IF AT BEGINNING OF STAR SCOPE BUFFER 1457 | JMP STARS3 YES 1458 | 1459 | SAD STREND SEE IF AT END OF STAR SCOPE BUFFER 1460 | SKP "YES 1461 | JMP STARS1 NO, CONTINUE 1462 | 1463 | LAC PSCBUF *** 1464 | DAC X1 * RESET POINTER TO STAR SCOPE BUFFER 1465 | ISZ X1 *** 1466 | 1467 | JMP STARS2 AND THEN CONTINUE 1468 | .EJECT 1469 | * 1470 | * 1471 | *MOVE STARS OFF RIGHT EDGE OF SCREEN 1472 | * 1473 | STARS3: LAC PSBUF1 *** 1474 | DAC TEMP0 * GET A POINTER TO THE STAR SCOPE BUFFER 1475 | ISZ TEMP0 *** 1476 | 1477 | LAC TEMP0,I GET A STAR 1478 | AND (2000) COMPARE X-COORDINATE WITH WIDTH OF SCREEN 1479 | SNA "TO SEE IF MOVING OFF RIGHT EDGE OF SCREEN 1480 | JMP STARS4 NO 1481 | 1482 | LAC (300000) YES 1483 | 1484 | DAC PSBUF1,I CLEAR OUT 'SET INTENSITY' SCOPE COMMAND 1485 | ISZ PSBUF1 1486 | 1487 | DAC PSBUF1,I CLEAR OUT 'MOVE TO X' SCOPE COMMAND 1488 | ISZ PSBUF1 1489 | 1490 | DAC PSBUF1,I CLEAR OUT 'MOVE TO Y' SCOPE COMMAND 1491 | ISZ PSBUF1 1492 | 1493 | LAC PSBUF1 GET BACK POINTER 1494 | SAD STREND SEE IF AT END OF STAR SCOPE BUFFER 1495 | SKP "YES 1496 | JMP STARS3 NO, CONTINUE CHECKING FOR EXPIRED STARS 1497 | 1498 | LAC PSCBUF *** 1499 | DAC PSBUF1 * RESET POINTER TO STAR SCOPE BUFFER 1500 | ISZ PSBUF1 *** 1501 | 1502 | JMP STARS3 AND THEN CONTINUE CHECKING FROM THE BEGINNING 1503 | .EJECT 1504 | * 1505 | * 1506 | *MOVE STARS ONTO LEFT EDGE OF SCREEN 1507 | * 1508 | STARS4: LAC PSTABL,I GET X-COORDINATE 1509 | ADD SRANGE SEE IF ON SCOPE 1510 | SPA 1511 | JMP THREE NO, DONE, EXIT 1512 | 1513 | DAC TEMP0 SAVE X-COORDINATE 1514 | 1515 | ISZ PSTABL INCREMENT STAR TABLE POINTER 1516 | 1517 | LAC PSTABL,I GET Y-COORDINATE AND INTENSITY 1518 | ISZ PSTABL INCREMENT STAR TABLE POINTER 1519 | LMQ!EAECLA!LLSS 3 RIGHT JUSTIFY INTENSITY IN AC 1520 | XOR (040000) OR IN SCOPE COMMAND 1521 | DAC PSBUF2,I PUT IN STAR SCOPE BUFFER 1522 | ISZ PSBUF2 INCREMENT STAR SCOPE BUFFER POINTER 1523 | 1524 | LAC TEMP0 GET BACK X-COORDINATE 1525 | XOR (140000) OR IN SCOPE COMMAND 1526 | DAC PSBUF2,I PUT IN STAR SCOPE BUFFER 1527 | ISZ PSBUF2 INCREMENT STAR SCOPE BUFFER POINTER 1528 | 1529 | EAECLA!LLSS 18.-3 GET BACK Y-COORDINATE 1530 | XOR (174000) OR IN SCOPE COMMAND 1531 | DAC PSBUF2,I PUT IN STAR SCOPE BUFFER 1532 | ISZ PSBUF2 INCREMENT STAR SCOPE BUFFER POINTER 1533 | 1534 | LAC PSBUF2 *** 1535 | SAD STREND * SEE IF AT END OF STAR SCOPE BUFFER 1536 | SKP "*** 1537 | JMP STARS5 NO 1538 | 1539 | LAC PSCBUF *** 1540 | DAC PSBUF2 * YES, RESET POINTER TO BEGINNING OF STAR SCOPE BUFFER 1541 | ISZ PSBUF2 *** 1542 | 1543 | STARS5: LAC PSTABL *** 1544 | SAD ENDTAB * SEE IF AT END OF STAR TABLE 1545 | SKP "*** 1546 | JMP STARS4 *** 1547 | LAC (STABLE) * YES, RESET POINTER TO BEGINNING OF STAR TABLE 1548 | DAC PSTABL *** 1549 | 1550 | LAC SRANGE *** 1551 | ADD (-8.*1024.-1) * REINITIALIZE X-COORDINATE RANGE 1552 | DAC SRANGE *** 1553 | 1554 | JMP STARS4 1555 | .STITL SHIP MANAGEMENT ROUTINES 1556 | * 1557 | * 1558 | *SHIP 1 MANAGEMENT ROUTINE 1559 | * 1560 | S1SHIP: JMS BUTTIN GET THE PUSHBUTTONS FOR SHIP 1 1561 | JMP SXSHIP-1 1562 | * 1563 | * 1564 | *SHIP 2 MANAGEMENT ROUTINE 1565 | * 1566 | S2SHIP: JMS BUTTIN GET THE PUSHBUTTONS FOR SHIP 2 1567 | JMP SXSHIP 1568 | * 1569 | * 1570 | *SHIP 3 MANAGEMENT ROUTINE 1571 | * 1572 | S3SHIP: LAC SWITCH GET BACK THE SWITCHES 1573 | CMA "INVERT 1574 | ALS 12. GET THE PUSHBUTTONS FOR SHIP 3 1575 | * 1576 | * 1577 | *SHIP MANAGEMENT ROUTINE 1578 | * 1579 | SXSHIP: DAC BUTINS SAVE THE PUSHBUTTONS 1580 | 1581 | LAC (JMP FIRE) GET AN APPROPRIATE INSTRUCTION TO PUT 1582 | DAC DRAWJ IN SUCH A PLACE AS NOT TO PRINT A JET ON THE SHIP 1583 | 1584 | ISZ SQTIME,I INCREMENT THE BULLET INTERVAL TIMER 1585 | NOP 1586 | 1587 | ISZ SQWTIM,I INCREMENT THE AMOUNT OF TIME UNTIL NEXT POSSIBLE WARP TIMER 1588 | NOP 1589 | 1590 | LAC SWITCH GET BACK THE SWITCHES 1591 | CMA "INVERT 1592 | 1593 | AND (770000) SAVE JUST THE DISABLE BITS 1594 | AND BUTINS GET ONLY THE PERMITTED PUSHBUTTONS 1595 | AND SQDAMS,I TAKE INTO ACCOUNT INDIVIDUAL DISABILITIES 1596 | 1597 | DAC BUTINS SAVE THE PERMITTED PUSHBUTTONS FOR OTHER ROUTINES 1598 | .STITL SHIP MANAGEMENT ROUTINES -- WARP 1599 | * 1600 | * 1601 | *CHECK FOR WARP 1602 | * 1603 | SPA!CMA "SEE IF THE PLAYER SEEKS TO ESCAPE FROM REALITY 1604 | 1605 | LAC SQWTIM,I *** 1606 | SPA "* CHECK AMOUNT OF TIME BETWEEN WARP TO SEE IF IT'S PERMITTED AGAIN YET 1607 | JMP VISIBL *** 1608 | 1609 | LAC SQTRAN,I GET THE OLD MANAGEMENT ROUTINE ADDRESS 1610 | DAC SQWTIM,I SAVE IT 1611 | 1612 | LAW VANISH GET THE NEW MANAGEMENT ROUTINE ADDRESS 1613 | DAC SQTRAN,I PUT IT IN THE TRANSFER VECTOR 1614 | 1615 | LAC WTIME GET THE AMOUNT OF TIME THAT A WARP LASTS 1616 | DAC SQTIME,I START TIMING 1617 | 1618 | JMP NEXT AND RETURN 1619 | .EJECT 1620 | * 1621 | * 1622 | *MAKE THE SHIP DISAPPEAR AND REAPPEAR ELSEWHERE 1623 | * 1624 | VANISH: ISZ SQTIME,I IS IT TIME TO COME BACK YET? 1625 | JMP NEXT NO, SO RETURN 1626 | 1627 | LAC (PREVUE+300000) YES, GET THE ADDRESS OF THE WARP STAR ROUTINE 1628 | DAC SQTRAN,I AND PUT IT IN THE TRANSFER VECTOR 1629 | 1630 | LAC STIME GET THE AMOUNT OF TIME THAT A WARP STAR LASTS 1631 | DAC SQTIME,I PUT IT IN THE TIMER 1632 | 1633 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1634 | XCT WAREA MODIFY IT ACCORDING TO THE HANDICAP TABLE 1635 | ADD SQXLOC,I ADD THE PREVIOUS X LOCATION 1636 | DAC SQXLOC,I TO GET A NEW, RANDOM X LOCATION 1637 | 1638 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1639 | XCT WAREA MODIFY IT ACCORDING TO THE HANDICAP TABLE 1640 | ADD SQYLOC,I ADD THE PREVIOUS Y LOCATION 1641 | DAC SQYLOC,I TO GET A NEW, RANDOM Y LOCATION 1642 | 1643 | JMP NEXT AND RETURN 1644 | .EJECT 1645 | * 1646 | * 1647 | *MAKE WARP STAR 1648 | * 1649 | PREVUE: LAC (040006) PUT A 'SET INTENSITY 2' COMMAND IN THE SCOPE BUFFER 1650 | DAC X0,I 1651 | 1652 | LAC SQXLOC,I SET UP THE X LOCATION 1653 | DAC XLOC 1654 | 1655 | LAC SQYLOC,I SET UP THE Y LOCATION 1656 | DAC YLOC 1657 | 1658 | JMS SCOPE AND PUT THE STAR ON THE SCOPE 1659 | 1660 | ISZ SQTIME,I INCREMENT THE WARP STAR TIMER 1661 | JMP NEXT AND RETURN IF NON-ZERO 1662 | 1663 | LAC SQWFAC,I IF ZERO, GET THE OLD WARP FACTOR 1664 | ADD WFACT MODIFY IT ACCORDING TO THE HANDICAP TABLE 1665 | DAC SQWFAC,I TO GET A NEW WARP FACTOR 1666 | 1667 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1668 | SMA "IS IT A NEGATIVE PSEUDO-RANDOM NUMBER? 1669 | CMA "NO, SO TURN IT INTO ONE 1670 | 1671 | ADD SQWFAC,I *** 1672 | SMA "* WAS THIS WARP FATAL? 1673 | JMP FATALW *** 1674 | 1675 | LAC SQWTIM,I WE SURVIVED 1676 | DAC SQTRAN,I SO RESTORE THE OLD TRANSFER VECTOR ENTRY 1677 | 1678 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1679 | XCT WVELO MODIFY IT ACCORDING TO THE HANDICAP TABLE 1680 | DAC SQXVEL,I SET IT UP AS THE NEW X VELOCITY 1681 | 1682 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1683 | XCT WVELO MODIFY IT ACCORDING TO THE HANDICAP TABLE 1684 | DAC SQYVEL,I SET IT UP AS THE NEW Y VELOCITY 1685 | 1686 | LAC RND GET BACK THE PSEUDO-RANDOM NUMBER 1687 | DAC SQANGL,I GET A NEW ANGLE 1688 | 1689 | RTL 1690 | LRSS 4 1691 | DAC SQROLL,I AND A NEW ROLL 1692 | 1693 | LAC DTIME GET THE AMOUNT OF TIME UNTIL NEXT POSSIBLE WARP 1694 | DAC SQWTIM,I ENTER IT IN THE OBJECT DEFINITION TABLE 1695 | 1696 | JMP NEXT AND RETURN 1697 | .EJECT 1698 | * 1699 | * 1700 | *SET UP FOR EXPLOSION 1701 | * 1702 | FATALW: LAC (BLOWUP+300000+400000) GET THE ADDRESS OF THE EXPLOSION ROUTINE 1703 | DAC SQTRAN,I ENTER IT IN THE OBJECT DEFINITION TABLE 1704 | 1705 | LAW -16.-1 GET THE AMOUNT OF TIME THAT AN EXPLOSION LASTS 1706 | DAC SQTIME,I AND PUT IT IN THE TIMER SLOT 1707 | 1708 | DZM SQBULL,I WIPE OUT ITS BULLETS 1709 | 1710 | ISZ NSHIP *** 1711 | JMP NEXT * DECREMENT COUNTER OF SURVIVING SHIPS 1712 | JMP NEXT *** 1713 | .STITL SHIP MANAGEMENT ROUTINES -- INVISIBILITY 1714 | * 1715 | * 1716 | *CHECK FOR INVISIBILITY 1717 | * 1718 | VISIBL: ISZ SQINVT,I INCREMENT THE AMOUNT OF TIME SINCE WE LAST CHANGED STATE 1719 | NOP 1720 | 1721 | LAC BUTINS GET THE PUSHBUTTONS 1722 | AND (010000) SEE IF A CHANGE OF STATE IS DESIRED 1723 | SZA!CMA 1724 | 1725 | LAC SQINVT,I *** 1726 | SPA "* SEE IF IT'S PERMITTED AGAIN YET 1727 | JMP BEJUST *** 1728 | 1729 | LAW -30.-1 RESET THE INVISIBILITY TIMER TO ONE SECOND 1730 | DAC SQINVT,I 1731 | 1732 | XOR SQINVF,I CHANGE THE STATE OF THE INVISIBILITY FLAG 1733 | DAC SQINVF,I 1734 | .STITL SHIP MANAGEMENT ROUTINES -- CONTROL RESTORATION 1735 | * 1736 | * 1737 | *GIVE UNFORTUNATE PLAYER WHO HAS LOST HIS THRUST A SECOND CHANCE 1738 | * 1739 | BEJUST: LAC SQDAMS,I GET SHIP'S DAMAGES 1740 | AND (040000) EXTRACT THRUSTING BIT 1741 | SNA "SKIP IF STILL THERE 1742 | 1743 | ISZ SQTTIM,I INCREMENT TIMER 1744 | JMP BEFAIR IT HASN'T TIMED OUT YET 1745 | 1746 | LAC SQDAMS,I GET BACK DAMAGES 1747 | XOR (040000) RESTORE THRUSTING CAPABILITY 1748 | DAC SQDAMS,I PUT BACK DAMAGES 1749 | * 1750 | * 1751 | *GIVE UNFORTUNATE PLAYER WHO HAS LOST HIS BULLETS A SECOND CHANCE 1752 | * 1753 | BEFAIR: LAC SQDAMS,I GET SHIP'S DAMAGES 1754 | AND (020000) EXTRACT BULLET-FIRING BIT 1755 | SNA "SKIP IF STILL THERE 1756 | 1757 | ISZ SQBTIM,I INCREMENT TIMER 1758 | JMP BEKIND IT HASN'T TIMED OUT YET 1759 | 1760 | LAC SQDAMS,I GET BACK DAMAGES 1761 | XOR (020000) RESTORE BULLET-FIRING CAPABILITY 1762 | DAC SQDAMS,I PUT BACK DAMAGES 1763 | .EJECT 1764 | * 1765 | * 1766 | *GIVE UNFORTUNATE PLAYER WHO HAS LOST HIS LEFT TURN A SECOND CHANCE 1767 | * 1768 | BEKIND: LAC SQDAMS,I GET SHIP'S DAMAGES 1769 | AND (200000) EXTRACT LEFT TURNING BIT 1770 | SNA "SKIP IF STILL THERE 1771 | 1772 | ISZ SQLTIM,I INCREMENT TIMER 1773 | JMP BENICE IT HASN'T TIMED OUT YET 1774 | 1775 | LAC SQDAMS,I GET BACK DAMAGES 1776 | AND (-001000-1) EXCLUDING INCIDENTAL DAMAGES 1777 | XOR (201000) RESTORE LEFT TURNING CAPABILITY; TURN OFF ANGULAR MOMENTUM 1778 | DAC SQDAMS,I PUT BACK DAMAGES 1779 | * 1780 | * 1781 | *GIVE UNFORTUNATE PLAYER WHO HAS LOST HIS RIGHT TURN A SECOND CHANCE 1782 | * 1783 | BENICE: LAC SQDAMS,I GET SHIP'S DAMAGES 1784 | AND (100000) EXTRACT RIGHT TURNING BIT 1785 | SNA "SKIP IF STILL THERE 1786 | 1787 | ISZ SQRTIM,I INCREMENT TIMER 1788 | JMP CALROL IT HASN'T TIMED OUT YET 1789 | 1790 | LAC SQDAMS,I GET BACK DAMAGES 1791 | AND (-001000-1) EXCLUDING INCIDENTAL DAMAGES 1792 | XOR (101000) RESTORE LEFT TURNING CAPABILITY; TURN OFF ANGULAR MOMENTUM 1793 | DAC SQDAMS,I PUT BACK DAMAGES 1794 | .STITL SHIP MANAGEMENT ROUTINES -- TURNING 1795 | * 1796 | * 1797 | *CALCULATE ROLL 1798 | * 1799 | CALROL: LAC ROLL STICK USER PARAMETER IN PROGRAM 1800 | DAC ROLFAC 1801 | 1802 | LAC BUTINS GET THE PUSHBUTTONS 1803 | RAL "PUT THE LEFT ROLL BIT IN AC0 AND THE RIGHT IN AC1 1804 | CMA "CHANGE THEIR SIGNS 1805 | GSM "GET A POSITIVE NUMBER 1806 | AND (600000) MASK OUT LOW ORDER BITS 1807 | 1808 | MULS "AND MULTIPLY BY THE ROLL CONSTANT 1809 | ROLFAC: 0 1810 | 1811 | LLSS 2 DOUBLE THE RESULT 1812 | 1813 | LMQ "*** 1814 | ADD SQROLL,I * INCREMENT THE ROLL, ASSUMING ANGULAR MOMENTUM IS ON 1815 | DAC SQROLL,I *** 1816 | 1817 | LAC SWITCH GET BACK THE SWITCHES 1818 | AND (001000) SEE IF ANGULAR MOMENTUM IS ON 1819 | SNA!CLA "IF SO, NOTHING MORE TO DO 1820 | 1821 | LAC SQDAMS,I GET DAMAGES INCURRED 1822 | AND (001000) *** 1823 | SNA "* SEE IF ANGULAR MOMENTUM IS ON -- IF SO, NOTHING MORE TO DO 1824 | JMP CALANG *** 1825 | 1826 | LACQ "*** 1827 | ALSS 5 * ANGULAR MOMENTUM IS OFF -- SO REDUCE THE ROLL 1828 | DAC SQROLL,I *** 1829 | * 1830 | * 1831 | *CALCULATE ANGLE 1832 | * 1833 | CALANG: LAC SQANGL,I *** 1834 | ADD SQROLL,I * ADD THE ROLL TO THE OLD ANGLE TO CALCULATE THE NEW ANGLE 1835 | DAC SQANGL,I *** 1836 | 1837 | JMS SINCOS CALCULATE THE SINE AND COSINE OF THE ANGLE 1838 | 1839 | JMS GRAV AND GET THE EFFECT OF GRAVITY ON THIS SHIP 1840 | .STITL SHIP MANAGEMENT ROUTINES -- THRUSTING 1841 | * 1842 | * 1843 | *CHECK FOR THRUSTING 1844 | * 1845 | LAC BUTINS GET THE PUSHBUTTONS 1846 | AND (040000) SEE IF THRUSTING 1847 | SZA 1848 | 1849 | LAC SQFUEL,I *** 1850 | SMA "* CHECK FUEL SUPPLY 1851 | JMP DRAWP *** 1852 | 1853 | LAC COSINE GET THE COSINE OF THE ANGLE OF THE SHIP 1854 | XCT THRUS MODIFY IT ACCORDING TO THE HANDICAP TABLE 1855 | ADD XGRAV ADD THE EFFECT OF GRAVITY 1856 | DAC XGRAV TO GET A COMPOSITE EFFECT ON THE X VELOCITY 1857 | 1858 | LAC SINE GET THE SINE OF THE ANGLE OF THE SHIP 1859 | XCT THRUS MODIFY IT ACCORDING TO THE HANDICAP TABLE 1860 | ADD YGRAV ADD THE EFFECT OF GRAVITY 1861 | DAC YGRAV TO GET A COMPOSITE EFFECT ON THE Y VELOCITY 1862 | 1863 | LAC (NOP) PUT A 'NOP' INSTRUCTION IN 1864 | DAC DRAWJ 'DRAWJ' TO PRINT A JET ON THE SHIP 1865 | 1866 | ISZ SQFUEL,I DECREMENT THE AMOUNT OF FUEL LEFT 1867 | NOP 1868 | .EJECT 1869 | DRAWP: JMS UPDATE REDUCE VELOCITY BY GRAVITY AND FRICTION FACTORS 1870 | 1871 | 1872 | JMS DRAWS GO DRAW THE PICTURE OF THE SHIP 1873 | 1874 | 1875 | DRAWJ: HLT "WE PUT A 'NOP' INSTRUCTION HERE IF WE ARE THRUSTING 1876 | "OTHERWISE WE PUT A 'JMP FIRE' HERE 1877 | 1878 | LAC (040006) PUT A 'SET INTENSITY 2' COMMAND IN THE SCOPE BUFFER 1879 | DAC X0,I 1880 | 1881 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 1882 | STL "*** 1883 | LRS 14. * CALCULATE THE LENGTH OF THE JET 1884 | DAC TEMP0 *** 1885 | 1886 | LAC COSINE GET THE COSINE OF THE SHIP'S ANGLE 1887 | CMA "*** 1888 | LRSS 6 * GRANULARIZE THE COSINE FOR USE IN DRAWING THE JET 1889 | DAC MCOS *** 1890 | 1891 | LAC SINE GET THE SINE OF THE SHIP'S ANGLE 1892 | CMA "*** 1893 | LRSS 6 * GRANULARIZE THE SINE FOR USE IN DRAWING THE JET 1894 | DAC MSIN *** 1895 | 1896 | DRAWJ1: LAC XLOC *** 1897 | ADD MCOS * UPDATE X LOCATION 1898 | DAC XLOC *** 1899 | 1900 | LAC YLOC *** 1901 | ADD MSIN * UPDATE Y LOCATION 1902 | DAC YLOC *** 1903 | 1904 | JMS SCOPE DRAW A POINT OF THE JET ON THE SCOPE 1905 | 1906 | ISZ TEMP0 HAVE WE REACHED THE TAIL END? 1907 | JMP DRAWJ1 NO, LOOP BACK TO DRAW ANOTHER POINT 1908 | .STITL SHIP MANAGEMENT ROUTINES -- FIRING BULLETS 1909 | * 1910 | * 1911 | *CHECK FOR BULLET-FIRING 1912 | * 1913 | FIRE: LAC BUTINS GET THE PUSHBUTTONS 1914 | AND (020000) SEE IF FIRING BULLETS 1915 | SZA!CMA 1916 | 1917 | LAC SQTIME,I SEE IF SHIP IS ALLOWED TO FIRE ANOTHER BULLET YET 1918 | SMA!CMA 1919 | 1920 | LAC SQBULL,I *** 1921 | SMA "* SEE IF IN FACT SHIP HAS ANY BULLETS LEFT TO FIRE 1922 | JMP NEXT *** 1923 | * 1924 | * 1925 | *SEARCH FOR A VACANT SLOT IN THE TRANSFER VECTOR 1926 | * 1927 | LAC (LAC TRNEND) GET AN INSTRUCTION WHICH WILL PICK UP THE LAST TRANSFER VECTOR ENTRY 1928 | 1929 | FIRE1: DAC FIRE2 STICK IT IN THE PROGRAM 1930 | 1931 | FIRE2: HLT 1932 | 1933 | SNA!CLC "DID WE FIND A HOLE? 1934 | JMP FIRE3 YES 1935 | 1936 | TAD FIRE2 BACK UP ONE ENTRY IN THE TRANSFER VECTOR 1937 | 1938 | SAD (LAC SXTRAN+NUMSHP-1) IS THE TRANSFER VECTOR FULL? 1939 | JMP NEXT YES, SO NO MORE BULLETS 1940 | 1941 | JMP FIRE1 NO, CONTINUE SEARCH FOR FREE ENTRY IN TRANSFER VECTOR 1942 | .EJECT 1943 | * 1944 | * 1945 | *SET UP THE VARIOUS PARAMETERS WHICH DEFINE THIS OBJECT ON THE SCREEN 1946 | * 1947 | FIRE3: LAC (BULLET+020000) GET A POINTER TO THE BULLET MANAGEMENT SUBROUTINE 1948 | DAC FIRE2,I AND PUT IT IN THE TRANSFER VECTOR 1949 | 1950 | LAC FIRE2 1951 | ADD (SXXLOC-SXTRAN) SET UP A POINTER TO THE X LOCATION 1952 | DAC TEMP0 1953 | 1954 | ADD (SXYLOC-SXXLOC) SET UP A POINTER TO THE Y LOCATION 1955 | DAC TEMP1 1956 | 1957 | ADD (SXXVEL-SXYLOC) SET UP A POINTER TO THE X VELOCITY 1958 | DAC TEMP2 1959 | 1960 | ADD (SXYVEL-SXXVEL) SET UP A POINTER TO THE Y VELOCITY 1961 | DAC TEMP3 1962 | 1963 | ADD (SXTIME-SXYVEL) SET UP A POINTER TO THE TIMER 1964 | DAC FIRE2 1965 | 1966 | LAC COSINE *** 1967 | LRSS 2 * GENERATE THE X LOCATION 1968 | ADD SQXLOC,I *** 1969 | DAC TEMP0,I 1970 | 1971 | LAC SINE *** 1972 | LRSS 2 * GENERATE THE Y LOCATION 1973 | ADD SQYLOC,I *** 1974 | DAC TEMP1,I 1975 | 1976 | LAC COSINE *** 1977 | XCT BLVEL * GENERATE THE X VELOCITY 1978 | ADD SQXVEL,I *** 1979 | DAC TEMP2,I 1980 | 1981 | LAC SINE *** 1982 | XCT BLVEL * GENERATE THE Y VELOCITY 1983 | ADD SQYVEL,I *** 1984 | DAC TEMP3,I 1985 | 1986 | LAC BLTIM GET THE AMOUNT OF TIME THAT A BULLET LASTS 1987 | DAC FIRE2,I INITIALIZE THE BULLET'S TIMER 1988 | 1989 | LAC BLINT GET THE INTERVAL THAT BULLETS CAN BE SHOT 1990 | DAC SQTIME,I INITIALIZE THE SHIP'S TIMER 1991 | 1992 | ISZ SQBULL,I *** 1993 | JMP NEXT * DECREMENT THE BULLET SUPPLY AND RETURN 1994 | JMP NEXT *** 1995 | .STITL SHIP MANAGEMENT ROUTINES 1996 | * 1997 | * 1998 | *REDUCE VELOCITY BY GRAVITY AND FRICTION FACTORS 1999 | * 2000 | UPDATE: XX 2001 | 2002 | LAC FRICT *** 2003 | DAC FRIC1 * STICK USER PARAMETER IN PROGRAM 2004 | DAC FRIC2 *** 2005 | 2006 | * 2007 | * 2008 | *UPDATE X PARAMETERS: X VELOCITY AND X LOCATION 2009 | * 2010 | LAC XGRAV *** 2011 | ADD SQXVEL,I * REDUCE X VELOCITY BY GRAVITY 2012 | CLL "*** 2013 | 2014 | MULS "REDUCE X VELOCITY BY FRICTION FACTOR 2015 | FRIC1: 0 2016 | 2017 | LLSS 1 UPDATE REDUCED X VELOCITY 2018 | DAC SQXVEL,I 2019 | 2020 | LRSS 3 *** 2021 | ADD SQXLOC,I * UPDATE X LOCATION ACCORDING TO X VELOCITY 2022 | DAC SQXLOC,I *** 2023 | 2024 | * 2025 | * 2026 | *UPDATE Y PARAMETERS: Y VELOCITY AND Y LOCATION 2027 | * 2028 | LAC YGRAV *** 2029 | ADD SQYVEL,I * REDUCE Y VELOCITY BY GRAVITY 2030 | CLL "*** 2031 | 2032 | MULS "REDUCE Y VELOCITY BY FRICTION FACTOR 2033 | FRIC2: 0 2034 | 2035 | LLSS 1 UPDATE REDUCED Y VELOCITY 2036 | DAC SQYVEL,I 2037 | 2038 | LRSS 3 *** 2039 | ADD SQYLOC,I * UPDATE Y LOCATION ACCORDING TO Y VELOCITY 2040 | DAC SQYLOC,I *** 2041 | 2042 | JMP UPDATE,I EXIT 2043 | .STITL SHIP MANAGEMENT ROUTINES -- DRAWING THE PICTURE 2044 | DRAWS: XX 2045 | 2046 | LAC SINE *** 2047 | LRSS 7 * GRANULARIZE THE SINE FOR USE IN DRAWING THE PICTURE 2048 | DAC SIN *** 2049 | 2050 | CMA "COMPLEMENT THE RESULT FOR USE IN DRAWING THE PICTURE 2051 | DAC MSIN 2052 | 2053 | LAC COSINE *** 2054 | LRSS 7 * GRANULARIZE THE COSINE FOR USE IN DRAWING THE PICTURE 2055 | DAC COS *** 2056 | 2057 | CMA "COMPLEMENT THE RESULT FOR USE IN DRAWING THE PICTURE 2058 | DAC MCOS 2059 | 2060 | ADD MSIN CALCULATE THE GRANULARIZED -SINE-COSINE FOR USE DRAWING THE PICTURE 2061 | DAC MSNMCS 2062 | 2063 | LAC SIN *** 2064 | ADD MCOS * CALCULATE THE GRANULARIZED SINE-COSINE FOR USE IN DRAWING THE PICTURE 2065 | DAC SINMCS *** 2066 | 2067 | CMA "FINALLY, CALCULATE THE GRANULARIZED COSINE-SINE 2068 | DAC CSMSIN FOR USE IN DRAWING THE PICTURE OF THE SHIP 2069 | 2070 | LAC COSINE 2071 | LRSS 3 *** 2072 | ADD SQXLOC,I * CALCULATE THE X-COORDINATE OF THE FRONT OF THE SHIP 2073 | DAC XFRONT *** 2074 | 2075 | LAC SINE 2076 | LRSS 3 *** 2077 | ADD SQYLOC,I * CALCULATE THE Y-COORDINATE OF THE FRONT OF THE SHIP 2078 | DAC YFRONT *** 2079 | 2080 | LAC (040005) PUT A 'SET INTENSITY 1' COMMAND IN THE SCOPE BUFFER 2081 | DAC X0,I 2082 | .EJECT 2083 | LAC (JMP DRAWLH) INITIALIZE POINTER TO FIRST COMMAND TABLE 2084 | DAC DRAWT 2085 | 2086 | LAW -1 INITIALIZE THE '6' COMMAND SWITCH: 'SAVE CURRENT POINTER' 2087 | DAC TEMP0 2088 | 2089 | LAC SQDAMS,I GET SHIP'S DAMAGES 2090 | CMA!OAS "AND ITS DISABLEMENTS 2091 | 2092 | JMP DRAW2 2093 | 2094 | DRAW1: LAC SQDAMS,I GET SHIP'S DAMAGES 2095 | CMA!OAS "AND ITS DISABLEMENTS 2096 | 2097 | RAL 2098 | 2099 | DRAW2: RTL 2100 | 2101 | LAC SQPICN,I SHOW THAT FIN IS MISSING 2102 | SNL 2103 | LAC SQPICP,I SHOW THAT FIN IS STILL THERE 2104 | 2105 | DAC X5 SET UP A POINTER TO THE PICTURE 2106 | 2107 | LAC XFRONT GET THE X LOCATION OF THE FRONT OF THE SHIP 2108 | DAC XLOC 2109 | 2110 | LAC YFRONT GET THE Y LOCATION OF THE FRONT OF THE SHIP 2111 | DAC YLOC 2112 | 2113 | DRAW3: LAC X5,I GET THE NEXT WORD OF COMMANDS 2114 | DAC TEMP3 2115 | 2116 | LAW -6-1 INITIALIZE THE SIX-PER-WORD OCTIT COUNTER 2117 | DAC TEMP2 2118 | 2119 | DRAWN: ISZ TEMP2 CHECK IF THIS WORD IS DONE 2120 | SKP 2121 | JMP DRAW3 YES 2122 | 2123 | LAC TEMP3 GET BACK RESULT OF LAST SHIFT 2124 | CLL 2125 | LMQ!EAECLA!LLS 3 GET THE NEXT COMMAND 2126 | ADD DRAWT RELATIVE TO THE BEGINNING OF THE COMMAND TABLE 2127 | DAC DRAWX 2128 | 2129 | LACQ "SAVE THE REMAINDER OF THE COMMAND WORD 2130 | DAC TEMP3 2131 | .EJECT 2132 | * 2133 | * 2134 | *GO EXECUTE THE COMMAND 2135 | * 2136 | DRAWX: HLT "GO EXECUTE THE COMMAND 2137 | * 2138 | * 2139 | *COMMANDS TO DRAW THE LEFT HALF OF THE SHIP 2140 | * 2141 | DRAWLH: JMP DRAWU 0 = DRAW A POINT STRAIGHT UP 2142 | 2143 | JMP DRAWD 1 = DRAW A POINT STRAIGHT DOWN 2144 | 2145 | JMP DRAWL 2 = DRAW A POINT TO THE LEFT 2146 | 2147 | JMP DRAWDL 3 = DRAW A POINT DIAGONALLY DOWN TO THE LEFT 2148 | 2149 | JMP DRAWR 4 = DRAW A POINT TO THE RIGHT 2150 | 2151 | JMP DRAWDR 5 = DRAW A POINT DIAGONALLY DOWN TO THE RIGHT 2152 | 2153 | JMP DRAWSP 6 = SAVE A POINTER TO THIS LOCATION OR RESTORE OLD LOCATION 2154 | 2155 | LAC (JMP DRAWRH) 7 = DONE 2156 | DAC DRAWT 2157 | 2158 | JMP DRAW1 2159 | * 2160 | * 2161 | *COMMANDS TO DRAW THE RIGHT HALF OF THE SHIP 2162 | * 2163 | DRAWRH: JMP DRAWU 0 = DRAW A POINT STRAIGHT UP 2164 | 2165 | JMP DRAWD 1 = DRAW A POINT STRAIGHT DOWN 2166 | 2167 | JMP DRAWR 2 = DRAW A POINT TO THE RIGHT 2168 | 2169 | JMP DRAWDR 3 = DRAW A POINT DIAGONALLY DOWN TO THE RIGHT 2170 | 2171 | JMP DRAWL 4 = DRAW A POINT TO THE LEFT 2172 | 2173 | JMP DRAWDL 5 = DRAW A POINT DIAGONALLY DOWN TO THE LEFT 2174 | 2175 | JMP DRAWSP 6 = SAVE A POINTER TO THIS LOCATION OR RESTORE OLD LOCATION 2176 | 2177 | JMP DRAWS,I 7 = DONE 2178 | .EJECT 2179 | * 2180 | * 2181 | *LEFT 0 = RIGHT 0 = DRAW A POINT STRAIGHT UP 2182 | * 2183 | DRAWU: LAC XLOC *** 2184 | ADD COS * INCREMENT THE X LOCATION BY THE COSINE 2185 | DAC XLOC *** 2186 | 2187 | LAC YLOC *** 2188 | ADD SIN * INCREMENT THE Y LOCATION BY THE SINE 2189 | DAC YLOC *** 2190 | 2191 | LAC SQINVF,I *** 2192 | SNA "* CHECK FOR INVISIBILITY 2193 | JMS SCOPE *** 2194 | 2195 | JMP DRAWN GO GET NEXT COMMAND 2196 | * 2197 | * 2198 | *LEFT 1 = RIGHT 1 = DRAW A POINT STRAIGHT DOWN 2199 | * 2200 | DRAWD: LAC XLOC *** 2201 | ADD MCOS * DECREMENT THE X LOCATION BY THE COSINE 2202 | DAC XLOC *** 2203 | 2204 | LAC YLOC *** 2205 | ADD MSIN * DECREMENT THE Y LOCATION BY THE SINE 2206 | DAC YLOC *** 2207 | 2208 | LAC SQINVF,I *** 2209 | SNA "* CHECK FOR INVISIBILITY 2210 | JMS SCOPE *** 2211 | 2212 | JMP DRAWN GO GET NEXT COMMAND 2213 | .EJECT 2214 | * 2215 | * 2216 | *LEFT 2 = RIGHT 4 = DRAW A POINT TO THE LEFT 2217 | * 2218 | DRAWL: LAC XLOC *** 2219 | ADD MSIN * DECREMENT THE X LOCATION BY THE SINE 2220 | DAC XLOC *** 2221 | 2222 | LAC YLOC *** 2223 | ADD COS * INCREMENT THE Y LOCATION BY THE COSINE 2224 | DAC YLOC *** 2225 | 2226 | LAC SQINVF,I *** 2227 | SNA "* CHECK FOR INVISIBILITY 2228 | JMS SCOPE *** 2229 | 2230 | JMP DRAWN GO GET NEXT COMMAND 2231 | * 2232 | * 2233 | *LEFT 3 = RIGHT 5 = DRAW A POINT DIAGONALLY DOWN TO THE LEFT 2234 | * 2235 | DRAWDL: LAC XLOC *** 2236 | ADD MSNMCS * DECREMENT THE X LOCATION BY THE SINE 2237 | DAC XLOC *** 2238 | 2239 | LAC YLOC *** 2240 | ADD CSMSIN * INCREMENT THE Y LOCATION BY THE COSINE; DECREMENT BY THE SINE 2241 | DAC YLOC *** 2242 | 2243 | LAC SQINVF,I *** 2244 | SNA "* CHECK FOR INVISIBILITY 2245 | JMS SCOPE *** 2246 | 2247 | JMP DRAWN GO GET NEXT COMMAND 2248 | .EJECT 2249 | * 2250 | * 2251 | *LEFT 4 = RIGHT 2 = DRAW A POINT TO THE RIGHT 2252 | * 2253 | DRAWR: LAC XLOC *** 2254 | ADD SIN * INCREMENT THE X LOCATION BY THE SINE 2255 | DAC XLOC *** 2256 | 2257 | LAC YLOC *** 2258 | ADD MCOS * DECREMENT THE Y LOCATION BY THE COSINE 2259 | DAC YLOC *** 2260 | 2261 | LAC SQINVF,I *** 2262 | SNA "* CHECK FOR INVISIBILITY 2263 | JMS SCOPE *** 2264 | 2265 | JMP DRAWN GO GET NEXT COMMAND 2266 | * 2267 | * 2268 | *LEFT 5 = RIGHT 3 = DRAW A POINT DIAGONALLY DOWN TO THE RIGHT 2269 | * 2270 | DRAWDR: LAC XLOC *** 2271 | ADD SINMCS * INCREMENT THE X LOCATION BY THE SINE; DECREMENT BY THE COSINE 2272 | DAC XLOC *** 2273 | 2274 | LAC YLOC *** 2275 | ADD MSNMCS * DECREMENT THE Y LOCATION BY THE SINE AND COSINE 2276 | DAC YLOC *** 2277 | 2278 | LAC SQINVF,I *** 2279 | SNA "* CHECK FOR INVISIBILITY 2280 | JMS SCOPE *** 2281 | 2282 | JMP DRAWN GO GET NEXT COMMAND 2283 | .EJECT 2284 | * 2285 | * 2286 | *LEFT 6 = RIGHT 6 = SAVE A POINTER TO THIS LOCATION 2287 | * 2288 | DRAWSP: ISZ TEMP0 SKIP IF SAVING 2289 | JMP DRAWRP JUMP IF RESTORING 2290 | 2291 | LAC XLOC SAVE CURRENT X LOCATION 2292 | DAC TEMP0 2293 | 2294 | LAC YLOC SAVE CURRENT Y LOCATION 2295 | DAC TEMP1 2296 | 2297 | JMP DRAWN AND GO GET NEXT COMMAND 2298 | * 2299 | * 2300 | *LEFT 6 = RIGHT 6 = RESTORE OLD LOCATION 2301 | * 2302 | DRAWRP: LAW -1-1 READJUST INCREMENTED X LOCATION 2303 | ADD TEMP0 2304 | DAC XLOC SET UP FOR SCOPE DRAWING SUBROUTINE 2305 | 2306 | LAC TEMP1 GET BACK THE Y LOCATION 2307 | DAC YLOC SET UP FOR SCOPE DRAWING SUBROUTINE 2308 | 2309 | LAW -1 SET SWITCH TO INTERPRET '6' COMMAND 2310 | DAC TEMP0 AS 'SAVE CURRENT POINTER' (NOT 'RESTORE CURRENT POINTER') 2311 | 2312 | JMP DRAWN GO GET NEXT COMMAND 2313 | .EJECT 2314 | * 2315 | * 2316 | *CONSTANTS USED IN DRAWING THE PICTURE 2317 | * 2318 | XFRONT: .BLOCK 1 X LOCATION OF THE FRONT OF THE SHIP (WHENCE BULLETS EMERGE) 2319 | YFRONT: .BLOCK 1 Y LOCATION OF THE FRONT OF THE SHIP (WHENCE BULLETS EMERGE) 2320 | 2321 | SIN: .BLOCK 1 2322 | COS: .BLOCK 1 2323 | 2324 | MSIN: .BLOCK 1 2325 | MCOS: .BLOCK 1 2326 | 2327 | MSNMCS: .BLOCK 1 2328 | 2329 | SINMCS: .BLOCK 1 2330 | CSMSIN: .BLOCK 1 2331 | 2332 | DRAWT: JMP DRAWT 2333 | .STITL SHIP MANAGEMENT ROUTINES -- DRAWING THE PICTURE -- SHIPS 2334 | * 2335 | * 2336 | *PUSHBUTTON 0 2337 | * 2338 | SBANK: LAW S1PIC-1 POINT TO THE PICTURE OF THE LONG, SLIM SHIP 2339 | LAW S1PICD-1 2340 | * 2341 | * 2342 | *PUSHBUTTON 1 2343 | * 2344 | LAW S2PIC-1 POINT TO THE PICTURE OF THE SHORT, FAT SHIP 2345 | LAW S2PICD-1 2346 | * 2347 | * 2348 | *PUSHBUTTON 2 2349 | * 2350 | LAW S3PIC-1 POINT TO THE PICTURE OF THE U.S.S. ENTERPRISE 2351 | LAW S3PICD-1 2352 | * 2353 | * 2354 | *PUSHBUTTON 3 2355 | * 2356 | LAW S4PIC-1 POINT TO THE PICTURE OF THE DISCOVERY 2357 | LAW S4PICD-1 2358 | * 2359 | * 2360 | *PUSHBUTTON 4 2361 | * 2362 | LAW S1PIC-1 POINT TO THE PICTURE OF THE LONG, SLIM SHIP 2363 | LAW S1PICD-1 2364 | * 2365 | * 2366 | *PUSHBUTTON 5 2367 | * 2368 | LAW S2PIC-1 POINT TO THE PICTURE OF THE SHORT, FAT SHIP 2369 | LAW S2PICD-1 2370 | * 2371 | * 2372 | *PUSHBUTTON 6 2373 | * 2374 | LAW S3PIC-1 POINT TO THE PICTURE OF THE U.S.S. ENTERPRISE 2375 | LAW S3PICD-1 2376 | * 2377 | * 2378 | *PUSHBUTTON 7 2379 | * 2380 | LAW S4PIC-1 POINT TO THE PICTURE OF THE DISCOVERY 2381 | LAW S4PICD-1 2382 | .STITL SHIP MANAGEMENT ROUTINES -- DRAWING THE PICTURE -- SHIPS -- LONG, SLIM SHIP 2383 | * 2384 | * 2385 | *SHIP 1: 2386 | * 2387 | *LONG, SLIM SHIP 2388 | * 2389 | S1PIC: 111131 2390 | 2391 | 111111 2392 | 2393 | 111111 2394 | 2395 | 111633 2396 | 2397 | 311111 2398 | 2399 | 144611 2400 | 2401 | 111111 2402 | 2403 | 147777 2404 | * 2405 | * 2406 | *DAMAGED VERSION 2407 | * 2408 | S1PICD: 111131 2409 | 2410 | 111111 2411 | 2412 | 111111 2413 | 2414 | 111111 2415 | 2416 | 111111 2417 | 2418 | 477777 2419 | .STITL SHIP MANAGEMENT ROUTINES -- DRAWING THE PICTURE -- SHIPS -- SHORT, FAT SHIP 2420 | * 2421 | * 2422 | *SHIP 2: 2423 | * 2424 | *SHORT, FAT SHIP 2425 | * 2426 | S2PIC: 113113 2427 | 2428 | 113111 2429 | 2430 | 116313 2431 | 2432 | 131111 2433 | 2434 | 161151 2435 | 2436 | 111633 2437 | 2438 | 365114 2439 | 2440 | 777777 2441 | * 2442 | * 2443 | *DAMAGED VERSION 2444 | * 2445 | S2PICD: 113113 2446 | 2447 | 113111 2448 | 2449 | 111151 2450 | 2451 | 111511 2452 | 2453 | 477777 2454 | .STITL SHIP MANAGEMENT ROUTINES -- DRAWING THE PICTURE -- SHIPS -- U.S.S. ENTERPRISE 2455 | * 2456 | * 2457 | *SHIP 3: 2458 | * 2459 | *U.S.S. ENTERPRISE 2460 | * 2461 | S3PIC: 022333 2462 | 2463 | 111155 2464 | 2465 | 544113 2466 | 2467 | 311111 2468 | 2469 | 222260 2470 | 2471 | 000066 2472 | 2473 | 111111 2474 | 2475 | 111164 2476 | 2477 | 445114 2478 | 2479 | 477777 2480 | * 2481 | * 2482 | *DAMAGED VERSION 2483 | * 2484 | S3PICD: 022333 2485 | 2486 | 111155 2487 | 2488 | 544113 2489 | 2490 | 311111 2491 | 2492 | 222244 2493 | 2494 | 451144 2495 | 2496 | 777777 2497 | .STITL SHIP MANAGEMENT ROUTINES -- DRAWING THE PICTURE -- SHIPS -- DISCOVERY 2498 | * 2499 | * 2500 | *SHIP 4: 2501 | * 2502 | *DISCOVERY 2503 | * 2504 | S4PIC: 122333 2505 | 2506 | 111155 2507 | 2508 | 541311 2509 | 2510 | 153111 2511 | 2512 | 531115 2513 | 2514 | 311151 2515 | 2516 | 232232 2517 | 2518 | 231114 2519 | 2520 | 463344 2521 | 2522 | 446304 2523 | 2524 | 444443 2525 | 2526 | 355777 2527 | * 2528 | * 2529 | *DAMAGED VERSION 2530 | * 2531 | S4PICD: 122333 2532 | 2533 | 111155 2534 | 2535 | 541311 2536 | 2537 | 153111 2538 | 2539 | 531115 2540 | 2541 | 311151 2542 | 2543 | 211111 2544 | 2545 | 144335 2546 | 2547 | 577777 2548 | .STITL OBJECT MANAGEMENT SUBROUTINES -- CALCULATION -- GRAVITY EFFECT 2549 | GRAV: XX 2550 | * 2551 | * 2552 | *CHECK FOR 'GRAVITY OFF' SWITCH OPTION 2553 | * 2554 | DZM XGRAV INITIALIZE THE X-EFFECT OF GRAVITY 2555 | DZM YGRAV INITIALIZE THE Y-EFFECT OF GRAVITY 2556 | 2557 | LAC SWITCH GET BACK THE SWITCHES 2558 | AND (000400) CHECK FOR GRAVITY OFF 2559 | SZA "IF SO, 2560 | JMP GRAV,I RETURN 2561 | * 2562 | * 2563 | *CALCULATE X^2 2564 | * 2565 | GRAV1: LAC SQXLOC,I *** 2566 | GSM "* PREPARE THE X LOCATION FOR SIGNED MULTIPLICATION 2567 | DAC GRAV2 *** 2568 | 2569 | LAC SQXLOC,I GET THE X LOCATION 2570 | 2571 | MULS "MULTIPLY THE X LOCATION BY ITSELF 2572 | GRAV2: 0 2573 | 2574 | DAC TEMP0 *** 2575 | LACQ "* SAVE THE RESULTS 2576 | DAC TEMP1 *** 2577 | * 2578 | * 2579 | *CALCULATE Y^2 2580 | * 2581 | LAC SQYLOC,I *** 2582 | GSM "* PREPARE THE Y LOCATION FOR SIGNED MULTIPLICATION 2583 | DAC GRAV3 *** 2584 | 2585 | LAC SQYLOC,I GET THE Y LOCATION 2586 | 2587 | MULS "MULTIPLY THE Y LOCATION BY ITSELF 2588 | GRAV3: 0 2589 | 2590 | DAC TEMP2 *** 2591 | LACQ "* SAVE THE RESULTS 2592 | CLL "*** 2593 | * 2594 | * 2595 | *CALCULATE X^2+Y^2 2596 | * 2597 | TAD TEMP1 ADD THE LOW ORDER BITS OF Y^2 2598 | LMQ 2599 | 2600 | GLK "CHECK FOR CARRY 2601 | TAD TEMP0 2602 | TAD TEMP2 PUT THE HIGH-ORDER BITS OF X^2+Y^2 IN AC 2603 | NORMS "AND NORMALIZE X^2+Y^2 2604 | DAC TEMP2 SAVE THE SIGNIFICANT RESULTS 2605 | 2606 | LACS "GET THE EXPONENT 2607 | TAD (777744) IN THE CORRECT FORMAT 2608 | RCR 2609 | DAC TEMP3 2610 | * 2611 | * 2612 | *CALCULATE SQUARE ROOT OF X^2+Y^2 (R^2) 2613 | * 2614 | LAC TEMP2 RELOAD X^2+Y^2 2615 | SZL 2616 | LRSS 1 2617 | DAC TEMP2 2618 | 2619 | JMS SQRT AND FIND THE SQUARE ROOT 2620 | 2621 | DAC GRAV4 SAVE THE RESULT AS AN OPERAND FOR A MULTIPLY 2622 | * 2623 | * 2624 | *CALCULATE R^3 2625 | * 2626 | LAC TEMP2 LOAD R^2 2627 | CLL 2628 | 2629 | MUL "AND MULTIPLY TO GENERATE R(DISTANCE FROM THE SUN)^3 2630 | GRAV4: 0 2631 | 2632 | DAC GRAV5 KEEP THE RESULTS AS DIVISORS 2633 | DAC GRAV7 2634 | 2635 | LAC TEMP3 GET THE EXPONENT 2636 | 2637 | MULS-15. 2638 | 3 2639 | 2640 | LLSS 3 2641 | ADD GRAVT 2642 | XOR (LLSS 0) 2643 | DAC GRAV6 2644 | DAC GRAV8 2645 | .EJECT 2646 | * 2647 | * 2648 | *CALCULATE THE EFFECT OF GRAVITY ON THE X LOCATION 2649 | * 2650 | LAC SQXLOC,I *** 2651 | LRSS 4 * PREPARE THE X LOCATION FOR SIGNED DIVISION 2652 | CLL "*** 2653 | 2654 | DIVS "DIVIDE THE X LOCATION BY THE CUBE OF THE RADIUS 2655 | GRAV5: 0 2656 | 2657 | LACQ "GET THE DIVIDEND IN THE AC 2658 | LRSS 18. SHIFT IT BACK INTO THE MQ, SETTING THE AC TO REFLECT THE SIGN 2659 | 2660 | GRAV6: HLT 2661 | CMA "GRAVITY IS A NEGATIVE FACTOR 2662 | 2663 | DAC XGRAV 2664 | * 2665 | * 2666 | *CALCULATE THE EFFECT OF GRAVITY ON THE Y LOCATION 2667 | * 2668 | LAC SQYLOC,I *** 2669 | LRSS 4 * PREPARE THE Y LOCATION FOR SIGNED DIVISION 2670 | CLL "*** 2671 | 2672 | DIVS "DIVIDE THE Y LOCATION BY THE CUBE OF THE RADIUS 2673 | GRAV7: 0 2674 | 2675 | LACQ "GET THE DIVIDEND IN THE AC 2676 | LRSS 18. SHIFT IT BACK INTO THE MQ, SETTING THE AC TO REFLECT THE SIGN 2677 | 2678 | GRAV8: HLT 2679 | CMA "GRAVITY IS A NEGATIVE FACTOR 2680 | 2681 | DAC YGRAV 2682 | * 2683 | * 2684 | *RETURN 2685 | * 2686 | JMP GRAV,I RETURN 2687 | 2688 | 2689 | XGRAV: 0 2690 | YGRAV: 0 2691 | .STITL OBJECT MANAGEMENT SUBROUTINES -- CALCULATION -- SQUARE ROOT 2692 | SQRT: XX 2693 | 2694 | SAD (777777) 2695 | JMP SQRT4 2696 | 2697 | DAC TEMP0 2698 | LACQ 2699 | DAC TEMP1 2700 | 2701 | LAC SQDIST,I 2702 | DAC SQRT2 2703 | 2704 | LAC TEMP0 2705 | 2706 | SQRT1: CLL 2707 | 2708 | DIV 2709 | SQRT2: 0 2710 | 2711 | SZL 2712 | JMP SQRT5 2713 | 2714 | LACQ 2715 | SAD SQDIST,I 2716 | JMP SQRT,I 2717 | 2718 | TAD (1) 2719 | SAD SQDIST,I 2720 | JMP SQRT,I 2721 | 2722 | TAD SQDIST,I 2723 | LRS 1 2724 | 2725 | SQRT3: DAC SQDIST,I 2726 | DAC SQRT2 2727 | 2728 | LAC TEMP1 2729 | LMQ 2730 | LAC TEMP0 2731 | 2732 | JMP SQRT1 2733 | 2734 | SQRT4: DAC SQDIST,I 2735 | JMP SQRT,I 2736 | 2737 | SQRT5: CLC 2738 | JMP SQRT3 2739 | .STITL OBJECT MANAGEMENT SUBROUTINES -- CALCULATION -- SINE AND COSINE 2740 | SINCOS: XX 2741 | 2742 | DAC SINE 2743 | 2744 | RAL 2745 | GLK 2746 | XOR (NOP) 2747 | DAC SC6 2748 | 2749 | LAC SINE 2750 | TAD (200000) 2751 | RAL 2752 | GLK 2753 | XOR (NOP) 2754 | DAC SC7 2755 | 2756 | LAC SINE 2757 | TAD (100000) 2758 | AND (200000) 2759 | LRSS 7 2760 | XOR (NOP) 2761 | DAC SC5 2762 | 2763 | LAC SINE 2764 | RTL 2765 | GSM 2766 | LRSS 2 2767 | * 2768 | * 2769 | *CONVERT TO RADIANS 2770 | * 2771 | MUL "MULTIPLY 2772 | 622077 "BY 2*PI 2773 | * 2774 | * 2775 | *SUBTITUTE X INTO ALGORITHMIC FORMULA 2776 | * 2777 | DAC SC1 "SAVE X 2778 | DAC SC3 2779 | * 2780 | * 2781 | *CALCULATE X^2 AND SUBSTITUTE IT INTO ALGORITHMIC FORMULA 2782 | * 2783 | MULS "CALCULATE X^2 2784 | SC1: 0 "*** X GOES HERE *** 2785 | 2786 | LLSS 3 ADJUST DECIMAL POINT 2787 | 2788 | DAC SC2 "SAVE X^2 2789 | DAC SC4 2790 | .EJECT 2791 | * 2792 | * 2793 | *% APPROXIMATE SIN(X) = X-(X^3)/3'+(X^5)/5' 2794 | * 2795 | MULS "CALCULATE (X^2)/5! 2796 | 004211 2797 | 2798 | ADD (765252) CALCULATE (X^2)/5!-1/3! 2799 | 2800 | MULS "CALCULATE (X^2)*((X^2)/5!-1/3!) = (X^4)/5!-(X^2)/3! 2801 | SC2: 0 "*** X^2 GOES HERE *** 2802 | 2803 | LLSS 3 ADJUST DECIMAL POINT 2804 | 2805 | ADD (100000) CALCULATE (X^4)/5!-(X^2)/3!+1 2806 | CLL 2807 | 2808 | MULS "CALCULATE X*((X^4)/5!-(X^2)/3!+1) = (X^5)/5!-(X^3)/3!+X = SIN(X) 2809 | SC3: 0 "*** X GOES HERE *** 2810 | 2811 | LLSS 3 ADJUST DECIMAL POINT 2812 | 2813 | DAC SINE 2814 | DAC COSINE 2815 | .EJECT 2816 | * 2817 | * 2818 | *% APPROXIMATE COS(X) = 1-(X^2)/2'+(X^4)/4' 2819 | * 2820 | LAC SC2 GET BACK X^2 2821 | 2822 | MULS "CALCULATE (X^2)/4! 2823 | 025253 2824 | 2825 | ADD (737777) CALCULATE (X^2)/4!-1/2! 2826 | 2827 | MULS "CALCULATE (X^2)*((X^2)/4!-1/2!) = (X^4)/4!-(X^2)/2! 2828 | SC4: 0 "*** X^2 GOES HERE *** 2829 | 2830 | LLSS 3 ADJUST DECIMAL POINT 2831 | 2832 | ADD (100000) CALCULATE (X^4)/4!-(X^2)/2!+1 = COS(X) 2833 | 2834 | SC5: HLT "NOP : COSINE :: SKP : SINE 2835 | DAC COSINE 2836 | XCT SC5 2837 | SKP 2838 | DAC SINE 2839 | LAC SINE 2840 | SZA 2841 | 2842 | SC6: HLT "(NOP) : (X=>+0) :: (CMA) : (X<=-0) 2843 | DAC SINE 2844 | LAC COSINE 2845 | SZA 2846 | 2847 | SC7: HLT "(NOP) : (ABS(X)<1/2*PI) :: (CMA) : (ABS(X)>1/2*PI) 2848 | DAC COSINE 2849 | * 2850 | * 2851 | *RETURN 2852 | * 2853 | JMP SINCOS,I 2854 | 2855 | 2856 | SINE: 0 2857 | COSINE: 0 2858 | .STITL MISCELLANEOUS COMMON SUBROUTINES -- PSEUDO-RANDOM NUMBER GENERATION 2859 | RANDOM: XX 2860 | 2861 | LAC (613331) GET A PSEUDO-RANDOM CONSTANT 2862 | XOR RND *** 2863 | ALSS 1 * TRANSMOGRIFY IT USING THE PREVIOUSLY GENERATED PSEUDO-RANDOM NUMBER 2864 | ADD RND *** 2865 | DAC RND A NEW PSEUDO-RANDOM NUMBER 2866 | 2867 | JMP RANDOM,I RETURN 2868 | 2869 | 2870 | RND: 0 2871 | * 2872 | * 2873 | *GENERATE RANDOM POSITIONS OF THE SHIPS 2874 | * 2875 | RNDPOS: XX 2876 | 2877 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 2878 | LMQ "SHOVE INTO MQ 2879 | ABS 2880 | DAC TEMP0 SAVE IN TEMP 2881 | 2882 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 2883 | DAC TEMP1 SAVE IN TEMP 2884 | ABS 2885 | TAD TEMP0 *** 2886 | SMA "* SEE IF OK 2887 | JMP RNDPOS+1 *** 2888 | 2889 | LAC TEMP1 2890 | 2891 | JMP RNDPOS,I RETURN 2892 | .EJECT 2893 | * 2894 | * 2895 | *GENERATE RANDOM POSITION OF THE SUN 2896 | * 2897 | RNDSUN: JMS RANDOM GET A PSEUDO-RANDOM NUMBER 2898 | AND (1777) IN RANGE 0-1023. 2899 | ADD (140001) MAKE A RANDOM SCOPE COMMAND OUT OF IT 2900 | DAC XPOINT SET UP FOR SCOPE ROUTINE 2901 | 2902 | LAC (ADD XPOINT) ADD =: 2903 | DAC SCOPEX XOR 2904 | 2905 | JMS RANDOM GET A PSEUDO-RANDOM NUMBER 2906 | AND (1777) IN RANGE 0-1023. 2907 | ADD (174001) MAKE A RANDOM SCOPE COMMAND OUT OF IT 2908 | DAC YPOINT SET UP FOR SCOPE ROUTINE 2909 | 2910 | LAC (ADD YPOINT) ADD =: 2911 | DAC SCOPEY XOR 2912 | 2913 | JMP AGAIN BEGIN A NEW GAME 2914 | * 2915 | * 2916 | *PUT THE SUN BACK IN THE CENTER OF THE SCREEN 2917 | * 2918 | CENTER: LAC (141000) SCOPE COMMAND -- POINT MODE -- FOR X-COORDINATE 2919 | DAC XPOINT 2920 | 2921 | LAC (XOR XPOINT) XOR =: 2922 | DAC SCOPEX ADD 2923 | 2924 | LAC (175000) SCOPE COMMAND -- POINT MODE -- FOR Y-COORDINATE 2925 | DAC YPOINT 2926 | 2927 | LAC (XOR YPOINT) XOR =: 2928 | DAC SCOPEY ADD 2929 | 2930 | JMP AGAIN BEGIN A NEW GAME 2931 | .STITL MISCELLANEOUS COMMON SUBROUTINES -- SCOPE DRAWING 2932 | * 2933 | *MOVES THE SCOPE POINTER TO THE X AND Y LOCATIONS 2934 | *SPECIFIED IN XLOC AND YLOC 2935 | * 2936 | SCOPE: XX 2937 | * 2938 | * 2939 | *CLEAR THE LINK FOR UPCOMING SHIFTS 2940 | * 2941 | CLL 2942 | * 2943 | * 2944 | *MOVE TO THE X-COORDINATE INVISIBLY 2945 | * 2946 | LAC XLOC GET THE X-COORDINATE 2947 | 2948 | LRS 8. POSITION IN THE FIELD 2949 | 2950 | SCOPEX: XOR XPOINT OF A POINT-MODE SCOPE COMMAND 2951 | 2952 | DAC X0,I PUT IT IN THE SCOPE BUFFER 2953 | * 2954 | * 2955 | *MOVE TO THE Y-COORDINATE AND DISPLAY THE POINT 2956 | * 2957 | LAC YLOC GET THE Y-COORDINATE 2958 | 2959 | LRS 8. POSITION IN THE FIELD 2960 | 2961 | SCOPEY: XOR YPOINT OF A POINT-MODE SCOPE COMMAND 2962 | 2963 | DAC X0,I PUT IT IN THE SCOPE BUFFER 2964 | * 2965 | * 2966 | *RETURN 2967 | * 2968 | JMP SCOPE,I AND RETURN 2969 | 2970 | 2971 | XLOC: 0 2972 | YLOC: 0 2973 | 2974 | XPOINT: 141000 "SCOPE COMMAND -- POINT MODE -- FOR X-COORDINATE 2975 | YPOINT: 175000 "SCOPE COMMAND -- POINT MODE -- FOR Y-COORDINATE 2976 | .STITL MISCELLANEOUS COMMON SUBROUTINES -- PUSHBUTTON INTERFACE 2977 | BUTTIN: XX 2978 | * 2979 | * 2980 | *MAKE THE PUSHBUTTONS LOOK LIKE THE SWITCHES 2981 | * 2982 | LAC BUTTON GET BACK THE PUSHBUTTONS 2983 | 2984 | CLL 2985 | LRS 18.-4 *** 2986 | ALS 18.-4-6 * MAKE THE PUSHBUTTONS LOOK LIKE THE SWITCHES 2987 | LLS 6-1 *** 2988 | 2989 | DAC TEMP0 *** 2990 | ALS 1 * FORM THE WARP BITS 2991 | AND TEMP0 *** 2992 | 2993 | ALS 1 *** 2994 | AND (400040) * POSITION, EXTRACT, AND SAVE THEM 2995 | DAC TEMP1 *** 2996 | 2997 | XOR TEMP0 *** 2998 | ALS 4 * FORM THE INVISIBILITY BITS 2999 | AND TEMP1 *** 3000 | 3001 | LMQ "SAVE THEM FOR A MOMENT 3002 | 3003 | XOR TEMP1 IF INVISIBLE THEN NOT A WARP 3004 | DAC TEMP1 SO FIX WARP BITS ACCORDINGLY 3005 | 3006 | EAECLA!LRS 5 MOVE THE INVISIBILITY BITS TO WHERE THEY BELONG 3007 | LACQ 3008 | 3009 | XOR TEMP1 ADD IN THE WARP BITS 3010 | XOR TEMP0 ADD IN THE REST OF THE PUSHBUTTONS 3011 | 3012 | SAD (370037) CHECK FOR ALL PUSHBUTTONS PUSHED 3013 | JMP GROWTH EXIT TO GROWTH IF SO 3014 | 3015 | JMP BUTTIN,I RETURN 3016 | * 3017 | * 3018 | *ALL PUSHBUTTONS PUSHED -- SHUT DOWN 3019 | * 3020 | GROWTH: CAF "CLEAR ALL FLAGS 3021 | CDF "CLEAR DISPLAY FLAGS 3022 | CLOF "TURN THE CLOCK OFF 3023 | 3024 | 3025 | SWITCH: 777777 "ACCUMULATOR SWITCHES 3026 | BUTTON: 776000 "PUSHBUTTONS 3027 | 3028 | BUTINS: 370037 "PUSHBUTTONS ENCODED FOR PROGRAM USE 3029 | .STITL PROGRAM INTERRUPT SERVICE ROUTINES -- KEYBOARD SERVICE 3030 | PATCH: AND (177) MASK TO SEVEN BITS 3031 | DAC CHAR 3032 | 3033 | SAD (072) CHECK FOR COLON 3034 | JMP PAT1 3035 | 3036 | SAD (073) CHECK FOR SEMICOLON 3037 | JMP PAT2 3038 | 3039 | TAD (-060) *** 3040 | SPA "* IGNORE CONTROL CHARACTERS AND PUNCTUATION MARKS 3041 | JMP INT6 *** 3042 | 3043 | DAC CHAR 3044 | 3045 | LAC DATUM 3046 | CLL "*** 3047 | ALS 3 * ACCUMULATE ANOTHER OCTIT 3048 | ADD CHAR *** 3049 | DAC DATUM 3050 | 3051 | JMP INT6 WAIT FOR ANOTHER CHARACTER TO COME BY 3052 | 3053 | PAT1: LAW LOC SET UP 'LOC' TO POINT TO ITSELF 3054 | DAC LOC 3055 | 3056 | PAT2: LAC DATUM *** 3057 | DZM DATUM * MAKE THE PATCH AND RESET THE ACCUMULATOR 3058 | DAC LOC,I *** 3059 | 3060 | LAC CHAR GET BACK CHARACTER INPUT 3061 | SAD (073) *** 3062 | ISZ LOC * IF SEMICOLON TYPED, INCREMENT PATCH ADDRESS 3063 | JMP INT6 *** 3064 | 3065 | 3066 | CHAR: 377 "CHARACTER INPUT 3067 | 3068 | LOC: THREE "PATCH ADDRESS 3069 | DATUM: JMP START DATA ACCUMULATOR 3070 | .STITL PROGRAM INTERRUPT SERVICE ROUTINES 3071 | INT: DAC INTA SAVE THE ACCUMULATOR REGISTER 3072 | ISZ RND 3073 | NOP 3074 | LDS "LOAD DISPLAY STATUS 3075 | SMA "CHECK FOR A TRAP INTERRUPT 3076 | JMP INT1 NO, SO CHECK FURTHER 3077 | LDB "LOAD THE LAST SCOPE INSTRUCTION WE EXECUTED 3078 | SPA "WAS IT A TRAP INSTRUCTION? 3079 | JMP INT8 YES 3080 | 3081 | INT1: AND (040000) CHECK FOR A STOP TRAP 3082 | SZA "NO, SO CHECK FURTHER 3083 | JMP INT7 "YES 3084 | 3085 | CLSF "CHECK FOR A CLOCK INTERRUPT 3086 | JMP INT2 NO, SO CHECK FURTHER 3087 | LAC (JMP BUMP) YES, SO PUT A JUMP TO THE COLLISION ROUTINE 3088 | DAC THREE IN LOCATION THREE, TO RESTART COLLISION CHECKING 3089 | CLON "TURN THE CLOCK BACK ON 3090 | JMP INT9 AND EXIT 3091 | 3092 | INT2: SPB "CHECK FOR A PUSHBUTTON INTERRUPT 3093 | JMP INT3 NO, SO CHECK FURTHER 3094 | CPB "YES, SO CLEAR THE FLAG 3095 | JMP INT9 AND EXIT 3096 | 3097 | INT3: KSF "CHECK FOR A TELETYPE KEYBOARD INTERRUPT 3098 | JMP INT4 NO, SO CHECK FURTHER 3099 | KRB "YES, SO GET THE CHARACTER THAT WAS TYPED 3100 | JMP PATCH GO INTERPRET IT 3101 | 3102 | INT4: SCK "CHECK FOR A CONSOLE KEYBOARD INTERRUPT 3103 | JMP INT5 NO, SO CHECK FURTHER 3104 | LCK!CCK "YES, SO GET THE CHARACTER THAT WAS TYPED 3105 | JMP PATCH GO INTERPRET IT 3106 | 3107 | INT5: CAF "CHECK NO FURTHER 3108 | 3109 | INT6: CLON "TURN ON THE CLOCK 3110 | 3111 | INT7: LAC PSCBUF 3112 | 3113 | INT8: BEG "TURN ON THE SCOPE DISPLAY 3114 | 3115 | INT9: LAC INTA RESTORE THE ACCUMULATOR REGISTER 3116 | ION "TURN ON THE INTERUPT SYSTEM 3117 | JMP PI,I AND RETURN WHENCE WE CAME 3118 | 3119 | 3120 | INTA: 0 "AC SAVE LOCATION ON INTERRUPTS 3121 | .STITL HIGH CORE DEFINITIONS 3122 | * 3123 | * 3124 | *SCOPE BUFFER POINTERS 3125 | * 3126 | PSCBUF: SCBUF "POINTER TO THE BEGINNING OF THE SCOPE BUFFERS 3127 | 3128 | PSBUF1: .BLOCK 1 POINTER TO THE STAR SCOPE BUFFER 3129 | PSBUF2: .BLOCK 1 POINTER TO THE STAR SCOPE BUFFER 3130 | 3131 | STREND: .BLOCK 1 POINTER TO THE END OF THE STAR SCOPE BUFFER 3132 | 3133 | PBUFF1: .BLOCK 1 POINTER TO THE FIRST SCOPE BUFFER 3134 | PBUFF2: .BLOCK 1 POINTER TO THE SECOND SCOPE BUFFER 3135 | 3136 | OFFSET: .BLOCK 1 OFFSET BETWEEN BUFFERS 3137 | * 3138 | * 3139 | *HANDICAP TABLE POINTER 3140 | * 3141 | HANDI: .BLOCK 1 POINTER TO THE PARAMETER TABLE CURRENTLY IN USE 3142 | * 3143 | * 3144 | *TEMPORARY STORAGE 3145 | * 3146 | TEMP0: .BLOCK 1 TEMPORARY STORAGE 3147 | TEMP1: .BLOCK 1 TEMPORARY STORAGE 3148 | TEMP2: .BLOCK 1 TEMPORARY STORAGE 3149 | TEMP3: .BLOCK 1 TEMPORARY STORAGE 3150 | * 3151 | * 3152 | *COUNTERS 3153 | * 3154 | OBJCNT: .BLOCK 1 COMPLEMENT OF NUMBER OF OBJECTS CHECKED AGAINST COLLISION 3155 | SHPCNT: .BLOCK 1 COMPLEMENT OF NUMBER OF SHIPS CHECKED AGAINST COLLISION 3156 | 3157 | NSHIP: .BLOCK 1 COMPLEMENT OF NUMBER OF SURVIVING SHIPS 3158 | * 3159 | * 3160 | *GAME TIMERS 3161 | * 3162 | GAMTIM: .BLOCK 1 TIMER TO TIME OUT GAME 3163 | * 3164 | * 3165 | *STAR TIMER 3166 | * 3167 | STIMER: .BLOCK 1 STAR MOTION TIMER 3168 | * 3169 | * 3170 | *STAR TABLE POINTERS 3171 | * 3172 | SRANGE: .BLOCK 1 X-COORDINATE RANGE DEFINITION 3173 | PSTABL: .BLOCK 1 POINTER TO THE STAR TABLE 3174 | .STITL HIGH CORE DEFINITIONS -- OBJECT DEFINITION TABLE -- OBJECT DEFINITIONS 3175 | * 3176 | * 3177 | *TRANSFER VECTOR -- MANAGEMENT ROUTINE ADDRESSES OF SHIPS AND BULLETS 3178 | * 3179 | SXTRAN: .BLOCK NUMOBJ 3180 | S1TRAN: .EQU SXTRAN+1-1 3181 | S2TRAN: .EQU SXTRAN+2-1 3182 | S3TRAN: .EQU SXTRAN+3-1 3183 | TRNEND: .EQU SXTRAN+NUMOBJ-1 3184 | * 3185 | * 3186 | *X LOCATIONS OF SHIPS AND BULLETS 3187 | * 3188 | SXXLOC: .BLOCK NUMOBJ 3189 | S1XLOC: .EQU SXXLOC+1-1 3190 | S2XLOC: .EQU SXXLOC+2-1 3191 | S3XLOC: .EQU SXXLOC+3-1 3192 | * 3193 | * 3194 | *Y LOCATIONS OF SHIPS AND BULLETS 3195 | * 3196 | SXYLOC: .BLOCK NUMOBJ 3197 | S1YLOC: .EQU SXYLOC+1-1 3198 | S2YLOC: .EQU SXYLOC+2-1 3199 | S3YLOC: .EQU SXYLOC+3-1 3200 | * 3201 | * 3202 | *X VELOCITIES OF SHIPS AND BULLETS 3203 | * 3204 | SXXVEL: .BLOCK NUMOBJ 3205 | * 3206 | * 3207 | *Y VELOCITIES OF SHIPS AND BULLETS 3208 | * 3209 | SXYVEL: .BLOCK NUMOBJ 3210 | * 3211 | * 3212 | *MULTI-PURPOSE TIMERS OF SHIPS AND BULLETS 3213 | * 3214 | SXTIME: .BLOCK NUMOBJ 3215 | * 3216 | * 3217 | *DISTANCES FROM THE SUN OF SHIPS AND BULLETS 3218 | * 3219 | SXDIST: .BLOCK NUMOBJ 3220 | .STITL HIGH CORE DEFINITIONS -- OBJECT DEFINITION TABLE -- SHIP DEFINITIONS 3221 | * 3222 | * 3223 | *ANGLE OF SHIPS 3224 | * 3225 | SXANGL: .BLOCK NUMSHP 3226 | S1ANGL: .EQU SXANGL+1-1 3227 | S2ANGL: .EQU SXANGL+2-1 3228 | S3ANGL: .EQU SXANGL+3-1 3229 | * 3230 | * 3231 | *ANGULAR MOMENTUM OF SHIPS 3232 | * 3233 | SXROLL: .BLOCK NUMSHP 3234 | * 3235 | * 3236 | *FUEL SUPPLY OF SHIPS 3237 | * 3238 | SXFUEL: .BLOCK NUMSHP 3239 | S1FUEL: .EQU SXFUEL+1-1 3240 | S2FUEL: .EQU SXFUEL+2-1 3241 | S3FUEL: .EQU SXFUEL+3-1 3242 | * 3243 | * 3244 | *BULLET SUPPLY OF SHIPS 3245 | * 3246 | SXBULL: .BLOCK NUMSHP 3247 | S1BULL: .EQU SXBULL+1-1 3248 | S2BULL: .EQU SXBULL+2-1 3249 | S3BULL: .EQU SXBULL+3-1 3250 | * 3251 | * 3252 | *POINTERS TO THE PICTURES OF THE SHIPS 3253 | * 3254 | SXPICP: .BLOCK NUMSHP 3255 | S1PICP: .EQU SXPICP+1-1 3256 | S2PICP: .EQU SXPICP+2-1 3257 | S3PICP: .EQU SXPICP+3-1 3258 | * 3259 | * 3260 | *POINTERS TO THE PICTURES OF THE DAMAGED SHIPS 3261 | * 3262 | SXPICN: .BLOCK NUMSHP 3263 | S1PICN: .EQU SXPICN+1-1 3264 | S2PICN: .EQU SXPICN+2-1 3265 | S3PICN: .EQU SXPICN+3-1 3266 | * 3267 | * 3268 | *TIME UNTIL NEXT POSSIBLE WARP 3269 | * 3270 | SXWTIM: .BLOCK NUMSHP 3271 | .EJECT 3272 | * 3273 | * 3274 | *WARP FACTORS 3275 | * 3276 | SXWFAC: .BLOCK NUMSHP 3277 | * 3278 | * 3279 | *INVISIBILITY FLAGS 3280 | * 3281 | SXINVF: .BLOCK NUMSHP 3282 | * 3283 | * 3284 | *INVISIBILITY TIMERS 3285 | * 3286 | SXINVT: .BLOCK NUMSHP 3287 | * 3288 | * 3289 | *DAMAGES 3290 | * 3291 | SXDAMS: .BLOCK NUMSHP 3292 | S1DAMS: .EQU SXDAMS+1-1 3293 | S2DAMS: .EQU SXDAMS+2-1 3294 | S3DAMS: .EQU SXDAMS+3-1 3295 | * 3296 | * 3297 | *THRUST RESTORATION TIMERS 3298 | * 3299 | SXTTIM: .BLOCK NUMSHP 3300 | * 3301 | * 3302 | *BULLET RESTORATION TIMERS 3303 | * 3304 | SXBTIM: .BLOCK NUMSHP 3305 | * 3306 | * 3307 | *LEFT TURN RESTORATION TIMERS 3308 | * 3309 | SXLTIM: .BLOCK NUMSHP 3310 | * 3311 | * 3312 | *RIGHT TURN RESTORATION TIMERS 3313 | * 3314 | SXRTIM: .BLOCK NUMSHP 3315 | * 3316 | * 3317 | *LENGTH OF THE OBJECT DEFINITION TABLE 3318 | * 3319 | ODTLEN: .EQU .-SXTRAN LENGTH OF THE OBJECT DEFINITION TABLE 3320 | .STITL HIGH CORE DEFINITIONS -- OBJECT DEFINITION TABLE -- POINTERS 3321 | * 3322 | * 3323 | *POINTERS TO THE OBJECT DEFINITION TABLE 3324 | * 3325 | SQTRAN: .BLOCK 1 3326 | 3327 | SQXLOC: .BLOCK 1 3328 | SQYLOC: .BLOCK 1 3329 | 3330 | SQXVEL: .BLOCK 1 3331 | SQYVEL: .BLOCK 1 3332 | 3333 | SQTIME: .BLOCK 1 3334 | 3335 | SQDIST: .BLOCK 1 3336 | 3337 | SQANGL: .BLOCK 1 3338 | 3339 | SQROLL: .BLOCK 1 3340 | 3341 | SQFUEL: .BLOCK 1 3342 | SQBULL: .BLOCK 1 3343 | 3344 | SQPICP: .BLOCK 1 3345 | SQPICN: .BLOCK 1 3346 | 3347 | SQWTIM: .BLOCK 1 3348 | SQWFAC: .BLOCK 1 3349 | 3350 | SQINVF: .BLOCK 1 3351 | SQINVT: .BLOCK 1 3352 | 3353 | SQDAMS: .BLOCK 1 3354 | 3355 | SQTTIM: .BLOCK 1 3356 | SQBTIM: .BLOCK 1 3357 | SQLTIM: .BLOCK 1 3358 | SQRTIM: .BLOCK 1 3359 | .STITL HIGH CORE DEFINITIONS -- LAW/XCT TABLE 3360 | STABLE: ... 3361 | 3362 | .DET SAVE,OFF 3363 | * 3364 | * 3365 | *EDENIC HEAVENS 3366 | * 3367 | .DATA 001777,400561,001722,501515,001712,401677,001712,400105 3368 | .DATA 001656,400452,001441,400402,001410,401240,001357,400732 3369 | .DATA 001267,401247,001226,500414,001210,401723,001076,400472 3370 | .DATA 001026,501522,000734,401161,000712,500211,000706,401305 3371 | .DATA 000655,400402,000642,400411,000631,401654,000627,401075 3372 | .DATA 000623,501716,000560,400025,000547,401064,000451,401277 3373 | .DATA 000404,500662,000335,400336,000323,401266,000272,400233 3374 | .DATA 000222,400776,000174,501100,000165,400254,000164,401335 3375 | .DATA 000157,400120,000115,400031,000060,400454,000040,401302 3376 | .DATA 000021,501124 3377 | * 3378 | * 3379 | *LAW/XCT TABLE PROPER 3380 | * 3381 | .DATA 777735,401670,777713,401726,777700,400457,777657,401104 3382 | .DATA 777651,400011,777620,401307,777603,401326,777557,401437 3383 | .DATA 777555,400605,777536,400441,777530,400015,777512,401002 3384 | .DATA 777444,500432,777423,500345,777347,400666,777317,500306 3385 | .DATA 777305,401426,777266,401202,777261,401752,777202,400536 3386 | .DATA 777171,401315,777160,401306,777156,400516,777151,401717 3387 | .DATA 777131,401536,777110,401612,777101,401610,777073,401766 3388 | .DATA 777072,401623,777064,401536,777062,401512,777050,401546 3389 | .DATA 777050,501660,777047,501544,777034,401554,777021,400772 3390 | .DATA 777011,401515,776776,401342,776776,701563,776767,400657 3391 | .DATA 776760,401430,776753,401546,776752,400266,776734,400074 3392 | .DATA 776703,400662,776655,501232,776651,401307,776645,401174 3393 | .DATA 776631,400600,776623,501064,776621,401344,776611,401460 3394 | .DATA 776572,401044,776557,400337,776550,400531,776545,400064 3395 | .DATA 776545,401750,776533,401533,776504,500611,776476,401540 3396 | .DATA 776473,400466,776451,400357,776446,401077,776444,500215 3397 | .DATA 776443,400327,776435,700503,776414,500542,776377,400322 3398 | .DATA 776370,400032,776366,400765,776360,401117,776347,400514 3399 | .DATA 776346,500707,776345,401050,776344,601217,776331,401105 3400 | .DATA 776331,401761,776314,500046,776304,401206,776276,401645 3401 | .DATA 776273,500770,776272,400530,776263,500151,776255,401326 3402 | .DATA 776254,501341,776251,400567,776247,500570,776247,400620 3403 | .DATA 776243,600743,776242,401322,776240,501740,776224,400704 3404 | .DATA 776223,400533,776223,401135,776212,401567,776211,600722 3405 | .DATA 776157,400001,776143,500256,776140,600443,776132,401437 3406 | .DATA 776111,400045,776101,401716,776071,701250,776055,400275 3407 | .DATA 776033,400672,776021,401334,776017,400417,776012,401712 3408 | .DATA 775766,400254,775764,401520,775733,401504,775733,401560 3409 | .DATA 775706,400562,775677,400311,775627,600151,775626,401152 3410 | .DATA 775574,400626,775574,401716,775567,400541,775543,401250 3411 | .DATA 775511,601567,775507,400114,775500,400143,775472,400300 3412 | .DATA 775465,401343,775445,401460,775435,501450,775427,700207 3413 | .DATA 775414,401071,775350,401457,775347,400067,775345,400361 3414 | .DATA 775333,400070,775331,400177,775265,400643,775264,401730 3415 | .DATA 775256,400240,775203,400770,775143,501574,775131,501770 3416 | .DATA 775104,400123,775056,501301,775050,401320,775040,401426 3417 | .DATA 775000,400011,774750,701175,774732,400454,774557,400144 3418 | .DATA 774552,400747,774545,401074,774500,400703,774472,400121 3419 | .DATA 774457,400340,774425,401330,774337,400656,774234,401212 3420 | .DATA 774226,401124,774201,400235,774177,401761,774174,401125 3421 | .DATA 774170,400544,774166,401645,774150,501232,774147,400324 3422 | .DATA 774137,401215,774067,501220,774047,401427,773713,401076 3423 | .DATA 773652,400371,773646,400460,773576,600505,773566,400713 3424 | .DATA 773546,400757,773502,401164,773471,400760,773465,400304 3425 | .DATA 773463,401354,773365,400271,773306,401302,773250,400342 3426 | .DATA 773237,501611,773233,401357,773232,401003,773230,701433 3427 | .DATA 773211,400362,773130,401707,773127,501717,773061,400214 3428 | .DATA 773032,400775,773015,401337,772653,500233,772561,400154 3429 | .DATA 772547,400730,772545,401727,772525,401263,772456,400005 3430 | .DATA 772442,501737,772441,501554,772422,400671,772403,400274 3431 | .DATA 772371,401226,772352,401374,772343,400172,772252,400455 3432 | .DATA 772237,400772,772162,400153,772155,401241,772141,401731 3433 | .DATA 772132,601530,772122,401065,772027,401243,771776,401323 3434 | .DATA 771743,500012,771702,500175,771653,400775,771646,401642 3435 | .DATA 771563,500225,771546,400234,771475,400526,771457,500753 3436 | .DATA 771456,401365,771347,400463,771337,501132,771314,401631 3437 | .DATA 771272,501406,771216,400154,771215,401634,771137,400154 3438 | .DATA 771070,700416,771054,400240,771021,400575,771004,401137 3439 | .DATA 771001,500776,770670,401631,770654,401563,770616,501656 3440 | .DATA 770550,401056,770453,401102,770451,400442,770427,400602 3441 | .DATA 770425,701700,770406,400332,770377,401576,770321,400727 3442 | .DATA 770207,401577,770205,401502,770175,400611,770156,401614 3443 | .DATA 770152,401065,770122,500234,770112,401674,770055,400646 3444 | .DATA 770013,401071,767732,400106,767675,500463,767534,400443 3445 | .DATA 767525,400267,767524,401367,767461,400110,767454,401707 3446 | .DATA 767437,501231,767422,401257,767422,501546,767403,401644 3447 | .DATA 767402,500671,767372,401155,767364,401744,767355,400212 3448 | .DATA 767330,401554,767324,400302,767311,500004,767260,400403 3449 | .DATA 767254,500103,767244,400060,767241,400053,767206,400113 3450 | .DATA 767204,400441,767166,500662,767137,500633,767111,401035 3451 | .DATA 767106,401671,767102,400075,767063,401505,767061,400141 3452 | .DATA 767052,400506,767031,400213,767026,12764,767026,501756 3453 | .DATA 767025,400034,767013,401412,766766,500424,766656,400417 3454 | .DATA 766621,401353,766574,401331,766520,401445,766473,500235 3455 | .DATA 766433,501512,766423,400770,766377,400042,766376,400336 3456 | .DATA 766333,400616,766332,401140,766250,601440,766237,500243 3457 | .DATA 766234,400511,766211,400334,766177,400024,766140,501077 3458 | .DATA 766044,500442,766032,400654,766032,401143,766030,401103 3459 | .DATA 766030,401575,766022,401036,765775,401071,765761,401306 3460 | .DATA 765760,501331,765745,401731,765723,400040,765645,401114 3461 | .DATA 765644,401763,765643,500676,765630,400464,765621,400053 3462 | .DATA 765620,401756,765571,400263,765526,400503,765424,401721 3463 | .DATA 765421,400622,765415,401633,765333,401135,765330,500035 3464 | .DATA 765306,401524,765276,400572,765261,400016,765245,501470 3465 | .DATA 765244,500761,765224,500036,765146,401743,765117,400146 3466 | .DATA 765117,400220,765065,501102,765060,401003,765004,401243 3467 | .DATA 764776,401675,764766,400735,764737,401625,764732,401611 3468 | .DATA 764676,501354,764665,401640,764654,401656,764644,701304 3469 | .DATA 764634,401021,764621,401273,764613,401214,764565,501665 3470 | .DATA 764461,500747,764435,401523,764417,400334,764415,400334 3471 | .DATA 764376,400327,764375,500250,764321,400143,764263,401372 3472 | .DATA 764246,401506,764231,501504,764230,400737,764223,401733 3473 | .DATA 764215,401542,764170,401517,764145,401547,764144,400437 3474 | .DATA 764143,400605,764107,400453,764006,400063,763775,400157 3475 | .DATA 763747,400364,763740,401336,763710,401333,763701,401156 3476 | .DATA 763640,400167,763634,401671,763574,400006,763551,500567 3477 | .DATA 763514,400073,763506,400503,763472,400172,763454,400110 3478 | .DATA 763440,501326,763435,401600,763423,500207,763264,400704 3479 | .DATA 763246,500756,763246,401150,763244,400271,763214,501202 3480 | .DATA 763150,400503,763114,400725,763113,401412,763067,401024 3481 | .DATA 763050,401140,763043,500764,763031,400401,762776,400762 3482 | .DATA 762732,501353,762720,400110,762674,401412,762656,400277 3483 | .DATA 762634,400507,762621,500214,762614,401275,762533,401113 3484 | .DATA 762526,501516,762511,401312,762475,400022,762440,400552 3485 | .DATA 762430,400445,762420,401076,762414,400442,762357,400052 3486 | .DATA 762336,400036,762330,401020,762322,401206,762313,401426 3487 | .DATA 762265,400027,762216,401164,762204,400136,762202,401034 3488 | .DATA 762177,400250,762040,401220,762021,400553,762003,400151 3489 | 3490 | .DET RESTORE 3491 | 3492 | ENDTAB: ENDTAB "END-OF-TABLE MARKER 3493 | .STITL ASSEMBLY CONTROL 3494 | * 3495 | * 3496 | *LITERAL POOL 3497 | * 3498 | .LIT 3499 | * 3500 | * 3501 | *START OF SCOPE BUFFER 3502 | * 3503 | SCBUF: ... 3504 | .EJECT 3505 | .END START 3506 | --------------------------------------------------------------------------------