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