From c49b925dfe49da32d3c2da4dcef513978fe3b74c Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Sun, 20 Oct 2013 15:10:59 +0000 Subject: [PATCH] ADR and track # fixes --- src/emu/machine/stvcd.c | 13 +++++++++---- src/mame/includes/stv.h | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/emu/machine/stvcd.c b/src/emu/machine/stvcd.c index 45b156e4aa1..c516c9b7037 100644 --- a/src/emu/machine/stvcd.c +++ b/src/emu/machine/stvcd.c @@ -1,4 +1,4 @@ -// license:? +// license:MAME // copyright-holders:Angelo Salese, R. Belmont /*************************************************************************** @@ -97,6 +97,11 @@ int saturn_state::get_track_index(UINT32 fad) return 1; } +int saturn_state::sega_cdrom_get_adr_control(cdrom_file *file, int track) +{ + return BITSWAP8(cdrom_get_adr_control(file, cur_track),3,2,1,0,7,6,5,4); +} + void saturn_state::cr_standard_return(UINT16 cur_status) { if ((cd_stat & 0x0f00) == CD_STAT_SEEK) @@ -105,7 +110,7 @@ void saturn_state::cr_standard_return(UINT16 cur_status) UINT8 seek_track = cdrom_get_track(cdrom, cd_fad_seek-150); cr1 = cur_status | (playtype << 7) | 0x00 | (cdda_repeat_count & 0xf); - cr2 = (seek_track == 0xff) ? 0xffff : ((cdrom_get_adr_control(cdrom, seek_track)<<8) | seek_track); + cr2 = (seek_track == 0xff) ? 0xffff : ((sega_cdrom_get_adr_control(cdrom, seek_track)<<8) | seek_track); cr3 = (get_track_index(cd_fad_seek)<<8) | (cd_fad_seek>>16); //index & 0xff00 cr4 = cd_fad_seek; } @@ -116,7 +121,7 @@ void saturn_state::cr_standard_return(UINT16 cur_status) - Whizz: wpset 0x608f030,4,w,wpdata==0x100&&pc!=0x6040006 */ cr1 = cur_status | (playtype << 7) | 0x00 | (cdda_repeat_count & 0xf); //options << 4 | repeat & 0xf - cr2 = (cur_track == 0xff) ? 0xffff : (cdrom_get_adr_control(cdrom, cur_track)<<8 | cur_track); // TODO: fix current track + cr2 = (cur_track == 0xff) ? 0xffff : ((sega_cdrom_get_adr_control(cdrom, cur_track)<<8) | (cdrom_get_track(cdrom, cd_curfad-150)+1)); cr3 = (get_track_index(cd_curfad)<<8) | (cd_curfad>>16); //index & 0xff00 cr4 = cd_curfad; } @@ -2287,7 +2292,7 @@ void saturn_state::cd_readTOC(void) { if (cdrom) { - tocbuf[tocptr] = cdrom_get_adr_control(cdrom, i)<<4 | 0x01; + tocbuf[tocptr] = sega_cdrom_get_adr_control(cdrom, i); } else { diff --git a/src/mame/includes/stv.h b/src/mame/includes/stv.h index 0d382c84489..7bc696f56cd 100644 --- a/src/mame/includes/stv.h +++ b/src/mame/includes/stv.h @@ -558,6 +558,7 @@ public: void stvcd_set_tray_close(void); int get_track_index(UINT32 fad); + int sega_cdrom_get_adr_control(cdrom_file *file, int track); void cr_standard_return(UINT16 cur_status); void cd_free_block(blockT *blktofree); void cd_defragblocks(partitionT *part);