diff --git a/doc/README.md b/doc/README.md index 7ce14c9..04e4de5 100644 --- a/doc/README.md +++ b/doc/README.md @@ -18,7 +18,8 @@ Table of contents: * [popnhook](popnhook/README.md): Documentation relevant to `popnhook` implementations * [sdvxhook](sdvxhook/README.md): Documentation relevant to `sdvxhook` implementations * Development - * [API](api.md): Available APIs for BT5 and instructions how to use them + * [API](api.md): Available APIs and IO (hardware) implementations for BT5 and instructions how + to use them * [Architecture](architecture.md): Outline of BT5's architecture, how things are designed and why * [Development](development.md): Development environment, building, releasing, etc. * [Developer documentation](dev/README.md): Various lose documentation/notes by developers diff --git a/doc/api.md b/doc/api.md index 3c85111..605735a 100644 --- a/doc/api.md +++ b/doc/api.md @@ -25,6 +25,8 @@ The following implementations are already shipped with BT5. * [ddrio-p3io.dll](ddrhook/ddrio-p3io.md): DDR P3IO (Dragon PCB) + EXTIO hardware * ddrio-mm.dll: Minimaid hardware * [ddrio-smx.dll](ddrhook/ddrio-smx.md): StepManiaX platforms + * [ddrio-async](ddrhook/ddrio-async.md): Wrapper/shim library to drive another ddrio in + a dedicated IO thread * Beatmania IIDX * iidxio.dll (default): Keyboard, joystick and mouse input * [iidxio-bio2.dll](iidxhook/iidxio-bio2.md): BIO2 driver diff --git a/doc/ddrhook/README.md b/doc/ddrhook/README.md index cb4b763..3b94179 100644 --- a/doc/ddrhook/README.md +++ b/doc/ddrhook/README.md @@ -46,7 +46,10 @@ IO hardware you want to use: * `ddrio`: Default implementation supporting keyboard, mouse and USB game controllers * ddrio-mm: Support Minimaid custom interface -* [ddrio-smx](ddrhook/ddrio-smx.md): Support for StepManiaX dance platforms +* [ddrio-smx](ddrio-smx.md): Support for StepManiaX dance platforms +* [ddrio-p3io](ddrio-p3io.md): P3IO + EXTIO driver implementation +* [ddrio-async](ddrio-async.md): Wrapper/shim library to drive another ddrio in + a dedicated IO thread ## Unicorntail diff --git a/doc/ddrhook/ddrio-async.md b/doc/ddrhook/ddrio-async.md new file mode 100644 index 0000000..d0ac931 --- /dev/null +++ b/doc/ddrhook/ddrio-async.md @@ -0,0 +1,36 @@ +# Asynchronous proxy wrapper for other ddrio implementations + +This implementation of the Bemanitools API is not implementing support for any +specific IO hardware. It is a proxy/shim library that loads another ddrio +library, e.g. ddrio-p3io, and drives the entire backend in a dedicated IO +thread. By implementing this behind the ddrio API, it is fully transparent to +any existing application using it. + +The main benefit is the improved IO polling performance depending on how +expensive the synchronous calls of the actual hardware are. For example, +*ddrio-p3io* has very expensive write calls with ~12 ms duration while read +calls take ~4 ms. Therefore, a full update cycle is already about as costly +as rendering an entire frame (at 60 fps). + +## Setup + +For hook libraries, i.e. ddrhookX, but likely applicable to 3rd party +applications (consolidate their manuals). + +* Have `ddrio-async.dll` in the same folder as your `ddrhookX.dll` +* Rename `ddrio-async.dll` to `ddrio.dll` +* Pick another ddrio library as the backend of your choice, e.g. `ddrio-p3io.dl` + and put it next to the async `ddrio.dll` +* Rename it to `ddrio-async-child.dll`, ddrio-async is looking for that filename + in the same folder +* Ensure that your `gamestart.bat` actually injects the appropriate `ddrhook.dll`, for example: + +```bat +inject ddrhook1.dll ddr.exe ...* +``` + +or + +```bat +launcher -K ddrhook2.dll arkmdxp3.dll ...* +``` \ No newline at end of file