From f84c36c351bc646e5af4d3c029b83b094a8fbd61 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Wed, 24 Sep 2025 17:11:23 +0100 Subject: [PATCH] Implement GET TRACK INFORMATION for CD-R for invisible/incomplete track. --- src/cdrom/cdrom.c | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index c9e1cdf64..4be61c13f 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -2946,7 +2946,43 @@ cdrom_read_track_information(cdrom_t *dev, const uint8_t *cdb, uint8_t *buffer) break; case 0x01: if (dev->blank_media) { - ret = -cdb[1]; + if (pos != 0xff) { + ret = -cdb[1]; + break; + } + + // Otherwise it is asking the invisible/incomplete track information + memset(buffer, 0, 36); + buffer[ 0] = 0x00; /* Data Length (MSB) */ + buffer[ 1] = 0x22; /* Data Length (LSB) */ + buffer[ 2] = 0x01; /* Logical Track Number (LSB) */ + buffer[ 3] = 0x01; /* Session Number (LSB) */ + buffer[ 4] = 0x00; /* Reserved */ + buffer[ 5] = 0x04; /* LJRS, Damage, Copy, Track Mode */ + buffer[ 6] = 0x4f; /* RT, Blank, Packet, FP, Data Mode */ + buffer[ 7] = 0x01; /* LRA_V, NWA_V */ + buffer[ 8] = 0x00; /* Logical Track Start Addres (MSB...) */ + buffer[ 9] = 0x00; /* ... */ + buffer[10] = 0x00; /* ... */ + buffer[11] = 0x00; /* Logical Track Start Address (...LSB) */ + buffer[12] = 0x00; /* Next Writable Address (MSB...) */ + buffer[13] = 0x00; /* ... */ + buffer[14] = 0x00; /* ... */ + buffer[15] = 0x00; /* Next Writable Address (...LSB) */ + buffer[16] = 0x00; /* Free Blocks (MSB...) */ + buffer[17] = 0x05; /* ... */ + buffer[18] = 0x7d; /* ... */ + buffer[19] = 0xa4; /* Free Blocks (...LSB) */ + buffer[20] = 0x00; /* Fixed Packet Size (MSB...) */ + buffer[21] = 0x00; /* ... */ + buffer[22] = 0x00; /* ... */ + buffer[23] = 0x00; /* Fixed Packet Size (...LSB) */ + buffer[24] = 0x00; /* Logical Track Size (MSB...) */ + buffer[25] = 0x05; /* ... */ + buffer[26] = 0x7d; /* ... */ + buffer[27] = 0xa4; /* Logical Track Size (...LSB) */ + + ret = 28; break; }