From ef377f40d8407a3c70fd4b2da7e5c08e8d8bc1a8 Mon Sep 17 00:00:00 2001 From: icex2 Date: Wed, 16 Dec 2020 23:14:15 +0100 Subject: [PATCH] bi2a: Clarify data field usage on init command The single byte is a specific parameter required to initialize the IO correctly. Otherwise, it either will only work partially or not worked at all. The full impact and meaning of that byte is not entirely known, yet. --- src/main/acio/acio.h | 1 + src/main/bio2drv/bi2a-iidx.c | 4 +++- src/main/bio2drv/bi2a-sdvx.c | 4 +++- src/main/bio2emu-iidx/bi2a.c | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/acio/acio.h b/src/main/acio/acio.h index effea99..b8608ef 100644 --- a/src/main/acio/acio.h +++ b/src/main/acio/acio.h @@ -66,6 +66,7 @@ struct ac_io_message { uint8_t raw[0xFF]; uint8_t count; uint8_t status; + uint8_t param; struct ac_io_version version; struct ac_io_icca_misc icca_misc; diff --git a/src/main/bio2drv/bi2a-iidx.c b/src/main/bio2drv/bi2a-iidx.c index fb7554e..0738921 100644 --- a/src/main/bio2drv/bi2a-iidx.c +++ b/src/main/bio2drv/bi2a-iidx.c @@ -9,6 +9,8 @@ #include "util/log.h" +static const uint8_t _BIO2DR_BI2A_IIDX_INIT_DATA = 0x3B; + static bool bio2drv_bi2a_iidx_init_io(uint8_t node_id) { struct ac_io_message msg; @@ -16,7 +18,7 @@ static bool bio2drv_bi2a_iidx_init_io(uint8_t node_id) msg.addr = node_id + 1; msg.cmd.code = ac_io_u16(BIO2_BI2A_CMD_INIT); msg.cmd.nbytes = 1; - msg.cmd.count = 0x3B; + msg.cmd.param = _BIO2DR_BI2A_IIDX_INIT_DATA; if (!aciodrv_send_and_recv( &msg, offsetof(struct ac_io_message, cmd.raw) + 1)) { diff --git a/src/main/bio2drv/bi2a-sdvx.c b/src/main/bio2drv/bi2a-sdvx.c index 4f56266..0d1fc6d 100644 --- a/src/main/bio2drv/bi2a-sdvx.c +++ b/src/main/bio2drv/bi2a-sdvx.c @@ -9,6 +9,8 @@ #include "util/log.h" +static const uint8_t _BIO2DR_BI2A_SDVX_INIT_DATA = 0x3B; + // this is probably InitIO static bool bio2drv_bi2a_sdvx_init_io(uint8_t node_id) { @@ -17,7 +19,7 @@ static bool bio2drv_bi2a_sdvx_init_io(uint8_t node_id) msg.addr = node_id + 1; msg.cmd.code = ac_io_u16(BIO2_BI2A_CMD_INIT); msg.cmd.nbytes = 1; - msg.cmd.count = 0x3B; + msg.cmd.param = _BIO2DR_BI2A_SDVX_INIT_DATA; if (!aciodrv_send_and_recv( &msg, offsetof(struct ac_io_message, cmd.raw) + 1)) { diff --git a/src/main/bio2emu-iidx/bi2a.c b/src/main/bio2emu-iidx/bi2a.c index d556d0c..f67fcf5 100644 --- a/src/main/bio2emu-iidx/bi2a.c +++ b/src/main/bio2emu-iidx/bi2a.c @@ -85,8 +85,8 @@ void bio2_emu_bi2a_dispatch_request( cmd_code = ac_io_u16(req->cmd.code); switch (cmd_code) { - case AC_IO_CMD_CLEAR: - log_misc("AC_IO_CMD_CLEAR(%d)", req->addr); + case BIO2_BI2A_CMD_INIT: + log_misc("BIO2_BI2A_CMD_INIT(%d)", req->addr); bio2_emu_bi2a_send_status(&bio2port->acio, req, 0x00); break;