Add dummy UI option to add blank media to Yamaha drive.

This commit is contained in:
2025-09-24 01:42:42 +01:00
parent 49f462c3cf
commit cc570f2a9c
5 changed files with 42 additions and 0 deletions

View File

@@ -3188,6 +3188,15 @@ cdrom_insert(const uint8_t id)
dev->insert(dev->priv);
}
void
cdrom_insert_blank(const uint8_t id)
{
const cdrom_t *dev = &cdrom[id];
if (dev->bus_type && dev->insert_blank)
dev->insert_blank(dev->priv);
}
void
cdrom_exit(const uint8_t id)
{

View File

@@ -344,6 +344,7 @@ typedef struct cdrom {
void (*insert)(void *priv);
void (*close)(void *priv);
void (*insert_blank)(void *priv);
uint32_t (*get_volume)(void *p, int channel);
uint32_t (*get_channel)(void *p, int channel);
@@ -474,6 +475,7 @@ extern void cdrom_exit(const uint8_t id);
extern int cdrom_is_empty(const uint8_t id);
extern void cdrom_eject(const uint8_t id);
extern void cdrom_reload(const uint8_t id);
extern void cdrom_insert_blank(const uint8_t id);
extern void cdrom_compute_ecc_block(cdrom_t *dev, uint8_t *parity, const uint8_t *data,
uint32_t major_count, uint32_t minor_count,

View File

@@ -162,6 +162,9 @@ MediaMenu::refresh(QMenu *parentMenu)
cdromMutePos = menu->children().count();
menu->addAction(QIcon(":/settings/qt/icons/cdrom_mute.ico"), tr("&Mute"), [this, i]() { cdromMute(i); })->setCheckable(true);
menu->addSeparator();
// Can make it only appear if the drive is a Yamaha?
menu->addAction(tr("Add &blank disc"), [this, i]() { cdromInsertBlank(i); })->setCheckable(false);
menu->addSeparator();
menu->addAction(getIconWithIndicator(QIcon(":/settings/qt/icons/cdrom_image.ico"), pixmap_size, QIcon::Normal, Browse), tr("&Image..."), [this, i]() { cdromMount(i, 0, nullptr); })->setCheckable(false);
menu->addAction(getIconWithIndicator(QIcon(":/settings/qt/icons/cdrom_folder.ico"), pixmap_size, QIcon::Normal, Browse), tr("&Folder..."), [this, i]() { cdromMount(i, 1, nullptr); })->setCheckable(false);
menu->addSeparator();
@@ -608,6 +611,21 @@ MediaMenu::cdromMount(int i, int dir, const QString &arg)
cdromMount(i, filename);
}
void
MediaMenu::cdromInsertBlank(int i)
{
// Check if drive is empty
if (!cdrom_is_empty(i)) {
QMessageBox::information(parentWidget, tr("Drive not empty"), tr("The drive must be empty to add a blank disc."));
return;
}
// Add a blank disc
cdrom_insert_blank(i);
ui_sb_update_icon_state(SB_CDROM | i, 1);
}
void
MediaMenu::cdromEject(int i)
{

View File

@@ -45,6 +45,7 @@ public:
void cdromMute(int i);
void cdromMount(int i, int dir, const QString &arg);
void cdromMount(int i, const QString &filename);
void cdromInsertBlank(int i);
void cdromEject(int i);
void cdromReload(int index, int slot);
void updateImageHistory(int index, int slot, ui::MediaType type);

View File

@@ -1232,6 +1232,17 @@ scsi_cdrom_insert(void *priv)
}
}
static void
scsi_cdrom_insert_blank(void *priv)
{
scsi_cdrom_t *dev = (scsi_cdrom_t *) priv;
if ((dev == NULL) /*|| (dev->drv == NULL)*/)
return;
scsi_cdrom_log(dev->log, "Inserting blank disc\n");
}
static int
scsi_command_check_ready(const scsi_cdrom_t *dev, const uint8_t *cdb)
{
@@ -3988,6 +3999,7 @@ scsi_cdrom_drive_reset(const int c)
drv->get_volume = scsi_cdrom_get_volume;
drv->get_channel = scsi_cdrom_get_channel;
drv->close = scsi_cdrom_close;
drv->insert_blank = scsi_cdrom_insert_blank;
drv->sector_size = 2048;
(void) scsi_cdrom_update_sector_flags(dev);