1 |
|
/* |
2 |
|
* emul_op.h - 68k opcodes for ROM patches |
3 |
|
* |
4 |
< |
* SheepShaver (C) 1997-2002 Christian Bauer and Marc Hellwig |
4 |
> |
* SheepShaver (C) 1997-2004 Christian Bauer and Marc Hellwig |
5 |
|
* |
6 |
|
* This program is free software; you can redistribute it and/or modify |
7 |
|
* it under the terms of the GNU General Public License as published by |
28 |
|
const uint32 POWERPC_BCTR = 0x4e800420; |
29 |
|
const uint32 POWERPC_EMUL_OP = 0x18000000; // Base opcode for EMUL_OP opcodes (only used with PPC emulation) |
30 |
|
|
31 |
– |
enum { // Selectors for NATIVE_EXEC callbacks (only used with PPC emulation) |
32 |
– |
NATIVE_PATCH_NAME_REGISTRY, |
33 |
– |
NATIVE_VIDEO_INSTALL_ACCEL, |
34 |
– |
NATIVE_VIDEO_VBL, |
35 |
– |
NATIVE_VIDEO_DO_DRIVER_IO, |
36 |
– |
NATIVE_ETHER_IRQ, |
37 |
– |
NATIVE_ETHER_INIT, |
38 |
– |
NATIVE_ETHER_TERM, |
39 |
– |
NATIVE_ETHER_OPEN, |
40 |
– |
NATIVE_ETHER_CLOSE, |
41 |
– |
NATIVE_ETHER_WPUT, |
42 |
– |
NATIVE_ETHER_RSRV, |
43 |
– |
NATIVE_SERIAL_NOTHING, |
44 |
– |
NATIVE_SERIAL_OPEN, |
45 |
– |
NATIVE_SERIAL_PRIME_IN, |
46 |
– |
NATIVE_SERIAL_PRIME_OUT, |
47 |
– |
NATIVE_SERIAL_CONTROL, |
48 |
– |
NATIVE_SERIAL_STATUS, |
49 |
– |
NATIVE_SERIAL_CLOSE, |
50 |
– |
NATIVE_GET_RESOURCE, |
51 |
– |
NATIVE_GET_1_RESOURCE, |
52 |
– |
NATIVE_GET_IND_RESOURCE, |
53 |
– |
NATIVE_GET_1_IND_RESOURCE, |
54 |
– |
NATIVE_R_GET_RESOURCE, |
55 |
– |
NATIVE_DISABLE_INTERRUPT, |
56 |
– |
NATIVE_ENABLE_INTERRUPT, |
57 |
– |
NATIVE_MAKE_EXECUTABLE, |
58 |
– |
NATIVE_OP_MAX |
59 |
– |
}; |
60 |
– |
#define POWERPC_NATIVE_OP(SELECTOR) NativeOpTable[SELECTOR] |
61 |
– |
#define POWERPC_NATIVE_OP_FUNC(SELECTOR) ((uint32)(uintptr)&POWERPC_NATIVE_OP(SELECTOR)) |
62 |
– |
extern const uint32 NativeOpTable[NATIVE_OP_MAX]; |
63 |
– |
|
31 |
|
// 68k opcodes |
32 |
|
const uint16 M68K_ILLEGAL = 0x4afc; |
33 |
|
const uint16 M68K_NOP = 0x4e71; |
47 |
|
OP_ADBOP, OP_INSTIME, OP_RMVTIME, OP_PRIMETIME, OP_MICROSECONDS, OP_PUT_SCRAP, OP_GET_SCRAP, |
48 |
|
OP_DEBUG_STR, OP_INSTALL_DRIVERS, OP_NAME_REGISTRY, OP_RESET, OP_IRQ, |
49 |
|
OP_SCSI_DISPATCH, OP_SCSI_ATOMIC, |
50 |
< |
OP_NTRB_17_PATCH, OP_NTRB_17_PATCH2, OP_NTRB_17_PATCH3, OP_CHECKLOAD, |
51 |
< |
OP_EXTFS_COMM, OP_EXTFS_HFS, OP_IDLE_TIME, |
50 |
> |
OP_NTRB_17_PATCH, OP_NTRB_17_PATCH2, OP_NTRB_17_PATCH3, OP_NTRB_17_PATCH4, OP_CHECKLOAD, |
51 |
> |
OP_EXTFS_COMM, OP_EXTFS_HFS, OP_IDLE_TIME, OP_IDLE_TIME_2, |
52 |
|
OP_MAX |
53 |
|
}; |
54 |
|
const uint16 M68K_EMUL_RETURN = 0xfe40; // Extended opcodes |
99 |
|
const uint16 M68K_EMUL_OP_NTRB_17_PATCH = M68K_EMUL_BREAK + OP_NTRB_17_PATCH; |
100 |
|
const uint16 M68K_EMUL_OP_NTRB_17_PATCH2 = M68K_EMUL_BREAK + OP_NTRB_17_PATCH2; |
101 |
|
const uint16 M68K_EMUL_OP_NTRB_17_PATCH3 = M68K_EMUL_BREAK + OP_NTRB_17_PATCH3; |
102 |
+ |
const uint16 M68K_EMUL_OP_NTRB_17_PATCH4 = M68K_EMUL_BREAK + OP_NTRB_17_PATCH4; |
103 |
|
const uint16 M68K_EMUL_OP_CHECKLOAD = M68K_EMUL_BREAK + OP_CHECKLOAD; |
104 |
|
const uint16 M68K_EMUL_OP_EXTFS_COMM = M68K_EMUL_BREAK + OP_EXTFS_COMM; |
105 |
|
const uint16 M68K_EMUL_OP_EXTFS_HFS = M68K_EMUL_BREAK + OP_EXTFS_HFS; |
106 |
|
const uint16 M68K_EMUL_OP_IDLE_TIME = M68K_EMUL_BREAK + OP_IDLE_TIME; |
107 |
+ |
const uint16 M68K_EMUL_OP_IDLE_TIME_2 = M68K_EMUL_BREAK + OP_IDLE_TIME_2; |
108 |
|
|
109 |
|
extern "C" void EmulOp(M68kRegisters *r, uint32 pc, int selector); |
110 |
|
|