From 0b7ff383b8486cb8ebf08fd024550c31271d7dca Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 14 Oct 2023 22:18:17 +0300 Subject: [PATCH] Fix IDE table indexing when same controller is configured more than once and controller has more than 1 IDE channels. --- filesys.cpp | 4 ++-- idecontrollers.cpp | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/filesys.cpp b/filesys.cpp index 460a039a..0140fea8 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -1281,8 +1281,8 @@ static bool add_ide_unit(int type, int unit, struct uaedev_config_info *uci) cpuboard_hd = 1; if (ert->add) { struct romconfig *rc = get_device_romconfig(&currprefs, ert->romtype, uci->controller_type_unit); - write_log(_T("Adding IDE %s '%s' unit %d ('%s')\n"), getunittype(uci), - ert->name, unit, uci->rootdir); + write_log(_T("Adding IDE %s '%s' unit %d, controller %d ('%s')\n"), getunittype(uci), + ert->name, unit, uci->controller_type_unit, uci->rootdir); ert->add(unit, uci, rc); if ((ert->romtype & ROMTYPE_MASK) == ROMTYPE_MB_IDE) { gayle_ide_in_use = true; diff --git a/idecontrollers.cpp b/idecontrollers.cpp index 83ac7aa5..c84311ac 100644 --- a/idecontrollers.cpp +++ b/idecontrollers.cpp @@ -121,8 +121,8 @@ static struct ide_board *accessx_board[MAX_DUPLICATE_EXPANSION_BOARDS]; static struct ide_board *ivst500at_board[MAX_DUPLICATE_EXPANSION_BOARDS]; static struct ide_board *trifecta_board[MAX_DUPLICATE_EXPANSION_BOARDS]; static struct ide_board *tandem_board[MAX_DUPLICATE_EXPANSION_BOARDS]; -static struct ide_board* dotto_board[MAX_DUPLICATE_EXPANSION_BOARDS]; -static struct ide_board* dev_board[MAX_DUPLICATE_EXPANSION_BOARDS]; +static struct ide_board *dotto_board[MAX_DUPLICATE_EXPANSION_BOARDS]; +static struct ide_board *dev_board[MAX_DUPLICATE_EXPANSION_BOARDS]; static struct ide_hdf *idecontroller_drive[TOTAL_IDE * 2]; static struct ide_thread_state idecontroller_its; @@ -211,6 +211,8 @@ static void add_ide_standard_unit(int ch, struct uaedev_config_info *ci, struct { struct ide_hdf *ide; struct ide_board *ideb; + int maxch = maxunit / 2; + int idetypenum = idetype + maxch * ci->controller_type_unit; if (ch >= maxunit) return; ideb = allocide(&ideboard[ci->controller_type_unit], rc, ch); @@ -218,8 +220,8 @@ static void add_ide_standard_unit(int ch, struct uaedev_config_info *ci, struct return; ideb->keepautoconfig = true; ideb->type = idetype; - ide = add_ide_unit (&idecontroller_drive[(idetype + ci->controller_type_unit) * 2], 2, ch, ci, rc); - init_ide(ideb, idetype + ci->controller_type_unit, maxunit, byteswap, adide); + ide = add_ide_unit (&idecontroller_drive[idetypenum * 2], maxunit, ch, ci, rc); + init_ide(ideb, idetypenum, maxunit, byteswap, adide); } static bool ide_interrupt_check(struct ide_board *board, bool edge_triggered) -- 2.47.3