1 |
|
/* |
2 |
|
* macos_util.h - MacOS definitions/utility functions |
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 |
22 |
|
#define MACOS_UTIL_H |
23 |
|
|
24 |
|
#include "cpu_emulation.h" |
25 |
+ |
#include "thunks.h" |
26 |
+ |
#include <stddef.h> |
27 |
|
|
28 |
|
|
29 |
|
/* |
305 |
|
typedef uint32 ProcInfoType; |
306 |
|
typedef int8 ISAType; |
307 |
|
typedef uint16 RoutineFlagsType; |
308 |
< |
typedef long (*ProcPtr)(); |
308 |
> |
typedef uint32 ProcPtr; |
309 |
|
typedef uint8 RDFlagsType; |
310 |
|
|
311 |
|
struct RoutineRecord { |
329 |
|
RoutineRecord routineRecords[1]; /* The individual routines */ |
330 |
|
}; |
331 |
|
|
332 |
< |
#define BUILD_PPC_ROUTINE_DESCRIPTOR(procInfo, procedure) \ |
333 |
< |
{ \ |
334 |
< |
htons(0xAAFE), /* Mixed Mode A-Trap */ \ |
335 |
< |
7, /* version */ \ |
336 |
< |
0, /* RD Flags - not dispatched */ \ |
337 |
< |
0, /* reserved 1 */ \ |
338 |
< |
0, /* reserved 2 */ \ |
339 |
< |
0, /* selector info */ \ |
340 |
< |
0, /* number of routines */ \ |
341 |
< |
{ /* It's an array */ \ |
342 |
< |
{ /* It's a struct */ \ |
343 |
< |
htonl(procInfo), /* the ProcInfo */ \ |
344 |
< |
0, /* reserved */ \ |
345 |
< |
1, /* ISA and RTA */ \ |
344 |
< |
htons(0 | /* Flags - it's absolute addr */\ |
345 |
< |
0 | /* It's prepared */ \ |
346 |
< |
4 ), /* Always use native ISA */ \ |
347 |
< |
(ProcPtr)htonl((uint32)procedure), /* the procedure */ \ |
348 |
< |
0, /* reserved */ \ |
349 |
< |
0 /* Not dispatched */ \ |
350 |
< |
} \ |
351 |
< |
} \ |
332 |
> |
struct SheepRoutineDescriptor |
333 |
> |
: public SheepVar |
334 |
> |
{ |
335 |
> |
SheepRoutineDescriptor(ProcInfoType procInfo, uint32 procedure) |
336 |
> |
: SheepVar(sizeof(RoutineDescriptor)) |
337 |
> |
{ |
338 |
> |
const uintptr desc = addr(); |
339 |
> |
Mac_memset(desc, 0, sizeof(RoutineDescriptor)); |
340 |
> |
WriteMacInt16(desc + offsetof(RoutineDescriptor, goMixedModeTrap), 0xAAFE); |
341 |
> |
WriteMacInt8 (desc + offsetof(RoutineDescriptor, version), 7); |
342 |
> |
WriteMacInt32(desc + offsetof(RoutineDescriptor, routineRecords[0].procInfo), procInfo); |
343 |
> |
WriteMacInt8 (desc + offsetof(RoutineDescriptor, routineRecords[0].ISA), 1); |
344 |
> |
WriteMacInt16(desc + offsetof(RoutineDescriptor, routineRecords[0].routineFlags), 0 | 0 | 4); |
345 |
> |
WriteMacInt32(desc + offsetof(RoutineDescriptor, routineRecords[0].procDescriptor), procedure); |
346 |
|
} |
347 |
+ |
}; |
348 |
|
|
349 |
|
|
350 |
|
// Functions |