mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-22 19:31:02 +00:00
237 lines
8.9 KiB
C
237 lines
8.9 KiB
C
|
/*
|
||
|
File: TrapsPrivate.h
|
||
|
|
||
|
Contains: Private System traps, not for public consumption.
|
||
|
|
||
|
Written by: Jim Reekes
|
||
|
|
||
|
Copyright: © 1992-1993 by Apple Computer, Inc., all rights reserved.
|
||
|
|
||
|
Change History (most recent first):
|
||
|
|
||
|
<SM6> 11/10/93 fau Fixed the includes so we can build.
|
||
|
<SM5> 9/12/93 pdw Removing EnqueueHead.
|
||
|
<SM4> 9/12/93 pdw Added EnqueueHead.
|
||
|
<SM3> 9/9/93 pdw Added Time Manager (Microseconds), PRAM and Nanokernel sections.
|
||
|
<2> 6/14/93 JDR Moved Get/SetTrapWordAddress into TrapsPrivate.h
|
||
|
<1> 7/22/92 JDR first checked in
|
||
|
|
||
|
|
||
|
Notes: This file contains the traps allocated by the System, but
|
||
|
are not for use by the public and therefore not for use
|
||
|
by developers. At the time of this writing (the first
|
||
|
check in) all of the private traps are scattered throughout
|
||
|
the source files. The hope in creating this file is that
|
||
|
all of these private traps will be collected into this file.
|
||
|
If you add a new trap, keep this file in trap number order
|
||
|
just like the public Traps.h. Also, it would be helpful
|
||
|
if you add a comment about what the trap is used for.
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef __TRAPSPRIVATE__
|
||
|
#define __TRAPSPRIVATE__
|
||
|
|
||
|
#ifndef __TRAPS__
|
||
|
#include <Traps.h>
|
||
|
#endif
|
||
|
|
||
|
#ifndef __OSUTILS__
|
||
|
#include <OSUtils.h>
|
||
|
#endif
|
||
|
|
||
|
//—————————————————————————————————————————————————————————————————————————————————————
|
||
|
// Trap Dispatcher
|
||
|
|
||
|
#define _GetTrapWordAddress 0xA546 // used by the Link Patch Loader
|
||
|
#define _SetTrapWordAddress 0xA447 // used by the Link Patch Loader
|
||
|
|
||
|
|
||
|
//—————————————————————————————————————————————————————————————————————————————————————
|
||
|
// Memory Manager traps
|
||
|
|
||
|
#define _MoveHLow 0xA09D
|
||
|
|
||
|
|
||
|
//—————————————————————————————————————————————————————————————————————————————————————
|
||
|
// Sound Manager traps
|
||
|
|
||
|
// SndAppDead is called by InitApplZone which vectors to jIAZInit, which then
|
||
|
// vectors to jSoundDead. This is done by the ROMs on Apple Sound Chip machines,
|
||
|
// for some reason that has been lost in history (probably due to the pre-MultiFinder
|
||
|
// assumptions). It is also called by CleanupApplication. So we've got them
|
||
|
// coming and going, but we really only want this trap to be called once a
|
||
|
// process is going away.
|
||
|
|
||
|
#define _SndAppDead 0xA0B8
|
||
|
|
||
|
|
||
|
//—————————————————————————————————————————————————————————————————————————————————————
|
||
|
// Process Manager traps
|
||
|
|
||
|
#define _InitApplication 0xAAFA
|
||
|
#define _CleanupApplication 0xAAFB
|
||
|
#define _SynchIdleTime 0xABF7
|
||
|
|
||
|
|
||
|
//—————————————————————————————————————————————————————————————————————————————————————
|
||
|
// Time Manager traps
|
||
|
|
||
|
#define _Microseconds 0xA193
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
unsigned long Microseconds(void) = {_Microseconds};
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
//—————————————————————————————————————————————————————————————————————————————————————
|
||
|
// PRAM manipulations
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#pragma parameter __D0 ReadXPRam( __D0, __D1, __A0)
|
||
|
OSErr ReadXPRam(short numBytes, short whichByte, void *dest) = {0x4840, 0x3001, _ReadXPRam};
|
||
|
/* 0x4840 swap d0 */
|
||
|
/* 0x3001 move.w d1,d0 */
|
||
|
/* _ReadXPRam */
|
||
|
|
||
|
#pragma parameter __D0 WriteXPRam( __D0, __D1, __A0)
|
||
|
OSErr WriteXPRam(short numBytes, short whichByte, void *src) = {0x4840, 0x3001, _WriteXPRam};
|
||
|
/* 0x4840 swap d0 */
|
||
|
/* 0x3001 move.w d1,d0 */
|
||
|
/* _WriteXPRam */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
//—————————————————————————————————————————————————————————————————————————————————————
|
||
|
// NanoKernel traps
|
||
|
// The dispatch selectors to the PowerPC nano-Kernel
|
||
|
|
||
|
#define _KernelVMDispatch 0xFE0A // NanoKernel VMDispatch d0/a0/a1/d1 <- params, d0 <- result
|
||
|
#define _ToolBoxCoprocessorNop 0xFC00 // NOP if Toolbox Coprocessor Exists, else F-Trap
|
||
|
|
||
|
// Accelerations of the SANE Floating Point Package
|
||
|
|
||
|
#define _DecodeSANEop 0xFC01
|
||
|
#define _ExitSANEop 0xFC02
|
||
|
#define _LoadArg1Extended 0xFC03
|
||
|
#define _LoadArg2Convert 0xFC04
|
||
|
#define _CopyArg2ToArg1 0xFC05
|
||
|
#define _CheckResultArg1 0xFC06
|
||
|
#define _StoreArg1Extended 0xFC07
|
||
|
#define _StoreArg1Double 0xFC08
|
||
|
#define _StoreArg1Single 0xFC09
|
||
|
#define _FloatAdd 0xFC0A
|
||
|
#define _FloatSub 0xFC0B
|
||
|
#define _FloatMul 0xFC0C
|
||
|
#define _FloatDiv 0xFC0D
|
||
|
#define _FloatRem 0xFC0E
|
||
|
#define _FloatSqrt 0xFC0F
|
||
|
|
||
|
|
||
|
// Accelerations of the return/exit path of the OS A-Trap dispatcher.
|
||
|
|
||
|
#define _ATrapOSExit 0xFC10 // accelerated return path of normal OS A-trap
|
||
|
#define _ATrapOSNoA0Exit 0xFC11 // accelerated return path of No A0 OS A-trap
|
||
|
|
||
|
|
||
|
// Accelerations for BlockMove.
|
||
|
|
||
|
#define _MoveBytes 0xFC12 // accelerate BlockMove, use DCBZ for writes
|
||
|
#define _MoveBytesNoDCBZ 0xFC13 // accelerate BlockMove, don't use DCBZ instruction
|
||
|
|
||
|
#define _RiscCoprocessorNop 0xFE00 // NOP if RISC Coprocessor Exists, else F-Trap
|
||
|
#define _ExecuteRiscContext 0xFE03 // (a7) points to NativeContextBlock
|
||
|
|
||
|
// Move From/To Emulator Control Register (ECR)
|
||
|
|
||
|
#define _MoveFromECR 0xFE04 // d0 <- Register Number, A0 <- Register Value
|
||
|
#define _MoveToECR 0xFE05 // d0 <- Register Number, A0 <- Register Value
|
||
|
|
||
|
#define _VMDispatch 0xFE0A // d0/a0/a1/d1 <- params, d0 <- result
|
||
|
#define _HandleMixedModeFault 0xFE07 // Handle Mixed Mode Interrupts and Page Faults
|
||
|
#define _ReadTimeBase32 0xFE08 // d0 <- lower 32 bits of 64 bit time base
|
||
|
#define _ReadTimeBase64 0xFE09 // a0 <- upper 32 bits, d0 <- lower 32 bits
|
||
|
#define _MixedMode 0xFEED // Suspend Emulation, Call Mixed Mode Switcher
|
||
|
|
||
|
|
||
|
// KernelVMDispatch Routine Selectors
|
||
|
|
||
|
enum {
|
||
|
mmuInit = 0, // selector for mmuInit
|
||
|
mmuUnInit = 1, // selector for mmuUnInit
|
||
|
mmuFinalInit = 2, // selector for mmuFinalInit
|
||
|
|
||
|
mmuIsResident = 3, // selector for mmuIsResident
|
||
|
mmuIsUnmodified = 4, // selector for mmuIsUnmodified
|
||
|
mmuIsInited = 5, // selector for mmuIsInited
|
||
|
mmuShouldClean = 6, // selector for mmuShouldClean
|
||
|
mmuMarkResident = 7, // selector for mmuMarkResident
|
||
|
mmuMarkBacking = 8, // selector for mmuMarkBacking
|
||
|
mmuMarkCleanUnused = 9, // selector for mmuMarkCleanUnused
|
||
|
mmuGetPhysicalPage = 10, // selector for mmuGetPhysicalPage
|
||
|
mmuGetPhysicalAddress = 11, // selector for mmuGetPhysicalAddress
|
||
|
|
||
|
mmuExchangePages = 12, // selector for mmuExchangePages
|
||
|
mmuReload = 13, // selector for mmuReload
|
||
|
mmuFlushAddressTranslationCache = 14, // selector for mmuFlushAddressTranslationCache
|
||
|
mmuFlushDataCache = 15, // selector for mmuFlushDataCache
|
||
|
mmuFlushCodeCache = 16, // selector for mmuFlushCodeCache
|
||
|
mmuMakePageCacheable = 17, // selector for mmuMakePageCacheable
|
||
|
mmuMakePageNonCacheable = 18, // selector for mmuMakePageNonCacheable
|
||
|
|
||
|
getPTEntryGivenPage = 19, // selector for _GetPTEntryGivenPage
|
||
|
setPTEntryGivenPage = 20, // selector for _SetPTEntryGivenPage
|
||
|
|
||
|
mmuPTest = 21, // selector for mmuPTest
|
||
|
mmuLRU = 22,
|
||
|
mmuMarkUndefined = 23,
|
||
|
mmuMakePageWriteThrough = 24,
|
||
|
mmuAllocateMemory = 25 // (Page:A0, Count:A1, BusAlignMask:D1)
|
||
|
};
|
||
|
|
||
|
//__________________________________________
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#ifndef ulong
|
||
|
#define ulong unsigned long
|
||
|
#endif
|
||
|
|
||
|
#pragma parameter __D0 nkAllocateMemory( __A0, __A1, __D1)
|
||
|
unsigned long nkAllocateMemory( Ptr, ulong, ulong) = { 0x7000+mmuAllocateMemory, _VMDispatch};
|
||
|
|
||
|
#pragma parameter __D0 nkMakePageCacheable( __A0)
|
||
|
unsigned long nkMakePageCacheable( Ptr) = { 0x7000+mmuMakePageCacheable, _VMDispatch};
|
||
|
|
||
|
#pragma parameter __D0 nkMakePageNonCacheable( __A0)
|
||
|
unsigned long nkMakePageNonCacheable( Ptr) = { 0x7000+mmuMakePageNonCacheable, _VMDispatch};
|
||
|
|
||
|
#pragma parameter __D0 nkMakePageWriteThrough( __A0)
|
||
|
unsigned long nkMakePageWriteThrough( Ptr) = { 0x7000+mmuMakePageWriteThrough, _VMDispatch};
|
||
|
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
//____________________________________________________________________________________________
|
||
|
|
||
|
|
||
|
#endif // already included...
|