37 |
|
|
38 |
|
|
39 |
|
/* NativeOp instruction format: |
40 |
< |
+------------+--------------------------+--+----------+------------+ |
41 |
< |
| 6 | |FN| OP | 2 | |
42 |
< |
+------------+--------------------------+--+----------+------------+ |
43 |
< |
0 5 |6 19 20 21 25 26 31 |
40 |
> |
+------------+-------------------------+--+-----------+------------+ |
41 |
> |
| 6 | |FN| OP | 2 | |
42 |
> |
+------------+-------------------------+--+-----------+------------+ |
43 |
> |
0 5 |6 18 19 20 25 26 31 |
44 |
|
*/ |
45 |
|
|
46 |
< |
#define POWERPC_NATIVE_OP(LR, OP) \ |
47 |
< |
(POWERPC_EMUL_OP | ((LR) << 11) | (((uint32)OP) << 6) | 2) |
46 |
> |
#define POWERPC_NATIVE_OP(FN, OP) \ |
47 |
> |
(POWERPC_EMUL_OP | ((FN) << 12) | (((uint32)OP) << 6) | 2) |
48 |
|
|
49 |
|
/* |
50 |
|
* Return the fake PowerPC opcode to handle specified native code |
55 |
|
{ |
56 |
|
uint32 opcode; |
57 |
|
switch (selector) { |
58 |
– |
case NATIVE_DISABLE_INTERRUPT: |
59 |
– |
case NATIVE_ENABLE_INTERRUPT: |
58 |
|
case NATIVE_CHECK_LOAD_INVOC: |
59 |
|
opcode = POWERPC_NATIVE_OP(0, selector); |
60 |
|
break; |
62 |
|
case NATIVE_VIDEO_INSTALL_ACCEL: |
63 |
|
case NATIVE_VIDEO_VBL: |
64 |
|
case NATIVE_VIDEO_DO_DRIVER_IO: |
65 |
+ |
case NATIVE_ETHER_AO_GET_HWADDR: |
66 |
+ |
case NATIVE_ETHER_AO_ADD_MULTI: |
67 |
+ |
case NATIVE_ETHER_AO_DEL_MULTI: |
68 |
+ |
case NATIVE_ETHER_AO_SEND_PACKET: |
69 |
|
case NATIVE_ETHER_IRQ: |
70 |
|
case NATIVE_ETHER_INIT: |
71 |
|
case NATIVE_ETHER_TERM: |
91 |
|
case NATIVE_FILLRECT_HOOK: |
92 |
|
case NATIVE_BITBLT: |
93 |
|
case NATIVE_INVRECT: |
94 |
< |
case NATIVE_FILLRECT_8: |
93 |
< |
case NATIVE_FILLRECT_32: |
94 |
> |
case NATIVE_FILLRECT: |
95 |
|
opcode = POWERPC_NATIVE_OP(1, selector); |
96 |
|
break; |
97 |
|
default: |
153 |
|
assert(xlm_index != -1 && check_load_invoc_index != -1); |
154 |
|
|
155 |
|
uint32 check_load_invoc_opcode = NativeOpcode(NATIVE_CHECK_LOAD_INVOC); |
156 |
< |
uintptr base; |
156 |
> |
uint32 base; |
157 |
|
|
158 |
|
// GetResource() |
159 |
|
get_resource_func = base = SheepMem::Reserve(get_resource_template_size); |
219 |
|
native_op[NATIVE_R_GET_RESOURCE].func = r_get_resource_func; |
220 |
|
#endif |
221 |
|
#else |
222 |
< |
#if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) |
222 |
> |
#if defined(__linux__) || defined(__NetBSD__) || (defined(__APPLE__) && defined(__MACH__)) |
223 |
|
#define DEFINE_NATIVE_OP(ID, FUNC) do { \ |
224 |
|
uintptr base = SheepMem::Reserve(8); \ |
225 |
|
WriteMacInt32(base + 0, (uint32)FUNC); \ |
226 |
< |
WriteMacInt32(base + 4, 0); /*Fake TVECT*/ \ |
226 |
> |
WriteMacInt32(base + 4, (uint32)TOC); \ |
227 |
|
native_op[ID].tvect = base; \ |
228 |
|
native_op[ID].func = (uint32)FUNC; \ |
229 |
|
} while (0) |
240 |
|
DEFINE_NATIVE_OP(NATIVE_VIDEO_INSTALL_ACCEL, VideoInstallAccel); |
241 |
|
DEFINE_NATIVE_OP(NATIVE_VIDEO_VBL, VideoVBL); |
242 |
|
DEFINE_NATIVE_OP(NATIVE_VIDEO_DO_DRIVER_IO, VideoDoDriverIO); |
243 |
+ |
DEFINE_NATIVE_OP(NATIVE_ETHER_AO_GET_HWADDR, AO_get_ethernet_address); |
244 |
+ |
DEFINE_NATIVE_OP(NATIVE_ETHER_AO_ADD_MULTI, AO_enable_multicast); |
245 |
+ |
DEFINE_NATIVE_OP(NATIVE_ETHER_AO_DEL_MULTI, AO_disable_multicast); |
246 |
+ |
DEFINE_NATIVE_OP(NATIVE_ETHER_AO_SENDPACKET, AO_transmit_packet); |
247 |
|
DEFINE_NATIVE_OP(NATIVE_ETHER_IRQ, EtherIRQ); |
248 |
|
DEFINE_NATIVE_OP(NATIVE_ETHER_INIT, InitStreamModule); |
249 |
|
DEFINE_NATIVE_OP(NATIVE_ETHER_TERM, TerminateStreamModule); |
261 |
|
DEFINE_NATIVE_OP(NATIVE_MAKE_EXECUTABLE, MakeExecutable); |
262 |
|
DEFINE_NATIVE_OP(NATIVE_SYNC_HOOK, NQD_sync_hook); |
263 |
|
DEFINE_NATIVE_OP(NATIVE_BITBLT_HOOK, NQD_bitblt_hook); |
264 |
< |
// DEFINE_NATIVE_OP(NATIVE_FILLRECT_HOOK, NQD_fillrect_hook); |
264 |
> |
DEFINE_NATIVE_OP(NATIVE_FILLRECT_HOOK, NQD_fillrect_hook); |
265 |
|
DEFINE_NATIVE_OP(NATIVE_BITBLT, NQD_bitblt); |
266 |
< |
// DEFINE_NATIVE_OP(NATIVE_INVRECT, NQD_invrect); |
267 |
< |
// DEFINE_NATIVE_OP(NATIVE_FILLRECT_8, NQD_fillrect8); |
263 |
< |
// DEFINE_NATIVE_OP(NATIVE_FILLRECT_32, NQD_fillrect32); |
266 |
> |
DEFINE_NATIVE_OP(NATIVE_INVRECT, NQD_invrect); |
267 |
> |
DEFINE_NATIVE_OP(NATIVE_FILLRECT, NQD_fillrect); |
268 |
|
#undef DEFINE_NATIVE_OP |
269 |
|
#endif |
270 |
|
|