} else if (ct >= HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST && ct <= HD_CONTROLLER_TYPE_IDE_LAST) {
_stprintf(hdcs, _T("ide%d_%s"), ci->controller_unit, expansionroms[ct - HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST].name);
romtype = expansionroms[ct - HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST].romtype;
+ } else if (ct >= HD_CONTROLLER_TYPE_CUSTOM_FIRST && ct <= HD_CONTROLLER_TYPE_CUSTOM_LAST) {
+ _stprintf(hdcs, _T("custom%d_%s"), ci->controller_unit, expansionroms[ct - HD_CONTROLLER_TYPE_CUSTOM_FIRST].name);
+ romtype = expansionroms[ct - HD_CONTROLLER_TYPE_CUSTOM_FIRST].romtype;
} else if (ct == HD_CONTROLLER_TYPE_SCSI_AUTO) {
_stprintf(hdcs, _T("scsi%d"), ci->controller_unit);
} else if (ct == HD_CONTROLLER_TYPE_IDE_AUTO) {
_stprintf(hdcs, _T("ide%d"), ci->controller_unit);
- } else if (ct == HD_CONTROLLER_TYPE_PCMCIA) {
- if (ci->controller_type_unit == 0)
- _tcscpy(hdcs, _T("scsram"));
- else
- _tcscpy(hdcs, _T("scide"));
} else if (ct == HD_CONTROLLER_TYPE_UAE) {
_stprintf(hdcs, _T("uae%d"), ci->controller_unit);
}
}
}
}
- if (ci->controller_type_unit > 0 && ct != HD_CONTROLLER_TYPE_PCMCIA)
+ if (ci->controller_type_unit > 0)
_stprintf(hdcs + _tcslen(hdcs), _T("-%d"), ci->controller_type_unit + 1);
str1b = cfgfile_escape (str1, _T(":,"), true);
_stprintf(buf, _T("%s%s_rom"), name, i ? _T("_ext") : _T(""));
cfgfile_dwrite_str (f, buf, rc->romident);
}
- if (rc->autoboot_disabled || ert->subtypes || ert->settings || ert->id_jumper || br->device_order > 0 || is_custom_romboard(br)) {
+ if (rc->autoboot_disabled || rc->inserted || ert->subtypes || ert->settings || ert->id_jumper || br->device_order > 0 || is_custom_romboard(br)) {
TCHAR buf2[256], *p;
buf2[0] = 0;
p = buf2;
_tcscat(buf2, _T(","));
_tcscat(buf2, _T("autoboot_disabled=true"));
}
+ if (rc->inserted) {
+ if (buf2[0])
+ _tcscat(buf2, _T(","));
+ _tcscat(buf2, _T("inserted=true"));
+ }
if (ert->id_jumper) {
TCHAR tmp[256];
_stprintf(tmp, _T("id=%d"), rc->device_id);
_tcscat(s, _T(",default"));
if (cr->filterprofile[0]) {
TCHAR *se = cfgfile_escape(cr->filterprofile, _T(","), true);
- s += _stprintf(s, _T(",filter=%s"), cr->filterprofile);
+ s += _stprintf(s, _T(",filter=%s"), se);
xfree(se);
}
if (cr->commands[0]) {
hdunit = hdc[3] - '0';
if (hdunit < 0 || hdunit >= 6)
hdunit = 0;
- } else if(_tcslen (hdc) >= 5 && !_tcsncmp (hdc, _T("scsi"), 4)) {
+ } else if (_tcslen(hdc) >= 5 && !_tcsncmp(hdc, _T("scsi"), 4)) {
hdcv = HD_CONTROLLER_TYPE_SCSI_AUTO;
hdunit = hdc[4] - '0';
if (hdunit < 0 || hdunit >= 8 + 2)
hdunit = 0;
- } else if (_tcslen(hdc) >= 6 && !_tcsncmp(hdc, _T("scsram"), 6)) {
- hdcv = HD_CONTROLLER_TYPE_PCMCIA;
- hdunit = 0;
- idx = 0;
- } else if (_tcslen(hdc) >= 5 && !_tcsncmp(hdc, _T("scide"), 5)) {
- hdcv = HD_CONTROLLER_TYPE_PCMCIA;
- hdunit = 0;
- idx = 1;
+ } else if (_tcslen(hdc) >= 7 && !_tcsncmp(hdc, _T("custom"), 6)) {
+ hdcv = HD_CONTROLLER_TYPE_CUSTOM_FIRST;
+ hdunit = hdc[6] - '0';
+ if (hdunit < 0 || hdunit >= 8)
+ hdunit = 0;
}
if (hdcv == HD_CONTROLLER_TYPE_UAE) {
hdunit = _tstol(hdc + 3);
if (hdcontrollers[i].romtype) {
for (int j = 0; expansionroms[j].name; j++) {
if ((expansionroms[j].romtype & ROMTYPE_MASK) == hdcontrollers[i].romtype) {
- hdcv = hdcv == HD_CONTROLLER_TYPE_IDE_AUTO ? j + HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST : j + HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST;
+ if (hdcv == HD_CONTROLLER_TYPE_IDE_AUTO) {
+ hdcv = j + HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST;
+ } else if (hdcv == HD_CONTROLLER_TYPE_SCSI_AUTO) {
+ hdcv = j + HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST;
+ } else {
+ hdcv = j + HD_CONTROLLER_TYPE_CUSTOM_FIRST;
+ }
break;
}
}
}
if (hdcv == HD_CONTROLLER_TYPE_IDE_AUTO) {
hdcv = i;
- }
- else if (hdcv == HD_CONTROLLER_TYPE_SCSI_AUTO) {
+ } else if (hdcv == HD_CONTROLLER_TYPE_SCSI_AUTO) {
hdcv = i + HD_CONTROLLER_EXPANSION_MAX;
}
found = true;
if (_tcslen(ert->name) == len && !_tcsnicmp(ext, ert->name, len)) {
if (hdcv == HD_CONTROLLER_TYPE_IDE_AUTO) {
hdcv = HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST + i;
- }
- else {
+ } else if (hdcv == HD_CONTROLLER_TYPE_SCSI_AUTO) {
hdcv = HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST + i;
+ } else {
+ hdcv = HD_CONTROLLER_TYPE_CUSTOM_FIRST + i;
}
break;
}
if (cfgfile_option_bool(buf2, _T("autoboot_disabled")) == 1) {
brc->roms[idx].autoboot_disabled = true;
}
+ if (cfgfile_option_bool(buf2, _T("inserted")) == 1) {
+ brc->roms[idx].inserted= true;
+ }
p = cfgfile_option_get(buf2, _T("order"));
if (p) {
brc->device_order = _tstol(p);
/* SCSI/IDE expansion */
+ {
+ _T("pcmciaide"), _T("PCMCIA IDE"), NULL,
+ NULL, gayle_init_board_io_pcmcia, NULL, NULL, ROMTYPE_PCMCIAIDE | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ NULL, 0,
+ false, EXPANSIONTYPE_IDE | EXPANSIONTYPE_PCMCIA,
+ },
{
_T("apollo"), _T("Apollo 500/2000"), _T("3-State"),
NULL, apollo_init_hd, NULL, apollo_add_scsi_unit, ROMTYPE_APOLLOHD, 0, 0, BOARD_AUTOCONFIG_Z2, false,
false, EXPANSIONTYPE_SCSI,
8498, 27, 0, true, NULL
},
+ {
+ _T("overdrivehd"), _T("Overdrive HD"), _T("Archos"),
+ NULL, gayle_init_board_common_pcmcia, NULL, NULL, ROMTYPE_ARCHOSHD, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ NULL, 0,
+ false, EXPANSIONTYPE_IDE | EXPANSIONTYPE_PCMCIA,
+ },
{
_T("addhard"), _T("AddHard"), _T("Ashcom Design"),
NULL, addhard_init, NULL, addhard_add_scsi_unit, ROMTYPE_ADDHARD, 0, 0, BOARD_AUTOCONFIG_Z2, false,
{ 0x82, 0x64, 0x32, 0x00, 4626 >> 8, 4626 & 255, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00 }
},
{
- _T("ne2000_pcmcia"), _T("RTL8019 PCMCIA (NE2000 compatible)"), NULL,
- NULL, gayle_init_ne2000_pcmcia, NULL, NULL, ROMTYPE_NE2KPCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ _T("ne2000pcmcia"), _T("RTL8019 PCMCIA (NE2000 compatible)"), NULL,
+ NULL, gayle_init_board_io_pcmcia, NULL, NULL, ROMTYPE_NE2KPCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
NULL, 0,
- false, EXPANSIONTYPE_NET,
+ false, EXPANSIONTYPE_NET | EXPANSIONTYPE_PCMCIA,
0, 0, 0, false, NULL,
false, 0, ethernet_settings,
},
},
{
_T("pcmcia_mb"), _T("A600/A1200 PCMCIA"), _T("Commodore"),
- NULL, gayle_pcmcia_init, NULL, gayle_add_pcmcia_unit, ROMTYPE_MB_PCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ NULL, gayle_init_pcmcia, NULL, NULL, ROMTYPE_MB_PCMCIA | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
NULL, 0,
false, EXPANSIONTYPE_INTERNAL
},
// misc
+ {
+ _T("pcmciasram"), _T("PCMCIA SRAM"), NULL,
+ NULL, gayle_init_board_common_pcmcia, NULL, NULL, ROMTYPE_PCMCIASRAM | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ NULL, 0,
+ false, EXPANSIONTYPE_CUSTOM | EXPANSIONTYPE_PCMCIA | EXPANSIONTYPE_CUSTOMDISK,
+ },
{
_T("uaeboard_z2"), _T("UAEBOARD Z2"), NULL,
NULL, uaesndboard_init_z2, NULL, NULL, ROMTYPE_UAEBOARDZ2 | ROMTYPE_NOT, 0, 0, BOARD_AUTOCONFIG_Z2, true,
if (added)
break;
}
+#if 0
} else if (type == HD_CONTROLLER_TYPE_PCMCIA) {
if (uci->controller_type_unit == 0) {
gayle_add_pcmcia_sram_unit (uci);
gayle_add_pcmcia_ide_unit (uci);
added = true;
}
+#endif
}
if (added)
allocuci (&currprefs, nr, -1);
return 0;
}
-int hardfile_added (struct uaedev_config_info *ci)
-{
- if (ci->controller_type == HD_CONTROLLER_TYPE_PCMCIA) {
- if (ci->controller_type_unit == 1)
- return gayle_add_pcmcia_ide_unit(ci);
- if (ci->controller_type_unit == 0)
- return gayle_add_pcmcia_sram_unit(ci);
- }
- return 0;
-}
-
int hardfile_media_change (struct hardfiledata *hfd, struct uaedev_config_info *ci, bool inserted, bool timer)
{
if (!hfd)
#define PCMCIA_SRAM 1
#define PCMCIA_IDE 2
#define PCMCIA_NE2000 3
+#define PCMCIA_ARCHOSHD 4
/*
600000 to 9FFFFF 4 MB Credit Card memory if CC present
#define PCMCIA_IDE_ID 2
static struct ide_hdf *idedrive[TOTAL_IDE * 2];
+static struct ide_hdf *archoshd[2];
struct hd_hardfiledata *pcmcia_sram;
static int pcmcia_card;
static uae_u8 gayle_irq, gayle_int, gayle_cs, gayle_cs_mask, gayle_cfg;
static int ide_splitter;
-static struct ide_thread_state gayle_its;
+static struct ide_thread_state gayle_its, pcmcia_its;
static bool ne2000_pcmcia_irq;
}
static uae_u8 ramsey_config;
-static int garyidoffset;
static int gary_coldboot;
int gary_timeout;
int gary_toenb;
addr &= 0xffff;
if (MBRES_LOG > 0)
write_log (_T("MBRES_WRITE %08X=%08X (%d) PC=%08X S=%d\n"), addr, val, size, M68K_GETPC, regs.s);
- if (addr < 0x8000 && (1 || regs.s)) { /* CPU FC = supervisor only */
+ if (addr < 0x8000) {
uae_u32 addr2 = addr & 3;
uae_u32 addr64 = (addr >> 6) & 3;
- if (addr == 0x1002)
- garyidoffset = -1;
if (addr64 == 0 && addr2 == 0x03)
ramsey_config = val;
if (addr2 == 0x02)
addr &= 0xffff;
- if (1 || regs.s) { /* CPU FC = supervisor only (only newest ramsey/gary? never implemented?) */
- uae_u32 addr2 = addr & 3;
- uae_u32 addr64 = (addr >> 6) & 3;
- /* Gary ID (I don't think this exists in real chips..) */
- if (addr == 0x1002 && currprefs.cs_fatgaryrev >= 0) {
- garyidoffset++;
- garyidoffset &= 7;
- v = (currprefs.cs_fatgaryrev << garyidoffset) & 0x80;
+ uae_u32 addr2 = addr & 3;
+ uae_u32 addr64 = (addr >> 6) & 3;
+ for (;;) {
+ if (addr64 == 1 && addr2 == 0x03) { /* RAMSEY revision */
+ if (currprefs.cs_ramseyrev >= 0)
+ v = currprefs.cs_ramseyrev;
+ break;
}
- for (;;) {
- if (addr64 == 1 && addr2 == 0x03) { /* RAMSEY revision */
- if (currprefs.cs_ramseyrev >= 0)
- v = currprefs.cs_ramseyrev;
- break;
- }
- if (addr64 == 0 && addr2 == 0x03) { /* RAMSEY config */
- if (currprefs.cs_ramseyrev >= 0)
- v = ramsey_config;
- break;
- }
- if (addr2 == 0x03) {
- v = 0xff;
- break;
- }
- if (addr2 == 0x02) { /* coldreboot flag */
- if (currprefs.cs_fatgaryrev >= 0)
- v = gary_coldboot ? 0x80 : 0x00;
- }
- if (addr2 == 0x01) { /* toenb flag */
- if (currprefs.cs_fatgaryrev >= 0)
- v = gary_toenb ? 0x80 : 0x00;
- }
- if (addr2 == 0x00) { /* timeout flag */
- if (currprefs.cs_fatgaryrev >= 0)
- v = gary_timeout ? 0x80 : 0x00;
- }
- v |= 0x7f;
+ if (addr64 == 0 && addr2 == 0x03) { /* RAMSEY config */
+ if (currprefs.cs_ramseyrev >= 0)
+ v = ramsey_config;
break;
}
- } else {
- v = 0xff;
+ if (addr2 == 0x03) {
+ v = 0xff;
+ break;
+ }
+ if (addr2 == 0x02) { /* coldreboot flag */
+ if (currprefs.cs_fatgaryrev >= 0)
+ v = gary_coldboot ? 0x80 : 0x00;
+ }
+ if (addr2 == 0x01) { /* toenb flag */
+ if (currprefs.cs_fatgaryrev >= 0)
+ v = gary_toenb ? 0x80 : 0x00;
+ }
+ if (addr2 == 0x00) { /* timeout flag */
+ if (currprefs.cs_fatgaryrev >= 0)
+ v = gary_timeout ? 0x80 : 0x00;
+ }
+ v |= 0x7f;
+ break;
}
if (MBRES_LOG > 0)
write_log (_T("MBRES_READ %08X=%08X (%d) PC=%08X S=%d\n"), addr, v, size, M68K_GETPC, regs.s);
ne2000->hsync(ne2000_board_state);
if (ide_interrupt_hsync(idedrive[0]) || ide_interrupt_hsync(idedrive[2]) || ide_interrupt_hsync(idedrive[4]) || checkpcmciane2000irq())
devices_rethink_all(rethink_gayle);
+ if (archoshd[0])
+ ide_interrupt_hsync(archoshd[0]);
}
static uaecptr from_gayle_pcmcmia(uaecptr addr)
*p++ = 0xff;
}
-static void checkflush (int addr)
+static void check_sram_flush (int addr)
{
if (pcmcia_card == 0 || pcmcia_sram == 0)
return;
+ if (pcmcia_readonly)
+ return;
if (addr >= 0 && pcmcia_common[0] == 0 && pcmcia_common[1] == 0 && pcmcia_common[2] == 0)
return; // do not flush periodically if used as a ram expension
if (addr < 0) {
static int freepcmcia (int reset)
{
if (pcmcia_sram) {
- checkflush (-1);
+ check_sram_flush(-1);
if (reset) {
hdf_hd_close (pcmcia_sram);
xfree (pcmcia_sram);
pcmcia_card = 1;
initne2000attr();
}
+
+ } else if (type == PCMCIA_ARCHOSHD) {
+
+ pcmcia_sram->hfd.drive_empty = 0;
+ pcmcia_common_size = 0;
+ pcmcia_readonly = 1;
+ pcmcia_type = type;
+ pcmcia_common_size = 4 * 1024 * 1024;
+ pcmcia_common = xcalloc(uae_u8, pcmcia_common_size);
+ pcmcia_attrs_size = 0;
+ pcmcia_card = 1;
+
+ struct romconfig *rc = get_device_romconfig(&currprefs, ROMTYPE_ARCHOSHD, 0);
+ if (rc) {
+ load_rom_rc(rc, ROMTYPE_ARCHOSHD, 32768, 0, pcmcia_common, pcmcia_common_size, 0);
+ }
+
+ pcmcia_its.idetable = archoshd;
+ pcmcia_its.idetotal = 2;
+ start_ide_thread(&pcmcia_its);
+ alloc_ide_mem(archoshd, 2, &pcmcia_its);
+
+ if (reset && path) {
+ add_ide_unit(archoshd, 2, 0, uci, rc);
+ archoshd[0]->byteswap = true;
+ }
+ ide_initialize(archoshd, 0);
+
}
if (pcmcia_card && !(gayle_cs & GAYLE_CS_DIS)) {
return 1;
}
-static uae_u32 gayle_common_read (uaecptr addr)
+static int archoshd_reg(uaecptr addr)
+{
+ if ((addr & 0x7f80) != 0x7f80)
+ return -1;
+ int reg = (addr >> 2) & 7;
+ if (addr & 0x40)
+ reg |= IDE_SECONDARY;
+ return reg;
+}
+
+static uae_u32 gayle_common_read_byte(uaecptr addr)
{
uae_u8 v = 0;
if (PCMCIA_LOG > 2)
return 0;
addr -= PCMCIA_COMMON_START & (PCMCIA_COMMON_SIZE - 1);
addr &= PCMCIA_COMMON_SIZE - 1;
- if (addr < pcmcia_common_size)
+ if (addr < pcmcia_common_size) {
+ if (pcmcia_type == PCMCIA_ARCHOSHD) {
+ if (addr >= 0x7fa0) {
+ int reg = archoshd_reg(addr);
+ v = ide_read_reg(archoshd[0], reg);
+ return v;
+ }
+ }
v = pcmcia_common[addr];
+ }
return v;
}
-static void gayle_common_write (uaecptr addr, uae_u32 v)
+static void gayle_common_write_byte(uaecptr addr, uae_u32 v)
{
if (PCMCIA_LOG > 2)
write_log (_T("PCMCIA COMMON W: %x=%x %x\n"), addr, v, M68K_GETPC);
if (!pcmcia_common_size)
return;
- if (pcmcia_readonly)
- return;
addr -= PCMCIA_COMMON_START & (PCMCIA_COMMON_SIZE - 1);
addr &= PCMCIA_COMMON_SIZE - 1;
if (addr < pcmcia_common_size) {
- if (pcmcia_common[addr] != v) {
- checkflush (addr);
- pcmcia_common[addr] = v;
+ if (pcmcia_type == PCMCIA_ARCHOSHD) {
+ if (addr >= 0x7fa0) {
+ int reg = archoshd_reg(addr);
+ ide_write_reg(archoshd[0], reg, v);
+ }
+ } else {
+ if (pcmcia_readonly)
+ return;
+ if (pcmcia_common[addr] != v) {
+ check_sram_flush(addr);
+ pcmcia_common[addr] = v;
+ }
}
}
}
static uae_u32 REGPARAM2 gayle_common_wget (uaecptr addr)
{
uae_u16 v;
- v = gayle_common_bget (addr) << 8;
- v |= gayle_common_bget (addr + 1);
+ if (pcmcia_type == PCMCIA_ARCHOSHD && archoshd_reg(addr) >= 0) {
+ v = ide_get_data(archoshd[0]);
+ } else {
+ v = gayle_common_bget(addr) << 8;
+ v |= gayle_common_bget(addr + 1);
+ }
return v;
}
static uae_u32 REGPARAM2 gayle_common_bget (uaecptr addr)
{
- return gayle_common_read (addr);
+ return gayle_common_read_byte (addr);
}
static void REGPARAM2 gayle_common_lput (uaecptr addr, uae_u32 value)
{
}
static void REGPARAM2 gayle_common_wput (uaecptr addr, uae_u32 value)
{
- gayle_common_bput (addr, value >> 8);
- gayle_common_bput (addr + 1, value & 0xff);
+ if (pcmcia_type == PCMCIA_ARCHOSHD && archoshd_reg(addr) >= 0) {
+ ide_put_data(archoshd[0], value);
+ } else {
+ gayle_common_bput(addr, value >> 8);
+ gayle_common_bput(addr + 1, value & 0xff);
+ }
}
static void REGPARAM2 gayle_common_bput (uaecptr addr, uae_u32 value)
{
- gayle_common_write (addr, value);
+ gayle_common_write_byte (addr, value);
}
void gayle_map_pcmcia (void)
{
if (currprefs.cs_pcmcia == 0)
return;
+ struct autoconfig_info *aci = expansion_get_autoconfig_by_address(&currprefs, 6 * 1024 * 1024);
if (pcmcia_card == 0 || (gayle_cs & GAYLE_CS_DIS)) {
map_banks_cond (&dummy_bank, 0xa0, 8, 0);
- if (currprefs.chipmem_size <= 4 * 1024 * 1024 && !expansion_get_autoconfig_by_address(&currprefs, 4 * 1024 * 1024))
+ if (currprefs.chipmem_size <= 4 * 1024 * 1024 && (!aci || aci->zorro == 0))
map_banks_cond (&dummy_bank, PCMCIA_COMMON_START >> 16, PCMCIA_COMMON_SIZE >> 16, 0);
} else {
map_banks_cond (&gayle_attr_bank, 0xa0, 8, 0);
- if (currprefs.chipmem_size <= 4 * 1024 * 1024 && !expansion_get_autoconfig_by_address(&currprefs, 4 * 1024 * 1024))
+ if (currprefs.chipmem_size <= 4 * 1024 * 1024 && (!aci || aci->zorro == 0))
map_banks_cond (&gayle_common_bank, PCMCIA_COMMON_START >> 16, PCMCIA_COMMON_SIZE >> 16, 0);
}
}
return true;
}
-static int gayle_ne2000_unit(int insert)
+bool gayle_init_board_io_pcmcia(struct autoconfig_info *aci)
{
- if (insert)
- return initpcmcia(NULL, 0, PCMCIA_NE2000, 1, NULL);
- else
- return freepcmcia(0);
-}
-
-bool gayle_init_ne2000_pcmcia(struct autoconfig_info *aci)
-{
- aci->start = 0xa00000;
- aci->size = 0x1000;
+ aci->start = PCMCIA_ATTRIBUTE_START;
+ aci->size = PCMCIA_ATTRIBUTE_SIZE;
aci->zorro = 0;
aci->parent_address_space = true;
return true;
}
-int gayle_add_pcmcia_sram_unit (struct uaedev_config_info *uci)
+bool gayle_init_board_common_pcmcia(struct autoconfig_info *aci)
{
- return initpcmcia (uci->rootdir, uci->readonly, PCMCIA_SRAM, 1, NULL);
+ aci->start = PCMCIA_COMMON_START;
+ aci->size = PCMCIA_COMMON_SIZE;
+ aci->zorro = 0;
+ aci->parent_address_space = true;
+ return true;
}
-int gayle_add_pcmcia_ide_unit (struct uaedev_config_info *uci)
+bool gayle_init_pcmcia(struct autoconfig_info *aci)
{
- return initpcmcia (uci->rootdir, 0, PCMCIA_IDE, 1, uci);
+ aci->start = PCMCIA_COMMON_START;
+ aci->size = 0xa80000 - aci->start;
+ aci->zorro = 0;
+ return true;
}
-int gayle_modify_pcmcia_sram_unit (struct uaedev_config_info *uci, int insert)
+// eject any inserted PCMCIA card
+void pcmcia_eject(struct uae_prefs *p)
{
- if (insert)
- return initpcmcia (uci->rootdir, uci->readonly, PCMCIA_SRAM, pcmcia_sram ? 0 : 1, NULL);
- else
- return freepcmcia (0);
+ for (int i = 0; i < MAX_EXPANSION_BOARDS; i++) {
+ struct boardromconfig *brc_changed = &changed_prefs.expansionboard[i];
+ struct boardromconfig *brc = &p->expansionboard[i];
+ if (brc->device_type) {
+ const struct expansionromtype *ert = get_device_expansion_rom(brc->device_type);
+ if (ert && (ert->deviceflags & EXPANSIONTYPE_PCMCIA) && brc->roms[0].inserted) {
+ write_log(_T("PCMCIA: '%s' removed\n"), ert->friendlyname);
+ brc->roms[0].inserted = false;
+ brc_changed->roms[0].inserted = false;
+ freepcmcia(0);
+ }
+ }
+ }
}
-int gayle_modify_pcmcia_ide_unit (struct uaedev_config_info *uci, int insert)
+static void pcmcia_card_check(int changecheck)
{
- if (insert)
- return initpcmcia (uci->rootdir, 0, PCMCIA_IDE, pcmcia_sram ? 0 : 1, uci);
- else
- return freepcmcia (0);
-}
+ // allow only max single PCMCIA care inserted
+ bool found = false;
+ for (int i = 0; i < MAX_EXPANSION_BOARDS; i++) {
+ struct boardromconfig *brc_prev = &currprefs.expansionboard[i];
+ struct boardromconfig *brc = &changed_prefs.expansionboard[i];
+ if (brc->device_type) {
+ const struct expansionromtype *ert = get_device_expansion_rom(brc->device_type);
+ if (ert && ert->deviceflags & EXPANSIONTYPE_PCMCIA) {
+ if (found) {
+ brc->roms[0].inserted = false;
+ brc_prev->roms[0].inserted = false;
+ } else if (brc->roms[0].inserted) {
+ found = true;
+ }
+ }
+ }
+ }
-void gayle_add_pcmcia_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc)
-{
-}
-bool gayle_pcmcia_init(struct autoconfig_info *aci)
-{
- aci->start = 0x600000;
- aci->size = 0xa80000 - aci->start;
- aci->zorro = 0;
- return true;
+ for (int i = 0; i < MAX_EXPANSION_BOARDS; i++) {
+ struct boardromconfig *brc_prev = &currprefs.expansionboard[i];
+ struct boardromconfig *brc = &changed_prefs.expansionboard[i];
+ if (brc->device_type) {
+ const struct expansionromtype *ert = get_device_expansion_rom(brc->device_type);
+ if (ert && ert->deviceflags & EXPANSIONTYPE_PCMCIA) {
+ if ((changecheck && brc->roms[0].inserted != brc_prev->roms[0].inserted) || (!changecheck && brc->roms[0].inserted)) {
+ write_log(_T("PCMCIA: '%s' inserted=%d\n"), ert->friendlyname, brc->roms[0].inserted);
+ if (!brc->roms[0].inserted) {
+ // eject card
+ freepcmcia(0);
+ } else {
+ // find matching disk (if it exist)
+ struct uaedev_config_data *ucd = NULL;
+ for (int i = 0; i < currprefs.mountitems; i++) {
+ struct uaedev_config_data *ucdx = &currprefs.mountconfig[i];
+ const struct expansionromtype *ert = get_unit_expansion_rom(ucdx->ci.controller_type);
+ if (ert && ert->romtype == brc->device_type) {
+ ucd = ucdx;
+ break;
+ }
+ }
+ int readonly = 1;
+ switch (brc->device_type & ROMTYPE_MASK)
+ {
+ case ROMTYPE_NE2KPCMCIA:
+ pcmcia_type = PCMCIA_NE2000;
+ break;
+ case ROMTYPE_ARCHOSHD:
+ pcmcia_type = PCMCIA_ARCHOSHD;
+ break;
+ case ROMTYPE_PCMCIAIDE:
+ pcmcia_type = PCMCIA_IDE;
+ if (ucd)
+ readonly = ucd->ci.readonly;
+ break;
+ case ROMTYPE_PCMCIASRAM:
+ pcmcia_type = PCMCIA_SRAM;
+ if (ucd)
+ readonly = ucd->ci.readonly;
+ break;
+ }
+ if (ucd) {
+ // insert (disk type)
+ initpcmcia(ucd->ci.rootdir, readonly, pcmcia_type, 1, &ucd->ci);
+ } else {
+ // insert (other, for example NIC)
+ initpcmcia(NULL, 0, pcmcia_type, 1, NULL);
+ }
+ }
+ board_prefs_changed(brc->device_type, 0);
+ }
+ }
+ }
+ }
}
-
static void initide (void)
{
gayle_its.idetable = idedrive;
void gayle_free (void)
{
stop_ide_thread(&gayle_its);
+ stop_ide_thread(&pcmcia_its);
}
void gayle_reset (int hardreset)
#endif
gayle_bank.name = bankname;
gayle_dataflyer_enable(false);
- if (is_board_enabled(&currprefs, ROMTYPE_NE2KPCMCIA, 0))
- gayle_ne2000_unit(1);
+
+ pcmcia_card_check(0);
}
void check_prefs_changed_gayle(void)
{
if (!currprefs.cs_pcmcia)
return;
- if (is_board_enabled(&currprefs, ROMTYPE_NE2KPCMCIA, 0) != is_board_enabled(&changed_prefs, ROMTYPE_NE2KPCMCIA, 0)) {
- board_prefs_changed(ROMTYPE_NE2KPCMCIA, 0);
- gayle_ne2000_unit(is_board_enabled(&currprefs, ROMTYPE_NE2KPCMCIA, 0));
- }
+ pcmcia_card_check(1);
}
uae_u8 *restore_gayle (uae_u8 *src)
int fsid = uci->configoffset;
struct hardfiledata *hfd;
+#if 0
if (uci->ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA) {
if (uci->ci.controller_type_unit == 0) {
gayle_modify_pcmcia_sram_unit (&uci->ci, insert);
}
return;
}
+#endif
hfd = get_hardfile_data (fsid);
if (!hfd)
return;
#define EXPANSIONTYPE_FALLBACK_DISABLE 0x8000
#define EXPANSIONTYPE_HAS_FALLBACK 0x10000
#define EXPANSIONTYPE_X86_EXPANSION 0x20000
+#define EXPANSIONTYPE_PCMCIA 0x40000
+#define EXPANSIONTYPE_CUSTOMDISK 0x80000
#define EXPANSIONBOARD_CHECKBOX 0
#define EXPANSIONBOARD_MULTI 1
int ansi_version;
};
-#define HD_CONTROLLER_EXPANSION_MAX 120
-#define HD_CONTROLLER_NEXT_UNIT 300
+#define HD_CONTROLLER_EXPANSION_MAX 190
+#define HD_CONTROLLER_NEXT_UNIT 600
#define HD_CONTROLLER_TYPE_UAE 0
#define HD_CONTROLLER_TYPE_IDE_AUTO (HD_CONTROLLER_TYPE_UAE + 1)
#define HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST (HD_CONTROLLER_TYPE_SCSI_FIRST + 1)
#define HD_CONTROLLER_TYPE_SCSI_LAST (HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST + HD_CONTROLLER_EXPANSION_MAX - 1)
-#define HD_CONTROLLER_TYPE_PCMCIA (HD_CONTROLLER_TYPE_SCSI_LAST + 1)
+#define HD_CONTROLLER_TYPE_CUSTOM_FIRST (HD_CONTROLLER_TYPE_SCSI_LAST + 1)
+#define HD_CONTROLLER_TYPE_CUSTOM_LAST (HD_CONTROLLER_TYPE_CUSTOM_FIRST + HD_CONTROLLER_EXPANSION_MAX - 1)
#define FILESYS_VIRTUAL 0
#define FILESYS_HARDFILE 1
extern void hardfile_do_disk_change (struct uaedev_config_data *uci, bool insert);
extern void hardfile_send_disk_change (struct hardfiledata *hfd, bool insert);
extern int hardfile_media_change (struct hardfiledata *hfd, struct uaedev_config_info *ci, bool inserted, bool timer);
-extern int hardfile_added (struct uaedev_config_info *ci);
void hdf_hd_close(struct hd_hardfiledata *hfd);
int hdf_hd_open(struct hd_hardfiledata *hfd);
extern void gayle_free (void);
extern void gayle_add_ide_unit (int ch, struct uaedev_config_info *ci, struct romconfig *rc);
extern bool gayle_ide_init(struct autoconfig_info*);
-extern int gayle_modify_pcmcia_sram_unit (struct uaedev_config_info*, int insert);
-extern int gayle_modify_pcmcia_ide_unit (struct uaedev_config_info*, int insert);
-extern int gayle_add_pcmcia_sram_unit (struct uaedev_config_info*);
-extern int gayle_add_pcmcia_ide_unit(struct uaedev_config_info*);
extern void gayle_free_units (void);
extern void rethink_gayle (void);
extern void gayle_map_pcmcia (void);
extern void check_prefs_changed_gayle(void);
-extern void gayle_add_pcmcia_unit(int ch, struct uaedev_config_info *ci, struct romconfig *rc);
-extern bool gayle_pcmcia_init(struct autoconfig_info*);
-extern bool gayle_init_ne2000_pcmcia(struct autoconfig_info *aci);
-
+extern bool gayle_init_pcmcia(struct autoconfig_info *aci);
+extern bool gayle_init_board_io_pcmcia(struct autoconfig_info *aci);
+extern bool gayle_init_board_common_pcmcia(struct autoconfig_info *aci);
+void pcmcia_eject(struct uae_prefs *p);
extern int gary_toenb; // non-existing memory access = bus error.
extern int gary_timeout; // non-existing memory access = delay
#define PCMCIA_COMMON_START 0x600000
#define PCMCIA_COMMON_SIZE 0x400000
+#define PCMCIA_ATTRIBUTE_START 0xa00000
+#define PCMCIA_ATTRIBUTE_SIZE 0x80000
extern void gayle_dataflyer_enable(bool);
TCHAR romident[256];
uae_u32 board_ram_size;
bool autoboot_disabled;
+ bool inserted;
int device_id;
int device_settings;
int subtype;
#define ROMTYPE_PRELUDE 0x0010007c
#define ROMTYPE_PRELUDE1200 0x0010007d
#define ROMTYPE_TANDEM 0x0010007e
+#define ROMTYPE_ARCHOSHD 0x0010007f
+#define ROMTYPE_PCMCIASRAM 0x00100080
+#define ROMTYPE_PCMCIAIDE 0x00100081
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
}
}
}
+#if 0
for (i = 0; i < currprefs.mountitems; i++) {
extern struct hd_hardfiledata *pcmcia_sram;
int reopen = 0;
hmc_check (&pcmcia_sram->hfd, uci, &rescanned, &reopen, &gotinsert, drvname, inserted);
}
}
-
+#endif
//write_log (_T("win32_hardfile_media_change returned %d\n"), gotinsert);
return gotinsert;
}
else if (canbang && (aci->addrbank->flags & ABFLAG_ALLOCINDIRECT))
lvstruct.lParam |= 16;
}
+ if (aci->rc && aci->ert && (aci->ert->deviceflags & EXPANSIONTYPE_PCMCIA) && !aci->rc->inserted) {
+ lvstruct.lParam |= 2;
+ }
}
lvstruct.iItem = i;
lvstruct.iSubItem = 0;
}
harddisktype (volname_str, ci);
_tcscpy (bootpri_str, _T("n/a"));
- } else if (ctype == HD_CONTROLLER_TYPE_PCMCIA) {
- if (ci->controller_type_unit == 0) {
- _tcscpy (blocksize_str, _T("n/a"));
- _tcscpy(devname_str, _T("PCMCIA SRAM"));
- _tcscpy (volname_str, _T("PCMCIA"));
- _tcscpy (bootpri_str, _T("n/a"));
+ } else if (ctype >= HD_CONTROLLER_TYPE_CUSTOM_FIRST && ctype <= HD_CONTROLLER_TYPE_CUSTOM_LAST) {
+ TCHAR sid[8];
+ const struct expansionromtype *ert = get_unit_expansion_rom(ctype);
+ _stprintf(sid, _T("%d"), ci->controller_unit);
+ if (ert) {
+ if (ci->controller_type_unit == 0)
+ _stprintf(devname_str, _T("%s:%s"), ert->friendlyname, sid);
+ else
+ _stprintf(devname_str, _T("%s:%s/%d"), ert->friendlyname, sid, ci->controller_type_unit + 1);
} else {
- _tcscpy (blocksize_str, _T("n/a"));
- _tcscpy(devname_str, _T("PCMCIA IDE"));
- _tcscpy (volname_str, _T("PCMCIA"));
- _tcscpy (bootpri_str, _T("n/a"));
+ _stprintf(devname_str, _T("PCMCIA"));
}
+ harddisktype(volname_str, ci);
+ _tcscpy(bootpri_str, _T("n/a"));
} else if (type == FILESYS_HARDFILE) {
_stprintf (blocksize_str, _T("%d"), ci->blocksize);
_tcscpy (devname_str, ci->devname);
getromfile(hDlg, IDC_SCSIROMFILE, brc->roms[index].romfile, MAX_DPATH / sizeof(TCHAR));
}
brc->roms[index].autoboot_disabled = ischecked(hDlg, IDC_SCSIROMFILEAUTOBOOT);
+ brc->roms[index].inserted = ischecked(hDlg, IDC_SCSIROMFILEPCMCIA);
int v = SendDlgItemMessage(hDlg, IDC_SCSIROMID, CB_GETCURSEL, 0, 0L);
if (v != CB_ERR && !isnew)
}
ew(hDlg, IDC_SCSIROMFILE, true);
ew(hDlg, IDC_SCSIROMCHOOSER, true);
+ hide(hDlg, IDC_SCSIROMFILEAUTOBOOT, 0);
if (romtype & ROMTYPE_NOT) {
hide(hDlg, IDC_SCSIROMCHOOSER, 1);
hide(hDlg, IDC_SCSIROMFILE, 1);
addromfiles(fkey, hDlg, IDC_SCSIROMFILE, brc ? brc->roms[index].romfile : NULL, romtype, romtype_extra);
setchecked(hDlg, IDC_SCSIROMFILEAUTOBOOT, brc && brc->roms[index].autoboot_disabled);
}
+ if (ert->deviceflags & EXPANSIONTYPE_PCMCIA) {
+ setchecked(hDlg, IDC_SCSIROMFILEPCMCIA, brc && brc->roms[index].inserted);
+ hide(hDlg, IDC_SCSIROMFILEPCMCIA, 0);
+ } else {
+ hide(hDlg, IDC_SCSIROMFILEPCMCIA, 1);
+ if (brc)
+ brc->roms[index].inserted = false;
+ }
} else {
hide(hDlg, IDC_SCSIROMCHOOSER, 0);
hide(hDlg, IDC_SCSIROMFILE, 0);
hide(hDlg, IDC_SCSIROMSELECTED, 1);
+ hide(hDlg, IDC_SCSIROMFILEPCMCIA, 1);
+ hide(hDlg, IDC_SCSIROMFILEAUTOBOOT, 1);
setchecked(hDlg, IDC_SCSIROMSELECTED, false);
setchecked(hDlg, IDC_SCSIROMFILEAUTOBOOT, false);
+ setchecked(hDlg, IDC_SCSIROMFILEPCMCIA, false);
SendDlgItemMessage(hDlg, IDC_SCSIROMFILE, CB_RESETCONTENT, 0, 0);
ew(hDlg, IDC_SCSIROMFILE, false);
ew(hDlg, IDC_SCSIROMCHOOSER, false);
values_from_expansion2dlg(hDlg);
break;
case IDC_SCSIROMFILEAUTOBOOT:
+ case IDC_SCSIROMFILEPCMCIA:
values_from_expansion2dlg(hDlg);
break;
case IDC_SOCKETS:
break;
case IDC_SCSIROMSELECTCAT:
val = SendDlgItemMessage(hDlg, IDC_SCSIROMSELECTCAT, CB_GETCURSEL, 0, 0);
- if (val != CB_ERR) {
+ if (val != CB_ERR && val != scsiromselectedcatnum) {
scsiromselectedcatnum = val;
scsiromselected = 0;
init_expansion2(hDlg, false);
for (i = 0; i < 16; i++) {
hdf_read_rdb (&hfd, id, i * 512, 512);
if (i == 0 && !memcmp (id + 2, "CIS", 3)) {
- hdf->ci.controller_type = HD_CONTROLLER_TYPE_PCMCIA;
+ hdf->ci.controller_type = HD_CONTROLLER_TYPE_CUSTOM_FIRST;
hdf->ci.controller_type_unit = 0;
break;
}
hide(hDlg, IDC_RESERVED_TEXT, rdb);
hide(hDlg, IDC_CYLINDERS_TEXT, !rdb);
gui_set_string_cursor(hdmenutable, hDlg, IDC_HDF_CONTROLLER, current_hfdlg.ci.controller_type + current_hfdlg.ci.controller_type_unit * HD_CONTROLLER_NEXT_UNIT);
- SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_unit, 0);
sethardfiletypes(hDlg);
}
}
}
+#if 0
gui_add_string(hdmenutable, hDlg, IDC_HDF_CONTROLLER, 0, _T(""));
for (int i = 0; expansionroms[i].name; i++) {
const struct expansionromtype *erc = &expansionroms[i];
if ((erc->romtype & ROMTYPE_MASK) == ROMTYPE_MB_PCMCIA) {
- addhdcontroller(hDlg, erc, hdmenutable, HD_CONTROLLER_TYPE_PCMCIA, 0);
+ addhdcontroller(hDlg, erc, hdmenutable, HD_CONTROLLER_TYPE_CUSTOM_FIRST + i, 0);
ctype_unit = 0;
}
}
+#endif
+
+ gui_add_string(hdmenutable, hDlg, IDC_HDF_CONTROLLER, 0, _T(""));
+ for (int i = 0; expansionroms[i].name; i++) {
+ const struct expansionromtype *erc = &expansionroms[i];
+ if (erc->deviceflags & EXPANSIONTYPE_CUSTOMDISK) {
+ addhdcontroller(hDlg, erc, hdmenutable, HD_CONTROLLER_TYPE_CUSTOM_FIRST + i, EXPANSIONTYPE_CUSTOMDISK);
+ break;
+ }
+ }
gui_set_string_cursor(hdmenutable, hDlg, IDC_HDF_CONTROLLER, ctype + ctype_unit * HD_CONTROLLER_NEXT_UNIT);
}
if (media)
ew(hDlg, IDC_HDF_CONTROLLER_UNIT, TRUE);
- } else if (ctype == HD_CONTROLLER_TYPE_PCMCIA) {
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_ADDSTRING, 0, (LPARAM)_T("SRAM"));
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_ADDSTRING, 0, (LPARAM)_T("IDE"));
- ew(hDlg, IDC_HDF_CONTROLLER_UNIT, TRUE);
+ } else if (ctype >= HD_CONTROLLER_TYPE_CUSTOM_FIRST && ctype <= HD_CONTROLLER_TYPE_CUSTOM_LAST) {
+ ew(hDlg, IDC_HDF_CONTROLLER_UNIT, FALSE);
} else if (ctype == HD_CONTROLLER_TYPE_UAE) {
for (int i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
TCHAR tmp[100];
int heads = phys ? current_hfdlg.ci.pheads : current_hfdlg.ci.surfaces;
int secs = phys ? current_hfdlg.ci.psecs : current_hfdlg.ci.sectors;
if (!cyls && current_hfdlg.ci.blocksize && secs && heads) {
- cyls = bsize / (current_hfdlg.ci.blocksize * secs * heads);
+ cyls = bsize / ((uae_u64)current_hfdlg.ci.blocksize * secs * heads);
}
blocks = cyls * (secs * heads);
if (!blocks && current_hfdlg.ci.blocksize)
blocks, (int)(bsize / current_hfdlg.ci.blocksize),
(double)blocks * 1.0 * current_hfdlg.ci.blocksize / (1024.0 * 1024.0),
(double)bsize / (1024.0 * 1024.0));
- if (cyls * heads * secs > bsize / current_hfdlg.ci.blocksize) {
+ if ((uae_u64)cyls * heads * secs > bsize / current_hfdlg.ci.blocksize) {
_tcscat (tmp2, _T(" [Geometry larger than drive!]"));
} else if (cyls > 65535) {
_tcscat (tmp2, _T(" [Too many cyls]"));
case WM_INITDIALOG:
recursive++;
inithdcontroller(hDlg, current_tapedlg.ci.controller_type, current_tapedlg.ci.controller_type_unit, UAEDEV_TAPE, current_tapedlg.ci.rootdir[0] != 0);
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_tapedlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_tapedlg.ci.controller_unit : current_tapedlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_tapedlg.ci.controller_unit, 0);
setautocomplete (hDlg, IDC_PATH_NAME);
addhistorymenu(hDlg, current_tapedlg.ci.rootdir, IDC_PATH_NAME, HISTORY_TAPE, false);
readonly = !tape_can_write(current_tapedlg.ci.rootdir);
if (posn != CB_ERR) {
current_tapedlg.ci.controller_type = posn % HD_CONTROLLER_NEXT_UNIT;
current_tapedlg.ci.controller_type_unit = posn / HD_CONTROLLER_NEXT_UNIT;
- if (current_tapedlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
- current_tapedlg.ci.controller_type_unit = 1;
inithdcontroller(hDlg, current_tapedlg.ci.controller_type, current_tapedlg.ci.controller_type_unit, UAEDEV_TAPE, current_tapedlg.ci.rootdir);
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_tapedlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_tapedlg.ci.controller_unit : current_tapedlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_tapedlg.ci.controller_unit, 0);
}
break;
case IDC_HDF_CONTROLLER_UNIT:
posn = SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_GETCURSEL, 0, 0);
if (posn != CB_ERR) {
- if (current_tapedlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
- current_tapedlg.ci.controller_type_unit = posn;
- else
- current_tapedlg.ci.controller_unit = posn;
+ current_tapedlg.ci.controller_unit = posn;
}
break;
}
is_board_enabled(&workprefs, ROMTYPE_GVPS2, 0) || is_board_enabled(&workprefs, ROMTYPE_A4091, 0) ||
(workprefs.cs_mbdmac & 3)) ? HD_CONTROLLER_TYPE_SCSI_AUTO : HD_CONTROLLER_TYPE_IDE_AUTO;
inithdcontroller(hDlg, current_cddlg.ci.controller_type, current_cddlg.ci.controller_type_unit, UAEDEV_CD, current_cddlg.ci.rootdir[0] != 0);
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_cddlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_cddlg.ci.controller_unit : current_cddlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_cddlg.ci.controller_unit, 0);
InitializeListView (hDlg);
recursive--;
customDlgType = IDD_CDDRIVE;
if (posn != CB_ERR) {
current_cddlg.ci.controller_type = posn % HD_CONTROLLER_NEXT_UNIT;
current_cddlg.ci.controller_type_unit = posn / HD_CONTROLLER_NEXT_UNIT;
- if (current_cddlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
- current_cddlg.ci.controller_type_unit = 1;
inithdcontroller(hDlg, current_cddlg.ci.controller_type, current_cddlg.ci.controller_type_unit, UAEDEV_CD, current_cddlg.ci.rootdir[0] != 0);
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_cddlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_cddlg.ci.controller_unit : current_cddlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_cddlg.ci.controller_unit, 0);
}
break;
case IDC_HDF_CONTROLLER_UNIT:
posn = SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_GETCURSEL, 0, 0);
if (posn != CB_ERR) {
- if (current_cddlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
- current_cddlg.ci.controller_type_unit = posn;
- else
- current_cddlg.ci.controller_unit = posn;
+ current_cddlg.ci.controller_unit = posn;
}
break;
}
if (posn != CB_ERR) {
current_hfdlg.ci.controller_type = posn % HD_CONTROLLER_NEXT_UNIT;
current_hfdlg.ci.controller_type_unit = posn / HD_CONTROLLER_NEXT_UNIT;
- if (current_hfdlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
- current_hfdlg.ci.controller_type_unit = 1;
inithdcontroller(hDlg, current_hfdlg.ci.controller_type, current_hfdlg.ci.controller_type_unit, UAEDEV_HDF, current_hfdlg.ci.rootdir[0] != 0);
sethardfile(hDlg);
}
case IDC_HDF_CONTROLLER_UNIT:
posn = SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_GETCURSEL, 0, 0);
if (posn != CB_ERR) {
- if (current_hfdlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
- current_hfdlg.ci.controller_type_unit = posn;
- else
- current_hfdlg.ci.controller_unit = posn;
+ current_hfdlg.ci.controller_unit = posn;
sethardfile(hDlg);
}
break;
if (index >= 0) {
SendDlgItemMessage (hDlg, IDC_HARDDRIVE, CB_SETCURSEL, index, 0);
gui_set_string_cursor(hdmenutable, hDlg, IDC_HDF_CONTROLLER, current_hfdlg.ci.controller_type + current_hfdlg.ci.controller_type_unit * HD_CONTROLLER_NEXT_UNIT);
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_unit, 0);
SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_TYPE, CB_SETCURSEL, current_hfdlg.ci.controller_media_type, 0);
SendDlgItemMessage(hDlg, IDC_HDF_FEATURE_LEVEL, CB_SETCURSEL, current_hfdlg.ci.unit_feature_level, 0);
}
if (!(flags & 1))
current_hfdlg.ci.loadidentity = false;
gui_set_string_cursor(hdmenutable, hDlg, IDC_HDF_CONTROLLER, current_hfdlg.ci.controller_type + current_hfdlg.ci.controller_type_unit * MAX_DUPLICATE_EXPANSION_BOARDS);
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_unit, 0);
CheckDlgButton(hDlg, IDC_HDF_RW, !current_hfdlg.ci.readonly);
_tcscpy (current_hfdlg.ci.rootdir, hdf_getnameharddrive ((int)posn, 4, ¤t_hfdlg.ci.blocksize, NULL, NULL));
setharddrive(hDlg);
SetDlgItemText(hDlg, IDC_HDFINFO3, _T(""));
updatehdfinfo (hDlg, true, true);
inithdcontroller(hDlg, current_hfdlg.ci.controller_type, current_hfdlg.ci.controller_type_unit, UAEDEV_HDF, current_hfdlg.ci.rootdir[0] != 0);
- SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_type != HD_CONTROLLER_TYPE_PCMCIA ? current_hfdlg.ci.controller_unit : current_hfdlg.ci.controller_type_unit, 0);
+ SendDlgItemMessage(hDlg, IDC_HDF_CONTROLLER_UNIT, CB_SETCURSEL, current_hfdlg.ci.controller_unit, 0);
sethardfiletypes(hDlg);
}
break;
case IDC_HDF_CONTROLLER_UNIT:
posn = SendDlgItemMessage (hDlg, IDC_HDF_CONTROLLER_UNIT, CB_GETCURSEL, 0, 0);
if (posn != CB_ERR) {
- if (current_hfdlg.ci.controller_type == HD_CONTROLLER_TYPE_PCMCIA)
- current_hfdlg.ci.controller_type_unit = posn;
- else
- current_hfdlg.ci.controller_unit = posn;
+ current_hfdlg.ci.controller_unit = posn;
}
break;
case IDC_HDF_CONTROLLER_TYPE:
struct hardfiledata *hfd = get_hardfile_data (uci->configoffset);
if (hfd)
hardfile_media_change (hfd, &ci, true, false);
- else
- hardfile_added(&ci);
}
}
struct hardfiledata *hfd = get_hardfile_data (uci->configoffset);
if (hfd)
hardfile_media_change (hfd, ¤t_hfdlg.ci, true, false);
- else
- hardfile_added(¤t_hfdlg.ci);
}
}
return &expansionroms[hdunit - HD_CONTROLLER_TYPE_SCSI_EXPANSION_FIRST];
if (hdunit >= HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST && hdunit <= HD_CONTROLLER_TYPE_IDE_LAST)
return &expansionroms[hdunit - HD_CONTROLLER_TYPE_IDE_EXPANSION_FIRST];
+ if (hdunit >= HD_CONTROLLER_TYPE_CUSTOM_FIRST && hdunit <= HD_CONTROLLER_TYPE_CUSTOM_LAST)
+ return &expansionroms[hdunit - HD_CONTROLLER_TYPE_CUSTOM_FIRST];
return NULL;
}