home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-04-01 | 145.2 KB | 5,102 lines |
- ;*********************************************************************
- ;
- ; 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 <ONCE ONLY>
- 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
- ; <OR IT SHOULD, ANYWAY.>.
- ;
- 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<X>
- 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 <YET!>
- 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!!!!!!!
- ; <OR GET A HAMBURGER>.
- 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.
- ; <WITH A M*A*N, NO LESS>
- ; 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 <AGAIN>.
- 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 <OR LESS>
- 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 <Y>.
- 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 ;---<<INSTRUCTION CHANGED>>---
- 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. <INVERT>.
- 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 <IF ANY>.
- 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 <LEFT,RIGHT AND TOP.>.
- ;
- 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 SURVIVORS'
- .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 <OCTAGON>.
- .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. <ROCK TO YOU STUPID PEOPLES>
- ; 6=MACDONALD'S <LEFT OR RIGHT EDGES ONLY>
- ; 7=CENTER OF MACDONALD'S <WHERE TO DRAW CENTER OF IT>
- ;
- .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.
-