]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Fix IDE table indexing when same controller is configured more than once and controll...
authorToni Wilen <twilen@winuae.net>
Sat, 14 Oct 2023 19:18:17 +0000 (22:18 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 14 Oct 2023 19:18:17 +0000 (22:18 +0300)
filesys.cpp
idecontrollers.cpp

index 460a039a63614022c99b2aa68d727931e7d0e5a5..0140fea8f62373065962862bd043065739f60e59 100644 (file)
@@ -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;
index 83ac7aa505bf351fa938b646cf3f623075d983af..c84311ac4704cf83109d7b156f36d9e654930313 100644 (file)
@@ -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_boarddotto_board[MAX_DUPLICATE_EXPANSION_BOARDS];
-static struct ide_boarddev_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)