1 |
|
/* |
2 |
|
* emul_op.cpp - 68k opcodes for ROM patches |
3 |
|
* |
4 |
< |
* SheepShaver (C) 1997-2004 Christian Bauer and Marc Hellwig |
4 |
> |
* SheepShaver (C) 1997-2005 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 |
51 |
|
#include "debug.h" |
52 |
|
|
53 |
|
|
54 |
– |
#if __BEOS__ |
55 |
– |
#define PRECISE_TIMING 1 |
56 |
– |
#else |
57 |
– |
#define PRECISE_TIMING 0 |
58 |
– |
#endif |
59 |
– |
|
60 |
– |
|
54 |
|
// TVector of MakeExecutable |
55 |
< |
static uint32 *MakeExecutableTvec; |
55 |
> |
static uint32 MakeExecutableTvec; |
56 |
|
|
57 |
|
|
58 |
|
/* |
252 |
|
InstallDrivers(); |
253 |
|
|
254 |
|
// Patch MakeExecutable() |
255 |
< |
MakeExecutableTvec = (uint32 *)FindLibSymbol("\023PrivateInterfaceLib", "\016MakeExecutable"); |
256 |
< |
D(bug("MakeExecutable TVECT at %p\n", MakeExecutableTvec)); |
257 |
< |
MakeExecutableTvec[0] = htonl(NativeFunction(NATIVE_MAKE_EXECUTABLE)); |
255 |
> |
MakeExecutableTvec = FindLibSymbol("\023PrivateInterfaceLib", "\016MakeExecutable"); |
256 |
> |
D(bug("MakeExecutable TVECT at %08x\n", MakeExecutableTvec)); |
257 |
> |
WriteMacInt32(MakeExecutableTvec, NativeFunction(NATIVE_MAKE_EXECUTABLE)); |
258 |
|
#if !EMULATED_PPC |
259 |
< |
MakeExecutableTvec[1] = (uint32)TOC; |
259 |
> |
WriteMacInt32(MakeExecutableTvec + 4, (uint32)TOC); |
260 |
|
#endif |
261 |
|
|
262 |
|
// Patch DebugStr() |
263 |
< |
static const uint16 proc[] = { |
264 |
< |
PW(M68K_EMUL_OP_DEBUG_STR), |
265 |
< |
PW(0x4e74), // rtd #4 |
266 |
< |
PW(0x0004) |
263 |
> |
static const uint8 proc_template[] = { |
264 |
> |
M68K_EMUL_OP_DEBUG_STR >> 8, M68K_EMUL_OP_DEBUG_STR, |
265 |
> |
0x4e, 0x74, // rtd #4 |
266 |
> |
0x00, 0x04 |
267 |
|
}; |
268 |
< |
WriteMacInt32(0x1dfc, (uint32)proc); |
268 |
> |
BUILD_SHEEPSHAVER_PROCEDURE(proc); |
269 |
> |
WriteMacInt32(0x1dfc, proc); |
270 |
|
break; |
271 |
|
} |
272 |
|
|
291 |
|
WriteMacInt32(KernelDataAddr + 0x1b04, DR_CACHE_BASE); |
292 |
|
WriteMacInt32(KernelDataAddr + 0x1b00, DR_EMULATOR_BASE); |
293 |
|
memcpy((void *)DR_EMULATOR_BASE, (void *)(ROM_BASE + 0x370000), DR_EMULATOR_SIZE); |
294 |
< |
MakeExecutable(0, (void *)DR_EMULATOR_BASE, DR_EMULATOR_SIZE); |
294 |
> |
MakeExecutable(0, DR_EMULATOR_BASE, DR_EMULATOR_SIZE); |
295 |
|
} |
296 |
|
break; |
297 |
|
|