Compare commits

...

13 Commits

Author SHA1 Message Date
deadwood 0f68a09f76 Forward all IDCMP messages that were seen during tests 2024-03-25 16:23:50 +01:00
deadwood f9e636ee69 Complete calculator shutdown
NOTE: memory gets damaged somewhere and any operation after shutdown, like
opening RAM: window for example causes crash
2024-03-25 16:02:50 +01:00
deadwood 909d02e309 Process messages with Intuition translation of IDCMP_CLOSEWINDOW 2024-03-25 15:52:21 +01:00
deadwood f6a3ac09fd Start processing message in NewInput
(but there are no messages being delivered yet)
2024-03-25 14:50:47 +01:00
deadwood 79cb4dda5d Fix rending of Calculator buttons - wrong X positions and widths 2024-03-25 14:12:32 +01:00
deadwood 9147b7efe9 Drawing Calculator gadgets completed, but their are in wrong position
Currently crashes in NewInput
2024-03-25 13:03:44 +01:00
deadwood 3fa9a68227 Start supporting drawing of Calculator gadgets 2024-03-25 12:47:10 +01:00
deadwood 2f77bc1a8b Align stack to 16 bytes before jumping to 64-bit code
This is x64 ABI requirement
2024-03-25 12:46:36 +01:00
deadwood e2aa98d630 Calculator is now opening its window 2024-03-24 21:26:17 +01:00
deadwood 5a5831e3dd Begin work on opening a window 2024-03-24 20:03:41 +01:00
deadwood 2e850c9a84 Complete font loading and MUIM_Window_Setup
Now proceeding with classes/window.c DisplayWindow
2024-03-24 19:39:37 +01:00
deadwood 3596b78e6f Move InitSemaphore to emulation code
Needed to init elements of library bases
2024-03-24 19:38:10 +01:00
deadwood 620a7acb40 Original file 2024-03-24 19:10:20 +01:00
13 changed files with 737 additions and 14 deletions

View File

@ -61,6 +61,15 @@ void abiv0_GetSysTime(struct timeval *dest, struct LibraryV0 *TimerBaseV0)
}
MAKE_PROXY_ARG_2(GetSysTime)
#include <proto/cybergraphics.h>
#include "abiv0/include/graphics/structures.h"
ULONG abiv0_FillPixelArray(struct RastPortV0 *rp, UWORD destx, UWORD desty, UWORD width, UWORD height, ULONG pixel)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
return FillPixelArray(rpnative, destx, desty, width, height, pixel);
}
MAKE_PROXY_ARG_6(FillPixelArray)
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
struct ResidentV0 * findResident(BPTR seg, CONST_STRPTR name);
@ -81,12 +90,6 @@ LONG_FUNC run_emulation()
init_dos(SysBaseV0);
BPTR cgfxseg = LoadSeg32("SYS:Libs32/partial/cybergraphics.library", DOSBase);
struct ResidentV0 *cgfxres = findResident(cgfxseg, NULL);
struct LibraryV0 *abiv0CyberGfxBase = shallow_InitResident32(cgfxres, cgfxseg, SysBaseV0);
/* Remove all vectors for now (leave LibOpen) */
for (int i = 5; i <= 38; i++) __AROS_SETVECADDRV0(abiv0CyberGfxBase, i, 0);
init_intuition(SysBaseV0);
init_graphics(SysBaseV0);
@ -98,6 +101,14 @@ LONG_FUNC run_emulation()
for (int i = 1; i <= 45; i++) __AROS_SETVECADDRV0(abiv0LayersBase, i, 0);
__AROS_SETVECADDRV0(abiv0LayersBase, 1, (APTR32)(IPTR)proxy_Layers_OpenLib);
BPTR cgfxseg = LoadSeg32("SYS:Libs32/partial/cybergraphics.library", DOSBase);
struct ResidentV0 *cgfxres = findResident(cgfxseg, NULL);
struct LibraryV0 *abiv0CyberGfxBase = shallow_InitResident32(cgfxres, cgfxseg, SysBaseV0);
/* Remove all vectors for now (leave LibOpen) */
for (int i = 5; i <= 38; i++) __AROS_SETVECADDRV0(abiv0CyberGfxBase, i, 0);
__AROS_SETVECADDRV0(abiv0CyberGfxBase, 25, (APTR32)(IPTR)proxy_FillPixelArray);
/* Start Program */

View File

@ -2,6 +2,7 @@
#include <proto/dos.h>
#include <aros/debug.h>
#include <string.h>
#include "../include/exec/structures.h"
#include "../include/exec/functions.h"
@ -95,8 +96,8 @@ MAKE_PROXY_ARG_4(Read)
LONG abiv0_Seek(BPTR file, LONG position, LONG mode, struct DosLibraryV0 *DOSBaseV0)
{
struct FileHandleProxy *fhp = (struct FileHandleProxy *)file;
return Seek(fhp->native, position, mode);
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)file;
return Seek(fhproxy->native, position, mode);
}
MAKE_PROXY_ARG_4(Seek)
@ -165,6 +166,21 @@ BPTR abiv0_DupLock(BPTR lock, struct DosLibraryV0 *DOSBaseV0)
}
MAKE_PROXY_ARG_2(DupLock)
LONG abiv0_SameLock(BPTR lock1, BPTR lock2, struct DosLibraryV0 *DOSBaseV0)
{
struct FileLockProxy *proxy1 = (struct FileLockProxy *)lock1;
struct FileLockProxy *proxy2 = (struct FileLockProxy *)lock2;
return SameLock(proxy1->native, proxy2->native);
}
MAKE_PROXY_ARG_3(SameLock)
BOOL abiv0_UnLock(BPTR lock, struct DosLibraryV0 *DOSBaseV0)
{
struct FileLockProxy *proxy = (struct FileLockProxy *)lock;
return UnLock(proxy->native);
}
MAKE_PROXY_ARG_2(UnLock)
struct FileInfoBlockProxy
{
struct FileInfoBlockV0 base;
@ -224,12 +240,36 @@ LONG abiv0_Examine(BPTR lock, struct FileInfoBlockV0 *fib, struct DosLibraryV0 *
if (res)
{
fibproxy->base.fib_Date = fibproxy->native->fib_Date;
fibproxy->base.fib_Size = fibproxy->native->fib_Size;
bug("abiv0_Examine: STUB\n");
}
return res;
}
MAKE_PROXY_ARG_3(Examine)
BOOL abiv0_ExamineFH(BPTR fh, struct FileInfoBlockV0 *fib, struct DosLibraryV0 *DOSBaseV0)
{
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)fh;
struct FileInfoBlockProxy *fibproxy = (struct FileInfoBlockProxy *)fib;
BOOL res = ExamineFH(fhproxy->native, fibproxy->native);
if (res)
{
fibproxy->base.fib_Date = fibproxy->native->fib_Date;
fibproxy->base.fib_Size = fibproxy->native->fib_Size;
bug("abiv0_ExamineFH: STUB\n");
}
return res;
}
MAKE_PROXY_ARG_3(ExamineFH)
LONG abiv0_Flush(BPTR file, struct DosLibraryV0 *DOSBaseV0)
{
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)file;
return Flush(fhproxy->native);
}
MAKE_PROXY_ARG_2(Flush)
BPTR abiv0_CurrentDir(BPTR lock, struct DosLibraryV0 *DOSBaseV0)
{
struct FileLockProxy *flproxy = (struct FileLockProxy *)lock;
@ -240,18 +280,75 @@ MAKE_PROXY_ARG_2(CurrentDir)
BOOL abiv0_ExAll(BPTR lock, struct ExAllDataV0 *buffer, LONG size, LONG type, struct ExAllControlV0 *control, struct DosLibraryV0 *DOSBaseV0)
{
struct ExAllControlProxy *eacproxy = (struct ExAllControlProxy *)control;
struct FileHandleProxy *fhproxy = (struct FileHandleProxy *)lock;
if (type != ED_DATE) asm("int3"); // Copying assumes ED_DATE sizes of structures!!!!
if (eacproxy->base.eac_LastKey == 0)
{
eacproxy->native->eac_LastKey = 0;
eacproxy->base.eac_LastKey = 0xbaadf00d;
}
APTR buffernative = AllocMem(size, MEMF_CLEAR);
BOOL res = ExAll(fhproxy->native, buffernative , size, type, eacproxy->native);
eacproxy->base.eac_Entries = eacproxy->native->eac_Entries;
if (eacproxy->native->eac_Entries > 0)
{
struct ExAllData *eadnativeit = (struct ExAllData *)buffernative;
struct ExAllDataV0 *writeit = buffer;
APTR writenext = NULL;
APTR writename = NULL;
for (; eadnativeit != NULL; eadnativeit = eadnativeit->ed_Next)
{
int namelen = strlen(eadnativeit->ed_Name) + 1;
writename = (APTR)writeit + 8; // only up to ED_DATE
if (eadnativeit->ed_Next == NULL)
writenext = NULL;
else
writenext = writename + namelen;
writeit->ed_Next = (APTR32)(IPTR)writenext;
writeit->ed_Name = (APTR32)(IPTR)writename;
writeit->ed_Type = eadnativeit->ed_Type;
writeit->ed_Size = eadnativeit->ed_Size;
writeit->ed_Prot = eadnativeit->ed_Prot;
writeit->ed_Days = eadnativeit->ed_Days;
writeit->ed_Mins = eadnativeit->ed_Mins;
writeit->ed_Ticks = eadnativeit->ed_Ticks;
// ed_Comment, ed_OwnerUID, ed_OwnerGUI missing
CopyMem(eadnativeit->ed_Name, writename, namelen);
writeit = (struct ExAllDataV0 *)writenext;
}
}
bug("abiv0_ExAll: STUB\n");
return FALSE;
FreeMem(buffernative, size);
return res;
}
MAKE_PROXY_ARG_6(ExAll)
SIPTR abiv0_IoErr(struct DosLibraryV0 *DOSBaseV0)
{
bug("abiv0_IoErr: STUB\n");
return ERROR_NO_MORE_ENTRIES;
// possibly copy Result2 to task proxy as well
return IoErr();
}
MAKE_PROXY_ARG_1(IoErr)
struct IntDosBaseV0
{
struct DosLibraryV0 pub;
APTR32 debugBase;
BYTE rootNode[108] __attribute__((aligned(4)));
BYTE errors[8] __attribute__((aligned(4)));
struct SignalSemaphoreV0 segsem;
struct ListV0 segdata;
};
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
APTR abiv0_DOS_OpenLibrary(CONST_STRPTR name, ULONG version, struct ExecBaseV0 *SysBaseV0);
@ -283,6 +380,8 @@ void init_dos(struct ExecBaseV0 *SysBaseV0)
::"m"(SysBaseV0), "m"(seginitlist[1]) : "%rax", "%rcx");
abiv0DOSBase->dl_UtilityBase = (APTR32)(IPTR)abiv0_DOS_OpenLibrary("utility.library", 0L, SysBaseV0);
NEWLISTV0(&((struct IntDosBaseV0 *)abiv0DOSBase)->segdata);
abiv0_InitSemaphore(&((struct IntDosBaseV0 *)abiv0DOSBase)->segsem, SysBaseV0);
__AROS_SETVECADDRV0(abiv0DOSBase, 158, (APTR32)(IPTR)proxy_PutStr);
__AROS_SETVECADDRV0(abiv0DOSBase, 9, dosfunctable[8]); // Input
@ -316,4 +415,16 @@ void init_dos(struct ExecBaseV0 *SysBaseV0)
__AROS_SETVECADDRV0(abiv0DOSBase, 22, (APTR32)(IPTR)proxy_IoErr);
__AROS_SETVECADDRV0(abiv0DOSBase, 39, (APTR32)(IPTR)proxy_FreeDosObject);
__AROS_SETVECADDRV0(abiv0DOSBase, 108, (APTR32)(IPTR)proxy_FreeDeviceProc);
__AROS_SETVECADDRV0(abiv0DOSBase, 123, dosfunctable[122]); // CompareDates
__AROS_SETVECADDRV0(abiv0DOSBase, 65, (APTR32)(IPTR)proxy_ExamineFH);
__AROS_SETVECADDRV0(abiv0DOSBase, 60, (APTR32)(IPTR)proxy_Flush);
__AROS_SETVECADDRV0(abiv0DOSBase, 25, dosfunctable[ 24]); // LoadSeg // This is tricky becaused on LoadSeg32
__AROS_SETVECADDRV0(abiv0DOSBase, 126, dosfunctable[125]); // InternalLoadSeg
__AROS_SETVECADDRV0(abiv0DOSBase, 26, dosfunctable[ 25]); // UnLoadSeg // This is tricky becaused on LoadSeg32
__AROS_SETVECADDRV0(abiv0DOSBase, 127, dosfunctable[126]); // InternalUnLoadSeg
__AROS_SETVECADDRV0(abiv0DOSBase, 136, dosfunctable[135]); // StrToLong
__AROS_SETVECADDRV0(abiv0DOSBase, 134, dosfunctable[133]); // FindArg
__AROS_SETVECADDRV0(abiv0DOSBase, 146, dosfunctable[145]); // PathPart
__AROS_SETVECADDRV0(abiv0DOSBase, 70, (APTR32)(IPTR)proxy_SameLock);
__AROS_SETVECADDRV0(abiv0DOSBase, 15, (APTR32)(IPTR)proxy_UnLock);
}

View File

@ -6,6 +6,7 @@
#include <string.h>
#include "../include/exec/structures.h"
#include "../include/exec/proxy_structures.h"
#include "../include/exec/functions.h"
#include "../include/aros/cpu.h"
#include "../include/aros/proxy.h"
@ -51,6 +52,12 @@ APTR abiv0_CreatePool(ULONG requirements, ULONG puddleSize, ULONG threshSize, st
}
MAKE_PROXY_ARG_4(CreatePool)
void abiv0_DeletePool(APTR poolHeader, struct ExecBaseV0 *SysBaseV0)
{
DeletePool(poolHeader);
}
MAKE_PROXY_ARG_2(DeletePool)
APTR abiv0_AllocPooled(APTR poolHeader, ULONG memSize, struct ExecBaseV0 *SysBaseV0)
{
return AllocPooled(poolHeader, memSize);
@ -220,6 +227,12 @@ asm("int3");
}
MAKE_PROXY_ARG_2(OpenResource)
void abiv0_CacheClearE(APTR address, IPTR length, ULONG caches, struct ExecBaseV0 *SysBaseV0)
{
CacheClearE(address, length, caches);
}
MAKE_PROXY_ARG_4(CacheClearE)
LONG abiv0_OpenDevice(CONST_STRPTR devName, ULONG unitNumber, struct IORequestV0 *iORequest)
{
if (strcmp(devName, "timer.device") == 0)
@ -241,13 +254,68 @@ asm("int3");
}
MAKE_PROXY_ARG_4(OpenDevice)
void abiv0_CloseDevice(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
{
bug("abiv0_CloseDevice: STUB\n");
}
MAKE_PROXY_ARG_2(CloseDevice)
struct MsgPortV0 * abiv0_CreateMsgPort(struct ExecBaseV0 *SysBaseV0)
{
bug("abiv0_CreateMsgPort: STUB\n");
return (struct MsgPortV0 *)0x6;
struct MsgPortProxy *proxy = abiv0_AllocMem(sizeof(struct MsgPortProxy), MEMF_CLEAR, SysBaseV0);
struct MsgPort *native = CreateMsgPort();
proxy->base.mp_SigBit = native->mp_SigBit;
NEWLISTV0(&proxy->base.mp_MsgList);
proxy->native = native;
return (struct MsgPortV0 *)proxy;
}
MAKE_PROXY_ARG_1(CreateMsgPort)
void abiv0_DeleteMsgPort(struct MsgPortV0 * port, struct ExecBaseV0 *SysBaseV0)
{
struct MsgPortProxy *proxy = (struct MsgPortProxy *)port;
DeleteMsgPort(proxy->native);
}
MAKE_PROXY_ARG_2(DeleteMsgPort)
struct MessageV0 * abiv0_GetMsg(struct MsgPortV0 *port, struct ExecBaseV0 *SysBaseV0)
{
struct MsgPortProxy *proxy = (struct MsgPortProxy *)port;
struct Message *msg = GetMsg(proxy->native);
if (proxy->translate)
{
return proxy->translate(msg);
}
if (msg)
{
bug("abiv0_GetMsg: STUB\n");
asm("int3");
}
return NULL;
}
MAKE_PROXY_ARG_2(GetMsg)
void abiv0_ReplyMsg(struct MessageV0 *message, struct ExecBaseV0 *SysBaseV0)
{
if (message)
{
struct Message *native = (struct Message *)*(IPTR*)&message->mn_Node;
ReplyMsg(native);
}
}
MAKE_PROXY_ARG_2(ReplyMsg)
ULONG abiv0_Wait(ULONG signalSet, struct ExecBaseV0 *SysBaseV0)
{
return Wait(signalSet);
}
MAKE_PROXY_ARG_2(Wait)
LONG abiv0_DoIO(struct IORequestV0 *IORequest, struct ExecBaseV0 *SysBaseV0)
{
bug("abiv0_DoIO: STUB\n");
@ -255,9 +323,36 @@ bug("abiv0_DoIO: STUB\n");
}
MAKE_PROXY_ARG_2(DoIO)
void abiv0_SendIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
{
bug("abiv0_SendIO: STUB\n");
}
MAKE_PROXY_ARG_2(SendIO)
struct IORequestV0 *abiv0_CheckIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
{
bug("abiv0_CheckIO: STUB\n");
return NULL;
}
MAKE_PROXY_ARG_2(CheckIO)
LONG abiv0_AbortIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
{
bug("abiv0_AbortIO: STUB\n");
return 0;
}
MAKE_PROXY_ARG_2(AbortIO)
LONG abiv0_WaitIO(struct IORequestV0 *iORequest, struct ExecBaseV0 *SysBaseV0)
{
bug("abiv0_WaitIO: STUB\n");
return 0;
}
MAKE_PROXY_ARG_2(WaitIO)
MAKE_PROXY_ARG_6(MakeLibrary)
MAKE_PROXY_ARG_2(AddResource)
MAKE_PROXY_ARG_2(InitSemaphore)
void abiv0_CopyMem(APTR source, APTR dest, ULONG size)
{
@ -311,7 +406,7 @@ struct ExecBaseV0 *init_exec()
__AROS_SETVECADDRV0(abiv0SysBase,184, (APTR32)(IPTR)proxy_SetTaskStorageSlot);
__AROS_SETVECADDRV0(abiv0SysBase,185, (APTR32)(IPTR)proxy_GetTaskStorageSlot);
__AROS_SETVECADDRV0(abiv0SysBase, 83, (APTR32)(IPTR)proxy_OpenResource);
__AROS_SETVECADDRV0(abiv0SysBase, 93, execfunctable[92]); // InitSemaphore
__AROS_SETVECADDRV0(abiv0SysBase, 93, (APTR32)(IPTR)proxy_InitSemaphore);
__AROS_SETVECADDRV0(abiv0SysBase, 33, (APTR32)(IPTR)proxy_AllocMem);
__AROS_SETVECADDRV0(abiv0SysBase, 14, (APTR32)(IPTR)proxy_MakeLibrary);
__AROS_SETVECADDRV0(abiv0SysBase,104, (APTR32)(IPTR)proxy_CopyMem);
@ -344,6 +439,21 @@ struct ExecBaseV0 *init_exec()
__AROS_SETVECADDRV0(abiv0SysBase,149, (APTR32)(IPTR)proxy_AllocVecPooled);
__AROS_SETVECADDRV0(abiv0SysBase, 76, (APTR32)(IPTR)proxy_DoIO);
__AROS_SETVECADDRV0(abiv0SysBase,119, (APTR32)(IPTR)proxy_FreePooled);
__AROS_SETVECADDRV0(abiv0SysBase,107, (APTR32)(IPTR)proxy_CacheClearE);
__AROS_SETVECADDRV0(abiv0SysBase, 39, execfunctable[38]); // Insert
__AROS_SETVECADDRV0(abiv0SysBase, 44, execfunctable[43]); // RemTail
__AROS_SETVECADDRV0(abiv0SysBase, 43, execfunctable[42]); // RemHead
__AROS_SETVECADDRV0(abiv0SysBase, 62, (APTR32)(IPTR)proxy_GetMsg);
__AROS_SETVECADDRV0(abiv0SysBase, 53, (APTR32)(IPTR)proxy_Wait);
__AROS_SETVECADDRV0(abiv0SysBase, 63, (APTR32)(IPTR)proxy_ReplyMsg);
__AROS_SETVECADDRV0(abiv0SysBase,117, (APTR32)(IPTR)proxy_DeletePool);
__AROS_SETVECADDRV0(abiv0SysBase,112, (APTR32)(IPTR)proxy_DeleteMsgPort);
__AROS_SETVECADDRV0(abiv0SysBase, 75, (APTR32)(IPTR)proxy_CloseDevice);
__AROS_SETVECADDRV0(abiv0SysBase,110, execfunctable[109]); // DeleteIORequest
__AROS_SETVECADDRV0(abiv0SysBase, 77, (APTR32)(IPTR)proxy_SendIO);
__AROS_SETVECADDRV0(abiv0SysBase, 78, (APTR32)(IPTR)proxy_CheckIO);
__AROS_SETVECADDRV0(abiv0SysBase, 80, (APTR32)(IPTR)proxy_AbortIO);
__AROS_SETVECADDRV0(abiv0SysBase, 79, (APTR32)(IPTR)proxy_WaitIO);
return abiv0SysBase;
}

View File

@ -0,0 +1,32 @@
/*
Copyright (C) 1995-2001, The AROS Development Team. All rights reserved.
Desc: Initialize a SignalSemaphore
*/
#include "../include/exec/structures.h"
#define NT_SIGNALSEM 15
void abiv0_InitSemaphore(struct SignalSemaphoreV0 *sigSem, struct ExecBaseV0 *SysBaseV0)
{
/* Clear list of wait messages */
sigSem->ss_WaitQueue.mlh_Head = (APTR32)(IPTR)&sigSem->ss_WaitQueue.mlh_Tail;
sigSem->ss_WaitQueue.mlh_Tail = NULL;
sigSem->ss_WaitQueue.mlh_TailPred = (APTR32)(IPTR)&sigSem->ss_WaitQueue.mlh_Head;
/* Set type of Semaphore */
sigSem->ss_Link.ln_Type = NT_SIGNALSEM;
/* Semaphore is currently unused */
sigSem->ss_NestCount = 0;
/* Semaphore has no owner yet */
sigSem->ss_Owner = 0;
/* Semaphore has no queue */
sigSem->ss_QueueCount = -1;
} /* InitSemaphore */

View File

@ -14,6 +14,12 @@
struct ExecBaseV0 *Gfx_SysBaseV0;
struct RegionProxy
{
struct RegionV0 base;
struct Region *native;
};
struct LibraryV0 *abiv0_Gfx_OpenLib(ULONG version, struct LibraryV0 *GfxBaseV0)
{
return GfxBaseV0;
@ -45,6 +51,12 @@ bug("abiv0_OpenFont: STUB\n");
}
MAKE_PROXY_ARG_3(OpenFont)
void abiv0_CloseFont(APTR textFont, struct GfxBaseV0 *GfxBaseV0)
{
bug("abiv0_CloseFont: STUB\n");
}
MAKE_PROXY_ARG_3(CloseFont)
LONG abiv0_ObtainBestPenA(struct ColorMapV0 *cm, ULONG r, ULONG g, ULONG b, struct TagItemV0 *tags, struct LibraryV0 *GfxBaseV0)
{
struct ColorMapProxy *proxy = (struct ColorMapProxy *)cm;
@ -75,6 +87,91 @@ asm("int3");
}
MAKE_PROXY_ARG_6(ObtainBestPenA)
void abiv0_ReleasePen(struct ColorMapV0 *cm, ULONG n, struct GfxBaseV0 *GfxBaseV0)
{
struct ColorMapProxy *proxy = (struct ColorMapProxy *)cm;
ReleasePen(proxy->native, n);
}
MAKE_PROXY_ARG_3(ReleasePen)
void abiv0_SetDrMd(struct RastPortV0 *rp, ULONG drawMode, struct GfxBaseV0 *GfxBaseV0)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
SetDrMd(rpnative, drawMode);
}
MAKE_PROXY_ARG_3(SetDrMd)
void abiv0_SetAPen(struct RastPortV0 *rp, ULONG pen, struct GfxBaseV0 *GfxBaseV0)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
SetAPen(rpnative, pen);
}
MAKE_PROXY_ARG_3(SetAPen)
void abiv0_RectFill(struct RastPortV0 * rp, LONG xMin, LONG yMin, LONG xMax, LONG yMax, struct GfxBaseV0 *GfxBaseV0)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
RectFill(rpnative, xMin, yMin, xMax, yMax);
}
MAKE_PROXY_ARG_6(RectFill)
void abiv0_Move(struct RastPortV0 *rp, WORD x, WORD y, struct GfxBaseV0 *GfxBaseV0)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
Move(rpnative, x, y);
}
MAKE_PROXY_ARG_4(Move)
void abiv0_Draw(struct RastPortV0 *rp, WORD x, WORD y, struct GfxBaseV0 *GfxBaseV0)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
Draw(rpnative, x, y);
}
MAKE_PROXY_ARG_4(Draw)
void abiv0_Text(struct RastPortV0 *rp, CONST_STRPTR string, ULONG count, struct GfxBaseV0 *GfxBaseV0)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
Text(rpnative, string, count);
}
MAKE_PROXY_ARG_4(Text)
LONG abiv0_WritePixel(struct RastPortV0 *rp, LONG x, LONG y, struct GfxBaseV0 *GfxBaseV0)
{
struct RastPort *rpnative = (struct RastPort *)*(IPTR *)&rp->longreserved;
return WritePixel(rpnative, x, y);
}
MAKE_PROXY_ARG_4(WritePixel)
struct RegionV0 *abiv0_NewRegion(struct GfxBaseV0 *GfxBaseV0)
{
struct RegionProxy *proxy = abiv0_AllocMem(sizeof(struct RegionProxy), MEMF_CLEAR, Gfx_SysBaseV0);
proxy->native = NewRegion();
return (struct RegionV0 *)proxy;
}
MAKE_PROXY_ARG_1(NewRegion)
BOOL abiv0_OrRectRegion(struct RegionV0 *Reg, struct Rectangle *Rect, struct GfxBaseV0 *GfxBaseV0)
{
struct RegionProxy *proxy = (struct RegionProxy *)Reg;
return OrRectRegion(proxy->native, Rect);
}
MAKE_PROXY_ARG_3(OrRectRegion)
void abiv0_DisposeRegion(struct RegionV0 *region, struct GfxBaseV0 *GfxBaseV0)
{
struct RegionProxy *proxy = (struct RegionProxy *)region;
return DisposeRegion(proxy->native);
}
MAKE_PROXY_ARG_2(DisposeRegion)
BOOL abiv0_ClearRectRegion(struct RegionV0 *Reg, struct Rectangle *Rect, struct GfxBaseV0 *GfxBaseV0)
{
struct RegionProxy *proxy = (struct RegionProxy *)Reg;
return ClearRectRegion(proxy->native, Rect);
}
MAKE_PROXY_ARG_3(ClearRectRegion)
struct LibraryV0 *shallow_InitResident32(struct ResidentV0 *resident, BPTR segList, struct ExecBaseV0 *SysBaseV0);
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
struct ResidentV0 * findResident(BPTR seg, CONST_STRPTR name);
@ -93,6 +190,7 @@ void init_graphics(struct ExecBaseV0 *SysBaseV0)
for (int i = 1; i <= 201; i++) __AROS_SETVECADDRV0(abiv0GfxBase, i, 0);
abiv0GfxBase->ExecBase = (APTR32)(IPTR)SysBaseV0;
*(ULONG *)((IPTR)abiv0GfxBase + 0x4b0) = (APTR32)(IPTR)abiv0_DOS_OpenLibrary("utility.library", 0L, SysBaseV0);
NEWLISTV0(&abiv0GfxBase->TextFonts);
__AROS_SETVECADDRV0(abiv0GfxBase, 1, (APTR32)(IPTR)proxy_Gfx_OpenLib);
__AROS_SETVECADDRV0(abiv0GfxBase, 12, (APTR32)(IPTR)proxy_OpenFont);
@ -101,4 +199,23 @@ void init_graphics(struct ExecBaseV0 *SysBaseV0)
__AROS_SETVECADDRV0(abiv0GfxBase, 140, (APTR32)(IPTR)proxy_ObtainBestPenA);
__AROS_SETVECADDRV0(abiv0GfxBase, 33, graphicsjmp[202 - 33]); // InitRastPort
__AROS_SETVECADDRV0(abiv0GfxBase, 11, graphicsjmp[202 - 11]); // SetFont
__AROS_SETVECADDRV0(abiv0GfxBase, 134, graphicsjmp[202 - 134]); // WeighTAMatch
__AROS_SETVECADDRV0(abiv0GfxBase, 136, graphicsjmp[202 - 136]); // ExtendFont
__AROS_SETVECADDRV0(abiv0GfxBase, 80, graphicsjmp[202 - 80]); // AddFont
__AROS_SETVECADDRV0(abiv0GfxBase, 9, graphicsjmp[202 - 9]); // TextLength
__AROS_SETVECADDRV0(abiv0GfxBase, 59, (APTR32)(IPTR)proxy_SetDrMd);
__AROS_SETVECADDRV0(abiv0GfxBase, 57, (APTR32)(IPTR)proxy_SetAPen);
__AROS_SETVECADDRV0(abiv0GfxBase, 51, (APTR32)(IPTR)proxy_RectFill);
__AROS_SETVECADDRV0(abiv0GfxBase, 86, (APTR32)(IPTR)proxy_NewRegion);
__AROS_SETVECADDRV0(abiv0GfxBase, 85, (APTR32)(IPTR)proxy_OrRectRegion);
__AROS_SETVECADDRV0(abiv0GfxBase, 89, (APTR32)(IPTR)proxy_DisposeRegion);
__AROS_SETVECADDRV0(abiv0GfxBase, 40, (APTR32)(IPTR)proxy_Move);
__AROS_SETVECADDRV0(abiv0GfxBase, 41, (APTR32)(IPTR)proxy_Draw);
__AROS_SETVECADDRV0(abiv0GfxBase, 14, graphicsjmp[202 - 14]); // AskSoftStyle
__AROS_SETVECADDRV0(abiv0GfxBase, 15, graphicsjmp[202 - 15]); // SetSoftStyle
__AROS_SETVECADDRV0(abiv0GfxBase, 10, (APTR32)(IPTR)proxy_Text);
__AROS_SETVECADDRV0(abiv0GfxBase, 87, (APTR32)(IPTR)proxy_ClearRectRegion);
__AROS_SETVECADDRV0(abiv0GfxBase, 54, (APTR32)(IPTR)proxy_WritePixel);
__AROS_SETVECADDRV0(abiv0GfxBase, 158, (APTR32)(IPTR)proxy_ReleasePen);
__AROS_SETVECADDRV0(abiv0GfxBase, 13, (APTR32)(IPTR)proxy_CloseFont);
}

View File

@ -39,4 +39,13 @@
#define COPY_ARG_6 \
" movl 24(%%rsp), %%r9d\n"
#define ALIGN_STACK64 \
" push %%r12\n" \
" movq %%rsp, %%r12\n" \
" andq $-16, %%rsp\n" \
#define RESTORE_STACK64 \
" movq %%r12, %%rsp\n" \
" popq %%r12\n" \
#endif

View File

@ -23,7 +23,9 @@ void dummy_##fname() \
EXTER_PROXY(fname) \
ENTER64 \
COPY_ARG_1 \
ALIGN_STACK64 \
CALL_IMPL64(fname) \
RESTORE_STACK64 \
ENTER32 \
LEAVE_PROXY \
}
@ -36,7 +38,9 @@ void dummy_##fname() \
ENTER64 \
COPY_ARG_1 \
COPY_ARG_2 \
ALIGN_STACK64 \
CALL_IMPL64(fname) \
RESTORE_STACK64 \
ENTER32 \
LEAVE_PROXY \
}
@ -50,7 +54,9 @@ void dummy_##fname() \
COPY_ARG_1 \
COPY_ARG_2 \
COPY_ARG_3 \
ALIGN_STACK64 \
CALL_IMPL64(fname) \
RESTORE_STACK64 \
ENTER32 \
LEAVE_PROXY \
}
@ -65,7 +71,9 @@ void dummy_##fname() \
COPY_ARG_2 \
COPY_ARG_3 \
COPY_ARG_4 \
ALIGN_STACK64 \
CALL_IMPL64(fname) \
RESTORE_STACK64 \
ENTER32 \
LEAVE_PROXY \
}
@ -81,7 +89,9 @@ void dummy_##fname() \
COPY_ARG_3 \
COPY_ARG_4 \
COPY_ARG_5 \
ALIGN_STACK64 \
CALL_IMPL64(fname) \
RESTORE_STACK64 \
ENTER32 \
LEAVE_PROXY \
}
@ -98,7 +108,9 @@ void dummy_##fname() \
COPY_ARG_4 \
COPY_ARG_5 \
COPY_ARG_6 \
ALIGN_STACK64 \
CALL_IMPL64(fname) \
RESTORE_STACK64 \
ENTER32 \
LEAVE_PROXY \
}

View File

@ -15,5 +15,6 @@ void abiv0_AddLibrary(struct LibraryV0 *library, struct ExecBaseV0 *SysBaseV0);
void abiv0_Enqueue(struct ListV0 *list, struct NodeV0 *node, struct ExecBaseV0 *SysBaseV0);
struct NodeV0 * abiv0_FindName(struct ListV0 *list, CONST_STRPTR name, struct ExecBaseV0 *SysBaseV0);
struct LibraryV0 * abiv0_OpenLibrary(CONST_STRPTR libName, ULONG version, struct ExecBaseV0 *SysBaseV0);
void abiv0_InitSemaphore(struct SignalSemaphoreV0 *sigSem, struct ExecBaseV0 *SysBaseV0);
#endif

View File

@ -0,0 +1,13 @@
#ifndef ABIV0_EXEC_PROXY_STRUCTURES_H
#define ABIV0_EXEC_PROXY_STRUCTURES_H
#include "./structures.h"
struct MsgPortProxy
{
struct MsgPortV0 base;
struct MsgPort *native;
struct MessageV0 *(*translate)(struct Message *);
};
#endif

View File

@ -176,6 +176,12 @@ struct TextAttrV0
UBYTE ta_Flags;
};
struct RegionV0
{
struct Rectangle bounds;
APTR32 RegionRectangle;
};
struct GfxBaseV0
{
struct LibraryV0 LibNode; /* Standard Library Node */

View File

@ -49,6 +49,85 @@ struct ScreenV0
APTR32 UserData;
};
struct WindowV0
{
APTR32 NextWindow;
WORD LeftEdge;
WORD TopEdge;
WORD Width;
WORD Height;
WORD MouseX; /* ABI_V0 compatibility */
WORD MouseY; /* ABI_V0 compatibility */
WORD MinWidth;
WORD MinHeight;
UWORD MaxWidth;
UWORD MaxHeight;
ULONG Flags;
APTR32 MenuStrip;
APTR32 Title;
APTR32 FirstRequest;
APTR32 DMRequest;
WORD ReqCount;
APTR32 WScreen;
APTR32 RPort;
BYTE BorderLeft;
BYTE BorderTop;
BYTE BorderRight;
BYTE BorderBottom;
APTR32 BorderRPort;
APTR32 FirstGadget;
APTR32 Parent;
APTR32 Descendant;
APTR32 Pointer;
BYTE PtrHeight;
BYTE PtrWidth;
BYTE XOffset;
BYTE YOffset;
ULONG IDCMPFlags;
APTR32 UserPort;
APTR32 WindowPort;
APTR32 MessageKey;
UBYTE DetailPen;
UBYTE BlockPen;
APTR32 CheckMark;
APTR32 ScreenTitle;
WORD GZZMouseX;
WORD GZZMouseY;
WORD GZZWidth;
WORD GZZHeight;
APTR32 ExtData;
APTR32 UserData;
APTR32 WLayer;
APTR32 IFont;
ULONG MoreFlags;
WORD RelLeftEdge; // relative coordinates of the window
WORD RelTopEdge; // to its parent window. If it is
// a window on the screen then these
// are the same as LeftEdge and TopEdge.
APTR32 firstchild; // pointer to first child
APTR32 prevchild; // if window is a child of a window
APTR32 nextchild; // then they are concatenated here.
APTR32 parent; // parent of this window
};
struct DrawInfoV0
{
UWORD dri_Version; /* see below */
@ -79,4 +158,24 @@ struct DrawInfoV0
ULONG dri_Reserved[3];
};
/***** Intuition Message *****/
struct IntuiMessageV0
{
struct MessageV0 ExecMessage;
ULONG Class;
UWORD Code;
UWORD Qualifier;
APTR32 IAddress;
WORD MouseX;
WORD MouseY;
ULONG Seconds;
ULONG Micros;
APTR32 IDCMPWindow;
APTR32 SpecialLink;
};
#endif

View File

@ -6,11 +6,13 @@
#include <string.h>
#include "../include/exec/structures.h"
#include "../include/exec/proxy_structures.h"
#include "../include/exec/functions.h"
#include "../include/aros/cpu.h"
#include "../include/aros/proxy.h"
#include "../include/intuition/structures.h"
#include "../include/graphics/proxy_structures.h"
#include "../include/utility/structures.h"
struct ExecBaseV0 *Intuition_SysBaseV0;
@ -20,6 +22,12 @@ struct ScreenProxy
struct Screen *native;
};
struct WindowProxy
{
struct WindowV0 base;
struct Window *native;
};
struct LibraryV0 *abiv0_Intuition_OpenLib(ULONG version, struct LibraryV0 *IntuitionBaseV0)
{
return IntuitionBaseV0;
@ -55,6 +63,13 @@ bug("abiv0_LockPubScreen: STUB\n");
}
MAKE_PROXY_ARG_2(LockPubScreen)
void abiv0_UnlockPubScreen(UBYTE *name, struct ScreenV0 *screen, struct LibraryV0 *IntuitionBaseV0)
{
struct ScreenProxy *proxy = (struct ScreenProxy *)screen;
UnlockPubScreen(name, proxy->native);
}
MAKE_PROXY_ARG_3(UnlockPubScreen)
void abiv0_ScreenDepth(struct ScreenV0 *screen, ULONG flags, APTR reserved, struct LibraryV0 *IntuitionBaseV0)
{
bug("abiv0_ScreenDepth: STUB\n");
@ -71,12 +86,189 @@ struct DrawInfoV0 *abiv0_GetScreenDrawInfo(struct ScreenV0 *screen, struct Libra
struct DrawInfoV0 *ret = abiv0_AllocMem(sizeof(struct DrawInfoV0), MEMF_CLEAR, Intuition_SysBaseV0);
ret->dri_Pens = (APTR32)(IPTR)abiv0_AllocMem(NUMDRIPENS * sizeof(UWORD), MEMF_CLEAR, Intuition_SysBaseV0);
CopyMem(dri->dri_Pens, (APTR)(IPTR)ret->dri_Pens, NUMDRIPENS * sizeof(UWORD));
ret->dri_Font = proxy->base.Font;
bug("abiv0_GetScreenDrawInfo: STUB\n");
return ret;
}
MAKE_PROXY_ARG_2(GetScreenDrawInfo)
void abiv0_FreeScreenDrawInfo(struct ScreenV0 *screen, struct DrawInfoV0 *drawInfo, struct LibraryV0 *IntuitionBaseV0)
{
bug("abiv0_FreeScreenDrawInfo: STUB\n");
}
MAKE_PROXY_ARG_3(FreeScreenDrawInfo)
static struct TagItemV0 *LibNextTagItemV0(struct TagItemV0 **tagListPtr)
{
if (!(*tagListPtr))
return NULL;
while(1)
{
switch(((*tagListPtr)->ti_Tag))
{
case TAG_MORE:
asm("int3");
if (!((*tagListPtr) = (struct TagItemV0 *)(IPTR)(*tagListPtr)->ti_Data))
return NULL;
continue;
case TAG_IGNORE:
break;
case TAG_END:
(*tagListPtr) = 0;
return NULL;
case TAG_SKIP:
asm("int3");
(*tagListPtr) += (*tagListPtr)->ti_Data + 1;
continue;
default:
return (*tagListPtr)++;
}
(*tagListPtr)++;
}
}
static struct TagItem *CloneTagItemsV02Native(const struct TagItemV0 *tagList)
{
struct TagItem *newList;
LONG numTags = 1;
struct TagItemV0 *tmp;
tmp = (struct TagItemV0 *)tagList;
while (LibNextTagItemV0 (&tmp) != NULL)
numTags++;
newList = AllocMem(sizeof(struct TagItem) * numTags, MEMF_CLEAR);
LONG pos = 0;
tmp = (struct TagItemV0 *)tagList;
while (LibNextTagItemV0 (&tmp) != NULL)
{
newList[pos].ti_Tag = tmp->ti_Tag;
newList[pos].ti_Data = tmp->ti_Data;
pos++;
}
return newList;
}
struct WindowV0 *g_v0window;
struct Window *g_nativewindow;
struct WindowV0 *abiv0_OpenWindowTagList(APTR /*struct NewWindowV0 **/newWindow, struct TagItemV0 *tagList, struct LibraryV0 *IntuitionBaseV0)
{
if (newWindow != NULL) asm("int3");
struct TagItem *tagListNative = CloneTagItemsV02Native(tagList);
struct Window *wndnative = OpenWindowTagList(NULL, tagListNative);
struct WindowProxy *proxy = abiv0_AllocMem(sizeof(struct WindowProxy), MEMF_CLEAR, Intuition_SysBaseV0);
struct RastPortV0 *rpv0 = abiv0_AllocMem(sizeof(struct RastPortV0), MEMF_CLEAR, Intuition_SysBaseV0);
*((IPTR *)&rpv0->longreserved) = (IPTR)wndnative->RPort;
proxy->base.RPort = (APTR32)(IPTR)rpv0;
proxy->base.BorderLeft = wndnative->BorderLeft;
proxy->base.BorderTop = wndnative->BorderTop;
proxy->base.BorderRight = wndnative->BorderRight;
proxy->base.BorderBottom = wndnative->BorderBottom;
proxy->base.Width = wndnative->Width;
proxy->base.Height = wndnative->Height;
proxy->base.MaxHeight = wndnative->MaxHeight;
proxy->base.MinHeight = wndnative->MinHeight;
proxy->base.MaxWidth = wndnative->MaxWidth;
proxy->base.MinWidth = wndnative->MinWidth;
proxy->base.GZZHeight = wndnative->GZZHeight;
proxy->base.GZZWidth = wndnative->GZZWidth;
proxy->native = wndnative;
g_v0window = &proxy->base;
g_nativewindow = wndnative;
bug("abiv0_OpenWindowTagList: STUB\n");
return (struct WindowV0 *)proxy;
}
MAKE_PROXY_ARG_3(OpenWindowTagList)
BOOL abiv0_WindowLimits(struct WindowV0 *window, WORD MinWidth, WORD MinHeight, UWORD MaxWidth, UWORD MaxHeight, struct LibraryV0 *IntuitionBaseV0)
{
struct WindowProxy *proxy = (struct WindowProxy *)window;
return WindowLimits(proxy->native, MinWidth, MinHeight, MaxWidth, MaxHeight);
}
MAKE_PROXY_ARG_6(WindowLimits)
void abiv0_ClearMenuStrip(struct WindowV0 *window, struct LibraryV0 *IntuitionBaseV0)
{
struct WindowProxy *proxy = (struct WindowProxy *)window;
return ClearMenuStrip(proxy->native);
}
MAKE_PROXY_ARG_2(ClearMenuStrip)
void abiv0_CloseWindow(struct Window *window, struct LibraryV0 *IntuitionBaseV0)
{
struct WindowProxy *proxy = (struct WindowProxy *)window;
return CloseWindow(proxy->native);
}
MAKE_PROXY_ARG_2(CloseWindow)
static struct MessageV0 *Intuition_Translate(struct Message *native)
{
struct IntuiMessage *imsg = (struct IntuiMessage *)native;
if (native == NULL)
return NULL;
if (imsg->Class == IDCMP_CLOSEWINDOW || imsg->Class == IDCMP_INTUITICKS || imsg->Class == IDCMP_MOUSEMOVE ||
imsg->Class == IDCMP_REFRESHWINDOW || imsg->Class == IDCMP_MOUSEBUTTONS || imsg->Class == IDCMP_NEWSIZE ||
imsg->Class == IDCMP_CHANGEWINDOW)
{
struct IntuiMessageV0 *v0msg = abiv0_AllocMem(sizeof(struct IntuiMessageV0), MEMF_CLEAR, Intuition_SysBaseV0);
v0msg->Class = imsg->Class;
if (imsg->IDCMPWindow == g_nativewindow)
v0msg->IDCMPWindow = (APTR32)(IPTR)g_v0window;
v0msg->Code = imsg->Code;
v0msg->Qualifier = imsg->Qualifier;
v0msg->MouseX = imsg->MouseX;
v0msg->MouseY = imsg->MouseY;
v0msg->Seconds = imsg->Seconds;
v0msg->Micros = imsg->Micros;
/* Store original message in Node of v0msg for now */
*((IPTR *)&v0msg->ExecMessage.mn_Node) = (IPTR)imsg;
return (struct MessageV0 *)v0msg;
}
bug("Intuition_Translate - missing code for class %d\n", imsg->Class);
return NULL;
}
BOOL abiv0_ModifyIDCMP(struct WindowV0 *window, ULONG flags, struct LibraryV0 *IntuitionBaseV0)
{
struct WindowProxy *winproxy = (struct WindowProxy *)window;
struct MsgPortProxy *msgpproxy = (struct MsgPortProxy *)(IPTR)winproxy->base.UserPort;
if (msgpproxy != NULL)
{
winproxy->native->UserPort = msgpproxy->native;
msgpproxy->translate = Intuition_Translate;
}
return ModifyIDCMP(winproxy->native, flags);
}
MAKE_PROXY_ARG_2(ModifyIDCMP);
struct LibraryV0 *shallow_InitResident32(struct ResidentV0 *resident, BPTR segList, struct ExecBaseV0 *SysBaseV0);
BPTR LoadSeg32 (CONST_STRPTR name, struct DosLibrary *DOSBase);
struct ResidentV0 * findResident(BPTR seg, CONST_STRPTR name);
@ -123,6 +315,15 @@ void init_intuition(struct ExecBaseV0 *SysBaseV0)
__AROS_SETVECADDRV0(abiv0IntuitionBase, 131, (APTR32)(IPTR)proxy_ScreenDepth);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 115, (APTR32)(IPTR)proxy_GetScreenDrawInfo);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 107, intuitionjmp[165 - 107]); // DisposeObject
__AROS_SETVECADDRV0(abiv0IntuitionBase, 116, (APTR32)(IPTR)proxy_FreeScreenDrawInfo);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 101, (APTR32)(IPTR)proxy_OpenWindowTagList);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 53, (APTR32)(IPTR)proxy_WindowLimits);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 25, (APTR32)(IPTR)proxy_ModifyIDCMP);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 9, (APTR32)(IPTR)proxy_ClearMenuStrip);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 12, (APTR32)(IPTR)proxy_CloseWindow);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 86, (APTR32)(IPTR)proxy_UnlockPubScreen);
__AROS_SETVECADDRV0(abiv0IntuitionBase, 119, intuitionjmp[165 - 119]); // FreeClass
__AROS_SETVECADDRV0(abiv0IntuitionBase, 118, intuitionjmp[165 - 118]); // RemoveClass
/* Call CLASSESINIT_LIST */
ULONG pos = 1;

View File

@ -11,6 +11,7 @@ FILES := AoA loadseg32 internalloadseg32 internalloadseg_elf32 internalloadseg_s
abiv0/exec/findname \
abiv0/exec/openlibrary \
abiv0/exec/addresource \
abiv0/exec/initsemaphore \
abiv0/graphics/graphics_init \
abiv0/intuition/intuition_init \
abiv0/dos/dos_init \