Merge branch 'master' into mke
This commit is contained in:
10
src/86box.c
10
src/86box.c
@@ -88,7 +88,7 @@
|
|||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/cdrom_interface.h>
|
#include <86box/cdrom_interface.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/scsi_disk.h>
|
#include <86box/scsi_disk.h>
|
||||||
#include <86box/cdrom_image.h>
|
#include <86box/cdrom_image.h>
|
||||||
@@ -1066,7 +1066,7 @@ usage:
|
|||||||
network_init();
|
network_init();
|
||||||
mouse_init();
|
mouse_init();
|
||||||
cdrom_global_init();
|
cdrom_global_init();
|
||||||
zip_global_init();
|
rdisk_global_init();
|
||||||
mo_global_init();
|
mo_global_init();
|
||||||
|
|
||||||
/* Initialize the keyboard accelerator list with default values */
|
/* Initialize the keyboard accelerator list with default values */
|
||||||
@@ -1395,7 +1395,7 @@ pc_reset_hard_close(void)
|
|||||||
|
|
||||||
cdrom_close();
|
cdrom_close();
|
||||||
|
|
||||||
zip_close();
|
rdisk_close();
|
||||||
|
|
||||||
mo_close();
|
mo_close();
|
||||||
|
|
||||||
@@ -1501,7 +1501,7 @@ pc_reset_hard_init(void)
|
|||||||
|
|
||||||
mo_hard_reset();
|
mo_hard_reset();
|
||||||
|
|
||||||
zip_hard_reset();
|
rdisk_hard_reset();
|
||||||
|
|
||||||
|
|
||||||
/* Reset any ISA ROM cards. */
|
/* Reset any ISA ROM cards. */
|
||||||
@@ -1664,7 +1664,7 @@ pc_close(UNUSED(thread_t *ptr))
|
|||||||
|
|
||||||
cdrom_close();
|
cdrom_close();
|
||||||
|
|
||||||
zip_close();
|
rdisk_close();
|
||||||
|
|
||||||
mo_close();
|
mo_close();
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ if(INSTRUMENT)
|
|||||||
add_compile_definitions(USE_INSTRUMENT)
|
add_compile_definitions(USE_INSTRUMENT)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(86Box cpu chipset mch dev mem fdd game cdrom zip mo hdd
|
target_link_libraries(86Box cpu chipset mch dev mem fdd game cdrom rdisk mo hdd
|
||||||
net print scsi sio snd utils vid voodoo plat ui)
|
net print scsi sio snd utils vid voodoo plat ui)
|
||||||
|
|
||||||
if(HAIKU)
|
if(HAIKU)
|
||||||
|
|||||||
212
src/config.c
212
src/config.c
@@ -65,7 +65,7 @@
|
|||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/cdrom_interface.h>
|
#include <86box/cdrom_interface.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/sound.h>
|
#include <86box/sound.h>
|
||||||
#include <86box/midi.h>
|
#include <86box/midi.h>
|
||||||
@@ -1459,32 +1459,35 @@ load_other_removable_devices(void)
|
|||||||
unsigned int board = 0;
|
unsigned int board = 0;
|
||||||
unsigned int dev = 0;
|
unsigned int dev = 0;
|
||||||
int c;
|
int c;
|
||||||
|
int legacy_zip_drives = 0;
|
||||||
|
|
||||||
memset(temp, 0x00, sizeof(temp));
|
memset(temp, 0x00, sizeof(temp));
|
||||||
for (c = 0; c < ZIP_NUM; c++) {
|
for (c = 0; c < RDISK_NUM; c++) {
|
||||||
sprintf(temp, "zip_%02i_parameters", c + 1);
|
sprintf(temp, "zip_%02i_parameters", c + 1);
|
||||||
p = ini_section_get_string(cat, temp, NULL);
|
p = ini_section_get_string(cat, temp, NULL);
|
||||||
if (p != NULL)
|
if (p != NULL) {
|
||||||
sscanf(p, "%01u, %s", &zip_drives[c].is_250, s);
|
sscanf(p, "%01u, %s", &rdisk_drives[c].type, s);
|
||||||
else
|
legacy_zip_drives++;
|
||||||
sscanf("0, none", "%01u, %s", &zip_drives[c].is_250, s);
|
} else
|
||||||
zip_drives[c].bus_type = hdd_string_to_bus(s, 1);
|
sscanf("0, none", "%01u, %s", &rdisk_drives[c].type, s);
|
||||||
|
rdisk_drives[c].type++;
|
||||||
|
rdisk_drives[c].bus_type = hdd_string_to_bus(s, 1);
|
||||||
|
|
||||||
/* Default values, needed for proper operation of the Settings dialog. */
|
/* Default values, needed for proper operation of the Settings dialog. */
|
||||||
zip_drives[c].ide_channel = zip_drives[c].scsi_device_id = c + 2;
|
rdisk_drives[c].ide_channel = rdisk_drives[c].scsi_device_id = c + 2;
|
||||||
|
|
||||||
if (zip_drives[c].bus_type == ZIP_BUS_ATAPI) {
|
if (rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) {
|
||||||
sprintf(temp, "zip_%02i_ide_channel", c + 1);
|
sprintf(temp, "zip_%02i_ide_channel", c + 1);
|
||||||
sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1);
|
sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1);
|
||||||
p = ini_section_get_string(cat, temp, tmp2);
|
p = ini_section_get_string(cat, temp, tmp2);
|
||||||
sscanf(p, "%01u:%01u", &board, &dev);
|
sscanf(p, "%01u:%01u", &board, &dev);
|
||||||
board &= 3;
|
board &= 3;
|
||||||
dev &= 1;
|
dev &= 1;
|
||||||
zip_drives[c].ide_channel = (board << 1) + dev;
|
rdisk_drives[c].ide_channel = (board << 1) + dev;
|
||||||
|
|
||||||
if (zip_drives[c].ide_channel > 7)
|
if (rdisk_drives[c].ide_channel > 7)
|
||||||
zip_drives[c].ide_channel = 7;
|
rdisk_drives[c].ide_channel = 7;
|
||||||
} else if (zip_drives[c].bus_type == ZIP_BUS_SCSI) {
|
} else if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) {
|
||||||
sprintf(temp, "zip_%02i_scsi_location", c + 1);
|
sprintf(temp, "zip_%02i_scsi_location", c + 1);
|
||||||
sprintf(tmp2, "%01u:%02u", SCSI_BUS_MAX, c + 2);
|
sprintf(tmp2, "%01u:%02u", SCSI_BUS_MAX, c + 2);
|
||||||
p = ini_section_get_string(cat, temp, tmp2);
|
p = ini_section_get_string(cat, temp, tmp2);
|
||||||
@@ -1492,23 +1495,23 @@ load_other_removable_devices(void)
|
|||||||
if (board >= SCSI_BUS_MAX) {
|
if (board >= SCSI_BUS_MAX) {
|
||||||
/* Invalid bus - check legacy ID */
|
/* Invalid bus - check legacy ID */
|
||||||
sprintf(temp, "zip_%02i_scsi_id", c + 1);
|
sprintf(temp, "zip_%02i_scsi_id", c + 1);
|
||||||
zip_drives[c].scsi_device_id = ini_section_get_int(cat, temp, c + 2);
|
rdisk_drives[c].scsi_device_id = ini_section_get_int(cat, temp, c + 2);
|
||||||
|
|
||||||
if (zip_drives[c].scsi_device_id > 15)
|
if (rdisk_drives[c].scsi_device_id > 15)
|
||||||
zip_drives[c].scsi_device_id = 15;
|
rdisk_drives[c].scsi_device_id = 15;
|
||||||
} else {
|
} else {
|
||||||
board %= SCSI_BUS_MAX;
|
board %= SCSI_BUS_MAX;
|
||||||
dev &= 15;
|
dev &= 15;
|
||||||
zip_drives[c].scsi_device_id = (board << 4) + dev;
|
rdisk_drives[c].scsi_device_id = (board << 4) + dev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (zip_drives[c].bus_type != ZIP_BUS_ATAPI) {
|
if (rdisk_drives[c].bus_type != RDISK_BUS_ATAPI) {
|
||||||
sprintf(temp, "zip_%02i_ide_channel", c + 1);
|
sprintf(temp, "zip_%02i_ide_channel", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (zip_drives[c].bus_type != ZIP_BUS_SCSI) {
|
if (rdisk_drives[c].bus_type != RDISK_BUS_SCSI) {
|
||||||
sprintf(temp, "zip_%02i_scsi_location", c + 1);
|
sprintf(temp, "zip_%02i_scsi_location", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
}
|
}
|
||||||
@@ -1520,49 +1523,154 @@ load_other_removable_devices(void)
|
|||||||
p = ini_section_get_string(cat, temp, "");
|
p = ini_section_get_string(cat, temp, "");
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_writeprot", c + 1);
|
sprintf(temp, "zip_%02i_writeprot", c + 1);
|
||||||
zip_drives[c].read_only = ini_section_get_int(cat, temp, 0);
|
rdisk_drives[c].read_only = ini_section_get_int(cat, temp, 0);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
if (!strcmp(p, usr_path))
|
if (!strcmp(p, usr_path))
|
||||||
p[0] = 0x00;
|
p[0] = 0x00;
|
||||||
|
|
||||||
if (p[0] != 0x00) {
|
if (p[0] != 0x00) {
|
||||||
if (load_image_file(zip_drives[c].image_path, p, &(zip_drives[c].read_only)))
|
if (load_image_file(rdisk_drives[c].image_path, p, &(rdisk_drives[c].read_only)))
|
||||||
fatal("Configuration: Length of zip_%02i_image_path is more than 511\n", c + 1);
|
fatal("Configuration: Length of zip_%02i_image_path is more than 511\n", c + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||||
zip_drives[c].image_history[i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char));
|
rdisk_drives[c].image_history[i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char));
|
||||||
sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1);
|
sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1);
|
||||||
p = ini_section_get_string(cat, temp, NULL);
|
p = ini_section_get_string(cat, temp, NULL);
|
||||||
if (p) {
|
if (p) {
|
||||||
if (load_image_file(zip_drives[c].image_history[i], p, NULL))
|
if (load_image_file(rdisk_drives[c].image_history[i], p, NULL))
|
||||||
fatal("Configuration: Length of zip_%02i_image_history_%02i is more than %i\n",
|
fatal("Configuration: Length of zip_%02i_image_history_%02i is more than %i\n",
|
||||||
c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1);
|
c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the ZIP drive is disabled, delete all its variables. */
|
sprintf(temp, "zip_%02i_parameters", c + 1);
|
||||||
if (zip_drives[c].bus_type == ZIP_BUS_DISABLED) {
|
ini_section_delete_var(cat, temp);
|
||||||
sprintf(temp, "zip_%02i_parameters", c + 1);
|
|
||||||
|
sprintf(temp, "zip_%02i_ide_channel", c + 1);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
|
sprintf(temp, "zip_%02i_scsi_location", c + 1);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
|
sprintf(temp, "zip_%02i_image_path", c + 1);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||||
|
sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (legacy_zip_drives > 0)
|
||||||
|
goto go_to_mo;
|
||||||
|
|
||||||
|
memset(temp, 0x00, sizeof(temp));
|
||||||
|
for (c = 0; c < RDISK_NUM; c++) {
|
||||||
|
sprintf(temp, "rdisk_%02i_parameters", c + 1);
|
||||||
|
p = ini_section_get_string(cat, temp, NULL);
|
||||||
|
if (p != NULL) {
|
||||||
|
sscanf(p, "%01u, %s", &rdisk_drives[c].type, s);
|
||||||
|
legacy_zip_drives++;
|
||||||
|
} else
|
||||||
|
sscanf("0, none", "%01u, %s", &rdisk_drives[c].type, s);
|
||||||
|
rdisk_drives[c].bus_type = hdd_string_to_bus(s, 1);
|
||||||
|
|
||||||
|
/* Default values, needed for proper operation of the Settings dialog. */
|
||||||
|
rdisk_drives[c].ide_channel = rdisk_drives[c].scsi_device_id = c + 2;
|
||||||
|
|
||||||
|
if (rdisk_drives[c].bus_type == RDISK_BUS_ATAPI) {
|
||||||
|
sprintf(temp, "rdisk_%02i_ide_channel", c + 1);
|
||||||
|
sprintf(tmp2, "%01u:%01u", (c + 2) >> 1, (c + 2) & 1);
|
||||||
|
p = ini_section_get_string(cat, temp, tmp2);
|
||||||
|
sscanf(p, "%01u:%01u", &board, &dev);
|
||||||
|
board &= 3;
|
||||||
|
dev &= 1;
|
||||||
|
rdisk_drives[c].ide_channel = (board << 1) + dev;
|
||||||
|
|
||||||
|
if (rdisk_drives[c].ide_channel > 7)
|
||||||
|
rdisk_drives[c].ide_channel = 7;
|
||||||
|
} else if (rdisk_drives[c].bus_type == RDISK_BUS_SCSI) {
|
||||||
|
sprintf(temp, "rdisk_%02i_scsi_location", c + 1);
|
||||||
|
sprintf(tmp2, "%01u:%02u", SCSI_BUS_MAX, c + 2);
|
||||||
|
p = ini_section_get_string(cat, temp, tmp2);
|
||||||
|
sscanf(p, "%01u:%02u", &board, &dev);
|
||||||
|
if (board >= SCSI_BUS_MAX) {
|
||||||
|
/* Invalid bus - check legacy ID */
|
||||||
|
sprintf(temp, "rdisk_%02i_scsi_id", c + 1);
|
||||||
|
rdisk_drives[c].scsi_device_id = ini_section_get_int(cat, temp, c + 2);
|
||||||
|
|
||||||
|
if (rdisk_drives[c].scsi_device_id > 15)
|
||||||
|
rdisk_drives[c].scsi_device_id = 15;
|
||||||
|
} else {
|
||||||
|
board %= SCSI_BUS_MAX;
|
||||||
|
dev &= 15;
|
||||||
|
rdisk_drives[c].scsi_device_id = (board << 4) + dev;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rdisk_drives[c].bus_type != RDISK_BUS_ATAPI) {
|
||||||
|
sprintf(temp, "rdisk_%02i_ide_channel", c + 1);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rdisk_drives[c].bus_type != RDISK_BUS_SCSI) {
|
||||||
|
sprintf(temp, "rdisk_%02i_scsi_location", c + 1);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(temp, "rdisk_%02i_scsi_id", c + 1);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
|
sprintf(temp, "rdisk_%02i_image_path", c + 1);
|
||||||
|
p = ini_section_get_string(cat, temp, "");
|
||||||
|
|
||||||
|
sprintf(temp, "rdisk_%02i_writeprot", c + 1);
|
||||||
|
rdisk_drives[c].read_only = ini_section_get_int(cat, temp, 0);
|
||||||
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
|
if (!strcmp(p, usr_path))
|
||||||
|
p[0] = 0x00;
|
||||||
|
|
||||||
|
if (p[0] != 0x00) {
|
||||||
|
if (load_image_file(rdisk_drives[c].image_path, p, &(rdisk_drives[c].read_only)))
|
||||||
|
fatal("Configuration: Length of rdisk_%02i_image_path is more than 511\n", c + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||||
|
rdisk_drives[c].image_history[i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char));
|
||||||
|
sprintf(temp, "rdisk_%02i_image_history_%02i", c + 1, i + 1);
|
||||||
|
p = ini_section_get_string(cat, temp, NULL);
|
||||||
|
if (p) {
|
||||||
|
if (load_image_file(rdisk_drives[c].image_history[i], p, NULL))
|
||||||
|
fatal("Configuration: Length of rdisk_%02i_image_history_%02i is more than %i\n",
|
||||||
|
c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the removable disk drive is disabled, delete all its variables. */
|
||||||
|
if (rdisk_drives[c].bus_type == RDISK_BUS_DISABLED) {
|
||||||
|
sprintf(temp, "rdisk_%02i_parameters", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_ide_channel", c + 1);
|
sprintf(temp, "rdisk_%02i_ide_channel", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_scsi_location", c + 1);
|
sprintf(temp, "rdisk_%02i_scsi_location", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_image_path", c + 1);
|
sprintf(temp, "rdisk_%02i_image_path", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||||
sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1);
|
sprintf(temp, "rdisk_%02i_image_history_%02i", c + 1, i + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go_to_mo:
|
||||||
memset(temp, 0x00, sizeof(temp));
|
memset(temp, 0x00, sizeof(temp));
|
||||||
for (c = 0; c < MO_NUM; c++) {
|
for (c = 0; c < MO_NUM; c++) {
|
||||||
sprintf(temp, "mo_%02i_parameters", c + 1);
|
sprintf(temp, "mo_%02i_parameters", c + 1);
|
||||||
@@ -1821,7 +1929,7 @@ config_load(void)
|
|||||||
#ifdef USE_IOCTL
|
#ifdef USE_IOCTL
|
||||||
memset(cdrom_ioctl, 0, sizeof(cdrom_ioctl_t) * CDROM_NUM);
|
memset(cdrom_ioctl, 0, sizeof(cdrom_ioctl_t) * CDROM_NUM);
|
||||||
#endif
|
#endif
|
||||||
memset(zip_drives, 0, sizeof(zip_drive_t));
|
memset(rdisk_drives, 0, sizeof(rdisk_drive_t));
|
||||||
|
|
||||||
config = ini_read(cfg_path);
|
config = ini_read(cfg_path);
|
||||||
|
|
||||||
@@ -3046,52 +3154,52 @@ save_other_removable_devices(void)
|
|||||||
char tmp2[512];
|
char tmp2[512];
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
for (c = 0; c < ZIP_NUM; c++) {
|
for (c = 0; c < RDISK_NUM; c++) {
|
||||||
sprintf(temp, "zip_%02i_parameters", c + 1);
|
sprintf(temp, "rdisk_%02i_parameters", c + 1);
|
||||||
if (zip_drives[c].bus_type == 0) {
|
if (rdisk_drives[c].bus_type == 0) {
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
} else {
|
} else {
|
||||||
sprintf(tmp2, "%u, %s", zip_drives[c].is_250,
|
sprintf(tmp2, "%u, %s", rdisk_drives[c].type,
|
||||||
hdd_bus_to_string(zip_drives[c].bus_type, 1));
|
hdd_bus_to_string(rdisk_drives[c].bus_type, 1));
|
||||||
ini_section_set_string(cat, temp, tmp2);
|
ini_section_set_string(cat, temp, tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_ide_channel", c + 1);
|
sprintf(temp, "rdisk_%02i_ide_channel", c + 1);
|
||||||
if (zip_drives[c].bus_type != ZIP_BUS_ATAPI)
|
if (rdisk_drives[c].bus_type != RDISK_BUS_ATAPI)
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
else {
|
else {
|
||||||
sprintf(tmp2, "%01u:%01u", zip_drives[c].ide_channel >> 1,
|
sprintf(tmp2, "%01u:%01u", rdisk_drives[c].ide_channel >> 1,
|
||||||
zip_drives[c].ide_channel & 1);
|
rdisk_drives[c].ide_channel & 1);
|
||||||
ini_section_set_string(cat, temp, tmp2);
|
ini_section_set_string(cat, temp, tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_scsi_id", c + 1);
|
sprintf(temp, "rdisk_%02i_scsi_id", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_writeprot", c + 1);
|
sprintf(temp, "rdisk_%02i_writeprot", c + 1);
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_scsi_location", c + 1);
|
sprintf(temp, "rdisk_%02i_scsi_location", c + 1);
|
||||||
if (zip_drives[c].bus_type != ZIP_BUS_SCSI)
|
if (rdisk_drives[c].bus_type != RDISK_BUS_SCSI)
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
else {
|
else {
|
||||||
sprintf(tmp2, "%01u:%02u", zip_drives[c].scsi_device_id >> 4,
|
sprintf(tmp2, "%01u:%02u", rdisk_drives[c].scsi_device_id >> 4,
|
||||||
zip_drives[c].scsi_device_id & 15);
|
rdisk_drives[c].scsi_device_id & 15);
|
||||||
ini_section_set_string(cat, temp, tmp2);
|
ini_section_set_string(cat, temp, tmp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(temp, "zip_%02i_image_path", c + 1);
|
sprintf(temp, "rdisk_%02i_image_path", c + 1);
|
||||||
if ((zip_drives[c].bus_type == 0) || (strlen(zip_drives[c].image_path) == 0))
|
if ((rdisk_drives[c].bus_type == 0) || (strlen(rdisk_drives[c].image_path) == 0))
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
else
|
else
|
||||||
save_image_file(cat, temp, zip_drives[c].image_path);
|
save_image_file(cat, temp, rdisk_drives[c].image_path);
|
||||||
|
|
||||||
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||||
sprintf(temp, "zip_%02i_image_history_%02i", c + 1, i + 1);
|
sprintf(temp, "rdisk_%02i_image_history_%02i", c + 1, i + 1);
|
||||||
if ((zip_drives[c].image_history[i] == 0) || strlen(zip_drives[c].image_history[i]) == 0)
|
if ((rdisk_drives[c].image_history[i] == 0) || strlen(rdisk_drives[c].image_history[i]) == 0)
|
||||||
ini_section_delete_var(cat, temp);
|
ini_section_delete_var(cat, temp);
|
||||||
else
|
else
|
||||||
save_image_file(cat, temp, zip_drives[c].image_history[i]);
|
save_image_file(cat, temp, rdisk_drives[c].image_history[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ add_library(hdd OBJECT
|
|||||||
hdc_ide_w83769f.c
|
hdc_ide_w83769f.c
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(zip OBJECT zip.c)
|
add_library(rdisk OBJECT rdisk.c)
|
||||||
|
|
||||||
add_library(mo OBJECT mo.c)
|
add_library(mo OBJECT mo.c)
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
#include <86box/hdc.h>
|
#include <86box/hdc.h>
|
||||||
#include <86box/hdc_ide.h>
|
#include <86box/hdc_ide.h>
|
||||||
#include <86box/hdd.h>
|
#include <86box/hdd.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/version.h>
|
#include <86box/version.h>
|
||||||
|
|
||||||
/* Bits of 'atastat' */
|
/* Bits of 'atastat' */
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
#include <86box/hdc.h>
|
#include <86box/hdc.h>
|
||||||
#include <86box/hdc_ide.h>
|
#include <86box/hdc_ide.h>
|
||||||
#include <86box/hdc_ide_sff8038i.h>
|
#include <86box/hdc_ide_sff8038i.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
|
|
||||||
typedef struct cmd640_t {
|
typedef struct cmd640_t {
|
||||||
@@ -417,10 +417,10 @@ cmd640_reset(void *priv)
|
|||||||
(cdrom[i].ide_channel <= max_channel) && cdrom[i].priv)
|
(cdrom[i].ide_channel <= max_channel) && cdrom[i].priv)
|
||||||
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < ZIP_NUM; i++) {
|
for (i = 0; i < RDISK_NUM; i++) {
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel >= min_channel) &&
|
if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel >= min_channel) &&
|
||||||
(zip_drives[i].ide_channel <= max_channel) && zip_drives[i].priv)
|
(rdisk_drives[i].ide_channel <= max_channel) && rdisk_drives[i].priv)
|
||||||
zip_reset((scsi_common_t *) zip_drives[i].priv);
|
rdisk_reset((scsi_common_t *) rdisk_drives[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < MO_NUM; i++) {
|
for (i = 0; i < MO_NUM; i++) {
|
||||||
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) &&
|
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) &&
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
#include <86box/hdc.h>
|
#include <86box/hdc.h>
|
||||||
#include <86box/hdc_ide.h>
|
#include <86box/hdc_ide.h>
|
||||||
#include <86box/hdc_ide_sff8038i.h>
|
#include <86box/hdc_ide_sff8038i.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
|
|
||||||
typedef struct cmd646_t {
|
typedef struct cmd646_t {
|
||||||
@@ -320,9 +320,9 @@ cmd646_reset(void *priv)
|
|||||||
if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && (cdrom[i].ide_channel < 4) && cdrom[i].priv)
|
if ((cdrom[i].bus_type == CDROM_BUS_ATAPI) && (cdrom[i].ide_channel < 4) && cdrom[i].priv)
|
||||||
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < ZIP_NUM; i++) {
|
for (i = 0; i < RDISK_NUM; i++) {
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel < 4) && zip_drives[i].priv)
|
if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel < 4) && rdisk_drives[i].priv)
|
||||||
zip_reset((scsi_common_t *) zip_drives[i].priv);
|
rdisk_reset((scsi_common_t *) rdisk_drives[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < MO_NUM; i++) {
|
for (i = 0; i < MO_NUM; i++) {
|
||||||
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel < 4) && mo_drives[i].priv)
|
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel < 4) && mo_drives[i].priv)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
#include <86box/hdc.h>
|
#include <86box/hdc.h>
|
||||||
#include <86box/hdc_ide.h>
|
#include <86box/hdc_ide.h>
|
||||||
#include <86box/hdc_ide_sff8038i.h>
|
#include <86box/hdc_ide_sff8038i.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
|
|
||||||
typedef struct rz1000_t {
|
typedef struct rz1000_t {
|
||||||
@@ -182,10 +182,10 @@ rz1000_reset(void *priv)
|
|||||||
(cdrom[i].ide_channel <= max_channel) && cdrom[i].priv)
|
(cdrom[i].ide_channel <= max_channel) && cdrom[i].priv)
|
||||||
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < ZIP_NUM; i++) {
|
for (i = 0; i < RDISK_NUM; i++) {
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel >= min_channel) &&
|
if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel >= min_channel) &&
|
||||||
(zip_drives[i].ide_channel <= max_channel) && zip_drives[i].priv)
|
(rdisk_drives[i].ide_channel <= max_channel) && rdisk_drives[i].priv)
|
||||||
zip_reset((scsi_common_t *) zip_drives[i].priv);
|
rdisk_reset((scsi_common_t *) rdisk_drives[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < MO_NUM; i++) {
|
for (i = 0; i < MO_NUM; i++) {
|
||||||
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) &&
|
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) &&
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
#include <86box/hdc.h>
|
#include <86box/hdc.h>
|
||||||
#include <86box/hdc_ide.h>
|
#include <86box/hdc_ide.h>
|
||||||
#include <86box/hdc_ide_sff8038i.h>
|
#include <86box/hdc_ide_sff8038i.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/plat_unused.h>
|
#include <86box/plat_unused.h>
|
||||||
|
|
||||||
@@ -489,10 +489,10 @@ sff_reset(void *priv)
|
|||||||
cdrom[i].priv)
|
cdrom[i].priv)
|
||||||
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
||||||
}
|
}
|
||||||
for (uint8_t i = 0; i < ZIP_NUM; i++) {
|
for (uint8_t i = 0; i < RDISK_NUM; i++) {
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel < 4) &&
|
if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel < 4) &&
|
||||||
zip_drives[i].priv)
|
rdisk_drives[i].priv)
|
||||||
zip_reset((scsi_common_t *) zip_drives[i].priv);
|
rdisk_reset((scsi_common_t *) rdisk_drives[i].priv);
|
||||||
}
|
}
|
||||||
for (uint8_t i = 0; i < MO_NUM; i++) {
|
for (uint8_t i = 0; i < MO_NUM; i++) {
|
||||||
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel < 4) &&
|
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel < 4) &&
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
#include <86box/hdc.h>
|
#include <86box/hdc.h>
|
||||||
#include <86box/hdc_ide.h>
|
#include <86box/hdc_ide.h>
|
||||||
#include <86box/hdc_ide_sff8038i.h>
|
#include <86box/hdc_ide_sff8038i.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
|
|
||||||
typedef struct w83769f_t {
|
typedef struct w83769f_t {
|
||||||
@@ -297,10 +297,10 @@ w83769f_reset(void *priv)
|
|||||||
(cdrom[i].ide_channel <= max_channel) && cdrom[i].priv)
|
(cdrom[i].ide_channel <= max_channel) && cdrom[i].priv)
|
||||||
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
scsi_cdrom_reset((scsi_common_t *) cdrom[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < ZIP_NUM; i++) {
|
for (i = 0; i < RDISK_NUM; i++) {
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && (zip_drives[i].ide_channel >= min_channel) &&
|
if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && (rdisk_drives[i].ide_channel >= min_channel) &&
|
||||||
(zip_drives[i].ide_channel <= max_channel) && zip_drives[i].priv)
|
(rdisk_drives[i].ide_channel <= max_channel) && rdisk_drives[i].priv)
|
||||||
zip_reset((scsi_common_t *) zip_drives[i].priv);
|
rdisk_reset((scsi_common_t *) rdisk_drives[i].priv);
|
||||||
}
|
}
|
||||||
for (i = 0; i < MO_NUM; i++) {
|
for (i = 0; i < MO_NUM; i++) {
|
||||||
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) &&
|
if ((mo_drives[i].bus_type == MO_BUS_ATAPI) && (mo_drives[i].ide_channel >= min_channel) &&
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -133,7 +133,7 @@ typedef struct config_t {
|
|||||||
|
|
||||||
/* Other removable devices category */
|
/* Other removable devices category */
|
||||||
storage_cfg_t cdrom[CDROM_NUM]; /* CD-ROM drives */
|
storage_cfg_t cdrom[CDROM_NUM]; /* CD-ROM drives */
|
||||||
storage_cfg_t rdisk[ZIP_NUM]; /* Removable disk drives */
|
storage_cfg_t rdisk[RDISK_NUM]; /* Removable disk drives */
|
||||||
} config_t;
|
} config_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ typedef struct dev_status_empty_t {
|
|||||||
typedef struct machine_status_t {
|
typedef struct machine_status_t {
|
||||||
dev_status_empty_active_t fdd[FDD_NUM];
|
dev_status_empty_active_t fdd[FDD_NUM];
|
||||||
dev_status_empty_active_t cdrom[CDROM_NUM];
|
dev_status_empty_active_t cdrom[CDROM_NUM];
|
||||||
dev_status_empty_active_t zip[ZIP_NUM];
|
dev_status_empty_active_t rdisk[RDISK_NUM];
|
||||||
dev_status_empty_active_t mo[MO_NUM];
|
dev_status_empty_active_t mo[MO_NUM];
|
||||||
dev_status_empty_active_t cassette;
|
dev_status_empty_active_t cassette;
|
||||||
dev_status_active_t hdd[HDD_BUS_USB];
|
dev_status_active_t hdd[HDD_BUS_USB];
|
||||||
|
|||||||
@@ -185,9 +185,9 @@ extern void floppy_mount(uint8_t id, char *fn, uint8_t wp);
|
|||||||
extern void floppy_eject(uint8_t id);
|
extern void floppy_eject(uint8_t id);
|
||||||
extern void cdrom_mount(uint8_t id, char *fn);
|
extern void cdrom_mount(uint8_t id, char *fn);
|
||||||
extern void plat_cdrom_ui_update(uint8_t id, uint8_t reload);
|
extern void plat_cdrom_ui_update(uint8_t id, uint8_t reload);
|
||||||
extern void zip_eject(uint8_t id);
|
extern void rdisk_eject(uint8_t id);
|
||||||
extern void zip_mount(uint8_t id, char *fn, uint8_t wp);
|
extern void rdisk_mount(uint8_t id, char *fn, uint8_t wp);
|
||||||
extern void zip_reload(uint8_t id);
|
extern void rdisk_reload(uint8_t id);
|
||||||
extern void mo_eject(uint8_t id);
|
extern void mo_eject(uint8_t id);
|
||||||
extern void mo_mount(uint8_t id, char *fn, uint8_t wp);
|
extern void mo_mount(uint8_t id, char *fn, uint8_t wp);
|
||||||
extern void mo_reload(uint8_t id);
|
extern void mo_reload(uint8_t id);
|
||||||
|
|||||||
@@ -16,29 +16,60 @@
|
|||||||
* Copyright 2018-2025 Miran Grca.
|
* Copyright 2018-2025 Miran Grca.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef EMU_ZIP_H
|
#ifndef EMU_RDISK_H
|
||||||
#define EMU_ZIP_H
|
#define EMU_RDISK_H
|
||||||
|
|
||||||
#define ZIP_NUM 4
|
#define RDISK_NUM 4
|
||||||
|
|
||||||
#define BUF_SIZE 32768
|
#define BUF_SIZE 32768
|
||||||
|
|
||||||
#define ZIP_TIME 10.0
|
#define RDISK_TIME 10.0
|
||||||
|
|
||||||
#define ZIP_SECTORS (96 * 2048)
|
#define ZIP_SECTORS (96 * 2048)
|
||||||
|
|
||||||
#define ZIP_250_SECTORS (489532)
|
#define ZIP_250_SECTORS (489532)
|
||||||
|
|
||||||
#define ZIP_IMAGE_HISTORY 10
|
#define RDISK_IMAGE_HISTORY 10
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ZIP_BUS_DISABLED = 0,
|
RDISK_TYPE_GENERIC = 0,
|
||||||
ZIP_BUS_ATAPI = 5,
|
RDISK_TYPE_ZIP_100,
|
||||||
ZIP_BUS_SCSI = 6,
|
RDISK_TYPE_ZIP_250
|
||||||
ZIP_BUS_USB = 7
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct zip_drive_t {
|
typedef struct rdisk_type_t {
|
||||||
|
uint32_t sectors;
|
||||||
|
uint16_t bytes_per_sector;
|
||||||
|
} rdisk_type_t;
|
||||||
|
|
||||||
|
#define KNOWN_RDISK_TYPES 2
|
||||||
|
static const rdisk_type_t rdisk_types[KNOWN_RDISK_TYPES] = {
|
||||||
|
{ ZIP_SECTORS, 512 },
|
||||||
|
{ ZIP_250_SECTORS, 512 },
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct rdisk_drive_type_t {
|
||||||
|
const char *vendor;
|
||||||
|
const char *model;
|
||||||
|
const char *revision;
|
||||||
|
int8_t supported_media[KNOWN_RDISK_TYPES];
|
||||||
|
} rdisk_drive_type_t;
|
||||||
|
|
||||||
|
#define KNOWN_RDISK_DRIVE_TYPES 3
|
||||||
|
static const rdisk_drive_type_t rdisk_drive_types[KNOWN_RDISK_DRIVE_TYPES] = {
|
||||||
|
{ "86BOX", "REMOVABLE DISK", "1.00", { 1, 1 }},
|
||||||
|
{ "IOMEGA", "ZIP 100", "E.08", { 1, 0 }},
|
||||||
|
{ "IOMEGA", "ZIP 250", "42.S", { 1, 1 }}
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
RDISK_BUS_DISABLED = 0,
|
||||||
|
RDISK_BUS_ATAPI = 5,
|
||||||
|
RDISK_BUS_SCSI = 6,
|
||||||
|
RDISK_BUS_USB = 7
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct rdisk_drive_t {
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
|
|
||||||
union {
|
union {
|
||||||
@@ -64,17 +95,17 @@ typedef struct zip_drive_t {
|
|||||||
char image_path[1024];
|
char image_path[1024];
|
||||||
char prev_image_path[1024];
|
char prev_image_path[1024];
|
||||||
|
|
||||||
char *image_history[ZIP_IMAGE_HISTORY];
|
char *image_history[RDISK_IMAGE_HISTORY];
|
||||||
|
|
||||||
uint32_t is_250;
|
uint32_t type;
|
||||||
uint32_t medium_size;
|
uint32_t medium_size;
|
||||||
uint32_t base;
|
uint32_t base;
|
||||||
} zip_drive_t;
|
} rdisk_drive_t;
|
||||||
|
|
||||||
typedef struct zip_t {
|
typedef struct rdisk_t {
|
||||||
mode_sense_pages_t ms_pages_saved;
|
mode_sense_pages_t ms_pages_saved;
|
||||||
|
|
||||||
zip_drive_t *drv;
|
rdisk_drive_t *drv;
|
||||||
#ifdef EMU_IDE_H
|
#ifdef EMU_IDE_H
|
||||||
ide_tf_t *tf;
|
ide_tf_t *tf;
|
||||||
#else
|
#else
|
||||||
@@ -113,37 +144,37 @@ typedef struct zip_t {
|
|||||||
double callback;
|
double callback;
|
||||||
|
|
||||||
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
uint8_t (*ven_cmd)(void *sc, uint8_t *cdb, int32_t *BufLen);
|
||||||
} zip_t;
|
} rdisk_t;
|
||||||
|
|
||||||
extern zip_t *zip[ZIP_NUM];
|
extern rdisk_t *rdisk[RDISK_NUM];
|
||||||
extern zip_drive_t zip_drives[ZIP_NUM];
|
extern rdisk_drive_t rdisk_drives[RDISK_NUM];
|
||||||
extern uint8_t atapi_zip_drives[8];
|
extern uint8_t atapi_rdisk_drives[8];
|
||||||
extern uint8_t scsi_zip_drives[16];
|
extern uint8_t scsi_rdisk_drives[16];
|
||||||
|
|
||||||
#define zip_sense_error dev->sense[0]
|
#define rdisk_sense_error dev->sense[0]
|
||||||
#define zip_sense_key dev->sense[2]
|
#define rdisk_sense_key dev->sense[2]
|
||||||
#define zip_info *(uint32_t *) &(dev->sense[3])
|
#define rdisk_info *(uint32_t *) &(dev->sense[3])
|
||||||
#define zip_asc dev->sense[12]
|
#define rdisk_asc dev->sense[12]
|
||||||
#define zip_ascq dev->sense[13]
|
#define rdisk_ascq dev->sense[13]
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void zip_disk_close(const zip_t *dev);
|
extern void rdisk_disk_close(const rdisk_t *dev);
|
||||||
extern void zip_disk_reload(const zip_t *dev);
|
extern void rdisk_disk_reload(const rdisk_t *dev);
|
||||||
extern void zip_insert(zip_t *dev);
|
extern void rdisk_insert(rdisk_t *dev);
|
||||||
|
|
||||||
extern void zip_global_init(void);
|
extern void rdisk_global_init(void);
|
||||||
extern void zip_hard_reset(void);
|
extern void rdisk_hard_reset(void);
|
||||||
|
|
||||||
extern void zip_reset(scsi_common_t *sc);
|
extern void rdisk_reset(scsi_common_t *sc);
|
||||||
extern int zip_is_empty(const uint8_t id);
|
extern int rdisk_is_empty(const uint8_t id);
|
||||||
extern void zip_load(const zip_t *dev, const char *fn, const int skip_insert);
|
extern void rdisk_load(const rdisk_t *dev, const char *fn, const int skip_insert);
|
||||||
extern void zip_close(void);
|
extern void rdisk_close(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /*EMU_ZIP_H*/
|
#endif /*EMU_RDISK_H*/
|
||||||
@@ -49,7 +49,7 @@ extern int ui_msgbox_header(int flags, void *header, void *message);
|
|||||||
#define SB_CARTRIDGE 0x10
|
#define SB_CARTRIDGE 0x10
|
||||||
#define SB_FLOPPY 0x20
|
#define SB_FLOPPY 0x20
|
||||||
#define SB_CDROM 0x30
|
#define SB_CDROM 0x30
|
||||||
#define SB_ZIP 0x40
|
#define SB_RDISK 0x40
|
||||||
#define SB_MO 0x50
|
#define SB_MO 0x50
|
||||||
#define SB_HDD 0x60
|
#define SB_HDD 0x60
|
||||||
#define SB_NETWORK 0x70
|
#define SB_NETWORK 0x70
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
#include <86box/cartridge.h>
|
#include <86box/cartridge.h>
|
||||||
#include <86box/cassette.h>
|
#include <86box/cassette.h>
|
||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/hdd.h>
|
#include <86box/hdd.h>
|
||||||
#include <86box/thread.h>
|
#include <86box/thread.h>
|
||||||
@@ -36,9 +36,9 @@ machine_status_init(void)
|
|||||||
machine_status.cdrom[i].empty = (strlen(cdrom[i].image_path) == 0);
|
machine_status.cdrom[i].empty = (strlen(cdrom[i].image_path) == 0);
|
||||||
machine_status.cdrom[i].active = false;
|
machine_status.cdrom[i].active = false;
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
for (size_t i = 0; i < RDISK_NUM; i++) {
|
||||||
machine_status.zip[i].empty = (strlen(zip_drives[i].image_path) == 0);
|
machine_status.rdisk[i].empty = (strlen(rdisk_drives[i].image_path) == 0);
|
||||||
machine_status.zip[i].active = false;
|
machine_status.rdisk[i].active = false;
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < MO_NUM; i++) {
|
for (size_t i = 0; i < MO_NUM; i++) {
|
||||||
machine_status.mo[i].empty = (strlen(mo_drives[i].image_path) == 0);
|
machine_status.mo[i].empty = (strlen(mo_drives[i].image_path) == 0);
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 9.4 KiB |
@@ -40,7 +40,7 @@ msgid "Hide &toolbar"
|
|||||||
msgstr "Masquer la &barre d'outils"
|
msgstr "Masquer la &barre d'outils"
|
||||||
|
|
||||||
msgid "&Resizeable window"
|
msgid "&Resizeable window"
|
||||||
msgstr "Fenêtre &Redimensionnable"
|
msgstr "Fenêtre &redimensionnable"
|
||||||
|
|
||||||
msgid "R&emember size && position"
|
msgid "R&emember size && position"
|
||||||
msgstr "S&auvegarder taille && position"
|
msgstr "S&auvegarder taille && position"
|
||||||
@@ -64,10 +64,10 @@ msgid "Specify dimensions..."
|
|||||||
msgstr "Spécifier dimensions..."
|
msgstr "Spécifier dimensions..."
|
||||||
|
|
||||||
msgid "F&orce 4:3 display ratio"
|
msgid "F&orce 4:3 display ratio"
|
||||||
msgstr "F&orcer 4:3"
|
msgstr "F&orcer le ratio 4:3"
|
||||||
|
|
||||||
msgid "&Window scale factor"
|
msgid "&Window scale factor"
|
||||||
msgstr "&Echelle facteur"
|
msgstr "&Echelle de facteur"
|
||||||
|
|
||||||
msgid "&0.5x"
|
msgid "&0.5x"
|
||||||
msgstr "&0.5x"
|
msgstr "&0.5x"
|
||||||
@@ -100,7 +100,7 @@ msgid "&8x"
|
|||||||
msgstr "&8x"
|
msgstr "&8x"
|
||||||
|
|
||||||
msgid "Filter method"
|
msgid "Filter method"
|
||||||
msgstr "Méthode Filtre"
|
msgstr "Méthode de Filtre"
|
||||||
|
|
||||||
msgid "&Nearest"
|
msgid "&Nearest"
|
||||||
msgstr "&Plus proche"
|
msgstr "&Plus proche"
|
||||||
@@ -112,10 +112,10 @@ msgid "Hi&DPI scaling"
|
|||||||
msgstr "Mise à l'échelle Hi&DPI"
|
msgstr "Mise à l'échelle Hi&DPI"
|
||||||
|
|
||||||
msgid "&Fullscreen"
|
msgid "&Fullscreen"
|
||||||
msgstr "&Plein Ecran"
|
msgstr "&Plein écran"
|
||||||
|
|
||||||
msgid "Fullscreen &stretch mode"
|
msgid "Fullscreen &stretch mode"
|
||||||
msgstr "Mode &Elargi plein écran"
|
msgstr "Mode plein écran &étiré"
|
||||||
|
|
||||||
msgid "&Full screen stretch"
|
msgid "&Full screen stretch"
|
||||||
msgstr "&Plein écran étiré"
|
msgstr "&Plein écran étiré"
|
||||||
@@ -124,13 +124,13 @@ msgid "&4:3"
|
|||||||
msgstr "&4:3"
|
msgstr "&4:3"
|
||||||
|
|
||||||
msgid "&Square pixels (Keep ratio)"
|
msgid "&Square pixels (Keep ratio)"
|
||||||
msgstr "Pixels &carrés (Keep ratio)"
|
msgstr "Pixels &carrés (Conserver le ratio)"
|
||||||
|
|
||||||
msgid "&Integer scale"
|
msgid "&Integer scale"
|
||||||
msgstr "Echelle &Entière"
|
msgstr "&Echelle entière"
|
||||||
|
|
||||||
msgid "4:&3 Integer scale"
|
msgid "4:&3 Integer scale"
|
||||||
msgstr "Echelle Entière 4:&3"
|
msgstr "Echelle entière 4:&3"
|
||||||
|
|
||||||
msgid "E&GA/(S)VGA settings"
|
msgid "E&GA/(S)VGA settings"
|
||||||
msgstr "Réglages E&GA/(S)VGA"
|
msgstr "Réglages E&GA/(S)VGA"
|
||||||
@@ -139,13 +139,13 @@ msgid "&Inverted VGA monitor"
|
|||||||
msgstr "Moniteur VGA &Inversé"
|
msgstr "Moniteur VGA &Inversé"
|
||||||
|
|
||||||
msgid "VGA screen &type"
|
msgid "VGA screen &type"
|
||||||
msgstr "&Type Ecran VGA"
|
msgstr "&Type d'écran VGA"
|
||||||
|
|
||||||
msgid "RGB &Color"
|
msgid "RGB &Color"
|
||||||
msgstr "RGB &Couleur"
|
msgstr "&Couleurs RGB"
|
||||||
|
|
||||||
msgid "&RGB Grayscale"
|
msgid "&RGB Grayscale"
|
||||||
msgstr "&RGB Ton de Gris"
|
msgstr "Niveau de Gris &RGB "
|
||||||
|
|
||||||
msgid "&Amber monitor"
|
msgid "&Amber monitor"
|
||||||
msgstr "Moniteur &Ambre"
|
msgstr "Moniteur &Ambre"
|
||||||
@@ -157,7 +157,7 @@ msgid "&White monitor"
|
|||||||
msgstr "Moniteur &Blanc"
|
msgstr "Moniteur &Blanc"
|
||||||
|
|
||||||
msgid "Grayscale &conversion type"
|
msgid "Grayscale &conversion type"
|
||||||
msgstr "Mode &Conversion tons de gris"
|
msgstr "Type de &conversion du niveau de Gris"
|
||||||
|
|
||||||
msgid "BT&601 (NTSC/PAL)"
|
msgid "BT&601 (NTSC/PAL)"
|
||||||
msgstr "BT&601 (NTSC/PAL)"
|
msgstr "BT&601 (NTSC/PAL)"
|
||||||
@@ -166,16 +166,16 @@ msgid "BT&709 (HDTV)"
|
|||||||
msgstr "BT&709 (HDTV)"
|
msgstr "BT&709 (HDTV)"
|
||||||
|
|
||||||
msgid "&Average"
|
msgid "&Average"
|
||||||
msgstr "&Moyenne"
|
msgstr "&Moyen"
|
||||||
|
|
||||||
msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan"
|
msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan"
|
||||||
msgstr "Overscan CGA/PCjr/Tandy/E&GA/(S)VGA"
|
msgstr "CGA/PCjr/Tandy/E&GA/(S)VGA overscan"
|
||||||
|
|
||||||
msgid "Change contrast for &monochrome display"
|
msgid "Change contrast for &monochrome display"
|
||||||
msgstr "Modifier contraste affichage &monochrome"
|
msgstr "Modifier le contraste de l'affichage &monochrome"
|
||||||
|
|
||||||
msgid "&Media"
|
msgid "&Media"
|
||||||
msgstr "&Media"
|
msgstr "&Média"
|
||||||
|
|
||||||
msgid "&Tools"
|
msgid "&Tools"
|
||||||
msgstr "Ou&tils"
|
msgstr "Ou&tils"
|
||||||
@@ -187,7 +187,7 @@ msgid "&Update status bar icons"
|
|||||||
msgstr "Mettre à jour la barre de stat&us"
|
msgstr "Mettre à jour la barre de stat&us"
|
||||||
|
|
||||||
msgid "Take s&creenshot"
|
msgid "Take s&creenshot"
|
||||||
msgstr "Copie &Ecran"
|
msgstr "Copie &d'écran"
|
||||||
|
|
||||||
msgid "S&ound"
|
msgid "S&ound"
|
||||||
msgstr "S&on"
|
msgstr "S&on"
|
||||||
@@ -196,7 +196,7 @@ msgid "&Preferences..."
|
|||||||
msgstr "&Préférences..."
|
msgstr "&Préférences..."
|
||||||
|
|
||||||
msgid "Enable &Discord integration"
|
msgid "Enable &Discord integration"
|
||||||
msgstr "Activer intégration &Discord"
|
msgstr "Activer l'intégration &Discord"
|
||||||
|
|
||||||
msgid "Sound &gain..."
|
msgid "Sound &gain..."
|
||||||
msgstr "&Gain Son..."
|
msgstr "&Gain Son..."
|
||||||
@@ -235,7 +235,7 @@ msgid "&Rewind to the beginning"
|
|||||||
msgstr "&Revenir au debut"
|
msgstr "&Revenir au debut"
|
||||||
|
|
||||||
msgid "&Fast forward to the end"
|
msgid "&Fast forward to the end"
|
||||||
msgstr "Aller à la &Fin"
|
msgstr "Avance rapide jusqu'à la &Fin"
|
||||||
|
|
||||||
msgid "E&ject"
|
msgid "E&ject"
|
||||||
msgstr "É&jecter"
|
msgstr "É&jecter"
|
||||||
@@ -244,13 +244,13 @@ msgid "&Image..."
|
|||||||
msgstr "&Image..."
|
msgstr "&Image..."
|
||||||
|
|
||||||
msgid "E&xport to 86F..."
|
msgid "E&xport to 86F..."
|
||||||
msgstr "E&xporter vers 86F..."
|
msgstr "E&xport vers 86F..."
|
||||||
|
|
||||||
msgid "&Mute"
|
msgid "&Mute"
|
||||||
msgstr "&Couper"
|
msgstr "&Couper"
|
||||||
|
|
||||||
msgid "E&mpty"
|
msgid "E&mpty"
|
||||||
msgstr "E&jecter"
|
msgstr "V&ide"
|
||||||
|
|
||||||
msgid "Reload previous image"
|
msgid "Reload previous image"
|
||||||
msgstr "Recharger image précedente"
|
msgstr "Recharger image précedente"
|
||||||
@@ -328,7 +328,7 @@ msgid "RPM mode:"
|
|||||||
msgstr "Mode RPM:"
|
msgstr "Mode RPM:"
|
||||||
|
|
||||||
msgid "Progress:"
|
msgid "Progress:"
|
||||||
msgstr "Progrès:"
|
msgstr "Progression:"
|
||||||
|
|
||||||
msgid "Width:"
|
msgid "Width:"
|
||||||
msgstr "Largeur:"
|
msgstr "Largeur:"
|
||||||
@@ -505,10 +505,10 @@ msgid "FD Controller:"
|
|||||||
msgstr "Contrôleur FD:"
|
msgstr "Contrôleur FD:"
|
||||||
|
|
||||||
msgid "Tertiary IDE Controller"
|
msgid "Tertiary IDE Controller"
|
||||||
msgstr "Contrôleur IDE tertiaire"
|
msgstr "Troisième contrôleur IDE"
|
||||||
|
|
||||||
msgid "Quaternary IDE Controller"
|
msgid "Quaternary IDE Controller"
|
||||||
msgstr "Contrôleur IDE quaternair"
|
msgstr "Quatrième contrôleur IDE"
|
||||||
|
|
||||||
msgid "SCSI"
|
msgid "SCSI"
|
||||||
msgstr "SCSI"
|
msgstr "SCSI"
|
||||||
@@ -583,7 +583,7 @@ msgid "Check BPB"
|
|||||||
msgstr "Vérifier BPB"
|
msgstr "Vérifier BPB"
|
||||||
|
|
||||||
msgid "CD-ROM drives:"
|
msgid "CD-ROM drives:"
|
||||||
msgstr "Lecterus CD-ROM:"
|
msgstr "Lecteurs CD-ROM:"
|
||||||
|
|
||||||
msgid "MO drives:"
|
msgid "MO drives:"
|
||||||
msgstr "Lecteurs magnéto-optiques:"
|
msgstr "Lecteurs magnéto-optiques:"
|
||||||
@@ -598,7 +598,7 @@ msgid "ISA RTC:"
|
|||||||
msgstr "Horloge temps réel ISA:"
|
msgstr "Horloge temps réel ISA:"
|
||||||
|
|
||||||
msgid "ISA Memory Expansion"
|
msgid "ISA Memory Expansion"
|
||||||
msgstr "Extension de mémoire ISA"
|
msgstr "Extension de la mémoire ISA"
|
||||||
|
|
||||||
msgid "Card 1:"
|
msgid "Card 1:"
|
||||||
msgstr "Carte 1:"
|
msgstr "Carte 1:"
|
||||||
@@ -661,7 +661,7 @@ msgid "All images"
|
|||||||
msgstr "Toutes les images"
|
msgstr "Toutes les images"
|
||||||
|
|
||||||
msgid "Basic sector images"
|
msgid "Basic sector images"
|
||||||
msgstr "Images basiques du secteur"
|
msgstr "Images secteur basique"
|
||||||
|
|
||||||
msgid "Surface images"
|
msgid "Surface images"
|
||||||
msgstr "Images de la surface"
|
msgstr "Images de la surface"
|
||||||
@@ -709,7 +709,7 @@ msgid "Other removable devices"
|
|||||||
msgstr "Autres dispositifs amovibles"
|
msgstr "Autres dispositifs amovibles"
|
||||||
|
|
||||||
msgid "Other peripherals"
|
msgid "Other peripherals"
|
||||||
msgstr "Autres périfériques"
|
msgstr "Autres périphériques"
|
||||||
|
|
||||||
msgid "Click to capture mouse"
|
msgid "Click to capture mouse"
|
||||||
msgstr "Cliquer pour capturer la souris"
|
msgstr "Cliquer pour capturer la souris"
|
||||||
@@ -724,7 +724,7 @@ msgid "Bus"
|
|||||||
msgstr "Bus"
|
msgstr "Bus"
|
||||||
|
|
||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "File"
|
msgstr "Fichier"
|
||||||
|
|
||||||
msgid "C"
|
msgid "C"
|
||||||
msgstr "C"
|
msgstr "C"
|
||||||
@@ -751,7 +751,7 @@ msgid "No PCap devices found"
|
|||||||
msgstr "Aucun dispositif PCap trouvé"
|
msgstr "Aucun dispositif PCap trouvé"
|
||||||
|
|
||||||
msgid "Invalid PCap device"
|
msgid "Invalid PCap device"
|
||||||
msgstr "Dispositif PCap non valide"
|
msgstr "Dispositif PCap invalide"
|
||||||
|
|
||||||
msgid "2-axis, 2-button joystick(s)"
|
msgid "2-axis, 2-button joystick(s)"
|
||||||
msgstr "Manette(s) avec 2 axes, 2 boutons"
|
msgstr "Manette(s) avec 2 axes, 2 boutons"
|
||||||
@@ -793,10 +793,10 @@ msgid "Floppy %1 (%2): %3"
|
|||||||
msgstr "Disquette %1 (%2): %3"
|
msgstr "Disquette %1 (%2): %3"
|
||||||
|
|
||||||
msgid "Advanced sector images"
|
msgid "Advanced sector images"
|
||||||
msgstr "Images du secteur avancés"
|
msgstr "Images secteur avancé"
|
||||||
|
|
||||||
msgid "Flux images"
|
msgid "Flux images"
|
||||||
msgstr "Images du flux"
|
msgstr "Images Flux"
|
||||||
|
|
||||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||||
msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?"
|
msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?"
|
||||||
@@ -844,7 +844,7 @@ msgid "86Box v"
|
|||||||
msgstr "86Box v"
|
msgstr "86Box v"
|
||||||
|
|
||||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||||
msgstr "Un émulateur de vieux ordinateurs\n\nAuteurs: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nAvec les contributions de Sarah Walker, leilei, JohnElliott, greatpsycho et d'autres.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE."
|
msgstr "Un émulateur d'ordinateurs du passé\n\nAuteurs: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nAvec les contributions de Sarah Walker, leilei, JohnElliott, greatpsycho et d'autres.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE."
|
||||||
|
|
||||||
msgid "Hardware not available"
|
msgid "Hardware not available"
|
||||||
msgstr "Matériel non disponible"
|
msgstr "Matériel non disponible"
|
||||||
@@ -853,7 +853,7 @@ msgid "Make sure %1 is installed and that you are on a %1-compatible network con
|
|||||||
msgstr "Assurez-vous que %1 est installé et que vous utilisez une connexion réseau compatible avec %1."
|
msgstr "Assurez-vous que %1 est installé et que vous utilisez une connexion réseau compatible avec %1."
|
||||||
|
|
||||||
msgid "Invalid configuration"
|
msgid "Invalid configuration"
|
||||||
msgstr "Configuration non valide"
|
msgstr "Configuration invalide"
|
||||||
|
|
||||||
msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."
|
msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."
|
||||||
msgstr "%1 est nécessaire pour la conversion automatique des fichiers PostScript en PDF.\n\nTous les documents envoyés à l'imprimante générique PostScript seront sauvés en tant que fichiers PostScript (.ps)."
|
msgstr "%1 est nécessaire pour la conversion automatique des fichiers PostScript en PDF.\n\nTous les documents envoyés à l'imprimante générique PostScript seront sauvés en tant que fichiers PostScript (.ps)."
|
||||||
@@ -889,7 +889,7 @@ msgid "You are loading an unsupported configuration"
|
|||||||
msgstr "Vous chargez une configuration non prise en charge"
|
msgstr "Vous chargez une configuration non prise en charge"
|
||||||
|
|
||||||
msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."
|
msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."
|
||||||
msgstr "Le filtrage du type du processeur sur la base de la machine sélectionnée est désactivé pur cette machine émulée.\n\nCela permet de sélectionner un processeur qui est sinon incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activation de cette configuration non officiellement prise en charge implique que tout rapport de bogue peut être fermé comme étant invalide."
|
msgstr "Le filtre du type du processeur basé par rapport à la machine sélectionnée est désactivé pour cette machine émulée.\n\nCela permet de sélectionner un processeur qui est de base incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activation de cette configuration non officiellement prise en charge implique que tout rapport de bogue peut être fermé étant considéré comme invalide."
|
||||||
|
|
||||||
msgid "Continue"
|
msgid "Continue"
|
||||||
msgstr "Continuer"
|
msgstr "Continuer"
|
||||||
@@ -982,7 +982,7 @@ msgid "Remember to partition and format the newly-created drive."
|
|||||||
msgstr "N'oubliez pas de partitionner et de formater le nouveau disque créé."
|
msgstr "N'oubliez pas de partitionner et de formater le nouveau disque créé."
|
||||||
|
|
||||||
msgid "The selected file will be overwritten. Are you sure you want to use it?"
|
msgid "The selected file will be overwritten. Are you sure you want to use it?"
|
||||||
msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser?"
|
msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser ?"
|
||||||
|
|
||||||
msgid "Unsupported disk image"
|
msgid "Unsupported disk image"
|
||||||
msgstr "Image disque non prise en charge"
|
msgstr "Image disque non prise en charge"
|
||||||
@@ -1003,13 +1003,13 @@ msgid "HDX image"
|
|||||||
msgstr "Image HDX"
|
msgstr "Image HDX"
|
||||||
|
|
||||||
msgid "Fixed-size VHD"
|
msgid "Fixed-size VHD"
|
||||||
msgstr "VHD à taille fixe"
|
msgstr "VHD de taille fixe"
|
||||||
|
|
||||||
msgid "Dynamic-size VHD"
|
msgid "Dynamic-size VHD"
|
||||||
msgstr "VHD à taille dynamique"
|
msgstr "VHD de taille dynamique"
|
||||||
|
|
||||||
msgid "Differencing VHD"
|
msgid "Differencing VHD"
|
||||||
msgstr "VHD à différenciation"
|
msgstr "VHD différentiel"
|
||||||
|
|
||||||
msgid "(N/A)"
|
msgid "(N/A)"
|
||||||
msgstr "(N.D.)"
|
msgstr "(N.D.)"
|
||||||
@@ -1024,13 +1024,13 @@ msgid "HDX image (.hdx)"
|
|||||||
msgstr "Image HDX (.hdx)"
|
msgstr "Image HDX (.hdx)"
|
||||||
|
|
||||||
msgid "Fixed-size VHD (.vhd)"
|
msgid "Fixed-size VHD (.vhd)"
|
||||||
msgstr "VHD à taille fixe (.vhd)"
|
msgstr "VHD de taille fixe (.vhd)"
|
||||||
|
|
||||||
msgid "Dynamic-size VHD (.vhd)"
|
msgid "Dynamic-size VHD (.vhd)"
|
||||||
msgstr "VHD à taille dynamique (.vhd)"
|
msgstr "VHD de taille dynamique (.vhd)"
|
||||||
|
|
||||||
msgid "Differencing VHD (.vhd)"
|
msgid "Differencing VHD (.vhd)"
|
||||||
msgstr "VHD à différenciation (.vhd)"
|
msgstr "VHD différentiel (.vhd)"
|
||||||
|
|
||||||
msgid "Large blocks (2 MB)"
|
msgid "Large blocks (2 MB)"
|
||||||
msgstr "Grands Blocs (2 Mo)"
|
msgstr "Grands Blocs (2 Mo)"
|
||||||
@@ -1045,7 +1045,7 @@ msgid "Select the parent VHD"
|
|||||||
msgstr "Sélectionnez le VHD parent"
|
msgstr "Sélectionnez le VHD parent"
|
||||||
|
|
||||||
msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?"
|
msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?"
|
||||||
msgstr "Il est possible que l'image parente ai été modifiée après la création de l'image à différenciation.\n\nIl est même possible que les fichiers de l’image ont été déplacés ou copiés ou il existe un bogue dans le programme qui a créé ce disque.\n\nVoulez-vous réparer l'horodatage?"
|
msgstr "Il est possible que l'image parente ai été modifiée après la création de l'image différentielle.\n\nIl est même possible que les fichiers de l’image ont été déplacés ou copiés ou il existe un bogue dans le programme qui a créé ce disque.\n\nVoulez-vous réparer l'horodatage ?"
|
||||||
|
|
||||||
msgid "Parent and child disk timestamps do not match"
|
msgid "Parent and child disk timestamps do not match"
|
||||||
msgstr "Les horodatages des disques parents et enfants ne correspondent pas"
|
msgstr "Les horodatages des disques parents et enfants ne correspondent pas"
|
||||||
@@ -1186,7 +1186,7 @@ msgid "WinBox is no longer supported"
|
|||||||
msgstr "WinBox n'est plus pris en charge"
|
msgstr "WinBox n'est plus pris en charge"
|
||||||
|
|
||||||
msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use."
|
msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use."
|
||||||
msgstr "Le développement du gestionnaire WinBox s'est arrêté en 2022 en raison d'un manque de mainteneurs. Comme nous concentrons nos efforts sur l'amélioration de 86Box, nous avons pris la décision de ne plus supporter WinBox en tant que gestionnaire.\n\nAucune mise à jour ne sera fournie par WinBox, et vous pourriez rencontrer des comportements incorrects si vous continuez à l'utiliser avec des versions plus récentes de 86Box. Tous les rapports de bogues relatifs au comportement de WinBox seront classés comme non valides.\n\nAllez sur 86box.net pour une liste d'autres gestionnaires que vous pouvez utiliser."
|
msgstr "Le développement du gestionnaire WinBox s'est arrêté en 2022 en raison d'un manque de mainteneurs. Comme nous concentrons nos efforts sur l'amélioration de 86Box, nous avons pris la décision de ne plus supporter WinBox en tant que gestionnaire.\n\nAucune mise à jour ne sera fournie par WinBox et vous pourriez rencontrer des comportements incorrects si vous continuez à l'utiliser avec des versions plus récentes de 86Box. Tous les rapports de bogues relatifs au comportement de WinBox seront classés comme non valides.\n\nAllez sur 86box.net pour une liste d'autres gestionnaires que vous pouvez utiliser."
|
||||||
|
|
||||||
msgid "Generate"
|
msgid "Generate"
|
||||||
msgstr "Générer"
|
msgstr "Générer"
|
||||||
@@ -1228,7 +1228,7 @@ msgid "Open screenshots folder..."
|
|||||||
msgstr "Ouvrir le dossier des captures d'écran..."
|
msgstr "Ouvrir le dossier des captures d'écran..."
|
||||||
|
|
||||||
msgid "Apply fullscreen stretch mode when maximized"
|
msgid "Apply fullscreen stretch mode when maximized"
|
||||||
msgstr "Appliquer le mode elargi plein écran lorsque l'écran est maximisé"
|
msgstr "Appliquer le mode élargi plein écran lorsque la fenêtre est maximisée"
|
||||||
|
|
||||||
msgid "Cursor/Puck"
|
msgid "Cursor/Puck"
|
||||||
msgstr "Curseur/Palette"
|
msgstr "Curseur/Palette"
|
||||||
@@ -1261,7 +1261,7 @@ msgid "NIC %1 (%2) %3"
|
|||||||
msgstr "NIC %1 (%2) %3"
|
msgstr "NIC %1 (%2) %3"
|
||||||
|
|
||||||
msgid "Render behavior"
|
msgid "Render behavior"
|
||||||
msgstr "Comportement de rendu"
|
msgstr "Comportement du rendu"
|
||||||
|
|
||||||
msgid "Use target framerate:"
|
msgid "Use target framerate:"
|
||||||
msgstr "Utiliser le taux de rafraîchissement cible:"
|
msgstr "Utiliser le taux de rafraîchissement cible:"
|
||||||
@@ -1297,7 +1297,7 @@ msgid "Error initializing OpenGL"
|
|||||||
msgstr "Erreur d'initialisation d'OpenGL"
|
msgstr "Erreur d'initialisation d'OpenGL"
|
||||||
|
|
||||||
msgid "\nFalling back to software rendering."
|
msgid "\nFalling back to software rendering."
|
||||||
msgstr "\nSe rabattre sur le rendu logiciel."
|
msgstr "\nRevenir au rendu logiciel."
|
||||||
|
|
||||||
msgid "<html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html>"
|
msgid "<html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html>"
|
||||||
msgstr "<html><head/><body><p>Lors de la sélection d'images multimédia (CD-ROM, disquette, etc.), la boîte de dialogue d'ouverture démarrera dans le même répertoire que le fichier de configuration de 86Box. Ce paramètre ne fera probablement une différence que sur macOS.</p></body></html>"
|
msgstr "<html><head/><body><p>Lors de la sélection d'images multimédia (CD-ROM, disquette, etc.), la boîte de dialogue d'ouverture démarrera dans le même répertoire que le fichier de configuration de 86Box. Ce paramètre ne fera probablement une différence que sur macOS.</p></body></html>"
|
||||||
@@ -1354,19 +1354,19 @@ msgid "Novell NetWare 2.x Key Card"
|
|||||||
msgstr "Carte clé Novell NetWare 2.x"
|
msgstr "Carte clé Novell NetWare 2.x"
|
||||||
|
|
||||||
msgid "Serial port passthrough 1"
|
msgid "Serial port passthrough 1"
|
||||||
msgstr "Passage du port série 1"
|
msgstr "Transfert du port série 1"
|
||||||
|
|
||||||
msgid "Serial port passthrough 2"
|
msgid "Serial port passthrough 2"
|
||||||
msgstr "Passage du port série 2"
|
msgstr "Transfert du port série 2"
|
||||||
|
|
||||||
msgid "Serial port passthrough 3"
|
msgid "Serial port passthrough 3"
|
||||||
msgstr "Passage du port série 3"
|
msgstr "Transfert du port série 3"
|
||||||
|
|
||||||
msgid "Serial port passthrough 4"
|
msgid "Serial port passthrough 4"
|
||||||
msgstr "Passage du port série 4"
|
msgstr "Transfert du port série 4"
|
||||||
|
|
||||||
msgid "Renderer options..."
|
msgid "Renderer options..."
|
||||||
msgstr "Options de rendu..."
|
msgstr "Options du rendu..."
|
||||||
|
|
||||||
msgid "Logitech/Microsoft Bus Mouse"
|
msgid "Logitech/Microsoft Bus Mouse"
|
||||||
msgstr "Souris bus Logitech/Microsoft"
|
msgstr "Souris bus Logitech/Microsoft"
|
||||||
@@ -1408,7 +1408,7 @@ msgid "OPL4-ML Daughterboard"
|
|||||||
msgstr "Carte fille OPL4-ML"
|
msgstr "Carte fille OPL4-ML"
|
||||||
|
|
||||||
msgid "System MIDI"
|
msgid "System MIDI"
|
||||||
msgstr "MIDI de système"
|
msgstr "Système MIDI"
|
||||||
|
|
||||||
msgid "MIDI Input Device"
|
msgid "MIDI Input Device"
|
||||||
msgstr "Dispositif d'entrée MIDI"
|
msgstr "Dispositif d'entrée MIDI"
|
||||||
@@ -1432,7 +1432,7 @@ msgid "Translate 26 -> 17"
|
|||||||
msgstr "Traduire 26 -> 17"
|
msgstr "Traduire 26 -> 17"
|
||||||
|
|
||||||
msgid "Language"
|
msgid "Language"
|
||||||
msgstr "Language"
|
msgstr "Langage"
|
||||||
|
|
||||||
msgid "Enable backlight"
|
msgid "Enable backlight"
|
||||||
msgstr "Activer le rétro-éclairage"
|
msgstr "Activer le rétro-éclairage"
|
||||||
@@ -1471,7 +1471,7 @@ msgid "MIDI Real time"
|
|||||||
msgstr "MIDI en temps réel"
|
msgstr "MIDI en temps réel"
|
||||||
|
|
||||||
msgid "MIDI Thru"
|
msgid "MIDI Thru"
|
||||||
msgstr "Passage de la entrée MIDI"
|
msgstr "Transfert MIDI"
|
||||||
|
|
||||||
msgid "MIDI Clockout"
|
msgid "MIDI Clockout"
|
||||||
msgstr "Horloge MIDI"
|
msgstr "Horloge MIDI"
|
||||||
@@ -1486,10 +1486,10 @@ msgid "Chorus"
|
|||||||
msgstr "Chœur"
|
msgstr "Chœur"
|
||||||
|
|
||||||
msgid "Chorus Voices"
|
msgid "Chorus Voices"
|
||||||
msgstr "Voix de chœur"
|
msgstr "Voix du chœur"
|
||||||
|
|
||||||
msgid "Chorus Level"
|
msgid "Chorus Level"
|
||||||
msgstr "Niveau de chœur"
|
msgstr "Niveau du chœur"
|
||||||
|
|
||||||
msgid "Chorus Speed"
|
msgid "Chorus Speed"
|
||||||
msgstr "Vitesse du chœur"
|
msgstr "Vitesse du chœur"
|
||||||
@@ -1519,7 +1519,7 @@ msgid "Interpolation Method"
|
|||||||
msgstr "Méthode d'interpolation"
|
msgstr "Méthode d'interpolation"
|
||||||
|
|
||||||
msgid "Reverb Output Gain"
|
msgid "Reverb Output Gain"
|
||||||
msgstr "Gain de sortie de réverbération"
|
msgstr "Gain de sortie réverbération"
|
||||||
|
|
||||||
msgid "Reversed stereo"
|
msgid "Reversed stereo"
|
||||||
msgstr "Stéréo inversée"
|
msgstr "Stéréo inversée"
|
||||||
@@ -1555,7 +1555,7 @@ msgid "MAC Address"
|
|||||||
msgstr "Adresse MAC"
|
msgstr "Adresse MAC"
|
||||||
|
|
||||||
msgid "MAC Address OUI"
|
msgid "MAC Address OUI"
|
||||||
msgstr "OUI de adresse MAC"
|
msgstr "Adresse MAC OUI"
|
||||||
|
|
||||||
msgid "Enable BIOS"
|
msgid "Enable BIOS"
|
||||||
msgstr "Activer BIOS"
|
msgstr "Activer BIOS"
|
||||||
@@ -1567,7 +1567,7 @@ msgid "TCP/IP listening port"
|
|||||||
msgstr "Port d'écoute TCP/IP"
|
msgstr "Port d'écoute TCP/IP"
|
||||||
|
|
||||||
msgid "Phonebook File"
|
msgid "Phonebook File"
|
||||||
msgstr "Fichier de répertoire"
|
msgstr "Fichier d'annuaire"
|
||||||
|
|
||||||
msgid "Telnet emulation"
|
msgid "Telnet emulation"
|
||||||
msgstr "Émulation de Telnet"
|
msgstr "Émulation de Telnet"
|
||||||
@@ -1645,10 +1645,10 @@ msgid "High DMA"
|
|||||||
msgstr "DMA haut"
|
msgstr "DMA haut"
|
||||||
|
|
||||||
msgid "Control PC speaker"
|
msgid "Control PC speaker"
|
||||||
msgstr "Contrôler l'haut-parleur du PC"
|
msgstr "Contrôler le haut-parleur du PC"
|
||||||
|
|
||||||
msgid "Memory size"
|
msgid "Memory size"
|
||||||
msgstr "Taille de mémoire"
|
msgstr "Taille mémoire"
|
||||||
|
|
||||||
msgid "EMU8000 Address"
|
msgid "EMU8000 Address"
|
||||||
msgstr "Adresse EMU8000"
|
msgstr "Adresse EMU8000"
|
||||||
@@ -1714,10 +1714,10 @@ msgid "Voodoo type"
|
|||||||
msgstr "Type de Voodoo"
|
msgstr "Type de Voodoo"
|
||||||
|
|
||||||
msgid "Framebuffer memory size"
|
msgid "Framebuffer memory size"
|
||||||
msgstr "Taille de la mémoire du tampon d'images"
|
msgstr "Taille mémoire du tampon d'images"
|
||||||
|
|
||||||
msgid "Texture memory size"
|
msgid "Texture memory size"
|
||||||
msgstr "Taille de la mémoire des textures"
|
msgstr "Taille mémoire des textures"
|
||||||
|
|
||||||
msgid "Dither subtraction"
|
msgid "Dither subtraction"
|
||||||
msgstr "Soustraction de tramage"
|
msgstr "Soustraction de tramage"
|
||||||
@@ -1726,7 +1726,7 @@ msgid "Screen Filter"
|
|||||||
msgstr "Filtre d'écran"
|
msgstr "Filtre d'écran"
|
||||||
|
|
||||||
msgid "Render threads"
|
msgid "Render threads"
|
||||||
msgstr "Fils de rendu"
|
msgstr "Tâches du rendu"
|
||||||
|
|
||||||
msgid "SLI"
|
msgid "SLI"
|
||||||
msgstr "SLI"
|
msgstr "SLI"
|
||||||
@@ -1780,10 +1780,10 @@ msgid "Linear"
|
|||||||
msgstr "Linéaire"
|
msgstr "Linéaire"
|
||||||
|
|
||||||
msgid "4th Order"
|
msgid "4th Order"
|
||||||
msgstr "Du 4e ordre"
|
msgstr "4e ordre"
|
||||||
|
|
||||||
msgid "7th Order"
|
msgid "7th Order"
|
||||||
msgstr "Du 7e ordre"
|
msgstr "7e ordre"
|
||||||
|
|
||||||
msgid "Non-timed (original)"
|
msgid "Non-timed (original)"
|
||||||
msgstr "Non temporisé (original)"
|
msgstr "Non temporisé (original)"
|
||||||
@@ -1804,7 +1804,7 @@ msgid "Five + Wheel"
|
|||||||
msgstr "Cinq + molette"
|
msgstr "Cinq + molette"
|
||||||
|
|
||||||
msgid "Five + 2 Wheels"
|
msgid "Five + 2 Wheels"
|
||||||
msgstr ""
|
msgstr "Cinq + 2 molettes"
|
||||||
|
|
||||||
msgid "A3 - SMT2 Serial / SMT3(R)V"
|
msgid "A3 - SMT2 Serial / SMT3(R)V"
|
||||||
msgstr "A3 - SMT2 série / SMT3(R)V"
|
msgstr "A3 - SMT2 série / SMT3(R)V"
|
||||||
@@ -1900,7 +1900,7 @@ msgid "sRGB interpolation"
|
|||||||
msgstr "Interpolation sRVB"
|
msgstr "Interpolation sRVB"
|
||||||
|
|
||||||
msgid "Linear interpolation"
|
msgid "Linear interpolation"
|
||||||
msgstr "Interpolation linéairee"
|
msgstr "Interpolation linéaire"
|
||||||
|
|
||||||
msgid "128 KB"
|
msgid "128 KB"
|
||||||
msgstr "128 Ko"
|
msgstr "128 Ko"
|
||||||
@@ -1915,7 +1915,7 @@ msgid "Monochrome (5151/MDA) (amber)"
|
|||||||
msgstr "Monochrome (5151/MDA) (ambre)"
|
msgstr "Monochrome (5151/MDA) (ambre)"
|
||||||
|
|
||||||
msgid "Color 40x25 (5153/CGA)"
|
msgid "Color 40x25 (5153/CGA)"
|
||||||
msgstr "Couler 40x25 (5153/CGA)"
|
msgstr "Couleur 40x25 (5153/CGA)"
|
||||||
|
|
||||||
msgid "Color 80x25 (5153/CGA)"
|
msgid "Color 80x25 (5153/CGA)"
|
||||||
msgstr "Couleur 80x25 (5153/CGA)"
|
msgstr "Couleur 80x25 (5153/CGA)"
|
||||||
@@ -1954,10 +1954,10 @@ msgid "Mono Non-Interlaced"
|
|||||||
msgstr "Monochrome non entrelacé"
|
msgstr "Monochrome non entrelacé"
|
||||||
|
|
||||||
msgid "Color Interlaced"
|
msgid "Color Interlaced"
|
||||||
msgstr "Couler entrelacé"
|
msgstr "Couleur entrelacée"
|
||||||
|
|
||||||
msgid "Color Non-Interlaced"
|
msgid "Color Non-Interlaced"
|
||||||
msgstr "Couleur non entrelacé"
|
msgstr "Couleur non entrelacée"
|
||||||
|
|
||||||
msgid "3Dfx Voodoo Graphics"
|
msgid "3Dfx Voodoo Graphics"
|
||||||
msgstr "Graphique 3dfx Voodoo"
|
msgstr "Graphique 3dfx Voodoo"
|
||||||
@@ -1990,7 +1990,7 @@ msgid "Stereo LPT DAC"
|
|||||||
msgstr "Convertisseur numérique stéréo LPT"
|
msgstr "Convertisseur numérique stéréo LPT"
|
||||||
|
|
||||||
msgid "Generic Text Printer"
|
msgid "Generic Text Printer"
|
||||||
msgstr "Imprimante Texte générique"
|
msgstr "Imprimante texte générique"
|
||||||
|
|
||||||
msgid "Generic ESC/P Dot-Matrix Printer"
|
msgid "Generic ESC/P Dot-Matrix Printer"
|
||||||
msgstr "Imprimante matricielle générique ESC/P"
|
msgstr "Imprimante matricielle générique ESC/P"
|
||||||
@@ -2008,16 +2008,16 @@ msgid "Protection Dongle for Savage Quest"
|
|||||||
msgstr "Clé de protection pour Savage Quest"
|
msgstr "Clé de protection pour Savage Quest"
|
||||||
|
|
||||||
msgid "Serial Passthrough Device"
|
msgid "Serial Passthrough Device"
|
||||||
msgstr "Dispositif de passage du port série"
|
msgstr "Dispositif de transfert du port série"
|
||||||
|
|
||||||
msgid "Passthrough Mode"
|
msgid "Passthrough Mode"
|
||||||
msgstr "Mode de passage"
|
msgstr "Mode de transfert"
|
||||||
|
|
||||||
msgid "Host Serial Device"
|
msgid "Host Serial Device"
|
||||||
msgstr "Dispositif sériel de l'hôte"
|
msgstr "Dispositif série de l'hôte"
|
||||||
|
|
||||||
msgid "Name of pipe"
|
msgid "Name of pipe"
|
||||||
msgstr "Nom du tuyau"
|
msgstr "Nom du pipeline"
|
||||||
|
|
||||||
msgid "Data bits"
|
msgid "Data bits"
|
||||||
msgstr "Bits de données"
|
msgstr "Bits de données"
|
||||||
@@ -2026,13 +2026,13 @@ msgid "Stop bits"
|
|||||||
msgstr "Bits d'arrêt"
|
msgstr "Bits d'arrêt"
|
||||||
|
|
||||||
msgid "Baud Rate of Passthrough"
|
msgid "Baud Rate of Passthrough"
|
||||||
msgstr "Taux de bauds du passage"
|
msgstr "Taux de bauds du transfert"
|
||||||
|
|
||||||
msgid "Named Pipe (Server)"
|
msgid "Named Pipe (Server)"
|
||||||
msgstr "Tuyau nommé (serveur)"
|
msgstr "Pipeline nommé (serveur)"
|
||||||
|
|
||||||
msgid "Host Serial Passthrough"
|
msgid "Host Serial Passthrough"
|
||||||
msgstr "Passage du port série de l'hôte"
|
msgstr "Transfert du port série de l'hôte"
|
||||||
|
|
||||||
msgid "E&ject %1"
|
msgid "E&ject %1"
|
||||||
msgstr "É&jecter %1"
|
msgstr "É&jecter %1"
|
||||||
@@ -2077,13 +2077,13 @@ msgid "Vendor"
|
|||||||
msgstr "Fabricant"
|
msgstr "Fabricant"
|
||||||
|
|
||||||
msgid "Generic PC/XT Memory Expansion"
|
msgid "Generic PC/XT Memory Expansion"
|
||||||
msgstr "Extension de mémoire générique PC/XT"
|
msgstr "Extension mémoire générique PC/XT"
|
||||||
|
|
||||||
msgid "Generic PC/AT Memory Expansion"
|
msgid "Generic PC/AT Memory Expansion"
|
||||||
msgstr "Extension de mémoire générique PC/AT"
|
msgstr "Extension mémoire générique PC/AT"
|
||||||
|
|
||||||
msgid "Unable to find Dot-Matrix fonts"
|
msgid "Unable to find Dot-Matrix fonts"
|
||||||
msgstr "Impossible de trouver les polices matricielles"
|
msgstr "Impossible de trouver les polices matricielles."
|
||||||
|
|
||||||
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P Dot-Matrix Printer."
|
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P Dot-Matrix Printer."
|
||||||
msgstr "Les polices TrueType dans le répertoire \"roms/printer/fonts\" sont nécessaires à l'émulation de l'imprimante générique ESC/P matricielle."
|
msgstr "Les polices TrueType dans le répertoire \"roms/printer/fonts\" sont nécessaires à l'émulation de l'imprimante générique ESC/P matricielle."
|
||||||
@@ -2103,9 +2103,6 @@ msgstr "Demander confirmation avant de quitter"
|
|||||||
msgid "Options"
|
msgid "Options"
|
||||||
msgstr "Options"
|
msgstr "Options"
|
||||||
|
|
||||||
msgid "Model"
|
|
||||||
msgstr "Modèle"
|
|
||||||
|
|
||||||
msgid "Model:"
|
msgid "Model:"
|
||||||
msgstr "Modèle:"
|
msgstr "Modèle:"
|
||||||
|
|
||||||
@@ -2116,10 +2113,10 @@ msgid "GLSL Error"
|
|||||||
msgstr "Erreur GLSL"
|
msgstr "Erreur GLSL"
|
||||||
|
|
||||||
msgid "Could not load shader: %1"
|
msgid "Could not load shader: %1"
|
||||||
msgstr "Impossible de charger le shaker %1"
|
msgstr "Impossible de charger le shader %1"
|
||||||
|
|
||||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||||
msgstr "OpenGL version 3.0 ou supérieur requis. Version installée: %1.%2"
|
msgstr "OpenGL version 3.0 ou supérieure requis. Version installée: %1.%2"
|
||||||
|
|
||||||
msgid "Could not load texture: %1"
|
msgid "Could not load texture: %1"
|
||||||
msgstr "Impossible de charger la texture %1"
|
msgstr "Impossible de charger la texture %1"
|
||||||
|
|||||||
@@ -600,8 +600,8 @@ msgstr "Unidades de CD-ROM:"
|
|||||||
msgid "MO drives:"
|
msgid "MO drives:"
|
||||||
msgstr "Unidades magneto-ópticas:"
|
msgstr "Unidades magneto-ópticas:"
|
||||||
|
|
||||||
msgid "ZIP drives:"
|
msgid "Removable disk drives:"
|
||||||
msgstr "Unidades ZIP:"
|
msgstr "Unidades de disco removível:"
|
||||||
|
|
||||||
msgid "ZIP 250"
|
msgid "ZIP 250"
|
||||||
msgstr "ZIP 250"
|
msgstr "ZIP 250"
|
||||||
@@ -669,11 +669,14 @@ msgstr " - PAUSADO"
|
|||||||
msgid "Speed"
|
msgid "Speed"
|
||||||
msgstr "Velocidade"
|
msgstr "Velocidade"
|
||||||
|
|
||||||
msgid "ZIP %1 %2 (%3): %4"
|
msgid "Removable disk %1 (%2): %3"
|
||||||
msgstr "ZIP %1 %2 (%3): %4"
|
msgstr "Disco removível %1 (%2): %3"
|
||||||
|
|
||||||
msgid "ZIP images"
|
msgid "Removable disk images"
|
||||||
msgstr "Imagens ZIP"
|
msgstr "Imagens de disco removível"
|
||||||
|
|
||||||
|
msgid "Image %1"
|
||||||
|
msgstr "Imagem %1"
|
||||||
|
|
||||||
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
|
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
|
||||||
msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, <a href=\"https://github.com/86Box/roms/releases/latest\">baixe</a> um conjunto de ROM e extraia no diretório \"roms\"."
|
msgstr "O 86Box não conseguiu encontrar nenhuma imagem de ROM utilizável.\n\nPor favor, <a href=\"https://github.com/86Box/roms/releases/latest\">baixe</a> um conjunto de ROM e extraia no diretório \"roms\"."
|
||||||
@@ -823,7 +826,7 @@ msgid "Thrustmaster Flight Control System"
|
|||||||
msgstr "Sistema de Controle de Voo Thrustmaster"
|
msgstr "Sistema de Controle de Voo Thrustmaster"
|
||||||
|
|
||||||
msgid "Thrustmaster FCS + Rudder Control System"
|
msgid "Thrustmaster FCS + Rudder Control System"
|
||||||
msgstr "Thrustmaster SCV + Sistema de Controle de Leme"
|
msgstr "SCV Thrustmaster + Sistema de Controle de Leme"
|
||||||
|
|
||||||
msgid "2-button gamepad(s)"
|
msgid "2-button gamepad(s)"
|
||||||
msgstr "Gamepad(s) de 2 botões"
|
msgstr "Gamepad(s) de 2 botões"
|
||||||
@@ -1446,6 +1449,9 @@ msgstr "Mouse de barramento Mouse Systems"
|
|||||||
msgid "Microsoft Serial Mouse"
|
msgid "Microsoft Serial Mouse"
|
||||||
msgstr "Mouse serial Microsoft"
|
msgstr "Mouse serial Microsoft"
|
||||||
|
|
||||||
|
msgid "Microsoft Serial BallPoint"
|
||||||
|
msgstr "Mouse serial Microsoft BallPoint"
|
||||||
|
|
||||||
msgid "Logitech Serial Mouse"
|
msgid "Logitech Serial Mouse"
|
||||||
msgstr "Mouse serial Logitech"
|
msgstr "Mouse serial Logitech"
|
||||||
|
|
||||||
@@ -1455,6 +1461,9 @@ msgstr "Mouse PS/2"
|
|||||||
msgid "3M MicroTouch (Serial)"
|
msgid "3M MicroTouch (Serial)"
|
||||||
msgstr "3M MicroTouch (serial)"
|
msgstr "3M MicroTouch (serial)"
|
||||||
|
|
||||||
|
msgid "Default Baud rate"
|
||||||
|
msgstr "Taxa de transmissão padrão"
|
||||||
|
|
||||||
msgid "[COM] Standard Hayes-compliant Modem"
|
msgid "[COM] Standard Hayes-compliant Modem"
|
||||||
msgstr "[COM] Modem padrão compatível com Hayes"
|
msgstr "[COM] Modem padrão compatível com Hayes"
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ extern "C" {
|
|||||||
#include <86box/hdc.h>
|
#include <86box/hdc.h>
|
||||||
#include <86box/scsi.h>
|
#include <86box/scsi.h>
|
||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/plat.h>
|
#include <86box/plat.h>
|
||||||
#include <86box/machine.h>
|
#include <86box/machine.h>
|
||||||
@@ -102,7 +102,7 @@ struct Pixmaps {
|
|||||||
PixmapSetEmptyActive floppy_525;
|
PixmapSetEmptyActive floppy_525;
|
||||||
PixmapSetEmptyActive floppy_35;
|
PixmapSetEmptyActive floppy_35;
|
||||||
PixmapSetEmptyActive cdrom;
|
PixmapSetEmptyActive cdrom;
|
||||||
PixmapSetEmptyActive zip;
|
PixmapSetEmptyActive rdisk;
|
||||||
PixmapSetEmptyActive mo;
|
PixmapSetEmptyActive mo;
|
||||||
PixmapSetActive hd;
|
PixmapSetActive hd;
|
||||||
PixmapSetEmptyActive net;
|
PixmapSetEmptyActive net;
|
||||||
@@ -283,7 +283,7 @@ struct MachineStatus::States {
|
|||||||
pixmaps.floppy_525.load(QIcon(":/settings/qt/icons/floppy_525.ico"));
|
pixmaps.floppy_525.load(QIcon(":/settings/qt/icons/floppy_525.ico"));
|
||||||
pixmaps.floppy_35.load(QIcon(":/settings/qt/icons/floppy_35.ico"));
|
pixmaps.floppy_35.load(QIcon(":/settings/qt/icons/floppy_35.ico"));
|
||||||
pixmaps.cdrom.load(QIcon(":/settings/qt/icons/cdrom.ico"));
|
pixmaps.cdrom.load(QIcon(":/settings/qt/icons/cdrom.ico"));
|
||||||
pixmaps.zip.load(QIcon(":/settings/qt/icons/zip.ico"));
|
pixmaps.rdisk.load(QIcon(":/settings/qt/icons/rdisk.ico"));
|
||||||
pixmaps.mo.load(QIcon(":/settings/qt/icons/mo.ico"));
|
pixmaps.mo.load(QIcon(":/settings/qt/icons/mo.ico"));
|
||||||
pixmaps.hd.load(QIcon(":/settings/qt/icons/hard_disk.ico"));
|
pixmaps.hd.load(QIcon(":/settings/qt/icons/hard_disk.ico"));
|
||||||
pixmaps.net.load(QIcon(":/settings/qt/icons/network.ico"));
|
pixmaps.net.load(QIcon(":/settings/qt/icons/network.ico"));
|
||||||
@@ -298,8 +298,8 @@ struct MachineStatus::States {
|
|||||||
for (auto &c : cdrom) {
|
for (auto &c : cdrom) {
|
||||||
c.pixmaps = &pixmaps.cdrom;
|
c.pixmaps = &pixmaps.cdrom;
|
||||||
}
|
}
|
||||||
for (auto &z : zip) {
|
for (auto &z : rdisk) {
|
||||||
z.pixmaps = &pixmaps.zip;
|
z.pixmaps = &pixmaps.rdisk;
|
||||||
}
|
}
|
||||||
for (auto &m : mo) {
|
for (auto &m : mo) {
|
||||||
m.pixmaps = &pixmaps.mo;
|
m.pixmaps = &pixmaps.mo;
|
||||||
@@ -316,7 +316,7 @@ struct MachineStatus::States {
|
|||||||
StateEmptyActive cassette;
|
StateEmptyActive cassette;
|
||||||
std::array<StateEmptyActive, FDD_NUM> fdd;
|
std::array<StateEmptyActive, FDD_NUM> fdd;
|
||||||
std::array<StateEmptyActive, CDROM_NUM> cdrom;
|
std::array<StateEmptyActive, CDROM_NUM> cdrom;
|
||||||
std::array<StateEmptyActive, ZIP_NUM> zip;
|
std::array<StateEmptyActive, RDISK_NUM> rdisk;
|
||||||
std::array<StateEmptyActive, MO_NUM> mo;
|
std::array<StateEmptyActive, MO_NUM> mo;
|
||||||
std::array<StateActive, HDD_BUS_USB> hdds;
|
std::array<StateActive, HDD_BUS_USB> hdds;
|
||||||
std::array<StateEmptyActive, NET_CARD_MAX> net;
|
std::array<StateEmptyActive, NET_CARD_MAX> net;
|
||||||
@@ -397,21 +397,21 @@ MachineStatus::iterateCDROM(const std::function<void(int)> &cb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MachineStatus::iterateZIP(const std::function<void(int)> &cb)
|
MachineStatus::iterateRDisk(const std::function<void(int)> &cb)
|
||||||
{
|
{
|
||||||
auto hdc_name = QString(hdc_get_internal_name(hdc_current[0]));
|
auto hdc_name = QString(hdc_get_internal_name(hdc_current[0]));
|
||||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
for (size_t i = 0; i < RDISK_NUM; i++) {
|
||||||
/* Could be Internal or External IDE.. */
|
/* Could be Internal or External IDE.. */
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) && !hasIDE() &&
|
if ((rdisk_drives[i].bus_type == RDISK_BUS_ATAPI) && !hasIDE() &&
|
||||||
(hdc_name.left(3) != QStringLiteral("ide")) &&
|
(hdc_name.left(3) != QStringLiteral("ide")) &&
|
||||||
(hdc_name.left(5) != QStringLiteral("xtide")) &&
|
(hdc_name.left(5) != QStringLiteral("xtide")) &&
|
||||||
(hdc_name.left(5) != QStringLiteral("mcide")))
|
(hdc_name.left(5) != QStringLiteral("mcide")))
|
||||||
continue;
|
continue;
|
||||||
if ((zip_drives[i].bus_type == ZIP_BUS_SCSI) && !hasSCSI() &&
|
if ((rdisk_drives[i].bus_type == RDISK_BUS_SCSI) && !hasSCSI() &&
|
||||||
(scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) &&
|
(scsi_card_current[0] == 0) && (scsi_card_current[1] == 0) &&
|
||||||
(scsi_card_current[2] == 0) && (scsi_card_current[3] == 0))
|
(scsi_card_current[2] == 0) && (scsi_card_current[3] == 0))
|
||||||
continue;
|
continue;
|
||||||
if (zip_drives[i].bus_type != 0) {
|
if (rdisk_drives[i].bus_type != 0) {
|
||||||
cb(i);
|
cb(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -475,9 +475,9 @@ MachineStatus::refreshEmptyIcons()
|
|||||||
}
|
}
|
||||||
for (size_t i = 0; i < CDROM_NUM; ++i)
|
for (size_t i = 0; i < CDROM_NUM; ++i)
|
||||||
d->cdrom[i].setEmpty(machine_status.cdrom[i].empty);
|
d->cdrom[i].setEmpty(machine_status.cdrom[i].empty);
|
||||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
for (size_t i = 0; i < RDISK_NUM; i++) {
|
||||||
d->zip[i].setEmpty(machine_status.zip[i].empty);
|
d->rdisk[i].setEmpty(machine_status.rdisk[i].empty);
|
||||||
d->zip[i].setWriteProtected(machine_status.zip[i].write_prot);
|
d->rdisk[i].setWriteProtected(machine_status.rdisk[i].write_prot);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < MO_NUM; i++) {
|
for (size_t i = 0; i < MO_NUM; i++) {
|
||||||
d->mo[i].setEmpty(machine_status.mo[i].empty);
|
d->mo[i].setEmpty(machine_status.mo[i].empty);
|
||||||
@@ -515,13 +515,13 @@ MachineStatus::refreshIcons()
|
|||||||
ui_sb_update_icon_write(SB_CDROM | i, 0);
|
ui_sb_update_icon_write(SB_CDROM | i, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
for (size_t i = 0; i < RDISK_NUM; i++) {
|
||||||
d->zip[i].setActive(machine_status.zip[i].active);
|
d->rdisk[i].setActive(machine_status.rdisk[i].active);
|
||||||
d->zip[i].setWriteActive(machine_status.zip[i].write_active);
|
d->rdisk[i].setWriteActive(machine_status.rdisk[i].write_active);
|
||||||
if (machine_status.zip[i].active)
|
if (machine_status.rdisk[i].active)
|
||||||
ui_sb_update_icon(SB_ZIP | i, 0);
|
ui_sb_update_icon(SB_RDISK | i, 0);
|
||||||
if (machine_status.zip[i].write_active)
|
if (machine_status.rdisk[i].write_active)
|
||||||
ui_sb_update_icon_write(SB_ZIP | i, 0);
|
ui_sb_update_icon_write(SB_RDISK | i, 0);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < MO_NUM; i++) {
|
for (size_t i = 0; i < MO_NUM; i++) {
|
||||||
d->mo[i].setActive(machine_status.mo[i].active);
|
d->mo[i].setActive(machine_status.mo[i].active);
|
||||||
@@ -558,9 +558,9 @@ MachineStatus::clearActivity()
|
|||||||
cdrom.setActive(false);
|
cdrom.setActive(false);
|
||||||
cdrom.setWriteActive(false);
|
cdrom.setWriteActive(false);
|
||||||
}
|
}
|
||||||
for (auto &zip : d->zip) {
|
for (auto &rdisk : d->rdisk) {
|
||||||
zip.setActive(false);
|
rdisk.setActive(false);
|
||||||
zip.setWriteActive(false);
|
rdisk.setWriteActive(false);
|
||||||
}
|
}
|
||||||
for (auto &mo : d->mo) {
|
for (auto &mo : d->mo) {
|
||||||
mo.setActive(false);
|
mo.setActive(false);
|
||||||
@@ -600,8 +600,8 @@ MachineStatus::refresh(QStatusBar *sbar)
|
|||||||
for (size_t i = 0; i < CDROM_NUM; i++) {
|
for (size_t i = 0; i < CDROM_NUM; i++) {
|
||||||
sbar->removeWidget(d->cdrom[i].label.get());
|
sbar->removeWidget(d->cdrom[i].label.get());
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
for (size_t i = 0; i < RDISK_NUM; i++) {
|
||||||
sbar->removeWidget(d->zip[i].label.get());
|
sbar->removeWidget(d->rdisk[i].label.get());
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < MO_NUM; i++) {
|
for (size_t i = 0; i < MO_NUM; i++) {
|
||||||
sbar->removeWidget(d->mo[i].label.get());
|
sbar->removeWidget(d->mo[i].label.get());
|
||||||
@@ -700,38 +700,38 @@ MachineStatus::refresh(QStatusBar *sbar)
|
|||||||
sbar->addWidget(d->cdrom[i].label.get());
|
sbar->addWidget(d->cdrom[i].label.get());
|
||||||
});
|
});
|
||||||
|
|
||||||
iterateZIP([this, sbar](int i) {
|
iterateRDisk([this, sbar](int i) {
|
||||||
d->zip[i].label = std::make_unique<ClickableLabel>();
|
d->rdisk[i].label = std::make_unique<ClickableLabel>();
|
||||||
d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty());
|
d->rdisk[i].setEmpty(QString(rdisk_drives[i].image_path).isEmpty());
|
||||||
if (QString(zip_drives[i].image_path).isEmpty())
|
if (QString(rdisk_drives[i].image_path).isEmpty())
|
||||||
d->zip[i].setWriteProtected(false);
|
d->rdisk[i].setWriteProtected(false);
|
||||||
else if (QString(zip_drives[i].image_path).left(5) == "wp://")
|
else if (QString(rdisk_drives[i].image_path).left(5) == "wp://")
|
||||||
d->zip[i].setWriteProtected(true);
|
d->rdisk[i].setWriteProtected(true);
|
||||||
else
|
else
|
||||||
d->zip[i].setWriteProtected(zip_drives[i].read_only);
|
d->rdisk[i].setWriteProtected(rdisk_drives[i].read_only);
|
||||||
d->zip[i].setActive(false);
|
d->rdisk[i].setActive(false);
|
||||||
d->zip[i].setWriteActive(false);
|
d->rdisk[i].setWriteActive(false);
|
||||||
d->zip[i].refresh();
|
d->rdisk[i].refresh();
|
||||||
connect((ClickableLabel *) d->zip[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
connect((ClickableLabel *) d->rdisk[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||||
MediaMenu::ptr->zipMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->zipMenus[i]->sizeHint().height()));
|
MediaMenu::ptr->rdiskMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->rdiskMenus[i]->sizeHint().height()));
|
||||||
});
|
});
|
||||||
connect((ClickableLabel *) d->zip[i].label.get(), &ClickableLabel::dropped, [i](QString str) {
|
connect((ClickableLabel *) d->rdisk[i].label.get(), &ClickableLabel::dropped, [i](QString str) {
|
||||||
MediaMenu::ptr->zipMount(i, str, false);
|
MediaMenu::ptr->rdiskMount(i, str, false);
|
||||||
});
|
});
|
||||||
d->zip[i].label->setToolTip(MediaMenu::ptr->zipMenus[i]->title());
|
d->rdisk[i].label->setToolTip(MediaMenu::ptr->rdiskMenus[i]->title());
|
||||||
d->zip[i].label->setAcceptDrops(true);
|
d->rdisk[i].label->setAcceptDrops(true);
|
||||||
sbar->addWidget(d->zip[i].label.get());
|
sbar->addWidget(d->rdisk[i].label.get());
|
||||||
});
|
});
|
||||||
|
|
||||||
iterateMO([this, sbar](int i) {
|
iterateMO([this, sbar](int i) {
|
||||||
d->mo[i].label = std::make_unique<ClickableLabel>();
|
d->mo[i].label = std::make_unique<ClickableLabel>();
|
||||||
d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty());
|
d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty());
|
||||||
if (QString(zip_drives[i].image_path).isEmpty())
|
if (QString(rdisk_drives[i].image_path).isEmpty())
|
||||||
d->mo[i].setWriteProtected(false);
|
d->mo[i].setWriteProtected(false);
|
||||||
else if (QString(zip_drives[i].image_path).left(5) == "wp://")
|
else if (QString(rdisk_drives[i].image_path).left(5) == "wp://")
|
||||||
d->mo[i].setWriteProtected(true);
|
d->mo[i].setWriteProtected(true);
|
||||||
else
|
else
|
||||||
d->mo[i].setWriteProtected(zip_drives[i].read_only);
|
d->mo[i].setWriteProtected(rdisk_drives[i].read_only);
|
||||||
d->mo[i].setActive(false);
|
d->mo[i].setActive(false);
|
||||||
d->mo[i].setWriteActive(false);
|
d->mo[i].setWriteActive(false);
|
||||||
d->mo[i].refresh();
|
d->mo[i].refresh();
|
||||||
@@ -924,9 +924,9 @@ MachineStatus::updateTip(int tag)
|
|||||||
if (d->cdrom[item].label && MediaMenu::ptr->cdromMenus[item])
|
if (d->cdrom[item].label && MediaMenu::ptr->cdromMenus[item])
|
||||||
d->cdrom[item].label->setToolTip(MediaMenu::ptr->cdromMenus[item]->title());
|
d->cdrom[item].label->setToolTip(MediaMenu::ptr->cdromMenus[item]->title());
|
||||||
break;
|
break;
|
||||||
case SB_ZIP:
|
case SB_RDISK:
|
||||||
if (d->zip[item].label && MediaMenu::ptr->zipMenus[item])
|
if (d->rdisk[item].label && MediaMenu::ptr->rdiskMenus[item])
|
||||||
d->zip[item].label->setToolTip(MediaMenu::ptr->zipMenus[item]->title());
|
d->rdisk[item].label->setToolTip(MediaMenu::ptr->rdiskMenus[item]->title());
|
||||||
break;
|
break;
|
||||||
case SB_MO:
|
case SB_MO:
|
||||||
if (d->mo[item].label && MediaMenu::ptr->moMenus[item])
|
if (d->mo[item].label && MediaMenu::ptr->moMenus[item])
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public:
|
|||||||
static bool hasSCSI();
|
static bool hasSCSI();
|
||||||
static void iterateFDD(const std::function<void(int i)> &cb);
|
static void iterateFDD(const std::function<void(int i)> &cb);
|
||||||
static void iterateCDROM(const std::function<void(int i)> &cb);
|
static void iterateCDROM(const std::function<void(int i)> &cb);
|
||||||
static void iterateZIP(const std::function<void(int i)> &cb);
|
static void iterateRDisk(const std::function<void(int i)> &cb);
|
||||||
static void iterateMO(const std::function<void(int i)> &cb);
|
static void iterateMO(const std::function<void(int i)> &cb);
|
||||||
static void iterateNIC(const std::function<void(int i)> &cb);
|
static void iterateNIC(const std::function<void(int i)> &cb);
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ extern "C" {
|
|||||||
#include <86box/fdd.h>
|
#include <86box/fdd.h>
|
||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/path.h>
|
#include <86box/path.h>
|
||||||
}
|
}
|
||||||
@@ -114,8 +114,8 @@ MediaHistoryManager::maxDevicesSupported(ui::MediaType type)
|
|||||||
return CDROM_NUM;
|
return CDROM_NUM;
|
||||||
case ui::MediaType::Floppy:
|
case ui::MediaType::Floppy:
|
||||||
return FDD_NUM;
|
return FDD_NUM;
|
||||||
case ui::MediaType::Zip:
|
case ui::MediaType::RDisk:
|
||||||
return ZIP_NUM;
|
return RDISK_NUM;
|
||||||
case ui::MediaType::Mo:
|
case ui::MediaType::Mo:
|
||||||
return MO_NUM;
|
return MO_NUM;
|
||||||
case ui::MediaType::Cassette:
|
case ui::MediaType::Cassette:
|
||||||
@@ -200,8 +200,8 @@ MediaHistoryManager::initialDeduplication()
|
|||||||
case ui::MediaType::Optical:
|
case ui::MediaType::Optical:
|
||||||
current_image = cdrom[device_index].image_path;
|
current_image = cdrom[device_index].image_path;
|
||||||
break;
|
break;
|
||||||
case ui::MediaType::Zip:
|
case ui::MediaType::RDisk:
|
||||||
current_image = zip_drives[device_index].image_path;
|
current_image = rdisk_drives[device_index].image_path;
|
||||||
break;
|
break;
|
||||||
case ui::MediaType::Mo:
|
case ui::MediaType::Mo:
|
||||||
current_image = mo_drives[device_index].image_path;
|
current_image = mo_drives[device_index].image_path;
|
||||||
@@ -237,8 +237,8 @@ MediaHistoryManager::getEmuHistoryVarForType(ui::MediaType type, int index)
|
|||||||
return &fdd_image_history[index][0];
|
return &fdd_image_history[index][0];
|
||||||
case ui::MediaType::Optical:
|
case ui::MediaType::Optical:
|
||||||
return &cdrom[index].image_history[0];
|
return &cdrom[index].image_history[0];
|
||||||
case ui::MediaType::Zip:
|
case ui::MediaType::RDisk:
|
||||||
return &zip_drives[index].image_history[0];
|
return &rdisk_drives[index].image_history[0];
|
||||||
case ui::MediaType::Mo:
|
case ui::MediaType::Mo:
|
||||||
return &mo_drives[index].image_history[0];
|
return &mo_drives[index].image_history[0];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ Q_NAMESPACE
|
|||||||
enum class MediaType {
|
enum class MediaType {
|
||||||
Floppy,
|
Floppy,
|
||||||
Optical,
|
Optical,
|
||||||
Zip,
|
RDisk,
|
||||||
Mo,
|
Mo,
|
||||||
Cassette,
|
Cassette,
|
||||||
Cartridge
|
Cartridge
|
||||||
@@ -62,7 +62,7 @@ typedef QHash<ui::MediaType, device_media_history_t> master_list_t;
|
|||||||
static const MediaType AllSupportedMediaHistoryTypes[] = {
|
static const MediaType AllSupportedMediaHistoryTypes[] = {
|
||||||
MediaType::Optical,
|
MediaType::Optical,
|
||||||
MediaType::Floppy,
|
MediaType::Floppy,
|
||||||
MediaType::Zip,
|
MediaType::RDisk,
|
||||||
MediaType::Mo,
|
MediaType::Mo,
|
||||||
MediaType::Cassette,
|
MediaType::Cassette,
|
||||||
MediaType::Cartridge
|
MediaType::Cartridge
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ extern "C" {
|
|||||||
#include <86box/fdd_86f.h>
|
#include <86box/fdd_86f.h>
|
||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/sound.h>
|
#include <86box/sound.h>
|
||||||
#include <86box/ui.h>
|
#include <86box/ui.h>
|
||||||
@@ -187,24 +187,24 @@ MediaMenu::refresh(QMenu *parentMenu)
|
|||||||
cdromUpdateMenu(i);
|
cdromUpdateMenu(i);
|
||||||
});
|
});
|
||||||
|
|
||||||
zipMenus.clear();
|
rdiskMenus.clear();
|
||||||
MachineStatus::iterateZIP([this, parentMenu](int i) {
|
MachineStatus::iterateRDisk([this, parentMenu](int i) {
|
||||||
auto *menu = parentMenu->addMenu("");
|
auto *menu = parentMenu->addMenu("");
|
||||||
QIcon img_icon = QIcon(":/settings/qt/icons/zip_image.ico");
|
QIcon img_icon = QIcon(":/settings/qt/icons/rdisk_image.ico");
|
||||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this, i]() { zipNewImage(i); });
|
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this, i]() { rdiskNewImage(i); });
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Browse), tr("&Existing image..."), [this, i]() { zipSelectImage(i, false); });
|
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Browse), tr("&Existing image..."), [this, i]() { rdiskSelectImage(i, false); });
|
||||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, WriteProtectedBrowse), tr("Existing image (&Write-protected)..."), [this, i]() { zipSelectImage(i, true); });
|
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, WriteProtectedBrowse), tr("Existing image (&Write-protected)..."), [this, i]() { rdiskSelectImage(i, true); });
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) {
|
for (int slot = 0; slot < MAX_PREV_IMAGES; slot++) {
|
||||||
zipImageHistoryPos[slot] = menu->children().count();
|
rdiskImageHistoryPos[slot] = menu->children().count();
|
||||||
menu->addAction(img_icon, tr("Image %1").arg(slot), [this, i, slot]() { zipReload(i, slot); })->setCheckable(false);
|
menu->addAction(img_icon, tr("Image %1").arg(slot), [this, i, slot]() { rdiskReload(i, slot); })->setCheckable(false);
|
||||||
}
|
}
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
zipEjectPos = menu->children().count();
|
rdiskEjectPos = menu->children().count();
|
||||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Eject), tr("E&ject"), [this, i]() { zipEject(i); });
|
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Eject), tr("E&ject"), [this, i]() { rdiskEject(i); });
|
||||||
zipMenus[i] = menu;
|
rdiskMenus[i] = menu;
|
||||||
zipUpdateMenu(i);
|
rdiskUpdateMenu(i);
|
||||||
});
|
});
|
||||||
|
|
||||||
moMenus.clear();
|
moMenus.clear();
|
||||||
@@ -725,12 +725,12 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
|
|||||||
}
|
}
|
||||||
imageHistoryUpdatePos->setIcon(menu_icon);
|
imageHistoryUpdatePos->setIcon(menu_icon);
|
||||||
break;
|
break;
|
||||||
case ui::MediaType::Zip:
|
case ui::MediaType::RDisk:
|
||||||
if (!zipMenus.contains(index))
|
if (!rdiskMenus.contains(index))
|
||||||
return;
|
return;
|
||||||
menu = zipMenus[index];
|
menu = rdiskMenus[index];
|
||||||
children = menu->children();
|
children = menu->children();
|
||||||
imageHistoryUpdatePos = dynamic_cast<QAction *>(children[zipImageHistoryPos[slot]]);
|
imageHistoryUpdatePos = dynamic_cast<QAction *>(children[rdiskImageHistoryPos[slot]]);
|
||||||
menu_icon = QIcon(":/settings/qt/icons/mo_image.ico");
|
menu_icon = QIcon(":/settings/qt/icons/mo_image.ico");
|
||||||
if (fn.left(5) == "wp://")
|
if (fn.left(5) == "wp://")
|
||||||
fi.setFile(fn.right(fn.length() - 5));
|
fi.setFile(fn.right(fn.length() - 5));
|
||||||
@@ -845,145 +845,178 @@ MediaMenu::cdromUpdateMenu(int i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::zipNewImage(int i)
|
MediaMenu::rdiskNewImage(int i)
|
||||||
{
|
{
|
||||||
NewFloppyDialog dialog(NewFloppyDialog::MediaType::Zip, parentWidget);
|
NewFloppyDialog dialog(NewFloppyDialog::MediaType::RDisk, parentWidget);
|
||||||
switch (dialog.exec()) {
|
switch (dialog.exec()) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case QDialog::Accepted:
|
case QDialog::Accepted:
|
||||||
QByteArray filename = dialog.fileName().toUtf8();
|
QByteArray filename = dialog.fileName().toUtf8();
|
||||||
zipMount(i, filename, false);
|
rdiskMount(i, filename, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::zipSelectImage(int i, bool wp)
|
MediaMenu::rdiskSelectImage(int i, bool wp)
|
||||||
{
|
{
|
||||||
const auto filename = QFileDialog::getOpenFileName(
|
const auto filename = QFileDialog::getOpenFileName(
|
||||||
parentWidget,
|
parentWidget,
|
||||||
QString(),
|
QString(),
|
||||||
QString(),
|
QString(),
|
||||||
tr("ZIP images") % util::DlgFilter({ "im?", "zdi" }) % tr("All files") % util::DlgFilter({ "*" }, true));
|
tr("Removable disk images") % util::DlgFilter({ "im?", "rdi", "zdi" }) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||||
|
|
||||||
if (!filename.isEmpty())
|
if (!filename.isEmpty())
|
||||||
zipMount(i, filename, wp);
|
rdiskMount(i, filename, wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::zipMount(int i, const QString &filename, bool wp)
|
MediaMenu::rdiskMount(int i, const QString &filename, bool wp)
|
||||||
{
|
{
|
||||||
const auto dev = static_cast<zip_t *>(zip_drives[i].priv);
|
const auto dev = static_cast<rdisk_t *>(rdisk_drives[i].priv);
|
||||||
int was_empty = zip_is_empty(i);
|
int was_empty = rdisk_is_empty(i);
|
||||||
|
|
||||||
zip_disk_close(dev);
|
rdisk_disk_close(dev);
|
||||||
zip_drives[i].read_only = wp;
|
rdisk_drives[i].read_only = wp;
|
||||||
if (!filename.isEmpty()) {
|
if (!filename.isEmpty()) {
|
||||||
QByteArray filenameBytes = filename.toUtf8();
|
QByteArray filenameBytes = filename.toUtf8();
|
||||||
|
|
||||||
if (filename.left(5) == "wp://")
|
if (filename.left(5) == "wp://")
|
||||||
zip_drives[i].read_only = 1;
|
rdisk_drives[i].read_only = 1;
|
||||||
else if (zip_drives[i].read_only)
|
else if (rdisk_drives[i].read_only)
|
||||||
filenameBytes = QString::asprintf(R"(wp://%s)", filename.toUtf8().data()).toUtf8();
|
filenameBytes = QString::asprintf(R"(wp://%s)", filename.toUtf8().data()).toUtf8();
|
||||||
|
|
||||||
zip_load(dev, filenameBytes.data(), 1);
|
rdisk_load(dev, filenameBytes.data(), 1);
|
||||||
|
|
||||||
/* Signal media change to the emulated machine. */
|
/* Signal media change to the emulated machine. */
|
||||||
zip_insert(dev);
|
rdisk_insert(dev);
|
||||||
|
|
||||||
/* The drive was previously empty, transition directly to UNIT ATTENTION. */
|
/* The drive was previously empty, transition directly to UNIT ATTENTION. */
|
||||||
if (was_empty)
|
if (was_empty)
|
||||||
zip_insert(dev);
|
rdisk_insert(dev);
|
||||||
}
|
}
|
||||||
mhm.addImageToHistory(i, ui::MediaType::Zip, zip_drives[i].prev_image_path, zip_drives[i].image_path);
|
mhm.addImageToHistory(i, ui::MediaType::RDisk, rdisk_drives[i].prev_image_path, rdisk_drives[i].image_path);
|
||||||
|
|
||||||
ui_sb_update_icon_state(SB_ZIP | i, filename.isEmpty() ? 1 : 0);
|
ui_sb_update_icon_state(SB_RDISK | i, filename.isEmpty() ? 1 : 0);
|
||||||
ui_sb_update_icon_wp(SB_ZIP | i, wp);
|
ui_sb_update_icon_wp(SB_RDISK | i, wp);
|
||||||
zipUpdateMenu(i);
|
rdiskUpdateMenu(i);
|
||||||
ui_sb_update_tip(SB_ZIP | i);
|
ui_sb_update_tip(SB_RDISK | i);
|
||||||
|
|
||||||
config_save();
|
config_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::zipEject(int i)
|
MediaMenu::rdiskEject(int i)
|
||||||
{
|
{
|
||||||
const auto dev = static_cast<zip_t *>(zip_drives[i].priv);
|
const auto dev = static_cast<rdisk_t *>(rdisk_drives[i].priv);
|
||||||
|
|
||||||
mhm.addImageToHistory(i, ui::MediaType::Zip, zip_drives[i].image_path, QString());
|
mhm.addImageToHistory(i, ui::MediaType::RDisk, rdisk_drives[i].image_path, QString());
|
||||||
zip_disk_close(dev);
|
rdisk_disk_close(dev);
|
||||||
zip_drives[i].image_path[0] = 0;
|
rdisk_drives[i].image_path[0] = 0;
|
||||||
if (zip_drives[i].bus_type) {
|
if (rdisk_drives[i].bus_type) {
|
||||||
/* Signal disk change to the emulated machine. */
|
/* Signal disk change to the emulated machine. */
|
||||||
zip_insert(dev);
|
rdisk_insert(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_sb_update_icon_state(SB_ZIP | i, 1);
|
ui_sb_update_icon_state(SB_RDISK | i, 1);
|
||||||
zipUpdateMenu(i);
|
rdiskUpdateMenu(i);
|
||||||
ui_sb_update_tip(SB_ZIP | i);
|
ui_sb_update_tip(SB_RDISK | i);
|
||||||
config_save();
|
config_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::zipReloadPrev(int i)
|
MediaMenu::rdiskReloadPrev(int i)
|
||||||
{
|
{
|
||||||
const auto dev = static_cast<zip_t *>(zip_drives[i].priv);
|
const auto dev = static_cast<rdisk_t *>(rdisk_drives[i].priv);
|
||||||
|
|
||||||
zip_disk_reload(dev);
|
rdisk_disk_reload(dev);
|
||||||
if (strlen(zip_drives[i].image_path) == 0) {
|
if (strlen(rdisk_drives[i].image_path) == 0) {
|
||||||
ui_sb_update_icon_state(SB_ZIP | i, 1);
|
ui_sb_update_icon_state(SB_RDISK | i, 1);
|
||||||
} else {
|
} else {
|
||||||
ui_sb_update_icon_state(SB_ZIP | i, 0);
|
ui_sb_update_icon_state(SB_RDISK | i, 0);
|
||||||
}
|
}
|
||||||
ui_sb_update_icon_wp(SB_ZIP | i, zip_drives[i].read_only);
|
ui_sb_update_icon_wp(SB_RDISK | i, rdisk_drives[i].read_only);
|
||||||
|
|
||||||
zipUpdateMenu(i);
|
rdiskUpdateMenu(i);
|
||||||
ui_sb_update_tip(SB_ZIP | i);
|
ui_sb_update_tip(SB_RDISK | i);
|
||||||
|
|
||||||
config_save();
|
config_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::zipReload(int index, int slot)
|
MediaMenu::rdiskReload(int index, int slot)
|
||||||
{
|
{
|
||||||
const QString filename = mhm.getImageForSlot(index, slot, ui::MediaType::Zip);
|
const QString filename = mhm.getImageForSlot(index, slot, ui::MediaType::RDisk);
|
||||||
zipMount(index, filename, zip_drives[index].read_only);
|
rdiskMount(index, filename, rdisk_drives[index].read_only);
|
||||||
zipUpdateMenu(index);
|
rdiskUpdateMenu(index);
|
||||||
ui_sb_update_tip(SB_ZIP | index);
|
ui_sb_update_tip(SB_RDISK | index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::zipUpdateMenu(int i)
|
MediaMenu::moUpdateMenu(int i)
|
||||||
{
|
{
|
||||||
const QString name = zip_drives[i].image_path;
|
QString name = mo_drives[i].image_path;
|
||||||
const QString prev_name = zip_drives[i].prev_image_path;
|
QString prev_name = mo_drives[i].prev_image_path;
|
||||||
QFileInfo fi(zip_drives[i].image_path);
|
QFileInfo fi(mo_drives[i].image_path);
|
||||||
if (!zipMenus.contains(i))
|
if (!moMenus.contains(i))
|
||||||
return;
|
return;
|
||||||
auto *menu = zipMenus[i];
|
auto *menu = moMenus[i];
|
||||||
auto childs = menu->children();
|
auto childs = menu->children();
|
||||||
|
|
||||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[zipEjectPos]);
|
auto *ejectMenu = dynamic_cast<QAction *>(childs[moEjectPos]);
|
||||||
ejectMenu->setEnabled(!name.isEmpty());
|
ejectMenu->setEnabled(!name.isEmpty());
|
||||||
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName()));
|
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName()));
|
||||||
|
|
||||||
QString busName = tr("Unknown Bus");
|
QString busName = tr("Unknown Bus");
|
||||||
switch (zip_drives[i].bus_type) {
|
switch (mo_drives[i].bus_type) {
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case ZIP_BUS_ATAPI:
|
case MO_BUS_ATAPI:
|
||||||
busName = "ATAPI";
|
busName = "ATAPI";
|
||||||
break;
|
break;
|
||||||
case ZIP_BUS_SCSI:
|
case MO_BUS_SCSI:
|
||||||
busName = "SCSI";
|
busName = "SCSI";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
menu->setTitle(tr("ZIP %1 %2 (%3): %4").arg((zip_drives[i].is_250 > 0) ? QString("250") : QString("100"), QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name));
|
menu->setTitle(tr("MO %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name));
|
||||||
|
|
||||||
for (int slot = 0; slot < MAX_PREV_IMAGES; slot++)
|
for (int slot = 0; slot < MAX_PREV_IMAGES; slot++)
|
||||||
updateImageHistory(i, slot, ui::MediaType::Zip);
|
updateImageHistory(i, slot, ui::MediaType::Mo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MediaMenu::rdiskUpdateMenu(int i)
|
||||||
|
{
|
||||||
|
const QString name = rdisk_drives[i].image_path;
|
||||||
|
const QString prev_name = rdisk_drives[i].prev_image_path;
|
||||||
|
QFileInfo fi(rdisk_drives[i].image_path);
|
||||||
|
if (!rdiskMenus.contains(i))
|
||||||
|
return;
|
||||||
|
auto *menu = rdiskMenus[i];
|
||||||
|
auto childs = menu->children();
|
||||||
|
|
||||||
|
auto *ejectMenu = dynamic_cast<QAction *>(childs[rdiskEjectPos]);
|
||||||
|
ejectMenu->setEnabled(!name.isEmpty());
|
||||||
|
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName()));
|
||||||
|
|
||||||
|
QString busName = tr("Unknown Bus");
|
||||||
|
switch (rdisk_drives[i].bus_type) {
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
case RDISK_BUS_ATAPI:
|
||||||
|
busName = "ATAPI";
|
||||||
|
break;
|
||||||
|
case RDISK_BUS_SCSI:
|
||||||
|
busName = "SCSI";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->setTitle(tr("Removable disk %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name));
|
||||||
|
|
||||||
|
for (int slot = 0; slot < MAX_PREV_IMAGES; slot++)
|
||||||
|
updateImageHistory(i, slot, ui::MediaType::RDisk);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1097,39 +1130,6 @@ MediaMenu::moReload(int index, int slot)
|
|||||||
ui_sb_update_tip(SB_MO | index);
|
ui_sb_update_tip(SB_MO | index);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
MediaMenu::moUpdateMenu(int i)
|
|
||||||
{
|
|
||||||
QString name = mo_drives[i].image_path;
|
|
||||||
QString prev_name = mo_drives[i].prev_image_path;
|
|
||||||
QFileInfo fi(mo_drives[i].image_path);
|
|
||||||
if (!moMenus.contains(i))
|
|
||||||
return;
|
|
||||||
auto *menu = moMenus[i];
|
|
||||||
auto childs = menu->children();
|
|
||||||
|
|
||||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[moEjectPos]);
|
|
||||||
ejectMenu->setEnabled(!name.isEmpty());
|
|
||||||
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName()));
|
|
||||||
|
|
||||||
QString busName = tr("Unknown Bus");
|
|
||||||
switch (mo_drives[i].bus_type) {
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
case MO_BUS_ATAPI:
|
|
||||||
busName = "ATAPI";
|
|
||||||
break;
|
|
||||||
case MO_BUS_SCSI:
|
|
||||||
busName = "SCSI";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
menu->setTitle(tr("MO %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name));
|
|
||||||
|
|
||||||
for (int slot = 0; slot < MAX_PREV_IMAGES; slot++)
|
|
||||||
updateImageHistory(i, slot, ui::MediaType::Mo);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MediaMenu::nicConnect(int i)
|
MediaMenu::nicConnect(int i)
|
||||||
{
|
{
|
||||||
@@ -1244,21 +1244,21 @@ plat_cdrom_ui_update(uint8_t id, uint8_t reload)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zip_eject(uint8_t id)
|
rdisk_eject(uint8_t id)
|
||||||
{
|
{
|
||||||
MediaMenu::ptr->zipEject(id);
|
MediaMenu::ptr->rdiskEject(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zip_mount(uint8_t id, char *fn, uint8_t wp)
|
rdisk_mount(uint8_t id, char *fn, uint8_t wp)
|
||||||
{
|
{
|
||||||
MediaMenu::ptr->zipMount(id, QString(fn), wp);
|
MediaMenu::ptr->rdiskMount(id, QString(fn), wp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zip_reload(uint8_t id)
|
rdisk_reload(uint8_t id)
|
||||||
{
|
{
|
||||||
MediaMenu::ptr->zipReloadPrev(id);
|
MediaMenu::ptr->rdiskReloadPrev(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public:
|
|||||||
|
|
||||||
void refresh(QMenu *parentMenu);
|
void refresh(QMenu *parentMenu);
|
||||||
|
|
||||||
// because some 86box C-only code needs to call zip and
|
// because some 86box C-only code needs to call rdisk and
|
||||||
// mo eject directly
|
// mo eject directly
|
||||||
static std::shared_ptr<MediaMenu> ptr;
|
static std::shared_ptr<MediaMenu> ptr;
|
||||||
|
|
||||||
@@ -51,13 +51,13 @@ public:
|
|||||||
void clearImageHistory();
|
void clearImageHistory();
|
||||||
void cdromUpdateMenu(int i);
|
void cdromUpdateMenu(int i);
|
||||||
|
|
||||||
void zipNewImage(int i);
|
void rdiskNewImage(int i);
|
||||||
void zipSelectImage(int i, bool wp);
|
void rdiskSelectImage(int i, bool wp);
|
||||||
void zipMount(int i, const QString &filename, bool wp);
|
void rdiskMount(int i, const QString &filename, bool wp);
|
||||||
void zipEject(int i);
|
void rdiskEject(int i);
|
||||||
void zipReloadPrev(int i);
|
void rdiskReloadPrev(int i);
|
||||||
void zipReload(int index, int slot);
|
void rdiskReload(int index, int slot);
|
||||||
void zipUpdateMenu(int i);
|
void rdiskUpdateMenu(int i);
|
||||||
|
|
||||||
void moNewImage(int i);
|
void moNewImage(int i);
|
||||||
void moSelectImage(int i, bool wp);
|
void moSelectImage(int i, bool wp);
|
||||||
@@ -84,7 +84,7 @@ private:
|
|||||||
QMap<int, QMenu *> cartridgeMenus;
|
QMap<int, QMenu *> cartridgeMenus;
|
||||||
QMap<int, QMenu *> floppyMenus;
|
QMap<int, QMenu *> floppyMenus;
|
||||||
QMap<int, QMenu *> cdromMenus;
|
QMap<int, QMenu *> cdromMenus;
|
||||||
QMap<int, QMenu *> zipMenus;
|
QMap<int, QMenu *> rdiskMenus;
|
||||||
QMap<int, QMenu *> moMenus;
|
QMap<int, QMenu *> moMenus;
|
||||||
QMap<int, QMenu *> netMenus;
|
QMap<int, QMenu *> netMenus;
|
||||||
|
|
||||||
@@ -111,8 +111,8 @@ private:
|
|||||||
int cdromEjectPos;
|
int cdromEjectPos;
|
||||||
int cdromImageHistoryPos[MAX_PREV_IMAGES];
|
int cdromImageHistoryPos[MAX_PREV_IMAGES];
|
||||||
|
|
||||||
int zipEjectPos;
|
int rdiskEjectPos;
|
||||||
int zipImageHistoryPos[MAX_PREV_IMAGES];
|
int rdiskImageHistoryPos[MAX_PREV_IMAGES];
|
||||||
|
|
||||||
int moEjectPos;
|
int moEjectPos;
|
||||||
int moImageHistoryPos[MAX_PREV_IMAGES];
|
int moImageHistoryPos[MAX_PREV_IMAGES];
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ extern "C" {
|
|||||||
#include <86box/plat.h>
|
#include <86box/plat.h>
|
||||||
#include <86box/random.h>
|
#include <86box/random.h>
|
||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +110,7 @@ static const QStringList floppyTypes = {
|
|||||||
"2.88 MB",
|
"2.88 MB",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const QStringList zipTypes = {
|
static const QStringList rdiskTypes = {
|
||||||
"ZIP 100",
|
"ZIP 100",
|
||||||
"ZIP 250",
|
"ZIP 250",
|
||||||
};
|
};
|
||||||
@@ -146,11 +146,11 @@ NewFloppyDialog::NewFloppyDialog(MediaType type, QWidget *parent)
|
|||||||
tr("All images") % util::DlgFilter({ "86f", "dsk", "flp", "im?", "img", "*fd?" }) % tr("Basic sector images") % util::DlgFilter({ "dsk", "flp", "im?", "img", "*fd?" }) % tr("Surface images") % util::DlgFilter({ "86f" }, true));
|
tr("All images") % util::DlgFilter({ "86f", "dsk", "flp", "im?", "img", "*fd?" }) % tr("Basic sector images") % util::DlgFilter({ "dsk", "flp", "im?", "img", "*fd?" }) % tr("Surface images") % util::DlgFilter({ "86f" }, true));
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case MediaType::Zip:
|
case MediaType::RDisk:
|
||||||
for (int i = 0; i < zipTypes.size(); ++i) {
|
for (int i = 0; i < rdiskTypes.size(); ++i) {
|
||||||
Models::AddEntry(model, tr(zipTypes[i].toUtf8().data()), i);
|
Models::AddEntry(model, tr(rdiskTypes[i].toUtf8().data()), i);
|
||||||
}
|
}
|
||||||
ui->fileField->setFilter(tr("ZIP images") % util::DlgFilter({ "im?", "img", "zdi" }, true));
|
ui->fileField->setFilter(tr("Removable disk images") % util::DlgFilter({ "im?", "img", "rdi", "zdi" }, true));
|
||||||
break;
|
break;
|
||||||
case MediaType::Mo:
|
case MediaType::Mo:
|
||||||
for (int i = 0; i < moTypes.size(); ++i) {
|
for (int i = 0; i < moTypes.size(); ++i) {
|
||||||
@@ -218,13 +218,13 @@ NewFloppyDialog::onCreate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MediaType::Zip:
|
case MediaType::RDisk:
|
||||||
{
|
{
|
||||||
fileType = fi.suffix().toLower() == QStringLiteral("zdi") ? FileType::Zdi : FileType::Img;
|
fileType = fi.suffix().toLower() == QStringLiteral("zdi") ? FileType::Zdi : FileType::Img;
|
||||||
|
|
||||||
std::atomic_bool res;
|
std::atomic_bool res;
|
||||||
std::thread t([this, &res, filename, fileType, &progress] {
|
std::thread t([this, &res, filename, fileType, &progress] {
|
||||||
res = createZipSectorImage(filename, disk_sizes[ui->comboBoxSize->currentIndex() + 12], fileType, progress);
|
res = createRDiskSectorImage(filename, disk_sizes[ui->comboBoxSize->currentIndex() + 12], fileType, progress);
|
||||||
});
|
});
|
||||||
progress.exec();
|
progress.exec();
|
||||||
t.join();
|
t.join();
|
||||||
@@ -463,7 +463,7 @@ NewFloppyDialog::createSectorImage(const QString &filename, const disk_size_t &d
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
NewFloppyDialog::createZipSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar)
|
NewFloppyDialog::createRDiskSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar)
|
||||||
{
|
{
|
||||||
uint64_t total_size = 0;
|
uint64_t total_size = 0;
|
||||||
uint32_t total_sectors = 0;
|
uint32_t total_sectors = 0;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class NewFloppyDialog : public QDialog {
|
|||||||
public:
|
public:
|
||||||
enum class MediaType {
|
enum class MediaType {
|
||||||
Floppy,
|
Floppy,
|
||||||
Zip,
|
RDisk,
|
||||||
Mo,
|
Mo,
|
||||||
};
|
};
|
||||||
enum class FileType {
|
enum class FileType {
|
||||||
@@ -42,7 +42,7 @@ private:
|
|||||||
|
|
||||||
bool create86f(const QString &filename, const disk_size_t &disk_size, uint8_t rpm_mode);
|
bool create86f(const QString &filename, const disk_size_t &disk_size, uint8_t rpm_mode);
|
||||||
bool createSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type);
|
bool createSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type);
|
||||||
bool createZipSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar);
|
bool createRDiskSectorImage(const QString &filename, const disk_size_t &disk_size, FileType type, QProgressDialog &pbar);
|
||||||
bool createMoSectorImage(const QString &filename, int8_t disk_size, FileType type, QProgressDialog &pbar);
|
bool createMoSectorImage(const QString &filename, int8_t disk_size, FileType type, QProgressDialog &pbar);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -164,24 +164,24 @@ Settings::Settings(QWidget *parent)
|
|||||||
connect(floppyCdrom, &SettingsFloppyCDROM::cdromChannelChanged, otherRemovable,
|
connect(floppyCdrom, &SettingsFloppyCDROM::cdromChannelChanged, otherRemovable,
|
||||||
&SettingsOtherRemovable::reloadBusChannels_MO);
|
&SettingsOtherRemovable::reloadBusChannels_MO);
|
||||||
connect(floppyCdrom, &SettingsFloppyCDROM::cdromChannelChanged, otherRemovable,
|
connect(floppyCdrom, &SettingsFloppyCDROM::cdromChannelChanged, otherRemovable,
|
||||||
&SettingsOtherRemovable::reloadBusChannels_ZIP);
|
&SettingsOtherRemovable::reloadBusChannels_RDisk);
|
||||||
connect(harddisks, &SettingsHarddisks::driveChannelChanged, floppyCdrom,
|
connect(harddisks, &SettingsHarddisks::driveChannelChanged, floppyCdrom,
|
||||||
&SettingsFloppyCDROM::reloadBusChannels);
|
&SettingsFloppyCDROM::reloadBusChannels);
|
||||||
connect(harddisks, &SettingsHarddisks::driveChannelChanged, otherRemovable,
|
connect(harddisks, &SettingsHarddisks::driveChannelChanged, otherRemovable,
|
||||||
&SettingsOtherRemovable::reloadBusChannels_MO);
|
&SettingsOtherRemovable::reloadBusChannels_MO);
|
||||||
connect(harddisks, &SettingsHarddisks::driveChannelChanged, otherRemovable,
|
connect(harddisks, &SettingsHarddisks::driveChannelChanged, otherRemovable,
|
||||||
&SettingsOtherRemovable::reloadBusChannels_ZIP);
|
&SettingsOtherRemovable::reloadBusChannels_RDisk);
|
||||||
connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, harddisks,
|
connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, harddisks,
|
||||||
&SettingsHarddisks::reloadBusChannels);
|
&SettingsHarddisks::reloadBusChannels);
|
||||||
connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, floppyCdrom,
|
connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, floppyCdrom,
|
||||||
&SettingsFloppyCDROM::reloadBusChannels);
|
&SettingsFloppyCDROM::reloadBusChannels);
|
||||||
connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, otherRemovable,
|
connect(otherRemovable, &SettingsOtherRemovable::moChannelChanged, otherRemovable,
|
||||||
&SettingsOtherRemovable::reloadBusChannels_ZIP);
|
&SettingsOtherRemovable::reloadBusChannels_RDisk);
|
||||||
connect(otherRemovable, &SettingsOtherRemovable::zipChannelChanged, harddisks,
|
connect(otherRemovable, &SettingsOtherRemovable::rdiskChannelChanged, harddisks,
|
||||||
&SettingsHarddisks::reloadBusChannels);
|
&SettingsHarddisks::reloadBusChannels);
|
||||||
connect(otherRemovable, &SettingsOtherRemovable::zipChannelChanged, floppyCdrom,
|
connect(otherRemovable, &SettingsOtherRemovable::rdiskChannelChanged, floppyCdrom,
|
||||||
&SettingsFloppyCDROM::reloadBusChannels);
|
&SettingsFloppyCDROM::reloadBusChannels);
|
||||||
connect(otherRemovable, &SettingsOtherRemovable::zipChannelChanged, otherRemovable,
|
connect(otherRemovable, &SettingsOtherRemovable::rdiskChannelChanged, otherRemovable,
|
||||||
&SettingsOtherRemovable::reloadBusChannels_MO);
|
&SettingsOtherRemovable::reloadBusChannels_MO);
|
||||||
|
|
||||||
connect(ui->listView->selectionModel(), &QItemSelectionModel::currentChanged, this,
|
connect(ui->listView->selectionModel(), &QItemSelectionModel::currentChanged, this,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#define DEV_HDD 0x01
|
#define DEV_HDD 0x01
|
||||||
#define DEV_CDROM 0x02
|
#define DEV_CDROM 0x02
|
||||||
#define DEV_ZIP 0x04
|
#define DEV_RDISK 0x04
|
||||||
#define DEV_MO 0x08
|
#define DEV_MO 0x08
|
||||||
|
|
||||||
#define BUS_MFM 0
|
#define BUS_MFM 0
|
||||||
@@ -44,7 +44,7 @@ public:
|
|||||||
int scsi_bus_full();
|
int scsi_bus_full();
|
||||||
|
|
||||||
/* Set: 0 = Clear the device from the tracking, 1 = Set the device on the tracking.
|
/* Set: 0 = Clear the device from the tracking, 1 = Set the device on the tracking.
|
||||||
Device type: 1 = Hard Disk, 2 = CD-ROM, 4 = ZIP, 8 = Magneto-Optical.
|
Device type: 1 = Hard Disk, 2 = CD-ROM, 4 = Removable disk, 8 = Magneto-Optical.
|
||||||
Bus: 0 = MFM, 1 = ESDI, 2 = XTA, 3 = IDE, 4 = SCSI. */
|
Bus: 0 = MFM, 1 = ESDI, 2 = XTA, 3 = IDE, 4 = SCSI. */
|
||||||
void device_track(int set, uint8_t dev_type, int bus, int channel);
|
void device_track(int set, uint8_t dev_type, int bus, int channel);
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ extern "C" {
|
|||||||
#include <86box/timer.h>
|
#include <86box/timer.h>
|
||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
@@ -40,6 +40,13 @@ moDriveTypeName(int i)
|
|||||||
mo_drive_types[i].revision);
|
mo_drive_types[i].revision);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QString
|
||||||
|
rdiskDriveTypeName(int i)
|
||||||
|
{
|
||||||
|
return QString("%1 %2 %3").arg(rdisk_drive_types[i].vendor, rdisk_drive_types[i].model,
|
||||||
|
rdisk_drive_types[i].revision);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel)
|
setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel)
|
||||||
{
|
{
|
||||||
@@ -65,27 +72,16 @@ setMOBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setMOType(QAbstractItemModel *model, const QModelIndex &idx, uint32_t type)
|
setRDiskBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel)
|
||||||
{
|
|
||||||
auto i = idx.siblingAtColumn(1);
|
|
||||||
if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == MO_BUS_DISABLED)
|
|
||||||
model->setData(i, QCoreApplication::translate("", "None"));
|
|
||||||
else
|
|
||||||
model->setData(i, moDriveTypeName(type));
|
|
||||||
model->setData(i, type, Qt::UserRole);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
setZIPBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_t channel)
|
|
||||||
{
|
{
|
||||||
QIcon icon;
|
QIcon icon;
|
||||||
switch (bus) {
|
switch (bus) {
|
||||||
case ZIP_BUS_DISABLED:
|
case RDISK_BUS_DISABLED:
|
||||||
icon = QIcon(":/settings/qt/icons/zip_disabled.ico");
|
icon = QIcon(":/settings/qt/icons/rdisk_disabled.ico");
|
||||||
break;
|
break;
|
||||||
case ZIP_BUS_ATAPI:
|
case RDISK_BUS_ATAPI:
|
||||||
case ZIP_BUS_SCSI:
|
case RDISK_BUS_SCSI:
|
||||||
icon = QIcon(":/settings/qt/icons/zip.ico");
|
icon = QIcon(":/settings/qt/icons/rdisk.ico");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -100,11 +96,25 @@ setZIPBus(QAbstractItemModel *model, const QModelIndex &idx, uint8_t bus, uint8_
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setZIPType(QAbstractItemModel *model, const QModelIndex &idx, bool is250)
|
setMOType(QAbstractItemModel *model, const QModelIndex &idx, uint32_t type)
|
||||||
{
|
{
|
||||||
auto i = idx.siblingAtColumn(1);
|
auto i = idx.siblingAtColumn(1);
|
||||||
model->setData(i, is250 ? "ZIP 250" : "ZIP 100");
|
if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == MO_BUS_DISABLED)
|
||||||
model->setData(i, is250, Qt::UserRole);
|
model->setData(i, QCoreApplication::translate("", "None"));
|
||||||
|
else
|
||||||
|
model->setData(i, moDriveTypeName(type));
|
||||||
|
model->setData(i, type, Qt::UserRole);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
setRDiskType(QAbstractItemModel *model, const QModelIndex &idx, uint32_t type)
|
||||||
|
{
|
||||||
|
auto i = idx.siblingAtColumn(1);
|
||||||
|
if (idx.siblingAtColumn(0).data(Qt::UserRole).toUInt() == RDISK_BUS_DISABLED)
|
||||||
|
model->setData(i, QCoreApplication::translate("", "None"));
|
||||||
|
else
|
||||||
|
model->setData(i, rdiskDriveTypeName(type));
|
||||||
|
model->setData(i, type, Qt::UserRole);
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent)
|
SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent)
|
||||||
@@ -137,25 +147,30 @@ SettingsOtherRemovable::SettingsOtherRemovable(QWidget *parent)
|
|||||||
connect(ui->tableViewMO->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onMORowChanged);
|
connect(ui->tableViewMO->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onMORowChanged);
|
||||||
ui->tableViewMO->setCurrentIndex(model->index(0, 0));
|
ui->tableViewMO->setCurrentIndex(model->index(0, 0));
|
||||||
|
|
||||||
Harddrives::populateRemovableBuses(ui->comboBoxZIPBus->model());
|
Harddrives::populateRemovableBuses(ui->comboBoxRDiskBus->model());
|
||||||
ui->comboBoxZIPBus->model()->removeRows(3, ui->comboBoxZIPBus->model()->rowCount() - 3);
|
if ((ui->comboBoxRDiskBus->model()->rowCount() - 3) > 0)
|
||||||
|
ui->comboBoxRDiskBus->model()->removeRows(3, ui->comboBoxRDiskBus->model()->rowCount() - 3);
|
||||||
|
model = ui->comboBoxRDiskType->model();
|
||||||
|
for (uint32_t i = 0; i < KNOWN_RDISK_DRIVE_TYPES; i++) {
|
||||||
|
Models::AddEntry(model, rdiskDriveTypeName(i), i);
|
||||||
|
}
|
||||||
|
|
||||||
model = new QStandardItemModel(0, 2, this);
|
model = new QStandardItemModel(0, 2, this);
|
||||||
ui->tableViewZIP->setModel(model);
|
ui->tableViewRDisk->setModel(model);
|
||||||
model->setHeaderData(0, Qt::Horizontal, tr("Bus"));
|
model->setHeaderData(0, Qt::Horizontal, tr("Bus"));
|
||||||
model->setHeaderData(1, Qt::Horizontal, tr("Type"));
|
model->setHeaderData(1, Qt::Horizontal, tr("Type"));
|
||||||
model->insertRows(0, ZIP_NUM);
|
model->insertRows(0, RDISK_NUM);
|
||||||
for (int i = 0; i < ZIP_NUM; i++) {
|
for (int i = 0; i < RDISK_NUM; i++) {
|
||||||
auto idx = model->index(i, 0);
|
auto idx = model->index(i, 0);
|
||||||
setZIPBus(model, idx, zip_drives[i].bus_type, zip_drives[i].res);
|
setRDiskBus(model, idx, rdisk_drives[i].bus_type, rdisk_drives[i].res);
|
||||||
setZIPType(model, idx, zip_drives[i].is_250 > 0);
|
setRDiskType(model, idx.siblingAtColumn(1), rdisk_drives[i].type);
|
||||||
Harddrives::busTrackClass->device_track(1, DEV_ZIP, zip_drives[i].bus_type, zip_drives[i].bus_type == ZIP_BUS_ATAPI ? zip_drives[i].ide_channel : zip_drives[i].scsi_device_id);
|
Harddrives::busTrackClass->device_track(1, DEV_MO, rdisk_drives[i].bus_type, rdisk_drives[i].bus_type == RDISK_BUS_ATAPI ? rdisk_drives[i].ide_channel : rdisk_drives[i].scsi_device_id);
|
||||||
}
|
}
|
||||||
ui->tableViewZIP->resizeColumnsToContents();
|
ui->tableViewRDisk->resizeColumnsToContents();
|
||||||
ui->tableViewZIP->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
|
ui->tableViewRDisk->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
|
||||||
|
|
||||||
connect(ui->tableViewZIP->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onZIPRowChanged);
|
connect(ui->tableViewRDisk->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &SettingsOtherRemovable::onRDiskRowChanged);
|
||||||
ui->tableViewZIP->setCurrentIndex(model->index(0, 0));
|
ui->tableViewRDisk->setCurrentIndex(model->index(0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
SettingsOtherRemovable::~SettingsOtherRemovable()
|
SettingsOtherRemovable::~SettingsOtherRemovable()
|
||||||
@@ -175,13 +190,13 @@ SettingsOtherRemovable::save()
|
|||||||
mo_drives[i].type = model->index(i, 1).data(Qt::UserRole).toUInt();
|
mo_drives[i].type = model->index(i, 1).data(Qt::UserRole).toUInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
model = ui->tableViewZIP->model();
|
model = ui->tableViewRDisk->model();
|
||||||
for (uint8_t i = 0; i < ZIP_NUM; i++) {
|
for (uint8_t i = 0; i < RDISK_NUM; i++) {
|
||||||
zip_drives[i].fp = NULL;
|
rdisk_drives[i].fp = NULL;
|
||||||
zip_drives[i].priv = NULL;
|
rdisk_drives[i].priv = NULL;
|
||||||
zip_drives[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt();
|
rdisk_drives[i].bus_type = model->index(i, 0).data(Qt::UserRole).toUInt();
|
||||||
zip_drives[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt();
|
rdisk_drives[i].res = model->index(i, 0).data(Qt::UserRole + 1).toUInt();
|
||||||
zip_drives[i].is_250 = model->index(i, 1).data(Qt::UserRole).toBool() ? 1 : 0;
|
rdisk_drives[i].type = model->index(i, 1).data(Qt::UserRole).toUInt();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,24 +222,24 @@ SettingsOtherRemovable::onMORowChanged(const QModelIndex ¤t)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SettingsOtherRemovable::onZIPRowChanged(const QModelIndex ¤t)
|
SettingsOtherRemovable::onRDiskRowChanged(const QModelIndex ¤t)
|
||||||
{
|
{
|
||||||
uint8_t bus = current.siblingAtColumn(0).data(Qt::UserRole).toUInt();
|
uint8_t bus = current.siblingAtColumn(0).data(Qt::UserRole).toUInt();
|
||||||
uint8_t channel = current.siblingAtColumn(0).data(Qt::UserRole + 1).toUInt();
|
uint8_t channel = current.siblingAtColumn(0).data(Qt::UserRole + 1).toUInt();
|
||||||
bool is250 = current.siblingAtColumn(1).data(Qt::UserRole).toBool();
|
uint8_t type = current.siblingAtColumn(1).data(Qt::UserRole).toUInt();
|
||||||
|
|
||||||
ui->comboBoxZIPBus->setCurrentIndex(-1);
|
ui->comboBoxRDiskBus->setCurrentIndex(-1);
|
||||||
const auto *model = ui->comboBoxZIPBus->model();
|
const auto *model = ui->comboBoxRDiskBus->model();
|
||||||
auto match = model->match(model->index(0, 0), Qt::UserRole, bus);
|
auto match = model->match(model->index(0, 0), Qt::UserRole, bus);
|
||||||
if (!match.isEmpty())
|
if (!match.isEmpty())
|
||||||
ui->comboBoxZIPBus->setCurrentIndex(match.first().row());
|
ui->comboBoxRDiskBus->setCurrentIndex(match.first().row());
|
||||||
|
|
||||||
model = ui->comboBoxZIPChannel->model();
|
model = ui->comboBoxRDiskChannel->model();
|
||||||
match = model->match(model->index(0, 0), Qt::UserRole, channel);
|
match = model->match(model->index(0, 0), Qt::UserRole, channel);
|
||||||
if (!match.isEmpty())
|
if (!match.isEmpty())
|
||||||
ui->comboBoxZIPChannel->setCurrentIndex(match.first().row());
|
ui->comboBoxRDiskChannel->setCurrentIndex(match.first().row());
|
||||||
ui->checkBoxZIP250->setChecked(is250);
|
ui->comboBoxRDiskType->setCurrentIndex(type);
|
||||||
enableCurrentlySelectedChannel_ZIP();
|
enableCurrentlySelectedChannel_RDisk();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -236,6 +251,15 @@ SettingsOtherRemovable::reloadBusChannels_MO() {
|
|||||||
enableCurrentlySelectedChannel_MO();
|
enableCurrentlySelectedChannel_MO();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SettingsOtherRemovable::reloadBusChannels_RDisk() {
|
||||||
|
auto selected = ui->comboBoxRDiskChannel->currentIndex();
|
||||||
|
Harddrives::populateBusChannels(ui->comboBoxRDiskChannel->model(),
|
||||||
|
ui->comboBoxRDiskBus->currentData().toInt(), Harddrives::busTrackClass);
|
||||||
|
ui->comboBoxRDiskChannel->setCurrentIndex(selected);
|
||||||
|
enableCurrentlySelectedChannel_RDisk();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SettingsOtherRemovable::on_comboBoxMOBus_currentIndexChanged(int index)
|
SettingsOtherRemovable::on_comboBoxMOBus_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
@@ -248,6 +272,18 @@ SettingsOtherRemovable::on_comboBoxMOBus_currentIndexChanged(int index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SettingsOtherRemovable::on_comboBoxRDiskBus_currentIndexChanged(int index)
|
||||||
|
{
|
||||||
|
if (index >= 0) {
|
||||||
|
int bus = ui->comboBoxRDiskBus->currentData().toInt();
|
||||||
|
bool enabled = (bus != RDISK_BUS_DISABLED);
|
||||||
|
ui->comboBoxRDiskChannel->setEnabled(enabled);
|
||||||
|
ui->comboBoxRDiskType->setEnabled(enabled);
|
||||||
|
Harddrives::populateBusChannels(ui->comboBoxRDiskChannel->model(), bus, Harddrives::busTrackClass);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SettingsOtherRemovable::on_comboBoxMOBus_activated(int)
|
SettingsOtherRemovable::on_comboBoxMOBus_activated(int)
|
||||||
{
|
{
|
||||||
@@ -255,9 +291,9 @@ SettingsOtherRemovable::on_comboBoxMOBus_activated(int)
|
|||||||
Harddrives::busTrackClass->device_track(0, DEV_MO, ui->tableViewMO->model()->data(i,
|
Harddrives::busTrackClass->device_track(0, DEV_MO, ui->tableViewMO->model()->data(i,
|
||||||
Qt::UserRole).toInt(), ui->tableViewMO->model()->data(i,
|
Qt::UserRole).toInt(), ui->tableViewMO->model()->data(i,
|
||||||
Qt::UserRole + 1).toInt());
|
Qt::UserRole + 1).toInt());
|
||||||
ui->comboBoxMOChannel->setCurrentIndex(ui->comboBoxMOBus->currentData().toUInt() ==
|
ui->comboBoxMOChannel->setCurrentIndex(ui->comboBoxMOBus->currentData().toUInt() == MO_BUS_ATAPI ?
|
||||||
MO_BUS_ATAPI ? Harddrives::busTrackClass->next_free_ide_channel() :
|
Harddrives::busTrackClass->next_free_ide_channel() :
|
||||||
Harddrives::busTrackClass->next_free_scsi_id());
|
Harddrives::busTrackClass->next_free_scsi_id());
|
||||||
ui->tableViewMO->model()->data(i, Qt::UserRole + 1);
|
ui->tableViewMO->model()->data(i, Qt::UserRole + 1);
|
||||||
setMOBus(ui->tableViewMO->model(),
|
setMOBus(ui->tableViewMO->model(),
|
||||||
ui->tableViewMO->selectionModel()->currentIndex(),
|
ui->tableViewMO->selectionModel()->currentIndex(),
|
||||||
@@ -274,6 +310,32 @@ SettingsOtherRemovable::on_comboBoxMOBus_activated(int)
|
|||||||
emit moChannelChanged();
|
emit moChannelChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SettingsOtherRemovable::on_comboBoxRDiskBus_activated(int)
|
||||||
|
{
|
||||||
|
auto i = ui->tableViewRDisk->selectionModel()->currentIndex().siblingAtColumn(0);
|
||||||
|
Harddrives::busTrackClass->device_track(0, DEV_RDISK, ui->tableViewRDisk->model()->data(i,
|
||||||
|
Qt::UserRole).toInt(), ui->tableViewRDisk->model()->data(i,
|
||||||
|
Qt::UserRole + 1).toInt());
|
||||||
|
ui->comboBoxRDiskChannel->setCurrentIndex(ui->comboBoxRDiskBus->currentData().toUInt() == RDISK_BUS_ATAPI ?
|
||||||
|
Harddrives::busTrackClass->next_free_ide_channel() :
|
||||||
|
Harddrives::busTrackClass->next_free_scsi_id());
|
||||||
|
ui->tableViewRDisk->model()->data(i, Qt::UserRole + 1);
|
||||||
|
setRDiskBus(ui->tableViewRDisk->model(),
|
||||||
|
ui->tableViewRDisk->selectionModel()->currentIndex(),
|
||||||
|
ui->comboBoxRDiskBus->currentData().toUInt(),
|
||||||
|
ui->comboBoxRDiskChannel->currentData().toUInt());
|
||||||
|
setRDiskType(ui->tableViewRDisk->model(),
|
||||||
|
ui->tableViewRDisk->selectionModel()->currentIndex(),
|
||||||
|
ui->comboBoxRDiskType->currentData().toUInt());
|
||||||
|
ui->tableViewRDisk->resizeColumnsToContents();
|
||||||
|
ui->tableViewRDisk->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
|
||||||
|
Harddrives::busTrackClass->device_track(1, DEV_RDISK, ui->tableViewRDisk->model()->data(i,
|
||||||
|
Qt::UserRole).toInt(), ui->tableViewRDisk->model()->data(i,
|
||||||
|
Qt::UserRole + 1).toInt());
|
||||||
|
emit rdiskChannelChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SettingsOtherRemovable::enableCurrentlySelectedChannel_MO()
|
SettingsOtherRemovable::enableCurrentlySelectedChannel_MO()
|
||||||
{
|
{
|
||||||
@@ -284,6 +346,15 @@ SettingsOtherRemovable::enableCurrentlySelectedChannel_MO()
|
|||||||
item->setEnabled(true);
|
item->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SettingsOtherRemovable::enableCurrentlySelectedChannel_RDisk()
|
||||||
|
{
|
||||||
|
const auto *item_model = qobject_cast<QStandardItemModel*>(ui->comboBoxRDiskChannel->model());
|
||||||
|
const auto index = ui->comboBoxRDiskChannel->currentIndex();
|
||||||
|
auto *item = item_model->item(index);
|
||||||
|
if (item)
|
||||||
|
item->setEnabled(true);
|
||||||
|
}
|
||||||
void
|
void
|
||||||
SettingsOtherRemovable::on_comboBoxMOChannel_activated(int)
|
SettingsOtherRemovable::on_comboBoxMOChannel_activated(int)
|
||||||
{
|
{
|
||||||
@@ -301,6 +372,23 @@ SettingsOtherRemovable::on_comboBoxMOChannel_activated(int)
|
|||||||
emit moChannelChanged();
|
emit moChannelChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SettingsOtherRemovable::on_comboBoxRDiskChannel_activated(int)
|
||||||
|
{
|
||||||
|
auto i = ui->tableViewRDisk->selectionModel()->currentIndex().siblingAtColumn(0);
|
||||||
|
Harddrives::busTrackClass->device_track(0, DEV_RDISK, ui->tableViewRDisk->model()->data(i,
|
||||||
|
Qt::UserRole).toInt(), ui->tableViewRDisk->model()->data(i,
|
||||||
|
Qt::UserRole + 1).toInt());
|
||||||
|
setRDiskBus(ui->tableViewRDisk->model(),
|
||||||
|
ui->tableViewRDisk->selectionModel()->currentIndex(),
|
||||||
|
ui->comboBoxRDiskBus->currentData().toUInt(),
|
||||||
|
ui->comboBoxRDiskChannel->currentData().toUInt());
|
||||||
|
Harddrives::busTrackClass->device_track(1, DEV_RDISK, ui->tableViewRDisk->model()->data(i,
|
||||||
|
Qt::UserRole).toInt(),
|
||||||
|
ui->tableViewRDisk->model()->data(i, Qt::UserRole + 1).toInt());
|
||||||
|
emit rdiskChannelChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SettingsOtherRemovable::on_comboBoxMOType_activated(int)
|
SettingsOtherRemovable::on_comboBoxMOType_activated(int)
|
||||||
{
|
{
|
||||||
@@ -312,77 +400,11 @@ SettingsOtherRemovable::on_comboBoxMOType_activated(int)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SettingsOtherRemovable::reloadBusChannels_ZIP() {
|
SettingsOtherRemovable::on_comboBoxRDiskType_activated(int)
|
||||||
auto selected = ui->comboBoxZIPChannel->currentIndex();
|
|
||||||
Harddrives::populateBusChannels(ui->comboBoxZIPChannel->model(),
|
|
||||||
ui->comboBoxZIPBus->currentData().toInt(), Harddrives::busTrackClass);
|
|
||||||
ui->comboBoxZIPChannel->setCurrentIndex(selected);
|
|
||||||
enableCurrentlySelectedChannel_ZIP();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SettingsOtherRemovable::on_comboBoxZIPBus_currentIndexChanged(int index)
|
|
||||||
{
|
{
|
||||||
if (index >= 0) {
|
setRDiskType(ui->tableViewRDisk->model(),
|
||||||
int bus = ui->comboBoxZIPBus->currentData().toInt();
|
ui->tableViewRDisk->selectionModel()->currentIndex(),
|
||||||
bool enabled = (bus != ZIP_BUS_DISABLED);
|
ui->comboBoxRDiskType->currentData().toUInt());
|
||||||
ui->comboBoxZIPChannel->setEnabled(enabled);
|
ui->tableViewRDisk->resizeColumnsToContents();
|
||||||
ui->checkBoxZIP250->setEnabled(enabled);
|
ui->tableViewRDisk->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
|
||||||
Harddrives::populateBusChannels(ui->comboBoxZIPChannel->model(), bus, Harddrives::busTrackClass);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SettingsOtherRemovable::on_comboBoxZIPBus_activated(int)
|
|
||||||
{
|
|
||||||
auto i = ui->tableViewZIP->selectionModel()->currentIndex().siblingAtColumn(0);
|
|
||||||
Harddrives::busTrackClass->device_track(0, DEV_ZIP, ui->tableViewZIP->model()->data(i,
|
|
||||||
Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i,
|
|
||||||
Qt::UserRole + 1).toInt());
|
|
||||||
ui->comboBoxZIPChannel->setCurrentIndex(ui->comboBoxZIPBus->currentData().toUInt() == ZIP_BUS_ATAPI ?
|
|
||||||
Harddrives::busTrackClass->next_free_ide_channel() :
|
|
||||||
Harddrives::busTrackClass->next_free_scsi_id());
|
|
||||||
setZIPBus(ui->tableViewZIP->model(),
|
|
||||||
ui->tableViewZIP->selectionModel()->currentIndex(),
|
|
||||||
ui->comboBoxZIPBus->currentData().toUInt(),
|
|
||||||
ui->comboBoxZIPChannel->currentData().toUInt());
|
|
||||||
Harddrives::busTrackClass->device_track(1, DEV_ZIP, ui->tableViewZIP->model()->data(i,
|
|
||||||
Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i,
|
|
||||||
Qt::UserRole + 1).toInt());
|
|
||||||
emit zipChannelChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SettingsOtherRemovable::enableCurrentlySelectedChannel_ZIP()
|
|
||||||
{
|
|
||||||
const auto *item_model = qobject_cast<QStandardItemModel*>(ui->comboBoxZIPChannel->model());
|
|
||||||
const auto index = ui->comboBoxZIPChannel->currentIndex();
|
|
||||||
auto *item = item_model->item(index);
|
|
||||||
if (item)
|
|
||||||
item->setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SettingsOtherRemovable::on_comboBoxZIPChannel_activated(int)
|
|
||||||
{
|
|
||||||
auto i = ui->tableViewZIP->selectionModel()->currentIndex().siblingAtColumn(0);
|
|
||||||
Harddrives::busTrackClass->device_track(0, DEV_ZIP, ui->tableViewZIP->model()->data(i,
|
|
||||||
Qt::UserRole).toInt(), ui->tableViewZIP->model()->data(i,
|
|
||||||
Qt::UserRole + 1).toInt());
|
|
||||||
setZIPBus(ui->tableViewZIP->model(),
|
|
||||||
ui->tableViewZIP->selectionModel()->currentIndex(),
|
|
||||||
ui->comboBoxZIPBus->currentData().toUInt(),
|
|
||||||
ui->comboBoxZIPChannel->currentData().toUInt());
|
|
||||||
Harddrives::busTrackClass->device_track(1, DEV_ZIP, ui->tableViewZIP->model()->data(i,
|
|
||||||
Qt::UserRole).toInt(),
|
|
||||||
ui->tableViewZIP->model()->data(i, Qt::UserRole + 1).toInt());
|
|
||||||
emit zipChannelChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SettingsOtherRemovable::on_checkBoxZIP250_stateChanged(int state)
|
|
||||||
{
|
|
||||||
setZIPType(ui->tableViewZIP->model(),
|
|
||||||
ui->tableViewZIP->selectionModel()->currentIndex(),
|
|
||||||
state == Qt::Checked);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,13 +14,13 @@ public:
|
|||||||
explicit SettingsOtherRemovable(QWidget *parent = nullptr);
|
explicit SettingsOtherRemovable(QWidget *parent = nullptr);
|
||||||
~SettingsOtherRemovable();
|
~SettingsOtherRemovable();
|
||||||
void reloadBusChannels_MO();
|
void reloadBusChannels_MO();
|
||||||
void reloadBusChannels_ZIP();
|
void reloadBusChannels_RDisk();
|
||||||
|
|
||||||
void save();
|
void save();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void moChannelChanged();
|
void moChannelChanged();
|
||||||
void zipChannelChanged();
|
void rdiskChannelChanged();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onMORowChanged(const QModelIndex ¤t);
|
void onMORowChanged(const QModelIndex ¤t);
|
||||||
@@ -29,16 +29,16 @@ private slots:
|
|||||||
void on_comboBoxMOChannel_activated(int index);
|
void on_comboBoxMOChannel_activated(int index);
|
||||||
void on_comboBoxMOType_activated(int index);
|
void on_comboBoxMOType_activated(int index);
|
||||||
|
|
||||||
void onZIPRowChanged(const QModelIndex ¤t);
|
void onRDiskRowChanged(const QModelIndex ¤t);
|
||||||
void on_comboBoxZIPBus_currentIndexChanged(int index);
|
void on_comboBoxRDiskBus_currentIndexChanged(int index);
|
||||||
void on_comboBoxZIPBus_activated(int index);
|
void on_comboBoxRDiskBus_activated(int index);
|
||||||
void on_comboBoxZIPChannel_activated(int index);
|
void on_comboBoxRDiskChannel_activated(int index);
|
||||||
void on_checkBoxZIP250_stateChanged(int arg1);
|
void on_comboBoxRDiskType_activated(int index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::SettingsOtherRemovable *ui;
|
Ui::SettingsOtherRemovable *ui;
|
||||||
void enableCurrentlySelectedChannel_MO();
|
void enableCurrentlySelectedChannel_MO();
|
||||||
void enableCurrentlySelectedChannel_ZIP();
|
void enableCurrentlySelectedChannel_RDisk();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QT_SETTINGSOTHERREMOVABLE_HPP
|
#endif // QT_SETTINGSOTHERREMOVABLE_HPP
|
||||||
|
|||||||
@@ -113,14 +113,14 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="labelZIP">
|
<widget class="QLabel" name="labelRDisk">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>ZIP drives:</string>
|
<string>Removable disk drives:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTableView" name="tableViewZIP">
|
<widget class="QTableView" name="tableViewRDisk">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||||
<horstretch>0</horstretch>
|
<horstretch>0</horstretch>
|
||||||
@@ -151,40 +151,47 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="zipControls" native="true">
|
<widget class="QWidget" name="rdiskControls" native="true">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="labelZIPBus">
|
<widget class="QLabel" name="labelRDiskBus">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Bus:</string>
|
<string>Bus:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="comboBoxZIPBus">
|
<widget class="QComboBox" name="comboBoxRDiskBus">
|
||||||
<property name="maxVisibleItems">
|
<property name="maxVisibleItems">
|
||||||
<number>30</number>
|
<number>30</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="labelZIPChannel">
|
<widget class="QLabel" name="labelRDiskChannel">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Channel:</string>
|
<string>Channel:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="comboBoxZIPChannel">
|
<widget class="QComboBox" name="comboBoxRDiskChannel">
|
||||||
<property name="maxVisibleItems">
|
<property name="maxVisibleItems">
|
||||||
<number>30</number>
|
<number>30</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item row="1" column="0">
|
||||||
<widget class="QCheckBox" name="checkBoxZIP250">
|
<widget class="QLabel" name="labelRDiskType">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>ZIP 250</string>
|
<string>Type:</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" colspan="3">
|
||||||
|
<widget class="QComboBox" name="comboBoxRDiskType">
|
||||||
|
<property name="maxVisibleItems">
|
||||||
|
<number>30</number>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ extern "C" {
|
|||||||
#include <86box/cartridge.h>
|
#include <86box/cartridge.h>
|
||||||
#include <86box/cassette.h>
|
#include <86box/cassette.h>
|
||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/hdd.h>
|
#include <86box/hdd.h>
|
||||||
#include <86box/thread.h>
|
#include <86box/thread.h>
|
||||||
@@ -278,8 +278,8 @@ ui_sb_update_icon_wp(int tag, int state)
|
|||||||
case SB_FLOPPY:
|
case SB_FLOPPY:
|
||||||
machine_status.fdd[item].write_prot = state > 0 ? true : false;
|
machine_status.fdd[item].write_prot = state > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_ZIP:
|
case SB_RDISK:
|
||||||
machine_status.zip[item].write_prot = state > 0 ? true : false;
|
machine_status.rdisk[item].write_prot = state > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_MO:
|
case SB_MO:
|
||||||
machine_status.mo[item].write_prot = state > 0 ? true : false;
|
machine_status.mo[item].write_prot = state > 0 ? true : false;
|
||||||
@@ -312,8 +312,8 @@ ui_sb_update_icon_state(int tag, int state)
|
|||||||
case SB_CDROM:
|
case SB_CDROM:
|
||||||
machine_status.cdrom[item].empty = state > 0 ? true : false;
|
machine_status.cdrom[item].empty = state > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_ZIP:
|
case SB_RDISK:
|
||||||
machine_status.zip[item].empty = state > 0 ? true : false;
|
machine_status.rdisk[item].empty = state > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_MO:
|
case SB_MO:
|
||||||
machine_status.mo[item].empty = state > 0 ? true : false;
|
machine_status.mo[item].empty = state > 0 ? true : false;
|
||||||
@@ -350,8 +350,8 @@ ui_sb_update_icon(int tag, int active)
|
|||||||
case SB_CDROM:
|
case SB_CDROM:
|
||||||
machine_status.cdrom[item].active = active > 0 ? true : false;
|
machine_status.cdrom[item].active = active > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_ZIP:
|
case SB_RDISK:
|
||||||
machine_status.zip[item].active = active > 0 ? true : false;
|
machine_status.rdisk[item].active = active > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_MO:
|
case SB_MO:
|
||||||
machine_status.mo[item].active = active > 0 ? true : false;
|
machine_status.mo[item].active = active > 0 ? true : false;
|
||||||
@@ -386,8 +386,8 @@ ui_sb_update_icon_write(int tag, int write)
|
|||||||
case SB_CDROM:
|
case SB_CDROM:
|
||||||
machine_status.cdrom[item].write_active = write > 0 ? true : false;
|
machine_status.cdrom[item].write_active = write > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_ZIP:
|
case SB_RDISK:
|
||||||
machine_status.zip[item].write_active = write > 0 ? true : false;
|
machine_status.rdisk[item].write_active = write > 0 ? true : false;
|
||||||
break;
|
break;
|
||||||
case SB_MO:
|
case SB_MO:
|
||||||
machine_status.mo[item].write_active = write > 0 ? true : false;
|
machine_status.mo[item].write_active = write > 0 ? true : false;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<RCC>
|
<RCC>
|
||||||
<qresource prefix="/settings">
|
<qresource prefix="/settings">
|
||||||
<file>qt/icons/browse.ico</file>
|
|
||||||
<file>qt/icons/cartridge.ico</file>
|
<file>qt/icons/cartridge.ico</file>
|
||||||
<file>qt/icons/cartridge_image.ico</file>
|
<file>qt/icons/cartridge_image.ico</file>
|
||||||
<file>qt/icons/cassette_image.ico</file>
|
<file>qt/icons/cassette_image.ico</file>
|
||||||
@@ -13,8 +12,6 @@
|
|||||||
<file>qt/icons/cdrom_folder.ico</file>
|
<file>qt/icons/cdrom_folder.ico</file>
|
||||||
<file>qt/icons/cdrom_host.ico</file>
|
<file>qt/icons/cdrom_host.ico</file>
|
||||||
<file>qt/icons/display.ico</file>
|
<file>qt/icons/display.ico</file>
|
||||||
<file>qt/icons/eject.ico</file>
|
|
||||||
<file>qt/icons/export.ico</file>
|
|
||||||
<file>qt/icons/fast_forward.ico</file>
|
<file>qt/icons/fast_forward.ico</file>
|
||||||
<file>qt/icons/floppy_35.ico</file>
|
<file>qt/icons/floppy_35.ico</file>
|
||||||
<file>qt/icons/floppy_35_image.ico</file>
|
<file>qt/icons/floppy_35_image.ico</file>
|
||||||
@@ -29,10 +26,12 @@
|
|||||||
<file>qt/icons/mo_image.ico</file>
|
<file>qt/icons/mo_image.ico</file>
|
||||||
<file>qt/icons/mo_disabled.ico</file>
|
<file>qt/icons/mo_disabled.ico</file>
|
||||||
<file>qt/icons/network.ico</file>
|
<file>qt/icons/network.ico</file>
|
||||||
<file>qt/icons/new.ico</file>
|
|
||||||
<file>qt/icons/other_peripherals.ico</file>
|
<file>qt/icons/other_peripherals.ico</file>
|
||||||
<file>qt/icons/other_removable_devices.ico</file>
|
<file>qt/icons/other_removable_devices.ico</file>
|
||||||
<file>qt/icons/ports.ico</file>
|
<file>qt/icons/ports.ico</file>
|
||||||
|
<file>qt/icons/rdisk.ico</file>
|
||||||
|
<file>qt/icons/rdisk_image.ico</file>
|
||||||
|
<file>qt/icons/rdisk_disabled.ico</file>
|
||||||
<file>qt/icons/record.ico</file>
|
<file>qt/icons/record.ico</file>
|
||||||
<file>qt/icons/rewind.ico</file>
|
<file>qt/icons/rewind.ico</file>
|
||||||
<file>qt/icons/sound.ico</file>
|
<file>qt/icons/sound.ico</file>
|
||||||
@@ -40,10 +39,11 @@
|
|||||||
<file>qt/icons/superdisk.ico</file>
|
<file>qt/icons/superdisk.ico</file>
|
||||||
<file>qt/icons/superdisk_image.ico</file>
|
<file>qt/icons/superdisk_image.ico</file>
|
||||||
<file>qt/icons/superdisk_disabled.ico</file>
|
<file>qt/icons/superdisk_disabled.ico</file>
|
||||||
<file>qt/icons/zip.ico</file>
|
|
||||||
<file>qt/icons/zip_image.ico</file>
|
|
||||||
<file>qt/icons/zip_disabled.ico</file>
|
|
||||||
<file>qt/icons/active.ico</file>
|
<file>qt/icons/active.ico</file>
|
||||||
|
<file>qt/icons/browse.ico</file>
|
||||||
|
<file>qt/icons/eject.ico</file>
|
||||||
|
<file>qt/icons/export.ico</file>
|
||||||
|
<file>qt/icons/new.ico</file>
|
||||||
<file>qt/icons/write_protected.ico</file>
|
<file>qt/icons/write_protected.ico</file>
|
||||||
<file>qt/icons/write_active.ico</file>
|
<file>qt/icons/write_active.ico</file>
|
||||||
<file>qt/icons/disabled.ico</file>
|
<file>qt/icons/disabled.ico</file>
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
#include <86box/scsi.h>
|
#include <86box/scsi.h>
|
||||||
#include <86box/scsi_device.h>
|
#include <86box/scsi_device.h>
|
||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/scsi_disk.h>
|
#include <86box/scsi_disk.h>
|
||||||
#include <86box/scsi_aha154x.h>
|
#include <86box/scsi_aha154x.h>
|
||||||
#include <86box/scsi_buslogic.h>
|
#include <86box/scsi_buslogic.h>
|
||||||
|
|||||||
@@ -1006,12 +1006,12 @@ monitor_thread(UNUSED(void *param))
|
|||||||
printf(
|
printf(
|
||||||
"fddload <id> <filename> <wp> - Load floppy disk image into drive <id>.\n"
|
"fddload <id> <filename> <wp> - Load floppy disk image into drive <id>.\n"
|
||||||
"cdload <id> <filename> - Load CD-ROM image into drive <id>.\n"
|
"cdload <id> <filename> - Load CD-ROM image into drive <id>.\n"
|
||||||
"zipload <id> <filename> <wp> - Load ZIP image into ZIP drive <id>.\n"
|
"rdiskload <id> <filename> <wp> - Load removable disk image into removable disk drive <id>.\n"
|
||||||
"cartload <id> <filename> <wp> - Load cartridge image into cartridge drive <id>.\n"
|
"cartload <id> <filename> <wp> - Load cartridge image into cartridge drive <id>.\n"
|
||||||
"moload <id> <filename> <wp> - Load MO image into MO drive <id>.\n\n"
|
"moload <id> <filename> <wp> - Load MO image into MO drive <id>.\n\n"
|
||||||
"fddeject <id> - eject disk from floppy drive <id>.\n"
|
"fddeject <id> - eject disk from floppy drive <id>.\n"
|
||||||
"cdeject <id> - eject disc from CD-ROM drive <id>.\n"
|
"cdeject <id> - eject disc from CD-ROM drive <id>.\n"
|
||||||
"zipeject <id> - eject ZIP image from ZIP drive <id>.\n"
|
"rdiskeject <id> - eject removable disk image from removable disk drive <id>.\n"
|
||||||
"carteject <id> - eject cartridge from drive <id>.\n"
|
"carteject <id> - eject cartridge from drive <id>.\n"
|
||||||
"moeject <id> - eject image from MO drive <id>.\n\n"
|
"moeject <id> - eject image from MO drive <id>.\n\n"
|
||||||
"hardreset - hard reset the emulated system.\n"
|
"hardreset - hard reset the emulated system.\n"
|
||||||
@@ -1116,8 +1116,8 @@ monitor_thread(UNUSED(void *param))
|
|||||||
mo_eject(atoi(xargv[1]));
|
mo_eject(atoi(xargv[1]));
|
||||||
} else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) {
|
} else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) {
|
||||||
cartridge_eject(atoi(xargv[1]));
|
cartridge_eject(atoi(xargv[1]));
|
||||||
} else if (strncasecmp(xargv[0], "zipeject", 8) == 0 && cmdargc >= 2) {
|
} else if (strncasecmp(xargv[0], "rdiskeject", 8) == 0 && cmdargc >= 2) {
|
||||||
zip_eject(atoi(xargv[1]));
|
rdisk_eject(atoi(xargv[1]));
|
||||||
} else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) {
|
} else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) {
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
uint8_t wp;
|
uint8_t wp;
|
||||||
@@ -1184,7 +1184,7 @@ monitor_thread(UNUSED(void *param))
|
|||||||
printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn);
|
printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn);
|
||||||
cartridge_mount(id, fn, wp);
|
cartridge_mount(id, fn, wp);
|
||||||
}
|
}
|
||||||
} else if (strncasecmp(xargv[0], "zipload", 7) == 0 && cmdargc >= 4) {
|
} else if (strncasecmp(xargv[0], "rdiskload", 7) == 0 && cmdargc >= 4) {
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
uint8_t wp;
|
uint8_t wp;
|
||||||
bool err = false;
|
bool err = false;
|
||||||
@@ -1203,8 +1203,8 @@ monitor_thread(UNUSED(void *param))
|
|||||||
if (fn[strlen(fn) - 1] == '\''
|
if (fn[strlen(fn) - 1] == '\''
|
||||||
|| fn[strlen(fn) - 1] == '"')
|
|| fn[strlen(fn) - 1] == '"')
|
||||||
fn[strlen(fn) - 1] = '\0';
|
fn[strlen(fn) - 1] = '\0';
|
||||||
printf("Inserting disk into ZIP drive %c: %s\n", id + 'A', fn);
|
printf("Inserting disk into removable disk drive %c: %s\n", id + 'A', fn);
|
||||||
zip_mount(id, fn, wp);
|
rdisk_mount(id, fn, wp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(line);
|
free(line);
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* This file is part of the 86Box distribution.
|
* This file is part of the 86Box distribution.
|
||||||
*
|
*
|
||||||
* Handle the platform-side of CDROM/ZIP/MO drives.
|
* Handle the platform-side of CDROM/RDisk/MO drives.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
#include <86box/cdrom.h>
|
#include <86box/cdrom.h>
|
||||||
#include <86box/cdrom_image.h>
|
#include <86box/cdrom_image.h>
|
||||||
#include <86box/mo.h>
|
#include <86box/mo.h>
|
||||||
#include <86box/zip.h>
|
#include <86box/rdisk.h>
|
||||||
#include <86box/scsi_disk.h>
|
#include <86box/scsi_disk.h>
|
||||||
#include <86box/plat.h>
|
#include <86box/plat.h>
|
||||||
#include <86box/ui.h>
|
#include <86box/ui.h>
|
||||||
@@ -220,58 +220,58 @@ mo_reload(uint8_t id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zip_eject(uint8_t id)
|
rdisk_eject(uint8_t id)
|
||||||
{
|
{
|
||||||
zip_t *dev = (zip_t *) zip_drives[id].priv;
|
rdisk_t *dev = (rdisk_t *) rdisk_drives[id].priv;
|
||||||
|
|
||||||
zip_disk_close(dev);
|
rdisk_disk_close(dev);
|
||||||
if (zip_drives[id].bus_type) {
|
if (rdisk_drives[id].bus_type) {
|
||||||
/* Signal disk change to the emulated machine. */
|
/* Signal disk change to the emulated machine. */
|
||||||
zip_insert(dev);
|
rdisk_insert(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
ui_sb_update_icon_state(SB_ZIP | id, 1);
|
ui_sb_update_icon_state(SB_RDISK | id, 1);
|
||||||
#if 0
|
#if 0
|
||||||
media_menu_update_zip(id);
|
media_menu_update_rdisk(id);
|
||||||
#endif
|
#endif
|
||||||
ui_sb_update_tip(SB_ZIP | id);
|
ui_sb_update_tip(SB_RDISK | id);
|
||||||
config_save();
|
config_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zip_mount(uint8_t id, char *fn, uint8_t wp)
|
rdisk_mount(uint8_t id, char *fn, uint8_t wp)
|
||||||
{
|
{
|
||||||
zip_t *dev = (zip_t *) zip_drives[id].priv;
|
rdisk_t *dev = (rdisk_t *) rdisk_drives[id].priv;
|
||||||
|
|
||||||
zip_disk_close(dev);
|
rdisk_disk_close(dev);
|
||||||
zip_drives[id].read_only = wp;
|
rdisk_drives[id].read_only = wp;
|
||||||
zip_load(dev, fn, 0);
|
rdisk_load(dev, fn, 0);
|
||||||
|
|
||||||
ui_sb_update_icon_state(SB_ZIP | id, strlen(zip_drives[id].image_path) ? 0 : 1);
|
ui_sb_update_icon_state(SB_RDISK | id, strlen(rdisk_drives[id].image_path) ? 0 : 1);
|
||||||
#if 0
|
#if 0
|
||||||
media_menu_update_zip(id);
|
media_menu_update_rdisk(id);
|
||||||
#endif
|
#endif
|
||||||
ui_sb_update_tip(SB_ZIP | id);
|
ui_sb_update_tip(SB_RDISK | id);
|
||||||
|
|
||||||
config_save();
|
config_save();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
zip_reload(uint8_t id)
|
rdisk_reload(uint8_t id)
|
||||||
{
|
{
|
||||||
zip_t *dev = (zip_t *) zip_drives[id].priv;
|
rdisk_t *dev = (rdisk_t *) rdisk_drives[id].priv;
|
||||||
|
|
||||||
zip_disk_reload(dev);
|
rdisk_disk_reload(dev);
|
||||||
if (strlen(zip_drives[id].image_path) == 0) {
|
if (strlen(rdisk_drives[id].image_path) == 0) {
|
||||||
ui_sb_update_icon_state(SB_ZIP | id, 1);
|
ui_sb_update_icon_state(SB_RDISK | id, 1);
|
||||||
} else {
|
} else {
|
||||||
ui_sb_update_icon_state(SB_ZIP | id, 0);
|
ui_sb_update_icon_state(SB_RDISK | id, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
media_menu_update_zip(id);
|
media_menu_update_rdisk(id);
|
||||||
#endif
|
#endif
|
||||||
ui_sb_update_tip(SB_ZIP | id);
|
ui_sb_update_tip(SB_RDISK | id);
|
||||||
|
|
||||||
config_save();
|
config_save();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user