;:::::::::::::::::::::::::::::::::::::::: ; ; 1:57 pm 27/3/84 Dark Star (?) ; 3:39 pm 29/3/84 Began towers ; ; Spectrum version ; ; Changed slightly to support zeus.exe ; ; ;:::::::::::::::::::::::::::::::::::::::: ; This command tells Zeus where to put the code it generates. As a szx file... ; Alter the path to suit your system output_szx "c:\ds.szx",$0000,Begin ; The szx file ; If for some reason you want binary, uncomment this line ; output_bin "c:\ds.bin",$0000,$10000 ; The binary file nStar EQU 85 ; Plus ref lStar EQU 9 StarX EQU 0 StarY EQU 2 StarZ EQU 4 StarAddr EQU 6 StarBit EQU 8 ; ; nProj EQU 30 lProj EQU 16 ProjX EQU 0 ProjY EQU 2 ProjZ EQU 4 ProjAddr EQU 6 ProjBit EQU 8 ProjLife EQU 9 ProjDX EQU 10 ProjDY EQU 12 ProjDZ EQU 14 Range EQU 60 FireDelay EQU 1 ; ; StartY EQU 500 StartZ EQU Zdvstep Zdvstep EQU -20 Xdtstep EQU 8 Ydtstep EQU 16 ; ; nObje EQU 4 lObje EQU 256 ObjeX EQU 0 ObjeY EQU 2 ObjeZ EQU 4 ObjeDY EQU 6 ObjepMove EQU 8 ObjeOldLines EQU 10 GrowthRate EQU 16 lObjeLine EQU 8 TWidth EQU #100 VertBit EQU 2 VertOff EQU 3 VertpYTab EQU 4 VertLeng EQU 5 HoriBitl EQU 2 HoriBitr EQU 3 HoriLeng EQU 4 HoriAddr EQU 5 ; ; ORG #8000 Begin CALL GenYTab CALL Gen192Tab LD HL,0 LD (DeltaX),HL LD (DeltaY),HL LD HL,StartZ LD (DeltaZ),HL LD HL,BitTab LD A,#80 GenXTab LD (HL),A INC L RRCA JR NC GenXTab LD A,#FF GenXTab1 LD (HL),A INC L SRL A OR A JR NZ GenXTab1 LD A,#80 GenXTab2 LD (HL),A INC L SRA A CP #FF JR NZ GenXTab2 LD (HL),A CALL SetUpStars CALL SetUpProj CALL SetUpObje CALL CLS Loop CALL ShowStars CALL ShowProj CALL ShowObje CALL AlterSteps CALL FireIfNess LD BC,#F7FE IN A,(C) OR #E0 CP #FE JR NZ Loop RET ; ; FireKey LD A,#BD IN A,(#FE) OR #E1 INC A RET CallHL JP (HL) GenYTab LD HL,YTable LD DE,#4000 LD C,24 CharLp LD B,8 CharLp1 LD (HL),E INC H LD (HL),D DEC H INC L INC D DJNZ CharLp1 LD A,D SUB 8 LD D,A DEC C JR Z GYT1 LD A,E ADD A,32 LD E,A JR NC CharLp LD A,D ADD A,8 LD D,A JR CharLp GYT1 LD B,#40 GYT2 LD (HL),0 INC H LD (HL),0 DEC H INC L DJNZ GYT2 RET CLS LD HL,#4000 LD DE,#4001 LD BC,#1800 LD (HL),0 LDIR LD BC,#2FF LD A,(GameAttr) LD (HL),A LDIR XOR A OUT (#FE),A RET Rand CALL Rand1 LD DE,(Seed) RET Rand1 LD HL,(Seed+2) RL L RL H RL L RL H LD C,H LD A,(Seed) RLA LD B,A LD DE,(Seed+1) RL E RL D RES 7,D LD HL,(Seed) ADD HL,BC LD (Seed),HL LD HL,(Seed+2) ADC HL,DE RES 7,H LD (Seed+2),HL RET M LD HL,Seed Rand2 INC (HL) RET NZ INC HL JR Rand2 Seed DEFB "Nig!" GameAttr DEFB #47 Gen192Tab LD BC,DivTab LD HL,0 LD DE,#00C0 G192 LD A,H LD (BC),A ADD HL,DE INC C JR NZ G192 RET DivHLDE XOR A SBC HL,DE ADD HL,DE JR C Div6 JR Z Div1 LD A,D OR A JR NZ Div2 LD A,H CP E JR NC Div3 Div2 LD A,L LD L,H LD H,0 LD B,8 Div4 ADD A,A ADC HL,HL SBC HL,DE JR NC Div5 ADD HL,DE DJNZ Div4 JP Div6 Div5 INC A DJNZ Div4 Div6 LD C,A LD B,8 Div7 ADD A,A ADD HL,HL SBC HL,DE JR NC Div8 ADD HL,DE DJNZ Div7 LD H,C LD L,A RET Div8 INC A DJNZ Div7 LD H,C LD L,A RET Div1 LD HL,#0100 RET Div3 RET ObjeDiv BIT 7,H JR NZ OD1 CALL DivHLDE SRL H RR L RET OD1 LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL CALL DivHLDE SRL H RR L LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET MultHLDE LD B,H LD C,L LD HL,0 LD A,C LD C,B LD B,8 RRA Mul0 JR NC Mul1 ADD HL,DE Mul1 RR H RL L RRA DJNZ Mul0 LD B,A LD A,C LD C,B LD B,8 RRA Mul2 JR NC Mul3 ADD HL,DE Mul3 RR H RR L RRA DJNZ Mul2 LD H,L LD L,A RET SignMultHLDE BIT 7,H JR Z SM1 LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL BIT 7,D JR Z SMn LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE SMp JP MultHLDE SMn CALL MultHLDE LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL RET SM1 BIT 7,D JR Z MultHLDE LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE JP SMn CalcAddr LD BC,128 ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL LD H,DivTab/256 LD L,(HL) LD H,YTable/256 LD A,(HL) INC H LD H,(HL) LD L,A LD A,E RRCA RRCA RRCA AND #1F OR L LD L,A LD A,E AND #7 LD E,A LD D,BitTab/256 LD A,(DE) RET NegHL LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; ; SetUpStars LD IX,StarTable LD B,nStar SUSlp PUSH BC CALL Rand LD (IX+StarX),E LD (IX+StarX+1),D CALL Rand LD (IX+StarZ),E LD (IX+StarZ+1),D LD DE,StartY LD (IX+StarY),E LD (IX+StarY+1),D LD (IX+StarBit),0 LD BC,lStar ADD IX,BC POP BC DJNZ SUSlp LD HL,0 LD (GroundX),HL LD (GroundZ),HL LD HL,StartY LD (GroundY),HL XOR A LD (GroundZ+4),A RET ShowStars LD IX,GroundX LD HL,(DeltaX) LD DE,(DeltaY) LD BC,(DeltaZ) EXX LD B,nStar+1 SSlp PUSH BC EXX LD A,L ADD A,(IX+StarX) LD (IX+StarX),A LD A,H ADC A,(IX+StarX+1) LD (IX+StarX+1),A LD A,E ADD A,(IX+StarY) LD (IX+StarY),A LD A,D ADC A,(IX+StarY+1) LD (IX+StarY+1),A LD A,C ADD A,(IX+StarZ) LD (IX+StarZ),A LD A,B ADC A,(IX+StarZ+1) LD (IX+StarZ+1),A EXX LD A,(IX+StarBit) OR A JR Z SS1 LD L,(IX+StarAddr) LD H,(IX+StarAddr+1) CPL AND (HL) LD (HL),A SS1 BIT 7,(IX+StarZ+1) JP NZ SSlpx LD L,(IX+StarX) LD H,(IX+StarX+1) LD E,(IX+StarZ) LD D,(IX+StarZ+1) BIT 7,H JR NZ SSW1 OR A SBC HL,DE JP NC SSlpx ADD HL,DE CALL DivHLDE SRL H RR L JP SS2 SSW1 LD A,L:CPL:LD L,A LD A,H:CPL:LD H,A INC HL OR A SBC HL,DE JP NC SSlpx ADD HL,DE CALL DivHLDE SRL H RR L LD A,L:CPL:LD L,A LD H,#FF INC HL SS2 PUSH HL LD L,(IX+StarY) LD H,(IX+StarY+1) LD E,(IX+StarZ) LD D,(IX+StarZ+1) BIT 7,H JR NZ SSW1a OR A SBC HL,DE JP NC SSlpx1 ADD HL,DE CALL DivHLDE SRL H RR L JP SS2a SSW1a LD A,L:CPL:LD L,A LD A,H:CPL:LD H,A INC HL OR A SBC HL,DE JP NC SSlpx1 ADD HL,DE CALL DivHLDE SRL H RR L LD A,L:CPL:LD L,A LD H,#FF INC HL SS2a POP DE CALL CalcAddr LD (IX+StarAddr),L LD (IX+StarAddr+1),H LD (IX+StarBit),A OR (HL) LD (HL),A SSlpx LD BC,lStar ADD IX,BC POP BC DEC B JP NZ SSlp RET SSlpx1 POP AF LD BC,lStar ADD IX,BC POP BC DEC B JP NZ SSlp RET SetUpProj LD IX,ProjTable LD B,nProj LD DE,lProj XOR A SUPlp LD (IX+ProjLife),A ADD IX,DE DJNZ SUPlp LD HL,FireDelay LD (FireDel),HL XOR A LD (SideSel),A LD A,#40 LD (TopSel),A RET DEFB "Here we go again!" ShowProj LD IX,ProjTable LD B,nProj SPlp PUSH BC LD A,(IX+ProjLife) OR A JP Z SPlpx XOR A OUT (#FE),A LD L,(IX+ProjX) LD H,(IX+ProjX+1) LD BC,(DeltaX) ADD HL,BC LD C,(IX+ProjDX) LD B,(IX+ProjDX+1) ADD HL,BC LD (IX+ProjX),L LD (IX+ProjX+1),H LD L,(IX+ProjY) LD H,(IX+ProjY+1) LD BC,(DeltaY) ADD HL,BC LD C,(IX+ProjDY) LD B,(IX+ProjDY+1) ADD HL,BC LD (IX+ProjY),L LD (IX+ProjY+1),H LD BC,(GroundY) OR A SBC HL,BC BIT 7,H JP Z SPKill LD L,(IX+ProjZ) LD H,(IX+ProjZ+1) LD BC,(DeltaZ) ADD HL,BC LD C,(IX+ProjDZ) LD B,(IX+ProjDZ+1) ADD HL,BC LD (IX+ProjZ),L LD (IX+ProjZ+1),H LD A,(IX+ProjBit) OR A JR Z SP1 LD L,(IX+ProjAddr) LD H,(IX+ProjAddr+1) CPL AND (HL) LD (HL),A LD A,0 FireNoiseF EQU $-1 OUT (#FE),A SP1 BIT 7,(IX+ProjZ+1) JP NZ SPKill DEC (IX+ProjLife) JP Z SPlpx LD L,(IX+ProjX) LD H,(IX+ProjX+1) LD E,(IX+ProjZ) LD D,(IX+ProjZ+1) BIT 7,H JR NZ SPW1 OR A SBC HL,DE JP NC SPlpx ADD HL,DE CALL DivHLDE SRL H RR L JP SP2 SPW1 LD A,L:CPL:LD L,A LD A,H:CPL:LD H,A INC HL OR A SBC HL,DE JP NC SPlpx ADD HL,DE CALL DivHLDE SRL H RR L LD A,L:CPL:LD L,A LD H,#FF INC HL SP2 PUSH HL LD L,(IX+ProjY) LD H,(IX+ProjY+1) LD E,(IX+ProjZ) LD D,(IX+ProjZ+1) BIT 7,H JR NZ SPW1a OR A SBC HL,DE JP NC SPlpx1 ADD HL,DE CALL DivHLDE SRL H RR L JP SP2a SPW1a LD A,L:CPL:LD L,A LD A,H:CPL:LD H,A INC HL OR A SBC HL,DE JP NC SPlpx1 ADD HL,DE CALL DivHLDE SRL H RR L LD A,L:CPL:LD L,A LD H,#FF INC HL SP2a POP DE CALL CalcAddr LD (IX+ProjAddr),L LD (IX+ProjAddr+1),H LD (IX+ProjBit),A OR (HL) LD (HL),A SPlpx LD BC,lProj ADD IX,BC POP BC DEC B JP NZ SPlp RET SPKill LD (IX+ProjLife),0 LD A,(IX+ProjBit) CPL LD L,(IX+ProjAddr) LD H,(IX+ProjAddr+1) AND (HL) LD (HL),A LD (IX+ProjBit),0 PUSH AF SPlpx1 POP AF LD BC,lProj ADD IX,BC POP BC DEC B JP NZ SPlp RET FireIfNess LD HL,(FireDel) XOR A LD (FireNoiseF),A LD A,L OR H JR Z FIN1 DEC HL LD (FireDel),HL CALL FireKey RET Z LD A,#F8 LD (FireNoiseF),A RET FIN1 CALL FireKey RET Z LD A,#F8 LD (FireNoiseF),A LD IX,ProjTable LD B,nProj LD DE,lProj FINlp LD A,(IX+ProjLife) OR A JR Z FIN2 ADD IX,DE DJNZ FINlp RET FIN2 LD (IX+ProjLife),Range XOR A LD (IX+ProjY+1),A LD (IX+ProjZ),A LD (IX+ProjZ+1),A LD (IX+ProjBit),A LD HL,(DeltaX) CALL ProjMaths LD (IX+ProjDX),L LD (IX+ProjDX+1),H LD HL,(DeltaY) CALL ProjMaths LD (IX+ProjDY),L LD (IX+ProjDY+1),H LD HL,(DeltaZ) CALL ProjMaths LD (IX+ProjDZ),L LD (IX+ProjDZ+1),H LD A,(SideSel) CPL LD (SideSel),A OR A JR NZ FIN3 LD A,(TopSel) XOR #80 LD (TopSel),A FIN3 LD A,(SideSel) LD (IX+ProjX+1),A LD (IX+ProjX),#80 LD A,(TopSel) LD (IX+ProjY),A LD HL,FireDelay LD (FireDel),HL RET ProjMaths CALL NegHL ADD HL,HL RET SetUpObje LD IX,ObjeTable LD B,nObje SUOlp PUSH BC LD HL,ObjeTemp PUSH IX POP DE LD BC,lObje LDIR PUSH DE CALL Rand LD (IX+ObjeX),E LD (IX+ObjeX+1),D POP IX POP BC DJNZ SUOlp RET ShowObje LD IX,ObjeTable LD B,nObje SOlp PUSH BC LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD BC,(DeltaX) ADD HL,BC LD (IX+ObjeX),L LD (IX+ObjeX+1),H LD L,(IX+ObjeY) LD H,(IX+ObjeY+1) LD BC,(DeltaY) ADD HL,BC LD (IX+ObjeY),L LD (IX+ObjeY+1),H LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD BC,(DeltaZ) ADD HL,BC LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H PUSH IX POP IY LD BC,ObjeOldLines SO1 ADD IY,BC LD L,(IY) LD H,(IY+1) CALL CallHL LD BC,lObjeLine JP SO1 nLine POP AF BIT 7,(IX+ObjeZ+1) JP NZ SOlpx LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD (TempX),HL LD E,(IX+ObjeZ) LD D,(IX+ObjeZ+1) LD (TempZ),DE LD BC,TWidth OR A SBC HL,BC LD (TempXl),HL CALL ObjeDiv LD (X1),HL LD HL,(TempX) LD BC,TWidth ADD HL,BC LD (TempXr),HL CALL ObjeDiv LD (X2),HL LD DE,(X1) OR A SBC HL,DE BIT 7,H JP NZ SOlpx ADD HL,DE LD BC,128 ADD HL,BC BIT 7,H JP NZ SOlpx EX DE,HL LD BC,-127 ADD HL,BC BIT 7,H JP Z SOlpx ;X windowed LD L,(IX+ObjeY) LD H,(IX+ObjeY+1) LD (TempY),HL LD DE,(TempZ) CALL ObjeDiv LD (Y1),HL LD HL,(GroundY) LD DE,(TempZ) CALL ObjeDiv LD (Y2),HL LD DE,(Y1) OR A SBC HL,DE BIT 7,H JP NZ SOlpx ADD HL,DE LD BC,128 ADD HL,BC BIT 7,H JP NZ SOlpx EX DE,HL LD BC,-127 ADD HL,BC BIT 7,H JP Z SOlpx ;Y windowed LD HL,(TempZ) LD BC,TWidth * 2 ADD HL,BC LD (TempZ),HL EX DE,HL LD HL,(TempXl) CALL ObjeDiv LD (X3),HL LD HL,(TempXr) LD DE,(TempZ) CALL ObjeDiv LD (X4),HL LD HL,(TempY) LD DE,(TempZ) CALL ObjeDiv LD (Y3),HL LD HL,(GroundY) LD DE,(TempZ) CALL ObjeDiv LD (Y4),HL LD L,(IX+ObjepMove) LD H,(IX+ObjepMove+1) CALL CallHL LD (IY),nLine&#FF LD (IY+1),nLine/256 SOlpx LD BC,lObje ADD IX,BC POP BC DEC B JP NZ SOlp RET pTower PUSH IX POP IY LD BC,ObjeOldLines ADD IY,BC LD HL,(X4) LD BC,(X2) DEC BC DEC HL OR A SBC HL,BC JP P Towerad LD HL,(X1) LD BC,(X3) DEC HL OR A SBC HL,BC JP P Towercf Towerbe LD A,(Y1+1) BIT 7,A JR NZ Towere Towerb LD HL,(Y2) LD DE,(Y1) LD BC,(X1) CALL VertLine LD HL,(Y2) LD DE,(Y1) LD BC,(X2) CALL VertLine LD HL,(X2) LD DE,(X1) LD BC,(Y1) CALL HoriLine LD HL,(X4) LD DE,(X3) LD BC,(Y3) CALL HoriLine LD HL,(X3) LD DE,(X1) EXX LD HL,(Y3) LD DE,(Y1) EXX CALL AnyLine LD HL,(X4) LD DE,(X2) EXX LD HL,(Y3) LD DE,(Y1) EXX JP AnyLine Towere LD HL,(Y2) LD DE,(Y1) LD BC,(X1) CALL VertLine LD HL,(Y2) LD DE,(Y1) LD BC,(X2) CALL VertLine LD HL,(X2) LD DE,(X1) LD BC,(Y1) JP HoriLine Towerad LD A,(Y1+1) BIT 7,A JR NZ Towerd Towera LD HL,(Y2) LD DE,(Y1) LD BC,(X1) CALL VertLine LD HL,(Y2) LD DE,(Y1) LD BC,(X2) CALL VertLine LD HL,(Y4) LD DE,(Y3) LD BC,(X4) CALL VertLine LD HL,(X2) LD DE,(X1) LD BC,(Y1) CALL HoriLine LD HL,(X4) LD DE,(X3) LD BC,(Y3) CALL HoriLine LD HL,(X3) LD DE,(X1) EXX LD HL,(Y3) LD DE,(Y1) EXX CALL AnyLine LD HL,(X4) LD DE,(X2) EXX LD HL,(Y3) LD DE,(Y1) EXX JP AnyLine Towerd LD HL,(Y2) LD DE,(Y1) LD BC,(X1) CALL VertLine LD HL,(Y2) LD DE,(Y1) LD BC,(X2) CALL VertLine LD HL,(Y4) LD DE,(Y3) LD BC,(X4) CALL VertLine LD HL,(X2) LD DE,(X1) LD BC,(Y1) CALL HoriLine LD HL,(X4) LD DE,(X2) EXX LD HL,(Y3) LD DE,(Y1) EXX JP AnyLine Towercf LD A,(Y1+1) BIT 7,A JR NZ Towerf Towerc LD HL,(Y2) LD DE,(Y1) LD BC,(X1) CALL VertLine LD HL,(Y2) LD DE,(Y1) LD BC,(X2) CALL VertLine LD HL,(Y4) LD DE,(Y3) LD BC,(X3) CALL VertLine LD HL,(X2) LD DE,(X1) LD BC,(Y1) CALL HoriLine LD HL,(X4) LD DE,(X3) LD BC,(Y3) CALL HoriLine LD HL,(X3) LD DE,(X1) EXX LD HL,(Y3) LD DE,(Y1) EXX CALL AnyLine LD HL,(X4) LD DE,(X2) EXX LD HL,(Y3) LD DE,(Y1) EXX JP AnyLine Towerf LD HL,(Y2) LD DE,(Y1) LD BC,(X1) CALL VertLine LD HL,(Y2) LD DE,(Y1) LD BC,(X2) CALL VertLine LD HL,(Y4) LD DE,(Y3) LD BC,(X3) CALL VertLine LD HL,(X2) LD DE,(X1) LD BC,(Y1) CALL HoriLine LD HL,(X4) LD DE,(X2) EXX LD HL,(Y3) LD DE,(Y1) EXX JP AnyLine AnyLine RET VertLine PUSH HL LD L,C LD H,B LD BC,128 ADD HL,BC BIT 7,H JR NZ VLx1 INC H DEC H JR NZ VLx1 LD A,L RRCA RRCA RRCA AND #1F LD (IY+VertOff),A LD A,L AND #7 LD L,A LD H,BitTab/256 LD A,(HL) LD (IY+VertBit),A POP HL LD BC,128 ADD HL,BC BIT 7,H JR Z VL1 LD HL,0 VL1 EX DE,HL ADD HL,BC BIT 7,H JR Z VL2 LD HL,0 VL2 EX DE,HL INC H DEC H JR Z VL3 LD HL,255 VL3 INC D DEC D JR Z VL4 LD DE,255 VL4 OR A SBC HL,DE RET Z LD H,DivTab/256 LD L,(HL) LD (IY+VertLeng),L LD D,DivTab/256 LD A,(DE) LD (IY+VertpYTab),A LD E,A LD D,YTable/256 ;Line LD B,(IY+VertLeng) LD A,(IY+VertOff) LD (VertMod1),A LD C,(IY+VertBit) LD (IY+0),VertAND&#FF LD (IY+1),VertAND/256 VertLoop LD A,(DE) ADD A,0 VertMod1 EQU $-1 LD L,A INC D LD A,(DE) LD H,A DEC D LD A,C OR (HL) LD (HL),A INC E DJNZ VertLoop LD BC,lObjeLine ADD IY,BC RET VLx1 POP HL RET VertAND LD B,(IY+VertLeng) LD A,(IY+VertOff) LD (VertAND1),A LD A,(IY+VertBit) CPL LD C,A LD E,(IY+VertpYTab) LD D,YTable/256 VertANDlp LD A,(DE) ADD A,0 VertAND1 EQU $-1 LD L,A INC D LD A,(DE) LD H,A DEC D LD A,C AND (HL) LD (HL),A INC E DJNZ VertANDlp RET HLx1 POP AF RET HoriLine PUSH HL LD L,C LD H,B LD BC,128 ADD HL,BC INC H DEC H JR NZ HLx1 LD H,DivTab/256 LD L,(HL) LD H,YTable/256 LD A,(HL) INC H LD H,(HL) LD (IY+HoriAddr+1),H LD (IY+HoriAddr),A POP HL ADD HL,BC BIT 7,H JR Z HLine1 LD HL,0 HLine1 INC H DEC H JR Z HLine2 LD HL,255 HLine2 EX DE,HL ADD HL,BC BIT 7,H JR Z HLine3 LD HL,0 HLine3 INC H DEC H JR Z HLine4 LD HL,255 HLine4 EX DE,HL OR A SBC HL,DE RET Z ADD HL,DE LD A,L AND #7 ADD A,16 LD C,A LD B,BitTab/256 LD A,(BC) LD (IY+HoriBitr),A LD H,A LD A,L RRCA RRCA RRCA AND #1F LD L,A LD A,E AND #7 ADD A,8 LD C,A LD A,(BC) LD (IY+HoriBitl),A LD D,A LD A,E RRCA RRCA RRCA AND #1F LD E,A LD A,L SUB E JR Z HLine5 LD (IY+HoriLeng),A LD A,E OR (IY+HoriAddr) LD (IY+HoriAddr),A LD L,A LD H,(IY+HoriAddr+1) LD B,(IY+HoriLeng) LD E,(IY+HoriBitl) LD D,(IY+HoriBitr) LD A,(HL) OR E LD (HL),A HLine7 INC L DEC B JR Z HLine6 LD (HL),#FF JP HLine7 HLine6 LD A,(HL) OR D LD (HL),A LD (IY+0),HLine8&#FF LD (IY+1),HLine8/256 LD BC,lObjeLine ADD IY,BC RET HLine5 LD A,E OR (IY+HoriAddr) LD (IY+HoriAddr),A LD A,H AND D LD (IY+HoriBitl),A LD L,(IY+HoriAddr) LD H,(IY+HoriAddr+1) OR (HL) LD (HL),A LD (IY+0),HLine11&#FF LD (IY+1),HLine11/256 LD BC,lObjeLine ADD IY,BC RET HLine11 LD A,(IY+HoriBitl) LD L,(IY+HoriAddr) LD H,(IY+HoriAddr+1) CPL AND (HL) LD (HL),A RET HLine8 LD L,(IY+HoriAddr) LD H,(IY+HoriAddr+1) LD B,(IY+HoriLeng) LD A,(IY+HoriBitl) CPL LD E,A LD A,(IY+HoriBitr) CPL LD D,A LD A,(HL) AND E LD (HL),A HLine9 INC L DEC B JR Z HLine10 LD (HL),0 JP HLine9 HLine10 LD A,(HL) AND D LD (HL),A LD (IY+0),HLine8&#FF LD (IY+1),HLine8/256 RET AlterSteps LD BC,#FBFE IN A,(C) LD E,A LD BC,#FDFE IN A,(C) XOR E AND #01 JR Z AS2 BIT 0,E LD DE,Zdvstep JR Z AS1 LD DE,-Zdvstep AS1 LD HL,(DeltaZ) ADD HL,DE LD (DeltaZ),HL AS2 LD BC,#FEFE IN A,(C) AND #06 JP PE AS3 BIT 2,A LD DE,Xdtstep LD HL,(XTurnRatio) CALL ASMakeTurn LD (XTurnRatio),HL AS3 LD BC,#7FFE IN A,(C) AND #0C JP PE AS4 BIT 2,A LD DE,Ydtstep LD HL,(YDiveRatio) CALL ASMakeTurn LD (YDiveRatio),HL AS4 LD HL,(DeltaZ) LD DE,(YDiveRatio) ADD HL,HL:ADD HL,HL ADD HL,HL:ADD HL,HL CALL SignMultHLDE SRA H:RR L SRA H:RR L SRA H:RR L SRA H:RR L LD (DeltaY),HL LD HL,(XTurnRatio) LD DE,(DeltaZ) ADD HL,HL:ADD HL,HL ADD HL,HL:ADD HL,HL CALL SignMultHLDE SRA H:RR L SRA H:RR L SRA H:RR L SRA H:RR L LD (DeltaX),HL RET ASMakeTurn JR Z ASMT1 LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE ASMT1 ADD HL,DE BIT 7,H JR NZ ASMT2 DEC H INC H RET Z LD HL,#0100 RET ASMT2 INC H JR NZ ASMT2a DEC H RET ASMT2a LD HL,#FF00 RET ObjeTemp DEFW 0 DEFW -3000 DEFW 30000 DEFW GrowthRate DEFW pTower ; or pTower DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 DEFW nLine,0,0,0 ; Vars ORG ($ or #FF)+1 DivTab DEFS #100 YTable DEFS #200 BitTab DEFS 24 DeltaX DEFW 0 DeltaY DEFW 0 DeltaZ DEFW 0 XTurnRatio DEFW 0 YDiveRatio DEFW 0 FireDel DEFW 0 SideSel DEFB 0 TopSel DEFB 0 TempX DEFW 0 TempXl DEFW 0 TempXr DEFW 0 TempY DEFW 0 TempZ DEFW 0 X1 DEFW 0 X2 DEFW 0 X3 DEFW 0 X4 DEFW 0 Y1 DEFW 0 Y2 DEFW 0 Y3 DEFW 0 Y4 DEFW 0 ; ORG ($ or #FF)+1 ObjeTable DEFS nObje * lObje GroundX DEFW 0 ; This is GroundY DEFW StartY ; moved GroundZ DEFW 0 ; as DEFW 0 ; a DEFB 0 ; star StarTable DEFS nStar * lStar ProjTable DEFS nProj * lProj