diff options
author | cracyc <cracyc@users.noreply.github.com> | 2018-02-12 23:02:22 -0600 |
---|---|---|
committer | cracyc <cracyc@users.noreply.github.com> | 2018-02-12 23:02:22 -0600 |
commit | 3b421603ec3dcd85df4074cd9ad3dc75ac70f59f (patch) | |
tree | fc28e1fd853c28f2ca4785884ce3459169b2f2b4 | |
parent | 11dec07aee539947031ab4dd57d25070fca48db9 (diff) |
olyboss: floppy wip (nw)
-rw-r--r-- | src/devices/machine/i8257.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/olyboss.cpp | 39 |
2 files changed, 37 insertions, 4 deletions
diff --git a/src/devices/machine/i8257.cpp b/src/devices/machine/i8257.cpp index 91dd8829a1b..2b7df62920b 100644 --- a/src/devices/machine/i8257.cpp +++ b/src/devices/machine/i8257.cpp @@ -231,7 +231,7 @@ inline void i8257_device::dma_write() } break; } - LOGTFR(" channel %d Offset %04x: %02x\n", m_channel, offset, m_temp); + LOGTFR(" channel %d Offset %04x: %02x %04x\n", m_current_channel, offset, m_temp, m_channel[m_current_channel].m_count); } diff --git a/src/mame/drivers/olyboss.cpp b/src/mame/drivers/olyboss.cpp index ac2a21a287e..7001db80581 100644 --- a/src/mame/drivers/olyboss.cpp +++ b/src/mame/drivers/olyboss.cpp @@ -69,10 +69,14 @@ public: UPD3301_DRAW_CHARACTER_MEMBER( olyboss_display_pixels ); DECLARE_WRITE_LINE_MEMBER( hrq_w ); + DECLARE_WRITE_LINE_MEMBER( tc_w ); DECLARE_READ8_MEMBER( dma_mem_r ); DECLARE_WRITE8_MEMBER( dma_mem_w ); DECLARE_READ8_MEMBER( fdcctrl_r ); DECLARE_WRITE8_MEMBER( fdcctrl_w ); + DECLARE_READ8_MEMBER( fdcdma_r ); + DECLARE_WRITE8_MEMBER( fdcdma_w ); + DECLARE_WRITE8_MEMBER( crtcdma_w ); void olybossd(machine_config &config); void olyboss_io(address_map &map); @@ -89,6 +93,7 @@ private: u8 m_keystroke; void keyboard_put(u8 data); u8 m_fdcctrl; + u8 m_channel; }; //************************************************************************** @@ -200,6 +205,15 @@ WRITE_LINE_MEMBER( olyboss_state::hrq_w ) m_dma->hlda_w(state); } +WRITE_LINE_MEMBER( olyboss_state::tc_w ) +{ + if((m_channel == 0) && state) + { + m_fdc->tc_w(1); + m_fdc->tc_w(0); + } +} + READ8_MEMBER( olyboss_state::dma_mem_r ) { address_space &program = m_maincpu->space(AS_PROGRAM); @@ -212,6 +226,24 @@ WRITE8_MEMBER( olyboss_state::dma_mem_w ) program.write_byte(offset, data); } +READ8_MEMBER( olyboss_state::fdcdma_r ) +{ + m_channel = 0; + return m_fdc->dma_r(); +} + +WRITE8_MEMBER( olyboss_state::fdcdma_w ) +{ + m_channel = 0; + m_fdc->dma_w(data); +} + +WRITE8_MEMBER( olyboss_state::crtcdma_w ) +{ + m_channel = 2; + m_crtc->dack_w(space, offset, data, mem_mask); +} + READ8_MEMBER( olyboss_state::fdcctrl_r ) { return m_fdcctrl | 0x80; // 0xc0 seems to indicate an 8" drive @@ -259,9 +291,10 @@ MACHINE_CONFIG_START( olyboss_state::olybossd ) MCFG_I8257_OUT_HRQ_CB(WRITELINE(olyboss_state, hrq_w)) MCFG_I8257_IN_MEMR_CB(READ8(olyboss_state, dma_mem_r)) MCFG_I8257_OUT_MEMW_CB(WRITE8(olyboss_state, dma_mem_w)) - MCFG_I8257_IN_IOR_0_CB(DEVREAD8("fdc", upd765a_device, mdma_r)) - MCFG_I8257_OUT_IOW_0_CB(DEVWRITE8("fdc", upd765a_device, mdma_w)) - MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8(UPD3301_TAG, upd3301_device, dack_w)) + MCFG_I8257_IN_IOR_0_CB(READ8(olyboss_state, fdcdma_r)) + MCFG_I8257_OUT_IOW_0_CB(WRITE8(olyboss_state, fdcdma_w)) + MCFG_I8257_OUT_IOW_2_CB(WRITE8(olyboss_state, crtcdma_w)) + MCFG_I8257_OUT_TC_CB(WRITELINE(olyboss_state, tc_w)) MCFG_DEVICE_ADD(UPD3301_TAG, UPD3301, XTAL(14'318'181)) MCFG_UPD3301_CHARACTER_WIDTH(8) |