pea 34.w pea .LC9 lea _OpenLibrary,a2 jsr (a2) move.l d0,_IntuitionBase addq.l #8,sp
@asman, post #1
#if defined(__GNUC__) #define REGARG(arg, reg) arg asm(reg) #elif defined(__VBCC__) #define REGARG(arg, reg) __reg(reg) arg #endif struct Library *regOpenLibrary(REGARG(STRPTR libName, "a1"), REGARG(ULONG version, "d0")) { return OpenLibrary(libName, version); }
@Hexmage960, post #3
lea _OpenLibrary,a2 moveq #34,d0 lea .LC9,a0 jsr (a2)
@asman, post #4
Dzięki - pomogło połowicznie, bo
lea _OpenLibrary,a2
moveq #34,d0
lea .LC9,a0
jsr (a2)
wrapper został.
@asman, post #4
struct Library * __OpenLibrary(__reg("a6") void *, __reg("a1") CONST_STRPTR libName, __reg("d0") ULONG version)="\tjsr\t-552(a6)"; #define OpenLibrary(libName, version) __OpenLibrary(SysBase, (libName), (version))
@teh_KaiN, post #6
; Delay(300); pea 300.W jsr _Delay(pc) addq.l #4,sp
; Delay(300); move.l #$012C,D1 move.l _DOSBase(A4),A6 jsr -198(A6)
@Hexmage960, post #5
lbC0008A0: move.l a6,-(sp) move.l (lbL011F08).l,a6 move.l (8,sp),a1 move.l (12,sp),d0 jsr (-$228,a6) move.l (sp)+,a6 rts
lea (lbC0008A0).l,a2 moveq #$22,d0 lea (intuitionlibr.MSG,pc),a0 jsr (a2) move.l d0,(lbL012D24).l beq.w lbC003910
@asman, post #9
Nie ma lekko, bo jak skompilowałem grę, to uwaga uwaga, się zwiesiła, co wcale nie jest dziwne bo z tym parametrem -mregparm=2 kod wrappera nie został zmieniony
@asman, post #9
Bebbo [10:25 PM]
needs #include <inline/xyz.h>
e.g.
#include <proto/dos.h>
#include <inline/dos.h>
@asman, post #13
void WindowSignals(void) { while (TRUE) { struct IntuiMessage* pMsg = (struct IntuiMessage*)GetMsg(g_pWin->UserPort); if (NULL == pMsg) { break; } tabKeys[pMsg->Code & 0x7f] = pMsg->Code & 0x80; ReplyMsg((struct Message*)pMsg); } }
_WindowSignals: move.l a6,-(sp) move.l a2,-(sp) move.l _SysBase:W(a4),a6 move.l _g_pWin:W(a4),a0 move.l 86(a0),a0 #APP | 104 "src/Window.c" 1 jsr a6@(-0x174:W) | 0 "" 2 #NO_APP move.l d0,a1 tst.l d0 jeq .L15 lea _tabKeys:W(a4),a2 .L18: move.w 24(a1),d1 move.w d1,d0 and.w #127,d0 and.l #65535,d0 and.b #-128,d1 move.b d1,(a2,d0.l) move.l _SysBase:W(a4),a6 #APP | 114 "src/Window.c" 1 jsr a6@(-0x17a:W) | 0 "" 2 #NO_APP move.l _SysBase:W(a4),a6 move.l _g_pWin:W(a4),a0 move.l 86(a0),a0 #APP | 104 "src/Window.c" 1 jsr a6@(-0x174:W) | 0 "" 2 #NO_APP move.l d0,a1 tst.l d0 jne .L18 .L15: move.l (sp)+,a2 move.l (sp)+,a6 rts
lea _tabKeys:W(a4),a2 .L18: move.w 24(a1),d1 move.w d1,d0 and.w #127,d0 and.l #65535,d0 and.b #-128,d1 move.b d1,(a2,d0.l)
--- window --- void WindowSignals(void) { while (TRUE) { struct IntuiMessage* pMsg = (struct IntuiMessage*)GetMsg(g_pWin->UserPort); if (NULL == pMsg) { break; } InputGetKeys(pMsg->Code); ReplyMsg((struct Message*)pMsg); } } --- Input --- UBYTE tabKeys[128]; void InputGetKeys(UWORD msgCode) { tabKeys[msgCode & 0x7f] = msgCode & 0x80; }
_InputGetKeys: moveq #127,d1 and.l d0,d1 lea _tabKeys:W(a4),a0 and.b #-128,d0 move.b d0,(a0,d1.l) rts
;-- 26c and.w #127,d0 sne (a0,d0.w)
@asman, post #14
m68k-amigaos-gcc --help=target
-fomit-frame-pointer -O3 -fbbb=abcfilmprsz
@asman, post #14
void InputGetKeys(UWORD msgCode) { UBYTE offset = msgCode & 0x7f; tabKeys[offset] = msgCode & 0x80 ? 0xff : 0x00; }
@mschulz, post #16
_InputGetKeys: moveq #127,d1 and.l d0,d1 lsr.w #7,d0 and.b #1,d0 lea _tabKeys:W(a4),a0 neg.b d0 move.b d0,(a0,d1.l) rts
BOOL InputProcessKeys(void) { if (tabKeys[KEY_ESC]) { return TRUE; } return FALSE; } //---- _InputProcessKeys: tst.b _tabKeys+69:W(a4) seq d0 ext.w d0 neg.w d0 rts