Expansion string config entry support.

This commit is contained in:
Toni Wilen 2016-10-21 18:59:16 +03:00
parent 9da23ce493
commit e5afa105ed
12 changed files with 156 additions and 73 deletions

View File

@ -36,6 +36,7 @@
#include "gfxboard.h"
#include "cpuboard.h"
#include "luascript.h"
#include "ethernet.h"
#include "native2amiga_api.h"
#define cfgfile_warning write_log
@ -1094,14 +1095,25 @@ static void write_resolution (struct zfile *f, const TCHAR *ws, const TCHAR *hs,
}
}
static int cfgfile_read_rom_settings(const struct expansionboardsettings *ebs, const TCHAR *buf)
static int cfgfile_read_rom_settings(const struct expansionboardsettings *ebs, const TCHAR *buf, TCHAR *configtext)
{
int settings = 0;
int bitcnt = 0;
int sstr = 0;
if (configtext)
configtext[0] = 0;
TCHAR *ct = configtext;
for (int i = 0; ebs[i].name; i++) {
const struct expansionboardsettings *eb = &ebs[i];
bitcnt += eb->bitshift;
if (eb->multiselect) {
if (eb->type == EXPANSIONBOARD_STRING) {
const TCHAR *p = cfgfile_option_get(buf, eb->configname);
if (p) {
_tcscpy(ct, p);
ct += _tcslen(ct);
}
*ct++ = 0;
} else if (eb->type == EXPANSIONBOARD_MULTI) {
int itemcnt = -1;
int itemfound = 0;
const TCHAR *p = eb->configname;
@ -1142,13 +1154,25 @@ static int cfgfile_read_rom_settings(const struct expansionboardsettings *ebs, c
return settings;
}
static void cfgfile_write_rom_settings(const struct expansionboardsettings *ebs, TCHAR *buf, int settings)
static void cfgfile_write_rom_settings(const struct expansionboardsettings *ebs, TCHAR *buf, int settings, const TCHAR *settingstring)
{
int bitcnt = 0;
int sstr = 0;
for (int j = 0; ebs[j].name; j++) {
const struct expansionboardsettings *eb = &ebs[j];
bitcnt += eb->bitshift;
if (eb->multiselect) {
if (eb->type == EXPANSIONBOARD_STRING) {
if (settingstring) {
const TCHAR *p = settingstring;
for (int i = 0; i < sstr; i++) {
p += _tcslen(p) + 1;
}
if (buf[0])
_tcscat(buf, _T(","));
_stprintf(buf, _T("%s=%s"), eb->configname, p);
sstr++;
}
} else if (eb->type == EXPANSIONBOARD_MULTI) {
int itemcnt = -1;
const TCHAR *p = eb->configname;
while (p[0]) {
@ -1247,7 +1271,7 @@ static void cfgfile_write_board_rom(struct uae_prefs *prefs, struct zfile *f, st
_tcscat(buf2, tmp);
}
if (br->roms[i].device_settings && ert->settings) {
cfgfile_write_rom_settings(ert->settings, buf2, br->roms[i].device_settings);
cfgfile_write_rom_settings(ert->settings, buf2, br->roms[i].device_settings, br->roms[i].configtext);
}
if (buf2[0])
cfgfile_dwrite_str (f, buf, buf2);
@ -1627,12 +1651,27 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
}
cfgfile_write_bool (f, _T("bsdsocket_emu"), p->socket_emu);
if (p->a2065name[0])
cfgfile_write_str (f, _T("a2065"), p->a2065name);
if (p->ne2000pciname[0])
cfgfile_write_str(f, _T("ne2000_pci"), p->ne2000pciname);
if (p->ne2000pcmcianame[0])
cfgfile_write_str(f, _T("ne2000_pcmcia"), p->ne2000pcmcianame);
{
// backwards compatibility
const TCHAR *name;
struct romconfig *rc;
rc = get_device_romconfig(p, ROMTYPE_A2065, 0);
if (rc) {
name = ethernet_getselectionname(rc ? rc->device_settings : 0);
cfgfile_write_str(f, _T("a2065"), name);
}
rc = get_device_romconfig(p, ROMTYPE_NE2KPCMCIA, 0);
if (rc) {
name = ethernet_getselectionname(rc ? rc->device_settings : 0);
cfgfile_write_str(f, _T("ne2000_pcmcia"), name);
}
rc = get_device_romconfig(p, ROMTYPE_NE2KPCI, 0);
if (rc) {
name = ethernet_getselectionname(rc ? rc->device_settings : 0);
cfgfile_write_str(f, _T("ne2000_pci"), name);
}
}
#ifdef WITH_SLIRP
tmp[0] = 0;
@ -1975,22 +2014,22 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
cfgfile_dwrite_bool(f, _T("color_burst"), p->cs_color_burst);
cfgfile_dwrite (f, _T("chipset_hacks"), _T("0x%x"), p->cs_hacks);
if (cfgfile_board_enabled(p, ROMTYPE_CD32CART, 0)) {
if (is_board_enabled(p, ROMTYPE_CD32CART, 0)) {
cfgfile_dwrite_bool(f, _T("cd32fmv"), true);
}
if (cfgfile_board_enabled(p, ROMTYPE_MB_IDE, 0) && p->cs_ide == 1) {
if (is_board_enabled(p, ROMTYPE_MB_IDE, 0) && p->cs_ide == 1) {
cfgfile_dwrite_str(f, _T("ide"), _T("a600/a1200"));
}
if (cfgfile_board_enabled(p, ROMTYPE_MB_IDE, 0) && p->cs_ide == 2) {
if (is_board_enabled(p, ROMTYPE_MB_IDE, 0) && p->cs_ide == 2) {
cfgfile_dwrite_str(f, _T("ide"), _T("a4000"));
}
if (cfgfile_board_enabled(p, ROMTYPE_CDTVSCSI, 0)) {
if (is_board_enabled(p, ROMTYPE_CDTVSCSI, 0)) {
cfgfile_dwrite_bool(f, _T("scsi_cdtv"), true);
}
if (cfgfile_board_enabled(p, ROMTYPE_SCSI_A3000, 0)) {
if (is_board_enabled(p, ROMTYPE_SCSI_A3000, 0)) {
cfgfile_dwrite_bool(f, _T("scsi_a3000"), true);
}
if (cfgfile_board_enabled(p, ROMTYPE_SCSI_A4000T, 0)) {
if (is_board_enabled(p, ROMTYPE_SCSI_A4000T, 0)) {
cfgfile_dwrite_bool(f, _T("scsi_a4000t"), true);
}
@ -2034,7 +2073,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
cfgfile_dwrite_str(f, _T("cpuboard_type"), cbst->configname);
if (cbs && p->cpuboard_settings) {
tmp[0] = 0;
cfgfile_write_rom_settings(cbs, tmp, p->cpuboard_settings);
cfgfile_write_rom_settings(cbs, tmp, p->cpuboard_settings, NULL);
cfgfile_dwrite_str(f, _T("cpuboard_settings"), tmp);
}
} else {
@ -4449,18 +4488,6 @@ invalid_fs:
return 0;
}
bool cfgfile_board_enabled(struct uae_prefs *p, int romtype, int devnum)
{
int idx;
if (romtype == ROMTYPE_CPUBOARD && p->cpuboard_type) {
return devnum == 0;
}
struct boardromconfig *brc = get_device_rom(p, romtype, devnum, &idx);
if (!brc)
return false;
return brc->roms[idx].romfile[0] != 0;
}
static bool cfgfile_read_board_rom(struct uae_prefs *p, const TCHAR *option, const TCHAR *value, struct multipath *mp)
{
TCHAR buf[256], buf2[MAX_DPATH], buf3[MAX_DPATH];
@ -4489,6 +4516,10 @@ static bool cfgfile_read_board_rom(struct uae_prefs *p, const TCHAR *option, con
_stprintf(buf, _T("%s_rom_file"), name);
if (cfgfile_path(option, value, buf, buf2, MAX_DPATH / sizeof (TCHAR), mp)) {
if (buf2[0]) {
if (ert->deviceflags & EXPANSIONTYPE_NET) {
// make sure network settings are available before parsing net "rom" entries
ethernet_updateselection();
}
brc = get_device_rom_new(p, ert->romtype, j, &idx);
_tcscpy(brc->roms[idx].romfile, buf2);
}
@ -4530,7 +4561,7 @@ static bool cfgfile_read_board_rom(struct uae_prefs *p, const TCHAR *option, con
brc->device_order = _tstol(p);
}
if (ert->settings) {
brc->roms[idx].device_settings = cfgfile_read_rom_settings(ert->settings, buf2);
brc->roms[idx].device_settings = cfgfile_read_rom_settings(ert->settings, buf2, brc->roms[idx].configtext);
}
if (ert->id_jumper) {
p = cfgfile_option_get(buf2, _T("id"));
@ -4582,6 +4613,23 @@ static void addbcromtype(struct uae_prefs *p, int romtype, bool add, const TCHAR
}
}
static void addbcromtypenet(struct uae_prefs *p, int romtype, const TCHAR *netname, int devnum)
{
if (netname == NULL || netname[0] == 0) {
clear_device_rom(p, romtype, devnum, true);
} else {
struct boardromconfig *brc = get_device_rom_new(p, romtype, devnum, NULL);
if (brc) {
if (!brc->roms[0].romfile[0]) {
_tcscpy(brc->roms[0].romfile, _T(":ENABLED"));
}
ethernet_updateselection();
if (!brc->roms[0].device_settings)
brc->roms[0].device_settings = ethernet_getselection(netname);
}
}
}
static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCHAR *value)
{
int tmpval, dummyint, i;
@ -4913,7 +4961,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH
p->cpuboard_settings = 0;
const struct cpuboardsubtype *cbst = &cpuboards[p->cpuboard_type].subtypes[p->cpuboard_subtype];
if (cbst->settings) {
p->cpuboard_settings = cfgfile_read_rom_settings(cbst->settings, tmpbuf);
p->cpuboard_settings = cfgfile_read_rom_settings(cbst->settings, tmpbuf, NULL);
}
return 1;
}
@ -5109,15 +5157,15 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH
return 0;
}
static void romtype_restricted(struct uae_prefs *p, int *list)
static void romtype_restricted(struct uae_prefs *p, const int *list)
{
for (int i = 0; list[i]; i++) {
int romtype = list[i];
if (cfgfile_board_enabled(p, romtype, 0)) {
if (is_board_enabled(p, romtype, 0)) {
i++;
while (list[i]) {
romtype = list[i];
if (cfgfile_board_enabled(p, romtype, 0)) {
if (is_board_enabled(p, romtype, 0)) {
addbcromtype(p, romtype, false, NULL, 0);
}
i++;
@ -5256,13 +5304,20 @@ void cfgfile_compatibility_romtype(struct uae_prefs *p)
addbcromtype(p, ROMTYPE_CD32CART, p->cs_cd32fmv, p->cartfile,0);
addbcromtype(p, ROMTYPE_A2065, p->a2065name[0] != 0, NULL, 0);
addbcromtype(p, ROMTYPE_NE2KPCMCIA, p->ne2000pcmcianame[0] != 0, NULL, 0);
addbcromtype(p, ROMTYPE_NE2KPCI, p->ne2000pciname[0] != 0, NULL, 0);
if (p->config_version < ((3 << 16) | (4 << 8) | (0 << 0))) {
// 3.3.0 or older
addbcromtypenet(p, ROMTYPE_A2065, p->a2065name, 0);
addbcromtypenet(p, ROMTYPE_NE2KPCMCIA, p->ne2000pcmcianame, 0);
addbcromtypenet(p, ROMTYPE_NE2KPCI, p->ne2000pciname, 0);
}
static int restricted_net[] = { ROMTYPE_A2065, ROMTYPE_NE2KPCMCIA, ROMTYPE_NE2KPCI, ROMTYPE_NE2KISA, ROMTYPE_ARIADNE2, ROMTYPE_XSURF, ROMTYPE_XSURF100Z2, ROMTYPE_XSURF100Z3, 0 };
static int restricted_x86[] = { ROMTYPE_A1060, ROMTYPE_A2088, ROMTYPE_A2088T, ROMTYPE_A2286, ROMTYPE_A2386, 0 };
static int restricted_pci[] = { ROMTYPE_GREX, ROMTYPE_MEDIATOR, ROMTYPE_PROMETHEUS, 0 };
static const int restricted_net[] = {
ROMTYPE_A2065, ROMTYPE_NE2KPCMCIA, ROMTYPE_NE2KPCI, ROMTYPE_NE2KISA,
ROMTYPE_ARIADNE2, ROMTYPE_XSURF, ROMTYPE_XSURF100Z2, ROMTYPE_XSURF100Z3,
ROMTYPE_HYDRA, ROMTYPE_LANROVER,
0 };
static const int restricted_x86[] = { ROMTYPE_A1060, ROMTYPE_A2088, ROMTYPE_A2088T, ROMTYPE_A2286, ROMTYPE_A2386, 0 };
static const int restricted_pci[] = { ROMTYPE_GREX, ROMTYPE_MEDIATOR, ROMTYPE_PROMETHEUS, 0 };
romtype_restricted(p, restricted_net);
romtype_restricted(p, restricted_x86);
romtype_restricted(p, restricted_pci);

View File

@ -9800,8 +9800,8 @@ uae_u8 *save_custom_extra (int *len, uae_u8 *dstptr)
SB (currprefs.cs_a1000ram ? 1 : 0);
SB (currprefs.cs_slowmemisfast ? 1 : 0);
SB (cfgfile_board_enabled(&currprefs, ROMTYPE_A2091, 0) ? 1 : 0);
SB (cfgfile_board_enabled(&currprefs, ROMTYPE_A4091, 0) ? 1 : 0);
SB (is_board_enabled(&currprefs, ROMTYPE_A2091, 0) ? 1 : 0);
SB (is_board_enabled(&currprefs, ROMTYPE_A4091, 0) ? 1 : 0);
SB (currprefs.cs_cdtvscsi ? 1 : 0);
SB (currprefs.cs_pcmcia ? 1 : 0);

View File

@ -1473,7 +1473,7 @@ static const uae_u8 alfplus_autoconfig[16] = { 0xd1, 38, 0x00, 0x00, 0x08, 0x2c,
bool alf_init(struct autoconfig_info *aci)
{
bool alfplus = cfgfile_board_enabled(&currprefs, ROMTYPE_ALFAPLUS, 0);
bool alfplus = is_board_enabled(&currprefs, ROMTYPE_ALFAPLUS, 0);
if (!aci->doinit) {
aci->autoconfigp = alfplus ? alfplus_autoconfig : alf_autoconfig;
return true;

View File

@ -184,11 +184,15 @@ typedef void(*DEVICE_MEMORY_CALLBACK)(struct romconfig*, uae_u8*, int);
#define EXPANSIONTYPE_FALLBACK_DISABLE 0x8000
#define EXPANSIONTYPE_HAS_FALLBACK 0x10000
#define EXPANSIONBOARD_CHECKBOX 0
#define EXPANSIONBOARD_MULTI 1
#define EXPANSIONBOARD_STRING 2
struct expansionboardsettings
{
const TCHAR *name;
const TCHAR *configname;
bool multiselect;
int type;
bool invert;
int bitshift;
};

View File

@ -359,6 +359,7 @@ struct romconfig
int device_settings;
int subtype;
void *unitdata;
TCHAR configtext[256];
struct boardromconfig *back;
};
#define MAX_BOARD_ROMS 2
@ -869,7 +870,6 @@ extern int cfgfile_configuration_change (int);
extern void fixup_prefs_dimensions (struct uae_prefs *prefs);
extern void fixup_prefs (struct uae_prefs *prefs, bool userconfig);
extern void fixup_cpu (struct uae_prefs *prefs);
extern bool cfgfile_board_enabled(struct uae_prefs *p, int romtype, int devnum);
extern void cfgfile_compatibility_romtype(struct uae_prefs *p);
extern void cfgfile_compatibility_rtg(struct uae_prefs *p);

View File

@ -9,7 +9,7 @@
typedef uae_u32(REGPARAM3 *pci_get_func)(struct pci_board_state*,uaecptr) REGPARAM;
typedef void (REGPARAM3 *pci_put_func)(struct pci_board_state*,uaecptr,uae_u32) REGPARAM;
typedef void (*pci_dev_irq)(struct pci_board_state*,bool);
typedef bool(*pci_dev_init)(struct pci_board_state*);
typedef bool(*pci_dev_init)(struct pci_board_state*,struct autoconfig_info*);
typedef void(*pci_dev_reset)(struct pci_board_state*);
typedef void(*pci_dev_hsync)(struct pci_board_state*);
typedef void(*pci_dev_free)(struct pci_board_state*);

View File

@ -900,7 +900,7 @@ static void ncr9x_io_bput(struct ncr9x_state *ncr, uaecptr addr, uae_u32 val)
return;
}
} else if (ISCPUBOARD(BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1230IV) || ISCPUBOARD(BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1260)) {
if (!cfgfile_board_enabled(&currprefs, ROMTYPE_BLIZKIT4, 0))
if (!is_board_enabled(&currprefs, ROMTYPE_BLIZKIT4, 0))
return;
if (addr >= BLIZZARD_SCSI_KIT4_DMA_OFFSET) {
addr &= 0x18000;
@ -1193,7 +1193,7 @@ static uae_u32 ncr9x_io_bget(struct ncr9x_state *ncr, uaecptr addr)
return ncr->led;
}
} else if (ISCPUBOARD(BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1230IV) || ISCPUBOARD(BOARD_BLIZZARD, BOARD_BLIZZARD_SUB_1260)) {
if (!cfgfile_board_enabled(&currprefs, ROMTYPE_BLIZKIT4, 0))
if (!is_board_enabled(&currprefs, ROMTYPE_BLIZKIT4, 0))
return 0;
if (addr >= BLIZZARD_SCSI_KIT4_DMA_OFFSET)
return 0;

34
pci.cpp
View File

@ -105,7 +105,7 @@ static struct pci_board *pci_board_alloc(struct pci_config *config)
return pci;
}
static void pci_board_add(struct pci_bridge *pcib, const struct pci_board *pci, int slot, int func)
static void pci_board_add(struct pci_bridge *pcib, const struct pci_board *pci, int slot, int func, struct autoconfig_info *aci)
{
struct pci_board_state *pcibs = &pcib->boards[pcib->slot_cnt];
pcib->slot_cnt++;
@ -119,7 +119,7 @@ static void pci_board_add(struct pci_bridge *pcib, const struct pci_board *pci,
pcibs->bar_size[i] = pci->config->bars[i];
}
if (pci->init)
pci->init(pcibs);
pci->init(pcibs, aci);
if (pci->hsync) {
for (int i = 0; i < MAX_PCI_BOARDS; i++) {
if (hsyncs[i] == NULL) {
@ -1465,27 +1465,23 @@ static const struct pci_board ncr_53c815_pci_board =
}
};
static void add_pci_devices(struct pci_bridge *pcib)
static void add_pci_devices(struct pci_bridge *pcib, struct autoconfig_info *aci)
{
int slot = 0;
if (currprefs.ne2000pciname[0]) {
pci_board_add(pcib, &ne2000_pci_board, slot++, 0);
if (is_device_rom(&currprefs, ROMTYPE_NE2KPCI, 0) >= 0) {
pci_board_add(pcib, &ne2000_pci_board, slot++, 0, aci);
}
if (is_device_rom(&currprefs, ROMTYPE_FM801, 0) >= 0) {
pci_board_add(pcib, &fm801_pci_board, slot, 0);
pci_board_add(pcib, &fm801_pci_board_func1, slot, 1);
pci_board_add(pcib, &fm801_pci_board, slot, 0, aci);
pci_board_add(pcib, &fm801_pci_board_func1, slot, 1, aci);
slot++;
}
if (is_device_rom(&currprefs, ROMTYPE_ES1370, 0) >= 0) {
pci_board_add(pcib, &es1370_pci_board, slot++, 0);
pci_board_add(pcib, &es1370_pci_board, slot++, 0, aci);
}
//pci_board_add(pcib, &solo1_pci_board, slot++, 0);
//pci_board_add(pcib, &ncr_53c815_pci_board, 1, 0);
}
// Wildfire
@ -1513,7 +1509,7 @@ bool dkb_wildfire_pci_init(struct autoconfig_info *aci)
pcib->configured = -1;
pcib->pcipcidma = true;
pcib->amigapicdma = true;
pci_board_add(pcib, &ncr_53c815_pci_board, 0, 0);
pci_board_add(pcib, &ncr_53c815_pci_board, 0, 0, aci);
map_banks(&pci_config_bank, 0x80000000 >> 16, 0x10000000 >> 16, 0);
map_banks(&pci_mem_bank, 0x90000000 >> 16, 0x30000000 >> 16, 0);
map_banks(&pci_io_bank, 0xc0000000 >> 16, 0x30000000 >> 16, 0);
@ -1577,7 +1573,7 @@ static bool prometheus_pci_init(struct autoconfig_info *aci)
if (rc->device_settings & 1)
pcib->amigapicdma = true;
add_pci_devices(pcib);
add_pci_devices(pcib, aci);
memset(pcib->acmemory, 0xff, sizeof pcib->acmemory);
for (int i = 0; i < sizeof prometheus_autoconfig; i++) {
@ -1617,7 +1613,7 @@ static bool grex_pci_init(struct autoconfig_info *aci)
pcib->pcipcidma = true;
pcib->amigapicdma = true;
add_pci_devices(pcib);
add_pci_devices(pcib, aci);
map_banks(&pci_config_bank, 0xfffc0000 >> 16, 0x20000 >> 16, 0);
map_banks(&pci_mem_bank, 0x80000000 >> 16, 0x78000000 >> 16, 0);
@ -1776,7 +1772,7 @@ static addrbank *mediator_pci_init_1200_1(struct autoconfig_info *aci, struct ro
if (!pcib)
return &expamem_null;
mediator_pci_init_1200(pcib);
add_pci_devices(pcib);
add_pci_devices(pcib, aci);
} else {
pcib = pci_bridge_get_zorro(rc);
if (!pcib)
@ -1810,7 +1806,7 @@ static addrbank *mediator_pci_init_1200_2(struct autoconfig_info *aci, struct ro
if (!pcib)
return &expamem_null;
mediator_pci_init_1200(pcib);
add_pci_devices(pcib);
add_pci_devices(pcib, aci);
}
memset(pcib->acmemory, 0xff, sizeof pcib->acmemory);
const uae_u8 *ac = (rc->device_settings & 2) ? m_ac->mem_large : m_ac->mem_small;
@ -1852,7 +1848,7 @@ static addrbank *mediator_pci_init_4000_1(struct autoconfig_info *aci, struct ro
if (!pcib)
return &expamem_null;
mediator_pci_init_4000(pcib);
add_pci_devices(pcib);
add_pci_devices(pcib, aci);
} else {
pcib = pci_bridge_get_zorro(rc);
if (!pcib)
@ -1883,7 +1879,7 @@ static addrbank *mediator_pci_init_4000_2(struct autoconfig_info *aci, struct ro
return &expamem_null;
mediator_pci_init_4000(pcib);
add_pci_devices(pcib);
add_pci_devices(pcib, aci);
}
memset(pcib->acmemory, 0xff, sizeof pcib->acmemory);
const uae_u8 *ac = (rc->device_settings & 2) ? m_ac->mem_large : m_ac->mem_small;

View File

@ -1183,7 +1183,7 @@ static void es1370_free(struct pci_board_state *pcibs)
return;
}
static bool es1370_init(struct pci_board_state *pcibs)
static bool es1370_init(struct pci_board_state *pcibs, struct autoconfig_info *aci)
{
init(pcibs);
es1370state.irq_callback = pcibs->irq_callback;

View File

@ -1849,6 +1849,34 @@ struct romconfig *get_device_romconfig(struct uae_prefs *p, int romtype, int dev
return NULL;
}
void board_prefs_changed(int romtype, int devnum)
{
int idx1, idx2;
struct boardromconfig *brc1 = get_device_rom(&currprefs, romtype, devnum, &idx1);
struct boardromconfig *brc2 = get_device_rom(&changed_prefs, romtype, devnum, &idx2);
if (brc1 && brc2) {
memcpy(brc1, brc2, sizeof(struct boardromconfig));
} else if (brc1 && !brc2) {
clear_device_rom(&currprefs, romtype, devnum, true);
} else if (!brc1 && brc2) {
brc1 = get_device_rom_new(&currprefs, romtype, devnum, &idx1);
if (brc1)
memcpy(brc1, brc2, sizeof(struct boardromconfig));
}
}
bool is_board_enabled(struct uae_prefs *p, int romtype, int devnum)
{
int idx;
if (romtype == ROMTYPE_CPUBOARD && p->cpuboard_type) {
return devnum == 0;
}
struct boardromconfig *brc = get_device_rom(p, romtype, devnum, &idx);
if (!brc)
return false;
return brc->roms[idx].romfile[0] != 0;
}
static bool isspecialrom(const TCHAR *name)
{
if (!_tcsicmp(name, _T(":NOROM")))

View File

@ -1764,7 +1764,7 @@ static void fm801_free(struct pci_board_state *pcibs)
fm801_stop(data);
}
static bool fm801_init(struct pci_board_state *pcibs)
static bool fm801_init(struct pci_board_state *pcibs, struct autoconfig_info *aci)
{
struct fm801_data *data = &fm801;
memset(data, 0, sizeof(struct fm801_data));
@ -1820,7 +1820,7 @@ static void solo1_free(struct pci_board_state *pcibs)
{
}
static bool solo1_init(struct pci_board_state *pcibs)
static bool solo1_init(struct pci_board_state *pcibs, struct autoconfig_info *aci)
{
return true;
}

View File

@ -3397,7 +3397,7 @@ bool x86_bridge_init(struct autoconfig_info *aci, uae_u32 romtype, int type)
}
}
if (cfgfile_board_enabled(&currprefs, ROMTYPE_NE2KISA, 0)) {
if (is_board_enabled(&currprefs, ROMTYPE_NE2KISA, 0)) {
struct romconfig *rc = get_device_romconfig(&currprefs, ROMTYPE_NE2KISA, 0);
if (rc) {
xb->ne2000_isa = &ne2000_pci_board;
@ -3462,7 +3462,7 @@ bool x86_bridge_init(struct autoconfig_info *aci, uae_u32 romtype, int type)
xb->ne2000_irq = 15;
break;
}
if (xb->ne2000_isa->init(xb->ne2000_isa_board_state)) {
if (xb->ne2000_isa->init(xb->ne2000_isa_board_state, NULL)) {
write_log(_T("NE2000 ISA configured, IO=%3X, IRQ=%d\n"), xb->ne2000_io, xb->ne2000_irq);
} else {
xb->ne2000_isa = NULL;