;This is the source code for one of the first Arcade
; games it was created at Stanford in the early 70s.
;Created by Bill Pitts and Hugh Tuck in 1971.
;It is written for the PDP-11 in machine language.

.TITLE	Galaxy Game
.PSECT ,ABS			;OCR and Typed By Quantum Leaper

R0 = %0 			;Thanks to
R1 = %1 			;Rob and Gatinho
R2 = %2 			;for all the help in fixing
R3 = %3 			;the code.
R4 = %4 			;version 1.2.2
R5 = %5 			;finished checking code
SP = %6 			;no errors?
PC = %7


DIV	=	   177300
AC	=	   177302
MQ	=	   177304
LSH	=	   177314
ASH	=	   177316
LKV	=	   100

X	=	   177532
Y	=	   177522
SR	=	   177534
COINAC	=	   177524

FX	=	   601
FY	=	   401

NTERM	=	   2


	. =	   500


START:	MOV	   PC,SP
	TST	   -(SP)
	MOV	   #PDOWN,24		  ;POWER FAIL
	MOV	   #100,177546		  ;LKS
	MOV	   #LKV,R0
	MOV	   #LOOTIN,(R0)+
	MOV	   #340,(R0)
	CLR	   GAMEON
	WAIT
	BR	   .-2

PDOWN:	MOV	   #START,24
	HALT

READAC: MOV	   COINAC,R0
	MOV	   #FY,Y
	MOV	   #1,R1
	MOV	   LASTON,R2
	MOV	   #3,R3
	JSR	   PC,COININ
	ADD	   R3,GMSLFT
	ADD	   R3,17432
	ASL	   R1
	JSR	   PC,COININ
	INC	   GMSLFT
	INC	   17432
	MOV	   #400,R1
	JSR	   PC,COININ
	ADD	   R3,GMSLFT+2
	ADD	   R3,17432
	ASL	   R1
	JSR	   PC,COININ
	INC	   GMSLFT+2
	INC	   17432
	MOV	   R2,LASTON
	RTS	   PC


LOOTIN: JSR	   PC,RSAVE
	JSR	   PC,READAC
	BIT	   #2000,COINAC
	BEQ	   .+16
	TSTB	   177564
	BPL	   .-4
	MOV	   #207,177566
	TST	   GAMEON
	BLT	   INFO-10
	BIT	   #4,COINAC
	BEQ	   .+16
	MOV	   #1,GMSLFT
	MOV	   #1,GMSLFT+2
	TST	   GMSLFT
	BGT	   INFO-6
	TST	   GMSLFT+2
	BGT	   INFO-6
	MOV	   #MESS10,R3
	JSR	   PC,REFRSH+6
	MOV	   #MESS11,R3
	JSR	   PC,REFRSH+6
	MOV	   #MESS12,R3
	JSR	   PC,REFRSH+6
	BR	   CRTI

	CLR	   177546
	CLR	   R0
INFO:	BIT	   TEST(R0),SR
	BEQ	   .+4
	INC	   R0
	MOV	   R0,-(SP)
	JSR	   PC,REFRSH
	MOV	   (SP)+,R0
	BIC	   #1,R0
	TST	   (R0)+
	CMP	   R0,#6
	BNE	   .+12
	JSR	   PC,READAC
	MOV	   #6,R0
	CMP	   R0,#10
	BLT	   INFO
	JSR	   PC,REFRSH
	DEC	   RTIME
	BGT	   .+30
	MOVB	   MESS7-3,TLIFE+1
	MOVB	   TLIFE,MESS7-3
	SWAB	   TLIFE
	MOV	   #4,RTIME
	MOV	   GMSLFT,R0
	ADD	   #60,R0
	MOVB	   R0,MESS13+6
	MOV	   GMSLFT+2,R0
	ADD	   #60,R0
	MOVB	   R0,MESS13+33
	MOV	   #MESS13,R3
	JSR	   PC,REFRSH+6
	MOV	   #100,177546		  ;LKS
	MOV	   SR,R0
	BIT	   #37477,R0
	BEQ	   CRTI
	BIC	   #37477,R0
	MOV	   R0,XMHS
	DEC	   GAMEON
	CLR	   DUMMY
	CLR	   DUMMY+2
	CLR	   R0
	DEC	   GMSLFT
	BGE	   .+14
	INC	   R0
	CLR	   GMSLFT
	DEC	   DUMMY
	DEC	   GMSLFT+2
	BGE	   .+14
	TST	   (R0)+
	CLR	   GMSLFT+2
	DEC	   DUMMY+2
	TST	   R0
	BEQ	   CRTI-6
	BIT	   #100,SR
	BNE	   CRTI-6
	BIC	   #1,R0
	INC	   GMSLFT(R0)
	MOVB	   #77,MESS7-3
	CLR	   GAMEON
	BR	   CRTI

	MOV	   #INIT,LKV
CRTI:	MOV	   (SP)+,R5
	MOV	   (SP)+,R4
	MOV	   (SP)+,R3
	MOV	   (SP)+,R2
	MOV	   (SP)+,R1
	MOV	   (SP)+,R0
	RTI

RSAVE:	MOV	   (SP),-14(SP)
	MOV	   R0,(SP)
	MOV	   R1,-(SP)
	MOV	   R2,-(SP)
	MOV	   R3,-(SP)
	MOV	   R4,-(SP)
	MOV	   R5,-(SP)
	TST	   -(SP)
	RTS	   PC

COININ: ADD	   #10,(SP)
	BIT	   R1,R0
	BEQ	   .+16
	BIT	   R1,R2
	BNE	   .+10
	BIS	   R1,R2
	SUB	   #10,(SP)
	RTS	   PC

	BIC	   R1,R2
	RTS	   PC


INIT:	JSR	   PC,RSAVE
	CLR	   R5
	MOV	   #MESS9,R3
	JSR	   PC,REFRSH+6
	DEC	   TIME
	BLE	   .+62
	MOV	   SR,R0
	BIC	   #37477,R0
	CMP	   XMHS,R0
	BEQ	   .+40
	TST	   DUMMY
	BNE	   .+6
	INC	   GMSLFT
	TST	   DUMMY+2
	BNE	   .+6
	INC	   GMSLFT+2
	CLR	   GAMEON
	MOV	   #LOOTIN,LKV
	JMP	   LOOTIN+4
	MOV	   #60.,TIME
	DEC	   MESS9+6
	CMP	   MESS9+6,#60
	BGT	   .-24
	MOV	   #65,MESS9+6
	MOV	   #21700,SS1X(R5)
	MOV	   #21700,SS1Y(R5)
	MOV	   #160000,SS1X+2(R5)
	MOV	   #160000,SS1Y+2(R5)
	CLR	   SIN(R5)
	CLR	   SIN+2(R5)
	MOV	   #1777,COS(R5)
	MOV	   #-1777,COS+2(R5)
	CLR	   LASTRP(R5)
	CLR	   LASTRP+2(R5)
	CLR	   SS1VX(R5)
	CLR	   SS1VY(R5)
	CLR	   SS1VX+2(R5)
	CLR	   SS1VY+2(R5)
	TST	   DUMMY+2(R5)
	BEQ	   .+10
	MOV	   #-15000,SS1VY+2(R5)
	TST	   DUMMY(R5)
	BEQ	   .+10
	MOV	   #15000,SS1VY(R5)
	MOV	   #16384.,SSDEAD(R5)
	MOV	   #16384.,SSDEAD+2(R5)
	CLR	   DTTORP(R5)
	CLR	   DTTORP+2(R5)
	MOV	   #20.,TPSLFT(R5)
	MOV	   #20.,TPSLFT+2(R5)
	MOV	   #-1,HYPEON(R5)
	MOV	   #-1,HYPEON+2(R5)
	MOV	   #123456,LONUM
	MOV	   #176543,HINUM
	MOV	   #2,TCNT
	MOV	   #77777,GMDEAD
	MOV	   #-1,TX
	MOV	   #-1,TY
	MOV	   SSRDAT(R5),R0
	MOV	   R5,R1
	MOV	   SSDATA,R5
	MOV	   (R5)+,(R0)+
	BNE	   .-2
	CLR	   (R0)+
	MOV	   SSRDAT+2(R1),R0
	MOV	   SSDATA+2,R5
	MOV	   (R5)+,(R0)+
	BNE	   .-2
	CLR	   (R0)+
	MOV	   #10.,TLIFE
	MOV	   #RVEL,R4
INIT1:	JSR	   PC,RANDOM
	MOV	   #4,R2
	MOV	   #LONUM,R0
	MOVB	   (R0)+,R1
	ASR	   R1
	ASR	   R1
	MOV	   R1,(R4)+
	DEC	   R2
	BGT	   .-12
	DEC	   TLIFE
	BGT	   INIT1
	BR	   .+6



SWSER:	JSR	   PC,RSAVE
	MOV	   #14,R5
	MOV	   #SUND,R4
	JSR	   PC,RANDOM
	MOV	   #LONUM,R0
	MOV	   #4,R2
	MOVB	   (R0)+,R1
	ASL	   R1
	ASL	   R1
	ADD	   #100000,R1
	MOV	   R1,(R4)+
	DEC	   R2
	BGT	   .-16
	DEC	   R5
	BGT	   .-36
	MOV	   #LKV,R0
	MOV	   #SSDISP,(R0)+
	CLR	   R5
SWSER1: CMP	   R5,#3
	BLT	   .+6
	JMP	   LOOTIN+4
	MOV	   SR,R0
	TST	   DUMMY(R5)
	BEQ	   .+6
	BIC	   #37477,R0
	CLR	   SUN
	CLR	   SUND
	MOV	   #4,R1
	MOV	   #10,R2
	BIT	   #40000,R0
	BNE	   .+24
	MOV	   #77000,SUND
	DEC	   SUN
	BIT	   #100200,R0
	BEQ	   .+20
	BR	   .+10
	BIT	   #200,R0
	BEQ	   .+10
	ASL	   R2
	ASL	   R1
	ASL	   R1
	MOV	   R2,ITV
	MOV	   R1,FORCE
	BIT	   R5,#2
	BNE	   .+4
	SWAB	   R0
	TST	   SSDEAD(R5)
	BGT	   .+6
	BIC	   HYPER,R0
	MOV	   #2048.,R1
	BIT	   R0,HYPER
	BEQ	   SWSER2
	INC	   HYPEON(R5)
	BGT	   SWSER3
	ADD	   R1,DFUEL
	BR	   SWSER3
SWSER2: TST	   HYPEON(R5)
	BLT	   SWSER3
	SUB	   R1,SSDEAD(R5)
	BLT	   HTRAP
	MOV	   #-1,HYPEON(R5)
SWSER3: MOV	   R0,BUTT(R5)
	DEC	   GMDEAD
	BGT	   SWT1
	MOV	   #LOOTIN,LKV
	CLR	   GAMEON
	CLR	   TLIFE
	CLRB	   MESS7-3
	TST	   DUMMY
	BNE	   .+16
	TST	   DUMMY+2
	BNE	   .+10
	BIT	   #4,COINAC
	BNE	   .+42
	CLR	   R5
	TST	   SSDEAD(R5)
	BLE	   .+22
	CMP	   TPSLFT(R5),#10.
	BLE	   .+12
	INC	   GMSLFT(R5)
	INC	   17430
	TST	   (R5)+
	CMP	   R5,#3
	BLT	   .-34
	JMP	   LOOTIN+4

SWT1:	TST	   SSDEAD(R5)
	BGE	   .+6
	JMP	   SWUP1
	DEC	   DTTORP(R5)
	BLE	   .+6
SWT2:	JMP	   SWROT
	BIT	   BUTT(R5),HYPER
	BNE	   SWT2
	BIT	   BUTT(R5),#40 	  ;TORP
	BEQ	   SWT2
	DEC	   TPSLFT(R5)
	BGE	   OKTORP
	MOV	   R5,R4
	TST	   (R4)+
	BIT	   R4,#2
	BNE	   .+4
	CMP	   -(R4),-(R4)
	TST	   TPSLFT(R4)
	BGT	   SWROT
	BR	   .+10
HTRAP:	MOV	   #-1,SSDEAD(R5)
	MOV	   #-1,HYPEON(R5)
	CMP	   DELAY,GMDEAD
	BGE	   SWT2
	MOV	   DELAY,GMDEAD
	JMP	   SWUP1

OKTORP: MOV	   #MQ,R2
	MOV	   #40.,DTTORP(R5)	  ;FIRERT
	MOV	   SIN(R5),(R2)+
	MOV	   ITV,(R2)
	MOV	   SS1VX(R5),R3
	SUB	   -(R2),R3
	BVC	   .+16
	BPL	   .+10
	MOV	   #77777,R3
	BR	   .+6
	MOV	   #100000,R3
	MOV	   COS(R5),(R2)+
	MOV	   ITV,(R2)
	MOV	   SS1VY(R5),R4
	ADD	   -(R2),R4
	BVC	   .+16
	BPL	   .+10
	MOV	   #77777,R4
	BR	   .+6
	MOV	   #100000,R4
	MOV	   TCNT,R0
	TST	   (R0)+
	MOV	   R0,TCNT
	MOV	   R3,(R2)
	MOV	   #-7,ASH
	INC	   ASH
	MOV	   (R2),TVX(R0)
	MOV	   R4,(R2)
	MOV	   #-7,ASH
	INC	   ASH
	MOV	   (R2),TVY(R3)
	MOV	   TRPLIF,TL(R0)
	MOV	   #ASH,R2
	MOV	   #4200,R3
	MOV	   #MQ,R4
	MOV	   R3,(R4)+
	MOV	   SIN(R5),(R4)
	MOV	   #-11.,(R2)
	INC	   (R2)
	MOV	   SS1X(R5),TX(R0)
	SUB	   -(R4),TX(R0)
	MOV	   R3,(R4)+
	MOV	   COS(R5),(R4)
	MOV	   #-11.,(R2)
	INC	   (R2)
	MOV	   SS1Y(R5),TY(R0)
	ADD	   -(R4),TY(R0)

SWROT:	TST	   SSDEAD(R5)
	BEQ	   SWUP
	BIT	   BUTT(R5),ROTRL
	BEQ	   SWACC
	CLR	   R3
	BIT	   BUTT(R5),HYPER
	BEQ	   .+4
	INC	   R3
	MOV	   #100000,R1
	BIC	   R1,RD1
	BIS	   R1,RD2
	BIT	   BUTT(R5),ROTL
	BEQ	   RD0
	BIS	   R1,RD1
	BIC	   R1,RD2
RD0:	INC	   DFUEL
	MOV	   #MQ,R1
	MOV	   #ASH,R2
	MOV	   SIN(R5),(R1)
	MOV	   DELTA,(R2)
RD1:	ADD	   (R1),COS(R5)
	MOV	   COS(R5),(R1)
	MOV	   DELTA,(R2)
RD2:	SUB	   (R1),SIN(R5)
	DEC	   R3
	BGE	   RD0

SWACC:	BIT	   BUTT(R5),ACC
	BEQ	   SWUP
	ADD	   #3,DFUEL
	MOV	   FORCE,THRUST
	BIT	   BUTT(R5),HYPER
	BEQ	   SWUP
	ADD	   #12.,DFUEL
	ASL	   THRUST
	ASL	   THRUST

SWUP:	JSR	   PC,UPDATE
	TST	   SSDEAD(R5)
	BLT	   SWUP0
	ADD	   #2,DFUEL
	SUB	   DFUEL,SSDEAD(R5)
	BGE	   SWUP0
	TST	   HYPEON(R5)
	BLT	   .+6
	JMP	   HTRAP
	CLR	   SSDEAD(R5)
SWUP0:	CLR	   DFUEL
SWUP1:	BIT	   R5,#2
	BEQ	   .+6
	JSR	   PC,TUP
	TST	   (R5)+
	JMP	   SWSER1

UPDATE: MOV	   #MQ,R4
	MOV	   SS1X(R5),(R4)
	CLR	   -(R4)
	MOV	   #-6,LSH
	TST	   (R4)+
	SUB	   #512.,(R4)
	MOV	   (R4),-(SP)
	BPL	   .+4
	NEG	   (SP)
	MOV	   (R4)+,(R4)		  ;BUG?
	MOV	   -(R4),R1
	MOV	   -(R4),R0
	TST	   (R4)+
	MOV	   SS1Y(R5),(R4)
	CLR	   -(R4)
	MOV	   #-6,LSH
	TST	   (R4)+
	SUB	   #512.,(R4)
	MOV	   (R4),-(SP)
	BPL	   .+4
	NEG	   (SP)
	MOV	   (R4)+,(R4)
	ADD	   -(R4),R1
	ADC	   R0
	ADD	   -(R4),R0
	MOV	   #450.,R2
	TST	   (R4)+
	MOV	   R1,(R4)
	MOV	   R0,-(R4)
SQRT:	MOV	   R2,-(R4)
	CMP	   (R4)+,(R4)+
	ADD	   R2,(R4)
	DEC	   ASH
	SUB	   (R4),R2
	BPL	   .+4
	NEG	   R2
	DEC	   R2
	BLE	   SQRT1
	MOV	   (R4),R2
	MOV	   R1,(R4)
	MOV	   R0,-(R4)
	BR	   SQRT
SQRT1:	MOV	   (R4),R2
	TST	   SUN
	BEQ	   UP
	CMP	   R2,#10.
	BGT	   UP
	JMP	   KILL

UP:	ASR	   R2
	TST	   -(R4)
	MOV	   #6, -(R4)
	CMP	   (R4)+,(R4)+
	MOV	   (R4),R0
	ASL	   R0
	MOV	   GOR2(R0),R0
	TST	   SR
	BPL	   .+12
	ASL	   R0
	NEG	   R0
	ASL	   THRUST
	TST	   SUN
	BNE	   .+4
	CLR	   R0
	MOV	   R0,(R4)+
	MOV	   (SP)+,(R4)
	MOV	   R2,DIV
	MOV	   -(R4),R1
	MOV	   R0,(R4)+
	MOV	   (SP)+,(R4)
	MOV	   R2,DIV
	MOV	   -(R4),R0
	TST	   SS1X(R5)
	BPL	   .+4
	NEG	   R0
	TST	   SS1Y(R5)
	BPL	   .+4
	NEG	   R1
	MOV	   THRUST,R2
	BEQ	   UP1
	BGT	   .+4
	NEG	   R2
	MOV	   SIN(R5),(R4)+
	MOV	   R2,(R4)
	MOV	   FORSCL,ASH
	SUB	   -(R4),R0
	MOV	   COS(R5),(R4)+
	MOV	   R2,(R4)
	MOV	   FORSCL,ASH
	ADD	   -(R4),R1
	CLR	   THRUST
UP1:	ADD	   SS1VX(R5),R0
	BVC	   .+16
	BPL	   .+10
	MOV	   #77777,R0
	BR	   .+6
	MOV	   #100000,R0
	ADD	   SS1VY(R5),R1
	BVC	   .+16
	BPL	   .+10
	MOV	   #77777,R1
	BR	   .+6
	MOV	   #100000,R1
	MOV	   R0,SS1VX(R5)
	MOV	   R1,SS1VY(R5)
	MOV	   R0,(R4)
	MOV	   #-6,ASH
	MOV	   (R4),R0
	MOV	   R1,(R4)
	MOV	   #-6,ASH
	MOV	   (R4),R1
	BIC	   #1,R1
	BIC	   #1,R0
	ADD	   R0,SS1X(R5)
	ADD	   R1,SS1Y(R5)
	MOV	   LSHIPX,TX+2
	MOV	   LSHIPY,TY+2
	CMP	   R5,LSHIPI
	BNE	   .+6
	CLR	   TX+2
	MOV	   R5,LSHIPI
	MOV	   SS1X(R5),LSHIPX
	MOV	   SS1Y(R5),LSHIPY
	BIT	   BUTT(R5),HYPER	  ;TVS
	BEQ	   .+4
	RTS	   PC
	MOV	   SIN(R5),-(SP)
	MOV	   COS(R5),-(SP)
	MOV	   TCNT,R0
	MOV	   #MQ,R1
	MOV	   SS1X(R5),(R1)
	CLR	   AC
	MOV	   #-6,LSH
	MOV	   (R1),R2
	MOV	   SS1Y(R5),(R1)
	CLR	   AC
	MOV	   #-6,LSH
	MOV	   (R1),R3
	NEG	   R2
	NEG	   R3
TVSX:	TST	   -(R0)
	MOV	   TX+2(R0),(R1)
	BEQ	   TVSX
	CMP	   #-1,(R1)
	BEQ	   TVSXIT
	CLR	   AC
	MOV	   #-6,LSH
	MOV	   (R1),R4
	ADD	   R2,R4
	ADD	   SSLO2,R4
	BLT	   TVSX
	CMP	   SSL,R4
	BLT	   TVSX
	SUB	   SSLO2,R4
	MOV	   R4,(R1)+
	MOV	   (SP)+,(R1)
	MOV	   #-10.,ASH
	MOV	   -(R1),XMHC
	MOV	   R4,(R1)+
	MOV	   (SP),(R1)
	MOV	   #-10.,ASH
	MOV	   -(R1),XMHS
	TST	   -(SP)
	MOV	   TY+2(R0),(R1)
	CLR	   AC
	MOV	   #-6,LSH
	MOV	   (R1),R4
	ADD	   R3,R4
	ADD	   SSLO2,R4
	BLT	   TVSX
	CMP	   SSL,R4
	BLT	   TVSX
	SUB	   SSLO2,R4
	MOV	   R4,(R1)+
	TST	   (SP)+
	MOV	   (SP),(R1)
	MOV	   #-10.,ASH
	MOV	   -(R1),YMKS
	MOV	   R4,(R1)+
	MOV	   -(SP),(R1)
	MOV	   #-10.,ASH
	MOV	   -(R1),R4
	SUB	   XMHS,R4
	BPL	   .+4
	NEG	   R4
	CMP	   SSLO2,R4
	BLE	   TVSX
	MOV	   XMHC,R4
	ADD	   YMKS,R4
	BPL	   .+4
	NEG	   R4
	CMP	   SSWO2,R4
	BLE	   TVSX
	CLR	   TX+2(R0)
	TST	   R0
	BNE	   KILL
	MOV	   #-1,SSDEAD
	MOV	   #-1,SSDEAD+2
KILL:	MOV	   #-1,SSDEAD(R5)
	MOV	   DELAY,GMDEAD

TVSXIT: CMP	   (SP)+,(SP)+
	RTS	   PC






TUP:	MOV	   TCNT,R1
TUP1:	TST	   -(R1)
	TST	   R1
	BEQ	   TVT
	MOV	   TX+2(R1),R2
	BEQ	   TUP1
	DEC	   TL+2(R1)
	BGT	   .+10
	CLR	   TX+2(R1)
	BR	   TUP1
	ADD	   TVX+2(R1),TX+2(R1)
	ADD	   TVY+2(R1),TY+2(R1)
	BR	   TUP1


TVT:	MOV	   TCNT,R0
	MOV	   R0,R1
	BR	   .+4
TVT0:	TST	   -(R0)
	CMP	   R0,#2
	BGT	   .+4
	RTS	   PC
	MOV	   TX(R0),R2
	BEQ	   TVT0
	MOV	   TY(R0),R3
TVT1:	TST	   -(R1)
	CMP	   R1,#2
	BLE	   TVT2
	MOV	   TX(R1),R4
	BEQ	   TVT1
	CMP	   R0,R1
	BEQ	   TVT1
	SUB	   R2,R4
	BPL	   .+4
	NEG	   R4
	CMP	   R4,TR2
	BGT	   TVT1
	SUB	   TY(R1),R3
	BPL	   .+4
	NEG	   R3
	CMP	   R3,TR2
	BGT	   TVT1
	CLR	   TX(R0)
	CLR	   TX(R1)
TVT2:	MOV	   TCNT,R1
	BR	   TVT0




SSDISP: JSR	   PC,RSAVE
	MOV	   #SWSER,LKV
	MOV	   #X,R1
	MOV	   #Y,R2
	CLR	   R5
SSD:	TST	   SSDEAD(R5)
	BLE	   SSD00
	DEC	   RTIME
	BGT	   SSD00
	MOV	   #-1,LASTRP(R5)
	MOV	   #3,RTIME
	MOV	   TAIL(R5),R4
	BIT	   BUTT(R5),ACC
	BNE	   .+6
	CLR	   (R4)
	BR	   SSD00
	JSR	   PC,RANDOM
	MOVB	   LONUM,R0
	ASL	   R0
	ASL	   R0
	ASL	   R0
	BMI	   .+4
	NEG	   R0
	ADD	   -(R4),R0
	TST	   (R4)+
	MOV	   #1,(R4)+
	MOV	   R0,(R4)
SSD00:	MOV	   R5,-(SP)
	CMP	   SIN(R5),LASTRP(R5)
	BEQ	   SSD0
	JSR	   PC,ROTATE
	MOV	   (SP),R5
	MOV	   SIN(R5),LASTRP(R5)
SSD0:	MOV	   #200,R0
	MOV	   #X,R1
	MOV	   #Y,R2
	MOV	   #FX,(R2)
	MOV	   #4000,(R2)
	MOV	   FUELD2(R5),(R1)
	MOV	   SSDEAD(R5),R3
	ASR	   R3
	ADD	   (R1),R3
	ADD	   R0,(R1)
	CMP	   (R1),R3
	BLT	   .-4
	MOV	   #FY,(R2)
	MOV	   #3400,(R2)
	MOV	   #5,R3
	ADD	   R0,(R2)
	DEC	   R3
	BGT	   .-4
	TST	   SSDEAD(R5)
	BLT	   BLOWUP
	BEQ	   .+12
	BIT	   BUTT(R5),HYPER
	BNE	   SSD2
	MOV	   SS1X(R5),(R1)
	MOV	   SS1Y(R5),(R2)
	MOV	   (R2),-(SP)
	MOV	   (R1),-(SP)
	MOV	   SSRDAT(R5),R5
	ADD	   (R5)+,(R1)
	ADD	   (R5)+,(R2)
SSD1:	MOV	   (SP)+,R3
	MOV	   (SP),R4
	ADD	   (R5)+,R3
	ADD	   (R5)+,R4
	TST	   -(SP)
	JSR	   PC,LINE
	TST	   (R5)
	BNE	   SSD1
	CMP	   (SP)+,(SP)+
SSD2:	MOV	   #FY,(R2)
	MOV	   #100000,(R1)
	MOV	   #100000,(R2)
	MOV	   (SP)+,R5
	TST	   (R5)+
	CMP	   R5,#3
	BLT	   SSD
TD0:	TST	   -(R5)
	TST	   R5
	BLT	   STARS
	MOV	   TCNT,R3
	BR	   .+4
TD1:	TST	   -(R3)
	CMP	   R3,#2
	BLE	   TD0
	MOV	   TX(R3),R4
	BEQ	   TD1
	MOV	   R4,(R1)
	MOV	   TY(R3),(R2)
	BR	   TD1

STARS:	MOV	   #STARD,R0
	MOV	   (R0)+,(R1)
	BEQ	   .+6
	MOV	   (R0)+,(R2)
	BR	   .-6

	MOV	   #FY,(R2)
	MOV	   #200,R0
	MOV	   #FUELD1,R3
	MOV	   #11,R4
	MOV	   (R3)+,(R1)
	BEQ	   TOUT
	MOV	   (R3)+,(R2)
	ADD	   R0,(R2)
	DEC	   R4
	BGT	   .-4
	BR	   .-20

TOUT:	MOV	   #100000,(R1)
	MOV	   #100000,(R2)
	JMP	   LOOTIN+4

BLOWUP: CMP	   SSDEAD(R5),#-1
	BNE	   BLWUP1
	MOV	   BLOW(R5),R0
	MOV	   #20.,TLIFE
	MOV	   SS1VX(R5),MQ
	MOV	   #-6,ASH
	MOV	   MQ,SS1VX(R5)
	MOV	   SS1VY(R5),MQ
	MOV	   #-6,ASH
	MOV	   MQ,SS1VY(R5)
	MOV	   SS1X(R5),R3
	MOV	   SS1Y(R5),R4
	MOV	   R3,(R0)+
	MOV	   R4,(R0)+
	DEC	   TLIFE
	BGT	   .-10
BLWUP1: MOV	   #20.,TLIFE
	DEC	   SSDEAD(R5)
	MOV	   BLOW(R5),R0
	MOV	   #RVEL,R3
BLWUP2: ADD	   (R3)+,(R0)
	ADD	   SS1VX(R5),(R0)
	MOV	   (R0)+,(R1)
	ADD	   (R3)+,(R0)
	ADD	   SS1VY(R5),(R0)
	MOV	   (R0)+,(R2)
	DEC	   TLIFE
	BGT	   BLWUP2
	BR	   SSD2

ROTATE: MOV	   #ASH,R4
	MOV	   #MQ,R3
	MOV	   SSRDAT(R5),R2
	MOV	   SSDATA(R5),R0
ROTAT1: MOV	   (R0)+,(R3)+
	BEQ	   ROTAT2
	MOV	   COS(R5),(R3)
	MOV	   #-10.,(R4)
	MOV	   -(R3),R1
	MOV	   (R0),(R3)+
	MOV	   SIN(R5),(R3)
	MOV	   #-10.,(R4)
	SUB	   -(R3),R1
	BNE	   .+4
	INC	   R1
	MOV	   R1,(R2)+
	MOV	   -(R0),(R3)+
	MOV	   SIN(R5),(R3)
	MOV	   #10.,(R4)
	MOV	   -(R3),R1
	TST	   (R0)+
	MOV	   (R0)+,(R3)+
	MOV	   COS(R5),(R3)
	MOV	   #-10.,(R4)
	ADD	   -(R3),R1
	BIC	   #1,R1
	MOV	   R1,(R2)+
	BR	   ROTAT1

ROTAT2: CLR	   (R2)+
	CLR	   (R2)+
	RTS	   PC

;ENTER WITH:
;  R0 = STEPSIZE
;  R1 = X REGISTER ADDRESS
;  R2 = Y REGISTER ADDRESS
;  R3 = X STOP
;  R4 = Y STOP
;  STARTING POSITION OF VECTOR IN THE X & Y REGISTER

LINE:	MOV	   R5,-(SP)
	MOV	   #100000,R5
	MOV	   R3,-(SP)
	MOV	   R4,-(SP)
	BIC	   R5,DRAWX
	BIC	   R5,DRAWX+2
	BIC	   R5,DRAWY
	BIC	   R5,DRAWY+2
	SUB	   (R1),R3
	BPL	   .+14
	NEG	   R3
	BIS	   R5,DRAWX+2
	BIS	   R5,DRAWY+2
	SUB	   (R2),R4
	BPL	   .+14
	NEG	   R4
	BIS	   R5,DRAWX
	BIS	   R5,DRAWY
	MOV	   #MQ,R5
	CMP	   R4,R3
	BGT	   STEPY
	MOV	   R0,(R5)+
	MOV	   R4,(R5)
	CMP	   -(R5),-(R5)
	MOV	   R3,-(R5)
	CMP	   (R5)+,(R5)+
	MOV	   (R5),R5
	BIC	   #1,R5
	TST	   (SP)+
	MOV	   (R2),R3
	MOV	   #FX,(R2)
	MOV	   R3,(R2)
DRAWX:	ADD	   R5,(R2)
	ADD	   R0,(R1)
	MOV	   (SP),R3
	SUB	   (R1),R3
	BPL	   .+4
	NEG	   R3
	CMP	   R0,R3
	BLT	   DRAWX
	MOV	   (SP),(R1)
	MOV	   -(SP),(R2)
	CMP	   (SP)+,(SP)+
	MOV	   (SP)+,R5
	RTS	   PC

STEPY:	MOV	   R0,(R5)+
	MOV	   R3,(R5)
	CMP	   -(R5),-(R5)
	MOV	   R4,-(R5)
	CMP	   (R5)+,(R5)+
	MOV	   (R5),R5
	MOV	   (R2),R3
	MOV	   #FY,(R2)
	MOV	   R3,(R2)
DRAWY:	ADD	   R0,(R2)
	ADD	   R5,(R1)
	MOV	   (SP),R4
	SUB	   (R2),R4
	BPL	   .+4
	NEG	   R4
	CMP	   R0,R4
	BLT	   DRAWY
	MOV	   (SP)+,(R2)
	MOV	   (SP)+,(R1)
	MOV	   (SP)+,R5
	RTS	   PC

RANDOM: MOV	   LONUM,R0
	MOV	   HINUM, R1
	MOV	   #-7,R3
	CLR	   R2
	ASL	   R0
	ROL	   R1			  ;WTF
	ROL	   R2			  ;WTF
	INC	   R3
	BNE	   .-10
	ADD	   LONUM,R2
	ADC	   R1
	ADD	   HINUM, R1
	ADC	   R2
	ADD	   #1057,R0
	ADC	   R1
	ADC	   R2
	ADD	   #47401,R1
	ADC	   R2
	ADD	   #6,R2
	ADD	   R2,R0
	ADC	   R1
	MOV	   R0,LONUM
	MOV	   R1,HINUM
	RTS	   PC







REFRSH: ASL	   R0
	MOV	   CODE(R0),R3
	MOV	   (R3)+,R1
	MOV	   (R3)+,X
	MOV	   (R3)+,R2
	MOV	   #11,R4
	SUB	   R1,R2
	DEC	   R4
	BGT	   .-4
REF1:	MOVB	   (R3)+,R0
	BNE	   .+4
	RTS	   PC
	SUB	   #40,R0
	BNE	   .+22
	MOV	   #MQ,R0
	MOV	   R1,(R0)+
	MOV	   #7,(R0)
	ADD	   -(R0),X
	BR	   REF1
	MOV	   R0,R4
	ASL	   R4
	ASL	   R4
	ADD	   R4,R0
	MOV	   R3,-(SP)
	JSR	   PC,CHROUT
	MOV	   (SP)+,R3
	BR	   REF1

	;DISPLAY ROUTINES FOR CHARACTER STRING OUTPUT.
	;  ENTER WITH R0 = START ADDRESS OF CHARACTER MATRIX
	;	      R1 = STEP SIZE
	;	      R2 = Y START POSITION (LINE LEVEL)
	;  REGISTERS R3, R4, R5 ARE ALL USED

CHROUT: ADD	   R1,X 		  ;TWO EMPTY COLUMNS
	ADD	   R1,X 		   ; BETWEEN CHARACTERS
	ADD	   #SPM,R0		  ;ADD TABLE START ADDRESS TO DISPLACEMENT
	MOV	   #5,R5		  ;5 COL./CHAR.
CHRCOL: MOVB	   (R0)+,R4		  ;GET CHAR. COL.
	MOV	   R2,R3		  ;LINE LEVEL TO R3
CHRPNT: ADD	   R1,R3		  ;ADD STEP SIZE TO POINT LEVEL
	ASLB	   R4			  ;GET NEXT BIT
	BPL	   .+10 		  ;NO BIT, NO POINT
	MOV	   R3,Y 		  ;BIT ON, SO PUT A POINT OUT
	BR	   CHRPNT		  ;TRY AGAIN
	BNE	   CHRPNT		  ;ITERATE TILL 0
	ADD	   R1,X 		  ;STEP X TO NEXT COL.
	DEC	   R5			  ;DO IT FJVE TIMES
	BGT	   CHRCOL		  ;AND
	RTS	   PC			  ;THEN RETURN


	;THE FOLLOWING ARE A COLLECTION OF CHARACTER MATRICES
	;  EACH MATRIX CONSISTS OF 5 BYTES,  EACH BYTE CORRESPONDS
	;  TO ONE OF THE COLUMNS OF 5 BY 7 CHARACTER MATRIX.
	;  THE HIGH ORDER BIT IS AWAYS OFF.

SPM:	.BYTE 0, 0, 0, 0, 0




	.BYTE 0, 0, 117, 0, 0




	.BYTE 0, 7, 0, 7 , 0




	.BYTE  24, 177,  24, 177,  24




	.BYTE  44,  52, 153,  52,  22




	.BYTE 143,  23,  10, 144, 143




	.BYTE  66, 111, 126,  40, 120




	.BYTE	0,   0,   7,   0,   0




	.BYTE	0,  34,  42, 101,   0




	.BYTE	0, 101,  42,  34,   0




	.BYTE  24,  10,  76,  10,  24




	.BYTE  10,  10,  76,  10,  10




	.BYTE	0, 130,  70,   0,   0




	.BYTE 10, 10, 10, 10, 10




	.BYTE 0, 140, 140, 0, 0




	.BYTE 40, 20, 10, 4, 2




	.BYTE 76, 121, 111, 10, 76




	.BYTE 0, 102, 177, 100, 0




	.BYTE 162, 111, 111, 111, 106




	.BYTE 42, 101, 111, 111, 66




	.BYTE 30, 24, 22, 177, 20




	.BYTE 47, 105, 105, 105, 71




	.BYTE 74, 112, 111, 111, 61




	.BYTE 1, 161, 11, 5, 3




	.BYTE 66, 111, 111, 111, 66




	.BYTE 106, 111, 111, 51, 36




	.BYTE 0, 66, 66, 0, 0




	.BYTE 0, 133, 73, 0, 0




	.BYTE 0, 10, 24, 42, 101




	.BYTE 24, 24, 24, 24, 24




	.BYTE 101, 42, 24, 10, 0




	.BYTE 2, 1, 121, 11, 6




	.BYTE 62, 111, 171, 101, 76




	.BYTE 174, 22, 21, 22, 174




	.BYTE 177, 111, 111, 111, 66




	.BYTE 76, 101, 101, 101, 42




	.BYTE 177, 101, 101, 42, 34




	.BYTE 177, 111, 111, 111, 101




	.BYTE 177, 11, 11, 11, 1




	.BYTE 76, 101, 101, 111, 71




	.BYTE 177, 10, 10, 10, 177




	.BYTE 0, 101, 177, 101, 0




	.BYTE 40, 100, 101, 77, 1




	.BYTE 177, 10, 24, 42, 101




	.BYTE 177, 100, 100, 100, 100




	.BYTE 177, 2, 14 , 2, 177




	.BYTE 177, 2, 4, 10,177




	.BYTE 76, 101, 101, 101, 76




	.BYTE 177, 11, 11, 11, 6




	.BYTE 76, 101, 121, 41, 136




	.BYTE 177, 11, 31, 51, 106




	.BYTE 106,111, 111, 111,  61




	.BYTE 1, 1, 177, 1, 1




	.BYTE 77, 100, 100, 100, 77




	.BYTE 7, 30, 140, 30, 7




	.BYTE 177, 40, 30, 40, 177




	.BYTE 143, 24, 10, 24, 143




	.BYTE 3, 4, 170, 4, 3




	.BYTE 141, 121, 111, 105, 103




	.BYTE 177, 101, 101, 0, 0




	.BYTE 2, 4, 10, 20, 40




	.BYTE 0, 0, 101, 101, 177




	.BYTE 4, 2, 175, 2, 4




	.BYTE  10,  24,  52,  10,  10




	.BYTE 177, 177, 177, 177, 177






	.EVEN



TAIL:	TAIL2
	TAIL1


SSDATA: SHIP2
	SHIP1

SHIP1:	000001
	175600
	001200
	174700
	001200
	176300
	000500
	177000
	000500
	002000
	000001
	003100
	177300
	002000
	177300
	177000
	176600
	176300
	176600
	174700
	000001
	175600
TAIL1:	000001
	000000
	0

SHIP2:	000001
	174700
	000300
	174700
	000300
	002300
	177500
	002300
	177500
	174700
	177700
	174700
	177700
	002600
	000100
	000600
	000100
	174700
	001200
	174700
	001200
	176300
	000500
	177000
	000500
	002000
	000001
	003100
	177300
	002000
	177300
	177000
	176600
	176300
	176600
	174700
	000001
	174700
TAIL2:	000001
	000000
	0

BLOW:	BLOW2
	BLOW1

BLOW1:	0
	. = . + 84.

BLOW2:	0
	. = . + 84.

RVEL:	0
	. = . + 84.

FUELD1:   4000
	  3000
	 24000
	  3000
	154000
	  3000
	174000
	  3000
	     0

FUELD2:   4000
	154000



STARD:	  7200
	 73200
	  7200
	 51300
	 15200
	 47600
	 14700
	 44500
	 23600
	 23600

	 41000
	 21700
	 42300
	 37500
	 45100
	 27000
	 51000
	 21600
	 60000
	 26400

	 65600
	 25600
	 75000
	 26400
	101200
	 21700
	103200
	11600
	115000
	7000

	132000
	7500
	132400
	11300
	135000
	30300
	145600
	30600
	146000
	32100

	153000
	24600
	160200
	34600
	160100
	55000
	147300
	75100
	155200
	100300

	171000
	100500
	167000
	113100
	173100
	115700
	174000
	120000
	170300
	117400

	157100
	130400
	153500
	131000
	157500
	131600
	154000
	137000
	161200
	142400

	152200
	140500
	147100
	140500
	140600
	140500
	135000
	140000
	140000
	142300

	145300
	143000
	152000
	146600
	155000
	152500
	141400
	147500
	136000
	164300

	130600
	170500
	125500
	160000
	120000
	164100
	114400
	175000
	72300
	173000

	72300
	167300
	71500
	171400
	56200
	172400
	26500
	152400
	22400
	153000

	23700
	145000
	22400
	136000
	21000
	136400
	13600
	131200
	22500
	122600

	23400
	117700
	16300
	77200
	20000
	71400
	23700
	72300
	25400
	77000

	44200
	111000
	50500
	114000
	47600
	102400
	52200
	102200
	42000
	71100

	36500
	61100
	34600
	54000
	40600
	46600
	56300
	44000
	74000
	46300

	103000
	45200
	110700
	35200
	112700
	26500
	125300
	36000
	124500
	44100

	135300
	50400
	134400
	110500
	144000
	111500
	153600
	114600
	137600
	131000

	117200
	135600
	115100
	143600
	110400
	144200
	107000
	152200
	101000
	147500

	104200
	142200
	66000
	134600
	57400
	145400
	54400
	146000
	54000
	144200

	56600
	136300
	50400
	142300
	50100
	132500
	44200
	130000
	43500
	125000

	57500
	123500
	75700
	120200
	73300
	77600
	65700
	74500
	57300
	70200

	55600
	60500
	61700
	67100
	62700
	60700
	57400
	26500


SUND:	0

	. = . + 94.

	0
	0
	0

;TABLES


GOR2:	0

	. = . + 254.




;SPACE SHIP DATA

GMSLFT: 0
	0
DUMMY:	0
	0
SS1X:	0
. = . + NTERM
SS1Y:	0
. = . + NTERM
SIN:	0
. = . + NTERM
COS:	0
. = . + NTERM
SS1VX:	0
. = . + NTERM
SS1VY:	0
. = . + NTERM
SSDEAD: 0
. = . + NTERM
HYPEON: 0
. = . + NTERM
DTTORP: 0
. = . + NTERM
TPSLFT: 0
. = . + NTERM
BUTT:	0
. = . + NTERM
LASTRP: 0
. = . + NTERM


SSRDAT: SS0
	SS1

SS0:	0
	. = . + 86.

SS1:	0
	. = . + 86.



;TORP DATA

TX:	-1
. = .	84.
TY:	-1
. = .	84.
TVX:	0
. = .	84.
TVY:	0
. = .	84.
TL:	0
. = .	84.

;PARAMETERS

TR2:	500
ITV:	8.
TRPLIF: 300.
DELAY:	600.
FORCE:	4.
FORSCL: -8.
SSLO2:	27
SSL:	50.
SSWO2:	5.
DELTA:	-4

;BUTTON MASKS

ROTRL:	3
ROTL:	2
ACC:	10
HYPER:	20

;GAME DATA

TCNT:	0
GMDEAD: 077777
LSHIPX: 0
LSHIPY: 0
LSHIPI: 0


;BOOKKEEPING

SUN:	0
THRUST: 0
DFUEL:	0
GAMEON: 0
LASTON: 0

;TEMPORARY STORAGE

LONUM:	0
HINUM:	0
TIME:	60.
RTIME:	0
TLIFE:	0
XMHC:	0
XMHS:	0
YMKS:	0

TEST:	100000
	 40000
	   200
	   100

CODE:	MESS0
	MESS1
	MESS2
	MESS3
	MESS4
	MESS5
	MESS6
	MESS7
	MESS8

MESS0:	   400
	 30000
	160000
	.ASCII /1. POSITIVE GRAVITY /




















	.BYTE 0
	.EVEN
	0
MESS1:	   400
	 30000
	160000
	.ASCII /1. NEGATIVE GRAVITY /




















	.BYTE 0
	.EVEN
	0
MESS2:	400
	30000
	140000
	.ASCII /2. SUN (& GRAVITY) /



















	.BYTE 0,0  ;Added Zero to have same address
	.EVEN
	0
MESS3:	400
	30000
	140000
	.ASCII /3. NO SUN (& NO GRAVITY) /

























	.BYTE 0
	.EVEN
	0
MESS4:	   400
	 30000
	120000
	.ASCII /3. SLOW SPEED /














	.BYTE 0
	.EVEN
	0
MESS5:	   400
	 30000
	120000
	.ASCII /3. FAST SPEED /














	.BYTE 0
	.EVEN
	0
MESS6:	   400
	 30000
	100000
	.ASCII /4. TWO PLAYERS /
	.BYTE 0
	.EVEN













	.BYTE 0
	.EVEN
	0
MESS7:	   400
	 30000
	100000
	.ASCII /4. ONE PLAYER /














	.BYTE 0
	.EVEN
	0
MESS8:	  200
	30000
	40000
	.ASCII /MOVE EITHER CONTROL STICK TO INITIATE GAME. /












































	.BYTE 0
	.EVEN
	0
MESS9:	10000
	40000
	 1000
	65
	0
MESS10:    600
	 50000
	130000
	.ASCII /GALAXY GAME /












	.BYTE 0
	.EVEN
	0
MESS11:   300
	50000
	40000
	.ASCII /1 GAME FOR 10 CENTS. /





















	.BYTE 0
	.EVEN
	0
MESS12:    300
	50000
	30000
	.ASCII /3 GAMES FOR 25 CENTS , /






















	.BYTE 0
	.EVEN
	0
MESS13: 400
	30000
	20000
	.ASCII /0 ... GAMES LEFT ... 0 /























	.BYTE  0,0,0
	.EVEN
	0


.END	START
