Move CD blank media to separate status field.
Some checks failed
CMake (Linux) / Qt 5 GUI, Debug, NDR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Debug, NDR, arm64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Debug, NDR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 5 GUI, Debug, NDR, x86_64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Debug, NDR, x86_64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Debug, NDR, x86_64 (push) Has been cancelled
CMake (Linux) / Qt 5 GUI, Debug, ODR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Debug, ODR, arm64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Debug, ODR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 5 GUI, Debug, ODR, x86_64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Debug, ODR, x86_64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Debug, ODR, x86_64 (push) Has been cancelled
CMake (Linux) / Qt 5 GUI, Dev, NDR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Dev, NDR, arm64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Dev, NDR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 5 GUI, Dev, NDR, x86_64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Dev, NDR, x86_64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Dev, NDR, x86_64 (push) Has been cancelled
CMake (Linux) / Qt 5 GUI, Dev, ODR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Dev, ODR, arm64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Dev, ODR, arm64 (push) Has been cancelled
CMake (Linux) / Qt 5 GUI, Dev, ODR, x86_64 (push) Has been cancelled
CMake (Linux) / Qt 6 GUI, Dev, ODR, x86_64 (push) Has been cancelled
CMake (Linux) / SDL GUI, Dev, ODR, x86_64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Debug, NDR, arm64 (push) Has been cancelled
CMake (macos) / SDL GUI, Debug, NDR, arm64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Debug, NDR, x86_64 (push) Has been cancelled
CMake (macos) / SDL GUI, Debug, NDR, x86_64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Debug, ODR, arm64 (push) Has been cancelled
CMake (macos) / SDL GUI, Debug, ODR, arm64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Debug, ODR, x86_64 (push) Has been cancelled
CMake (macos) / SDL GUI, Debug, ODR, x86_64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Dev, NDR, arm64 (push) Has been cancelled
CMake (macos) / SDL GUI, Dev, NDR, arm64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Dev, NDR, x86_64 (push) Has been cancelled
CMake (macos) / SDL GUI, Dev, NDR, x86_64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Dev, ODR, arm64 (push) Has been cancelled
CMake (macos) / SDL GUI, Dev, ODR, arm64 (push) Has been cancelled
CMake (macos) / Qt 5 GUI, Dev, ODR, x86_64 (push) Has been cancelled
CMake (macos) / SDL GUI, Dev, ODR, x86_64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Debug, NDR, CLANGARM64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Debug, NDR, MINGW64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Debug, ODR, CLANGARM64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Debug, ODR, MINGW64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Dev, NDR, CLANGARM64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Dev, NDR, MINGW64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Dev, ODR, CLANGARM64 (push) Has been cancelled
CMake (Windows) / Qt 5 GUI, Dev, ODR, MINGW64 (push) Has been cancelled
CodeQL Analysis (Linux) / Qt 5 GUI, Debug, NDR, x86_64 (push) Has been cancelled
CodeQL Analysis (Linux) / SDL GUI, Debug, NDR, x86_64 (push) Has been cancelled
CodeQL Analysis (Linux) / Qt 5 GUI, Debug, ODR, x86_64 (push) Has been cancelled
CodeQL Analysis (Linux) / SDL GUI, Debug, ODR, x86_64 (push) Has been cancelled
CodeQL Analysis (macos) / Qt 5 GUI, Debug, NDR, x86_64 (push) Has been cancelled
CodeQL Analysis (macos) / Qt 5 GUI, Debug, ODR, x86_64 (push) Has been cancelled
CodeQL Analysis (Windows) / Qt 5 GUI, Debug, NDR, MINGW64 (push) Has been cancelled
CodeQL Analysis (Windows) / Qt 5 GUI, Debug, ODR, MINGW64 (push) Has been cancelled

This commit is contained in:
2025-09-24 06:52:08 +01:00
parent 6498914df9
commit 2b3ceea4f5
3 changed files with 18 additions and 7 deletions

View File

@@ -2801,7 +2801,7 @@ cdrom_read_disc_information(const cdrom_t *dev, uint8_t *buffer)
int ls_last = 0;
int t_b0 = -1;
if (dev->cd_status == CD_STATUS_BLANK_CDR) {
if (dev->blank_media == CD_BLANK_CDR) {
memset(buffer, 0x00, 34);
buffer[ 0] = 0x00; /* Disc Information Length (MSB) */
@@ -3117,7 +3117,8 @@ cdrom_insert_blank(cdrom_t *dev, const char *fn)
// All looking good, reset state
dev->seek_pos = 0;
dev->cd_buflen = 0;
dev->cd_status = CD_STATUS_BLANK_CDR;
dev->cd_status = CD_STATUS_DATA_ONLY;
dev->blank_media = CD_BLANK_CDR;
dev->cdrom_capacity = 0;
cdrom_log(dev->log, "Blank CD-R created\n");
cdrom_insert(dev->id);

View File

@@ -31,10 +31,11 @@
#define CD_STATUS_HOLD 8
#define CD_STATUS_DVD_REJECTED 16
#define CD_STATUS_HAS_AUDIO 0xc
#define CD_STATUS_BLANK_CDR 0x20
#define CD_STATUS_BLANK_MASK 0x20
#define CD_STATUS_MASK 0x2f
#define CD_BLANK_NOT 0x00
#define CD_BLANK_CDR 0x01
/* Medium changed flag. */
#define CD_STATUS_TRANSITION 0x40
#define CD_STATUS_MEDIUM_CHANGED 0x80
@@ -310,6 +311,7 @@ typedef struct cdrom {
Bit 1 = DMA supportd. */
uint8_t cd_status; /* Struct variable reserved for
media status. */
uint8_t blank_media;
uint8_t speed;
uint8_t cur_speed;

View File

@@ -2643,7 +2643,7 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb)
scsi_cdrom_not_ready(dev);
else if (toc_format < 3) {
// Blank discs return invalid field when asked for a TOC
if (dev->drv->cd_status & CD_STATUS_BLANK_MASK) {
if (dev->drv->blank_media) {
scsi_cdrom_invalid_field(dev, toc_format);
break;
}
@@ -2658,12 +2658,12 @@ scsi_cdrom_command(scsi_common_t *sc, const uint8_t *cdb)
scsi_cdrom_set_buf_len(dev, BufLen, &len);
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
}
} else if (toc_format == 3 && dev->drv->cd_status == CD_STATUS_BLANK_CDR) {
} else if (toc_format == 3 && dev->drv->blank_media == CD_BLANK_CDR) {
len = cdrom_read_pma(dev->drv, dev->buffer, max_len);
scsi_cdrom_set_buf_len(dev, BufLen, &len);
scsi_cdrom_data_command_finish(dev, len, len, len, 0);
} else if (toc_format == 4 && dev->drv->cd_status == CD_STATUS_BLANK_CDR) {
} else if (toc_format == 4 && dev->drv->blank_media == CD_BLANK_CDR) {
len = cdrom_read_atip(dev->drv, dev->buffer, max_len);
scsi_cdrom_set_buf_len(dev, BufLen, &len);
@@ -3661,6 +3661,14 @@ atapi_out:
dev->buffer[6] = 8;
len = 8;
// Undo the overflow if disc capacity is blank
if (dev->drv->blank_media) {
dev->buffer[0] = 0x00;
dev->buffer[1] = 0x00;
dev->buffer[2] = 0x00;
dev->buffer[3] = 0x00;
}
scsi_cdrom_log(dev->log, "CD-ROM Capacity: %08X\n",
dev->drv->cdrom_capacity - 1);