mirror of
https://github.com/LIV2/WinUAE.git
synced 2025-12-06 00:12:52 +00:00
Expansion string config entry support.
This commit is contained in:
parent
9da23ce493
commit
e5afa105ed
137
cfgfile.cpp
137
cfgfile.cpp
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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*);
|
||||
|
||||
@ -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
34
pci.cpp
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
28
rommgr.cpp
28
rommgr.cpp
@ -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")))
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
4
x86.cpp
4
x86.cpp
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user