z88dkのzccでインラインアセンブラを使う。
inline.c
/*
zcc +msx -lndos -create-app inline.c
bload"cas:",r
*/
#include <stdio.h>
int myfunc(char len, unsigned char *p)
{
#asm
ld hl, 2
add hl, sp
ld e, (hl)
inc hl
ld d, (hl) ; de=p
inc hl
ld b, (hl) ; b=len
loop:
ld a, (de)
call $00a2 ; CHPUT
inc de
djnz loop
ld hl, $cafe ; return value
#endasm
}
void main()
{
int ret = myfunc(5, "0123456789");
printf("\nret = %x\n", ret);
}
WebMSXを起動しa.casファイルをCassetteにドロップする。
- FASTCALL版
fast.c
/*
zcc +msx -lndos -create-app fast.c
bload"cas:",r
*/
#include <stdio.h>
int __FASTCALL__ myfunc(unsigned char *p)
{
#asm
loop:
ld a, (hl)
or a
jr z, exit
call $00a2 ; CHPUT
inc hl
jr loop
exit:
ld hl, $babe ; return value
#endasm
}
void main()
{
int ret = myfunc("hello, world");
printf("\nret = %x\n", ret);
}