.TITLE SPACE1 / THIS IS A MACRO-9 DEMONSTRATION PROGRAM OF REAL TIME COMPUTER / GRAPHICS. AN EARLY M.I.T. VERSION OF SPACE WAR, CONVERTED TO / MACRO-9 BY PAUL HENDERSON, THIS GAME USES THE ACCUMULATOR SW- / ITCHES AS CONTROLS, INSTEAD OF THE USUAL JOY STICKS. / TWO PLAYERS CAN PLAY. ACCUMULATOR SITCHES 0 TO 4 ARE THE CON- / TROLS FOR THE FIRST PLAYER, AND SWITCHES 13-17 FOR THE SECOND / PLAYER. FOLLOWING IS THE FUNCTIONS OF THE SWITCHES: / / PLAYER #1 PLAYER #2 FUNCTION / / 0 13 ROTATES SPACECRAFT COUNTER / CLOCKWISE. / 1 14 ROTATES SPACECRAFT CLOCK- / WISE. / 2 15 REVERSE MOTION, OF DIREC- / TION CANNON IS POINTING. / 3 16 FORWARD MOTION, IN DIREC- / TION CANNON IS POINTING. / 4 17 FIRING CONTROL. / / / TO ENGAGE CONTROLS, SWITCHES ARE DOWN. AT START OF GAME, / THE SWITCHES ARE ALL UP. THERE ARE ONLY 21 MISSILLES TO / A PLAYER. THE MISSILES 'FADE OUT' AFTER A PRECISE TIME / PERIOD. COLLISIONS ARE POSSIBLE, AND IN GENERAL THE LAWS OF / PHYSICS APPLY WHEN PERTAINING TO THE RELATIVE VELOCITIES OF / MISSILES TO SPACECRAFT, AND THE SPACECRAFT HAVE INIRTIAL MASS. / / IDLA=700606 IDVE=700501 IDHE=701001 IDCF=700704 IDRA=700512 IDSI=700601 / FOR1 XX LAC X1D ADD X1DM DAC X1D LAC Y1D ADD Y1DM DAC Y1D JMP* FOR1 / FOR2 XX LAC X2D ADD X2DM DAC X2D LAC Y2D ADD Y2DM DAC Y2D JMP* FOR2 / REV1 XX LAC X1DM CMA ADD X1D DAC X1D LAC Y1DM CMA ADD Y1D DAC Y1D JMP* REV1 / REV2 XX LAC X2DM CMA ADD X2D DAC X2D LAC Y2DM CMA ADD Y2D DAC Y2D JMP* REV2 / LEFT1 XX LAC TWAIT1 SAD L10 JMP LEFT1B ADD L1 DAC TWAIT1 JMP* LEFT1 LEFT1B LAC L1 DAC TWAIT1 LAC ROT1 SAD L44 DZM ROT1 LAC ROT1 ADD L1 DAC ROT1 JMS DIR1 JMP* LEFT1 / LEFT2 XX LAC TWAIT2 SAD L10. JMP LEFT2B ADD L1 DAC TWAIT2 JMP* LEFT2 LEFT2B LAC L1 DAC TWAIT2 LAC ROT2 SAD L44 DZM ROT2 LAC ROT2 ADD L1 DAC ROT2 JMS DIR2 JMP* LEFT2 / RT1 XX LAC TWAIT1 ADD L776 DAC TWAIT1 SMA JMP* RT1 LAC L10 DAC TWAIT1 LAC ROT1 ADD L776 DAC ROT1 SMA JMP RT1B LAC L44 DAC ROT1 RT1B JMS DIR1 JMP* RT1 / RT2 XX LAC TWAIT2 ADD L776 DAC TWAIT2 SMA JMP* RT2 LAC L10. DAC TWAIT2 LAC ROT2 ADD L776 DAC ROT2 SMA JMP RT2B LAC L44 DAC ROT2 RT2B JMS DIR2 JMP* RT2 / / ESTABLISH DIRECTION COMPONENTS OF TURRET OF SHIP 1, AND PLACE / THEM IN DISPLAY FILE / DIR1 XX LAC A600 DAC P2 ADD ROT1 DAC P1 LAC* P1 DAC Y1DM LAC ROT1 CMA ADD L11 SPA ADD L44 ADD P2 DAC P1 LAC* P1 DAC X1DM DZM TEMP LAC Y1DM JMS SGNMAG /GET SIGN & MAGNITUDE OF Y-COMPONENT RTL RTL RTL RTL AND L7400 /MAKE DY OF VECTOR DAC TEMP LAC X1DM JMS SGNMAG /GET SAME FOR X-COMPONENT ADD TEMP DAC TUR11 ADD L600T /INTENSIFY 2ND VECTOR & ESCAPE DAC TUR12 JMP* DIR1 / / ESTABLISH DIRECTION COMPONENTS FOR SHIP 2 / DIR2 XX LAC A600 DAC P2 ADD ROT2 DAC P1 LAC* P1 DAC Y2DM LAC ROT2 CMA ADD L11 SPA ADD L44 ADD P2 DAC P1 LAC* P1 DAC X2DM DZM TEMP LAC Y2DM JMS SGNMAG RTL RTL RTL RTL AND L7400 /GET DY OF VECTOR DAC TEMP LAC X2DM JMS SGNMAG ADD TEMP ADD L200T /INTENSIFY 1ST VECTOR OF SHIP2 TURRET DAC TUR21 ADD L400T /AND ESCAPE DAC TUR22 JMP* DIR2 / FIRE1 XX LAC L1 DAC F1 JMP* FIRE1 / FIRE2 XX LAC L1 DAC F2 JMP* FIRE2 / AC8 XX NOP JMP* AC8 / AC9 XX NOP JMP* AC9 / DRIFT XX LAC X1 ADD X1D DAC X1 LAC Y1 ADD Y1D DAC Y1 LAC X2 ADD X2D DAC X2 LAC Y2 ADD Y2D DAC Y2 LAC Y1 JMS R8R / CLL; LRS 10 ADD VPNT DAC Y1C /SET Y-COORD FOR SHIP 1 LAC X1 JMS R8R ADD L100T /VEC DAC X1C /SET X-COORD FOR SHIP 1 LAC Y2 JMS R8R ADD VPNT DAC Y2C /Y-COORD, SHIP 2 LAC X2 JMS R8R ADD L102T /VEC!2000 - INTENSIFY POINT DAC X2C /X-COORD SHIP 2 JMP* DRIFT / SGNMAG XX DAC P1 DZM P2 SMA JMP POS CMA DAC P1 LAC P2 ADD SIGN DAC P2 LAC P1 POS AND L177 ADD P2 JMP* SGNMAG / R8R XX RTR RTR RTR RTR AND L1777 JMP* R8R / DRBY64 XX DAC P1 LAC L772 DAC COUNT LAC P1 LRSS6 CLL SPA CML RAR ISZ COUNT JMP LRSS6 CMA ADD P1 DAC P1 /DRIFT=DRIFT/64+DRIFT JMP* DRBY64 / CDRIFT XX LAC Y1D JMS DRBY64 DAC Y1D LAC X1D JMS DRBY64 DAC X1D LAC Y2D JMS DRBY64 DAC Y2D LAC X2D JMS DRBY64 DAC X2D JMP* CDRIFT / SWITCH XX LAC L764 DAC COUNT SWLOOP LAC A560 /GET ADDRESS OF AC MASKS TAD COUNT DAC P1 LAS AND* P1 /IS SWITCH SET? SZA JMP NOTSET LAC A575 /ADDRESS OF TABLE OF SUBROUTINE ADDRESSES TAD COUNT DAC P1 LAC* P1 DAC P1 JMS* P1 NOTSET ISZ COUNT JMP SWLOOP JMP* SWITCH / 400000 /AC0 200000 100000 40000 20000 /AC4 1000 /AC8 400 /AC9 20 /AC13 10 4 2 1 ACMASK 0 / LEFT1 RT1 REV1 FOR1 FIRE1 AC8 AC9 LEFT2 RT2 REV2 FOR2 FIRE2 SUBTBL 0 0 0 DIRTBL 0 3 7 12 15 17 21 23 24 24 24 23 21 17 15 12 7 3 0 777774 777770 777765 777762 777760 777756 777754 777753 777753 777753 777754 777756 777760 777762 777765 777770 777774 0 0 / / STOP INTERRUPT ROUTINE / STINT DAC DSAC LAC* (0 DAC DSOUT LAC FILER1 JMP DSGO / / EDGE INTERRUPT ROUTINE / EDGE DAC DSAC LAC* (0 DAC DSOUT IDC IDCF IDRA CMA TAD L1 TAD FILER2 /FILER2-ADDR SPA JMP .+3 LAC FILER2 SKP LAC FILER3 DSGO IDLA LAC DSAC ION DBR XCT .+1 JMP* DSOUT / START CAL /SET UP FOR EDGE INTERRUPTS DSAC 16 DSOUT IDVE EDGE CAL 16 IDHE EDGE CAL 16 IDSI STINT DBK LAC (JMP .+2 DAC START LAC (20117 /INTENSIFY BOTH SHIPS DAC SHIP1 DAC SHIP2 LAC L400T DAC Y1 /INITIALIZE SHIP POSITIONS AND SHELL COUNTS DAC Y2 LAC L200T DAC X1 LAC L600T DAC X2 LAC L10 RCR DAC TWAIT1 LAC L10. RCR DAC TWAIT2 LAC L11 DAC ROT1 JMS DIR1 LAC L33 DAC ROT2 JMS DIR2 DZM X1D DZM X2D DZM Y1D DZM Y2D LAC L757 DAC SHC1 DAC SHC2 DZM S1WAIT DZM S2WAIT LAC A1162 /GET SHELL TABLE ADDRESS DAC SHELLP DZM WINNER LAC L765 DAC COUNTR LAC A1166 DAC SHELPT CLEAR DZM* SHELPT /CLEAR SHELL TABLE TO INDICATE NO SHELLS LAC SHELPT /ARE IN TRANSIT ADD L5 DAC SHELPT ISZ COUNTR JMP CLEAR LAC IDL DAC DSGO LAC FILER1 IDL IDLA / / MAIN LOOP RETURNS TO HERE. CHECK FOR WINNER / LOOP LAC WINNER SNA!CMA JMP PAST SMA!RAR JMP .+3 LAC (20110 DAC SHIP1 SML JMP .+3 LAC (20110 DAC SHIP2 JMP . / PAST JMS SWITCH /CHECK AC SWITCHES JMS DRIFT /SET ORIGINS FOR SHIPS JMS CDRIFT /CHANGE POSSIBLE DRIFT RATE JMP CONTINUE / VEL ISZ* SHELPT /CALCULATE SHELL VELOCITY JMP .+1 LAC SHELPT ADD L773 DAC SHELPT LAC* SHELPT ISZ SHELPT ADD* SHELPT DAC* SHELPT RTR RTR RTR RTR AND L1776 ADD VPNT DAC* SHOTPT ISZ SHOTPT ISZ SHELPT LAC* SHELPT ISZ SHELPT ADD* SHELPT DAC* SHELPT RTR RTR RTR RTR AND L1776 ADD L142T DAC* SHOTPT ISZ SHOTPT LAC VCTR DAC* SHOTPT ISZ SHOTPT LAC L20T DAC* SHOTPT ISZ SHOTPT ISZ SHELPT JMP SHOTS1 / HIT XX LAC A1537 /GET ADDRESS OF FIRST SHELL DAC HITPNT HIT1 LAC* HITPNT SNA JMP* HIT /SHELL HAS EXPIRED AND L1777 /GET Y-COORD CMA ADD Y1Y2 SMA CMA ADD L21 /IS SHELL WITHIN 21 UNITS Y OF SHIP (1 OR 2) SMA JMP HIT3 /MAY BE DISASTER. CHECK X DIVERGENCE ISZ HITPNT HIT2 ISZ HITPNT JMP HIT1 HIT3 ISZ HITPNT LAC* HITPNT AND L1777 CMA ADD X1X2 SMA CMA ADD L21 /IS SHELL WITHIN 21 UNITS X OF SHIP? SPA JMP HIT2 /NO. CHECK FOR NEXT SHELL LAC T.WIN DAC WINNER /INDICATE WINNER JMP* HIT / SHOOT XX LAC* COUNTR /ARE WE OUT OF SHELLS? SMA JMP* SHOOT /YES LAC COUNTR ADD L1 DAC SHELPT LAC* SHELPT SPA JMP* SHOOT /IF TOO SOON SINCE LAST SHELL, WAIT LAC SHELLP SNA JMP* SHOOT ISZ* COUNTR /COUNT SHELLS JMP .+1 LAC WAIT DAC* SHELPT /RESET INTERVAL BETWEEN SHELLS LAC T1160 RCL RTL RTL AND L7600 ADD TEMP2 DAC* SHELLP /CHANGE YD & SAVE FOR SHELL ISZ SHELLP LAC T1160 RCL RTL RTL RTL RTL AND L7600 /CHANGE YDM AND SAVE FOR SHELL ADD Y1Y2 DAC* SHELLP ISZ SHELLP LAC T1161 RCL RTL RTL AND L7600 ADD HITPNT DAC* SHELLP LAC T1161 ISZ SHELLP RCL RTL RTL RTL RTL AND L7600 ADD X1X2 DAC* SHELLP ISZ SHELLP LAC L7377 DAC* SHELLP DZM SHELLP JMP* SHOOT L7377 777377 WAIT 777717 SHC1 S1WAIT SHC2 S2WAIT COUNTR SHELPT HITPNT TEMP2 SHOTPT SHELLP X1X2 Y1Y2 T.WIN WINNER T1160 T1161 SHL62 1200 125201 777777 200000 SHELLS 0 1200 125201 777777 200000 0 1200 125201 777777 200000 0 1200 125201 777777 200000 0 1200 125201 777777 200000 0 776400 552201 777777 600000 0 776400 552201 777777 600000 0 776400 552201 777777 600000 0 776400 552201 777777 600000 0 1421 351310 2315 476476 0 774273 407102 777004 572366 777425 .REPT 12 0 /PROBABLY NOT NEEDED / CONTINU LAC A1537 DAC SHOTPT LAC L765 DAC COUNTR LAC A1166 DAC SHELPT SHOTS LAC* SHELPT SPA JMP VEL /CHECK LAST ENTRY IN SHELL BLOCK TO SEE IF LAC SHELPT /THERE ARE ANY LIVE SHELLS ADD L773 DAC SHELLP SHOTS1 LAC SHELPT ADD L5 DAC SHELPT ISZ COUNTR JMP SHOTS DZM* SHOTPT ISZ SHOTPT LAC STOP DAC* SHOTPT LAC X1C AND L1777 /GET X-COORD OF SHIP 1 DAC X1X2 LAC X2C /GET X-COORD OF SHIP 2 AND L1777 CMA ADD X1X2 /X1-X2 SMA CMA ADD L40 /ARE SHIPS WITHIN 40 UNITS X OF EACH OTHER? SPA JMP NOBANG /NO LAC Y1C AND L1777 DAC X1X2 LAC Y2C /GET Y2 AND L1777 CMA ADD X1X2 /Y1-Y2 SMA CMA ADD L40 /ARE SHIPS WITHIN 40 UNITS Y OF EACH OTHER? SPA JMP NOBANG /NO LAC TIE /COLLISION!! - SET BOTH WINNERS DAC WINNER NOBANG LAC X1C AND L1777 DAC X1X2 LAC Y1C AND L1777 DAC Y1Y2 /GET Y1 LAC W2 DAC T.WIN /SET INDICATOR TO SHIP 1 WIN JMS HIT LAC X2C AND L1777 /GET X2 DAC X1X2 LAC Y2C AND L1777 /GET Y2 DAC Y1Y2 LAC W1 DAC T.WIN /SET TO SHIP 2 WIN JMS HIT LAC S1WAIT SPA ISZ S1WAIT /WAIT BETWEEN SHELLS JMP .+1 LAC S2WAIT SPA ISZ S2WAIT JMP .+1 LAC F1 /DOES PILOT 1 WANT TO FIRE? SNA JMP SHOOT2 /NO DZM F1 LAC A1142 /SHIP 1 IS FIRING DAC COUNTR LAC X1D DAC HITPNT LAC Y1D DAC TEMP2 LAC X1 DAC X1X2 LAC Y1 DAC Y1Y2 LAC Y1DM DAC T1160 LAC X1DM DAC T1161 JMS SHOOT SHOOT2 LAC F2 SNA JMP GO DZM F2 LAC A1144 /SHIP 2 IS FIRING DAC COUNTR LAC X2D DAC HITPNT LAC Y2D DAC TEMP2 LAC X2 DAC X1X2 LAC Y2 DAC Y1Y2 LAC Y2DM DAC T1160 LAC X2DM DAC T1161 JMS SHOOT GO LAC L770 DAC COUNT LOOP2 IOT LAC L7537 DAC CNT VE IOT IOT IOT ISZ CNT JMP VE ISZ COUNT JMP LOOP2 /WAIT FOR AWHILE BEFORE RE-CALCULATING JMP LOOP / / DISPLAY FILES GO HERE / SHIP1 020117 Y1C 221153 X1C 101427 24 205203 203607 201612 301612 303607 305203 305003 303407 301412 201412 203407 205003 224 TUR11 111607 TUR12 700607 / SHIP2 020117 Y2C 221000 X2C 103400 24 205203 203607 201612 301612 303607 305203 305003 303407 301412 201412 203407 205003 224 TUR21 200224 TUR22 100224 / DSHOT 020017 221016 143364 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / 701303 20000 0 2000 / .REPT 5 0 / P1 P2 TEMP T1643 T1644 L770 777770 L10 10 L10. 10 L7537 777537 L772 777772 CNT COUNT Y2 X2 Y1 X1 F2 F1 ROT2 TWAIT2 ROT1 TWAIT1 Y2DM Y2D X2DM X2D Y1DM Y1D X1DM X1D A1144 SHC2 A1142 SHC1 W1 777000 L1777 1777 W2 777 TIE 777777 L40 40 STOP 3000 L5 5 L773 777773 A1166 SHELLS L765 777765 A1537 DSHOT+1 L7600 777600 L1 1 L21 21 L20T 20000 VCTR 701303 L142T 142000 L1776 1776 VPNT 220000 A1162 SHL62 L757 777757 L33 33 L11 11 L600T 600000 L200T 200000 L400T 400000 L764 777764 L177 177 SIGN 200 L102T 102000 L100T 100000 L7400 177400 L44 44 L776 777776 L1. 1 A600 DIRTBL A560 ACMASK A575 SUBTBL FILER1 SHIP1 FILER2 SHIP2 FILER3 DSHOT .END START