forked from Hay1tsme/segatools
Compare commits
6 Commits
2024-04-29
...
feat/unity
Author | SHA1 | Date | |
---|---|---|---|
201f54ae36 | |||
3c2609798b | |||
c895c275cf | |||
1eceba427e | |||
ecfc104f0f | |||
49f7189d35 |
58
board/vfd.c
58
board/vfd.c
@ -26,7 +26,6 @@ static HRESULT vfd_handle_irp(struct irp *irp);
|
|||||||
static struct uart vfd_uart;
|
static struct uart vfd_uart;
|
||||||
static uint8_t vfd_written[512];
|
static uint8_t vfd_written[512];
|
||||||
static uint8_t vfd_readable[512];
|
static uint8_t vfd_readable[512];
|
||||||
UINT codepage;
|
|
||||||
|
|
||||||
HRESULT vfd_hook_init(const struct vfd_config *cfg, unsigned int port_no)
|
HRESULT vfd_hook_init(const struct vfd_config *cfg, unsigned int port_no)
|
||||||
{
|
{
|
||||||
@ -42,7 +41,6 @@ HRESULT vfd_hook_init(const struct vfd_config *cfg, unsigned int port_no)
|
|||||||
vfd_uart.readable.bytes = vfd_readable;
|
vfd_uart.readable.bytes = vfd_readable;
|
||||||
vfd_uart.readable.nbytes = sizeof(vfd_readable);
|
vfd_uart.readable.nbytes = sizeof(vfd_readable);
|
||||||
|
|
||||||
codepage = GetACP();
|
|
||||||
dprintf("VFD: hook enabled.\n");
|
dprintf("VFD: hook enabled.\n");
|
||||||
|
|
||||||
return iohook_push_handler(vfd_handle_irp);
|
return iohook_push_handler(vfd_handle_irp);
|
||||||
@ -64,60 +62,8 @@ static HRESULT vfd_handle_irp(struct irp *irp)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t cmd = 0;
|
dprintf("VFD TX:\n");
|
||||||
uint8_t str_1[512];
|
dump_iobuf(&vfd_uart.written);
|
||||||
uint8_t str_2[512];
|
|
||||||
uint8_t str_1_len = 0;
|
|
||||||
uint8_t str_2_len = 0;
|
|
||||||
for (size_t i = 0; i < vfd_uart.written.pos; i++) {
|
|
||||||
if (vfd_uart.written.bytes[i] == 0x1B) {
|
|
||||||
i++;
|
|
||||||
cmd = vfd_uart.written.bytes[i];
|
|
||||||
if (cmd == 0x30) {
|
|
||||||
i += 3;
|
|
||||||
}
|
|
||||||
else if (cmd == 0x50) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (cmd == 0x30) {
|
|
||||||
str_1[str_1_len++] = vfd_uart.written.bytes[i];
|
|
||||||
}
|
|
||||||
else if (cmd == 0x50) {
|
|
||||||
str_2[str_2_len++] = vfd_uart.written.bytes[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_1_len) {
|
|
||||||
str_1[str_1_len++] = '\0';
|
|
||||||
if (codepage != 932) {
|
|
||||||
WCHAR buffer[512];
|
|
||||||
MultiByteToWideChar(932, 0, (LPCSTR)str_1, str_1_len, buffer, str_1_len);
|
|
||||||
char str_recode[str_1_len * 3];
|
|
||||||
WideCharToMultiByte(codepage, 0, buffer, str_1_len, str_recode, str_1_len * 3, NULL, NULL);
|
|
||||||
dprintf("VFD: %s\n", str_recode);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
dprintf("VFD: %s\n", str_1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (str_2_len) {
|
|
||||||
str_2[str_2_len++] = '\0';
|
|
||||||
if (codepage != 932) {
|
|
||||||
WCHAR buffer[512];
|
|
||||||
MultiByteToWideChar(932, 0, (LPCSTR)str_2, str_2_len, buffer, str_2_len);
|
|
||||||
char str_recode[str_2_len * 3];
|
|
||||||
WideCharToMultiByte(codepage, 0, buffer, str_2_len, str_recode, str_2_len * 3, NULL, NULL);
|
|
||||||
dprintf("VFD: %s\n", str_recode);
|
|
||||||
} else {
|
|
||||||
dprintf("VFD: %s\n", str_2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// dprintf("VFD TX:\n");
|
|
||||||
// dump_iobuf(&vfd_uart.written);
|
|
||||||
vfd_uart.written.pos = 0;
|
vfd_uart.written.pos = 0;
|
||||||
|
|
||||||
return hr;
|
return hr;
|
||||||
|
25
dist/idac/start.bat
vendored
25
dist/idac/start.bat
vendored
@ -2,6 +2,20 @@
|
|||||||
|
|
||||||
pushd %~dp0
|
pushd %~dp0
|
||||||
|
|
||||||
|
REM set the APP_DIR to the Y drive
|
||||||
|
set APP_DIR=Y:\SDGT
|
||||||
|
|
||||||
|
REM create the APP_DIR if it doesn't exist and redirect it to the TEMP folder
|
||||||
|
if not exist "%APP_DIR%" (
|
||||||
|
subst Y: %TEMP%
|
||||||
|
REM timeout /t 1
|
||||||
|
if not exist "%APP_DIR%" (
|
||||||
|
mkdir "%APP_DIR%"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Mounted the Y:\ drive to the %TEMP%\SDGT folder
|
||||||
|
|
||||||
set AMDAEMON_CFG=config_common.json ^
|
set AMDAEMON_CFG=config_common.json ^
|
||||||
config_ex.json ^
|
config_ex.json ^
|
||||||
config_jp.json ^
|
config_jp.json ^
|
||||||
@ -26,15 +40,12 @@ config_seat_single_jp.json ^
|
|||||||
config_hook.json
|
config_hook.json
|
||||||
|
|
||||||
start "AM Daemon" /min inject -d -k idachook.dll amdaemon.exe -c %AMDAEMON_CFG%
|
start "AM Daemon" /min inject -d -k idachook.dll amdaemon.exe -c %AMDAEMON_CFG%
|
||||||
|
inject -d -k idachook.dll ..\WindowsNoEditor\GameProject.exe -culture=en launch=Cabinet ABSLOG="..\..\..\..\..\Userdata\GameProject.log" -Master -UserDir="..\..\..\Userdata" -NotInstalled -UNATTENDED
|
||||||
rem JP
|
|
||||||
rem inject -d -k idachook.dll ..\WindowsNoEditor\GameProject\Binaries\Win64\GameProject-Win64-Shipping.exe -culture=ja launch=Cabinet ABSLOG="..\..\..\..\..\Userdata\GameProject.log" -Master -UserDir="..\..\..\Userdata" -NotInstalled -UNATTENDED
|
|
||||||
|
|
||||||
rem EXP
|
|
||||||
inject -d -k idachook.dll ..\WindowsNoEditor\GameProject\Binaries\Win64\GameProject-Win64-Shipping.exe -culture=en launch=Cabinet ABSLOG="..\..\..\..\..\Userdata\GameProject.log" -Master -UserDir="..\..\..\Userdata" -NotInstalled -UNATTENDED
|
|
||||||
|
|
||||||
taskkill /f /im amdaemon.exe > nul 2>&1
|
taskkill /f /im amdaemon.exe > nul 2>&1
|
||||||
|
|
||||||
|
REM unmount the APP_DIR
|
||||||
|
subst Y: /d > nul 2>&1
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo Game processes have terminated
|
echo Game processes have terminated
|
||||||
pause
|
pause
|
@ -66,22 +66,21 @@ void doorstop_invoke(void* domain) {
|
|||||||
if (mono_domain_set_config) {
|
if (mono_domain_set_config) {
|
||||||
#define CONFIG_EXT L".config"
|
#define CONFIG_EXT L".config"
|
||||||
|
|
||||||
wchar_t config_path[MAX_PATH];
|
wchar_t exe_path[MAX_PATH];
|
||||||
size_t config_path_len = GetModuleFileNameW(NULL, config_path, MAX_PATH);
|
size_t exe_path_len = GetModuleFileNameW(NULL, exe_path, MAX_PATH);
|
||||||
wchar_t *folder_name = wcsdup(config_path);
|
wchar_t *folder_name = wcsdup(exe_path);
|
||||||
|
|
||||||
PathCchRemoveFileSpec(folder_name, config_path_len + 1);
|
PathCchRemoveFileSpec(folder_name, exe_path_len + 1);
|
||||||
wmemcpy(config_path + config_path_len, CONFIG_EXT, sizeof(CONFIG_EXT) / sizeof(CONFIG_EXT[0]));
|
|
||||||
|
|
||||||
char *config_path_n = narrow(config_path);
|
char *exe_path_n = narrow(exe_path);
|
||||||
char *folder_name_n = narrow(folder_name);
|
char *folder_name_n = narrow(folder_name);
|
||||||
|
|
||||||
dprintf("Unity: Setting config paths: base dir: %s; config path: %s\n", folder_name_n, config_path_n);
|
dprintf("Unity: Setting config paths: base dir: %s; config path: %s\n", folder_name_n, exe_path_n);
|
||||||
|
|
||||||
mono_domain_set_config(domain, folder_name_n, config_path_n);
|
mono_domain_set_config(domain, folder_name_n, exe_path_n);
|
||||||
|
|
||||||
free(folder_name);
|
free(folder_name);
|
||||||
free(config_path_n);
|
free(exe_path_n);
|
||||||
free(folder_name_n);
|
free(folder_name_n);
|
||||||
|
|
||||||
#undef CONFIG_EXT
|
#undef CONFIG_EXT
|
||||||
|
Reference in New Issue
Block a user