;********************************************************************* | |
; | |
; 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 SURVIRORS' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISTOP | |
.WORD 0 | |
ANGLEM: .WORD 117520 | |
.WORD 100. | |
.WORD 570. | |
.WORD 100000 | |
.ASCII 'BUT THE ANGLE WAS TOO GREAT AND THE SHIP TIPPED OVER' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
ANGLEJ: .WORD 117520 | |
.WORD 100. | |
.WORD 540. | |
.WORD 100000 | |
.ASCII 'SORRY, BUT THERE WERE ' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD 103630 | |
.ASCII 'NO' | |
.WORD 103520 | |
.ASCII ' SURVIVORS' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISTOP | |
.WORD 0 | |
SIDEM: .WORD 117520 | |
.WORD 100. | |
.WORD 570. | |
.WORD 100000 | |
.ASCII 'BUT THE HORIZONTAL VELOCITY WAS TOO GREAT, AND YOU CRASHED ANYWAY' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISJMP | |
.WORD ANGLEJ ;DO A DISPLAY JUMP INTO ANGLEM. | |
BUMPYM: .WORD 117520 | |
.WORD 100. | |
.WORD 570. | |
.WORD 100000 | |
.ASCII 'BUT THE TERRAIN IS TOO ROUGH, AND YOU TIPPED OVER' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISJMP | |
.WORD ANGLEJ | |
ROCKMS: .WORD 117520 | |
.WORD 100. | |
.WORD 570. | |
.WORD 100000 | |
.ASCII 'YOU JUST CRASHED INTO THAT ROCK' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISJMP | |
.WORD ANGLEJ | |
OLDMS: .WORD 117520 | |
.WORD 100. | |
.WORD 570. | |
.WORD 100000 | |
.ASCII 'YOU JUST CRASHED ON TOP OF AN OLD LUNAR MODULE' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISJMP | |
.WORD ANGLEJ | |
FLAGMS: .WORD 117520 | |
.WORD 50. | |
.WORD 3. | |
.WORD 100000 | |
.ASCII 'YOU HAVE JUST VAPORIZED A PREVIOUSLY PLANTED AMERICAN FLAG' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISTOP | |
.WORD 0 | |
OLDTLT: .WORD 117520 | |
.WORD 100. | |
.WORD 570. | |
.WORD 100000 | |
.ASCII 'NICE WORK. YOU JUST CRASHED INTO A PREVIOUSLY CRASHED SHIP' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISJMP | |
.WORD ANGLEJ | |
MACDED: .WORD 117520 | |
.WORD 10. | |
.WORD 570. | |
.WORD 100000 | |
.ASCII 'W' | |
.BYTE 145,154,154 | |
.ASCII ', ' | |
.BYTE 171,157,165 | |
.ASCII "'" | |
.BYTE 166,145,40,152,165,163,164,40,144,145,163 | |
.BYTE 164,162,157,171,145,144,40,164,150,145,40 | |
.BYTE 157,156,154,171 | |
.ASCII ' M' | |
.BYTE 141,143 | |
.ASCII 'D' | |
.BYTE 157,156,141,154,144 | |
.ASCII "'" | |
.BYTE 163 | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD 117520 | |
.WORD 10. | |
.WORD 540. | |
.WORD 100000 | |
.BYTE 157,156,40,164,150,145,40,155,157,157,156 | |
.ASCII '. W' | |
.BYTE 150,141,164,40,141 | |
.ASCII ' CLOD.' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISTOP | |
.WORD 0 | |
ORDER: .WORD 117520 | |
.WORD 150. | |
.WORD 2. | |
.WORD 100000 | |
.WORD 170260 | |
.ASCII 'TWO CHEESEBURGERS AND A BIG MAC TO GO.' | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISTOP | |
.WORD 0 | |
MANMSG: .WORD 117520 | |
.WORD 50. | |
.WORD 2. | |
.WORD 100000 | |
.WORD 170260 | |
.ASCII "THAT'S ONE SMALL STEP FOR A MAN, ONE GIANT LEAP FOR MANKIND." | |
.BYTE 0 | |
.=.-1 | |
.EVEN | |
.WORD DISTOP | |
.WORD 0 | |
.PAGE | |
; | |
; THIS LITTLE SECTION CONTAINS THE CODE | |
; FOR DRAWING THE CONTROLLING ARROWS | |
; FOR HANDLING THE DEGREES OF ROTATION. | |
; SMALL LEFT ARROW. | |
; | |
.WORD -15. | |
SLEFTA: .WORD 114020 | |
.WORD 170240 | |
.WORD SLFTAX | |
.WORD SLFTAY | |
.WORD 113144 | |
.WORD 20.+LEFT+INT | |
.WORD 0. | |
LEFTC: .WORD 12.+INT | |
.WORD 8. | |
.WORD 12.+LEFT | |
.WORD 8.+DOWN | |
.WORD 12.+INT | |
.WORD 8.+DOWN | |
.WORD DISTOP | |
.WORD 0 | |
.WORD -100. | |
BLEFTA: .WORD 114020 | |
.WORD 170240 | |
.WORD BLFTAX | |
.WORD BLFTAY | |
.WORD 113144 | |
.WORD 40.+LEFT+INT | |
.WORD 0 | |
.WORD DISJMP | |
.WORD LEFTC | |
.WORD 15. | |
SRGTA: .WORD 114020 ;SMALL RIGHT ARROW. | |
.WORD 170240 | |
.WORD SRGTAX | |
.WORD SRGTAY | |
.WORD 113144 | |
.WORD 20.+INT | |
.WORD 0 | |
RGTC: .WORD 12.+INT+LEFT | |
.WORD 8. | |
.WORD 12. | |
.WORD 8.+DOWN | |
.WORD 12.+LEFT+INT | |
.WORD 8.+DOWN | |
.WORD DISTOP | |
.WORD 0 | |
.WORD 100. | |
BRGTA: .WORD 114020 | |
.WORD 170240 | |
.WORD BRGTAX | |
.WORD BRGTAY | |
.WORD 113144 | |
.WORD 40.+INT | |
.WORD 0 | |
.WORD DISJMP | |
.WORD RGTC | |
.PAGE | |
; | |
; THIS IS THE LIGHT PEN BAR WHICH CONTROLS THE | |
; THRUST OF THE ROCKET ENGINE. | |
; | |
LPBAR: .WORD 116764 | |
.WORD 170200 | |
.WORD BARLX+0 | |
.WORD BARTY | |
.WORD 110140 | |
.WORD INT | |
.WORD BARSIZ+DOWN | |
.WORD 3 | |
.WORD BARSIZ | |
.WORD INT | |
.WORD BARSIZ+DOWN | |
.WORD 3 | |
.WORD BARSIZ | |
.WORD INT | |
.WORD BARSIZ+DOWN | |
.WORD 114100 | |
.WORD BARMXR ;NOW MOVE OVER TO THE BAR POSITION. | |
LPBARY: .WORD 0 ;VERTICAL HEIGHT GOES HERE. | |
.WORD 110000 | |
.WORD BARMXL+INT ;BE CAREFULL OF SIGN OF THIS ONE. | |
.WORD 0 | |
.WORD BAREST | |
.WORD 0 | |
.WORD 100000 ;ENTER CHARACTER MODE NOW. | |
LPBARC: .ASCII ' % ' ;OVERLAYED WITH A NUMBER. | |
LPSW: .WORD DISTOP ;0 ON FUEL LOW--FALL TO NEXT MSG | |
.WORD 0 | |
.WORD 117130 | |
.WORD 350. | |
.WORD 700. | |
.WORD 100000 | |
.ASCII 'FUEL LOW' | |
.WORD DISTOP | |
.WORD 0 | |
.PAGE | |
; | |
; ;THIS IS THE BASIC ROCK COMMANDS. | |
; | |
ROCKL: .WORD 116727 | |
.WORD 170240 | |
ROCKX: .WORD 0 | |
ROCKY: .WORD 0 | |
.WORD 104000 | |
.WORD 14.+OTHER*200+8.+OTHER | |
.WORD OTHER+6+INTTWO*200+8. | |
.WORD 4+INTTWO*200+6 | |
.WORD 0+INTTWO*200+6 | |
.WORD 2+INTTWO*200+2 | |
.WORD 2+INTTWO*200+4 | |
.WORD 6+INTTWO*200+6 | |
.WORD INTTWO*200+4 | |
.WORD 4+INTTWO*200+2 | |
.WORD 2+INTTWO*200+0 | |
.WORD 2+INTTWO*200+2+OTHER | |
.WORD 6+INTTWO*200+2+OTHER | |
.WORD 4+INTTWO*200+2+OTHER | |
.WORD 2+INTTWO*200+6+OTHER | |
.WORD 6+INTTWO*200+6+OTHER | |
.WORD INTTWO*200+4+OTHER | |
.WORD 2+INTTWO*200+4+OTHER | |
.WORD 2+OTHER+INTTWO*200+4+OTHER | |
.WORD 2+OTHER+INTTWO*200+8.+OTHER | |
.WORD DISTOP | |
.WORD 0 | |
ROCKEN: ;NEXT LOCATION AFTER ROCKS. | |
.PAGE | |
; | |
; THIS LIST EXPLAINS HOW TO DRAW THE MACDONALD'S. | |
; | |
MACS: 117724 | |
170240 | |
MACX: .WORD 0 | |
MACY: .WORD 0 | |
.WORD 104000 | |
.WORD 18.*200 | |
.WORD 107000 | |
.WORD 30.+INT | |
.WORD 54.*200+INT | |
.WORD 30.+OTHER+INT | |
.WORD 54.+OTHER*200+INT | |
.WORD 105324 | |
.WORD 12.*200 | |
.WORD 8.+INT | |
.WORD 6.*200+INT | |
.WORD 8.+OTHER+INT | |
.WORD 19.+OTHER*200 | |
.WORD 110000 | |
.WORD 73.+LEFT | |
.WORD 0. | |
.WORD DISTOP | |
.WORD ARCH | |
.WORD 104000 | |
.WORD 22.*200 | |
; | |
; NOTICE HOW I FALL THROUGH TO DRAW THE | |
; SECOND ARCH. CLEVER, CLEVER. | |
; | |
ARCH: .WORD 107724 | |
.WORD 17.+OTHER*200+OTHER+3. | |
.WORD 1*200+10.+INT | |
.WORD 1*200+9.+INT | |
.WORD 1*200+6+INT | |
.WORD 1*200+5+INT | |
.WORD 1*200+4+INT | |
.WORD 1*200+2+INT | |
.WORD 1*200+4+INT | |
.WORD 2*200+5+INT | |
.WORD 1*200+1+INT | |
.WORD 2*200+4+INT | |
.WORD 3*200+2+INT | |
.WORD 1*200+1+INT | |
.WORD 2*200+0+INT | |
.WORD 1*200+1+INT+OTHER | |
.WORD 3*200+2+INT+OTHER | |
.WORD 2*200+4+INT+OTHER | |
.WORD 1*200+1+INT+OTHER | |
.WORD 2*200+5+INT+OTHER | |
.WORD 1*200+4+INT+OTHER | |
.WORD 1*200+2+INT+OTHER | |
.WORD 1*200+4+INT+OTHER | |
.WORD 1*200+5+INT+OTHER | |
.WORD 1*200+6+INT+OTHER | |
.WORD 1*200+9.+INT+OTHER | |
.WORD 1*200+10.+INT+OTHER | |
.WORD 17.+OTHER*200+3. | |
.WORD DISTOP | |
.WORD 0 | |
.PAGE | |
; | |
; THIS LIST EXPLAINS HOW TO DRAW A MAN. | |
; | |
MAN: .WORD 116720 ;DON'T MAKE HIM TOO BRIGHT. | |
MANX: .WORD 0 | |
MANY: .WORD 0 | |
.WORD 104000 ;ALL SHORT VECTORS. | |
.WORD 400 ;INVISIBLE 2 RIGHT. | |
.WORD INT+20000+404 ;LEFT TWO, UP FOUR. | |
.WORD INT+20000+1104 ;LEFT FOUR, DOWN 4. | |
.WORD 1004 ;INVISIBLE, UP 4, RIGHT 4 | |
.WORD INT+5 ;UP FIVE. | |
.WORD INT+200 ;RIGHT ONE | |
.WORD INT+201 ;RIGHT ONE, UP ONE. | |
.WORD INT+1 ;UP ONE | |
.WORD INT+20000+201 ;LEFT ONE, UP ONE. | |
.WORD INT+20000+400 ;LEFT TWO. | |
.WORD INT+20000+301 ;LEFT ONE, DOWN ONE. | |
.WORD INT+101 ;DOWN ONE. | |
.WORD INT+301 ;DOWN ONE, RIGHT ONE. | |
.WORD INT+200 ;RIGHT ONE. | |
.WORD 101 ;DOWN ONE. | |
.WORD INT+1203 ;RIGHT FIVE, UP THREE. | |
.WORD 20000+1305 ;LEFT FIVE, DOWN FIVE. | |
.WORD INT+20000+1403 ;LEFT SIX, UP THREE. | |
.WORD DISTOP | |
.WORD 0 | |
.PAGE | |
; | |
; THIS LIST EXPLAINS HOW TO DRAW A FLAG. | |
; | |
FLAGL: .WORD 115324 | |
.WORD 170240 | |
FLAGX: .WORD 0 | |
FLAGY: .WORD 0 | |
.WORD 104000 | |
.WORD 18.+INT | |
.WORD 112727 | |
.WORD 16.+INT | |
.WORD 0 | |
.WORD INT | |
.WORD 8.+DOWN | |
.WORD 16.+INT+LEFT | |
.WORD 0 | |
.WORD 112326 | |
.WORD 0 | |
.WORD 3 | |
.WORD 16.+INT | |
.WORD 0 | |
.WORD 0 | |
.WORD 2 | |
.WORD 16.+INT+LEFT | |
.WORD 0 | |
.WORD DISTOP | |
.WORD 0 | |
FLAGEN: ;NEXT LOCATION AFTER FLAG. | |
.PAGE | |
; | |
; COMMANDS FOR DISPLAYING THE LUNAR MODULE. | |
; | |
DESIGN: .WORD DRAWIN,170200 ;LOAD STATUS. | |
.WORD DRAWIN,107124 ;AND SHORT VECTORS, INTENSITY 4. | |
.WORD DRAWIS ;DRAW BODY OF SHIP NOW. | |
.BYTE -6.,0. | |
.WORD DRAWVS | |
.BYTE -14.,8. | |
.WORD DRAWVS | |
.BYTE -14.,20. | |
.WORD DRAWVS | |
.BYTE -6.,29. | |
.WORD DRAWVS | |
.BYTE 6.,29. | |
.WORD DRAWVS | |
.BYTE 14.,20. | |
.WORD DRAWVS | |
.BYTE 14.,8. | |
.WORD DRAWVS | |
.BYTE 6.,0. | |
.WORD DRAWVS | |
.BYTE -6.,0. ;TOP OF SHIP DONE <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. | |