diff options
author | angelosa <salese_corp_ltd@email.it> | 2015-07-15 02:54:50 +0200 |
---|---|---|
committer | angelosa <salese_corp_ltd@email.it> | 2015-07-15 02:54:50 +0200 |
commit | 6a6ca341b785d3b3bf9d046e8ba696da870f043c (patch) | |
tree | 0de27ac5576a09d78183e0b84dfd90bd0c4f6aba | |
parent | fb5e1ddc798c8481ba74ccd4793d0181ae32afe6 (diff) |
Handle preliminary dir command again, Daytona USA CE returns back as before (without most polys)
-rw-r--r-- | src/emu/machine/segacdblock.c | 31 | ||||
-rw-r--r-- | src/emu/machine/segacdblock.h | 1 |
2 files changed, 28 insertions, 4 deletions
diff --git a/src/emu/machine/segacdblock.c b/src/emu/machine/segacdblock.c index ec90cb82ef4..744c934bb98 100644 --- a/src/emu/machine/segacdblock.c +++ b/src/emu/machine/segacdblock.c @@ -356,6 +356,7 @@ void segacdblock_device::SH1CommandExecute() case 0x67: cd_cmd_get_copy_error(); break; case 0x70: cd_cmd_change_dir(((m_cr[2] & 0xff)<<16) | (m_cr[3] & 0xffff) ); break; + case 0x71: cd_cmd_read_directory(m_cr[2] >> 8); case 0x72: cd_cmd_get_file_system_scope(); break; case 0x73: cd_cmd_get_file_info(((m_cr[2] & 0xff)<<16) | (m_cr[3] & 0xffff)); break; case 0x74: cd_cmd_read_file(); break; @@ -365,6 +366,7 @@ void segacdblock_device::SH1CommandExecute() case 0xe1: cd_cmd_device_auth_status(m_cr[1]); break; default: printf("Unhandled %04x %04x %04x %04x\n",m_cr[0],m_cr[1],m_cr[2],m_cr[3]); + debugger_break(machine()); //set_flag(CMOK); } m_cmd_issued = 0; @@ -990,9 +992,15 @@ void segacdblock_device::cd_cmd_get_sector_number(UINT8 buffer_number) m_dr[3] = 0; } else + { m_dr[3] = partitions[buffer_number].numblks; - - + if(m_dr[3] == 0) + { + //printf("%d\n",partitions[buffer_number].size); + //debugger_break(machine()); + + } + } //printf("%d\n",m_dr[3]); @@ -1116,7 +1124,7 @@ void segacdblock_device::cd_cmd_delete_sector() partitions[bufnum].blocks[i] = (blockT *)NULL; partitions[bufnum].bnum[i] = 0xff; } - + // defrag what's left cd_defragblocks(transpart); @@ -1150,6 +1158,16 @@ void segacdblock_device::cd_cmd_change_dir(UINT32 dir_entry) set_flag(CMOK); } +void segacdblock_device::cd_cmd_read_directory(UINT8 filter_number) +{ + if(filter_number< 0x24) + CDDeviceConnection = &CDFilters[filter_number]; + else + CDDeviceConnection = (filterT *)NULL; + set_flag(EFLS); + set_flag(CMOK); +} + void segacdblock_device::cd_cmd_get_file_system_scope() { m_dr[0] = m_cd_state; @@ -1629,11 +1647,15 @@ void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int { if((m_cd_state & 0x0f00) == CD_STAT_PAUSE) { + set_flag(CSCT); + + printf("FREE %d\n",freeblocks); if(!(m_hirq & BFUL) && m_TempPause == true) { m_TempPause = false; m_cd_state = CD_STAT_PLAY; } + m_cd_timer->adjust(attotime::from_hz(150)); } @@ -1654,6 +1676,7 @@ void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int else { p_ok = 1; // TODO + //machine().device<cdda_device>("cdda")->start_audio(cd_curfad, 1); } } @@ -1682,7 +1705,7 @@ void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int m_TempPause = true; m_cd_state = CD_STAT_PAUSE; printf("%04x %d\n",m_hirq,freeblocks); - } + } m_cd_timer->adjust(attotime::from_hz(150)); diff --git a/src/emu/machine/segacdblock.h b/src/emu/machine/segacdblock.h index 0cffa2e2b58..e6443edbd1b 100644 --- a/src/emu/machine/segacdblock.h +++ b/src/emu/machine/segacdblock.h @@ -229,6 +229,7 @@ private: // 0x70 void cd_cmd_change_dir(UINT32 dir_entry); + void cd_cmd_read_directory(UINT8 filter_number); void cd_cmd_get_file_system_scope(); void cd_cmd_get_file_info(UINT32 fileid); void cd_cmd_read_file(); |