;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