ùúùú h h h h h h h h h hSCREENSIZE EQU 640*360 SCREENWIDTH EQU 640 s: move.w $DFF002,D0 ; SAVE DMACON or.w D0,DMACON move.w #$7FFF,$DFF096 ; ALL DMA OFF move.w $DFF01C,D0 ; SAVE INTENA or.w D0,INTENA move.w #$7FFF,$DFF09A ; ALL INTENA OFF move.l $DFE1EC,CHUNKYPTR ; Save GFXPTR move.w $DFE1F4,GFXMODE ; Save GFXMode move.l #screens,D0 addq.l #7,D0 and.l #$FFFFFFF8,D0 move.l D0,BildPtr add.l #SCREENSIZE,D0 move.l D0,BildPtr2 add.l #SCREENSIZE,D0 move.l D0,BildPtr3 clr.w $DFF1E6 ; clear modulo move.l BildPtr,$DFF1EC ; Set GFXPTR move.w #$0B01,$DFF1F4 ; Set GFX 640x360 8bit move.l #musi+64,$DFF400 move.l #(musi_e-musi-64)/8,$DFF404 move.w #$ffff,$DFF408 move.w #80,$DFF40C move.w #4,$DFF40A move.w #$8201,$DFF096 move #255,D0 clr.l D1 farbenladen move.l D1,$DFF388 add.l #$01010000,D1 dbra D0,farbenladen ***************************************** wait btst #5,$DFF01F ; Wait VBL beq wait move.w #$0020,$DFF09C ; clr VBL **************************************** subq #1,time bpl nichtfarb move.w #250,time add.w #1,farbennr and.w #$7,farbennr nichtfarb move.w time,D7 and.l #$00ff,D7 lea farben,A0 move.w farbennr,D2 move.l (A0,D2*4),A3 move.l 4(A0,D2*4),A4 move.l #$FF,D6 sub.l D7,D6 move.w #255,D0 clr.l D1 clr.l D2 farbenlade move.l D1,D3 and.l #$00FF0000,D3 muls.l D7,D3 lsr.l #8,D3 move.l D2,D4 and.l #$00FF0000,D4 muls.l D6,D4 lsr.l #8,D4 add.l D3,D4 lsr.l #1,D4 and.l #$00FF0000,D4 move.l D4,D5 move.l D1,D3 and.l #$0000FF00,D3 muls.l D7,D3 lsr.l #8,D3 move.l D2,D4 and.l #$0000FF00,D4 muls.l D6,D4 lsr.l #8,D4 add.l D3,D4 lsr.l #1,D4 and.l #$0000FF00,D4 or.l D4,D5 move.l D1,D3 and.l #$000000FF,D3 muls.l D7,D3 lsr.l #8,D3 move.l D2,D4 and.l #$000000FF,D4 muls.l D6,D4 lsr.l #8,D4 add.l D3,D4 lsr.l #1,D4 and.l #$000000FF,D4 or.l D4,D5 move.l D1,D3 and.l #$FF000000,D3 or.l D3,D5 move.l D5,$DFF388 add.l A3,D1 add.l A4,D2 dbra D0,farbenlade fcos.s xrot,fp0 fmove.s fp0,D0 ; Xcos fsin.s xrot,fp0 fmove.s fp0,D1 ; Xsin fcos.s yrot,fp0 fmove.s fp0,D2 ; Ycos fsin.s yrot,fp0 fmove.s fp0,D3 ; Ysin fcos.s zrot,fp0 fmove.s fp0,D4 ; Zcos fsin.s zrot,fp0 fmove.s fp0,D5 ; Zsin lea points2,A1 lea points,A0 moveq #8-1,D7 Loop fmove.s (a0)+,fp0 ; X fmove.s (a0)+,fp1 ; Y fmove.s (a0)+,fp2 ; Z fmove fp1,fp3 ; t=y fmul.s D0,fp1 ; Y * Xcos fmove fp2,fp4 ; Z fmul.s D1,Fp4 ; Z * Xsin fsub Fp4,fp1 ; Y2 fmul.s D1,fp3 ; t * Xsin fmul.s D0,fp2 ; Z* Xcos fadd fp3,fp2 ; Z2 fmove fp0,fp3 ; t=x fmul.s d2,fp0 ; X* YCos fmove fp2,fp4 fmul.s d3,fp4 ; z* Ysin fadd fp4,fp0 ; X2 fmul.s d2,fp2 ; Z * Ycos fmul.s d3,fp3 ; t * Ysin fsub fp3,fp2 ; Z2 fmove fp0,fp3 ; t=x fmul.s D4,fp0 ; X * Zcos fmove fp1,fp4 fmul.s D5,fp4 ; Y * zSin fsub fp4,fp0 ; X! fmul.s D5,fp3 ; T * zSin fmul.s D4,fp1 ; Y * zCos fadd fp3,fp1 ; Y! fadd.s #10000,fp2 ; distance fdiv.s #800,fp2 ; Zoom fmove.w fp2,(A1)+ fdiv fp2,fp0 ; X/z fdiv fp2,fp1 ; Y/z fmove.l fp0,D6 add.l #320,d6 move.w d6,(a1)+ fmove.l fp1,d6 add.l #180,D6 move.w d6,(a1)+ addq.l #2,A1 dbra D7,Loop lea points2,A0 lea faces,a1 clr.l D0 clr.l D1 clr.l D2 clr.l D3 clr.l D4 DRAWFACE move.w (a1)+,D7 bmi .exitface move.w (a1)+,A3 move.w #255,D4 move.w 2(A0,D7*8),D0 ; X move.w 4(A0,D7*8),D1 ; Y move.w 2(A0,A3*8),D2 ; X2 move.w 4(A0,A3*8),D3 ; Y2 bsr LINE bra DRAWFACE .exitface bsr CLRSCREEN lea paint,A0 move.l BildPtr,A1 move.l #SCREENSIZE/8,D1 cop move.l (A0)+,(A1)+ move.l (A0)+,(A1)+ subq.l #1,D1 bne.s cop bsr FLIPSCREEN btst #6,$BFE001 beq exit fmove #0.028,fp0 fmove #0.024,fp1 fmove #0.020,fp2 fadd.s xrot,fp0 fadd.s yrot,fp1 fadd.s zrot,fp2 fmove.s fp0,xrot fmove.s fp1,yrot fmove.s fp2,zrot bra wait **************************************** CLRSCREEN lea paint,A0 move.l #SCREENSIZE-1280,D0 clr.l D2 clr.l D3 clr.l D4 CL clr.l D1 move.b 639(A0),D1 move.b 640(A0),D2 add.l D2,D1 move.b 641(A0),D3 add.l D3,D1 move.b 1280(A0),D2 lsr.l #1,D2 add.l D2,D1 move.b 1920(A0),D3 lsr.l #1,D3 add.l D3,d1 lsr.w #2,D1 cmp.l #2,D1 blt.s .noz subq.l #2,D1 .noz move.b D1,(A0)+ subq.l #1,D0 bne.s CL rts ************************************ * input * D0 X1 * D1 Y1 * D2 X2 * D3 Y2 * D4 color LINE: movem.l D3/D4/D5/D6/D7/A0/A1/A2/A4,-(SP) lea paint,A0 moveq.l #1,D6 ; Xstep move.l D0,D7 ; X len sub.l D2,D7 bpl Xpos neg.l D7 neg.l D6 Xpos: move.l D7,A2 moveq.l #1,D5 ; Ystep move.l D1,D7 ; Y len sub.l D3,D7 bpl Ypos neg.l D7 neg.l D5 Ypos move.l D7,A1 move.l D6,A4 cmp A2,A1 bgt YY XX move.l A2,D7 ; Länge move.l A2,D1 ; steigungcounter lsr.l #1,D1 LOOP move.l D3,D6 ; Breite mulu #SCREENWIDTH,D6 add.l D2,D6 move.b D4,(A0,D6.l) add.l A4,D2 ; X + Xstep sub.l A1,D1 ; Y step bpl .keinY add.l A2,D1 ; Steigung add.l D5,D3 .keinY dbra D7,LOOP bra ende YY move.l A1,D7 ; Länge move.l A1,D1 ; steigungcounter lsr.l #1,D1 .LOOP move.l D3,D6 ; Breite mulu #SCREENWIDTH,D6 add.l D2,D6 move.b D4,(A0,D6.l) add.l D5,D3 ; Y+Ystep sub.l A2,D1 ; X step bpl .keinX add.l A1,D1 ; Y Steigung add.l A4,D2 ; X + Xstep .keinX dbra D7,.LOOP ende movem.l (SP)+,D3/D4/D5/D6/D7/A0/A1/A2/A4 rts ******************************************* exit move.w #$7FFF,$DFF096 move.w DMACON,$DFF096 move.w INTENA,$DFF09A move.l CHUNKYPTR,$DFF1EC move.w GFXMODE,$DFF1F4 rts ******************************* FLIPSCREEN: move.l BildPtr,A0 move.l A0,$DFF1EC move.l BildPtr2,BildPtr move.l BildPtr3,BildPtr2 move.l A0,BildPtr3 rts ******************************* DMACON dc.w $8000 INTENA dc.w $8000 GFXMODE dc.w $0000 CHUNKYPTR dc.l 0 time dc.w 0 BildPtr dc.l 0 BildPtr2 dc.l 0 BildPtr3 dc.l 0 xrot dc.s 0 yrot dc.s 0 zrot dc.s 0 points dc.s -1000,-1000,-1000 dc.s 1000,-1000,-1000 dc.s 1000, 1000,-1000 dc.s -1000, 1000,-1000 dc.s -1000,-1000,1000 dc.s 1000,-1000,1000 dc.s 1000, 1000,1000 dc.s -1000, 1000,1000 faces dc.w 0,1 dc.w 1,2 dc.w 2,3 dc.w 3,0 dc.w 0,4 dc.w 1,5 dc.w 2,6 dc.w 3,7 dc.w 4,5 dc.w 5,6 dc.w 6,7 dc.w 7,4 dc.w -1,-1 points2: dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 dc.l 0,0 farbennr dc.w 0 farben dc.l $01010000 dc.l $01010000 dc.l $01010100 dc.l $01000100 dc.l $01000101 dc.l $01000001 dc.l $01000001 dc.l $01010001 dc.l $01010000 section musi,DATA_F musi incbin "sd0:dream.aiff" musi_e section paint,BSS paint ds.b SCREENSIZE section screens,BSS screens ds.b SCREENSIZE*3+8