mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-10 08:08:36 +02:00
1734 lines
40 KiB
PHP
1734 lines
40 KiB
PHP
{
|
||
This file is part of the Free Pascal run time library.
|
||
|
||
exec definitions (V50) for MorphOS/PowerPC
|
||
Copyright (c) 2002 The MorphOS Development Team, All Rights Reserved.
|
||
|
||
Free Pascal conversion
|
||
Copyright (c) 2004 Karoly Balogh for Genesi S.a.r.l. <www.genesi.lu>
|
||
|
||
See the file COPYING.FPC, included in this distribution,
|
||
for details about the copyright.
|
||
|
||
This program is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
**********************************************************************}
|
||
|
||
{$include emuld.inc}
|
||
{$include utild1.inc}
|
||
|
||
|
||
{ * exec node definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PNode = ^TNode;
|
||
TNode = packed record
|
||
ln_Succ: PNode;
|
||
ln_Pred: PNode;
|
||
ln_Type: Byte;
|
||
ln_Pri : ShortInt;
|
||
ln_Name: PAnsiChar;
|
||
end;
|
||
|
||
type
|
||
PMinNode = ^TMinNode;
|
||
TMinNode = packed record
|
||
mln_Succ: PMinNode;
|
||
mln_Pred: PMinNode;
|
||
end;
|
||
|
||
|
||
const
|
||
NT_UNKNOWN = 0;
|
||
NT_TASK = 1;
|
||
NT_INTERRUPT = 2;
|
||
NT_DEVICE = 3;
|
||
NT_MSGPORT = 4;
|
||
NT_MESSAGE = 5;
|
||
NT_FREEMSG = 6;
|
||
NT_REPLYMSG = 7;
|
||
NT_RESOURCE = 8;
|
||
NT_LIBRARY = 9;
|
||
NT_MEMORY = 10;
|
||
NT_SOFTINT = 11;
|
||
NT_FONT = 12;
|
||
NT_PROCESS = 13;
|
||
NT_SEMAPHORE = 14;
|
||
NT_SIGNALSEM = 15;
|
||
NT_BOOTNODE = 16;
|
||
NT_KICKMEM = 17;
|
||
NT_GRAPHICS = 18;
|
||
NT_DEATHMESSAGE = 19;
|
||
NT_USER = 254;
|
||
NT_EXTENDED = 255;
|
||
|
||
|
||
|
||
{ * exec list definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PList = ^TList;
|
||
TList = packed record
|
||
lh_Head : PNode;
|
||
lh_Tail : PNode;
|
||
lh_TailPred: PNode;
|
||
lh_Type : Byte;
|
||
lh_pad : Byte;
|
||
end;
|
||
|
||
type
|
||
PMinList = ^TMinList;
|
||
TMinList = packed record
|
||
mlh_Head : PMinNode;
|
||
mlh_Tail : PMinNode;
|
||
mlh_TailPred: PMinNode;
|
||
end;
|
||
|
||
|
||
|
||
{ * exec alert definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
const
|
||
ACPU_BusErr = $80000002;
|
||
ACPU_AddressErr = $80000003;
|
||
ACPU_InstErr = $80000004;
|
||
ACPU_DivZero = $80000005;
|
||
ACPU_CHK = $80000006;
|
||
ACPU_TRAPV = $80000007;
|
||
ACPU_PrivErr = $80000008;
|
||
ACPU_Trace = $80000009;
|
||
ACPU_LineA = $8000000A;
|
||
ACPU_LineF = $8000000B;
|
||
ACPU_Format = $8000000E;
|
||
ACPU_Spurious = $80000018;
|
||
ACPU_AutoVec1 = $80000019;
|
||
ACPU_AutoVec2 = $8000001A;
|
||
ACPU_AutoVec3 = $8000001B;
|
||
ACPU_AutoVec4 = $8000001C;
|
||
ACPU_AutoVec5 = $8000001D;
|
||
ACPU_AutoVec6 = $8000001E;
|
||
ACPU_AutoVec7 = $8000001F;
|
||
|
||
AT_DeadEnd = $80000000;
|
||
AT_Recovery = $00000000;
|
||
|
||
AG_NoMemory = $00010000;
|
||
AG_MakeLib = $00020000;
|
||
AG_OpenLib = $00030000;
|
||
AG_OpenDev = $00040000;
|
||
AG_OpenRes = $00050000;
|
||
AG_IOError = $00060000;
|
||
AG_NoSignal = $00070000;
|
||
AG_BadParm = $00080000;
|
||
AG_CloseLib = $00090000;
|
||
AG_CloseDev = $000A0000;
|
||
AG_ProcCreate = $000B0000;
|
||
AG_MsgPortNotEmpty = $000C0000 { * V50 * };
|
||
|
||
AO_ExecLib = $00008001;
|
||
AO_GraphicsLib = $00008002;
|
||
AO_LayersLib = $00008003;
|
||
AO_Intuition = $00008004;
|
||
AO_MathLib = $00008005;
|
||
AO_DOSLib = $00008007;
|
||
AO_RAMLib = $00008008;
|
||
AO_IconLib = $00008009;
|
||
AO_ExpansionLib = $0000800A;
|
||
AO_DiskfontLib = $0000800B;
|
||
AO_UtilityLib = $0000800C;
|
||
AO_KeyMapLib = $0000800D;
|
||
|
||
AO_AudioDev = $00008010;
|
||
AO_ConsoleDev = $00008011;
|
||
AO_GamePortDev = $00008012;
|
||
AO_KeyboardDev = $00008013;
|
||
AO_TrackDiskDev = $00008014;
|
||
AO_TimerDev = $00008015;
|
||
|
||
AO_CIARsrc = $00008020;
|
||
AO_DiskRsrc = $00008021;
|
||
AO_MiscRsrc = $00008022;
|
||
|
||
AO_BootStrap = $00008030;
|
||
AO_Workbench = $00008031;
|
||
AO_DiskCopy = $00008032;
|
||
AO_GadTools = $00008033;
|
||
AO_Unknown = $00008035;
|
||
|
||
|
||
{ *
|
||
* exec.library
|
||
* }
|
||
const
|
||
AN_ExecLib = $01000000;
|
||
AN_ExcptVect = $01000001;
|
||
AN_BaseChkSum = $01000002;
|
||
AN_LibChkSum = $01000003;
|
||
|
||
AN_MemCorrupt = $81000005;
|
||
AN_IntrMem = $81000006;
|
||
AN_InitAPtr = $01000007;
|
||
AN_SemCorrupt = $01000008;
|
||
|
||
AN_FreeTwice = $01000009;
|
||
AN_BogusExcpt = $8100000A;
|
||
AN_IOUsedTwice = $0100000B;
|
||
AN_MemoryInsane = $0100000C;
|
||
|
||
AN_IOAfterClose = $0100000D;
|
||
AN_StackProbe = $0100000E;
|
||
AN_BadFreeAddr = $0100000F;
|
||
AN_BadSemaphore = $01000010;
|
||
|
||
{ *
|
||
* graphics.library
|
||
* }
|
||
const
|
||
AN_GraphicsLib = $02000000;
|
||
AN_GfxNoMem = $82010000;
|
||
AN_GfxNoMemMspc = $82010001;
|
||
AN_LongFrame = $82010006;
|
||
AN_ShortFrame = $82010007;
|
||
AN_TextTmpRas = $02010009;
|
||
AN_BltBitMap = $8201000A;
|
||
AN_RegionMemory = $8201000B;
|
||
AN_MakeVPort = $82010030;
|
||
AN_GfxNewError = $0200000C;
|
||
AN_GfxFreeError = $0200000D;
|
||
|
||
AN_GfxNoLCM = $82011234;
|
||
|
||
AN_ObsoleteFont = $02000401;
|
||
|
||
{ *
|
||
* layers.library
|
||
* }
|
||
const
|
||
AN_LayersLib = $03000000;
|
||
AN_LayersNoMem = $83010000;
|
||
|
||
{ *
|
||
* intuition.library
|
||
* }
|
||
const
|
||
AN_Intuition = $04000000;
|
||
AN_GadgetType = $84000001;
|
||
AN_BadGadget = $04000001;
|
||
AN_CreatePort = $84010002;
|
||
AN_ItemAlloc = $04010003;
|
||
AN_SubAlloc = $04010004;
|
||
AN_PlaneAlloc = $84010005;
|
||
AN_ItemBoxTop = $84000006;
|
||
AN_OpenScreen = $84010007;
|
||
AN_OpenScrnRast = $84010008;
|
||
AN_SysScrnType = $84000009;
|
||
AN_AddSWGadget = $8401000A;
|
||
AN_OpenWindow = $8401000B;
|
||
AN_BadState = $8400000C;
|
||
AN_BadMessage = $8400000D;
|
||
AN_WeirdEcho = $8400000E;
|
||
AN_NoConsole = $8400000F;
|
||
AN_NoISem = $04000010;
|
||
AN_ISemOrder = $04000011;
|
||
|
||
{ *
|
||
* math.library
|
||
* }
|
||
const
|
||
AN_MathLib = $05000000;
|
||
|
||
{ *
|
||
* dos.library
|
||
* }
|
||
const
|
||
AN_DOSLib = $07000000;
|
||
AN_StartMem = $07010001;
|
||
AN_EndTask = $07000002;
|
||
AN_QPktFail = $07000003;
|
||
AN_AsyncPkt = $07000004;
|
||
AN_FreeVec = $07000005;
|
||
AN_DiskBlkSeq = $07000006;
|
||
AN_BitMap = $07000007;
|
||
AN_KeyFree = $07000008;
|
||
AN_BadChkSum = $07000009;
|
||
AN_DiskError = $0700000A;
|
||
AN_KeyRange = $0700000B;
|
||
AN_BadOverlay = $0700000C;
|
||
AN_BadInitFunc = $0700000D;
|
||
AN_FileReclosed = $0700000E;
|
||
|
||
{ *
|
||
* ramlib.library
|
||
* }
|
||
const
|
||
AN_RAMLib = $08000000;
|
||
AN_BadSegList = $08000001;
|
||
|
||
{ *
|
||
* icon.library
|
||
* }
|
||
const
|
||
AN_IconLib = $09000000;
|
||
|
||
{ *
|
||
* expansion.library
|
||
* }
|
||
const
|
||
AN_ExpansionLib = $0A000000;
|
||
AN_BadExpansionFree = $0A000001;
|
||
|
||
{ *
|
||
* diskfont.library
|
||
* }
|
||
const
|
||
AN_DiskfontLib = $0B000000;
|
||
|
||
{ *
|
||
* audio.device
|
||
* }
|
||
const
|
||
AN_AudioDev = $10000000;
|
||
|
||
{ *
|
||
* console.device
|
||
* }
|
||
const
|
||
AN_ConsoleDev = $11000000;
|
||
AN_NoWindow = $11000001;
|
||
|
||
{ *
|
||
* gameport.device
|
||
* }
|
||
const
|
||
AN_GamePortDev = $12000000;
|
||
|
||
{ *
|
||
* keyboard.device
|
||
* }
|
||
const
|
||
AN_KeyboardDev = $13000000;
|
||
|
||
{ *
|
||
* trackdisk.device
|
||
* }
|
||
const
|
||
AN_TrackDiskDev = $14000000;
|
||
AN_TDCalibSeek = $14000001;
|
||
AN_TDDelay = $14000002;
|
||
|
||
{ *
|
||
* timer.device
|
||
* }
|
||
const
|
||
AN_TimerDev = $15000000;
|
||
AN_TMBadReq = $15000001;
|
||
AN_TMBadSupply = $15000002;
|
||
|
||
{ *
|
||
* cia.resource
|
||
* }
|
||
const
|
||
AN_CIARsrc = $20000000;
|
||
|
||
{ *
|
||
* disk.resource
|
||
* }
|
||
const
|
||
AN_DiskRsrc = $21000000;
|
||
AN_DRHasDisk = $21000001;
|
||
AN_DRIntNoAct = $21000002;
|
||
|
||
{ *
|
||
* misc.resource
|
||
* }
|
||
const
|
||
AN_MiscRsrc = $22000000;
|
||
|
||
{ *
|
||
* bootstrap
|
||
* }
|
||
const
|
||
AN_BootStrap = $30000000;
|
||
AN_BootError = $30000001;
|
||
|
||
{ *
|
||
* Workbench
|
||
* }
|
||
const
|
||
AN_Workbench = $31000000;
|
||
AN_NoFonts = $B1000001;
|
||
AN_WBBadStartupMsg1 = $31000001;
|
||
AN_WBBadStartupMsg2 = $31000002;
|
||
AN_WBBadIOMsg = $31000003;
|
||
AN_WBReLayoutToolMenu = $B1010009;
|
||
|
||
{ *
|
||
* DiskCopy
|
||
* }
|
||
const
|
||
AN_DiskCopy = $32000000;
|
||
|
||
{ *
|
||
* toolkit for Intuition
|
||
* }
|
||
const
|
||
AN_GadTools = $33000000;
|
||
|
||
{ *
|
||
* System utility library
|
||
* }
|
||
const
|
||
AN_UtilityLib = $34000000;
|
||
|
||
{ *
|
||
* For use by any application that needs it
|
||
* }
|
||
const
|
||
AN_Unknown = $35000000;
|
||
|
||
|
||
|
||
{ * exec error definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
const
|
||
IOERR_OPENFAIL = (-1);
|
||
IOERR_ABORTED = (-2);
|
||
IOERR_NOCMD = (-3);
|
||
IOERR_BADLENGTH = (-4);
|
||
IOERR_BADADDRESS = (-5);
|
||
IOERR_UNITBUSY = (-6);
|
||
IOERR_SELFTEST = (-7);
|
||
IOERR_NOMEMORY = (-8);
|
||
|
||
|
||
|
||
{ * exec resident definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PResident = ^TResident;
|
||
TResident = packed record
|
||
rt_MatchWord: Word;
|
||
rt_MatchTag : PResident;
|
||
rt_EndSkip : Pointer;
|
||
rt_Flags : Byte;
|
||
rt_Version : Byte;
|
||
rt_Type : Byte;
|
||
rt_Pri : Byte;
|
||
rt_Name : PAnsiChar;
|
||
rt_IdString : PAnsiChar;
|
||
rt_Init : Pointer;
|
||
{ * Only valid when RTF_EXTENDED is set
|
||
* }
|
||
rt_Revision : Word; { * Revision Entry * }
|
||
rt_Tags : Pointer;
|
||
end;
|
||
|
||
|
||
const
|
||
RTC_MATCHWORD = $4AFC;
|
||
|
||
RTF_AUTOINIT = (1 Shl 7);
|
||
RTF_EXTENDED = (1 Shl 6); { * structure extension is valid * }
|
||
{ * rt_Init points to a PPC function which must be defined as
|
||
*
|
||
* struct Library* LIB_Init(struct Library *MyLibBase,
|
||
* BPTR SegList,
|
||
* struct ExecBase *SysBase)
|
||
* }
|
||
RTF_PPC = (1 Shl 3);
|
||
RTF_AFTERDOS = (1 Shl 2);
|
||
RTF_SINGLETASK = (1 Shl 1);
|
||
RTF_COLDSTART = (1 Shl 0);
|
||
|
||
RTW_NEVER = 0;
|
||
RTW_COLDSTART = 1;
|
||
|
||
|
||
|
||
{ * exec memory definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PMemChunk = ^TMemChunk;
|
||
TMemChunk = packed record
|
||
nc_Next : PMemChunk;
|
||
nc_Bytes: DWord;
|
||
end;
|
||
|
||
type
|
||
PMemHeader = ^TMemHeader;
|
||
TMemHeader = packed record
|
||
mh_Node : TNode;
|
||
mh_Attributes: Word;
|
||
mh_First : PMemChunk;
|
||
mh_Lower : Pointer;
|
||
mh_Upper : Pointer;
|
||
mh_Free : DWord;
|
||
end;
|
||
|
||
type
|
||
PMemEntry = ^TMemEntry;
|
||
TMemEntry = packed record
|
||
me_Un: packed record
|
||
case Byte of
|
||
0 : (meu_Reqs: DWord);
|
||
1 : (meu_Addr: Pointer)
|
||
end;
|
||
me_Length: DWord;
|
||
end;
|
||
|
||
type
|
||
PMemList = ^TMemList;
|
||
TMemList = packed record
|
||
ml_Node : TNode;
|
||
ml_NumEntries: Word;
|
||
ml_ME : array [0..0] of TMemEntry;
|
||
end;
|
||
|
||
|
||
const
|
||
MEMF_ANY = 0;
|
||
MEMF_PUBLIC = (1 Shl 0);
|
||
MEMF_CHIP = (1 Shl 1);
|
||
MEMF_FAST = (1 Shl 2);
|
||
MEMF_LOCAL = (1 Shl 8);
|
||
MEMF_24BITDMA = (1 Shl 9);
|
||
MEMF_KICK = (1 Shl 10);
|
||
MEMF_SWAP = (1 Shl 11); { * Memory that can be swapped out to disk * }
|
||
|
||
MEMF_CLEAR = (1 Shl 16);
|
||
MEMF_LARGEST = (1 Shl 17);
|
||
MEMF_REVERSE = (1 Shl 18);
|
||
MEMF_TOTAL = (1 Shl 19);
|
||
MEMF_SEM_PROTECTED = (1 Shl 20); { * Pools: semaphore protection * }
|
||
MEMF_NO_EXPUNGE = (1 Shl 31);
|
||
|
||
MEM_BLOCKSIZE = 8;
|
||
MEM_BLOCKMASK = (MEM_BLOCKSIZE - 1);
|
||
|
||
|
||
type
|
||
PMemHandlerData = ^TMemHandlerData;
|
||
TMemHandlerData = packed record
|
||
memh_RequestSize : DWord;
|
||
memh_RequestFlags: DWord;
|
||
memh_Flags : DWord;
|
||
end;
|
||
|
||
|
||
const
|
||
MEMHF_RECYCLE = (1 Shl 0);
|
||
|
||
MEM_DID_NOTHING = 0;
|
||
MEM_ALL_DONE = -1;
|
||
MEM_TRY_AGAIN = 1;
|
||
|
||
|
||
|
||
{ * exec port definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PMsgPort = ^TMsgPort;
|
||
TMsgPort = packed record
|
||
mp_Node : TNode;
|
||
mp_Flags : Byte;
|
||
mp_SigBit : Byte;
|
||
mp_SigTask: Pointer;
|
||
mp_MsgList: TList;
|
||
end;
|
||
|
||
|
||
const
|
||
PF_ACTION = 3;
|
||
PA_SIGNAL = 0;
|
||
PA_SOFTINT = 1;
|
||
PA_IGNORE = 2;
|
||
|
||
|
||
type
|
||
PMessage = ^TMessage;
|
||
TMessage = packed record
|
||
mn_Node : TNode;
|
||
mn_ReplyPort: PMsgPort;
|
||
mn_Length : Word;
|
||
end;
|
||
|
||
|
||
|
||
{ * exec task definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PTask = ^TTask;
|
||
TTask = packed record
|
||
tc_Node : TNode;
|
||
tc_Flags : Byte;
|
||
tc_State : Byte;
|
||
tc_IDNestCnt: ShortInt;
|
||
tc_TDNestCnt: ShortInt;
|
||
tc_SigAlloc : DWord;
|
||
tc_SigWait : DWord;
|
||
tc_SigRecvd : DWord;
|
||
tc_SigExcept: DWord;
|
||
{$IF 0}
|
||
tc_TrapAlloc: Word;
|
||
tc_TrapAble : Word;
|
||
{$ELSE}
|
||
tc_ETask: Pointer;
|
||
{$ENDIF}
|
||
tc_ExceptData: Pointer;
|
||
tc_ExceptCode: Pointer;
|
||
tc_TrapData : Pointer;
|
||
tc_TrapCode : Pointer;
|
||
tc_SPReg : Pointer;
|
||
tc_SPLower : Pointer;
|
||
tc_SPUpper : Pointer;
|
||
tc_Switch : Pointer; { *** OBSOLETE *** }
|
||
tc_Launch : Pointer; { *** OBSOLETE *** }
|
||
tc_MemEntry : TList;
|
||
tc_UserData : Pointer;
|
||
end;
|
||
|
||
|
||
const
|
||
TB_PROCTIME = 0;
|
||
TB_ETASK = 3;
|
||
TB_STACKCHK = 4;
|
||
TB_EXCEPT = 5;
|
||
TB_SWITCH = 6;
|
||
TB_LAUNCH = 7;
|
||
|
||
TF_PROCTIME = (1 Shl TB_PROCTIME);
|
||
TF_ETASK = (1 Shl TB_ETASK);
|
||
TF_STACKCHK = (1 Shl TB_STACKCHK);
|
||
TF_EXCEPT = (1 Shl TB_EXCEPT);
|
||
TF_SWITCH = (1 Shl TB_SWITCH);
|
||
TF_LAUNCH = (1 Shl TB_LAUNCH);
|
||
|
||
TS_INVALID = 0;
|
||
TS_ADDED = 1;
|
||
TS_RUN = 2;
|
||
TS_READY = 3;
|
||
TS_WAIT = 4;
|
||
TS_EXCEPT = 5;
|
||
TS_REMOVED = 6;
|
||
|
||
SIGB_ABORT = 0;
|
||
SIGB_CHILD = 1;
|
||
SIGB_BLIT = 4;
|
||
SIGB_SINGLE = 4;
|
||
SIGB_INTUITION = 5;
|
||
SIGB_NET = 7;
|
||
SIGB_DOS = 8;
|
||
|
||
SIGF_ABORT = (1 Shl SIGB_ABORT);
|
||
SIGF_CHILD = (1 Shl SIGB_CHILD);
|
||
SIGF_BLIT = (1 Shl SIGB_BLIT);
|
||
SIGF_SINGLE = (1 Shl SIGB_SINGLE);
|
||
SIGF_INTUITION = (1 Shl SIGB_INTUITION);
|
||
SIGF_NET = (1 Shl SIGB_NET);
|
||
SIGF_DOS = (1 Shl SIGB_DOS);
|
||
|
||
|
||
type
|
||
PTaskTrapMessage = ^TTaskTrapMessage;
|
||
TTaskTrapMessage = packed record
|
||
Message: TMessage; { * Message Header * }
|
||
Task : TTask; { * connected Task * }
|
||
Version: DWord; { * version of the structure * }
|
||
TType : DWord; { * Exception Type * }
|
||
DAR : DWord; { * Exception Address Register * }
|
||
DSISR : DWord; { * Exception DSISR Reg * }
|
||
|
||
{ * This is undiscovered land...
|
||
* never assume a size of this structure
|
||
* }
|
||
end;
|
||
|
||
|
||
const
|
||
VERSION_TASKTRAPMESSAGE = $0;
|
||
|
||
|
||
type
|
||
PETask = ^TETask;
|
||
TETask = packed record
|
||
Message : TMessage;
|
||
Parent : PTask;
|
||
UniqueID : DWord;
|
||
Children : TMinList;
|
||
TrapAlloc: Word;
|
||
TrapAble : Word;
|
||
Result1 : DWord;
|
||
Result2 : Pointer;
|
||
MsgPort : TMsgPort;
|
||
|
||
{ * Don't touch!!!!!!!!!..there'll be an interface
|
||
* sooner than later.
|
||
* New Entries...most of the above entries
|
||
* are only their for structure compatability.
|
||
* They have no meaning as the OS never supported
|
||
* them.
|
||
* }
|
||
|
||
{ * A Task Pool for the task.
|
||
* }
|
||
MemPool: Pointer;
|
||
|
||
{ * PPC's Stack Lower Ptr
|
||
* The initial stack is allocated through
|
||
* AllocVec, so a FreeVec(ETask^.PPCSPLower);
|
||
* would work.
|
||
* If you use PPCStackSwap you must allocate
|
||
* your stack block with AllocVec();
|
||
* }
|
||
PPCSPLower: Pointer;
|
||
|
||
{ * PPC's Stack Upper Ptr
|
||
* }
|
||
PPCSPUpper : Pointer;
|
||
PPCRegFrame: Pointer;
|
||
PPCLibData : Pointer;
|
||
|
||
{ * On a PPC exception this msgport
|
||
* is sent an exception msg...
|
||
* the task is stopped until somebody
|
||
* wakes it up again.
|
||
* (asynchron exception interface)
|
||
* If this Port is NULL the message is
|
||
* sent to SysBase->ex_PPCTrapMsgPort.
|
||
* }
|
||
PPCTrapMsgPort: PMsgPort;
|
||
PPCTrapMessage: PTaskTrapMessage;
|
||
|
||
{ * This is undiscovered land...
|
||
* never assume a size of this structure
|
||
* }
|
||
end;
|
||
|
||
|
||
type
|
||
PTaskInitExtension = ^TTaskInitExtension;
|
||
TTaskInitExtension = packed record
|
||
{ * Must be filled with TRAP_PPCTASK
|
||
* }
|
||
Trap : Word;
|
||
Extension: Word; { * Must be set to 0 * }
|
||
Tags : Pointer;
|
||
end;
|
||
|
||
|
||
const
|
||
TASKTAG_DUMMY = (TAG_USER + $100000);
|
||
|
||
{ * Ptr to an ULONG Errorfield where a better error description
|
||
* can be stored.
|
||
* }
|
||
TASKTAG_ERROR = (TASKTAG_DUMMY + $0);
|
||
|
||
{ * Code type
|
||
* can be stored.
|
||
* }
|
||
TASKTAG_CODETYPE = (TASKTAG_DUMMY + $1);
|
||
|
||
{ * Start PC
|
||
* code must be of TASKTAG_CODETYPE
|
||
* }
|
||
TASKTAG_PC = (TASKTAG_DUMMY + $2);
|
||
|
||
{ * Final PC
|
||
* code must be of TASKTAG_CODETYPE
|
||
* }
|
||
TASKTAG_FINALPC = (TASKTAG_DUMMY + $3);
|
||
|
||
{ * Stacksize...Default 8192
|
||
* }
|
||
TASKTAG_STACKSIZE = (TASKTAG_DUMMY + $4);
|
||
|
||
{ * Std Stacksize...
|
||
* Default(use the stack defined by tc_SPLower..tc_SPUpper)
|
||
* }
|
||
TASKTAG_STACKSIZE_M68K = (TASKTAG_DUMMY + $5);
|
||
|
||
{ * specify task name, name is copied
|
||
* }
|
||
TASKTAG_NAME = (TASKTAG_DUMMY + $6);
|
||
|
||
{ * tc_UserData
|
||
* }
|
||
TASKTAG_USERDATA = (TASKTAG_DUMMY + $7);
|
||
|
||
{ * Task priority
|
||
* }
|
||
TASKTAG_PRI = (TASKTAG_DUMMY + $8);
|
||
|
||
{ * Pool's Puddlesize
|
||
* }
|
||
TASKTAG_POOLPUDDLE = (TASKTAG_DUMMY + $9);
|
||
|
||
{ * Pool's ThreshSize
|
||
* }
|
||
TASKTAG_POOLTHRESH = (TASKTAG_DUMMY + $a);
|
||
|
||
{ * PPC First Argument..gpr3
|
||
* }
|
||
TASKTAG_PPC_ARG1 = (TASKTAG_DUMMY + $10);
|
||
|
||
{ * PPC First Argument..gpr4
|
||
* }
|
||
TASKTAG_PPC_ARG2 = (TASKTAG_DUMMY + $11);
|
||
|
||
{ * PPC First Argument..gpr5
|
||
* }
|
||
TASKTAG_PPC_ARG3 = (TASKTAG_DUMMY + $12);
|
||
|
||
{ * PPC First Argument..gpr6
|
||
* }
|
||
TASKTAG_PPC_ARG4 = (TASKTAG_DUMMY + $13);
|
||
|
||
{ * PPC First Argument..gpr7
|
||
* }
|
||
TASKTAG_PPC_ARG5 = (TASKTAG_DUMMY + $14);
|
||
|
||
{ * PPC First Argument..gpr8
|
||
* }
|
||
TASKTAG_PPC_ARG6 = (TASKTAG_DUMMY + $15);
|
||
|
||
{ * PPC First Argument..gpr9
|
||
* }
|
||
TASKTAG_PPC_ARG7 = (TASKTAG_DUMMY + $16);
|
||
|
||
{ * PPC First Argument..gpr10
|
||
* }
|
||
TASKTAG_PPC_ARG8 = (TASKTAG_DUMMY + $17);
|
||
|
||
{ *
|
||
* Startup message to be passed to task/process, ReplyMsg'd at RemTask()
|
||
* ti_Data: struct Message *
|
||
* }
|
||
TASKTAG_STARTUPMSG = (TASKTAG_DUMMY + $18);
|
||
|
||
{ *
|
||
* Create internal MsgPort for task/process, deleted at RemTask()
|
||
* ti_Data: struct MsgPort **, can be NULL
|
||
* }
|
||
TASKTAG_TASKMSGPORT = (TASKTAG_DUMMY + $19);
|
||
|
||
|
||
const
|
||
CODETYPE_M68K = $0;
|
||
{ *
|
||
* System V4 ABI
|
||
* }
|
||
CODETYPE_PPC = $1;
|
||
|
||
const
|
||
TASKERROR_OK = 0;
|
||
TASKERROR_NOMEMORY = 1;
|
||
|
||
|
||
{ *
|
||
* Stack swap structure as passed to StackSwap() and PPCStackSwap()
|
||
* }
|
||
type
|
||
PStackSwapStruct = ^TStackSwapStruct;
|
||
TStackSwapStruct = packed record
|
||
stk_Lower : Pointer; { * Lowest byte of stack * }
|
||
stk_Upper : Pointer; { *<2A>Upper end of stack (size + Lowert) * }
|
||
stk_Pointer: Pointer; { * Stack pointer at switch point * }
|
||
end;
|
||
|
||
type
|
||
PPPCStackSwapArgs = ^TPPCStackSwapArgs;
|
||
TPPCStackSwapArgs = packed record
|
||
Args: Array[0..7] Of DWord; { * The C register arguments from gpr3..gpr11 * }
|
||
end;
|
||
|
||
|
||
{ *
|
||
* NewGetTaskAttrsA(), NewSetTaskAttrsA() tags
|
||
* }
|
||
const
|
||
TASKINFOTYPE_ALLTASK = $0;
|
||
TASKINFOTYPE_NAME = $1;
|
||
TASKINFOTYPE_PRI = $2;
|
||
TASKINFOTYPE_TYPE = $3;
|
||
TASKINFOTYPE_STATE = $4;
|
||
TASKINFOTYPE_FLAGS = $5;
|
||
TASKINFOTYPE_SIGALLOC = $6;
|
||
TASKINFOTYPE_SIGWAIT = $7;
|
||
TASKINFOTYPE_SIGRECVD = $8;
|
||
TASKINFOTYPE_SIGEXCEPT = $9;
|
||
TASKINFOTYPE_EXCEPTDATA = $a;
|
||
TASKINFOTYPE_EXCEPTCODE = $b;
|
||
TASKINFOTYPE_TRAPDATA = $c;
|
||
TASKINFOTYPE_TRAPCODE = $d;
|
||
TASKINFOTYPE_STACKSIZE_M68K = $e;
|
||
TASKINFOTYPE_STACKSIZE = $f;
|
||
TASKINFOTYPE_USEDSTACKSIZE_M68K = $10;
|
||
TASKINFOTYPE_USEDSTACKSIZE = $11;
|
||
TASKINFOTYPE_TRAPMSGPORT = $12;
|
||
TASKINFOTYPE_STARTUPMSG = $13;
|
||
TASKINFOTYPE_TASKMSGPORT = $14;
|
||
TASKINFOTYPE_POOLPTR = $15;
|
||
TASKINFOTYPE_POOLMEMFLAGS = $16;
|
||
TASKINFOTYPE_POOLPUDDLESIZE = $17;
|
||
TASKINFOTYPE_POOLTHRESHSIZE = $18;
|
||
|
||
{ *
|
||
* Task Scheduler statistics (exec 50.42)
|
||
* }
|
||
TASKINFOTYPE_NICE = $19;
|
||
TASKINFOTYPE_AGETICKS = $1a;
|
||
TASKINFOTYPE_CPUTIME = $1b;
|
||
TASKINFOTYPE_LASTSECCPUTIME = $1c;
|
||
TASKINFOTYPE_RECENTCPUTIME = $1d;
|
||
TASKINFOTYPE_VOLUNTARYCSW = $1e;
|
||
TASKINFOTYPE_INVOLUNTARYCSW = $1f;
|
||
TASKINFOTYPE_LASTSECVOLUNTARYCSW = $20;
|
||
TASKINFOTYPE_LASTSECINVOLUNTARYCSW = $21;
|
||
{ * Added in exec 50.45 * }
|
||
TASKINFOTYPE_LAUNCHTIMETICKS = $22;
|
||
TASKINFOTYPE_LAUNCHTIMETICKS1978 = $23;
|
||
TASKINFOTYPE_PID = $24;
|
||
|
||
TASKINFOTYPE_68K_NEWFRAME = $50;
|
||
|
||
TASKINFOTYPE_PPC_SRR0 = $100;
|
||
TASKINFOTYPE_PPC_SRR1 = $101;
|
||
TASKINFOTYPE_PPC_LR = $102;
|
||
TASKINFOTYPE_PPC_CTR = $103;
|
||
TASKINFOTYPE_PPC_CR = $104;
|
||
TASKINFOTYPE_PPC_XER = $105;
|
||
TASKINFOTYPE_PPC_GPR = $106;
|
||
TASKINFOTYPE_PPC_FPR = $107;
|
||
TASKINFOTYPE_PPC_FPSCR = $108;
|
||
TASKINFOTYPE_PPC_VSCR = $109;
|
||
TASKINFOTYPE_PPC_VMX = $10a;
|
||
TASKINFOTYPE_PPC_VSAVE = $10b;
|
||
TASKINFOTYPE_PPC_FRAME = $10c;
|
||
TASKINFOTYPE_PPC_FRAMESIZE = $10d;
|
||
TASKINFOTYPE_PPC_NEWFRAME = $10e;
|
||
|
||
TASKINFOTAG_DUMMY = (TAG_USER + $110000);
|
||
{ * Used with TASKINFOTYPE_ALLTASK
|
||
* }
|
||
TASKINFOTAG_HOOK = (TASKINFOTAG_DUMMY + $0);
|
||
{ * Used with TASKINFOTYPE_PPC_GPR,TASKINFOTYPE_PPC_FPR,TASKINFOTYPE_PPC_VMX
|
||
* to define the copy area
|
||
* }
|
||
TASKINFOTAG_REGSTART = (TASKINFOTAG_DUMMY + $1);
|
||
{ * Used with TASKINFOTYPE_PPC_GPR,TASKINFOTYPE_PPC_FPR,TASKINFOTYPE_PPC_VMX
|
||
* to define the copy area
|
||
* }
|
||
TASKINFOTAG_REGCOUNT = (TASKINFOTAG_DUMMY + $2);
|
||
|
||
|
||
{ *
|
||
* NewSetTaskAttrsA(..,@TaskFrame68k,sizeof(TTaskFrame68k),TASKINFOTYPE_68K_NEWFRAME,...);
|
||
* }
|
||
type
|
||
PTaskFrame68k = ^TTaskFrame68k;
|
||
TTaskFrame68k = packed record
|
||
PC: Pointer;
|
||
SR: Word;
|
||
Xn: Array[0..14] Of LongInt;
|
||
end;
|
||
|
||
|
||
{ *
|
||
* Don't depend on these
|
||
* }
|
||
const
|
||
DEFAULT_PPCSTACKSIZE = 32768;
|
||
DEFAULT_M68KSTACKSIZE = 2048;
|
||
DEFAULT_TASKPUDDLESIZE = 4096;
|
||
DEFAULT_TASKTHRESHSIZE = 4096;
|
||
|
||
|
||
{ * exec interrupt definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PInterrupt = ^TInterrupt;
|
||
TInterrupt = packed record
|
||
is_Node: TNode;
|
||
is_Data: Pointer;
|
||
is_Code: Pointer;
|
||
end;
|
||
|
||
type
|
||
PIntVector = ^TIntVector;
|
||
TIntVector = packed record
|
||
iv_Data: Pointer;
|
||
iv_Code: Pointer;
|
||
iv_Node: PNode;
|
||
end;
|
||
|
||
type
|
||
PSoftIntList = ^TSoftIntList;
|
||
TSoftIntList = packed record
|
||
sh_List: TList;
|
||
sh_Pad : Word;
|
||
end;
|
||
|
||
|
||
const
|
||
SIH_PRIMASK = $f0;
|
||
|
||
INTB_NMI = 15;
|
||
INTF_NMI = (1 Shl INTB_NMI);
|
||
|
||
|
||
|
||
{ * exec semaphore definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
{ *
|
||
* Shouldn't be available public..
|
||
* }
|
||
type
|
||
PSemaphoreRequest = ^TSemaphoreRequest;
|
||
TSemaphoreRequest = packed record
|
||
sr_Link : TMinNode;
|
||
sr_Waiter: PTask;
|
||
end;
|
||
|
||
type
|
||
PSignalSemaphore = ^TSignalSemaphore;
|
||
TSignalSemaphore = packed record
|
||
ss_Link : TNode;
|
||
ss_NestCount : SmallInt;
|
||
ss_WaitQueue : TMinList;
|
||
ss_MultipleLink: TSemaphoreRequest;
|
||
ss_Owner : PTask;
|
||
ss_QueueCount : SmallInt;
|
||
end;
|
||
|
||
type
|
||
PSemaphoreMessage = ^TSemaphoreMessage;
|
||
TSemaphoreMessage = packed record
|
||
ssm_Message : TMessage;
|
||
ssm_Semaphore: PSignalSemaphore;
|
||
end;
|
||
|
||
|
||
const
|
||
SM_SHARED = 1;
|
||
SM_EXCLUSIVE = 0;
|
||
|
||
|
||
|
||
{ * exec machine definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
const
|
||
MACHINE_M68k = $0;
|
||
MACHINE_PPC = $1;
|
||
MACHINE_NO = $ffffffff;
|
||
|
||
|
||
|
||
{ * exec library definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
const
|
||
LIB_VECTSIZE = 6;
|
||
LIB_RESERVED = 4;
|
||
LIB_BASE = (-LIB_VECTSIZE);
|
||
LIB_USERDEF = (LIB_BASE - (LIB_RESERVED * LIB_VECTSIZE));
|
||
LIB_NONSTD = (LIB_USERDEF);
|
||
|
||
LIB_OPEN = -6;
|
||
LIB_CLOSE = -12;
|
||
LIB_EXPUNGE = -18;
|
||
LIB_EXTFUNC = -24;
|
||
LIB_GETQUERYATTR = -24; { * LIBF_QUERY * }
|
||
|
||
|
||
type
|
||
PLibrary = ^TLibrary;
|
||
TLibrary = packed record
|
||
lib_Node : TNode;
|
||
lib_Flags : Byte;
|
||
lib_pad : Byte;
|
||
lib_MegSize : Word;
|
||
lib_PosSize : Word;
|
||
lib_Version : Word;
|
||
lib_Revision: Word;
|
||
lib_IdString: PAnsiChar;
|
||
lib_Sum : DWord;
|
||
lib_OpenCnt : Word;
|
||
end;
|
||
|
||
|
||
const
|
||
LIBF_SUMMING = (1 Shl 0);
|
||
LIBF_CHANGED = (1 Shl 1);
|
||
LIBF_SUMUSED = (1 Shl 2);
|
||
LIBF_DELEXP = (1 Shl 3);
|
||
{ *
|
||
* private
|
||
* }
|
||
LIBF_RAMLIB = (1 Shl 4);
|
||
{ *
|
||
* Needs to be set if the GetQueryAttr function is legal
|
||
* }
|
||
LIBF_QUERYINFO = (1 Shl 5);
|
||
{ *
|
||
* The remaining bits are reserved and aren`t allowed to be touched
|
||
* }
|
||
|
||
|
||
{ * NewSetFunction extensions
|
||
* }
|
||
const
|
||
SETFUNCTAG_Dummy = (TAG_USER +$01000000);
|
||
|
||
{ * Set the machine type of the function
|
||
* Default is 68k
|
||
* }
|
||
SETFUNCTAG_MACHINE = (SETFUNCTAG_Dummy + $1);
|
||
|
||
{ * Function type specifier
|
||
* }
|
||
SETFUNCTAG_TYPE = (SETFUNCTAG_Dummy + $2);
|
||
|
||
{ * ID String
|
||
* }
|
||
SETFUNCTAG_IDNAME = (SETFUNCTAG_Dummy + $3);
|
||
|
||
{ *
|
||
* Set to TRUE if the replaced function will never be used
|
||
* again.
|
||
* }
|
||
SETFUNCTAG_DELETE = (SETFUNCTAG_Dummy + $4);
|
||
|
||
|
||
{ * See emul/emulinterface.h for more informations
|
||
* }
|
||
|
||
{ * Save Emulation PPC Registers
|
||
* Call Function
|
||
* Restore Emulation PPC Registers
|
||
* REG_D0 = Result
|
||
* }
|
||
const
|
||
SETFUNCTYPE_NORMAL = 0;
|
||
{ * Call Function
|
||
* Must use the global register settings of the emulation
|
||
* REG_D0 = Result
|
||
* }
|
||
SETFUNCTYPE_QUICK = 1;
|
||
{ * Save Emulation PPC Registers
|
||
* Call Function
|
||
* Restore Emulation PPC Registers
|
||
* No Result
|
||
* Needed to replace functions like
|
||
* forbid,obtainsemaphores which are
|
||
* defined as trashing no registers
|
||
* }
|
||
SETFUNCTYPE_NORMALNR = 2;
|
||
{ * Call Function
|
||
* Must use the global register settings of the emulation
|
||
* No Result
|
||
* Needed to replace functions like
|
||
* forbid,obtainsemaphores which are
|
||
* defined as trashing no registers
|
||
* }
|
||
SETFUNCTYPE_QUICKNR = 3;
|
||
SETFUNCTYPE_NORMALSR = 4;
|
||
SETFUNCTYPE_NORMALSRNR = 5;
|
||
SETFUNCTYPE_NORMALD0_D1 = 6;
|
||
SETFUNCTYPE_NORMALRESTORE = 7;
|
||
SETFUNCTYPE_SYSTEMV = 8;
|
||
SETFUNCTYPE_NORMALD0D1SR = 9;
|
||
SETFUNCTYPE_NORMALD0D1A0A1SR = 10;
|
||
|
||
|
||
{ * CreateLibrary extensions
|
||
* }
|
||
LIBTAG_BASE = (TAG_USER + $01000100);
|
||
|
||
{ *
|
||
* Function/Vector Array
|
||
* }
|
||
LIBTAG_FUNCTIONINIT = (LIBTAG_BASE+$0);
|
||
{ *
|
||
* Struct Init
|
||
* }
|
||
LIBTAG_STRUCTINIT = (LIBTAG_BASE+$1);
|
||
{ *
|
||
* Library Init
|
||
* }
|
||
LIBTAG_LIBRARYINIT = (LIBTAG_BASE+$2);
|
||
{ *
|
||
* Init Code Type
|
||
* }
|
||
LIBTAG_MACHINE = (LIBTAG_BASE+$3);
|
||
{ *
|
||
* Library Base Size
|
||
* }
|
||
LIBTAG_BASESIZE = (LIBTAG_BASE+$4);
|
||
{ *
|
||
* SegList Ptr
|
||
* }
|
||
LIBTAG_SEGLIST = (LIBTAG_BASE+$5);
|
||
{ *
|
||
* Library Priority
|
||
* }
|
||
LIBTAG_PRI = (LIBTAG_BASE+$6);
|
||
{ *
|
||
* Library Type..Library,Device,Resource,whatever
|
||
* }
|
||
LIBTAG_TYPE = (LIBTAG_BASE+$7);
|
||
{ *
|
||
* Library Version
|
||
* (UWORD)
|
||
* }
|
||
LIBTAG_VERSION = (LIBTAG_BASE+$8);
|
||
{ *
|
||
* Library Flags
|
||
* }
|
||
LIBTAG_FLAGS = (LIBTAG_BASE+$9);
|
||
{ *
|
||
* Library Name
|
||
* }
|
||
LIBTAG_NAME = (LIBTAG_BASE+$a);
|
||
{ *
|
||
* Library IDString
|
||
* }
|
||
LIBTAG_IDSTRING = (LIBTAG_BASE+$b);
|
||
{ *
|
||
* AddDevice(),AddLibrary(),AddResource()..
|
||
* depends on LibNode.ln_Type field which
|
||
* can be set by some Init function, Struct Scripts
|
||
* or LIBTAG_TYPE.
|
||
* If you set LIBTAG_PUBLIC the library
|
||
* is added to the right system list.
|
||
* }
|
||
LIBTAG_PUBLIC = (LIBTAG_BASE+$c);
|
||
{ *
|
||
* Library Revision
|
||
* (UWORD)
|
||
* }
|
||
LIBTAG_REVISION = (LIBTAG_BASE+$d);
|
||
{ *
|
||
* Library QueryInfo Flag
|
||
* (Boolean)
|
||
* }
|
||
LIBTAG_QUERYINFO = (LIBTAG_BASE+$e);
|
||
|
||
|
||
{ * Private
|
||
* don`t touch...floating design
|
||
* }
|
||
type
|
||
PFuncEntry = ^TFuncEntry;
|
||
TFuncEntry = packed record
|
||
EmulLibEntry : TEmulLibEntry;
|
||
OldFunction : Pointer; { * Needed for bookkeeping * }
|
||
end;
|
||
|
||
PFuncOldEntry = ^TFuncOldEntry;
|
||
TFuncOldEntry = packed record
|
||
Command : Word;
|
||
FuncEntry: PFuncEntry;
|
||
end;
|
||
|
||
|
||
{ *
|
||
* EmulLibEntry.Extension
|
||
* }
|
||
const
|
||
FUNCENTRYEXTF_LIBRARY = $1; { * Entry created by the OS * }
|
||
|
||
{ *
|
||
* Functionarray first ULONG ID defines the format
|
||
* of the functionarray for MakeFunctions()/MakeLibrary().
|
||
*
|
||
* If there`s not such id the functionarray is a
|
||
* 32Bit 68k function ptr array.
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
|
||
{ * 68k 16bit relative functionarray ptrs
|
||
* (UWORD) $ffff stops it
|
||
* }
|
||
|
||
FUNCARRAY_16BIT_OLD = $ffffffff;
|
||
|
||
{ * PPC 32bit functionarray ptrs
|
||
* (ULONG) $ffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_NATIVE = $fffefffe;
|
||
|
||
{ * Starts a functionarray block.
|
||
* This way it`s possible to mix 68k and PPC
|
||
* function definitions.
|
||
* BASE:
|
||
* FUNCTIONARRAY_BEGIN
|
||
* FUNCARRAY_32BIT_NATIVE
|
||
* FUNC0
|
||
* FUNC1
|
||
* .
|
||
* FUNCn
|
||
* $ffffffff
|
||
* FUNCn+1 (No ID->32Bit 68k)
|
||
* FUNCn+2
|
||
* .
|
||
* FUNCm
|
||
* $ffffffff
|
||
* FUNCARRAY_16BIT_OLD
|
||
* FUNCm+1-BASE
|
||
* FUNCm+2-BASE
|
||
* .
|
||
* FUNCo-BASE
|
||
* $ffff
|
||
* FUNCTIONARRAY_END
|
||
* }
|
||
|
||
FUNCARRAY_BEGIN = $fffdfffd;
|
||
|
||
{ * Ends a functionarray block.
|
||
* }
|
||
FUNCARRAY_END = $fffcfffc;
|
||
|
||
{ * PPC 32bit Quick functionarray ptrs.
|
||
* These functions must comply to the emulation's
|
||
* register layout which is defined inside the
|
||
* emul/emulregs.h. That means the register layout
|
||
* MUST also be valid during interrupts/task switches.
|
||
* You can't just destroy A7(r31), SR or PC.
|
||
*
|
||
* You shouldn't use this for any normal code
|
||
* as there's no real reason to do so. If you
|
||
* really think you need to use it please ask
|
||
* us first on the dev mailinglist.
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_QUICK_NATIVE = $fffbfffb;
|
||
|
||
{ * PPC 32bit QuickNR(No Result) functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_QUICKNR_NATIVE = $fffafffa;
|
||
|
||
{ * PPC 32bit no result functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_NR_NATIVE = $fff9fff9;
|
||
|
||
{ * PPC 32bit SR functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_SR_NATIVE = $fff8fff8;
|
||
|
||
{ * PPC 32bit SR(no result) functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_SRNR_NATIVE = $fff7fff7;
|
||
|
||
{ * PPC 32bit D0_D1 functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_D0D1_NATIVE = $fff6fff6;
|
||
|
||
{ * PPC 32bit Restore1 functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_RESTORE_NATIVE = $fff5fff5;
|
||
|
||
{ * PPC 32bit SystemV ABI entry
|
||
* these function entries DON'T comply
|
||
* to the amiga register modell REG_D0-A6
|
||
* but comply to the PPC SystemV ABI so
|
||
* you can directly use PPC C Argument
|
||
* parsing. That way you're also not limited
|
||
* with the register count.
|
||
* Such library functions can't be used
|
||
* by 68k emulation, so you can only use
|
||
* them for new code.
|
||
* As we allow these new functions to be
|
||
* used with old functions we keep the
|
||
* 6 bytes function entry steps in the library.
|
||
* Layout is
|
||
*
|
||
* CODE_JMP, &FuncEntry ; Old Entry
|
||
* CODE_ILLEGAL, Function ; SystemV ABI Entry
|
||
*
|
||
*
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_SYSTEMV = $fff4fff4;
|
||
|
||
{ * PPC 32bit D0D1SR functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_D0D1SR_NATIVE = $fff3fff3;
|
||
|
||
{ * PPC 32bit D0D1A0A1SR functionarray ptrs
|
||
* (ULONG) $ffffffff stops it
|
||
* }
|
||
FUNCARRAY_32BIT_D0D1A0A1SR_NATIVE = $fff2fff2;
|
||
|
||
|
||
|
||
{ * exec device definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PDevice = ^TDevice;
|
||
TDevice = packed record
|
||
dd_Library: TLibrary;
|
||
end;
|
||
|
||
type
|
||
PUnit = ^TUnit;
|
||
TUnit = packed record
|
||
unit_MsgPort: TMsgPort;
|
||
unit_flags : Byte;
|
||
unit_pad : Byte;
|
||
unit_OpenCnt: Word;
|
||
end;
|
||
|
||
|
||
const
|
||
UNITF_ACTIVE = (1 Shl 0);
|
||
UNITF_INTASK = (1 Shl 1);
|
||
|
||
|
||
|
||
{ * exec io definitions (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PIORequest = ^TIORequest;
|
||
TIORequest = packed record
|
||
io_Message: TMessage;
|
||
io_Device : PDevice;
|
||
io_Unit : PUnit;
|
||
io_Command: Word;
|
||
io_Flags : Byte;
|
||
io_Error : ShortInt;
|
||
end;
|
||
|
||
type
|
||
PIOStdReq = ^TIOStdReq;
|
||
TIOStdReq = packed record
|
||
io_Message: TMessage;
|
||
io_Device : PDevice;
|
||
io_Unit : PUnit;
|
||
io_Command: Word;
|
||
io_Flags : Byte;
|
||
io_Error : ShortInt;
|
||
io_Actual : DWord;
|
||
io_Length : DWord;
|
||
io_Data : Pointer;
|
||
io_Offset : DWord;
|
||
end;
|
||
|
||
|
||
const
|
||
DEV_BEGINIO = -30;
|
||
DEV_ABORTIO = -36;
|
||
|
||
IOB_QUICK = 0;
|
||
IOF_QUICK = (1 Shl IOB_QUICK);
|
||
|
||
CMD_INVALID = 0;
|
||
CMD_RESET = 1;
|
||
CMD_READ = 2;
|
||
CMD_WRITE = 3;
|
||
CMD_UPDATE = 4;
|
||
CMD_CLEAR = 5;
|
||
CMD_STOP = 6;
|
||
CMD_START = 7;
|
||
CMD_FLUSH = 8;
|
||
CMD_NONSTD = 9;
|
||
|
||
|
||
|
||
{ * exec include (V50)
|
||
*********************************************************************
|
||
* }
|
||
|
||
|
||
type
|
||
PExecBase = ^TExecBase;
|
||
TExecBase = packed record
|
||
LIbNode : TLibrary;
|
||
SoftVer : Word;
|
||
LowMemChkSum: SmallInt;
|
||
ChkBase : DWord;
|
||
ColdCapture : Pointer;
|
||
CoolCapture : Pointer;
|
||
WarmCapture : Pointer;
|
||
SysStkUpper : Pointer;
|
||
SysStkLower : Pointer;
|
||
MaxLocMem : DWord;
|
||
DebugEntry : Pointer;
|
||
DebugData : Pointer;
|
||
AlertData : Pointer;
|
||
MaxExtMem : Pointer;
|
||
ChkSum : Word;
|
||
IntVects : Array[0..15] Of TIntVector;
|
||
ThisTask : PTask;
|
||
IdleCount : DWord;
|
||
DispCount : DWord;
|
||
Quantum : Word;
|
||
Elapsed : Word;
|
||
SysFlags : Word;
|
||
IDNestCnt : ShortInt;
|
||
TDNestCnt : ShortInt;
|
||
AttnFlags : Word;
|
||
AttnResched : Word;
|
||
ResModules : Pointer;
|
||
|
||
TaskTrapCode : Pointer;
|
||
TaskExceptCode: Pointer;
|
||
TaskExitCode : Pointer;
|
||
TaskSigAlloc : DWord;
|
||
TaskTrapAlloc : Word;
|
||
|
||
MemList : TList;
|
||
ResourceList: TList;
|
||
DeviceList : TList;
|
||
IntrList : TList;
|
||
LibList : TList;
|
||
PortList : TList;
|
||
TaskReady : TList;
|
||
TaskWait : TList;
|
||
SoftInts : Array[0..5] Of TSoftIntList;
|
||
LastAlert : Array[0..3] Of LongInt;
|
||
|
||
VBlankFrequency : Byte;
|
||
PowerSupplyFrequency: Byte;
|
||
SemaphoreList : TList;
|
||
KickMemPtr : Pointer;
|
||
KickTagPtr : Pointer;
|
||
KickCheckSum : Pointer;
|
||
ex_Pad0 : Word;
|
||
ex_LaunchPoint : DWord;
|
||
ex_RamLibPrivate : Pointer;
|
||
ex_EClockFrequency : DWord;
|
||
ex_CacheControl : DWord;
|
||
ex_TaskID : DWord;
|
||
|
||
{ * New ABox Emulation Entries
|
||
* }
|
||
ex_EmulHandleSize : DWord; { * PPC EmulHandleSize..*private* * }
|
||
ex_PPCTrapMsgPort : PMsgPort; { * PPC ABox Exception MsgPort..*private* * }
|
||
ex_Reserved1 : Array[0..2] Of DWord;
|
||
ex_MMULock : Pointer;
|
||
ex_PatchPool : Pointer; { * PatchPool Ptr needed by SetFunction..*private* * }
|
||
ex_PPCTaskExitCode : Pointer; { * PPC Task exit function * }
|
||
ex_DebugFlags : DWord; { * Exec Debug Flags..*private* * }
|
||
|
||
ex_MemHandlers : TMinList;
|
||
ex_MemHandler : Pointer;
|
||
end;
|
||
|
||
|
||
{ *
|
||
* Outdated 68k cpu informations
|
||
*
|
||
* }
|
||
const
|
||
AFB_68010 = 0;
|
||
AFB_68020 = 1;
|
||
AFB_68030 = 2;
|
||
AFB_68040 = 3;
|
||
AFB_68881 = 4;
|
||
AFB_68882 = 5;
|
||
AFB_FPU40 = 6;
|
||
AFB_68060 = 7;
|
||
AFB_PRIVATE = 15;
|
||
|
||
AFF_68010 = (1 Shl AFB_68010);
|
||
AFF_68020 = (1 Shl AFB_68020);
|
||
AFF_68030 = (1 Shl AFB_68030);
|
||
AFF_68040 = (1 Shl AFB_68040);
|
||
AFF_68881 = (1 Shl AFB_68881);
|
||
AFF_68882 = (1 Shl AFB_68882);
|
||
AFF_FPU40 = (1 Shl AFB_FPU40);
|
||
AFF_68060 = (1 Shl AFB_68060);
|
||
AFF_PRIVATE = (1 Shl AFB_PRIVATE);
|
||
|
||
{ *
|
||
* Outdated 68k cache functionality
|
||
* Mostly without function.
|
||
* }
|
||
const
|
||
CACRF_EnableI = (1 Shl 0);
|
||
CACRF_FreezeI = (1 Shl 1);
|
||
CACRF_ClearI = (1 Shl 3);
|
||
CACRF_IBE = (1 Shl 4);
|
||
CACRF_EnableD = (1 Shl 8);
|
||
CACRF_FreezeD = (1 Shl 9);
|
||
CACRF_ClearD = (1 Shl 11);
|
||
CACRF_DBE = (1 Shl 12);
|
||
CACRF_WriteAllocate = (1 Shl 13);
|
||
CACRF_EnableE = (1 Shl 30);
|
||
CACRF_CopyBack = (1 Shl 31);
|
||
|
||
DMA_Continue = (1 Shl 1);
|
||
DMA_NoModify = (1 Shl 2);
|
||
DMA_ReadFromRAM = (1 Shl 3);
|
||
|
||
SB_SAR = 15;
|
||
SB_TQE = 14;
|
||
SB_SINT = 13;
|
||
|
||
SF_SAR = (1 Shl SB_SAR);
|
||
SF_TQE = (1 Shl SB_TQE);
|
||
SF_SINT = (1 Shl SB_SINT);
|
||
|
||
|
||
{ ****** Debug Flags...(don`t depend on them) ********** }
|
||
const
|
||
EXECDEBUGF_INITRESIDENT = $1;
|
||
EXECDEBUGF_INITCODE = $2;
|
||
EXECDEBUGF_FINDRESIDENT = $4;
|
||
|
||
EXECDEBUGF_CREATELIBRARY = $10;
|
||
EXECDEBUGF_SETFUNCTION = $20;
|
||
EXECDEBUGF_NEWSETFUNCTION = $40;
|
||
EXECDEBUGF_CHIPRAM = $80;
|
||
|
||
EXECDEBUGF_ADDTASK = $100;
|
||
EXECDEBUGF_REMTASK = $200;
|
||
EXECDEBUGF_GETTASKATTR = $400;
|
||
EXECDEBUGF_SETTASKATTR = $800;
|
||
|
||
EXECDEBUGF_EXCEPTHANDLER = $1000;
|
||
EXECDEBUGF_ADDDOSNODE = $2000;
|
||
EXECDEBUGF_PCI = $4000;
|
||
EXECDEBUGF_RAMLIB = $8000;
|
||
|
||
EXECDEBUGF_NOLOGSERVER = $10000;
|
||
EXECDEBUGF_NOLOGWINDOW = $20000;
|
||
|
||
{ *
|
||
* "env:MorphOS/LogPath" contains the logfile path,
|
||
* If not specified it`s using "ram:.morphoslog"
|
||
* }
|
||
EXECDEBUGF_LOGFILE = $40000;
|
||
EXECDEBUGF_LOGKPRINTF = $80000;
|
||
|
||
{ * Memory Tracking Flags
|
||
* }
|
||
EXECDEBUGF_PERMMEMTRACK = $100000;
|
||
EXECDEBUGF_MEMTRACK = $200000;
|
||
|
||
{ * CyberGuardPPC Flags
|
||
* }
|
||
EXECDEBUGF_CYBERGUARDDEADLY = $400000;
|
||
|
||
{ * PPCLib Flags
|
||
* }
|
||
EXECDEBUGF_LOADSEG = $01000000;
|
||
EXECDEBUGF_UNLOADSEG = $02000000;
|
||
EXECDEBUGF_PPCSTART = $04000000;
|
||
|
||
{ * UserFlags
|
||
* }
|
||
|
||
{ *
|
||
* Enables debug output for cybergraphx
|
||
* }
|
||
const
|
||
EXECDEBUGF_CGXDEBUG = $08000000;
|
||
|
||
{ *
|
||
* Should be used to control user LibInit/DevInit Debug output
|
||
* }
|
||
EXECDEBUGF_INIT = $40000000;
|
||
|
||
{ *
|
||
* Should be used to control logging
|
||
* }
|
||
EXECDEBUGF_LOG = $80000000;
|
||
|
||
{ *
|
||
* Execbase list IDs
|
||
* }
|
||
EXECLIST_DEVICE = 0;
|
||
EXECLIST_INTERRUPT = 1;
|
||
EXECLIST_LIBRARY = 2;
|
||
EXECLIST_MEMHANDLER = 3;
|
||
EXECLIST_MEMHEADER = 4;
|
||
EXECLIST_PORT = 5;
|
||
EXECLIST_RESOURCE = 6;
|
||
EXECLIST_SEMAPHORE = 7;
|
||
EXECLIST_TASK = 8;
|
||
|
||
|
||
{ *
|
||
* Execnotify hook message
|
||
* }
|
||
type
|
||
PExecNotifyMessage = ^TExecNotifyMessage;
|
||
TExecNotifyMessage = packed record
|
||
MType : DWord;
|
||
Flags : DWord;
|
||
Extra : DWord;
|
||
Extension: Pointer;
|
||
end;
|
||
|
||
|
||
const
|
||
EXECNOTIFYF_REMOVE = (1 Shl 0); { * if clear, is ADD * }
|
||
EXECNOTIFYF_POST = (1 Shl 1); { * if clear, is PRE * }
|
||
|
||
|
||
{ *
|
||
* AddExecNodeTagList tags
|
||
* }
|
||
const
|
||
SAL_Dummy = (TAG_USER + 1000);
|
||
SAL_Type = (SAL_Dummy + 1);
|
||
SAL_Priority = (SAL_Dummy + 2);
|
||
SAL_Name = (SAL_Dummy + 3);
|
||
|
||
|
||
{$include utild2.inc}
|
||
|
||
|