vcs80: removed direct update handler [R. Belmont]

This commit is contained in:
arbee 2017-01-08 21:31:50 -05:00
parent 9d3d07b771
commit 20e0d73916
2 changed files with 50 additions and 22 deletions

View File

@ -64,14 +64,18 @@ WRITE8_MEMBER( vcs80_state::pio_w )
/* Memory Maps */
static ADDRESS_MAP_START( vcs80_mem, AS_PROGRAM, 8, vcs80_state )
AM_RANGE(0x0000, 0x01ff) AM_ROM
static ADDRESS_MAP_START( vcs80_bd_mem, AS_PROGRAM, 8, vcs80_state )
AM_RANGE(0x0000, 0x01ff) AM_ROM AM_REGION(Z80_TAG, 0)
AM_RANGE(0x0400, 0x07ff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( vcs80_mem, AS_PROGRAM, 8, vcs80_state )
AM_RANGE(0x0000, 0xffff) AM_READWRITE(mem_r, mem_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( vcs80_io, AS_IO, 8, vcs80_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x04, 0x07) AM_READWRITE(pio_r, pio_w)
AM_RANGE(0x00, 0xff) AM_READWRITE(io_r, io_w)
ADDRESS_MAP_END
/* Input Ports */
@ -226,6 +230,13 @@ static MACHINE_CONFIG_START( vcs80, vcs80_state )
/* internal ram */
MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("1K")
/* bankdev */
MCFG_DEVICE_ADD("bdmem", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(vcs80_bd_mem)
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG)
MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000)
MACHINE_CONFIG_END
/* ROMs */
@ -235,23 +246,7 @@ ROM_START( vcs80 )
ROM_LOAD( "monitor.rom", 0x0000, 0x0200, CRC(44aff4e9) SHA1(3472e5a9357eaba3ed6de65dee2b1c6b29349dd2) )
ROM_END
/* Driver Initialization */
DIRECT_UPDATE_MEMBER(vcs80_state::vcs80_direct_update_handler)
{
/* _A0 is connected to PIO PB7 */
m_pio->port_b_write((!BIT(address, 0)) << 7);
return address;
}
DRIVER_INIT_MEMBER(vcs80_state,vcs80)
{
m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(&vcs80_state::vcs80_direct_update_handler, this));
m_maincpu->space(AS_IO).set_direct_update_handler(direct_update_delegate(&vcs80_state::vcs80_direct_update_handler, this));
}
/* System Drivers */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
COMP( 1983, vcs80, 0, 0, vcs80, vcs80, vcs80_state, vcs80, "Eckhard Schiller", "VCS-80", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND)
COMP( 1983, vcs80, 0, 0, vcs80, vcs80, driver_device, 0, "Eckhard Schiller", "VCS-80", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND)

View File

@ -11,6 +11,7 @@
#include "cpu/z80/z80daisy.h"
#include "machine/z80pio.h"
#include "machine/ram.h"
#include "machine/bankdev.h"
#define SCREEN_TAG "screen"
#define Z80_TAG "z80"
@ -25,7 +26,8 @@ public:
m_pio(*this, Z80PIO_TAG),
m_y0(*this, "Y0"),
m_y1(*this, "Y1"),
m_y2(*this, "Y2")
m_y2(*this, "Y2"),
m_bdmem(*this, "bdmem")
{ }
required_device<cpu_device> m_maincpu;
@ -33,6 +35,7 @@ public:
required_ioport m_y0;
required_ioport m_y1;
required_ioport m_y2;
required_device<address_map_bank_device> m_bdmem;
virtual void machine_start() override;
@ -40,8 +43,38 @@ public:
DECLARE_WRITE8_MEMBER( pio_w );
DECLARE_READ8_MEMBER( pio_pa_r );
DECLARE_WRITE8_MEMBER( pio_pb_w );
DECLARE_READ8_MEMBER( mem_r )
{
m_pio->port_b_write((!BIT(offset, 0)) << 7);
return m_bdmem->read8(space, offset);
}
DECLARE_WRITE8_MEMBER( mem_w )
{
m_pio->port_b_write((!BIT(offset, 0)) << 7);
m_bdmem->write8(space, offset, data);
}
DECLARE_READ8_MEMBER( io_r )
{
m_pio->port_b_write((!BIT(offset, 0)) << 7);
if ((offset >= 4) && (offset <= 7))
{
return pio_r(space, offset-4);
}
return 0xff;
}
DECLARE_WRITE8_MEMBER( io_w )
{
m_pio->port_b_write((!BIT(offset, 0)) << 7);
if ((offset >= 4) && (offset <= 7))
{
pio_w(space, offset-4, data);
}
}
DECLARE_DIRECT_UPDATE_MEMBER(vcs80_direct_update_handler);
/* keyboard state */
int m_keylatch;
int m_keyclk;