Retooled ZIP emulation into more expansible Removable Disk emulation, ZIP 100 and 250 types remain selectable, alongside the new 86Box (ie. generic) option.

This commit is contained in:
OBattler
2025-07-25 16:30:40 +02:00
parent 733e0e3dca
commit 64e85fdfbc
38 changed files with 1254 additions and 1051 deletions

View File

@@ -1006,12 +1006,12 @@ monitor_thread(UNUSED(void *param))
printf(
"fddload <id> <filename> <wp> - Load floppy disk 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"
"moload <id> <filename> <wp> - Load MO image into MO drive <id>.\n\n"
"fddeject <id> - eject disk from floppy 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"
"moeject <id> - eject image from MO drive <id>.\n\n"
"hardreset - hard reset the emulated system.\n"
@@ -1116,8 +1116,8 @@ monitor_thread(UNUSED(void *param))
mo_eject(atoi(xargv[1]));
} else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) {
cartridge_eject(atoi(xargv[1]));
} else if (strncasecmp(xargv[0], "zipeject", 8) == 0 && cmdargc >= 2) {
zip_eject(atoi(xargv[1]));
} else if (strncasecmp(xargv[0], "rdiskeject", 8) == 0 && cmdargc >= 2) {
rdisk_eject(atoi(xargv[1]));
} else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) {
uint8_t id;
uint8_t wp;
@@ -1184,7 +1184,7 @@ monitor_thread(UNUSED(void *param))
printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn);
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 wp;
bool err = false;
@@ -1203,8 +1203,8 @@ monitor_thread(UNUSED(void *param))
if (fn[strlen(fn) - 1] == '\''
|| fn[strlen(fn) - 1] == '"')
fn[strlen(fn) - 1] = '\0';
printf("Inserting disk into ZIP drive %c: %s\n", id + 'A', fn);
zip_mount(id, fn, wp);
printf("Inserting disk into removable disk drive %c: %s\n", id + 'A', fn);
rdisk_mount(id, fn, wp);
}
}
free(line);

View File

@@ -6,7 +6,7 @@
*
* 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_image.h>
#include <86box/mo.h>
#include <86box/zip.h>
#include <86box/rdisk.h>
#include <86box/scsi_disk.h>
#include <86box/plat.h>
#include <86box/ui.h>
@@ -220,58 +220,58 @@ mo_reload(uint8_t id)
}
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);
if (zip_drives[id].bus_type) {
rdisk_disk_close(dev);
if (rdisk_drives[id].bus_type) {
/* 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
media_menu_update_zip(id);
media_menu_update_rdisk(id);
#endif
ui_sb_update_tip(SB_ZIP | id);
ui_sb_update_tip(SB_RDISK | id);
config_save();
}
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);
zip_drives[id].read_only = wp;
zip_load(dev, fn, 0);
rdisk_disk_close(dev);
rdisk_drives[id].read_only = wp;
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
media_menu_update_zip(id);
media_menu_update_rdisk(id);
#endif
ui_sb_update_tip(SB_ZIP | id);
ui_sb_update_tip(SB_RDISK | id);
config_save();
}
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);
if (strlen(zip_drives[id].image_path) == 0) {
ui_sb_update_icon_state(SB_ZIP | id, 1);
rdisk_disk_reload(dev);
if (strlen(rdisk_drives[id].image_path) == 0) {
ui_sb_update_icon_state(SB_RDISK | id, 1);
} else {
ui_sb_update_icon_state(SB_ZIP | id, 0);
ui_sb_update_icon_state(SB_RDISK | id, 0);
}
#if 0
media_menu_update_zip(id);
media_menu_update_rdisk(id);
#endif
ui_sb_update_tip(SB_ZIP | id);
ui_sb_update_tip(SB_RDISK | id);
config_save();
}