EOS EQU $ STab EQU #D800 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 obWSp EQU 10 obLen EQU 16 ptPxl EQU 0 ptPxh EQU 1 ptPyl EQU 2 ptPyh EQU 3 ptPzl EQU 4 ptPzh EQU 5 ORG #AA00 DispObj LD IX,ObList DispOb1 LD A,(IX) CP #FF RET Z OR A CALL NZ,DoObj LD DE,obLen ADD IX,DE JP DispOb1 DoObj PUSH IX CALL GMat JR C,DoObK LD A,(IX+obShp) CALL ShPnt PUSH DE LD IY,TempP LD B,(IX) INC IX DoObL PUSH BC CALL MMul LD DE,6 ADD IX,DE LD E,4 ADD IY,DE POP BC DJNZ DoObL POP IX LD DE,TempP LD B,(IX) INC IX CALL MLine DoObK POP IX RET GMat LD A,(PlPhi) SUB (IX+obPhi) LD D,A CALL Cosine LD (MatCos),BC LD A,D CALL Sine LD (MatSin),BC LD A,(PlPhi) CALL Cosine LD A,B LD (CosPP),BC LD H,(IX+obPxh) LD L,(IX+obPxl) LD DE,(PlPx) ADD HL,HL EX DE,HL ADD HL,HL EX DE,HL OR A SBC HL,DE SRA H:RR L LD (Dispx),HL OR A:CALL NZ,FMul RR C CALL C,NegHL PUSH HL LD A,(PlPhi) CALL Sine LD A,B LD (SinPP),BC LD H,(IX+obPzh) LD L,(IX+obPzl) LD DE,(PlPz) ADD HL,HL EX DE,HL ADD HL,HL EX DE,HL OR A SBC HL,DE SRA H:RR L LD (Dispz),HL OR A:CALL NZ,FMul RR C CALL NC,NegHL POP DE ADD HL,DE LD (MatPx),HL LD BC,(SinPP) LD A,B LD HL,(Dispx) OR A:CALL NZ,FMul RR C CALL C,NegHL PUSH HL LD BC,(CosPP) LD A,B LD HL,(Dispz) OR A:CALL NZ,FMul RR C CALL C,NegHL POP DE ADD HL,DE LD (MatPz),HL LD A,H RLCA RET C LD D,(IX+obDis) LD E,0 SBC HL,DE CCF RET C ADD HL,DE LD DE,(MatPx) BIT 7,D JR Z,KSill1 LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE KSill1 OR A SBC HL,DE RET MMul LD H,(IX+ptPxh) LD L,(IX+ptPxl) LD BC,(MatCos) LD A,B OR A:CALL NZ,FMul RR C CALL C,NegHL PUSH HL LD H,(IX+ptPzh) LD L,(IX+ptPzl) LD BC,(MatSin) LD A,B OR A:CALL NZ,FMul RR C CALL NC,NegHL POP DE ADD HL,DE LD DE,(MatPx) ADD HL,DE LD (TX),HL LD H,(IX+ptPxh) LD L,(IX+ptPxl) LD BC,(MatSin) LD A,B OR A:CALL NZ,FMul RR C CALL C,NegHL PUSH HL LD H,(IX+ptPzh) LD L,(IX+ptPzl) LD BC,(MatCos) LD A,B OR A:CALL NZ,FMul RR C CALL C,NegHL POP DE ADD HL,DE LD DE,(MatPz) ADD HL,DE LD D,H:LD E,L PUSH DE LD HL,(TX) CALL FDiv LD DE,128 ADD HL,DE LD (IY),L LD (IY+1),H LD H,(IX+ptPyh) LD L,(IX+ptPyl) POP DE CALL FDiv LD DE,128 ADD HL,DE LD (IY+2),L LD (IY+3),H RET ShPnt LD H,0 LD L,A DEC L ADD HL,HL ADD HL,HL LD DE,ShpVec ADD HL,DE LD C,(HL) INC HL LD B,(HL) INC HL LD E,(HL) INC HL LD D,(HL) DEFB #DD:LD H,B DEFB #DD:LD L,C RET MLine PUSH BC PUSH DE LD L,(IX) CALL MLinG LD L,(IX+1) CALL MLinG POP DE EXX POP DE EXX POP HL EXX POP HL CALL CLine POP DE POP BC INC IX INC IX DJNZ MLine RET MLinG POP IY LD H,0 ADD HL,HL ADD HL,HL ADD HL,DE LD C,(HL) INC HL LD B,(HL) PUSH BC INC HL LD C,(HL) INC HL LD B,(HL) PUSH BC JP (IY) 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,SineT ADD HL,DE LD B,(HL) POP HL POP DE RET SineT DEFB 3,9,16,22 DEFB 28,34,41,47,53,59 DEFB 65,71,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 FMul LD B,8 EX DE,HL LD HL,0 FMul1 SRA H RR L RRA JR NC,FMul2 ADD HL,DE FMul2 DJNZ FMul1 SRA H RR L RET NC INC HL RET FDiv LD A,H EX AF,AF' BIT 7,H JR Z,FDiva LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL FDiva BIT 7,D JR Z,FDivb LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE FDivb EXX LD HL,0 LD DE,#100 EXX OR A FDiv1 SBC HL,DE JP C,FDiv4 JP Z,FDiv3 ADD HL,DE SLA E RL D EXX SLA E RL D EXX JP NC,FDiv1 LD HL,0 JP FDivc FDiv2 SBC HL,DE JR C,FDiv4 FDiv3 ADD HL,HL EXX ADD HL,DE SRL D RR E EXX JP NC,FDiv2 JP FDivd FDiv4 ADD HL,DE ADD HL,HL EXX SRL D RR E EXX JP NC,FDiv2 FDivd EXX FDivc EX AF,AF' RLA RET NC NegHL LD A,H CPL LD H,A LD A,L CPL LD L,A INC HL RET IMul LD HL,0 LD A,16 IMul1 SRA H RR L RR D RR E JR NC,IMul2 ADD HL,BC IMul2 DEC A JR NZ,IMul1 SRA H RR L RR D RR E RET IDiv LD A,16 IDiv0 DEFB #CB,#33 RL D RL L RL H SBC HL,BC JR NC,IDiv1 ADD HL,BC DEC E IDiv1 DEC A JR NZ,IDiv0 RET Line LD A,L SUB E JR NC,Linexs EX DE,HL Linexs PUSH DE PUSH HL LD A,E AND 7 LD C,A SRL D RR E SRL D RR E SRL D RR E LD B,0 LD HL,Bits ADD HL,BC LD C,(HL) LD HL,Scrn2 ADD HL,DE LD A,C LD DE,32 EXX POP HL POP DE LD A,L SUB E LD C,A LD A,H SUB D JR NC,Line2 NEG EXX LD DE,0-32 EXX Line2 LD B,A SUB C JP NC,Line3 LD L,C SRL L LD A,B NEG LD E,A LD D,#FF JR NZ,Line2a LD D,A Line2a XOR A LD B,A LD H,A LD A,C EXX OR A RET Z LD B,A LD A,C LineMX EXX ADD HL,DE BIT 7,H JR Z,LineMX1 ADD HL,BC EXX OR (HL) LD (HL),A RRC C ADC HL,DE LD A,C DJNZ LineMX JP LineMXF LineMX1 EXX RRC C JP NC,LineMX2 OR (HL) LD (HL),A INC L XOR A LineMX2 OR C DJNZ LineMX LineMXF OR (HL) LD (HL),A RET Line3 LD L,B SRL L LD A,C NEG LD E,A LD D,#FF JR NZ,Line3a LD D,A Line3a LD C,B XOR A LD B,A LD H,A LD A,C EXX OR A RET Z LD B,A LD A,C OR (HL) LD (HL),A LineMY EXX ADD HL,DE BIT 7,H JR Z,LineMY1 ADD HL,BC EXX RRC C ADC HL,DE LD A,C OR (HL) LD (HL),A DJNZ LineMY RET LineMY1 EXX ADD HL,DE LD A,C OR (HL) LD (HL),A DJNZ LineMY RET CLine LD A,H OR D JR Z,CLin1z LD B,2 CLin1 PUSH BC CALL CLinM LD B,H LD C,L LD HL,255 OR A SBC HL,DE EX DE,HL LD HL,255 OR A SBC HL,BC POP BC DJNZ CLin1 CLin1z EXX LD A,H OR D JR Z,CLin2z LD B,2 CLin2 PUSH BC CALL CLinM LD B,H LD C,L LD HL,255 OR A SBC HL,DE EX DE,HL LD HL,255 OR A SBC HL,BC POP BC DJNZ CLin2 CLin2z SRL L LD A,L SRL L ADD A,L EXX LD H,A EXX SRL E LD A,E SRL E ADD A,E EXX LD D,A CALL Line RET CLinM BIT 7,H JR NZ,CLiM1 BIT 7,D JR NZ,CLiM2 RET CLiM1 BIT 7,D JR NZ,KillLine EX DE,HL EXX EX DE,HL EXX CLiM2 PUSH HL LD B,H LD C,L OR A SBC HL,DE EXX EX DE,HL OR A SBC HL,DE PUSH HL EXX POP DE PUSH HL BIT 7,D JR Z,CLiM3 EX AF,AF' LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE EX AF,AF' CLiM3 EX AF,AF' CALL IMul POP BC CALL IDiv EX AF,AF' JR Z,CLiM4 LD A,D CPL LD D,A LD A,E CPL LD E,A INC DE CLiM4 PUSH DE EXX POP HL ADD HL,DE EXX POP DE LD HL,0 RET KillLine POP AF POP AF RET Point LD A,D LD H,0 CP 192 RET NC PUSH BC LD A,E AND 7 LD C,A LD B,H LD HL,Bits ADD HL,BC LD A,(HL) LD HL,STab LD C,D ADD HL,BC ADD HL,BC LD C,(HL) INC HL LD H,(HL) LD L,C LD C,E SRL C SRL C SRL C ADD HL,BC POP BC RET Circle LD (CX),DE LD (CY),HL LD HL,0 LD (ER),HL LD (X),HL XOR A SBC HL,BC LD (Y),HL CALL CPoints CLoop1 LD HL,(ER) LD DE,(X) ADD HL,DE ADD HL,DE INC HL LD B,H LD C,L LD (ER),HL LD DE,(Y) INC HL ADD HL,DE ADD HL,DE PUSH HL EX DE,HL BIT 7,B JR Z,Circ2 XOR A LD H,A LD L,A SBC HL,BC LD B,H LD C,L Circ2 BIT 7,D JR Z,Circ3 XOR A LD H,A LD L,A SBC HL,DE LD D,H LD E,L Circ3 EX DE,HL OR A SBC HL,BC POP HL JR NC,Circ4 LD (ER),HL LD HL,(Y) INC HL LD (Y),HL Circ4 LD HL,(X) INC HL LD (X),HL CALL CPoints LD HL,(X) LD DE,(Y) ADD HL,DE BIT 7,H JR NZ,CLoop1 RET CPoints LD BC,(X) LD DE,(Y) CALL CP1 CALL CplDE CALL CP1 CALL CplDE CALL CplBC CALL CP1 CALL CplDE CALL CP1 CALL CplDE CALL CplBC LD H,B LD L,C LD B,D LD C,E EX DE,HL CALL CP1 CALL CplDE CALL CP1 CALL CplDE CALL CplBC CALL CP1 CALL CplDE CALL CP1 RET CP1 PUSH DE LD HL,(CX) ADD HL,DE LD E,L LD HL,(CY) ADD HL,BC LD D,L CALL Point OR (HL) LD (HL),A POP DE RET CplDE LD A,D CPL LD D,A LD A,E CPL LD E,A RET CplBC LD A,B CPL LD B,A LD A,C CPL LD C,A RET Drip LD A,13 LD C,35 JR Snd Bonk XOR A LD C,60 JR Snd Blip XOR A LD C,30 JR Snd Snd LD HL,SEn:BIT 0,(HL) RET Z:LD B,15 LD (SndF),A LD A,(Border) LD E,A OR #18 LD D,A Snd1 LD A,D OUT (254),A CALL SndDel LD A,E OUT (254),A CALL SndDel SndF NOP DJNZ Snd1 RET SndDel PUSH BC LD B,C SndD1 ADD HL,HL ADD HL,DE DJNZ SndD1 POP BC 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 Rnd1 INC (HL) RET NZ INC HL JP Rnd1 InitRand LD HL,(23672) LD (Seed),HL LD A,R OR #80 LD H,A LD A,(23674) LD L,A LD (Seed+2),HL RET Rand PUSH HL PUSH DE PUSH BC CALL Rand1 LD A,(Seed) CP 0 POP BC POP DE POP HL RET EOO EQU $ ORG #6000 TX DEFW 0 TY DEFW 0 TZ DEFW 0 MatSin DEFW 0 MatCos DEFW 0 MatPx DEFW 0 DEFW 0 ;Spare MatPz DEFW 0 SinPP DEFW 0 CosPP DEFW 0 Dispx DEFW 0 Dispz DEFW 0 X DEFW 0 Y DEFW 0 CX DEFW 0 CY DEFW 0 ER DEFW 0 Border DEFW 0 TempP DEFS 128 Seed DEFS 4 SEn DEFS 4 EOV EQU $ ShpVec EQU #6800 BumTab EQU #6900 BumTabL EQU #6880 BumTabS EQU #68C0 Bits EQU #6B64 ORG #7000 Map DEFS 2048 PlShp DEFB 0 PlPhi DEFB 0 PlPx DEFW #0B00 PlPy DEFW 0 PlPz DEFW #3E00 ObList EQU PlShp+obLen ORG #6700 zDispObj JP DispObj zDoObj JP DoObj zSine JP Sine zCosine JP Cosine zFMul JP FMul ZFDiv JP FDiv zNegHL JP NegHL zCLine JP CLine zLine JP Line zPoint JP Point zCircle JP Circle zDrip JP Drip zBonk JP Bonk zBlip JP Blip zSnd JP Snd zRand1 JP Rand1 zRand JP Rand zInitRand JP InitRand EOz EQU $ export_sym "",$200