Files
FireBee_Setup/tools/vision/LDV/SRC/bhole/bhole.lst
2022-11-14 10:05:42 +01:00

1055 lines
77 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 1
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
1 .IMPORT pre_cosin ; array of 2*ITRIGO_ARRAY_SIZE longs
2 .IMPORT pre_loffset ; long*
3 .EXPORT bh_xd, bh_yd, bh_rd2 ; long
4 .EXPORT bh_xs, bh_ys, bh_ref ; long
5 .EXPORT bh_xc, bh_yc ; long
6 .EXPORT bh_out_w, bh_out_h ; short
7 .EXPORT bh_in_w, bh_in_h ; short
8 .EXPORT bh_out_x, bh_out_y ; short
9 .EXPORT BHL32_68030,BHL16_68030,BHLInd_68030
10 .EXPORT BHL32_F68030,BHL16_F68030,BHLInd_F68030
11 .EXPORT lcosin_fpu
12
13 ITRIGO_ARRAY_SIZE EQU (1 << 14)
14 ITRIGO_ANGLE_MAX EQU (ITRIGO_ARRAY_SIZE-1)
15 QUARTER EQU (ITRIGO_ARRAY_SIZE/4)
16
17 ; The black hole transformation consists of:
18 ; Rotate the destination pixel around the black hole center
19 ; The closest we are to the black hole, the bigger the rotation angle is
20 ; We have 2 or 3 parts of computation angle for black hole transformation:
21 ; 1: Just before dividing the maximum possible angle (depending on LDV paramter Rotation angle) by:
22 ; CPU: the square of distance to black hole center
23 ; FPU: the distance to black hole center; here we need 68881 instruction FSQRT
24 ; So there are 3 parts in macro calculations:
25 ; 1. Before dividing by distance or its square
26 ; 1a. (FPU only) Compute distance
27 ; 3. Divide by either distance or its square and state if the resulting pixel is in source image
28 ; Dividing by distance instead of its square gives better visual results
29 MACRO BH_COMP_1
30 MOVE.L A6,D0 ; Remember A6=bh_xd
31 ADD.L D0,D0
32 ADDQ.L #1,D0
33 MOVE.L A5,D1 ; Remember A5=bh_rd2
34 ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 MOVE.L bh_ref(PC),D2
36 MOVE.L D1,A5 ; Save bh_rd2, free D1
37 ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
38 ENDM
39
40 MACRO BH_COMP_2 bail_out_addr
41 DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
43
44 LSL.L #3,D2 ; D2=offset for pre_cosin array
45 MOVE.L A6,D0 ; D0=bh_xd
46 MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
49
50 MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
51
52 MOVE.L D0,D4
53 MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 MOVE.L D1,D5
55 MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 2
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
57 ASR.L D6,D4
58 ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 BLT.S bail_out_addr ; xs < 0: not in range
60 CMP.W bh_in_w(PC),D4
61 BGE.S bail_out_addr ; xs >= bh_in_w: not in range
62 MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
63
64 MOVE.L D0,D4
65 MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 MOVE.L D1,D5
67 MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 ASR.L D6,D4
70 ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 BLT.S bail_out_addr ; ys < 0: not in range
72 CMP.W bh_in_h(PC),D4
73 BGE.S bail_out_addr ; ys >= bh_in_h: not in range
74 MOVEQ.L #0,D6 ; pixel in range
75 ENDM
76
77 ; Macro for CPU 68030
78 MACRO BH_COMPUTE_CPU bail_out_addr
79 BH_COMP_1
80 BH_COMP_2 bail_out_addr
81 ENDM
82
83 ; Macro for using FPU
84 ; What we do with FPU is to compute the square root of D1 which
85 ; Is then the distance to the back hole center instead of its square
86 MACRO BH_COMPUTE_FPU bail_out_addr
87 BH_COMP_1
88 FMOVE.L D1,FP0
89 FSQRT FP0
90 FMOVE.L FP0,D1
91 BH_COMP_2 bail_out_addr
92 ENDM
93
94 ; Init parameters valid for the entire call
95 MACRO INIT_BHL
96 LEA.L pre_cosin,A2
97 MOVE.L pre_loffset,A4 ; A4-->preoffset
98 MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
99 MOVE.L bh_xd(PC),A6 ; A6=bh_xd
100 MOVE.W bh_out_w(PC),D7
101 SUBQ.W #1,D7 ; For DBF
102 ENDM
103
104 MACRO INIT_BHL_SYM
105 LEA.L pre_cosin,A2
106 MOVE.L pre_loffset,A4 ; A4-->preoffset
107 MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
108 MOVE.L bh_xd(PC),A6 ; A6=bh_xd
109 MOVE.W bh_out_w(PC),D7
110 LSR.W #1,D7 ; loop to bh_out_w/2 counts
111 ADD.W A6,D7 ; starting from bh_xd
112 MOVE.W D7,last_xd
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 3
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
113 ENDM
114
115 ; Get pixel TC32 -->dest (Dx)
116 ; A4-->pre_loffset
117 MACRO GET_TCPIXEL32 p,x,y,dest
118 MOVE.L (A4,y.L*4),dest
119 ADD.L x,dest
120 MOVE.L (p,dest.L*4),dest
121 ENDM
122
123 ; Set pixel TC32 val(Dx) -->dest
124 ; A4-->pre_loffset
125 ; scratch_Dx scratch variable
126 MACRO SET_TCPIXEL32 p,x,y,val,scratch_Dx
127 MOVE.L (A4,y.L*4),scratch_Dx
128 ADD.L x,scratch_Dx
129 MOVE.L val,(p,scratch_Dx.L*4)
130 ENDM
131
132 ; Get pixel TC16 -->dest (Dx)
133 ; A4-->pre_loffset
134 MACRO GET_TCPIXEL16 p,x,y,dest
135 MOVE.L (A4,y.L*4),dest
136 ADD.L x,dest
137 MOVE.W (p,dest.L*2),dest
138 ENDM
139
140 ; Set pixel TC16 val(Dx) -->dest
141 ; A4-->pre_loffset
142 ; scratch_Dx scratch variable
143 MACRO SET_TCPIXEL16 p,x,y,val,scratch_Dx
144 MOVE.L (A4,y.L*4),scratch_Dx
145 ADD.L x,scratch_Dx
146 MOVE.W val,(p,scratch_Dx.L*2)
147 ENDM
148
149 ; Rotate 90
150 ; x,y,scratch_Dx : registers, y has to be Dx
151 ; #define R90(x,y) { long _x=x; x=-y; y=_x; }
152 MACRO R90 x,y,scratch_Dx
153 MOVE.L x,scratch_Dx
154 NEG.L y
155 MOVE.L y,x
156 MOVE.L scratch_Dx,y
157 ENDM
158
159 MACRO PIXINIMG x,y,w,h,bailout
160 TST.W x
161 BLT.S bailout
162 TST.W y
163 BLT.S bailout
164 CMP.W w,x
165 BGE.S bailout
166 CMP.W h,y
167 BGE.S bailout
168 ENDM
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 4
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
169
170 ; On sample file 00_1480ms.jpg, Aranym 32bit:
171 ; BHL32_68000 takes about 1450ms
172 ; BHL32_68030 takes about 740ms
173
174 ; 68030 routine for True Color 32bit
175 ; BHL32_68030(short use_sym, void* in, void* out)
176 ; D0, A0 A1
177 00000000' BHL32_68030:
178 00000000' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context
179
180 00000004' 4A40 TST.W D0
181 00000006' 6600 00AE BNE BHL32_68030_sym
182
183 0000000A' 7E00 MOVEQ.L #0,D7
184 0000000C' 3E3A 0488 MOVE.W bh_out_x(PC),D7
185 00000010' E58F LSL.L #2,D7
186 00000012' D3C7 ADD.L D7,A1 ; A1-->&out[bh_out_x]
187 INIT_BHL
96 00000014' 45F9 00000000* + LEA.L pre_cosin,A2
97 0000001A' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
98 00000020' 2A7A 0454 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
99 00000024' 2C7A 0448 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
100 00000028' 3E3A 0464 + MOVE.W bh_out_w(PC),D7
101 0000002C' 5347 + SUBQ.W #1,D7 ; For DBF
188 0000002E' bhl32_l030:
189 BH_COMPUTE_CPU bhl32_tpir_030 ; -->D6=0:pixel in range
30 0000002E' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 00000030' D080 + ADD.L D0,D0
32 00000032' 5280 + ADDQ.L #1,D0
33 00000034' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
34 00000036' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 00000038' 243A 0448 + MOVE.L bh_ref(PC),D2
36 0000003C' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 0000003E' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
41 00000040' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 00000044' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
44 0000004A' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 0000004C' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 0000004E' 223A 0422 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 00000052' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 00000056' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 0000005A' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 0000005C' 2800 + MOVE.L D0,D4
53 0000005E' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 00000062' 2A01 + MOVE.L D1,D5
55 00000064' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 00000068' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 0000006A' ECA4 + ASR.L D6,D4
58 0000006C' D8BA 0418 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 00000070' 6D 26 + BLT.S bhl32_tpir_030 ; xs < 0: not in range
60 00000072' B87A 041E + CMP.W bh_in_w(PC),D4
61 00000076' 6C 20 + BGE.S bhl32_tpir_030 ; xs >= bh_in_w: not in range
62 00000078' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 0000007A' 2800 + MOVE.L D0,D4
65 0000007C' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 5
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
66 00000080' 2A01 + MOVE.L D1,D5
67 00000082' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 00000086' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 00000088' ECA4 + ASR.L D6,D4
70 0000008A' D8BA 03FE + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 0000008E' 6D 08 + BLT.S bhl32_tpir_030 ; ys < 0: not in range
72 00000090' B87A 0402 + CMP.W bh_in_h(PC),D4
73 00000094' 6C 02 + BGE.S bhl32_tpir_030 ; ys >= bh_in_h: not in range
74 00000096' 7C00 + MOVEQ.L #0,D6 ; pixel in range
190 00000098' bhl32_tpir_030:
191 00000098' 70FF MOVEQ.L #-1,D0 ; Assume out of range
192 0000009A' 4A46 TST.W D6
193 0000009C' 66 0A BNE.S bhl32_setpix_030
194 0000009E' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys]
195 000000A2' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3)
196 000000A4' 2030 0C00 MOVE.L (A0,D0.L*4),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs]
197 000000A8' bhl32_setpix_030:
198 000000A8' 22C0 MOVE.L D0,(A1)+
199 000000AA' 528E ADD.L #1,A6 ; bh_xd++
200 000000AC' 51CF FF80 DBF D7,bhl32_l030
201
202 000000B0' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
203 000000B4' 4E75 RTS
204
205 000000B6' BHL32_68030_sym:
206 INIT_BHL_SYM
105 000000B6' 45F9 00000000* + LEA.L pre_cosin,A2
106 000000BC' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
107 000000C2' 2A7A 03B2 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
108 000000C6' 2C7A 03A6 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
109 000000CA' 3E3A 03C2 + MOVE.W bh_out_w(PC),D7
110 000000CE' E24F + LSR.W #1,D7 ; loop to bh_out_w/2 counts
111 000000D0' DE4E + ADD.W A6,D7 ; starting from bh_xd
112 000000D2' 33C7 00000000' + MOVE.W D7,last_xd
207 000000D8' bhl32_l030_sym:
208 BH_COMPUTE_CPU bhl32_tpir_030_sym ; -->D6=0:pixel in range
30 000000D8' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 000000DA' D080 + ADD.L D0,D0
32 000000DC' 5280 + ADDQ.L #1,D0
33 000000DE' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
34 000000E0' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 000000E2' 243A 039E + MOVE.L bh_ref(PC),D2
36 000000E6' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 000000E8' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
41 000000EA' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 000000EE' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
44 000000F4' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 000000F6' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 000000F8' 223A 0378 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 000000FC' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 00000100' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 00000104' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 00000106' 2800 + MOVE.L D0,D4
53 00000108' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 0000010C' 2A01 + MOVE.L D1,D5
55 0000010E' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 6
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
56 00000112' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 00000114' ECA4 + ASR.L D6,D4
58 00000116' D8BA 036E + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 0000011A' 6D 26 + BLT.S bhl32_tpir_030_sym ; xs < 0: not in range
60 0000011C' B87A 0374 + CMP.W bh_in_w(PC),D4
61 00000120' 6C 20 + BGE.S bhl32_tpir_030_sym ; xs >= bh_in_w: not in range
62 00000122' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 00000124' 2800 + MOVE.L D0,D4
65 00000126' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 0000012A' 2A01 + MOVE.L D1,D5
67 0000012C' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 00000130' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 00000132' ECA4 + ASR.L D6,D4
70 00000134' D8BA 0354 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 00000138' 6D 08 + BLT.S bhl32_tpir_030_sym ; ys < 0: not in range
72 0000013A' B87A 0358 + CMP.W bh_in_h(PC),D4
73 0000013E' 6C 02 + BGE.S bhl32_tpir_030_sym ; ys >= bh_in_h: not in range
74 00000140' 7C00 + MOVEQ.L #0,D6 ; pixel in range
209 00000142' bhl32_tpir_030_sym:
210 00000142' 70FF MOVEQ.L #-1,D0 ; Assume out of range
211 00000144' 4A46 TST.W D6
212 00000146' 66 0A BNE.S bhl32_setpix_030_sym
213 GET_TCPIXEL32 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc
118 00000148' 2034 4C00 + MOVE.L (A4,D4.L*4),D0
119 0000014C' D08B + ADD.L A3,D0
120 0000014E' 2030 0C00 + MOVE.L (A0,D0.L*4),D0
214 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)
215 00000152' bhl32_setpix_030_sym:
216 00000152' 2F0E MOVE.L A6,-(SP) ; Save bh_xd
217 00000154' 243A 0330 MOVE.L bh_xc(PC),D2 ; D2=bh_xc
218 00000158' 263A 0330 MOVE.L bh_yc(PC),D3 ; D3=bh_yc
219 0000015C' DDC2 ADD.L D2,A6 ; A6=bh_xd+bh_xc
220 0000015E' 2E3A 0312 MOVE.L bh_yd(PC),D7
221 00000162' DE83 ADD.L D3,D7 ; D7=bh_yd+bh_yc
222 SET_TCPIXEL32 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc))
127 00000164' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5
128 00000168' DA8E + ADD.L A6,D5
129 0000016A' 2380 5C00 + MOVE.L D0,(A1,D5.L*4)
223
224 0000016E' 7202 MOVEQ.L #2,D1 ; 3 loops, -1 for DBF
225 00000170' deduc32_030:
226 00000170' 97C2 SUB.L D2,A3 ; We need now bh_xs(A3) and bh_ys(D4) relative to
227 00000172' 9883 SUB.L D3,D4 ; Black Hole center to use R90
228 00000174' 9DC2 SUB.L D2,A6 ; We need now bh_xd(A6) and bh_yd(D7) relative to
229 00000176' 9E83 SUB.L D3,D7 ; Black Hole center to use R90
230
231 R90 A6,D7,D0 ; Rotate (xd,yd) by PI/4
153 00000178' 200E + MOVE.L A6,D0
154 0000017A' 4487 + NEG.L D7
155 0000017C' 2C47 + MOVE.L D7,A6
156 0000017E' 2E00 + MOVE.L D0,D7
232 R90 A3,D4,D0 ; Rotate (xs,ys) by PI/4
153 00000180' 200B + MOVE.L A3,D0
154 00000182' 4484 + NEG.L D4
155 00000184' 2644 + MOVE.L D4,A3
156 00000186' 2800 + MOVE.L D0,D4
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 7
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
233
234 00000188' D7C2 ADD.L D2,A3 ; Now we need coords in image raster
235 0000018A' D883 ADD.L D3,D4
236 0000018C' DDC2 ADD.L D2,A6
237 0000018E' DE83 ADD.L D3,D7
238
239 PIXINIMG A6,D7,bh_in_w(PC),bh_in_h(PC),dnotinimg32_030 ; Check if pixel in dest is within bounds
160 00000190' 4A4E + TST.W A6
161 00000192' 6D 3A + BLT.S dnotinimg32_030
162 00000194' 4A47 + TST.W D7
163 00000196' 6D 36 + BLT.S dnotinimg32_030
164 00000198' BCFA 02F8 + CMP.W bh_in_w(PC),A6
165 0000019C' 6C 30 + BGE.S dnotinimg32_030
166 0000019E' BE7A 02F4 + CMP.W bh_in_h(PC),D7
167 000001A2' 6C 2A + BGE.S dnotinimg32_030
240 000001A4' 70FF MOVEQ.L #-1,D0 ; Assume out of range
241 PIXINIMG A3,D4,bh_in_w(PC),bh_in_h(PC),plotdest32_030 ; Check if pixel in src is within bounds
160 000001A6' 4A4B + TST.W A3
161 000001A8' 6D 1A + BLT.S plotdest32_030
162 000001AA' 4A44 + TST.W D4
163 000001AC' 6D 16 + BLT.S plotdest32_030
164 000001AE' B6FA 02E2 + CMP.W bh_in_w(PC),A3
165 000001B2' 6C 10 + BGE.S plotdest32_030
166 000001B4' B87A 02DE + CMP.W bh_in_h(PC),D4
167 000001B8' 6C 0A + BGE.S plotdest32_030
242 GET_TCPIXEL32 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc
118 000001BA' 2034 4C00 + MOVE.L (A4,D4.L*4),D0
119 000001BE' D08B + ADD.L A3,D0
120 000001C0' 2030 0C00 + MOVE.L (A0,D0.L*4),D0
243 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)
244 000001C4' plotdest32_030:
245 SET_TCPIXEL32 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc))
127 000001C4' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5
128 000001C8' DA8E + ADD.L A6,D5
129 000001CA' 2380 5C00 + MOVE.L D0,(A1,D5.L*4)
246 000001CE' dnotinimg32_030:
247 000001CE' 51C9 FFA0 DBF D1,deduc32_030
248
249 000001D2' 2C5F MOVE.L (SP)+,A6 ; Restore bh_xd
250 000001D4' 528E ADD.L #1,A6 ; bh_xd++
251 000001D6' BCFA 02C2 CMP.W last_xd(PC),A6
252 000001DA' 6F00 FEFC BLE bhl32_l030_sym
253
254 000001DE' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
255 000001E2' 4E75 RTS
256
257 ; 68030 routine for True Color 16bit
258 ; BHL16_68030(short use_sym, void* in, void* out)
259 ; D0, A0 A1
260 000001E4' BHL16_68030:
261 000001E4' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context
262
263 000001E8' 4A40 TST.W D0
264 000001EA' 6600 00AE BNE BHL16_68030_sym
265
266 000001EE' 7E00 MOVEQ.L #0,D7
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 8
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
267 000001F0' 3E3A 02A4 MOVE.W bh_out_x(PC),D7
268 000001F4' DE87 ADD.L D7,D7
269 000001F6' D3C7 ADD.L D7,A1 ; A1-->&out[bh_out_x]
270 INIT_BHL
96 000001F8' 45F9 00000000* + LEA.L pre_cosin,A2
97 000001FE' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
98 00000204' 2A7A 0270 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
99 00000208' 2C7A 0264 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
100 0000020C' 3E3A 0280 + MOVE.W bh_out_w(PC),D7
101 00000210' 5347 + SUBQ.W #1,D7 ; For DBF
271 00000212' bhl16_l030:
272 BH_COMPUTE_CPU bhl16_tpir_030 ; -->D6=0:pixel in range
30 00000212' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 00000214' D080 + ADD.L D0,D0
32 00000216' 5280 + ADDQ.L #1,D0
33 00000218' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
34 0000021A' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 0000021C' 243A 0264 + MOVE.L bh_ref(PC),D2
36 00000220' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 00000222' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
41 00000224' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 00000228' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
44 0000022E' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 00000230' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 00000232' 223A 023E + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 00000236' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 0000023A' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 0000023E' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 00000240' 2800 + MOVE.L D0,D4
53 00000242' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 00000246' 2A01 + MOVE.L D1,D5
55 00000248' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 0000024C' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 0000024E' ECA4 + ASR.L D6,D4
58 00000250' D8BA 0234 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 00000254' 6D 26 + BLT.S bhl16_tpir_030 ; xs < 0: not in range
60 00000256' B87A 023A + CMP.W bh_in_w(PC),D4
61 0000025A' 6C 20 + BGE.S bhl16_tpir_030 ; xs >= bh_in_w: not in range
62 0000025C' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 0000025E' 2800 + MOVE.L D0,D4
65 00000260' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 00000264' 2A01 + MOVE.L D1,D5
67 00000266' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 0000026A' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 0000026C' ECA4 + ASR.L D6,D4
70 0000026E' D8BA 021A + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 00000272' 6D 08 + BLT.S bhl16_tpir_030 ; ys < 0: not in range
72 00000274' B87A 021E + CMP.W bh_in_h(PC),D4
73 00000278' 6C 02 + BGE.S bhl16_tpir_030 ; ys >= bh_in_h: not in range
74 0000027A' 7C00 + MOVEQ.L #0,D6 ; pixel in range
273 0000027C' bhl16_tpir_030:
274 0000027C' 70FF MOVEQ.L #-1,D0 ; Assume out of range
275 0000027E' 4A46 TST.W D6
276 00000280' 66 0A BNE.S bhl16_setpix_030
277 00000282' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys]
278 00000286' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3)
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 9
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
279 00000288' 3030 0A00 MOVE.W (A0,D0.L*2),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs]
280 0000028C' bhl16_setpix_030:
281 0000028C' 32C0 MOVE.W D0,(A1)+
282 0000028E' 528E ADD.L #1,A6 ; bh_xd++
283 00000290' 51CF FF80 DBF D7,bhl16_l030
284
285 00000294' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
286 00000298' 4E75 RTS
287
288 0000029A' BHL16_68030_sym:
289 INIT_BHL_SYM
105 0000029A' 45F9 00000000* + LEA.L pre_cosin,A2
106 000002A0' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
107 000002A6' 2A7A 01CE + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
108 000002AA' 2C7A 01C2 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
109 000002AE' 3E3A 01DE + MOVE.W bh_out_w(PC),D7
110 000002B2' E24F + LSR.W #1,D7 ; loop to bh_out_w/2 counts
111 000002B4' DE4E + ADD.W A6,D7 ; starting from bh_xd
112 000002B6' 33C7 00000000' + MOVE.W D7,last_xd
290 000002BC' bhl16_l030_sym:
291 BH_COMPUTE_CPU bhl16_tpir_030_sym ; -->D6=0:pixel in range
30 000002BC' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 000002BE' D080 + ADD.L D0,D0
32 000002C0' 5280 + ADDQ.L #1,D0
33 000002C2' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
34 000002C4' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 000002C6' 243A 01BA + MOVE.L bh_ref(PC),D2
36 000002CA' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 000002CC' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
41 000002CE' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 000002D2' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
44 000002D8' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 000002DA' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 000002DC' 223A 0194 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 000002E0' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 000002E4' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 000002E8' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 000002EA' 2800 + MOVE.L D0,D4
53 000002EC' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 000002F0' 2A01 + MOVE.L D1,D5
55 000002F2' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 000002F6' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 000002F8' ECA4 + ASR.L D6,D4
58 000002FA' D8BA 018A + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 000002FE' 6D 26 + BLT.S bhl16_tpir_030_sym ; xs < 0: not in range
60 00000300' B87A 0190 + CMP.W bh_in_w(PC),D4
61 00000304' 6C 20 + BGE.S bhl16_tpir_030_sym ; xs >= bh_in_w: not in range
62 00000306' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 00000308' 2800 + MOVE.L D0,D4
65 0000030A' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 0000030E' 2A01 + MOVE.L D1,D5
67 00000310' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 00000314' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 00000316' ECA4 + ASR.L D6,D4
70 00000318' D8BA 0170 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 0000031C' 6D 08 + BLT.S bhl16_tpir_030_sym ; ys < 0: not in range
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 10
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
72 0000031E' B87A 0174 + CMP.W bh_in_h(PC),D4
73 00000322' 6C 02 + BGE.S bhl16_tpir_030_sym ; ys >= bh_in_h: not in range
74 00000324' 7C00 + MOVEQ.L #0,D6 ; pixel in range
292 00000326' bhl16_tpir_030_sym:
293 00000326' 70FF MOVEQ.L #-1,D0 ; Assume out of range
294 00000328' 4A46 TST.W D6
295 0000032A' 66 0A BNE.S bhl16_setpix_030_sym
296 GET_TCPIXEL16 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc
135 0000032C' 2034 4C00 + MOVE.L (A4,D4.L*4),D0
136 00000330' D08B + ADD.L A3,D0
137 00000332' 3030 0A00 + MOVE.W (A0,D0.L*2),D0
297 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)
298 00000336' bhl16_setpix_030_sym:
299 00000336' 2F0E MOVE.L A6,-(SP) ; Save bh_xd
300 00000338' 243A 014C MOVE.L bh_xc(PC),D2 ; D2=bh_xc
301 0000033C' 263A 014C MOVE.L bh_yc(PC),D3 ; D3=bh_yc
302 00000340' DDC2 ADD.L D2,A6 ; A6=bh_xd+bh_xc
303 00000342' 2E3A 012E MOVE.L bh_yd(PC),D7
304 00000346' DE83 ADD.L D3,D7 ; D7=bh_yd+bh_yc
305 SET_TCPIXEL16 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc))
144 00000348' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5
145 0000034C' DA8E + ADD.L A6,D5
146 0000034E' 3380 5A00 + MOVE.W D0,(A1,D5.L*2)
306
307 00000352' 7202 MOVEQ.L #2,D1 ; 3 loops, -1 for DBF
308 00000354' deduc16_030:
309 00000354' 97C2 SUB.L D2,A3 ; We need now bh_xs(A3) and bh_ys(D4) relative to
310 00000356' 9883 SUB.L D3,D4 ; Black Hole center to use R90
311 00000358' 9DC2 SUB.L D2,A6 ; We need now bh_xd(A6) and bh_yd(D7) relative to
312 0000035A' 9E83 SUB.L D3,D7 ; Black Hole center to use R90
313
314 R90 A6,D7,D0 ; Rotate (xd,yd) by PI/4
153 0000035C' 200E + MOVE.L A6,D0
154 0000035E' 4487 + NEG.L D7
155 00000360' 2C47 + MOVE.L D7,A6
156 00000362' 2E00 + MOVE.L D0,D7
315 R90 A3,D4,D0 ; Rotate (xs,ys) by PI/4
153 00000364' 200B + MOVE.L A3,D0
154 00000366' 4484 + NEG.L D4
155 00000368' 2644 + MOVE.L D4,A3
156 0000036A' 2800 + MOVE.L D0,D4
316
317 0000036C' D7C2 ADD.L D2,A3 ; Now we need coords in image raster
318 0000036E' D883 ADD.L D3,D4
319 00000370' DDC2 ADD.L D2,A6
320 00000372' DE83 ADD.L D3,D7
321
322 PIXINIMG A6,D7,bh_in_w(PC),bh_in_h(PC),dnotinimg16_030 ; Check if pixel in dest is within bounds
160 00000374' 4A4E + TST.W A6
161 00000376' 6D 3A + BLT.S dnotinimg16_030
162 00000378' 4A47 + TST.W D7
163 0000037A' 6D 36 + BLT.S dnotinimg16_030
164 0000037C' BCFA 0114 + CMP.W bh_in_w(PC),A6
165 00000380' 6C 30 + BGE.S dnotinimg16_030
166 00000382' BE7A 0110 + CMP.W bh_in_h(PC),D7
167 00000386' 6C 2A + BGE.S dnotinimg16_030
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 11
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
323 00000388' 70FF MOVEQ.L #-1,D0 ; Assume out of range
324 PIXINIMG A3,D4,bh_in_w(PC),bh_in_h(PC),plotdest16_030 ; Check if pixel in src is within bounds
160 0000038A' 4A4B + TST.W A3
161 0000038C' 6D 1A + BLT.S plotdest16_030
162 0000038E' 4A44 + TST.W D4
163 00000390' 6D 16 + BLT.S plotdest16_030
164 00000392' B6FA 00FE + CMP.W bh_in_w(PC),A3
165 00000396' 6C 10 + BGE.S plotdest16_030
166 00000398' B87A 00FA + CMP.W bh_in_h(PC),D4
167 0000039C' 6C 0A + BGE.S plotdest16_030
325 GET_TCPIXEL16 A0,A3,D4,D0 ; A0-->in_ptr, A3=bh_xs+bh_xc, D4=bh_ys+bh_yc
135 0000039E' 2034 4C00 + MOVE.L (A4,D4.L*4),D0
136 000003A2' D08B + ADD.L A3,D0
137 000003A4' 3030 0A00 + MOVE.W (A0,D0.L*2),D0
326 ; D0=GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc)
327 000003A8' plotdest16_030:
328 SET_TCPIXEL16 A1,A6,D7,D0,D5 ; SET_TCPIXEL(out_ptr, bh_xd+bh_xc, bh_yd+bh_yc, GET_TCPIXEL(in_ptr, bh_xs+bh_xc, bh_ys+bh_yc))
144 000003A8' 2A34 7C00 + MOVE.L (A4,D7.L*4),D5
145 000003AC' DA8E + ADD.L A6,D5
146 000003AE' 3380 5A00 + MOVE.W D0,(A1,D5.L*2)
329 000003B2' dnotinimg16_030:
330 000003B2' 51C9 FFA0 DBF D1,deduc16_030
331
332 000003B6' 2C5F MOVE.L (SP)+,A6 ; Restore bh_xd
333 000003B8' 528E ADD.L #1,A6 ; bh_xd++
334 000003BA' BCFA 00DE CMP.W last_xd(PC),A6
335 000003BE' 6F00 FEFC BLE bhl16_l030_sym
336
337 000003C2' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
338 000003C6' 4E75 RTS
339
340 ; 68030 routine for bitplances images, converted to indexes
341 ; BHLInd_68030(short use_sym, void* in, void* out)
342 ; D0, A0 A1
343 000003C8' BHLInd_68030:
344 000003C8' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context
345
346 INIT_BHL
96 000003CC' 45F9 00000000* + LEA.L pre_cosin,A2
97 000003D2' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
98 000003D8' 2A7A 009C + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
99 000003DC' 2C7A 0090 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
100 000003E0' 3E3A 00AC + MOVE.W bh_out_w(PC),D7
101 000003E4' 5347 + SUBQ.W #1,D7 ; For DBF
347 000003E6' bhlind_l030:
348 BH_COMPUTE_CPU bhlind_tpir_030 ; -->D6=0:pixel in range
30 000003E6' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 000003E8' D080 + ADD.L D0,D0
32 000003EA' 5280 + ADDQ.L #1,D0
33 000003EC' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
34 000003EE' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 000003F0' 243A 0090 + MOVE.L bh_ref(PC),D2
36 000003F4' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 000003F6' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
41 000003F8' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 000003FC' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 12
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
44 00000402' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 00000404' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 00000406' 223A 006A + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 0000040A' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 0000040E' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 00000412' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 00000414' 2800 + MOVE.L D0,D4
53 00000416' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 0000041A' 2A01 + MOVE.L D1,D5
55 0000041C' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 00000420' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 00000422' ECA4 + ASR.L D6,D4
58 00000424' D8BA 0060 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 00000428' 6D 26 + BLT.S bhlind_tpir_030 ; xs < 0: not in range
60 0000042A' B87A 0066 + CMP.W bh_in_w(PC),D4
61 0000042E' 6C 20 + BGE.S bhlind_tpir_030 ; xs >= bh_in_w: not in range
62 00000430' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 00000432' 2800 + MOVE.L D0,D4
65 00000434' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 00000438' 2A01 + MOVE.L D1,D5
67 0000043A' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 0000043E' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 00000440' ECA4 + ASR.L D6,D4
70 00000442' D8BA 0046 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 00000446' 6D 08 + BLT.S bhlind_tpir_030 ; ys < 0: not in range
72 00000448' B87A 004A + CMP.W bh_in_h(PC),D4
73 0000044C' 6C 02 + BGE.S bhlind_tpir_030 ; ys >= bh_in_h: not in range
74 0000044E' 7C00 + MOVEQ.L #0,D6 ; pixel in range
349 00000450' bhlind_tpir_030:
350 00000450' 70FF MOVEQ.L #-1,D0 ; Assume out of range
351 00000452' 4A46 TST.W D6
352 00000454' 66 0A BNE.S bhlind_setpix_030
353 00000456' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys]
354 0000045A' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3)
355 0000045C' 1030 0800 MOVE.B (A0,D0.L),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs]
356 00000460' bhlind_setpix_030:
357 00000460' 12C0 MOVE.B D0,(A1)+
358 00000462' 528E ADD.L #1,A6 ; bh_xd++
359 00000464' 51CF FF80 DBF D7,bhlind_l030
360
361 00000468' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
362 0000046C' 4E75 RTS
363
364 0000046E' .EVEN
365 0000046E' bh_xd:
366 0000046E' 0000 0000 DC.L 0
367 00000472' bh_yd:
368 00000472' 0000 0000 DC.L 0
369 00000476' bh_rd2:
370 00000476' 0000 0000 DC.L 0
371 0000047A' bh_xs:
372 0000047A' 0000 0000 DC.L 0
373 0000047E' bh_ys:
374 0000047E' 0000 0000 DC.L 0
375 00000482' bh_ref:
376 00000482' 0000 0000 DC.L 0
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 13
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
377 00000486' bh_xc:
378 00000486' 0000 0000 DC.L 0
379 0000048A' bh_yc:
380 0000048A' 0000 0000 DC.L 0
381 0000048E' bh_out_w:
382 0000048E' 0000 DC.W 0
383 00000490' bh_out_h:
384 00000490' 0000 DC.W 0
385 00000492' bh_in_w:
386 00000492' 0000 DC.W 0
387 00000494' bh_in_h:
388 00000494' 0000 DC.W 0
389 00000496' bh_out_x:
390 00000496' 0000 DC.W 0
391 00000498' bh_out_y:
392 00000498' 0000 DC.W 0
393 0000049A' last_xd:
394 0000049A' 0000 DC.W 0
395
396 ; 68030/FPU routine for True Color 32bit
397 ; BHL32_F68030(short use_sym, void* in, void* out)
398 ; D0, A0 A1
399 0000049C' BHL32_F68030:
400 0000049C' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context
401 000004A0' F227 6800 FMOVE.X FP0,-(SP)
402
403 INIT_BHL
96 000004A4' 45F9 00000000* + LEA.L pre_cosin,A2
97 000004AA' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
98 000004B0' 2A7A FFC4 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
99 000004B4' 2C7A FFB8 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
100 000004B8' 3E3A FFD4 + MOVE.W bh_out_w(PC),D7
101 000004BC' 5347 + SUBQ.W #1,D7 ; For DBF
404 000004BE' bhl32_lf030:
405 BH_COMPUTE_FPU bhl32_tpir_f030 ; -->D6=0:pixel in range
30 000004BE' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 000004C0' D080 + ADD.L D0,D0
32 000004C2' 5280 + ADDQ.L #1,D0
33 000004C4' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
34 000004C6' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 000004C8' 243A FFB8 + MOVE.L bh_ref(PC),D2
36 000004CC' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 000004CE' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
88 000004D0' F201 4000 + FMOVE.L D1,FP0
89 000004D4' F200 0004 + FSQRT FP0
90 000004D8' F201 6000 + FMOVE.L FP0,D1
41 000004DC' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 000004E0' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
44 000004E6' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 000004E8' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 000004EA' 223A FF86 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 000004EE' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 000004F2' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 000004F6' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 000004F8' 2800 + MOVE.L D0,D4
53 000004FA' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 14
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
54 000004FE' 2A01 + MOVE.L D1,D5
55 00000500' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 00000504' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 00000506' ECA4 + ASR.L D6,D4
58 00000508' D8BA FF7C + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 0000050C' 6D 26 + BLT.S bhl32_tpir_f030 ; xs < 0: not in range
60 0000050E' B87A FF82 + CMP.W bh_in_w(PC),D4
61 00000512' 6C 20 + BGE.S bhl32_tpir_f030 ; xs >= bh_in_w: not in range
62 00000514' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 00000516' 2800 + MOVE.L D0,D4
65 00000518' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 0000051C' 2A01 + MOVE.L D1,D5
67 0000051E' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 00000522' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 00000524' ECA4 + ASR.L D6,D4
70 00000526' D8BA FF62 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 0000052A' 6D 08 + BLT.S bhl32_tpir_f030 ; ys < 0: not in range
72 0000052C' B87A FF66 + CMP.W bh_in_h(PC),D4
73 00000530' 6C 02 + BGE.S bhl32_tpir_f030 ; ys >= bh_in_h: not in range
74 00000532' 7C00 + MOVEQ.L #0,D6 ; pixel in range
406 00000534' bhl32_tpir_f030:
407 00000534' 70FF MOVEQ.L #-1,D0 ; Assume out of range
408 00000536' 4A46 TST.W D6
409 00000538' 66 0A BNE.S bhl32_setpix_f030
410 0000053A' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys]
411 0000053E' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3)
412 00000540' 2030 0C00 MOVE.L (A0,D0.L*4),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs]
413 00000544' bhl32_setpix_f030:
414 00000544' 22C0 MOVE.L D0,(A1)+
415 00000546' 528E ADD.L #1,A6 ; bh_xd++
416 00000548' 51CF FF74 DBF D7,bhl32_lf030
417
418 0000054C' F21F 4800 FMOVE.X (SP)+,FP0
419 00000550' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
420 00000554' 4E75 RTS
421
422 ; 68030/FPU routine for True Color 16bit
423 ; BHL16_F68030(short use_sym, void* in, void* out)
424 ; D0, A0 A1
425 00000556' BHL16_F68030:
426 00000556' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context
427 0000055A' F227 6800 FMOVE.X FP0,-(SP)
428
429 INIT_BHL
96 0000055E' 45F9 00000000* + LEA.L pre_cosin,A2
97 00000564' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
98 0000056A' 2A7A FF0A + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
99 0000056E' 2C7A FEFE + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
100 00000572' 3E3A FF1A + MOVE.W bh_out_w(PC),D7
101 00000576' 5347 + SUBQ.W #1,D7 ; For DBF
430 00000578' bhl16_lf030:
431 BH_COMPUTE_FPU bhl16_tpir_f030 ; -->D6=0:pixel in range
30 00000578' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 0000057A' D080 + ADD.L D0,D0
32 0000057C' 5280 + ADDQ.L #1,D0
33 0000057E' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 15
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
34 00000580' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 00000582' 243A FEFE + MOVE.L bh_ref(PC),D2
36 00000586' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 00000588' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
88 0000058A' F201 4000 + FMOVE.L D1,FP0
89 0000058E' F200 0004 + FSQRT FP0
90 00000592' F201 6000 + FMOVE.L FP0,D1
41 00000596' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 0000059A' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
44 000005A0' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 000005A2' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 000005A4' 223A FECC + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 000005A8' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 000005AC' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 000005B0' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 000005B2' 2800 + MOVE.L D0,D4
53 000005B4' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 000005B8' 2A01 + MOVE.L D1,D5
55 000005BA' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 000005BE' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 000005C0' ECA4 + ASR.L D6,D4
58 000005C2' D8BA FEC2 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 000005C6' 6D 26 + BLT.S bhl16_tpir_f030 ; xs < 0: not in range
60 000005C8' B87A FEC8 + CMP.W bh_in_w(PC),D4
61 000005CC' 6C 20 + BGE.S bhl16_tpir_f030 ; xs >= bh_in_w: not in range
62 000005CE' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 000005D0' 2800 + MOVE.L D0,D4
65 000005D2' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 000005D6' 2A01 + MOVE.L D1,D5
67 000005D8' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 000005DC' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 000005DE' ECA4 + ASR.L D6,D4
70 000005E0' D8BA FEA8 + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 000005E4' 6D 08 + BLT.S bhl16_tpir_f030 ; ys < 0: not in range
72 000005E6' B87A FEAC + CMP.W bh_in_h(PC),D4
73 000005EA' 6C 02 + BGE.S bhl16_tpir_f030 ; ys >= bh_in_h: not in range
74 000005EC' 7C00 + MOVEQ.L #0,D6 ; pixel in range
432 000005EE' bhl16_tpir_f030:
433 000005EE' 70FF MOVEQ.L #-1,D0 ; Assume out of range
434 000005F0' 4A46 TST.W D6
435 000005F2' 66 0A BNE.S bhl16_setpix_f030
436 000005F4' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys]
437 000005F8' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs(A3)
438 000005FA' 3030 0A00 MOVE.W (A0,D0.L*2),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs]
439 000005FE' bhl16_setpix_f030:
440 000005FE' 32C0 MOVE.W D0,(A1)+
441 00000600' 528E ADD.L #1,A6 ; bh_xd++
442 00000602' 51CF FF74 DBF D7,bhl16_lf030
443
444 00000606' F21F 4800 FMOVE.X (SP)+,FP0
445 0000060A' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
446 0000060E' 4E75 RTS
447
448 ; 68030/FPU routine for bitplances images, converted to indexes
449 ; BHLInd_F68030(short use_sym, void* in, void* out)
450 ; D0, A0 A1
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 16
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
451 00000610' BHLInd_F68030:
452 00000610' 48E7 FF3E MOVEM.L D0-D7/A2-A6,-(SP) ; Save context
453 00000614' F227 6800 FMOVE.X FP0,-(SP)
454
455 INIT_BHL
96 00000618' 45F9 00000000* + LEA.L pre_cosin,A2
97 0000061E' 2879 00000000* + MOVE.L pre_loffset,A4 ; A4-->preoffset
98 00000624' 2A7A FE50 + MOVE.L bh_rd2(PC),A5 ; A5=bh_rd2
99 00000628' 2C7A FE44 + MOVE.L bh_xd(PC),A6 ; A6=bh_xd
100 0000062C' 3E3A FE60 + MOVE.W bh_out_w(PC),D7
101 00000630' 5347 + SUBQ.W #1,D7 ; For DBF
456 00000632' bhlInd_lf030:
457 BH_COMPUTE_FPU bhlInd_tpir_f030 ; -->D6=0:pixel in range
30 00000632' 200E + MOVE.L A6,D0 ; Remember A6=bh_xd
31 00000634' D080 + ADD.L D0,D0
32 00000636' 5280 + ADDQ.L #1,D0
33 00000638' 220D + MOVE.L A5,D1 ; Remember A5=bh_rd2
34 0000063A' D280 + ADD.L D0,D1 ; bh_rd2(D1)=1+2*bh_xd(D0)
35 0000063C' 243A FE44 + MOVE.L bh_ref(PC),D2
36 00000640' 2A41 + MOVE.L D1,A5 ; Save bh_rd2, free D1
37 00000642' 5281 + ADDQ.L #1,D1 ; We need bh_rd2+1 for divide
88 00000644' F201 4000 + FMOVE.L D1,FP0
89 00000648' F200 0004 + FSQRT FP0
90 0000064C' F201 6000 + FMOVE.L FP0,D1
41 00000650' 4C41 2002 + DIVU.L D1,D2 ; alpha(D2)=bh_ref/(1+bh_rd2)
42 00000654' 0282 0000 3FFF + ANDI.L #ITRIGO_ANGLE_MAX,D2 ; alpha &= ITRIGO_ANGLE_MAX
44 0000065A' E78A + LSL.L #3,D2 ; D2=offset for pre_cosin array
45 0000065C' 200E + MOVE.L A6,D0 ; D0=bh_xd
46 0000065E' 223A FE12 + MOVE.L bh_yd(PC),D1 ; D1=bh_yd
47 00000662' 2632 2804 + MOVE.L 4(A2,D2.L),D3 ; A2->pre_cosin, D3.L=SIN(alpha)
48 00000666' 2432 2800 + MOVE.L (A2,D2.L),D2 ; A2->pre_cosin, D2.L=COS(alpha)
50 0000066A' 7C10 + MOVEQ.L #16,D6 ; Prepare shifts/assume not in range
52 0000066C' 2800 + MOVE.L D0,D4
53 0000066E' 4C02 4800 + MULS.L D2,D4 ; D4=bh_xd * pre_cos[alpha]
54 00000672' 2A01 + MOVE.L D1,D5
55 00000674' 4C03 5800 + MULS.L D3,D5 ; D5=bh_yd * pre_sin[alpha]
56 00000678' 9885 + SUB.L D5,D4 ; D4=bh_xd * pre_cos[alpha] - bh_yd * pre_sin[alpha]
57 0000067A' ECA4 + ASR.L D6,D4
58 0000067C' D8BA FE08 + ADD.L bh_xc(PC),D4 ; D6=16, assume pixel not in range
59 00000680' 6D 26 + BLT.S bhlInd_tpir_f030 ; xs < 0: not in range
60 00000682' B87A FE0E + CMP.W bh_in_w(PC),D4
61 00000686' 6C 20 + BGE.S bhlInd_tpir_f030 ; xs >= bh_in_w: not in range
62 00000688' 2644 + MOVE.L D4,A3 ; A3=bh_xs= (D4 >> 16)
64 0000068A' 2800 + MOVE.L D0,D4
65 0000068C' 4C03 4800 + MULS.L D3,D4 ; D4=bh_xd * pre_sin[alpha]
66 00000690' 2A01 + MOVE.L D1,D5
67 00000692' 4C02 5800 + MULS.L D2,D5 ; D5=bh_yd * pre_cos[alpha]
68 00000696' D885 + ADD.L D5,D4 ; D4=bh_xd * pre_sin[alpha] + bh_yd * pre_cos[alpha]
69 00000698' ECA4 + ASR.L D6,D4
70 0000069A' D8BA FDEE + ADD.L bh_yc(PC),D4 ; D4.L=bh_ys
71 0000069E' 6D 08 + BLT.S bhlInd_tpir_f030 ; ys < 0: not in range
72 000006A0' B87A FDF2 + CMP.W bh_in_h(PC),D4
73 000006A4' 6C 02 + BGE.S bhlInd_tpir_f030 ; ys >= bh_in_h: not in range
74 000006A6' 7C00 + MOVEQ.L #0,D6 ; pixel in range
458 000006A8' bhlInd_tpir_f030:
459 000006A8' 70FF MOVEQ.L #-1,D0 ; Assume out of range
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 17
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
460 000006AA' 4A46 TST.W D6
461 000006AC' 66 0A BNE.S bhlInd_setpix_f030
462 000006AE' 2034 4C00 MOVE.L (A4,D4.L*4),D0 ; D4=bh_ys, D0=pre_loffset[bh_ys]
463 000006B2' D08B ADD.L A3,D0 ; D0=pre_loffset[bh_ys] + bh_xs
464 000006B4' 1030 0800 MOVE.B (A0,D0.L),D0 ; D0=in_ptr[pre_loffset[bh_ys] + bh_xs]
465 000006B8' bhlInd_setpix_f030:
466 000006B8' 12C0 MOVE.B D0,(A1)+
467 000006BA' 528E ADD.L #1,A6 ; bh_xd++
468 000006BC' 51CF FF74 DBF D7,bhlInd_lf030
469
470 000006C0' F21F 4800 FMOVE.X (SP)+,FP0
471 000006C4' 4CDF 7CFF MOVEM.L (SP)+,D0-D7/A2-A6 ; Restore context
472 000006C8' 4E75 RTS
473
474 ; Pre-calculation of cosinus/sinus table using FPU
475 ; void lcosin_fpu(long i, long* pcs)
476 ; D0 A0
477 ; double angle = i*ANGLE_ADD ;
478 ; pcs[0] = 65536.0 * cos( angle ) ;
479 ; pcs[1] = 65536.0 * sin( angle ) ;
480 000006CA' lcosin_fpu:
481 000006CA' F227 E007 FMOVEM.X FP0-FP2,-(SP)
482
483 000006CE' F200 5000 FMOVE D0,FP0
484 ; 3.8349519697141030742952189737299e-4=M_PI/2.0/(double)QUARTER
485 ; For some reason, I did not manage to use EQU with floating point constants
486 000006D2' F23C 4823 3FF3 0000
000006DA' C90F DAA2 2168 C234 FMUL.X #3.8349519697141030742952189737299e-4,FP0
487 000006E2' F200 0131 FSINCOS.X FP0,FP1:FP2
488 000006E6' F23C 48A3 400F 0000
000006EE' 8000 0000 0000 0000 FMUL.X #65536.0,FP1
489 000006F6' F23C 4923 400F 0000
000006FE' 8000 0000 0000 0000 FMUL.X #65536.0,FP2
490 00000706' F218 6080 FMOVE.L FP1,(A0)+
491 0000070A' F210 6100 FMOVE.L FP2,(A0)
492
493 0000070E' F21F D0E0 FMOVEM.X (SP)+,FP0-FP2
494 00000712' 4E75 RTS
PASM 68040 Macro Assembler Version Dec 18 1992 (C) 91 Pure Software Page 18
Source File: H:\PURE_C\PROJECTS\VISION\LDV\SRC\BHOLE\BHOLE.S
Symbols:
========
Name Value Scope Relocation base
BHL16_68030 000001E4 Global TEXT
BHL16_68030_sym 0000029A File TEXT
BHL16_F68030 00000556 Global TEXT
BHL32_68030 00000000 Global TEXT
BHL32_68030_sym 000000B6 File TEXT
BHL32_F68030 0000049C Global TEXT
BHLInd_68030 000003C8 Global TEXT
BHLInd_F68030 00000610 Global TEXT
ITRIGO_ANGLE_MAX 00003FFF File EQUATE
ITRIGO_ARRAY_SIZE 00004000 File EQUATE
QUARTER 00001000 File EQUATE
bh_in_h 00000494 Global TEXT
bh_in_w 00000492 Global TEXT
bh_out_h 00000490 Global TEXT
bh_out_w 0000048E Global TEXT
bh_out_x 00000496 Global TEXT
bh_out_y 00000498 Global TEXT
bh_rd2 00000476 Global TEXT
bh_ref 00000482 Global TEXT
bh_xc 00000486 Global TEXT
bh_xd 0000046E Global TEXT
bh_xs 0000047A Global TEXT
bh_yc 0000048A Global TEXT
bh_yd 00000472 Global TEXT
bh_ys 0000047E Global TEXT
bhl16_l030 00000212 File TEXT
bhl16_l030_sym 000002BC File TEXT
bhl16_lf030 00000578 File TEXT
bhl16_setpix_030 0000028C File TEXT
bhl16_setpix_030_sym 00000336 File TEXT
bhl16_setpix_f030 000005FE File TEXT
bhl16_tpir_030 0000027C File TEXT
bhl16_tpir_030_sym 00000326 File TEXT
bhl16_tpir_f030 000005EE File TEXT
bhl32_l030 0000002E File TEXT
bhl32_l030_sym 000000D8 File TEXT
bhl32_lf030 000004BE File TEXT
bhl32_setpix_030 000000A8 File TEXT
bhl32_setpix_030_sym 00000152 File TEXT
bhl32_setpix_f030 00000544 File TEXT
bhl32_tpir_030 00000098 File TEXT
bhl32_tpir_030_sym 00000142 File TEXT
bhl32_tpir_f030 00000534 File TEXT
bhlInd_lf030 00000632 File TEXT
bhlInd_setpix_f030 000006B8 File TEXT
bhlInd_tpir_f030 000006A8 File TEXT
bhlind_l030 000003E6 File TEXT
bhlind_setpix_030 00000460 File TEXT
bhlind_tpir_030 00000450 File TEXT
deduc16_030 00000354 File TEXT
deduc32_030 00000170 File TEXT
dnotinimg16_030 000003B2 File TEXT
dnotinimg32_030 000001CE File TEXT
last_xd 0000049A File TEXT
lcosin_fpu 000006CA Global TEXT
plotdest16_030 000003A8 File TEXT
plotdest32_030 000001C4 File TEXT
pre_cosin ******** External
pre_loffset ******** External