diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-09-24 14:13:33 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-09-24 14:13:45 +0200 |
| commit | 4299e0a3a3b0eba117ad83c8504cec7d8c0a64ce (patch) | |
| tree | def202c91541ad69d2651072dec238341bf0ccd9 /src/libtools | |
| parent | c4af15c2e210a91a30c974901468650533918d39 (diff) | |
| download | box64-4299e0a3a3b0eba117ad83c8504cec7d8c0a64ce.tar.gz box64-4299e0a3a3b0eba117ad83c8504cec7d8c0a64ce.zip | |
[BOX32][WRAPPER] Added more 32bits wrapped functions
Diffstat (limited to 'src/libtools')
| -rw-r--r-- | src/libtools/sdl1align32.c | 113 | ||||
| -rw-r--r-- | src/libtools/sdl1rwops.c | 52 |
2 files changed, 161 insertions, 4 deletions
diff --git a/src/libtools/sdl1align32.c b/src/libtools/sdl1align32.c index cb0b8176..c9c68a8a 100644 --- a/src/libtools/sdl1align32.c +++ b/src/libtools/sdl1align32.c @@ -170,6 +170,84 @@ void convert_SDL_Event_to_32(void* dst_, const void* src_) memcpy(dst, src, sizeof(my_SDL_Event_32_t)); } } +void convert_SDL_Event_to_64(void* dst_, const void* src_) +{ + if(!src_|| !dst_) return; + const my_SDL_Event_32_t *src = src_; + my_SDL_Event_t* dst = dst_; + dst->type = src->type; + switch(src->type) { + case SDL_ACTIVEEVENT: + dst->active.gain = src->active.gain; + dst->active.state = src->active.state; + break; + case SDL_KEYUP: + case SDL_KEYDOWN: + dst->key.keysym.mod = src->key.keysym.mod; + dst->key.keysym.scancode = src->key.keysym.scancode; + dst->key.keysym.sym = src->key.keysym.sym; + dst->key.keysym.unicode = src->key.keysym.unicode; + dst->key.state = src->key.state; + dst->key.which = dst->key.which; + break; + case SDL_MOUSEMOTION: + dst->motion.state = src->motion.state; + dst->motion.which = src->motion.which; + dst->motion.x = src->motion.x; + dst->motion.y = src->motion.y; + dst->motion.xrel = src->motion.xrel; + dst->motion.yrel = src->motion.yrel; + break; + case SDL_MOUSEBUTTONUP: + case SDL_MOUSEBUTTONDOWN: + dst->button.button = src->button.button; + dst->button.state = src->button.state; + dst->button.which = src->button.which; + dst->button.x = src->button.x; + dst->button.y = src->button.y; + break; + case SDL_JOYAXISMOTION: + dst->jaxis.axis = src->jaxis.axis; + dst->jaxis.value = src->jaxis.value; + dst->jaxis.which = src->jaxis.which; + break; + case SDL_JOYBALLMOTION: + dst->jball.ball = src->jball.ball; + dst->jball.which = src->jball.which; + dst->jball.xrel = src->jball.xrel; + dst->jball.yrel = src->jball.yrel; + break; + case SDL_JOYHATMOTION: + dst->jhat.hat = src->jhat.hat; + dst->jhat.value = src->jhat.value; + dst->jhat.which = src->jhat.which; + break; + case SDL_JOYBUTTONUP: + case SDL_JOYBUTTONDOWN: + dst->jbutton.button = src->jbutton.button; + dst->jbutton.state = src->jbutton.state; + dst->jbutton.which = src->jbutton.which; + break; + case SDL_VIDEORESIZE: + dst->resize.h = src->resize.h; + dst->resize.w = src->resize.w; + break; + case SDL_VIDEOEXPOSE: + case SDL_QUIT: + break; + case SDL_USEREVENT: + dst->user.code = src->user.code; + dst->user.data1 = from_ptrv(src->user.data1); + dst->user.data2 = from_ptrv(src->user.data2); + case SDL_SYSWMEVENT: + printf_log(LOG_NONE, "TODO: Convert SDL_SYSWMEVENT\n"); + abort(); + break; + default: + printf_log(LOG_INFO, "Warning, unsuported SDL1.2 (un)event %d\n", src->type); + memcpy(dst, src, sizeof(my_SDL_Event_32_t)); + } +} void inplace_SDL_RWops_to_64(void* a) { @@ -196,3 +274,38 @@ void inplace_SDL_RWops_to_32(void* a) dst->type = src->type; memmove(&dst->hidden, &src->hidden, sizeof(dst->hidden)); } + +void convert_AudioCVT_to_32(void* d, void* s) +{ + my_SDL_AudioCVT_32_t* dst = d; + my_SDL_AudioCVT_t* src = s; + dst->needed = src->needed; + dst->src_format = src->src_format; + dst->dest_format = src->dest_format; + dst->rate_incr = src->rate_incr; + dst->buf = to_ptrv(src->buf); + dst->len = src->len; + dst->len_cvt = src->len_cvt; + dst->len_mult = src->len_mult; + dst->len_ratio = src->len_ratio; + for(int i=0; i<10; ++i) + dst->filters[i] = to_ptrv(src->filters[i]); + dst->filter_index = src->filter_index; +} +void convert_AudioCVT_to_64(void* d, void* s) +{ + my_SDL_AudioCVT_t* dst = d; + my_SDL_AudioCVT_32_t* src = s; + dst->needed = src->needed; + dst->src_format = src->src_format; + dst->dest_format = src->dest_format; + dst->rate_incr = src->rate_incr; + dst->buf = from_ptrv(src->buf); + dst->len = src->len; + dst->len_cvt = src->len_cvt; + dst->len_mult = src->len_mult; + dst->len_ratio = src->len_ratio; + for(int i=0; i<10; ++i) + dst->filters[i] = from_ptrv(src->filters[i]); + dst->filter_index = src->filter_index; +} diff --git a/src/libtools/sdl1rwops.c b/src/libtools/sdl1rwops.c index ec3f8abd..edb900ce 100644 --- a/src/libtools/sdl1rwops.c +++ b/src/libtools/sdl1rwops.c @@ -6,6 +6,10 @@ #include "sdl1rwops.h" #include "debug.h" #include "wrapper.h" +#ifdef BOX32 +#include "wrapper32.h" +#include "sdl1align32.h" +#endif #include "box64context.h" #include "x64run.h" #include "x64emu.h" @@ -54,18 +58,47 @@ typedef struct SDL1_RWops_s { EXPORT int32_t my_native_seek(SDL1_RWops_t *context, int32_t offset, int32_t whence) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + int ret = context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); + inplace_SDL_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->seek(context->hidden.my.orig, offset, whence); } EXPORT int32_t my_native_read(SDL1_RWops_t *context, void *ptr, int32_t size, int32_t maxnum) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + int ret = context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); + inplace_SDL_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->read(context->hidden.my.orig, ptr, size, maxnum); } EXPORT int32_t my_native_write(SDL1_RWops_t *context, const void *ptr, int32_t size, int32_t num) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + int ret = context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); + inplace_SDL_RWops_to_32(context); + return ret; + } + #endif return context->hidden.my.orig->write(context->hidden.my.orig, ptr, size, num); } EXPORT int32_t my_native_close(SDL1_RWops_t *context) { + #ifdef BOX32 + if(box64_is32bits) { + inplace_SDL_RWops_to_64(context); + } + #endif int32_t ret = context->hidden.my.orig->close(context->hidden.my.orig); context->hidden.my.custom_free(context); return ret; @@ -109,10 +142,21 @@ SDL1_RWops_t* AddNativeRW(x64emu_t* emu, SDL1_RWops_t* ops) fnc = AddCheckBridge(system, W, my_native_##A, 0, NULL); \ newrw->A = (sdl1_##A)fnc; - GO(seek, iFpii) - GO(read, iFppii) - GO(write, iFppii) - GO(close, iFp) + #ifdef BOX32 + if(box64_is32bits) + { + GO(seek, iFpii_32) + GO(read, iFppii_32) + GO(write, iFppii_32) + GO(close, iFp_32) + } else + #endif + { + GO(seek, iFpii) + GO(read, iFppii) + GO(write, iFppii) + GO(close, iFp) + } #undef GO |