diff --git a/src/spice2x/games/iidx/bi2a.cpp b/src/spice2x/games/iidx/bi2a.cpp index 45b9d37..fff4962 100644 --- a/src/spice2x/games/iidx/bi2a.cpp +++ b/src/spice2x/games/iidx/bi2a.cpp @@ -195,11 +195,11 @@ bool games::iidx::IIDXFMSerialHandle::open(LPCWSTR lpFileName) { return false; } - log_info("iidx", "Opened COM2 (FM DEVICE)"); + log_info("iidx", "Opened COM2 (FM DEVICE / bi2a)"); + games::iidx::update_io_emulation_state(games::iidx::iidx_aio_emulation_state::bi2a_com2); // ACIO device acio_emu.add_device(new FMSerialDevice()); - return true; } @@ -240,7 +240,7 @@ int games::iidx::IIDXFMSerialHandle::device_io(DWORD dwIoControlCode, LPVOID lpI } bool games::iidx::IIDXFMSerialHandle::close() { - log_info("iidx", "Closed COM2 (FM DEVICE)"); + log_info("iidx", "Closed COM2 (FM DEVICE / bi2a)"); return true; } diff --git a/src/spice2x/games/iidx/bi2x_hook.cpp b/src/spice2x/games/iidx/bi2x_hook.cpp index 3fdae2e..3755a1b 100644 --- a/src/spice2x/games/iidx/bi2x_hook.cpp +++ b/src/spice2x/games/iidx/bi2x_hook.cpp @@ -120,6 +120,11 @@ namespace games::iidx { static AIO_IOB2_BI2X_TDJ* __fastcall aioIob2Bi2xTDJ_Create(AIO_NMGR_IOB2 *nmgr, int a2) { if (!BI2X_PASSTHROUGH) { + + log_info("bi2x_hook", "aioIob2Bi2xTDJ_Create called (TDJ I/O emulation active)"); + games::iidx::update_io_emulation_state( + games::iidx::iidx_aio_emulation_state::bi2x_hook); + custom_node = new AIO_IOB2_BI2X_TDJ; memset(&custom_node->data, 0, sizeof(custom_node->data)); diff --git a/src/spice2x/games/iidx/iidx.cpp b/src/spice2x/games/iidx/iidx.cpp index 8d49b0f..51d5db4 100644 --- a/src/spice2x/games/iidx/iidx.cpp +++ b/src/spice2x/games/iidx/iidx.cpp @@ -80,6 +80,9 @@ namespace games::iidx { bool IIDXIO_LED_TICKER_READONLY = false; std::mutex IIDX_LED_TICKER_LOCK; + // io + static bool HAS_LIBAIO; // this is how we detect iidx27+ + tapeledutils::tape_led TAPELED_MAPPING[IIDX_TAPELED_TOTAL] = { { 19, Lights::StageLeftAvgR, Lights::StageLeftAvgG, Lights::StageLeftAvgB, "Stage Left" }, { 19, Lights::StageRightAvgR, Lights::StageRightAvgG, Lights::StageRightAvgB, "Stage Right" }, @@ -311,13 +314,14 @@ namespace games::iidx { memcpy(settings2.interface_detail, interface_detail2, sizeof(interface_detail2)); setupapihook_add(settings2); - // IIDX 25-27 BIO2 BI2A input device + // IIDX 25+ BIO2 BI2A input device devicehook_add(new IIDXFMSerialHandle()); } // check for new I/O DLL auto aio = libutils::try_library("libaio.dll"); if (aio != nullptr) { + HAS_LIBAIO = true; // check TDJ mode TDJ_MODE |= fileutils::text_read("C:\\000rom.txt") == "TDJ-JA"; @@ -895,4 +899,52 @@ namespace games::iidx { #endif } + + void update_io_emulation_state(iidx_aio_emulation_state state) { + // OPTION_DEFINITIONS = { .category = "Game Options (Advanced)", }, { - .title = "IIDX TDJ Mode", + .title = "IIDX TDJ Mode (Lightning Model)", .name = "iidxtdj", .desc = "Enables TDJ cabinet mode. Ensure you also set -iidxsounddevice to desired option", .type = OptionType::Bool,