EOS EQU $ STab EQU #D800 CTab EQU #D980 Scrn2 EQU #C000 obShp EQU 0 obPhi EQU 1 obPxl EQU 2 obPxh EQU 3 obDi EQU 4 obBC EQU 5 obPzl EQU 6 obPzh EQU 7 obDis EQU 8 obMov EQU 9 obHFl EQU 10 obWSp EQU 11 obLen EQU 16 MaxnObj EQU 125 ORG #B000 MPlyr LD IY,PlShp XOR A:LD (BonkFlg),A LD A,(kZap):LD E,A LD L,5:LD H,22 CALL MPZ CALL C,Drip LD DE,(kRot) LD L,4 CALL MPR LD DE,(kMov) LD L,7 CALL MPE RET NC LD A,1 LD (BonkFlg),A RET MPR LD A,(IY+obWSp) RRCA:RRCA:RRCA:RRCA LD C,A LD A,E XOR D RRA JR NC,MPRN BIT 0,D JR Z,MPRt LD A,C AND 7 JR Z,MPR3 BIT 3,C JR Z,MPRDec JR MPR1 MPR3 LD C,9 JR MPRC MPRN LD A,C AND 7 RET Z DEC C JR MPRC MPRt LD A,C AND 7 JR Z,MPR2 BIT 3,C JR NZ,MPRDec MPR1 CP L JR Z,MPRC INC C JR MPRC MPRDec DEC C:LD A,C AND 7:JR Z,MPRC DEC C JR MPRC MPR2 LD C,1 JR MPRC MPRC LD A,C ADD A,A:ADD A,A ADD A,A:ADD A,A LD B,A LD A,(IY+obWSp) AND #F OR B LD (IY+obWSp),A LD A,C AND 7 BIT 3,C JR Z,MPRC1 NEG MPRC1 LD C,A LD A,(IY+obPhi) ADD A,C LD (IY+obPhi),A RET MPE LD A,(IY+obWSp) LD C,A LD A,D XOR E RRA JR NC,MPEN BIT 0,D JR NZ,MPF LD A,C AND 7 JR Z,MPE3 BIT 3,C JR Z,MPEDec JR MPE1 MPE3 LD C,9 JR MPEC MPEN LD A,C AND 7 RET Z DEC C JR MPEC MPF LD A,C AND 7 JR Z,MPE2 BIT 3,C JR NZ,MPEDec MPE1 CP L JR Z,MPEC INC C JR MPEC MPEDec DEC C:LD A,C AND 7:JR Z,MPEC DEC C JR MPEC MPE2 LD C,1 JR MPEC MPEC LD A,C:AND #F LD B,A:LD A,(IY+obWSp) AND #F0:OR B LD (IY+obWSp),A AND 7 RET Z LD (VN),A LD HL,29 BIT 3,C CALL NZ,NegHL LD (Vtor),HL LD A,(IY+obPhi) LD (VPhi),A LD A,1 LD (VFlags),A LD L,(IY+obPxl) LD H,(IY+obPxh) LD (VPx),HL LD A,(IY+obHFl) LD (VHFl),A LD L,(IY+obPzl) LD H,(IY+obPzh) LD (VPz),HL LD HL,BumTabL LD (DisTab),HL PUSH IY CALL VecMove POP IY LD HL,(VPx) LD (IY+obPxl),L LD (IY+obPxh),H LD HL,(VPz) LD (IY+obPzl),L LD (IY+obPzh),H LD A,(VFlags) RLCA RET NC LD A,(IY+obWSp) AND #F0 LD (IY+obWSp),A SCF:RET MPZ LD A,(IY+obWSp+1) OR A JR Z,MPZY DEC A LD (IY+obWSp+1),A OR A:RET MPZY LD A,E RRA:CCF:RET NC LD A,(nObj) INC A CP MaxnObj RET NC LD (nObj),A LD A,(IY+obWSp+1) LD A,L LD (IY+obWSp+1),A PUSH HL CALL FOS POP HL LD (IX),H LD A,(IY+obPhi) LD (IX+obPhi),A LD (IX+obDis),20 LD (IX+obMov),3 LD (IX+obWSp),33 LD A,(IY+obHFl) LD (IX+obHFl),A LD L,(IY+obPxl) LD H,(IY+obPxh) LD (IX+obPxh),H LD (IX+obPxl),L LD L,(IY+obPzl) LD H,(IY+obPzh) LD (IX+obPzh),H LD (IX+obPzl),L PUSH IY CALL MovBull POP IY SCF:RET Keys LD BC,#F7FE IN A,(C):RRCA:RRCA LD (kQuit),A:LD BC,#8FE IN A,(C):LD (kZap),A LD BC,#1FFE:IN E,(C) LD BC,#EFFE:IN A,(C) RRCA:RRCA:AND E:RRCA RRCA:LD (kB),A LD BC,#0FFE IN A,(C):RRCA:RRCA:RRCA LD (kF),A LD BC,#F8FE:IN E,(C) LD BC,#F7FE:IN A,(C) RRCA:RRCA:RRCA:AND E RRCA:LD (kL),A LD BC,#E8FE:IN A,(C) RRCA:RRCA:LD (kR),A:RET SClr LD HL,Scrn2 LD DE,Scrn2+1:LD (HL),0 LD BC,#A00:LDIR LD HL,#CC00:LD DE,#CC01 LD BC,#BFF:LD (HL),0 LDIR:RET SCopy LD HL,Scrn2 LD IX,CTab:LD A,#58 LD B,0:SCop2 LD E,(IX) INC IX:LD D,(IX):INC IX LD C,(IX):INC IX:LDIR CP D:JR NZ,SCop2:RET DClr LD HL,#4000 LD DE,#4001:LD BC,#17FF LD (HL),0:LDIR:RET SetAttr LD HL,#5800 LD DE,#5801:LD BC,#2FF LD (HL),A:LDIR:RRA:RRA RRA:AND 7:LD (Border),A OUT (#FE),A:RET Sqr BIT 7,A:JR Z,Sq1:NEG Sq1 LD C,A:LD HL,0:LD B,H Sq2 SRL A:JR NC,Sq3 ADD HL,BC:Sq3 RET Z SLA C:RL B:JP Sq2 Sites LD HL,#C610:LD B,8 LD DE,32:LD A,#80 Sigc LD (HL),A:ADD HL,DE DJNZ Sigc:LD HL,#D110 LD B,8:Sigd LD (HL),A ADD HL,DE:DJNZ Sigd LD HL,#C70B:LD B,10 LD A,#FF:Siga LD (HL),A INC L:DJNZ Siga:LD B,10 LD HL,#D10B LD B,10:Sigb LD (HL),A INC L:DJNZ Sigb:RET SiteBits LD A,(Aim):OR A JR NZ,SigB2:LD HL,#C70B LD DE,32:CALL SigD10 LD HL,#C715:CALL SigD10 LD HL,#D10B:LD DE,0-32 CALL SigD10:LD HL,#D115 SigD10 LD B,12 SigD10a SET 7,(HL) ADD HL,DE:DJNZ SigD10a RET SigB2 LD DE,32:LD C,#80 LD HL,#C70B:CALL SigR12 LD C,#80:LD HL,#C715 CALL SigL12:LD DE,0-32 LD C,#80:LD HL,#D10B CALL SigR12:LD C,#80 LD HL,#D115 SigL12 LD B,12 SL2a LD A,(HL):OR C LD (HL),A:RLC C JR NC,SL2b:DEC L SL2b ADD HL,DE:DJNZ SL2a RET SigR12 LD B,12 SR2a LD A,(HL):OR C LD (HL),A:RRC C JR NC,SR2b:INC L SR2b ADD HL,DE:DJNZ SR2a RET DF LD L,(IY+obPzl) LD H,(IY+obPzh) LD E,(IX+obPzl) LD D,(IX+obPzh) SLA E:RL D:SLA L:RL H OR A:SBC HL,DE:LD C,H CALL M,NegHL:SRA H:RR L PUSH HL:LD L,(IY+obPxl) LD H,(IY+obPxh) LD E,(IX+obPxl) LD D,(IX+obPxh) SLA L:RL H:SLA E:RL D OR A:SBC HL,DE:LD B,H CALL M,NegHL:SRA H:RR L POP DE:PUSH BC:CALL DD EXX:LD A,H:CPL:LD B,A LD A,L:CPL:LD C,A:INC BC CALL DA:POP BC:LD D,A LD A,B:XOR C:LD A,D JP P,DF1:NEG:DF1 OR A BIT 7,C:RET Z:XOR #80 RET DD EXX:LD HL,0:LD DE,#100 EXX:OR A:DD1 SBC HL,DE JP C,DD4:JP Z,DD3 ADD HL,DE:SLA E:RL D EXX:SLA E:RL D:EXX JP NC,DD1:LD HL,#7FFF EXX:RET DD2 SBC HL,DE:JR C,DD4 DD3 ADD HL,HL:EXX ADD HL,DE:SRL D:RR E EXX:JP NC,DD2:RET DD4 ADD HL,DE:ADD HL,HL EXX:SRL D:RR E:EXX JP NC,DD2:RET DA LD D,0:EXX:LD C,#40 LD B,6:LD A,C:DA1 EXX LD E,A:LD HL,AtnT ADD HL,DE:LD E,(HL) INC HL:LD H,(HL):LD L,E OR A:ADC HL,BC:EXX JP M,DA2:SUB C:DA2 SRL C ADD A,C:DJNZ DA1:SRL A RET CHFl LD HL,THF:LD BC,#FE LD DE,THF+2:LD (HL),1 INC HL:LD (HL),0:LDIR:RET GHFl LD HL,THF:LD BC,#100 XOR A:CPIR:DEC HL:INC C LD A,C:NEG:LD (HL),A:RET KCk LD B,0:LD E,B KC1 IN A,(#DF):CP 32 JR C,KC2:INC E KC2 DJNZ KC1:LD HL,KFl JCk LD A,E:LD (HL),0:CP 3 RET NC:LD (HL),1:RET FCk LD BC,20000:LD E,0 FC1 IN A,(#7F):LD L,A SRL L:OR L:RRA:JR NC,FCI SRL L:LD A,L:SRL L:OR L RRA:JR C,FC2:FCI INC E FC2 CPI:JP V,FC1 LD HL,FFl:JR JCk VecMove CALL VRes CALL VSplit VecM1 CALL VIt CALL Bp JR C,VecM2 LD HL,VN DEC (HL) JR NZ,VecM1 VecM2 CALL VSet RET VBMove CALL VSplit VBM1 CALL VIt CALL Bp RET C LD HL,VN DEC (HL) JR NZ,VBM1 RET VSplit LD A,(VPhi) CALL Sine LD HL,(Vtor) LD A,B OR A:CALL NZ,FMul RR C CALL C,NegHL LD (VX),HL LD A,(VPhi) CALL Cosine LD HL,(Vtor) LD A,B OR A:CALL NZ,FMul RR C CALL C,NegHL LD (VZ),HL RET VIt LD HL,(VX) ADD HL,HL EX DE,HL LD HL,(VPx) ADD HL,HL ADD HL,DE SRA H:RR L LD (VTx),HL LD HL,(VZ) ADD HL,HL EX DE,HL LD HL,(VPz) ADD HL,HL ADD HL,DE SRA H:RR L LD (VTz),HL RET VRes CALL VPt CPL AND (HL) LD (HL),A RET VSet CALL VPt OR (HL) LD (HL),A RET VPt LD A,(VPx+1) LD D,A LD A,(VPz+1) LD E,A JP MapPt ClrMap LD HL,Map LD DE,Map+1 LD BC,2047 LD (HL),0 LDIR RET Bp LD B,#FF Bp1 LD C,#FF Bp2 LD A,(VTx+1) ADD A,A ADD A,B ADD A,B SRA A LD D,A LD A,(VTz+1) ADD A,A ADD A,C ADD A,C SRA A LD E,A CALL MapPt AND (HL) JR Z,Bp4 PUSH BC Bp2a CALL ObSearch JR NC,Bp3 CALL BpType JR NC,Bp2a CALL BumMaths JR C,Bped Bp3 POP BC Bp4 INC C LD A,C CP 2 JR NZ,Bp2 INC B LD A,B CP 2 JR NZ,Bp1 LD HL,(VTx) LD (VPx),HL LD HL,(VTz) LD (VPz),HL OR A RET Bped POP BC Bped1 LD A,(VFlags) OR #80 LD (VFlags),A SCF RET ObSearch LD IY,PlShp LD BC,obLen ObSeL LD A,(IY) CP #FF RET Z OR A JR Z,ObSeN LD A,(IY+obPzh) CP E JP NZ,ObSeN LD A,(IY+obPxh) CP D SCF RET Z ObSeN ADD IY,BC JP ObSeL BumMaths LD E,(IY+obShp) LD D,0:DEC E LD HL,(DisTab) ADD HL,DE ADD HL,DE LD E,(HL) INC HL LD D,(HL) LD (BpDist),DE LD H,(IY+obPxh) LD L,(IY+obPxl) ADD HL,HL EX DE,HL LD HL,(VTx) ADD HL,HL OR A SBC HL,DE SRA H:RR L BIT 7,H CALL NZ,NegHL LD DE,(BpDist) OR A SBC HL,DE RET NC LD H,(IY+obPzh) LD L,(IY+obPzl) ADD HL,HL EX DE,HL LD HL,(VTz) ADD HL,HL OR A SBC HL,DE SRA H:RR L BIT 7,H CALL NZ,NegHL LD DE,(BpDist) OR A SBC HL,DE RET MapPt PUSH BC PUSH DE LD A,D ADD A,64 AND #7F LD D,A LD A,E ADD A,64 AND #7F LD E,A LD A,E AND 7 LD C,A LD B,0 LD HL,Bits ADD HL,BC LD A,(HL) SLA E SRL D RR E SRL D RR E SRL D RR E SRL D RR E LD HL,Map ADD HL,DE POP DE POP BC RET BpType LD HL,BumTab LD D,0 LD E,(IY+obShp) DEC E ADD HL,DE LD A,(VFlags) AND (HL) RET NZ LD A,(VHFl) CP (IY+obHFl) SCF RET NZ OR A RET FOS LD IX,ObList LD DE,obLen FOS1 LD A,(IX) OR A RET Z CP #FF JR Z,FOS2 ADD IX,DE JR FOS1 FOS2 LD (IX+obLen),#FF RET MakeE LD HL,#4000 LD IX,STab:LD C,24 MakeE1 LD B,8 MakeE2 LD (IX),L:INC IX LD (IX),H:INC IX:INC H DJNZ MakeE2:LD A,L ADD A,#20:LD L,A JR C,MakeE3:LD A,H:SUB 8 LD H,A:MakeE3 DEC C JR NZ,MakeE1:RET TranE LD IY,STab:LD B,192 LD IX,CTab:Tran1 PUSH BC LD L,(IY):LD (IX),L LD H,(IY+1):LD (IX+1),H INC IY:INC IY:LD B,16 XOR A:LD C,A Tran2 CP (HL):JR NZ,Tran4 INC C:INC L:DJNZ Tran2 LD (IX+2),32:Tran3 INC IX INC IX:INC IX:POP BC DJNZ Tran1:RET Tran4 LD (IX+2),C:INC IX INC IX:INC IX:LD A,B ADD A,A:LD (IX),0:INC IX LD (IX),0:INC IX LD (IX),A:INC IX:ADD A,L LD (IX),A:LD (IX+1),H LD (IX+2),C:JP Tran3 INC IY MakePylon LD B,5 LD A,B LD (nObj),A LD HL,#880 LD E,L LD D,0-60 MakePy1 LD (IX+obShp),30 LD (IX+obPhi),0 LD (IX+obDis),#30 LD (IX+obMov),0 LD (IX+obHFl),0 LD (IX+obPxh),H LD (IX+obPxl),L LD (IX+obPzh),D LD (IX+obPzl),E PUSH HL PUSH DE LD E,D LD D,H CALL MapPt OR (HL) LD (HL),A LD DE,obLen ADD IX,DE LD HL,nObj INC (HL) POP DE POP HL LD A,D ADD A,24 LD D,A DJNZ MakePy1 LD (IX),#FF RET MakeObj LD IX,ObList CALL MakePylon LD B,40 LD A,(nObj) ADD A,B LD (nObj),A LD DE,obLen MakeOb1 CALL MakeO ADD IX,DE DJNZ MakeOb1 LD B,8 MakeOb2 CALL MakeRadar LD HL,nObj INC (HL) DJNZ MakeOb2 RET MakeO CALL MakeSpace CALL Rand AND #F INC A LD (IX+obShp),A LD (IX+obDis),#18 LD (IX+obMov),0 LD (IX+obHFl),0 CALL Rand AND #C0 LD (IX+obPhi),A LD (IX+obLen),#FF RET MakeSpace PUSH BC PUSH DE PUSH IX MakeS1 LD L,#80 LD E,L CALL Rand:LD H,A CALL Rand:LD D,A SRA H SRA D LD (VTx),HL LD (VTz),DE LD HL,BumTabL LD (DisTab),HL LD (IX+obHFl),#FF CALL Bp JR C,MakeS1 POP IX LD HL,(VTx) LD D,H LD (IX+obPxh),H LD (IX+obPxl),L LD HL,(VTz) LD (IX+obPzh),H LD (IX+obPzl),L LD E,H CALL MapPt OR (HL) LD (HL),A POP DE POP BC RET MakeRadar CALL MakeSpace LD (IX+obShp),31 LD (IX+obDis),24 LD (IX+obHFl),0 LD (IX+obMov),0 LD (IX+obPhi),0 LD (IX+obLen+obShp),32 LD (IX+obLen+obDis),#18 LD (IX+obLen+obMov),1 LD A,(IX+obPxh) LD (IX+obLen+obPxh),A LD A,(IX+obPzh) LD (IX+obLen+obPzh),A LD DE,obLen ADD IX,DE LD (IX+obPxl),#80 LD (IX+obPzl),#80 LD (IX+obHFl),0 LD (IX+obPhi),0 LD (IX+obDis),#18 ADD IX,DE LD (IX),#FF RET EOO EQU $ ORG #60C0 kRot EQU $ kL DEFB 0 kR DEFB 0 kMov EQU $ kF DEFB 0 kB DEFB 0 kZap DEFB 0 kQuit DEFB 0 VX DEFW 0 VZ DEFW 0 VN DEFB 0 VPhi DEFB 0 Vtor DEFW 0 VPx DEFW 0 VPz DEFW 0 VFlags DEFB 0 VTx DEFW 0 VTz DEFW 0 BpDist DEFW 0 DisTab DEFW 0 nObj DEFB 0 BonkFlg DEFB 0 VHFl DEFB 0 EOV EQU $ DispObj EQU #6700 DoObj EQU #6703 Sine EQU #6706 Cosine EQU #6709 NegHL EQU #6712 FMul EQU #670C FDiv EQU #670F CLine EQU #6715 Line EQU #6718 Point EQU #671B Circle EQU #671E Drip EQU #6721 Bonk EQU #6724 Blip EQU #6727 Sound EQU #672A MovBull EQU #67CF Rand EQU #6730 ShpV EQU #6800 BumTab EQU #6900 BumTabL EQU #6880 BumTabS EQU #68C0 Bits EQU #6B64 AtnT EQU #6C92 THF EQU #6600 Map EQU #7000 Border EQU #6022 FCount EQU #6110 Aim EQU #6114 FFl EQU #6113 KFl EQU #6112 PlShp EQU #7800 PlPhi EQU #7801 PlPx EQU #7802 PlPz EQU #7806 PlDis EQU #7808 PlMov EQU #7809 PlHFl EQU #780A PlWSp EQU #780B ObList EQU #7810 ORG #6760 zMPlyr JP MPlyr zKeys JP Keys zSClr JP SClr zSCopy JP SCopy zDClr JP DClr zSetAttr JP SetAttr zVecMove JP VecMove zVBMove JP VBMove zClrMap JP ClrMap zBp JP Bp zObSearch JP ObSearch zMapPt JP MapPt zFOS JP FOS zMakeE JP MakeE zTranE JP TranE zMakeObj JP MakeObj zMakeSpace JP MakeSpace zMPR JP MPR zMPE JP MPE zMPZ JP MPZ zSqr JP Sqr zSights JP Sites zSightBits JP SiteBits zDirFind JP DF zGetHfl JP GHFl zClrHFl JP CHFl zKempChk JP KCk zFullChk JP FCk export_sym "",$200