implement missing platform functions
This commit is contained in:
74
main.c
74
main.c
@@ -92,6 +92,11 @@ void linkSystemFunctions(IM3Runtime runtime, IM3Module mod) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callFmod) {
|
||||||
|
*(f32*)&_sp[0] = Z_platformZ_fmod((Z_platform_instance_t*)_ctx->userdata, *(f32*)&_sp[1], *(f32*)&_sp[2]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
m3ApiRawFunction(callRandom) {
|
m3ApiRawFunction(callRandom) {
|
||||||
_sp[0] = Z_platformZ_random((Z_platform_instance_t*)_ctx->userdata);
|
_sp[0] = Z_platformZ_random((Z_platform_instance_t*)_ctx->userdata);
|
||||||
m3ApiSuccess();
|
m3ApiSuccess();
|
||||||
@@ -112,11 +117,46 @@ m3ApiRawFunction(callCls) {
|
|||||||
m3ApiSuccess();
|
m3ApiSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callSetPixel) {
|
||||||
|
Z_platformZ_setPixel((Z_platform_instance_t*)_ctx->userdata, _sp[0], _sp[1], _sp[2]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callGetPixel) {
|
||||||
|
_sp[0] = Z_platformZ_getPixel((Z_platform_instance_t*)_ctx->userdata, _sp[1], _sp[2]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callHline) {
|
||||||
|
Z_platformZ_hline((Z_platform_instance_t*)_ctx->userdata, _sp[0], _sp[1], _sp[2], _sp[3]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callRectangle) {
|
||||||
|
Z_platformZ_rectangle((Z_platform_instance_t*)_ctx->userdata, *(f32*)&_sp[0], *(f32*)&_sp[1], *(f32*)&_sp[2], *(f32*)&_sp[3],_sp[4]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
m3ApiRawFunction(callCircle) {
|
m3ApiRawFunction(callCircle) {
|
||||||
Z_platformZ_circle((Z_platform_instance_t*)_ctx->userdata, *(f32*)&_sp[0], *(f32*)&_sp[1], *(f32*)&_sp[2], _sp[3]);
|
Z_platformZ_circle((Z_platform_instance_t*)_ctx->userdata, *(f32*)&_sp[0], *(f32*)&_sp[1], *(f32*)&_sp[2], _sp[3]);
|
||||||
m3ApiSuccess();
|
m3ApiSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callRectangleOutline) {
|
||||||
|
Z_platformZ_rectangleOutline((Z_platform_instance_t*)_ctx->userdata, *(f32*)&_sp[0], *(f32*)&_sp[1], *(f32*)&_sp[2], *(f32*)&_sp[3],_sp[4]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callCircleOutline) {
|
||||||
|
Z_platformZ_circleOutline((Z_platform_instance_t*)_ctx->userdata, *(f32*)&_sp[0], *(f32*)&_sp[1], *(f32*)&_sp[2], _sp[3]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callLine) {
|
||||||
|
Z_platformZ_line((Z_platform_instance_t*)_ctx->userdata, *(f32*)&_sp[0], *(f32*)&_sp[1], *(f32*)&_sp[2], *(f32*)&_sp[3],_sp[4]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
m3ApiRawFunction(callBlitSprite) {
|
m3ApiRawFunction(callBlitSprite) {
|
||||||
Z_platformZ_blitSprite((Z_platform_instance_t*)_ctx->userdata, _sp[0], _sp[1], _sp[2], _sp[3], _sp[4]);
|
Z_platformZ_blitSprite((Z_platform_instance_t*)_ctx->userdata, _sp[0], _sp[1], _sp[2], _sp[3], _sp[4]);
|
||||||
m3ApiSuccess();
|
m3ApiSuccess();
|
||||||
@@ -127,6 +167,16 @@ m3ApiRawFunction(callGrabSprite) {
|
|||||||
m3ApiSuccess();
|
m3ApiSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callIsButtonPressed) {
|
||||||
|
_sp[0] = Z_platformZ_isButtonPressed((Z_platform_instance_t*)_ctx->userdata, _sp[1]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callIsButtonTriggered) {
|
||||||
|
_sp[0] = Z_platformZ_isButtonTriggered((Z_platform_instance_t*)_ctx->userdata, _sp[1]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
m3ApiRawFunction(callTime) {
|
m3ApiRawFunction(callTime) {
|
||||||
*(f32*)&_sp[0] = Z_platformZ_time((Z_platform_instance_t*)_ctx->userdata);
|
*(f32*)&_sp[0] = Z_platformZ_time((Z_platform_instance_t*)_ctx->userdata);
|
||||||
m3ApiSuccess();
|
m3ApiSuccess();
|
||||||
@@ -163,7 +213,12 @@ m3ApiRawFunction(callSetCursorPosition) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
m3ApiRawFunction(callSndGes) {
|
m3ApiRawFunction(callSndGes) {
|
||||||
*(f32*)&_sp[0] = Z_platformZ_sndGes((Z_platform_instance_t*)_ctx->userdata, _sp[0]);
|
*(f32*)&_sp[0] = Z_platformZ_sndGes((Z_platform_instance_t*)_ctx->userdata, _sp[1]);
|
||||||
|
m3ApiSuccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
m3ApiRawFunction(callPlayNote) {
|
||||||
|
Z_platformZ_playNote((Z_platform_instance_t*)_ctx->userdata, _sp[0], _sp[1]);
|
||||||
m3ApiSuccess();
|
m3ApiSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,13 +227,23 @@ struct {
|
|||||||
const char* signature;
|
const char* signature;
|
||||||
M3RawCall function;
|
M3RawCall function;
|
||||||
} cPlatformFunctions[] = {
|
} cPlatformFunctions[] = {
|
||||||
|
{ "fmod", "f(ff)", callFmod },
|
||||||
{ "random", "i()", callRandom },
|
{ "random", "i()", callRandom },
|
||||||
{ "randomf", "f()", callRandomf },
|
{ "randomf", "f()", callRandomf },
|
||||||
{ "randomSeed", "v(i)", callRandomSeed },
|
{ "randomSeed", "v(i)", callRandomSeed },
|
||||||
{ "cls", "v(i)", callCls },
|
{ "cls", "v(i)", callCls },
|
||||||
|
{ "setPixel", "v(iii)", callSetPixel },
|
||||||
|
{ "getPidel", "i(ii)", callGetPixel },
|
||||||
|
{ "hline", "v(iiii)", callHline },
|
||||||
|
{ "rectangle", "v(ffffi)", callRectangle },
|
||||||
{ "circle", "v(fffi)", callCircle },
|
{ "circle", "v(fffi)", callCircle },
|
||||||
|
{ "rectangleOutline", "v(ffffi)", callRectangleOutline },
|
||||||
|
{ "circleOutline", "v(fffi)", callCircleOutline },
|
||||||
|
{ "line", "v(ffffi)", callLine },
|
||||||
{ "blitSprite", "v(iiiii)", callBlitSprite },
|
{ "blitSprite", "v(iiiii)", callBlitSprite },
|
||||||
{ "grabSprite", "v(iiiii)", callGrabSprite },
|
{ "grabSprite", "v(iiiii)", callGrabSprite },
|
||||||
|
{ "isButtonPressed", "i(i)", callIsButtonPressed },
|
||||||
|
{ "isButtonTriggered", "i(i)", callIsButtonTriggered},
|
||||||
{ "time", "f()", callTime },
|
{ "time", "f()", callTime },
|
||||||
{ "printChar", "v(i)", callPrintChar },
|
{ "printChar", "v(i)", callPrintChar },
|
||||||
{ "printString", "v(i)", callPrintString },
|
{ "printString", "v(i)", callPrintString },
|
||||||
@@ -186,7 +251,8 @@ struct {
|
|||||||
{ "setTextColor", "v(i)", callSetTextColor },
|
{ "setTextColor", "v(i)", callSetTextColor },
|
||||||
{ "setBackgroundColor", "v(i)", callSetBackgroundColor },
|
{ "setBackgroundColor", "v(i)", callSetBackgroundColor },
|
||||||
{ "setCursorPosition", "v(ii)", callSetCursorPosition },
|
{ "setCursorPosition", "v(ii)", callSetCursorPosition },
|
||||||
{ "sndGes", "f(i)", callSndGes },
|
{ "playNote", "v(ii)", callPlayNote },
|
||||||
|
{ "sndGes", "f(i)", callSndGes }
|
||||||
};
|
};
|
||||||
|
|
||||||
void linkPlatformFunctions(IM3Runtime runtime, IM3Module cartMod, Z_platform_instance_t* platformInstance) {
|
void linkPlatformFunctions(IM3Runtime runtime, IM3Module cartMod, Z_platform_instance_t* platformInstance) {
|
||||||
@@ -259,7 +325,7 @@ void audioCallback(void* userdata, Uint8* stream, int len) {
|
|||||||
m3_CallV(state->snd, state->sampleIndex++);
|
m3_CallV(state->snd, state->sampleIndex++);
|
||||||
m3_GetResultsV(state->snd, samples++);
|
m3_GetResultsV(state->snd, samples++);
|
||||||
} else {
|
} else {
|
||||||
Z_platformZ_sndGes(&state->runtime.platform_c, state->sampleIndex++);
|
*samples++ = Z_platformZ_sndGes(&state->runtime.platform_c, state->sampleIndex++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -374,6 +440,8 @@ int main(int argc, const char** argv) {
|
|||||||
}
|
}
|
||||||
memcpy(audioState.registers, memory + 0x50, 32);
|
memcpy(audioState.registers, memory + 0x50, 32);
|
||||||
|
|
||||||
|
Z_platformZ_endFrame(&runtime.platform_c);
|
||||||
|
|
||||||
uint32_t* palette = (uint32_t*)(memory + 0x13000);
|
uint32_t* palette = (uint32_t*)(memory + 0x13000);
|
||||||
uint8_t* pixels = memory + 120;
|
uint8_t* pixels = memory + 120;
|
||||||
for(uint32_t i = 0; i < 320*240; ++i) {
|
for(uint32_t i = 0; i < 320*240; ++i) {
|
||||||
|
|||||||
Reference in New Issue
Block a user