* I must thank Powerman for sending all this great source to me * (thanks Neil) although some of it has since appeared in Ledgers, * some of you won't have seen it yet. * All the best with your game Neil! * This source displays a realtime starfield, and does everything but rotate * about the X and/or Y axis, but it still looks pretty nice and uses 6 * colours to give a better sense of depth...... * Remove the +$80000 below to make it work on half meg. * If you use this source, credit me (Powerman of The Wild Boys) for it or * I'll kill you.... SCREEN1 EQU $70000+$80000 SCREEN2 EQU $78000+$80000 NUM_STARS EQU (80/6)*6 must divide by 6 STAR_DEPTH EQU 500 COL1 EQU $222 COL2 EQU $333 COL4 EQU $444 COL3 EQU $555 COL6 EQU $666 COL5 EQU $777 RANGE EQU STAR_DEPTH DUMMY EQU RANGE+1 TIME EQU 512 MOVE.L A7,STACK LEA MY,A7 CLR.L -(A7) MOVE.W #32,-(A7) TRAP #1 ADDQ.L #6,A7 MOVE.L #SCREEN1,SCR1 MOVE.L #SCREEN2,SCR2 JSR INIT JSR SET_UP JSR MAIN JSR END MOVE.L STACK,-(A7) MOVE.W #32,-(A7) TRAP #1 ADDQ.L #6,A7 CLR.L -(A7) TRAP #1 MAIN MOVE.W #$2300,SR LEA $FFFF8242.W,A0 MOVE.W #COL1,(A0)+ MOVE.W #COL2,(A0)+ MOVE.W #COL3,(A0)+ MOVE.W #COL4,(A0)+ MOVE.W #COL5,(A0)+ MOVE.W #COL6,(A0)+ MOVE.W #COL6,(A0)+ .L1 JSR DO_STARS JSR SWAP JSR DO_ROUT CMPI.B #57,$FFFFFC02.W BNE .L1 .L2 RTS DO_ROUT SUBQ.W #1,TIMER BGE .L1 MOVE.W #TIME,TIMER MOVE.L POS,A0 CMPI.L #900,(A0) BNE .L2 LEA STAR_ROUTS,A0 .L2 MOVE.L (A0)+,STAR_SPEED CLR.W D0 MOVE.L A0,ROUT_START .L4 TST.L (A0)+ BMI .L3 ADDQ.W #1,D0 BRA.S .L4 .L3 MOVE.W D0,NUM_ROUTS MOVE.L A0,POS .L1 MOVE.L STAR_SPEED,D5 MOVE.L ROUT_START,A5 MOVE.W NUM_ROUTS,D7 SUBQ.W #1,D7 .L5 MOVE.L (A5)+,A6 JSR (A6) DBF D7,.L5 RTS ;speed,routs,-1 STAR_ROUTS DC.L 8,FORWARD,-1 DC.L 8,UP,FORWARD,ROTATE_CLOCK,-1 DC.L 16,LEFT,ROTATE_ANTI,-1 DC.L 16,RIGHT,ROTATE_CLOCK,-1 DC.L 16,DOWN,BACKWARD,-1 DC.L 8,BACKWARD,ROTATE_CLOCK,-1 DC.L 8,FORWARD,LEFT,-1 DC.L 900 POS DS.L 1 TIMER DS.W 1 STAR_SPEED DS.L 1 NUM_ROUTS DS.W 1 ROUT_START DS.L 1 SET_UP MOVE.L #SCREEN1,PHYSIC MOVE.L #SCREEN2,LOGIC JSR INIT_STARS MOVE.L #STAR_ROUTS,POS MOVE.W #-1,TIMER RTS WAITVBL CLR.B VBLFLAG .L1 TST.B VBLFLAG BEQ .L1 RTS LOGIC DS.L 1 PHYSIC DS.L 1 SWAP MOVEM.L LOGIC,D0-D1 MOVE.L D0,D2 LSR.W #8,D2 MOVE.L D2,$FFFF8200.W BSR WAITVBL EXG D0,D1 MOVEM.L D0-D1,LOGIC TST.W OFF BEQ.S .L1 CLR.W OFF RTS .L1 MOVE.W #4,OFF RTS INIT MOVE.W #$2700,SR DC.W $A000 DC.W $A00A MOVE.B #$12,D0 BSR IKBD LEA $FFFF8240.W,A0 MOVEQ.W #8-1,D0 .COLS MOVE.L #0,(A0)+ DBF D0,.COLS MOVEQ.L #0,D1 MOVE.L SCR1,A0 CMP.L SCR2,A0 BEQ .L222 MOVE.L SCR2,A1 MOVE.L A1,A2 .L33 CMPA.L A0,A2 BEQ .L2 MOVE.L D1,(A0)+ MOVE.L D1,(A1)+ BRA .L33 .L222 MOVE.W #32000/4-1,D0 .L22 MOVE.L D1,(A0)+ DBF D0,.L22 .L2 LEA VARS,A0 MOVE.L $70.W,(A0)+ MOVE.L $120.W,(A0)+ MOVE.L $118.W,(A0)+ MOVE.L $134.W,(A0)+ MOVE.L $68.W,(A0)+ MOVE.B $FFFFFA07.W,(A0)+ MOVE.B $FFFFFA09.W,(A0)+ MOVE.B $FFFFFA13.W,(A0)+ MOVE.B $FFFFFA1B.W,(A0)+ MOVE.B $FFFFFA21.W,(A0)+ MOVE.B $FFFFFA15.W,(A0)+ MOVE.B $FFFFFA19.W,(A0)+ MOVE.B $FFFFFA1F.W,(A0)+ MOVE.B $FFFFFA15.W,(A0)+ MOVE.L #VBL,$70.W MOVE.L #RTE,$68.W MOVE.L #RTE,$134.W MOVE.L #KEY,$118.W MOVE.L SCR1,D0 LSR.W #8,D0 MOVE.W #$2300,SR CLR.B VBLFLAG .WAITVBL TST.B VBLFLAG BEQ .WAITVBL MOVE.L D0,$FFFF8200.W CLR.B $FFFF8260.W MOVE.B #2,$FFFF820A.W MOVE.W #$2700,SR CLR.B $FFFFFA07.W CLR.B $FFFFFA09.W CLR.B $FFFFFA13.W CLR.B $FFFFFA15.W ORI.B #1,$FFFFFA07.W TIMER B ENABLE ORI.B #1,$FFFFFA13.W ORI.B #64,$FFFFFA09.W KEYBOARD ENABLE ORI.B #64,$FFFFFA15.W RTS SCR1 DS.L 1 SCR2 DS.L 1 VARS DS.B 32 VBL ST VBLFLAG RTE RTE VBLFLAG DC.W 0 KEY MOVE.B $FFFFFC02.W,PRESS BCLR #6,$FFFFFA11.W RTE PRESS DC.W 0 WAITKEY MOVE.W #$2300,SR CLR.B PRESS .L1 CMPI.B #57+128,PRESS BNE .L1 RTS END MOVE.W #$2700,SR LEA $FFFF8800.W,A0 MOVE.L #$700FF00,(A0) MOVE.L #$8000000,(A0) MOVE.L #$9000000,(A0) MOVE.L #$A000000,(A0) LEA VARS,A0 MOVE.L (A0)+,$70.W MOVE.L (A0)+,$120.W MOVE.L (A0)+,$118.W MOVE.L (A0)+,$134.W MOVE.L (A0)+,$68.W MOVE.B (A0)+,$FFFFFA07.W MOVE.B (A0)+,$FFFFFA09.W MOVE.B (A0)+,$FFFFFA13.W MOVE.B (A0)+,$FFFFFA1B.W MOVE.B (A0)+,$FFFFFA21.W MOVE.B (A0)+,$FFFFFA15.W MOVE.B (A0)+,$FFFFFA19.W MOVE.B (A0)+,$FFFFFA1F.W MOVE.B (A0)+,$FFFFFA15.W MOVE.W #$777,$FFFF8240.W MOVE.W #0,$FFFF8242.W MOVE.W #0,$FFFF8246.W DC.W $A000 DC.W $A009 MOVE.B #8,D0 BSR IKBD MOVE.W #1,-(A7) PEA $78000+$80000 PEA $78000+$80000 MOVE.W #5,-(A7) TRAP #14 LEA 12(A7),A7 MOVE.W #$2300,SR RTS STACK DS.L 1 IKBD LEA $FFFFFC00.W,A0 .L1 MOVE.B (A0),D1 BTST #1,D1 BEQ .L1 MOVE.B D0,2(A0) RTS DS.L 400 MY DS.L 1 *************************************************************************** * 3D STARFIELD ROUTINE, CODED BY POWERMAN OF TWB FOR THE 3RD TWB MEGADEMO * * (C) THE WILD BOYS, 19/10/91 * *************************************************************************** ;PS:the 3rd TWB megademo has been cancelled, which is why you are now able ; to look at this source.... INIT_STARS JSR MAKE_STAR_DATA MOVE.L #DIV0,$14.W RTS DIV0 RTE DO_STARS JSR ERASE_STARS JSR ROTATE_POINTS JSR SORT JSR PERSPECT LEA ERASE,A0 MOVE.W OFF,D0 MOVE.L (A0,D0.W),A0 MOVE.L LOGIC,A1 LEA SCREEN,A2 LEA Y,A3 MOVE.W #319,D3 MOVE.W #199,D4 COLOUR1 MOVE.W #NUM_STARS/6-1,D0 .L1 MOVEM.W (A2)+,D1/D2 TST.W D1 BMI .L2 TST.W D2 BMI .L2 CMP.W D3,D1 BGT .L2 CMP.W D4,D2 BGT .L2 ADD.W D2,D2 MOVE.W (A3,D2.W),D2 MOVE.W D1,D5 AND.W #$FFF0,D5 LSR.W #1,D5 ADD.W D5,D2 MOVE.W D2,(A0)+ NOT.W D1 AND.W #15,D1 CLR.W D5 BSET D1,D5 OR.W D5,(A1,D2.W) .L2 DBF D0,.L1 COLOUR2 MOVE.W #NUM_STARS/6-1,D0 .L1 MOVEM.W (A2)+,D1/D2 TST.W D1 BMI .L2 TST.W D2 BMI .L2 CMP.W D3,D1 BGT .L2 CMP.W D4,D2 BGT .L2 ADD.W D2,D2 MOVE.W (A3,D2.W),D2 MOVE.W D1,D5 AND.W #$FFF0,D5 LSR.W #1,D5 ADD.W D5,D2 MOVE.W D2,(A0)+ NOT.W D1 AND.W #15,D1 CLR.W D5 BSET D1,D5 OR.W D5,2(A1,D2.W) .L2 DBF D0,.L1 COLOUR3 MOVE.W #NUM_STARS/6-1,D0 .L1 MOVEM.W (A2)+,D1/D2 TST.W D1 BMI .L2 TST.W D2 BMI .L2 CMP.W D3,D1 BGT .L2 CMP.W D4,D2 BGT .L2 ADD.W D2,D2 MOVE.W (A3,D2.W),D2 MOVE.W D1,D5 AND.W #$FFF0,D5 LSR.W #1,D5 ADD.W D5,D2 MOVE.W D2,(A0)+ NOT.W D1 AND.W #15,D1 CLR.W D5 BSET D1,D5 OR.W D5,4(A1,D2.W) .L2 DBF D0,.L1 COLOUR4 MOVE.W #NUM_STARS/6-1,D0 .L1 MOVEM.W (A2)+,D1/D2 TST.W D1 BMI .L2 TST.W D2 BMI .L2 CMP.W D3,D1 BGT .L2 CMP.W D4,D2 BGT .L2 ADD.W D2,D2 MOVE.W (A3,D2.W),D2 MOVE.W D1,D5 AND.W #$FFF0,D5 LSR.W #1,D5 ADD.W D5,D2 MOVE.W D2,(A0)+ NOT.W D1 AND.W #15,D1 CLR.W D5 BSET D1,D5 OR.W D5,0(A1,D2.W) OR.W D5,2(A1,D2.W) .L2 DBF D0,.L1 COLOUR5 MOVE.W #NUM_STARS/6-1,D0 .L1 MOVEM.W (A2)+,D1/D2 TST.W D1 BMI .L2 TST.W D2 BMI .L2 CMP.W D3,D1 BGT .L2 CMP.W D4,D2 BGT .L2 ADD.W D2,D2 MOVE.W (A3,D2.W),D2 MOVE.W D1,D5 AND.W #$FFF0,D5 LSR.W #1,D5 ADD.W D5,D2 MOVE.W D2,(A0)+ NOT.W D1 AND.W #15,D1 CLR.W D5 BSET D1,D5 OR.W D5,2(A1,D2.W) OR.W D5,4(A1,D2.W) .L2 DBF D0,.L1 COLOUR6 MOVE.W #NUM_STARS/6-1,D0 .L1 MOVEM.W (A2)+,D1/D2 TST.W D1 BMI .L2 TST.W D2 BMI .L2 CMP.W D3,D1 BGT .L2 CMP.W D4,D2 BGT .L2 ADD.W D2,D2 MOVE.W (A3,D2.W),D2 MOVE.W D1,D5 AND.W #$FFF0,D5 LSR.W #1,D5 ADD.W D5,D2 MOVE.W D2,(A0)+ NOT.W D1 AND.W #15,D1 CLR.W D5 BSET D1,D5 OR.W D5,(A1,D2.W) OR.W D5,4(A1,D2.W) .L2 DBF D0,.L1 RTS Y OFFSET SET 0 REPT 200 DC.W OFFSET OFFSET SET OFFSET+160 ENDR ERASE_STARS LEA ERASE,A0 MOVE.W OFF,D0 MOVE.L (A0,D0.W),A0 MOVE.L LOGIC,A1 CLR.L D0 MOVE.W #NUM_STARS/6-1,D1 .L1 MOVEM.W (A0)+,D2-D7 MOVE.L D0,(A1,D2.W) MOVE.W D0,4(A1,D2.W) MOVE.L D0,(A1,D3.W) MOVE.W D0,4(A1,D3.W) MOVE.L D0,(A1,D4.W) MOVE.W D0,4(A1,D4.W) MOVE.L D0,(A1,D5.W) MOVE.W D0,4(A1,D5.W) MOVE.L D0,(A1,D6.W) MOVE.W D0,4(A1,D6.W) MOVE.L D0,(A1,D7.W) MOVE.W D0,4(A1,D7.W) DBF D1,.L1 RTS ERASE DC.L ERASE1,ERASE2 ERASE1 DCB.W NUM_STARS,0 ERASE2 DCB.W NUM_STARS,0 OFF DC.W 0 RANDOM MOVE.W SEED,D0 MULU #1221,D0 MOVE.W D0,SEED RTS SEED DC.W 'AB' MAKE_STAR_DATA LEA STAR_COORDS,A0 MOVE.W #NUM_STARS-1,D2 .L1 BSR RANDOM AND.L #$0000FFFF,D0 MOVE.L D0,D1 DIVU #200+200,D0 DIVU #320+200,D1 SWAP D0 SWAP D1 MOVE.W D1,(A0)+ MOVE.W D0,(A0)+ DBF D2,.L1 MOVE.W #160+100,D0 MOVE.W #100+100,D1 MOVE.W #0,D5 d5=start Z MOVE.W #STAR_DEPTH/NUM_STARS,D6 LEA STAR_COORDS,A0 LEA WORLD,A1 MOVE.W #NUM_STARS-1,D2 MOVE.W D2,NUM_POINTS .L2 MOVEM.W (A0)+,D3-D4 SUB.W D0,D3 SUB.W D1,D4 MOVEM.W D3-D4,(A1) MOVE.W D5,4(A1) ADDQ.L #6,A1 ADD.W D6,D5 DBF D2,.L2 RTS STAR_COORDS DS.L NUM_STARS ********************************** 3D ROUTINES **************************** * ALL 3D ROUTINE CODING BY POWERMAN OF THE WILD BOYS * * Y AXIS SHOULD BE TREATED AS UPSIDE DOWN (-VE IS TOP, +VE IS BOTTOM) * * USES 512 ENTRY SINE TABLE * *************************************************************************** DIST DC.W 256 Perspective WORLD DS.W NUM_STARS*3 X,Y,Z coords for each point VIEW DS.W NUM_STARS*4 X,Y,blank,z coords for each rotated point SCREEN DS.W NUM_STARS*2 Screen X,Y coords NUM_POINTS DS.W 1 Number of points in current object-1 MATRIX DS.W 9 XROT DC.W 0 X rotation angle YROT DC.W 0 Y rotation angle ZROT DC.W 0 Z rotation angle XOFFSET DC.W 0 Offset on X axis YOFFSET DC.W 0 Offset on Y axis ZOFFSET DC.W 0 Offset on Z axis SINCOS DS.W 6 Space for x,y,z sine/cosine ROTATE_POINTS LEA SINTAB,A0 LEA 128*2(A0),A2 COSINE=SINE+128 DEGREES LEA SINCOS,A1 MOVE.W ZROT,D2 MOVE.W #512,D6 MOVE.W #-512,D5 .L5 CMP.W D5,D2 BGT .L6 ADD.W D6,D2 BRA .L7 .L6 CMP.W D6,D2 BLT .L7 SUB.W D6,D2 .L7 MOVE.W D2,ZROT .L9 TST.W D2 BPL .L10 ADD.W D6,D2 .L10 CLR.W D0 CLR.W D1 ADD.W D2,D2 MOVE.W (A0,D0.W),(A1)+ Sine x (0) MOVE.W (A2,D0.W),(A1)+ Cosine x (2) MOVE.W (A0,D1.W),(A1)+ Sine y (4) MOVE.W (A2,D1.W),(A1)+ Cosine y (6) MOVE.W (A0,D2.W),(A1)+ Sine z (8) MOVE.W (A2,D2.W),(A1) Cosine z (10) LEA -10(A1),A1 MOVE.W 4(A1),D0 SIN(Y) MOVE.W D0,D1 MULS 8(A1),D0 SIN(Z)*SIN(Y) LSL.L #1,D0 SWAP D0 D0=SIN(Z)*SIN(Y) NEG.W D1 -SIN(Y) MULS 10(A1),D1 COS(Z) LSL.L #1,D1 SWAP D1 D1=-SIN(Y)*COS(Z) LEA MATRIX,A2 ;MATRIX(1,1) MOVE.W 10(A1),D2 MOVE.W D2,D6 MULS 6(A1),D2 LSL.L #1,D2 SWAP D2 MOVE.W D2,(A2)+ ;MATRIX(1,2) MOVE.W (A1),D2 MULS D1,D2 MOVE.W 8(A1),D3 MOVE.W D3,D4 MOVE.W D4,D5 MULS 2(A1),D3 SUB.L D2,D3 LSL.L #1,D3 SWAP D3 MOVE.W D3,(A2)+ ;MATRIX(1,3) MOVE.W 2(A1),D2 MULS D1,D2 MULS (A1),D4 ADD.L D2,D4 LSL.L #1,D4 SWAP D4 MOVE.W D4,(A2)+ ;MATRIX(2,1) NEG.W D5 MULS 6(A1),D5 LSL.L #1,D5 SWAP D5 MOVE.W D5,(A2)+ ;MATRIX(2,2) MOVE.W D6,D5 MULS 2(A1),D6 MOVE.W (A1),D3 MULS D0,D3 SUB.L D3,D6 LSL.L #1,D6 SWAP D6 MOVE.W D6,(A2)+ ;MATRIX(2,3) MULS (A1),D5 MOVE.W 2(A1),D3 MOVE.W D3,D6 MULS D0,D3 ADD.L D3,D5 LSL.L #1,D5 SWAP D5 MOVE.W D5,(A2)+ MOVE.W NUM_POINTS,D6 LEA WORLD,A0 LEA VIEW,A1 LEA MATRIX,A2 .L1 MOVE.L A2,A3 MOVEM.W (A0)+,D0-D2 D0-D2=x,y,z coords MOVE.W D0,D3 MOVE.W D1,D4 MOVE.W D2,D5 .CALC_X_COORD MULS (A3)+,D0 MULS (A3)+,D1 MULS (A3)+,D2 ADD.L D0,D1 ADD.L D2,D1 LSL.L #1,D1 SWAP D1 MOVE.W D1,(A1)+ .CALC_Y_COORD MULS (A3)+,D3 MULS (A3)+,D4 MOVE.W D5,-(A7) MULS (A3)+,D5 ADD.L D3,D4 ADD.L D5,D4 LSL.L #1,D4 SWAP D4 MOVE.W D4,(A1)+ .CALC_Z_COORD ADDQ.L #2,A1 MOVE.W (A7)+,(A1)+ DBF D6,.L1 RTS XCENT DC.W 160 YCENT DC.W 100 PERSPECT MOVEM.W XCENT,D0-D1 LEA VIEW,A0 LEA SCREEN,A1 MOVE.W NUM_POINTS,D2 MOVE.W DIST,D5 MOVEQ.W #8,D7 .L1 MOVEM.W (A0)+,D3/D4/D6/A2 EXG D6,A2 EXT.L D3 EXT.L D4 ASL.L D7,D3 ASL.L D7,D4 ADD.W D5,D6 DIVS D6,D3 DIVIDE X BY DIST+Z DIVS D6,D4 DIVIDE Y BY DIST+Z ADD.W D0,D3 ADD.W D1,D4 MOVEM.W D3-D4,(A1) ADDQ.L #4,A1 DBF D2,.L1 RTS SINTAB DC.W 0,402,804,1206,1608,2009,2411,2811 DC.W 3212,3612,4011,4410,4808,5205,5602,5998 DC.W 6393,6787,7180,7571,7962,8351,8740,9127 DC.W 9512,9896,10279,10660,11039,11417,11793,12167 DC.W 12540,12910,13279,13646,14010,14373,14733,15091 DC.W 15447,15800,16151,16500,16846,17190,17531,17869 DC.W 18205,18538,18868,19195,19520,19841,20160,20475 DC.W 20788,21097,21403,21706,22006,22302,22595,22884 DC.W 23170,23453,23732,24008,24279,24548,24812,25073 DC.W 25330,25583,25833,26078,26320,26557,26791,27020 DC.W 27246,27467,27684,27897,28106,28311,28511,28707 DC.W 28899,29086,29269,29448,29622,29792,29957,30118 DC.W 30274,30425,30572,30715,30853,30986,31114,31238 DC.W 31357,31471,31581,31686,31786,31881,31972,32058 DC.W 32138,32214,32286,32352,32413,32470,32522,32568 DC.W 32610,32647,32679,32706,32729,32746,32758,32766 DC.W 32767,32766,32758,32746,32729,32706,32679,32647 DC.W 32610,32568,32522,32470,32413,32352,32286,32214 DC.W 32138,32058,31972,31881,31786,31686,31581,31471 DC.W 31357,31238,31114,30986,30853,30715,30572,30425 DC.W 30274,30118,29957,29792,29622,29448,29269,29086 DC.W 28899,28707,28511,28311,28106,27897,27684,27467 DC.W 27246,27020,26791,26557,26320,26078,25833,25583 DC.W 25330,25073,24812,24548,24279,24008,23732,23453 DC.W 23170,22884,22595,22302,22006,21706,21403,21097 DC.W 20788,20475,20160,19841,19520,19195,18868,18538 DC.W 18205,17869,17531,17190,16846,16500,16151,15800 DC.W 15447,15091,14733,14373,14010,13646,13279,12910 DC.W 12540,12167,11793,11417,11039,10660,10279,9896 DC.W 9512,9127,8740,8351,7962,7571,7180,6787 DC.W 6393,5998,5602,5205,4808,4410,4011,3612 DC.W 3212,2811,2411,2009,1608,1206,804,402 DC.W 0,-402,-804,-1206,-1608,-2009,-2411,-2811 DC.W -3212,-3612,-4011,-4410,-4808,-5205,-5602,-5998 DC.W -6393,-6787,-7180,-7571,-7962,-8351,-8740,-9127 DC.W -9512,-9896,-10279,-10660,-11039,-11417,-11793,-12167 DC.W -12540,-12910,-13279,-13646,-14010,-14373,-14733,-15091 DC.W -15447,-15800,-16151,-16500,-16846,-17190,-17531,-17869 DC.W -18205,-18538,-18868,-19195,-19520,-19841,-20160,-20475 DC.W -20788,-21097,-21403,-21706,-22006,-22302,-22595,-22884 DC.W -23170,-23453,-23732,-24008,-24279,-24548,-24812,-25073 DC.W -25330,-25583,-25833,-26078,-26320,-26557,-26791,-27020 DC.W -27246,-27467,-27684,-27897,-28106,-28311,-28511,-28707 DC.W -28899,-29086,-29269,-29448,-29622,-29792,-29957,-30118 DC.W -30274,-30425,-30572,-30715,-30853,-30986,-31114,-31238 DC.W -31357,-31471,-31581,-31686,-31786,-31881,-31972,-32058 DC.W -32138,-32214,-32286,-32352,-32413,-32470,-32522,-32568 DC.W -32610,-32647,-32679,-32706,-32729,-32746,-32758,-32766 DC.W -32767,-32766,-32758,-32746,-32729,-32706,-32679,-32647 DC.W -32610,-32568,-32522,-32470,-32413,-32352,-32286,-32214 DC.W -32138,-32058,-31972,-31881,-31786,-31686,-31581,-31471 DC.W -31357,-31238,-31114,-30986,-30853,-30715,-30572,-30425 DC.W -30274,-30118,-29957,-29792,-29622,-29448,-29269,-29086 DC.W -28899,-28707,-28511,-28311,-28106,-27897,-27684,-27467 DC.W -27246,-27020,-26791,-26557,-26320,-26078,-25833,-25583 DC.W -25330,-25073,-24812,-24548,-24279,-24008,-23732,-23453 DC.W -23170,-22884,-22595,-22302,-22006,-21706,-21403,-21097 DC.W -20788,-20475,-20160,-19841,-19520,-19195,-18868,-18538 DC.W -18205,-17869,-17531,-17190,-16846,-16500,-16151,-15800 DC.W -15447,-15091,-14733,-14373,-14010,-13646,-13279,-12910 DC.W -12540,-12167,-11793,-11417,-11039,-10660,-10279,-9896 DC.W -9512,-9127,-8740,-8351,-7962,-7571,-7180,-6787 DC.W -6393,-5998,-5602,-5205,-4808,-4410,-4011,-3612 DC.W -3212,-2811,-2411,-2009,-1608,-1206,-804,-402 * DUPLICATE FIRST 128 ENTRIES FOR COSINE OVERLAP DC.W 0,402,804,1206,1608,2009,2411,2811 DC.W 3212,3612,4011,4410,4808,5205,5602,5998 DC.W 6393,6787,7180,7571,7962,8351,8740,9127 DC.W 9512,9896,10279,10660,11039,11417,11793,12167 DC.W 12540,12910,13279,13646,14010,14373,14733,15091 DC.W 15447,15800,16151,16500,16846,17190,17531,17869 DC.W 18205,18538,18868,19195,19520,19841,20160,20475 DC.W 20788,21097,21403,21706,22006,22302,22595,22884 DC.W 23170,23453,23732,24008,24279,24548,24812,25073 DC.W 25330,25583,25833,26078,26320,26557,26791,27020 DC.W 27246,27467,27684,27897,28106,28311,28511,28707 DC.W 28899,29086,29269,29448,29622,29792,29957,30118 DC.W 30274,30425,30572,30715,30853,30986,31114,31238 DC.W 31357,31471,31581,31686,31786,31881,31972,32058 DC.W 32138,32214,32286,32352,32413,32470,32522,32568 DC.W 32610,32647,32679,32706,32729,32746,32758,32766 ;ultra fast sort rout.... SORT LEA VIEW,A0 MOVE.W NUM_POINTS,D0 MOVE.W #RANGE,D2 LEA TEMPDATA,A1 MOVE.L A0,A2 MOVE.W D0,D1 .L4 MOVEM.L (A0)+,D4/D5 MOVE.W D2,D3 SUB.W D5,D3 LSL.W #3,D3 *8 MOVEM.L D4/D5,(A1,D3.W) DBF D0,.L4 LEA TEMPDATA,A1 MOVE.W #DUMMY,D3 .L5 MOVEM.L (A1)+,D0/D2 CMP.W D0,D3 BEQ.S .L5 MOVEM.L D0/D2,(A2) ADDQ.L #8,A2 MOVE.W D3,-6(A1) DBF D1,.L5 RTS FORWARD ;D5=speed LEA WORLD,A0 MOVE.W #STAR_DEPTH,D0 MOVE.W #NUM_STARS-1,D1 .L1 MOVEM.W (A0)+,D2-D4 SUB.W D5,D4 BGE .L2 ADD.W D0,D4 .L2 MOVE.W D4,-2(A0) DBF D1,.L1 RTS BACKWARD ;D5=speed LEA WORLD,A0 MOVE.W #STAR_DEPTH,D0 MOVE.W #NUM_STARS-1,D1 .L1 MOVEM.W (A0)+,D2-D4 ADD.W D5,D4 CMP.W D0,D4 BLE .L2 SUB.W D0,D4 .L2 MOVE.W D4,-2(A0) DBF D1,.L1 RTS LEFT ;D5=speed LEA WORLD,A0 MOVE.W #320+200,D0 MOVE.W #-260,D6 MOVE.W #NUM_STARS-1,D1 .L1 MOVEM.W (A0)+,D2-D4 SUB.W D5,D2 CMP.W D6,D2 BGE .L2 ADD.W D0,D2 .L2 MOVE.W D2,-6(A0) DBF D1,.L1 RTS RIGHT ;D5=speed LEA WORLD,A0 MOVE.W #320+200,D0 MOVE.W #260,D6 MOVE.W #NUM_STARS-1,D1 .L1 MOVEM.W (A0)+,D2-D4 ADD.W D5,D2 CMP.W D6,D2 BLE .L2 SUB.W D0,D2 .L2 MOVE.W D2,-6(A0) DBF D1,.L1 RTS UP ;D5=speed LEA WORLD,A0 MOVE.W #200+200,D0 MOVE.W #-200,D6 MOVE.W #NUM_STARS-1,D1 .L1 MOVEM.W (A0)+,D2-D4 SUB.W D5,D3 CMP.W D6,D3 BGE .L2 ADD.W D0,D3 .L2 MOVE.W D3,-4(A0) DBF D1,.L1 RTS DOWN ;D5=speed LEA WORLD,A0 MOVE.W #200+200,D0 MOVE.W #200,D6 MOVE.W #NUM_STARS-1,D1 .L1 MOVEM.W (A0)+,D2-D4 ADD.W D5,D3 CMP.W D6,D3 BLE .L2 SUB.W D0,D3 .L2 MOVE.W D3,-4(A0) DBF D1,.L1 RTS ROTATE_CLOCK SUBQ.W #1,ZROT RTS ROTATE_ANTI ADDQ.W #1,ZROT RTS TEMPDATA