From: Toni Wilen Date: Sun, 2 Jul 2017 07:47:12 +0000 (+0300) Subject: Combitec A2090 and AddHard emulation. X-Git-Tag: 3600~178 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=bfb9febce0ab732629987997330cc30cab89791e;p=francis%2Fwinuae.git Combitec A2090 and AddHard emulation. --- diff --git a/a2091.cpp b/a2091.cpp index f2927596..f915878f 100644 --- a/a2091.cpp +++ b/a2091.cpp @@ -292,6 +292,10 @@ static void freencrunit(struct wd_state *wd) free_expansion_bank(&wd->bank); else xfree (wd->rom); + if (wd->rom2 >= wd->bank2.baseaddr && wd->rom2 < wd->bank2.baseaddr + wd->bank2.allocated_size) + mapped_free(&wd->bank2); + else + xfree (wd->rom2); xfree(wd->userdata); wd->rom = NULL; if (wd->self_ptr) @@ -2065,6 +2069,14 @@ static uae_u32 dmac_a2091_read_word (struct wd_state *wd, uaecptr addr) { uae_u32 v = 0; + if (wd->configured == 0xf1) { + if (wd->rom && !(addr & 0x8000)) { + int off = addr & wd->rom_mask; + return (wd->rom[off] << 8) | wd->rom[off + 1]; + } + return 0; + } + if (addr < 0x40) return (wd->dmacmemory[addr] << 8) | wd->dmacmemory[addr + 1]; @@ -2179,6 +2191,14 @@ static uae_u32 dmac_a2091_read_byte (struct wd_state *wd, uaecptr addr) { uae_u32 v = 0; + if (wd->configured == 0xf1) { + if (wd->rom && !(addr & 0x8000)) { + int off = addr & wd->rom_mask; + return wd->rom[off]; + } + return 0; + } + if (addr < 0x40) return wd->dmacmemory[addr]; @@ -2263,6 +2283,10 @@ static void dmac_a2091_write_word (struct wd_state *wd, uaecptr addr, uae_u32 b) write_log (_T("dmac_wput %04X=%04X PC=%08X\n"), addr, b & 65535, M68K_GETPC); #endif + if (wd->configured == 0xf1) { + return; + } + if (addr < 0x40) return; @@ -2376,6 +2400,10 @@ static void dmac_a2091_write_byte (struct wd_state *wd, uaecptr addr, uae_u32 b) write_log (_T("dmac_bput %04X=%02X PC=%08X\n"), addr, b & 255, M68K_GETPC); #endif + if (wd->configured == 0xf1) { + return; + } + if (addr < 0x40) return; @@ -2514,7 +2542,7 @@ static uae_u32 REGPARAM2 dmac_a2091_wgeti(struct wd_state *wd, uaecptr addr) { uae_u32 v = 0xffff; addr &= 65535; - if (addr >= CDMAC_ROM_OFFSET) + if (addr >= CDMAC_ROM_OFFSET || wd->configured == 0xf1) v = (wd->rom[addr & wd->rom_mask] << 8) | wd->rom[(addr + 1) & wd->rom_mask]; else write_log(_T("Invalid DMAC instruction access %08x\n"), addr); @@ -2619,6 +2647,58 @@ static const addrbank dmaca2091_bank = { ABFLAG_IO | ABFLAG_SAFE | ABFLAG_PPCIOSPACE, S_READ, S_WRITE }; +static void REGPARAM2 combitec_put(uaecptr addr, uae_u32 b) +{ +} +static uae_u32 REGPARAM2 combitec_bget(uaecptr addr) +{ + struct wd_state *wd = getscsiboard(addr); + if (!wd) + return 0; + addr &= 65535; + uae_u32 v = wd->rom2[addr & wd->rom2_mask]; + return v; +} +static uae_u32 REGPARAM2 combitec_wget(uaecptr addr) +{ + struct wd_state *wd = getscsiboard(addr); + if (!wd) + return 0; + addr &= 65535; + uae_u32 v = (wd->rom2[addr & wd->rom2_mask] << 8) | wd->rom2[(addr + 1) & wd->rom2_mask]; + return v; +} +static uae_u32 REGPARAM2 combitec_lget(uaecptr addr) +{ + uae_u32 v; + addr &= 65535; + v = combitec_wget(addr) << 16; + v |= combitec_wget(addr + 2); + return v; +} +static int REGPARAM2 combitec_check(uaecptr addr, uae_u32 size) +{ + struct wd_state *wd = getscsiboard(addr); + if (!wd) + return 0; + return 1; +} +static uae_u8 *REGPARAM2 combitec_xlate(uaecptr addr) +{ + struct wd_state *wd = getscsiboard(addr); + if (!wd) + return NULL; + addr &= 0xffff; + return wd->rom + addr; +} +static const addrbank combitec_bank = { + combitec_lget, combitec_wget, combitec_bget, + combitec_put, combitec_put, combitec_put, + combitec_xlate, combitec_check, NULL, _T("*"), _T("A2090 Combitec"), + combitec_lget, combitec_wget, + ABFLAG_IO | ABFLAG_SAFE | ABFLAG_PPCIOSPACE, S_READ, S_WRITE +}; + static bool comspec_wd_aux(uaecptr addr) { return addr == 0xc1; @@ -3939,7 +4019,7 @@ bool a2091_init (struct autoconfig_info *aci) return true; } -bool a2090_init (struct autoconfig_info *aci) +static bool a2090x_init (struct autoconfig_info *aci, bool combitec) { ew(aci->autoconfig_raw, 0x00, 0xc0 | 0x01 | 0x10); /* A590/A2091 hardware id */ @@ -3957,8 +4037,9 @@ bool a2090_init (struct autoconfig_info *aci) ew(aci->autoconfig_raw, 0x24, 0x00); /* ser.no. Byte 3 */ aci->label = _T("A2090"); - if (!aci->doinit) + if (!aci->doinit) { return true; + } struct wd_state *wd = getscsi(aci->rc); int slotsize; @@ -3986,7 +4067,7 @@ bool a2090_init (struct autoconfig_info *aci) memset(wd->rom, 0xff, slotsize); wd->rom_size = 16384; wd->rom_mask = wd->rom_size - 1; - if (!aci->rc->autoboot_disabled) { + if (!aci->rc->autoboot_disabled && !combitec) { struct zfile *z = read_device_from_romconfig(aci->rc, ROMTYPE_A2090); if (z) { wd->rom_size = zfile_size (z); @@ -3998,6 +4079,40 @@ bool a2090_init (struct autoconfig_info *aci) wd->rom_mask = wd->rom_size - 1; } } + + return true; +} + +bool a2090_init (struct autoconfig_info *aci) +{ + return a2090x_init(aci, false); +} +bool a2090b_init (struct autoconfig_info *aci) +{ + return a2090x_init(aci, true); +} +bool a2090b_preinit (struct autoconfig_info *aci) +{ + struct wd_state *wd = getscsi(aci->rc); + if (!wd) + return false; + memcpy(&wd->bank2, &combitec_bank, sizeof addrbank); + wd->bank2.start = 0xf10000; + wd->bank2.reserved_size = 0x10000; + wd->bank2.mask = 0xffff; + mapped_malloc(&wd->bank2); + + wd->rom2 = wd->bank2.baseaddr; + wd->rom2_size = 65536; + wd->rom2_mask = wd->rom2_size - 1; + struct zfile *z = read_device_from_romconfig(aci->rc, ROMTYPE_A2090B); + if (z) { + zfile_fread(wd->rom2, 1, wd->rom2_size, z); + zfile_fclose(z); + } + wd->baseaddress2 = 0xf10000; + map_banks(&wd->bank2, wd->baseaddress2 >> 16, 1, 1); + return true; } diff --git a/expansion.cpp b/expansion.cpp index f34ec1f0..9b6f6c4e 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -439,9 +439,9 @@ void expansion_cpu_fallback(void) static void call_card_init(int index) { addrbank *ab, *abe; + bool ok = false; card_data *cd = cards[ecard]; struct autoconfig_info *aci = &cd->aci; - bool ok = false; if (currprefs.address_space_24 && cd->cst && (cd->cst->deviceflags & EXPANSIONTYPE_FALLBACK_DISABLE)) { write_log(_T("Card %d: skipping autoconfig (fallback mode)\n"), ecard); @@ -3505,10 +3505,28 @@ void expamem_reset (void) expansion_autoconfig_sort(&currprefs); expansion_parse_cards(&currprefs, true); - if (cardno == 0 || savestate_state) + if (cardno == 0 || savestate_state) { expamem_init_clear_zero (); - else + } else { + + for (int i = 0; i < cardno; i++) { + card_data *cd = cards[i]; + if (cd->ert && cd->ert->preinit) { + struct autoconfig_info *aci = &cd->aci; + aci->prefs = &currprefs; + aci->doinit = true; + aci->devnum = (cd->flags >> 16) & 255; + aci->ert = cd->ert; + aci->cst = cd->cst; + aci->rc = cd->rc; + aci->zorro = cd->zorro; + memset(aci->autoconfig_raw, 0xff, sizeof aci->autoconfig_raw); + cd->ert->preinit(aci); + } + } + call_card_init(0); + } } void expansion_init (void) @@ -4412,7 +4430,7 @@ static const struct expansionboardsettings dataflyersplus_settings[] = { const struct expansionromtype expansionroms[] = { { _T("cpuboard"), _T("Accelerator"), _T("Accelerator"), - NULL, NULL, add_cpuboard_unit, ROMTYPE_CPUBOARD, 0, 0, 0, true, + NULL, NULL, NULL, add_cpuboard_unit, ROMTYPE_CPUBOARD, 0, 0, 0, true, NULL, 0, false, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_IDE }, @@ -4421,13 +4439,13 @@ const struct expansionromtype expansionroms[] = { { _T("grex"), _T("G-REX"), _T("DCE"), - grex_init, NULL, NULL, ROMTYPE_GREX | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, grex_init, NULL, NULL, ROMTYPE_GREX | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_PCI_BRIDGE }, { _T("mediator"), _T("Mediator"), _T("Elbox"), - mediator_init, mediator_init2, NULL, ROMTYPE_MEDIATOR | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, mediator_init, mediator_init2, NULL, ROMTYPE_MEDIATOR | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, false, mediator_sub, 0, false, EXPANSIONTYPE_PCI_BRIDGE, 0, 0, 0, false, NULL, @@ -4435,7 +4453,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("prometheus"), _T("Prometheus"), _T("Matay"), - prometheus_init, NULL, NULL, ROMTYPE_PROMETHEUS | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, false, + NULL, prometheus_init, NULL, NULL, ROMTYPE_PROMETHEUS | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, false, NULL, 0, false, EXPANSIONTYPE_PCI_BRIDGE, 0, 0, 0, false, NULL, @@ -4446,53 +4464,62 @@ const struct expansionromtype expansionroms[] = { { _T("apollo"), _T("Apollo 500/2000"), _T("3-State"), - apollo_init_hd, NULL, apollo_add_scsi_unit, ROMTYPE_APOLLOHD, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, apollo_init_hd, NULL, apollo_add_scsi_unit, ROMTYPE_APOLLOHD, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_IDE, 8738, 0, 0 }, { _T("add500"), _T("ADD-500"), _T("Archos"), - add500_init, NULL, add500_add_scsi_unit, ROMTYPE_ADD500, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, add500_init, NULL, add500_add_scsi_unit, ROMTYPE_ADD500, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 8498, 27, 0, true, NULL }, + { + _T("addhard"), _T("AddHard"), _T("Ashcom Design"), + NULL, addhard_init, NULL, addhard_add_scsi_unit, ROMTYPE_ADDHARD, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, 0, + true, EXPANSIONTYPE_SCSI, + 0, 0, 0, false, NULL, + false, 0, NULL, + { 0xd1, 0x30, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00 }, + }, { _T("blizzardscsikitiii"), _T("SCSI Kit III"), _T("Phase 5"), - NULL, NULL, cpuboard_ncr9x_add_scsi_unit, ROMTYPE_BLIZKIT3, 0, 0, 0, true, + NULL, NULL, NULL, cpuboard_ncr9x_add_scsi_unit, ROMTYPE_BLIZKIT3, 0, 0, 0, true, NULL, 0, false, EXPANSIONTYPE_SCSI }, { _T("blizzardscsikitiv"), _T("SCSI Kit IV"), _T("Phase 5"), - NULL, NULL, cpuboard_ncr9x_add_scsi_unit, ROMTYPE_BLIZKIT4, 0, 0, 0, true, + NULL, NULL, NULL, cpuboard_ncr9x_add_scsi_unit, ROMTYPE_BLIZKIT4, 0, 0, 0, true, NULL, 0, false, EXPANSIONTYPE_SCSI }, { _T("oktagon2008"), _T("Oktagon 2008"), _T("BSC/Alfa Data"), - ncr_oktagon_autoconfig_init, NULL, oktagon_add_scsi_unit, ROMTYPE_OKTAGON, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, ncr_oktagon_autoconfig_init, NULL, oktagon_add_scsi_unit, ROMTYPE_OKTAGON, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI }, { _T("alfapower"), _T("AlfaPower/AT-Bus 2008"), _T("BSC/Alfa Data"), - alf_init, NULL, alf_add_ide_unit, ROMTYPE_ALFA, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, alf_init, NULL, alf_add_ide_unit, ROMTYPE_ALFA, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_IDE, 2092, 8, 0 }, { _T("alfapowerplus"), _T("AlfaPower Plus"), _T("BSC/Alfa Data"), - alf_init, NULL, alf_add_ide_unit, ROMTYPE_ALFAPLUS, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, alf_init, NULL, alf_add_ide_unit, ROMTYPE_ALFAPLUS, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_IDE, 2092, 8, 0 }, { _T("malibu"), _T("Malibu"), _T("California Access"), - malibu_init, NULL, malibu_add_scsi_unit, ROMTYPE_MALIBU, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, malibu_init, NULL, malibu_add_scsi_unit, ROMTYPE_MALIBU, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4501,7 +4528,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("cltda1000scsi"), _T("A1000/A2000 SCSI"), _T("C-Ltd"), - cltda1000scsi_init, NULL, cltda1000scsi_add_scsi_unit, ROMTYPE_CLTDSCSI | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, cltda1000scsi_init, NULL, cltda1000scsi_add_scsi_unit, ROMTYPE_CLTDSCSI | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4510,7 +4537,15 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2090a"), _T("A2090a"), _T("Commodore"), - a2090_init, NULL, a2090_add_scsi_unit, ROMTYPE_A2090 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, a2090_init, NULL, a2090_add_scsi_unit, ROMTYPE_A2090 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, 0, + true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_CUSTOM_SECONDARY, + 0, 0, 0, false, NULL, + false, 0, a2090a_settings + }, + { + _T("a2090b"), _T("A2090 Combitec"), _T("Commodore"), + a2090b_preinit, a2090b_init, NULL, a2090_add_scsi_unit, ROMTYPE_A2090B | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_CUSTOM_SECONDARY, 0, 0, 0, false, NULL, @@ -4518,14 +4553,14 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2091"), _T("A590/A2091"), _T("Commodore"), - a2091_init, NULL, a2091_add_scsi_unit, ROMTYPE_A2091 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, a2091_init, NULL, a2091_add_scsi_unit, ROMTYPE_A2091 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, a2091_sub, 1, true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_CUSTOM_SECONDARY, commodore, commodore_a2091, 0, true, NULL }, { _T("a4091"), _T("A4091"), _T("Commodore"), - ncr710_a4091_autoconfig_init, NULL, a4091_add_scsi_unit, ROMTYPE_A4091, 0, 0, BOARD_AUTOCONFIG_Z3, false, + NULL, ncr710_a4091_autoconfig_init, NULL, a4091_add_scsi_unit, ROMTYPE_A4091, 0, 0, BOARD_AUTOCONFIG_Z3, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4533,7 +4568,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("comspec1000"), _T("SA-1000"), _T("Comspec"), - comspec_init, NULL, comspec_add_scsi_unit, ROMTYPE_COMSPEC, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, comspec_init, NULL, comspec_add_scsi_unit, ROMTYPE_COMSPEC, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, true, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4541,7 +4576,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("rapidfire"), _T("RapidFire"), _T("DKB"), - ncr_rapidfire_init, NULL, rapidfire_add_scsi_unit, ROMTYPE_RAPIDFIRE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, ncr_rapidfire_init, NULL, rapidfire_add_scsi_unit, ROMTYPE_RAPIDFIRE, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 2012, 1, 0, true, NULL, @@ -4550,13 +4585,13 @@ const struct expansionromtype expansionroms[] = { }, { _T("dataflyerscsiplus"), _T("DataFlyer SCSI+"), _T("Expansion Systems"), - dataflyer_init, NULL, dataflyer_add_scsi_unit, ROMTYPE_DATAFLYERP | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, dataflyer_init, NULL, dataflyer_add_scsi_unit, ROMTYPE_DATAFLYERP | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_SCSI }, { _T("dataflyerplus"), _T("DataFlyer Plus"), _T("Expansion Systems"), - dataflyerplus_init, NULL, dataflyerplus_add_idescsi_unit, ROMTYPE_DATAFLYER, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, dataflyerplus_init, NULL, dataflyerplus_add_idescsi_unit, ROMTYPE_DATAFLYER, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_IDE, 0, 0, 0, false, NULL, @@ -4564,32 +4599,32 @@ const struct expansionromtype expansionroms[] = { }, { _T("gvp1"), _T("GVP Series I"), _T("Great Valley Products"), - gvp_init_s1, NULL, gvp_s1_add_scsi_unit, ROMTYPE_GVPS1 | ROMTYPE_NONE, ROMTYPE_GVPS12, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, gvp_init_s1, NULL, gvp_s1_add_scsi_unit, ROMTYPE_GVPS1 | ROMTYPE_NONE, ROMTYPE_GVPS12, 0, BOARD_AUTOCONFIG_Z2, false, gvp1_sub, 1, true, EXPANSIONTYPE_SCSI }, { _T("gvp"), _T("GVP Series II"), _T("Great Valley Products"), - gvp_init_s2, NULL, gvp_s2_add_scsi_unit, ROMTYPE_GVPS2 | ROMTYPE_NONE, ROMTYPE_GVPS12, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, gvp_init_s2, NULL, gvp_s2_add_scsi_unit, ROMTYPE_GVPS2 | ROMTYPE_NONE, ROMTYPE_GVPS12, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 2017, 10, 0 }, { _T("vector"), _T("Vector Falcon 8000"), _T("HK-Computer"), - vector_init, NULL, vector_add_scsi_unit, ROMTYPE_VECTOR, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, vector_init, NULL, vector_add_scsi_unit, ROMTYPE_VECTOR, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_SCSI }, { _T("adide"), _T("AdIDE"), _T("ICD"), - adide_init, NULL, adide_add_ide_unit, ROMTYPE_ADIDE | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, adide_init, NULL, adide_add_ide_unit, ROMTYPE_ADIDE | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_IDE }, { _T("adscsi2000"), _T("AdSCSI Advantage 2000"), _T("ICD"), - adscsi_init, NULL, adscsi_add_scsi_unit, ROMTYPE_ADSCSI, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, adscsi_init, NULL, adscsi_add_scsi_unit, ROMTYPE_ADSCSI, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4597,7 +4632,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("buddha"), _T("Buddha"), _T("Individual Computers"), - buddha_init, NULL, buddha_add_ide_unit, ROMTYPE_BUDDHA, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, buddha_init, NULL, buddha_add_ide_unit, ROMTYPE_BUDDHA, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_IDE, 0, 0, 0, false, NULL, @@ -4606,7 +4641,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("trumpcardpro"), _T("Grand Slam"), _T("IVS"), - trumpcardpro_init, NULL, trumpcardpro_add_scsi_unit, ROMTYPE_IVSTPRO, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, trumpcardpro_init, NULL, trumpcardpro_add_scsi_unit, ROMTYPE_IVSTPRO, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 2112, 4, 0, false, NULL, @@ -4615,20 +4650,20 @@ const struct expansionromtype expansionroms[] = { }, { _T("kommos"), _T("Kommos A500/A2000 SCSI"), _T("Jürgen Kommos"), - kommos_init, NULL, kommos_add_scsi_unit, ROMTYPE_KOMMOS, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, kommos_init, NULL, kommos_add_scsi_unit, ROMTYPE_KOMMOS, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_SCSI }, { _T("golem"), _T("Golem SCSI II"), _T("Kupke"), - golem_init, NULL, golem_add_scsi_unit, ROMTYPE_GOLEM, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, golem_init, NULL, golem_add_scsi_unit, ROMTYPE_GOLEM, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 2079, 3, 0 }, { _T("golemfast"), _T("Golem Fast SCSI/IDE"), _T("Kupke"), - golemfast_init, NULL, golemfast_add_idescsi_unit, ROMTYPE_GOLEMFAST, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, golemfast_init, NULL, golemfast_add_idescsi_unit, ROMTYPE_GOLEMFAST, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_IDE, 0, 0, 0, false, NULL, @@ -4636,14 +4671,14 @@ const struct expansionromtype expansionroms[] = { }, { _T("multievolution"), _T("Multi Evolution 500/2000"), _T("MacroSystem"), - ncr_multievolution_init, NULL, multievolution_add_scsi_unit, ROMTYPE_MEVOLUTION, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, ncr_multievolution_init, NULL, multievolution_add_scsi_unit, ROMTYPE_MEVOLUTION, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_SCSI, 18260, 8, 0, true }, { _T("scram8490"), _T("SCRAM (DP8490V)"), _T("MegaMicro"), - scram5380_init, NULL, scram5380_add_scsi_unit, ROMTYPE_SCRAM5380, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, scram5380_init, NULL, scram5380_add_scsi_unit, ROMTYPE_SCRAM5380, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 4096, 4, 0, false, NULL, @@ -4652,7 +4687,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("scram5394"), _T("SCRAM (NCR53C94)"), _T("MegaMicro"), - ncr_scram5394_init, NULL, scram5394_add_scsi_unit, ROMTYPE_SCRAM5394, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, ncr_scram5394_init, NULL, scram5394_add_scsi_unit, ROMTYPE_SCRAM5394, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 4096, 4, 0, false, NULL, @@ -4661,31 +4696,31 @@ const struct expansionromtype expansionroms[] = { }, { _T("paradox"), _T("Paradox SCSI"), _T("Mainhattan Data"), - paradox_init, NULL, paradox_add_scsi_unit, ROMTYPE_PARADOX | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, false, + NULL, paradox_init, NULL, paradox_add_scsi_unit, ROMTYPE_PARADOX | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, false, NULL, 0, true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_PARALLEL_ADAPTER }, { _T("ateam"), _T("A-Team"), _T("Mainhattan Data"), - ateam_init, NULL, ateam_add_ide_unit, ROMTYPE_ATEAM, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, ateam_init, NULL, ateam_add_ide_unit, ROMTYPE_ATEAM, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_IDE }, { _T("mtecat"), _T("AT 500"), _T("M-Tec"), - mtec_init, NULL, mtec_add_ide_unit, ROMTYPE_MTEC, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, mtec_init, NULL, mtec_add_ide_unit, ROMTYPE_MTEC, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_IDE }, { _T("masoboshi"), _T("MasterCard"), _T("Masoboshi"), - masoboshi_init, NULL, masoboshi_add_idescsi_unit, ROMTYPE_MASOBOSHI | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, masoboshi_init, NULL, masoboshi_add_idescsi_unit, ROMTYPE_MASOBOSHI | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, masoboshi_sub, 0, true, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_IDE }, { _T("hardframe"), _T("HardFrame"), _T("Microbotics"), - hardframe_init, NULL, hardframe_add_scsi_unit, ROMTYPE_HARDFRAME, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, hardframe_init, NULL, hardframe_add_scsi_unit, ROMTYPE_HARDFRAME, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4693,7 +4728,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("stardrive"), _T("StarDrive"), _T("Microbotics"), - stardrive_init, NULL, stardrive_add_scsi_unit, ROMTYPE_STARDRIVE | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, stardrive_init, NULL, stardrive_add_scsi_unit, ROMTYPE_STARDRIVE | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_SCSI, 1010, 0, 0, false, NULL, @@ -4703,7 +4738,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("filecard2000"), _T("Filecard 2000/OSSI 500"), _T("Otronic"), - ossi_init, NULL, ossi_add_scsi_unit, ROMTYPE_OSSI, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, ossi_init, NULL, ossi_add_scsi_unit, ROMTYPE_OSSI, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, true, EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4712,20 +4747,20 @@ const struct expansionromtype expansionroms[] = { }, { _T("fastlane"), _T("Fastlane"), _T("Phase 5"), - ncr_fastlane_autoconfig_init, NULL, fastlane_add_scsi_unit, ROMTYPE_FASTLANE, 0, 0, BOARD_AUTOCONFIG_Z3, false, + NULL, ncr_fastlane_autoconfig_init, NULL, fastlane_add_scsi_unit, ROMTYPE_FASTLANE, 0, 0, BOARD_AUTOCONFIG_Z3, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 8512, 10, 0, false, fastlane_memory_callback }, { _T("phoenixboard"), _T("Phoenix Board SCSI"), _T("Phoenix Microtechnologies"), - phoenixboard_init, NULL, phoenixboard_add_scsi_unit, ROMTYPE_PHOENIXB, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, phoenixboard_init, NULL, phoenixboard_add_scsi_unit, ROMTYPE_PHOENIXB, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, true, EXPANSIONTYPE_SCSI, }, { _T("ptnexus"), _T("Nexus"), _T("Preferred Technologies"), - ptnexus_init, NULL, ptnexus_add_scsi_unit, ROMTYPE_PTNEXUS | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, ptnexus_init, NULL, ptnexus_add_scsi_unit, ROMTYPE_PTNEXUS | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 2102, 4, 0, false, nexus_memory_callback, @@ -4734,14 +4769,14 @@ const struct expansionromtype expansionroms[] = { }, { _T("protar"), _T("A500 HD"), _T("Protar"), - protar_init, NULL, protar_add_ide_unit, ROMTYPE_PROTAR, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, protar_init, NULL, protar_add_ide_unit, ROMTYPE_PROTAR, 0, 0, BOARD_AUTOCONFIG_Z2, false, NULL, 0, true, EXPANSIONTYPE_SCSI, 4149, 51, 0 }, { _T("rochard"), _T("RocHard RH800C"), _T("Roctec"), - rochard_init, NULL, rochard_add_idescsi_unit, ROMTYPE_ROCHARD | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, rochard_init, NULL, rochard_add_idescsi_unit, ROMTYPE_ROCHARD | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, rochard_sub, 0, true, EXPANSIONTYPE_IDE | EXPANSIONTYPE_SCSI, 2144, 2, 0, false, NULL, @@ -4749,13 +4784,13 @@ const struct expansionromtype expansionroms[] = { }, { _T("supradrive"), _T("SupraDrive"), _T("Supra Corporation"), - supra_init, NULL, supra_add_scsi_unit, ROMTYPE_SUPRA | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, + NULL, supra_init, NULL, supra_add_scsi_unit, ROMTYPE_SUPRA | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, false, supra_sub, 0, true, EXPANSIONTYPE_SCSI }, #if 0 /* driver is MIA, 3rd party ScottDevice driver is not enough for full implementation. */ { - _T("microforge"), _T("Hard Disk"), _T("Micro Forge"), + NULL, _T("microforge"), _T("Hard Disk"), _T("Micro Forge"), microforge_init, NULL, microforge_add_scsi_unit, ROMTYPE_MICROFORGE | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_SASI | EXPANSIONTYPE_SCSI @@ -4764,45 +4799,45 @@ const struct expansionromtype expansionroms[] = { { _T("omtiadapter"), _T("OMTI-Adapter"), _T("C't"), - omtiadapter_init, NULL, omtiadapter_scsi_unit, ROMTYPE_OMTIADAPTER | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, omtiadapter_init, NULL, omtiadapter_scsi_unit, ROMTYPE_OMTIADAPTER | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI }, { _T("alf1"), _T("A.L.F."), _T("Elaborate Bytes"), - alf1_init, NULL, alf1_add_scsi_unit, ROMTYPE_ALF1 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, alf1_init, NULL, alf1_add_scsi_unit, ROMTYPE_ALF1 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI }, { _T("promigos"), _T("Promigos"), _T("Flesch und Hörnemann"), - promigos_init, NULL, promigos_add_scsi_unit, ROMTYPE_PROMIGOS | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, promigos_init, NULL, promigos_add_scsi_unit, ROMTYPE_PROMIGOS | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI }, { _T("tecmar"), _T("T-Card/T-Disk"), _T("Tecmar"), - tecmar_init, NULL, tecmar_add_scsi_unit, ROMTYPE_TECMAR | ROMTYPE_NOT, 0, 0, BOARD_PROTOAUTOCONFIG, true, + NULL, tecmar_init, NULL, tecmar_add_scsi_unit, ROMTYPE_TECMAR | ROMTYPE_NOT, 0, 0, BOARD_PROTOAUTOCONFIG, true, NULL, 0, false, EXPANSIONTYPE_SASI | EXPANSIONTYPE_SCSI, 1001, 1, 0 }, { _T("system2000"), _T("System 2000"), _T("Vortex"), - system2000_init, NULL, system2000_add_scsi_unit, ROMTYPE_SYSTEM2000 | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, system2000_init, NULL, system2000_add_scsi_unit, ROMTYPE_SYSTEM2000 | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI }, { _T("xebec"), _T("9720H"), _T("Xebec"), - xebec_init, NULL, xebec_add_scsi_unit, ROMTYPE_XEBEC | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, xebec_init, NULL, xebec_add_scsi_unit, ROMTYPE_XEBEC | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_SASI | EXPANSIONTYPE_SCSI }, #if 0 { _T("kronos"), _T("Kronos"), _T("C-Ltd"), - kronos_init, kronos_add_scsi_unit, ROMTYPE_KRONOS, 0, 0, 2, false, + NULL, kronos_init, kronos_add_scsi_unit, ROMTYPE_KRONOS, 0, 0, 2, false, NULL, 0, false, EXPANSIONTYPE_SCSI, 0, 0, 0, @@ -4811,7 +4846,7 @@ const struct expansionromtype expansionroms[] = { #endif { _T("hda506"), _T("HDA-506"), _T("Spirit Technology"), - hda506_init, NULL, hda506_add_scsi_unit, ROMTYPE_HDA506 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, hda506_init, NULL, hda506_add_scsi_unit, ROMTYPE_HDA506 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI, 0, 0, 0, false, NULL, @@ -4820,32 +4855,32 @@ const struct expansionromtype expansionroms[] = { }, { _T("amax"), _T("AMAX ROM dongle"), _T("ReadySoft"), - NULL, NULL, NULL, ROMTYPE_AMAX | ROMTYPE_NONE, 0, 0, 0, false + NULL, NULL, NULL, NULL, ROMTYPE_AMAX | ROMTYPE_NONE, 0, 0, 0, false }, #if 0 { _T("x86_xt_hd"), _T("x86 XT"), _T("x86"), - x86_xt_hd_init, NULL, x86_add_xt_hd_unit, ROMTYPE_X86_HD | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, + NULL, x86_xt_hd_init, NULL, x86_add_xt_hd_unit, ROMTYPE_X86_HD | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_SCSI }, #endif { _T("x86athdprimary"), _T("AT IDE Primary"), _T("x86"), - x86_at_hd_init_1, NULL, x86_add_at_hd_unit_1, ROMTYPE_X86_AT_HD1 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, + NULL, x86_at_hd_init_1, NULL, x86_add_at_hd_unit_1, ROMTYPE_X86_AT_HD1 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, NULL, 0, false, EXPANSIONTYPE_IDE }, { _T("x86athdsecondary"), _T("AT IDE Secondary"), _T("x86"), - x86_at_hd_init_2, NULL, x86_add_at_hd_unit_2, ROMTYPE_X86_AT_HD2 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, + NULL, x86_at_hd_init_2, NULL, x86_add_at_hd_unit_2, ROMTYPE_X86_AT_HD2 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, NULL, 0, false, EXPANSIONTYPE_IDE }, { _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_AFTER_Z2, true, + NULL, x86_at_hd_init_xt, NULL, x86_add_at_hd_unit_xt, ROMTYPE_X86_XT_IDE | ROMTYPE_NONE, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, NULL, 0, false, EXPANSIONTYPE_IDE, 0, 0, 0, false, NULL, @@ -4856,7 +4891,7 @@ const struct expansionromtype expansionroms[] = { { _T("a1060"), _T("A1060 Sidecar"), _T("Commodore"), - a1060_init, NULL, NULL, ROMTYPE_A1060 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, a1060_init, NULL, NULL, ROMTYPE_A1060 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -4864,7 +4899,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2088"), _T("A2088"), _T("Commodore"), - a2088xt_init, NULL, NULL, ROMTYPE_A2088 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, a2088xt_init, NULL, NULL, ROMTYPE_A2088 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -4872,7 +4907,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2088t"), _T("A2088T"), _T("Commodore"), - a2088t_init, NULL, NULL, ROMTYPE_A2088T | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, a2088t_init, NULL, NULL, ROMTYPE_A2088T | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -4880,7 +4915,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2286"), _T("A2286"), _T("Commodore"), - a2286_init, NULL, NULL, ROMTYPE_A2286 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, a2286_init, NULL, NULL, ROMTYPE_A2286 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -4888,7 +4923,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("a2386"), _T("A2386SX"), _T("Commodore"), - a2386_init, NULL, NULL, ROMTYPE_A2386 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, a2386_init, NULL, NULL, ROMTYPE_A2386 | ROMTYPE_NONE, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_X86_BRIDGE, 0, 0, 0, false, NULL, @@ -4898,19 +4933,19 @@ const struct expansionromtype expansionroms[] = { // only here for rom selection and settings { _T("picassoiv"), _T("Picasso IV"), _T("Village Tronic"), - NULL, NULL, NULL, ROMTYPE_PICASSOIV | ROMTYPE_NONE, 0, 0, BOARD_IGNORE, true, + NULL, NULL, NULL, NULL, ROMTYPE_PICASSOIV | ROMTYPE_NONE, 0, 0, BOARD_IGNORE, true, NULL, 0, false, EXPANSIONTYPE_RTG }, { _T("x86vga"), _T("x86 VGA"), _T("x86"), - NULL, NULL, NULL, ROMTYPE_x86_VGA | ROMTYPE_NONE, 0, 0, BOARD_IGNORE, true, + NULL, NULL, NULL, NULL, ROMTYPE_x86_VGA | ROMTYPE_NONE, 0, 0, BOARD_IGNORE, true, NULL, 0, false, EXPANSIONTYPE_RTG }, { _T("harlequin"), _T("Harlequin"), _T("ACS"), - NULL, NULL, NULL, ROMTYPE_HARLEQUIN | ROMTYPE_NOT, 0, 0, BOARD_IGNORE, false, + NULL, NULL, NULL, NULL, ROMTYPE_HARLEQUIN | ROMTYPE_NOT, 0, 0, BOARD_IGNORE, false, NULL, 0, false, EXPANSIONTYPE_RTG, 0, 0, 0, false, NULL, @@ -4921,7 +4956,7 @@ const struct expansionromtype expansionroms[] = { { _T("toccata"), _T("Toccata"), _T("MacroSystem"), - sndboard_init, NULL, NULL, ROMTYPE_TOCCATA | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, sndboard_init, NULL, NULL, ROMTYPE_TOCCATA | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_SOUND, 0, 0, 0, false, NULL, @@ -4930,19 +4965,19 @@ const struct expansionromtype expansionroms[] = { }, { _T("es1370"), _T("ES1370 PCI"), _T("Ensoniq"), - pci_expansion_init, NULL, NULL, ROMTYPE_ES1370 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, pci_expansion_init, NULL, NULL, ROMTYPE_ES1370 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_SOUND }, { _T("fm801"), _T("FM801 PCI"), _T("Fortemedia"), - pci_expansion_init, NULL, NULL, ROMTYPE_FM801 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, pci_expansion_init, NULL, NULL, ROMTYPE_FM801 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_SOUND }, { _T("uaesnd_z2"), _T("UAESND Z2"), NULL, - uaesndboard_init_z2, NULL, NULL, ROMTYPE_UAESNDZ2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, uaesndboard_init_z2, NULL, NULL, ROMTYPE_UAESNDZ2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_SOUND, 0, 0, 0, false, NULL, @@ -4951,7 +4986,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("uaesnd_z3"), _T("UAESND Z3"), NULL, - uaesndboard_init_z3, NULL, NULL, ROMTYPE_UAESNDZ3 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, true, + NULL, uaesndboard_init_z3, NULL, NULL, ROMTYPE_UAESNDZ3 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, true, NULL, 0, false, EXPANSIONTYPE_SOUND, 0, 0, 0, false, NULL, @@ -4961,7 +4996,7 @@ const struct expansionromtype expansionroms[] = { #if 0 { _T("pmx"), _T("pmx"), NULL, - pmx_init, NULL, NULL, ROMTYPE_PMX | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, pmx_init, NULL, NULL, ROMTYPE_PMX | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_SOUND, 0, 0, 0, false, NULL, @@ -4973,7 +5008,7 @@ const struct expansionromtype expansionroms[] = { /* Network */ { _T("a2065"), _T("A2065"), _T("Commodore"), - a2065_init, NULL, NULL, ROMTYPE_A2065 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, a2065_init, NULL, NULL, ROMTYPE_A2065 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -4982,7 +5017,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("ariadne"), _T("Ariadne"), _T("Village Tronic"), - ariadne_init, NULL, NULL, ROMTYPE_ARIADNE | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, ariadne_init, NULL, NULL, ROMTYPE_ARIADNE | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -4991,7 +5026,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("ariadne2"), _T("Ariadne II"), _T("Village Tronic"), - ariadne2_init, NULL, NULL, ROMTYPE_ARIADNE2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, ariadne2_init, NULL, NULL, ROMTYPE_ARIADNE2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5000,7 +5035,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("hydra"), _T("AmigaNet"), _T("Hydra Systems"), - hydra_init, NULL, NULL, ROMTYPE_HYDRA | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, hydra_init, NULL, NULL, ROMTYPE_HYDRA | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5009,7 +5044,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("eb920"), _T("LAN Rover/EB920"), _T("ASDG"), - lanrover_init, NULL, NULL, ROMTYPE_LANROVER | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, lanrover_init, NULL, NULL, ROMTYPE_LANROVER | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5018,7 +5053,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("xsurf"), _T("X-Surf"), _T("Individual Computers"), - xsurf_init, NULL, NULL, ROMTYPE_XSURF | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, xsurf_init, NULL, NULL, ROMTYPE_XSURF | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5027,7 +5062,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("xsurf100z2"), _T("X-Surf-100 Z2"), _T("Individual Computers"), - xsurf100_init, NULL, NULL, ROMTYPE_XSURF100Z2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, xsurf100_init, NULL, NULL, ROMTYPE_XSURF100Z2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5036,7 +5071,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("xsurf100z3"), _T("X-Surf-100 Z3"), _T("Individual Computers"), - xsurf100_init, NULL, NULL, ROMTYPE_XSURF100Z3 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, true, + NULL, xsurf100_init, NULL, NULL, ROMTYPE_XSURF100Z3 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5045,7 +5080,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("ne2000_pcmcia"), _T("RTL8019 PCMCIA (NE2000 compatible)"), NULL, - gayle_init_ne2000_pcmcia, NULL, NULL, ROMTYPE_NE2KPCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, gayle_init_ne2000_pcmcia, NULL, NULL, ROMTYPE_NE2KPCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5053,7 +5088,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("ne2000_pci"), _T("RTL8029 PCI (NE2000 compatible)"), NULL, - pci_expansion_init, NULL, NULL, ROMTYPE_NE2KPCI | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, pci_expansion_init, NULL, NULL, ROMTYPE_NE2KPCI | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5061,7 +5096,7 @@ const struct expansionromtype expansionroms[] = { }, { _T("ne2000_isa"), _T("RTL8019 ISA (NE2000 compatible)"), NULL, - isa_expansion_init, NULL, NULL, ROMTYPE_NE2KISA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, isa_expansion_init, NULL, NULL, ROMTYPE_NE2KISA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_NET, 0, 0, 0, false, NULL, @@ -5071,7 +5106,7 @@ const struct expansionromtype expansionroms[] = { /* Catweasel */ { _T("catweasel"), _T("Catweasel"), _T("Individual Computers"), - expamem_init_catweasel, NULL, NULL, ROMTYPE_CATWEASEL | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, expamem_init_catweasel, NULL, NULL, ROMTYPE_CATWEASEL | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_FLOPPY }, @@ -5079,49 +5114,49 @@ const struct expansionromtype expansionroms[] = { /* built-in controllers */ { _T("cd32fmv"), _T("CD32 FMV"), _T("Commodore"), - expamem_init_cd32fmv, NULL, NULL, ROMTYPE_CD32CART, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, expamem_init_cd32fmv, NULL, NULL, ROMTYPE_CD32CART, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL }, { _T("cdtvdmac"), _T("CDTV DMAC"), _T("Commodore"), - cdtv_init, NULL, NULL, ROMTYPE_CDTVDMAC | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, cdtv_init, NULL, NULL, ROMTYPE_CDTVDMAC | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL }, { _T("cdtvscsi"), _T("CDTV SCSI"), _T("Commodore"), - cdtvscsi_init, NULL, cdtv_add_scsi_unit, ROMTYPE_CDTVSCSI | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, + NULL, cdtvscsi_init, NULL, cdtv_add_scsi_unit, ROMTYPE_CDTVSCSI | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL | EXPANSIONTYPE_SCSI }, { _T("cdtvcr"), _T("CDTV-CR"), _T("Commodore"), - cdtvcr_init, NULL, NULL, ROMTYPE_CDTVCR | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, + NULL, cdtvcr_init, NULL, NULL, ROMTYPE_CDTVCR | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL }, { _T("scsi_a3000"), _T("A3000 SCSI"), _T("Commodore"), - a3000scsi_init, NULL, a3000_add_scsi_unit, ROMTYPE_SCSI_A3000 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, + NULL, a3000scsi_init, NULL, a3000_add_scsi_unit, ROMTYPE_SCSI_A3000 | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL | EXPANSIONTYPE_SCSI }, { _T("scsi_a4000t"), _T("A4000T SCSI"), _T("Commodore"), - a4000t_scsi_init, NULL, a4000t_add_scsi_unit, ROMTYPE_SCSI_A4000T | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, a4000t_scsi_init, NULL, a4000t_add_scsi_unit, ROMTYPE_SCSI_A4000T | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL | EXPANSIONTYPE_SCSI }, { _T("ide_mb"), _T("A600/A1200/A4000 IDE"), _T("Commodore"), - gayle_ide_init, NULL, gayle_add_ide_unit, ROMTYPE_MB_IDE | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, gayle_ide_init, NULL, gayle_add_ide_unit, ROMTYPE_MB_IDE | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL | EXPANSIONTYPE_IDE }, { _T("pcmcia_mb"), _T("A600/A1200 PCMCIA"), _T("Commodore"), - gayle_pcmcia_init, NULL, gayle_add_pcmcia_unit, ROMTYPE_MB_PCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, + NULL, gayle_pcmcia_init, NULL, gayle_add_pcmcia_unit, ROMTYPE_MB_PCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true, NULL, 0, false, EXPANSIONTYPE_INTERNAL }, @@ -5130,13 +5165,13 @@ const struct expansionromtype expansionroms[] = { { _T("uaeboard_z2"), _T("UAEBOARD Z2"), NULL, - uaesndboard_init_z2, NULL, NULL, ROMTYPE_UAEBOARDZ2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, + NULL, uaesndboard_init_z2, NULL, NULL, ROMTYPE_UAEBOARDZ2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM }, { _T("uaeboard_z3"), _T("UAEBOARD Z3"), NULL, - uaesndboard_init_z3, NULL, NULL, ROMTYPE_UAEBOARDZ3 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, true, + NULL, uaesndboard_init_z3, NULL, NULL, ROMTYPE_UAEBOARDZ3 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z3, true, NULL, 0, false, EXPANSIONTYPE_CUSTOM }, diff --git a/include/a2091.h b/include/a2091.h index 01cb809f..1bc73d65 100644 --- a/include/a2091.h +++ b/include/a2091.h @@ -87,11 +87,12 @@ struct wd_state { int configured; bool autoconfig; uae_u8 dmacmemory[128]; - uae_u8 *rom; + uae_u8 *rom, *rom2; int board_mask; uaecptr baseaddress, baseaddress2; int rombankswitcher, rombank; int rom_size, rom_mask; + int rom2_size, rom2_mask; struct romconfig *rc; struct wd_state **self_ptr; @@ -110,6 +111,7 @@ struct wd_state { struct gvp_dmac gdmac; struct comspec_chip comspec; addrbank bank; + addrbank bank2; void *userdata; }; extern wd_state *wd_cdtv; @@ -119,6 +121,8 @@ extern void scsi_dmac_a2091_start_dma (struct wd_state*); extern void scsi_dmac_a2091_stop_dma (struct wd_state*); extern bool a2090_init (struct autoconfig_info *aci); +extern bool a2090b_init (struct autoconfig_info *aci); +extern bool a2090b_preinit (struct autoconfig_info *aci); extern bool a2091_init (struct autoconfig_info *aci); extern void a2091_free(void); diff --git a/include/autoconf.h b/include/autoconf.h index 6156670f..2077e7a0 100644 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -211,7 +211,7 @@ struct expansionromtype const TCHAR *name; const TCHAR *friendlyname; const TCHAR *friendlymanufacturer; - DEVICE_INIT init, init2; + DEVICE_INIT preinit, init, init2; DEVICE_ADD add; uae_u32 romtype; uae_u32 romtype_extra; diff --git a/include/rommgr.h b/include/rommgr.h index 838db67e..fc1b44a0 100644 --- a/include/rommgr.h +++ b/include/rommgr.h @@ -153,6 +153,8 @@ extern int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size); #define ROMTYPE_RAPIDFIRE 0x00100063 #define ROMTYPE_UAEBOARDZ2 0x00100064 #define ROMTYPE_UAEBOARDZ3 0x00100065 +#define ROMTYPE_ADDHARD 0x00100066 +#define ROMTYPE_A2090B 0x00100067 #define ROMTYPE_NOT 0x00800000 #define ROMTYPE_QUAD 0x01000000 diff --git a/include/scsi.h b/include/scsi.h index 2012db58..1c1fa7f9 100644 --- a/include/scsi.h +++ b/include/scsi.h @@ -264,6 +264,9 @@ void hardframe_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romco bool malibu_init(struct autoconfig_info*); void malibu_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); +bool addhard_init(struct autoconfig_info*); +void addhard_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc); + uae_u8 idescsi_scsi_get(uaecptr addr); void idescsi_scsi_put(uaecptr addr, uae_u8 v); diff --git a/rommgr.cpp b/rommgr.cpp index add13198..aa04ea39 100644 --- a/rommgr.cpp +++ b/rommgr.cpp @@ -95,7 +95,7 @@ struct romdata *getromdatabypath (const TCHAR *path) return NULL; } -#define NEXT_ROM_ID 209 +#define NEXT_ROM_ID 210 #define ALTROM(id,grp,num,size,flags,crc32,a,b,c,d,e) \ { _T("X"), 0, 0, 0, 0, 0, size, id, 0, 0, flags, (grp << 16) | num, 0, NULL, crc32, a, b, c, d, e }, @@ -382,7 +382,7 @@ static struct romdata roms[] = { { _T("DKB 1230/1240/Cobra"), 1, 23, 1, 23, _T("DKB\0"), 1460, 112, 0, 0, ROMTYPE_CB_DKB, 0, 0, NULL, 0x15ac5257, 0xf0431d02,0xac0f83d3,0x45db18c0,0x23f0cefb,0x33d17217, NULL, NULL }, - { _T("DKB 1230/1240//Cobra + Ferret v1.23"), 1, 23, 1, 23, _T("DKB\0"), 12060, 208, 0, 0, ROMTYPE_CB_DKB, 0, 0, NULL, + { _T("DKB 1230/1240/Cobra + Ferret v1.23"), 1, 23, 1, 23, _T("DKB\0"), 12060, 208, 0, 0, ROMTYPE_CB_DKB, 0, 0, NULL, 0xda878913, 0xb62a68ef,0xb9378d74,0x0be17452,0x1ad07d2e,0xa461a313, NULL, NULL }, { _T("DKB Rapidfire v1.31"), 1, 31, 1, 31, _T("RAPIDFIRE\0"), 11284, 207, 0, 0, ROMTYPE_RAPIDFIRE, 0, 0, NULL, 0x68725e50, 0xa66f8ef6,0x901e0e41,0xf8b72bba,0x12165788,0xa452cf01, NULL, NULL }, @@ -500,6 +500,8 @@ static struct romdata roms[] = { ALTROMPN(200, 1, 2, 8192, ROMTYPE_EVEN | ROMTYPE_8BIT, NULL, 0x098c5529, 0x6f51827d, 0x40a79438, 0x69e2d0fb, 0x6e2e46e9, 0xb65c1244) { _T("California Access Malibu v1.0"), 1, 0, 1, 0, _T("MALIBU\0"), 8192, 201, 0, 0, ROMTYPE_MALIBU, 0, 0, NULL, 0xe60b1ce6, 0xa7c4b709, 0x494f4034, 0x42b8ec11, 0x090dc1d0, 0x18098ebc, NULL, NULL }, + { _T("Ashcom Design AddHard v2.0"), 1, 0, 1, 0, _T("ADDHARD\0"), 16384, 209, 0, 0, ROMTYPE_ADDHARD, 0, 0, NULL, + 0xe9ad804a, 0x9ebabbeb,0xc1e5ce9e,0xd8e43870,0xdd810524,0x770ba6b4, NULL, NULL }, { _T("CyberStorm MK I 68040"), 0, 0, 0, 0, _T("CSMKI\0"), 32768, 95, 0, 0, ROMTYPE_CB_CSMK1, 0, 0, NULL, 0, 0, 0, 0, 0, 0, NULL, _T("cyberstormmk1_040.rom") }, diff --git a/scsi.cpp b/scsi.cpp index 4a515ec8..0364a560 100644 --- a/scsi.cpp +++ b/scsi.cpp @@ -61,7 +61,8 @@ #define NCR5380_DATAFLYERPLUS 30 #define NONCR_HARDFRAME 31 #define NCR5380_MALIBU 32 -#define NCR_LAST 33 +#define NCR5380_ADDHARD 33 +#define NCR_LAST 34 extern int log_scsiemu; @@ -2437,6 +2438,22 @@ static int dataflyerplus_reg(uaecptr addr) return (addr >> 1) & 7; } +// this is clone of trumpcardpro! +static int addhardreg(uaecptr addr) +{ + if (addr & 1) + return -1; + if (addr & 0x8000) + return -1; + if ((addr & 0xe0) == 0x60) + return 8; + if ((addr & 0xe0) != 0x40) + return -1; + addr >>= 1; + addr &= 7; + return addr; +} + static int malibureg(uaecptr addr) { if ((addr & 0xc000) == 0x8000) @@ -2606,6 +2623,21 @@ static uae_u32 ncr80_bget2(struct soft_scsi *ncr, uaecptr addr, int size) } } + } else if (ncr->type == NCR5380_ADDHARD) { + + if (addr & 0x8000) { + v = ncr->rom[addr & 0x7fff]; + } else { + reg = addhardreg(addr); + if (reg >= 0) { + if (reg == 8 && !ncr->dma_active) { + v = 0; + } else { + v = ncr5380_bget(ncr, reg); + } + } + } + } else if (ncr->type == NONCR_HARDFRAME) { if (addr == 0xc0) { @@ -3079,6 +3111,17 @@ static void ncr80_bput2(struct soft_scsi *ncr, uaecptr addr, uae_u32 val, int si ncr5380_bput(ncr, reg, val); } + } else if (ncr->type == NCR5380_ADDHARD) { + + reg = addhardreg(addr); + if (reg >= 0) { + if (reg == 8 && !ncr->dma_active) { + ; + } else { + ncr5380_bput(ncr, reg, val); + } + } + } else if (ncr->type == NONCR_HARDFRAME) { if (addr == 0xc0) { @@ -4524,3 +4567,30 @@ void malibu_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfi { generic_soft_scsi_add(ch, ci, rc, NCR5380_MALIBU, 65536, 16384, ROMTYPE_MALIBU); } + +bool addhard_init(struct autoconfig_info *aci) +{ + const struct expansionromtype *ert = get_device_expansion_rom(ROMTYPE_ADDHARD); + if (!aci->doinit) { + aci->autoconfigp = ert->autoconfig; + return true; + } + + struct soft_scsi *scsi = getscsi(aci->rc); + if (!scsi) + return false; + + load_rom_rc(aci->rc, ROMTYPE_ADDHARD, 16384, 0, scsi->rom, 65536, LOADROM_EVENONLY_ODDONE); + for (int i = 0; i < 16; i++) { + uae_u8 b = ert->autoconfig[i]; + ew(scsi, i * 4, b); + } + aci->addrbank = scsi->bank; + scsi->intena = true; + return true; +} + +void addhard_add_scsi_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc) +{ + generic_soft_scsi_add(ch, ci, rc, NCR5380_ADDHARD, 65536, 32768, ROMTYPE_ADDHARD); +} \ No newline at end of file