mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-11-03 05:04:29 +00:00
135 lines
2.8 KiB
C
135 lines
2.8 KiB
C
|
/************************************************************
|
||
|
|
||
|
Created: Friday, August 2, 1991 at 3:45 PM
|
||
|
RTLib.h
|
||
|
C Interface to the Macintosh Libraries
|
||
|
|
||
|
|
||
|
Copyright Apple Computer, Inc. 1990-1991
|
||
|
All rights reserved
|
||
|
This file is used in these builds: ROM System
|
||
|
|
||
|
|
||
|
Change History (most recent first):
|
||
|
|
||
|
<2> 8/8/91 JL Updated copyright. Standardizing the file to meet ANSI and DSG
|
||
|
standards.
|
||
|
|
||
|
To Do:
|
||
|
************************************************************/
|
||
|
|
||
|
#ifndef __RTLib__
|
||
|
#define __RTLib__
|
||
|
|
||
|
#ifndef __TYPES__
|
||
|
#include <Types.h>
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* Error Codes */
|
||
|
|
||
|
enum { eRTNoErr=0, eRTBadVersion=2, eRTInvalidOp=4, eRTInvalidJTPtr=6 };
|
||
|
|
||
|
|
||
|
/* Action Codes */
|
||
|
|
||
|
enum { kRTSysErr=0, kRTRetry=1, kRTContinue=2 };
|
||
|
|
||
|
|
||
|
/* Runtime Operations */
|
||
|
|
||
|
enum { kRTGetVersion=10, kRTGetVersionA5=11,
|
||
|
kRTGetJTAddress=12, kRTGetJTAddressA5=13,
|
||
|
kRTSetPreLoad=14, kRTSetPreLoadA5=15,
|
||
|
kRTSetSegLoadErr=16, kRTSetSegLoadErrA5=17,
|
||
|
kRTSetPostLoad=18, kRTSetPostLoadA5=19,
|
||
|
kRTSetPreUnload=20, kRTSetPreUnloadA5=21,
|
||
|
kRTPreLaunch=22, kRTPostLaunch=23
|
||
|
};
|
||
|
|
||
|
|
||
|
/* Version and Jump Table Entry Address Parameters */
|
||
|
|
||
|
struct RTGetVersionParam {
|
||
|
unsigned short fVersion;
|
||
|
};
|
||
|
|
||
|
typedef struct RTGetVersionParam RTGetVersionParam;
|
||
|
|
||
|
|
||
|
struct RTGetJTAddrParam {
|
||
|
void* fJTAddr;
|
||
|
void* fCodeAddr;
|
||
|
};
|
||
|
|
||
|
typedef struct RTGetJTAddrParam RTGetJTAddrParam;
|
||
|
|
||
|
|
||
|
/* RTState Definition */
|
||
|
|
||
|
struct RTState {
|
||
|
unsigned short fVersion; /* run-time version */
|
||
|
void* fSP; /* SP: &-of user return address */
|
||
|
void* fJTAddr; /* PC: &-of called jump table entry */
|
||
|
long fRegisters[15]; /* registers D0-D7 and A0-A6 when */
|
||
|
/* _LoadSeg was called */
|
||
|
short fSegNo; /* segment number */
|
||
|
ResType fSegType; /* segment type (normally 'CODE') */
|
||
|
long fSegSize; /* segment size */
|
||
|
Boolean fSegInCore; /* true if segment is in memory */
|
||
|
Boolean fReserved1; /* (reserved for future use) */
|
||
|
OSErr fOSErr; /* error number */
|
||
|
long fReserved2; /* (reserved for future use) */
|
||
|
};
|
||
|
|
||
|
typedef struct RTState RTState;
|
||
|
|
||
|
|
||
|
/* Version Definitions */
|
||
|
|
||
|
#define kVersion32bit 0xFFFF
|
||
|
#define kVersion16bit 0x0000
|
||
|
|
||
|
|
||
|
/* User Handler Definition */
|
||
|
|
||
|
typedef pascal short (*SegLoadHdlrPtr) (RTState* state);
|
||
|
|
||
|
|
||
|
/* Segment Loader Hook Parameters */
|
||
|
|
||
|
struct RTSetSegLoadParam {
|
||
|
SegLoadHdlrPtr fUserHdlr;
|
||
|
SegLoadHdlrPtr fOldUserHdlr;
|
||
|
};
|
||
|
|
||
|
typedef struct RTSetSegLoadParam RTSetSegLoadParam;
|
||
|
|
||
|
|
||
|
/* Runtime Parameter Block */
|
||
|
|
||
|
struct RTPB {
|
||
|
short fOperation;
|
||
|
void* fA5;
|
||
|
union {
|
||
|
RTGetVersionParam fVersionParam;
|
||
|
RTGetJTAddrParam fJTAddrParam;
|
||
|
RTSetSegLoadParam fSegLoadParam;
|
||
|
} fRTParam;
|
||
|
};
|
||
|
|
||
|
typedef struct RTPB RTPB;
|
||
|
|
||
|
pascal OSErr Runtime (RTPB* runtime_parms);
|
||
|
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __RTLib__ */
|
||
|
|