mirror of
https://github.com/spice2x/spice2x.github.io.git
synced 2026-08-02 14:50:41 -07:00
07a0df5fdc
## Link to GitHub Issue, if one exists None ## Description of change - Added bi2x_hook - Added J32D (drum) and J33I (guitar) emulations - AMI2000 card reader (this game uses this instead of ICCA) ## Testing Played through a 15-minute session on Drummania. Guitar mode works with keyboard input.
86 lines
2.4 KiB
C++
86 lines
2.4 KiB
C++
#include "ami2000.h"
|
|
#include "util/utils.h"
|
|
#include "util/detour.h"
|
|
#include "util/libutils.h"
|
|
#include "misc/eamuse.h"
|
|
#include "acio/icca/icca.h"
|
|
|
|
|
|
static int CARD_TYPE = 0;
|
|
static uint8_t CARD_UID[8];
|
|
|
|
static void __fastcall AMI2000_Initialize() {
|
|
log_info("ami2000", "ami2000 initialize.");
|
|
}
|
|
|
|
static void __fastcall AMI2000_Startup() {
|
|
log_info("ami2000", "ami2000 startup.");
|
|
}
|
|
|
|
static void __fastcall AMI2000_Cleanup() {
|
|
log_info("ami2000", "ami2000 cleanup.");
|
|
}
|
|
|
|
static int __fastcall AMI2000_IsDeviceError() {
|
|
return 0;
|
|
}
|
|
|
|
static int __fastcall AMI2000_ReadCtrl() {
|
|
return 0;
|
|
}
|
|
|
|
static const char *__fastcall AMI2000_GetRomVersion() {
|
|
return "DUMMY";
|
|
}
|
|
|
|
static int __fastcall AMI2000_GetCardType() {
|
|
return CARD_TYPE;
|
|
}
|
|
|
|
static uint64_t __fastcall AMI2000_GetCardIdentifier() {
|
|
if (eamuse_card_insert_consume(1, 0)) {
|
|
eamuse_get_card(1, 0, CARD_UID);
|
|
CARD_TYPE = is_card_uid_felica(CARD_UID) ? 2 : 1;
|
|
log_info("ami2000", "AMI2000_GetCardIdentifier: {:X}", bswap64(*(uint64_t*)CARD_UID));
|
|
} else {
|
|
CARD_TYPE = 0;
|
|
return 0;
|
|
}
|
|
return bswap64(*(uint64_t *)CARD_UID);
|
|
}
|
|
|
|
|
|
void ami2000_attach() {
|
|
auto ami2000 = libutils::try_module("iccr-ami2000-api.dll");
|
|
|
|
if (!ami2000) {
|
|
log_warning("ami2000", "module not found, skipping.");
|
|
return;
|
|
}
|
|
|
|
// card unit
|
|
detour::inline_hook((void *)AMI2000_Initialize, libutils::try_proc(
|
|
ami2000, "AMI2000_Initialize"));
|
|
detour::inline_hook((void *)AMI2000_Startup, libutils::try_proc(
|
|
ami2000, "AMI2000_Startup"));
|
|
detour::inline_hook((void *)AMI2000_IsDeviceError, libutils::try_proc(
|
|
ami2000, "AMI2000_IsDeviceError"));
|
|
detour::inline_hook((void *)AMI2000_ReadCtrl, libutils::try_proc(
|
|
ami2000, "AMI2000_ReadCtrl"));
|
|
detour::inline_hook((void *)AMI2000_Cleanup, libutils::try_proc(
|
|
ami2000, "AMI2000_Cleanup"));
|
|
detour::inline_hook((void *)AMI2000_GetRomVersion, libutils::try_proc(
|
|
ami2000, "AMI2000_GetRomVersion"));
|
|
detour::inline_hook((void *)AMI2000_GetCardType, libutils::try_proc(
|
|
ami2000, "AMI2000_GetCardType"));
|
|
detour::inline_hook((void *)AMI2000_GetCardIdentifier, libutils::try_proc(
|
|
ami2000, "AMI2000_GetCardIdentifier"));
|
|
|
|
log_info("ami2000", "attached");
|
|
}
|
|
|
|
void ami2000_detach()
|
|
{
|
|
|
|
}
|