diff options
| author | 2025-09-14 21:37:04 -0400 | |
|---|---|---|
| committer | 2025-09-14 21:37:04 -0400 | |
| commit | 236eb3bd63f0387e736f27937c03609ebdb53bf0 (patch) | |
| tree | ce3b63314f154af284db0ef5be170ae295efc0bb | |
| parent | 8b47e039419979d6d0db4da4742997c4155db165 (diff) | |
b2m: Fix disk boot
| -rw-r--r-- | src/mame/ussr/b2m.cpp | 10 | ||||
| -rw-r--r-- | src/mame/ussr/b2m.h | 4 | ||||
| -rw-r--r-- | src/mame/ussr/b2m_m.cpp | 12 |
3 files changed, 19 insertions, 7 deletions
diff --git a/src/mame/ussr/b2m.cpp b/src/mame/ussr/b2m.cpp index f67f60ed26f..e41751e6a82 100644 --- a/src/mame/ussr/b2m.cpp +++ b/src/mame/ussr/b2m.cpp @@ -10,9 +10,10 @@ To get numbers, you have to hold down Shift. B2M: - Hit enter while the square block is showing - it will attempt to boot - a disk. But, it is loaded corruptly, and it runs into the weeds. + a disk. - Or, just wait and a menu appears with choices S,L,W,R,G. It's all in - Russian, and choosing any of them produces an error. + Russian, and choosing any of them produces an error. (Doesn't work + currently?) B2MROM: - At start you are in an empty ramdisk called A: @@ -56,6 +57,7 @@ void b2m_state::b2m_io(address_map &map) map(0x14, 0x15).rw(m_pic, FUNC(pic8259_device::read), FUNC(pic8259_device::write)); map(0x18, 0x19).rw("uart", FUNC(i8251_device::read), FUNC(i8251_device::write)); map(0x1c, 0x1f).rw(m_fdc, FUNC(fd1793_device::read), FUNC(fd1793_device::write)); + map(0x1c, 0x1c).r(FUNC(b2m_state::fdc_status_hack_r)); } void b2m_state::b2m_rom_io(address_map &map) @@ -256,8 +258,8 @@ void b2m_state::b2m(machine_config &config) FD1793(config, m_fdc, 8_MHz_XTAL / 8); m_fdc->drq_wr_callback().set(FUNC(b2m_state::fdc_drq)); - FLOPPY_CONNECTOR(config, "fd0", b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); - FLOPPY_CONNECTOR(config, "fd1", b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); + FLOPPY_CONNECTOR(config, m_fd[0], b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); + FLOPPY_CONNECTOR(config, m_fd[1], b2m_floppies, "525qd", b2m_state::b2m_floppy_formats); SOFTWARE_LIST(config, "flop_list").set_original("b2m"); /* internal ram */ diff --git a/src/mame/ussr/b2m.h b/src/mame/ussr/b2m.h index e1e1f19c739..6f1f15bef43 100644 --- a/src/mame/ussr/b2m.h +++ b/src/mame/ussr/b2m.h @@ -54,6 +54,7 @@ private: void ppi1_portc_w(uint8_t data); uint8_t ppi1_portb_r(); void ppi2_portc_w(uint8_t data); + uint8_t fdc_status_hack_r(); uint8_t romdisk_porta_r(); void romdisk_portb_w(uint8_t data); void romdisk_portc_w(uint8_t data); @@ -73,6 +74,8 @@ private: uint8_t m_video_scroll = 0U; uint8_t m_portc = 0U; + bool m_drq_interlock = false; + uint8_t m_video_page = 0U; uint8_t m_romdisk_lsb = 0U; @@ -81,6 +84,7 @@ private: uint8_t m_color[4]{}; uint8_t m_localmachine = 0U; uint8_t m_vblank_state = 0U; + required_device<cpu_device> m_maincpu; required_device<speaker_sound_device> m_speaker; required_device<pit8253_device> m_pit; diff --git a/src/mame/ussr/b2m_m.cpp b/src/mame/ussr/b2m_m.cpp index d999c5c6e5f..cfdb05b9e4c 100644 --- a/src/mame/ussr/b2m_m.cpp +++ b/src/mame/ussr/b2m_m.cpp @@ -122,7 +122,7 @@ uint8_t b2m_state::ppi1_portb_r() void b2m_state::fdc_drq(int state) { /* Clears HALT state of CPU when data is ready to read */ - if (state) + if (state && m_drq_interlock) m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); } @@ -147,10 +147,14 @@ void b2m_state::ppi2_portc_w(uint8_t data) When bit 5 is set CPU is in HALT state and stay there until DRQ is triggered from floppy side */ + m_drq_interlock = BIT(data, 5); +} - if ((data & 0xf0)==0x20) { +uint8_t b2m_state::fdc_status_hack_r() +{ + if (!machine().side_effects_disabled() && m_drq_interlock && !m_fdc->drq_r()) m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); - } + return m_fdc->status_r(); } uint8_t b2m_state::romdisk_porta_r() @@ -232,6 +236,8 @@ void b2m_state::machine_reset() { m_vblank_state = 0; set_bank(7); + + m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); } uint32_t b2m_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
