From a81156c3e38d3ee1c5fc932c86b007a04a25ff2a Mon Sep 17 00:00:00 2001 From: Maxim Poliakovski Date: Thu, 11 Jul 2024 21:25:40 +0200 Subject: [PATCH] cdromdrive: convert MSF values to BCD. --- devices/storage/cdromdrive.cpp | 13 +++++++++++-- devices/storage/cdromdrive.h | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/devices/storage/cdromdrive.cpp b/devices/storage/cdromdrive.cpp index 441e4ff..52424c9 100644 --- a/devices/storage/cdromdrive.cpp +++ b/devices/storage/cdromdrive.cpp @@ -1,6 +1,6 @@ /* DingusPPC - The Experimental PowerPC Macintosh emulator -Copyright (C) 2018-23 divingkatae and maximum +Copyright (C) 2018-24 divingkatae and maximum (theweirdo) spatium (Contact divingkatae#1017 or powermax#2286 on Discord for more info) @@ -138,8 +138,17 @@ uint32_t CdromDrive::report_capacity(uint8_t *data_ptr) { return 8; } +uint8_t CdromDrive::hex_to_bcd(const uint8_t val) { + uint8_t hi = val / 10; + uint8_t lo = val % 10; + return (hi << 4) | lo; +} + AddrMsf CdromDrive::lba_to_msf(const int lba) { - return {lba / 4500, /*.min*/ (lba / 75) % 60, /*.sec*/ lba % 75 /*.frm*/}; + return {hex_to_bcd( lba / 4500), /*.min*/ + hex_to_bcd((lba / 75) % 60), /*.sec*/ + hex_to_bcd( lba % 75) /*.frm*/ + }; } uint32_t CdromDrive::read_toc(uint8_t *cmd_ptr, uint8_t *data_ptr) { diff --git a/devices/storage/cdromdrive.h b/devices/storage/cdromdrive.h index bce89b2..f487827 100644 --- a/devices/storage/cdromdrive.h +++ b/devices/storage/cdromdrive.h @@ -1,6 +1,6 @@ /* DingusPPC - The Experimental PowerPC Macintosh emulator -Copyright (C) 2018-23 divingkatae and maximum +Copyright (C) 2018-24 divingkatae and maximum (theweirdo) spatium (Contact divingkatae#1017 or powermax#2286 on Discord for more info) @@ -69,6 +69,7 @@ public: protected: std::function set_error; + uint8_t hex_to_bcd(const uint8_t val); AddrMsf lba_to_msf(const int lba); TrackDescriptor tracks[CDROM_MAX_TRACKS];