*************************************************************************** * REALTIME 3D RASTERS BY THE POWERMAN OF TWB * * (C) THE WILD BOYS, 1992 * * * * Yeah man, Powerman presents yet another nice source for you, this one * * is from the intro to Waveforms, although I precalculated the rasters * * on that intro, these ones are done in realtime which means you can get * * some nice effects by changing the values added to XROT,YROT and ZROT in * * the routine MAIN. If you use this code credit me, unless you are * * Argonut in which case say you ripped this code......... * * check y'all later...... * * * * Message to Tony B - where the hell are you????? * *************************************************************************** JMP BEGIN SCREEN1 EQU $280000-(2*(160*200)) SCREEN2 EQU $280000-(1*(160*200)) NUM_BARS EQU 10 SPACING EQU 4 BAR_HEIGHT EQU 26 MAX_POINTS EQU NUM_BARS DIST EQU 256 XCENTRE EQU 160 YCENTRE EQU 100 VBL2 CLR.B $FFFFFA1B.W MOVE.B #1,$FFFFFA21.W MOVE.B #8,$FFFFFA1B.W MOVE.L #TB1,$120.W MOVE.W RASTERS+(2*200),$FFFF8240.W MOVE.L #RASTERS+(2*200)+2,TB1+2 ST VBLFLAG RTE TB1 MOVE.W 0,$FFFF8240.W ADDQ.L #2,TB1+2 RTE MAKE_RASTERS LEA RASTERS+(2*(200*3)),A0 CLR.L D0 MOVE.L D0,D1 MOVE.L D0,D2 MOVE.L D0,D3 MOVE.L D0,D4 MOVE.L D0,D5 MOVE.L D0,D6 MOVE.L D0,D7 MOVE.L D0,A1 MOVE.L D0,A2 MOVE.L D0,A3 MOVE.L D0,A4 MOVE.L D0,A5 MOVE.L D0,A6 REPT 21 MOVEM.L D0-D7/A1-A6,-(A0) 56 ENDR MOVEM.L D0-D5,-(A0) BSR.S .L3 CLR.W RASTERS+(2*200) CLR.W RASTERS+(2*200)+(2*200) RTS .L3 LEA RASTERS+(2*200),A0 LEA SCREEN,A1 LEA Z_COORDS,A2 MOVE.W #NUM_BARS-1,D0 MOVE.W (A2),D1 CMP.W ((NUM_BARS-1)*4)(A2),D1 BGE.S .L1 LEA NUM_BARS*4(A1),A1 .L2 MOVE.L -(A1),D1 ADD.W D1,D1 LEA (A0,D1.W),A2 LEA BAR,A3 REPT BAR_HEIGHT MOVE.W (A3)+,(A2)+ ENDR DBF D0,.L2 RTS ;first bar closer .L1 MOVE.L (A1)+,D1 ADD.W D1,D1 LEA (A0,D1.W),A2 LEA BAR,A3 REPT BAR_HEIGHT MOVE.W (A3)+,(A2)+ ENDR DBF D0,.L1 RTS RASTERS DCB.W 200*3,0 BAR_WORLD YOFF SET (BAR_HEIGHT+SPACING)*(NUM_BARS/2) REPT NUM_BARS DC.W 0,YOFF,0 YOFF SET YOFF-(BAR_HEIGHT+SPACING) ENDR ROTATE_POINTS LEA SINTAB,A0 LEA 128*2(A0),A2 LEA SINCOS,A1 MOVEM.W XROT,D0-D2 MOVE.W #511,D3 AND.W D3,D0 AND.W D3,D1 AND.W D3,D2 MOVEM.W D0-D2,XROT ADD.W D0,D0 ADD.W D1,D1 ADD.W D2,D2 MOVE.W (A0,D0.W),(A1)+ Sin x (offset 0) MOVE.W (A2,D0.W),(A1)+ Cos x (offset 2) MOVE.W (A0,D1.W),(A1)+ Sin y (offset 4) MOVE.W (A2,D1.W),(A1)+ Cos y (offset 6) MOVE.W (A0,D2.W),(A1)+ Sin z (offset 8) MOVE.W (A2,D2.W),(A1) Cos z (offset 10) LEA -10(A1),A1 MOVE.W 4(A1),D0 MOVE.W D0,D1 MULS 8(A1),D0 ADD.L D0,D0 SWAP D0 NEG.W D1 MULS 10(A1),D1 ADD.L D1,D1 SWAP D1 ;MATRIX(1,1) MOVE.W 10(A1),D2 MOVE.W D2,D6 MULS 6(A1),D2 ADD.L D2,D2 SWAP D2 MOVE.W D2,CALC_X_COORD+2 ;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 ADD.L D3,D3 SWAP D3 MOVE.W D3,CALC_X_COORD+6 ;MATRIX(1,3) MOVE.W 2(A1),D2 MULS D1,D2 MULS (A1),D4 ADD.L D2,D4 ADD.L D4,D4 SWAP D4 MOVE.W D4,CALC_X_COORD+10 ;MATRIX(2,1) NEG.W D5 MULS 6(A1),D5 ADD.L D5,D5 SWAP D5 MOVE.W D5,CALC_Y_COORD+2 ;MATRIX(2,2) MOVE.W D6,D5 MULS 2(A1),D6 MOVE.W (A1),D3 MULS D0,D3 SUB.L D3,D6 ADD.L D6,D6 SWAP D6 MOVE.W D6,CALC_Y_COORD+6 ;MATRIX(2,3) MULS (A1),D5 MOVE.W 2(A1),D3 MOVE.W D3,D6 MULS D0,D3 ADD.L D3,D5 ADD.L D5,D5 SWAP D5 MOVE.W D5,CALC_Y_COORD+10 ;MATRIX(3,1) MOVE.W 4(A1),CALC_Z_COORD+2 ;MATRIX(3,2) MOVE.W 6(A1),D2 MOVE.W D2,D4 NEG.W D2 MULS (A1),D2 ADD.L D2,D2 SWAP D2 MOVE.W D2,CALC_Z_COORD+6 ;MATRIX(3,3) MULS D6,D4 ADD.L D4,D4 SWAP D4 MOVE.W D4,CALC_Z_COORD+10 MOVE.W NUM_POINTS,D6 SUBQ.W #1,D6 BGE.S .L1 RTS .L1 MOVE.L WORLD,A0 LEA SCREEN,A1 LEA Z_COORDS,A2 MOVE.W #DIST,A3 MOVEM.W XOFFSET,D7/A4/A5 DO_ROTATION MOVEM.W (A0)+,D0-D2 ADD.W D7,D0 \ ADD.W A4,D1 | add x,y,z offsets ADD.W A5,D2 / MOVEM.W D0-D2,-(A7) MOVE.W D0,D3 MOVE.W D1,D4 MOVE.W D2,D5 CALC_X_COORD MULS #0,D0 MULS #0,D1 MULS #0,D2 ADDX.L D0,D1 ADDX.L D2,D1 ADD.L D1,D1 SWAP D1 d1=x CALC_Y_COORD MULS #0,D3 MULS #0,D4 MULS #0,D5 ADDX.L D3,D4 ADDX.L D5,D4 ADD.L D4,D4 SWAP D4 d4=y MOVEM.W (A7)+,D0/D2/D3 CALC_Z_COORD MULS #0,D0 MULS #0,D2 MULS #0,D3 ADDX.L D0,D2 ADDX.L D3,D2 ADD.L D2,D2 MOVE.L D2,(A2)+ SWAP D2 EXT.L D2 EXT.L D1 EXT.L D4 ASL.L #8,D1 ASL.L #8,D4 ADD.L A3,D2 DIVS D2,D1 DIVS D2,D4 NEG.W D4 ADD.W #XCENTRE,D1 ADD.W #YCENTRE,D4 MOVE.W D1,(A1)+ MOVE.W D4,(A1)+ DBF D6,DO_ROTATION 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 BEGIN 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 JSR ROTATE_POINTS JSR MAKE_RASTERS ADD.W #1,XROT ADD.W #2,YROT ADD.W #3,ZROT JSR SWAP CMPI.B #57,$FFFFFC02.W BNE MAIN RTS SET_UP MOVE.L #SCREEN1,PHYSIC MOVE.L #SCREEN2,LOGIC MOVE.L #BAR_WORLD,WORLD MOVE.W #NUM_BARS,NUM_POINTS MOVE.L #VBL2,$70.W BCLR #3,$FFFFFA17.W MOVE.W #$2300,SR 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 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 WORLD DS.L 1 address of object coords SCREEN DS.W MAX_POINTS*2 after perspect,coords stored here Z_COORDS DS.L MAX_POINTS NUM_POINTS DS.W 1 no. points in current object SINCOS DS.W 6 XROT DC.W 0 YROT DC.W 0 ZROT DC.W 0 XOFFSET DC.W 0 YOFFSET DC.W 0 ZOFFSET DC.W 60 BAR DC.W $100,$200,$200,$300,$300,$400,$400,$500,$500 DC.W $600,$600,$700,$700,$700,$700,$600,$600 DC.W $500,$500,$400,$400,$300,$300,$200,$200,$100