]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Dev IDE controller
authorToni Wilen <twilen@winuae.net>
Sat, 24 Apr 2021 16:58:30 +0000 (19:58 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 24 Apr 2021 16:58:30 +0000 (19:58 +0300)
expansion.cpp
idecontrollers.cpp

index d759f2b5236df8da6107277b0dcf9b5fc3099205..6ca216586f3cced12a102a0d0be489f1da769edf 100644 (file)
@@ -5073,6 +5073,25 @@ static const struct expansionboardsettings alf3_settings[] = {
                NULL
        }
 };
+static const struct expansionboardsettings dev_hd_settings[] = {
+       {
+               _T("Base address"),
+               _T("base")
+       },
+       {
+               _T("Register spacing"),
+               _T("spacing")
+       },
+       {
+               _T("Data port address"),
+               _T("dataport")
+       },
+       {
+               _T("Alternate register base address"),
+               _T("altbase")
+       }
+};
+
 static const struct expansionboardsettings cdtvsram_settings[] = {
        {
                _T("SRAM size\0") _T("64k\0") _T("128k\0") _T("256k\0"),
@@ -5794,7 +5813,10 @@ const struct expansionromtype expansionroms[] = {
                _T("dev_ide"), _T("DEV IDE"), NULL,
                NULL, dev_hd_init, NULL, dev_hd_add_ide_unit, ROMTYPE_DEVHD | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
                NULL, 0,
-               false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_IDE | EXPANSIONTYPE_SCSI
+               false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_IDE | EXPANSIONTYPE_SCSI,
+               0, 0, 0, false, NULL,
+               false, 0, dev_hd_settings
+
        },
 #endif
 
index 381a2cb5636df828c90a9a1348f366057425ee03..cf46733d1e1e54771418c7ad045068667e6a4549 100644 (file)
@@ -606,11 +606,13 @@ static int get_dev_hd_reg(uaecptr addr, struct ide_board* board)
        if (addr >= dev_hd_io_base && addr < dev_hd_io_base + dev_hd_io_total) {
                reg = (addr - dev_hd_io_base) / dev_hd_io_size;
                reg &= 7;
-               if (addr & dev_hd_io_secondary) {
-                       reg |= IDE_SECONDARY;
+               if (reg == 0) {
+                       write_log("invalid %08x\n", addr);
                }
-       } else if (addr >= dev_hd_data_base && addr < dev_hd_data_base + 4) {
+       } else if (addr >= dev_hd_data_base && addr < dev_hd_data_base + 0x100) {
                reg = 0;
+       } else {
+               write_log("out of range %08x\n", addr);
        }
        return reg;
 }
@@ -2957,7 +2959,7 @@ bool dev_hd_init(struct autoconfig_info* aci)
        dev_hd_io_size = 4;
        dev_hd_data_base = 0x4800;
        dev_hd_io_secondary = 0x1000;
-       dev_hd_io_total = 0x2000;
+       dev_hd_io_total = 8 * 4;
        if (!aci->doinit) {
                return true;
        }