From c1dee321f3aabaab1bda1d2ccd0c893e799f5cfe Mon Sep 17 00:00:00 2001 From: Tau Date: Thu, 8 Nov 2018 16:12:20 -0500 Subject: [PATCH] chunihook/dllmain.c: Wire up Chunithm hook DLL --- chunihook/dllmain.c | 92 +++++++++++++++++++++++++++++++++++++++++++ chunihook/meson.build | 1 + 2 files changed, 93 insertions(+) create mode 100644 chunihook/dllmain.c diff --git a/chunihook/dllmain.c b/chunihook/dllmain.c new file mode 100644 index 00000000..78d3af81 --- /dev/null +++ b/chunihook/dllmain.c @@ -0,0 +1,92 @@ +#include + +#include +#include + +#include "chunihook/jvs.h" +#include "chunihook/slider.h" + +#include "hook/process.h" + +#include "hooklib/serial.h" + +#include "nu/ds.h" +#include "nu/eeprom.h" +#include "nu/gpio.h" +#include "nu/jvs.h" +#include "nu/hwmon.h" +#include "nu/nusec.h" +#include "nu/sram.h" + +#include "util/clock.h" +#include "util/dprintf.h" +#include "util/gfx.h" +#include "util/spike.h" + +static process_entry_t chuni_startup; + +static DWORD CALLBACK chuni_pre_startup(void) +{ + HMODULE d3dc; + + dprintf("--- Begin chuni_pre_startup ---\n"); + + /* Pin the D3D shader compiler. This makes startup much faster. */ + + d3dc = LoadLibraryW(L"D3DCompiler_43.dll"); + + if (d3dc != NULL) { + dprintf("Pinned shader compiler, hMod=%p\n", d3dc); + } else { + dprintf("Failed to load shader compiler!\n"); + } + + /* Hook Win32 APIs */ + + clock_hook_init(); + gfx_hook_init(); + serial_hook_init(); + + /* Initialize Nu emulation */ + + eeprom_hook_init(); + sram_hook_init(); + ds_hook_init(); + gpio_hook_init(); + jvs_hook_init(); + hwmon_hook_init(); + nusec_hook_init(); + + /* Initialize Chunithm board emulation */ + + slider_hook_init(); + chunithm_jvs_init(); + + /* Initialize debug helpers */ + + spike_hook_init(); + gfx_set_windowed(); + + dprintf("--- End chuni_pre_startup ---\n"); + + /* Jump to EXE start address */ + + return chuni_startup(); +} + +BOOL WINAPI DllMain(HMODULE mod, DWORD cause, void *ctx) +{ + HRESULT hr; + + if (cause != DLL_PROCESS_ATTACH) { + return TRUE; + } + + hr = process_hijack_startup(chuni_pre_startup, &chuni_startup); + + if (!SUCCEEDED(hr)) { + dprintf("Failed to hijack process startup: %x\n", (int) hr); + } + + return SUCCEEDED(hr); +} diff --git a/chunihook/meson.build b/chunihook/meson.build index fc99af25..8c0772df 100644 --- a/chunihook/meson.build +++ b/chunihook/meson.build @@ -16,6 +16,7 @@ shared_library( util_lib, ], sources : [ + 'dllmain.c', 'jvs.c', 'jvs.h', 'slider.c',