From: Toni Wilen Date: Sat, 14 Oct 2023 19:18:17 +0000 (+0300) Subject: Fix IDE table indexing when same controller is configured more than once and controll... X-Git-Tag: 5.1.0~77 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=0b7ff383b8486cb8ebf08fd024550c31271d7dca;p=francis%2Fwinuae.git Fix IDE table indexing when same controller is configured more than once and controller has more than 1 IDE channels. --- 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)