From 006193b4ba792d78981a011cfad1e24ee65114a2 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 4 Sep 2015 19:53:13 +0300 Subject: [PATCH] ROM handling update. --- a2091.cpp | 24 +------- expansion.cpp | 84 +++++++++++++++++++++++---- gayle.cpp | 2 +- idecontrollers.cpp | 138 ++++++++++++++++++++++++++++----------------- include/devices.h | 1 + include/ide.h | 6 +- include/rommgr.h | 5 +- ncr9x_scsi.cpp | 24 ++------ ncr_scsi.cpp | 13 +---- rommgr.cpp | 83 ++++++++++++++++++++++----- scsi.cpp | 55 ++++-------------- 11 files changed, 259 insertions(+), 176 deletions(-) diff --git a/a2091.cpp b/a2091.cpp index 0e6bef8d..3bb74bd2 100644 --- a/a2091.cpp +++ b/a2091.cpp @@ -3475,7 +3475,6 @@ void a2091_reset (void) addrbank *a2091_init (struct romconfig *rc) { struct wd_state *wd = getscsi(rc); - int roms[6]; int slotsize; if (!wd) @@ -3504,13 +3503,6 @@ addrbank *a2091_init (struct romconfig *rc) ew (wd, 0x20, 0x00); /* ser.no. Byte 2 */ ew (wd, 0x24, 0x00); /* ser.no. Byte 3 */ - roms[0] = 55; // 7.0 - roms[1] = 54; // 6.6 - roms[2] = 53; // 6.0 - roms[3] = 56; // guru - roms[4] = 87; - roms[5] = -1; - wd->rombankswitcher = 0; wd->rombank = 0; slotsize = 65536; @@ -3519,7 +3511,7 @@ addrbank *a2091_init (struct romconfig *rc) wd->rom_size = 16384; wd->rom_mask = wd->rom_size - 1; if (!rc->autoboot_disabled) { - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_A2091); if (z) { wd->rom_size = zfile_size (z); zfile_fread (wd->rom, wd->rom_size, 1, z); @@ -3543,7 +3535,6 @@ addrbank *a2091_init (struct romconfig *rc) addrbank *a2090_init (struct romconfig *rc) { struct wd_state *wd = getscsi(rc); - int roms[6]; int slotsize; if (!wd) @@ -3573,9 +3564,6 @@ addrbank *a2090_init (struct romconfig *rc) //ew(wd, 0x30, 0x80); // SCSI only flag - roms[0] = 122; - roms[1] = -1; - wd->rombankswitcher = 0; wd->rombank = 0; slotsize = 65536; @@ -3584,7 +3572,7 @@ addrbank *a2090_init (struct romconfig *rc) wd->rom_size = 16384; wd->rom_mask = wd->rom_size - 1; if (!rc->autoboot_disabled) { - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_A2090); if (z) { wd->rom_size = zfile_size (z); zfile_fread (wd->rom, wd->rom_size, 1, z); @@ -3648,7 +3636,6 @@ static bool is_gvp_accelerator(void) static addrbank *gvp_init(struct romconfig *rc, bool series2, bool accel) { struct wd_state *wd = getscsi(rc); - int roms[6]; bool isscsi = true; const uae_u8 *ac; int romtype; @@ -3672,11 +3659,6 @@ static addrbank *gvp_init(struct romconfig *rc, bool series2, bool accel) wd->gdmac.use_version = series2; wd->board_mask = 65535; - roms[0] = 109; - roms[1] = 110; - roms[2] = 111; - roms[3] = -1; - wd->rom_size = 32768; wd->rom = xcalloc(uae_u8, 2 * wd->rom_size); memset(wd->rom, 0xff, 2 * wd->rom_size); @@ -3704,7 +3686,7 @@ static addrbank *gvp_init(struct romconfig *rc, bool series2, bool accel) xfree(wd->gdmac.buffer); wd->gdmac.buffer = xcalloc(uae_u8, 16384); if (!rc->autoboot_disabled) { - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_GVPS2); if (z) { int size = zfile_size(z); if (series2) { diff --git a/expansion.cpp b/expansion.cpp index f5c42190..210f1f79 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -169,6 +169,7 @@ struct card_data struct romconfig *rc; const TCHAR *name; int flags; + int zorro; }; static struct card_data cards[MAX_EXPANSION_BOARD_SPACE]; @@ -509,10 +510,19 @@ void expamem_next (addrbank *mapped, addrbank *next) expamem_init_clear(); expamem_init_clear_zero(); - ++ecard; - if (ecard < cardno) { - call_card_init(ecard); - } else { + for (;;) { + ++ecard; + if (ecard >= cardno) + break; + struct card_data *ec = &cards[ecard]; + if (ec->initrc && ec->zorro == BOARD_NONAUTOCONFIG) { + ec->initrc(cards[ecard].rc); + } else { + call_card_init(ecard); + break; + } + } + if (ecard >= cardno) { expamem_init_clear2(); expamem_init_last(); } @@ -1903,11 +1913,13 @@ static void add_cpu_expansions(int zorro) cards[cardno].name = cst->name; cards[cardno].initrc = cst->init; cards[cardno].rc = rc; + cards[cardno].zorro = zorro; cards[cardno++].map = NULL; if (cst->init2) { cards[cardno].flags = cst->initflag; cards[cardno].name = cst->name; cards[cardno].initrc = cst->init2; + cards[cardno].zorro = zorro; cards[cardno++].map = NULL; } } @@ -1950,12 +1962,14 @@ static void add_expansions(int zorro) cards[cardno].name = ert->name; cards[cardno].initrc = ert->init; cards[cardno].rc = rc; + cards[cardno].zorro = zorro; cards[cardno++].map = NULL; if (ert->init2) { cards[cardno].flags = 0; cards[cardno].name = ert->name; cards[cardno].initrc = ert->init2; cards[cardno].rc = rc; + cards[cardno].zorro = zorro; cards[cardno++].map = NULL; } } @@ -2552,7 +2566,7 @@ static const struct expansionboardsettings bridge_settings[] = { } }; -static const struct expansionboardsettings x86at_bridge_settings[] = { +static const struct expansionboardsettings x86at286_bridge_settings[] = { { // 14 _T("Default video\0") _T("Monochrome\0") _T("Color\0"), @@ -2566,8 +2580,8 @@ static const struct expansionboardsettings x86at_bridge_settings[] = { false }, { // 16 - 18 - _T("Memory\0") _T("1M\0") _T("2M\0") _T("4M\0") _T("8M\0") _T("16M\0") _T("32M\0"), - _T("memory\0") _T("1M\0") _T("2M\0") _T("4M\0") _T("8M\0") _T("16M\0") _T("32M\0"), + _T("Memory\0") _T("1M\0") _T("2M\0") _T("4M\0") _T("8M\0") _T("16M\0"), + _T("memory\0") _T("1M\0") _T("2M\0") _T("4M\0") _T("8M\0") _T("16M\0"), true, false, 0 }, { // 19 - 20 @@ -2580,11 +2594,47 @@ static const struct expansionboardsettings x86at_bridge_settings[] = { _T("fpu"), false, false, 1 }, + { // 23 - 25 + _T("CPU Arch\0") _T("auto") _T("386\0") _T("386_prefetch\0") _T("386_slow\0") _T("486_slow\0") _T("486_prefetch\0") _T("pentium_slow\0"), + _T("cpuarch\0") _T("auto") _T("386\0") _T("386_prefetch\0") _T("386_slow\0") _T("486_slow\0") _T("486_prefetch\0") _T("pentium_slow\0"), + true, false, 0 + }, { NULL } }; +static const struct expansionboardsettings x86at386_bridge_settings[] = { + { + // 15 + _T("Keyboard lock"), + _T("keylock"), + false, false, 15 + }, + { // 16 - 18 + _T("Memory\0") _T("1M\0") _T("2M\0") _T("4M\0") _T("8M\0") _T("16M\0") _T("32M\0") _T("64M\0"), + _T("memory\0") _T("1M\0") _T("2M\0") _T("4M\0") _T("8M\0") _T("16M\0") _T("32M\0") _T("64M\0"), + true, false, 0 + }, + { // 19 - 20 + _T("CPU core\0") _T("DOSBox simple\0") _T("DOSBox normal\0") _T("DOSBox full\0") _T("DOSBox auto\0"), + _T("cpu\0") _T("dbsimple\0") _T("dbnormal\0") _T("dbfull\0") _T("dbauto\0"), + true, false, 0 + }, + { // 22 + _T("FPU"), + _T("fpu"), + false, false, 1 + }, + { // 23 - 25 + _T("CPU Arch\0") _T("auto\0") _T("386\0") _T("386_prefetch\0") _T("386_slow\0") _T("486_slow\0") _T("486_prefetch\0") _T("pentium_slow\0"), + _T("cpuarch\0") _T("auto\0") _T("386\0") _T("386_prefetch\0") _T("386_slow\0") _T("486_slow\0") _T("486_prefetch\0") _T("pentium_slow\0"), + true, false, 0 + }, + { + NULL + } +}; static const struct expansionboardsettings x86_bridge_settings[] = { { @@ -2673,6 +2723,17 @@ static const struct expansionboardsettings x86_bridge_sidecar_settings[] = { } }; +static const struct expansionboardsettings x86_athdxt_settings[] = { + { + _T("ROM Address\0") _T("0xCC000\0") _T("0xDC000\0") _T("0xEC000\0"), + _T("baseaddress\0") _T("0xcc000\0") _T("0xdc000\0") _T("0xec000\0"), + true + }, + { + NULL + } +}; + static void fastlane_memory_callback(struct romconfig *rc, uae_u8 *ac, int size) { struct zfile *z = read_device_from_romconfig(rc, NULL); @@ -3082,7 +3143,10 @@ const struct expansionromtype expansionroms[] = { _T("x86athdxt"), _T("XTIDE Universal BIOS HD"), _T("x86"), x86_at_hd_init_xt, NULL, x86_add_at_hd_unit_xt, ROMTYPE_X86_XT_IDE | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG, true, NULL, 0, - false, EXPANSIONTYPE_IDE + false, EXPANSIONTYPE_IDE, + 0, 0, 0, false, NULL, + false, + x86_athdxt_settings }, { @@ -3119,7 +3183,7 @@ const struct expansionromtype expansionroms[] = { false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, false, - x86at_bridge_settings + x86at286_bridge_settings }, { _T("a2386"), _T("A2386SX"), _T("Commodore"), @@ -3128,7 +3192,7 @@ const struct expansionromtype expansionroms[] = { false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, false, - x86at_bridge_settings + x86at386_bridge_settings }, // only here for rom selection diff --git a/gayle.cpp b/gayle.cpp index 6c818ea8..0bbe894e 100644 --- a/gayle.cpp +++ b/gayle.cpp @@ -552,7 +552,7 @@ static bool isdataflyerscsiplus(uaecptr addr, uae_u32 *v, int size) break; case 3: *v = 0; - if (ide_irq_check(idedrive[0])) + if (ide_irq_check(idedrive[0], false)) *v = dataflyer_byte; break; case 4: // select SCSI diff --git a/idecontrollers.cpp b/idecontrollers.cpp index f5bd7755..717be7f7 100644 --- a/idecontrollers.cpp +++ b/idecontrollers.cpp @@ -202,14 +202,14 @@ static void add_ide_standard_unit(int ch, struct uaedev_config_info *ci, struct init_ide(ideb, idetype + ci->controller_type_unit, maxunit, byteswap, adide); } -static bool ide_interrupt_check(struct ide_board *board) +static bool ide_interrupt_check(struct ide_board *board, bool edge_triggered) { if (!board->configured) return false; bool irq = false; for (int i = 0; i < MAX_IDE_PORTS_BOARD; i++) { if (board->ide[i] && !irq) { - irq = ide_irq_check(board->ide[i]); + irq = ide_irq_check(board->ide[i], edge_triggered); } } #if 0 @@ -220,11 +220,11 @@ static bool ide_interrupt_check(struct ide_board *board) return irq; } -static bool ide_rethink(struct ide_board *board) +static bool ide_rethink(struct ide_board *board, bool edge_triggered) { bool irq = false; if (board->configured) { - if (board->intena && ide_interrupt_check(board)) { + if (board->intena && ide_interrupt_check(board, edge_triggered)) { irq = true; } } @@ -238,12 +238,13 @@ void idecontroller_rethink(void) bool irq = false; for (int i = 0; ide_boards[i]; i++) { if (ide_boards[i] == x86_at_ide_board[0] || ide_boards[i] == x86_at_ide_board[1]) { - bool x86irq = ide_rethink(ide_boards[i]); + bool x86irq = ide_rethink(ide_boards[i], true); if (x86irq) { + //write_log(_T("x86 IDE IRQ\n")); x86_doirq(ide_boards[i] == x86_at_ide_board[0] ? 14 : 15); } } else { - irq |= ide_rethink(ide_boards[i]); + irq |= ide_rethink(ide_boards[i], false); } } if (irq && !(intreq & 0x0008)) { @@ -261,7 +262,7 @@ void idecontroller_hsync(void) ide_interrupt_hsync(board->ide[j]); } } - if (ide_interrupt_check(board)) { + if (ide_interrupt_check(board, false)) { idecontroller_rethink(); } } @@ -303,6 +304,16 @@ static bool is_gvp1_intreq(uaecptr addr) return false; } +static bool get_ide_is_8bit(struct ide_board *board) +{ + struct ide_hdf *ide = board->ide[0]; + if (!ide) + return false; + if (ide->ide_drv) + ide = ide->pair; + return ide->mode_8bit; +} + static uae_u32 get_ide_reg_multi(struct ide_board *board, int reg, int portnum, int dataportsize) { struct ide_hdf *ide = board->ide[portnum]; @@ -496,7 +507,7 @@ static uae_u32 ide_read_byte(struct ide_board *board, uaecptr addr) v = masoboshi_ncr9x_scsi_get(oaddr, getidenum(board, masoboshi_board)); } else if (addr == 0xf040) { v = 1; - if (ide_irq_check(board->ide[0])) { + if (ide_irq_check(board->ide[0], false)) { v |= 2; board->irq = true; } @@ -575,13 +586,13 @@ static uae_u32 ide_read_byte(struct ide_board *board, uaecptr addr) #if DEBUG_IDE_GVP write_log(_T("GVP IRQ %02x\n"), v); #endif - ide_interrupt_check(board); + ide_interrupt_check(board, false); } else if (is_gvp1_intreq(addr)) { v = board->irq ? 0x80 : 0x00; #if DEBUG_IDE_GVP write_log(_T("GVP IRQ %02x\n"), v); #endif - ide_interrupt_check(board); + ide_interrupt_check(board, false); } } } else { @@ -1103,7 +1114,6 @@ static const uae_u8 gvp_ide1_controller_autoconfig[16] = { 0xd1, 0x08, 0x00, 0x0 addrbank *gvp_ide_rom_autoconfig_init(struct romconfig *rc) { struct ide_board *ide = getide(rc); - int roms[2]; const uae_u8 *autoconfig; if (ISCPUBOARD(BOARD_GVP, BOARD_GVP_SUB_A3001SI)) { @@ -1114,13 +1124,10 @@ addrbank *gvp_ide_rom_autoconfig_init(struct romconfig *rc) gvp_ide_controller_board->intena = true; ide->intena = true; gvp_ide_controller_board->configured = -1; - roms[0] = 114; - roms[1] = -1; } else { ide->bank = &gvp_ide_rom_bank; autoconfig = gvp_ide2_rom_autoconfig; ide->rom_size = 16384; - roms[0] = -1; } ide->configured = 0; ide->mask = 65536 - 1; @@ -1132,7 +1139,7 @@ addrbank *gvp_ide_rom_autoconfig_init(struct romconfig *rc) memset(ide->rom, 0xff, ide->rom_size); ide->rom_mask = ide->rom_size - 1; - load_rom_rc(rc, roms, ide->rom_size, 0, ide->rom, ide->rom_size, LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_CB_A3001S1, ide->rom_size, 0, ide->rom, ide->rom_size, LOADROM_FILL); for (int i = 0; i < 16; i++) { uae_u8 b = autoconfig[i]; ew(ide, i * 4, b); @@ -1172,7 +1179,6 @@ static const uae_u8 alfplus_autoconfig[16] = { 0xd1, 38, 0x00, 0x00, 0x08, 0x2c, addrbank *alf_init(struct romconfig *rc) { struct ide_board *ide = getide(rc); - int roms[2]; bool alfplus = cfgfile_board_enabled(&currprefs, ROMTYPE_ALFAPLUS, 0); if (!ide) @@ -1180,9 +1186,6 @@ addrbank *alf_init(struct romconfig *rc) ide->configured = 0; - roms[0] = alfplus ? 118 : 117; - roms[1] = -1; - ide->configured = 0; ide->bank = &ide_bank_generic; ide->type = ALF_IDE; @@ -1203,7 +1206,7 @@ addrbank *alf_init(struct romconfig *rc) } if (!rc->autoboot_disabled) { - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, alfplus ? ROMTYPE_ALFAPLUS : ROMTYPE_ALFA); if (z) { for (int i = 0; i < 0x1000 / 2; i++) { uae_u8 b; @@ -1241,13 +1244,11 @@ const uae_u8 apollo_autoconfig_cpuboard_060[16] = { 0xd2, 0x23, 0x00, 0x00, 0x22 static addrbank *apollo_init(struct romconfig *rc, bool cpuboard) { struct ide_board *ide = getide(rc); - int roms[2]; const uae_u8 *autoconfig; if (!ide) return &expamem_null; - roms[0] = -1; ide->configured = 0; ide->bank = &ide_bank_generic; ide->rom_size = 32768; @@ -1272,7 +1273,7 @@ static addrbank *apollo_init(struct romconfig *rc, bool cpuboard) } if (cpuboard) { ide->mask = 131072 - 1; - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_APOLLO); if (z) { int len = zfile_size(z); // skip 68060 $f0 ROM block @@ -1287,7 +1288,7 @@ static addrbank *apollo_init(struct romconfig *rc, bool cpuboard) } } else { ide->mask = 65536 - 1; - load_rom_rc(rc, roms, 16384, 0, ide->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_APOLLO, 16384, 0, ide->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); } return ide->bank; } @@ -1309,15 +1310,12 @@ void apollo_add_ide_unit(int ch, struct uaedev_config_info *ci, struct romconfig addrbank *masoboshi_init(struct romconfig *rc) { struct ide_board *ide = getide(rc); - int roms[2]; if (!ide) return &expamem_null; ide->configured = 0; - roms[0] = 120; - roms[1] = -1; ide->configured = 0; ide->bank = &ide_bank_generic; ide->type = MASOBOSHI_IDE; @@ -1330,7 +1328,7 @@ addrbank *masoboshi_init(struct romconfig *rc) memset(ide->acmemory, 0xff, sizeof ide->acmemory); ide->rom_mask = ide->rom_size - 1; - load_rom_rc(rc, roms, 32768, 0, ide->rom, 65536, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_MASOBOSHI, 32768, 0, ide->rom, 65536, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); ide->subtype = rc->subtype; if (rc && rc->autoboot_disabled) memcpy(ide->acmemory, ide->rom + 0x100, sizeof ide->acmemory); @@ -1363,10 +1361,7 @@ static const uae_u8 adide_autoconfig[16] = { 0xd1, 0x02, 0x00, 0x00, 0x08, 0x17, addrbank *adide_init(struct romconfig *rc) { struct ide_board *ide = getide(rc); - int roms[2]; - roms[0] = 129; - roms[1] = -1; ide->configured = 0; ide->keepautoconfig = false; ide->bank = &ide_bank_generic; @@ -1379,7 +1374,7 @@ addrbank *adide_init(struct romconfig *rc) memset(ide->rom, 0xff, ide->rom_size); ide->rom_mask = ide->rom_size - 1; if (!rc->autoboot_disabled) { - load_rom_rc(rc, roms, 16384, 0, ide->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_ADIDE, 16384, 0, ide->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); } for (int i = 0; i < 16; i++) { uae_u8 b = adide_autoconfig[i]; @@ -1396,10 +1391,7 @@ void adide_add_ide_unit(int ch, struct uaedev_config_info *ci, struct romconfig addrbank *mtec_init(struct romconfig *rc) { struct ide_board *ide = getide(rc); - int roms[2]; - roms[0] = 130; - roms[1] = -1; ide->configured = 0; ide->bank = &ide_bank_generic; ide->rom_size = 32768; @@ -1410,7 +1402,7 @@ addrbank *mtec_init(struct romconfig *rc) ide->rom = xcalloc(uae_u8, ide->rom_size); memset(ide->rom, 0xff, ide->rom_size); ide->rom_mask = ide->rom_size - 1; - load_rom_rc(rc, roms, 16384, !rc->autoboot_disabled ? 16384 : 0, ide->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_MTEC, 16384, !rc->autoboot_disabled ? 16384 : 0, ide->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); memcpy(ide->acmemory, ide->rom, sizeof ide->acmemory); return ide->bank; } @@ -1423,11 +1415,7 @@ void mtec_add_ide_unit(int ch, struct uaedev_config_info *ci, struct romconfig * addrbank *rochard_init(struct romconfig *rc) { struct ide_board *ide = getide(rc); - int roms[3]; - roms[0] = 138; - roms[1] = 146; - roms[2] = -1; ide->configured = 0; ide->bank = &ide_bank_generic; ide->rom_size = 32768; @@ -1439,7 +1427,7 @@ addrbank *rochard_init(struct romconfig *rc) ide->rom = xcalloc(uae_u8, ide->rom_size); memset(ide->rom, 0xff, ide->rom_size); ide->rom_mask = ide->rom_size - 1; - load_rom_rc(rc, roms, 8192, !rc->autoboot_disabled ? 8192 : 0, ide->rom, 16384, 0); + load_rom_rc(rc, ROMTYPE_ROCHARD, 8192, !rc->autoboot_disabled ? 8192 : 0, ide->rom, 16384, 0); memcpy(ide->acmemory, ide->rom, sizeof ide->acmemory); return ide->bank; } @@ -1462,7 +1450,7 @@ void rochard_add_idescsi_unit(int ch, struct uaedev_config_info *ci, struct romc } } -extern void x86_xt_ide_bios(struct zfile*); +extern void x86_xt_ide_bios(struct zfile*, struct romconfig*); static addrbank *x86_at_hd_init(struct romconfig *rc, int type) { struct ide_board *ide = getide(rc); @@ -1476,7 +1464,7 @@ static addrbank *x86_at_hd_init(struct romconfig *rc, int type) struct zfile *f = read_device_from_romconfig(rc, NULL); if (f) { - x86_xt_ide_bios(f); + x86_xt_ide_bios(f, rc); zfile_fclose(f); } @@ -1514,21 +1502,33 @@ static int x86_ide_reg(int portnum, int *unit) *unit = 0; return portnum & 7; } + if (portnum == 0x3f6) { + *unit = 0; + return 6 | IDE_SECONDARY; + } if (portnum >= 0x170 && portnum < 0x178) { *unit = 1; return portnum & 7; } + if (portnum == 0x376) { + *unit = 1; + return 6 | IDE_SECONDARY; + } if (portnum >= 0x300 && portnum < 0x310) { *unit = 2; + if (portnum < 0x308) + return portnum & 7; + if (portnum == 0x308) + return 8; if (portnum >= 0x308+6) return (portnum & 7) | IDE_SECONDARY; - return portnum & 7; } return -1; } void x86_ide_hd_put(int portnum, uae_u16 v, int size) { + if (portnum < 0) { for (int i = 0; i < MAX_DUPLICATE_EXPANSION_BOARDS; i++) { struct ide_board *board = x86_at_ide_board[i]; @@ -1542,10 +1542,27 @@ void x86_ide_hd_put(int portnum, uae_u16 v, int size) if (regnum >= 0) { struct ide_board *board = x86_at_ide_board[unit]; if (board) { - if (size == 0) - put_ide_reg_8bitdata(board, regnum, v); - else - put_ide_reg(board, regnum, v); +#if 0 + if (regnum == 0 || regnum == 8) + write_log(_T("WRITE %04x = %04x %d\n"), portnum, v, size); +#endif + if (size == 0) { + if (get_ide_is_8bit(board)) { + v = get_ide_reg_8bitdata(board, regnum); + } else { + if (regnum == 8) { + board->data_latch = v; + } else if (regnum == 0) { + v <<= 8; + v |= board->data_latch; + put_ide_reg(board, regnum, v); + } else { + put_ide_reg_8bitdata(board, regnum, v); + } + } + } else { + put_ide_reg(board, regnum, (v >> 8) | (v << 8)); + } } } } @@ -1557,11 +1574,28 @@ uae_u16 x86_ide_hd_get(int portnum, int size) if (regnum >= 0) { struct ide_board *board = x86_at_ide_board[unit]; if (board) { - if (size == 0) - v = get_ide_reg_8bitdata(board, regnum); - else - v = get_ide_reg(board, regnum); + if (size == 0) { + if (get_ide_is_8bit(board)) { + v = get_ide_reg_8bitdata(board, regnum); + } else { + if (regnum == 0) { + board->data_latch = get_ide_reg(board, regnum); + v = board->data_latch >> 8; + } else if (regnum == 8) { + v = board->data_latch; + } else { + v = get_ide_reg_8bitdata(board, regnum & 7); + } + } + } else { + v = get_ide_reg(board, regnum); + v = (v >> 8) | (v << 8); + } +#if 0 + if (regnum == 0 || regnum == 8) + write_log(_T("READ %04x = %04x %d\n"), portnum, v, size); +#endif } } return v; diff --git a/include/devices.h b/include/devices.h index 54aad0dc..f9df2154 100644 --- a/include/devices.h +++ b/include/devices.h @@ -4,6 +4,7 @@ void devices_vsync_pre(void); void devices_vsync_post(void); void devices_hsync(void); void devices_rethink(void); +void devices_syncchange(void); void devices_update_sound(double clk, double syncadjust); void devices_update_sync(double svpos, double syncadjust); void reset_all_systems(void); diff --git a/include/ide.h b/include/ide.h index 689e4b34..a0f2855d 100644 --- a/include/ide.h +++ b/include/ide.h @@ -43,6 +43,7 @@ struct ide_board int type; int userdata; int subtype; + uae_u16 data_latch; struct romconfig *rc, *original_rc; struct ide_board **self_ptr; }; @@ -57,6 +58,7 @@ struct ide_hdf struct ide_hdf *pair; // master<>slave struct ide_thread_state *its; bool byteswap; + int byteswapped_buffer; bool adide; uae_u8 *secbuf; @@ -74,12 +76,14 @@ struct ide_hdf uae_u8 multiple_mode; int irq_delay; int irq; + bool irq_new; int num; int blocksize; int maxtransferstate; int ata_level; int ide_drv; int media_type; + bool mode_8bit; bool atapi; bool atapi_drdy; @@ -107,7 +111,7 @@ void ide_put_data_8bit(struct ide_hdf *ide, uae_u8 v); uae_u8 ide_get_data_8bit(struct ide_hdf *ide); bool ide_interrupt_hsync(struct ide_hdf *ide); -bool ide_irq_check(struct ide_hdf *ide); +bool ide_irq_check(struct ide_hdf *ide, bool edge_triggered); bool ide_drq_check(struct ide_hdf *ide); bool ide_isdrive(struct ide_hdf *ide); void ide_initialize(struct ide_hdf **idetable, int chpair); diff --git a/include/rommgr.h b/include/rommgr.h index 035ef895..868e9b95 100644 --- a/include/rommgr.h +++ b/include/rommgr.h @@ -158,6 +158,7 @@ extern void getromname (const struct romdata*, TCHAR*); extern struct romdata *getromdatabyname (const TCHAR*); extern struct romlist *getromlistbyids (const int *ids, const TCHAR *romname); extern struct romdata *getromdatabyids (const int *ids); +extern struct romlist *getromlistbyromtype(uae_u32 romtype); extern void romwarning(const int *ids); extern struct romlist *getromlistbyromdata (const struct romdata *rd); extern void romlist_add (const TCHAR *path, struct romdata *rd); @@ -165,7 +166,7 @@ extern TCHAR *romlist_get (const struct romdata *rd); extern void romlist_clear (void); extern struct zfile *read_rom (struct romdata *rd); extern struct zfile *read_rom_name (const TCHAR *filename); -extern struct zfile *read_device_from_romconfig(struct romconfig *rc, const int *roms); +extern struct zfile *read_device_from_romconfig(struct romconfig *rc, uae_u32 romtype); extern int load_keyring (struct uae_prefs *p, const TCHAR *path); extern uae_u8 *target_load_keyfile (struct uae_prefs *p, const TCHAR *path, int *size, TCHAR *name); @@ -199,4 +200,4 @@ struct boardromconfig *get_boardromconfig(struct uae_prefs *p, int romtype, int #define LOADROM_ONEFILL 4 #define LOADROM_ZEROFILL 8 #define LOADROM_ODDFILL(x) ((x << 16) | LOADROM_EVENONLY) -bool load_rom_rc(struct romconfig *rc, const int *roms, int maxfilesize, int fileoffset, uae_u8 *rom, int maxromsize, int flags); \ No newline at end of file +bool load_rom_rc(struct romconfig *rc, uae_u32 romtype, int maxfilesize, int fileoffset, uae_u8 *rom, int maxromsize, int flags); \ No newline at end of file diff --git a/ncr9x_scsi.cpp b/ncr9x_scsi.cpp index fbeda730..baaa8b57 100644 --- a/ncr9x_scsi.cpp +++ b/ncr9x_scsi.cpp @@ -1362,7 +1362,6 @@ void ncr9x_reset(void) addrbank *ncr_fastlane_autoconfig_init(struct romconfig *rc) { - int roms[2]; struct ncr9x_state *ncr = getscsi(rc); xfree(ncr->rom); @@ -1371,9 +1370,6 @@ addrbank *ncr_fastlane_autoconfig_init(struct romconfig *rc) if (!ncr) return &expamem_null; - roms[0] = 102; - roms[1] = -1; - ncr->enabled = true; memset (ncr->acmemory, 0xff, sizeof ncr->acmemory); ncr->rom_start = 0x800; @@ -1385,7 +1381,7 @@ addrbank *ncr_fastlane_autoconfig_init(struct romconfig *rc) ncr9x_reset_board(ncr); - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_FASTLANE); ncr->rom = xcalloc (uae_u8, FASTLANE_ROM_SIZE * 4); if (z) { // memory board at offset 0x100 @@ -1421,7 +1417,6 @@ static const uae_u8 oktagon_eeprom[16] = addrbank *ncr_oktagon_autoconfig_init(struct romconfig *rc) { - int roms[2]; struct ncr9x_state *ncr = getscsi(rc); if (!ncr) @@ -1432,9 +1427,6 @@ addrbank *ncr_oktagon_autoconfig_init(struct romconfig *rc) eeprom_free(ncr->eeprom); ncr->eeprom = NULL; - roms[0] = 103; - roms[1] = -1; - ncr->enabled = true; memset (ncr->acmemory, 0xff, sizeof ncr->acmemory); ncr->rom_start = 0; @@ -1454,7 +1446,7 @@ addrbank *ncr_oktagon_autoconfig_init(struct romconfig *rc) ncr9x_reset_board(ncr); if (!rc->autoboot_disabled) { - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_OKTAGON); if (z) { // memory board at offset 0x100 memset(ncr->rom, 0xff, OKTAGON_ROM_SIZE * 4); @@ -1486,7 +1478,6 @@ addrbank *ncr_oktagon_autoconfig_init(struct romconfig *rc) addrbank *ncr_dkb_autoconfig_init(struct romconfig *rc) { - int roms[2]; struct ncr9x_state *ncr = getscsi(rc); if (!ncr) @@ -1495,9 +1486,6 @@ addrbank *ncr_dkb_autoconfig_init(struct romconfig *rc) xfree(ncr->rom); ncr->rom = NULL; - roms[0] = 112; - roms[1] = -1; - ncr->enabled = true; memset (ncr->acmemory, 0xff, sizeof ncr->acmemory); ncr->rom_start = 0; @@ -1510,7 +1498,7 @@ addrbank *ncr_dkb_autoconfig_init(struct romconfig *rc) ncr9x_reset_board(ncr); - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_CB_DKB12x0); ncr->rom = xcalloc (uae_u8, DKB_ROM_SIZE * 2); if (z) { // memory board at offset 0x100 @@ -1538,7 +1526,6 @@ addrbank *ncr_dkb_autoconfig_init(struct romconfig *rc) addrbank *ncr_ematrix_autoconfig_init(struct romconfig *rc) { - int roms[2]; struct ncr9x_state *ncr = getscsi(rc); if (!ncr) @@ -1547,9 +1534,6 @@ addrbank *ncr_ematrix_autoconfig_init(struct romconfig *rc) xfree(ncr->rom); ncr->rom = NULL; - roms[0] = 144; - roms[1] = -1; - ncr->enabled = true; memset(ncr->acmemory, 0xff, sizeof ncr->acmemory); ncr->rom_start = 0; @@ -1562,7 +1546,7 @@ addrbank *ncr_ematrix_autoconfig_init(struct romconfig *rc) ncr9x_reset_board(ncr); - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_CB_EMATRIX); ncr->rom = xcalloc(uae_u8, 65536); if (z) { int i; diff --git a/ncr_scsi.cpp b/ncr_scsi.cpp index c7a6efee..d7553c0b 100644 --- a/ncr_scsi.cpp +++ b/ncr_scsi.cpp @@ -762,7 +762,6 @@ static const uae_u8 warpengine_a4000_autoconfig[16] = { addrbank *ncr710_warpengine_autoconfig_init(struct romconfig *rc) { - int roms[2]; struct ncr_state *ncr = getscsi(rc); if (!ncr) @@ -772,9 +771,6 @@ addrbank *ncr710_warpengine_autoconfig_init(struct romconfig *rc) xfree(ncr->rom); ncr->rom = NULL; - roms[0] = 93; - roms[1] = -1; - ncr->enabled = true; memset (ncr->acmemory, 0xff, sizeof ncr->acmemory); ncr->rom_start = 0x10; @@ -795,7 +791,7 @@ addrbank *ncr710_warpengine_autoconfig_init(struct romconfig *rc) ew(ncr, i * 4, b); } ncr->rom = xcalloc (uae_u8, WARP_ENGINE_ROM_SIZE * 4); - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_CB_WENGINE); if (z) { for (int i = 0; i < WARP_ENGINE_ROM_SIZE; i++) { uae_u8 b = 0xff; @@ -816,7 +812,6 @@ addrbank *ncr710_warpengine_autoconfig_init(struct romconfig *rc) addrbank *ncr710_a4091_autoconfig_init (struct romconfig *rc) { struct ncr_state *ncr = getscsi(rc); - int roms[3]; if (!ncr) return &expamem_null; @@ -824,10 +819,6 @@ addrbank *ncr710_a4091_autoconfig_init (struct romconfig *rc) xfree(ncr->rom); ncr->rom = NULL; - roms[0] = 58; - roms[1] = 57; - roms[2] = -1; - ncr->enabled = true; memset (ncr->acmemory, 0xff, sizeof ncr->acmemory); ncr->rom_start = 0; @@ -838,7 +829,7 @@ addrbank *ncr710_a4091_autoconfig_init (struct romconfig *rc) ncr_reset_board(ncr); - struct zfile *z = read_device_from_romconfig(rc, roms); + struct zfile *z = read_device_from_romconfig(rc, ROMTYPE_A4091); if (z) { ncr->rom = xmalloc (uae_u8, A4091_ROM_SIZE * 4); for (int i = 0; i < A4091_ROM_SIZE; i++) { diff --git a/rommgr.cpp b/rommgr.cpp index 49fffbc5..4f78779b 100644 --- a/rommgr.cpp +++ b/rommgr.cpp @@ -95,7 +95,7 @@ struct romdata *getromdatabypath (const TCHAR *path) return NULL; } -#define NEXT_ROM_ID 147 +#define NEXT_ROM_ID 156 static struct romheader romheaders[] = { { _T("Freezer Cartridges"), 1 }, @@ -450,6 +450,29 @@ static struct romdata roms[] = { { _T("Picasso IV"), 7, 4, 7, 4, _T("PIV\0"), 131072, 91, 0, 0, ROMTYPE_PIV, 0, 0, NULL, 0xa8133e7e, 0xcafafb91,0x6f16b9f3,0xec9b49aa,0x4b40eb4e,0xeceb5b5b }, + { _T("A1060 BIOS 2.06"), 2, 6, 2, 6, _T("A1060\0"), 16384, 147, 0, 0, ROMTYPE_A1060, 0, 0, _T("380619-03"), + 0x185f2bbd, 0xeba74ad1,0x000a5351,0xa5d99179,0xbf75f831,0xac2d2402, NULL, NULL }, + { _T("A2088 BIOS 3.4"), 3, 4, 3, 4, _T("A2088\0"), 16384, 148, 0, 0, ROMTYPE_A2088, 0, 0, _T("380788-04"), + 0x05552160, 0xd1defdee,0x1c0eae41,0x07d81e26,0x74915cd2,0x9d352f2e, NULL, NULL }, + { _T("A2088 BIOS 3.6.1"), 3, 61, 3, 61, _T("A2088\0"), 16384, 149, 0, 0, ROMTYPE_A2088, 0, 0, _T("380788-06"), + 0x5fd93e56, 0xc1b707a8,0xa62907d7,0x5299f10a,0xa60efd1f,0x44514b26, NULL, NULL }, + { _T("A2088T BIOS 4.10"), 4, 10, 4, 11, _T("A2088T\0"), 32768, 150, 0, 0, ROMTYPE_A2088T, 0, 0, _T("390657-02"), + 0x20c5d1a9, 0x08e3fbb7,0x28dfc514,0x24083313,0x373ea7a5,0xa2c3e965, NULL, NULL }, + { _T("A2088T BIOS 4.11"), 4, 11, 4, 11, _T("A2088T\0"), 32768, 151, 0, 0, ROMTYPE_A2088T, 0, 0, _T("390547-02"), + 0x074bc9b0, 0x2a3f56bc,0xe395f203,0x46eb68c4,0xade7153e,0x3e69f892, NULL, NULL }, + { _T("A2088T BIOS 4.12"), 4, 12, 4, 12, _T("A2088T\0"), 32768, 152, 0, 0, ROMTYPE_A2088T, 0, 0, _T("390547-03"), + 0x92447176, 0x582fa254,0x73aa2679,0xefcd41a5,0xbdadf1a2,0x6a87a75f, NULL, NULL }, + { _T("A2286 BIOS 3.6"), 3, 6, 3, 6, _T("A2286\0"), 32768, 153, 0, 0, ROMTYPE_A2286, 0, 0, NULL, + 0x63d75f70, 0x9f5d6c78,0x656d2fe7,0x36608644,0x771b6d30,0x31083264, NULL, NULL }, + ALTROMPN(153, 1, 1, 16384, ROMTYPE_ODD | ROMTYPE_8BIT, _T("380682-03"), 0xb3f76402, 0xef9ba5f2, 0x2714ad6d, 0xfa5e0aef, 0x2d09ce83, 0x578ee26d) + ALTROMPN(153, 1, 2, 16384, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("380683-03"), 0xab053693, 0x75229d80, 0x443fad78, 0xa298d04b, 0x37c8e6c3, 0x2c1b6df0) + { _T("A2286 BIOS 4.2"), 4, 2, 4, 2, _T("A2286\0"), 32768, 154, 0, 0, ROMTYPE_A2286, 0, 0, NULL, + 0xd572e205, 0x74fdf0f8,0x325fbc41,0x2b98c72d,0xf5095804,0x831c46b5, NULL, NULL }, + ALTROMPN(154, 1, 1, 16384, ROMTYPE_ODD | ROMTYPE_8BIT, _T("380682-04"), 0xc23dcd55, 0x38dc24b7, 0x14427b15, 0xd5214cc9, 0xb9be0de7, 0x20bd6a34) + ALTROMPN(154, 1, 2, 16384, ROMTYPE_EVEN | ROMTYPE_8BIT, _T("380683-04"), 0xdad80c0b, 0x12fe2916, 0x64f8c412, 0x3877a24e, 0x05837091, 0x44d8acd0) + { _T("A2386SX BIOS 1.0"), 1, 0, 1, 0, _T("A2386SX\0"), 65536, 155, 0, 0, ROMTYPE_A2386, 0, 0, NULL, + 0x37003e0c, 0x2e127e9c,0x8581d30c,0x2e46404b,0x21608e3c,0xe935fa27, NULL, NULL }, + { _T("Arcadia OnePlay 2.11"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 49, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 }, { _T("Arcadia TenPlay 2.11"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 50, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 }, { _T("Arcadia TenPlay 2.20"), 0, 0, 0, 0, _T("ARCADIA\0"), 0, 75, 0, 0, ROMTYPE_ARCADIABIOS, 0, 0 }, @@ -1149,6 +1172,22 @@ struct romlist *getromlistbyromdata (const struct romdata *rd) return getromlistbyids(ids, NULL); } +struct romlist *getromlistbyromtype(uae_u32 romtype) +{ + int i = 0; + while (roms[i].name) { + if (roms[i].type == romtype) { + struct romdata *rd = &roms[i]; + for (int j = 0; j < romlist_cnt; j++) { + if (rl[j].rd->id == rd->id) + return &rl[j]; + } + } + i++; + } + return NULL; +} + struct romlist *getromlistbyids (const int *ids, const TCHAR *romname) { struct romdata *rd; @@ -1740,19 +1779,28 @@ struct romconfig *get_device_romconfig(struct uae_prefs *p, int romtype, int dev return NULL; } -struct zfile *read_device_from_romconfig(struct romconfig *rc, const int *roms) +static bool isspecialrom(const TCHAR *name) { - if (!_tcsicmp(rc->romfile, _T(":NOROM"))) - return NULL; - struct zfile *z = read_rom_name (rc->romfile); - if (!z && roms) { - struct romlist *rl = getromlistbyids(roms, rc->romfile); + if (!_tcsicmp(name, _T(":NOROM"))) + return true; + if (!_tcsicmp(name, _T(":ENABLED"))) + return true; + return false; +} + +struct zfile *read_device_from_romconfig(struct romconfig *rc, uae_u32 romtype) +{ + struct zfile *z = NULL; + if (isspecialrom(rc->romfile)) + return z; + z = read_rom_name (rc->romfile); + if (z) + return z; + if (romtype) { + struct romlist *rl = getromlistbyromtype(romtype); if (rl) { struct romdata *rd = rl->rd; - z = read_rom (rd); - } - if (!z) { - romwarning (roms); + z = read_rom(rd); } } return z; @@ -1764,7 +1812,7 @@ struct zfile *read_device_rom(struct uae_prefs *p, int romtype, int devnum, int struct boardromconfig *brc = get_device_rom(p, romtype, devnum, &idx); if (brc) { const TCHAR *romname = brc->roms[idx].romfile; - if (!_tcsicmp(romname, _T(":NOROM"))) + if (isspecialrom(romname)) return NULL; struct zfile *z = read_rom_name (romname); if (!z && roms) { @@ -1787,7 +1835,7 @@ int is_device_rom(struct uae_prefs *p, int romtype, int devnum) const TCHAR *romname = brc->roms[idx].romfile; if (_tcslen(romname) == 0) return -1; - if (!_tcsicmp(romname, _T(":NOROM"))) + if (isspecialrom(romname)) return 0; return 1; } @@ -1813,24 +1861,27 @@ struct boardromconfig *get_boardromconfig(struct uae_prefs *p, int romtype, int return NULL; } -bool load_rom_rc(struct romconfig *rc, const int *roms, int maxfilesize, int fileoffset, uae_u8 *rom, int maxromsize, int flags) +bool load_rom_rc(struct romconfig *rc, uae_u32 romtype, int maxfilesize, int fileoffset, uae_u8 *rom, int maxromsize, int flags) { if (flags & LOADROM_ONEFILL) memset(rom, 0xff, maxromsize); if (flags & LOADROM_ZEROFILL) memset(rom, 0x00, maxromsize); - struct zfile *f = read_device_from_romconfig(rc, roms); + struct zfile *f = read_device_from_romconfig(rc, romtype); if (!f) return false; zfile_fseek(f, fileoffset, SEEK_SET); int cnt = 0; int pos = 0; + int bytes = 0; bool eof = false; while (cnt < maxromsize && cnt < maxfilesize && pos < maxromsize) { uae_u8 b = 0xff; if (!eof) { if (!zfile_fread(&b, 1, 1, f)) eof = true; + else + bytes++; } if (eof) { int bitcnt = 0; @@ -1851,6 +1902,8 @@ bool load_rom_rc(struct romconfig *rc, const int *roms, int maxfilesize, int fil } cnt++; } + if (f) + write_log(_T("ROM '%s' loaded, %d bytes.\n"), zfile_getname(f), bytes); zfile_fclose(f); int posend = pos; if (!(flags & LOADROM_FILL)) diff --git a/scsi.cpp b/scsi.cpp index 01579d2d..e1ec1cfd 100644 --- a/scsi.cpp +++ b/scsi.cpp @@ -3093,14 +3093,10 @@ uae_u32 soft_scsi_get(uaecptr addr, int size) addrbank *supra_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return &expamem_null; - roms[0] = 121; - roms[1] = -1; - scsi->intena = true; const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_SUPRA); @@ -3111,7 +3107,7 @@ addrbank *supra_init(struct romconfig *rc) uae_u8 b = ert->subtypes[rc->subtype].autoconfig[i]; ew(scsi, i * 4, b); } - load_rom_rc(rc, roms, 16384, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_SUPRA, 16384, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); } return scsi->bank; } @@ -3124,17 +3120,13 @@ void supra_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig addrbank *golem_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return &expamem_null; - roms[0] = 124; - roms[1] = -1; - scsi->intena = true; - load_rom_rc(rc, roms, 8192, rc->autoboot_disabled ? 8192 : 0, scsi->rom, 8192, 0); + load_rom_rc(rc, ROMTYPE_GOLEM, 8192, rc->autoboot_disabled ? 8192 : 0, scsi->rom, 8192, 0); memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory); return scsi->bank; @@ -3168,17 +3160,13 @@ void stardrive_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romco addrbank *kommos_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return NULL; scsi->configured = 1; - roms[0] = 127; - roms[1] = -1; - - load_rom_rc(rc, roms, 32768, 0, scsi->rom, 32768, 0); + load_rom_rc(rc, ROMTYPE_KOMMOS, 32768, 0, scsi->rom, 32768, 0); map_banks(scsi->bank, 0xf10000 >> 16, 1, 0); map_banks(scsi->bank, 0xeb0000 >> 16, 1, 0); @@ -3207,7 +3195,7 @@ addrbank *vector_init(struct romconfig *rc) scsi->intena = true; if (!rc->autoboot_disabled) { - load_rom_rc(rc, roms, 32768, 0, scsi->rom, 32768, 0); + load_rom_rc(rc, ROMTYPE_VECTOR, 32768, 0, scsi->rom, 32768, 0); memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory); } return scsi->bank; @@ -3222,15 +3210,11 @@ void vector_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfi addrbank *protar_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return &expamem_null; - roms[0] = 131; - roms[1] = -1; - - load_rom_rc(rc, roms, 32768, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE); + load_rom_rc(rc, ROMTYPE_PROTAR, 32768, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE); memcpy(scsi->acmemory, scsi->rom + 0x200 * 2, sizeof scsi->acmemory); return scsi->bank; } @@ -3243,15 +3227,11 @@ void protar_add_ide_unit(int ch, struct uaedev_config_info *ci, struct romconfig addrbank *add500_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return &expamem_null; - roms[0] = 132; - roms[1] = -1; - - load_rom_rc(rc, roms, 16384, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_ADD500, 16384, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory); return scsi->bank; } @@ -3264,17 +3244,14 @@ void add500_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfi addrbank *kronos_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return &expamem_null; - roms[0] = -1; - roms[1] = -1; scsi->databuffer_size = 1024; scsi->databufferptr = xcalloc(uae_u8, scsi->databuffer_size); - load_rom_rc(rc, roms, 4096, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_KRONOS, 4096, 0, scsi->rom, 32768, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); return scsi->bank; } @@ -3286,15 +3263,11 @@ void kronos_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfi addrbank *adscsi_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return &expamem_null; - roms[0] = 132; - roms[1] = -1; - - load_rom_rc(rc, roms, 32768, 0, scsi->rom, 65536, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_ADSCSI, 32768, 0, scsi->rom, 65536, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); memcpy(scsi->acmemory, scsi->rom, sizeof scsi->acmemory); return scsi->bank; } @@ -3352,14 +3325,10 @@ void cltda1000scsi_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct r addrbank *ptnexus_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); - int roms[2]; if (!scsi) return &expamem_null; - roms[0] = -1; - roms[1] = -1; - scsi->intena = true; scsi->delayed_irq = true; @@ -3369,7 +3338,7 @@ addrbank *ptnexus_init(struct romconfig *rc) ew(scsi, i * 4, b); } - load_rom_rc(rc, roms, 8192, 0, scsi->rom, 65536, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); + load_rom_rc(rc, ROMTYPE_PTNEXUS, 8192, 0, scsi->rom, 65536, LOADROM_EVENONLY_ODDONE | LOADROM_FILL); return scsi->bank; } @@ -3645,15 +3614,15 @@ void omtiadapter_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconf generic_soft_scsi_add(ch, ci, rc, OMTI_ADAPTER, 65536, 0, ROMTYPE_OMTIADAPTER); } -extern void x86_xt_ide_bios(struct zfile*); +extern void x86_xt_ide_bios(struct zfile*, struct romconfig *rc); addrbank *x86_xt_hd_init(struct romconfig *rc) { struct soft_scsi *scsi = getscsi(rc); if (!scsi) return NULL; - struct zfile *f = read_device_from_romconfig(rc, NULL); - x86_xt_ide_bios(f); + struct zfile *f = read_device_from_romconfig(rc, 0); + x86_xt_ide_bios(f, rc); zfile_fclose(f); scsi->configured = 1; x86_hd_data = scsi; -- 2.47.3