PlainZ EQU #200 BumpRej EQU #300 BumpX EQU #180 BumpZ EQU #300 ; Speed EQU 2 ; Range EQU #4000 MaxOS EQU #100 MaxX EQU #2000+MaxOS MaxZ EQU Range-MaxOS MinZ EQU PlainZ+#20 ; nObje EQU 1 lObje EQU 16 ; ObjeX EQU 0 ObjeY EQU 2 ObjeZ EQU 4 ObjeAng EQU 6 ObjepD EQU 7 ObjeFlag EQU 9 ObjepMove EQU 11 ; PlanX EQU 0 PlanY EQU 2 ; ptX EQU 0 ptY EQU 2 ptZ EQU 4 ; ZStep EQU #C0 ThetaStep EQU 1 ; ; ORG #9000 ENT XOR A OUT (Vcomm),A Wait IN A,(Vstat) BIT 5,A JR Z Wait LD (cStat),A CALL InitDisp CALL SetPart CALL SetZoom CALL SetPitch CALL SetCursor CALL PositCur CALL CLS CALL GenYTable CALL SetUpObje CALL SetUpTabs XOR A LD (cScreen),A CALL CalcpLineSt LD (pLineStore),IY LD (IY),0 GameLp CALL SetMode2 CALL DrawAllLines CALL CalcpLineSt LD (IY),0 LD A,(ObjeTable+ObjeAng) ADD A,3 LD (ObjeTable+ObjeAng),A CALL DoMove LD A,(ValidMove) OR A CALL NZ TestMove CALL SetMode1 CALL ShowObje ; CALL DrawAllLines LD A,(cScreen) CPL LD (cScreen),A GameWait CALL CountFrames LD A,(nFrames) CP Speed JR C GameWait LD A,0 LD (nFrames),A CALL FlipScreen LD BC,#2025 IN A,(C) BIT 0,A JR NZ GameLp RET ; SetUpTabs LD IY,SquareTab1 XOR A SUTl LD DE,-#80 ; Z 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 ; CountFrames PUSH BC IN A,(Vstat) LD B,A XOR 0 cStat EQU $-1 AND #20 JR Z CFx LD A,B LD (cStat),A LD A,(nFrames) INC A LD (nFrames),A CFx POP BC RET ; CallHL JP (HL) ; TestMove LD IX,ObjeTable LD B,nObje TMlp PUSH BC LD A,(IX+ObjeFlag) OR A JP Z TMx LD DE,(MyZ) LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) OR A SBC HL,DE LD (TestZ),HL BIT 7,H CALL NZ NegHL LD DE,BumpRej OR A SBC HL,DE JR NC TMx LD DE,(MyX) LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) OR A SBC HL,DE LD (TestX),HL BIT 7,H CALL NZ NegHL LD DE,BumpRej OR A SBC HL,DE JR NC TMx ; ; Trivial failed ; LD HL,0 TestX EQU $-2 LD DE,0 TestZ EQU $-2 LD A,(MyAng) CPL CALL RotHLDEA LD A,(MoveDir) XOR D AND #80 JR NZ TMx BIT 7,H CALL NZ NegHL LD BC,BumpX OR A SBC HL,BC JR NC TMx EX DE,HL BIT 7,H CALL NZ NegHL LD BC,BumpZ OR A SBC HL,BC JR NC TMx TMfail LD HL,(MyOldX) LD (MyX),HL LD HL,(MyOldZ) LD (MyZ),HL POP BC RET TMx POP BC LD DE,lObje ADD IX,DE DEC B JP NZ TMlp RET ; CalcpLineSt LD IY,LineStoreA LD A,(cScreen) OR A RET Z LD IY,LineStoreB RET ; DoMove LD BC,#2725 IN E,(C) LD BC,#2B25 IN A,(C) XOR E AND #1 JR Z DoM1 LD A,(MyAng) BIT 0,E JR Z DoM0 ADD A,ThetaStep*2 DoM0 SUB ThetaStep LD (MyAng),A DoM1 LD BC,#3B25 IN E,(C) LD BC,#3F25 IN A,(C) XOR E AND #1 LD HL,0 JR Z DoM2 LD (ValidMove),A LD A,E RRCA AND #80 LD (MoveDir),A LD HL,ZStep CALL NZ NegHL DoM2 LD (MyDist),HL LD HL,0 LD DE,(MyDist) LD A,(MyAng) CALL RotHLDEA LD BC,(MyX) LD (MyOldX),BC ADD HL,BC LD (MyX),HL EX DE,HL LD BC,(MyZ) LD (MyOldZ),BC ADD HL,BC LD (MyZ),HL RET ; MoveIt LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,#80 ADD HL,DE LD (IX+ObjeZ),L LD (IX+ObjeZ+1),H RET ; RotL INC (IX+ObjeAng) ; RotR DEC (IX+ObjeAng) RET ; DrawAllLines CALL CalcpLineSt LD (pLineStore),IY UDLlp LD A,(IY) OR A RET Z INC IY LD E,(IY) INC IY LD D,(IY) INC IY LD L,(IY) INC IY LD H,(IY) INC IY EXX LD E,(IY) INC IY LD D,(IY) INC IY LD L,(IY) INC IY LD H,(IY) INC IY EXX CALL Line JR UDLlp ; ShowObje LD IX,ObjeTable LD BC,nObje SOlp PUSH BC LD A,(IX+ObjeFlag) OR A JP Z SOx JP P SO0 LD L,(IX+ObjepMove) LD H,(IX+ObjepMove+1) CALL CallHL SO0 LD L,(IX+ObjeX) LD H,(IX+ObjeX+1) LD DE,(MyX) OR A SBC HL,DE ; LD (CentX),HL BIT 7,H JR Z SO1 CALL NegHL SO1 LD DE,MaxZ OR A SBC HL,DE BIT 7,H JP Z SOx ; LD L,(IX+ObjeZ) LD H,(IX+ObjeZ+1) LD DE,(MyZ) OR A SBC HL,DE ; LD (CentZ),HL BIT 7,H JR Z SO2 CALL NegHL SO2 LD DE,MaxZ OR A SBC HL,DE BIT 7,H JP Z SOx ; LD HL,(CentX) LD DE,(CentZ) LD A,(MyAng) CPL CALL RotHLDEA LD (CentX),HL LD (CentZ),DE ; EX DE,HL LD DE,MaxZ OR A SBC HL,DE JP P SOx ADD HL,DE LD DE,MinZ OR A SBC HL,DE JP M SOx ; LD HL,(CentX) BIT 7,H JR Z SO3 CALL NegHL SO3 LD DE,MaxX OR A SBC HL,DE JP P SOx ADD HL,DE LD DE,MaxOS OR A SBC HL,DE JP M SO4 ; ADD HL,HL ADD HL,HL LD DE,(CentZ) OR A SBC HL,DE JP P SOx SO4 EQU $ ; ; Deal with Y ; LD A,(MyAng) SUB (IX+ObjeAng) NEG LD (DispAng),A ; LD L,(IX+ObjepD) LD H,(IX+ObjepD+1) ; JP DoCube PUSH IX PUSH HL POP IX LD B,(IX) LD DE,17 ADD IX,DE LD IY,Points SORlp PUSH BC CALL GenPt LD BC,4 ADD IY,BC LD BC,6 ADD IX,BC POP BC DJNZ SORlp ; LD B,(IX) INC IX SODlp PUSH BC CALL DispLine INC IX INC IX POP BC DJNZ SODlp ; POP IX SOx LD BC,lObje ADD IX,BC POP BC CPI JP V SOlp RET ; DoCube LD HL,(CentX) LD DE,(CentZ) CALL ObjeDiv LD (xv0),HL ; LD HL,128 LD DE,(CentZ) CALL ObjeDiv LD (yv0),HL LD (yv0),HL ; LD H,SquareTab1/256 LD A,(DispAng) LD (DispAng),A 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,-#80 LD DE,(zn1) CALL ObjeDiv LD (yv1),HL ; LD HL,-#80 LD DE,(zn2) CALL ObjeDiv LD (yv2),HL ; LD HL,-#80 LD DE,(zn3) CALL ObjeDiv LD (yv3),HL ; LD HL,-#80 LD DE,(zn4) CALL ObjeDiv LD (yv4),HL ; CALL LHS CALL RHS JR SqOb ; LHS LD HL,(xv4) LD DE,(xv1) OR A SBC HL,DE BIT 7,H JR NZ LHSa LD A,(CentZ+1) CP 5 RET NC LD HL,(xv0) LD DE,(xv1) OR A SBC HL,DE PUSH HL LD HL,(yv0) LD DE,(yv1) OR A SBC HL,DE POP DE CALL SignDiv PUSH HL LD HL,(xv4) LD DE,(xv1) OR A SBC HL,DE PUSH HL LD HL,(yv4) LD DE,(yv1) OR A SBC HL,DE POP DE CALL SignDiv EX DE,HL POP HL OR A SBC HL,DE RET NC ; LHSa LD HL,(yv4) LD DE,(yv1) EXX LD HL,(xv4) LD DE,(xv1) CALL DispLine ; LD HL,(yv4) LD DE,(yv0) EXX LD HL,(xv4) LD DE,(xv0) CALL DispLine ; RET ; SqOb LD HL,(yv1) LD DE,(yv0) EXX LD HL,(xv1) LD DE,(xv0) CALL DispLine ; LD HL,(yv2) LD DE,(yv0) EXX LD HL,(xv2) LD DE,(xv0) CALL DispLine ; LD HL,(yv2) LD DE,(yv1) EXX LD HL,(xv2) LD DE,(xv1) CALL DispLine ; JP SOx ; RHS LD HL,(xv2) DEC HL LD DE,(xv3) OR A SBC HL,DE BIT 7,H JR NZ RHSa ; LD A,(CentZ+1) CP 5 RET NC LD HL,(xv0) LD DE,(xv2) OR A SBC HL,DE PUSH HL LD HL,(yv0) LD DE,(yv2) OR A SBC HL,DE POP DE CALL SignDiv PUSH HL LD HL,(xv3) LD DE,(xv2) OR A SBC HL,DE PUSH HL LD HL,(yv3) LD DE,(yv2) OR A SBC HL,DE POP DE CALL SignDiv EX DE,HL POP HL OR A SBC HL,DE RET C RHSa LD HL,(yv3) LD DE,(yv2) EXX LD HL,(xv3) LD DE,(xv2) CALL DispLine ; LD HL,(yv3) LD DE,(yv0) EXX LD HL,(xv3) LD DE,(xv0) CALL DispLine ; RET ; DispLine LD BC,128 ADD HL,BC LD (ctX1),HL EXX LD BC,128 CALL NegHL ADD HL,BC LD (ctY1),HL EXX EX DE,HL ADD HL,BC LD (ctX2),HL EXX EX DE,HL CALL NegHL ADD HL,BC LD (ctY2),HL CALL ClipThing RET C LD HL,(ctY1) ADD HL,HL LD DE,(ctY2) EX DE,HL ADD HL,HL EX DE,HL EXX LD BC,Xmid-256 LD HL,(ctX1) ADD HL,HL ADD HL,BC LD DE,(ctX2) EX DE,HL ADD HL,HL ADD HL,BC EX DE,HL PUSH IX LD IX,(pLineStore) LD (IX),#FF INC IX LD (IX),E INC IX LD (IX),D INC IX LD (IX),L INC IX LD (IX),H INC IX EXX LD (IX),E INC IX LD (IX),D INC IX LD (IX),L INC IX LD (IX),H INC IX LD (IX),0 EXX LD (pLineStore),IX CALL Line POP IX RET ; GenPt LD L,(IX+ptX) LD H,(IX+ptX+1) LD E,(IX+ptZ) LD D,(IX+ptZ+1) LD A,(DispAng) AND #3F CALL RotHLDEA LD BC,(CentX) ADD HL,BC PUSH HL EX DE,HL LD BC,(CentZ) ADD HL,BC EX DE,HL ; DE = Point Z POP HL CALL ObjeDiv LD (IY+PlanX),L LD (IY+PlanX+1),H ; LD L,(IX+ptY) LD H,(IX+ptY+1) 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 CountFrames 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 ; SetUpObje LD IX,ObjeTable LD B,nObje SUOlp PUSH BC LD (IX+ObjeFlag),#81 CALL Rand LD DE,0 LD (IX+ObjeX),E LD (IX+ObjeX+1),D ; CALL Rand LD DE,#300 LD (IX+ObjeZ),E LD (IX+ObjeZ+1),D ; LD DE,0 LD (IX+ObjeY),E LD (IX+ObjeY+1),D ; CALL GetObje LD (IX+ObjepD),L LD (IX+ObjepD+1),H LD (IX+ObjepMove),E LD (IX+ObjepMove+1),D ; LD A,R ADD A,A LD (IX+ObjeAng),A LD BC,lObje ADD IX,BC POP BC DJNZ SUOlp RET ; GetObje CALL Rand LD A,E AND #7 LD A,1 LD E,A LD D,0 LD HL,ObjeTab ADD HL,DE ADD HL,DE ADD HL,DE ADD HL,DE LD E,(HL) INC HL LD D,(HL) INC HL LD A,(HL) INC HL LD H,(HL) LD L,A EX DE,HL RET ; ObjeTab DEFW Pyramid,RotL DEFW Cube,RotR DEFW Pyramid3,RotL DEFW SquareSlab,RotR DEFW Pyramid,RotL DEFW Saucer,RotL DEFW Pyramid3,MoveIt DEFW SquareSlab,MoveIt ; 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 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 ; 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 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 ; Cosine ADD A,64 Sine PUSH DE PUSH HL LD C,A AND #3F RL C RL C JR NC,Sine1 XOR #3F Sine1 LD E,A LD D,0 LD HL,SineTable ADD HL,DE LD B,(HL) POP HL POP DE RET SineTable DEFB 3, 9, 16, 22 DEFB 28, 34, 41, 47 DEFB 53, 59, 65, 71 DEFB 77, 83, 89, 95 DEFB 101,107,112,118 DEFB 123,129,134,140 DEFB 145,150,155,160 DEFB 165,170,174,179 DEFB 183,188,192,196 DEFB 200,204,207,211 DEFB 215,218,221,224 DEFB 227,230,233,235 DEFB 238,240,242,244 DEFB 246,248,249,250 DEFB 252,253,254,254 DEFB 255,255, 0, 0 ; NegHL LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL RET ; Line LD (Xstore),DE EXX LD (Ystore),DE EXX LD A,FIGS CALL OutComm LD IX,DirTable OR A SBC HL,DE JR NC LineA INC IX INC IX INC IX INC IX LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL LineA PUSH HL EXX OR A SBC HL,DE JR NC LineB INC IX INC IX LD A,L CPL LD L,A LD A,H CPL LD H,A INC HL LineB POP DE SRA H:RR L EX DE,HL OR A SBC HL,DE BIT 7,H ADD HL,DE JR Z LineC INC IX EX DE,HL LineC LD C,L LD B,H LD A,(IX) CALL OutPara CALL OutPara2 ; G LD H,D LD L,E ADD HL,HL OR A SBC HL,BC CALL OutPara2 ; 2L-G OR A SBC HL,BC CALL OutPara2 ; 2L-2G EX DE,HL ADD HL,HL CALL OutPara2 ; 2L ; LD A,CURS CALL OutComm LD HL,(Ystore) ; ADD HL,HL LD DE,YTable ADD HL,DE LD A,(HL) INC L LD H,(HL) LD L,A LD DE,(Xstore) XOR A SRL D RR E RRA SRL D RR E RRA SRL D RR E RRA SRL D RR E RRA ADD HL,DE EX AF,AF' LD DE,288*#30*2 LD A,(cScreen) OR A JR Z Cur1 ADD HL,DE Cur1 CALL OutPara2 EX AF,AF' CALL OutPara ; LD A,PRAM+8 CALL OutComm LD HL,#FFFF CALL OutPara2 ; LD A,#6C CALL OutComm RET ; RET ; DirTable DEFB #09,#08,#0A,#0B DEFB #0E,#0F,#0D,#0C ; Vcomm EQU #A1 Vstat EQU #A0 Vpr EQU #A1 Vpw EQU #A0 ; RSize EQU 160 RSize1 EQU 160 ; RESET EQU #00 CCHAR EQU #4B START EQU #6B EXTSYNC EQU #6F PRAM EQU #70 ZOOM EQU #46 CURS EQU #49 PITCH EQU #47 MASK EQU #4A FIGS EQU #4C WDAT EQU #20 ; Xmid EQU 768/2 Ymid EQU 256/2 ; SetMode1 LD A,#20 CALL OutComm RET SetMode2 LD A,#22 CALL OutComm RET ; GenYTable LD HL,0 LD DE,#30 LD BC,512 LD IX,YTable GYTlp LD (IX),L INC IX LD (IX),H INC IX ADD HL,DE CPI DEC HL JP V GYTlp RET ; CLS LD A,CURS CALL OutComm LD A,0 CALL OutPara LD A,0 CALL OutPara LD A,0 CALL OutPara ; LD A,MASK CALL OutComm LD A,#FF CALL OutPara LD A,#FF CALL OutPara ; LD A,FIGS CALL OutComm LD A,#02 CALL OutPara LD A,#FF CALL OutPara LD A,#FF CALL OutPara ; LD A,WDAT CALL OutComm LD A,#00 CALL OutPara LD A,#00 CALL OutPara LD A,FIGS CALL OutComm LD A,#02 CALL OutPara LD A,#FF CALL OutPara LD A,#FF CALL OutPara ; LD A,WDAT CALL OutComm LD A,#00 CALL OutPara LD A,#00 CALL OutPara ; LD A,FIGS CALL OutComm LD A,#02 CALL OutPara LD A,#FF CALL OutPara LD A,#FF CALL OutPara ; LD A,WDAT CALL OutComm LD A,#00 CALL OutPara LD A,#00 CALL OutPara LD A,FIGS CALL OutComm LD A,#02 CALL OutPara LD A,#FF CALL OutPara LD A,#FF CALL OutPara ; LD A,WDAT CALL OutComm LD A,#00 CALL OutPara LD A,#00 CALL OutPara RET ; OutPara2 LD A,L CALL OutPara LD A,H JP OutPara ; PositCur LD A,CURS CALL OutComm LD B,3 LD HL,pCursData CALL DumpParas RET ; SetCursor LD A,CCHAR CALL OutComm LD B,3 LD HL,CursorData CALL DumpParas RET ; SetPitch LD A,PITCH CALL OutComm LD A,#30 CALL OutPara RET ; SetPart LD A,PRAM!#00 CALL OutComm LD B,16 LD HL,PramData CALL DumpParas RET ; FlipScreen LD A,PRAM CALL OutComm LD HL,0 LD A,(cScreen) OR A JR NZ FS1 LD HL,288*#30*2 FS1 JP OutPara2 ; WaitTF IN A,(Vstat) BIT 5,A JR NZ WaitTF WTF IN A,(Vstat) BIT 5,A JR Z WaitTF RET ; SetZoom LD A,ZOOM CALL OutComm LD A,#00 CALL OutPara RET ; InitDisp LD A,RESET CALL OutComm LD HL,RESETparas LD B,8 CALL DumpParas LD A,EXTSYNC CALL OutComm LD A,START CALL OutComm RET ; OutComm PUSH AF OClp IN A,(Vstat) BIT 2,A JR Z OClp POP AF OUT (Vcomm),A RET ; OutPara PUSH AF OPlp IN A,(Vstat) BIT 1,A JR NZ OPlp POP AF OUT (Vpw),A RET ; DumpParas LD A,(HL) CALL OutPara INC HL DJNZ DumpParas RET ; RESETparas DEFB #06,#2E,#65,#04 DEFB #09,#02,#00,#3D ; CursorData DEFB #80,#C8,#1A ; pCursData DEFB #00,#00,#80 ; PramData DEFB #00,#00,#F0,#12 DEFB #01,#80,#00,#10 DEFB #FF,#FF,#FF,#FF DEFB #FF,#FF,#FF,#FF ; Xstore DEFW 0 Ystore DEFW 0 ; ORG ($!#1)+1 ; YTable DEFS 1024 Pyra4S EQU #80 Pyra4D EQU Pyra4S/2 ; CubeS EQU #80 ; Pyra3S EQU #80 Pyra3W1 EQU -#40 Pyra3W2 EQU 111 ; Floor EQU -#80 ; SlT EQU #40 SlB EQU #80 SlW EQU #80 ; TBS EQU #60 TMS EQU #80 TTS EQU #38 TMH EQU -#60 TBD EQU #A0 TMD EQU -#B0 TML EQU #C0 TTH EQU -#28 TTL EQU 0 TTD EQU -#90 TPD EQU -#50 TPH EQU #28 TPS EQU #30 TGS EQU #10 TGL EQU #80 TGDt1 EQU -#1B TGDt2 EQU -#35 TSecX EQU ((TTS-TPS)/2)+TPS TSecZ EQU TPD-((TPD-TTD)/2) ; SaS EQU #6D SaW EQU #80 SaSz EQU #30 SaH EQU #40 SaSec EQU SaW/2 ; Pyramid DEFB 5 ; DEFW -Pyra4D,-Pyra4D DEFW -Pyra4D, Pyra4D DEFW Pyra4D,-Pyra4D DEFW Pyra4D, Pyra4D ; DEFW 0, Pyra4S, 0 DEFW -Pyra4S,-Pyra4S,-Pyra4S DEFW -Pyra4S,-Pyra4S, Pyra4S DEFW Pyra4S,-Pyra4S, Pyra4S DEFW Pyra4S,-Pyra4S,-Pyra4S ; DEFB 8 ; DEFB 0*4,1*4 DEFB 0*4,2*4 DEFB 0*4,3*4 DEFB 0*4,4*4 DEFB 1*4,2*4 DEFB 2*4,3*4 DEFB 3*4,4*4 DEFB 4*4,1*4 ; Cube DEFB 8 ; DEFW -CubeS,-CubeS DEFW -CubeS, CubeS DEFW CubeS,-CubeS DEFW CubeS, CubeS ; DEFW -CubeS, CubeS,-CubeS DEFW -CubeS, CubeS, CubeS DEFW CubeS, CubeS, CubeS DEFW CubeS, CubeS,-CubeS DEFW -CubeS,-CubeS,-CubeS DEFW -CubeS,-CubeS, CubeS DEFW CubeS,-CubeS, CubeS DEFW CubeS,-CubeS,-CubeS ; DEFB 7; 12 ; ; DEFB 0*4,1*4 ; DEFB 1*4,2*4 DEFB 2*4,3*4 DEFB 3*4,0*4 ; ; DEFB 4*4,5*4 ; DEFB 5*4,6*4 DEFB 6*4,7*4 DEFB 7*4,4*4 ; DEFB 0*4,4*4 ; DEFB 1*4,5*4 DEFB 2*4,6*4 DEFB 3*4,7*4 ; Pyramid3 DEFB 4 ; DEFW 0,Pyra3S/2 DEFW 0,Pyra3S/2 DEFW Pyra3W2/2,-(Pyra3W1/2) DEFW -(Pyra3W2/2),-(Pyra3W1/2) ; DEFW Pyra3W2,Floor,-Pyra3W1 DEFW 0,Floor,-Pyra3S DEFW -Pyra3W2,Floor,-Pyra3W1 DEFW 0,Pyra3S,0 ; DEFB 6 ; DEFB 0*4,1*4 DEFB 1*4,2*4 DEFB 2*4,0*4 DEFB 0*4,3*4 DEFB 1*4,3*4 DEFB 2*4,3*4 ; SquareSlab DEFB 8 ; DEFW -SlW,-SlW DEFW -SlW, SlW DEFW SlW,-SlW DEFW SlW, SlW ; DEFW -SlW,-SlT,-SlW DEFW -SlW,-SlT, SlW DEFW SlW,-SlT, SlW DEFW SlW,-SlT,-SlW DEFW -SlW,-SlB,-SlW DEFW -SlW,-SlB, SlW DEFW SlW,-SlB, SlW DEFW SlW,-SlB,-SlW ; DEFB 12 ; DEFB 0*4,1*4 DEFB 1*4,2*4 DEFB 2*4,3*4 DEFB 3*4,0*4 DEFB 4*4,5*4 DEFB 5*4,6*4 DEFB 6*4,7*4 DEFB 7*4,4*4 DEFB 0*4,4*4 DEFB 1*4,5*4 DEFB 2*4,6*4 DEFB 3*4,7*4 ; Tank DEFB 22 ; DEFW TGS,TGL DEFW -TGS,TGL DEFW TSecX,TSecZ DEFW -TSecX,TSecZ ; DEFW -TBS, Floor, TBD DEFW -TBS, Floor,-TBD DEFW TBS, Floor,-TBD DEFW TBS, Floor, TBD ; 4 DEFW -TMS, TMH , TML DEFW -TMS, TMH , TMD DEFW TMS, TMH , TMD DEFW TMS, TMH , TML ; 8 DEFW -TTS, TTH , TTL DEFW -TTS, TTH , TTD DEFW TTS, TTH , TTD DEFW TTS, TTH , TTL ; C DEFW -TPS, TPH , TPD DEFW TPS, TPH , TPD DEFW -TGS,-TGS , TGL DEFW -TGS,-TGS , TGDt1 ; 10 DEFW TGS,-TGS , TGDt1 DEFW TGS,-TGS , TGL DEFW -TGS, TGS , TGL DEFW -TGS, TGS , TGDt2 ; 14 DEFW TGS, TGS , TGDt2 DEFW TGS, TGS , TGL ; DEFB 37 ; DEFB 0*4,1*4 DEFB 1*4,2*4 DEFB 2*4,3*4 DEFB 3*4,0*4 DEFB 4*4,5*4 DEFB 5*4,6*4 DEFB 6*4,7*4 DEFB 7*4,4*4 DEFB 1*4,5*4 DEFB 2*4,6*4 DEFB 3*4,7*4 DEFB 0*4,4*4 DEFB 8*4,9*4 DEFB 9*4,10*4 DEFB 10*4,11*4 DEFB 11*4,8*4 DEFB 5*4,9*4 DEFB 6*4,10*4 DEFB 7*4,11*4 DEFB 4*4,8*4 DEFB 12*4,13*4 DEFB 9*4,12*4 DEFB 8*4,12*4 DEFB 10*4,13*4 DEFB 11*4,13*4 DEFB 14*4,15*4 DEFB 16*4,17*4 DEFB 17*4,14*4 DEFB 18*4,19*4 DEFB 20*4,21*4 DEFB 21*4,18*4 DEFB 17*4,21*4 DEFB 14*4,18*4 ; DEFB 15*4,16*4 DEFB 15*4,19*4 DEFB 16*4,20*4 DEFB 19*4,20*4 ; Saucer DEFB 8 ; DEFW -SaSec,-SaSec DEFW -SaSec, SaSec DEFW SaSec,-SaSec DEFW SaSec, SaSec ; DEFW SaW/2,SaH,SaS DEFW SaW,SaH,0 DEFW SaW/2,SaH,-SaS DEFW -(SaW/2),SaH,-SaS ; 4 DEFW -SaW,SaH,0 DEFW -(SaW/2),SaH,SaS DEFW 0,SaH+SaS/2,0 DEFW 0,SaH-SaS/2,0 ; DEFB 18 ; DEFB 0*4,1*4 DEFB 1*4,2*4 DEFB 2*4,3*4 DEFB 3*4,4*4 DEFB 4*4,5*4 DEFB 5*4,0*4 DEFB 0*4,6*4 DEFB 1*4,6*4 DEFB 2*4,6*4 DEFB 3*4,6*4 DEFB 4*4,6*4 DEFB 5*4,6*4 DEFB 0*4,7*4 DEFB 1*4,7*4 DEFB 2*4,7*4 DEFB 3*4,7*4 DEFB 4*4,7*4 DEFB 5*4,7*4 ; RtX DEFW 0 RtZ DEFW 0 ; MyX DEFW 0 MyOldX DEFW 0 MyY DEFW 0 MyZ DEFW 0 MyOldZ DEFW 0 MyAng DEFB 0 MyDist DEFW 0 cScreen DEFB 0 ValidMove DEFB 0 MoveDir DEFB 0 ; CentX DEFW 0 CentY DEFW 0 CentZ DEFW 0 ; DispAng DEFB 0 ; xd1 DEFW 0 xd2 DEFW 0 xd3 DEFW 0 xd4 DEFW 0 ; xn1 DEFW 0 xn2 DEFW 0 xn3 DEFW 0 xn4 DEFW 0 ; zd1 DEFW 0 zd2 DEFW 0 zd3 DEFW 0 zd4 DEFW 0 ; zn1 DEFW 0 zn2 DEFW 0 zn3 DEFW 0 zn4 DEFW 0 ; xv0 DEFW 0 xv1 DEFW 0 xv2 DEFW 0 xv3 DEFW 0 xv4 DEFW 0 ; yv0 DEFW 0 yv1 DEFW 0 yv2 DEFW 0 yv3 DEFW 0 yv4 DEFW 0 ; nFrames DEFB 0 ; pLineStore DEFW 0 ; ObjeTable DEFS nObje*lObje ; ORG ($!#FF)+1 ; Points DEFS 256 SquareTab1 DEFS 256 LineStoreA DEFS 300*4 LineStoreB DEFS 300*4