1
0
mirror of https://github.com/djhackersdev/bemanitools.git synced 2024-11-30 17:24:30 +01:00
bemanitools/doc/api.md

75 lines
2.8 KiB
Markdown
Raw Normal View History

2019-09-27 22:36:50 +02:00
# Bemanitools API
2019-09-27 22:36:50 +02:00
Bemanitools introduces interfaces abstracting the IO hardware of many games. This is used to implement support for
non-intended IO devices from simple keyboard support, standard gamecontrollers to custom IO boards or using real
hardware with the games (e.g. support for real legacy hardware).
For a list of already supported and included hardware by game, see the next section.
The BT5 API separates main game IO hardware like buttons, turn tables, spinners, lights etc. (bstio, iidxio, ...) from
eamuse hardware like 10-key pads and card readers (eamio).
If you want to write an implementation for your own custom piece of hardware, check out the SDK (*bemanitools*
sub-folder) in the source code (src.zip).
## Implementations
### IO boards
Support pop'n music 15-18 * popnhook1 for pop'n 15 - 18 has been added * popnio has been added * inject.exe has new syntax for loading hook DLLs, `real.dll=hook.dll`. This will trigger an early IAT hook where it will load the EXE suspended without resolving imports, replace the reference to real.dll in the import table with hook.dll, and then resolve everything before launching. This allows for ezusb.dll to be hooked properly. * launcher.exe also has a new early IAT hook feature now. Use `-I real.dll=hook.dll`. The idea is the same as described above for inject.exe. * Updated ezusb constant namings based on what is visible in ezusb.dll's debug statements. The launcher.exe implementation of early IAT hooking means that someone can implement popnhook2.dll for 19 and above. I have tried pop'n music Sunny Park using a modified version of popnhook1 and it seems to work to some degree: the I/O check and security check returns OK which means the ezusb hooking used in popnhook1 is also working for the later games using `launcher.exe -I ezusb.dll=ezusb2-popn-shim.dll ...`. The process is rather invasive (manually resolving all imports means more chances to fail) so it has been implemented in such a way that the launcher will work the same as it has before as long as `-I` isn't specified. One questionable thing I am not confident about is the `texture_usage_fix` hack flag I added in the conf. As the comment says, pop'n music 16 will work in Windows XP without the flag being set, but the game will immediately crash on later OSes without the flag being set in my experience. No other games had this issue in my experience. Enabling it in other games doesn't seem to have any negative effects.
2022-06-11 00:46:59 +02:00
The following implementations are already shipped with BT5.
2019-09-27 22:36:50 +02:00
* BeatStream
* bstio.dll (default): Keyboard, joystick and mouse input
* Dance Dance Revolution
* ddrio.dll (default): Keyboard, joystick and mouse input
* ddrio-mm.dll: Minimaid hardware
* ddrio-smx.dll: StepManiaX platforms
* Beatmania IIDX
* iidxio.dll (default): Keyboard, joystick and mouse input
* [iidxio-bio2.dll](iidxhook/iidxio-bio2.md): BIO2 driver
* [iidxio-ezusb.dll](iidxhook/iidxio-ezusb.md): Ezusb (C02 IO) driver
* [iidxio-ezusb2.dll](iidxhook/iidxio-ezusb2.md): Ezusb FX2 (IO2) driver
2019-09-27 22:36:50 +02:00
* jubeat
* jbio.dll (default): Keyboard, joystick and mouse input
Support pop'n music 15-18 * popnhook1 for pop'n 15 - 18 has been added * popnio has been added * inject.exe has new syntax for loading hook DLLs, `real.dll=hook.dll`. This will trigger an early IAT hook where it will load the EXE suspended without resolving imports, replace the reference to real.dll in the import table with hook.dll, and then resolve everything before launching. This allows for ezusb.dll to be hooked properly. * launcher.exe also has a new early IAT hook feature now. Use `-I real.dll=hook.dll`. The idea is the same as described above for inject.exe. * Updated ezusb constant namings based on what is visible in ezusb.dll's debug statements. The launcher.exe implementation of early IAT hooking means that someone can implement popnhook2.dll for 19 and above. I have tried pop'n music Sunny Park using a modified version of popnhook1 and it seems to work to some degree: the I/O check and security check returns OK which means the ezusb hooking used in popnhook1 is also working for the later games using `launcher.exe -I ezusb.dll=ezusb2-popn-shim.dll ...`. The process is rather invasive (manually resolving all imports means more chances to fail) so it has been implemented in such a way that the launcher will work the same as it has before as long as `-I` isn't specified. One questionable thing I am not confident about is the `texture_usage_fix` hack flag I added in the conf. As the comment says, pop'n music 16 will work in Windows XP without the flag being set, but the game will immediately crash on later OSes without the flag being set in my experience. No other games had this issue in my experience. Enabling it in other games doesn't seem to have any negative effects.
2022-06-11 00:46:59 +02:00
* pop'n music
* popnio.dll (default): Keyboard, joystick and mouse input
2019-09-27 22:36:50 +02:00
* SOUND VOLTEX
* sdvxio.dll (default): Keyboard, joystick and mouse input
* [sdvxio-bio2.dll](sdvxhook/sdvxio-bio2.md): BIO2 driver
* [sdvxio-kfca.dll](sdvxhook/sdvxio-kfca.md): KFCA IO board driver
2019-09-27 22:36:50 +02:00
### Eamuse readers
2019-09-27 22:36:50 +02:00
Eamuse hardware support is implemented separately:
Support pop'n music 15-18 * popnhook1 for pop'n 15 - 18 has been added * popnio has been added * inject.exe has new syntax for loading hook DLLs, `real.dll=hook.dll`. This will trigger an early IAT hook where it will load the EXE suspended without resolving imports, replace the reference to real.dll in the import table with hook.dll, and then resolve everything before launching. This allows for ezusb.dll to be hooked properly. * launcher.exe also has a new early IAT hook feature now. Use `-I real.dll=hook.dll`. The idea is the same as described above for inject.exe. * Updated ezusb constant namings based on what is visible in ezusb.dll's debug statements. The launcher.exe implementation of early IAT hooking means that someone can implement popnhook2.dll for 19 and above. I have tried pop'n music Sunny Park using a modified version of popnhook1 and it seems to work to some degree: the I/O check and security check returns OK which means the ezusb hooking used in popnhook1 is also working for the later games using `launcher.exe -I ezusb.dll=ezusb2-popn-shim.dll ...`. The process is rather invasive (manually resolving all imports means more chances to fail) so it has been implemented in such a way that the launcher will work the same as it has before as long as `-I` isn't specified. One questionable thing I am not confident about is the `texture_usage_fix` hack flag I added in the conf. As the comment says, pop'n music 16 will work in Windows XP without the flag being set, but the game will immediately crash on later OSes without the flag being set in my experience. No other games had this issue in my experience. Enabling it in other games doesn't seem to have any negative effects.
2022-06-11 00:46:59 +02:00
* eamio.dll (default): Keyboard and joystick input
* eamio-icca.dll: Slotted/wave pass readers, required for old games with magnetic stripe cards
#### ICCA readers for IIDX and port config in device manager
The COM port for the card readers needs to be configured correctly in device manager. Otherwise,
communication with the readers will fail if the settings do not align with how the game or
bemanitools wants to operate them.
Use built-in ports on your mainboard if available but an external USB to serial port dongle also
works.
* Assign `COM1` to the COM port the card readers are connected to.
* Ensure that the following settings for the COM port you are going to use are
set
* BAUD rate 57600
* Data bits 8
* Parity None
* Stop bits 1
* Flow control None.
2019-09-27 22:36:50 +02:00
## Development notes
2019-09-27 22:36:50 +02:00
A DEF file for geninput.dll is included. To convert the DEF into an import library suitable for use with Visual C++, run
```
lib /machine:i386 /def:geninput.def
```
from the Visual C++ command line. If you're using mingw then use dlltool:
```
dlltool -d geninput.def -l geninput.a
```