1
0
mirror of https://github.com/djhackersdev/bemanitools.git synced 2024-11-28 00:10:51 +01:00

WIP: bemanitools 6

highly WIP, what’s “working”:
- iidxhook 9 to 24
- launcher
- inject
This commit is contained in:
icex2 2024-06-12 17:41:20 +02:00
parent 81821490bd
commit acf2498939
693 changed files with 20706 additions and 8272 deletions

View File

@ -139,13 +139,14 @@ libs :=
avsdlls :=
avsexes :=
avslibs :=
testdlls :=
testexes :=
include Module.mk
modules := $(dlls) $(exes) $(libs) $(avsdlls) $(avsexes) $(testdlls) $(testexes)
modules := $(dlls) $(exes) $(libs) $(avsdlls) $(avsexes) $(avslibs) $(testdlls) $(testexes)
#
# $1: Bitness
@ -200,6 +201,7 @@ $$(bindir_$1_$2):
$$(eval $$(foreach imp,$(imps),$$(call t_import,$1,$2,$$(imp))))
$$(eval $$(foreach dll,$(avsdlls),$$(call t_linkdll,$1,$2,$$(dll))))
$$(eval $$(foreach exe,$(avsexes),$$(call t_linkexe,$1,$2,$$(exe))))
$$(eval $$(foreach lib,$(avslibs),$$(call t_archive,$1,$2,$$(lib))))
endef
@ -209,6 +211,7 @@ define t_compile
depdir_$1_$2_$3 := $(depdir)/$$(subdir_$1_$2)/$3
abslib_$1_$2_$3 := $$(libs_$3:%=$$(bindir_$1_indep)/lib%.a)
avslib_$1_$2_$3 := $$(avslibs_$3:%=$$(bindir_$1_$2)/lib%.a)
absdpl_$1_$2_$3 := $$(deplibs_$3:%=$$(bindir_$1_$2)/lib%.a)
objdir_$1_$2_$3 := $(objdir)/$$(subdir_$1_$2)/$3
obj_$1_$2_$3 := $$(src_$3:%.c=$$(objdir_$1_$2_$3)/%.o) \
@ -260,6 +263,7 @@ dll_$1_$2_$3 := $$(bindir_$1_$2)/$3.dll
implib_$1_$2_$3 := $$(bindir_$1_$2)/lib$3.a
$$(dll_$1_$2_$3) $$(implib_$1_$2_$3): $$(obj_$1_$2_$3) $$(abslib_$1_$2_$3) \
$$(avslib_$1_$2_$3) \
$$(absdpl_$1_$2_$3) \
$$(srcdir_$3)/$3.def | $$(bindir_$1_$2)
$(V)echo ... $$(dll_$1_$2_$3)
@ -278,7 +282,7 @@ $(t_compile)
exe_$1_$2_$3 := $$(bindir_$1_$2)/$3.exe
$$(exe_$1_$2_$3): $$(obj_$1_$2_$3) $$(abslib_$1_$2_$3) $$(absdpl_$1_$2_$3) \
$$(exe_$1_$2_$3): $$(obj_$1_$2_$3) $$(abslib_$1_$2_$3) $$(avslib_$1_$2_$3) $$(absdpl_$1_$2_$3) \
| $$(bindir_$1_$2)
$(V)echo ... $$@
$(V)$$(toolchain_$1)gcc -o $$@ $$^ $$(ldflags_$3)

View File

@ -88,10 +88,10 @@ imps += avs avs-ea3
include src/main/aciodrv/Module.mk
include src/main/aciodrv-proc/Module.mk
include src/main/acioemu/Module.mk
include src/main/aciomgr/Module.mk
include src/main/acio-mgr/Module.mk
include src/main/aciotest/Module.mk
include src/main/asio/Module.mk
include src/main/avs-util/Module.mk
include src/main/avs-ext/Module.mk
include src/main/bio2drv/Module.mk
include src/main/bio2emu-iidx/Module.mk
include src/main/bio2emu/Module.mk
@ -116,6 +116,7 @@ include src/main/dinput/Module.mk
include src/main/eamio-icca/Module.mk
include src/main/eamio/Module.mk
include src/main/eamiotest/Module.mk
include src/main/exceptiontrace/Module.mk
include src/main/extio/Module.mk
include src/main/extiodrv/Module.mk
include src/main/extiotest/Module.mk
@ -138,6 +139,10 @@ include src/main/ezusb2/Module.mk
include src/main/geninput/Module.mk
include src/main/hook/Module.mk
include src/main/hooklib/Module.mk
include src/main/iface/Module.mk
include src/main/iface-acio/Module.mk
include src/main/iface-core/Module.mk
include src/main/iface-io/Module.mk
include src/main/iidx-bio2-exit-hook/Module.mk
include src/main/iidx-ezusb-exit-hook/Module.mk
include src/main/iidx-ezusb2-exit-hook/Module.mk
@ -173,6 +178,7 @@ include src/main/jbhook3/Module.mk
include src/main/launcher/Module.mk
include src/main/mempatch-hook/Module.mk
include src/main/mm/Module.mk
include src/main/module/Module.mk
include src/main/p3io/Module.mk
include src/main/p3iodrv/Module.mk
include src/main/p3ioemu/Module.mk
@ -183,7 +189,6 @@ include src/main/popnhook-util/Module.mk
include src/main/popnhook1/Module.mk
include src/main/popnio/Module.mk
include src/main/procmon/Module.mk
include src/main/procmon-lib/Module.mk
include src/main/pcbidgen/Module.mk
include src/main/sdvxhook/Module.mk
include src/main/sdvxhook2-cn/Module.mk
@ -493,7 +498,7 @@ $(zipdir)/iidx-27-to-30.zip: \
$(V)zip -j $@ $^
$(zipdir)/iidx-hwio-x86.zip: \
build/bin/indep-32/aciomgr.dll \
build/bin/indep-32/acio-mgr.dll \
build/bin/indep-32/eamio-icca.dll \
build/bin/indep-32/iidxio-bio2.dll \
build/bin/indep-32/iidxio-ezusb.dll \
@ -506,7 +511,7 @@ $(zipdir)/iidx-hwio-x86.zip: \
$(V)zip -j $@ $^
$(zipdir)/iidx-hwio-x64.zip: \
build/bin/indep-64/aciomgr.dll \
build/bin/indep-64/acio-mgr.dll \
build/bin/indep-64/eamio-icca.dll \
build/bin/indep-64/iidxio-bio2.dll \
build/bin/indep-64/iidxio-ezusb.dll \
@ -617,7 +622,7 @@ $(zipdir)/jb-08.zip: \
$(V)zip -j $@ $^
$(zipdir)/jb-hwio.zip: \
build/bin/indep-32/aciomgr.dll \
build/bin/indep-32/acio-mgr.dll \
build/bin/indep-32/eamio-icca.dll \
build/bin/indep-32/jbio-magicbox.dll \
build/bin/indep-32/jbio-p4io.dll \
@ -681,7 +686,7 @@ $(zipdir)/sdvx-05-cn.zip: \
$(V)zip -j $@ $^
$(zipdir)/sdvx-hwio-x86.zip: \
build/bin/indep-32/aciomgr.dll \
build/bin/indep-32/acio-mgr.dll \
build/bin/indep-32/eamio-icca.dll \
build/bin/indep-32/sdvxio-kfca.dll \
build/bin/indep-32/sdvxio-bio2.dll \
@ -691,7 +696,7 @@ $(zipdir)/sdvx-hwio-x86.zip: \
$(V)zip -j $@ $^
$(zipdir)/sdvx-hwio-x64.zip: \
build/bin/indep-64/aciomgr.dll \
build/bin/indep-64/acio-mgr.dll \
build/bin/indep-64/eamio-icca.dll \
build/bin/indep-64/sdvxio-kfca.dll \
build/bin/indep-64/sdvxio-bio2.dll \

View File

@ -0,0 +1,42 @@
#define LOG_MODULE "btsdk-hook-example"
#include <windows.h>
#include <stdbool.h>
#include <stdint.h>
#include "btapi/hook-core.h"
#include "btapi/hook-main.h"
#include "core/log.h"
#include "core/thread.h"
void btapi_hook_core_thread_impl_set(
btapi_thread_create_t create,
btapi_thread_join_t join,
btapi_thread_destroy_t destroy)
{
core_thread_impl_set(create, join, destroy);
}
void btapi_hook_core_log_impl_set(
btapi_log_formatter_t misc,
btapi_log_formatter_t info,
btapi_log_formatter_t warning,
btapi_log_formatter_t fatal)
{
core_log_impl_set(misc, info, warning, fatal);
}
bool btapi_hook_main_init(
HMODULE game_module, struct property_node *property_node_config)
{
log_info("btapi_hook_main_init");
return true;
}
void btapi_hook_main_fini()
{
log_info("btapi_hook_main_fini");
}

View File

View File

@ -0,0 +1,74 @@
#define LOG_MODULE "procmon-dllmain"
#include <windows.h>
#include "core/log-bt-ext.h"
#include "core/log-bt.h"
#include "core/thread-crt-ext.h"
#include "launcher/property-util.h"
#include "procmon/config.h"
#include "procmon/procmon.h"
#include "util/fs.h"
// TODO move this to a separate "standalone dllmain bootstrap" module in sdk
BOOL WINAPI DllMain(HMODULE mod, DWORD reason, void *ctx)
{
struct property *property;
struct property_node *root_node;
struct procmon_config config;
// TODO provide compatibility mode here? ctx set to...something?
// to figure out if this is loaded/run by any bemanitools loader
// or not.
if (reason == DLL_PROCESS_ATTACH) {
core_thread_crt_ext_impl_set();
core_log_bt_ext_init_with_stderr();
// TODO make this somehow configurable?
// have additional stuff on procmon configuration xml
// <dllmain>
// <log>
// have the same log stuff here as with launcher like file, level, rotation etc
// </log>
// <procmon>
// ....
// </procmon>
// </dllmain>
core_log_bt_level_set(CORE_LOG_BT_LOG_LEVEL_INFO);
log_info("DLL_PROCESS_ATTACH");
if (path_exists("procmon-config.xml")) {
property = property_util_load("procmon-config.xml");
root_node = property_search(NULL, "hook/procmon");
if (!root_node) {
// TODO error handling
}
procmon_config_init(&config);
procmon_config_load(root_node, &config);
procmon_init(&config);
} else {
log_warning("No configuration file found, defaulting");
procmon_config_init(&config);
procmon_init(&config);
}
} else if (reason == DLL_PROCESS_DETACH) {
log_info("DLL_PROCESS_DETACH");
procmon_fini();
core_log_bt_fini();
}
return TRUE;
}

View File

@ -0,0 +1,15 @@
void btsdk_dllmain_bootstrap_process_attach()
{
// TODO have the whole stuff to bootstrap independently of hook API
// with logging setup etc.
// provide stuff via recovering from command line args or env vars?
}
void btsdk_dllmain_bootstrap_process_detach()
{
// TODO cleanup
core_log_bt_fini();
}

View File

@ -0,0 +1,12 @@
#ifndef DLLMAIN_BOOTSTRAP_H
#define DLLMAIN_BOOTSTRAP_H
#include <stdint.h>
#include "imports/avs.h"
void btsdk_dllmain_bootstrap_process_attach();
void btsdk_dllmain_bootstrap_process_detach();
#endif

0
btsdk/example/hook/log.c Normal file
View File

View File

@ -0,0 +1,21 @@
void btapi_thread_impl_set()
{
}
int btapi_thread_create(int (*proc)(void *), void *ctx, uint32_t stack_sz, unsigned int priority)
{
}
void btapi_thread_join(int thread_id, int *result)
{
}
void btapi_thread_destroy(int thread_id)
{
}

View File

@ -0,0 +1,3 @@
void btapi_thread_impl_set();

View File

30
btsdk/hook-btapi/hook.c Normal file
View File

@ -0,0 +1,30 @@
#include "api/hook.h"
void btapi_hook_thread_impl_set(
btapi_thread_create_t create,
btapi_thread_join_t join,
btapi_thread_destroy_t destroy)
{
// TODO some simple example how to use basic functionality of the API
}
void btapi_hook_log_impl_set(
btapi_log_formatter_t misc,
btapi_log_formatter_t info,
btapi_log_formatter_t warning,
btapi_log_formatter_t fatal)
{
// TODO some simple example how to use basic functionality of the API
}
bool btapi_hook_init(struct property_node *config)
{
// TODO some simple example how to use basic functionality of the API
return true;
}
void btapi_hook_fini()
{
// TODO some simple example how to use basic functionality of the API
}

View File

@ -0,0 +1,2 @@
// TODO simple hook example with DllMain only
// ignoring the BT5 API

View File

@ -59,15 +59,11 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">ddrhook2.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<hook>
<path __type="str">ddrhook2.dll</path>
</hook>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

View File

@ -59,15 +59,11 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">ddrhook2.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<hook>
<path __type="str">ddrhook2.dll</path>
</hook>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

View File

@ -59,15 +59,11 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">ddrhook2.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<hook>
<path __type="str">ddrhook2.dll</path>
</hook>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

View File

@ -59,15 +59,11 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">ddrhook2.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<hook>
<path __type="str">ddrhook2.dll</path>
</hook>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

View File

@ -60,15 +60,11 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">ddrhook2.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<hook>
<path __type="str">ddrhook2.dll</path>
</hook>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

View File

@ -60,15 +60,11 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">ddrhook2.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<hook>
<path __type="str">ddrhook2.dll</path>
</hook>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

View File

@ -60,15 +60,11 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">ddrhook2.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<hook>
<path __type="str">ddrhook2.dll</path>
</hook>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<ea3_conf>
<soft>
<model __type="str">LDJ</model>
<dest __type="str">J</dest>
<spec __type="str">A</spec>
<rev __type="str">A</rev>
<ext __type="str">2022082400</ext>
</soft>
</ea3_conf>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<ea3>
<network>
<services>http://localhost</services>
</network>
</ea3>

View File

@ -1,6 +1,52 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
inject iidxhook1.dll bm2dx.exe -D --config iidxhook-09.conf %*
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\JAG
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook1.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-09.conf^
%*

View File

@ -1,6 +1,52 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
inject iidxhook1.dll bm2dx.exe -D --config iidxhook-10.conf %*
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\JAE
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook1.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-10.conf^
%*

View File

@ -1,6 +1,52 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
inject iidxhook1.dll bm2dx.exe -D --config iidxhook-11.conf %*
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\JAA
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook1.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-11.conf^
%*

View File

@ -1,5 +1,52 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
inject iidxhook1.dll bm2dx.exe -D --config iidxhook-12.conf %*
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\JAD
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook1.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-12.conf^
%*

View File

@ -1,7 +1,49 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\JAG
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
if not exist d mkdir d
if not exist e mkdir e
if not exist f mkdir f
@ -11,5 +53,9 @@ if not exist e\avs_conf\CONF mkdir e\avs_conf\CONF
if not exist e\avs_conf\CONF\NVRAM mkdir e\avs_conf\CONF\NVRAM
if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
inject iidxhook2.dll bm2dx.exe -D --config iidxhook-13.conf %*
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook2.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-13.conf^
%*

View File

@ -1,7 +1,49 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\2007072301
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
if not exist d mkdir d
if not exist e mkdir e
if not exist f mkdir f
@ -11,5 +53,9 @@ if not exist e\avs_conf\CONF mkdir e\avs_conf\CONF
if not exist e\avs_conf\CONF\NVRAM mkdir e\avs_conf\CONF\NVRAM
if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
inject iidxhook3.dll bm2dx.exe -D --config iidxhook-14.conf %*
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook3.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-14.conf^
%*

View File

@ -1,7 +1,49 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\2008031100
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
if not exist d mkdir d
if not exist e mkdir e
if not exist f mkdir f
@ -11,5 +53,9 @@ if not exist e\avs_conf\CONF mkdir e\avs_conf\CONF
if not exist e\avs_conf\CONF\NVRAM mkdir e\avs_conf\CONF\NVRAM
if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
inject iidxhook3.dll bm2dx.exe -D --config iidxhook-15.conf %*
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook3.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-15.conf^
%*

View File

@ -1,7 +1,49 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\2009072200
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
if not exist d mkdir d
if not exist e mkdir e
if not exist f mkdir f
@ -9,7 +51,11 @@ if not exist f mkdir f
if not exist e\avs_conf mkdir e\avs_conf
if not exist e\avs_conf\CONF mkdir e\avs_conf\CONF
if not exist e\avs_conf\CONF\NVRAM mkdir e\avs_conf\CONF\NVRAM
if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
inject iidxhook3.dll bm2dx.exe -D --config iidxhook-16.conf %*
if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook3.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-16.conf^
%*

View File

@ -1,7 +1,49 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%\2010071200
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
if not exist d mkdir d
if not exist e mkdir e
if not exist f mkdir f
@ -11,5 +53,9 @@ if not exist e\avs_conf\CONF mkdir e\avs_conf\CONF
if not exist e\avs_conf\CONF\NVRAM mkdir e\avs_conf\CONF\NVRAM
if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
inject iidxhook3.dll bm2dx.exe -D --config iidxhook-17.conf %*
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook3.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-17.conf^
%*

View File

@ -1,7 +1,49 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
if not exist d mkdir d
if not exist e mkdir e
if not exist f mkdir f
@ -14,4 +56,9 @@ if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
if not exist dev\nvram mkdir dev\nvram
if not exist dev\raw mkdir dev\raw
inject iidxhook4-cn.dll bm2dx.exe -D --config iidxhook-18-cn.conf %*
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook4-cn.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-18-cn.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,15 +23,30 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%MODULES_DIR%;^
%BEMANITOOLS_DIR%;^
%MODULES_DIR%;^
%PATH%
:: Current working dir is the game's root folder
:: Current working dir is the root/content directory of the game
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-18.xml --config %BEMANITOOLS_DIR%\iidxhook-18.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-18.xml^
--config %BEMANITOOLS_DIR%\iidxhook-18.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-19.xml --config %BEMANITOOLS_DIR%\iidxhook-19.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-19.xml^
--config %BEMANITOOLS_DIR%\iidxhook-19.conf^
%*

View File

@ -1,7 +1,49 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
if %errorlevel% neq 0 (
echo This script requires administrative privileges.
echo Please run the script as an administrator.
pause
exit 1
)
:: Script expects to be located in a subfolder "bemanitools" in the root folder
:: next to the folders data, JAA, JAB, etc.
cd /d %~dp0
set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set REVISION_DIR=%CONTENT_DIR%
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%REVISION_DIR%" (
echo The game modules directory "%REVISION_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so inject can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to inject
set PATH=^
%REVISION_DIR%;^
%BEMANITOOLS_DIR%;^
%PATH%
:: Current working dir is the selected game revision root folder
cd /d %REVISION_DIR%
if not exist d mkdir d
if not exist e mkdir e
if not exist f mkdir f
@ -14,4 +56,9 @@ if not exist e\avs_conf\CONF\RAW mkdir e\avs_conf\CONF\RAW
if not exist dev\nvram mkdir dev\nvram
if not exist dev\raw mkdir dev\raw
inject iidxhook5-cn.dll bm2dx.exe -D --config iidxhook-20-cn.conf %*
%BEMANITOOLS_DIR%\inject.exe^
%BEMANITOOLS_DIR%\iidxhook5-cn.dll^
%REVISION_DIR%\bm2dx.exe^
-D^
--config %BEMANITOOLS_DIR%\iidxhook-20-cn.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-20.xml --config %BEMANITOOLS_DIR%\iidxhook-20.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-20.xml^
--config %BEMANITOOLS_DIR%\iidxhook-20.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-21.xml --config %BEMANITOOLS_DIR%\iidxhook-21.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-21.xml^
--config %BEMANITOOLS_DIR%\iidxhook-21.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-22.xml --config %BEMANITOOLS_DIR%\iidxhook-22.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-22.xml^
--config %BEMANITOOLS_DIR%\iidxhook-22.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-23.xml --config %BEMANITOOLS_DIR%\iidxhook-23.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-23.xml^
--config %BEMANITOOLS_DIR%\iidxhook-23.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-24.xml --config %BEMANITOOLS_DIR%\iidxhook-24.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-24.xml^
--config %BEMANITOOLS_DIR%\iidxhook-24.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-25.xml --config %BEMANITOOLS_DIR%\iidxhook-25.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-25.xml^
--config %BEMANITOOLS_DIR%\iidxhook-25.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-26.xml --config %BEMANITOOLS_DIR%\iidxhook-26.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-26.xml^
--config %BEMANITOOLS_DIR%\iidxhook-26.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-27.xml --config %BEMANITOOLS_DIR%\iidxhook-27.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-27.xml^
--config %BEMANITOOLS_DIR%\iidxhook-27.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-28.xml --config %BEMANITOOLS_DIR%\iidxhook-28.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-28.xml^
--config %BEMANITOOLS_DIR%\iidxhook-28.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-29.xml --config %BEMANITOOLS_DIR%\iidxhook-29.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-29.xml^
--config %BEMANITOOLS_DIR%\iidxhook-29.conf^
%*

View File

@ -1,5 +1,8 @@
@echo off
:: Keep all vars scoped to this script
setlocal
:: Game doesn't work properly when not run with administrator privileges
>nul 2>&1 net session
@ -20,6 +23,18 @@ set CONTENT_DIR=%CD%\..
set BEMANITOOLS_DIR=%CONTENT_DIR%\bemanitools
set MODULES_DIR=%CONTENT_DIR%\modules
if not exist "%BEMANITOOLS_DIR%" (
echo The bemanitools directory "%BEMANITOOLS_DIR%" does not exist.
pause
exit 1
)
if not exist "%MODULES_DIR%" (
echo The game modules directory "%MODULES_DIR%" does not exist.
pause
exit 1
)
:: Keep that data vanilla, no need to copy these around anymore
:: Just add them to the env PATH so launcher can find the libs and game executable
:: Remark: This also requires admin privileges to propage correctly to launcher
@ -31,4 +46,7 @@ set PATH=^
:: Current working dir is the game's root folder
cd /d %CONTENT_DIR%
%BEMANITOOLS_DIR%\launcher %BEMANITOOLS_DIR%\launcher-30.xml --config %BEMANITOOLS_DIR%\iidxhook-30.conf %*
%BEMANITOOLS_DIR%\launcher.exe^
%BEMANITOOLS_DIR%\launcher-30.xml^
--config %BEMANITOOLS_DIR%\iidxhook-30.conf^
%*

View File

@ -56,7 +56,7 @@ ezusb.io_board_type=1
misc.disable_clock_set=false
# Stub calls to rteffect.dll (10th to DistorteD)
misc.rteffect_stub=false
misc.rteffect_stub=true
# Path to store the settings, e.g. bookkeeping, operator settings. d:, e: and f: drive configuration/settings data
misc.settings_path=.\

View File

@ -56,7 +56,7 @@ ezusb.io_board_type=1
misc.disable_clock_set=false
# Stub calls to rteffect.dll (10th to DistorteD)
misc.rteffect_stub=false
misc.rteffect_stub=true
# Path to store the settings, e.g. bookkeeping, operator settings. d:, e: and f: drive configuration/settings data
misc.settings_path=.\

View File

@ -59,7 +59,7 @@ misc.happy_sky_ms_bg_fix=false
misc.disable_clock_set=false
# Stub calls to rteffect.dll (10th to DistorteD)
misc.rteffect_stub=false
misc.rteffect_stub=true
# Path to store the settings, e.g. bookkeeping, operator settings. d:, e: and f: drive configuration/settings data
misc.settings_path=.\

View File

@ -59,7 +59,7 @@ misc.distorted_ms_bg_fix=false
misc.disable_clock_set=false
# Stub calls to rteffect.dll (10th to DistorteD)
misc.rteffect_stub=false
misc.rteffect_stub=true
# Path to store the settings, e.g. bookkeeping, operator settings. d:, e: and f: drive configuration/settings data
misc.settings_path=.\

44
dist/iidx/iidxhook-30.xml vendored Normal file
View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<hook>
<version __type="u32">1</version>
<io>
<disable_card_reader_emu __type="bool">0</disable_card_reader_emu>
<disable_bio2_emu __type="bool">0</disable_bio2_emu>
<disable_poll_limiter __type="bool">0</disable_poll_limiter>
<lightning_mode __type="bool">0</lighting_mode>
<disable_cams __type="bool">1</disable_cams>
<disable_file_hooks __type="bool">0</disable_file_hooks>
<tt_multiplier __type="float">1.0</tt_multiplier>
</io>
<cam>
<disable_emu __type="bool">1</disable_emu>
<disable_camera1 __type="bool">1</disable_camera1>
<disable_camera2 __type="bool">1</disable_camera2>
<device_id1 __type="str"></device_id1>
<device_id2 __type="str"></device_id2>
</cam>
<gfx>
<framed __type="bool">1</framed>
<windowed __type="bool">0</windowed>
<confined __type="bool">0</confined>
<window_width __type="s32">-1</window_width>
<window_height __type="s32">-1</window_height>
<window_x __type="s32">-1</window_x>
<window_y __type="s32">-1</window_y>
<forced_refresh_rate __type="s32">-1</forced_refresh_rate>
<device_adapter __type="s32">-1</device_adapter>
<force_orientation __type="s32">-1</force_orientation>
<force_screen_res>
<width __type="s32">-1</width>
<height __type="s32">-1</height>
</force_screen_res>
</gfx>
<adapter>
<override_ip __type="str"></override_ip>
</adapter>
<asio>
<force_asio __type="bool">0</force_asio>
<force_wasapi __type="bool">1</force_wasapi>
<device_name __type="str">XONAR SOUND CARD(64)</device_name>
</asio>
</hook>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -41,6 +42,8 @@
<fs>
<root>
<device __type="str">.</device>
<fstype __type="str">fs</fstype>
<option __type="str">posix=1</option>
</root>
<nvram>
<device __type="str">dev/nvram</device>
@ -60,13 +63,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook4.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook4.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -41,6 +42,8 @@
<fs>
<root>
<device __type="str">.</device>
<fstype __type="str">fs</fstype>
<option __type="str">posix=1</option>
</root>
<nvram>
<device __type="str">dev/nvram</device>
@ -60,13 +63,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook5.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook5.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -41,6 +42,8 @@
<fs>
<root>
<device __type="str">.</device>
<fstype __type="str">fs</fstype>
<option __type="str">posix=1</option>
</root>
<nvram>
<device __type="str">dev/nvram</device>
@ -60,13 +63,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook6.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook6.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -41,6 +42,8 @@
<fs>
<root>
<device __type="str">.</device>
<fstype __type="str">fs</fstype>
<option __type="str">posix=1</option>
</root>
<nvram>
<device __type="str">dev/nvram</device>
@ -60,13 +63,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook7.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook7.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -41,6 +42,8 @@
<fs>
<root>
<device __type="str">.</device>
<fstype __type="str">fs</fstype>
<option __type="str">posix=1</option>
</root>
<nvram>
<device __type="str">dev/nvram</device>
@ -60,13 +63,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook7.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook7.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -41,6 +42,8 @@
<fs>
<root>
<device __type="str">.</device>
<fstype __type="str">fs</fstype>
<option __type="str">posix=1</option>
</root>
<nvram>
<device __type="str">dev/nvram</device>
@ -60,13 +63,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook7.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook7.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -41,6 +42,8 @@
<fs>
<root>
<device __type="str">.</device>
<fstype __type="str">fs</fstype>
<option __type="str">posix=1</option>
</root>
<nvram>
<device __type="str">dev/nvram</device>
@ -60,13 +63,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook7.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook7.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -59,13 +60,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook8.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook8.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -59,13 +60,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
<dll __type="str">iidxhook8.dll</dll>
</hook_dlls>
<before_hook_dlls>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<hook>
<enable __type="bool">1</enable>
<path __type="str">iidxhook8.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</hook>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -54,13 +55,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
</hook_dlls>
<before_hook_dlls>
<dll __type="str">iidxhook9.dll</dll>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<pre_avs>
<enable __type="bool">1</enable>
<path __type="str">iidxhook9.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</pre_avs>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -54,13 +55,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
</hook_dlls>
<before_hook_dlls>
<dll __type="str">iidxhook9.dll</dll>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<pre_avs>
<enable __type="bool">1</enable>
<path __type="str">iidxhook9.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</pre_avs>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -54,13 +55,14 @@
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
</hook_dlls>
<before_hook_dlls>
<dll __type="str">iidxhook9.dll</dll>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
<pre_avs>
<enable __type="bool">1</enable>
<path __type="str">iidxhook9.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</pre_avs>
</hook>
<debug>
<remote_debugger __type="bool">0</remote_debugger>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<launcher version="1">
<launcher>
<version __type="u32">1</version>
<bootstrap>
<selector __type="str">bemanitools_local_fs</selector>
<config kind="inline">
@ -53,15 +54,16 @@
<eamuse>
<config kind="file">bemanitools/ea3-service.xml</config>
</eamuse>
<hook>
<hook_dlls>
</hook_dlls>
<before_hook_dlls>
<dll __type="str">iidxhook9.dll</dll>
</before_hook_dlls>
<iat_hook_dlls>
</iat_hook_dlls>
</hook>
<hooks>
<pre_avs>
<enable __type="bool">1</enable>
<path __type="str">iidxhook9.dll</path>
<config kind="inline">
<hook>
</hook>
</config>
</pre_avs>
</hooks>
<debug>
<remote_debugger __type="bool">0</remote_debugger>
<log_property_configs __type="bool">0</log_property_configs>

7
dist/iidx/pcbid.xml vendored
View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="Shift-JIS"?>
<ea3_conf>
<id>
<softid __type="str">0101020304050607083F</softid>
<pcbid __type="str">0101020304050607083F</pcbid>
</id>
</ea3_conf>

69
notes.md Normal file
View File

@ -0,0 +1,69 @@
* document life cycle of hooks, when they happen, what gets called, what to do and what not to do -> document this in the API + overview with references from some sdk docs
* dll load: DllMain
* ... refer to hook API calls
* documentation as a rendered page on bemanitools.github.io domain
* Design and style like sapling documentation
* support command lines with paths, i.e. -P launcher.hooks.bla.gfx.windowed
as well as allowing hooks and other things to define arbitrary short versions
e.g. -w for windowed
* think about splitting mono hooks into smaller ones. iidx is probably a good
example because stuff is being re-used everywhere, e.g. gfx stuff?
* group all hooks in its own subfolder -> name them all with a "hook" postfix?
* procmon: lib avs monitor
* make vtables for core thread and log
* for io api
* use structs with bit fields everywhere to avoid all the bit shifting etc
* align several IO interfaces regarding separate polling (read/write) calls etc
* make them work closer to the actual device IOs, e.g. ddr with different sensor modes polling vs individual
* have all IO APIs in the style of
* setters + getters: modify internal state, but don't transfer to hardware/device, yet
* transactional functions: read/write (or send/recv) or update to execute a transaction to the hardware. this also can be a stubbed function that doesn't do anything if the backend is async driven but the API is not exposing that and looks like a sync API
* split iidxio into vefx and control deck parts -> have this as a separate library that loads two libs and composes them to the iidxio one?
* btapi design choice: have return types always be a status code and use parameter pointers to return actual data, e.g. for getting IO values
* io/popn: doesn't have read/write (poll) calls to explicitly drive the hardware
* have command in build script/justfile to create a package that can be used as a standalone project
to develop for bemanitools using the sdk
* Have a version.h/version.c for every dll/exe in bemanitools, see launcher. Print these at the first possible occasion when logging is available to console
* have shim dlls in sdk (?) that create backward compatibility with
BT5 equivalent DLLs but only support the api v1 of BT6
* avs log server in iidx-utils (and also for other games where needed?)
move to bt-core and make it a generic and improved async log sink
* make vefx.dll optional in iidxio.dll with geninput.dll
* iidx io emulation is not getting values "atomic" from iidxio API
see the various msg implementations which hook the API
for example
msg_resp.inverted_pad = ((iidx_io_ep2_get_keys() & 0x3FFF) << 16) |
(iidx_io_ep2_get_panel() & 0x0F) |
((iidx_io_ep2_get_sys() & 0x07) << 4) |
(((iidx_io_ep2_get_sys() >> 2) & 0x01) << 30);
-> iidx_io_ep2_get_sys is called twice
* deprecate cconfig and replace with core-config everywhere, e.g. in IO libs
* command line tooling unification: command arg parsing, common command args like setting log level/enabling/disabling log file
* iat hook impl in launcher not complete and working, yet
* Support config api, required implementation for modules such as IO once being used, see modules/io-ext -> TODOs next to api inits
* have a library that provides global options for any
command line tool such as setting log level, log file etc.
and have a piece of code allowing for quick and simply usage everywhere -> unify command line args
* notes for migration guide from bemanitools 5 to 6
* Delete config.exe configurations in appdata: C:\Users\<USERNAME>\AppData\Roaming\DJHACKERS\iidx.bin
* incompatibility list to BT5
* All IO libs
* hooks?
* configuration files .conf
* previous setups with eapki data, keep stuff stock now and use bootstrap.xml provided by btools or stock bootstrap.xml
* config tool broken -> various functions from geninput need
to be loaded in addition to the input interface
* rteffects stubs don't seem to work, iidxhook1+2
* split all games and versions for distribution files to distribution packages for each game version. avoids having a mixed bag of multiple versions with different startup scripts and sometimes oneofs, e.g. one specific lib for one version.
* for iidx e,f settings folders (old games), have default configuration values allocate them outside of the revision dirs, e.g. under settings/save next to the bemanitools folder to keep revision folders clean
* improve config defaults, e.g. on old iidx games: have various gfx fixes enabled by default, cause disabling is rather the exception, e.g. running on actual old hardware that doesn't have these issues
* iidx15 needs default save data -> btools supplement and link in documentation that this needs to be setup or game crashes
* improve command line tool/usage docs by following the man page style format with sections name, synopsis description, options etc.
* similar to trace wrapper for core api, have performance measuring around IO api
* reverse engineer NvDisplayConfigLDJ and make bemanitools version of that
* replace inject logging through debug api with unified logging through bemanitools 6 api
* also solves issue with blocking logging on OutputDebugStr that needs synchronized
* bemanitools performance monitoring of IO and rendering loops, measure and expose metrics alert on flaky performance
* tool to easily read and change xml properties configs from command line, similar to jq, but a lot simpler. no query language, just simple get and put
* command line overrides for hook (and other?) configurations managed in
inject and launcher, transparent to hook which just gets the final config

42
src/api/acio/mgr.h Normal file
View File

@ -0,0 +1,42 @@
#ifndef BT_API_ACIO_MGR_H
#define BT_API_ACIO_MGR_H
#include <stdbool.h>
#include <stdint.h>
#define BT_ACIO_MGR_NODE_PRODUCT_CODE_LEN 4
typedef struct ac_io_message bt_acio_message_t;
typedef struct aciodrv_device_ctx bt_acio_drv_device_ctx_t;
typedef struct bt_acio_mgr_port_dispatcher bt_acio_mgr_port_dispatcher_t;
typedef bt_acio_mgr_port_dispatcher_t *(*bt_acio_mgr_port_init_t)(const char *path, uint32_t baud);
typedef void (*bt_acio_mgr_port_fini_t)(bt_acio_mgr_port_dispatcher_t *dispatcher);
typedef uint8_t (*bt_acio_mgr_node_count_get_t)(const bt_acio_mgr_port_dispatcher_t *dispatcher);
typedef bool (*bt_acio_mgr_node_product_ident_get_t)(
const bt_acio_mgr_port_dispatcher_t *dispatcher,
uint8_t node_id,
char product[BT_ACIO_MGR_NODE_PRODUCT_CODE_LEN]);
typedef bool (*bt_acio_mgr_port_packet_submit_t)(
bt_acio_mgr_port_dispatcher_t *dispatcher,
bt_acio_message_t *msg,
uint32_t max_resp_size);
typedef bt_acio_drv_device_ctx_t *(*bt_acio_mgr_port_checkout_t)(bt_acio_mgr_port_dispatcher_t *dispatcher);
typedef void (*bt_acio_mgr_port_checkin_t)(bt_acio_mgr_port_dispatcher_t *dispatcher);
typedef struct bt_acio_mgr_api {
uint16_t version;
struct {
// Required to be implemented
bt_acio_mgr_port_init_t port_init;
bt_acio_mgr_port_fini_t port_fini;
bt_acio_mgr_node_count_get_t node_count_get;
bt_acio_mgr_node_product_ident_get_t node_product_ident_get;
bt_acio_mgr_port_packet_submit_t port_packet_submit;
bt_acio_mgr_port_checkout_t port_checkout;
bt_acio_mgr_port_checkin_t port_checkin;
} v1;
} bt_acio_mgr_api_t;
#endif

51
src/api/core/config.h Normal file
View File

@ -0,0 +1,51 @@
#ifndef BT_API_CORE_CONFIG_H
#define BT_API_CORE_CONFIG_H
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
typedef struct bt_core_config bt_core_config_t;
typedef enum bt_core_config_result {
BT_CORE_CONFIG_RESULT_SUCCESS = 0,
BT_CORE_CONFIG_RESULT_ERROR_INTERNAL = 1,
BT_CORE_CONFIG_RESULT_VALUE_NOT_FOUND = 2,
BT_CORE_CONFIG_RESULT_TYPE_MISMATCH = 3,
} bt_core_config_result_t;
typedef bt_core_config_result_t (*bt_core_config_s8_get_t)(const bt_core_config_t *config, const char *path, int8_t *value);
typedef bt_core_config_result_t (*bt_core_config_u8_get_t)(const bt_core_config_t *config, const char *path, uint8_t *value);
typedef bt_core_config_result_t (*bt_core_config_s16_get_t)(const bt_core_config_t *config, const char *path, int16_t *value);
typedef bt_core_config_result_t (*bt_core_config_u16_get_t)(const bt_core_config_t *config, const char *path, uint16_t *value);
typedef bt_core_config_result_t (*bt_core_config_s32_get_t)(const bt_core_config_t *config, const char *path, int32_t *value);
typedef bt_core_config_result_t (*bt_core_config_u32_get_t)(const bt_core_config_t *config, const char *path, uint32_t *value);
typedef bt_core_config_result_t (*bt_core_config_s64_get_t)(const bt_core_config_t *config, const char *path, int64_t *value);
typedef bt_core_config_result_t (*bt_core_config_u64_get_t)(const bt_core_config_t *config, const char *path, uint64_t *value);
typedef bt_core_config_result_t (*bt_core_config_float_get_t)(const bt_core_config_t *config, const char *path, float *value);
typedef bt_core_config_result_t (*bt_core_config_double_get_t)(const bt_core_config_t *config, const char *path, double *value);
typedef bt_core_config_result_t (*bt_core_config_bool_get_t)(const bt_core_config_t *config, const char *path, bool *value);
typedef bt_core_config_result_t (*bt_core_config_bin_get_t)(const bt_core_config_t *config, const char *path, void *value, size_t len);
typedef bt_core_config_result_t (*bt_core_config_str_get_t)(const bt_core_config_t *config, const char *path, char *value, size_t len);
typedef struct bt_core_config_api {
uint16_t version;
struct {
bt_core_config_s8_get_t s8_get;
bt_core_config_u8_get_t u8_get;
bt_core_config_s16_get_t s16_get;
bt_core_config_u16_get_t u16_get;
bt_core_config_s32_get_t s32_get;
bt_core_config_u32_get_t u32_get;
bt_core_config_s64_get_t s64_get;
bt_core_config_u64_get_t u64_get;
bt_core_config_float_get_t float_get;
bt_core_config_double_get_t double_get;
bt_core_config_bool_get_t bool_get;
bt_core_config_bin_get_t bin_get;
bt_core_config_str_get_t str_get;
} v1;
} bt_core_config_api_t;
#endif

19
src/api/core/log.h Normal file
View File

@ -0,0 +1,19 @@
#ifndef BT_API_CORE_LOG_H
#define BT_API_CORE_LOG_H
#include <stdint.h>
typedef void (*bt_core_log_message_t)(const char *module, const char *fmt, ...);
typedef struct bt_core_log_api {
uint16_t version;
struct {
bt_core_log_message_t misc;
bt_core_log_message_t info;
bt_core_log_message_t warning;
bt_core_log_message_t fatal;
} v1;
} bt_core_log_api_t;
#endif

28
src/api/core/thread.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef BT_API_CORE_THREAD_H
#define BT_API_CORE_THREAD_H
#include <stdint.h>
typedef enum bt_core_thread_result {
BT_CORE_THREAD_RESULT_SUCCESS = 0,
BT_CORE_THREAD_RESULT_ERROR_INTERNAL = 1,
} bt_core_thread_result_t;
typedef int bt_core_thread_id_t;
typedef bt_core_thread_result_t (*bt_core_thread_create_t)(
int (*proc)(void *), void *ctx, uint32_t stack_sz, unsigned int priority, bt_core_thread_id_t *thread_id);
typedef bt_core_thread_result_t (*bt_core_thread_join_t)(bt_core_thread_id_t thread_id, int *result);
typedef bt_core_thread_result_t (*bt_core_thread_destroy_t)(bt_core_thread_id_t thread_id);
typedef struct bt_core_thread_api {
uint16_t version;
struct {
bt_core_thread_create_t create;
bt_core_thread_join_t join;
bt_core_thread_destroy_t destroy;
} v1;
} bt_core_thread_api_t;
#endif

41
src/api/hook.h Normal file
View File

@ -0,0 +1,41 @@
#ifndef BT_API_HOOK_H
#define BT_API_HOOK_H
#include <windows.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include "api/core/config.h"
typedef enum bt_io_bst_gpio_sys_bit {
BT_IO_BST_GPIO_SYS_COIN = 2,
BT_IO_BST_GPIO_SYS_TEST = 4,
BT_IO_BST_GPIO_SYS_SERVICE = 5,
} bt_io_bst_gpio_sys_bit_t;
typedef void (*bt_hook_iat_dll_name_get_t)(char *buffer, size_t size);
typedef bool (*bt_hook_pre_avs_init_t)(const bt_core_config_t *config);
// game module reference, either the exe or dll. allow for further targeted hooking/patching
// remark: you can't own the memory of the property_node config. whatever you need form that, make sure to copy the data and not just reference it.
// there is no guarantee the data is not free'd/gone after this call returns
// use the property api to iterate the data and parse it into your own custom configuration struct
// it is advised to also validate all parameters
// if no configuration was provided upon loading, the config_node contains an empty root node
typedef bool (*bt_hook_main_init_t)(HMODULE game_module, const bt_core_config_t *config);
typedef void (*bt_hook_main_fini_t)();
typedef struct bt_hook_api {
uint16_t version;
struct {
// Optional
bt_hook_iat_dll_name_get_t iat_dll_name_get;
bt_hook_pre_avs_init_t pre_avs_init;
bt_hook_main_init_t main_init;
bt_hook_main_fini_t main_fini;
} v1;
} bt_hook_api_t;
#endif

28
src/api/input.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef BT_API_INPUT_H
#define BT_API_INPUT_H
#include <stdbool.h>
#include <stdint.h>
typedef bool (*bt_input_init_t)();
typedef void (*bt_input_fini_t)();
typedef bool (*bt_input_mapper_config_load_t)(const char *game_type);
typedef uint8_t (*bt_input_mapper_analog_read_t)(uint8_t analog);
typedef uint64_t (*bt_input_mapper_update_t)();
typedef void (*bt_input_mapper_light_write_t)(uint8_t light, uint8_t intensity);
typedef struct bt_input_api {
uint16_t version;
struct {
// Required to be implemented
bt_input_init_t init;
bt_input_fini_t fini;
bt_input_mapper_config_load_t mapper_config_load;
bt_input_mapper_analog_read_t mapper_analog_read;
bt_input_mapper_update_t mapper_update;
bt_input_mapper_light_write_t mapper_light_write;
} v1;
} bt_input_api_t;
#endif

30
src/api/io/bst.h Normal file
View File

@ -0,0 +1,30 @@
#ifndef BT_API_IO_BST_H
#define BT_API_IO_BST_H
#include <stdbool.h>
#include <stdint.h>
typedef enum bt_io_bst_gpio_sys_bit {
BT_IO_BST_GPIO_SYS_COIN = 2,
BT_IO_BST_GPIO_SYS_TEST = 4,
BT_IO_BST_GPIO_SYS_SERVICE = 5,
} bt_io_bst_gpio_sys_bit_t;
typedef bool (*bt_io_bst_init_t)();
typedef void (*bt_io_bst_fini_t)();
typedef bool (*bt_io_bst_input_read_t)();
typedef uint8_t (*bt_io_bst_input_get_t)();
typedef struct bt_io_bst_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_bst_init_t init;
bt_io_bst_fini_t fini;
bt_io_bst_input_read_t input_read;
bt_io_bst_input_get_t input_get;
} v1;
} bt_io_bst_api_t;
#endif

106
src/api/io/ddr.h Normal file
View File

@ -0,0 +1,106 @@
#ifndef BT_API_IO_DDR_H
#define BT_API_IO_DDR_H
#include <stdbool.h>
#include <stdint.h>
typedef enum bt_io_ddr_pad_bit {
BT_IO_DDR_TEST = 0x04,
BT_IO_DDR_COIN = 0x05,
BT_IO_DDR_SERVICE = 0x06,
BT_IO_DDR_P2_START = 0x08,
BT_IO_DDR_P2_UP = 0x09,
BT_IO_DDR_P2_DOWN = 0x0A,
BT_IO_DDR_P2_LEFT = 0x0B,
BT_IO_DDR_P2_RIGHT = 0x0C,
BT_IO_DDR_P2_MENU_LEFT = 0x0E,
BT_IO_DDR_P2_MENU_RIGHT = 0x0F,
BT_IO_DDR_P2_MENU_UP = 0x02,
BT_IO_DDR_P2_MENU_DOWN = 0x03,
BT_IO_DDR_P1_START = 0x10,
BT_IO_DDR_P1_UP = 0x11,
BT_IO_DDR_P1_DOWN = 0x12,
BT_IO_DDR_P1_LEFT = 0x13,
BT_IO_DDR_P1_RIGHT = 0x14,
BT_IO_DDR_P1_MENU_LEFT = 0x16,
BT_IO_DDR_P1_MENU_RIGHT = 0x17,
BT_IO_DDR_P1_MENU_UP = 0x00,
BT_IO_DDR_P1_MENU_DOWN = 0x01,
} bt_io_ddr_pad_bit_t;
// see the functions below for more information
typedef enum bt_io_ddr_p3io_light_bit {
BT_IO_DDR_P3IO_LIGHT_P1_MENU = 0x00,
BT_IO_DDR_P3IO_LIGHT_P2_MENU = 0x01,
BT_IO_DDR_P3IO_LIGHT_P2_LOWER_LAMP = 0x04,
BT_IO_DDR_P3IO_LIGHT_P2_UPPER_LAMP = 0x05,
BT_IO_DDR_P3IO_LIGHT_P1_LOWER_LAMP = 0x06,
BT_IO_DDR_P3IO_LIGHT_P1_UPPER_LAMP = 0x07,
} bt_io_ddr_p3io_light_bit_t;
typedef enum bt_io_ddr_hdxs_light_bit {
BT_IO_DDR_HDXS_LIGHT_HD_P1_START = 0x08,
BT_IO_DDR_HDXS_LIGHT_HD_P1_UP_DOWN = 0x09,
BT_IO_DDR_HDXS_LIGHT_HD_P1_LEFT_RIGHT = 0x0A,
BT_IO_DDR_HDXS_LIGHT_HD_P2_START = 0x0B,
BT_IO_DDR_HDXS_LIGHT_HD_P2_UP_DOWN = 0x0C,
BT_IO_DDR_HDXS_LIGHT_HD_P2_LEFT_RIGHT = 0x0D,
} bt_io_ddr_hdxs_light_bit_t;
// the indexing starts from 0x20 if you're looking in geninput
typedef enum bt_io_ddr_hdxs_rgb_light_idx {
BT_IO_DDR_HDXS_LIGHT_HD_P1_SPEAKER_F_R = 0x00,
BT_IO_DDR_HDXS_LIGHT_HD_P1_SPEAKER_F_G = 0x01,
BT_IO_DDR_HDXS_LIGHT_HD_P1_SPEAKER_F_B = 0x02,
BT_IO_DDR_HDXS_LIGHT_HD_P2_SPEAKER_F_R = 0x03,
BT_IO_DDR_HDXS_LIGHT_HD_P2_SPEAKER_F_G = 0x04,
BT_IO_DDR_HDXS_LIGHT_HD_P2_SPEAKER_F_B = 0x05,
BT_IO_DDR_HDXS_LIGHT_HD_P1_SPEAKER_W_R = 0x06,
BT_IO_DDR_HDXS_LIGHT_HD_P1_SPEAKER_W_G = 0x07,
BT_IO_DDR_HDXS_LIGHT_HD_P1_SPEAKER_W_B = 0x08,
BT_IO_DDR_HDXS_LIGHT_HD_P2_SPEAKER_W_R = 0x09,
BT_IO_DDR_HDXS_LIGHT_HD_P2_SPEAKER_W_G = 0x0A,
BT_IO_DDR_HDXS_LIGHT_HD_P2_SPEAKER_W_B = 0x0B,
} bt_io_ddr_hdxs_rgb_light_idx_t;
typedef enum bt_io_ddr_extio_light_bit {
BT_IO_DDR_EXTIO_LIGHT_NEONS = 0x0E,
BT_IO_DDR_EXTIO_LIGHT_P2_RIGHT = 0x13,
BT_IO_DDR_EXTIO_LIGHT_P2_LEFT = 0x14,
BT_IO_DDR_EXTIO_LIGHT_P2_DOWN = 0x15,
BT_IO_DDR_EXTIO_LIGHT_P2_UP = 0x16,
BT_IO_DDR_EXTIO_LIGHT_P1_RIGHT = 0x1B,
BT_IO_DDR_EXTIO_LIGHT_P1_LEFT = 0x1C,
BT_IO_DDR_EXTIO_LIGHT_P1_DOWN = 0x1D,
BT_IO_DDR_EXTIO_LIGHT_P1_UP = 0x1E
} bt_io_ddr_extio_light_bit_t;
typedef bool (*bt_io_ddr_init_t)();
typedef void (*bt_io_ddr_fini_t)();
typedef uint32_t (*bt_io_ddr_pad_read_t)();
typedef void (*bt_io_ddr_extio_lights_set_t)(uint32_t extio_lights);
typedef void (*bt_io_ddr_p3io_lights_set_t)(uint32_t p3io_lights);
typedef void (*bt_io_ddr_hdxs_lights_panel_set_t)(uint32_t hdxs_lights);
typedef void (*bt_io_ddr_hdxs_lights_rgb_set_t)(uint8_t idx, uint8_t r, uint8_t g, uint8_t b);
typedef struct bt_io_ddr_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_ddr_init_t init;
bt_io_ddr_fini_t fini;
bt_io_ddr_pad_read_t pad_read;
bt_io_ddr_extio_lights_set_t extio_lights_set;
bt_io_ddr_p3io_lights_set_t p3io_lights_set;
bt_io_ddr_hdxs_lights_panel_set_t hdxs_lights_panel_set;
bt_io_ddr_hdxs_lights_rgb_set_t hdxs_lights_rgb_set;
} v1;
} bt_io_ddr_api_t;
#endif

88
src/api/io/eam.h Normal file
View File

@ -0,0 +1,88 @@
#ifndef BT_API_IO_EAM_H
#define BT_API_IO_EAM_H
/* Card reader emulator API. You may replace the stock EAMIO.DLL supplied by
Bemanitools with your own custom implementation, which should implement the
interface contract defined in this header file. */
#include <stdbool.h>
#include <stdint.h>
/* Scan codes for the so-called "10 key" button panel on each card reader. Each
scan code corresponds to a bit position within the 16-bit bitfield that you
return from eam_io_get_keypad_state(). */
typedef enum bt_io_eam_keypad_scan_code {
BT_IO_EAM_KEYPAD_SCAN_CODE_0 = 0,
BT_IO_EAM_KEYPAD_SCAN_CODE_1 = 1,
BT_IO_EAM_KEYPAD_SCAN_CODE_4 = 2,
BT_IO_EAM_KEYPAD_SCAN_CODE_7 = 3,
BT_IO_EAM_KEYPAD_SCAN_CODE_00 = 4,
BT_IO_EAM_KEYPAD_SCAN_CODE_2 = 5,
BT_IO_EAM_KEYPAD_SCAN_CODE_5 = 6,
BT_IO_EAM_KEYPAD_SCAN_CODE_8 = 7,
BT_IO_EAM_KEYPAD_SCAN_CODE_DECIMAL = 8,
BT_IO_EAM_KEYPAD_SCAN_CODE_3 = 9,
BT_IO_EAM_KEYPAD_SCAN_CODE_6 = 10,
BT_IO_EAM_KEYPAD_SCAN_CODE_9 = 11,
BT_IO_EAM_KEYPAD_COUNT = 12, /* Not an actual scan code */
} bt_io_eam_keypad_scan_code_t;
/* Emulating the sensors of a slotted card reader. The reader has one
sensor at the front that detects if a card is getting inserted or
if the card is not fully removed. When the back sensor is triggered
the card is locked in the slot and its data is read. */
typedef enum bt_io_eam_sensor_state {
BT_IO_EAM_SENSOR_STATE_FRONT = 0,
BT_IO_EAM_SENSOR_STATE_BACK = 1,
} bt_io_eam_sensor_state_t;
/* Different commands for the (slotted) reader. The game triggers one
of these actions and the card slot as to execute it. When non-slotted
readers are emulated, these states are not used/set. */
typedef enum bt_io_eam_card_slot_cmd {
BT_IO_EAM_CARD_SLOT_CMD_CLOSE = 0,
BT_IO_EAM_CARD_SLOT_CMD_OPEN = 1,
BT_IO_EAM_CARD_SLOT_CMD_EJECT = 2,
BT_IO_EAM_CARD_SLOT_CMD_READ = 3,
} bt_io_eam_card_slot_cmd_t;
/* Emulating of the card type for new readers. */
typedef enum bt_io_eam_read_card_result {
BT_IO_EAM_READ_CARD_RESULT_NONE = 0,
BT_IO_EAM_READ_CARD_RESULT_ISO15696 = 1,
BT_IO_EAM_READ_CARD_RESULT_FELICA = 2,
} bt_io_eam_read_card_result_t;
typedef struct bt_io_eam_config_api bt_io_eam_config_api_t;
typedef bool (*bt_io_eam_init_t)();
typedef void (*bt_io_eam_fini_t)();
typedef uint16_t (*bt_io_eam_keypad_state_get_t)(uint8_t unit_no);
typedef uint8_t (*bt_io_eam_sensor_state_get_t)(uint8_t unit_no);
typedef uint8_t (*bt_io_eam_card_read_t)(uint8_t unit_no, uint8_t *card_id, uint8_t nbytes);
typedef bool (*bt_io_eam_card_slot_cmd_send_t)(uint8_t unit_no, uint8_t cmd);
typedef bool (*bt_io_eam_poll_t)(uint8_t unit_no);
typedef const bt_io_eam_config_api_t *(*bt_io_eam_config_api_get_t)();
typedef struct bt_io_eam_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_eam_init_t init;
bt_io_eam_fini_t fini;
bt_io_eam_keypad_state_get_t keypad_state_get;
bt_io_eam_sensor_state_get_t sensor_state_get;
bt_io_eam_card_read_t card_read;
bt_io_eam_card_slot_cmd_send_t card_slot_cmd_send;
bt_io_eam_poll_t poll;
bt_io_eam_config_api_get_t config_api_get;
} v1;
} bt_io_eam_api_t;
#endif

122
src/api/io/iidx.h Normal file
View File

@ -0,0 +1,122 @@
#ifndef BT_API_IO_IIDX_H
#define BT_API_IO_IIDX_H
/* IO emulation provider for beatmania IIDX. */
#include <stdbool.h>
#include <stdint.h>
/* Bit mapping for the "pad" word */
typedef enum bt_io_iidx_sys_bit {
BT_IO_IIDX_SYS_TEST = 0x00,
BT_IO_IIDX_SYS_SERVICE = 0x01,
BT_IO_IIDX_SYS_COIN = 0x02
} bt_io_iidx_sys_bit_t;
typedef enum bt_io_iidx_panel_bit {
BT_IO_IIDX_PANEL_P1_START = 0x00,
BT_IO_IIDX_PANEL_P2_START = 0x01,
BT_IO_IIDX_PANEL_VEFX = 0x02,
BT_IO_IIDX_PANEL_EFFECT = 0x03
} bt_io_iidx_panel_bit_t;
typedef enum bt_io_iidx_key_bit {
BT_IO_IIDX_KEY_P1_1 = 0x00,
BT_IO_IIDX_KEY_P1_2 = 0x01,
BT_IO_IIDX_KEY_P1_3 = 0x02,
BT_IO_IIDX_KEY_P1_4 = 0x03,
BT_IO_IIDX_KEY_P1_5 = 0x04,
BT_IO_IIDX_KEY_P1_6 = 0x05,
BT_IO_IIDX_KEY_P1_7 = 0x06,
BT_IO_IIDX_KEY_P2_1 = 0x07,
BT_IO_IIDX_KEY_P2_2 = 0x08,
BT_IO_IIDX_KEY_P2_3 = 0x09,
BT_IO_IIDX_KEY_P2_4 = 0x0A,
BT_IO_IIDX_KEY_P2_5 = 0x0B,
BT_IO_IIDX_KEY_P2_6 = 0x0C,
BT_IO_IIDX_KEY_P2_7 = 0x0D
} bt_io_iidx_key_bit_t;
/* Bit mapping for the P1 and P2 deck lights */
typedef enum bt_io_iidx_deck_light {
BT_IO_IIDX_DECK_LIGHT_P1_1 = 0,
BT_IO_IIDX_DECK_LIGHT_P1_2 = 1,
BT_IO_IIDX_DECK_LIGHT_P1_3 = 2,
BT_IO_IIDX_DECK_LIGHT_P1_4 = 3,
BT_IO_IIDX_DECK_LIGHT_P1_5 = 4,
BT_IO_IIDX_DECK_LIGHT_P1_6 = 5,
BT_IO_IIDX_DECK_LIGHT_P1_7 = 6,
BT_IO_IIDX_DECK_LIGHT_P2_1 = 8,
BT_IO_IIDX_DECK_LIGHT_P2_2 = 9,
BT_IO_IIDX_DECK_LIGHT_P2_3 = 10,
BT_IO_IIDX_DECK_LIGHT_P2_4 = 11,
BT_IO_IIDX_DECK_LIGHT_P2_5 = 12,
BT_IO_IIDX_DECK_LIGHT_P2_6 = 13,
BT_IO_IIDX_DECK_LIGHT_P2_7 = 14,
} bt_io_iidx_deck_light_t;
/* Bit mapping for the front panel lights */
typedef enum bt_io_iidx_panel_light {
BT_IO_IIDX_PANEL_LIGHT_P1_START = 0,
BT_IO_IIDX_PANEL_LIGHT_P2_START = 1,
BT_IO_IIDX_PANEL_LIGHT_VEFX = 2,
BT_IO_IIDX_PANEL_LIGHT_EFFECT = 3,
} bt_io_iidx_panel_light_t;
/* Bit mapping for the top lamps from left to right when facing cabinet screen
*/
typedef enum bt_io_iidx_top_lamp {
BT_IO_IIDX_TOP_LAMP_LEFT_BLUE = 0,
BT_IO_IIDX_TOP_LAMP_LEFT_GREEN = 1,
BT_IO_IIDX_TOP_LAMP_LEFT_YELLOW = 2,
BT_IO_IIDX_TOP_LAMP_LEFT_RED = 3,
BT_IO_IIDX_TOP_LAMP_RIGHT_BLUE = 4,
BT_IO_IIDX_TOP_LAMP_RIGHT_GREEN = 5,
BT_IO_IIDX_TOP_LAMP_RIGHT_YELLOW = 6,
BT_IO_IIDX_TOP_LAMP_RIGHT_RED = 7,
} bt_io_iidx_top_lamp_t;
typedef bool (*bt_io_iidx_init_t)();
typedef void (*bt_io_iidx_fini_t)();
typedef void (*bt_io_iidx_ep1_deck_lights_set_t)(uint16_t deck_lights);
typedef void (*bt_io_iidx_ep1_panel_lights_set_t)(uint8_t panel_lights);
typedef void (*bt_io_iidx_ep1_top_lamps_set_t)(uint8_t top_lamps);
typedef void (*bt_io_iidx_ep1_top_neons_set_t)(bool top_neons);
typedef bool (*bt_io_iidx_ep1_send_t)();
typedef bool (*bt_io_iidx_ep2_recv_t)();
typedef uint8_t (*bt_io_iidx_ep2_turntable_get_t)(uint8_t player_no);
typedef uint8_t (*bt_io_iidx_ep2_slider_get_t)(uint8_t slider_no);
typedef uint8_t (*bt_io_iidx_ep2_sys_get_t)();
typedef uint8_t (*bt_io_iidx_ep2_panel_get_t)();
typedef uint16_t (*bt_io_iidx_ep2_keys_get_t)();
typedef bool (*bt_io_iidx_ep3_16seg_send_t)(const char *text);
typedef struct bt_io_iidx_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_iidx_init_t init;
bt_io_iidx_fini_t fini;
bt_io_iidx_ep1_deck_lights_set_t ep1_deck_lights_set;
bt_io_iidx_ep1_panel_lights_set_t ep1_panel_lights_set;
bt_io_iidx_ep1_top_lamps_set_t ep1_top_lamps_set;
bt_io_iidx_ep1_top_neons_set_t ep1_top_neons_set;
bt_io_iidx_ep1_send_t ep1_send;
bt_io_iidx_ep2_recv_t ep2_recv;
bt_io_iidx_ep2_turntable_get_t ep2_turntable_get;
bt_io_iidx_ep2_slider_get_t ep2_slider_get;
bt_io_iidx_ep2_sys_get_t ep2_sys_get;
bt_io_iidx_ep2_panel_get_t ep2_panel_get;
bt_io_iidx_ep2_keys_get_t ep2_keys_get;
bt_io_iidx_ep3_16seg_send_t ep3_16seg_send;
} v1;
} bt_io_iidx_api_t;
#endif

85
src/api/io/jb.h Normal file
View File

@ -0,0 +1,85 @@
#ifndef BT_API_IO_JB_H
#define BT_API_IO_JB_H
/* IO emulation provider for jubeat. */
#include <stdbool.h>
#include <stdint.h>
/* input bit mappings. Panels on the controller are
panel 1 top left corner down to panel 16 bottom right corner */
typedef enum bt_io_jb_panel_bit {
BT_IO_JB_PANEL_01 = 0x00,
BT_IO_JB_PANEL_02 = 0x01,
BT_IO_JB_PANEL_03 = 0x02,
BT_IO_JB_PANEL_04 = 0x03,
BT_IO_JB_PANEL_05 = 0x04,
BT_IO_JB_PANEL_06 = 0x05,
BT_IO_JB_PANEL_07 = 0x06,
BT_IO_JB_PANEL_08 = 0x07,
BT_IO_JB_PANEL_09 = 0x08,
BT_IO_JB_PANEL_10 = 0x09,
BT_IO_JB_PANEL_11 = 0x0A,
BT_IO_JB_PANEL_12 = 0x0B,
BT_IO_JB_PANEL_13 = 0x0C,
BT_IO_JB_PANEL_14 = 0x0D,
BT_IO_JB_PANEL_15 = 0x0E,
BT_IO_JB_PANEL_16 = 0x0F,
} bt_io_jb_panel_bit_t;
/* input "single button mode" mappings. Allows you to check each corner of each
button to determine any flaky inputs
*/
typedef enum bt_io_jb_panel_mode {
BT_IO_JB_PANEL_MODE_ALL = 0, // any of the four corners will trigger a panel
BT_IO_JB_PANEL_MODE_TOP_LEFT = 1,
BT_IO_JB_PANEL_MODE_TOP_RIGHT = 2,
BT_IO_JB_PANEL_MODE_BOTTOM_RIGHT = 3,
BT_IO_JB_PANEL_MODE_BOTTOM_LEFT = 4,
} bt_io_jb_panel_mode_t;
/* Bit mappings for "system" inputs */
typedef enum bt_io_jb_sys_bit {
BT_IO_JB_SYS_TEST = 0x00,
BT_IO_JB_SYS_SERVICE = 0x01,
BT_IO_JB_SYS_COIN = 0x02,
} bt_io_jb_sys_bit_t;
/* RGB led units to address */
typedef enum bt_io_jb_rgb_led {
BT_IO_JB_RGB_LED_FRONT = 0,
BT_IO_JB_RGB_LED_TOP = 1,
BT_IO_JB_RGB_LED_LEFT = 2,
BT_IO_JB_RGB_LED_RIGHT = 3,
BT_IO_JB_RGB_LED_TITLE = 4,
BT_IO_JB_RGB_LED_WOOFER = 5
} bt_io_jb_rgb_led_t;
typedef bool (*bt_io_jb_init_t)();
typedef void (*bt_io_jb_fini_t)();
typedef bool (*bt_io_jb_inputs_read_t)();
typedef uint8_t (*bt_io_jb_sys_inputs_get_t)();
typedef uint16_t (*bt_io_jb_panel_inputs_get_t)();
typedef void (*bt_io_jb_rgb_led_set_t)(bt_io_jb_rgb_led_t unit, uint8_t r, uint8_t g, uint8_t b);
typedef bool (*bt_io_jb_lights_write_t)();
typedef bool (*bt_io_jb_panel_mode_set_t)(bt_io_jb_panel_mode_t mode);
typedef bool (*bt_io_jb_coin_blocker_set_t)(bool blocked);
typedef struct bt_io_jb_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_jb_init_t init;
bt_io_jb_fini_t fini;
bt_io_jb_inputs_read_t inputs_read;
bt_io_jb_sys_inputs_get_t sys_inputs_get;
bt_io_jb_panel_inputs_get_t panel_inputs_get;
bt_io_jb_rgb_led_set_t rgb_led_set;
bt_io_jb_lights_write_t lights_write;
bt_io_jb_panel_mode_set_t panel_mode_set;
bt_io_jb_coin_blocker_set_t coin_blocker_set;
} v1;
} bt_io_jb_api_t;
#endif

80
src/api/io/popn.h Normal file
View File

@ -0,0 +1,80 @@
#ifndef BT_API_IO_POPN_H
#define BT_API_IO_POPN_H
/* IO emulation provider for pop'n music. */
#include <stdbool.h>
#include <stdint.h>
/* Bit mapping for the "buttons" word */
typedef enum bt_io_popn_sys_bit {
BT_IO_POPN_SYS_SERVICE = 0x06,
BT_IO_POPN_SYS_TEST = 0x07,
} bt_io_popn_sys_bit_t;
typedef enum bt_io_popn_button_bit {
BT_IO_POPN_BUTTON_1 = 0x08,
BT_IO_POPN_BUTTON_2 = 0x09,
BT_IO_POPN_BUTTON_3 = 0x0a,
BT_IO_POPN_BUTTON_4 = 0x0b,
BT_IO_POPN_BUTTON_5 = 0x0c,
BT_IO_POPN_BUTTON_6 = 0x0d,
BT_IO_POPN_BUTTON_7 = 0x0e,
BT_IO_POPN_BUTTON_8 = 0x0f,
BT_IO_POPN_BUTTON_9 = 0x10,
} bt_io_popn_button_bit_t;
typedef enum bt_io_popn_light_top_lamp_bit {
BT_IO_POPN_LIGHT_HI_LAMP1 = 0x00,
BT_IO_POPN_LIGHT_HI_LAMP2 = 0x01,
BT_IO_POPN_LIGHT_HI_LAMP3 = 0x02,
BT_IO_POPN_LIGHT_HI_LAMP4 = 0x03,
BT_IO_POPN_LIGHT_HI_LAMP5 = 0x04,
} bt_io_popn_light_top_lamp_bit_t;
typedef enum bt_io_popn_light_side_lamp_bit {
BT_IO_POPN_LIGHT_LEFT_LAMP1 = 0x00,
BT_IO_POPN_LIGHT_LEFT_LAMP2 = 0x01,
BT_IO_POPN_LIGHT_RIGHT_LAMP1 = 0x02,
BT_IO_POPN_LIGHT_RIGHT_LAMP2 = 0x03,
} bt_io_popn_light_side_lamp_bit_t;
typedef enum bt_io_popn_light_switch_lamp_bit {
BT_IO_POPN_LIGHT_SW_LAMP1 = 0x00, // Is actually 4 bits wide
BT_IO_POPN_LIGHT_SW_LAMP2 = 0x04,
BT_IO_POPN_LIGHT_SW_LAMP3 = 0x05,
BT_IO_POPN_LIGHT_SW_LAMP4 = 0x06,
BT_IO_POPN_LIGHT_SW_LAMP5 = 0x07,
BT_IO_POPN_LIGHT_SW_LAMP6 = 0x08,
BT_IO_POPN_LIGHT_SW_LAMP7 = 0x09,
BT_IO_POPN_LIGHT_SW_LAMP8 = 0x0a,
BT_IO_POPN_LIGHT_SW_LAMP9 = 0x0b,
} bt_io_popn_light_switch_lamp_bit_t;
typedef bool (*bt_io_popn_init_t)();
typedef void (*bt_io_popn_fini_t)();
typedef uint32_t (*bt_io_popn_buttons_get_t)();
typedef void (*bt_io_popn_top_lights_set_t)(uint32_t lights);
typedef void (*bt_io_popn_side_lights_set_t)(uint32_t lights);
typedef void (*bt_io_popn_button_lights_set_t)(uint32_t lights);
typedef void (*bt_io_popn_coin_blocker_light_set_t)(bool enabled);
typedef void (*bt_io_popn_coin_counter_light_set_t)(bool enabled);
typedef struct bt_io_popn_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_popn_init_t init;
bt_io_popn_fini_t fini;
bt_io_popn_buttons_get_t buttons_get;
bt_io_popn_top_lights_set_t top_lights_set;
bt_io_popn_side_lights_set_t side_lights_set;
bt_io_popn_button_lights_set_t button_lights_set;
bt_io_popn_coin_blocker_light_set_t coin_blocker_light_set;
bt_io_popn_coin_counter_light_set_t coin_counter_light_set;
} v1;
} bt_io_popn_api_t;
#endif

70
src/api/io/sdvx.h Normal file
View File

@ -0,0 +1,70 @@
#ifndef BT_API_IO_SDVX_H
#define BT_API_IO_SDVX_H
/* IO emulation provider for SOUND VOLTEX */
#include <stdbool.h>
#include <stdint.h>
typedef enum bt_io_sdvx_in_gpio_sys_bit {
BT_IO_SDVX_IN_GPIO_SYS_COIN = 2,
BT_IO_SDVX_IN_GPIO_SYS_SERVICE = 4,
BT_IO_SDVX_IN_GPIO_SYS_TEST = 5,
} bt_io_sdvx_in_gpio_sys_bit_t;
typedef enum bt_io_sdvx_in_gpio_0_bit {
BT_IO_SDVX_IN_GPIO_0_C = 0,
BT_IO_SDVX_IN_GPIO_0_B = 1,
BT_IO_SDVX_IN_GPIO_0_A = 2,
BT_IO_SDVX_IN_GPIO_0_START = 3,
BT_IO_SDVX_IN_GPIO_0_RECORDER = 4,
BT_IO_SDVX_IN_GPIO_0_HEADPHONE = 5,
} bt_io_sdvx_in_gpio_0_bit_t;
typedef enum bt_io_sdvx_in_gpio_1_bit {
BT_IO_SDVX_IN_GPIO_1_FX_R = 3,
BT_IO_SDVX_IN_GPIO_1_FX_L = 4,
BT_IO_SDVX_IN_GPIO_1_D = 5,
} bt_io_sdvx_in_gpio_1_bit_t;
typedef enum bt_io_sdvx_out_gpio_bit {
BT_IO_SDVX_OUT_GPIO_D = 0,
BT_IO_SDVX_OUT_GPIO_FX_L = 1,
BT_IO_SDVX_OUT_GPIO_FX_R = 2,
BT_IO_SDVX_OUT_GPIO_GENERATOR_B = 3,
BT_IO_SDVX_OUT_GPIO_START = 12,
BT_IO_SDVX_OUT_GPIO_A = 13,
BT_IO_SDVX_OUT_GPIO_B = 14,
BT_IO_SDVX_OUT_GPIO_C = 15,
} bt_io_sdvx_out_gpio_bit_t;
typedef bool (*bt_io_sdvx_init_t)();
typedef void (*bt_io_sdvx_fini_t)();
typedef void (*bt_io_sdvx_gpio_lights_set_t)(uint32_t gpio_lights);
typedef void (*bt_io_sdvx_pwm_light_set_t)(uint8_t light_no, uint8_t intensity);
typedef bool (*bt_io_sdvx_output_write_t)();
typedef bool (*bt_io_sdvx_input_read_t)();
typedef uint8_t (*bt_io_sdvx_input_gpio_sys_get_t)();
typedef uint16_t (*bt_io_sdvx_input_gpio_get_t)(uint8_t gpio_bank);
typedef uint16_t (*bt_io_sdvx_spinner_pos_get_t)(uint8_t spinner_no);
typedef bool (*bt_io_sdvx_amp_volume_set_t)(uint8_t primary, uint8_t headphone, uint8_t subwoofer);
typedef struct bt_io_sdvx_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_sdvx_init_t init;
bt_io_sdvx_fini_t fini;
bt_io_sdvx_gpio_lights_set_t gpio_lights_set;
bt_io_sdvx_pwm_light_set_t pwm_light_set;
bt_io_sdvx_output_write_t output_write;
bt_io_sdvx_input_read_t input_read;
bt_io_sdvx_input_gpio_sys_get_t input_gpio_sys_get;
bt_io_sdvx_input_gpio_get_t input_gpio_get;
bt_io_sdvx_spinner_pos_get_t spinner_pos_get;
bt_io_sdvx_amp_volume_set_t amp_volume_set;
} v1;
} bt_io_sdvx_api_t;
#endif

28
src/api/io/vefx.h Normal file
View File

@ -0,0 +1,28 @@
#ifndef BT_API_IO_VEFX_H
#define BT_API_IO_VEFX_H
/* IO emulation provider for beatmania IIDX Effector Panel. */
#include <stdbool.h>
#include <stdint.h>
typedef bool (*bt_io_vefx_init_t)();
typedef void (*bt_io_vefx_fini_t)();
typedef bool (*bt_io_vefx_recv_t)(uint64_t *ppad);
typedef uint8_t (*bt_io_vefx_slider_get_t)(uint8_t slider_no);
typedef bool (*bt_io_vefx_16seg_send_t)(const char *text);
typedef struct bt_io_vefx_api {
uint16_t version;
struct {
// Required to be implemented
bt_io_vefx_init_t init;
bt_io_vefx_fini_t fini;
bt_io_vefx_recv_t recv;
bt_io_vefx_slider_get_t slider_get;
bt_io_vefx_16seg_send_t _16seg_send;
} v1;
} bt_io_vefx_api_t;
#endif

View File

@ -1,31 +0,0 @@
#ifndef BEMANITOOLS_API_THREAD_H
#define BEMANITOOLS_API_THREAD_H
#include <stdint.h>
#ifdef __GNUC__
/* Bemanitools is compiled with GCC (MinGW, specifically) as of version 5 */
#define LOG_CHECK_FMT __attribute__((format(printf, 2, 3)))
#else
/* Compile it out for MSVC plebs */
#define LOG_CHECK_FMT
#endif
/* An AVS-style logger function. Comes in four flavors: misc, info, warning,
and fatal, with increasing severity. Fatal loggers do not return, they
abort the running process after writing their message to the log.
"module" is an arbitrary short string identifying the source of the log
message. The name of the calling DLL is a good default choice for this
string, although you might want to identify a module within your DLL here
instead.
"fmt" is a printf-style format string. Depending on the context in which
your DLL is running you might end up calling a logger function exported
from libavs, which has its own printf implementation (including a number of
proprietary extensions), so don't use any overly exotic formats. */
typedef void (*btapi_log_formatter_t)(const char *module, const char *fmt, ...)
LOG_CHECK_FMT;
#endif

View File

@ -1,20 +0,0 @@
#ifndef BEMANITOOLS_API_THREAD_H
#define BEMANITOOLS_API_THREAD_H
#include <stdint.h>
/* An API for spawning threads. This API is defined by libavs, although
Bemanitools itself may supply compatible implementations of these functions
to your DLL, depending on the context in which it runs.
NOTE: You may only use the logging functions from a thread where Bemanitools
calls you, or a thread that you create using this API. Failure to observe
this restriction will cause the process to crash. This is a limitation of
libavs itself, not Bemanitools. */
typedef int (*btapi_thread_create_t)(
int (*proc)(void *), void *ctx, uint32_t stack_sz, unsigned int priority);
typedef void (*btapi_thread_join_t)(int thread_id, int *result);
typedef void (*btapi_thread_destroy_t)(int thread_id);
#endif

View File

@ -142,7 +142,7 @@ typedef void (*avs_log_writer_t)(const char *chars, uint32_t nchars, void *ctx);
typedef void (*avs_log_writer_t)(void *ctx, const char *chars, uint32_t nchars);
#endif
typedef int (*avs_reader_t)(uint32_t context, void *bytes, size_t nbytes);
typedef size_t (*avs_reader_t)(uint32_t context, void *bytes, size_t nbytes);
#if AVS_VERSION >= 1600
/* "avs" and "std" heaps have been unified */
@ -186,7 +186,7 @@ void avs_shutdown(void);
typedef uint32_t avs_desc;
typedef int avs_error;
#define AVS_IS_ERROR(x) x < 0
#define AVS_IS_ERROR(x) ((avs_error) x) < 0
void log_body_fatal(const char *module, const char *fmt, ...);
void log_body_info(const char *module, const char *fmt, ...);
@ -223,12 +223,12 @@ void property_destroy(struct property *prop);
avs_error property_get_error(struct property *prop);
void property_clear_error(struct property *prop);
int property_psmap_import(
avs_error property_psmap_import(
struct property *prop,
struct property_node *root,
void *dest,
const struct property_psmap *psmap);
int property_psmap_export(
avs_error property_psmap_export(
struct property *prop,
struct property_node *root,
const void *src,
@ -254,7 +254,7 @@ int property_node_refer(
enum property_type type,
void *bytes,
uint32_t nbytes);
void property_node_remove(struct property_node *node);
avs_error property_node_remove(struct property_node *node);
enum property_type property_node_type(struct property_node *node);
struct property_node *property_node_traversal(
struct property_node *node, enum property_node_traversal direction);
@ -315,7 +315,7 @@ enum avs_seek_origin {
avs_desc avs_fs_open(const char *path, uint16_t mode, int flags);
int avs_fs_close(avs_desc desc);
size_t avs_fs_read(avs_desc desc, char *buf, uint32_t sz);
size_t avs_fs_read(avs_desc desc, void *buf, size_t sz);
int avs_fs_lseek(avs_desc desc, long pos, int whence);
int avs_fs_lstat(const char *path, struct avs_stat *st);
int avs_fs_copy(const char *src, const char *dest);

View File

@ -26,8 +26,8 @@ EXPORTS
property_desc_to_buffer @246 NONAME
property_destroy @247 NONAME
property_insert_read @255 NONAME
property_clear_error @573 NONAME
property_get_error @573 NONAME
property_clear_error @244 NONAME
property_get_error @253 NONAME
property_node_create @266 NONAME
property_node_datasize @267 NONAME
property_node_name @274 NONAME
@ -35,8 +35,8 @@ EXPORTS
property_node_refer @278 NONAME
property_node_remove @279 NONAME
property_node_type @282 NONAME
property_node_clone @280 NONAME
property_node_traversal @282 NONAME
property_node_clone @265 NONAME
property_node_traversal @281 NONAME
property_node_refdata @277 NONAME
property_query_size @290 NONAME
property_psmap_import @288 NONAME

View File

@ -1,46 +1,46 @@
LIBRARY libavs-win32
EXPORTS
avs_boot @237 NONAME
avs_fs_close @276 NONAME
avs_fs_copy @283 NONAME
avs_fs_lseek @16 NONAME
avs_fs_lstat @97 NONAME
avs_fs_open @178 NONAME
avs_fs_read @306 NONAME
avs_fs_opendir @216 NONAME
avs_fs_readdir @130 NONAME
avs_fs_closedir @131 NONAME
avs_net_ctrl @15 NONAME
avs_shutdown @333 NONAME
avs_thread_create @183 NONAME
avs_thread_destroy @76 NONAME
avs_thread_exit @147 NONAME
avs_thread_join @92 NONAME
log_body_misc @44 NONAME
log_body_info @339 NONAME
log_body_warning @219 NONAME
log_body_fatal @128 NONAME
property_create @256 NONAME
property_desc_to_buffer @201 NONAME
property_destroy @264 NONAME
property_insert_read @23 NONAME
property_clear_error @573 NONAME
property_get_error @573 NONAME
property_node_create @316 NONAME
property_node_datasize @249 NONAME
property_node_name @255 NONAME
property_node_read @2 NONAME
property_node_refer @268 NONAME
property_node_remove @129 NONAME
property_node_type @329 NONAME
property_node_clone @130 NONAME
property_node_traversal @93 NONAME
avs_boot @237 NONAME == XC058ba50000f4
avs_fs_close @276 NONAME == XC058ba500011b
avs_fs_copy @283 NONAME == XC058ba5000122
avs_fs_lseek @16 NONAME == XC058ba500000f
avs_fs_lstat @97 NONAME == XC058ba5000063
avs_fs_open @178 NONAME == XC058ba50000b6
avs_fs_read @306 NONAME == XC058ba5000139
avs_fs_opendir @216 NONAME == XC058ba50000dd
avs_fs_readdir @130 NONAME == XC058ba5000086
avs_fs_closedir @131 NONAME == XC058ba5000087
avs_net_ctrl @15 NONAME == XC058ba500000e
avs_shutdown @333 NONAME == XC058ba5000154
avs_thread_create @183 NONAME == XC058ba50000bb
avs_thread_destroy @76 NONAME == XC058ba500004e
avs_thread_exit @147 NONAME == XC058ba5000097
avs_thread_join @92 NONAME == XC058ba500005e
log_body_misc @44 NONAME == XC058ba500002d
log_body_info @339 NONAME == XC058ba500015a
log_body_warning @219 NONAME == XC058ba50000e1
log_body_fatal @128 NONAME == XC058ba5000084
property_create @256 NONAME == XC058ba5000107
property_desc_to_buffer @201 NONAME == XC058ba50000cd
property_destroy @264 NONAME == XC058ba500010f
property_insert_read @23 NONAME == XC058ba5000016
property_clear_error @163 NONAME == XC058ba50000a7
property_get_error @295 NONAME == XC058ba500012e
property_node_create @316 NONAME == XC058ba5000143
property_node_datasize @249 NONAME == XC058ba5000100
property_node_name @255 NONAME == XC058ba5000106
property_node_read @2 NONAME == XC058ba5000001
property_node_refer @268 NONAME == XC058ba5000113
property_node_remove @129 NONAME == XC058ba5000085
property_node_type @329 NONAME == XC058ba5000150
property_node_clone @252 NONAME == XC058ba5000103
property_node_traversal @93 NONAME == XC058ba500005f
property_node_refdata @330 NONAME == XC058ba5000151
property_query_size @250 NONAME == XC058ba5000101
property_psmap_import @102 NONAME
property_psmap_export @110 NONAME
property_read_query_memsize @100 NONAME
property_search @244 NONAME
std_getenv @226 NONAME
std_setenv @114 NONAME
property_psmap_import @102 NONAME == XC058ba5000068
property_psmap_export @110 NONAME == XC058ba5000071
property_read_query_memsize @100 NONAME == XC058ba5000066
property_search @244 NONAME == XC058ba50000fb
std_getenv @226 NONAME == XC058ba50000e8
std_setenv @114 NONAME == XC058ba5000075

View File

@ -25,8 +25,8 @@ EXPORTS
property_desc_to_buffer @201 NONAME == XC058ba50000cd
property_destroy @264 NONAME == XC058ba500010f
property_insert_read @23 NONAME == XC058ba5000016
property_clear_error @573 NONAME
property_get_error @573 NONAME
property_clear_error @163 NONAME == XC058ba50000a7
property_get_error @295 NONAME == XC058ba500012e
property_node_create @316 NONAME == XC058ba5000143
property_node_datasize @249 NONAME == XC058ba5000100
property_node_name @255 NONAME == XC058ba5000106

View File

@ -6,8 +6,8 @@ EXPORTS
avs_fs_lseek @59 NONAME
avs_fs_lseek64 @60 NONAME
avs_fs_lstat @79 NONAME
avs_fs_open @58 NONAME
avs_fs_read @61 NONAME
avs_fs_open @58 NONAME == XCd229cc000090
avs_fs_read @61 NONAME == XCd229cc00010d
avs_fs_copy @81 NONAME
avs_fs_opendir @72 NONAME == XCd229cc0000f0
avs_fs_readdir @73 NONAME == XCd229cc0000bb
@ -26,8 +26,8 @@ EXPORTS
property_desc_to_buffer @129 NONAME
property_destroy @128 NONAME
property_insert_read @131 NONAME
property_clear_error @573 NONAME
property_get_error @573 NONAME
property_clear_error @140 NONAME == XCd229cc00014b
property_get_error @141 NONAME == XCd229cc0000b5
property_node_create @145 NONAME
property_node_name @150 NONAME
property_node_read @154 NONAME == XCd229cc0000f3
@ -41,7 +41,7 @@ EXPORTS
property_query_size @142 NONAME == XCd229cc000032
property_psmap_export @162 NONAME
property_psmap_import @161 NONAME
property_read_query_memsize @159 NONAME
property_read_query_memsize @159 NONAME == XCd229cc0000ff
property_search @144 NONAME
std_getenv @207 NONAME
std_setenv @208 NONAME

View File

@ -5,8 +5,8 @@ EXPORTS
avs_fs_copy @81 NONAME
avs_fs_lseek @59 NONAME
avs_fs_lstat @79 NONAME
avs_fs_open @58 NONAME
avs_fs_read @61 NONAME
avs_fs_open @58 NONAME == XCnbrep7000039
avs_fs_read @61 NONAME == XCnbrep700003c
avs_fs_opendir @72 NONAME == XCnbrep7000047
avs_fs_readdir @73 NONAME == XCnbrep7000048
avs_fs_closedir @74 NONAME == XCnbrep7000049
@ -19,8 +19,8 @@ EXPORTS
property_destroy @125 NONAME
property_desc_to_buffer @126 NONAME
property_insert_read @128 NONAME
property_clear_error @573 NONAME
property_get_error @573 NONAME
property_clear_error @137 NONAME == XCnbrep7000088
property_get_error @138 NONAME == XCnbrep7000089
property_search @141 NONAME
property_node_create @142 NONAME
property_node_name @147 NONAME == XCnbrep7000092

View File

@ -0,0 +1,11 @@
dlls += acio-mgr
libs_acio-mgr := \
aciodrv \
iface-core \
core \
util \
src_acio-mgr := \
dllmain.c \
mgr.c \

View File

@ -0,0 +1,20 @@
LIBRARY acio-mgr
EXPORTS
; Bemanitools 6 API
bt_module_core_log_api_set
bt_module_acio_mgr_api_get
; Not exporting as these are called in DllMain
; bt_acio_mgr_init
; bt_acio_mgr_fini
DllMain@12 @1 NONAME
; Direct API
bt_acio_mgr_port_init
bt_acio_mgr_port_fini
bt_acio_mgr_node_count_get
bt_acio_mgr_node_product_ident_get
bt_acio_mgr_port_packet_submit
bt_acio_mgr_port_checkout
bt_acio_mgr_port_checkin

View File

@ -1,15 +1,15 @@
#include <windows.h>
#include "manager-init.h"
#include "acio-mgr/internal.h"
BOOL WINAPI DllMain(HMODULE self, DWORD reason, void *ctx)
{
if (reason == DLL_PROCESS_ATTACH) {
_aciomgr_init();
bt_acio_mgr_init();
}
if (reason == DLL_PROCESS_DETACH) {
_aciomgr_fini();
bt_acio_mgr_fini();
}
return TRUE;

View File

@ -0,0 +1,7 @@
#ifndef ACIO_MGR_INTERNAL_T
#define ACIO_MGR_INTERNAL_T
void bt_acio_mgr_init();
void bt_acio_mgr_fini();
#endif

View File

@ -4,40 +4,43 @@
#include <stdatomic.h>
#include "aciomgr/manager-init.h"
#include "aciomgr/manager.h"
#include "acio/acio.h"
#include "aciodrv/device.h"
#include "core/log.h"
#include "acio-mgr/internal.h"
#include "api/core/log.h"
#include "iface-core/log.h"
#include "sdk/module/acio/mgr.h"
#include "sdk/module/core/log.h"
#include "util/array.h"
#define MAX_PORT_PATH_LENGTH 256
struct aciomgr_port_dispatcher {
typedef struct bt_acio_mgr_port_dispatcher {
CRITICAL_SECTION cs;
atomic_size_t references;
struct aciodrv_device_ctx *device;
char path[MAX_PORT_PATH_LENGTH];
int baud;
bool has_failure;
};
} bt_acio_mgr_port_dispatcher_t;
static void _aciomgr_setup_port_dispatcher(
struct aciomgr_port_dispatcher *dispatcher, const char *path, int baud);
static void _bt_acio_mgr_setup_port_dispatcher(
bt_acio_mgr_port_dispatcher_t *dispatcher, const char *path, int baud);
static void
_aciomgr_destroy_port_dispatcher(struct aciomgr_port_dispatcher *dispatcher);
_bt_acio_mgr_destroy_port_dispatcher(bt_acio_mgr_port_dispatcher_t *dispatcher);
// DLL-globals
static atomic_bool running;
static CRITICAL_SECTION mgr_cs;
static struct array active_ports;
static void _aciomgr_setup_port_dispatcher(
struct aciomgr_port_dispatcher *dispatcher, const char *path, int baud)
static void _bt_acio_mgr_setup_port_dispatcher(
bt_acio_mgr_port_dispatcher_t *dispatcher, const char *path, int baud)
{
InitializeCriticalSection(&dispatcher->cs);
@ -56,17 +59,17 @@ static void _aciomgr_setup_port_dispatcher(
}
static void
_aciomgr_destroy_port_dispatcher(struct aciomgr_port_dispatcher *dispatcher)
_bt_acio_mgr_destroy_port_dispatcher(bt_acio_mgr_port_dispatcher_t *dispatcher)
{
aciodrv_device_close(dispatcher->device);
DeleteCriticalSection(&dispatcher->cs);
}
void _aciomgr_init()
void bt_acio_mgr_init()
{
if (running) {
log_warning("_aciomgr_init called when already running");
_aciomgr_fini();
bt_acio_mgr_fini();
}
InitializeCriticalSection(&mgr_cs);
array_init(&active_ports);
@ -74,7 +77,7 @@ void _aciomgr_init()
running = true;
}
void _aciomgr_fini()
void bt_acio_mgr_fini()
{
if (!running) {
log_warning("_aciomgr_fini called when not running");
@ -85,16 +88,8 @@ void _aciomgr_fini()
array_fini(&active_ports);
}
void aciomgr_set_loggers(
log_formatter_t misc,
log_formatter_t info,
log_formatter_t warning,
log_formatter_t fatal)
{
core_log_impl_set(misc, warning, info, fatal);
}
struct aciomgr_port_dispatcher *aciomgr_port_init(const char *path, int baud)
bt_acio_mgr_port_dispatcher_t *
bt_acio_mgr_port_init(const char *path, uint32_t baud)
{
if (!running) {
log_warning("aciomgr_port_init: called when not running");
@ -106,12 +101,12 @@ struct aciomgr_port_dispatcher *aciomgr_port_init(const char *path, int baud)
return NULL;
}
struct aciomgr_port_dispatcher *entry;
bt_acio_mgr_port_dispatcher_t *entry;
EnterCriticalSection(&mgr_cs);
for (size_t i = 0; i < active_ports.nitems; i++) {
entry = array_item(struct aciomgr_port_dispatcher, &active_ports, i);
entry = array_item(bt_acio_mgr_port_dispatcher_t, &active_ports, i);
if (strcmp(entry->path, path) == 0) {
// found
@ -126,8 +121,8 @@ struct aciomgr_port_dispatcher *aciomgr_port_init(const char *path, int baud)
}
}
entry = array_append(struct aciomgr_port_dispatcher, &active_ports);
_aciomgr_setup_port_dispatcher(entry, path, baud);
entry = array_append(bt_acio_mgr_port_dispatcher_t, &active_ports);
_bt_acio_mgr_setup_port_dispatcher(entry, path, baud);
done:
if (!entry->has_failure) {
@ -143,7 +138,7 @@ done:
return entry;
}
void aciomgr_port_fini(struct aciomgr_port_dispatcher *dispatcher)
void bt_acio_mgr_port_fini(bt_acio_mgr_port_dispatcher_t *dispatcher)
{
if (!running) {
log_warning("aciomgr_port_fini: called when not running");
@ -155,30 +150,31 @@ void aciomgr_port_fini(struct aciomgr_port_dispatcher *dispatcher)
LeaveCriticalSection(&mgr_cs);
if (dispatcher->references == 0) {
_aciomgr_destroy_port_dispatcher(dispatcher);
_bt_acio_mgr_destroy_port_dispatcher(dispatcher);
}
}
// this function don't require the lock
uint8_t aciomgr_get_node_count(struct aciomgr_port_dispatcher *dispatcher)
uint8_t
bt_acio_mgr_node_count_get(const bt_acio_mgr_port_dispatcher_t *dispatcher)
{
return aciodrv_device_get_node_count(dispatcher->device);
}
// this function don't require the lock
bool aciomgr_get_node_product_ident(
struct aciomgr_port_dispatcher *dispatcher,
bool bt_acio_mgr_node_product_ident_get(
const bt_acio_mgr_port_dispatcher_t *dispatcher,
uint8_t node_id,
char product[ACIOMGR_NODE_PRODUCT_CODE_LEN])
char product[BT_ACIO_MGR_NODE_PRODUCT_CODE_LEN])
{
return aciodrv_device_get_node_product_ident(
dispatcher->device, node_id, product);
}
bool aciomgr_port_submit_packet(
struct aciomgr_port_dispatcher *dispatcher,
struct ac_io_message *msg,
int max_resp_size)
bool bt_acio_mgr_port_packet_submit(
bt_acio_mgr_port_dispatcher_t *dispatcher,
bt_acio_message_t *msg,
uint32_t max_resp_size)
{
// CS's although lightweight, may still be a burden, short circuit
if (dispatcher->references > 1) {
@ -192,8 +188,8 @@ bool aciomgr_port_submit_packet(
return aciodrv_send_and_recv(dispatcher->device, msg, max_resp_size);
}
struct aciodrv_device_ctx *
aciomgr_port_checkout(struct aciomgr_port_dispatcher *dispatcher)
bt_acio_drv_device_ctx_t *
bt_acio_mgr_port_checkout(bt_acio_mgr_port_dispatcher_t *dispatcher)
{
if (dispatcher->references > 1) {
EnterCriticalSection(&dispatcher->cs);
@ -202,9 +198,27 @@ aciomgr_port_checkout(struct aciomgr_port_dispatcher *dispatcher)
return dispatcher->device;
}
void aciomgr_port_checkin(struct aciomgr_port_dispatcher *dispatcher)
void bt_acio_mgr_port_checkin(bt_acio_mgr_port_dispatcher_t *dispatcher)
{
if (dispatcher->references > 1) {
LeaveCriticalSection(&dispatcher->cs);
}
}
void bt_module_core_log_api_set(const bt_core_log_api_t *api)
{
bt_core_log_api_set(api);
}
void bt_module_acio_mgr_api_get(bt_acio_mgr_api_t *api)
{
api->version = 1;
api->v1.port_init = bt_acio_mgr_port_init;
api->v1.port_fini = bt_acio_mgr_port_fini;
api->v1.node_count_get = bt_acio_mgr_node_count_get;
api->v1.node_product_ident_get = bt_acio_mgr_node_product_ident_get;
api->v1.port_packet_submit = bt_acio_mgr_port_packet_submit;
api->v1.port_checkout = bt_acio_mgr_port_checkout;
api->v1.port_checkin = bt_acio_mgr_port_checkin;
}

View File

@ -5,9 +5,8 @@
#include "aciodrv/device.h"
#include "aciodrv/panb.h"
#include "core/thread.h"
#include "core/log.h"
#include "iface-core/log.h"
#include "iface-core/thread.h"
static int auto_poll_proc(void *auto_poll_param);
static int auto_poll_threadid;
@ -41,6 +40,8 @@ static int auto_poll_proc(void *param)
bool aciodrv_proc_panb_init(struct aciodrv_device_ctx *device)
{
bt_core_thread_result_t result;
log_assert(device);
if (!aciodrv_panb_start_auto_input(device, 0, AC_IO_PANB_NUM_NODES)) {
@ -50,8 +51,10 @@ bool aciodrv_proc_panb_init(struct aciodrv_device_ctx *device)
auto_poll_stop = false;
InitializeCriticalSection(&keypair_lock);
InitializeCriticalSection(&auto_poll_stop_lock);
auto_poll_threadid =
core_thread_create(auto_poll_proc, (void *) device, 0x4000, 0);
result = bt_core_thread_create(
auto_poll_proc, (void *) device, 0x4000, 0, &auto_poll_threadid);
bt_core_thread_fatal_on_error(result);
return true;
}
@ -77,12 +80,17 @@ bool aciodrv_proc_panb_get_state(uint8_t *button_state)
void aciodrv_proc_panb_fini(struct aciodrv_device_ctx *device)
{
bt_core_thread_result_t result;
EnterCriticalSection(&auto_poll_stop_lock);
auto_poll_stop = true;
LeaveCriticalSection(&auto_poll_stop_lock);
core_thread_join(auto_poll_threadid, NULL);
core_thread_destroy(auto_poll_threadid);
result = bt_core_thread_join(auto_poll_threadid, NULL);
bt_core_thread_fatal_on_error(result);
result = bt_core_thread_destroy(auto_poll_threadid);
bt_core_thread_fatal_on_error(result);
DeleteCriticalSection(&keypair_lock);
DeleteCriticalSection(&auto_poll_stop_lock);

View File

@ -7,7 +7,7 @@
#include "aciodrv/port.h"
#include "core/log.h"
#include "iface-core/log.h"
#include "util/hex.h"
#include "util/mem.h"

View File

@ -7,7 +7,7 @@
#include "aciodrv/device.h"
#include "core/log.h"
#include "iface-core/log.h"
bool aciodrv_h44b_init(struct aciodrv_device_ctx *device, uint8_t node_id)
{

View File

@ -5,7 +5,7 @@
#include "aciodrv/device.h"
#include "aciodrv/icca.h"
#include "core/log.h"
#include "iface-core/log.h"
static bool aciodrv_icca_queue_loop_start(
struct aciodrv_device_ctx *device, uint8_t node_id)

View File

@ -5,7 +5,7 @@
#include "aciodrv/device.h"
#include "core/log.h"
#include "iface-core/log.h"
static bool
aciodrv_kfca_watchdog_start(struct aciodrv_device_ctx *device, uint8_t node_id)

View File

@ -5,7 +5,7 @@
#include "aciodrv/device.h"
#include "aciodrv/panb.h"
#include "core/log.h"
#include "iface-core/log.h"
bool aciodrv_panb_start_auto_input(
struct aciodrv_device_ctx *device, uint8_t node_id, uint8_t node_count)

View File

@ -6,7 +6,7 @@
#include <windows.h>
#include "core/log.h"
#include "iface-core/log.h"
HANDLE aciodrv_port_open(const char *port_path, int baud)
{

Some files were not shown because too many files have changed in this diff Show More