Et pour ceux qui ne me croiraient pas que le hack est à vomir:
.section .text.PedroMsmallmenu,"x"
| short PedroMsmallmenu(unsigned short x asm("d0"),unsigned short y asm("d1"),
| unsigned short nbitem asm("d2"),char *txtlist asm("a0"),void *ptr asm("a1"));
PedroMsmallmenu:
| Search for RAM_CALL table
0: addq.l #2,%a1
cmp.l #0x4c00,(%a1)
bne.s 0b
| Get kernel::LibsExec
movea.l (0x1d-0x21)*4(%a1),%a1
| Call userlib::smallmenu through kernel::LibsExec
move.l #0x000c0000,-(%a7)
pea.l L.userlib(%pc)
jsr (%a1)
addq.l #8,%a7
| Check if an item was selected
tst.w %d2
beq.s 1f
clr.w %d0
1: rts
L.userlib: .asciz "userlib"
et dans le fichier C:
short PedroMsmallmenu(unsigned short x asm("d0"),unsigned short y asm("d1"),
unsigned short nbitem asm("d2"),char *txtlist asm("a0"),void *ptr asm("a1"));
#define SmallMenu(x,y,n,t) (PedroMsmallmenu((x),(y),(n),(t),ROM_base+0x1A000))
utilisé comme ça:
if (*(short*)0x32==('R'<<8)+'O') {
DrawStr(0,0,&MainMenuTitle,A_REPLACE);
GameMode=SmallMenu(0,10,4,&MainMenuPedroM);
} else {
GameMode=MenuPopup(&MainMenu,CENTER,CENTER,GM_1P);
}
(
&MainMenuPedroM et
&MainMenuTitle sont des pointeurs vers juste les chaînes de caractères des entrées du menu, à l'intérieur de ma structure
MENU, définie aussi dans le fichier assembleur.)
