; This command tells Zeus where to put the code it generates. As a szx file... ; Alter the path to suit your system zeusemulate "48K" output_szx "spi.szx",$8000,Start ; The szx file ; If for some reason you want binary, uncomment this line output_bin "c:\spi.bin",$0000,$10000 ; The binary file ORG #8000 ENT ; Another Great Game From Crystal ; ; ; lInv EQU 32 nInv EQU 45 InvStep EQU 3 InvSp EQU 30 InvVStep EQU 3 InvLeftMar EQU 14 InvRightMar EQU 244 nProj EQU 4 BLeft EQU 15 SLeft EQU 15 BRight EQU 240 SRight EQU 240 ShipVel EQU 34 ShipTime EQU 20000 TgAlive EQU 0 TgX EQU 1 TgY EQU 2 TgSpeedI EQU 3 TgSpeed EQU 4 TgType EQU 5 TgMissDisp EQU 6 TgMissInv EQU 7 TgMissCount EQU 8 InvTable EQU #E000 ProjTable EQU #F000 Start DI CALL InitGame CALL Game JR Start InitGame LD A,3 LD (nBases),A LD A,0 LD (nSheets),A CALL InitBaseSh CALL InitInvSh CALL InitExplSh RET nBases NOP nSheets NOP InitBaseSh LD HL,BaseDef1 LD DE,BaseDefn LD BC,32 LDIR LD HL,BaseDefn LD DE,BaseDefn+32 LD B,56 IBSa OR A:LD A,(HL):RRA:LD (DE),A INC DE:INC HL LD A,(HL):RRA:LD (DE),A INC DE:INC HL LD A,(HL):RRA:LD (DE),A INC DE:INC HL LD A,(HL):RRA:LD (DE),A INC DE:INC HL DJNZ IBSa RET InitInvSh LD B,6 LD IX,InvShapes LD IY,InvDef0 IIShlp PUSH BC:CALL InitInv1:POP BC LD DE,44:ADD IY,DE LD DE,352:ADD IX,DE DJNZ IIShlp RET InitExplSh LD B,5 ;Include ship . LD IX,Expl1 LD IY,ExplDefn1 IEShlp PUSH BC:CALL InitExp1:POP BC LD DE,32:ADD IY,DE LD DE,256:ADD IX,DE DJNZ IEShlp RET InitExp1 PUSH IY:POP HL PUSH IX:POP DE LD BC,32 LDIR PUSH IX:POP DE LD HL,32:ADD HL,DE:EX DE,HL LD B,56 JP IBSa InitInv1 PUSH IY:POP HL PUSH IX:POP DE LD BC,44 LDIR PUSH IX:POP DE LD HL,44:ADD HL,DE:EX DE,HL LD B,77 JP IBSa InitInvaders LD IX,InvTable LD DE,0 LD C,5 II1 LD B,9 PUSH DE II2 PUSH BC CALL CreateInv PUSH DE LD DE,lInv ADD IX,DE POP DE INC E POP BC DJNZ II2 POP DE INC D DEC C JR NZ II1 LD A,nInv:LD (NoInv1),A LD (cInv),A LD A,1:LD (InvDir),A LD A,0:LD (ChangeDir),A RET CreateInv EQU $ ; IX = Entry in table ; E = X pos on screen 0..7 ; D = Y pos on screen 0..5 LD (IX+TgType),D LD (IX+TgAlive),1 LD A,E ADD A,A:ADD A,A:ADD A,A:ADD A,A ADD A,E:ADD A,E:ADD A,12 LD (IX+TgX),A LD A,D ADD A,A:ADD A,A:ADD A,A:ADD A,A ADD A,8 LD B,A LD A,(nSheets) ADD A,A:ADD A,A:ADD A,A:ADD A,A ADD A,B LD (IX+TgY),A RET InitProj LD IX,ProjTable LD B,nProj+1 LD DE,lInv IPlp LD (IX+TgAlive),0 ADD IX,DE DJNZ IPlp RET InitBase XOR A LD (KilledF),A LD A,31 LD (BaseX),A RET Game CALL InitInvaders CALL InitProj CALL InitBase CALL PlaySheet LD A,(KilledF) OR A JR Z GameNS LD A,(nBases) DEC A LD (nBases),A RET Z JR Game GameNS LD A,(nSheets) INC A LD (nSheets),A JR Game KilledF NOP PlaySheet CALL CLS CALL DrawShields CALL ORBase CALL DisplayInvs XOR A LD (EndF),A LD A,#C9 LD (MoveShip),A LD HL,ShipTime LD (NextShipT),HL PlayLoop CALL MoveBase CALL MoveProj CALL MoveInvs CALL MoveShip CALL NextShip LD BC,61438:IN A,(C):BIT 0,A:JP Z 0 LD A,(EndF) OR A RET NZ JR PlayLoop EndF NOP CLS LD HL,#4000 LD DE,#4001 LD BC,#1800 LD (HL),0 LDIR LD (HL),#06 LD BC,32 LDIR LD (HL),#07 LD BC,#240 LDIR LD (HL),#04 LD BC,#9F LDIR LD A,0 OUT (#FE),A RET DrawShields LD B,4 LD A,2 DS1 CALL Shield ADD A,8 DJNZ DS1 RET Shield PUSH BC LD IX,ShieldYs LD HL,ShieldDefn LD B,28 Shield1 PUSH BC EX DE,HL LD C,A:LD B,0:LD L,(IX):LD H,(IX+1) ADD HL,BC EX DE,HL LD BC,4 LDIR POP BC INC IX:INC IX DJNZ Shield1 POP BC RET ORShip LD A,(ShipX):SUB 12 AND #7 RRCA:RRCA:RRCA LD HL,Ship1 LD E,A:LD D,0 ADD HL,DE EX DE,HL LD A,(ShipX):SUB 12 RRCA:RRCA:RRCA AND #1F LD IX,ShipYs JR ORIt ANDShip LD A,(ShipX):SUB 12 AND #7 RRCA:RRCA:RRCA LD HL,Ship1 LD E,A:LD D,0 ADD HL,DE EX DE,HL LD A,(ShipX):SUB 12 RRCA:RRCA:RRCA AND #1F LD IX,ShipYs JP ANDIt ORBase LD A,(BaseX):SUB 12 AND #7 RRCA:RRCA:RRCA LD HL,BaseDefn LD E,A:LD D,0 ADD HL,DE EX DE,HL LD A,(BaseX):SUB 12 RRCA:RRCA:RRCA AND #1F LD IX,BaseYs ORIt LD B,8 DBlp PUSH BC LD L,(IX):LD H,(IX+1) LD C,A:LD B,0 ADD HL,BC LD B,4:LD C,A DBlp1 LD A,(DE):OR (HL):LD (HL),A INC DE:INC HL DJNZ DBlp1 LD A,C POP BC INC IX:INC IX DJNZ DBlp RET ORINV LD B,11 OIlp PUSH BC LD L,(IX):LD H,(IX+1) LD C,A:LD B,0 ADD HL,BC LD B,4:LD C,A OIlp1 LD A,(DE):OR (HL):LD (HL),A INC DE:INC HL DJNZ OIlp1 LD A,C POP BC INC IX:INC IX DJNZ OIlp RET ANDBase LD A,(BaseX):SUB 12 AND #7 RRCA:RRCA:RRCA LD HL,BaseDefn LD E,A:LD D,0 ADD HL,DE EX DE,HL LD A,(BaseX):SUB 12 RRCA:RRCA:RRCA AND #1F LD IX,BaseYs ANDIt LD B,8 Dilp PUSH BC LD L,(IX):LD H,(IX+1) LD C,A:LD B,0 ADD HL,BC LD B,4:LD C,A Dilp1 LD A,(DE):CPL:AND(HL):LD (HL),A INC DE:INC HL DJNZ Dilp1 LD A,C POP BC INC IX:INC IX DJNZ Dilp RET ANDINV LD B,11 AIlp PUSH BC LD L,(IX):LD H,(IX+1) LD C,A:LD B,0 ADD HL,BC LD B,4:LD C,A AIlp1 LD A,(DE):CPL:AND(HL):LD (HL),A INC DE:INC HL DJNZ AIlp1 LD A,C POP BC INC IX:INC IX DJNZ AIlp RET DisplayInvs LD B,nInv LD IX,InvTable DIlp LD A,(IX+TgAlive) OR A CALL NZ ORInv LD DE,lInv:ADD IX,DE DJNZ DIlp RET ORInv PUSH BC:PUSH IX CALL CalcInvAdd PUSH HL LD A,(IX+TgY) ADD A,A LD C,A:LD A,0:ADC A,0:LD B,A LD HL,LineYs ADD HL,BC PUSH HL LD A,(IX+TgX):SUB 12 RRCA:RRCA:RRCA AND #1F POP IX POP DE CALL ORINV POP IX POP BC RET ANDInv PUSH BC:PUSH IX CALL CalcInvAdd PUSH HL LD A,(IX+TgY) ADD A,A LD C,A:LD A,0:ADC A,0 LD B,A LD HL,LineYs ADD HL,BC PUSH HL LD A,(IX+TgX):SUB 12 RRCA:RRCA:RRCA AND #1F POP IX POP DE CALL ANDINV POP IX POP BC RET CalcInvAdd LD A,(IX+TgType) LD DE,352 LD HL,InvShapes CIA OR A JR Z CIA1 ADD HL,DE DEC A JR CIA CIA1 LD A,(IX+TgX):SUB 12 AND #7 LD DE,44 CIA2 OR A RET Z ADD HL,DE DEC A JR CIA2 BaseAlive DEFB 1 BaseX DEFB 10 BaseY DEFB 191-8 BaseSpeed DEFB 1 FireP DEFB 0 MoveBase LD A,(BaseSpeed) DEC A LD (BaseSpeed),A JR NZ MB4 LD A,25 LD (BaseSpeed),A CALL MB3 MB4 LD BC,32766 IN A,(C) BIT 0,A JR NZ MB1 LD A,(FireP) OR A LD A,1:LD (FireP),A RET NZ LD D,0-3&#FF LD E,191-15 LD B,20:LD C,0 LD IX,BaseAlive CALL FireProjB RET MB1 XOR A:LD (FireP),A:RET MB3 LD BC,65278 IN A,(C) AND #06 JP PE ORBase BIT 1,A JR NZ MBRight LD A,(BaseX) CP BLeft RET Z CALL ANDBase LD A,(BaseX):DEC A:LD (BaseX),A JP ORBase MBRight LD A,(BaseX) CP BRight RET Z CALL ANDBase LD A,(BaseX):INC A:LD (BaseX),A JP ORBase InvDir DEFB 0 InvSpeed DEFB 1 NoInv1 DEFB 0 NoInv2 DEFB 0 cInv DEFB 0 pcInv DEFW InvTable ChangeDir DEFB 0 MoveInvs LD A,(InvSpeed) DEC A LD (InvSpeed),A RET NZ LD A,InvSp LD (InvSpeed),A MI1 LD A,(cInv):LD HL,(pcInv) CP nInv JP Z LastInv INC A:LD (cInv),A LD DE,lInv:ADD HL,DE LD (pcInv),HL MI1a LD A,(HL) OR A JR Z MI1 LD A,(NoInv1):INC A:LD (NoInv1),A PUSH HL:POP IX CALL ANDInv CALL DoMoveInv LD A,(IX+TgType) XOR #01 LD (IX+TgType),A CALL ORInv Rnd1 LD A,R AND #F:CP 9:JR NC Rnd1 ADD A,A:ADD A,A:ADD A,A ADD A,A:ADD A,A LD E,A:LD A,0:ADC A,0:LD D,A LD HL,InvTable+1024+128 ADD HL,DE LD B,5 LD DE,0-288 FindItLp LD A,(HL) OR A JR NZ FILx ADD HL,DE DJNZ FindItLp RET FILx PUSH HL:POP IX LD A,R:AND #50:RET NZ FireIN LD A,(IX+TgY):ADD A,20:LD E,A LD A,R:AND #01:LD C,A:NEG:ADD A,4 LD D,A LD A,R:AND #3F:ADD A,20:LD B,A CALL FireProj RET C LD (IY+TgMissInv),1 RET DoMoveInv LD A,(InvDir) BIT 7,A CALL NZ DMIDown BIT 0,A JR NZ DMIRight LD A,(IX+TgX) SUB InvStep LD (IX+TgX),A CP InvLeftMar RET NC LD A,1:LD (ChangeDir),A RET RET DMIRight LD A,(IX+TgX) ADD A,InvStep LD (IX+TgX),A CP InvRightMar RET C LD A,1:LD (ChangeDir),A RET DMIDown EX AF,AF' LD A,(IX+TgY) ADD A,InvVStep LD (IX+TgY),A EX AF,AF' RET LastInv LD A,(NoInv1):LD (NoInv2),A OR A JR NZ MI2 LD A,1 LD (EndF),A RET MI2 XOR A:LD (NoInv1),A INC A:LD (cInv),A LD A,(InvDir):AND #1:LD (InvDir),A LD HL,InvTable LD (pcInv),HL LD A,(ChangeDir):OR A:JP Z MI1a XOR A:LD (ChangeDir),A LD A,(InvDir):OR #80:XOR #01 LD (InvDir),A JP MI1a MoveShip NOP LD A,(ShipSpeed) DEC A LD (ShipSpeed),A RET NZ LD A,ShipVel LD (ShipSpeed),A CALL ANDShip LD A,(ShipDelX) LD B,A LD A,(ShipX) ADD A,B LD (ShipX),A LD B,A LD A,(TargetMargin) CP B JR Z MSexit CALL ORShip RET MSexit LD A,#C9:LD (MoveShip),A RET ShipSpeed DEFB 1 ShipX DEFB SLeft ShipDelX DEFB 1 TargetMargin DEFB SRight NextShip LD HL,(NextShipT) DEC HL LD (NextShipT),HL LD A,L:OR H RET NZ LD HL,ShipTime LD (NextShipT),HL LD A,(NoInv2) CP 8 RET C XOR A LD (MoveShip),A LD A,R AND #01 JR Z NSRight LD A,SLeft:LD (TargetMargin),A LD A,SRight:LD (ShipX),A LD A,1:LD (ShipSpeed),A LD A,0-1&#FF:LD (ShipDelX),A RET NSRight LD A,SRight:LD (TargetMargin),A LD A,SLeft :LD (ShipX),A LD A,1:LD (ShipSpeed),A LD A,1:LD (ShipDelX),A RET NextShipT DEFW ShipTime MoveProj LD B,nProj+1 LD IX,ProjTable MPlp LD A,(IX+TgAlive) OR A CALL NZ MP1 LD DE,lInv ADD IX,DE DJNZ MPlp RET MP1 DEC (IX+TgSpeed) RET NZ LD A,(IX+TgSpeedI):LD (IX+TgSpeed),A PUSH BC CALL RemoveProj LD A,(IX+TgMissCount) INC A:CP 3:JR NZ MP1z XOR A MP1z LD (IX+TgMissCount),A BIT 7,(IX+TgType) JR NZ MP1a LD A,(IX+TgY) ADD A,(IX+TgMissDisp) LD (IX+TgY),A CP 4 JR C MP2 CP 191-4 JR NC MP2 MP1a CALL PlaceProj POP BC:RET MP2 CALL Explode:POP BC:RET Explode CALL RemoveProj:LD (IX+TgAlive),4 LD (IX+TgType),#80 LD (IX+TgSpeed),50 LD (IX+TgSpeedI),50 RET ANDBar LD A,(IX+TgX) AND #07 LD HL,BitTable LD E,A:LD D,0 ADD HL,DE LD A,(HL) CPL LD C,A LD A,(IX+TgY) LD L,A:LD H,0 ADD HL,HL LD DE,LineYs ADD HL,DE PUSH HL:POP IY LD A,(IX+TgX) RRCA:RRCA:RRCA AND #1F LD E,A:LD D,0 LD B,8 RPlp LD L,(IY):LD H,(IY+1) ADD HL,DE EX AF,AF' LD A,(HL):AND C:LD (HL),A EX AF,AF' INC IY:INC IY DJNZ RPlp RET ORBar XOR A:LD (ProjHit),A LD A,(IX+TgX) AND #07 LD HL,BitTable LD E,A:LD D,0 ADD HL,DE LD A,(HL) LD C,A LD A,(IX+TgY) LD L,A:LD H,0 ADD HL,HL LD DE,LineYs ADD HL,DE PUSH HL:POP IY LD A,(IX+TgX) RRCA:RRCA:RRCA AND #1F LD E,A:LD D,0 LD B,8 PPlp LD L,(IY):LD H,(IY+1) ADD HL,DE EX AF,AF' LD A,(HL):AND C:JR NZ PPlp1 LD A,(HL):OR C:LD (HL),A EX AF,AF' INC IY:INC IY DJNZ PPlp RET PPlp1 CALL Explode PUSH IX CALL TestAndKill POP IX RET ProjHit NOP ZigCalc LD A,(IX+TgX) SUB 4 AND #07 ADD A,A:ADD A,A:ADD A,A:ADD A,A LD HL,ZigTable LD E,A:LD D,0 LD A,(IX+TgMissCount):OR A:JR Z ZC1 LD HL,ZigTable+128:DEC A:JR Z ZC1 LD HL,ZigTable+256 ZC1 ADD HL,DE PUSH HL LD A,(IX+TgY) LD L,A:LD H,0 ADD HL,HL LD DE,LineYs ADD HL,DE PUSH HL:POP IY LD A,(IX+TgX) SUB 4 RRCA:RRCA:RRCA AND #1F LD E,A:LD D,0 LD B,8 EXX:POP HL:EXX RET ANDZig CALL ZigCalc ZAlp LD L,(IY):LD H,(IY+1) ADD HL,DE EX AF,AF' EXX:LD A,(HL):INC HL:EXX CPL:AND(HL):LD (HL),A INC HL EXX:LD A,(HL):INC HL:EXX CPL:AND(HL):LD (HL),A EX AF,AF' INC IY:INC IY DJNZ ZAlp RET ORZig CALL ZigCalc ZOlp LD L,(IY):LD H,(IY+1) ADD HL,DE EX AF,AF' EXX:LD A,(HL):EXX AND(HL):JP NZ PPlp1 EXX:LD A,(HL):INC HL:EXX OR (HL):LD (HL),A:INC HL EXX:LD A,(HL):EXX AND(HL):JP NZ PPlp1 EXX:LD A,(HL):INC HL:EXX OR (HL):LD (HL),A EX AF,AF' INC IY:INC IY DJNZ ZOlp RET ZigTable DEFB #08,#00 DEFB #10,#00 DEFB #08,#00 DEFB #04,#00 DEFB #08,#00 DEFB #10,#00 DEFB #08,#00 DEFB #04,#00 ;0 DEFB #04,#00 DEFB #08,#00 DEFB #04,#00 DEFB #02,#00 DEFB #04,#00 DEFB #08,#00 DEFB #04,#00 DEFB #02,#00 ;1 DEFB #02,#00 DEFB #04,#00 DEFB #02,#00 DEFB #01,#00 DEFB #02,#00 DEFB #04,#00 DEFB #02,#00 DEFB #01,#00 ;2 DEFB #01,#00 DEFB #02,#00 DEFB #01,#00 DEFB #00,#80 DEFB #01,#00 DEFB #02,#00 DEFB #01,#00 DEFB #00,#80 ;3 DEFB #00,#80 DEFB #01,#00 DEFB #00,#80 DEFB #00,#40 DEFB #00,#80 DEFB #01,#00 DEFB #00,#80 DEFB #00,#40 ;4 DEFB #00,#40 DEFB #00,#80 DEFB #00,#40 DEFB #00,#20 DEFB #00,#40 DEFB #00,#80 DEFB #00,#40 DEFB #00,#20 ;5 DEFB #00,#20 DEFB #00,#40 DEFB #00,#20 DEFB #00,#10 DEFB #00,#20 DEFB #00,#40 DEFB #00,#20 DEFB #00,#10 ;6 DEFB #00,#10 DEFB #00,#20 DEFB #00,#10 DEFB #00,#08 DEFB #00,#10 DEFB #00,#20 DEFB #00,#10 DEFB #00,#08 ;7 DEFB #10,#00 DEFB #08,#00 DEFB #04,#00 DEFB #08,#00 DEFB #10,#00 DEFB #08,#00 DEFB #04,#00 DEFB #08,#00 ;0 DEFB #08,#00 DEFB #04,#00 DEFB #02,#00 DEFB #04,#00 DEFB #08,#00 DEFB #04,#00 DEFB #02,#00 DEFB #04,#00 ;1 DEFB #04,#00 DEFB #02,#00 DEFB #01,#00 DEFB #02,#00 DEFB #04,#00 DEFB #02,#00 DEFB #01,#00 DEFB #02,#00 ;2 DEFB #02,#00 DEFB #01,#00 DEFB #00,#80 DEFB #01,#00 DEFB #02,#00 DEFB #01,#00 DEFB #00,#80 DEFB #01,#00 ;3 DEFB #01,#00 DEFB #00,#80 DEFB #00,#40 DEFB #00,#80 DEFB #01,#00 DEFB #00,#80 DEFB #00,#40 DEFB #00,#80 ;4 DEFB #00,#80 DEFB #00,#40 DEFB #00,#20 DEFB #00,#40 DEFB #00,#80 DEFB #00,#40 DEFB #00,#20 DEFB #00,#40 ;5 DEFB #00,#40 DEFB #00,#20 DEFB #00,#10 DEFB #00,#20 DEFB #00,#40 DEFB #00,#20 DEFB #00,#10 DEFB #00,#20 ;6 DEFB #00,#20 DEFB #00,#10 DEFB #00,#08 DEFB #00,#10 DEFB #00,#20 DEFB #00,#10 DEFB #00,#08 DEFB #00,#10 ;7 DEFB #08,#00 DEFB #04,#00 DEFB #08,#00 DEFB #10,#00 DEFB #08,#00 DEFB #04,#00 DEFB #08,#00 DEFB #10,#00 ;0 DEFB #04,#00 DEFB #02,#00 DEFB #04,#00 DEFB #08,#00 DEFB #04,#00 DEFB #02,#00 DEFB #04,#00 DEFB #08,#00 ;1 DEFB #02,#00 DEFB #01,#00 DEFB #02,#00 DEFB #04,#00 DEFB #02,#00 DEFB #01,#00 DEFB #02,#00 DEFB #04,#00 ;2 DEFB #01,#00 DEFB #00,#80 DEFB #01,#00 DEFB #02,#00 DEFB #01,#00 DEFB #00,#80 DEFB #01,#00 DEFB #02,#00 ;3 DEFB #00,#80 DEFB #00,#40 DEFB #00,#80 DEFB #01,#00 DEFB #00,#80 DEFB #00,#40 DEFB #00,#80 DEFB #01,#00 ;4 DEFB #00,#40 DEFB #00,#20 DEFB #00,#40 DEFB #00,#80 DEFB #00,#40 DEFB #00,#20 DEFB #00,#40 DEFB #00,#80 ;5 DEFB #00,#20 DEFB #00,#10 DEFB #00,#20 DEFB #00,#40 DEFB #00,#20 DEFB #00,#10 DEFB #00,#20 DEFB #00,#40 ;6 DEFB #00,#10 DEFB #00,#08 DEFB #00,#10 DEFB #00,#20 DEFB #00,#10 DEFB #00,#08 DEFB #00,#10 DEFB #00,#20 ;7 RemoveProj LD A,(IX+TgType) BIT 7,A JR NZ RemExpl BIT 0,(IX+TgType):JP NZ ANDZig JP ANDBar PlaceProj LD A,(IX+TgType) BIT 7,A JR NZ PlaceExpl BIT 0,(IX+TgType):JP NZ ORZig JP ORBar RemExpl AND #3 LD HL,Expl1 OR A JR Z RE1 LD HL,Expl2 DEC A JR Z RE1 LD HL,Expl3 DEC A JR Z RE1 LD HL,Expl4 RE1 PUSH IX:CALL CalcExplAdd CALL ANDIt POP IX RET PlaceExpl DEC (IX+TgAlive):RET Z LD A,R:AND #3 LD (IX+TgType),A SET 7,(IX+TgType) LD HL,Expl1 OR A JR Z PE1 LD HL,Expl2 DEC A JR Z PE1 LD HL,Expl3 DEC A:JR Z PE1 LD HL,Expl4 PE1 PUSH IX:CALL CalcExplAdd CALL ORIt POP IX RET KillExpl LD (IX+TgAlive),0 RET CalcExplAdd LD A,(IX+TgX):SUB 8 AND #7 RRCA:RRCA:RRCA LD E,A:LD D,0 ADD HL,DE EX DE,HL LD BC,LineYs LD L,(IX+TgY):LD H,0 ADD HL,HL:ADD HL,BC PUSH HL LD A,(IX+TgX):SUB 8 RRCA:RRCA:RRCA AND #1F POP IX RET TestAndKill LD A,(IX+TgMissInv):OR A:JR NZ HBase LD L,(IX+TgX) LD A,(IX+TgY):CP 8:JP C HShip LD H,A LD B,nInv LD IY,InvTable TAKlp LD A,(IY+TgAlive) OR A JR Z TAKlpx LD A,(IY+TgX) SUB L JP P TAK1 NEG TAK1 CP 9 JR NC TAKlpx LD A,H SUB (IY+TgY) JR C TAKlpx CP 16 JR NC TAKlpx ;Found it PUSH IY:POP IX:CALL ANDInv LD (IY+TgAlive),0 RET TAKlpx LD DE,lInv ADD IY,DE DJNZ TAKlp RET HBase LD A,(IX+TgY) CP 191-13 RET C LD A,(BaseX) SUB (IX+TgX) JP P HB1 NEG HB1 CP 14 RET NC JP #8000 HShip LD A,(MoveShip) OR A RET NZ LD A,(ShipX):SUB (IX+TgX) JP P HSp1 NEG HSp1 CP 10 RET NC ;HitShip CALL ANDShip LD A,#C9:LD (MoveShip),A RET FireProjB LD IY,ProjTable LD A,(IY+TgAlive):OR A:JR Z FPB RET FireProj PUSH DE ; D = Disp E = Y PUSH BC ; B = Speed C = Type CALL FPS POP BC POP DE RET C FPB LD (IY+TgSpeed),1 LD (IY+TgMissCount),0 LD (IY+TgSpeedI),B LD (IY+TgType),C LD A,(IX+TgX):LD (IY+TgX),A LD (IY+TgY),E LD (IY+TgAlive),1 LD (IY+TgMissDisp),D LD (IY+TgMissInv),0 OR A RET FPS LD IY,ProjTable+lInv LD B,nProj LD DE,lInv FPS1 LD A,(IY+TgAlive) OR A RET Z ADD IY,DE DJNZ FPS1 SCF RET BitTable DEFB #80,#40,#20,#10,#08,#04,#02,#01 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 LineYs DEFW #4000,#4100,#4200,#4300 ShipYs EQU LineYs DEFW #4400,#4500,#4600,#4700 DEFW #4020,#4120,#4220,#4320 DEFW #4420,#4520,#4620,#4720 DEFW #4040,#4140,#4240,#4340 DEFW #4440,#4540,#4640,#4740 DEFW #4060,#4160,#4260,#4360 DEFW #4460,#4560,#4660,#4760 DEFW #4080,#4180,#4280,#4380 DEFW #4480,#4580,#4680,#4780 DEFW #40A0,#41A0,#42A0,#43A0 DEFW #44A0,#45A0,#46A0,#47A0 DEFW #40C0,#41C0,#42C0,#43C0 DEFW #44C0,#45C0,#46C0,#47C0 DEFW #40E0,#41E0,#42E0,#43E0 DEFW #44E0,#45E0,#46E0,#47E0 DEFW #4800,#4900,#4A00,#4B00 DEFW #4C00,#4D00,#4E00,#4F00 DEFW #4820,#4920,#4A20,#4B20 DEFW #4C20,#4D20,#4E20,#4F20 DEFW #4840,#4940,#4A40,#4B40 DEFW #4C40,#4D40,#4E40,#4F40 DEFW #4860,#4960,#4A60,#4B60 DEFW #4C60,#4D60,#4E60,#4F60 DEFW #4880,#4980,#4A80,#4B80 DEFW #4C80,#4D80,#4E80,#4F80 DEFW #48A0,#49A0,#4AA0,#4BA0 DEFW #4CA0,#4DA0,#4EA0,#4FA0 DEFW #48C0,#49C0,#4AC0,#4BC0 DEFW #4CC0,#4DC0,#4EC0,#4FC0 DEFW #48E0,#49E0,#4AE0,#4BE0 DEFW #4CE0,#4DE0,#4EE0,#4FE0 DEFW #5000,#5100,#5200,#5300 DEFW #5400,#5500,#5600,#5700 DEFW #5020,#5120,#5220,#5320 DEFW #5420,#5520,#5620,#5720 DEFW #5040,#5140,#5240,#5340 DEFW #5440,#5540,#5640,#5740 ShieldYs DEFW #5060,#5160,#5260,#5360 DEFW #5460,#5560,#5660,#5760 DEFW #5080,#5180,#5280,#5380 DEFW #5480,#5580,#5680,#5780 DEFW #50A0,#51A0,#52A0,#53A0 DEFW #54A0,#55A0,#56A0,#57A0 DEFW #50C0,#51C0,#52C0,#53C0 DEFW #54C0,#55C0,#56C0,#57C0 BaseYs DEFW #50E0,#51E0,#52E0,#53E0 DEFW #54E0,#55E0,#56E0,#57E0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 DEFW 0,0,0,0,0,0,0,0,0,0,0,0 ShieldDefn DEFB #00,#3F,#FC,#00 DEFB #01,#FF,#FF,#80 DEFB #03,#FF,#FF,#C0 DEFB #07,#FF,#FF,#E0 DEFB #0F,#FF,#FF,#F0 DEFB #1F,#FF,#FF,#F8 DEFB #3F,#FF,#FF,#FC DEFB #7F,#FF,#FF,#FE DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF DEFB #FF,#E0,#07,#FF DEFB #FF,#80,#01,#FF DEFB #FF,#00,#00,#FF DEFB #FE,#00,#00,#7F DEFB #FC,#00,#00,#3F DEFB #F8,#00,#00,#1F DEFB #F0,#00,#00,#0F BaseDef1 DEFB #00,#08,#00,#00 DEFB #00,#08,#00,#00 DEFB #00,#08,#00,#00 DEFB #00,#7F,#00,#00 DEFB #0F,#FF,#F8,#00 DEFB #1F,#FF,#FC,#00 DEFB #1F,#FF,#FC,#00 DEFB #1F,#FF,#FC,#00 InvDef0 DEFB #00,#08,#00,#00 DEFB #00,#1C,#00,#00 DEFB #00,#3E,#00,#00 DEFB #00,#7F,#00,#00 DEFB #00,#C9,#80,#00 DEFB #00,#C9,#80,#00 DEFB #00,#FF,#80,#00 DEFB #00,#FF,#80,#00 DEFB #00,#2A,#00,#00 DEFB #00,#41,#00,#00 DEFB #00,#22,#00,#00 ;Inv1 DEFB #00,#08,#00,#00 DEFB #00,#1C,#00,#00 DEFB #00,#3E,#00,#00 DEFB #00,#7F,#00,#00 DEFB #00,#C9,#80,#00 DEFB #00,#C9,#80,#00 DEFB #00,#FF,#80,#00 DEFB #00,#FF,#80,#00 DEFB #00,#14,#00,#00 DEFB #00,#2A,#00,#00 DEFB #00,#55,#00,#00 ;Inv2 DEFB #00,#63,#00,#00 DEFB #00,#14,#00,#00 DEFB #00,#3E,#00,#00 DEFB #00,#7F,#00,#00 DEFB #00,#C9,#80,#00 DEFB #01,#C9,#C0,#00 DEFB #02,#FF,#A0,#00 DEFB #02,#FF,#A0,#00 DEFB #02,#E3,#A0,#00 DEFB #00,#80,#80,#00 DEFB #00,#63,#00,#00 ;Inv3 DEFB #00,#63,#00,#00 DEFB #00,#14,#00,#00 DEFB #02,#3E,#20,#00 DEFB #02,#7F,#20,#00 DEFB #02,#C9,#A0,#00 DEFB #01,#C9,#C0,#00 DEFB #00,#FF,#80,#00 DEFB #00,#FF,#80,#00 DEFB #00,#E3,#80,#00 DEFB #00,#80,#80,#00 DEFB #01,#00,#C0,#00 ;Inv4 DEFB #00,#3E,#00,#00 DEFB #01,#FF,#C0,#00 DEFB #03,#FF,#E0,#00 DEFB #03,#08,#60,#00 DEFB #03,#08,#60,#00 DEFB #03,#FF,#E0,#00 DEFB #03,#F7,#E0,#00 DEFB #03,#E3,#E0,#00 DEFB #00,#DD,#80,#00 DEFB #01,#80,#C0,#00 DEFB #00,#E3,#80,#00 ;Inv5 DEFB #00,#3E,#00,#00 DEFB #01,#FF,#C0,#00 DEFB #03,#FF,#E0,#00 DEFB #03,#08,#60,#00 DEFB #03,#08,#60,#00 DEFB #03,#FF,#E0,#00 DEFB #03,#F7,#E0,#00 DEFB #03,#E3,#E0,#00 DEFB #00,#DD,#80,#00 DEFB #01,#80,#C0,#00 DEFB #03,#00,#60,#00 ExplDefn1 DEFB #00,#80,#00,#00 DEFB #01,#40,#00,#00 DEFB #02,#C0,#00,#00 DEFB #05,#E0,#00,#00 DEFB #03,#A8,#00,#00 DEFB #02,#40,#00,#00 DEFB #01,#C0,#00,#00 DEFB #00,#80,#00,#00 DEFB #00,#80,#00,#00 ;expl 2 DEFB #02,#A0,#00,#00 DEFB #04,#88,#00,#00 DEFB #05,#96,#00,#00 DEFB #09,#DC,#00,#00 DEFB #04,#A0,#00,#00 DEFB #03,#B0,#00,#00 DEFB #00,#80,#00,#00 DEFB #00,#80,#00,#00 ;expl 3 DEFB #01,#D8,#00,#00 DEFB #05,#74,#00,#00 DEFB #0A,#78,#00,#00 DEFB #03,#E4,#00,#00 DEFB #09,#58,#00,#00 DEFB #05,#E0,#00,#00 DEFB #00,#80,#00,#00 DEFB #00,#80,#00,#00 ;expl 4 DEFB #02,#40,#00,#00 DEFB #05,#10,#00,#00 DEFB #02,#20,#00,#00 DEFB #03,#10,#00,#00 DEFB #01,#50,#00,#00 DEFB #01,#20,#00,#00 DEFB #00,#80,#00,#00 ShipDefn DEFB #00,#00,#00,#00 DEFB #00,#00,#00,#00 DEFB #00,#08,#00,#00 DEFB #00,#FF,#80,#00 DEFB #1F,#FF,#FC,#00 DEFB #6A,#AA,#AB,#00 DEFB #1F,#FF,#FC,#00 DEFB #00,#FF,#80,#00 DEFB #00,#08,#00,#00 DEFB #00,#00,#00,#00 BaseDefn DEFS 256 InvShapes DEFS 352 * 6 Expl1 DEFS 256 Expl2 DEFS 256 Expl3 DEFS 256 Expl4 DEFS 256 Ship1 DEFS 256 ENDY EQU $