mpf1: Remove direct update handler, makes step work [O. Galibert]

This commit is contained in:
Olivier Galibert 2017-03-03 09:41:10 +01:00
parent 0c9888b0c3
commit 997ed71e1b
2 changed files with 29 additions and 17 deletions

View File

@ -64,6 +64,10 @@ static ADDRESS_MAP_START( mpf1_map, AS_PROGRAM, 8, mpf1_state )
AM_RANGE(0x1800, 0x1fff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( mpf1_step, AS_DECRYPTED_OPCODES, 8, mpf1_state )
AM_RANGE(0x0000, 0xffff) AM_READ(step_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( mpf1b_map, AS_PROGRAM, 8, mpf1_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x0fff) AM_ROM
@ -287,6 +291,8 @@ WRITE8_MEMBER( mpf1_state::ppi_pc_w )
/* bit 6, monitor break control */
m_break = BIT(data, 6);
if(!m_break)
fprintf(stderr, "mb=%d\n", m_break);
if (m_break)
{
m_m1 = 0;
@ -299,6 +305,22 @@ WRITE8_MEMBER( mpf1_state::ppi_pc_w )
m_cassette->output( BIT(data, 7) ? 1.0 : -1.0);
}
READ8_MEMBER(mpf1_state::step_r)
{
if (!m_break)
{
m_m1++;
if (m_m1 == 5)
{
fprintf(stderr, "yay!\n");
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
}
return m_program->read_byte(offset);
}
/* Z80 Daisy Chain */
static const z80_daisy_config mpf1_daisy_chain[] =
@ -340,6 +362,7 @@ static MACHINE_CONFIG_START( mpf1, mpf1_state )
/* basic machine hardware */
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_3_579545MHz/2)
MCFG_CPU_PROGRAM_MAP(mpf1_map)
MCFG_CPU_DECRYPTED_OPCODES_MAP(mpf1_step)
MCFG_CPU_IO_MAP(mpf1_io_map)
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
@ -373,6 +396,7 @@ static MACHINE_CONFIG_START( mpf1b, mpf1_state )
/* basic machine hardware */
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_3_579545MHz/2)
MCFG_CPU_PROGRAM_MAP(mpf1b_map)
MCFG_CPU_DECRYPTED_OPCODES_MAP(mpf1_step)
MCFG_CPU_IO_MAP(mpf1b_io_map)
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
@ -409,6 +433,7 @@ static MACHINE_CONFIG_START( mpf1p, mpf1_state )
/* basic machine hardware */
MCFG_CPU_ADD(Z80_TAG, Z80, 2500000)
MCFG_CPU_PROGRAM_MAP(mpf1p_map)
MCFG_CPU_DECRYPTED_OPCODES_MAP(mpf1_step)
MCFG_CPU_IO_MAP(mpf1p_io_map)
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
@ -461,24 +486,9 @@ ROM_END
/* System Drivers */
DIRECT_UPDATE_MEMBER(mpf1_state::mpf1_direct_update_handler)
{
if (!m_break)
{
m_m1++;
if (m_m1 == 5)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
}
return address;
}
DRIVER_INIT_MEMBER(mpf1_state,mpf1)
{
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(&mpf1_state::mpf1_direct_update_handler, this));
m_program = &m_maincpu->space(AS_PROGRAM);
}
COMP( 1979, mpf1, 0, 0, mpf1, mpf1, mpf1_state, mpf1, "Multitech", "Micro Professor 1", 0)

View File

@ -55,13 +55,13 @@ public:
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_READ8_MEMBER( step_r );
DECLARE_READ8_MEMBER( ppi_pa_r );
DECLARE_WRITE8_MEMBER( ppi_pb_w );
DECLARE_WRITE8_MEMBER( ppi_pc_w );
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
DECLARE_INPUT_CHANGED_MEMBER( trigger_irq );
DECLARE_INPUT_CHANGED_MEMBER( trigger_res );
DECLARE_DIRECT_UPDATE_MEMBER(mpf1_direct_update_handler);
int m_break;
int m_m1;
@ -69,6 +69,8 @@ public:
uint8_t m_lednum;
emu_timer *m_led_refresh_timer;
address_space *m_program;
DECLARE_DRIVER_INIT(mpf1);
TIMER_CALLBACK_MEMBER(led_refresh);
TIMER_DEVICE_CALLBACK_MEMBER(check_halt_callback);