mirror of
https://github.com/holub/mame
synced 2025-07-05 01:48:29 +03:00
mpf1: Remove direct update handler, makes step work [O. Galibert]
This commit is contained in:
parent
0c9888b0c3
commit
997ed71e1b
@ -64,6 +64,10 @@ static ADDRESS_MAP_START( mpf1_map, AS_PROGRAM, 8, mpf1_state )
|
|||||||
AM_RANGE(0x1800, 0x1fff) AM_RAM
|
AM_RANGE(0x1800, 0x1fff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
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 )
|
static ADDRESS_MAP_START( mpf1b_map, AS_PROGRAM, 8, mpf1_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x0fff) AM_ROM
|
AM_RANGE(0x0000, 0x0fff) AM_ROM
|
||||||
@ -287,6 +291,8 @@ WRITE8_MEMBER( mpf1_state::ppi_pc_w )
|
|||||||
/* bit 6, monitor break control */
|
/* bit 6, monitor break control */
|
||||||
m_break = BIT(data, 6);
|
m_break = BIT(data, 6);
|
||||||
|
|
||||||
|
if(!m_break)
|
||||||
|
fprintf(stderr, "mb=%d\n", m_break);
|
||||||
if (m_break)
|
if (m_break)
|
||||||
{
|
{
|
||||||
m_m1 = 0;
|
m_m1 = 0;
|
||||||
@ -299,6 +305,22 @@ WRITE8_MEMBER( mpf1_state::ppi_pc_w )
|
|||||||
m_cassette->output( BIT(data, 7) ? 1.0 : -1.0);
|
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 */
|
/* Z80 Daisy Chain */
|
||||||
|
|
||||||
static const z80_daisy_config mpf1_daisy_chain[] =
|
static const z80_daisy_config mpf1_daisy_chain[] =
|
||||||
@ -340,6 +362,7 @@ static MACHINE_CONFIG_START( mpf1, mpf1_state )
|
|||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_3_579545MHz/2)
|
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_3_579545MHz/2)
|
||||||
MCFG_CPU_PROGRAM_MAP(mpf1_map)
|
MCFG_CPU_PROGRAM_MAP(mpf1_map)
|
||||||
|
MCFG_CPU_DECRYPTED_OPCODES_MAP(mpf1_step)
|
||||||
MCFG_CPU_IO_MAP(mpf1_io_map)
|
MCFG_CPU_IO_MAP(mpf1_io_map)
|
||||||
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
|
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
|
||||||
|
|
||||||
@ -373,6 +396,7 @@ static MACHINE_CONFIG_START( mpf1b, mpf1_state )
|
|||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_3_579545MHz/2)
|
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_3_579545MHz/2)
|
||||||
MCFG_CPU_PROGRAM_MAP(mpf1b_map)
|
MCFG_CPU_PROGRAM_MAP(mpf1b_map)
|
||||||
|
MCFG_CPU_DECRYPTED_OPCODES_MAP(mpf1_step)
|
||||||
MCFG_CPU_IO_MAP(mpf1b_io_map)
|
MCFG_CPU_IO_MAP(mpf1b_io_map)
|
||||||
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
|
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
|
||||||
|
|
||||||
@ -409,6 +433,7 @@ static MACHINE_CONFIG_START( mpf1p, mpf1_state )
|
|||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD(Z80_TAG, Z80, 2500000)
|
MCFG_CPU_ADD(Z80_TAG, Z80, 2500000)
|
||||||
MCFG_CPU_PROGRAM_MAP(mpf1p_map)
|
MCFG_CPU_PROGRAM_MAP(mpf1p_map)
|
||||||
|
MCFG_CPU_DECRYPTED_OPCODES_MAP(mpf1_step)
|
||||||
MCFG_CPU_IO_MAP(mpf1p_io_map)
|
MCFG_CPU_IO_MAP(mpf1p_io_map)
|
||||||
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
|
MCFG_Z80_DAISY_CHAIN(mpf1_daisy_chain)
|
||||||
|
|
||||||
@ -461,24 +486,9 @@ ROM_END
|
|||||||
|
|
||||||
/* System Drivers */
|
/* 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)
|
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)
|
COMP( 1979, mpf1, 0, 0, mpf1, mpf1, mpf1_state, mpf1, "Multitech", "Micro Professor 1", 0)
|
||||||
|
@ -55,13 +55,13 @@ public:
|
|||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER( step_r );
|
||||||
DECLARE_READ8_MEMBER( ppi_pa_r );
|
DECLARE_READ8_MEMBER( ppi_pa_r );
|
||||||
DECLARE_WRITE8_MEMBER( ppi_pb_w );
|
DECLARE_WRITE8_MEMBER( ppi_pb_w );
|
||||||
DECLARE_WRITE8_MEMBER( ppi_pc_w );
|
DECLARE_WRITE8_MEMBER( ppi_pc_w );
|
||||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
|
DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
|
||||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_irq );
|
DECLARE_INPUT_CHANGED_MEMBER( trigger_irq );
|
||||||
DECLARE_INPUT_CHANGED_MEMBER( trigger_res );
|
DECLARE_INPUT_CHANGED_MEMBER( trigger_res );
|
||||||
DECLARE_DIRECT_UPDATE_MEMBER(mpf1_direct_update_handler);
|
|
||||||
|
|
||||||
int m_break;
|
int m_break;
|
||||||
int m_m1;
|
int m_m1;
|
||||||
@ -69,6 +69,8 @@ public:
|
|||||||
uint8_t m_lednum;
|
uint8_t m_lednum;
|
||||||
|
|
||||||
emu_timer *m_led_refresh_timer;
|
emu_timer *m_led_refresh_timer;
|
||||||
|
address_space *m_program;
|
||||||
|
|
||||||
DECLARE_DRIVER_INIT(mpf1);
|
DECLARE_DRIVER_INIT(mpf1);
|
||||||
TIMER_CALLBACK_MEMBER(led_refresh);
|
TIMER_CALLBACK_MEMBER(led_refresh);
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(check_halt_callback);
|
TIMER_DEVICE_CALLBACK_MEMBER(check_halt_callback);
|
||||||
|
Loading…
Reference in New Issue
Block a user