home *** CD-ROM | disk | FTP | other *** search
- >extern "asmdisk1:binary/perspective",perspective
-
- org $30000
- load $30000
-
- o: jmp rutin
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-
- graf: dc.b "graphics.library",0
- even
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- copp: blk.l 1,0
- grap: blk.l 1,0
- lagr: blk.l 1,0
- stack: blk.l 1,0
- screen: dc.l 0
- ycheck: dc.l 0
- ycheck2:dc.l 0
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- rutin: lea connections,a0
- mulp: move.w (a0),d0
- mulu #6,d0
- move.w d0,(a0)
- add.w #2,a0
- cmp.w #-1,(a0)
- bne mulp
- move.l $4,a6 ; Find the Copperlist-Pointer...
- jsr -150(a6)
- move.l d0,stack
- lea graf(pc),a1
- clr.l d0
- jsr -552(a6)
- move.l d0,grap
- add.l #$32,d0
- move.l d0,copp
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- move.l copp,a5 ; Start the Copperlist
- move.w #$00a0,$dff096
- move.l (a5),lagr
- move.l #list,(a5)
- move.w #$8380,$dff096
- move.l #$40000,a0
- clr.l d0
- clr.l d1
-
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- next: cmp.b #$ff,$dff006
- bne next
-
- jsr cpixel
-
- move.w #0,my
- move.w #0,mx
- move.b $dff00a,my+1
- move.b $dff00b,mx+1
- ; move.w #50,b
- add.w #1,b
- cmp.w #360,b
- blt go
- move.w #0,b
- go:
- ; move.w #50,a
- add.w #1,a
- cmp.w #360,a
- blt go1
- move.w #0,a
- go1:
- ; move.w #50,c
- add.w #2,c
- cmp.w #360,c
- blt go2
- move.w #0,c
- go2:
- move.w #0,nu
- move.w #0,ycheck
- move.w #$ffff,ycheck2
- ploop: move.l #coords,a4 ; Count all coords
- move.l #coords2,a6
- move.w nu,d2
- add.l d2,a4
- add.l d2,a6
- move.w (a4),d0
- move.w 2(a4),d1
- move.w 4(a4),d2
- bsr vectorcalc
- move.w x2,d0
- move.w y2,d1
- move.w z2,d2
- lea perspective,a3
- add depth,d2
- add d2,d2
- move (a3,d2),d5
- muls d5,d0
- muls d5,d1
- add.l d0,d0
- add.l d1,d1
- swap d0
- swap d1
- add.w #160,d0
- add.w #120,d1
- move.w ycheck,d7
- move.w ycheck2,d6
- cmp.w d1,d7
- bhs ojjo
- move.w d1,ycheck
- ojjo: cmp.w d1,d6
- bls ojjo2
- move.w d1,ycheck2
- ojjo2:
- move.w d0,(a6)
- move.w d1,2(a6)
- add.w #6,nu
- move.w no,d2
- cmp.w nu,d2
- bne.L ploop
-
- lea connections,a4
- move.l #40,d4
- clr.l d2
- clr.l d3
- clr.l d5
- clr.l d6
- lloop:
- lea coords2,a6
- move.w (a4),d5
- move.w 2(a4),d6
- move.w 2(a6,d5),d1
- move.w 2(a6,d6),d3
- move.w (a6,d5),d0
- move.w (a6,d6),d2
- cmp.w d1,d3
- bhs skip
- move.w 2(a6,d5),d3
- move.w 2(a6,d6),d1
- move.w (a6,d5),d2
- move.w (a6,d6),d0
- skip:
- move.l screen,a0
- clr.l d4
- clr.l d5
-
- move.w d0,d4
- move.w d1,d5
-
-
- move.l screen,a0
-
- bsr initlinedraw
- bsr linedraw
-
- move.l screen,a0
-
- clr.l d6
- mulu #$28,d5
- divu #8,d4
- move.b d4,d6
- add.l d5,a0
- add.l d6,a0
- swap d4
- not.b d4
- bchg d4,(a0)
-
-
-
- add.l #4,a4
- cmp.w #-1,(a4)
- bne.s lloop
- move.l screen,a0
- bsr bfill
- btst #6,$bfe001
- bne next
-
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- close: move.l copp,a5 ; Close Copperlist
- move.w #$0080,$dff096
- move.l lagr,(a5)
- move.w #$80a0,$dff096
- move.l $4,a6
- move.l stack,d0
- jsr -156(a6)
- clr.l d0
- rts
-
- cpixel:
- move.l bp,d0
- move.w bpls+6,d1
- swap d1
- move.w bpls+2,d1
- swap d1
- move.w d0,bpls+6
- move.w d0,bpls+14
- add.w #$28,bpls+14
- swap d0
- move.w d0,bpls+2
- move.w d0,bpls+10
- move.l d1,bp
- swap d0
- move.l d1,screen
- move.l d1,$dff054
- move.w #0,$dff064
- move.w #0,$dff066
- move.l #$0000,$dff044
- move.w #$0100,$dff040
- move.w #$0000,$dff042
- move.w #$3bd4,$dff058
- ts: btst #14,$dff002
- bne ts
-
- rts
-
- vectorcalc:
- move.w a,d6
- lsl.w #1,d6
- lea sinus(pc),a0
- move.w (a0,d6),d3
- move.w d3,d5
- muls d1,d3
- lsl.l #2,d3
- swap d3 ;d3 holds y*sin(a)
-
- lea cosinus(pc),a1
- move.w (a1,d6),d4
- move.w d4,d7
- muls d0,d4
- lsl.l #2,d4
- swap d4 ;d4 holds x*cos(a)
-
- sub.w d3,d4 ;d4 holds x*cos(a)-y*sin(a)=x1
- move.w d4,x1
- muls d1,d7
- muls d0,d5
- lsl.l #2,d7
- swap d7
- lsl.l #2,d5
- swap d5
- add.w d5,d7 ;d7 holds y*cos(a)-x*sin(a)=y1
- move.w d7,y1
-
-
- move.w b,d6
- lsl.w #1,d6
- move.w (a0,d6),d3
- move.w d3,d5
- muls d2,d3
- lsl.l #2,d3
- swap d3 ;d3 holds z*sin(b)
-
- move.w (a1,d6),d4
- move.w d4,d7
- muls y1,d4
- lsl.l #2,d4
- swap d4 ;d4 holds y1*cos(b)
-
- sub.w d3,d4 ;d4 holds y1*cos(b)-z*sin(b)=y2
- move.w d4,y2
- muls d2,d7
- muls y1,d5
- lsl.l #2,d7
- swap d7
- lsl.l #2,d5
- swap d5
- add.w d5,d7 ;d7 holds z*cos(b)+y1*sin(b)=z1
- move.w d7,z1
-
-
- move.w c,d6
- lsl.w #1,d6
- move.w (a0,d6),d3
- move.w d3,d5
- muls x1,d3
- lsl.l #2,d3
- swap d3 ;d3 holds x1*sin(c)
-
- move.w (a1,d6),d4
- move.w d4,d7
- muls z1,d4
- lsl.l #2,d4
- swap d4 ;d4 holds z1*cos(c)
-
- sub.w d3,d4 ;d4 holds z1*cos(c)-x1*sin(c)=z2
- move.w d4,z2
- muls x1,d7
- muls z1,d5
- lsl.l #2,d7
- swap d7
- lsl.l #2,d5
- swap d5
- add.w d5,d7 ;d7 holds x1*cos(c)+z1*sin(c)=x2
- move.w d7,x2
-
- rts
-
-
- ; The linedrawing routine - taken from an 'learn assembler' disk!
-
- swid=40
-
- linedraw:
- cmp.w d0,d2
- bne.s ld_not1pix
- cmp.w d1,d3
- bne.s ld_not1pix
- rts
- ld_not1pix:
- movem.l d4/d7/a3-a4,-(a7)
- moveq #0,d7
- sub.w d0,d2
- bge.s ld_xok
- neg.w d2
- addq.w #2,d7
- ld_xok:
- sub.w d1,d3
- bge.s ld_yok
- neg.w d3
- addq.w #4,d7
- ld_yok:
- cmp.w d3,d2
- bgt.s ld_xyok
- bne.s ld_not45
- add.w #16,d7
- ld_not45:
- exg d2,d3
- addq.w #8,d7
- ld_xyok:
- add.w d3,d3
- move.w d3,d4
- sub.w d2,d4
- add.w d3,d3
- move.w d3,a3
- add.w d2,d2
- add.w d2,d2
- sub.w d2,d3
- mulu #swid,d1
- move.l a0,a4
- add.w d1,a4
- move.w d0,d1
- lsr.w #3,d1
- add.w d1,a4
- andi.w #$f,d0
- ror.w #4,d0
- add.w #$b4a,d0
- swap d0
- move.w (a1,d7.w),d0
- bset #1,d0
- lsl.w #4,d2
- add.w #66,d2
- ld_wldraw:
- btst #6,$2(a2)
- bne.s ld_wldraw
- move.l d0,$40(a2)
- move.w d3,$64(a2)
- move.w a3,$62(a2)
- move.w d4,$52(a2)
- move.l a4,$48(a2)
- move.l a4,$54(a2)
- move.w d2,$58(a2)
- movem.l (a7)+,d4/d7/a3-a4
- rts
-
- initlinedraw:
- lea.l octant(pc),a1
- move.l #$dff000,a2
- waitinit:
- btst #6,$2(a2)
- bne.s waitinit
- move.l #-1,$44(a2)
- move.l #$ffff8000,$72(a2)
- move.w #swid,$60(a2)
- move.w #swid,$66(a2)
- rts
-
- octant:
- dc.w $0051,$0055,$0059,$005d
- dc.w $0041,$0049,$0045,$004d
- dc.w $0011,$0015,$0019,$001d
- dc.w $0001,$0009,$0005,$000d
-
- bfill: btst #14,$dff002
- bne bfill
-
- move.w ycheck,d5
- ; sub.w #1,d5
- mulu #40,d5
- add.l d5,a0
- move.l #$09f0000a,$dff040
- move.l #$ffffffff,$dff044
- move.l a0,$dff054
- move.l a0,$dff050
- move.l #0,$dff064
- move.w ycheck,d1
- move.w ycheck2,d0
- sub.w d0,d1
- mulu #64,d1
- add.w #40,d1
- move.w d1,$dff058
- rts
-
-
-
-
-
- a: dc.l 0
- b: dc.l 0
- c: dc.l 0
- x2: dc.l 0
- y2: dc.l 0
- z2: dc.l 0
- x1: dc.l 0
- y1: dc.l 0
- z1: dc.l 0
- mx: dc.l 0
- my: dc.l 0
- depth: dc.w $100
- sinus:
-
- dc.w 0,286,572,857,1143,1428,1713,1997,2280,2563,2845,3126
- dc.w 3406,3686,3964,4240,4516,4790,5063,5334,5604,5872
- dc.w 6138,6402,6664,6924,7182,7438,7692,7943,8192,8438
- dc.w 8682,8923,9162,9397,9630,9860,10087,10311,10531
- dc.w 10749,10963,11174,11381,11585,11786,11982,12176
- dc.w 12365,12551,12733,12911,13085,13255,13421,13583
- dc.w 13741,13894,14044,14189,14330,14466,14598,14726,14849
- dc.w 14968,15082,15191,15296,15396,15491,15582,15668,15749
- dc.w 15826,15897,15964,16026,16083,16135,16182,16225,16262
- dc.w 16294,16322,16344,16362,16374,16382,16383
-
- cosinus:
- dc.w 16382,16374,16362,16344,16322,16294,16262,16225,16182
- dc.w 16135,16083,16026,15964,15897,15826,15749,15668,15582
- dc.w 15491,15396,15296,15191,15082,14968,14849,14726,14598
- dc.w 14466,14330,14189,14044,13894,13741,13583,13421,13255
- dc.w 13085,12911,12733,12551,12365,12176,11982,11786,11585
- dc.w 11381,11174,10963,10749,10531,10311,10087,9860,9630
- dc.w 9397,9163,8923,8682,8438,8192,7943,7692,7438,7132,6924
- dc.w 6664,6402,6138,5872,5604,5334,5063,4790,4516,4240,3964
- dc.w 3686,3406,3126,2845,2563,2280,1997,1713,1428
- dc.w 1143,857,572,286,0
-
- dc.w -286,-572,-857,-1143,-1428,-1713,-1997,-2280,-2563,-2845,-3126
- dc.w -3406,-3686,-3964,-4240,-4516,-4790,-5063,-5334,-5604,-5872
- dc.w -6138,-6402,-6664,-6924,-7182,-7438,-7692,-7943,-8192,-8438
- dc.w -8682,-8923,-9162,-9397,-9630,-9860,-10087,-10311,-10531
- dc.w -10749,-10963,-11174,-11381,-11585,-11786,-11982,-12176
- dc.w -12365,-12551,-12733,-12911,-13085,-13255,-13421,-13583
- dc.w -13741,-13894,-14044,-14189,-14330,-14466,-14598,-14726,-14849
- dc.w -14968,-15082,-15191,-15296,-15396,-15491,-15582,-15668,-15749
- dc.w -15826,-15897,-15964,-16026,-16083,-16135,-16182,-16225,-16262
- dc.w -16294,-16322,-16344,-16362,-16374,-16382,-16383
-
- dc.w -16382,-16374,-16362,-16344,-16322,-16294,-16262,-16225,-16182
- dc.w -16135,-16083,-16026,-15964,-15897,-15826,-15749,-15668,-15582
- dc.w -15491,-15396,-15296,-15191,-15082,-14968,-14849,-14726,-14598
- dc.w -14466,-14330,-14189,-14044,-13894,-13741,-13583,-13421,-13255
- dc.w -13085,-12911,-12733,-12551,-12365,-12176,-11982,-11786,-11585
- dc.w -11381,-11174,-10963,-10749,-10531,-10311,-10087,-9860,-9630
- dc.w -9397,-9163,-8923,-8682,-8438,-8192,-7943,-7692,-7438,-7132,-6924
- dc.w -6664,-6402,-6138,-5872,-5604,-5334,-5063,-4790,-4516,-4240,-3964
- dc.w -3686,-3406,-3126,-2845,-2563,-2280,-1997,-1713,-1428
- dc.w -1143,-857,-572,-286
- dc.w 0,286,572,857,1143,1428,1713,1997,2280,2563,2845,3126
- dc.w 3406,3686,3964,4240,4516,4790,5063,5334,5604,5872
- dc.w 6138,6402,6664,6924,7182,7438,7692,7943,8192,8438
- dc.w 8682,8923,9162,9397,9630,9860,10087,10311,10531
- dc.w 10749,10963,11174,11381,11585,11786,11982,12176
- dc.w 12365,12551,12732,12911,13085,13255,13421,13583
- dc.w 13741,13894,14044,14189,14330,14466,14598,14726,14849
- dc.w 14968,15082,15191,15296,15396,15491,15582,15668,15749
- dc.w 15826,15897,15964,16026,16083,16135,16182,16225,16262
- dc.w 16294,16322,16344,16362,16374,16382,16384
-
- coords:
-
- dc.w -120,120,0,120,120,0,120,-120,0,-120,-120,0
- dc.w -80,80,0,80,80,0,80,-80,0,-80,-80,0
-
-
- no: dc.w 8*6
- nu: dc.w 0
-
- connections:
-
- dc.w 0,1,1,2,2,3,0,3,4,5,5,6,6,7,4,7,-1,-1
-
-
- coords2: blk.b 4000,0
-
- perspective: equ $60000
- ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- even
- bp: dc.l $45000
- list:
- dc.w $0096,%0000000100000000
- dc.l $01800000,$01820ff0
- dc.l $01840004,$01860090
- dc.l $01000000
- dc.l $3001fffe
- dc.w $0096,%1000000100000000
- bpls: dc.l $00e00004,$00e20000
- dc.l $00e40004,$00e60028
- dc.l $01001200,$01020000
-
-
- dc.l $ffddfffe,$1f01fffe
- dc.l $01000000
- dc.w $0096,%0000000100000000
- dc.l $fffffffe
-
-
-
-
-