Complete calculator shutdown

NOTE: memory gets damaged somewhere and any operation after shutdown, like
opening RAM: window for example causes crash
This commit is contained in:
deadwood 2024-03-25 16:02:50 +01:00
parent 909d02e309
commit f9e636ee69
3 changed files with 66 additions and 0 deletions

View File

@ -52,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);
@ -248,17 +254,32 @@ 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)
{
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;
@ -399,6 +420,10 @@ struct ExecBaseV0 *init_exec()
__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
return abiv0SysBase;
}

View File

@ -51,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;
@ -81,6 +87,13 @@ 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;
@ -203,4 +216,6 @@ void init_graphics(struct ExecBaseV0 *SysBaseV0)
__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

@ -63,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");
@ -200,6 +207,20 @@ BOOL abiv0_WindowLimits(struct WindowV0 *window, WORD MinWidth, WORD MinHeight,
}
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;
@ -289,6 +310,11 @@ void init_intuition(struct ExecBaseV0 *SysBaseV0)
__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;