diff options
author | angelosa <salese_corp_ltd@email.it> | 2015-07-22 21:36:43 +0200 |
---|---|---|
committer | angelosa <salese_corp_ltd@email.it> | 2015-07-22 21:36:43 +0200 |
commit | ff2970555e9a097bd433ccb073457c4f98e3c9f4 (patch) | |
tree | c9b60a856d7095f060a267cbf96f509ae6f1f324 | |
parent | dcab454d67677e0f7844c38703a44d3a19b217a9 (diff) |
Fix assert
-rw-r--r-- | src/emu/machine/segacdblock.c | 49 | ||||
-rw-r--r-- | src/emu/machine/segacdblock.h | 1 |
2 files changed, 34 insertions, 16 deletions
diff --git a/src/emu/machine/segacdblock.c b/src/emu/machine/segacdblock.c index 1bfcdb5bc46..d2da2eeb637 100644 --- a/src/emu/machine/segacdblock.c +++ b/src/emu/machine/segacdblock.c @@ -108,9 +108,6 @@ void segacdblock_device::set_flag(UINT16 which) m_hirq |= which; } -/*! - @todo: wrong and not needed - */ void segacdblock_device::clear_flag(UINT16 which) { m_hirq &= ~which; @@ -263,6 +260,7 @@ READ16_MEMBER(segacdblock_device::datatrns_r) { m_dma_src = 0; xfertype = CDDMA_STOPPED; + m_TOCPhase = false; } } else @@ -407,9 +405,9 @@ segacdblock_device::blockT *segacdblock_device::cd_alloc_block(UINT8 *blknum) { //printf("%d\n",freeblocks); freeblocks--; - if (freeblocks <= 0) + if (freeblocks < 0) { - set_flag(BFUL); + //set_flag(BFUL); return (blockT *)NULL; } @@ -422,7 +420,7 @@ segacdblock_device::blockT *segacdblock_device::cd_alloc_block(UINT8 *blknum) } } - set_flag(BFUL); + //set_flag(BFUL); return (blockT *)NULL; } @@ -454,7 +452,7 @@ void segacdblock_device::cd_free_block(blockT *blktofree) blktofree->size = -1; freeblocks++; - m_hirq &= ~BFUL; + //m_hirq &= ~BFUL; } void segacdblock_device::cd_readblock(UINT32 fad, UINT8 *dat) @@ -1107,8 +1105,8 @@ void segacdblock_device::cd_cmd_get_sector_number(UINT8 buffer_number) } } - if(m_dr[3] != 0) - set_flag(DRDY); + //if(m_dr[3] != 0) + // set_flag(DRDY); set_flag(CMOK); } @@ -1170,11 +1168,12 @@ void segacdblock_device::cd_cmd_get_sector_info(UINT8 sector_offset, UINT8 buffe void segacdblock_device::cd_cmd_set_sector_length(UINT8 length_in, UINT8 length_out) { const int sectorSizes[4] = { 2048, 2336, 2340, 2352 }; - assert(length_in < 4); - assert(length_out < 4); - m_SectorLengthIn = sectorSizes[length_in]; - m_SectorLengthOut = sectorSizes[length_out]; - + + if((length_in & 0xfc) == 0) + m_SectorLengthIn = sectorSizes[length_in]; + if((length_out & 0xfc) == 0) + m_SectorLengthOut = sectorSizes[length_out]; + cd_standard_return(false); set_flag(ESEL); @@ -1523,6 +1522,7 @@ void segacdblock_device::dma_setup() xfertype = CDDMA_INPROGRESS; set_flag(DRDY); sourcetype = SOURCE_NONE; + m_TOCPhase = true; printf("TOC on bus executed\n"); //debugger_break(machine()); break; @@ -1701,7 +1701,7 @@ segacdblock_device::partitionT *segacdblock_device::cd_read_filtered_sector(INT3 int trktype; //if ((cddevice != NULL) && (!buffull)) - if (CDDeviceConnection != NULL && (!(m_hirq & BFUL))) + if (CDDeviceConnection != NULL && (freeblocks > 0)) { // find out the track's type trktype = cdrom_get_track_type(cdrom, cdrom_get_track(cdrom, fad-150)); @@ -1755,6 +1755,7 @@ segacdblock_device::partitionT *segacdblock_device::cd_read_filtered_sector(INT3 void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { assert(id < CD_TIMER+1); + if(id == CMD_TIMER) SH1CommandExecute(); @@ -1817,7 +1818,7 @@ void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int UINT8 p_ok; if(m_FADEnd) - printf("FAD %08x %08x\n",m_FAD,m_FADEnd); + printf("FAD %08x %08x %04x\n",m_FAD,m_FADEnd,m_hirq); p_ok = 0; if (cdrom) @@ -1870,6 +1871,22 @@ void segacdblock_device::device_timer(emu_timer &timer, device_timer_id id, int } } + popmessage("%d",freeblocks); + + if(freeblocks == 0) + set_flag(BFUL); + else + clear_flag(BFUL); + /*if(m_TOCPhase == false) + { + if(freeblocks != 200) + set_flag(DRDY); + else + clear_flag(DRDY); + }*/ + if(freeblocks == 200) + clear_flag(CSCT); + } //------------------------------------------------- diff --git a/src/emu/machine/segacdblock.h b/src/emu/machine/segacdblock.h index 7ec204eb742..18db5619c88 100644 --- a/src/emu/machine/segacdblock.h +++ b/src/emu/machine/segacdblock.h @@ -271,6 +271,7 @@ private: int m_CurrentTrack; int m_CalculateActualSize; bool m_TempPause; + bool m_TOCPhase; //bool m_BufferFull; }; |