summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ariedlmayer@gmail.com>2025-09-14 21:37:04 -0400
committer AJR <ariedlmayer@gmail.com>2025-09-14 21:37:04 -0400
commit236eb3bd63f0387e736f27937c03609ebdb53bf0 (patch)
treece3b63314f154af284db0ef5be170ae295efc0bb
parent8b47e039419979d6d0db4da4742997c4155db165 (diff)
b2m: Fix disk boot
-rw-r--r--src/mame/ussr/b2m.cpp10
-rw-r--r--src/mame/ussr/b2m.h4
-rw-r--r--src/mame/ussr/b2m_m.cpp12
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)