mirror of https://github.com/deadw00d/AROS.git
LibOpen of crt.library up to __init_clock
This commit is contained in:
parent
1549ec8c73
commit
056b53536a
|
@ -26,7 +26,6 @@ MAKE_PROXY_ARG_3(AllocMem)
|
|||
|
||||
APTR abiv0_AllocVec(ULONG byteSize, ULONG requirements, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
asm("int3");
|
||||
return AllocVec(byteSize, requirements | MEMF_31BIT);
|
||||
}
|
||||
MAKE_PROXY_ARG_3(AllocVec)
|
||||
|
@ -43,6 +42,12 @@ APTR abiv0_AllocPooled(APTR poolHeader, ULONG memSize, struct ExecBaseV0 *SysBas
|
|||
}
|
||||
MAKE_PROXY_ARG_3(AllocPooled)
|
||||
|
||||
ULONG abiv0_TypeOfMem(APTR address, struct ExecBaseV0 *SysBaseV0)
|
||||
{
|
||||
return TypeOfMem(address);
|
||||
}
|
||||
MAKE_PROXY_ARG_2(TypeOfMem)
|
||||
|
||||
struct ResidentV0 * findResident(BPTR seg, CONST_STRPTR name)
|
||||
{
|
||||
/* we may not have any extension fields */
|
||||
|
@ -196,11 +201,22 @@ struct TaskV0 *abiv0_FindTask(CONST_STRPTR name, struct ExecBaseV0 *SysBaseV0)
|
|||
{
|
||||
static struct ProcessV0 *dummy = NULL;
|
||||
if (dummy == NULL) dummy = abiv0_AllocMem(sizeof(struct ProcessV0), MEMF_CLEAR, SysBaseV0);
|
||||
dummy->pr_Task.tc_Node.ln_Type = NT_PROCESS;
|
||||
dummy->pr_CLI = 0x1; //fake
|
||||
dummy->pr_CIS = 0x1; //fake
|
||||
dummy->pr_CES = 0x1; //fake
|
||||
return (struct TaskV0 *)dummy;
|
||||
}
|
||||
MAKE_PROXY_ARG_2(FindTask)
|
||||
|
||||
LONG abiv0_SetVBuf()
|
||||
{
|
||||
asm("int3");
|
||||
return 0;
|
||||
}
|
||||
MAKE_PROXY_ARG_5(SetVBuf)
|
||||
|
||||
|
||||
ULONG *execfunctable;
|
||||
ULONG *dosfunctable;
|
||||
ULONG *dosinitlist;
|
||||
|
@ -216,7 +232,8 @@ LONG_FUNC run_emulation()
|
|||
|
||||
APTR tmp;
|
||||
|
||||
BPTR kernelseg = LoadSeg32("SYS:Libs32/exec/kernel", DOSBase);
|
||||
/* Keep it! This fills global variable */
|
||||
LoadSeg32("SYS:Libs32/exec/kernel", DOSBase);
|
||||
|
||||
tmp = AllocMem(2048, MEMF_31BIT | MEMF_CLEAR);
|
||||
struct ExecBaseV0 *sysbase = (tmp + 1024);
|
||||
|
@ -230,7 +247,7 @@ LONG_FUNC run_emulation()
|
|||
__AROS_SETVECADDRV0(sysbase,184, (APTR32)(IPTR)proxy_SetTaskStorageSlot);
|
||||
__AROS_SETVECADDRV0(sysbase,185, (APTR32)(IPTR)proxy_GetTaskStorageSlot);
|
||||
__AROS_SETVECADDRV0(sysbase, 83, (APTR32)(IPTR)proxy_OpenResource);
|
||||
__AROS_SETVECADDRV0(sysbase, 93, execfunctable[92]); // InitSemaphore
|
||||
__AROS_SETVECADDRV0(sysbase, 93, execfunctable[92]); // InitSemaphore
|
||||
__AROS_SETVECADDRV0(sysbase, 33, (APTR32)(IPTR)proxy_AllocMem);
|
||||
__AROS_SETVECADDRV0(sysbase, 14, (APTR32)(IPTR)proxy_MakeLibrary);
|
||||
__AROS_SETVECADDRV0(sysbase,104, (APTR32)(IPTR)proxy_CopyMem);
|
||||
|
@ -238,6 +255,11 @@ LONG_FUNC run_emulation()
|
|||
__AROS_SETVECADDRV0(sysbase, 74, (APTR32)(IPTR)proxy_OpenDevice);
|
||||
__AROS_SETVECADDRV0(sysbase,118, (APTR32)(IPTR)proxy_AllocPooled);
|
||||
__AROS_SETVECADDRV0(sysbase,114, (APTR32)(IPTR)proxy_AllocVec);
|
||||
__AROS_SETVECADDRV0(sysbase, 46, execfunctable[45]); // FindName
|
||||
__AROS_SETVECADDRV0(sysbase,135, execfunctable[134]); // TaggedOpenLibrary
|
||||
__AROS_SETVECADDRV0(sysbase, 89, (APTR32)(IPTR)proxy_TypeOfMem);
|
||||
__AROS_SETVECADDRV0(sysbase, 41, execfunctable[40]); // AddTail
|
||||
|
||||
/* Keep it! This fills global variable */
|
||||
LoadSeg32("SYS:Libs32/dos.library", DOSBase);
|
||||
|
||||
|
@ -257,6 +279,9 @@ LONG_FUNC run_emulation()
|
|||
::"m"(sysbase), "m"(dosinitlist[1]) : "%rax", "%rcx");
|
||||
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 158, (APTR32)(IPTR)proxy_PutStr);
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 9, dosfunctable[8]); // Input
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 10, dosfunctable[9]); // Output
|
||||
__AROS_SETVECADDRV0(abiv0DOSBase, 61, (APTR32)(IPTR)proxy_SetVBuf);
|
||||
|
||||
/* Switch to CS = 0x23 during FAR call. This switches 32-bit emulation mode.
|
||||
Next, load 0x2B to DS (needed under 32-bit) and NEAR jump to 32-bit code */
|
||||
|
|
|
@ -58,6 +58,22 @@ void dummy_##fname() \
|
|||
LEAVE_PROXY \
|
||||
}
|
||||
|
||||
#define MAKE_PROXY_ARG_5(fname) \
|
||||
void proxy_##fname(); \
|
||||
void dummy_##fname() \
|
||||
{ \
|
||||
EXTER_PROXY(fname) \
|
||||
ENTER64 \
|
||||
COPY_ARG_1 \
|
||||
COPY_ARG_2 \
|
||||
COPY_ARG_3 \
|
||||
COPY_ARG_4 \
|
||||
COPY_ARG_5 \
|
||||
CALL_IMPL64(fname) \
|
||||
ENTER32 \
|
||||
LEAVE_PROXY \
|
||||
}
|
||||
|
||||
#define MAKE_PROXY_ARG_6(fname) \
|
||||
void proxy_##fname(); \
|
||||
void dummy_##fname() \
|
||||
|
|
Loading…
Reference in New Issue