ORG #1800 ; ; Internals ; ptX EQU 0 ptZ EQU 2 ; PlanX EQU 0 PlanY EQU 2 ; PIOa EQU #FFFF PIOb EQU #FFFF PIOc EQU #FFFF PIOk EQU #FFFF ; ENT ; Workspace EQU #A000 ; Q ORG #8000 ; SetUpSubs CALL PALL CALL GenYTab CALL Gen192Tab CALL SetUpTabs ; LD A,0 CALL SetUpRot LD A,1 CALL SetUpRot ; LD A,0 CALL SetUpRotA LD A,1 CALL SetUpRotA ; LD HL,#0000 LD (OldLines1),HL LD (OldLines2),HL LD HL,OldLines1 LD (pLines),HL LD HL,OldLines2 LD (pOLines),HL LD A,#0F LD (ColMask),A RET ; nStopAC LD BC,PIOa ! #08 OUT (C),C LD BC,PIOc ! #C0 OUT (C),C XOR A OUT (C),A LD B,PIOa / 256 OUT (C),A LD BC,PIOc ! #80 OUT (C),C OUT (C),A ; LD BC,PIOa ! #0A OUT (C),C LD BC,PIOc ! #C0 OUT (C),C OUT (C),A LD B,PIOa / 256 OUT (C),A LD BC,PIOc ! #80 OUT (C),C OUT (C),A LD BC,PIOa ! #0E OUT (C),C LD BC,PIOc ! #C0 OUT (C),C OUT (C),A LD BC,PIOk ! #92 OUT (C),C LD (nvA),A LD (nvC),A LD BC,PIOc ! #40 OUT (C),C RET ; StartNoise LD E,B LD D,C LD H,#95 LD BC,PIOk ! #82 OUT (C),C LD BC,PIOa ! #08 OUT (C),C LD BC,PIOc ! #C0 OUT (C),C XOR A OUT (C),A LD B,PIOa / 256 OUT (C),E LD BC,PIOc ! #80 OUT (C),C OUT (C),A ; LD BC,PIOa ! #0A OUT (C),C LD BC,PIOc ! #C0 OUT (C),C XOR A OUT (C),A LD B,PIOa / 256 OUT (C),D LD BC,PIOc ! #80 OUT (C),C OUT (C),A ; LD BC,PIOa ! #06 OUT (C),C LD BC,PIOc ! #C0 OUT (C),C XOR A OUT (C),A LD B,PIOa / 256 OUT (C),L LD BC,PIOc ! #80 OUT (C),C OUT (C),A ; LD BC,PIOa ! #07 OUT (C),C LD BC,PIOc ! #C0 OUT (C),C XOR A OUT (C),A LD B,PIOa / 256 OUT (C),H LD BC,PIOc ! #80 OUT (C),C OUT (C),A ; LD BC,PIOa ! #0E OUT (C),C LD BC,PIOc ! #C0 OUT (C),C OUT (C),A LD BC,PIOk ! #92 OUT (C),C RET ; StartTone LD A,B LD (nvA),A LD A,C LD (nvC),A LD (nfA),HL INC HL LD (nfC),HL LD A,#B8 LD (nEnables),A CALL OutSound RET ; OutSound LD BC,PIOk ! #82 OUT (C),C LD E,0 LD HL,nfA OSlp LD B,PIOa / 256 OUT (C),E LD BC,PIOc ! #C0 OUT (C),C XOR A OUT (C),A LD B,PIOa / 256 LD A,(HL) OUT (C),A XOR A LD BC,PIOc ! #80 OUT (C),C OUT (C),A INC E INC HL LD A,E CP 12 JR NZ OSlp XOR A LD BC,PIOa ! #0E OUT (C),C LD BC,PIOc ! #C0 OUT (C),C OUT (C),A LD BC,PIOk ! #92 OUT (C),C RET ; Shuttup XOR A LD (nvA),A LD (nvB),A LD (nvC),A JP OutSound ; BrightTab DEFB 20,4,21,28,24,29,12 DEFB 5,13,22,6,23,30,0,31 DEFB 14,7,15,18,2,19,26,25 DEFB 27,10,3,11,11 ; DrawPoint LD A,(Colour) SRL E RLA LD L,A LD H,BitTab/256 LD A,(ColMask) CPL LD B,A CPL AND (HL) LD C,A ; LD A,L OR #06 LD L,A LD A,(HL) CPL OR B LD B,A ; LD L,D LD H,YTable/256 LD A,(HL) INC H LD H,(HL) LD L,A ; LD D,0 ADD HL,DE ; LD A,(HL) AND B OR C LD (HL),A ; LD (TempSP),SP LD SP,(pLines) PUSH HL LD HL,UDP PUSH HL SCF PUSH AF LD (pLines),SP LD SP,(TempSP) ; RET ; SetUpRot CP 0 OldRot EQU $-1 RET Z LD (OldRot),A CALL Sine LD HL,RMulSin CALL GenMult LD A,(OldRot) CALL Cosine LD HL,RMulCos CALL GenMult RET ; SetUpRotA CP 0 OldRotA EQU $-1 RET Z LD (OldRotA),A CALL Sine LD HL,RMulSinA CALL GenMult LD A,(OldRotA) CALL Cosine LD HL,RMulCosA CALL GenMult RET ; GenMult LD A,B OR A JR Z GMx ; DEC A JR Z GM0 INC A ; LD (HL),#EB INC HL LD (HL),#21 INC HL LD (HL),#00 INC HL LD (HL),#00 INC HL LD (HL),#45 INC HL LD (HL),#7D INC HL ; LD B,8 RES 1,C ; GMlp RLA JR NC GMa ; LD (HL),#19 INC HL LD (HL),#88 INC HL ; SET 1,C ; GMa BIT 1,C JR Z GMb ; LD (HL),#29 INC HL LD (HL),#17 INC HL ; GMb DJNZ GMlp ; DEC HL DEC HL ; LD (HL),#6C INC HL LD (HL),#67 INC HL ; GMx LD (HL),#C9 ; BIT 0,C RET Z ; EX DE,HL LD HL,NegHL LD BC,8 LDIR RET ; GM0 LD (HL),#21 INC HL LD (HL),A INC HL LD (HL),A INC HL LD (HL),#C9 RET ; DoRotHLDE LD (Rtx),HL LD (Rtz),DE CALL RMCos PUSH HL LD HL,0 Rtz EQU $-2 CALL RMSin PUSH HL LD HL,0 Rtx EQU $-2 CALL RMSin PUSH HL LD HL,(Rtz) CALL RMCos POP DE OR A SBC HL,DE EX DE,HL POP HL POP BC ADD HL,BC RET ; RMCos BIT 7,H JR NZ RMCn ; JP RMulCos ; RMCn LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL ; CALL RMulCos ; LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; RMSin BIT 7,H JR NZ RMSn ; JP RMulSin ; RMSn LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL ; CALL RMulSin ; LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; DoRotHLDEA LD (RtxA),HL LD (RtzA),DE CALL RMCosA PUSH HL LD HL,0 RtzA EQU $-2 CALL RMSinA PUSH HL LD HL,0 RtxA EQU $-2 CALL RMSinA PUSH HL LD HL,(RtzA) CALL RMCosA POP DE OR A SBC HL,DE EX DE,HL POP HL POP BC ADD HL,BC RET ; RMCosA BIT 7,H JR NZ RMCnA ; JP RMulCosA ; RMCnA LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL ; CALL RMulCosA ; LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; RMSinA BIT 7,H JR NZ RMSnA ; JP RMulSinA ; RMSnA LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL ; CALL RMulSinA ; LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; UnDrawLines LD (TempSP),SP LD SP,(pOLines) LD HL,(pLines) LD (pOLines),HL ; LD A,(ColMask) BIT 0,A LD HL,OldLines2 JR NZ UDLa LD HL,OldLines1 UDLa LD (pLines),HL ; UDLret POP AF RET C ; PUSH AF LD A,(ColMask) CPL LD (ColMask),A LD SP,(TempSP) RET ; UDP POP HL LD A,(ColMask) AND (HL) LD (HL),A JP UDLret ; HLO POP HL LD B,A INC B ; LD A,(ColMask) LD C,A HLOlp LD A,(HL) AND C LD (HL),A INC HL DJNZ HLOlp JP UDLret ; ; CLS LD HL,#C000 LD DE,#C001 LD BC,#3FFF LD (HL),0 LDIR RET ; SetUpTabs LD IY,SquareTab1 LD IX,-#80 CALL SUT0 LD IX,-#40 SUT0 XOR A SUTl PUSH IX POP DE LD HL, #00 ; X PUSH AF CALL RotHLDEA POP AF INC A LD (IY),L INC IY LD (IY),H INC IY LD (IY),E INC IY LD (IY),D INC IY BIT 6,A JR Z SUTl Ret RET ; CallHL JP (HL) ; DoPyra1 LD HL,#A0 JP DoPyra2 DoPyra LD HL,0 DoPyra2 LD DE,(CentY) ADD HL,DE LD DE,(CentZ) CALL ObjeDiv LD (yv5),HL LD (yv6),HL LD (yv7),HL LD (yv8),HL ; LD H,SquareTab1/256 CALL DoSqBase ; LD A,1 LD (DrawBaseF),A ; LD HL,(CentX) LD DE,(CentZ) CALL ObjeDiv LD (xv5),HL LD (xv6),HL LD (xv7),HL LD (xv8),HL ; Pyramid CALL DPlhs CALL DPrhs ; LD HL,(yv1) LD DE,(yv5) EXX LD HL,(xv1) LD DE,(xv5) CALL AnyLine ; LD HL,(yv2) LD DE,(yv6) EXX LD HL,(xv2) LD DE,(xv6) CALL AnyLine ; LD HL,(yv2) LD DE,(yv1) EXX LD HL,(xv2) LD DE,(xv1) LD A,(DrawBaseF) OR A CALL NZ AnyLine ; RET ; DPlhs LD HL,(xv4) LD DE,(xv1) OR A SBC HL,DE BIT 7,H JR NZ DPlhsa LD A,(CentZ+1) CP 5 RET NC LD HL,(xv5) ;0 LD DE,(xv1) OR A SBC HL,DE RET Z PUSH HL LD HL,(yv5) ;0 LD DE,(yv1) OR A SBC HL,DE POP DE RET Z CALL SignDiv PUSH HL LD HL,(xv4) LD DE,(xv1) OR A SBC HL,DE ; JR Z Exit1 PUSH HL LD HL,(yv4) LD DE,(yv1) OR A SBC HL,DE POP DE ; JR Z Exit1 CALL SignDiv EX DE,HL POP HL OR A SBC HL,DE RET NC ; DPlhsa LD HL,(yv4) LD DE,(yv1) EXX LD HL,(xv4) LD DE,(xv1) LD A,(DrawBaseF) OR A CALL NZ AnyLine ; LD HL,(yv4) LD DE,(yv8) EXX LD HL,(xv4) LD DE,(xv8) CALL AnyLine ; RET ; Exit1 POP AF RET ; DPrhs LD HL,(xv2) DEC HL LD DE,(xv3) OR A SBC HL,DE BIT 7,H JR NZ DPrhsa ; LD A,(CentZ+1) CP 5 RET NC LD HL,(xv6) ;0 LD DE,(xv2) OR A SBC HL,DE RET Z PUSH HL LD HL,(yv6) ;0 LD DE,(yv2) OR A SBC HL,DE POP DE RET Z CALL SignDiv PUSH HL LD HL,(xv3) LD DE,(xv2) OR A SBC HL,DE ; JR Z Exit1 PUSH HL LD HL,(yv3) LD DE,(yv2) OR A SBC HL,DE POP DE ; JR Z Exit1 CALL SignDiv EX DE,HL POP HL OR A SBC HL,DE RET C DPrhsa LD HL,(yv3) LD DE,(yv2) EXX LD HL,(xv3) LD DE,(xv2) LD A,(DrawBaseF) OR A CALL NZ AnyLine ; LD HL,(yv3) LD DE,(yv7) EXX LD HL,(xv3) LD DE,(xv7) CALL AnyLine ; RET ; DoCube LD HL,#30 JP DoCube2 ; DoCube1 LD HL,#A0 DoCube2 LD DE,(CentY) ADD HL,DE LD (CubeY),HL ; LD H,SquareTab1/256 CALL DoSqBase ; LD HL,0 CubeY EQU $-2 LD DE,(zn1) CALL ObjeDiv LD (yv5),HL ; LD HL,(CubeY) LD DE,(zn2) CALL ObjeDiv LD (yv6),HL ; LD HL,(CubeY) LD DE,(zn3) CALL ObjeDiv LD (yv7),HL ; LD HL,(CubeY) LD DE,(zn4) CALL ObjeDiv LD (yv8),HL ; CALL DClhs CALL DCrhs ; LD HL,(yv1) LD DE,(yv5) EXX LD HL,(xv1) LD DE,(xv1) CALL AnyLine ; LD HL,(yv2) LD DE,(yv6) EXX LD HL,(xv2) LD DE,(xv2) CALL AnyLine ; LD HL,(yv2) LD DE,(yv1) EXX LD HL,(xv2) LD DE,(xv1) CALL AnyLine ; LD HL,(yv6) LD DE,(yv5) EXX LD HL,(xv2) LD DE,(xv1) CALL AnyLine ; RET ; DClhs LD HL,(xv4) LD DE,(xv1) OR A SBC HL,DE BIT 7,H RET Z ; DClhsa LD HL,(yv4) LD DE,(yv1) EXX LD HL,(xv4) LD DE,(xv1) CALL AnyLine ; LD HL,(yv4) LD DE,(yv8) EXX LD HL,(xv4) LD DE,(xv4) CALL AnyLine ; LD HL,(yv8) LD DE,(yv5) EXX LD HL,(xv4) LD DE,(xv1) CALL AnyLine ; RET ; DCrhs LD HL,(xv2) DEC HL LD DE,(xv3) OR A SBC HL,DE BIT 7,H RET Z ; DCrhsa LD HL,(yv3) LD DE,(yv2) EXX LD HL,(xv3) LD DE,(xv2) CALL AnyLine ; LD HL,(yv3) LD DE,(yv7) EXX LD HL,(xv3) LD DE,(xv3) CALL AnyLine ; LD HL,(yv7) LD DE,(yv6) EXX LD HL,(xv3) LD DE,(xv2) CALL AnyLine ; RET ; DoSqBase LD A,(DispAng) ADD A,A ADD A,A LD L,A LD E,(HL) INC L LD D,(HL) INC L LD (xd1),DE LD (zd2),DE LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE LD (xd3),DE LD (zd4),DE ; LD E,(HL) INC L LD D,(HL) LD (zd1),DE LD (xd4),DE LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE LD (zd3),DE LD (xd2),DE ; LD DE,(CentX) LD HL,(xd1) ADD HL,DE LD (xn1),HL LD HL,(xd2) ADD HL,DE LD (xn2),HL LD HL,(xd3) ADD HL,DE LD (xn3),HL LD HL,(xd4) ADD HL,DE LD (xn4),HL ; LD DE,(CentZ) LD HL,(zd1) ADD HL,DE LD (zn1),HL LD HL,(zd2) ADD HL,DE LD (zn2),HL LD HL,(zd3) ADD HL,DE LD (zn3),HL LD HL,(zd4) ADD HL,DE LD (zn4),HL ; LD HL,(xn1) LD DE,(zn1) CALL ObjeDiv LD (xv1),HL LD HL,(xn2) LD DE,(zn2) CALL ObjeDiv LD (xv2),HL LD HL,(xn3) LD DE,(zn3) CALL ObjeDiv LD (xv3),HL LD HL,(xn4) LD DE,(zn4) CALL ObjeDiv LD (xv4),HL ; LD HL,Floor LD DE,(CentY) ADD HL,DE LD DE,(zn1) CALL ObjeDiv LD (yv1),HL ; LD HL,Floor LD DE,(CentY) ADD HL,DE LD DE,(zn2) CALL ObjeDiv LD (yv2),HL ; LD HL,Floor LD DE,(CentY) ADD HL,DE LD DE,(zn3) CALL ObjeDiv LD (yv3),HL ; LD HL,Floor LD DE,(CentY) ADD HL,DE LD DE,(zn4) CALL ObjeDiv LD (yv4),HL RET ; DoFuel LD H,SquareTab1/256 JP DoSqu DoSauc LD H,SquareTab2/256 DoSqu CALL DoSqBase ; LD HL,(yv1) LD DE,(yv2) EXX LD HL,(xv1) LD DE,(xv2) CALL AnyLine ; LD HL,(yv2) LD DE,(yv3) EXX LD HL,(xv2) LD DE,(xv3) CALL AnyLine ; LD HL,(yv3) LD DE,(yv4) EXX LD HL,(xv3) LD DE,(xv4) CALL AnyLine ; LD HL,(yv4) LD DE,(yv1) EXX LD HL,(xv4) LD DE,(xv1) CALL AnyLine ; RET ; DoTank LD A,(DispAng) ADD A,#80 CALL SetUpRotA LD A,1 LD (DrawBaseF),A LD HL,(CentY) PUSH IX PUSH IY LD B,4 LD DE,Floor ADD HL,DE LD (cY),HL LD IX,TBPa LD IY,Points SORlp PUSH BC CALL GenPt LD BC,4 ADD IY,BC ADD IX,BC POP BC DJNZ SORlp ; LD B,4 LD DE,-#28 LD HL,(CentY) ADD HL,DE LD (cY),HL SORlp1 PUSH BC CALL GenPt LD BC,4 ADD IY,BC ADD IX,BC POP BC DJNZ SORlp1 ; LD B,4 LD DE,#28 LD HL,(CentY) ADD HL,DE LD (cY),HL SORlp2 PUSH BC CALL GenPt LD BC,4 ADD IY,BC ADD IX,BC POP BC DJNZ SORlp2 ; LD IY,Points+#30 ; LD B,4 LD DE,-#D LD HL,(CentY) ADD HL,DE LD (cY),HL SORlp3 PUSH BC CALL GenPt LD BC,4 ADD IY,BC ADD IX,BC POP BC DJNZ SORlp3 ; LD B,4 LD DE,#D LD HL,(CentY) ADD HL,DE LD (cY),HL SORlp4 PUSH BC CALL GenPt LD BC,4 ADD IY,BC ADD IX,BC POP BC DJNZ SORlp4 ; POP IY ; LD IX,Points LD A,(DispAng) ADD A,32+#80 RLCA RLCA RLCA RLCA AND #0C LD IXL,A ; LD L,(IX):LD H,(IX+1) LD (xv1),HL LD L,(IX+16):LD H,(IX+17) LD (xv5),HL LD L,(IX+32):LD H,(IX+33) LD (xv9),HL INC IX:INC IX LD L,(IX):LD H,(IX+1) LD (yv1),HL LD L,(IX+16):LD H,(IX+17) LD (yv5),HL LD L,(IX+32):LD H,(IX+33) LD (yv9),HL INC IX:INC IX LD A,IXL AND #F LD IXL,A ; LD L,(IX):LD H,(IX+1) LD (xv2),HL LD L,(IX+16):LD H,(IX+17) LD (xv6),HL LD L,(IX+32):LD H,(IX+33) LD (xvA),HL INC IX:INC IX LD L,(IX):LD H,(IX+1) LD (yv2),HL LD L,(IX+16):LD H,(IX+17) LD (yv6),HL LD L,(IX+32):LD H,(IX+33) LD (yvA),HL INC IX:INC IX LD A,IXL AND #0F LD IXL,A ; LD L,(IX):LD H,(IX+1) LD (xv3),HL LD L,(IX+16):LD H,(IX+17) LD (xv7),HL LD L,(IX+32):LD H,(IX+33) LD (xvB),HL INC IX:INC IX LD L,(IX):LD H,(IX+1) LD (yv3),HL LD L,(IX+16):LD H,(IX+17) LD (yv7),HL LD L,(IX+32):LD H,(IX+33) LD (yvB),HL INC IX:INC IX LD A,IXL AND #0F LD IXL,A ; LD L,(IX):LD H,(IX+1) LD (xv4),HL LD L,(IX+16):LD H,(IX+17) LD (xv8),HL LD L,(IX+32):LD H,(IX+33) LD (xvC),HL INC IX:INC IX LD L,(IX):LD H,(IX+1) LD (yv4),HL LD L,(IX+16):LD H,(IX+17) LD (yv8),HL LD L,(IX+32):LD H,(IX+33) LD (yvC),HL ; CALL Pyramid ; LD HL,xv5 LD DE,xv1 LD BC,8*4 LDIR XOR A LD (DrawBaseF),A ; CALL Pyramid ; LD HL,(Points+34) LD DE,(Points+38) EXX LD HL,(Points+32) LD DE,(Points+36) CALL AnyLine ; POP IX ; LD A,(DispAng) BIT 7,A JP NZ BarRHV ; LD DE,(BarAx) LD A,(DispAng) ADD A,20+#80 CP 40 JR C Barlp LD HL,(BarLHS) OR A SBC HL,DE BIT 7,H RET Z ; Barlp LD HL,(BarBx) INC DE OR A SBC HL,DE BIT 7,H CALL Z BarFront JR Z Blhvb ; LD HL,(BarAy) LD DE,(BarAy1) EXX LD HL,(BarAx) LD DE,(BarAx) CALL AnyLine ; Blhvb LD HL,(BarCx) LD DE,(BarLHS) OR A SBC HL,DE BIT 7,H JR Z Blhva ; LD (BarCx),DE LD (BarDx),DE LD HL,(BarAy) LD (BarCy),HL LD HL,(BarAy1) LD (BarCy1),HL ; Blhva LD HL,(BarAy) LD DE,(BarCy) EXX LD HL,(BarAx) LD DE,(BarCx) CALL AnyLine ; LD HL,(BarAy1) LD DE,(BarCy1) EXX LD HL,(BarAx) LD DE,(BarCx) CALL AnyLine ; LD HL,(BarDx) LD DE,(BarBx) OR A SBC HL,DE BIT 7,H RET NZ ; LD A,(DispAng) ADD A,50+#80 CP 100 RET NC ; LD HL,(BarBy) LD DE,(BarDy) EXX LD HL,(BarBx) LD DE,(BarDx) CALL AnyLine ; LD HL,(BarBy1) LD DE,(BarDy1) EXX LD HL,(BarBx) LD DE,(BarDx) JP AnyLine ; BarRHV LD A,(DispAng) ADD A,20+#80 CP 40 JR C Barrp LD HL,(BarBx) LD DE,(BarRHS) OR A SBC HL,DE BIT 7,H RET Z ; Barrp LD HL,(BarBx) LD DE,(BarAx) INC DE OR A SBC HL,DE BIT 7,H CALL Z BarFront JR Z Brhvb ; LD HL,(BarBy) LD DE,(BarBy1) EXX LD HL,(BarBx) LD DE,(BarBx) CALL AnyLine ; Brhvb LD HL,(BarDx) LD DE,(BarRHS) OR A SBC HL,DE BIT 7,H JR NZ Brhva ; LD (BarCx),DE LD (BarDx),DE LD HL,(BarBy) LD (BarDy),HL LD HL,(BarBy1) LD (BarDy1),HL ; Brhva LD HL,(BarBy) LD DE,(BarDy) EXX LD HL,(BarBx) LD DE,(BarDx) CALL AnyLine ; LD HL,(BarBy1) LD DE,(BarDy1) EXX LD HL,(BarBx) LD DE,(BarDx) CALL AnyLine ; LD HL,(BarAx) LD DE,(BarCx) OR A SBC HL,DE BIT 7,H RET NZ ; LD A,(DispAng) ADD A,50+#80 CP 100 RET NC ; LD HL,(BarAy) LD DE,(BarCy) EXX LD HL,(BarAx) LD DE,(BarCx) CALL AnyLine ; LD HL,(BarAy1) LD DE,(BarCy1) EXX LD HL,(BarAx) LD DE,(BarCx) JP AnyLine ; BarFront PUSH AF LD HL,(BarAy) LD DE,(BarBy) EXX LD HL,(BarAx) LD DE,(BarBx) CALL AnyLine ; LD HL,(BarAy1) LD DE,(BarBy1) EXX LD HL,(BarAx) LD DE,(BarBx) CALL AnyLine ; LD HL,(BarAy) LD DE,(BarAy1) EXX LD HL,(BarAx) LD DE,(BarAx) CALL AnyLine ; LD HL,(BarBy) LD DE,(BarBy1) EXX LD HL,(BarBx) LD DE,(BarBx) CALL AnyLine POP AF RET ; DoExp LD HL,-SBW-#A0 LD DE,(CentY) ADD HL,DE LD (cY),HL ; PUSH IY LD IY,Points LD HL,0 LD DE,0 LD A,(DispAng) CALL DoPointA LD BC,4 ADD IY,BC ; LD HL,(CentY) LD DE,-#A0 ADD HL,DE LD (cY),HL ; LD HL,0 LD DE,SBL LD A,(DispAng) CALL DoPointA LD BC,4 ADD IY,BC ; LD HL, ExY-#A0 LD DE,(CentY) ADD HL,DE LD (cY),HL ; LD HL,0 LD DE,0 LD A,(DispAng) CALL DoPointA ; POP IY LD HL,(Points) LD DE,(Points+4) EXX LD HL,(Points+2) LD DE,(Points+6) EXX CALL AnyLine ; LD HL,(Points+4) LD DE,(Points+8) EXX LD HL,(Points+6) LD DE,(Points+10) EXX CALL AnyLine ; LD HL,(Points+8) LD DE,(Points) EXX LD HL,(Points+10) LD DE,(Points+2) EXX JP AnyLine ; DoMiss LD HL,MBW LD (vSBW),HL LD HL,-MBW LD (vmSBW),HL LD A,SBS LD (IgZ),A LD (IgZ1),A LD HL,MBL LD (vSBL),HL LD A,MBS LD (IgZ),A LD (IgZ1),A JP DoShell1 ; DoShell LD HL,SBW LD (vSBW),HL LD HL,-SBW LD (vmSBW),HL LD HL,SBL LD (vSBL),HL ; DoShell1 LD A,(DispAng) CALL SetUpRotA ; LD HL,-SBW vmSBW EQU $-2 LD DE,(CentY) ADD HL,DE LD (cY),HL ; PUSH IY LD IY,Points LD HL,SBW vSBW EQU $-2 LD DE,0 CALL DoPoint LD BC,4 ADD IY,BC LD HL,-SBW LD DE,0 CALL DoPoint LD BC,4 ADD IY,BC ; LD HL, SBW LD DE,(CentY) ADD HL,DE LD (cY),HL ; LD HL,(vSBW) LD DE,0 CALL DoPointY LD BC,4 ADD IY,BC LD HL,(vmSBW) LD DE,0 CALL DoPointY LD BC,4 ADD IY,BC ; LD HL,(Points) LD (Points+8),HL LD HL,(Points+4) LD (Points+12),HL ; LD HL,(CentY) LD (cY),HL ; LD HL,0 LD DE,SBL vSBL EQU $-2 CALL DoPoint ; POP IY ; LD A,(DispAng) OR A JP M SDneg ; LD HL,(ShellAx) LD DE,(ShellBx) OR A SBC HL,DE BIT 7,H JR Z SNposa ; CALL ShellBase ; LD HL,(ShellBx) LD DE,(ShellCx) OR A SBC HL,DE BIT 7,H RET Z ; LD HL,(ShellBy) LD DE,(ShellCy) EXX LD HL,(ShellBx) LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellBy1) LD DE,(ShellCy) EXX LD HL,(ShellBx) LD DE,(ShellCx) JP AnyLine ; SNposa LD HL,(ShellBy) LD DE,(ShellCy) EXX LD HL,(ShellBx) LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellBy1) LD DE,(ShellCy) EXX LD HL,(ShellBx) LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellBy1) LD DE,(ShellBy) EXX LD HL,(ShellBx) LD DE,(ShellBx) CALL AnyLine ; LD HL,(ShellBx) LD DE,(ShellAx) OR A SBC HL,DE RET Z ; LD A,(CentZ+1) CP 18 IgZ EQU $-1 RET NC ; ; LD HL,(ShellAy) LD DE,(ShellBy) EXX LD HL,(ShellAx) LD DE,(ShellBx) CALL AnyLine ; LD HL,(ShellAy1) LD DE,(ShellBy1) EXX LD HL,(ShellAx) LD DE,(ShellBx) CALL AnyLine ; LD HL,(ShellAy1) LD DE,(ShellCy) EXX LD HL,(ShellAx) LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellAy) LD DE,(ShellCy) EXX LD HL,(ShellAx) LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellAx) LD DE,(ShellCx) OR A SBC HL,DE BIT 7,H RET NZ ; LD HL,(ShellAy1) LD DE,(ShellAy) EXX LD HL,(ShellAx) LD DE,(ShellAx) JP AnyLine ; RET ; SDneg LD HL,(ShellAx) LD DE,(ShellBx) OR A SBC HL,DE BIT 7,H JR Z SNnega ; CALL ShellBase ; LD HL,(ShellAx) ; A/B LD DE,(ShellCx) OR A SBC HL,DE BIT 7,H RET NZ ; Z ; LD HL,(ShellAy) ; A/B LD DE,(ShellCy) EXX LD HL,(ShellAx) ; A/B LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellAy1); A/B LD DE,(ShellCy) EXX LD HL,(ShellAx) ; A/B LD DE,(ShellCx) JP AnyLine ; SNnega LD HL,(ShellAy) ; A/B LD DE,(ShellCy) EXX LD HL,(ShellAx) ; A/B LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellAy1); A/B LD DE,(ShellCy) EXX LD HL,(ShellAx) ; A/B LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellAy1); A/B LD DE,(ShellAy) ; A/B EXX LD HL,(ShellAx) ; A/B LD DE,(ShellAx) ; A/B CALL AnyLine ; LD HL,(ShellBx) LD DE,(ShellAx) OR A SBC HL,DE RET Z ; LD A,(CentZ+1) CP 18 IgZ1 EQU $-1 RET NC ; ; LD HL,(ShellAy) LD DE,(ShellBy) EXX LD HL,(ShellAx) LD DE,(ShellBx) CALL AnyLine ; LD HL,(ShellAy1) LD DE,(ShellBy1) EXX LD HL,(ShellAx) LD DE,(ShellBx) CALL AnyLine ; LD HL,(ShellBy1) ; B/A LD DE,(ShellCy) EXX LD HL,(ShellBx) ; B/A LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellBy) ; B/A LD DE,(ShellCy) EXX LD HL,(ShellBx) ; B/A LD DE,(ShellCx) CALL AnyLine ; LD HL,(ShellBx) ; B/A LD DE,(ShellCx) OR A SBC HL,DE BIT 7,H RET Z ; NZ ; LD HL,(ShellBy1); B/A LD DE,(ShellBy) ; B/A EXX LD HL,(ShellBx) ; B/A LD DE,(ShellBx) ; B/A JP AnyLine ; RET ; ShellBase LD HL,(ShellAy1) LD DE,(ShellAy) EXX LD HL,(ShellAx) LD DE,(ShellAx) CALL AnyLine ; LD HL,(ShellBy1) LD DE,(ShellBy) EXX LD HL,(ShellBx) LD DE,(ShellBx) CALL AnyLine ; LD HL,(ShellAy) LD DE,(ShellBy) EXX LD HL,(ShellAx) LD DE,(ShellBx) CALL AnyLine ; LD HL,(ShellAy1) LD DE,(ShellBy1) EXX LD HL,(ShellAx) LD DE,(ShellBx) JP AnyLine ; DoPointA CALL RotHLDEA JP DoPa ; GenPt LD L,(IX+ptX) LD H,(IX+ptX+1) LD E,(IX+ptZ) LD D,(IX+ptZ+1) DoPoint CALL DoRotHLDEA DoPa LD BC,(CentX) ADD HL,BC EX DE,HL LD BC,(CentZ) ADD HL,BC EX DE,HL CALL ObjeDiv LD (IY+PlanX),L LD (IY+PlanX+1),H ; LD HL,(cY) CALL ObjeDiv LD (IY+PlanY),L LD (IY+PlanY+1),H RET ; DoPointY CALL DoRotHLDEA LD HL,(CentZ) ADD HL,DE EX DE,HL LD HL,(cY) CALL ObjeDiv LD (IY+PlanY),L LD (IY+PlanY+1),H RET ; RotHLDEA LD (RtX),HL LD (RtZ),DE PUSH AF CALL Sine POP AF LD (RotSin),BC CALL Cosine LD (RotCos),BC CALL Mult8 PUSH HL LD HL,(RtZ) LD BC,0 RotSin EQU $-2 CALL Mult8 POP DE ADD HL,DE PUSH HL LD HL,(RtX) LD BC,(RotSin) CALL Mult8 PUSH HL LD HL,(RtZ) LD BC,0 RotCos EQU $-2 CALL Mult8 POP DE OR A SBC HL,DE EX DE,HL POP HL 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 DEFM /Nig!/ ; DivHLDE LD A,H CP D JR Z Div1 JR NC Div16 Div81 XOR A Div8 LD C,A ADD HL,HL SBC HL,DE JR C Div70 ADC A,A ADD HL,HL SBC HL,DE JR C Div60 Div61 ADC A,A ADD HL,HL SBC HL,DE JR C Div50 Div51 ADC A,A ADD HL,HL SBC HL,DE JR C Div40 Div41 ADC A,A ADD HL,HL SBC HL,DE JR C Div30 Div31 ADC A,A ADD HL,HL SBC HL,DE JR C Div20 Div21 ADC A,A ADD HL,HL SBC HL,DE JR C Div10 Div11 ADC A,A ADD HL,HL SBC HL,DE ADC A,A CPL LD L,A LD H,C RET Div1 LD A,L CP E JR C Div81 JR Z Div0 Div16 LD A,L LD L,H LD H,0 LD B,8 Div16a ADD A,A ADC HL,HL SBC HL,DE JR NC Div16b ADD HL,DE DJNZ Div16a JP Div8 Div16b INC A DJNZ Div16a JP Div8 Div70 ADC A,A ADD HL,HL ADD HL,DE CCF JR NC Div61 Div60 ADC A,A ADD HL,HL ADD HL,DE CCF JR NC Div51 Div50 ADC A,A ADD HL,HL ADD HL,DE CCF JR NC Div41 Div40 ADC A,A ADD HL,HL ADD HL,DE CCF JR NC Div31 Div30 ADC A,A ADD HL,HL ADD HL,DE CCF JR NC Div21 Div20 ADC A,A ADD HL,HL ADD HL,DE CCF JR NC Div11 Div10 ADC A,A ADD HL,HL ADD HL,DE CCF ADC A,A CPL LD L,A LD H,C RET ; Div0 LD HL,#0100 RET ; ObjeDiv BIT 7,H JR NZ OD1 ADD HL,HL CALL DivHLDE RET ; OD1 LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL ADD HL,HL CALL DivHLDE LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; ShapeDiv PUSH BC CALL ObjeDiv POP BC RET ; MultNeg CALL NegHL LD A,B CALL MultUn CALL NegHL RET ; Mult8 LD A,B OR A JR Z Mulx DEC A JR Z Mulx0 INC A BIT 7,H JR NZ MultNeg MultUn EX DE,HL LD HL,0 LD B,L RLA JR NC Mul0 ADD HL,DE ADC A,B Mul0 ADD HL,HL RLA JR NC Mul1 ADD HL,DE ADC A,B Mul1 ADD HL,HL RLA JR NC Mul2 ADD HL,DE ADC A,B Mul2 ADD HL,HL RLA JR NC Mul3 ADD HL,DE ADC A,B Mul3 ADD HL,HL RLA JR NC Mul4 ADD HL,DE ADC A,B Mul4 ADD HL,HL RLA JR NC Mul5 ADD HL,DE ADC A,B Mul5 ADD HL,HL RLA JR NC Mul6 ADD HL,DE ADC A,B Mul6 ADD HL,HL RLA JR NC Mul7 ADD HL,DE ADC A,B Mul7 LD L,H LD H,A Mulx BIT 0,C RET Z JP NegHL ; Mulx0 LD L,A LD H,A RET ; MultHLDE LD B,H LD C,L LD HL,0 LD A,C LD C,B LD B,8 RRA MulL0 JR NC MulL1 ADD HL,DE MulL1 RR H RR L RRA DJNZ MulL0 LD B,A LD A,C LD C,B LD B,8 RRA MulL2 JR NC MulL3 ADD HL,DE MulL3 RR H RR L RRA DJNZ MulL2 LD H,L LD L,A RET ; SignMult 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 ; SignDiv BIT 7,H JR Z SD1 LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL BIT 7,D JR Z SDn LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE SDp JP DivHLDE SDn CALL DivHLDE LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL RET SD1 BIT 7,D JP Z DivHLDE LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE JP SDn ; CalcEdges XOR A INC H DEC H JR Z CalcC1b BIT 7,H JR NZ CalcC1a OR #02 JP CalcC1b ; CalcC1a OR #01 CalcC1b INC D DEC D RET Z BIT 7,D JR NZ CalcC1c OR #04 RET ; CalcC1c OR #08 RET ; ClipThing LD BC,128 CALL NegHL ADD HL,BC LD (ctY2),HL EX DE,HL CALL NegHL ADD HL,BC LD (ctY1),HL EXX LD BC,128 ADD HL,BC LD (ctX2),HL EX DE,HL ADD HL,BC LD (ctX1),HL ; LD HL,0 ctX1 EQU $-2 LD DE,0 ctY1 EQU $-2 CALL CalcEdges LD B,A LD HL,0 ctX2 EQU $-2 LD DE,0 ctY2 EQU $-2 CALL CalcEdges LD C,A OR B RET Z LD A,C AND B SCF RET NZ LD HL,(ctX1) LD (PaX),HL LD HL,(ctY1) LD (PaY),HL LD HL,(ctX2) LD (PbX),HL LD HL,(ctY2) LD (PbY),HL CALL ClipInner RET C LD HL,(PaX) LD (ctX2),HL LD HL,(PaY) LD (ctY2),HL LD HL,(ctX1) LD (PbX),HL LD HL,(ctY1) LD (PbY),HL CALL ClipInner RET C LD HL,(PaX) LD (ctX1),HL LD HL,(PaY) LD (ctY1),HL OR A RET ; ClipInner LD HL,0 PbX EQU $-2 LD DE,0 PbY EQU $-2 LD (PmX),HL LD (PmY),DE CALL CalcEdges OR A JR NZ C2 LD (PaX),HL LD (PaY),DE RET ; C2 LD HL,0 PaX EQU $-2 LD DE,0 PaY EQU $-2 CALL CalcEdges LD B,A LD HL,0 PmX EQU $-2 LD DE,0 PmY EQU $-2 CALL CalcEdges AND B SCF RET NZ LD HL,(PmX) LD DE,(PaX) OR A SBC HL,DE SRA H RR L LD DE,(PaX) ADD HL,DE LD (PmX),HL LD HL,(PmY) LD DE,(PaY) OR A SBC HL,DE SRA H RR L LD DE,(PaY) ADD HL,DE LD (PmY),HL CALL TestPm RET Z LD HL,(PbX) LD DE,(PbY) CALL CalcEdges LD B,A LD HL,(PmX) LD DE,(PmY) CALL CalcEdges AND B JR Z C4a LD (PbX),HL LD (PbY),DE JP C2 C4a LD (PaX),HL LD (PaY),DE LD HL,(PbX) LD DE,(PbY) LD (PmX),HL LD (PmY),DE JP C2 TestPm LD HL,(PmX) LD DE,(PaX) OR A SBC HL,DE JR NZ TPm1 LD HL,(PmY) LD DE,(PaY) OR A SBC HL,DE RET Z TPm1 LD HL,(PmX) LD DE,(PbX) OR A SBC HL,DE RET NZ LD HL,(PmY) LD DE,(PbY) OR A SBC HL,DE RET ; GenYTab LD IX,YTable LD HL,#C000 LD C,25 CharLp LD B,8 CharLp1 LD (IX),L INC IXH LD (IX),H DEC IXH INC IXL LD DE,#800 ADD HL,DE DJNZ CharLp1 LD DE,80-8*#800 ADD HL,DE DEC C JR NZ CharLp LD B,56 GYT1 LD (IX),0 INC IXH LD (IX),0 DEC IXH INC IXL DJNZ GYT1 RET ; PALL LD BC,#7F10 OUT (C),C LD C,#54 OUT (C),C LD HL,Colours LD C,0 PALL1 XOR A LD E,C RR E RLA RLCA RLCA RR E RR E RR E RLA LD E,A LD A,C AND #6 OR E OUT (C),A LD A,(HL) INC HL INC A RET Z DEC A OR #40 OUT (C),A INC C JR PALL1 ; Colours DEFB #14 ; 0 DEFB #15 ; 1 DEFB #0C ; 2 DEFB #0F ; 3 DEFB #12 ; 4 DEFB #13 ; 5 DEFB #0A ; 6 DEFB #0B ; 7 DEFB #15 ; 8 DEFB #0C ; 9 DEFB #0F ; A DEFB #12 ; B DEFB #13 ; C DEFB #0A ; D DEFB #0B ; E DEFB #1F ; F DEFB #FF ; ; Gen192Tab LD BC,DivTab LD HL,90 LD DE,187 G192 CALL GTab LD BC,XDivTab LD HL,80 LD DE,158 GTab LD A,H LD (BC),A ADD HL,DE INC C JR NZ GTab RET ; VS1 POP HL RET ; AnyVert PUSH DE EXX CALL NegHL EX DE,HL CALL NegHL EX DE,HL OR A SBC HL,DE BIT 7,H ADD HL,DE JR Z AV1 EX DE,HL AV1 POP BC ; VertLine PUSH HL OR A LD HL,128 ADC HL,BC JP M VS1 INC H DEC H JR NZ VS1 LD H,XDivTab/256 LD A,(HL) OR A RRA LD (V1),A LD A,(Colour) RLA LD L,A LD H,BitTab/256 LD A,(ColMask) AND (HL) LD (vlCol),A POP HL LD BC,128 ADD HL,BC EX DE,HL ADD HL,BC LD A,H OR A JR Z VS2 LD L,0 JP M VS2 LD L,#FF VS2 LD H,DivTab/256 LD A,D OR A JR Z VS3 LD E,0 JP M VS3 LD E,#FF VS3 LD D,DivTab/256 LD A,(DE) SUB (HL) SCF RET Z INC A LD B,A LD L,(HL) LD H,YTable/256 LD A,0 V1 EQU $-1 ADD A,(HL) LD C,A INC H LD A,(HL) ADC A,0 LD H,A LD L,C LD C,0 vlCol EQU $-1 ; LD (TempSP),SP LD SP,(pLines) ; PUSH HL LD DE,VLO PUSH DE LD A,B SCF PUSH AF ; LD (pLines),SP LD SP,(TempSP) ; LD DE,#800 vl1 DEC B RET Z LD A,(HL) OR C LD (HL),A ADD HL,DE JP NC vl1 LD DE,80-#800*8 ADD HL,DE LD DE,#800 LD A,B LD (vlRem),A RRCA RRCA RRCA AND #1F JR Z vl3 LD B,A vl4 LD A,(HL) OR C LD (HL),A ADD HL,DE LD A,(HL) OR C LD (HL),A ADD HL,DE LD A,(HL) OR C LD (HL),A ADD HL,DE LD A,(HL) OR C LD (HL),A ADD HL,DE LD A,(HL) OR C LD (HL),A ADD HL,DE LD A,(HL) OR C LD (HL),A ADD HL,DE LD A,(HL) OR C LD (HL),A ADD HL,DE LD A,(HL) OR C LD (HL),A LD DE,80-#800*7 ADD HL,DE LD DE,#800 DJNZ vl4 vl3 LD A,0 vlRem EQU $-1 AND #7 RET Z LD B,A vl5 LD A,(HL) OR C LD (HL),A ADD HL,DE DJNZ vl5 RET ; VLO LD B,A POP HL ; LD DE,#800 LD A,(ColMask) LD C,A Vo1 DEC B JP Z UDLret LD A,(HL) AND C LD (HL),A ADD HL,DE JP NC Vo1 LD DE,80-#800*8 ADD HL,DE LD DE,#800 LD A,B LD (VoRem),A RRCA RRCA RRCA AND #1F JR Z Vo3 LD B,A Vo4 LD A,(HL) AND C LD (HL),A ADD HL,DE LD A,(HL) AND C LD (HL),A ADD HL,DE LD A,(HL) AND C LD (HL),A ADD HL,DE LD A,(HL) AND C LD (HL),A ADD HL,DE LD A,(HL) AND C LD (HL),A ADD HL,DE LD A,(HL) AND C LD (HL),A ADD HL,DE LD A,(HL) AND C LD (HL),A ADD HL,DE LD A,(HL) AND C LD (HL),A LD DE,80-#800*7 ADD HL,DE LD DE,#800 DJNZ Vo4 Vo3 LD A,0 VoRem EQU $-1 AND #7 JP Z UDLret LD B,A Vo5 LD A,(HL) AND C LD (HL),A ADD HL,DE DJNZ Vo5 JP UDLret ; HS1 POP HL RET ; HpS DEFW 0 HpA DEFW 0 ; AnyHori EX DE,HL CALL NegHL PUSH HL EXX OR A SBC HL,DE BIT 7,H ADD HL,DE JR Z AH1 EX DE,HL AH1 POP BC ; HoriLine PUSH HL LD L,C LD H,B LD BC,128 ADD HL,BC INC H DEC H JR NZ HS1 LD H,DivTab/256 LD L,(HL) LD H,YTable/256 LD A,(HL) LD (HLsmc1),A INC H LD A,(HL) LD (HLsmc2),A POP HL LD BC,128 ADD HL,BC LD A,H OR A JR Z HS2 LD L,0 JP M HS2 LD L,#FF HS2 EX DE,HL ADD HL,BC LD A,H OR A JR Z HS3 LD L,0 JP M HS3 LD L,#FF HS3 LD H,XDivTab/256 LD D,H LD A,(DE) LD E,A SUB (HL) SCF RET Z LD D,(HL) LD A,D OR A RRA ADD A,0 HLsmc1 EQU $-1 LD L,A LD A,0 HLsmc2 EQU $-1 ADC A,0 LD H,A LD (HLhl),HL LD A,D AND #1 ADD A,8 LD L,A LD A,(Colour) ADD A,A ADD A,L LD L,A LD H,BitTab/256 LD A,(ColMask) AND (HL) LD (AnyA),A ; LD A,E AND #01 ADD A,16 LD L,A LD A,(Colour) ADD A,A ADD A,L LD L,A LD A,(ColMask) AND (HL) LD (AnyA1),A LD A,(Colour) ADD A,24 LD L,A LD A,(ColMask) AND (HL) LD C,A LD A,E OR A RRA OR A RR D SUB D LD B,A ; LD (TempSP),SP LD SP,(pLines) LD HL,0 HLhl EQU $-2 PUSH HL LD DE,HLO PUSH DE SCF PUSH AF ; NZ ; LD (pLines),SP LD SP,(TempSP) ; JR NZ HoriL HoriS LD A,0 AnyA EQU $-1 AND 0 AnyA1 EQU $-1 OR (HL) LD (HL),A RET ; HoriL LD A,(AnyA) OR (HL) LD (HL),A INC HL DJNZ HoriL1 LD A,(AnyA1) OR (HL) LD (HL),A RET ; HoriL1 LD A,C OR (HL) LD (HL),A INC HL DJNZ HoriL1 LD A,(AnyA1) OR (HL) LD (HL),A RET ; AnyLine OR A SBC HL,DE JP Z AnyVert ADD HL,DE ; EXX OR A SBC HL,DE JP Z AnyHori ADD HL,DE ; CALL ClipThing RET C LD HL,(ctX2) LD H,XDivTab/256 LD L,(HL) EX DE,HL LD HL,(ctX1) LD H,D LD L,(HL) XOR A LD H,A LD D,A EXX LD HL,(ctY2) LD H,DivTab/256 LD L,(HL) EX DE,HL LD HL,(ctY1) LD H,D LD L,(HL) LD H,A LD D,A PUSH IX PUSH IY OR A SBC HL,DE JR NC Lin2 ADD HL,DE EX DE,HL EXX EX DE,HL JR Lin1 Lin2 ADD HL,DE EXX Lin1 PUSH HL LD A,E AND #1 LD L,A LD A,(Colour) ADD A,A ADD A,L LD L,A LD H,BitTab/256 LD A,(ColMask) AND (HL) LD (Col),A LD A,#55 BIT 0,E JR NZ Lin3 LD A,#AA Lin3 LD (Mod),A LD A,E RRA EXX PUSH DE EXX POP HL LD H,YTable/256 ADD A,(HL) INC H LD H,(HL) LD L,A LD A,H ADC A,0 LD H,A EX (SP),HL LD IY,Incyy LD IX,Incxx OR A SBC HL,DE ; HL = dx JP P LineA LD IX,Decxx LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL LineA EXX OR A SBC HL,DE JP P LineB JP #188 LineB LD (sxxVector),IX PUSH HL EXX POP BC OR A SBC HL,BC ADD HL,BC JP M LineC ; xx > yy LD (HorizVector),IX LD C,L LD B,H PUSH HL EXX EX DE,HL POP HL JP Liney ; LineC LD (HorizVector),IY PUSH HL PUSH BC EXX EX DE,HL POP HL POP DE Liney LD C,L LD B,H SRA H RR L LD A,L EXX POP HL EXX POP IY POP IX EX AF,AF' EXX LD B,C INC B LD C,#AA Mod EQU $-1 ; LD (TempSP),SP LD SP,(pLines) ; LD A,(sxxVector) LD E,A LD A,(HorizVector) LD D,A PUSH DE PUSH BC PUSH HL ; EXX LD A,C LD (LAn),A LD D,C LD A,E LD (LAn1),A EX AF,AF' PUSH DE LD HL,ALOld PUSH HL SCF PUSH AF EX AF,AF' EXX ; LD (pLines),SP LD SP,(TempSP) ; LD DE,8 Col EQU $-1 ; LineAlg LD A,(HL) OR D LD (HL),A EX AF,AF' SUB 0 LAn1 EQU $-1 JR NC LineAlg1 ADD A,0 LAn EQU $-1 EX AF,AF' DEFB #CD sxxVector DEFW Incxx LD A,H ADD A,E LD H,A JR C LineAlg2 DJNZ LineAlg RET ; LineAlg2 PUSH BC LD BC,80-#800*8 ADD HL,BC POP BC DJNZ LineAlg RET ; ; LineAlg1 EX AF,AF' DEFB #CD HorizVector DEFW Incxx DJNZ LineAlg RET ; ALOld EX AF,AF' POP DE LD A,D LD (ALOn1),A LD A,E LD (ALOn2),A POP HL POP BC POP DE LD A,E ADD A,Incxx1-Incxx LD (ALOsxx),A LD A,D ADD A,Incxx1-Incxx LD (ALOhori),A LD A,(ColMask) LD (ALOn),A LD DE,8 ALOn2 EQU $-1 ; ALOlp LD A,(HL) AND 0 ALOn EQU $-1 LD (HL),A EX AF,AF' SUB D JR NC ALO1 ADD A,0 ALOn1 EQU $-1 EX AF,AF' DEFB #CD ALOsxx DEFW Incxx LD A,H ADD A,E LD H,A JR C ALO2 DJNZ ALOlp JP UDLret ; ALO2 PUSH BC LD BC,80-#800*8 ADD HL,BC POP BC DJNZ ALOlp JP UDLret ; ALO1 EX AF,AF' DEFB #CD ALOhori DEFW Incxx DJNZ ALOlp JP UDLret ; Cosine ADD A,64 ; Sine OR A JP M Sine2 BIT 6,A JR Z Sine1 NEG AND #3F JR NZ Sine1a LD B,0 LD C,0 RET ; Sine2 BIT 6,A JR Z Sine3 NEG AND #3F JR NZ Sine3a LD B,0 LD C,1 RET ; Sine1 AND #3F Sine1a LD C,A LD B,SineTab/256 LD A,(BC) LD B,A LD C,0 RET ; Sine3 AND #3F Sine3a LD C,A LD B,SineTab/256 LD A,(BC) LD B,A LD C,1 RET ; RET ; NegHL LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; Floor EQU -#80 ; ; TBX EQU #70 TBZf EQU #A0 TBZn EQU -#C0 ; TMX EQU #30 TMZf EQU #C0 TMZn EQU #40 TGX EQU #C TGZn EQU -#90 TGZf EQU #40 ; SBW EQU -#D SBL EQU #90 SBS EQU 18 ; MBW EQU -#60 MBL EQU #200 MBS EQU 40 ; ExY EQU -#10 ExXL EQU -#18 ExXR EQU #30 ; TBPa DEFW -TBX,TBZn DEFW TBX,TBZn DEFW TBX,TBZf DEFW -TBX,TBZf ; DEFW -TMX,TMZn DEFW TMX,TMZn DEFW TMX,TMZf DEFW -TMX,TMZf ; DEFW -TMX,TMZn DEFW TMX,TMZn DEFW TMX,TMZn DEFW -TMX,TMZn ; DEFW -TGX,TGZn DEFW TGX,TGZn DEFW -TGX,TGZf DEFW TGX,TGZf ; DEFW -TGX,TGZn DEFW TGX,TGZn DEFW -TGX,TGZf DEFW TGX,TGZf ; ; RtX DEFW 0 RtZ DEFW 0 ; xd1 DEFW 0 xd2 DEFW 0 xd3 DEFW 0 xd4 DEFW 0 xd5 DEFW 0 xd6 DEFW 0 xd7 DEFW 0 xd8 DEFW 0 ; xn1 DEFW 0 xn2 DEFW 0 xn3 DEFW 0 xn4 DEFW 0 xn5 DEFW 0 xn6 DEFW 0 xn7 DEFW 0 xn8 DEFW 0 ; zd1 DEFW 0 zd2 DEFW 0 zd3 DEFW 0 zd4 DEFW 0 zd5 DEFW 0 zd6 DEFW 0 zd7 DEFW 0 zd8 DEFW 0 ; ; zn1 DEFW 0 zn2 DEFW 0 zn3 DEFW 0 zn4 DEFW 0 zn5 DEFW 0 zn6 DEFW 0 zn7 DEFW 0 zn8 DEFW 0 ; xv0 DEFW 0 xv1 DEFW 0 xv2 DEFW 0 xv3 DEFW 0 xv4 DEFW 0 ; yv1 DEFW 0 yv2 DEFW 0 yv3 DEFW 0 yv4 DEFW 0 ; xv5 DEFW 0 xv6 DEFW 0 xv7 DEFW 0 xv8 DEFW 0 ; yv5 DEFW 0 yv6 DEFW 0 yv7 DEFW 0 yv8 DEFW 0 ; xv9 DEFW 0 xvA DEFW 0 xvB DEFW 0 xvC DEFW 0 ; yv9 DEFW 0 yvA DEFW 0 yvB DEFW 0 yvC DEFW 0 ; cY DEFW 0 DrawBaseF DEFB 0 ; pLines DEFW 0 pOLines DEFW 0 TempSP DEFW 0 ; ORG ($!#FF)+1 ; BitTab DEFB #00,#00,#22,#11,#88,#44,#AA,#55 ; DEFB #00,#00,#33,#11,#CC,#44,#FF,#55 ; DEFB #00,#00,#22,#33,#88,#CC,#AA,#FF ; DEFB #00,#33,#CC,#FF ; Incxx RRC D RRC C RET NC RLC D RLC D INC HL RET ; Decxx RLC D RLC C RET NC RRC D RRC D DEC HL RET ; Incyy LD A,H ADD A,E LD H,A RET NC PUSH BC:LD BC,80-#800*8:ADD HL,BC:POP BC RET ; Incxx1 RRC C RET NC INC HL RET ; RRC D RLC D RLC D ; Decxx1 RLC C RET NC DEC HL RET ; RLC D RRC D RRC D ; Incyy1 LD A,H ADD A,E LD H,A RET NC PUSH BC:LD BC,80-#800*8:ADD HL,BC:POP BC RET ; ORG ($!#FF)+1 ; SquareTab1 DEFS 256 SquareTab2 DEFS 256 ; SineTab DEFB 1, #6, #D,#13 ; Hack ! DEFB #19,#1F,#26,#2C DEFB #32,#38,#3E,#44 DEFB #4A,#50,#56,#5C DEFB #62,#68,#6D,#73 DEFB #79,#7E,#84,#89 DEFB #8E,#93,#98,#9D DEFB #A2,#A7,#AC,#B1 DEFB #B5,#B9,#BE,#C2 DEFB #C6,#CA,#CE,#D1 DEFB #D5,#D8,#DC,#DF DEFB #E2,#E5,#E7,#EA DEFB #ED,#EF,#F1,#F3 DEFB #F5,#F7,#F8,#FA DEFB #FB,#FC,#FD,#FE DEFB #FF,#FF, 0, 0 ; Points EQU $ ShellAx DEFS 2 ShellAy DEFS 2 ShellBx DEFS 2 ShellBy DEFS 2 ; DEFS 2 ShellAy1 DEFS 2 DEFS 2 ShellBy1 DEFS 2 ; ShellCx DEFS 2 ShellCy DEFS 2 ; DEFS 12 ; BarLHS DEFS 2 DEFS 2 BarRHS DEFS 2 DEFS 10 BarAx DEFS 2 BarAy DEFS 2 BarBx DEFS 2 BarBy DEFS 2 BarCx DEFS 2 BarCy DEFS 2 BarDx DEFS 2 BarDy DEFS 2 ; DEFS 2 BarAy1 DEFS 2 DEFS 2 BarBy1 DEFS 2 DEFS 2 BarCy1 DEFS 2 DEFS 2 BarDy1 DEFS 2 ; ORG Points+#100 RMulSin DEFS 64 RMulCos DEFS 64 RMulSinA DEFS 64 RMulCosA DEFS 64 ; nfA DEFW 0 nfB DEFW 0 nfC DEFW 0 nfN DEFB 0 nEnables DEFB 0 nvA DEFB 0 nvB DEFB 0 nvC DEFB 0 DEFS 8 ; ORG Workspace ; DivTab DEFS #100 XDivTab DEFS #100 YTable DEFS #200 ; CentX DEFS 2 CentY DEFS 2 CentZ DEFS 2 ; DispAng DEFS 1 ; Colour DEFS 1 ColMask DEFS 1 ; DScore DEFS 2 DEnergy DEFS 2 ; FrameInt DEFS 3 JP SetUpSubs JP Rand JP SetUpRot JP DoRotHLDE JP RotHLDEA ; JP DivHLDE JP SignDiv JP ObjeDiv JP ShapeDiv ; JP MultHLDE JP SignMult ; JP Mult8 JP Sine JP Cosine ; JP AnyLine JP VertLine JP HoriLine JP DrawPoint JP UnDrawLines ; JP CLS ; JP DoPyra JP DoCube JP DoTank JP DoShell JP DoExp JP DoFuel JP DoSauc JP DoPyra1 JP DoCube1 JP DoMiss ; DEFS #40 DEFS 16*90 OldLines1 DEFS #42 DEFS 16*90 OldLines2 DEFS 2 ; TheEnd EQU $