Hard disc controllers can now be selected on all machines.
Added device configuration for hard disc controller to Wx GUI.
This commit is contained in:
parent
4ca6d67f87
commit
06f7cd3c6c
10 changed files with 3759 additions and 3574 deletions
|
|
@ -1,3 +1,6 @@
|
||||||
|
#ifndef _DEVICE_H_
|
||||||
|
#define _DEVICE_H_
|
||||||
|
|
||||||
#define CONFIG_STRING 0
|
#define CONFIG_STRING 0
|
||||||
#define CONFIG_INT 1
|
#define CONFIG_INT 1
|
||||||
#define CONFIG_BINARY 2
|
#define CONFIG_BINARY 2
|
||||||
|
|
@ -54,3 +57,5 @@ enum
|
||||||
|
|
||||||
int model_get_config_int(char *s);
|
int model_get_config_int(char *s);
|
||||||
char *model_get_config_string(char *s);
|
char *model_get_config_string(char *s);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
||||||
79
src/hdd.c
79
src/hdd.c
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "esdi_at.h"
|
#include "esdi_at.h"
|
||||||
#include "hdd_esdi.h"
|
#include "hdd_esdi.h"
|
||||||
|
#include "ide.h"
|
||||||
#include "mfm_at.h"
|
#include "mfm_at.h"
|
||||||
#include "mfm_xebec.h"
|
#include "mfm_xebec.h"
|
||||||
#include "xtide.h"
|
#include "xtide.h"
|
||||||
|
|
@ -20,17 +21,19 @@ static struct
|
||||||
char internal_name[16];
|
char internal_name[16];
|
||||||
device_t *device;
|
device_t *device;
|
||||||
int is_mfm;
|
int is_mfm;
|
||||||
|
int is_ide;
|
||||||
} hdd_controllers[] =
|
} hdd_controllers[] =
|
||||||
{
|
{
|
||||||
{"None", "none", &null_hdd_device, 0},
|
{"None", "none", &null_hdd_device, 0, 0},
|
||||||
{"[MFM] AT Fixed Disk Adapter", "mfm_at", &mfm_at_device, 1},
|
{"[MFM] AT Fixed Disk Adapter", "mfm_at", &mfm_at_device, 1, 0},
|
||||||
{"[MFM] DTC 5150X", "dtc5150x", &dtc_5150x_device, 1},
|
{"[MFM] DTC 5150X", "dtc5150x", &dtc_5150x_device, 1, 0},
|
||||||
{"[MFM] Fixed Disk Adapter (Xebec)", "mfm_xebec", &mfm_xebec_device, 1},
|
{"[MFM] Fixed Disk Adapter (Xebec)", "mfm_xebec", &mfm_xebec_device, 1, 0},
|
||||||
{"[ESDI] IBM ESDI Fixed Disk Controller", "esdi_mca", &hdd_esdi_device, 1},
|
{"[ESDI] IBM ESDI Fixed Disk Controller", "esdi_mca", &hdd_esdi_device, 1, 0},
|
||||||
{"[ESDI] Western Digital WD1007V-SE1", "wd1007vse1", &wd1007vse1_device, 0},
|
{"[ESDI] Western Digital WD1007V-SE1", "wd1007vse1", &wd1007vse1_device, 0, 0},
|
||||||
{"[IDE] XTIDE", "xtide", &xtide_device, 0},
|
{"[IDE] Standard IDE", "ide", &ide_device, 0, 1},
|
||||||
{"[IDE] XTIDE (AT)", "xtide_at", &xtide_at_device, 0},
|
{"[IDE] XTIDE", "xtide", &xtide_device, 0, 1},
|
||||||
{"", "", NULL, 0}
|
{"[IDE] XTIDE (AT)", "xtide_at", &xtide_at_device, 0, 1},
|
||||||
|
{"", "", NULL, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
char *hdd_controller_get_name(int hdd)
|
char *hdd_controller_get_name(int hdd)
|
||||||
|
|
@ -53,7 +56,7 @@ int hdd_controller_available(int hdd)
|
||||||
return device_available(hdd_controllers[hdd].device);
|
return device_available(hdd_controllers[hdd].device);
|
||||||
}
|
}
|
||||||
|
|
||||||
int hdd_controller_is_mfm(char* internal_name)
|
int hdd_controller_is_mfm(char *internal_name)
|
||||||
{
|
{
|
||||||
int c = 0;
|
int c = 0;
|
||||||
|
|
||||||
|
|
@ -70,11 +73,67 @@ int hdd_controller_is_mfm(char* internal_name)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
int hdd_controller_is_ide(char *internal_name)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (hdd_controllers[c].device)
|
||||||
|
{
|
||||||
|
if (!strcmp(internal_name, hdd_controllers[c].internal_name))
|
||||||
|
{
|
||||||
|
hdd_controller_current = c;
|
||||||
|
if (strcmp(internal_name, "none"))
|
||||||
|
return hdd_controllers[c].is_ide;
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int hdd_controller_has_config(char *internal_name)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (hdd_controllers[c].device)
|
||||||
|
{
|
||||||
|
if (!strcmp(internal_name, hdd_controllers[c].internal_name))
|
||||||
|
{
|
||||||
|
hdd_controller_current = c;
|
||||||
|
if (strcmp(internal_name, "none"))
|
||||||
|
return hdd_controllers[c].device->config ? 1 : 0;
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_t *hdd_controller_get_device(char *internal_name)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
|
||||||
|
while (hdd_controllers[c].device)
|
||||||
|
{
|
||||||
|
if (!strcmp(internal_name, hdd_controllers[c].internal_name))
|
||||||
|
{
|
||||||
|
hdd_controller_current = c;
|
||||||
|
if (strcmp(internal_name, "none"))
|
||||||
|
return hdd_controllers[c].device;
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
int hdd_controller_current_is_mfm()
|
int hdd_controller_current_is_mfm()
|
||||||
{
|
{
|
||||||
return hdd_controller_is_mfm(hdd_controller_name);
|
return hdd_controller_is_mfm(hdd_controller_name);
|
||||||
}
|
}
|
||||||
|
int hdd_controller_current_is_ide()
|
||||||
|
{
|
||||||
|
return hdd_controller_is_ide(hdd_controller_name);
|
||||||
|
}
|
||||||
|
|
||||||
void hdd_controller_init(char *internal_name)
|
void hdd_controller_init(char *internal_name)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,14 @@
|
||||||
|
#include "device.h"
|
||||||
|
|
||||||
char *hdd_controller_get_name(int hdd);
|
char *hdd_controller_get_name(int hdd);
|
||||||
char *hdd_controller_get_internal_name(int hdd);
|
char *hdd_controller_get_internal_name(int hdd);
|
||||||
int hdd_controller_get_flags(int hdd);
|
int hdd_controller_get_flags(int hdd);
|
||||||
int hdd_controller_available(int hdd);
|
int hdd_controller_available(int hdd);
|
||||||
int hdd_controller_is_mfm(char* internal_name);
|
int hdd_controller_is_mfm(char* internal_name);
|
||||||
|
int hdd_controller_has_config(char *internal_name);
|
||||||
|
device_t *hdd_controller_get_device(char *internal_name);
|
||||||
int hdd_controller_current_is_mfm();
|
int hdd_controller_current_is_mfm();
|
||||||
|
int hdd_controller_current_is_ide();
|
||||||
void hdd_controller_init(char *internal_name);
|
void hdd_controller_init(char *internal_name);
|
||||||
|
|
||||||
extern char hdd_controller_name[16];
|
extern char hdd_controller_name[16];
|
||||||
|
|
|
||||||
62
src/ide.c
62
src/ide.c
|
|
@ -20,6 +20,7 @@
|
||||||
#include "arm.h"
|
#include "arm.h"
|
||||||
#else
|
#else
|
||||||
#include "ibm.h"
|
#include "ibm.h"
|
||||||
|
#include "hdd.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "pic.h"
|
#include "pic.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
@ -708,29 +709,31 @@ void resetide(void)
|
||||||
memset(mode_pages_in[GPMODE_CDROM_AUDIO_PAGE], 0, 256); /* Clear the page itself. */
|
memset(mode_pages_in[GPMODE_CDROM_AUDIO_PAGE], 0, 256); /* Clear the page itself. */
|
||||||
|
|
||||||
idecallback[0]=idecallback[1]=0;
|
idecallback[0]=idecallback[1]=0;
|
||||||
|
if (hdd_controller_current_is_ide())
|
||||||
|
{
|
||||||
#ifdef RPCEMU_IDE
|
#ifdef RPCEMU_IDE
|
||||||
loadhd(&ide_drives[0], 0, "hd4.hdf");
|
loadhd(&ide_drives[0], 0, "hd4.hdf");
|
||||||
if (!config.cdromenabled) {
|
if (!config.cdromenabled)
|
||||||
loadhd(&ide_drives[1], 1, "hd5.hdf");
|
loadhd(&ide_drives[1], 1, "hd5.hdf");
|
||||||
}
|
else
|
||||||
else
|
ide_drives[1].type = IDE_CDROM;
|
||||||
ide_drives[1].type = IDE_CDROM;
|
|
||||||
#else
|
#else
|
||||||
for (d = 0; d < 4; d++)
|
for (d = 0; d < 4; d++)
|
||||||
{
|
{
|
||||||
ide_drives[d].drive = d;
|
ide_drives[d].drive = d;
|
||||||
ide_drives[d].packetstatus = 0xFF;
|
ide_drives[d].packetstatus = 0xFF;
|
||||||
|
|
||||||
if ((cdrom_channel == d) && cdrom_enabled)
|
if ((cdrom_channel == d) && cdrom_enabled)
|
||||||
{
|
{
|
||||||
ide_drives[d].type = IDE_CDROM;
|
ide_drives[d].type = IDE_CDROM;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
loadhd(&ide_drives[d], d, ide_fn[d]);
|
loadhd(&ide_drives[d], d, ide_fn[d]);
|
||||||
}
|
}
|
||||||
|
|
||||||
ide_set_signature(&ide_drives[d]);
|
ide_set_signature(&ide_drives[d]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -2850,7 +2853,7 @@ void ide_sec_disable()
|
||||||
io_removehandler(0x0376, 0x0001, ide_read_sec, NULL, NULL, ide_write_sec, NULL, NULL , NULL);
|
io_removehandler(0x0376, 0x0001, ide_read_sec, NULL, NULL, ide_write_sec, NULL, NULL , NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ide_init()
|
static void *ide_init()
|
||||||
{
|
{
|
||||||
ide_pri_enable();
|
ide_pri_enable();
|
||||||
ide_sec_enable();
|
ide_sec_enable();
|
||||||
|
|
@ -2858,6 +2861,12 @@ void ide_init()
|
||||||
|
|
||||||
timer_add(ide_callback_pri, &idecallback[0], &idecallback[0], NULL);
|
timer_add(ide_callback_pri, &idecallback[0], &idecallback[0], NULL);
|
||||||
timer_add(ide_callback_sec, &idecallback[1], &idecallback[1], NULL);
|
timer_add(ide_callback_sec, &idecallback[1], &idecallback[1], NULL);
|
||||||
|
|
||||||
|
return (void *)-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ide_close(void *p)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void ide_set_bus_master(int (*read_sector)(int channel, uint8_t *data), int (*write_sector)(int channel, uint8_t *data), void (*set_irq)(int channel))
|
void ide_set_bus_master(int (*read_sector)(int channel, uint8_t *data), int (*write_sector)(int channel, uint8_t *data), void (*set_irq)(int channel))
|
||||||
|
|
@ -2866,3 +2875,16 @@ void ide_set_bus_master(int (*read_sector)(int channel, uint8_t *data), int (*wr
|
||||||
ide_bus_master_write_sector = write_sector;
|
ide_bus_master_write_sector = write_sector;
|
||||||
ide_bus_master_set_irq = set_irq;
|
ide_bus_master_set_irq = set_irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
device_t ide_device =
|
||||||
|
{
|
||||||
|
"Standard IDE",
|
||||||
|
DEVICE_AT,
|
||||||
|
ide_init,
|
||||||
|
ide_close,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
#ifndef __IDE__
|
#ifndef __IDE__
|
||||||
#define __IDE__
|
#define __IDE__
|
||||||
|
|
||||||
|
#include "device.h"
|
||||||
|
|
||||||
struct IDE;
|
struct IDE;
|
||||||
|
|
||||||
extern void writeide(int ide_board, uint16_t addr, uint8_t val);
|
extern void writeide(int ide_board, uint16_t addr, uint8_t val);
|
||||||
|
|
@ -9,7 +11,6 @@ extern uint8_t readide(int ide_board, uint16_t addr);
|
||||||
extern uint16_t readidew(int ide_board);
|
extern uint16_t readidew(int ide_board);
|
||||||
extern void callbackide(int ide_board);
|
extern void callbackide(int ide_board);
|
||||||
extern void resetide(void);
|
extern void resetide(void);
|
||||||
extern void ide_init();
|
|
||||||
extern void ide_pri_enable();
|
extern void ide_pri_enable();
|
||||||
extern void ide_sec_enable();
|
extern void ide_sec_enable();
|
||||||
extern void ide_pri_disable();
|
extern void ide_pri_disable();
|
||||||
|
|
@ -58,4 +59,6 @@ uint32_t atapi_get_cd_volume(int channel);
|
||||||
|
|
||||||
#define CDROM_IMAGE 200
|
#define CDROM_IMAGE 200
|
||||||
|
|
||||||
|
extern device_t ide_device;
|
||||||
|
|
||||||
#endif //__IDE__
|
#endif //__IDE__
|
||||||
|
|
|
||||||
24
src/model.c
24
src/model.c
|
|
@ -67,7 +67,6 @@ void europc_init();
|
||||||
void olim24_init();
|
void olim24_init();
|
||||||
void at_init();
|
void at_init();
|
||||||
void ibm_at_init();
|
void ibm_at_init();
|
||||||
void at_ide_init();
|
|
||||||
void at_cbm_init();
|
void at_cbm_init();
|
||||||
void dells200_init();
|
void dells200_init();
|
||||||
void deskpro386_init();
|
void deskpro386_init();
|
||||||
|
|
@ -328,16 +327,9 @@ void ibm_at_init()
|
||||||
mem_remap_top_384k();
|
mem_remap_top_384k();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_ide_init()
|
|
||||||
{
|
|
||||||
at_init();
|
|
||||||
ide_init();
|
|
||||||
mem_remap_top_384k();
|
|
||||||
}
|
|
||||||
|
|
||||||
void at_cbm_init()
|
void at_cbm_init()
|
||||||
{
|
{
|
||||||
at_ide_init();
|
at_init();
|
||||||
cbm_io_init();
|
cbm_io_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -360,7 +352,6 @@ void ps1_common_init()
|
||||||
mem_add_bios();
|
mem_add_bios();
|
||||||
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
|
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
|
||||||
dma16_init();
|
dma16_init();
|
||||||
ide_init();
|
|
||||||
keyboard_at_init();
|
keyboard_at_init();
|
||||||
nvr_init();
|
nvr_init();
|
||||||
pic2_init();
|
pic2_init();
|
||||||
|
|
@ -391,7 +382,6 @@ void ps2_m30_286_init()
|
||||||
mem_add_bios();
|
mem_add_bios();
|
||||||
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
|
pit_set_out_func(&pit, 1, pit_refresh_timer_at);
|
||||||
dma16_init();
|
dma16_init();
|
||||||
ide_init();
|
|
||||||
keyboard_at_init();
|
keyboard_at_init();
|
||||||
// mouse_ps2_init();
|
// mouse_ps2_init();
|
||||||
nvr_init();
|
nvr_init();
|
||||||
|
|
@ -407,7 +397,6 @@ static void ps2_common_init()
|
||||||
mem_add_bios();
|
mem_add_bios();
|
||||||
dma16_init();
|
dma16_init();
|
||||||
ps2_dma_init();
|
ps2_dma_init();
|
||||||
ide_init();
|
|
||||||
keyboard_at_init();
|
keyboard_at_init();
|
||||||
keyboard_at_init_ps2();
|
keyboard_at_init_ps2();
|
||||||
// mouse_ps2_init();
|
// mouse_ps2_init();
|
||||||
|
|
@ -438,56 +427,48 @@ void ps2_model_80_init()
|
||||||
void at_neat_init()
|
void at_neat_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
neat_init();
|
neat_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_scat_init()
|
void at_scat_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
scat_init();
|
scat_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_acer386sx_init()
|
void at_acer386sx_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
acer386sx_init();
|
acer386sx_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_wd76c10_init()
|
void at_wd76c10_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
wd76c10_init();
|
wd76c10_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_headland_init()
|
void at_headland_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
headland_init();
|
headland_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_opti495_init()
|
void at_opti495_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
opti495_init();
|
opti495_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_ali1429_init()
|
void at_ali1429_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
ali1429_init();
|
ali1429_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void at_sis496_init()
|
void at_sis496_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
pci_init(PCI_CONFIG_TYPE_1);
|
pci_init(PCI_CONFIG_TYPE_1);
|
||||||
pci_slot(0xb);
|
pci_slot(0xb);
|
||||||
pci_slot(0xd);
|
pci_slot(0xd);
|
||||||
|
|
@ -498,7 +479,6 @@ void at_sis496_init()
|
||||||
void at_batman_init()
|
void at_batman_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
pci_init(PCI_CONFIG_TYPE_2);
|
pci_init(PCI_CONFIG_TYPE_2);
|
||||||
pci_slot(0xc);
|
pci_slot(0xc);
|
||||||
pci_slot(0xe);
|
pci_slot(0xe);
|
||||||
|
|
@ -512,7 +492,6 @@ void at_batman_init()
|
||||||
void at_endeavor_init()
|
void at_endeavor_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
pci_init(PCI_CONFIG_TYPE_1);
|
pci_init(PCI_CONFIG_TYPE_1);
|
||||||
pci_slot(0xd);
|
pci_slot(0xd);
|
||||||
pci_slot(0xe);
|
pci_slot(0xe);
|
||||||
|
|
@ -528,7 +507,6 @@ void at_endeavor_init()
|
||||||
void at_i430vx_init()
|
void at_i430vx_init()
|
||||||
{
|
{
|
||||||
at_init();
|
at_init();
|
||||||
ide_init();
|
|
||||||
pci_init(PCI_CONFIG_TYPE_1);
|
pci_init(PCI_CONFIG_TYPE_1);
|
||||||
pci_slot(0x11);
|
pci_slot(0x11);
|
||||||
pci_slot(0x12);
|
pci_slot(0x12);
|
||||||
|
|
|
||||||
23
src/pc.xrc
23
src/pc.xrc
|
|
@ -964,7 +964,7 @@
|
||||||
<border>0</border>
|
<border>0</border>
|
||||||
<object class="wxFlexGridSizer">
|
<object class="wxFlexGridSizer">
|
||||||
<rows>0</rows>
|
<rows>0</rows>
|
||||||
<cols>2</cols>
|
<cols>3</cols>
|
||||||
<vgap>0</vgap>
|
<vgap>0</vgap>
|
||||||
<hgap>0</hgap>
|
<hgap>0</hgap>
|
||||||
<growablecols>1</growablecols>
|
<growablecols>1</growablecols>
|
||||||
|
|
@ -998,6 +998,15 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem">
|
||||||
|
<option>0</option>
|
||||||
|
<flag>wxALL</flag>
|
||||||
|
<border>5</border>
|
||||||
|
<object class="wxBitmapButton" name="IDC_CONFIGUREHDD">
|
||||||
|
<bitmap>icons/16x16/setting_tools.png</bitmap>
|
||||||
|
<default>0</default>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<option>0</option>
|
<option>0</option>
|
||||||
<flag>wxALL | wxALIGN_CENTER_VERTICAL</flag>
|
<flag>wxALL | wxALIGN_CENTER_VERTICAL</flag>
|
||||||
|
|
@ -1027,6 +1036,12 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="spacer">
|
||||||
|
<option>1</option>
|
||||||
|
<flag>wxEXPAND</flag>
|
||||||
|
<border>5</border>
|
||||||
|
<size>0,0</size>
|
||||||
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
<option>0</option>
|
<option>0</option>
|
||||||
<flag>wxALL | wxALIGN_CENTER_VERTICAL</flag>
|
<flag>wxALL | wxALIGN_CENTER_VERTICAL</flag>
|
||||||
|
|
@ -1056,6 +1071,12 @@
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="spacer">
|
||||||
|
<option>1</option>
|
||||||
|
<flag>wxEXPAND</flag>
|
||||||
|
<border>5</border>
|
||||||
|
<size>0,0</size>
|
||||||
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
<object class="sizeritem">
|
<object class="sizeritem">
|
||||||
|
|
|
||||||
144
src/wx-config.c
144
src/wx-config.c
|
|
@ -45,6 +45,9 @@ extern void deviceconfig_open(void* hwnd, device_t *device);
|
||||||
extern int hdconf_init(void* hdlg);
|
extern int hdconf_init(void* hdlg);
|
||||||
extern int hdconf_update(void* hdlg);
|
extern int hdconf_update(void* hdlg);
|
||||||
|
|
||||||
|
static int hdd_controller_selected_has_config(void *hdlg);
|
||||||
|
static device_t *hdd_controller_selected_get_device(void *hdlg);
|
||||||
|
|
||||||
static int mouse_valid(int type, int model)
|
static int mouse_valid(int type, int model)
|
||||||
{
|
{
|
||||||
if (((type & MOUSE_TYPE_IF_MASK) == MOUSE_TYPE_PS2)
|
if (((type & MOUSE_TYPE_IF_MASK) == MOUSE_TYPE_PS2)
|
||||||
|
|
@ -142,72 +145,75 @@ static void recalc_snd_list(void* hdlg, int model)
|
||||||
wx_sendmessage(h, WX_CB_SETCURSEL, settings_sound_to_list[sound_card_current], 0);
|
wx_sendmessage(h, WX_CB_SETCURSEL, settings_sound_to_list[sound_card_current], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void recalc_hdd_list(void* hdlg, int model, int use_selected_hdd)
|
static void recalc_hdd_list(void* hdlg, int model, int use_selected_hdd, int force_ide)
|
||||||
{
|
{
|
||||||
void* h;
|
void* h;
|
||||||
|
char *s;
|
||||||
|
int valid = 0;
|
||||||
|
char old_name[16];
|
||||||
|
int c, d;
|
||||||
|
|
||||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOHDD"));
|
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOHDD"));
|
||||||
|
|
||||||
if (models[model].flags & MODEL_HAS_IDE)
|
if (force_ide)
|
||||||
|
strcpy(old_name, "ide");
|
||||||
|
else if (use_selected_hdd)
|
||||||
{
|
{
|
||||||
wx_sendmessage(h, WX_CB_RESETCONTENT, 0, 0);
|
c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)"Internal IDE");
|
|
||||||
wx_enablewindow(h, FALSE);
|
if (c != -1 && hdd_names[c])
|
||||||
wx_sendmessage(h, WX_CB_SETCURSEL, 0, 0);
|
strncpy(old_name, hdd_names[c], sizeof(old_name)-1);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (models[model].flags & MODEL_HAS_IDE)
|
||||||
|
strcpy(old_name, "none");
|
||||||
|
else
|
||||||
|
strcpy(old_name, "ide");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
int valid = 0;
|
|
||||||
char old_name[16];
|
|
||||||
int c, d;
|
|
||||||
|
|
||||||
if (use_selected_hdd)
|
|
||||||
{
|
|
||||||
c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
|
||||||
|
|
||||||
if (c != -1 && hdd_names[c])
|
|
||||||
strncpy(old_name, hdd_names[c], sizeof(old_name)-1);
|
|
||||||
else
|
|
||||||
strcpy(old_name, "none");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
strncpy(old_name, hdd_controller_name, sizeof(old_name)-1);
|
strncpy(old_name, hdd_controller_name, sizeof(old_name)-1);
|
||||||
|
|
||||||
wx_sendmessage(h, WX_CB_RESETCONTENT, 0, 0);
|
wx_sendmessage(h, WX_CB_RESETCONTENT, 0, 0);
|
||||||
c = d = 0;
|
c = d = 0;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
s = hdd_controller_get_name(c);
|
s = hdd_controller_get_name(c);
|
||||||
if (s[0] == 0)
|
if (s[0] == 0)
|
||||||
break;
|
break;
|
||||||
if ((((hdd_controller_get_flags(c) & DEVICE_AT) && !(models[model].flags & MODEL_AT)) ||
|
if ((((hdd_controller_get_flags(c) & DEVICE_AT) && !(models[model].flags & MODEL_AT)) ||
|
||||||
(hdd_controller_get_flags(c) & DEVICE_MCA) != (models[model].flags & MODEL_MCA)) && c)
|
(hdd_controller_get_flags(c) & DEVICE_MCA) != (models[model].flags & MODEL_MCA)) && c)
|
||||||
{
|
{
|
||||||
c++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!hdd_controller_available(c))
|
|
||||||
{
|
|
||||||
c++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)s);
|
|
||||||
hdd_names[d] = hdd_controller_get_internal_name(c);
|
|
||||||
if (!strcmp(old_name, hdd_names[d]))
|
|
||||||
{
|
|
||||||
wx_sendmessage(h, WX_CB_SETCURSEL, d, 0);
|
|
||||||
valid = 1;
|
|
||||||
}
|
|
||||||
c++;
|
c++;
|
||||||
d++;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (!hdd_controller_available(c))
|
||||||
|
{
|
||||||
|
c++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
wx_sendmessage(h, WX_CB_ADDSTRING, 0, (LONG_PARAM)s);
|
||||||
|
hdd_names[d] = hdd_controller_get_internal_name(c);
|
||||||
|
|
||||||
if (!valid)
|
if (!strcmp(old_name, hdd_names[d]))
|
||||||
|
{
|
||||||
|
wx_sendmessage(h, WX_CB_SETCURSEL, d, 0);
|
||||||
|
valid = 1;
|
||||||
|
}
|
||||||
|
c++;
|
||||||
|
d++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!valid)
|
||||||
wx_sendmessage(h, WX_CB_SETCURSEL, 0, 0);
|
wx_sendmessage(h, WX_CB_SETCURSEL, 0, 0);
|
||||||
|
|
||||||
|
wx_enablewindow(h, TRUE);
|
||||||
|
|
||||||
|
h = wx_getdlgitem(hdlg, WX_ID("IDC_CONFIGUREHDD"));
|
||||||
|
if (hdd_controller_selected_has_config(hdlg))
|
||||||
wx_enablewindow(h, TRUE);
|
wx_enablewindow(h, TRUE);
|
||||||
}
|
else
|
||||||
|
wx_enablewindow(h, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_NETWORKING
|
#ifdef USE_NETWORKING
|
||||||
|
|
@ -469,6 +475,7 @@ int config_dlgsave(void* hdlg)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int prev_model;
|
||||||
int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
||||||
{
|
{
|
||||||
char temp_str[256];
|
char temp_str[256];
|
||||||
|
|
@ -510,6 +517,7 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
wx_sendmessage(h, WX_CB_SETCURSEL, modeltolist[model], 0);
|
wx_sendmessage(h, WX_CB_SETCURSEL, modeltolist[model], 0);
|
||||||
|
prev_model = model;
|
||||||
|
|
||||||
recalc_vid_list(hdlg, romstomodel[romset]);
|
recalc_vid_list(hdlg, romstomodel[romset]);
|
||||||
|
|
||||||
|
|
@ -711,7 +719,7 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
||||||
}
|
}
|
||||||
wx_sendmessage(h, WX_CB_SETCURSEL, d, 0);
|
wx_sendmessage(h, WX_CB_SETCURSEL, d, 0);
|
||||||
|
|
||||||
recalc_hdd_list(hdlg, romstomodel[romset], 0);
|
recalc_hdd_list(hdlg, romstomodel[romset], 0, 0);
|
||||||
|
|
||||||
hd_changed = 0;
|
hd_changed = 0;
|
||||||
new_cdrom_channel = cdrom_channel;
|
new_cdrom_channel = cdrom_channel;
|
||||||
|
|
@ -735,9 +743,16 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
||||||
{
|
{
|
||||||
if (wParam == WX_ID("IDC_COMBO1"))
|
if (wParam == WX_ID("IDC_COMBO1"))
|
||||||
{
|
{
|
||||||
|
int force_ide = 0;
|
||||||
|
|
||||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO1"));
|
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBO1"));
|
||||||
temp_model = listtomodel[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)];
|
temp_model = listtomodel[wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0)];
|
||||||
|
|
||||||
|
if ((models[temp_model].flags & MODEL_HAS_IDE) && !(models[prev_model].flags & MODEL_HAS_IDE))
|
||||||
|
force_ide = 1;
|
||||||
|
|
||||||
|
prev_model = temp_model;
|
||||||
|
|
||||||
/*Rebuild manufacturer list*/
|
/*Rebuild manufacturer list*/
|
||||||
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOCPUM"));
|
h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOCPUM"));
|
||||||
temp_cpu_m = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
temp_cpu_m = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||||
|
|
@ -851,7 +866,7 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
||||||
|
|
||||||
recalc_vid_list(hdlg, temp_model);
|
recalc_vid_list(hdlg, temp_model);
|
||||||
|
|
||||||
recalc_hdd_list(hdlg, temp_model, 1);
|
recalc_hdd_list(hdlg, temp_model, 1, force_ide);
|
||||||
|
|
||||||
recalc_snd_list(hdlg, temp_model);
|
recalc_snd_list(hdlg, temp_model);
|
||||||
#ifdef USE_NETWORKING
|
#ifdef USE_NETWORKING
|
||||||
|
|
@ -989,6 +1004,10 @@ int config_dlgproc(void* hdlg, int message, INT_PARAM wParam, LONG_PARAM lParam)
|
||||||
{
|
{
|
||||||
hdconf_update(hdlg);
|
hdconf_update(hdlg);
|
||||||
}
|
}
|
||||||
|
else if (wParam == WX_ID("IDC_CONFIGUREHDD"))
|
||||||
|
{
|
||||||
|
deviceconfig_open(hdlg, (void *)hdd_controller_selected_get_device(hdlg));
|
||||||
|
}
|
||||||
#ifdef USE_NETWORKING
|
#ifdef USE_NETWORKING
|
||||||
else if (wParam == WX_ID("IDC_COMBO_NETCARD"))
|
else if (wParam == WX_ID("IDC_COMBO_NETCARD"))
|
||||||
{
|
{
|
||||||
|
|
@ -1088,6 +1107,22 @@ static int hdd_controller_selected_is_mfm(void* hdlg)
|
||||||
return hdd_controller_is_mfm(hdd_names[c]);
|
return hdd_controller_is_mfm(hdd_names[c]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
static int hdd_controller_selected_has_config(void* hdlg)
|
||||||
|
{
|
||||||
|
void* h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOHDD"));
|
||||||
|
int c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||||
|
if (hdd_names[c])
|
||||||
|
return hdd_controller_has_config(hdd_names[c]);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
static device_t *hdd_controller_selected_get_device(void *hdlg)
|
||||||
|
{
|
||||||
|
void* h = wx_getdlgitem(hdlg, WX_ID("IDC_COMBOHDD"));
|
||||||
|
int c = wx_sendmessage(h, WX_CB_GETCURSEL, 0, 0);
|
||||||
|
if (hdd_names[c])
|
||||||
|
return hdd_controller_get_device(hdd_names[c]);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void check_hd_type(void* hdlg, off64_t sz)
|
static void check_hd_type(void* hdlg, off64_t sz)
|
||||||
{
|
{
|
||||||
|
|
@ -1521,6 +1556,7 @@ int hdconf_init(void* hdlg)
|
||||||
int hdconf_update(void* hdlg)
|
int hdconf_update(void* hdlg)
|
||||||
{
|
{
|
||||||
char s[260];
|
char s[260];
|
||||||
|
void *h;
|
||||||
|
|
||||||
int is_mfm = hdd_controller_selected_is_mfm(hdlg);
|
int is_mfm = hdd_controller_selected_is_mfm(hdlg);
|
||||||
|
|
||||||
|
|
@ -1561,6 +1597,12 @@ int hdconf_update(void* hdlg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h = wx_getdlgitem(hdlg, WX_ID("IDC_CONFIGUREHDD"));
|
||||||
|
if (hdd_controller_selected_has_config(hdlg))
|
||||||
|
wx_enablewindow(h, TRUE);
|
||||||
|
else
|
||||||
|
wx_enablewindow(h, FALSE);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
6886
src/wx-resources.cpp
6886
src/wx-resources.cpp
File diff suppressed because it is too large
Load diff
|
|
@ -71,7 +71,7 @@ static void *xtide_init()
|
||||||
memset(xtide, 0, sizeof(xtide_t));
|
memset(xtide, 0, sizeof(xtide_t));
|
||||||
|
|
||||||
rom_init(&xtide->bios_rom, "ide_xt.bin", 0xc8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
rom_init(&xtide->bios_rom, "ide_xt.bin", 0xc8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||||
ide_init();
|
device_add(&ide_device);
|
||||||
ide_pri_disable();
|
ide_pri_disable();
|
||||||
ide_sec_disable();
|
ide_sec_disable();
|
||||||
io_sethandler(0x0300, 0x0010, xtide_read, NULL, NULL, xtide_write, NULL, NULL, xtide);
|
io_sethandler(0x0300, 0x0010, xtide_read, NULL, NULL, xtide_write, NULL, NULL, xtide);
|
||||||
|
|
@ -85,7 +85,7 @@ static void *xtide_at_init()
|
||||||
memset(xtide, 0, sizeof(xtide_t));
|
memset(xtide, 0, sizeof(xtide_t));
|
||||||
|
|
||||||
rom_init(&xtide->bios_rom, "ide_at.bin", 0xc8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
rom_init(&xtide->bios_rom, "ide_at.bin", 0xc8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||||
ide_init();
|
device_add(&ide_device);
|
||||||
|
|
||||||
return xtide;
|
return xtide;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue