mirror of
https://github.com/djhackersdev/bemanitools.git
synced 2024-11-28 16:30:51 +01:00
bio2emu: refactor BIO2 emulation
This commit is contained in:
parent
bbb5157460
commit
bfbb7103ef
@ -79,6 +79,7 @@ include src/main/acioemu/Module.mk
|
|||||||
include src/main/aciotest/Module.mk
|
include src/main/aciotest/Module.mk
|
||||||
include src/main/asio/Module.mk
|
include src/main/asio/Module.mk
|
||||||
include src/main/bio2emu/Module.mk
|
include src/main/bio2emu/Module.mk
|
||||||
|
include src/main/bio2emu-iidx/Module.mk
|
||||||
include src/main/bsthook/Module.mk
|
include src/main/bsthook/Module.mk
|
||||||
include src/main/bstio/Module.mk
|
include src/main/bstio/Module.mk
|
||||||
include src/main/camhook/Module.mk
|
include src/main/camhook/Module.mk
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef AC_IO_KFCA_H
|
#ifndef AC_IO_KFCA_H
|
||||||
#define AC_IO_KFCA_H
|
#define AC_IO_KFCA_H
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#define AC_IO_CMD_KFCA_POLL 0x0113
|
#define AC_IO_CMD_KFCA_POLL 0x0113
|
||||||
#define AC_IO_CMD_KFCA_WATCHDOG 0x0120
|
#define AC_IO_CMD_KFCA_WATCHDOG 0x0120
|
||||||
#define AC_IO_CMD_KFCA_AMP_CONTROL 0x0128
|
#define AC_IO_CMD_KFCA_AMP_CONTROL 0x0128
|
||||||
|
@ -1,18 +1,7 @@
|
|||||||
#ifndef IIDXHOOK_BI2A_H
|
#ifndef BIO2_BI2A_IIDX
|
||||||
#define IIDXHOOK_BI2A_H
|
#define BIO2_BI2A_IIDX
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include "bio2/bio2.h"
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "bio2emu/emu.h"
|
|
||||||
|
|
||||||
enum bio2_iidx_cmd {
|
|
||||||
// Custom Stuff
|
|
||||||
BIO2_BI2A_CMD_UNK_0100 = 0x0100,
|
|
||||||
BIO2_BI2A_CMD_UNK_0120 = 0x0120,
|
|
||||||
BIO2_BI2A_CMD_POLL = 0x0152,
|
|
||||||
};
|
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
struct bi2a_iidx_slider {
|
struct bi2a_iidx_slider {
|
||||||
@ -114,8 +103,4 @@ _Static_assert(
|
|||||||
"bi2a_iidx_state_out is the wrong size");
|
"bi2a_iidx_state_out is the wrong size");
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
void bio2_emu_bi2a_init(struct bio2emu_port *in, bool disable_poll_limiter);
|
|
||||||
void bio2_emu_bi2a_dispatch_request(
|
|
||||||
struct bio2emu_port *bio2port, const struct ac_io_message *req);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
75
src/main/bio2/bi2a-sdvx.h
Normal file
75
src/main/bio2/bi2a-sdvx.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#ifndef BIO2_BI2A_SDVX
|
||||||
|
#define BIO2_BI2A_SDVX
|
||||||
|
|
||||||
|
#include "bio2/bio2.h"
|
||||||
|
|
||||||
|
#pragma pack(push, 1)
|
||||||
|
struct bi2a_sdvx_analog {
|
||||||
|
uint16_t unk1 : 1;
|
||||||
|
uint16_t a_coin : 1;
|
||||||
|
uint16_t a_service : 1;
|
||||||
|
uint16_t a_test : 1;
|
||||||
|
uint16_t unk2 : 2;
|
||||||
|
uint16_t a_val : 10;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bi2a_sdvx_buttons1 {
|
||||||
|
uint8_t b_fxl : 1;
|
||||||
|
uint8_t b_d : 1;
|
||||||
|
uint8_t b_c : 1;
|
||||||
|
uint8_t b_b : 1;
|
||||||
|
uint8_t b_a : 1;
|
||||||
|
uint8_t b_start : 1;
|
||||||
|
uint8_t b_recorder : 1;
|
||||||
|
uint8_t b_headphone : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bi2a_sdvx_buttons2 {
|
||||||
|
uint8_t unk : 5;
|
||||||
|
uint8_t b_ex2 : 1;
|
||||||
|
uint8_t b_ex1 : 1;
|
||||||
|
uint8_t b_fxr : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bio2_bi2a_state {
|
||||||
|
union {
|
||||||
|
uint16_t raw[8];
|
||||||
|
struct {
|
||||||
|
struct bi2a_sdvx_analog analogs[4];
|
||||||
|
uint8_t unk_1; // coin mech?
|
||||||
|
struct bi2a_sdvx_buttons1 buttons_1;
|
||||||
|
struct bi2a_sdvx_buttons2 buttons_2;
|
||||||
|
uint8_t unk_2[5];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
struct bio2_bi2a_state_out {
|
||||||
|
uint8_t unk1[2];
|
||||||
|
uint8_t c_block;
|
||||||
|
uint8_t woof_r;
|
||||||
|
uint8_t woof_g;
|
||||||
|
uint8_t unk2;
|
||||||
|
uint8_t woof_b;
|
||||||
|
uint8_t controller[3];
|
||||||
|
uint8_t unk3;
|
||||||
|
uint8_t gpio[7]; // START, ABCD, FXL, FXR
|
||||||
|
uint8_t unk4[3];
|
||||||
|
uint8_t generator[3];
|
||||||
|
uint8_t unk5[3];
|
||||||
|
uint8_t gpio2[3]; // pop, titleL, titleR
|
||||||
|
uint8_t unk6;
|
||||||
|
uint8_t wingUpper[3];
|
||||||
|
uint8_t wingLower[3];
|
||||||
|
uint8_t unk7[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
_Static_assert(
|
||||||
|
sizeof(struct bio2_bi2a_state) == 16,
|
||||||
|
"bio2_bi2a_state_in is the wrong size");
|
||||||
|
_Static_assert(
|
||||||
|
sizeof(struct bio2_bi2a_state_out) == 40,
|
||||||
|
"bio2_bi2a_state_out is the wrong size");
|
||||||
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
#endif
|
15
src/main/bio2/bio2.h
Normal file
15
src/main/bio2/bio2.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef BIO2_BIO2
|
||||||
|
#define BIO2_BIO2
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum bio2_bi2a_cmd {
|
||||||
|
// Custom Stuff
|
||||||
|
BIO2_BI2A_CMD_UNK_0100 = 0x0100,
|
||||||
|
BIO2_BI2A_CMD_UNK_0120 = 0x0120,
|
||||||
|
BIO2_BI2A_CMD_POLL = 0x0152, // For IIDX
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
7
src/main/bio2emu-iidx/Module.mk
Normal file
7
src/main/bio2emu-iidx/Module.mk
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
libs += bio2emu-iidx
|
||||||
|
|
||||||
|
libs_bio2emu-iidx := \
|
||||||
|
bio2emu \
|
||||||
|
|
||||||
|
src_bio2emu-iidx := \
|
||||||
|
bi2a.c \
|
@ -1,7 +1,6 @@
|
|||||||
#define LOG_MODULE "bio2emu-bi2a"
|
#define LOG_MODULE "bio2emu-iidx"
|
||||||
|
|
||||||
#include "iidxhook8/bi2a.h"
|
#include "bio2emu-iidx/bi2a.h"
|
||||||
#include "bio2emu/emu.h"
|
|
||||||
|
|
||||||
#include <windows.h> /* for _BitScanForward */
|
#include <windows.h> /* for _BitScanForward */
|
||||||
|
|
12
src/main/bio2emu-iidx/bi2a.h
Normal file
12
src/main/bio2emu-iidx/bi2a.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef BIO2EMU_IIDX_BI2A_H
|
||||||
|
#define BIO2EMU_IIDX_BI2A_H
|
||||||
|
|
||||||
|
#include "bio2/bi2a-iidx.h"
|
||||||
|
|
||||||
|
#include "bio2emu/emu.h"
|
||||||
|
|
||||||
|
void bio2_emu_bi2a_init(struct bio2emu_port *in, bool disable_poll_limiter);
|
||||||
|
void bio2_emu_bi2a_dispatch_request(
|
||||||
|
struct bio2emu_port *bio2port, const struct ac_io_message *req);
|
||||||
|
|
||||||
|
#endif
|
@ -350,8 +350,8 @@ static CONFIGRET my_CM_Get_Device_IDA(
|
|||||||
log_info("%s: Injecting custom parent ID for BIO2", __FUNCTION__);
|
log_info("%s: Injecting custom parent ID for BIO2", __FUNCTION__);
|
||||||
strcpy(Buffer, devpath);
|
strcpy(Buffer, devpath);
|
||||||
|
|
||||||
Buffer[devpathsize - 1] =
|
Buffer[devpathsize - 2] =
|
||||||
'\0' + (dnDevInst & CUSTOM_DEVICE_INSTANCE_IDXMASK);
|
'0' + (dnDevInst & CUSTOM_DEVICE_INSTANCE_IDXMASK);
|
||||||
log_info("%s: %s", __FUNCTION__, Buffer);
|
log_info("%s: %s", __FUNCTION__, Buffer);
|
||||||
return CR_SUCCESS;
|
return CR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ libs_iidxhook8 := \
|
|||||||
iidxhook-util \
|
iidxhook-util \
|
||||||
acioemu \
|
acioemu \
|
||||||
bio2emu \
|
bio2emu \
|
||||||
|
bio2emu-iidx \
|
||||||
camhook \
|
camhook \
|
||||||
iidxio \
|
iidxio \
|
||||||
hook \
|
hook \
|
||||||
@ -24,6 +25,5 @@ libs_iidxhook8 := \
|
|||||||
eamio \
|
eamio \
|
||||||
|
|
||||||
src_iidxhook8 := \
|
src_iidxhook8 := \
|
||||||
bi2a.c \
|
|
||||||
config-io.c \
|
config-io.c \
|
||||||
dllmain.c \
|
dllmain.c \
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "iidxhook-util/log-server.h"
|
#include "iidxhook-util/log-server.h"
|
||||||
|
|
||||||
#include "bio2emu/emu.h"
|
#include "bio2emu/emu.h"
|
||||||
#include "iidxhook8/bi2a.h"
|
#include "bio2emu-iidx/bi2a.h"
|
||||||
|
|
||||||
#include "camhook/cam.h"
|
#include "camhook/cam.h"
|
||||||
#include "camhook/config-cam.h"
|
#include "camhook/config-cam.h"
|
||||||
|
@ -6,82 +6,8 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "bio2emu/emu.h"
|
#include "bio2emu/emu.h"
|
||||||
|
#include "bio2/bi2a-sdvx.h"
|
||||||
|
|
||||||
enum bio2_bi2a_cmd {
|
|
||||||
// Custom Stuff
|
|
||||||
BIO2_BI2A_CMD_UNK_0100 = 0x0100,
|
|
||||||
BIO2_BI2A_CMD_UNK_0120 = 0x0120,
|
|
||||||
BIO2_BI2A_CMD_POLL = 0x0152,
|
|
||||||
};
|
|
||||||
|
|
||||||
#pragma pack(push, 1)
|
|
||||||
struct bi2a_sdvx_analog {
|
|
||||||
uint16_t unk1 : 1;
|
|
||||||
uint16_t a_coin : 1;
|
|
||||||
uint16_t a_service : 1;
|
|
||||||
uint16_t a_test : 1;
|
|
||||||
uint16_t unk2 : 2;
|
|
||||||
uint16_t a_val : 10;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct bi2a_sdvx_buttons1 {
|
|
||||||
uint8_t b_fxl : 1;
|
|
||||||
uint8_t b_d : 1;
|
|
||||||
uint8_t b_c : 1;
|
|
||||||
uint8_t b_b : 1;
|
|
||||||
uint8_t b_a : 1;
|
|
||||||
uint8_t b_start : 1;
|
|
||||||
uint8_t b_recorder : 1;
|
|
||||||
uint8_t b_headphone : 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct bi2a_sdvx_buttons2 {
|
|
||||||
uint8_t unk : 5;
|
|
||||||
uint8_t b_ex2 : 1;
|
|
||||||
uint8_t b_ex1 : 1;
|
|
||||||
uint8_t b_fxr : 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct bio2_bi2a_state {
|
|
||||||
union {
|
|
||||||
uint16_t raw[8];
|
|
||||||
struct {
|
|
||||||
struct bi2a_sdvx_analog analogs[4];
|
|
||||||
uint8_t unk_1; // coin mech?
|
|
||||||
struct bi2a_sdvx_buttons1 buttons_1;
|
|
||||||
struct bi2a_sdvx_buttons2 buttons_2;
|
|
||||||
uint8_t unk_2[5];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
struct bio2_bi2a_state_out {
|
|
||||||
uint8_t unk1[2];
|
|
||||||
uint8_t c_block;
|
|
||||||
uint8_t woof_r;
|
|
||||||
uint8_t woof_g;
|
|
||||||
uint8_t unk2;
|
|
||||||
uint8_t woof_b;
|
|
||||||
uint8_t controller[3];
|
|
||||||
uint8_t unk3;
|
|
||||||
uint8_t gpio[7]; // START, ABCD, FXL, FXR
|
|
||||||
uint8_t unk4[3];
|
|
||||||
uint8_t generator[3];
|
|
||||||
uint8_t unk5[3];
|
|
||||||
uint8_t gpio2[3]; // pop, titleL, titleR
|
|
||||||
uint8_t unk6;
|
|
||||||
uint8_t wingUpper[3];
|
|
||||||
uint8_t wingLower[3];
|
|
||||||
uint8_t unk7[3];
|
|
||||||
};
|
|
||||||
|
|
||||||
_Static_assert(
|
|
||||||
sizeof(struct bio2_bi2a_state) == 16,
|
|
||||||
"bio2_bi2a_state_in is the wrong size");
|
|
||||||
_Static_assert(
|
|
||||||
sizeof(struct bio2_bi2a_state_out) == 40,
|
|
||||||
"bio2_bi2a_state_out is the wrong size");
|
|
||||||
#pragma pack(pop)
|
|
||||||
|
|
||||||
void bio2_emu_bi2a_init(struct bio2emu_port *in, bool disable_poll_limiter, bool force_headphones);
|
void bio2_emu_bi2a_init(struct bio2emu_port *in, bool disable_poll_limiter, bool force_headphones);
|
||||||
void bio2_emu_bi2a_dispatch_request(
|
void bio2_emu_bi2a_dispatch_request(
|
||||||
|
Loading…
Reference in New Issue
Block a user