home *** CD-ROM | disk | FTP | other *** search
- OPT MODULE
-
- EXPORT PROC polygon3d(list:PTR TO LONG,col=1)
- DEF n,i,sx,sy,ox,oy,f=FALSE
- n:=ListLen(list)/3
- FOR i:=1 TO n
- sx,sy:=vec3d(list[]++,list[]++,list[]++)
- IF f THEN Line(ox,oy,sx,sy,col) ELSE f:=TRUE
- ox:=sx; oy:=sy;
- ENDFOR
- ENDPROC
-
- EXPORT PROC init3d(phi=75,theta=40)
- LEA sintab(PC),A0 /* uses A0,A1,D0 */
- LEA c1(PC),A1
- MOVE.L phi,D0
- LSL.W #1,D0
- MOVE.W 0(A0,D0.W),6(A1)
- ADD.W #180,D0
- MOVE.W 0(A0,D0.W),2(A1)
- MOVE.L theta,D0
- LSL.W #1,D0
- MOVE.W 0(A0,D0.W),4(A1)
- ADD.W #180,D0
- MOVE.W 0(A0,D0.W),(A1)
- ENDPROC
-
- EXPORT PROC setpers3d(irho=1000,id=400) /* for average size rho:d = 5:2 */
- LEA rho(PC),A0
- MOVE.W irho.W,(A0)
- MOVE.W id.W,2(A0)
- ENDPROC
-
- EXPORT PROC setmiddle3d(x=160,y=128)
- LEA midx(PC),A0
- MOVE.W x.W,(A0)
- MOVE.W y.W,2(A0)
- ENDPROC
-
- c1: INT $00c2
- c2: INT $0045
- s1: INT $00a3
- s2: INT $00f5
- rho: INT 2000
- d: INT 900
- midx: INT 160
- midy: INT 128
-
- EXPORT PROC vec3d(x,y,z)
- MOVE.L x,D0
- MOVE.L y,D1
- MOVE.L z,D2
- MOVE.L A4,-(A7)
- MOVE.W c1(PC),D3
- MOVE.W c2(PC),D4
- MOVE.W s1(PC),D5
- MOVE.W s2(PC),D6
- MOVE D0,D7 /* EXPECTS X,Y,Z IN D0-D2 */
- MULS D5,D7 /* TRASHES ALL REGS BUT A5-A7 */
- ASR.L #8,D7
- MOVE D7,A0 /* TEMP1 = X*S1 */
- MOVE D1,D7
- MULS D3,D7
- ASR.L #8,D7
- SUB A0,D7
- MOVE D7,A2 /* XE = Y*C1-TEMP1 */
- MOVE D1,D7
- MULS D5,D7
- ASR.L #8,D7
- MULS D4,D7
- ASR.L #8,D7
- MOVE D7,A0 /* TEMP1 = Y*S1*C2 */
- MOVE D0,D7
- MULS D3,D7
- ASR.L #8,D7
- MULS D4,D7
- ASR.L #8,D7
- MOVE D7,A1 /* TEMP2 = X*C1*C2 */
- MOVE D2,D7
- MULS D6,D7
- ASR.L #8,D7
- SUB A0,D7
- SUB A1,D7
- MOVE D7,A3 /* YE = Z*S2-TEMP1-TEMP2 */
- MULS D6,D0
- ASR.L #8,D0
- MULS D3,D0
- ASR.L #8,D0
- MOVE D0,A0 /* TEMP1 = X*S2*C1 */
- MULS D6,D1
- ASR.L #8,D1
- MULS D5,D1
- ASR.L #8,D1
- MOVE D1,A1 /* TEMP2 = Y*S2*S1 */
- NEG D2
- MULS D4,D2
- ASR.L #8,D2
- ADD rho(PC),D2
- SUB A0,D2
- SUB A1,D2 /* ZE(D2) = -Z*C2+RHO-TEMP1-TEMP2 */
- MOVE A2,D3
- MOVE A3,D4
- MOVE d(PC),D0
- MOVE D0,D1
- MULS D3,D0
- DIVS D2,D0
- ADD midx(PC),D0 /* SX(D0) = D*XE/ZE+160 */
- NEG D1
- MULS D4,D1
- DIVS D2,D1
- ADD midy(PC),D1 /* SY(D1) = -D*YE/ZE+128 */
- MOVE.L (A7)+,A4
- EXT.L D0
- EXT.L D1
- ENDPROC D0
-
- sintab: INT $0000,$0004,$0008,$000D,$0011,$0016,$001A,$001F
- INT $0023,$0027,$002C,$0030,$0035,$0039,$003D,$0041
- INT $0046,$004A,$004E,$0053,$0057,$005B,$005F,$0063
- INT $0067,$006B,$006F,$0073,$0077,$007B,$007F,$0083
- INT $0087,$008A,$008E,$0092,$0095,$0099,$009C,$00A0
- INT $00A3,$00A7,$00AA,$00AD,$00B1,$00B4,$00B7,$00BA
- INT $00BD,$00C0,$00C3,$00C6,$00C8,$00CB,$00CE,$00D0
- INT $00D3,$00D5,$00D8,$00DA,$00DC,$00DF,$00E1,$00E3
- INT $00E5,$00E7,$00E8,$00EA,$00EC,$00EE,$00EF,$00F1
- INT $00F2,$00F3,$00F5,$00F6,$00F7,$00F8,$00F9,$00FA
- INT $00FB,$00FB,$00FC,$00FD,$00FD,$00FE,$00FE,$00FE
- INT $00FE,$00FE,$00FF,$00FE,$00FE,$00FE,$00FE,$00FE
- INT $00FD,$00FD,$00FC,$00FB,$00FB,$00FA,$00F9,$00F8
- INT $00F7,$00F6,$00F5,$00F3,$00F2,$00F1,$00EF,$00EE
- INT $00EC,$00EA,$00E8,$00E7,$00E5,$00E3,$00E1,$00DF
- INT $00DC,$00DA,$00D8,$00D5,$00D3,$00D0,$00CE,$00CB
- INT $00C8,$00C6,$00C3,$00C0,$00BD,$00BA,$00B7,$00B4
- INT $00B1,$00AD,$00AA,$00A7,$00A3,$00A0,$009C,$0099
- INT $0095,$0092,$008E,$008A,$0087,$0083,$007F,$007B
- INT $0077,$0073,$006F,$006B,$0067,$0063,$005F,$005B
- INT $0057,$0053,$004E,$004A,$0046,$0041,$003D,$0039
- INT $0035,$0030,$002C,$0027,$0023,$001F,$001A,$0016
- INT $0011,$000D,$0008,$0004,$0000,$FFFC,$FFF8,$FFF3
- INT $FFEF,$FFEA,$FFE6,$FFE1,$FFDD,$FFD9,$FFD4,$FFD0
- INT $FFCB,$FFC7,$FFC3,$FFBF,$FFBA,$FFB6,$FFB2,$FFAD
- INT $FFA9,$FFA5,$FFA1,$FF9D,$FF99,$FF95,$FF91,$FF8D
- INT $FF89,$FF85,$FF81,$FF7D,$FF79,$FF76,$FF72,$FF6E
- INT $FF6B,$FF67,$FF64,$FF60,$FF5D,$FF59,$FF56,$FF53
- INT $FF4F,$FF4C,$FF49,$FF46,$FF43,$FF40,$FF3D,$FF3A
- INT $FF38,$FF35,$FF32,$FF30,$FF2D,$FF2B,$FF28,$FF26
- INT $FF24,$FF21,$FF1F,$FF1D,$FF1B,$FF19,$FF18,$FF16
- INT $FF14,$FF12,$FF11,$FF0F,$FF0E,$FF0D,$FF0B,$FF0A
- INT $FF09,$FF08,$FF07,$FF06,$FF05,$FF05,$FF04,$FF03
- INT $FF03,$FF02,$FF02,$FF02,$FF02,$FF02,$FF01,$FF02
- INT $FF02,$FF02,$FF02,$FF02,$FF03,$FF03,$FF04,$FF05
- INT $FF05,$FF06,$FF07,$FF08,$FF09,$FF0A,$FF0B,$FF0D
- INT $FF0E,$FF0F,$FF11,$FF12,$FF14,$FF16,$FF18,$FF19
- INT $FF1B,$FF1D,$FF1F,$FF21,$FF24,$FF26,$FF28,$FF2B
- INT $FF2D,$FF30,$FF32,$FF35,$FF38,$FF3A,$FF3D,$FF40
- INT $FF43,$FF46,$FF49,$FF4C,$FF4F,$FF53,$FF56,$FF59
- INT $FF5D,$FF60,$FF64,$FF67,$FF6B,$FF6E,$FF72,$FF76
- INT $FF79,$FF7D,$FF81,$FF85,$FF89,$FF8D,$FF91,$FF95
- INT $FF99,$FF9D,$FFA1,$FFA5,$FFA9,$FFAD,$FFB2,$FFB6
- INT $FFBA,$FFBE,$FFC3,$FFC7,$FFCB,$FFD0,$FFD4,$FFD9
- INT $FFDD,$FFE1,$FFE6,$FFEA,$FFEF,$FFF3,$FFF8,$FFFC
- INT $0000,$0004,$0008,$000D,$0011,$0016,$001A,$001F
- INT $0023,$0027,$002C,$0030,$0035,$0039,$003D,$0041
- INT $0046,$004A,$004E,$0053,$0057,$005B,$005F,$0063
- INT $0067,$006B,$006F,$0073,$0077,$007B,$007F,$0083
- INT $0087,$008A,$008E,$0092,$0095,$0099,$009C,$00A0
- INT $00A3,$00A7,$00AA,$00AD,$00B1,$00B4,$00B7,$00BA
- INT $00BD,$00C0,$00C3,$00C6,$00C8,$00CB,$00CE,$00D0
- INT $00D3,$00D5,$00D8,$00DA,$00DC,$00DF,$00E1,$00E3
- INT $00E5,$00E7,$00E8,$00EA,$00EC,$00EE,$00EF,$00F1
- INT $00F2,$00F3,$00F5,$00F6,$00F7,$00F8,$00F9,$00FA
- INT $00FB,$00FB,$00FC,$00FD,$00FD,$00FE,$00FE,$00FE
- INT $00FE,$00FE
-