From 79c39ecbbab29815065ba683418e203c1ddf9932 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 31 Jul 2018 07:40:42 +0200 Subject: [PATCH] Lunar Lander for the GT40 terminal. By Jack Burness, February 25, 1973, 5:55pm. --- src/gt40/gtlem.mac | 5102 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 5102 insertions(+) create mode 100644 src/gt40/gtlem.mac diff --git a/src/gt40/gtlem.mac b/src/gt40/gtlem.mac new file mode 100644 index 00000000..aff8d553 --- /dev/null +++ b/src/gt40/gtlem.mac @@ -0,0 +1,5102 @@ +;********************************************************************* +; +; MOONLANDER FOR THE GT40 TERMINAL, FIRST VERSION. +; LEM.090, FEBRUARY 25, 1973 5:55 PM +; WRITTEN BY JACK BURNESS. +; FOR FANTASTIC PROGRAMS AT REASONABLE PRICES, +; OR EXPERT CONSULTING DONE IN EVERY PHASE OF SYSTEM +; DESIGN AND IMPLEMENTATION, WRITE +; JACK BURNESS +; P.O. BOX 411 +; MAYNARD, MASS. +; 01754 +;********************************************************************* + IN1=R0 ;INPUT REGISTER FOR SUBROUTINE CALLING. + IN2=R1 ;SECOND VALUE. + RET1=R2 ;HIGH ORDER PORTION OF SUBROUTINE RETURN. + RET2=R3 ;LOW ORDER PORTION. + TEMP=R4 ;SCRATCH REGISTER. + TEMP2=R5 ;SECOND SCRATCH. +; +; MAJOR DEFINITIONS FOR THE SYSTEM. +; + CLKFRQ=50. ;FREQUENCY OF THE RUN TIME CLOCK. + FIVESECONDS=300. ;DEFINE FIVE SECONDS WORTH OF TIME. + CLKFDG=1500. ;CLKFRQ*25. + CLKFG2=3000. ;CLKFRQ*50. + CLKFG3=600. ;CLKFRQ*10. + LKS=177546 ;CLOCK ADDRESS. + G=32. ;ACTUALLY 32.174 IN FUTURE CALCULATIONS. + G1=16087. ;G*500 + G2=2670. ;MOON GRAVITY*500. (.166 EARTH'S). + STATUS=177776 ;WHERE STATUS IS LOCATED. + DISTOP=173400 ;THE DISPLAY STOP INSTRUCTION. + SETSVM=106120 ;INSTRUCTION TO SET SMALL VECTOR MODE. + SETPNT=114000 ;BASIC SET POINT INSTRUCTION. + DISJMP=160000 ;BASIC DISPLAY JUMP INSTRUCTION. + DPC=172000 ;DISPLAY PROGRAM COUNTER. + DSR=172002 ;DISPLAY STATUS REGISTER. + XSR=172004 ;X STATUS REGISTER. + YSR=172006 ;Y STATUS REGISTER. + INT=40000 ;INTENSITY BIT. + LEFT=20000 ;BIT TO SET FOR LEFT X IN LONG V + DOWN=20000 ;BIT TO SET FOR DOWN Y IN LONG VECTOR. + OTHER=100 ;BIT TO SET LEFT OR DOWN FOR SHORT MODE. + INTTWO=200 ;INTENSIFY BIT SHIFTED OVER. + MINTRS=10. ;10% IS MIN. ROCKET WILL RUN AT. + MAXTRS=10500. ;MAXIMUM THRUST OF ENGINE. + EMPTY=14300. ;EMPTY WEIGHT OF SHIP (18200 DESCENT FUEL). + FUELS=30000. ;INITIAL START QUANTITY OF FUEL. + DX1=0. ;X POSITION FOR DATA MESSAGE. + DX2=250. + DX3=500. + DX4=750. + DY1=730. ;Y POSITION FOR DATA MESSAGE. + DY2=730. + DY3=730. + DY4=730. + ITEMX1=900. ;X POSITIONS FOR CHOICE OF DISPLAY. + ITEMX2=ITEMX1 + ITEMX3=ITEMX1 + ITEMX4=ITEMX1 + ITEMX5=ITEMX1 + ITEMX6=ITEMX1 + ITEMX7=ITEMX1 + ITEMX8=ITEMX1 + ITEMX9=ITEMX1 + ITEMXT=ITEMX1 + ITEMXE=ITEMX1 + ITEMXS=ITEMX1 + ITEMDY=22. ;SET UP DELTA Y VALUES NOW. + ITEMYS=5. ;DEFINE BOTTOM Y NOW. + ITEMYE=ITEMYS+ITEMDY ;DEFINE ALL THE OTHER Y'S AS DELTA'S. + ITEMYT=ITEMYE+ITEMDY + ITEMY9=ITEMYT+ITEMDY + ITEMY8=ITEMY9+ITEMDY + ITEMY7=ITEMY8+ITEMDY + ITEMY6=ITEMY7+ITEMDY + ITEMY5=ITEMY6+ITEMDY + ITEMY4=ITEMY5+ITEMDY + ITEMY3=ITEMY4+ITEMDY + ITEMY2=ITEMY3+ITEMDY + ITEMY1=ITEMY2+ITEMDY + SLFTAX=945. ;COORDINATES FOR THE TURNING ARROWS. + SLFTAY=375. + BLFTAX=945. + BLFTAY=330. + SRGTAX=955. + SRGTAY=375. + BRGTAX=955. + BRGTAY=330. + BARLX=947. ;LEFT EDGE OF THROTTLE BAR. + BARBY=450. ;BOTTOM OF THE THROTTLE BAR. + BARTY=700. ;TOP OF THE BAR. + BARSIZ=250. ;LENGTH OF THE BAR. + BARFDG=BARBY+25. ;ARITHEMENTIC FUDGE FACTOR. + BARMXR=940. ;WHERE UNDERLINING IS TO START. + BARMXL=43.+LEFT ;LENGTH OF UNDERLINE. + BAREST=55.+LEFT ;WHERE TO POSITION FOR THE LEADING BLANKS. + BARADD=13. ;AMOUNT TO ADD TO Y FOR UNDERLINE. + .PAGE +; +; +; MISC INFORMATION. +; ---- ------------ +; ALL VELOCITIES ARE SIGNED AND STORED IN TENTHS OF FEET PER SECOND. +; ALL ACCELERATIONS ARE 500 TIMES ACTUAL. +; THE HORIZONTAL AND VERTICAL DISTANCE IS IN FEET (SIGNED). +; THE FUEL IS IN TENTHS OF POUNDS. +; WEIGHT OF THE CRAFT IS IN POUNDS, AS IS THRUST. +; ORIENTATION OF THE SHIP IS STRICTLY COMPASS (I.E. +; ZERO DEGREES IS AT THE TOP, 90 TO THE RIGHT, ETC. +; M A I N D A T A A R E A . +; +TURN: .WORD 0 ;PRESENT RATE OF TURN AS SELECTED BY USER. +ANGLE: .WORD 0 ;ANGLE CURRENTLY BEING USED FOR TRIG CALCULATIONS. +ANGLER: .WORD 0 ;REMAINDER OF ANGLE FOR TURNING. +SINANG: .WORD 0 ;SINE OF THAT ANGLE +COSANG: .WORD 0 ;COSINE OF THAT ANGLE. +ACCEL: .WORD 0 ;CURRENT ACCEL OF SHIP CAUSED BY ROCKET. +HORACC: .WORD 0 ;CURRENT HORIZONTAL ACCELERATION. +VERACC: .WORD 0 ;CURRENT VERTICAL ACCELERATION (INCLUDING G). +HORVEL: .WORD 0 ;CURRENT HORIZONTAL VELOCITY> +HORREM: .WORD 0 ;REMAINDER OF HORIZONTAL VELOCITY AFTER DIVIDING. +VERVEL: .WORD 0 ;CURRENT VERTICAL VELOCTIY. +VERREM: .WORD 0 ;REMAINDER OF VERTICAL VELOCITY AFTER DIVIDING. +HORDIS: .WORD 0 ;CURRENT HORIZONTAL DISTANCE. +VERDIS: .WORD 0 ;CURRENT VERTICAL DISTANCE. +PERCNT: .WORD 0 ;% OF THRUST FROM LIGHT BAR. +OLDPER: .WORD 0 ;PREVIOUS % TO SAVE USELESS DISPLAY CALCULATION. +PERTRS: .WORD 0 ;% THRUST THE USER IS REQUESTING. +THRUST: .WORD 0 ;ACTUAL THRUST DELIVERED. +FUEL: .WORD 0 ;TENTHS OF # OF LBS (EARTH) OF FUEL REMIANING. +WEIGHT: .WORD 0 ;CURRENT EARTH WEIGHT OF SHIP. +TICKS: .WORD 0 ;# OF TICKS. MOVED OVER TO CLOCK. +CLOCK: .WORD 0 ;# OF CLOCK TICKS SINCE LAST CALCULATION. +TIME: .WORD 0 ;ACCUMULATION OF "CLOCK". I.E. TOD. +BIGXCT: .WORD 0 ;PRESENT POSITION OF SHIP (X RASTOR). +LEFTED: .WORD 0 ;LEFT EDGE OF SCREEN FOR CLOSEUP WORK (DELTA X). +LEFEET: .WORD 0 ;DISTANCE FROM LANDING THAT LEFTEDGE IS DURING CLOSEUP. +INDEXL: .WORD 0 ;INDEX FOR FEATURE JUST TO LEFT OF SHIP. +AVERT: .WORD 0 ;AVERAGE RASTOR HEIGHT OF TERAIN. +AVERY: .WORD 0 ;AVERAGE Y HEIGHT OF THE TERRAIN. +RADARY: .WORD 0 ;AVERAGE RADAR HEIGHT ABOVE THE TERRAIN. +LASTX: .WORD 0 ;USED TO KEEP TRACK OF WHERE DRAW WAS WORKING. +LASTY: .WORD 0 ;SAME FOR Y. +LOWY: .WORD 0 ;LOWER LIMIT TO SHOW INVISIBLE VECTOR. +LOWEST: .WORD 0 ;LOWEST Y COORDINATE OF PRESENT SCREEN FIGURE. +SAVEY: .WORD 0 ;LOWEST Y OF LAST DRAWN SHIP. +FRAND: .WORD 0 ;RANDOMIZER WORD FOR ROCKET FLICKER. +FSHIFT: .WORD 0 ;X SHIFTER FOR FLAME. +FINT: .WORD 0 ;INTENSITY OF FLAME. +FLINE: .WORD 0 ;LINE TYPE FOR FLAME. +SHIPTP: .WORD 0 ;FLIP-FLOP TO DETERMINE WHICH BUFFER + ;THE USER IS DISPLAYING SHIP FROM. +DNUM: .WORD 0 ;CURRENT PICTURE WE ARE DISPALYING. +DSTACK: .WORD STACKD ;CURRENT DISPLAY STACK POINTER. +LPFLG1: .WORD 0 ;CURRENT ADDRESS OF VALUE TO BE DISPLAYED. +OLDHIT: .WORD 0 ;PREVIOUS LIGHT PEN ADDRESS COUNTER TO +HITCNT: .WORD 0 ;AVOID SPURIOUS HITS. +MOON: .WORD . ;CURRENT STATUS OF PICTURE OF MOON. +DRAWCT: .WORD 0 ;COUNTER FOR DRAWING THE MOON. +DRAWTY: .WORD 0 ;LOCAL COUNTER FOR CHANGING THE INTENSITY OF +DRAWTZ: .WORD 0 ;THE SURFACE OF THE MOON. +DINT: .WORD 0 +DTYPE: .WORD 0 +DFUDGE: .WORD 0 ;ADDITIONAL MOON FUDGING FOR CLOSEUP. +XTYPE: .WORD 0 ;THIS IS THE RANDOMIZING WORD FOR +RADIUS: .WORD 0 ;THE EXPLOSION, AND THE BLAST RADIUS. +DUSTX: .WORD . ;A RANDOM WORD FOR GENERATING DUST. + .=.+40 ; -- RESERVE 40 OCTAL WORDS FOR STACK +STACKD: ;MAKE SURE THAT THERE IS ENOUGH SPACE FOR IT. + .PAGE +; C O D E +; - - - - +; START OF THE SYSTEM. +START: RESET ; DO A FEW HEAVY RESETS + RESET +; +; INSTALL THE NEW VECTORS +; + MOV #POWERF,24 ; PWR FAIL VECTOR + MOV #340,26 + MOV #KBDINT,60 ; KEYBOARD + MOV #340,62 + MOV #TIMER,100 ; LINE CLOCK + MOV #300,102 + MOV #DISPLY,320 ; VT-11 + MOV #200,322 + MOV #LIGHT,324 + MOV #200,326 + MOV #DBUSE,330 + MOV #340,332 +; +; DISPLAY THE STARTING MESSAGE (ONCE) +; + MOV #STACK,SP + MOV #STARTM,DPC + MOV #100,177560 ; ENABLE KBD INTERRUPTS + MOV #100,LKS ; ENABLE LINE CLOCK + JSR PC,DELAY ; WAIT 10 SECS AND GET STARTED + .WORD 10. +; +; ONCE STARTED, ALL RESTARTS OCCUR HERE +; +RESTAR: MOV #MOONST,IN1 ;NOW SET THE MOON AREA TO ALL DISTOP'S + MOV #MOONEN,IN2 ;FOLLOWED BY A ZERO. GET LOC TO GET COUNT. + SUB IN1,IN2 ;AND GET # OF BYTES. + ASR IN2 ;GET NUMBER OF WORDS TO CLEAR. + ASR IN2 ;GET NUMBER OF DOUBLE WORDS TO CLEAR. +RESTL1: MOV #DISTOP,(IN1)+ ;PUT IN THE DISPLAY STOP INSTRUCTIONS NOW. + CLR (IN1)+ + DEC IN2 + BGT RESTL1 ;AND LOOP TILL DONE. + CLR STATUS ;CLEAR CPU STUFF. + MOV #STACK,SP ;SET UP THE STACK POINTER NOW. + MOV #INIT,IN1 ;INITIALIZE THE SYSTEM NOW. +STARTL: MOV (IN1)+,IN2 ;PICK UP NEXT COMMAND. + BEQ IDLE ;ZERO. ALL DONE. + MOV (IN1)+,(IN2) ;DO COMMAND NOW. + BR STARTL ;AND LOOP FOREVER. +; +; THIS IS THE MAIN WAIT POINT. IT IS +; ACTIVATED IN THE NORMAL RUNNING MODE. +; SUBROUTINE "EIDLE" CAN BE CALLED WHEN +; IT IS TIME TO BLAST OFF FROM THE MOON +; AFTER GETTING A HAMBURGER. +; +IDLE: JSR PC,EIDLE ;WAIT FOR AN EVENT. + BR IDLE ;AND LOOP FOREVER. +EIDLE: WAIT ;WAIT FOR AN INTERUPT TO OCCUR. +1$: CMP TICKS,#5 ;WAIT FOR CLOCK ON THE 40AND 45 + BLT 1$ + MOV TICKS,IN1 ;PICK UP THE NUMBER OF CLOCK TICKS NOW. + BEQ EXIDLE ;IF NONE, JUST EXIT. + CLR TICKS ;ELSE RESET THE LITTLE TICK COUNTER. + MOV IN1,CLOCK ;AND THEN PUT THE # OF TICKS AWAY FOR CALCULATIONS. + JSR PC,SHOWSP ;DO CALCULATIONS. +EXIDLE: RTS PC ;AND THEN RETURN TO CALLER. + .PAGE +; +; THE INITIALIZATION CRAP. +; +INIT: .WORD TURN,-1. + .WORD ANGLE,-70. + .WORD ANGLER,0 + .WORD HORREM,0 + .WORD VERREM,0 + .WORD HORVEL,10000. + .WORD VERVEL,-5000. + .WORD HORDIS,-22000. + .WORD VERDIS,23000. + .WORD PERCNT,75. + .WORD LPBARY,BARFDG+150. + .WORD OLDPER,-1. + .WORD FUEL,FUELS + .WORD TIME,0 + .WORD CLOCK,0 + .WORD TICKS,0 + .WORD LOWY,0 + .WORD DNUM,0 + .WORD DSTACK,STACKD + .WORD STACKD,DTOP + .WORD LPFLG1,0 + .WORD MOON,. + .WORD DPC,ITEME1 + .WORD LKS,100 + .WORD FSUBC,0 + .WORD SHIPDP,0 + .WORD MOONGO,0 + .WORD SYSMES,0 + .WORD DUSTON,0 + .WORD DIALTB,ITEME1 + .WORD DIALTB+2,ITEME3 + .WORD DIALTB+4,ITEME8 + .WORD DIALTB+6,ITEME9 + .WORD ITEME1+2,117560 + .WORD ITEME2+2,117560 + .WORD ITEME3+2,117560 + .WORD ITEME4+2,117560 + .WORD ITEME5+2,117560 + .WORD ITEME6+2,117560 + .WORD ITEME7+2,117560 + .WORD ITEME8+2,117560 + .WORD ITEME9+2,117560 + .WORD ITEMET+2,117560 + .WORD ITEMEE+2,117560 + .WORD ITEMES+2,117560 + .WORD OLDHIT,. + .WORD HITCNT,10. + .WORD LPSW,DISTOP + .WORD 0 + .PAGE +; +; GO HERE IF THERE IS ANY ACTION FROM THE KEYBOARD +; +KBDINT: RESET + RTI + .PAGE +; +; POWER FAIL ROUTINES HERE. +; +POWERF: MOV #STACKD,DSTACK ;SET UP ALL THE STACKS NOW. + MOV #DTOP,STACKD + CLR DNUM + MOV #ITEME1,DPC ;THE DISPLAY IS GOING NOW. + MOV #100,LKS ;SO IS THE CLOCK. + MOV #STACK,SP ;NOW SO IS THE PROGRAM. + CLR STATUS + JMP IDLE ;AND REENTER. +; +; DISPLAY BUS ERROR ROUTINES. +; +DBUSE: CLR DNUM ;RECYCLE DISPLAY TO THE TOP OF THE LIST. + MOV IN1,-(SP) ;MAKE IT LOOK LIKE A NORMAL INTERUPT. + MOV IN2,-(SP) + MOV #DITEM1,IN2 + JMP DTOPOK ;AND REENTER IT NOW. + .PAGE +; +; THIS ROUTINE WILL DRAW THE SHIP RELATIVE TO IT'S CENTER. +; THE ANGLES HAVE ALREADY BEEN GOTTEN FROM SOMEWHERE +; ELSE AND HAVE BEEN LEFT IN COSANG AND SINANG. IN ADDITION, +; IN1 POINTS TO THE COMMANDS ON HOW TO DRAW THE SHIP, AND IN2 +; POINTS TO WHERE TO LEAVE THEM. +; COMMAND LIST OF THE THE FORM: +; "ADDRESS OF ROUTINE" +; "EXTRA DATA, IF NEEDED". +; IF IT'S A DATA POINT TO BE ROTATED, THEN THE NEXT WORD +; HAS THE X AND Y VALUES AS SEPARATE BYTES. THE X VALUE +; IS THE BYTE ON THE RIGHT....... REMEMBER THAT. +; +DRAW: MOV IN1,TEMP ;MOVE OVER THE INPUT LIST POINTER. + MOV IN2,TEMP2 ;AND THE OUTPUT LIST POINTER. + CLR LASTX ;SET TO CENTER OF OBJECT. + CLR LASTY + MOV #77777,LOWEST ;SET UP LOWEST POINT WE HAVE DRAWN SO FAR. +DRAWLP: MOV (TEMP)+,PC ;GO TO FIRST INSTRUCTION. +DRAWIS: CLR -(SP) ;DRAW INVISIBLE SHORT. + JSR PC,DRAWRT ;ROTATE NEXT SET OF POINTS. + BR DRAWSC ;AND THEN INSERT THEM INTO LIST. +DRAWVS: MOV #40000,-(SP) ;DRAW VISIBLE SHORT. + JSR PC,DRAWRT ;ROTATE RETURNS X IN RET1, Y IN RET2. + CMP LASTY,LOWY ;SEE IF THIS LINE SHOULD BE DRAWN. + BGE DRAWV1 ;YEP. + CLR (SP) ;NOPE. CLEAR OUT DISPLAY BIT. + BR DRAWSC +DRAWV1: CMP RET2,LOWY ;CHECK OTHER END NOW. + BGE DRAWSC ;IT'S ALSO OK. + CLR (SP) ;ELSE CLEAR THE DISPLAY BIT. +DRAWSC: MOV RET1,IN1 ;MOVE OVER X. + SUB LASTX,RET1 ;FIGURE OUT DELTA X. + BPL DRAWS1 ;IF POSITIVE, OK. ELSE + NEG RET1 ;REVERSE SIGN AND SET MINUS BITS. + BIS #20000,(SP) ;IN THE NEW SHORT VECTOR COMMAND. +DRAWS1: BIC #-100,RET1 ;REMOVE STRAY BITS (IF ANY). + SWAB RET1 ;GET INTO CORRECT POSITION. + ROR RET1 + MOV IN1,LASTX ;AND FINALLY UPDATE THE NEW X POSITION. + MOV RET2,IN2 ;AND NOW DO SAME THING WITH THE Y. + SUB LASTY,RET2 + BPL DRAWS2 + NEG RET2 + BIS #100,(SP) +DRAWS2: BIC #-100,RET2 + MOV IN2,LASTY ;UPDATE THE NEW Y NOW. + CMP IN2,LOWEST ;SEE IF PRESENT Y IS LOWEST POINT ON SCREEN. + BGE DRAWNL ;NOT LOWEST. + MOV IN2,LOWEST ;IF LOWEST, REMEMBER IT. +DRAWNL: BIS RET1,RET2 ;NOW CREATE THE NEW INSTRUCTION. + BIS (SP)+,RET2 + MOV RET2,(TEMP2)+ ;AND STORE IT AWAY. + BR DRAWLP ;AND FINALLY LOOP AROUND AGAIN. +DRAWIN: MOV (TEMP)+,(TEMP2)+ ;THIS MOVES OVER ONE WORD. + BR DRAWLP +DRAWDN: MOV #DISTOP,(TEMP2)+ ;THIS TERMINATES THE PICTURE + CLR (TEMP2)+ ;AND WILL CAUSE THE SUBROUTINE TO EXIT. + RTS PC + .PAGE +; +; THIS ROTATES THE X AND Y BYTE. (TEMP) POINTS TO THE X. +; +DRAWRT: MOVB (TEMP)+,IN1 ;PICK UP THE X. + MOV SINANG,IN2 + JSR PC,TRGMUL ;MULTIPLY THEM. + MOV RET1,-(SP) ;AND SAVE X*SINANG. + MOVB (TEMP),IN1 ;PICK UP THE Y. + MOV COSANG,IN2 + JSR PC,TRGMUL ;MULTIPLY THEM OUT. + SUB RET1,(SP) ;X*SINANG-Y*COSANG (WE'LL REVERSE SIGNS LATER. + MOVB -1(TEMP),IN1 ;PICK UP THE X AGAIN. + MOV COSANG,IN2 + JSR PC,TRGMUL ;X*COSANG + MOV RET1,-(SP) + MOVB (TEMP)+,IN1 ;Y ONCE AGAIN. + MOV SINANG,IN2 + JSR PC,TRGMUL ;Y*SINE + ADD (SP)+,RET1 ;X*COS+Y*SIN + MOV (SP)+,RET2 ;X*SIN-Y*COS + NEG RET2 ;Y*COS-X*SIN + RTS PC ;AND EXIT NOW. + .PAGE +; +; THIS ROUTINE FIGURES OUT THE ACCELERATION OF THE SHIP AND +; THE AMOUNT OF FUEL REMAINING. +; +ROCKET: TST FUEL ;SEE HOW MUCH FUEL WE HAVE ON BOARD NOW. + BEQ ROCKOFF ;NONE. TURN OFF THE ENGINE. + MOV PERTRS,IN1 ;PICK UP THE PERCENT THROTTLE NOW. + MOV #MAXTRS,IN2 ;GET THE MAXIMUM THRUST NOW. + JSR PC,MULTWO ;GET PER CENT * MAXTHRUST. + MOV #100.,IN1 ;GET %*MAXIMUM THRUST /100. + JSR PC,DIVTWO + MOV RET2,THRUST ;SAVE IT AWAY NOW. + MOV RET2,IN2 + MOV CLOCK,IN1 ;PICK UP NUMBER OF CLOCK TICKS. + JSR PC,MULTWO + MOV #CLKFDG,IN1 ;PICK UP FREQUENCY*25. + JSR PC,DIVTWO ;APPROX. 250LBS FUEL PER LB THRUST. + SUB FUEL,RET2 ;NOW SUBTRACT OFF REMAINING FUEL. + BMI FUELOK ;IF NEGATIVE, THEN THE FUEL IS OK. + CLR RET2 ;ELSE MAKE SURE TOTAL IS ZERO. + MOV #DISTOP,LPSW ;STOP THE LOW FUEL MESSAGE NOW. + BR FUELKO ;HE'S GOT NONE LEFT. +FUELOK: NEG RET2 ;GET FUEL LEFT + TST LPSW ;SEE IF FUEL IS ALREADY LOW. + BEQ FUELKO ;IT IS. + CMP RET2,#2000. ;SEE IF UNDER 200 POUNDS. + BGE FUELKO ;NO. STILL OK. + CLR LPSW ;ELSE CLEAR THE SWITCH NOW. + BIS #0,DSR ;AND RING THE BELL +FUELKO: MOV RET2,FUEL ;AND SAVE IT AWAY. + CLR RET1 ;NOW DIVIDE BY 10 TO CONVERT + MOV #10.,IN1 ;TENTHS OF POUNDS TO POUNDS. + JSR PC,DIVTWO ;DO DIVISION NOW. + ADD #EMPTY,RET2 ;ADD IN EMPTY WEIGHT OF SHIP. + MOV RET2,WEIGHT ;AND SAVE AWAY NOW. + MOV THRUST,IN1 ;FIGURE OUT ACCELERATION NOW. + MOV #G1,IN2 + JSR PC,MULTWO + MOV TEMP,IN1 ;NOW DIVIDE BY WEIGHT. + JSR PC,DIVTWO + MOV RET2,ACCEL ;AND SAVE THIS AWAY. A=TRS*G/W + MOV RET2,IN1 + MOV SINANG,IN2 ;GET HORIZONTAL ACCELERATION. + JSR PC,TRGMUL + MOV RET1,HORACC + MOV ACCEL,IN1 ;AND GET THE VERTICAL ACCELERATION. + MOV COSANG,IN2 + JSR PC,TRGMUL + SUB #G2,RET1 ;DON'T FORGET ABOUT THE LUNAR GRAVITY. + MOV RET1,VERACC + RTS PC ;AND RETURN NOW. +ROCKOF: MOV #DISTOP,LPSW ;TURN OFF LOW FUEL MESSAGE WHEN OUT. + CLR THRUST ;IF ROCKET IS OFF, TURN OFF THRUST. + MOV #EMPTY,WEIGHT ;UPDATE WEIGHT OF THE ROCKET NOW. + ADD FUEL,WEIGHT + CLR ACCEL ;CLEAR THE ROCKET'S ACCELERATION'S NOW. + CLR HORACC + MOV #-G2,VERACC ;SET ROCKET TO FREE FALL. + RTS PC ;AND RETURN NOW. + .PAGE +; +; THIS ROUTINE WILL DRAW THE THRUST OF THE ROCKET, BASED ON +; THE AMOUNT OF FUEL THAT IS BEING CONSUMED. +; +FLAME: MOV IN1,IN2 ;MOVE OVER WHERE TO LEAVE FLAME. + MOV PERTRS,TEMP ;PICK UP THE PERCENTAGE THRUST NOW. + ASR TEMP ;DIVDE BY EIGHT FOR THE TABLE LOOKUP. + ASR TEMP + ASR TEMP + MOVB YTHRST(TEMP),RET1 ;PICK UP THE Y LENGTH. + INC FRAND ;INCREMENT TO NEXT FLAME DIS@PLACEMENT. + MOV FRAND,RET2 + BIC #-40,RET2 ;JUST THIRTY TWO VALUES POSSIBLE. + MOVB YUPDWN(RET2),RET2 ;PICK UP FLAME DISPLACEMENT. + ADD RET2,RET1 ;ADD THEM TOGETHER. + ADD RET1,FSHIFT ;FIX UP HORIZONTAL FLICKER NOW. + MOV FSHIFT,RET2 + BIC #-4,RET2 ;JUST 0 TO 3. + MOV #FLEN,TEMP ;PICK UP #OF POINTS TO DO. + MOV #FLAMXS,TEMP2 ;PICK UP POINTER TO WHERE TO INSERT. + ADD #FLAMBT,RET2 ;LET RET2 POINT TO THE BYTE X TABLE. +FLAMLP: MOVB (RET2)+,(TEMP2)+ ;INSERT X VALUE NOW. + MOVB RET1,(TEMP2)+ ;INSERT THE Y VALUE. + ADD #6,TEMP2 ;UPDATE PAST COMMANDS. + DEC TEMP ;AND LOOP TILL DONE. + BGT FLAMLP + INC FLINE ;INCREMENT THE LINE TYPE NOW. + BIC #-4,FLINE + ADD #600,FINT ;AND THE INTENSITY NOW. + BIC #176177,FINT ;AND MAKE JUST SEVEN BITS. + MOV #106124,FLAMEX ;SET UP PROTOTYPE COMMAND. + BIS FLINE,FLAMEX ;AND MOVE OVER THE DATA. + BIS FINT,FLAMEX + MOV #FLAMDO,IN1 ;FINALLY SET UP THE POINTER. + JMP DRAW ;AND DRAW THE FIGURE, AND RETURN + .PAGE +; +; THIS ROUTINE GETS THE SINE AND COSINE FROM THE TABLES. +; +TRIG: MOV ANGLE,IN1 ;PICK UP THE ANGLE NOW. + BPL TRIG2 ;POSITIVE. SEE IF >180. +TRIG1: CMP IN1,#-180. ;NEGATIVE. SEE IF BELOW -180. + BGT TRIG3 ;>-180. IT'S OK. + ADD #360.,IN1 ;TOO SMALL. FUDGE IT AND LOOP. + BPL TRIG3 ;IF STILL NEGATIVE. ELSE IT'S OK. + BR TRIG1 +TRIG2: CMP IN1,#180. ;POSITIVE. SEE IF IT'S >180. + BLE TRIG3 ;NOPE. IT'S OK. + SUB #360.,IN1 ;DECREMENT BY ONE REVOLUTION + BMI TRIG2 ;AND LOOP IF IT'S STILL TO BIG. +TRIG3: MOV IN1,ANGLE ;AND NOW SAVE IT AWAY AGAIN. + BPL TRIG4 ;CONVERT TO A GOOD COMPASS NOTATION. + ADD #360.,IN1 ;ELSE WRAP AROUND ONCE. +TRIG4: ASL IN1 ;SHIFT IT LEFT BECAUSE IT'S NECESSARY. + MOV SINTAB(IN1),SINANG ;NOW GET THE NECESSARY CONSTANTS. + CMP IN1,#540. ;SEE IF GREATER THEN 269 DEGREES. + BLT TRIG5 ;NO. IT'S ALRIGHT. + SUB #720.,IN1 ;TOO BIG. WRAP IT AROUND. +TRIG5: MOV COSTAB(IN1),COSANG ;NOW MOVE OVER THE COSINE. + RTS PC ;AND RETURN WHEN DONE. + .PAGE +; +; THIS ROUTINE FIGURES OUT WHERE THE SHIP IS IN RELATIONSHIP TO THE MOON. +; +WHERE: MOV HORACC,IN2 ;PICK UP THE X ACCEL. + BPL WH1 ;IF POSITIVE, FINE. + NEG IN2 ;ELSE NEGATE IT FOR A SECOND. +WH1: MOV CLOCK,IN1 ;PICK UP ELAPSED TIME NOW. + JSR PC,MULTWO ;MULTIPLY THEM TOGETHER. + MOV #CLKFG2,IN1 ;PICK UP TIMER FUDGE. + JSR PC,DIVTWO ;AND DIVIDE IT OUT NOW. + TST HORACC ;GET ORIGINAL SIGN OF X. + BPL WH2 + NEG RET2 +WH2: MOV RET2,RET1 ;MOVE OVER A*T + ASR RET2 ;GET .5*A*T + ADD HORVEL,RET2 ;GET V0+.5*A*T + ADD RET1,HORVEL ;UPDATE THE HORIZONTAL VELOCITY NOW. + MOV RET2,-(SP) ;SAVE SIGN OF VELOCITY FOR TEST LATER. + MOV RET2,IN2 ;VEL IN FPS*10 + BPL WH3 + NEG IN2 +WH3: MOV CLOCK,IN1 ;NOW GET THE DISTANCE COVERED. + JSR PC,MULTWO + MOV #CLKFG3,IN1 + ADD HORREM,RET2 ;BRING BACK THE REMAINDER FROM PREVIOUS OPERATIONS. + ADC RET1 ;AND DON'T FORGET THE CARRY. + JSR PC,DIVTWO ;ACTUAL DISTANCE COVERED. + TST (SP)+ ;RECALL OLD SIGN OF VELOCITY. + BPL WH4 + NEG RET2 +WH4: ADD RET2,HORDIS ;UPDATE THE DISTANCE NOW. + MOV RET1,HORREM ;AND SAVE THE REMAINDER NOW. + MOV VERACC,IN2 ;NOW DO THE UP AND DOWN PART. + BPL WH5 ;SAME SORT OF CRAP FOR THE Y. + NEG IN2 +WH5: MOV CLOCK,IN1 + JSR PC,MULTWO + MOV #CLKFG2,IN1 + JSR PC,DIVTWO + TST VERACC + BPL WH6 + NEG RET2 +WH6: MOV RET2,RET1 + ASR RET2 + ADD VERVEL,RET2 + ADD RET1,VERVEL + MOV RET2,-(SP) ;SAVE SIGN FOR LATER USE. + MOV RET2,IN2 + BPL WH7 + NEG IN2 +WH7: MOV CLOCK,IN1 + JSR PC,MULTWO + MOV #CLKFG3,IN1 + ADD VERREM,RET2 ;ADD IN PREVIOUS REMAINDER NOW. + ADC RET1 ;AND FIDDLE IT ACCROSS. + JSR PC,DIVTWO + TST (SP)+ + BPL WH8 + NEG RET2 +WH8: ADD RET2,VERDIS + MOV RET1,VERREM ;AND SAVE THE REMAINDER NOW. + RTS PC + .PAGE +; +; THIS SECTION WILL FIGURE OUT THE POSITION OF THE +; LUNAR MODULE AND WHICH VEIW TO USE. +; +SHOWSP: MOV #-64.,LOWY ;SET UP ABORT LIMIT OUT OF RANGE. + MOV TURN,TEMP2 ;PICK UP THE RATE OF TURN. + CLR TURN ;AND TURN IT OFF NOW. + MOV CLOCK,IN1 ;PICK UP THE NUMBER OF CLOCK TICKS. + MOV TEMP2,IN2 ;AND MOVE OVER THE RATE OF TURN. + BPL SHOWP1 ;IF POSITIVE, THEN OK, + NEG IN2 ;ELSE NEGATE IT. +SHOWP1: JSR PC,MULTWO ;MULTIPLY THEM TOGETHER. + MOV #CLKFRQ,IN1 ;AND THEN GET ACTUAL # OF DEGREES OF TURN. + ADD ANGLER,RET2 ;DON'T FORGET TO ADD IN THE REMAINDER NOW. + ADC RET1 ;AND THE CARRY, ALSO. + JSR PC,DIVTWO + TST TEMP2 ;AND FINALLY SET TO THE CORRECT SIGN. + BPL SHOWP2 + NEG RET2 +SHOWP2: ADD RET2,ANGLE ;UPDATE THE ANGLE NOW. + MOV RET1,ANGLER ;SAVE THE REMAINDER NOW. + JSR PC,TRIG ;AND GET NEW SINES AND COSINES. + ADD #2,SHIPTP ;GET WHICH SHIP'S + MOV SHIPTP,IN2 ;BUFFER TO USE. + BIC #-3,IN2 ;SO WE HAVE NO PROBLEMS. + MOV SHIPLC(IN2),IN2 ;AND SET UP CALL. + MOV #DESIGN,IN1 ;SET UP SHIP'S DESIGN. + MOV IN2,-(SP) ;REMEMBER THE BUFFER FOR LATER USE. + JSR PC,DRAW ;AND DRAW IT NOW. + MOV (SP)+,SHIPDP ;AND FINALLY MOVE OVER BUFFER POINTER TO CALL. + MOV LOWEST,SAVEY ;AND FINALLY SAVE THE LOWEST Y DRAWN. +SHOWNT: MOV PERCNT,PERTRS ;PICK UP THE PRESENT FUEL SETTING. + JSR PC,ROCKET ;FIGURE OUT ROCKET COMPONENTS. + JSR PC,WHERE ;AND NOW FIGURE OUT WHERE WE ARE ON MOON. + MOV HORDIS,TEMP ;PICK UP X IN FEET. + ADD #22400.,TEMP ;FUDGE UP DOWNRANGE CALCULATION. + ASR TEMP ;32 FEET PER RASTOR ON BIG SCALE. + ASR TEMP + ASR TEMP + ASR TEMP + ASR TEMP + MOV TEMP,BIGXCT ;AND SAVE AWAY FOR LATER USE. + MOV TEMP,TEMP2 + ASL TEMP ;NOW GET THE CURRENT RADAR HEIGHT. + ADD #TERAIN,TEMP + MOV (TEMP)+,IN1 ;LEFT TERAIN. + ADD (TEMP),IN1 ;RIGHT TERAIN. + ASR IN1 ;AVERAGE IT OUT. + MOV IN1,AVERY ;AND SAVE IT AWAY. + SUB VERDIS,IN1 ;AND NOW GET THE RADAR HEIGHT. + NEG IN1 + MOV IN1,RADARY ;RADAR HEIGHT IS NOW CALCULATED. + TST THRUST ;NOW SEE ABOUT THE ROCKET FLAME. + BLE NOFLAM ;NO THRUST=NO FLAME. + MOV #FLAMIN,IN1 ;THIS IS WHERE TO LEAVE THE FLAME. + JSR PC,FLAME ;GO DRAW THE FLAME NOW. + MOV #FLAMIN,FSUBC ;AND TURN ON THE FLAME AGAIN. + BR YSFLAM ;AND LEAVE FLAME ON. +NOFLAM: CLR FSUBC ;IF NO THRUST, TURN OF ROCKET. +YSFLAM: MOV BIGXCT,TEMP ;PICK UP X POSITION NOW. + BMI OFFLFT ;WE'RE OFF TO THE LEFT. + CMP TEMP,#10. + BLE OFFLFT ;WE ARE STILL OFF TO THE LEFT. + CMP TEMP,#890. + BGE OFFRGT ;SEE IF WE ARE TOO FAR TO THE RIGHT. + MOV VERDIS,TEMP ;WE SEEM TO BE OK. HOW ABOUT HEIGHT. + BMI CLSEUP ;IF MINUS, GO INTO CLOSEUP MODE. + CMP TEMP,#25000. ;IF OFF TOP, GIVE MESSAGE. + BGE OFFTOP + CMP TEMP,#450. ;SEE IF WE SHOULD MAGNIFY. + BLE CLSEUP ;YES. MAGNIFY. + MOV BIGXCT,SHOWX ;ELSE ESTABLISH THE Y COORDINATE. + ASR TEMP ;NOW SCALE DOWN THE VERTICAL DISTANCE. + ASR TEMP + ASR TEMP + ASR TEMP + ASR TEMP ;32 FEET PER RASTOR AT THIS RANGE. + ADD #43.,TEMP ;UPDATE + MOV TEMP,SHOWY + TST MOON ;IS MOON DRAWN. + BEQ SHWMN1 ;YES. + JSR PC,DRAWM1 ;NO. + CLR MOON ;RESET FLAG. +SHWMN1: JSR PC,DIAL ;DISPLAY THE DIALS NOW. + MOV RADARY,TEMP + SUB #16.,TEMP ;FIX FOR CENTER OF THE SHIP. + BPL SHWOUT ;IT'S OK. + MOV #640.,IN1 ;NOT OK. WE'VE CRASHED. BIG DISTORTION. + JSR PC,ALTER ;ALTER MOON NOW. + MOV SP,MOON ;INDICATE THAT WE'VE ALTERED THE MOON. + JSR PC,DRAWM1 ;NOW REDRAW IT. + CLR MOON ;AND REMEMBER THAT WE'VE REDRAWN IT. + JSR PC,EXPLOD ;GIVE AN EXPLOSION. +SHWOUT: RTS PC ;AND RETURN NOW. + .PAGE +; +; OFF SCREEN ROUTINES GO HERE...... +; +OFFLFT: MOV #13.,IN1 ;PICK UP A NEW X NOW. + MOV #LFTMSG,IN2 ;AND PICK UP A MESSAGE NOW. + BR OFFCOM ;AND DO THE COMMON ROUTINES NOW. +OFFRGT: MOV #887.,IN1 ;A RIGHT X VALUE. + MOV #RGTMSG,IN2 + BR OFFCOM ;SAME CRAP. +OFFTOP: MOV TEMP,IN1 ;PRESENT X VALUE. + MOV #TOPMSG,IN2 ;TOP MESSAGE. +OFFCOM: ASL IN1 ;GET A NEW HORDISTANCE. + ASL IN1 + ASL IN1 + ASL IN1 + ASL IN1 + SUB #22400.,IN1 + MOV IN1,HORDIS ;SET DISTANCE. + MOV IN2,SYSMES ;SET MESSAGE NOW. + CLR FUEL ;TURN OFF FUEL NOW. + CLR HORVEL ;CLEAR SIDEWAYS MOTION. + MOV VERDIS,RET2 ;PICK UP VERTICAL DISTANCE NOW. + ASR RET2 ;DIVIDE BY 4 TO GET A REASONALBE SPEED. + ASR RET2 + BMI OFFCMD ;IF GOING DOWN, WE ARE OK. + NEG RET2 ;ELSE MAKE US GO DOWN. +OFFCMD: MOV RET2,VERVEL ;AND SAVE IT AWAY NOW. + JMP SHOWSP ;AND RELOOP AND REDISPLAY SHIP NOW. + .PAGE +; +; THIS ROUTINE WILL DRAW THE CLOSEUP PICTURES OF +; THE MOON, WHEN THEY BECOME NECESSARY. RETURN GOES +; BACK TO IDLE VIA THE OLD PC ON THE STACK +; . +; +CLSEUP: CMP MOON,(SP) ;SEE IF WE HAVE THE MOON IN SIGHT. + BEQ CLSEC1 ;YES. + MOV BIGXCT,IN1 ;NO. GET CURRENT RASTOR POSITION. + SUB #9.,IN1 ;NOW SET A GOOD LEFT EDGE. +CLSEFG: MOV IN1,LEFTEDGE ;LEFT EDGE ESTABLISHED NOW. + ASL IN1 ;NOW CONVERT EDGE TO FEET. + ASL IN1 + ASL IN1 + ASL IN1 + ASL IN1 + SUB #22400.,IN1 + MOV IN1,LEFEET ;AND SAVE THAT AWAY. + JSR PC,DRAWM2 ;DRAW A CLOSE-UP OF THE MOON NOW. + MOV (SP),MOON ;SET FLAG TO INDICATE WE HAVE DONE SO. + MOV HORDIS,IN1 ;PICK UP THE HORIZONTAL POSITION NOW. + SUB LEFEET,IN1 ;GET FEET FROM LEFT EDGE OF SCREEN. +CLSEOK: MOV IN1,RET2 ;NOW GET RASTOR POSITION (3/2) + ASL IN1 + ADD IN1,RET2 + ASR RET2 ;(3/2) OF FEET=RASTOR + MOV RET2,SHOWX ;AND SAVE IT AWAY NOW. + CLR RET1 ;NOW CONVERT THIS POSITION TO A GOOD. + MOV #48.,IN1 ;NOW CONVERT BACK TO A TERAIN INDEX. + JSR PC,DIVTWO ;DO THE DIVISION NOW. + ADD LEFTEDGE,RET2 ;MAKE INTO A TERAIN AND FEATURE INDEX. + MOV RET2,INDEXL ;SAVE AWAY INDEX TO LEFT POSTION OF SHIP. + ASL RET2 ;MULTIPLY BY TWO FOR THE TERAIN. + MOV RET2,TEMP ;SAVE IT FOR A SECOND. + MOV #48.,IN1 ;NOW FIGURE OUT HOW MUCH SHIP IS TO LEFT + SUB RET1,IN1 ;OR RIGHT OF CENTER OF TERAIN. USE DIVISION REMAINDER. + MOV RET1,TEMP2 ;SAVE THAT AWAY. + MOV TERAIN(TEMP),IN2 ;PICK UP TERAIN NOW. + JSR PC,SGNMUL ;MULTIPLY IT OUT NOW. + MOV RET2,-(SP) ;SAVE FOR A SECOND NOW. + MOV TEMP2,IN1 ;RECALL REMAINDER NOW. DO RIGHT EDGE OF "TERRAIN". + MOV TERAIN+2(TEMP),IN2 ;OTHER HEIGHT. + JSR PC,SGNMUL ;MULTIPLY THEM OUT. + CLR RET1 ;NOW SET UP DIVIDE. THIS WILL CONVERT + MOV #48.,IN1 ;TERAIN HEIGHT*48 TO DISPLAY FUDGED HEIGHT. + ADD (SP)+,RET2 ;OLD FUDGED WEIGHTED HEIGHT. + BPL CLSEF1 ;AVERAGE IS POSITIVE. + NEG RET2 ;AVERAGE IS NEGATIVE. + JSR PC,DIVTWO ;DO THE DIVIDE NOW. + NEG RET2 ;AND NEGATE THE ANSWER. + BR CLSEF2 +CLSEF1: JSR PC,DIVTWO +CLSEF2: MOV RET2,TEMP ;MOVE OVER HEIGHT FOR DFAKE TO USE. + ASR RET2 ;NOW CONTINUING FUDING TERRAIN BY KNOWN STANDARDS. + ASR RET2 + MOV RET2,AVERY ;SAVE AWAY AVERAGE TERAIN HEIGHT. + JSR PC,DFAKE ;GET ACTUAL RASTER HEIGHT ABOVE THE MOON. + MOV TEMP,AVERT ;SAVE IT AWAY NOW. + MOV VERDIS,IN1 ;PICK UP THE DISTANCE NOW. + MOV IN1,RET2 ;PREPARE TO CONVERT TO RASTORS. + ASL RET2 ; THE OLD 3/2 GAMBIT. + ADD IN1,RET2 + ASR RET2 + ADD #23.,RET2 ;TO CONVERT TO VIEWING RASTORS. + MOV RET2,SHOWY ;SAVE IT AWAY NOW. + ADD #24.,SHOWY ;EXCEPT FOR THE FUDGE. + SUB TEMP,RET2 ;GET # OF RASTORS TO GO. + MOV RET2,TEMP ;MOVE BACK OVER. + BPL CLSEF3 ;IF POSITIVE, ALL IS WELL. + NEG RET2 ;ELSE NEGATE IT NOW. +CLSEF3: CLR RET1 ;PREPARE TO DO THE DIVIDE. + MOV #3.,IN1 ;MAKE IT THREE HALFS. + ASL RET2 + JSR PC,DIVTWO + TST TEMP ;GET BACK THE ORIGINAL SIGN NOW. + BPL CLSEF4 + NEG RET2 +CLSEF4: MOV RET2,RADARY ;AND THIS IS THE RADAR HEIGHT. + JSR PC,INTEL ;FIGURE OUT IF ANYTHING GREAT IS TO HAPPEN. + JSR PC,DUST ;AND ALSO IF WE SHOULD SHOW DUST. +AHNONE: RTS PC ;AND WHEN DONE, RETURN NOW. +CLSEC1: MOV HORDIS,IN1 ;MOON ALREADY BEING DISPLAYED. + SUB LEFEET,IN1 ;SEE IF IT'S STILL ON THE SCREEN. + CMP IN1,#30. ;TO CLOSE TO LEFT? + BLE CLOL ;YES. SHIFT TO RIGHT. + CMP IN1,#580. ;TOO CLOSE TO LEFT + BLT CLSEOK ;NOPE. DISPLAY AS IS. + MOV BIGXCT,IN1 ;SHIFT EVERYTHING LEFT NOW. + DEC IN1 + BR CLSEFG ;SHOULD BE POIFECT. +CLOL: MOV BIGXCT,IN1 ;SHIFT EVERYTHING RIGHT IF TOO CLOSE TO THE LEFT. + SUB #17.,IN1 + BR CLSEFG ;FUDGE IT NOW. + .PAGE +; +; GENERAL INTELIGENCE SECTION... +; THIS CODE GOES HERE SO THAT IT MAY BE +; REFERENCED BY SIMPLE BRANCH INSTRUCTIONS +; FROM THE MAIN SECTION "INTEL". +; +AHMAC: TST #MACON ;OVER MACDONALD'S. SEE IF DRAWN. + .=.-2 ;DEFINE MACON AS BEING HERE. +MACON: .WORD 0 ;AND INITIALIZE IT TO ZERO. + BEQ AHNONE ;NO, NOT DRAWN. EXIT NOW. + CMP TEMP2,#30. ;YES. SEE HOW CLOSE WE ARE. + BGT AHNONE ;NOT TOO CLOSE. ALL IS WELL. + CLR #MACTHR ;TOO CLOSE. WE'VE CRASHED INTO IT. + .=.-2 ;AND LIKEWISE DEFINE THE MAC DESTROYED +MACTHR: .WORD MACTHR ;FLAG AS STILL HAVING MACDONALDS. + MOV #MACDED,SYSMES ;TELL HIM WE'VE CRASHED INTO IT. + JMP QUICK ;AND KILL HIM OFF. +AHROCK: CMP TEMP2,#15. ;ARE WE TOO LOW OVER THE ROCK? + BGT AHNONE ;NOPE. + CMP VERVEL,#-600. ;GREATER THAN CRASH SPEED? + BLE GODEAD ;YES. HE'S DEAD. + MOV #ROCKMS,SYSMES ;START DISPLAYING THE ROCK MESSAGE NOW. + CLR SHIPDP ;STOP DISPLAYING THE SHIP NOW. + JSR PC,EXPLOD ;EXPLOD NOW +AHSP1: CMP TEMP2,#26. ;TOO HIGH? + BGT AHNONE ;IT'S ALRIGHT. + CMP TEMP,#-600. ;TOO FAST. + BLE GODEAD + MOV #OLDMS,SYSMES ;DISPLAY THE OLD SHIP MESSAGE. + MOV #3,-(SP) ;SET UP A LEFT SHIP + TST HORVEL ;GET HORIZONTAL VELOCITY. + BMI AHSP1M ;DIRECTION OK. + INC (SP) ;MAKE IT RIGHT TILTING. +AHSP1M: MOV IN1,-(SP) ;PUSH THE INDEX ONTO THE STACK. + JSR PC,PUTFET ;PLACE IN FEATURE TABLE NOW. + SUB #16.,SHOWY ;BRING DOWN THE OLD SHIP. + JSR PC,DRAWM2 ;REDRAW THE MOON NOW. + JSR PC,EXPLOD ;EXPLOD THE SHIP NOW. +AHFLG: CMP TEMP2,#26. ;ARE WE TOO HIGH + BGT AHNONE ;YEP. + TST THRUST ;ENGINE ON? + BEQ AHNONE ;NOPE. EXIT. + CLR -(SP) ;CLEAR THE FLAG NOW. + MOV IN1,-(SP) + JSR PC,PUTFET ;CLEAR INDICATOR FLAG NOW. + MOV #FLAGMS,SYSMES ;GIVE THE FLAG MESSAGE NOW. + JSR PC,DRAWM2 ;REDRAW THE MOON NOW. + BR AHNONE ;AND CONTINUE CHECKING CRAP. +AHOLDS: CMP TEMP2,#17. ;SEE IF ON CRASHED SHIP. + BGT AHNONE ;NOPE. + CMP TEMP,#-600. ;SEE IF TOO FAST. +GODEAD: BLE DEAD ;ELSE DEAD. + MOV #OLDTLT,SYSMES ;GIVE MESSAGE. + JSR PC,EXPLOD ;AND EXPLOD NOW. + .PAGE +; +; ROUTINE WHICH FIGURES OUT WHAT TO DO NOW. +; +INTEL: JSR PC,DIAL ;DISPLAY USER'S DATA NOW. + MOV RADARY,TEMP2 ;PICK UP ALTITUDE NOW. + BMI INTELM ;IT'S NEGATIVE. FIGURE OUT SOMETHING SPECIAL. + CMP TEMP2,#3. ;ARE WE CLOSE. + BLE VERYLOW ;WE CERTAINLY ARE. + MOV VERVEL,TEMP ;NOT TOO LOW. GET VELOCITY NOW. + CMP TEMP,#-600. ;SEE IF <=60 FPS + BLT AHAH ;YES. IS HE SCREWED UP. + CMP TEMP,#-300. ;HOW ABOUT 30 FPS + BLT AHAH2 ;HE'S NOT TOO SCREWED UP + CMP TEMP,#-150. ;HOW ABOUT FIFTEEN FPS. + BLT AHAH3 ;GIVE ANOTHER MESSAGE. + CMP SYSMES,#N2FAST ;WAS A NOT TOO FAST MESSAGE THE + BNE AHAHC ;ONE ISSUED. NO. + CLR SYSMES ;YES. DELETE IT NOW. +AHAHC: MOV INDEXL,IN1 ;PICK UP FEATURE INDEX NOW. + MOV IN1,-(SP) ;PUSH DESIRED ITEM ONTO STACK. + JSR PC,GETFET ;GET THE FEATURE NOW. + MOV (SP)+,IN2 ;AND POP THE ITEM OFF THE STACK. + ASL IN2 ;MULTIPLY IT BY TWO. + JMP @AHTAB(IN2) ;WE'VE GOT IT NOW. +AHAH: MOV #VFAST,SYSMES ;GIVE A VERY FAST MESSAGE NOW. + BR AHAHC ;AND DO SOMETHING ELSE. +AHAH2: MOV #FAST,SYSMES ;GIVE A FAST MESSAGE. + BR AHAHC +AHAH3: MOV #N2FAST,SYSMES ;GIVE A "TAKE IT EASY MESSAGE". + BR AHAHC +INTELM: CMP TEMP2,#-10. + BLE DEAD ;TOO FAR DOWN. HE'S DEAD. +VERYLO: CLR PERCNT ;TURN OFF FUEL NOW. + MOV #BARBY,LPBARY ;AND INIDCATE IT TO HIM. + CLR FSUBC ;TERMINATE FLAMES. + CLR DUSTON ;AND THE DUST. + TST TEMP2 ;GET ALTITUDE NOW. + BEQ VD ;WE'RE DOWN. + BPL AHAHC ;IF POSITIVE, LOOK FOR FEATURES. +VD: MOV VERVEL,TEMP ;PICK UP THE VERTICAL VELOCITY NOW. + CMP TEMP,#-600. ;SEE IF GREATER THAN 60 FPS. + BLE DEAD ;YES. SPLAT + CMP TEMP,#-300. ;HOW ABOUT 30FPS + BLE CRIPPLED ;YES. HE'S CRIPLLED. + CMP TEMP,#-150. ;HOW ABOUT 15FPS + BLE ROUGH ;IT'S A ROUGH ONE. + CMP TEMP,#-80. ;HOW ABOUT 8FPS. + BLE GOOD ;IT'S A GOOD ONE. + MOV #GREATM,IN1 ;ISSUE GREAT MESSAGE + BR MAYBE ;AND NOW CHECK HORIZONTAL VELOCITY. +GOOD: MOV #GOODM,IN1 ;A GOOD LANDING. + BR MAYBE +ROUGH: MOV #ROUGHM,IN1 ;A ROUGH LANDING. + BR MAYBE +CRIPPL: MOV #CRIPM,IN1 ;CRIPPLED. GIVE THAT MESSAGE. + BR MAYBE +DEAD: MOV #DEADM,SYSMES ;ISSUE THE DEAD MESSAGE NOW. +QUICK: MOV #32.,IN1 ;ALTER THE SURFACE NOW. + JSR PC,ALTER + JSR PC,DRAWM2 ;REDRAW THE MOON NOW. + CLR SHIPDP ;STOP DISPLAYING THE SHIP. + JSR PC,EXPLOD ;EXPLOD NOW. +MAYBE: CLR FSUBC ;TURN OFF FLAME IMAGE NOW. + MOV IN1,SYSMES ;DISPLAY THE CALLER'S MESSAGE NOW. + CMP HORVEL,#100. ;SEE IF TOO FAST SIDEWAYS. + BGT MAYBEB ;TOO FAST. + CMP HORVEL,#-100. ;HOW ABOUT LEFT. + BLT MAYBEB ;TOO FAST. + CMP ANGLE,#-15. ;SEE IF THE ANGLE IS OK. + BLT MAYBEC ;TOO FAR LEFT. + CMP ANGLE,#15. ;RIGHT OK? + BGT MAYBEC ;YES. TIP HIM OVER. + MOV INDEXL,IN2 ;NOW FIGURE OUT IF TERAIN IS TOO ROUGH. + ASL IN2 + MOV TERAIN+2(IN2),IN1 ;RIGHT TERAIN. + SUB TERAIN(IN2),IN1 ;LEFT TERAIN. + MOV IN1,RET1 ;MOVE OVER FOR ABSOLUTE VALUE. + BPL MAYBEP ;TAKE ABSOLUTE VALUE NOW. + NEG RET1 +MAYBEP: CMP RET1,#48. ;SEE IF GREATER THAN A 48 FOOT DROP. + BGE MAYBED ;YES. A BADDY. + ;PLANT THE FLAG NOW!!!!!!! + ; . + JSR PC,PALSY ;WITH THE SPASTIC MAN. +MAYBEB: MOV HORVEL,IN1 ;PICK UP DIRECTION TO TIP SHIP. + MOV #SIDEM,IN2 ;PICK UP POINTER TO THE MESSAGE. + BR TILT ;AND TILT THE SHIP NOW. +MAYBEC: MOV ANGLE,IN1 ;GET THE DIRECTION TO TILT THE SHIP. + MOV #ANGLEM,IN2 ;AND PICK UP THE MESSAGE NOW. + BR TILT ;AND TILT IT NOW. +MAYBED: MOV #BUMPYM,IN2 ;PICK UP MESSAGE NOW. IN1=CORRECT SIGN. +TILT: MOV IN2,FSUBC ;DISPLAY MESSAGE FROM FLAME POINT. + MOV INDEXL,IN2 ;PICK UP TERAIN INDEX AGAIN. + MOV #3,-(SP) ;INDICATE IT'S TIPPED TO THE LEFT. + TST IN1 ;PICK UP DIRECTION AGAIN. + BMI TILT1 ;NO, MAKE IT TO THE RIGHT. + INC (SP) +TILT1: MOV IN2,-(SP) ;AND NOW UPDATE THE FEATURE TABLE. + JSR PC,PUTFET + ASL IN2 ;NOW GET TERAIN CHARACTERISTICS. + MOV TERAIN+2(IN2),RET1 ;RIGHT TERAIN. + SUB TERAIN(IN2),RET1 ;LEFT TERAIN. + MOV RET1,RET2 ;NOW WE'LL CONVERT FEET DIFFERENCE TO AN ANGLE. + ASL RET2 ;MULTIPLY IT BY 3 + ADD RET1,RET2 ;OK + ASR RET2 ;NOW DIVIDE BY FOUR. + ASR RET2 + SUB RET2,RET1 ;SUBTRACT FROM THE ORIGINAL. + MOV RET1,RET2 ;NOW HALF ANSWER AGAIN. + ASR RET2 + ADD RET2,RET1 ;AND ADD IN NEW ANSWER. RESULT + ;IS NUMBER OF DEGREES TO TILT. + BPL TILT2 ;NOW SEE IF RESULT IS GREATER THAN + CMP RET1,#-45. ;THE ABS(45). + BGE TILT3 ;IF OK, THEN LEAVE ALONE. + MOV #-45.,RET1 ;ELSE SET IT TO -45. + BR TILT3 +TILT2: CMP RET1,#45. ;SEE IF IT'S GREATER THAN 45 DEGREES. + BLE TILT3 ;NO, IT'S OK. + MOV #45.,RET1 ;ELSE FIX IT UP NOW. +TILT3: MOV #90.,RET2 ;PICK UP FALLEN SHIP ANGLE. + TST IN1 ;GET WHICH WAY TO FALL. + BPL TILT4 ;IT'S OK. + NEG RET2 ;NEGATE IT NOW. +TILT4: ADD RET2,RET1 ;GET THE NEW SHIP ANGLE NOW. + MOV RET1,ANGLE ;UPDATE SHIP ANGLE. + MOV SHIPTP,IN2 ;NOW TOGGLE SHIP SWITCH. + ADD #2,IN2 + BIC #-3,IN2 + MOV IN2,SHIPTP + MOV SHIPLC(IN2),IN2 ;PICK UP BUFER POINTER NOW. + MOV IN2,-(SP) ;AND SAVE IT AWAY FOR LATER USE. + JSR PC,TRIG ;GET THE SINE AND COSINE NOW. + MOV #DESIGN,IN1 ;HOW TO DRAW SHIP. + JSR PC,DRAW ;DRAW IT NOW. + MOV (SP)+,SHIPDP ;SHOW NEW SHIP NOW. + SUB #7.,SHOWY ;BUT BRING IT DOWN A LITTLE BIT. + JSR PC,DELAY ;DELAY FOR A WHILE + .WORD 10. + .PAGE +; +; THIS ROUTINE WILL KICK UP DUST ON THE MOON. +; +DUST: CMP RADARY,#150. ;SEE IF WE ARE CLOSE TO THE MOON NOW. + BGE NODUST ;DON'T GENERATE ANY DUST NOW. + MOV #EXLIST,TEMP2 ;PICK UP ADDRESS OF WHERE TO LEAVE DUST. + MOV PERTRS,TEMP ;GET THE TRUST NOW. + CMP TEMP,#63. ;SEE IF MORE THAN 63% + BLE DUSTB1 ;NO. OK. + MOV #63.,TEMP ;IF MORE, SET TO 63% FOR SCALING. +DUSTB1: ROL TEMP ;BECAUSE WE WILL USE MAGNITUDE TO + ROL TEMP ;CONTROL INTENSITY. + ROL TEMP ;MOVE OVER TO INTENSITY SPOT. + ROL TEMP + BIC #176177,TEMP ;CLEAR OUT ANY STRAY BITS NOW. + BIS #116120,TEMP ;NOW SET THE POSITIONING MASK. + MOV TEMP,(TEMP2)+ ;PLACE IN THE LIST NOW. + CMP ANGLE,#45. ;SEE IF THE ANGLE IS TOO GREAT NOW. + BGT NODUST ;YEP. + CMP ANGLE,#-45. + BLT NODUST ;SAME HERE. + MOV SINANG,IN2 ;NOW GET THE PLACE TO PUT THE DUST + BPL DUSTP1 ;BY FIGURING OUT THE TANGENT OF + NEG IN2 ;OF THE ANGLE. MAKE POSITIVE +DUSTP1: MOV SHOWY,IN1 ;SO DIVIDE WON'T BLOW. GET RASTOR Y NOW. + SUB AVERT,IN1 ;SUBTRACT OFF THE TERAIN HEIGHT NOW. + MOV IN1,TEMP ;SAVE FOR A SECOND. + JSR PC,MULTWO ;GET PRODUCT. + MOV COSANG,IN1 ;GET COSINE NOW. + JSR PC,DIVTWO ;RET2=TAN(ANGLE)*DELTAY + ADD RET2,TEMP ;TEMP=DELTAX+DELTAY=TOTAL FLAME DISTANCE. + TST SINANG ;FIGURE OUT WHICH WAY DUST IS TO GO. + BMI DUSTP2 ;CORRECT DIRECTION NOW. + NEG RET2 ;ELSE NEGATE IT NOW. +DUSTP2: ADD SHOWX,RET2 ;CENTER OF DUST NOW. + MOV RET2,(TEMP2)+ ;INSERT INTO THE BUFFER. + MOV AVERT,(TEMP2)+ ;INSERT THE Y VALUE NOW. + MOV #130000,(TEMP2)+ ;INSERT RELATIVE POINT COMMAND INTO THE BUFFER. + SUB #150.,TEMP ;GET APPROXIMATE DISTANCE TO GROUND. + BPL NODUST ;MORE THAN 50 FEET AWAY. PRODUCE NO DUST. + NEG TEMP ;MAKE THE DISTANCE POSITIVE AGAIN. + MOV TEMP,IN1 ;NOW MULTIPLY IT BY THE % THROTTLE. + MOV PERTRS,IN2 + JSR PC,MULTWO ;NOW HAVE ANUMBER BETWEEN 0 AND 5000 + ASR RET2 ;NOW BRING IT DOWN TO A CIVILIZED NUMBER. + ASR RET2 ;BY DIVIDING BY 16. + ASR RET2 + ASR RET2 + BEQ NODUST ;IF ZERO, GENERATE NO DUST. + MOV RET2,-(SP) ;SAVE THE COUNTER ON THE STACK. + MOV #STACK-200.-EXLIST-12.,RET1 ;PICK UP SIZE OF DUST AREA. + ASR RET1 ;GET NUMBER OF DOUBLE WORD ENTRIES. + ASR RET1 + CMP RET1,(SP) ;SEE IF CALCULATED NUMBER IS OK. + BHIS DUSTWF ;IF GREATER OR EQUAL, ALL IS WELL. + MOV RET1,(SP) ;ELSE SET A FINITE LIMIT NOW. +DUSTWF: MOV DUSTX,RET1 ;PICK UP A RANDOM DUST GENERATING WORD. + MOV #-100,RET2 ;AND LEAVE A GOOD MASK IN RET2. +DUSTL: ADD TIME,RET1 ;GENERATE THE RANDOM WORD NOW. + INC RET1 + BIC RET2,RET1 ;NOW LEAVE JUST LOW SIX BITS. + MOVB YTHRST(RET1),IN1 ;PICK UP AN X NOW. + ADD VERACC,RET1 ;NOW A LITTLE MORE RANDOMIZING. + BIC RET2,RET1 ;INDEX SET TO PICK UP Y. + BIC RET2,IN1 ;MAKE X JUST SIX BITS. + SWAB IN1 ;X OVER TO LEFT. + ROR IN1 ;AND INTO POSITION NOW. + COM TEMP ;COMPLEMENT X DIRECTION NOW. + BIC #-20001,TEMP ;LEAVE JUST THE SIGN BIT. + BIS #40000,TEMP ;SET THE INTENSITY BIT NOW. + BIS TEMP,IN1 ;AND SET THEM IN THE X NOW. + MOVB YTHRST(RET1),IN2 ;PICK UP THE Y NOW. + BIC RET2,IN2 ;Y IS ALWAYS POSITIVE. + BIS IN2,IN1 ;MAKE THE COMMAND NOW. + MOV IN1,(TEMP2)+ ;AND STICK IT AWAY. + ADD #20100,IN1 ;FLIP X AND Y SIGNS. + BIC #140000,IN1 ;TURN OFF DISPLAY BIT. + MOV IN1,(TEMP2)+ ;AND SAVE AWAY NOW. + DEC (SP) ;DECREMENT THE COUNTER NOW. + BGT DUSTL ;LOOP AROUND UNTIL DONE. + MOV #DISTOP,(TEMP2)+ ;TERMINATE THE LIST NOW. + CLR (TEMP2) ;WITH A DISPLAY STOP INSTRUCTION + MOV RET1,DUSTX ;SAVE DUSTX NOW. + TST (SP)+ ;INCREMENT THE COUNTER NOW. + MOV #EXLIST,DUSTON ;TURN ON THE DUST NOW. + RTS PC ;AND RETURN TO THE CALLER. +NODUST: CLR DUSTON ;TURN OFF THE DUST DISPLAY NOW. + RTS PC ;AND RETURN. + + .PAGE +; +; THIS ROUTINE WILL PLANT AN AMERICAN FLAG ON THE MOON. +; +; OR EVEN MORE SUPER, IT WILL BUY +; SOME HAMBURGERS. +; +PALSY: JSR PC,DELAY ;WAIT FOUR SECONDS BEFORE + .WORD -4. ;DOING ANYTHING GREAT. + MOV SHOWX,MANX ;POSITION MAN CORRECTLY. + MOV SHOWY,MANY + MOV #MAN,DUSTON ;SHOW THE MAN NOW. +PALSY1: BIT #177,TIME ;WAIT FOR CLOCK TO LINE UP NOW. + BNE PALSY1 ;WHICH SHOULD TAKE A RANDOM AMOUNT OF TIME. + TST MACON ;SEE IF THERE'S A MACDONALD'S PRESENT. + BEQ PALNOR ;NONE. NORMAL PLANT. +; MOVE THE MAN TO THE MACDONALD'S NOW! + MOV MACX,RET2 ;PICK UP THE MACDONALD'S X + SUB SHOWX,RET2 ;FIGURE OUT WHICH WAY TO GO. + MOV MACY,RET1 ;PICK UP THE HEIGHT OF THE MACDONALD'S. + SUB MANY,RET1 ;GET THE HEIGHT OF THE MAN NOW. + ADD #3,RET1 ;LIFT HIM UP OFF THE FLOOR. + MOV RET1,-(SP) ;AND PUSH DIFFERENCE ONTO STACK. + BEQ PALMX1 ;IF NO X, THEN ONLY MOVE Y. + JSR PC,MOVMAN ;MOVE THE MAN NOW. +PALMX1: MOV MACX,RET2 ;NOW FIGURE OUT HOW FAR TO MOVE THE MAN. + SUB MANX,RET2 + ADD #25.,RET2 ;BRING HIM INTO THE PLACE. + MOV RET2,-(SP) ;REMEMBER WHERE WE WERE. + CLR RET1 ;NO Y MOVE. + JSR PC,MOVMAN ;MOVE THE MAN NOW. + MOV #ORDER,SYSMES ;ORDER THE FOOD NOW. + JSR PC,DELAY ;WAIT FOR AWHILE. + .WORD -8. + CLR SYSMES ;REMOVE THE MESSAGE. + JSR PC,DELAY ;WAIT SOME MORE NOW. + .WORD -2. ;AND THEN FINALLY START HIM BACK. + NEG (SP) ;GET THE NEGATIVE DISTANCE. + MOV (SP),RET2 + CLR RET1 ;NO Y. + JSR PC,MOVMAN + MOV (SP)+,RET2 ;AND THEN GO UP INTO THE SHIP. + MOV (SP)+,RET1 ;BY RECALLING THE VALUES. + NEG RET1 ;INVERT SIGN, AND DON'T + BEQ PALMX2 ;FORGET POSSIBILITY OF SHIP LEVEL. + JSR PC,MOVMAN ;UP HE GOES NOW. +PALMX2: JSR PC,DELAY ;HOLD HIM IN SHIP A FEW SECONDS. + .WORD -2. + ADD #4.,VERDIS ;THEN LIFT HIM UP, AND TAKE HIM OFF. + ADD #2000.,FUEL ;GIVE HIM A LITTLE BIT MORE FUEL. + CLR VERVEL ;AND NO UPWARD VELOCITY. + CLR TICKS ;RESET NUMBER OF TICKS THAT HAVE ELAPSED. + MOV #STACK,SP ;AND SET SP TO TOP OF CORE . +PALOFF: CLR SYSMES ;LOOP WITHOUT GIVING ANY MESSAGES. + CLR ANGLE ;STRAIGHT UP. + CLR HORVEL ;WITH NO SIDEWAYS MOTION. + MOV #30.,PERCNT ;WITH ENOUGH THRUST TO RISE UP. + JSR PC,EIDLE ;AND DO EVERYTHING RIGHT. + TST MOON ;AND WAIT TILL MOON GETS BIG. + BNE PALOFF ;AND THEN MAYBE WE'LL FALL THROUGH. + CLR SHIPDP ;WHEN MOON IS BIG, REMOVE + CLR FSUBC ;SHIP AND FLAME. + JSR PC,DELAY ;AND THEN JUST WAIT FOR A FEW SECONDS. + .WORD 3. + .PAGE +; +; THIS ROUTINE PLANTS AN AMERICAN FLAG ON THE MOON. +; +PALNOR: MOV #1,-(SP) ;INDICATE TO MEMORY THAT SHIP HAS LANDED. + MOV INDEXL,-(SP) + JSR PC,PUTFET ;AWAY GO THE FEATURES NOW. + MOV #-24.,RET1 ;PREPARE TO MOVE THE MAN OUT NOW. + MOV #48.,RET2 + MOV TIME,TEMP2 ;FUDGE WHICH WAY TO MOV THE MAN. + ROR TEMP2 ;BY DIDDLING LOW BIT OF TIME. + BCC PALN1 ;IF LOW BIT OFF, GO RIGHT. + NEG RET2 ;IF ON, GO LEFT. +PALN1: MOV RET2,-(SP) ;REMEMBER IT ANYWAY. + JSR PC,MOVMAN ;MOVE THE MAN NOW. + MOV (SP)+,RET2 ;AND THEN THE FINAL DISTANCE. + CLR RET1 ;WITH NO Y. + JSR PC,MOVMAN + MOV MANX,FLAGX ;DISPLAY THE FLAG NOW. + MOV MANY,FLAGY + ADD #20.,FLAGX ;OFFSET IT A LITTLE BIT. + MOV #FLAGL,FSUBC ;PLACE FLAG IN THE FLAME LIST. + MOV INDEXL,IN1 ;PICK UP THE INDEX NOW. + JSR PC,PALSYI ;UPDATE IT ALSO. + JSR PC,PALSYI ;SO WE KNOW WHERE TO REMEMBER FLAG. + MOV #2,-(SP) ;SAVE IT AWAY NOW. + MOV IN1,-(SP) ;IN THE FEATURE TABLE + JSR PC,PUTFET + MOV #MANMSG,SYSMES ;DISPLAY THE MESSAGE NOW. + JSR PC,DELAY ;WAIT TEN MORE SECONDS. + .WORD 10. + .PAGE +; +; THIS ROUTINE MOVES THE MAN ALONG THE SURFACE +; OF THE MOON. RET1=DELTA Y; RET2=DELTA X. +; IF Y=0, THEN ONLY X IS USED. IF Y<>0, THEN ONLY +; THE SIGN OF THE X IS USED. +; +MOVMAN: MOV #INC,TEMP2 ;GET "INC IN1" TO INDICATE X TO RIGHT. + TST RET2 ;GET X DIRECTION NOW. + BPL MOVM1 ;TO THE RIGHT. + MOV #DEC,TEMP2 ;ELSE MAKE THE X GO THE OTHER WAY. + NEG RET2 ;AND SET THE COUNTER TO GO DOWN. +MOVM1: MOV TEMP2,PALSYI ;SAVE AWAY THE GENERATED INSTRUCTION NOW. + CLR TEMP2 ;CLEAR THE DELTA Y ADD NOW. + TST RET1 ;NOW GET THE AMOUNT OF THE DELTA "Y". + BEQ MOVJX ;NO Y. JUST X MOVE. + INC TEMP2 ;SOME Y. SET TO UP. + MOV RET1,RET2 ;AND USE THE Y AS THE COUNTER NOW. + BPL MOVJX ;IF UP, ALL IS WELL, + NEG RET2 ;ELSE NEGATE COUNT AND THE + NEG TEMP2 ;AND THE DELTA Y ADD. + ;RET2=+COUNT TO DO, TEMP2=DELTA Y. +MOVJX: MOV MANX,IN1 ;PICK UP THE PRESENT POSITION NOW. +MOVLUP: JSR PC,PALSYI ;MOVE OVER THE X. + MOV IN1,MANX ;AND PLACE IN MEMORY. + ADD TEMP2,MANY ;UPDATE THE Y ALSO. + JSR PC,PALSYW ;WAIT FOR 8 CLOCK TICKS TO GO BY. + DEC RET2 ;ELSE DECREMENT THE COUNTER. + BGT MOVLUP ;AND LOOP TILL DONE. + RTS PC ;AND THEN RETURN. +PALSYI: .WORD 0 ;EITHER AN INC OR DEC 'IN1' + RTS PC ;AND THEN RETURN WITH IN1 UPDATED. +PALSYW: BIT #7,TIME ;WAIT FOR NONE MULTIPLE OF 8. + BEQ PALSYW + JSR PC,DIAL ;AND DISPLAY THE USER'S INFORMATION NOW. +PALSYV: BIT #7,TIME ;AND THEN WAIT FOR 8 MORE + BNE PALSYV + JSR PC,DIAL ;WHILE DOING THIS, DISPLAY THE USER'S INFO. + RTS PC ;AND THEN RETURN. + .PAGE +; +; THESE ROUTINE WILL INSERT OR CHANGE A LUNAR +; FEATURE OR WILL RETRIEVE IT'S VALUE. +; +PUTFET: MOV TEMP,-(SP) ;SAVE TEMPORARY NOW. + MOV 4(SP),TEMP ;PICK UP AN INDEX NOW. + ASR TEMP ;MAKE IT A BYTE INDEX. + BCC FETRGT ;IF EVEN, IT'S THE RIGHT BYTE. + ASL 6(SP) ;LEFT BYTE. SHIFT OVER THE VALUE. + ASL 6(SP) + ASL 6(SP) + ASL 6(SP) + BICB #360,FEATUR(TEMP) ;CLEAR OUT THE BYTE NOW. + BR PUTCOM ;INSERT IT NOW. +FETRGT: BICB #17,FEATUR(TEMP) ;CLEAR OUT THE RIGHT BYTE NOW. +PUTCOM: BISB 6(SP),FEATUR(TEMP) ;INSERT THE BYTE NOW. + MOV (SP)+,TEMP ;RESTORE THE REGISTER NOW. + MOV (SP),4(SP) + ADD #4,SP ;UPDATE THE STACK AFTER MOVING OVER THE PC. + RTS PC ;RETURN NOW. +GETFET: MOV TEMP,-(SP) ;SAVE A SCRATCH REGISTER NOW. + MOV 4(SP),TEMP ;PICK UP THE INDEX NOW. + ASR TEMP ;BYTE ADDRESS IT. + MOVB FEATUR(TEMP),TEMP ;PICK UP THE FEATUR NOW. + BCC GETDUN ;IF RIGHT BYTE, NO SHIFTING IS NECESSARY. + ASR TEMP ;ELSE SHIFT IT OVER. + ASR TEMP + ASR TEMP + ASR TEMP +GETDUN: BIC #177360,TEMP ;JUST RETURN 4 BITS NOW. + MOV TEMP,4(SP) + MOV (SP)+,TEMP ;MOVE OVER ANSWER AND RESTORE SCRATCH + RTS PC ;REGISTER AND EXIT. + .PAGE +; +; THIS ROUTINE WILL "DRAW" THE MOON FROM THE TABLE OF Y VALUES. +; +DRAWM1: JSR PC,DRAWMC ;SET UP COMMON CRAP. + MOV TERAIN,TEMP ;PICK UP FIRST Y POS. + ASR TEMP ;DIVIDE BY 32 + ASR TEMP + ASR TEMP + ASR TEMP + ASR TEMP + ADD #23.,TEMP + MOV TEMP,(TEMP2)+ + MOV TEMP,LASTY ;SAVE Y FOR TOP OF SCREEN CHECK. + MOV #SETSVM,(TEMP2)+ ;AFTER STORING Y POS, SET GRAPH PLOT MODE. + MOV #TERAIN,IN1 ;POINTER TO THE TERAIN. +DRAW1L: ADD #8.,IN1 ;POSITION TO THE NEXT Y. + MOV (IN1),TEMP + ASR TEMP + ASR TEMP + ASR TEMP + ASR TEMP + ASR TEMP + ADD #23.,TEMP ;SCALE IT AROUND NOW. + JSR PC,DRAWIC ;INSERT ONE Y CO-ORD + BR DRAW1L ;AND LOOP TILL DONE. + MOV #DISTOP,(TEMP2)+ ;AND FINALLY TERMINATE THE LIST + CLR (TEMP2) + MOV #MOONST,MOONGO ;START DISPLAYING THE MOON NOW. + JSR PC,DRAWRS ;RESTORE REGISTERS + RTS PC ;AND EXIT NOW. + .PAGE +; +; THIS ROUTINE WILL ITIALIZE CERTAIN +; REGISTERS, SAVE REGISTERS AND DO OTHER CRAP NECESSARY +; FOR THE MOON DRAWING ROUTINES TO WORK. +; +DRAWMC: MOV RET1,-(SP) + MOV RET2,-(SP) + MOV IN1,-(SP) + MOV IN2,-(SP) + MOV TEMP,-(SP) + MOV #225.,DRAWCT ;NUMBER OF VECTORS TO DRAW. + CLR MOONGO ;TURN OFF DRAWING OF MOON. + CLR MACON ;SET FLAG TO "NO MACDONALD'S ON SCREEN". + MOV #MOONST,TEMP2 ;SET UP THE POINTER NOW. + MOV #114124,(TEMP2)+ ;PLOT POINT MODE. + MOV #170240,(TEMP2)+ ;SET STATUS MODE. + CLR (TEMP2)+ ;SET X POSITION TO ZERO NOW. + JMP @10.(SP) ;AND RETURN NOW. +DRAWRS: MOV (SP),12.(SP) ;MOVE OVER RETURN ADDRESS. + MOV (SP)+,TEMP ;THROW AWAY TOP ITEM. + MOV (SP)+,TEMP ;AND RESTORE THE REGISTERS. + MOV (SP)+,IN2 + MOV (SP)+,IN1 + MOV (SP)+,RET2 + MOV (SP)+,RET1 + RTS PC ;AND RETURN NOW. + .PAGE +; +; THIS ROUTINE WILL INSERT ONE "Y" POINT INTO THE +; MOON LIST. IT WILL RANDOMIZE THE LINE TYPE AND INTENSITY +; +DRAWIC: MOV #1000,-(SP) ;MAKE THE VECTOR INVISIBLE FOR NOW. + CMP TEMP,#1024. ;SEE IF IT'S TOO BIG. + BLO DRAWI1 ;NOT TOO BIG. + MOV #1023.,TEMP ;TOO BIG, SET TO TOP, AND TURN OFF + CMP TEMP,LASTY ;IS IT STILL ON TOP? + BEQ DRAWI3 ;YES. DON'T DRAW THE MOUNTAIN. +DRAWI1: TST TEMP ;SEE IF VALUE IS LESS THAN ZERO. + BPL DRAWI2 ;YES. + CLR TEMP ;NO IT ISN'T. + TST LASTY ;WAS LAST RESULT 0? + BEQ DRAWI3 ;YES. DO NOT PUT ON VISIBLE BIT. +DRAWI2: BIS #40000,(SP) ;TURN ON VISIBLE BIT. +DRAWI3: DEC DRAWTY ;SEE WHAT TYPE OF INTENSITY + BPL DRWIN ;AND LINE TYPE IS REQUIRED, IF ANY. + INC DRAWTZ ;COUNTER OVERFLOWED. CHANGE TYPE. + BIC #-4,DRAWTZ + INC DRAWTZ + MOV DRAWTZ,DRAWTY ;RESET BIGGY AND LITTLY. + ADD #1200,DINT ;RANDOMIZE INTENSITY AND TYPE. + BIC #176177,DINT + INC DTYPE + BIC #-4,DTYPE + MOV DINT,(TEMP2) ;CREATE NEW PLOT POINT INSTRUCTION. + BIS DTYPE,(TEMP2) + BIS #106004,(TEMP2)+ ;GRAPH Y WITH BLANK INTENSITY'S AND TYPES. +DRWIN: SUB LASTY,TEMP ;GET THE DELTA Y. + BPL DRWINP ;FIX UP DIRECTION OF VECTOR. + NEG TEMP + BIC #-100,TEMP ;REMOVE CRAP NOW. + SUB TEMP,LASTY ;UPDATE PREVIOUS Y NOW. + BIS #100,TEMP + BR DRWINQ +DRWINP: BIC #-100,TEMP ;CLEAN IT UP. + ADD TEMP,LASTY ;AND UPGRADE PREVIOUS Y NOW. +DRWINQ: BIS (SP)+,TEMP ;MAKE IT A GOOD INSTRUCTION NOW. + MOV TEMP,(TEMP2)+ ;AND SAVE IT AWAY NOW. + DEC DRAWCT ;DECREMENT MASTER COUNTER. + BGT DRAWRR ;NORMAL RETURN. + ADD #2,(SP) ;END RETURN. +DRAWRR: RTS PC ;AND EXIT NOW. + .PAGE +; +; ALTER WILL ALTER THE FACE OF THE MOON. IN1 +; CONTAINS A NUMBER TO BE USED IN ALTERING IT. +; +ALTER: MOV BIGXCT,IN2 ;PICK UP PRESENT INDEX. + MOV IN2,TEMP ;WORK BOTH FORWARD AND BACKWARD. + ASL IN2 + ADD #TERAIN,IN2 + MOV #3,-(SP) ;INDICATE A CRASHED SHIP. + MOV (IN2)+,TEMP2 ;PICK UP Y. + MOV IN2,RET2 + SUB (IN2),TEMP2 ;FIGURE OUT WHICH WAY TO TILT SHIP. + BMI ALERTP ;LEAVE TILTED TO LEFT. + INC (SP) +ALERTP: MOV TEMP,-(SP) ;PUSH THE INDEX ONTO THE STACK. + JSR PC,PUTFET ;AND PUT AWAY THE FEATURE. +ALERTL: SUB IN1,(IN2)+ ;NOW ALTER BOTH WAYS. + SUB IN1,-(RET2) + ASR IN1 ;DIVIDE BY TWO. + NEG IN1 ;AND NEGATE IT. + BNE ALERTL ;AND LOOP TILL DONE. + RTS PC ;ELSE RETURN NOW. + .PAGE +; +; THIS SECTION WILL CAUSE THE SKIP TO +; EXPLODE ON THE SCREEN BY SHOOTING OUT A SERIES OF +; "DOTS" FOR A GIVEN PERIOD OF TIME. +; +EXPLOD: CLR RADIUS ;SET THE RADIUS TO ZERO. + CLR FSUBC ;TURN OFF THE ROCKET NOW. + CLR DUSTON ;TURN OFF THE DUST, IF ANY. + BIS #0,DSR ;"RING THE BELL". +EXPLD1: MOV #EXLIST,TEMP2 ;GET POINTER TO WHERE TO SHOW EXPLOSION. + MOV XTYPE,TEMP ;PICK UP RANDOMIZING WORD NOW. + INC TEMP ;AND JUST PLAY WITH YOURSELF FOR A WHILE. + SWAB TEMP + ROR TEMP + ADD (TEMP2),TEMP ;ADD IN OLD COMMAND. + BIC #176177,TEMP ;CLEAR OUT CRAP NOW. + BIS #116120,TEMP ;MAKE IT A GOOD COMMAND NOW. + MOV TEMP,(TEMP2)+ ;AND INSERT IT INTO THE BUFFER. + JSR PC,EXGEN ;GENERATE SOME SMOKE NOW. + BIS #0,DSR ;GIVE A GOOD BEEP NOW. + SUB #10.,RADIUS ;NOW PRODUCE SOME MORE DOTS. + JSR PC,EXGEN + MOV #DISTOP,(TEMP2)+ ;TERMINATE THE PICTURE NOW. + CLR (TEMP2) + MOV #EXLIST,FSUBC ;MAKE SURE WE'RE SHOWING IT. + BIS #0,DSR ;GIVE A RANDOM BEEP, AT TIMES. + ADD #33.,RADIUS ;FINALLY INCREMENT RADIUS AND CHECK + CMP RADIUS,#300 ;DONE? + BLE EXPLD1 ;NOPE. + JSR PC,DELAY ;DELAY NOW BEFORE RESTARTING. + .WORD 5. ;FIVE SECONDS. +EXGEN: MOV #-30.,ANGLE ;INITIALIZE THE ANGLE NOW. + MOV #241.,-(SP) ;AND SET COUNTER TO DO -30 TO 210 DEGREES. +EXGENL: JSR PC,TRIG ;FIGURE OUT VARIOUS ANGLES NOW. + MOV -6(SP),IN1 ;PICK UP RANDOM INTERUPT NUMBER NOW. + ASR IN1 ;JUST IN CASE IT WAS EVEN. + INC IN1 ;INCREMENT IT NOW. + ADD TIME,IN1 ;ADD IN THE TIME ALSO. + ADD XTYPE,IN1 ;AND ALSO THE PREVIOUS NUMBER. + MOV IN1,XTYPE ;AND SAVE IT AWAY NOW. + BIC #-40,IN1 ;MAKE IT BETWEEN 0 AND 31 + MOVB YUPDWN(IN1),TEMP ;SO THAT WE CAN USE THE FLAME TABLE. + ADD RADIUS,TEMP ;GET A NEW RADIUS NOW. + BMI EXGENP ;IF MINUS, FORGET ABOUT IT. + MOV TEMP,IN1 ;ELSE GET THE SINES AND COSINES. + MOV COSANG,IN2 ;SO WE CAN GET THE X AND THE + JSR PC,TRGMUL ;Y POINTS FOR THE EXPLOSION. + ADD SHOWX,RET1 ;WE'VE GOT OUR X NOW. + BMI EXGENP ;MINUS IS A BADDY. + BIS #INT,RET1 ;DON'T FORGET TO TURN ON INTENSIFY BIT. + MOV RET1,(TEMP2)+ ;AND PLACE IT AWAY NOW. + MOV TEMP,IN1 ;NOW GET THE Y. + MOV SINANG,IN2 + JSR PC,TRGMUL + ADD SHOWY,RET1 + BMI EXGENO ;IF THIS IS BAD, WE MUST BACK UP. + MOV RET1,(TEMP2)+ +EXGEND: INC ANGLE ;NOW GET THE NEXT ANGLE. + DEC (SP) ;AND WAIT TILL DONE. + BGT EXGENL ;AND LOOP TILL DONE. + TST (SP)+ ;AND THEN EXIT. + RTS PC ;THIS INSTRUCTION HELPS IF ONE LEAVES IT IN. +EXGENO: CLR -(TEMP2) ;IF X IS ALREADY THERE, TAKE IT BACK. +EXGENP: CLR (TEMP2)+ ;INSERT DUMMY'S SO DISPLAY WON'T SCREW UP. + CLR (TEMP2)+ + BR EXGEND ;AND SEE IF ALL DONE. + .PAGE +; +; NOTE, ANY ADDITIONAL CRAP YOU WISH TO PUT +; IN MAY GO HERE. +; +DRAWM2: JSR PC,DRAWMC ;THIS ROUTINE WILL THE CLOSE-UP + CLR DFUDGE ;VIEW OF THE MOON. + MOV LEFTEDGE,IN1 ;PICK UP LEFT SIDE OF THE SCREEN. + ASL IN1 + ADD #TERAIN,IN1 ;GET POINTER TO LEFT Y. + MOV (IN1),TEMP ;GET LEFT Y. + JSR PC,DFAKE ;MAKE INTO GOOD RASTOR. + TST TEMP ;SEE IF ON THE SCREEN NOW. + BPL DRW2L5 ;IF POSITIVE OK, + CLR TEMP ;ELSE ZERO IT OUT. + BR DRW2M +DRW2L5: CMP TEMP,#1024. ;SEE IF TOO BIG. + BLO DRW2M ;NOPE. OK + MOV #1023.,TEMP ;ELSE FIX IT UP. +DRW2M: MOV TEMP,(TEMP2)+ ;INSERT STARTING Y INTO BUFFER. + MOV TEMP,LASTY ;ESTABLISH LAST Y POSITION NOW. + MOV #SETSVM,(TEMP2)+ ;INSERT THE GRAPH PLOT MODE COMMAND . +DRW2L: MOV TEMP,-(SP) ;NOW GET Y(NEW) AND DELTA Y. + MOV (IN1)+,TEMP + JSR PC,DFAKE + MOV TEMP,IN2 + MOV (SP)+,TEMP + CLR RET1 ;CLEAR AWAY LEFT MOST PART FOR THE DIVIDE. + MOV IN1,-(SP) ;SAVE IN1 NOW. + MOV #12.,IN1 ;PICK UP A TWELVE FOR THE DIVIDE. + SUB TEMP,IN2 ;GET DELTA Y NOW. + BPL DRAW2G + SUB #6.,IN2 + NEG IN2 ;MAKE IN2 POSITIVE NOW. + MOV IN2,RET2 ;MOVE OVER TO DIVISOR PART. + JSR PC,DIVTWO ;DIVIDE BY TWO NOW. + NEG RET2 ;NEGATE THE ANSWER NOW. + BR DRAW2H +DRAW2G: ADD #6.,IN2 + MOV IN2,RET2 ;MOVE IT OVER NOW. + JSR PC,DIVTWO ;DO THE DIVISION NOW. +DRAW2H: MOV RET2,IN2 ;MOVE OVER THE DELTA NOW. + MOV IN1,RET1 ;ESTABLISH THE COUNT NOW. + MOV (SP)+,IN1 ;RESTORE THE REGISTER NOW. +DRAW22: INC @#DFUDGE ;---<>--- + CMP DFUDGE,#3. + BLT DRAW2V + MOV (PC)+,@(PC)+ + DEC @(PC)+ + .WORD DRAW22 + BR DRAW2W +DRAW2V: CMP DFUDGE,#-3. + BGT DRAW2W + MOV (PC)+,@(PC)+ + INC @(PC)+ + .WORD DRAW22 +DRAW2W: ADD DFUDGE,TEMP ;PERTIBATE SURFACE NOW. + ADD IN2,TEMP ;UPDATE TEMP NOW. + MOV TEMP,-(SP) ;SAVE Y FOR A SECOND. + JSR PC,DRAWIC ;INSERT + BR DRAW2C ;STILL GOING. + BR DRAW2X ;GONE. +DRAW2C: MOV (SP)+,TEMP ;RECALL THE Y NOW. + DEC RET1 ;SEE IF DONE WITH THE EIGHT. + BGT DRAW22 ;NO. + BR DRW2L ;YES. +DRAW2X: MOV LEFTEDGE,RET1 ;PICK UP LEFTEDGE AGAIN. + MOV #19.,(SP) ;PREPARE TO EXAMINE THE TERAIN NOW. + MOV #24.,IN1 + MOV RET1,RET2 ;SET UP TWO POINTERS NOW. + ASL RET2 + ADD #TERAIN,RET2 +DRAW2Y: MOV RET1,-(SP) ;PUSH FEATURE INDEX ONTO THE STACK. + INC RET1 ;INCREMENT INDEX POINTER TO NEXT FEATURE. + JSR PC,GETFET ;GET THE FEATURE NOW. + MOV (SP)+,TEMP ;AND PUT IT IN A USEFUL REGISTER. + ASL TEMP ;MAKE IT INTO A GOOD INDEX. + JSR PC,@DRAWTB(TEMP) + TST (RET2)+ ;BYPASS + ADD #48.,IN1 + DEC (SP) + BGT DRAW2Y ;KEEP LOOKING NOW. + TST (SP)+ ;ELSE UPDATE. + MOV #DISTOP,(TEMP2)+ ;TERMINATE THE DISPLAY NOW. + CLR (TEMP2) + JSR PC,DRAWRS ;RESTORE THE REGISTERS. + MOV #MOONST,MOONGO ;START DISPLAYING THE MOON NOW. + RTS PC ;AND RETURN NOW. + .PAGE +; +; JUMP TABLE FOR THE VARIOUS KINDS OF +; CRAP ONE IS LIKELY TO FIND ON THE MOON. +; +AHTAB: .WORD AHNONE ;HOW TO PROCESS THIS CRAP. + .WORD AHSP1 + .WORD AHFLG + .WORD AHOLDS + .WORD AHOLDS + .WORD AHROCK + .WORD AHMAC + .WORD AHMAC +DRAWTB: .WORD DRAWRR ;0=NOTHING=RETURN. + .WORD OLDSHP ;1=OLD SPACE SHIP + .WORD FLAG ;2=PLANTED FLAG. + .WORD LEFTSP ;3=CRASHED SHIP ON LEFT SIDE. + .WORD RIGHTS ;4=CRASHED SHIP ON RIGHT SIDE. + .WORD ROCK ;5=A ROCK. + .WORD AHNONE ;6=LEFT OR RIGHT OF MAC'S. RETURN. + .WORD MACDON ;7=CENTER OF MAC'S. THIS COVERS 6. +DFAKE: MOV TEMP,-(SP) ;THIS ROUTINE FIGURES OUT + ASL TEMP ;Y*3/2/4 OR ((3*Y)/2)/4 + ADD (SP)+,TEMP + ASR TEMP + ASR TEMP ;ALMOST THERE. + ASR TEMP + ADD #23.,TEMP ;AND THEN IT CORRECTS THE BASE + RTS PC ;SCREEN Y. + .PAGE +; +; THESE ROUTINES WILL DRAW OLD AND CRASHED SHIPS +; ONE THE SURFACE OF THE MOON. +; +OLDSHP: JSR PC,DEADSP + .WORD 0 ;UPRIGHT + .WORD 23. ;DISTANCE ABOVE SURFACE. + .WORD -24. ;LOWEST POINT TO DRAW. +LEFTSP: JSR PC,DEADSP ;LEFT TILTED SHIP. + .WORD -90. + .WORD 16. + .WORD -18. +RIGHTS: JSR PC,DEADSP + .WORD 90. + .WORD 16. + .WORD -18. +DEADSP: CMP TEMP2,#MOONEN-102. ;SEE IF ENOUGH ROOM FOR THE SHIP. + BHI DEADBY ;NOPE. EXIT. + MOV IN2,-(SP) + MOV RET1,-(SP) + MOV RET2,-(SP) + MOV TEMP,-(SP) + MOV IN1,-(SP) + MOV 10.(SP),IN1 ;PICK UP OLD PC. + MOV #SETPNT,(TEMP2)+ ;SET POINT MODE. + MOV (SP),(TEMP2)+ ;MOV OVER THE X NOW. + MOV ANGLE,-(SP) ;PUSH DOWN THE OLD ANGLE. + MOV (RET2),TEMP ;PICK UP A Y. + JSR PC,DFAKE + MOV TEMP,-(SP) + MOV 2(RET2),TEMP ;NEXT Y. + JSR PC,DFAKE + ADD (SP)+,TEMP + ASR TEMP ;AVERAGE OF THE Y'S, WHICH IS CENTER. + MOV (IN1)+,ANGLE ;MOVE OVER THE CALLER'S ANGLE NOW. + ADD (IN1)+,TEMP ;AND CENTER THE SHIP. + MOV (IN1),LOWY ;AND SET THE LOW Y ALL AT THE SAME TIME. + MOV TEMP,(TEMP2)+ ;INSERT THE Y NOW. + CMP (RET2),2(RET2) ;SEE WHICH Y IS BIGGER. + BEQ DEADOK + BHI DEADPL + ADD #-22.,ANGLE + BR DEADOK +DEADPL: ADD #22.,ANGLE +DEADOK: JSR PC,TRIG ;FIGURE OUT SINES AND COSINES. + MOV TEMP2,IN2 + MOV #DESIGN,IN1 ;SET UP DRAW CALL. + JSR PC,DRAW ;DRAW THE SHIP NOW. + CLR -(TEMP2) ;REMOVE THE DISPLAY STOP INSTRUCTION. + CLR -(TEMP2) + MOV (SP)+,ANGLE ;RESTORE THE ANGLE. + JSR PC,TRIG ;AND THE VALUES. + MOV (SP)+,IN1 ;POP THE VALUES NOW. + MOV (SP)+,TEMP + MOV (SP)+,RET2 + MOV (SP)+,RET1 + MOV (SP)+,IN2 + TST (SP)+ ;IGNORE ORIGINAL CALL. +DEADBY: RTS PC ;AND RETURN NOW. + .PAGE +; +; THIS ROUTINE WILL PLANT AN AMERICAN FLAG ON THE MOON. +; +FLAG: CMP TEMP2,#MOONEN-FLAGEN+FLAGL-6 ;SEE IF FLAG CAN FIT. + BHI ROCKRT ;NOPE. NO ROOM. DO NOT INSERT IT + MOV IN1,FLAGX + MOV (RET2),TEMP + JSR PC,DFAKE ;GET THE Y'S + MOV TEMP,IN2 + MOV 2(RET2),TEMP + JSR PC,DFAKE + ADD IN2,TEMP + ASR TEMP + MOV TEMP,FLAGY + MOV #FLAGL,IN2 ;NOW FAKE OUT A ROUTINE. + BR ROCKLP ;AND NOW ENTER ROCK PUTTER. + .PAGE +; +; THIS ROUTINE WILL DRAW A ROCK ON THE MOON. +; +ROCK: CMP TEMP2,#MOONEN-ROCKEN+ROCKL-6 ;SEE IF THE ROCK CAN FIT. + BHI ROCKRT ;CAN'T FIT NOW. + MOV IN1,ROCKX ;SAVE THE ROCK'S X AND Y POINT. + MOV (RET2),TEMP ;AFTER FUDGING Y. + JSR PC,DFAKE + MOV TEMP,IN2 + MOV 2(RET2),TEMP + JSR PC,DFAKE + ADD IN2,TEMP + ASR TEMP + MOV TEMP,ROCKY ;SAVE IT AWAY NOW. + MOV #ROCKL,IN2 ;PICK UP POINTER TO PROTOTYPE ROCK. +ROCKLP: MOV (IN2)+,TEMP + CMP TEMP,#DISTOP ;DONE? + BEQ ROCKRT ;YES. + MOV TEMP,(TEMP2)+ ;NO. PUT AWAY NOW. + BR ROCKLP +ROCKRT: RTS PC ;RETURN NOW. +MACDON: TST MACTHR ;IS MACDONALD'S STILL IN EXISTANCE. + BEQ MACEX ;NO. EXIT. + CMP IN1,#25. ;IT IS. ARE WE CENTERED ENOUGH + BLE MACEX ;TO DRAW IT. NO. TO FAR LEFT. + CMP IN1,#880. + BGE MACEX ;NO. TO FAR TO THE RIGHT. + MOV 2(RET2),TEMP ;PICK UP RIGHT Y NOW. + CMP (RET2),TEMP ;AND SEE IF IT'S SMALLER THAN LEFT Y. + BGE MACB1 ;IT IS. + MOV (RET2),TEMP ;IT ISN'T. PICK SMALLEST Y NOW. +MACB1: JSR PC,DFAKE ;GET SCREEN COORDINATES NOW. + MOV TEMP,MACY ;SAVE AWAY THE Y + MOV IN1,MACX ;AND THE X ALSO. + MOV SP,MACON ;AND SET THE MAC IS DRAWN FLAG. + MOV #DISTOP,(TEMP2)+ ;AND PLACE CALL TO IT IN THE BUFFER. + MOV #MACS,(TEMP2)+ +MACEX: RTS PC ;AND RETURN NOW. SIMPLE, ISN'T IT. + .PAGE +; +; THESE ARE SOME MISC MULTIPLY ROUTINES (AND DIVIDE) WHICH +; ARE NECESSARY FOR THE SMOOTH OPERATION OF THE SYSTEM. +; +MULTWO: CLR RET2 ;CLEAR LOW ORDER RETURN VALUE. + CMP IN2,IN1 ;SEE WHICH ONE IS SMALLER. + BHIS MULT1L ;IN1 IS SMALLER (AS EXPECTED). + MOV IN2,RET1 ;PLACE IN2 IN RET1, AND + BEQ MULTDN ;IF ZERO, EXIT. ELSE THEN PLACE + MOV IN1,IN2 ;IN1 IN IN2. . + CLC ;CLEAR THE CARRY BEFORE WE BLOW IT! + BR MULTCM ;AND START MULTIPLY GOING. +MULT1L: MOV IN1,RET1 ;MOVE OVER IN1, BECAUSE IT IS SMALLEST. + BEQ MULTDN ;IF IT'S ZERO, THEN WE ARE DONE. +MULTCM: ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD16 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD15 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD14 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD13 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD12 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD11 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD10 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD9 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD8 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD7 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD6 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD5 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD4 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD3 ;AND START MULTIPLY WHEN SET. + ROL RET1 ;ROTATE MULTIPLIER ONE PLACE. + BCS ADD2 ;AND START MULTIPLY WHEN SET. + CLR RET1 ;RET1 MUST BE 100000, BECAUSE + MOV IN2,RET2 ;IF WE GOT HERE, THEN IT MUST +MULTDN: RTS PC ;BE A MULTIPLY BY 1. +ADD16: MOV IN2,RET2 ;IF A BIGGY, JUST MOVE OVER CRAP. + ASL RET2 ;OK, NOW LET'S SHIFT AND START GOING. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD15 ;NO. BYPASS THE ADD NOW. +ADD15: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD15: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD14 ;NO. BYPASS THE ADD NOW. +ADD14: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD14: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD13 ;NO. BYPASS THE ADD NOW. +ADD13: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD13: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD12 ;NO. BYPASS THE ADD NOW. +ADD12: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD12: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD11 ;NO. BYPASS THE ADD NOW. +ADD11: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD11: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD10 ;NO. BYPASS THE ADD NOW. +ADD10: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD10: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD9 ;NO. BYPASS THE ADD NOW. +ADD9: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD9: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD8 ;NO. BYPASS THE ADD NOW. +ADD8: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD8: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD7 ;NO. BYPASS THE ADD NOW. +ADD7: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD7: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD6 ;NO. BYPASS THE ADD NOW. +ADD6: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD6: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD5 ;NO. BYPASS THE ADD NOW. +ADD5: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD5: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD4 ;NO. BYPASS THE ADD NOW. +ADD4: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD4: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD3 ;NO. BYPASS THE ADD NOW. +ADD3: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD3: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD2 ;NO. BYPASS THE ADD NOW. +ADD2: ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD2: ASL RET2 ;ALL DONE WITH PREV. OPER. + ROL RET1 ;DO NEXT BIT NOW. OK TO MULT? + BCC NADD1 ;NO. BYPASS THE ADD NOW. + ADD IN2,RET2 ;BIT ON. ADD IN MULTIPLICAND. + ADC RET1 ;DON'T FORGET ABOUT ADDING IN CARRY. +NADD1: RTS PC ;AND RETURN WHEN DONE. + .PAGE +; +; THIS ROUTINE WILL MULTIPLY TWO SIGNED NUMBERS. +; +SGNMUL: TST IN1 ;GET SIGN OF THE FIRST ARGUMENT. + BPL SGNMP1 ;IT'S OK. + NEG IN1 ;NOT OK. + TST IN2 ;HOW ABOUT SECOND. + BPL SGNMP2 ;IT'S POSITIVE. + NEG IN2 ;BOTH NEGATIVE=POSITIVE. +SGNMP3: JSR PC,MULTWO ;MULTIPLY THEM OUT. + RTS PC ;AND RETURN NOW. +SGNMP1: TST IN2 ;TEST SIGN OF THE SECOND ONE. + BPL SGNMP3 ;IT'S ALSO POSITIVE. DO MULTIPLY. + NEG IN2 ;ELSE NEGATE IT, ANDINVERT ANSWER. +SGNMP2: JSR PC,MULTWO ;MULTIPLY THEM OUT. + NEG RET2 ;AND DO A DOUBLE PRECISION NEGATE. + ADC RET1 + NEG RET1 + RTS PC ;AND THEN RETURN. ALL IS WELL. +TRGMUL: JSR PC,SGNMUL + ASL RET2 ;FUDGE THE RETURN ANSWER NOW. + ROL RET1 + ASL RET2 + ROL RET1 + RTS PC + .PAGE +; +; THIS ROUTINE WILL DIVIDE RET1-RET2 BY IN1 AND LEAVE THE +; ANSWER IN RET2. DOES IT BY 16 SUBTRACTIONS. CRUDE BUT FAST. +; +DIVTWO: ASL RET2 ;WE FORBID LEFT-MOST BIT TO BE ON. + ROL RET1 + SUB IN1,RET1 ;SEE IF IT FITS. + BPL DVOKA ;IT FITS. GENERATE A "1". +DVBADA: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKB ;IT FITS. GENERATE A "1". +DVBADB: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKC ;IT FITS. GENERATE A "1". +DVBADC: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKD ;IT FITS. GENERATE A "1". +DVBADD: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKE ;IT FITS. GENERATE A "1". +DVBADE: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKF ;IT FITS. GENERATE A "1". +DVBADF: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKG ;IT FITS. GENERATE A "1". +DVBADG: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKH ;IT FITS. GENERATE A "1". +DVBADH: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKI ;IT FITS. GENERATE A "1". +DVBADI: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKJ ;IT FITS. GENERATE A "1". +DVBADJ: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKK ;IT FITS. GENERATE A "1". +DVBADK: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKL ;IT FITS. GENERATE A "1". +DVBADL: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKM ;IT FITS. GENERATE A "1". +DVBADM: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKN ;IT FITS. GENERATE A "1". +DVBADN: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKO ;IT FITS. GENERATE A "1". +DVBADO: ASL RET2 ;NOT YET. PUT IN A ZERO. + ROL RET1 ;AND PICK UP THE NEXT BIT. + ADD IN1,RET1 ;2*(Y-X)+X=2*Y-X. + BPL DVOKP ;IT FITS. GENERATE A "1". +DVBADP: ADD IN1,RET1 ;ON LAST FAIL, ADD BACK IN TO GET A + RTS PC ;CORRECT REMAINDER, AND THEN EXIT. +DVOKA: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADB ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKB: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADC ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKC: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADD ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKD: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADE ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKE: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADF ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKF: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADG ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKG: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADH ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKH: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADI ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKI: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADJ ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKJ: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADK ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKK: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADL ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKL: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADM ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKM: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADN ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKN: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADO ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKO: INC RET2 ;SUBTRACTION IS GOOD. INSERT A "1". + ASL RET2 ;NOW CHECK THE NEXT ONE. + ROL RET1 ;TO SEE IF IT GOES. + SUB IN1,RET1 + BMI DVBADP ;GOES NOT GO. INSERT A ZERO AND START ADDING. +DVOKP: INC RET2 ;LAST SUBTRACTION SUCCESSFULL. +DVOKX: RTS PC ;INSERT A "1" AND RETURN. ALL IS WELL. + .PAGE +; +; THIS IS THE CLOCK INTERUPT ROUTINE. +; +TIMER: BIS #100,LKS ;JUST MAKE SURE CLOCK IS STILL GOING. + INC TICKS ;UPDATE CLOCKS. + INC TIME ;INCREMENT BOTH CLOCKS. + BIT #17,TIME ;SEE IF IT'S TIME TO CLEAR ARROWS. + BNE TIMERT ;NOPE. EXIT. + CLR DLIST1 ;YES. CLEAR THEM. + CLR DLIST2 +TIMERT: RTI ;AND RETURN NOW. + .PAGE +; +; THIS IS THE DELAY ROUTINE. +; IT WILL WAIT "N" SECONDS BEFORE RESTARTING THE SYSTEM. +; +DELAY: MOV #DISTOP,LPSW ;IF DELAYED CALLED, TURN OFF LOW FUEL MESSAGE. + MOV @0(SP),IN1 ;PICK UP THE TIME. + MOV TIME,IN2 ;GET CURRENT TIME. + MOV IN1,RET1 ;MOVE OVER TIME REQUESTED. + BPL DELAY1 ;IF POSITIVE, IT'S ALRIGHT. + NEG IN1 ;ELSE NEGATE IT NOW. +DELAY1: ADD #CLKFRQ,IN2 ;CALCULATE FUTURE TIME + DEC IN1 ;WAIT TILL MULTIPLICATION IS DONE. + BGT DELAY1 +DELAY2: WAIT ;WAIT FOR AN INTERUPT TO OCCUR. + JSR PC,DIAL ;WHILE WAITING, DISPLAY THE USER'S DATA. + CMP IN2,TIME ;CHECK THE TIMES NOW. + BHI DELAY2 + ADD #2,(SP) ;UPDATE THE RETURN PC NOW. + TST RET1 ;TEST SIGN OF THE WAIT. + BMI DVOKX ;IF NEGATIVE, THEN RETURN. + JMP RESTART ;ELSE RESTART THE SYSTEM. + .PAGE +; +; THIS IS THE START OF THE DISPLAY SECTION. PLEASE BE MERICFUL. +; +DISPLY: MOV IN1,-(SP) ;COMES HERE ON AN INTERUPT. + MOV IN2,-(SP) + MOV DSTACK,IN1 ;PICK UP OLD STACK. + MOV @DPC,IN2 ;FIND OUT WHY WE STOPPED. + BEQ DSUBRT ;DISPLAY SUBROUTINE RETURN. + MOV DPC,-(IN1) ;SUBROUTINE CALL. PUSH RETURN DPC ON STACK. + ADD #2,(IN1) ;AND FUDGE PAST POINTER. + MOV #GOTSUB,-(IN1) ;AND PUSH RETURN ADDRESS ONTO STACK. +DISRT: CMP (IN2),#DISTOP ;SEE IF WHERE HE WANTS TO START IS + BNE DISRST ;ANOTHER SUBROUTINE CALL. + TST 2(IN2) ;IF IT IS, THEN FIGURE OUT WHETHER + BEQ DSUBRT ;TO RETURN OR GO DOWN ONE LEVEL. + MOV IN2,-(IN1) ;PUSH NEXT DPC ONTO STACK. + ADD #4,(IN1) ;AND FUDGE IT UP A BIT. + MOV #GOTSUB,-(IN1) ;PUT ADDRESS ONTO STACK. + MOV 2(IN2),IN2 ;UPDATE NEW PC NOW. + BR DISRT ;AND LOOP AGAIN. +DISRST: MOV IN1,DSTACK ;SAVE THE STACK NOW. + MOV IN2,DPC ;START THE DISPLAY GOING NOW. + MOV (SP)+,IN2 ;RESTORE SAVED REGISTERS. + MOV (SP)+,IN1 + RTI ;AND RETURN NOW. +DSUBRT: MOV (IN1)+,PC ;GO TO SUBROUTINE NOW. +GOTSUB: MOV (IN1)+,IN2 ;PICK UP OLD DPC + BR DISRT ;AND RESTART AND CONTINUE. +DTOP: INC DNUM ;THIS ROUTINE GOES DOWN THE MASTER LIST. +DTOP2: MOV DNUM,IN2 + ASL IN2 ;MAKE INTO A GOOD INDEX. + MOV DLIST(IN2),IN2 + BNE DTOPOK ;IT'S OK TO START NOW. + CLR DNUM ;AT BOTTOM. LOOP. + BR DTOP2 +DTOPOK: MOV #DTOP,STACKD + MOV #STACKD,IN1 + BR DISRT + .PAGE +; +; LIGHT PEN HIT ROUTINE. +; +LIGHT: MOV IN1,-(SP) + MOV IN2,-(SP) ;SAVE REGISTERS NOW. + MOV DNUM,IN2 ;PICK UP THE INDEXED NUMBER NOW. + CMP IN2,OLDHIT ;SEE IF INDEX IS SAME AS PREVIOUS. + BEQ LIGHTG ;YES. MAYBE WE CAN PROCESS IT. + MOV #15.,HITCNT ;NOT SAME. SET UP HIT COUNTER + MOV IN2,OLDHIT ;AND THE OLD REGISTER NOW. + BR LPRESM ;AND EXIT NOW. +LIGHTG: DEC HITCNT ;HAVE WE BEEN HIT ENOUGH? + BPL LPRESM ;NO. GET OUT NOW. + ASL IN2 ;ELSE SHIFT THE INDEX OVER + JMP @LPTAB(IN2) ;AND GO PROCESS INTERUPT. + .PAGE +; +; THIS ROUTINE IS CALLED WHENEVER THE LIGHT PEN HITS +; THE THROTTLE BAR. +; +LPBARH: MOV YSR,IN2 ;GET THE Y COORDINATE. + BIC #-2000,IN2 ;MAKE IT JUST 10 BITS. + ADD #BARADD,IN2 ;ADD FUDGE FACTOR NOW. + MOV LPBARY,IN1 ;PICK UP OLD Y NOW. + ASL IN1 ;AND MULTIPLY IT BY 8. + ASL IN1 + ASL IN1 + SUB LPBARY,IN1 ;WE REALLY ONLY WANTED 7. + ADD IN1,IN2 ;NOW MAKE IT 7*OLD+NEW Y. + ASR IN2 + ASR IN2 + ASR IN2 ;NOW AVERAGE IT OUT. + MOV IN2,LPBARY ;SAVE THE Y VALUE NOW. + SUB #BARFDG,IN2 ;SUBTRACT BASE Y NOW. + ASR IN2 ;DIVIDE BY TWO. + CMP IN2,#MINTRS ;COMPARE AGAINST MINIMUM THRUST. + BPL LPBARP ;GREATER OR EQUAL. IT'S OK. + MOV #MINTRS,IN2 ;ELSE SET TO THE MINIMUM THRUST. +LPBARP: CMP #100.,IN2 ;LIKEWISE IF GREATER THEN 100, MAKE + BGE LPBARQ ;IT ONLY 100. + MOV #100.,IN2 +LPBARQ: MOV IN2,PERCNT ;SAVE AWAY THE VALUE NOW. +LPRESM: BIS #1,DPC ;RESUME THE DISPLAY NOW. + MOV (SP)+,IN2 ;RESTORE THE REGISTERS NOW. + MOV (SP)+,IN1 ;AND THEN EXIT. + RTI +LPIT1: MOV DLIST(IN2),IN2 ;GET POINTER TO USER'S DISPAY ITEM. + MOV LPFLG1,IN1 ;AND PICK UP PREVIOUS ITEM NOW. + BEQ LPIT1P ;IF ZERO, NO PREVIOUS BLINKING. + BIC #10,2(IN1) ;ELSE CLEAR OUT THE BLINK BITS. +LPIT1P: MOV IN2,LPFLG1 ;SAVE IT AWAY FOR DISPLAY TRANSFER. + BIS #30,2(IN2) ;SET IT BLINKING NOW. + BR LPRESM ;AND RESUME THE DISPLAY NOW. +LPIT2: MOV LPFLG1,IN1 ;GET HIS POINTER. + BEQ LPRESM ;NONE SPECIFIED. + CLR LPFLG1 ;CLEAR POINTER NOW. + MOV IN1,DIALTB-LPBASE+DLIST(IN2) ;CHANGE OUR POINTER NOW. + BIC #10,2(IN1) ;AND CLEAR THE BLINK FLAG NOW. + BR LPRESM ;AND RESUME THE DISPLAY NOW. +ARROW: MOV DLIST(IN2),IN2 ;ON ARROW HIT, COME HERE. PICK UP ADDRESS. + MOV -2(IN2),TURN ;AND MOVE OVER RATE OF TURN. + MOV IN2,DLIST1 ;AND ALSO MAKE IT BRIGHTER. + MOV IN2,DLIST2 + BR LPRESM ;AND RESUME NOW. + .PAGE +; +; DISPLAY POINTERS. +; +LPBASE: +DLIST: .WORD DITEM1 + .WORD DITEM2 + .WORD DITEM3 + .WORD DITEM4 + .WORD ITEME1 + .WORD ITEME2 + .WORD ITEME3 + .WORD ITEME4 + .WORD ITEME5 + .WORD ITEME6 + .WORD ITEME7 + .WORD ITEME8 + .WORD ITEME9 + .WORD ITEMET + .WORD ITEMEE + .WORD ITEMES + .WORD DRWSHP + .WORD ONFIRE + .WORD INFO + .WORD DRWDST + .WORD DRWLUN + .WORD SLEFTA + .WORD SRGTA + .WORD BLEFTA + .WORD BRGTA + .WORD LPBAR +DLIST1: .WORD 0 ;EXTRA BRIGHTNESS WORD +DLIST2: .WORD 0 ;IF DISPLAYING THE ARROWS. + .WORD 0 + .PAGE +; +; ;LIGHT PEN VECTORS. +; +LPTAB: .WORD LPIT2,LPIT2,LPIT2,LPIT2 + .WORD LPIT1,LPIT1,LPIT1,LPIT1 + .WORD LPIT1,LPIT1,LPIT1,LPIT1 + .WORD LPIT1,LPIT1,LPIT1,LPIT1 + .WORD DSUBRT,DSUBRT,DSUBRT,DSUBRT,DSUBRT + .WORD ARROW,ARROW,ARROW,ARROW + .WORD LPBARH + .WORD ARROW,ARROW ;TERMINATING LIGHT PEN HITS. + .PAGE +; +; THIS ROUTINE WILL CALCULATE THE VALUES THAT THE +; USER WISHES TO HAVE DISPLAYED. +; +DIAL: MOV IN1,-(SP) ;SAVE ALL THE IMPORTANT REGISTERS NOW. + MOV IN2,-(SP) + MOV RET1,-(SP) + MOV RET2,-(SP) + MOV TEMP,-(SP) + MOV TEMP2,-(SP) + CLR TEMP ;NOW SET POINTER TO FIRST ITEM. +DIALL: MOV DIALTB(TEMP),TEMP2 ;PICK UP POINTER TO AN ITEM ENTRY. + BEQ DIALD1 ;IF ZERO, THEN END OF LIST. + MOV DIALTC(TEMP),IN2 ;PICK UP POINTER TO WHERE TO + MOV TEMP2,RET2 ;DISPLAY CALCULATED VALUES. + ADD #10.,RET2 ;CALCULATE "ITEMFX" ENTRY ADDRESS. + MOV RET2,18.(IN2) ;AND INSERT IT IN THE DISJMP OF + MOV @-4(TEMP2),RET2 ;THE DITEMX TABLE. PICK UP USERS NUMBER NOW. + MOV -2(TEMP2),IN1 ;PICK UP THE DIVISOR . + BEQ DIALND ;NONE. DO NOT DIVIDE. DISPLAY AS IS. + TST RET2 ;NOW MAKE ANSWER POSITIVE. + BPL DIALLP + NEG RET2 +DIALLP: CLR RET1 ;GET RID OF THE HIGH PART. + JSR PC,DIVTWO ;DO THE DIVISION NOW. + TST @-4(TEMP2) ;NOW RESTORE THE SIGN. + BPL DIALND + NEG RET2 +DIALND: MOV DIALTC(TEMP),TEMP2 ;PICK UP DITEMX POINTER AGAIN. + MOV RET2,IN1 ;MOVE OVER NUMBER NOW. + MOV #10.,IN2 ;NOW CREATE ADDRESS OF WHERE TO LEAVE ANSWER + ADD TEMP2,IN2 ;AFTER CONVERTING TO ASCII STRING. + JSR PC,SASCII ;DO THE CONVERSION NOW. + TST (TEMP)+ ;FINALLY INCREMENT POINTER TO NEXT ITEM. + BR DIALL ;AND GO BACK UP TO TOP AND GET NEXT VALUE. +DIALD1: CMP PERCNT,OLDPER ;CONVERT PERCENTAGE NOW. ANY CHANGE? + BEQ DIALRT ;NO. JUST EXIT. + MOV #LPBARC,IN2 ;YES. GET ADDRESS OF WHERE TO PLACE STRING. + MOV PERCNT,IN1 ;GET THE NUMBER NOW. + MOV IN1,OLDPER ;UPDATE OLD PERCENTAGE NOW. + JSR PC,SASCII ;AND CONVERT IT NOW. +DIALRT: MOV (SP)+,TEMP2 ;RESTORE ALL THE ACTIVE REGISTERS NOW. + MOV (SP)+,TEMP + MOV (SP)+,RET2 + MOV (SP)+,RET1 + MOV (SP)+,IN2 + MOV (SP)+,IN1 + RTS PC ;AND RETURN NOW. + .PAGE +; +; THIS ROUTINE CONVERT THE BINARY NUMBER (UNSIGNED) +; IN THE REGISTER "IN1" INTO AN ASCII STRING SIX +; CHARACTERS LONG AND LEAVES THE ANSWER TO WHERE "IN2" +; POINTS TO. THE ANSWER IS PUT RIGHT JUSTIFIED WITH +; LEADING BLANKS. +; +ASCII: MOVB #' ,(IN2)+ ;FIRST CHARACTER WILL BE BLANK ALWAYS. + CMP IN1,#10000. ;IS IT GREATER THEN 9999.? + BHIS ASCIIG ;YES. DO SOMETHING SPECIAL. + MOVB #' ,(IN2)+ ;NO. JUST INSERTA BLANK. + CLR -(SP) ;AND REMEMBER TO DELETE LEADING ZEROS. +ASCIIL: CMP IN1,#100. ;IS IT GREATER THAN 99? + BLT ASCIID ;NO! NO DIVIDE IS NECESSARY. + MOV IN1,RET2 ;GREATER THAN 99. DIVIDE. + CLR RET1 ;CLEAR HIGH ORDER WORD OF AC-MQ. + MOV #100.,IN1 ;DIVIDE BY 100. + JSR PC,DIVTWO ;DIVIDE NOW. + ASL RET2 ;NOW LOOK UP ANSWER IN TABLE. + ADD #TENTAB,RET2 ;TWO BYTES WHICH COMPOSE NEXT TWO DIGITS. +ASCIIB: JSR PC,ASCDO ;INSERT FIRST. + JSR PC,ASCDO ;INSERT SECOND. + MOV RET1,RET2 ;GET THE REMAINDER NOW. + ASL RET2 + ADD #TENTAB,RET2 ;AND MAKE IT A GOOD ADDRESS. + JSR PC,ASCDO ;AND DO THE NEXT TWO DIGITS. + MOV PC,(SP) ;BUT MAKE SURE WE GET A GOOD ZERO. + JSR PC,ASCDO + ADD #2,SP ;BUMP THE STACK NOW. + RTS PC ;AND RETURN. +ASCIIG: MOV PC,-(SP) ;UPDATE LEADING ZERO FLAG TO NO DELETE. + MOVB #'0,(IN2)+ ;INSERT IT INTO THE BUFFER NOW. +ASCIIM: CMP IN1,#10000. ;SEE IF IT'S STILL ABOVE 9999. + BLO ASCIIL ;NO. EXIT + INCB -1(IN2) ;YES CHANGE DIGIT AND UPDATE. + SUB #10000.,IN1 + BR ASCIIM ;AND LOOP TILL DONE. +ASCIID: MOV IN1,RET1 ;SMALL NUMBER. SET UP REMAINDER. + MOV #TENTAB,RET2 ;AND ADDRESS FOR THE FIRST 0. + BR ASCIIB ;AND INSERT THEM NOW. +ASCDO: TST 2(SP) ;INSERT ANYTHING? + BNE ASCDBP ;YES. + CMPB (RET2),#'0 ;NO. IS THIS CHARACTER A ZERO? + BNE ASCDO1 ;NO. FIRST GOOD CHARACTER. + MOVB #' ,(IN2)+ ;STILL ZERO. INSERT A BLANK. + INC RET2 ;AND BOP INPUT POINTER. + RTS PC ;AND RETURN NOW. +ASCDO1: MOV SP,2(SP) ;GOOD CHARACTER. CLEAR ZERO FLAG. +ASCDBP: MOVB (RET2)+,(IN2)+ ;AND MOVE OVER THE CHARACTER NOW. + RTS PC ;AND THEN RETURN. + .PAGE +; +; THIS ROUTINE WILL CONVERT A SIGNED NUMBER TO AN ASCII +; STRING ACCORDING TO THE RULES USED IN "ASCII". +; +SASCII: TST IN1 ;GET THE SIGN OF THE INPUT. + BPL ASCII ;IF POSITIVE, NOTHING SPECIAL. + NEG IN1 ;ELSE NEGATE IT. + JSR PC,ASCII ;AND CONVERT IT. + MOV IN2,IN1 ;MOV BACK LAST POINTER. +SASCIL: CMPB #' ,-(IN1) ;AND LOOK FOR THE FIRST BACKWARD BLANK. + BNE SASCIL + MOVB #'-,(IN1) ;WHEN FOUND, CHANGE IT. + RTS PC ;AND RETURN NOW. + .PAGE +; +; THESE LISTS ARE USED IN PRINTING OUT THE USER +; REQUESTED VALUES. +; +DIALTB: .WORD ITEME1 + .WORD ITEME2 + .WORD ITEME3 + .WORD ITEME4 + .WORD 0 ;0=END OF LIST. +DIALTC: .WORD DITEM1 ;WHERE OUR TABLES ARE. + .WORD DITEM2 + .WORD DITEM3 + .WORD DITEM4 +; +; VALUE DISPLAY ITEMS. +; +DITEM1: .WORD 170240 ;ENABLE LIGHT PEN STUFF. + .WORD 117560 ;AND MOVE THE POINTER AROUND. + .WORD DX1 + .WORD DY1 + .WORD 100000 ;ENTER CHARACTER MODE NOW. + .ASCII ' ' ;SIX CHARACTERS OF ZERO, + .WORD DISJMP ;AND NOW CALL THE NEXT SUBROUTINE. + .WORD ITEMF1 +DITEM2: .WORD 170240 + .WORD 117560 + .WORD DX2 + .WORD DY2 + .WORD 100000 + .ASCII ' ' + .WORD DISJMP + .WORD ITEMF2 +DITEM3: .WORD 170240 + .WORD 117560 + .WORD DX3 + .WORD DY3 + .WORD 100000 + .ASCII ' ' + .WORD DISJMP + .WORD ITEMF3 +DITEM4: .WORD 170240 + .WORD 117560 + .WORD DX4 + .WORD DY4 + .WORD 100000 + .ASCII ' ' + .WORD DISJMP + .WORD ITEMF4 +; +; THESE TABLES CONTAIN THE ACTUAL MESSAGES THAT THE +; USER HAS A CHOICE OF SEEING. +; +ITEM1: .WORD RADARY + .WORD 0 ;WHERE ITEM IS AND WHAT TO DIVIDE IT BY. +ITEME1: .WORD 170260 ;ACTUALLY DISPLAY PORTION HERE. + .WORD 117560 + .WORD ITEMX1 + .WORD ITEMY1 + .WORD 100000 +ITEMF1: .ASCII ' HEIGHT ' + .WORD DISTOP + .WORD 0 +ITEM2: .WORD VERDIS + .WORD 0 +ITEME2: .WORD 170260 + .WORD 117560 + .WORD ITEMX2 + .WORD ITEMY2 + .WORD 100000 +ITEMF2: .ASCII ' ALTITUDE ' + .WORD DISTOP + .WORD 0 +ITEM3: .WORD HORDIS + .WORD 0 +ITEME3: .WORD 170260 + .WORD 117560 + .WORD ITEMX3 + .WORD ITEMY3 + .WORD 100000 +ITEMF3: .ASCII ' DISTANCE ' + .WORD DISTOP + .WORD 0 +ITEM4: .WORD FUEL + .WORD 10. +ITEME4: .WORD 170260 + .WORD 117560 + .WORD ITEMX4 + .WORD ITEMY4 + .WORD 100000 +ITEMF4: .ASCII ' FUEL LEFT' + .WORD DISTOP + .WORD 0 +ITEM5: .WORD WEIGHT + .WORD 0 +ITEME5: .WORD 170260 + .WORD 117560 + .WORD ITEMX5 + .WORD ITEMY5 + .WORD 100000 +ITEMF5: .ASCII ' WEIGHT ' + .WORD DISTOP + .WORD 0 +ITEM6: .WORD THRUST + .WORD 0 +ITEME6: .WORD 170260 + .WORD 117560 + .WORD ITEMX6 + .WORD ITEMY6 + .WORD 100000 +ITEMF6: .ASCII ' THRUST ' + .WORD DISTOP + .WORD 0 +ITEM7: .WORD ANGLE + .WORD 0 +ITEME7: .WORD 170260 + .WORD 117560 + .WORD ITEMX7 + .WORD ITEMY7 + .WORD 100000 +ITEMF7: .ASCII ' ANGLE' + .WORD DISTOP + .WORD 0 +ITEM8: .WORD VERVEL + .WORD 10. +ITEME8: .WORD 170260 + .WORD 117560 + .WORD ITEMX8 + .WORD ITEMY8 + .WORD 100000 +ITEMF8: .ASCII ' VER VEL' + .WORD DISTOP + .WORD 0 +ITEM9: .WORD HORVEL + .WORD 10. +ITEME9: .WORD 170260 + .WORD 117560 + .WORD ITEMX9 + .WORD ITEMY9 + .WORD 100000 +ITEMF9: .ASCII ' HOR VEL' + .WORD DISTOP + .WORD 0 +ITEM10: .WORD VERACC + .WORD 500. +ITEMET: .WORD 170260 + .WORD 117560 + .WORD ITEMXT + .WORD ITEMYT + .WORD 100000 +ITEMFT: .ASCII ' VER ACC' + .WORD DISTOP + .WORD 0 +ITEM11: .WORD HORACC + .WORD 500. +ITEMEE: .WORD 170260 + .WORD 117560 + .WORD ITEMXE + .WORD ITEMYE + .WORD 100000 +ITEMFE: .ASCII ' HOR ACC' + .WORD DISTOP + .WORD 0 +ITEM12: .WORD TIME + .WORD 60. +ITEMES: .WORD 170260 + .WORD 117560 + .WORD ITEMXS + .WORD ITEMYS + .WORD 100000 +ITEMFS: .ASCII ' SECONDS' + .WORD DISTOP + .WORD 0 + .PAGE +; +; THIS IS WHERE THE MOON GOES, WHEN IT IS CORRECTLY +; DRAWN. IT IS PLACED HERE SO NO CODE GOES OVER 15000-20000 +; AND SO THAT NO CODE GOES OVER 35000-37776 EITHER. THIS AREA +; IS INITIALIZED TO ALL "DISTOP,0" BY THE RESTART ROUTINE. +; +MOONST: ;DEFINE IT AS STARTING HERE. + .=.+2002. ;AND BEING 1000 DECIMAL WORDS LONG. +MOONEN: ;NEXT WORD AFTER MOON TO DETERMINE + ;HOW FAR TO INITIALIZE THIS SECTION. +; +; MESSAGES FOR GOING OFF SCREEN . +; +LFTMSG: .WORD 117520 + .WORD 30. + .WORD 600. + .WORD 100000 + .ASCII 'BOY, ARE YOU' + .BYTE 0 + .=.-1 + .EVEN + .WORD 103730 + .ASCII ' INEPT' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +RGTMSG: .WORD 117520 + .WORD 525. + .WORD 600. + .WORD 100000 + .ASCII ' YOU HAVE JUST CRASHED' + .BYTE 0 + .=.-1 + .EVEN + .WORD 117520 + .WORD 525. + .WORD 570. + .WORD 100000 + .ASCII 'INTO THE EDGE OF THE MOON' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +TOPMSG: .WORD 117520 + .WORD 50. + .WORD 650. + .WORD 100000 + .ASCII 'SORRY, BUT WHEN YOU LOSE TV COVERAGE, YOU ALSO LOSE YOUR FUEL' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 + .PAGE +; +; SPEED WARNING MASSAGES... +; +VFAST: .WORD 117530 + .WORD 100. + .WORD 2. + .WORD 100000 + .ASCII "TOO FAST. YOU'RE GOING TO CRASH" + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +FAST: .WORD 117520 + .WORD 100. + .WORD 700. + .WORD 100000 + .ASCII 'BETTER START SLOWING IT UP PRETTY SOON' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +N2FAST: .WORD 117520 + .WORD 100. + .WORD 2. + .WORD 100000 + .ASCII 'TAKE IT NICE AND EASY. A PERFECT LANDING IS UNDER 8 FPS' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +GREATM: .WORD 117520 + .WORD 100. + .WORD 600. + .WORD 100000 + .ASCII 'FANTASTIC, A PERFECT LANDING' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +GOODM: .WORD 117520 + .WORD 100. + .WORD 600. + .WORD 100000 + .ASCII 'CONGRATULATIONS ON A GOOD LANDING' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +ROUGHM: .WORD 117520 + .WORD 100. + .WORD 600. + .WORD 100000 + .ASCII 'THE LANDING WAS A LITTLE FAST' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +CRIPM: .WORD 117520 + .WORD 100. + .WORD 600. + .WORD 100000 + .ASCII 'THE LANDING WAS TOO FAST AND DAMAGE WAS DONE TO THE SHIP' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +DEADM: .WORD 117530 + .WORD 100. + .WORD 550. + .WORD 100000 + .ASCII 'WELL, YOU CERTAINLY BLEW THAT ONE. THERE WERE NO SURVIRORS' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +ANGLEM: .WORD 117520 + .WORD 100. + .WORD 570. + .WORD 100000 + .ASCII 'BUT THE ANGLE WAS TOO GREAT AND THE SHIP TIPPED OVER' + .BYTE 0 + .=.-1 + .EVEN +ANGLEJ: .WORD 117520 + .WORD 100. + .WORD 540. + .WORD 100000 + .ASCII 'SORRY, BUT THERE WERE ' + .BYTE 0 + .=.-1 + .EVEN + .WORD 103630 + .ASCII 'NO' + .WORD 103520 + .ASCII ' SURVIVORS' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +SIDEM: .WORD 117520 + .WORD 100. + .WORD 570. + .WORD 100000 + .ASCII 'BUT THE HORIZONTAL VELOCITY WAS TOO GREAT, AND YOU CRASHED ANYWAY' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISJMP + .WORD ANGLEJ ;DO A DISPLAY JUMP INTO ANGLEM. +BUMPYM: .WORD 117520 + .WORD 100. + .WORD 570. + .WORD 100000 + .ASCII 'BUT THE TERRAIN IS TOO ROUGH, AND YOU TIPPED OVER' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISJMP + .WORD ANGLEJ +ROCKMS: .WORD 117520 + .WORD 100. + .WORD 570. + .WORD 100000 + .ASCII 'YOU JUST CRASHED INTO THAT ROCK' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISJMP + .WORD ANGLEJ +OLDMS: .WORD 117520 + .WORD 100. + .WORD 570. + .WORD 100000 + .ASCII 'YOU JUST CRASHED ON TOP OF AN OLD LUNAR MODULE' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISJMP + .WORD ANGLEJ +FLAGMS: .WORD 117520 + .WORD 50. + .WORD 3. + .WORD 100000 + .ASCII 'YOU HAVE JUST VAPORIZED A PREVIOUSLY PLANTED AMERICAN FLAG' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +OLDTLT: .WORD 117520 + .WORD 100. + .WORD 570. + .WORD 100000 + .ASCII 'NICE WORK. YOU JUST CRASHED INTO A PREVIOUSLY CRASHED SHIP' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISJMP + .WORD ANGLEJ +MACDED: .WORD 117520 + .WORD 10. + .WORD 570. + .WORD 100000 + .ASCII 'W' + .BYTE 145,154,154 + .ASCII ', ' + .BYTE 171,157,165 + .ASCII "'" + .BYTE 166,145,40,152,165,163,164,40,144,145,163 + .BYTE 164,162,157,171,145,144,40,164,150,145,40 + .BYTE 157,156,154,171 + .ASCII ' M' + .BYTE 141,143 + .ASCII 'D' + .BYTE 157,156,141,154,144 + .ASCII "'" + .BYTE 163 + .BYTE 0 + .=.-1 + .EVEN + .WORD 117520 + .WORD 10. + .WORD 540. + .WORD 100000 + .BYTE 157,156,40,164,150,145,40,155,157,157,156 + .ASCII '. W' + .BYTE 150,141,164,40,141 + .ASCII ' CLOD.' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +ORDER: .WORD 117520 + .WORD 150. + .WORD 2. + .WORD 100000 + .WORD 170260 + .ASCII 'TWO CHEESEBURGERS AND A BIG MAC TO GO.' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 +MANMSG: .WORD 117520 + .WORD 50. + .WORD 2. + .WORD 100000 + .WORD 170260 + .ASCII "THAT'S ONE SMALL STEP FOR A MAN, ONE GIANT LEAP FOR MANKIND." + .BYTE 0 + .=.-1 + .EVEN + .WORD DISTOP + .WORD 0 + .PAGE +; +; THIS LITTLE SECTION CONTAINS THE CODE +; FOR DRAWING THE CONTROLLING ARROWS +; FOR HANDLING THE DEGREES OF ROTATION. +; SMALL LEFT ARROW. +; + .WORD -15. +SLEFTA: .WORD 114020 + .WORD 170240 + .WORD SLFTAX + .WORD SLFTAY + .WORD 113144 + .WORD 20.+LEFT+INT + .WORD 0. +LEFTC: .WORD 12.+INT + .WORD 8. + .WORD 12.+LEFT + .WORD 8.+DOWN + .WORD 12.+INT + .WORD 8.+DOWN + .WORD DISTOP + .WORD 0 + .WORD -100. +BLEFTA: .WORD 114020 + .WORD 170240 + .WORD BLFTAX + .WORD BLFTAY + .WORD 113144 + .WORD 40.+LEFT+INT + .WORD 0 + .WORD DISJMP + .WORD LEFTC + .WORD 15. +SRGTA: .WORD 114020 ;SMALL RIGHT ARROW. + .WORD 170240 + .WORD SRGTAX + .WORD SRGTAY + .WORD 113144 + .WORD 20.+INT + .WORD 0 +RGTC: .WORD 12.+INT+LEFT + .WORD 8. + .WORD 12. + .WORD 8.+DOWN + .WORD 12.+LEFT+INT + .WORD 8.+DOWN + .WORD DISTOP + .WORD 0 + .WORD 100. +BRGTA: .WORD 114020 + .WORD 170240 + .WORD BRGTAX + .WORD BRGTAY + .WORD 113144 + .WORD 40.+INT + .WORD 0 + .WORD DISJMP + .WORD RGTC + .PAGE +; +; THIS IS THE LIGHT PEN BAR WHICH CONTROLS THE +; THRUST OF THE ROCKET ENGINE. +; +LPBAR: .WORD 116764 + .WORD 170200 + .WORD BARLX+0 + .WORD BARTY + .WORD 110140 + .WORD INT + .WORD BARSIZ+DOWN + .WORD 3 + .WORD BARSIZ + .WORD INT + .WORD BARSIZ+DOWN + .WORD 3 + .WORD BARSIZ + .WORD INT + .WORD BARSIZ+DOWN + .WORD 114100 + .WORD BARMXR ;NOW MOVE OVER TO THE BAR POSITION. +LPBARY: .WORD 0 ;VERTICAL HEIGHT GOES HERE. + .WORD 110000 + .WORD BARMXL+INT ;BE CAREFULL OF SIGN OF THIS ONE. + .WORD 0 + .WORD BAREST + .WORD 0 + .WORD 100000 ;ENTER CHARACTER MODE NOW. +LPBARC: .ASCII ' % ' ;OVERLAYED WITH A NUMBER. +LPSW: .WORD DISTOP ;0 ON FUEL LOW--FALL TO NEXT MSG + .WORD 0 + .WORD 117130 + .WORD 350. + .WORD 700. + .WORD 100000 + .ASCII 'FUEL LOW' + .WORD DISTOP + .WORD 0 + .PAGE +; +; ;THIS IS THE BASIC ROCK COMMANDS. +; +ROCKL: .WORD 116727 + .WORD 170240 +ROCKX: .WORD 0 +ROCKY: .WORD 0 + .WORD 104000 + .WORD 14.+OTHER*200+8.+OTHER + .WORD OTHER+6+INTTWO*200+8. + .WORD 4+INTTWO*200+6 + .WORD 0+INTTWO*200+6 + .WORD 2+INTTWO*200+2 + .WORD 2+INTTWO*200+4 + .WORD 6+INTTWO*200+6 + .WORD INTTWO*200+4 + .WORD 4+INTTWO*200+2 + .WORD 2+INTTWO*200+0 + .WORD 2+INTTWO*200+2+OTHER + .WORD 6+INTTWO*200+2+OTHER + .WORD 4+INTTWO*200+2+OTHER + .WORD 2+INTTWO*200+6+OTHER + .WORD 6+INTTWO*200+6+OTHER + .WORD INTTWO*200+4+OTHER + .WORD 2+INTTWO*200+4+OTHER + .WORD 2+OTHER+INTTWO*200+4+OTHER + .WORD 2+OTHER+INTTWO*200+8.+OTHER + .WORD DISTOP + .WORD 0 +ROCKEN: ;NEXT LOCATION AFTER ROCKS. + .PAGE +; +; THIS LIST EXPLAINS HOW TO DRAW THE MACDONALD'S. +; +MACS: 117724 + 170240 +MACX: .WORD 0 +MACY: .WORD 0 + .WORD 104000 + .WORD 18.*200 + .WORD 107000 + .WORD 30.+INT + .WORD 54.*200+INT + .WORD 30.+OTHER+INT + .WORD 54.+OTHER*200+INT + .WORD 105324 + .WORD 12.*200 + .WORD 8.+INT + .WORD 6.*200+INT + .WORD 8.+OTHER+INT + .WORD 19.+OTHER*200 + .WORD 110000 + .WORD 73.+LEFT + .WORD 0. + .WORD DISTOP + .WORD ARCH + .WORD 104000 + .WORD 22.*200 +; +; NOTICE HOW I FALL THROUGH TO DRAW THE +; SECOND ARCH. CLEVER, CLEVER. +; +ARCH: .WORD 107724 + .WORD 17.+OTHER*200+OTHER+3. + .WORD 1*200+10.+INT + .WORD 1*200+9.+INT + .WORD 1*200+6+INT + .WORD 1*200+5+INT + .WORD 1*200+4+INT + .WORD 1*200+2+INT + .WORD 1*200+4+INT + .WORD 2*200+5+INT + .WORD 1*200+1+INT + .WORD 2*200+4+INT + .WORD 3*200+2+INT + .WORD 1*200+1+INT + .WORD 2*200+0+INT + .WORD 1*200+1+INT+OTHER + .WORD 3*200+2+INT+OTHER + .WORD 2*200+4+INT+OTHER + .WORD 1*200+1+INT+OTHER + .WORD 2*200+5+INT+OTHER + .WORD 1*200+4+INT+OTHER + .WORD 1*200+2+INT+OTHER + .WORD 1*200+4+INT+OTHER + .WORD 1*200+5+INT+OTHER + .WORD 1*200+6+INT+OTHER + .WORD 1*200+9.+INT+OTHER + .WORD 1*200+10.+INT+OTHER + .WORD 17.+OTHER*200+3. + .WORD DISTOP + .WORD 0 + .PAGE +; +; THIS LIST EXPLAINS HOW TO DRAW A MAN. +; +MAN: .WORD 116720 ;DON'T MAKE HIM TOO BRIGHT. +MANX: .WORD 0 +MANY: .WORD 0 + .WORD 104000 ;ALL SHORT VECTORS. + .WORD 400 ;INVISIBLE 2 RIGHT. + .WORD INT+20000+404 ;LEFT TWO, UP FOUR. + .WORD INT+20000+1104 ;LEFT FOUR, DOWN 4. + .WORD 1004 ;INVISIBLE, UP 4, RIGHT 4 + .WORD INT+5 ;UP FIVE. + .WORD INT+200 ;RIGHT ONE + .WORD INT+201 ;RIGHT ONE, UP ONE. + .WORD INT+1 ;UP ONE + .WORD INT+20000+201 ;LEFT ONE, UP ONE. + .WORD INT+20000+400 ;LEFT TWO. + .WORD INT+20000+301 ;LEFT ONE, DOWN ONE. + .WORD INT+101 ;DOWN ONE. + .WORD INT+301 ;DOWN ONE, RIGHT ONE. + .WORD INT+200 ;RIGHT ONE. + .WORD 101 ;DOWN ONE. + .WORD INT+1203 ;RIGHT FIVE, UP THREE. + .WORD 20000+1305 ;LEFT FIVE, DOWN FIVE. + .WORD INT+20000+1403 ;LEFT SIX, UP THREE. + .WORD DISTOP + .WORD 0 + .PAGE +; +; THIS LIST EXPLAINS HOW TO DRAW A FLAG. +; +FLAGL: .WORD 115324 + .WORD 170240 +FLAGX: .WORD 0 +FLAGY: .WORD 0 + .WORD 104000 + .WORD 18.+INT + .WORD 112727 + .WORD 16.+INT + .WORD 0 + .WORD INT + .WORD 8.+DOWN + .WORD 16.+INT+LEFT + .WORD 0 + .WORD 112326 + .WORD 0 + .WORD 3 + .WORD 16.+INT + .WORD 0 + .WORD 0 + .WORD 2 + .WORD 16.+INT+LEFT + .WORD 0 + .WORD DISTOP + .WORD 0 +FLAGEN: ;NEXT LOCATION AFTER FLAG. + .PAGE +; +; COMMANDS FOR DISPLAYING THE LUNAR MODULE. +; +DESIGN: .WORD DRAWIN,170200 ;LOAD STATUS. + .WORD DRAWIN,107124 ;AND SHORT VECTORS, INTENSITY 4. + .WORD DRAWIS ;DRAW BODY OF SHIP NOW. + .BYTE -6.,0. + .WORD DRAWVS + .BYTE -14.,8. + .WORD DRAWVS + .BYTE -14.,20. + .WORD DRAWVS + .BYTE -6.,29. + .WORD DRAWVS + .BYTE 6.,29. + .WORD DRAWVS + .BYTE 14.,20. + .WORD DRAWVS + .BYTE 14.,8. + .WORD DRAWVS + .BYTE 6.,0. + .WORD DRAWVS + .BYTE -6.,0. ;TOP OF SHIP DONE . + .WORD DRAWIS + .BYTE -17.,0. + .WORD DRAWVS + .BYTE -17.,-16. + .WORD DRAWVS + .BYTE 17.,-16. + .WORD DRAWVS + .BYTE 17.,0. + .WORD DRAWVS + .BYTE -17.,0. ;LOWER BODY OF SHIP DONE. + .WORD DRAWIN,107524 ;CHANGE TO LEVEL 3 INTENSITY. + .WORD DRAWVS ;DRAW LANDING LEGS NOW. + .BYTE -32.,-24. + .WORD DRAWIS ;POSITION OVER TO OTHER SIDE. + .BYTE 17.,0. + .WORD DRAWVS + .BYTE 32.,-24. + .WORD DRAWIN,106324 ;LEVEL ONE INTENSITY. + .WORD DRAWIS + .BYTE -17.,-14. + .WORD DRAWVS + .BYTE -28.,-18. + .WORD DRAWIS + .BYTE 17.,-14. + .WORD DRAWVS + .BYTE 28.,-18. ;LOWER LANDING BRACE DONE. + .WORD DRAWIN,107124 ;INTENSITY 4 FOR LANDING PODS. + .WORD DRAWIS + .BYTE 36.,-24. + .WORD DRAWVS + .BYTE 28.,-24. + .WORD DRAWIS + .BYTE -28.,-24. + .WORD DRAWVS + .BYTE -36.,-24. ;END OF LANDING PODS. + .WORD DRAWIS ;DRAW THE ENGINE NOW. + .BYTE -3.,-16. + .WORD DRAWVS + .BYTE -7.,-21. + .WORD DRAWVS + .BYTE 7.,-21. + .WORD DRAWVS + .BYTE 3.,-16. ;END OF THE ENGINE. + .WORD DRAWIS ;NOW BRING VECTOR BACK UP TO CENTER + .BYTE 0,0 ;OF THE LUNAR MODULE. + .WORD DRAWDN ;AND TERMINATE THE PICTURE. + .PAGE +; +; THESE TABLES CONTROL THE DRAWING OF THE ROCKET +; ENGINE FLAME, AND ALL IT'S PURTIBATIONS. +; Y THRUST TABLE ACCORDING TO PERCENTAGE THROTTLE. +; 13 SEGMENTS, EACH ONE APPROX 8% THROTTLE. +; +YTHRST: .BYTE 0.,-30.,-31.,-32.,-34.,-36.,-38.,-41.,-44.,-47.,-50.,-53.,-56. + +; +; Y UP DOWN IS A TABLE WHICH WILL SORT OF +; RANDOMIZE THE HEIGHT OF THE FLAME AND SHOULD ENHANCE THE +; FLICKERING APPEARANCE. +; +YUPDWN: .BYTE 0,1,3,6,4,3,1,-2,-6,-7,-5,-2,2,3,5,6,2,1 + .BYTE -1,-4,-6,-5,-3,0,4,5,7,4,0,-1,-3,-1 +; +; "FLAME BOTTOM" CONTAINS THE TABLE OF THE X VALUES +; FOR THE BOTTOM OF THE ROCKET FLAME. THEY ARE INDEXED SLIGHTLY +; RANDOMLY AT TIMES. +; +FLAMBT: .BYTE -20.,-16.,-13.,-10.,-7.,-4.,-2. + .BYTE 0.,2.,4.,7.,10.,13.,16.,20. +; +; THIS SECTION CONTAINS THE ACTUAL LIST OF COMMANDS TO +; BE FOLLOWED WHEN DRAWING THE ROCKET FLAME. +; + .EVEN ;REALIGN NOW IF NECESSARY. +FLAMDO: .WORD DRAWIN,170200 ;LOAD STATUS PROPERLY. + .WORD DRAWIN ;INSERT COMMAND NOW. +FLAMEX: .WORD 0 ;FLAME COMMAND GOES HERE. + .WORD DRAWIS ;MOVE POINTER OVER TO BOTTOM + .BYTE -6.,-21. ;OFF THE ROCKET ENGINE. + .WORD DRAWVS ;NOW DRAW THE VECTORS +FLAMXS: .BYTE 0.,0. ;WHICH WE SHOULD SET UP HERE. + .WORD DRAWVS ;AND MOVE BACK UP AGAIN. + .BYTE -5.,-21. ;BOTTOM OF THE ENGINE. + .WORD DRAWVS + .BYTE 0.,0. ;OVERLAYED HERE ALSO. + .WORD DRAWVS + .BYTE -4.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE -3.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE -2.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE -1.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE 0.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE 1.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE 2.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE 3.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE 4.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE 5.,-21. + .WORD DRAWVS + .BYTE 0.,0. + .WORD DRAWVS + .BYTE 6.,-21. + .WORD DRAWIS ;RETURN TO CENTER NOW. + .BYTE 0.,0. + .WORD DRAWDN ;AND END THE COMMAND LIST. + FLEN=12. ;NUMBER OF ITEMS TO INSERT IN THE TABLE. + .PAGE +; +; THESE ARE THE HIDEOUS TABLES THAT THE +; SYSTEM NEEDS TO FUNCTION PROPERLY. THEY INCLUDE +; TERRAIN TABLES (ALTITUDE), FEATURE TABLES (ROCKS, +; OLD SHIPS, ETC.), CONVERSION TABLES, AND THE +; SINE AND COSINE TABLES. THEY SHOULD BE BETWEEN +; 20000 AND 35000 OCTAL (LOCATION), OR YOU CAN BE SCREWED. +; THIS IS THE CONVERSION TABLE FROM A BINARY +; NUMBER LESS THAN 100 TO AN ASCII STRING. SEE THE +; SUBROUTINE "ASCII". +; +TENTAB: .BYTE '0,'0 + .BYTE '0,'1 + .BYTE '0,'2 + .BYTE '0,'3 + .BYTE '0,'4 + .BYTE '0,'5 + .BYTE '0,'6 + .BYTE '0,'7 + .BYTE '0,'8 + .BYTE '0,'9 + .BYTE '1,'0 + .BYTE '1,'1 + .BYTE '1,'2 + .BYTE '1,'3 + .BYTE '1,'4 + .BYTE '1,'5 + .BYTE '1,'6 + .BYTE '1,'7 + .BYTE '1,'8 + .BYTE '1,'9 + .BYTE '2,'0 + .BYTE '2,'1 + .BYTE '2,'2 + .BYTE '2,'3 + .BYTE '2,'4 + .BYTE '2,'5 + .BYTE '2,'6 + .BYTE '2,'7 + .BYTE '2,'8 + .BYTE '2,'9 + .BYTE '3,'0 + .BYTE '3,'1 + .BYTE '3,'2 + .BYTE '3,'3 + .BYTE '3,'4 + .BYTE '3,'5 + .BYTE '3,'6 + .BYTE '3,'7 + .BYTE '3,'8 + .BYTE '3,'9 + .BYTE '4,'0 + .BYTE '4,'1 + .BYTE '4,'2 + .BYTE '4,'3 + .BYTE '4,'4 + .BYTE '4,'5 + .BYTE '4,'6 + .BYTE '4,'7 + .BYTE '4,'8 + .BYTE '4,'9 + .BYTE '5,'0 + .BYTE '5,'1 + .BYTE '5,'2 + .BYTE '5,'3 + .BYTE '5,'4 + .BYTE '5,'5 + .BYTE '5,'6 + .BYTE '5,'7 + .BYTE '5,'8 + .BYTE '5,'9 + .BYTE '6,'0 + .BYTE '6,'1 + .BYTE '6,'2 + .BYTE '6,'3 + .BYTE '6,'4 + .BYTE '6,'5 + .BYTE '6,'6 + .BYTE '6,'7 + .BYTE '6,'8 + .BYTE '6,'9 + .BYTE '7,'0 + .BYTE '7,'1 + .BYTE '7,'2 + .BYTE '7,'3 + .BYTE '7,'4 + .BYTE '7,'5 + .BYTE '7,'6 + .BYTE '7,'7 + .BYTE '7,'8 + .BYTE '7,'9 + .BYTE '8,'0 + .BYTE '8,'1 + .BYTE '8,'2 + .BYTE '8,'3 + .BYTE '8,'4 + .BYTE '8,'5 + .BYTE '8,'6 + .BYTE '8,'7 + .BYTE '8,'8 + .BYTE '8,'9 + .BYTE '9,'0 + .BYTE '9,'1 + .BYTE '9,'2 + .BYTE '9,'3 + .BYTE '9,'4 + .BYTE '9,'5 + .BYTE '9,'6 + .BYTE '9,'7 + .BYTE '9,'8 + .BYTE '9,'9 + .PAGE +; +; THIS TABLE HOLDS THE TERAIN OF THE MOON IN +; FEET ABOVE THE MEAN HEIGHT. IT GOES SOMEEWHAT FORWARD AND +; BACKWARD BECAUSE THE PROGRAM MAY "SCAN" A LITTLE BIT. +; + .WORD 718. ;X=-10 + .WORD 718. ;X= -9 + .WORD 718. ;X= -8 + .WORD 750. ;X= -7 + .WORD 750. ;X= -6 + .WORD 750. ;X= -5 + .WORD 782. ;X= -4 + .WORD 782. ;X= -3 + .WORD 782. ;X= -2 + .WORD 814. ;X= -1 +TERAIN: .WORD 780. ;X= 0 + .WORD 750. ;X= 1 + .WORD 703. ;X= 2 + .WORD 650. ;X= 3 + .WORD 620. ;X= 4 + .WORD 575. ;X= 5 + .WORD 500. ;X= 6 + .WORD 420. ;X= 7 + .WORD 400. ;X= 8 + .WORD 350. ;X= 9 + .WORD 270. ;X= 10 + .WORD 246. ;X= 11 + .WORD 200. ;X= 12 + .WORD 180. ;X= 13 + .WORD 107. ;X= 14 + .WORD 24. ;X= 15 + .WORD 54. ;X= 16 + .WORD 53. ;X= 17 + .WORD 51. ;X= 18 + .WORD 82. ;X= 19 + .WORD 80. ;X= 20 + .WORD 78. ;X= 21 + .WORD 109. ;X= 22 + .WORD 107. ;X= 23 + .WORD 74. ;X= 24 + .WORD 72. ;X= 25 + .WORD 70. ;X= 26 + .WORD 69. ;X= 27 + .WORD 99. ;X= 28 + .WORD 98. ;X= 29 + .WORD 128. ;X= 30 + .WORD 126. ;X= 31 + .WORD 125. ;X= 32 + .WORD 123. ;X= 33 + .WORD 122. ;X= 34 + .WORD 152. ;X= 35 + .WORD 182. ;X= 36 + .WORD 174. ;X= 37 + .WORD 166. ;X= 38 + .WORD 158. ;X= 39 + .WORD 181. ;X= 40 + .WORD 173. ;X= 41 + .WORD 165. ;X= 42 + .WORD 156. ;X= 43 + .WORD 148. ;X= 44 + .WORD 140. ;X= 45 + .WORD 131. ;X= 46 + .WORD 91. ;X= 47 + .WORD 83. ;X= 48 + .WORD 75. ;X= 49 + .WORD 182. ;X= 50 + .WORD 161. ;X= 51 + .WORD 236. ;X= 52 + .WORD 120. ;X= 53 + .WORD 67. ;X= 54 + .WORD 174. ;X= 55 + .WORD 153. ;X= 56 + .WORD 197. ;X= 57 + .WORD 80. ;X= 58 + .WORD 59. ;X= 59 + .WORD 866. ;X= 60 + .WORD 123. ;X= 61 + .WORD 201. ;X= 62 + .WORD 250. ;X= 63 + .WORD 275. ;X= 64 + .WORD 300. ;X= 65 + .WORD 375. ;X= 66 + .WORD 410. ;X= 67 + .WORD 579. ;X= 68 + .WORD 926. ;X= 69 + .WORD 1832. ;X= 70 + .WORD 1907. ;X= 71 + .WORD 2013. ;X= 72 + .WORD 2119. ;X= 73 + .WORD 2257. ;X= 74 + .WORD 2395. ;X= 75 + .WORD 2533. ;X= 76 + .WORD 2639. ;X= 77 + .WORD 2745. ;X= 78 + .WORD 2883. ;X= 79 + .WORD 3021. ;X= 80 + .WORD 3128. ;X= 81 + .WORD 3226. ;X= 82 + .WORD 3197. ;X= 83 + .WORD 3231. ;X= 84 + .WORD 3170. ;X= 85 + .WORD 3140. ;X= 86 + .WORD 3143. ;X= 87 + .WORD 3145. ;X= 88 + .WORD 3180. ;X= 89 + .WORD 3246. ;X= 90 + .WORD 3153. ;X= 91 + .WORD 3252. ;X= 92 + .WORD 3286. ;X= 93 + .WORD 3353. ;X= 94 + .WORD 3387. ;X= 95 + .WORD 3390. ;X= 96 + .WORD 3424. ;X= 97 + .WORD 3523. ;X= 98 + .WORD 3429. ;X= 99 + .WORD 3440. ;X=100 + .WORD 3450. ;X=101 + .WORD 3429. ;X=102 + .WORD 3407. ;X=103 + .WORD 3386. ;X=104 + .WORD 3396. ;X=105 + .WORD 3375. ;X=106 + .WORD 3321. ;X=107 + .WORD 3300. ;X=108 + .WORD 3246. ;X=109 + .WORD 3257. ;X=110 + .WORD 3203. ;X=111 + .WORD 3182. ;X=112 + .WORD 3128. ;X=113 + .WORD 3107. ;X=114 + .WORD 3085. ;X=115 + .WORD 3064. ;X=116 + .WORD 3074. ;X=117 + .WORD 3085. ;X=118 + .WORD 3095. ;X=119 + .WORD 3195. ;X=120 + .WORD 3167. ;X=121 + .WORD 3139. ;X=122 + .WORD 3239. ;X=123 + .WORD 2954. ;X=124 + .WORD 2926. ;X=125 + .WORD 2834. ;X=126 + .WORD 2710. ;X=127 + .WORD 2746. ;X=128 + .WORD 2718. ;X=129 + .WORD 2753. ;X=130 + .WORD 2469. ;X=131 + .WORD 2569. ;X=132 + .WORD 2509. ;X=133 + .WORD 2513. ;X=134 + .WORD 2580. ;X=135 + .WORD 2584. ;X=136 + .WORD 2620. ;X=137 + .WORD 2720. ;X=138 + .WORD 2820. ;X=139 + .WORD 2919. ;X=140 + .WORD 2859. ;X=141 + .WORD 2703. ;X=142 + .WORD 2739. ;X=143 + .WORD 2967. ;X=144 + .WORD 2906. ;X=145 + .WORD 3134. ;X=146 + .WORD 3042. ;X=147 + .WORD 2918. ;X=148 + .WORD 2858. ;X=149 + .WORD 2759. ;X=150 + .WORD 2468. ;X=151 + .WORD 2498. ;X=152 + .WORD 2399. ;X=153 + .WORD 2396. ;X=154 + .WORD 2362. ;X=155 + .WORD 2071. ;X=156 + .WORD 1940. ;X=157 + .WORD 1970. ;X=158 + .WORD 2063. ;X=159 + .WORD 2028. ;X=160 + .WORD 1930. ;X=161 + .WORD 1799. ;X=162 + .WORD 1668. ;X=163 + .WORD 1762. ;X=164 + .WORD 1823. ;X=165 + .WORD 1660. ;X=166 + .WORD 1626. ;X=167 + .WORD 1527. ;X=168 + .WORD 1428. ;X=169 + .WORD 1650. ;X=170 + .WORD 1615. ;X=171 + .WORD 1676. ;X=172 + .WORD 1770. ;X=173 + .WORD 1703. ;X=174 + .WORD 1636. ;X=175 + .WORD 1666. ;X=176 + .WORD 1599. ;X=177 + .WORD 1436. ;X=178 + .WORD 1402. ;X=179 + .WORD 1431. ;X=180 + .WORD 1332. ;X=181 + .WORD 1426. ;X=182 + .WORD 1647. ;X=183 + .WORD 1516. ;X=184 + .WORD 1354. ;X=185 + .WORD 1319. ;X=186 + .WORD 1380. ;X=187 + .WORD 1090. ;X=188 + .WORD 1055. ;X=189 + .WORD 1148. ;X=190 + .WORD 1146. ;X=191 + .WORD 1207. ;X=192 + .WORD 1172. ;X=193 + .WORD 1202. ;X=194 + .WORD 1071. ;X=195 + .WORD 780. ;X=196 + .WORD 746. ;X=197 + .WORD 711. ;X=198 + .WORD 933. ;X=199 + .WORD 1092. ;X=200 + .WORD 1348. ;X=201 + .WORD 1539. ;X=202 + .WORD 1827. ;X=203 + .WORD 1858. ;X=204 + .WORD 2114. ;X=205 + .WORD 2337. ;X=206 + .WORD 2497. ;X=207 + .WORD 2624. ;X=208 + .WORD 2752. ;X=209 + .WORD 2847. ;X=210 + .WORD 3007. ;X=211 + .WORD 3166. ;X=212 + .WORD 3422. ;X=213 + .WORD 3581. ;X=214 + .WORD 3709. ;X=215 + .WORD 3964. ;X=216 + .WORD 4124. ;X=217 + .WORD 4315. ;X=218 + .WORD 4443. ;X=219 + .WORD 4449. ;X=220 + .WORD 4711. ;X=221 + .WORD 4845. ;X=222 + .WORD 4883. ;X=223 + .WORD 4985. ;X=224 + .WORD 5055. ;X=225 + .WORD 5061. ;X=226 + .WORD 5260. ;X=227 + .WORD 5362. ;X=228 + .WORD 5592. ;X=229 + .WORD 5726. ;X=230 + .WORD 5860. ;X=231 + .WORD 5994. ;X=232 + .WORD 6160. ;X=233 + .WORD 6259. ;X=234 + .WORD 6422. ;X=235 + .WORD 6584. ;X=236 + .WORD 6715. ;X=237 + .WORD 6877. ;X=238 + .WORD 7008. ;X=239 + .WORD 7138. ;X=240 + .WORD 7301. ;X=241 + .WORD 7432. ;X=242 + .WORD 7562. ;X=243 + .WORD 7693. ;X=244 + .WORD 7791. ;X=245 + .WORD 7954. ;X=246 + .WORD 8084. ;X=247 + .WORD 8215. ;X=248 + .WORD 8345. ;X=249 + .WORD 8400. ;X=250 + .WORD 8678. ;X=251 + .WORD 8765. ;X=252 + .WORD 8851. ;X=253 + .WORD 9033. ;X=254 + .WORD 9152. ;X=255 + .WORD 9366. ;X=256 + .WORD 9388. ;X=257 + .WORD 9539. ;X=258 + .WORD 9945. ;X=259 + .WORD 10191. ;X=260 + .WORD 10377. ;X=261 + .WORD 10659. ;X=262 + .WORD 10781. ;X=263 + .WORD 11063. ;X=264 + .WORD 11312. ;X=265 + .WORD 11370. ;X=266 + .WORD 11396. ;X=267 + .WORD 11646. ;X=268 + .WORD 11768. ;X=269 + .WORD 11985. ;X=270 + .WORD 12203. ;X=271 + .WORD 12357. ;X=272 + .WORD 12607. ;X=273 + .WORD 12857. ;X=274 + .WORD 12965. ;X=275 + .WORD 13073. ;X=276 + .WORD 13117. ;X=277 + .WORD 13193. ;X=278 + .WORD 13238. ;X=279 + .WORD 13282. ;X=280 + .WORD 13358. ;X=281 + .WORD 13434. ;X=282 + .WORD 13478. ;X=283 + .WORD 13555. ;X=284 + .WORD 13631. ;X=285 + .WORD 13707. ;X=286 + .WORD 13815. ;X=287 + .WORD 13923. ;X=288 + .WORD 13967. ;X=289 + .WORD 14029. ;X=290 + .WORD 13996. ;X=291 + .WORD 14121. ;X=292 + .WORD 14215. ;X=293 + .WORD 14308. ;X=294 + .WORD 14466. ;X=295 + .WORD 14591. ;X=296 + .WORD 14749. ;X=297 + .WORD 14874. ;X=298 + .WORD 15000. ;X=299 + .WORD 14754. ;X=300 + .WORD 14604. ;X=301 + .WORD 14326. ;X=302 + .WORD 14176. ;X=303 + .WORD 14090. ;X=304 + .WORD 13940. ;X=305 + .WORD 13662. ;X=306 + .WORD 13480. ;X=307 + .WORD 13394. ;X=308 + .WORD 13116. ;X=309 + .WORD 12548. ;X=310 + .WORD 11469. ;X=311 + .WORD 10582. ;X=312 + .WORD 10015. ;X=313 + .WORD 9160. ;X=314 + .WORD 8960. ;X=315 + .WORD 8696. ;X=316 + .WORD 8432. ;X=317 + .WORD 8200. ;X=318 + .WORD 7936. ;X=319 + .WORD 7770. ;X=320 + .WORD 7509. ;X=321 + .WORD 7375. ;X=322 + .WORD 7210. ;X=323 + .WORD 7076. ;X=324 + .WORD 6911. ;X=325 + .WORD 6745. ;X=326 + .WORD 6644. ;X=327 + .WORD 6478. ;X=328 + .WORD 6185. ;X=329 + .WORD 6019. ;X=330 + .WORD 5758. ;X=331 + .WORD 5656. ;X=332 + .WORD 5491. ;X=333 + .WORD 5261. ;X=334 + .WORD 5096. ;X=335 + .WORD 4867. ;X=336 + .WORD 4712. ;X=337 + .WORD 4398. ;X=338 + .WORD 4020. ;X=339 + .WORD 3834. ;X=340 + .WORD 3296. ;X=341 + .WORD 3014. ;X=342 + .WORD 2668. ;X=343 + .WORD 2642. ;X=344 + .WORD 2424. ;X=345 + .WORD 2398. ;X=346 + .WORD 2212. ;X=347 + .WORD 2186. ;X=348 + .WORD 1840. ;X=349 + .WORD 1828. ;X=350 + .WORD 2008. ;X=351 + .WORD 2156. ;X=352 + .WORD 2272. ;X=353 + .WORD 2356. ;X=354 + .WORD 2312. ;X=355 + .WORD 2268. ;X=356 + .WORD 2224. ;X=357 + .WORD 2276. ;X=358 + .WORD 2328. ;X=359 + .WORD 2413. ;X=360 + .WORD 2511. ;X=361 + .WORD 2673. ;X=362 + .WORD 2836. ;X=363 + .WORD 2998. ;X=364 + .WORD 3129. ;X=365 + .WORD 3227. ;X=366 + .WORD 3390. ;X=367 + .WORD 3488. ;X=368 + .WORD 3586. ;X=369 + .WORD 3717. ;X=370 + .WORD 3879. ;X=371 + .WORD 4010. ;X=372 + .WORD 4108. ;X=373 + .WORD 4239. ;X=374 + .WORD 4369. ;X=375 + .WORD 4531. ;X=376 + .WORD 4694. ;X=377 + .WORD 4824. ;X=378 + .WORD 4987. ;X=379 + .WORD 5117. ;X=380 + .WORD 5216. ;X=381 + .WORD 5314. ;X=382 + .WORD 5445. ;X=383 + .WORD 5543. ;X=384 + .WORD 5705. ;X=385 + .WORD 5804. ;X=386 + .WORD 5966. ;X=387 + .WORD 6097. ;X=388 + .WORD 6195. ;X=389 + .WORD 6294. ;X=390 + .WORD 6392. ;X=391 + .WORD 6522. ;X=392 + .WORD 6685. ;X=393 + .WORD 6815. ;X=394 + .WORD 6914. ;X=395 + .WORD 7076. ;X=396 + .WORD 7239. ;X=397 + .WORD 7337. ;X=398 + .WORD 7436. ;X=399 + .WORD 7074. ;X=400 + .WORD 6809. ;X=401 + .WORD 6448. ;X=402 + .WORD 6118. ;X=403 + .WORD 5629. ;X=404 + .WORD 5268. ;X=405 + .WORD 5002. ;X=406 + .WORD 4769. ;X=407 + .WORD 4535. ;X=408 + .WORD 4270. ;X=409 + .WORD 3909. ;X=410 + .WORD 3515. ;X=411 + .WORD 3108. ;X=412 + .WORD 2796. ;X=413 + .WORD 2389. ;X=414 + .WORD 2077. ;X=415 + .WORD 1509. ;X=416 + .WORD 1326. ;X=417 + .WORD 1078. ;X=418 + .WORD 895. ;X=419 + .WORD 583. ;X=420 + .WORD 144. ;X=421 + .WORD 64. ;X=422 + .WORD -15. ;X=423 + .WORD -127. ;X=424 + .WORD -114. ;X=425 + .WORD -101. ;X=426 + .WORD -56. ;X=427 + .WORD -10. ;X=428 + .WORD 2. ;X=429 + .WORD -15. ;X=430 + .WORD 29. ;X=431 + .WORD 74. ;X=432 + .WORD 56. ;X=433 + .WORD 69. ;X=434 + .WORD 82. ;X=435 + .WORD 95. ;X=436 + .WORD 88. ;X=437 + .WORD 49. ;X=438 + .WORD 73. ;X=439 + .WORD 34. ;X=440 + .WORD 59. ;X=441 + .WORD 51. ;X=442 + .WORD 44. ;X=443 + .WORD 68. ;X=444 + .WORD 29. ;X=445 + .WORD 22. ;X=446 + .WORD 14. ;X=447 + .WORD 7. ;X=448 + .WORD 32. ;X=449 + .WORD 85. ;X=450 + .WORD 171. ;X=451 + .WORD 256. ;X=452 + .WORD 310. ;X=453 + .WORD 460. ;X=454 + .WORD 555. ;X=455 + .WORD 618. ;X=456 + .WORD 681. ;X=457 + .WORD 776. ;X=458 + .WORD 839. ;X=459 + .WORD 870. ;X=460 + .WORD 933. ;X=461 + .WORD 996. ;X=462 + .WORD 1092. ;X=463 + .WORD 1187. ;X=464 + .WORD 1250. ;X=465 + .WORD 1345. ;X=466 + .WORD 1408. ;X=467 + .WORD 1471. ;X=468 + .WORD 1566. ;X=469 + .WORD 1597. ;X=470 + .WORD 1628. ;X=471 + .WORD 1692. ;X=472 + .WORD 1755. ;X=473 + .WORD 1818. ;X=474 + .WORD 1881. ;X=475 + .WORD 1944. ;X=476 + .WORD 2007. ;X=477 + .WORD 2070. ;X=478 + .WORD 2133. ;X=479 + .WORD 2196. ;X=480 + .WORD 2260. ;X=481 + .WORD 2323. ;X=482 + .WORD 2386. ;X=483 + .WORD 2481. ;X=484 + .WORD 2544. ;X=485 + .WORD 2607. ;X=486 + .WORD 2670. ;X=487 + .WORD 2733. ;X=488 + .WORD 2764. ;X=489 + .WORD 2828. ;X=490 + .WORD 2859. ;X=491 + .WORD 2922. ;X=492 + .WORD 2985. ;X=493 + .WORD 3080. ;X=494 + .WORD 3111. ;X=495 + .WORD 3174. ;X=496 + .WORD 3237. ;X=497 + .WORD 3300. ;X=498 + .WORD 3396. ;X=499 + .WORD 3356. ;X=500 + .WORD 3252. ;X=501 + .WORD 2957. ;X=502 + .WORD 3173. ;X=503 + .WORD 3390. ;X=504 + .WORD 3446. ;X=505 + .WORD 3406. ;X=506 + .WORD 3303. ;X=507 + .WORD 3231. ;X=508 + .WORD 3448. ;X=509 + .WORD 3142. ;X=510 + .WORD 3156. ;X=511 + .WORD 3107. ;X=512 + .WORD 3089. ;X=513 + .WORD 2944. ;X=514 + .WORD 2835. ;X=515 + .WORD 2726. ;X=516 + .WORD 2617. ;X=517 + .WORD 2476. ;X=518 + .WORD 2367. ;X=519 + .WORD 2373. ;X=520 + .WORD 2410. ;X=521 + .WORD 2511. ;X=522 + .WORD 2580. ;X=523 + .WORD 2618. ;X=524 + .WORD 2719. ;X=525 + .WORD 2724. ;X=526 + .WORD 2793. ;X=527 + .WORD 2798. ;X=528 + .WORD 2772. ;X=529 + .WORD 2740. ;X=530 + .WORD 2709. ;X=531 + .WORD 2645. ;X=532 + .WORD 2614. ;X=533 + .WORD 2582. ;X=534 + .WORD 2551. ;X=535 + .WORD 2519. ;X=536 + .WORD 2488. ;X=537 + .WORD 2456. ;X=538 + .WORD 2425. ;X=539 + .WORD 2393. ;X=540 + .WORD 2362. ;X=541 + .WORD 2362. ;X=542 + .WORD 2363. ;X=543 + .WORD 2363. ;X=544 + .WORD 2296. ;X=545 + .WORD 2228. ;X=546 + .WORD 2224. ;X=547 + .WORD 2092. ;X=548 + .WORD 2153. ;X=549 + .WORD 2032. ;X=550 + .WORD 2072. ;X=551 + .WORD 2144. ;X=552 + .WORD 2248. ;X=553 + .WORD 2128. ;X=554 + .WORD 1976. ;X=555 + .WORD 2016. ;X=556 + .WORD 1864. ;X=557 + .WORD 1936. ;X=558 + .WORD 1912. ;X=559 + .WORD 1856. ;X=560 + .WORD 1704. ;X=561 + .WORD 1616. ;X=562 + .WORD 1496. ;X=563 + .WORD 1344. ;X=564 + .WORD 1320. ;X=565 + .WORD 1232. ;X=566 + .WORD 952. ;X=567 + .WORD 992. ;X=568 + .WORD 1032. ;X=569 + .WORD 1136. ;X=570 + .WORD 1048. ;X=571 + .WORD 1056. ;X=572 + .WORD 968. ;X=573 + .WORD 688. ;X=574 + .WORD 792. ;X=575 + .WORD 768. ;X=576 + .WORD 744. ;X=577 + .WORD 624. ;X=578 + .WORD 343. ;X=579 + .WORD 298. ;X=580 + .WORD 444. ;X=581 + .WORD 494. ;X=582 + .WORD 289. ;X=583 + .WORD 211. ;X=584 + .WORD 165. ;X=585 + .WORD 152. ;X=586 + .WORD 74. ;X=587 + .WORD 156. ;X=588 + .WORD 174. ;X=589 + .WORD 225. ;X=590 + .WORD 147. ;X=591 + .WORD -58. ;X=592 + .WORD -39. ;X=593 + .WORD -85. ;X=594 + .WORD -163. ;X=595 + .WORD 143. ;X=596 + .WORD 449. ;X=597 + .WORD 755. ;X=598 + .WORD 934. ;X=599 + .WORD 787. ;X=600 + .WORD 673. ;X=601 + .WORD 654. ;X=602 + .WORD 636. ;X=603 + .WORD 618. ;X=604 + .WORD 471. ;X=605 + .WORD 325. ;X=606 + .WORD 403. ;X=607 + .WORD 416. ;X=608 + .WORD 270. ;X=609 + .WORD 220. ;X=610 + .WORD 105. ;X=611 + .WORD 87. ;X=612 + .WORD 101. ;X=613 + .WORD -13. ;X=614 + .WORD -63. ;X=615 + .WORD 46. ;X=616 + .WORD 155. ;X=617 + .WORD 137. ;X=618 + .WORD 183. ;X=619 + .WORD 164. ;X=620 + .WORD 50. ;X=621 + .WORD 31. ;X=622 + .WORD 13. ;X=623 + .WORD 123. ;X=624 + .WORD 104. ;X=625 + .WORD 214. ;X=626 + .WORD 228. ;X=627 + .WORD 273. ;X=628 + .WORD 287. ;X=629 + .WORD 141. ;X=630 + .WORD 250. ;X=631 + .WORD 328. ;X=632 + .WORD 278. ;X=633 + .WORD 323. ;X=634 + .WORD 401. ;X=635 + .WORD 511. ;X=636 + .WORD 364. ;X=637 + .WORD 218. ;X=638 + .WORD 200. ;X=639 + .WORD 212. ;X=640 + .WORD 160. ;X=641 + .WORD 172. ;X=642 + .WORD 152. ;X=643 + .WORD 132. ;X=644 + .WORD 112. ;X=645 + .WORD 92. ;X=646 + .WORD 72. ;X=647 + .WORD 52. ;X=648 + .WORD 63. ;X=649 + .WORD 94. ;X=650 + .WORD 93. ;X=651 + .WORD 92. ;X=652 + .WORD 90. ;X=653 + .WORD 89. ;X=654 + .WORD 120. ;X=655 + .WORD 119. ;X=656 + .WORD 117. ;X=657 + .WORD 116. ;X=658 + .WORD 83. ;X=659 + .WORD 81. ;X=660 + .WORD 80. ;X=661 + .WORD 79. ;X=662 + .WORD 110. ;X=663 + .WORD 108. ;X=664 + .WORD 139. ;X=665 + .WORD 138. ;X=666 + .WORD 136. ;X=667 + .WORD 103. ;X=668 + .WORD 134. ;X=669 + .WORD 165. ;X=670 + .WORD 131. ;X=671 + .WORD 162. ;X=672 + .WORD 193. ;X=673 + .WORD 159. ;X=674 + .WORD 185. ;X=675 + .WORD 179. ;X=676 + .WORD 140. ;X=677 + .WORD 102. ;X=678 + .WORD 128. ;X=679 + .WORD 153. ;X=680 + .WORD 147. ;X=681 + .WORD 172. ;X=682 + .WORD 134. ;X=683 + .WORD 160. ;X=684 + .WORD 153. ;X=685 + .WORD 179. ;X=686 + .WORD 204. ;X=687 + .WORD 166. ;X=688 + .WORD 160. ;X=689 + .WORD 153. ;X=690 + .WORD 179. ;X=691 + .WORD 172. ;X=692 + .WORD 166. ;X=693 + .WORD 160. ;X=694 + .WORD 153. ;X=695 + .WORD 125. ;X=696 + .WORD 110. ;X=697 + .WORD 95. ;X=698 + .WORD 80. ;X=699 + .WORD 85. ;X=700 + .WORD 82. ;X=701 + .WORD 87. ;X=702 + .WORD 84. ;X=703 + .WORD 81. ;X=704 + .WORD 86. ;X=705 + .WORD 103. ;X=706 + .WORD 125. ;X=707 + .WORD 140. ;X=708 + .WORD 152. ;X=709 + .WORD 135. ;X=710 + .WORD 130. ;X=711 + .WORD 125. ;X=712 + .WORD 88. ;X=713 + .WORD 83. ;X=714 + .WORD 46. ;X=715 + .WORD 40. ;X=716 + .WORD 35. ;X=717 + .WORD 30. ;X=718 + .WORD 25. ;X=719 + .WORD 52. ;X=720 + .WORD 47. ;X=721 + .WORD 42. ;X=722 + .WORD 37. ;X=723 + .WORD 63. ;X=724 + .WORD 61. ;X=725 + .WORD 90. ;X=726 + .WORD 120. ;X=727 + .WORD 117. ;X=728 + .WORD 115. ;X=729 + .WORD 112. ;X=730 + .WORD 78. ;X=731 + .WORD 75. ;X=732 + .WORD 104. ;X=733 + .WORD 70. ;X=734 + .WORD 67. ;X=735 + .WORD 33. ;X=736 + .WORD 62. ;X=737 + .WORD 60. ;X=738 + .WORD 57. ;X=739 + .WORD 55. ;X=740 + .WORD 52. ;X=741 + .WORD 81. ;X=742 + .WORD 111. ;X=743 + .WORD 140. ;X=744 + .WORD 138. ;X=745 + .WORD 167. ;X=746 + .WORD 165. ;X=747 + .WORD 162. ;X=748 + .WORD 192. ;X=749 + .WORD 137. ;X=750 + .WORD 179. ;X=751 + .WORD 124. ;X=752 + .WORD 230. ;X=753 + .WORD 336. ;X=754 + .WORD 377. ;X=755 + .WORD 387. ;X=756 + .WORD 301. ;X=757 + .WORD 406. ;X=758 + .WORD 288. ;X=759 + .WORD 426. ;X=760 + .WORD 467. ;X=761 + .WORD 541. ;X=762 + .WORD 423. ;X=763 + .WORD 528. ;X=764 + .WORD 506. ;X=765 + .WORD 452. ;X=766 + .WORD 365. ;X=767 + .WORD 311. ;X=768 + .WORD 193. ;X=769 + .WORD 298. ;X=770 + .WORD 436. ;X=771 + .WORD 510. ;X=772 + .WORD 487. ;X=773 + .WORD 465. ;X=774 + .WORD 347. ;X=775 + .WORD 260. ;X=776 + .WORD 334. ;X=777 + .WORD 440. ;X=778 + .WORD 417. ;X=779 + .WORD 427. ;X=780 + .WORD 341. ;X=781 + .WORD 318. ;X=782 + .WORD 232. ;X=783 + .WORD 146. ;X=784 + .WORD 27. ;X=785 + .WORD 69. ;X=786 + .WORD 175. ;X=787 + .WORD 280. ;X=788 + .WORD 258. ;X=789 + .WORD 204. ;X=790 + .WORD 277. ;X=791 + .WORD 415. ;X=792 + .WORD 425. ;X=793 + .WORD 466. ;X=794 + .WORD 412. ;X=795 + .WORD 326. ;X=796 + .WORD 463. ;X=797 + .WORD 537. ;X=798 + .WORD 547. ;X=799 + .WORD 798. ;X=800 + .WORD 665. ;X=801 + .WORD 660. ;X=802 + .WORD 592. ;X=803 + .WORD 555. ;X=804 + .WORD 646. ;X=805 + .WORD 514. ;X=806 + .WORD 765. ;X=807 + .WORD 760. ;X=808 + .WORD 755. ;X=809 + .WORD 875. ;X=810 + .WORD 994. ;X=811 + .WORD 1081. ;X=812 + .WORD 1136. ;X=813 + .WORD 1223. ;X=814 + .WORD 1311. ;X=815 + .WORD 1398. ;X=816 + .WORD 1485. ;X=817 + .WORD 1604. ;X=818 + .WORD 1691. ;X=819 + .WORD 1747. ;X=820 + .WORD 1834. ;X=821 + .WORD 1921. ;X=822 + .WORD 1976. ;X=823 + .WORD 2095. ;X=824 + .WORD 2183. ;X=825 + .WORD 2238. ;X=826 + .WORD 2357. ;X=827 + .WORD 2412. ;X=828 + .WORD 2468. ;X=829 + .WORD 2422. ;X=830 + .WORD 2440. ;X=831 + .WORD 2523. ;X=832 + .WORD 2381. ;X=833 + .WORD 2336. ;X=834 + .WORD 2380. ;X=835 + .WORD 2392. ;X=836 + .WORD 2404. ;X=837 + .WORD 2449. ;X=838 + .WORD 2493. ;X=839 + .WORD 2505. ;X=840 + .WORD 2517. ;X=841 + .WORD 2562. ;X=842 + .WORD 2574. ;X=843 + .WORD 2586. ;X=844 + .WORD 2598. ;X=845 + .WORD 2643. ;X=846 + .WORD 2687. ;X=847 + .WORD 2731. ;X=848 + .WORD 2775. ;X=849 + .WORD 2849. ;X=850 + .WORD 2890. ;X=851 + .WORD 2932. ;X=852 + .WORD 2781. ;X=853 + .WORD 2759. ;X=854 + .WORD 2832. ;X=855 + .WORD 2810. ;X=856 + .WORD 2787. ;X=857 + .WORD 2509. ;X=858 + .WORD 2742. ;X=859 + .WORD 2752. ;X=860 + .WORD 2825. ;X=861 + .WORD 2899. ;X=862 + .WORD 2844. ;X=863 + .WORD 2822. ;X=864 + .WORD 2543. ;X=865 + .WORD 2777. ;X=866 + .WORD 2882. ;X=867 + .WORD 2892. ;X=868 + .WORD 2773. ;X=869 + .WORD 2879. ;X=870 + .WORD 2792. ;X=871 + .WORD 2770. ;X=872 + .WORD 2747. ;X=873 + .WORD 2629. ;X=874 + .WORD 2670. ;X=875 + .WORD 2391. ;X=876 + .WORD 2497. ;X=877 + .WORD 2570. ;X=878 + .WORD 2804. ;X=879 + .WORD 2781. ;X=880 + .WORD 2823. ;X=881 + .WORD 2544. ;X=882 + .WORD 2490. ;X=883 + .WORD 2435. ;X=884 + .WORD 2477. ;X=885 + .WORD 2518. ;X=886 + .WORD 2368. ;X=887 + .WORD 2313. ;X=888 + .WORD 2419. ;X=889 + .WORD 2524. ;X=890 + .WORD 2502. ;X=891 + .WORD 2479. ;X=892 + .WORD 2553. ;X=893 + .WORD 2562. ;X=894 + .WORD 2540. ;X=895 + .WORD 2549. ;X=896 + .WORD 2591. ;X=897 + .WORD 2664. ;X=898 + .WORD 2386. ;X=899 + .WORD 2455. ;X=900 + .WORD 2428. ;X=901 + .WORD 2145. ;X=902 + .WORD 2119. ;X=903 + .WORD 2156. ;X=904 + .WORD 2001. ;X=905 + .WORD 1974. ;X=906 + .WORD 2204. ;X=907 + .WORD 2145. ;X=908 + .WORD 2374. ;X=909 + .WORD 2476. ;X=910 + .PAGE +; +; THIS TABLE HOLDS THE FEATURES OF THE MOON +; THAT MAY CHANGE FROM TIME TO TIME. +; 0=NOTHING SPECIAL. +; 1=LANDED SHIP. +; 2=PLANTED AMERICAN FLAG. +; 3=DEAD SHIP TILTED LEFT. +; 4=DEAD SHIP TILTED RIGHT. +; 5=BOULDER. +; 6=MACDONALD'S +; 7=CENTER OF MACDONALD'S +; + .BYTE 0*20+0 ;X= -9 X=-10 + .BYTE 5*20+0 ;X= -7 X= -8 + .BYTE 0*20+0 ;X= -5 X= -6 + .BYTE 0*20+0 ;X= -3 X= -4 + .BYTE 0*20+0 ;X= -1 X= -2 +FEATUR: .BYTE 0*20+5 ;X= 1 X= 0 + .BYTE 0*20+0 ;X= 3 X= 2 + .BYTE 0*20+0 ;X= 5 X= 4 + .BYTE 0*20+0 ;X= 7 X= 6 + .BYTE 0*20+0 ;X= 9 X= 8 + .BYTE 0*20+0 ;X= 11 X= 10 + .BYTE 0*20+0 ;X= 13 X= 12 + .BYTE 0*20+0 ;X= 15 X= 14 + .BYTE 0*20+0 ;X= 17 X= 16 + .BYTE 0*20+0 ;X= 19 X= 18 + .BYTE 0*20+0 ;X= 21 X= 20 + .BYTE 0*20+0 ;X= 23 X= 22 + .BYTE 0*20+0 ;X= 25 X= 24 + .BYTE 0*20+5 ;X= 27 X= 26 + .BYTE 5*20+5 ;X= 29 X= 28 + .BYTE 0*20+0 ;X= 31 X= 30 + .BYTE 0*20+0 ;X= 33 X= 32 + .BYTE 0*20+0 ;X= 35 X= 34 + .BYTE 0*20+0 ;X= 37 X= 36 + .BYTE 0*20+0 ;X= 39 X= 38 + .BYTE 0*20+0 ;X= 41 X= 40 + .BYTE 0*20+0 ;X= 43 X= 42 + .BYTE 0*20+5 ;X= 45 X= 44 + .BYTE 0*20+0 ;X= 47 X= 46 + .BYTE 0*20+0 ;X= 49 X= 48 + .BYTE 5*20+5 ;X= 51 X= 50 + .BYTE 0*20+5 ;X= 53 X= 52 + .BYTE 5*20+5 ;X= 55 X= 54 + .BYTE 0*20+0 ;X= 57 X= 56 + .BYTE 0*20+0 ;X= 59 X= 58 + .BYTE 0*20+5 ;X= 61 X= 60 + .BYTE 0*20+5 ;X= 63 X= 62 + .BYTE 5*20+5 ;X= 65 X= 64 + .BYTE 5*20+0 ;X= 67 X= 66 + .BYTE 0*20+5 ;X= 69 X= 68 + .BYTE 5*20+5 ;X= 71 X= 70 + .BYTE 5*20+5 ;X= 73 X= 72 + .BYTE 5*20+0 ;X= 75 X= 74 + .BYTE 0*20+5 ;X= 77 X= 76 + .BYTE 0*20+5 ;X= 79 X= 78 + .BYTE 0*20+0 ;X= 81 X= 80 + .BYTE 0*20+5 ;X= 83 X= 82 + .BYTE 5*20+0 ;X= 85 X= 84 + .BYTE 0*20+5 ;X= 87 X= 86 + .BYTE 0*20+0 ;X= 89 X= 88 + .BYTE 0*20+5 ;X= 91 X= 90 + .BYTE 0*20+0 ;X= 93 X= 92 + .BYTE 0*20+0 ;X= 95 X= 94 + .BYTE 5*20+5 ;X= 97 X= 96 + .BYTE 0*20+0 ;X= 99 X= 98 + .BYTE 0*20+5 ;X=101 X=100 + .BYTE 5*20+5 ;X=103 X=102 + .BYTE 0*20+5 ;X=105 X=104 + .BYTE 5*20+5 ;X=107 X=106 + .BYTE 0*20+5 ;X=109 X=108 + .BYTE 0*20+5 ;X=111 X=110 + .BYTE 5*20+0 ;X=113 X=112 + .BYTE 5*20+5 ;X=115 X=114 + .BYTE 5*20+5 ;X=117 X=116 + .BYTE 5*20+5 ;X=119 X=118 + .BYTE 0*20+5 ;X=121 X=120 + .BYTE 5*20+5 ;X=123 X=122 + .BYTE 5*20+5 ;X=125 X=124 + .BYTE 5*20+5 ;X=127 X=126 + .BYTE 0*20+5 ;X=129 X=128 + .BYTE 5*20+5 ;X=131 X=130 + .BYTE 0*20+5 ;X=133 X=132 + .BYTE 5*20+5 ;X=135 X=134 + .BYTE 5*20+5 ;X=137 X=136 + .BYTE 5*20+5 ;X=139 X=138 + .BYTE 0*20+5 ;X=141 X=140 + .BYTE 0*20+5 ;X=143 X=142 + .BYTE 5*20+5 ;X=145 X=144 + .BYTE 5*20+5 ;X=147 X=146 + .BYTE 5*20+0 ;X=149 X=148 + .BYTE 5*20+5 ;X=151 X=150 + .BYTE 5*20+5 ;X=153 X=152 + .BYTE 5*20+5 ;X=155 X=154 + .BYTE 5*20+0 ;X=157 X=156 + .BYTE 0*20+0 ;X=159 X=158 + .BYTE 5*20+5 ;X=161 X=160 + .BYTE 0*20+5 ;X=163 X=162 + .BYTE 0*20+5 ;X=165 X=164 + .BYTE 5*20+5 ;X=167 X=166 + .BYTE 5*20+5 ;X=169 X=168 + .BYTE 5*20+5 ;X=171 X=170 + .BYTE 5*20+5 ;X=173 X=172 + .BYTE 0*20+5 ;X=175 X=174 + .BYTE 5*20+5 ;X=177 X=176 + .BYTE 0*20+5 ;X=179 X=178 + .BYTE 5*20+0 ;X=181 X=180 + .BYTE 0*20+5 ;X=183 X=182 + .BYTE 5*20+5 ;X=185 X=184 + .BYTE 5*20+5 ;X=187 X=186 + .BYTE 5*20+5 ;X=189 X=188 + .BYTE 5*20+5 ;X=191 X=190 + .BYTE 5*20+5 ;X=193 X=192 + .BYTE 5*20+5 ;X=195 X=194 + .BYTE 5*20+5 ;X=197 X=196 + .BYTE 0*20+5 ;X=199 X=198 + .BYTE 0*20+0 ;X=201 X=200 + .BYTE 5*20+0 ;X=203 X=202 + .BYTE 0*20+0 ;X=205 X=204 + .BYTE 0*20+0 ;X=207 X=206 + .BYTE 0*20+0 ;X=209 X=208 + .BYTE 0*20+5 ;X=211 X=210 + .BYTE 0*20+0 ;X=213 X=212 + .BYTE 0*20+0 ;X=215 X=214 + .BYTE 0*20+0 ;X=217 X=216 + .BYTE 0*20+0 ;X=219 X=218 + .BYTE 5*20+0 ;X=221 X=220 + .BYTE 5*20+5 ;X=223 X=222 + .BYTE 0*20+0 ;X=225 X=224 + .BYTE 0*20+0 ;X=227 X=226 + .BYTE 0*20+0 ;X=229 X=228 + .BYTE 0*20+0 ;X=231 X=230 + .BYTE 0*20+0 ;X=233 X=232 + .BYTE 0*20+5 ;X=235 X=234 + .BYTE 0*20+0 ;X=237 X=236 + .BYTE 0*20+0 ;X=239 X=238 + .BYTE 0*20+5 ;X=241 X=240 + .BYTE 0*20+0 ;X=243 X=242 + .BYTE 0*20+5 ;X=245 X=244 + .BYTE 0*20+0 ;X=247 X=246 + .BYTE 0*20+0 ;X=249 X=248 + .BYTE 0*20+5 ;X=251 X=250 + .BYTE 0*20+5 ;X=253 X=252 + .BYTE 0*20+0 ;X=255 X=254 + .BYTE 0*20+0 ;X=257 X=256 + .BYTE 0*20+0 ;X=259 X=258 + .BYTE 0*20+0 ;X=261 X=260 + .BYTE 0*20+0 ;X=263 X=262 + .BYTE 0*20+0 ;X=265 X=264 + .BYTE 0*20+5 ;X=267 X=266 + .BYTE 0*20+0 ;X=269 X=268 + .BYTE 0*20+0 ;X=271 X=270 + .BYTE 0*20+0 ;X=273 X=272 + .BYTE 0*20+0 ;X=275 X=274 + .BYTE 0*20+0 ;X=277 X=276 + .BYTE 0*20+0 ;X=279 X=278 + .BYTE 5*20+0 ;X=281 X=280 + .BYTE 0*20+0 ;X=283 X=282 + .BYTE 0*20+0 ;X=285 X=284 + .BYTE 0*20+0 ;X=287 X=286 + .BYTE 0*20+0 ;X=289 X=288 + .BYTE 0*20+0 ;X=291 X=290 + .BYTE 0*20+0 ;X=293 X=292 + .BYTE 0*20+0 ;X=295 X=294 + .BYTE 0*20+0 ;X=297 X=296 + .BYTE 0*20+0 ;X=299 X=298 + .BYTE 5*20+5 ;X=301 X=300 + .BYTE 5*20+5 ;X=303 X=302 + .BYTE 5*20+0 ;X=305 X=304 + .BYTE 5*20+5 ;X=307 X=306 + .BYTE 0*20+5 ;X=309 X=308 + .BYTE 5*20+5 ;X=311 X=310 + .BYTE 0*20+5 ;X=313 X=312 + .BYTE 5*20+5 ;X=315 X=314 + .BYTE 5*20+5 ;X=317 X=316 + .BYTE 5*20+5 ;X=319 X=318 + .BYTE 5*20+5 ;X=321 X=320 + .BYTE 5*20+5 ;X=323 X=322 + .BYTE 5*20+5 ;X=325 X=324 + .BYTE 5*20+5 ;X=327 X=326 + .BYTE 5*20+5 ;X=329 X=328 + .BYTE 5*20+5 ;X=331 X=330 + .BYTE 5*20+5 ;X=333 X=332 + .BYTE 5*20+5 ;X=335 X=334 + .BYTE 5*20+5 ;X=337 X=336 + .BYTE 5*20+5 ;X=339 X=338 + .BYTE 5*20+5 ;X=341 X=340 + .BYTE 5*20+5 ;X=343 X=342 + .BYTE 5*20+5 ;X=345 X=344 + .BYTE 5*20+5 ;X=347 X=346 + .BYTE 5*20+5 ;X=349 X=348 + .BYTE 0*20+0 ;X=351 X=350 + .BYTE 0*20+0 ;X=353 X=352 + .BYTE 0*20+0 ;X=355 X=354 + .BYTE 5*20+0 ;X=357 X=356 + .BYTE 5*20+5 ;X=359 X=358 + .BYTE 5*20+5 ;X=361 X=360 + .BYTE 0*20+0 ;X=363 X=362 + .BYTE 0*20+0 ;X=365 X=364 + .BYTE 0*20+0 ;X=367 X=366 + .BYTE 0*20+0 ;X=369 X=368 + .BYTE 0*20+0 ;X=371 X=370 + .BYTE 0*20+0 ;X=373 X=372 + .BYTE 0*20+0 ;X=375 X=374 + .BYTE 0*20+0 ;X=377 X=376 + .BYTE 0*20+5 ;X=379 X=378 + .BYTE 0*20+0 ;X=381 X=380 + .BYTE 0*20+5 ;X=383 X=382 + .BYTE 0*20+0 ;X=385 X=384 + .BYTE 0*20+5 ;X=387 X=386 + .BYTE 0*20+0 ;X=389 X=388 + .BYTE 0*20+0 ;X=391 X=390 + .BYTE 0*20+0 ;X=393 X=392 + .BYTE 0*20+0 ;X=395 X=394 + .BYTE 0*20+0 ;X=397 X=396 + .BYTE 0*20+0 ;X=399 X=398 + .BYTE 5*20+5 ;X=401 X=400 + .BYTE 5*20+5 ;X=403 X=402 + .BYTE 5*20+5 ;X=405 X=404 + .BYTE 5*20+5 ;X=407 X=406 + .BYTE 5*20+5 ;X=409 X=408 + .BYTE 5*20+5 ;X=411 X=410 + .BYTE 5*20+5 ;X=413 X=412 + .BYTE 5*20+5 ;X=415 X=414 + .BYTE 5*20+0 ;X=417 X=416 + .BYTE 5*20+5 ;X=419 X=418 + .BYTE 5*20+5 ;X=421 X=420 + .BYTE 0*20+5 ;X=423 X=422 + .BYTE 0*20+5 ;X=425 X=424 + .BYTE 0*20+0 ;X=427 X=426 + .BYTE 0*20+0 ;X=429 X=428 + .BYTE 0*20+5 ;X=431 X=430 + .BYTE 0*20+0 ;X=433 X=432 + .BYTE 5*20+0 ;X=435 X=434 + .BYTE 5*20+0 ;X=437 X=436 + .BYTE 0*20+0 ;X=439 X=438 + .BYTE 0*20+0 ;X=441 X=440 + .BYTE 0*20+0 ;X=443 X=442 + .BYTE 0*20+0 ;X=445 X=444 + .BYTE 0*20+0 ;X=447 X=446 + .BYTE 0*20+0 ;X=449 X=448 + .BYTE 5*20+0 ;X=451 X=450 + .BYTE 5*20+0 ;X=453 X=452 + .BYTE 0*20+5 ;X=455 X=454 + .BYTE 0*20+0 ;X=457 X=456 + .BYTE 5*20+0 ;X=459 X=458 + .BYTE 0*20+5 ;X=461 X=460 + .BYTE 0*20+5 ;X=463 X=462 + .BYTE 5*20+5 ;X=465 X=464 + .BYTE 0*20+5 ;X=467 X=466 + .BYTE 0*20+0 ;X=469 X=468 + .BYTE 0*20+5 ;X=471 X=470 + .BYTE 0*20+5 ;X=473 X=472 + .BYTE 0*20+5 ;X=475 X=474 + .BYTE 0*20+0 ;X=477 X=476 + .BYTE 0*20+5 ;X=479 X=478 + .BYTE 0*20+0 ;X=481 X=480 + .BYTE 0*20+0 ;X=483 X=482 + .BYTE 0*20+0 ;X=485 X=484 + .BYTE 0*20+0 ;X=487 X=486 + .BYTE 0*20+0 ;X=489 X=488 + .BYTE 0*20+0 ;X=491 X=490 + .BYTE 5*20+0 ;X=493 X=492 + .BYTE 0*20+0 ;X=495 X=494 + .BYTE 0*20+0 ;X=497 X=496 + .BYTE 0*20+0 ;X=499 X=498 + .BYTE 5*20+5 ;X=501 X=500 + .BYTE 5*20+5 ;X=503 X=502 + .BYTE 5*20+5 ;X=505 X=504 + .BYTE 5*20+5 ;X=507 X=506 + .BYTE 5*20+5 ;X=509 X=508 + .BYTE 5*20+5 ;X=511 X=510 + .BYTE 5*20+5 ;X=513 X=512 + .BYTE 5*20+0 ;X=515 X=514 + .BYTE 5*20+0 ;X=517 X=516 + .BYTE 5*20+5 ;X=519 X=518 + .BYTE 5*20+5 ;X=521 X=520 + .BYTE 5*20+5 ;X=523 X=522 + .BYTE 5*20+5 ;X=525 X=524 + .BYTE 5*20+0 ;X=527 X=526 + .BYTE 5*20+5 ;X=529 X=528 + .BYTE 5*20+5 ;X=531 X=530 + .BYTE 5*20+5 ;X=533 X=532 + .BYTE 0*20+5 ;X=535 X=534 + .BYTE 5*20+5 ;X=537 X=536 + .BYTE 5*20+0 ;X=539 X=538 + .BYTE 5*20+0 ;X=541 X=540 + .BYTE 5*20+5 ;X=543 X=542 + .BYTE 5*20+5 ;X=545 X=544 + .BYTE 5*20+5 ;X=547 X=546 + .BYTE 5*20+5 ;X=549 X=548 + .BYTE 5*20+5 ;X=551 X=550 + .BYTE 5*20+5 ;X=553 X=552 + .BYTE 5*20+0 ;X=555 X=554 + .BYTE 5*20+5 ;X=557 X=556 + .BYTE 5*20+5 ;X=559 X=558 + .BYTE 5*20+5 ;X=561 X=560 + .BYTE 5*20+5 ;X=563 X=562 + .BYTE 5*20+5 ;X=565 X=564 + .BYTE 5*20+5 ;X=567 X=566 + .BYTE 5*20+5 ;X=569 X=568 + .BYTE 5*20+5 ;X=571 X=570 + .BYTE 5*20+0 ;X=573 X=572 + .BYTE 5*20+5 ;X=575 X=574 + .BYTE 0*20+5 ;X=577 X=576 + .BYTE 0*20+5 ;X=579 X=578 + .BYTE 0*20+5 ;X=581 X=580 + .BYTE 5*20+0 ;X=583 X=582 + .BYTE 5*20+0 ;X=585 X=584 + .BYTE 5*20+5 ;X=587 X=586 + .BYTE 5*20+5 ;X=589 X=588 + .BYTE 5*20+5 ;X=591 X=590 + .BYTE 5*20+5 ;X=593 X=592 + .BYTE 5*20+5 ;X=595 X=594 + .BYTE 5*20+5 ;X=597 X=596 + .BYTE 5*20+5 ;X=599 X=598 + .BYTE 0*20+0 ;X=601 X=600 + .BYTE 0*20+0 ;X=603 X=602 + .BYTE 0*20+0 ;X=605 X=604 + .BYTE 0*20+0 ;X=607 X=606 + .BYTE 0*20+0 ;X=609 X=608 + .BYTE 0*20+0 ;X=611 X=610 + .BYTE 0*20+0 ;X=613 X=612 + .BYTE 0*20+0 ;X=615 X=614 + .BYTE 5*20+0 ;X=617 X=616 + .BYTE 5*20+0 ;X=619 X=618 + .BYTE 0*20+0 ;X=621 X=620 + .BYTE 0*20+0 ;X=623 X=622 + .BYTE 0*20+0 ;X=625 X=624 + .BYTE 0*20+0 ;X=627 X=626 + .BYTE 0*20+0 ;X=629 X=628 + .BYTE 0*20+0 ;X=631 X=630 + .BYTE 5*20+0 ;X=633 X=632 + .BYTE 0*20+0 ;X=635 X=634 + .BYTE 0*20+0 ;X=637 X=636 + .BYTE 0*20+0 ;X=639 X=638 + .BYTE 0*20+0 ;X=641 X=640 + .BYTE 0*20+0 ;X=643 X=642 + .BYTE 0*20+5 ;X=645 X=644 + .BYTE 0*20+0 ;X=647 X=646 + .BYTE 0*20+0 ;X=649 X=648 + .BYTE 0*20+5 ;X=651 X=650 + .BYTE 0*20+0 ;X=653 X=652 + .BYTE 0*20+0 ;X=655 X=654 + .BYTE 0*20+0 ;X=657 X=656 + .BYTE 0*20+0 ;X=659 X=658 + .BYTE 0*20+0 ;X=661 X=660 + .BYTE 0*20+0 ;X=663 X=662 + .BYTE 0*20+0 ;X=665 X=664 + .BYTE 0*20+0 ;X=667 X=666 + .BYTE 5*20+0 ;X=669 X=668 + .BYTE 5*20+5 ;X=671 X=670 + .BYTE 0*20+0 ;X=673 X=672 + .BYTE 0*20+0 ;X=675 X=674 + .BYTE 0*20+0 ;X=677 X=676 + .BYTE 0*20+0 ;X=679 X=678 + .BYTE 0*20+0 ;X=681 X=680 + .BYTE 0*20+0 ;X=683 X=682 + .BYTE 0*20+0 ;X=685 X=684 + .BYTE 0*20+0 ;X=687 X=686 + .BYTE 5*20+5 ;X=689 X=688 + .BYTE 0*20+5 ;X=691 X=690 + .BYTE 0*20+0 ;X=693 X=692 + .BYTE 0*20+0 ;X=695 X=694 + .BYTE 0*20+0 ;X=697 X=696 + .BYTE 0*20+0 ;X=699 X=698 + .BYTE 0*20+0 ;X=701 X=700 + .BYTE 7*20+6 ;X=703 X=702 + .BYTE 0*20+6 ;X=705 X=704 + .BYTE 5*20+0 ;X=707 X=706 + .BYTE 5*20+5 ;X=709 X=708 + .BYTE 5*20+0 ;X=711 X=710 + .BYTE 0*20+0 ;X=713 X=712 + .BYTE 5*20+0 ;X=715 X=714 + .BYTE 5*20+0 ;X=717 X=716 + .BYTE 0*20+0 ;X=719 X=718 + .BYTE 5*20+5 ;X=721 X=720 + .BYTE 5*20+5 ;X=723 X=722 + .BYTE 0*20+0 ;X=725 X=724 + .BYTE 0*20+5 ;X=727 X=726 + .BYTE 0*20+0 ;X=729 X=728 + .BYTE 5*20+0 ;X=731 X=730 + .BYTE 0*20+5 ;X=733 X=732 + .BYTE 5*20+5 ;X=735 X=734 + .BYTE 5*20+0 ;X=737 X=736 + .BYTE 0*20+0 ;X=739 X=738 + .BYTE 5*20+0 ;X=741 X=740 + .BYTE 5*20+0 ;X=743 X=742 + .BYTE 0*20+5 ;X=745 X=744 + .BYTE 0*20+0 ;X=747 X=746 + .BYTE 0*20+0 ;X=749 X=748 + .BYTE 5*20+0 ;X=751 X=750 + .BYTE 0*20+5 ;X=753 X=752 + .BYTE 0*20+0 ;X=755 X=754 + .BYTE 5*20+0 ;X=757 X=756 + .BYTE 5*20+0 ;X=759 X=758 + .BYTE 0*20+0 ;X=761 X=760 + .BYTE 0*20+0 ;X=763 X=762 + .BYTE 5*20+0 ;X=765 X=764 + .BYTE 0*20+0 ;X=767 X=766 + .BYTE 5*20+5 ;X=769 X=768 + .BYTE 5*20+0 ;X=771 X=770 + .BYTE 0*20+0 ;X=773 X=772 + .BYTE 5*20+0 ;X=775 X=774 + .BYTE 0*20+0 ;X=777 X=776 + .BYTE 5*20+0 ;X=779 X=778 + .BYTE 0*20+0 ;X=781 X=780 + .BYTE 0*20+0 ;X=783 X=782 + .BYTE 0*20+5 ;X=785 X=784 + .BYTE 0*20+0 ;X=787 X=786 + .BYTE 0*20+0 ;X=789 X=788 + .BYTE 0*20+0 ;X=791 X=790 + .BYTE 0*20+0 ;X=793 X=792 + .BYTE 0*20+0 ;X=795 X=794 + .BYTE 0*20+0 ;X=797 X=796 + .BYTE 0*20+0 ;X=799 X=798 + .BYTE 0*20+0 ;X=801 X=800 + .BYTE 0*20+0 ;X=803 X=802 + .BYTE 0*20+0 ;X=805 X=804 + .BYTE 0*20+5 ;X=807 X=806 + .BYTE 0*20+0 ;X=809 X=808 + .BYTE 0*20+0 ;X=811 X=810 + .BYTE 0*20+0 ;X=813 X=812 + .BYTE 0*20+0 ;X=815 X=814 + .BYTE 0*20+0 ;X=817 X=816 + .BYTE 0*20+0 ;X=819 X=818 + .BYTE 0*20+0 ;X=821 X=820 + .BYTE 0*20+0 ;X=823 X=822 + .BYTE 0*20+0 ;X=825 X=824 + .BYTE 5*20+0 ;X=827 X=826 + .BYTE 0*20+5 ;X=829 X=828 + .BYTE 0*20+0 ;X=831 X=830 + .BYTE 0*20+0 ;X=833 X=832 + .BYTE 0*20+0 ;X=835 X=834 + .BYTE 5*20+5 ;X=837 X=836 + .BYTE 0*20+0 ;X=839 X=838 + .BYTE 5*20+0 ;X=841 X=840 + .BYTE 0*20+5 ;X=843 X=842 + .BYTE 0*20+0 ;X=845 X=844 + .BYTE 0*20+0 ;X=847 X=846 + .BYTE 5*20+0 ;X=849 X=848 + .BYTE 5*20+5 ;X=851 X=850 + .BYTE 5*20+5 ;X=853 X=852 + .BYTE 5*20+0 ;X=855 X=854 + .BYTE 5*20+5 ;X=857 X=856 + .BYTE 5*20+5 ;X=859 X=858 + .BYTE 5*20+5 ;X=861 X=860 + .BYTE 5*20+5 ;X=863 X=862 + .BYTE 5*20+5 ;X=865 X=864 + .BYTE 5*20+5 ;X=867 X=866 + .BYTE 5*20+0 ;X=869 X=868 + .BYTE 5*20+0 ;X=871 X=870 + .BYTE 5*20+5 ;X=873 X=872 + .BYTE 0*20+5 ;X=875 X=874 + .BYTE 5*20+5 ;X=877 X=876 + .BYTE 5*20+5 ;X=879 X=878 + .BYTE 5*20+5 ;X=881 X=880 + .BYTE 5*20+5 ;X=883 X=882 + .BYTE 0*20+0 ;X=885 X=884 + .BYTE 5*20+5 ;X=887 X=886 + .BYTE 5*20+5 ;X=889 X=888 + .BYTE 5*20+5 ;X=891 X=890 + .BYTE 5*20+5 ;X=893 X=892 + .BYTE 5*20+5 ;X=895 X=894 + .BYTE 5*20+5 ;X=897 X=896 + .BYTE 5*20+5 ;X=899 X=898 + .BYTE 5*20+5 ;X=901 X=900 + .BYTE 5*20+5 ;X=903 X=902 + .BYTE 5*20+5 ;X=905 X=904 + .BYTE 5*20+5 ;X=907 X=906 + .BYTE 5*20+5 ;X=909 X=908 + .BYTE 0*20+5 ;X=911 X=910 + .EVEN ;MAKE SURE TO BRING TO BRING BYTES BACK. + .PAGE +; +; SINE AND COSINE TABLES FROM 0 TO 359 DEGREES. +; +SINTAB: 000000 ; 0 DEGREES. + 000436 ; 1 DEGREES. + 001074 ; 2 DEGREES. + 001531 ; 3 DEGREES. + 002167 ; 4 DEGREES. + 002624 ; 5 DEGREES. + 003261 ; 6 DEGREES. + 003715 ; 7 DEGREES. + 004350 ; 8 DEGREES. + 005003 ; 9 DEGREES. + 005435 ; 10 DEGREES. + 006066 ; 11 DEGREES. + 006516 ; 12 DEGREES. + 007146 ; 13 DEGREES. + 007574 ; 14 DEGREES. + 010220 ; 15 DEGREES. + 010644 ; 16 DEGREES. + 011266 ; 17 DEGREES. + 011707 ; 18 DEGREES. + 012326 ; 19 DEGREES. + 012744 ; 20 DEGREES. + 013360 ; 21 DEGREES. + 013772 ; 22 DEGREES. + 014402 ; 23 DEGREES. + 015010 ; 24 DEGREES. + 015414 ; 25 DEGREES. + 016016 ; 26 DEGREES. + 016416 ; 27 DEGREES. + 017014 ; 28 DEGREES. + 017407 ; 29 DEGREES. + 020000 ; 30 DEGREES. + 020366 ; 31 DEGREES. + 020752 ; 32 DEGREES. + 021333 ; 33 DEGREES. + 021712 ; 34 DEGREES. + 022265 ; 35 DEGREES. + 022636 ; 36 DEGREES. + 023204 ; 37 DEGREES. + 023547 ; 38 DEGREES. + 024107 ; 39 DEGREES. + 024443 ; 40 DEGREES. + 024775 ; 41 DEGREES. + 025323 ; 42 DEGREES. + 025646 ; 43 DEGREES. + 026165 ; 44 DEGREES. + 026501 ; 45 DEGREES. + 027012 ; 46 DEGREES. + 027316 ; 47 DEGREES. + 027620 ; 48 DEGREES. + 030115 ; 49 DEGREES. + 030407 ; 50 DEGREES. + 030675 ; 51 DEGREES. + 031157 ; 52 DEGREES. + 031435 ; 53 DEGREES. + 031707 ; 54 DEGREES. + 032155 ; 55 DEGREES. + 032417 ; 56 DEGREES. + 032655 ; 57 DEGREES. + 033106 ; 58 DEGREES. + 033334 ; 59 DEGREES. + 033555 ; 60 DEGREES. + 033772 ; 61 DEGREES. + 034202 ; 62 DEGREES. + 034406 ; 63 DEGREES. + 034606 ; 64 DEGREES. + 035001 ; 65 DEGREES. + 035170 ; 66 DEGREES. + 035352 ; 67 DEGREES. + 035527 ; 68 DEGREES. + 035700 ; 69 DEGREES. + 036044 ; 70 DEGREES. + 036203 ; 71 DEGREES. + 036336 ; 72 DEGREES. + 036464 ; 73 DEGREES. + 036605 ; 74 DEGREES. + 036722 ; 75 DEGREES. + 037031 ; 76 DEGREES. + 037134 ; 77 DEGREES. + 037232 ; 78 DEGREES. + 037323 ; 79 DEGREES. + 037407 ; 80 DEGREES. + 037466 ; 81 DEGREES. + 037541 ; 82 DEGREES. + 037606 ; 83 DEGREES. + 037646 ; 84 DEGREES. + 037702 ; 85 DEGREES. + 037730 ; 86 DEGREES. + 037752 ; 87 DEGREES. + 037766 ; 88 DEGREES. + 037776 ; 89 DEGREES. +COSTAB: 040000 ; 90 DEGREES. + 037776 ; 91 DEGREES. + 037766 ; 92 DEGREES. + 037752 ; 93 DEGREES. + 037730 ; 94 DEGREES. + 037702 ; 95 DEGREES. + 037646 ; 96 DEGREES. + 037606 ; 97 DEGREES. + 037541 ; 98 DEGREES. + 037466 ; 99 DEGREES. + 037407 ; 100 DEGREES. + 037323 ; 101 DEGREES. + 037232 ; 102 DEGREES. + 037134 ; 103 DEGREES. + 037031 ; 104 DEGREES. + 036722 ; 105 DEGREES. + 036605 ; 106 DEGREES. + 036464 ; 107 DEGREES. + 036336 ; 108 DEGREES. + 036203 ; 109 DEGREES. + 036044 ; 110 DEGREES. + 035700 ; 111 DEGREES. + 035527 ; 112 DEGREES. + 035352 ; 113 DEGREES. + 035170 ; 114 DEGREES. + 035001 ; 115 DEGREES. + 034606 ; 116 DEGREES. + 034406 ; 117 DEGREES. + 034202 ; 118 DEGREES. + 033772 ; 119 DEGREES. + 033555 ; 120 DEGREES. + 033334 ; 121 DEGREES. + 033106 ; 122 DEGREES. + 032655 ; 123 DEGREES. + 032417 ; 124 DEGREES. + 032155 ; 125 DEGREES. + 031707 ; 126 DEGREES. + 031435 ; 127 DEGREES. + 031157 ; 128 DEGREES. + 030675 ; 129 DEGREES. + 030407 ; 130 DEGREES. + 030115 ; 131 DEGREES. + 027620 ; 132 DEGREES. + 027316 ; 133 DEGREES. + 027012 ; 134 DEGREES. + 026501 ; 135 DEGREES. + 026165 ; 136 DEGREES. + 025646 ; 137 DEGREES. + 025323 ; 138 DEGREES. + 024775 ; 139 DEGREES. + 024443 ; 140 DEGREES. + 024107 ; 141 DEGREES. + 023547 ; 142 DEGREES. + 023204 ; 143 DEGREES. + 022636 ; 144 DEGREES. + 022265 ; 145 DEGREES. + 021712 ; 146 DEGREES. + 021333 ; 147 DEGREES. + 020752 ; 148 DEGREES. + 020366 ; 149 DEGREES. + 020000 ; 150 DEGREES. + 017407 ; 151 DEGREES. + 017014 ; 152 DEGREES. + 016416 ; 153 DEGREES. + 016016 ; 154 DEGREES. + 015414 ; 155 DEGREES. + 015010 ; 156 DEGREES. + 014402 ; 157 DEGREES. + 013772 ; 158 DEGREES. + 013360 ; 159 DEGREES. + 012744 ; 160 DEGREES. + 012326 ; 161 DEGREES. + 011707 ; 162 DEGREES. + 011266 ; 163 DEGREES. + 010644 ; 164 DEGREES. + 010220 ; 165 DEGREES. + 007574 ; 166 DEGREES. + 007146 ; 167 DEGREES. + 006516 ; 168 DEGREES. + 006066 ; 169 DEGREES. + 005435 ; 170 DEGREES. + 005003 ; 171 DEGREES. + 004350 ; 172 DEGREES. + 003715 ; 173 DEGREES. + 003261 ; 174 DEGREES. + 002624 ; 175 DEGREES. + 002167 ; 176 DEGREES. + 001531 ; 177 DEGREES. + 001074 ; 178 DEGREES. + 000436 ; 179 DEGREES. + 000000 ; 180 DEGREES. + 177344 ; 181 DEGREES. + 176706 ; 182 DEGREES. + 176247 ; 183 DEGREES. + 175613 ; 184 DEGREES. + 175156 ; 185 DEGREES. + 174521 ; 186 DEGREES. + 174065 ; 187 DEGREES. + 173430 ; 188 DEGREES. + 172775 ; 189 DEGREES. + 172343 ; 190 DEGREES. + 171712 ; 191 DEGREES. + 171262 ; 192 DEGREES. + 170634 ; 193 DEGREES. + 170206 ; 194 DEGREES. + 167560 ; 195 DEGREES. + 167134 ; 196 DEGREES. + 166512 ; 197 DEGREES. + 166073 ; 198 DEGREES. + 165452 ; 199 DEGREES. + 165036 ; 200 DEGREES. + 164421 ; 201 DEGREES. + 164010 ; 202 DEGREES. + 163400 ; 203 DEGREES. + 162772 ; 204 DEGREES. + 162364 ; 205 DEGREES. + 161762 ; 206 DEGREES. + 161362 ; 207 DEGREES. + 160766 ; 208 DEGREES. + 160371 ; 209 DEGREES. + 160002 ; 210 DEGREES. + 157412 ; 211 DEGREES. + 157026 ; 212 DEGREES. + 156445 ; 213 DEGREES. + 156070 ; 214 DEGREES. + 155513 ; 215 DEGREES. + 155142 ; 216 DEGREES. + 154574 ; 217 DEGREES. + 154233 ; 218 DEGREES. + 153673 ; 219 DEGREES. + 153335 ; 220 DEGREES. + 153005 ; 221 DEGREES. + 152455 ; 222 DEGREES. + 152134 ; 223 DEGREES. + 151613 ; 224 DEGREES. + 151277 ; 225 DEGREES. + 150770 ; 226 DEGREES. + 150462 ; 227 DEGREES. + 150162 ; 228 DEGREES. + 147663 ; 229 DEGREES. + 147373 ; 230 DEGREES. + 147105 ; 231 DEGREES. + 146623 ; 232 DEGREES. + 146345 ; 233 DEGREES. + 146073 ; 234 DEGREES. + 145625 ; 235 DEGREES. + 145363 ; 236 DEGREES. + 145125 ; 237 DEGREES. + 144672 ; 238 DEGREES. + 144446 ; 239 DEGREES. + 144225 ; 240 DEGREES. + 144010 ; 241 DEGREES. + 143576 ; 242 DEGREES. + 143372 ; 243 DEGREES. + 143174 ; 244 DEGREES. + 143001 ; 245 DEGREES. + 142612 ; 246 DEGREES. + 142430 ; 247 DEGREES. + 142253 ; 248 DEGREES. + 142102 ; 249 DEGREES. + 141736 ; 250 DEGREES. + 141575 ; 251 DEGREES. + 141442 ; 252 DEGREES. + 141314 ; 253 DEGREES. + 141173 ; 254 DEGREES. + 141060 ; 255 DEGREES. + 140747 ; 256 DEGREES. + 140644 ; 257 DEGREES. + 140550 ; 258 DEGREES. + 140457 ; 259 DEGREES. + 140371 ; 260 DEGREES. + 140312 ; 261 DEGREES. + 140241 ; 262 DEGREES. + 140174 ; 263 DEGREES. + 140132 ; 264 DEGREES. + 140100 ; 265 DEGREES. + 140050 ; 266 DEGREES. + 140030 ; 267 DEGREES. + 140012 ; 268 DEGREES. + 140004 ; 269 DEGREES. + 140000 ; 270 DEGREES. + 140004 ; 271 DEGREES. + 140012 ; 272 DEGREES. + 140030 ; 273 DEGREES. + 140050 ; 274 DEGREES. + 140100 ; 275 DEGREES. + 140132 ; 276 DEGREES. + 140174 ; 277 DEGREES. + 140241 ; 278 DEGREES. + 140312 ; 279 DEGREES. + 140371 ; 280 DEGREES. + 140457 ; 281 DEGREES. + 140550 ; 282 DEGREES. + 140644 ; 283 DEGREES. + 140747 ; 284 DEGREES. + 141060 ; 285 DEGREES. + 141173 ; 286 DEGREES. + 141314 ; 287 DEGREES. + 141442 ; 288 DEGREES. + 141575 ; 289 DEGREES. + 141736 ; 290 DEGREES. + 142102 ; 291 DEGREES. + 142253 ; 292 DEGREES. + 142430 ; 293 DEGREES. + 142612 ; 294 DEGREES. + 143001 ; 295 DEGREES. + 143174 ; 296 DEGREES. + 143372 ; 297 DEGREES. + 143576 ; 298 DEGREES. + 144010 ; 299 DEGREES. + 144225 ; 300 DEGREES. + 144446 ; 301 DEGREES. + 144672 ; 302 DEGREES. + 145125 ; 303 DEGREES. + 145363 ; 304 DEGREES. + 145625 ; 305 DEGREES. + 146073 ; 306 DEGREES. + 146345 ; 307 DEGREES. + 146623 ; 308 DEGREES. + 147105 ; 309 DEGREES. + 147373 ; 310 DEGREES. + 147663 ; 311 DEGREES. + 150162 ; 312 DEGREES. + 150463 ; 313 DEGREES. + 150770 ; 314 DEGREES. + 151277 ; 315 DEGREES. + 151613 ; 316 DEGREES. + 152134 ; 317 DEGREES. + 152455 ; 318 DEGREES. + 153005 ; 319 DEGREES. + 153335 ; 320 DEGREES. + 153673 ; 321 DEGREES. + 154233 ; 322 DEGREES. + 154574 ; 323 DEGREES. + 155142 ; 324 DEGREES. + 155513 ; 325 DEGREES. + 156070 ; 326 DEGREES. + 156445 ; 327 DEGREES. + 157026 ; 328 DEGREES. + 157412 ; 329 DEGREES. + 160000 ; 330 DEGREES. + 160371 ; 331 DEGREES. + 160766 ; 332 DEGREES. + 161362 ; 333 DEGREES. + 161762 ; 334 DEGREES. + 162364 ; 335 DEGREES. + 162772 ; 336 DEGREES. + 163400 ; 337 DEGREES. + 164010 ; 338 DEGREES. + 164422 ; 339 DEGREES. + 165036 ; 340 DEGREES. + 165452 ; 341 DEGREES. + 166073 ; 342 DEGREES. + 166512 ; 343 DEGREES. + 167134 ; 344 DEGREES. + 167560 ; 345 DEGREES. + 170206 ; 346 DEGREES. + 170634 ; 347 DEGREES. + 171262 ; 348 DEGREES. + 171712 ; 349 DEGREES. + 172343 ; 350 DEGREES. + 172775 ; 351 DEGREES. + 173430 ; 352 DEGREES. + 174065 ; 353 DEGREES. + 174521 ; 354 DEGREES. + 175156 ; 355 DEGREES. + 175613 ; 356 DEGREES. + 176247 ; 357 DEGREES. + 176706 ; 358 DEGREES. + 177344 ; 359 DEGREES. + .PAGE +; +; THIS IS THE SHIP BUFFER FOR STORING THE SPACE SHIP. +; THERE ARE TWO OF THEM TO AVOID PROBLEMS. +; +SHIPLC: .WORD SHIPB1 ;BUFFER POINTERS. + .WORD SHIPB2 +DRWSHP: .WORD 114120 ;BASIC SHIP START. + .WORD 170200 +SHOWX: .WORD 0 +SHOWY: .WORD 0 + .WORD DISTOP ;THE SUBROUTINE CALL NOW. +SHIPDP: .WORD 0 + .WORD DISTOP + .WORD 0 +; +; ROCKET FLAME CONTROL, AND BUFFER. +; +ONFIRE: .WORD DISTOP +FSUBC: .WORD 0 + .WORD DISTOP + .WORD 0 +; +; MESSAGE DISPLAY CONTROL. +; +INFO: .WORD DISTOP +SYSMES: .WORD 0 + .WORD DISTOP + .WORD 0 +; +; THIS SECTION CONTROLS THE DUST WHEN THE +; ROCKET FLAME HITS THE SURFACE OF THE MOON. +; +DRWDST: .WORD DISTOP +DUSTON: .WORD 0 + .WORD DISTOP + .WORD 0 +; +; THIS SECTION DRAWS AND STORES THE MOON, WHEN NECESSARY. +; +DRWLUN: .WORD DISTOP +MOONGO: .WORD 0 ;OVERLAYED BY POINTER + .WORD DISTOP + .WORD 0 +SHIPB1: + .=.+84. +SHIPB2: + .=.+84. +FLAMIN: + .=.+66. +; +; THIS SECTION IS WHERE THE EXPLOSION GOES (ALSO THE +; DUST FROM THE ROCKET ENGINE). +; +EXLIST: + .=.+2602. ;IT'S BIG (241*2*2+1) BUT NOT USED + ;JUST TO GIVE US A SIZE FEELING. + .=.+100. ;ALLOCATE 100 WORDS FOR THE STACK +STACK: .WORD ;DO NOT PUT ANYTHING IN IT + ;JUST DEFINE IT. + .PAGE +; +; THIS IS THE MESSAGE THAT IS DISPLAYED WHEN +; STARTING UP THE FIRST TIME +; +STARTM: .WORD 116720 + .WORD 0. + .WORD 650. + .WORD 170240 + .WORD 100000 + .ASCII ' R T - 1 1 L U N A R L A N D E R' + .BYTE 15,12 + .ASCII ' -----------------------------' + .BYTE 15,12,12,12 + .ASCII ' ALL INTERNAL NAVIGATIONAL SYSTEMS HAVE DIED ON YOU' + .BYTE 15,12 + .ASCII / IT LOOKS AS THOUGH YOU'RE GOING TO HAVE TO/ + .BYTE 15,12 + .ASCII ' LAND THIS THING ON YOUR OWN' + .BYTE 15,12,12 + .ASCII ' ***** GOOD BYE, GOOD LUCK, AND SORRY *****' + .BYTE 0 + .=.-1 + .EVEN + .WORD DISJMP + .WORD STARTM + .END START ;RESTART ADDRESS. +