summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-06-22 18:21:28 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-06-22 18:29:16 -0400
commitaa191bfe6b78f6670647dd09e8c44f6c6f705484 (patch)
treeb1a0b7eb403ceca14b6831a1a09ed08c6525494f /src
parent137a83532ba2c0f012d89a507fe688a4bcd81075 (diff)
s2650: I/O modernization
- Replace fake S2650_SENSE_PORT address with line read callback (set_input_line should also work). There are still some doubts regarding whether VBLANK should be inverted in various drivers. - Replace fake S2650_CTRL_PORT and S2650_DATA_PORT addresses with... well, these aren't dedicated parallel ports, so they actually haven't gone away. They have, however, been moved to a new 1-bit address space, since the ports share the main data bus and are distinguished from each other by an address line.
Diffstat (limited to 'src')
-rw-r--r--src/devices/cpu/s2650/s2650.cpp67
-rw-r--r--src/devices/cpu/s2650/s2650.h24
-rw-r--r--src/devices/sound/tms5110.cpp2
-rw-r--r--src/devices/sound/tms5110.h2
-rw-r--r--src/mame/drivers/arcadia.cpp6
-rw-r--r--src/mame/drivers/binbug.cpp12
-rw-r--r--src/mame/drivers/cd2650.cpp12
-rw-r--r--src/mame/drivers/centiped.cpp4
-rw-r--r--src/mame/drivers/chaos.cpp6
-rw-r--r--src/mame/drivers/cvs.cpp44
-rw-r--r--src/mame/drivers/dkong.cpp42
-rw-r--r--src/mame/drivers/dolphunk.cpp9
-rw-r--r--src/mame/drivers/embargo.cpp5
-rw-r--r--src/mame/drivers/galaxia.cpp14
-rw-r--r--src/mame/drivers/galaxold.cpp30
-rw-r--r--src/mame/drivers/instruct.cpp13
-rw-r--r--src/mame/drivers/laserbat.cpp6
-rw-r--r--src/mame/drivers/lazercmd.cpp8
-rw-r--r--src/mame/drivers/malzak.cpp12
-rw-r--r--src/mame/drivers/meadows.cpp4
-rw-r--r--src/mame/drivers/pacman.cpp19
-rw-r--r--src/mame/drivers/phunsy.cpp17
-rw-r--r--src/mame/drivers/pipbug.cpp9
-rw-r--r--src/mame/drivers/quasar.cpp13
-rw-r--r--src/mame/drivers/quizshow.cpp10
-rw-r--r--src/mame/drivers/ravens.cpp12
-rw-r--r--src/mame/drivers/scramble.cpp8
-rw-r--r--src/mame/drivers/seabattl.cpp9
-rw-r--r--src/mame/drivers/subhuntr.cpp10
-rw-r--r--src/mame/drivers/vc4000.cpp6
-rw-r--r--src/mame/drivers/zac2650.cpp12
-rw-r--r--src/mame/drivers/zac_1.cpp18
-rw-r--r--src/mame/drivers/zac_2.cpp12
-rw-r--r--src/mame/includes/arcadia.h2
-rw-r--r--src/mame/includes/cvs.h2
-rw-r--r--src/mame/includes/vc4000.h2
-rw-r--r--src/mame/video/arcadia.cpp4
-rw-r--r--src/mame/video/vc4000.cpp4
38 files changed, 240 insertions, 251 deletions
diff --git a/src/devices/cpu/s2650/s2650.cpp b/src/devices/cpu/s2650/s2650.cpp
index 6f4dc66c016..702ed83906a 100644
--- a/src/devices/cpu/s2650/s2650.cpp
+++ b/src/devices/cpu/s2650/s2650.cpp
@@ -31,10 +31,12 @@ DEFINE_DEVICE_TYPE(S2650, s2650_device, "s2650", "S2650")
s2650_device::s2650_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: cpu_device(mconfig, S2650, tag, owner, clock)
, m_program_config("program", ENDIANNESS_LITTLE, 8, 15)
- , m_io_config("io", ENDIANNESS_LITTLE, 8, 9)
+ , m_io_config("io", ENDIANNESS_LITTLE, 8, 8)
+ , m_data_config("io", ENDIANNESS_LITTLE, 8, 1)
+ , m_sense_handler(*this)
, m_flag_handler(*this), m_intack_handler(*this)
, m_ppc(0), m_page(0), m_iar(0), m_ea(0), m_psl(0), m_psu(0), m_r(0)
- , m_halt(0), m_ir(0), m_irq_state(0), m_icount(0), m_program(nullptr), m_direct(nullptr), m_io(nullptr)
+ , m_halt(0), m_ir(0), m_irq_state(0), m_icount(0), m_direct(nullptr)
, m_debugger_temp(0)
{
memset(m_reg, 0x00, sizeof(m_reg));
@@ -48,6 +50,26 @@ offs_t s2650_device::disasm_disassemble(std::ostream &stream, offs_t pc, const u
}
+const address_space_config *s2650_device::memory_space_config(address_spacenum spacenum) const
+{
+ switch (spacenum)
+ {
+ // Memory-mapped: M/~IO=1
+ case AS_PROGRAM: return &m_program_config;
+
+ // Extended I/O: M/~IO=0 ADR13(E)=1 ADR14=Don't Care
+ case AS_IO: return &m_io_config;
+
+ // Non-extended I/O: M/~IO=0 ADR13(~NE)=0 ADR14=D/~C
+ // "The D/~C line can be used as a 1-bit device address in simple systems."
+ // -- Signetics 2650 Microprocessor databook, page 41
+ case AS_DATA: return &m_data_config;
+
+ default: return nullptr;
+ }
+}
+
+
/* condition code changes for a byte */
static const uint8_t ccc[0x200] = {
0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,
@@ -145,7 +167,7 @@ static const int S2650_relative[0x100] =
* RDMEM
* read memory byte from addr
***************************************************************/
-#define RDMEM(addr) m_program->read_byte(addr)
+#define RDMEM(addr) space(AS_PROGRAM).read_byte(addr)
inline void s2650_device::set_psu(uint8_t new_val)
{
@@ -156,6 +178,19 @@ inline void s2650_device::set_psu(uint8_t new_val)
m_flag_handler((new_val & FO) ? 1 : 0);
}
+inline uint8_t s2650_device::get_psu()
+{
+ if (!m_sense_handler.isnull())
+ {
+ if (m_sense_handler())
+ m_psu |= SI;
+ else
+ m_psu &= ~SI;
+ }
+
+ return m_psu;
+}
+
inline uint8_t s2650_device::get_sp()
{
return (m_psu & SP);
@@ -528,7 +563,7 @@ inline uint8_t s2650_device::ARG()
* Store source register to memory addr (CC unchanged)
***************************************************************/
#define M_STR(address,source) \
- m_program->write_byte(address, source)
+ space(AS_PROGRAM).write_byte(address, source)
/***************************************************************
* M_AND
@@ -673,7 +708,7 @@ inline uint8_t s2650_device::ARG()
***************************************************************/
#define M_SPSU() \
{ \
- R0 = ((m_psu & ~PSU34) | (m_io->read_byte(S2650_SENSE_PORT) ? SI : 0)); \
+ R0 = get_psu() & ~PSU34; \
SET_CC(R0); \
}
@@ -742,7 +777,7 @@ inline uint8_t s2650_device::ARG()
#define M_TPSU() \
{ \
uint8_t tpsu = ARG(); \
- uint8_t rpsu = (m_psu | (m_io->read_byte(S2650_SENSE_PORT) ? SI : 0)); \
+ uint8_t rpsu = get_psu(); \
m_psl &= ~CC; \
if( (rpsu & tpsu) != tpsu ) \
m_psl |= 0x80; \
@@ -787,12 +822,11 @@ static void BRA_EA(void) _BRA_EA()
void s2650_device::device_start()
{
+ m_sense_handler.resolve();
m_flag_handler.resolve_safe();
m_intack_handler.resolve_safe();
- m_program = &space(AS_PROGRAM);
- m_direct = &m_program->direct();
- m_io = &space(AS_IO);
+ m_direct = &space(AS_PROGRAM).direct();
save_item(NAME(m_ppc));
save_item(NAME(m_page));
@@ -913,9 +947,6 @@ void s2650_device::device_reset()
memset(m_reg, 0, sizeof(m_reg));
memset(m_ras, 0, sizeof(m_ras));
- m_program = &space(AS_PROGRAM);
- m_direct = &m_program->direct();
- m_io = &space(AS_IO);
m_psl = COM | WC;
/* force write */
m_psu = 0xff;
@@ -1095,7 +1126,7 @@ void s2650_device::execute_run()
case 0x32: /* REDC,2 */
case 0x33: /* REDC,3 */
m_icount -= 6;
- m_reg[m_r] = m_io->read_byte(S2650_CTRL_PORT);
+ m_reg[m_r] = space(AS_DATA).read_byte(S2650_CTRL_PORT);
SET_CC( m_reg[m_r] );
break;
@@ -1185,7 +1216,7 @@ void s2650_device::execute_run()
case 0x56: /* REDE,2 v */
case 0x57: /* REDE,3 v */
m_icount -= 9;
- m_reg[m_r] = m_io->read_byte( ARG() );
+ m_reg[m_r] = space(AS_IO).read_byte(ARG());
SET_CC(m_reg[m_r]);
break;
@@ -1244,7 +1275,7 @@ void s2650_device::execute_run()
case 0x72: /* REDD,2 */
case 0x73: /* REDD,3 */
m_icount -= 6;
- m_reg[m_r] = m_io->read_byte(S2650_DATA_PORT);
+ m_reg[m_r] = space(AS_DATA).read_byte(S2650_DATA_PORT);
SET_CC(m_reg[m_r]);
break;
@@ -1400,7 +1431,7 @@ void s2650_device::execute_run()
case 0xb2: /* WRTC,2 */
case 0xb3: /* WRTC,3 */
m_icount -= 6;
- m_io->write_byte(S2650_CTRL_PORT,m_reg[m_r]);
+ space(AS_DATA).write_byte(S2650_CTRL_PORT,m_reg[m_r]);
break;
case 0xb4: /* TPSU */
@@ -1486,7 +1517,7 @@ void s2650_device::execute_run()
case 0xd6: /* WRTE,2 v */
case 0xd7: /* WRTE,3 v */
m_icount -= 9;
- m_io->write_byte( ARG(), m_reg[m_r] );
+ space(AS_IO).write_byte( ARG(), m_reg[m_r] );
break;
case 0xd8: /* BIRR,0 (*)a */
@@ -1544,7 +1575,7 @@ void s2650_device::execute_run()
case 0xf2: /* WRTD,2 */
case 0xf3: /* WRTD,3 */
m_icount -= 6;
- m_io->write_byte(S2650_DATA_PORT, m_reg[m_r]);
+ space(AS_DATA).write_byte(S2650_DATA_PORT, m_reg[m_r]);
break;
case 0xf4: /* TMI,0 v */
diff --git a/src/devices/cpu/s2650/s2650.h b/src/devices/cpu/s2650/s2650.h
index 818fd57b300..119f7f9b38f 100644
--- a/src/devices/cpu/s2650/s2650.h
+++ b/src/devices/cpu/s2650/s2650.h
@@ -15,20 +15,21 @@ enum
S2650_HALT, S2650_SI, S2650_FO
};
-/* fake I/O space ports */
+// D/~C (A14) single-bit addresses for non-extended I/O ports
enum
{
- S2650_EXT_PORT = 0x00ff, /* M/~IO=0 D/~C=x E/~NE=1 */
- S2650_CTRL_PORT = 0x0100, /* M/~IO=0 D/~C=0 E/~NE=0 */
- S2650_DATA_PORT = 0x0101, /* M/~IO=0 D/~C=1 E/~NE=0 */
- S2650_SENSE_PORT = 0x0102 /* Fake Sense Line */
+ S2650_CTRL_PORT = 0,
+ S2650_DATA_PORT = 1
};
DECLARE_DEVICE_TYPE(S2650, s2650_device)
-#define MCFG_S2650_FLAG_HANDLER(_devcb) \
+#define MCFG_S2650_SENSE_INPUT(_devcb) \
+ devcb = &s2650_device::set_sense_handler(*device, DEVCB_##_devcb);
+
+#define MCFG_S2650_FLAG_OUTPUT(_devcb) \
devcb = &s2650_device::set_flag_handler(*device, DEVCB_##_devcb);
#define MCFG_S2650_INTACK_HANDLER(_devcb) \
@@ -41,6 +42,7 @@ public:
s2650_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// static configuration helpers
+ template <class Object> static devcb_base &set_sense_handler(device_t &device, Object &&cb) { return downcast<s2650_device &>(device).m_sense_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> static devcb_base &set_flag_handler(device_t &device, Object &&cb) { return downcast<s2650_device &>(device).m_flag_handler.set_callback(std::forward<Object>(cb)); }
template <class Object> static devcb_base &set_intack_handler(device_t &device, Object &&cb) { return downcast<s2650_device &>(device).m_intack_handler.set_callback(std::forward<Object>(cb)); }
@@ -58,10 +60,7 @@ protected:
virtual void execute_set_input(int inputnum, int state) override;
// device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override
- {
- return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : nullptr );
- }
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const override;
// device_state_interface overrides
virtual void state_import(const device_state_entry &entry) override;
@@ -76,7 +75,9 @@ protected:
private:
address_space_config m_program_config;
address_space_config m_io_config;
+ address_space_config m_data_config;
+ devcb_read_line m_sense_handler;
devcb_write_line m_flag_handler;
devcb_write_line m_intack_handler;
@@ -94,14 +95,13 @@ private:
uint8_t m_irq_state;
int m_icount;
- address_space *m_program;
direct_read_data *m_direct;
- address_space *m_io;
// For debugger
uint16_t m_debugger_temp;
inline void set_psu(uint8_t new_val);
+ inline uint8_t get_psu();
inline uint8_t get_sp();
inline void set_sp(uint8_t new_sp);
inline int check_irq_line();
diff --git a/src/devices/sound/tms5110.cpp b/src/devices/sound/tms5110.cpp
index 1c69dc8d2d8..09334d0f4bd 100644
--- a/src/devices/sound/tms5110.cpp
+++ b/src/devices/sound/tms5110.cpp
@@ -1198,7 +1198,7 @@ void tms5110_device::device_timer(emu_timer &timer, device_timer_id id, int para
m_romclk_hack_state = !m_romclk_hack_state;
}
-READ8_MEMBER( tms5110_device::romclk_hack_r )
+READ_LINE_MEMBER( tms5110_device::romclk_hack_r )
{
/* bring up to date first */
m_stream->update();
diff --git a/src/devices/sound/tms5110.h b/src/devices/sound/tms5110.h
index 5fe20f8fcc2..76f5c38ed51 100644
--- a/src/devices/sound/tms5110.h
+++ b/src/devices/sound/tms5110.h
@@ -63,7 +63,7 @@ public:
// this is only used by cvs.c
// it is not related at all to the speech generation and conflicts with the new ROM controller interface.
- DECLARE_READ8_MEMBER( romclk_hack_r );
+ DECLARE_READ_LINE_MEMBER( romclk_hack_r );
void set_frequency(int frequency);
diff --git a/src/mame/drivers/arcadia.cpp b/src/mame/drivers/arcadia.cpp
index 3238f72a48c..216b7431046 100644
--- a/src/mame/drivers/arcadia.cpp
+++ b/src/mame/drivers/arcadia.cpp
@@ -129,10 +129,6 @@ static ADDRESS_MAP_START( arcadia_mem, AS_PROGRAM, 8, arcadia_state )
AM_RANGE( 0x1800, 0x1aff) AM_READWRITE(video_r, video_w)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( arcadia_io, AS_IO, 8, arcadia_state )
- AM_RANGE( S2650_SENSE_PORT,S2650_SENSE_PORT) AM_READ(vsync_r)
-ADDRESS_MAP_END
-
/* The Emerson Arcadia 2001 controllers have 2 fire buttons on the side,
but actually they are wired to keypad button #2. The following definitions
are meant to document this fact. The keypad has the following layout:
@@ -477,7 +473,7 @@ static MACHINE_CONFIG_START( arcadia )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", S2650, 3580000/4) /* 0.895 MHz */
MCFG_CPU_PROGRAM_MAP(arcadia_mem)
- MCFG_CPU_IO_MAP(arcadia_io)
+ MCFG_S2650_SENSE_INPUT(READLINE(arcadia_state, vsync_r))
MCFG_CPU_PERIODIC_INT_DRIVER(arcadia_state, video_line, 262*60)
MCFG_QUANTUM_TIME(attotime::from_hz(60))
diff --git a/src/mame/drivers/binbug.cpp b/src/mame/drivers/binbug.cpp
index 0641116823a..833c6ddf004 100644
--- a/src/mame/drivers/binbug.cpp
+++ b/src/mame/drivers/binbug.cpp
@@ -79,7 +79,7 @@ public:
}
DECLARE_WRITE8_MEMBER(binbug_ctrl_w);
- DECLARE_READ8_MEMBER(binbug_serial_r);
+ DECLARE_READ_LINE_MEMBER(binbug_serial_r);
DECLARE_WRITE_LINE_MEMBER(binbug_serial_w);
DECLARE_QUICKLOAD_LOAD_MEMBER( binbug );
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -99,7 +99,7 @@ WRITE8_MEMBER( binbug_state::binbug_ctrl_w )
{
}
-READ8_MEMBER( binbug_state::binbug_serial_r )
+READ_LINE_MEMBER( binbug_state::binbug_serial_r )
{
return m_rs232->rxd_r() & (m_cass->input() < 0.03);
}
@@ -117,10 +117,9 @@ static ADDRESS_MAP_START(binbug_mem, AS_PROGRAM, 8, binbug_state)
AM_RANGE( 0x7c00, 0x7fff) AM_RAM AM_SHARE("attribram")
ADDRESS_MAP_END
-static ADDRESS_MAP_START(binbug_io, AS_IO, 8, binbug_state)
+static ADDRESS_MAP_START(binbug_data, AS_DATA, 8, binbug_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_WRITE(binbug_ctrl_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(binbug_serial_r)
ADDRESS_MAP_END
/* Input ports */
@@ -297,8 +296,9 @@ static MACHINE_CONFIG_START( binbug )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz)
MCFG_CPU_PROGRAM_MAP(binbug_mem)
- MCFG_CPU_IO_MAP(binbug_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(binbug_state, binbug_serial_w))
+ MCFG_CPU_DATA_MAP(binbug_data)
+ MCFG_S2650_SENSE_INPUT(READLINE(binbug_state, binbug_serial_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(binbug_state, binbug_serial_w))
/* video hardware */
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber())
diff --git a/src/mame/drivers/cd2650.cpp b/src/mame/drivers/cd2650.cpp
index 1cf80f8a3d5..88a3dba1c9c 100644
--- a/src/mame/drivers/cd2650.cpp
+++ b/src/mame/drivers/cd2650.cpp
@@ -54,7 +54,7 @@ public:
DECLARE_READ8_MEMBER(keyin_r);
DECLARE_WRITE8_MEMBER(beep_w);
void kbd_put(u8 data);
- DECLARE_READ8_MEMBER(cass_r);
+ DECLARE_READ_LINE_MEMBER(cass_r);
DECLARE_WRITE_LINE_MEMBER(cass_w);
DECLARE_QUICKLOAD_LOAD_MEMBER(cd2650);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@@ -81,7 +81,7 @@ WRITE_LINE_MEMBER( cd2650_state::cass_w )
m_cass->output(state ? -1.0 : +1.0);
}
-READ8_MEMBER( cd2650_state::cass_r )
+READ_LINE_MEMBER( cd2650_state::cass_r )
{
return (m_cass->input() > 0.03) ? 1 : 0;
}
@@ -102,8 +102,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( cd2650_io, AS_IO, 8, cd2650_state)
ADDRESS_MAP_UNMAP_HIGH
//AM_RANGE(0x80, 0x84) disk i/o
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cd2650_data, AS_DATA, 8, cd2650_state)
AM_RANGE(S2650_DATA_PORT,S2650_DATA_PORT) AM_READWRITE(keyin_r, beep_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(cass_r)
ADDRESS_MAP_END
/* Input ports */
@@ -262,7 +264,9 @@ static MACHINE_CONFIG_START( cd2650 )
MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz)
MCFG_CPU_PROGRAM_MAP(cd2650_mem)
MCFG_CPU_IO_MAP(cd2650_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(cd2650_state, cass_w))
+ MCFG_CPU_DATA_MAP(cd2650_data)
+ MCFG_S2650_SENSE_INPUT(READLINE(cd2650_state, cass_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(cd2650_state, cass_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/centiped.cpp b/src/mame/drivers/centiped.cpp
index 69116644ac6..ef519422deb 100644
--- a/src/mame/drivers/centiped.cpp
+++ b/src/mame/drivers/centiped.cpp
@@ -949,6 +949,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( bullsdrt_port_map, AS_IO, 8, centiped_state )
AM_RANGE(0x00, 0x00) AM_WRITE(bullsdrt_sprites_bank_w)
AM_RANGE(0x20, 0x3f) AM_WRITE(bullsdrt_tilesbank_w) AM_SHARE("bullsdrt_bank")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( bullsdrt_data_map, AS_DATA, 8, centiped_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(bullsdrt_data_port_r) AM_DEVWRITE("snsnd", sn76496_device, write)
ADDRESS_MAP_END
@@ -1848,6 +1851,7 @@ static MACHINE_CONFIG_START( bullsdrt )
MCFG_CPU_ADD("maincpu", S2650, 12096000/8)
MCFG_CPU_PROGRAM_MAP(bullsdrt_map)
MCFG_CPU_IO_MAP(bullsdrt_port_map)
+ MCFG_CPU_DATA_MAP(bullsdrt_data_map)
MCFG_ATARIVGEAROM_ADD("earom")
diff --git a/src/mame/drivers/chaos.cpp b/src/mame/drivers/chaos.cpp
index 7618cde825b..a7057551c45 100644
--- a/src/mame/drivers/chaos.cpp
+++ b/src/mame/drivers/chaos.cpp
@@ -72,7 +72,10 @@ static ADDRESS_MAP_START( chaos_io, AS_IO, 8, chaos_state )
AM_RANGE(0x90, 0x90) AM_READ(port90_r)
AM_RANGE(0x91, 0x91) AM_READ(port91_r)
AM_RANGE(0x92, 0x92) AM_DEVWRITE("terminal", generic_terminal_device, write)
- AM_RANGE(0x101, 0x103) AM_NOP // stops error log filling up while using debug
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( chaos_data, AS_DATA, 8, chaos_state )
+ AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_NOP // stops error log filling up while using debug
ADDRESS_MAP_END
/* Input ports */
@@ -143,6 +146,7 @@ static MACHINE_CONFIG_START( chaos )
MCFG_CPU_ADD("maincpu", S2650, XTAL_1MHz)
MCFG_CPU_PROGRAM_MAP(chaos_mem)
MCFG_CPU_IO_MAP(chaos_io)
+ MCFG_CPU_DATA_MAP(chaos_data)
/* video hardware */
MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
diff --git a/src/mame/drivers/cvs.cpp b/src/mame/drivers/cvs.cpp
index 80862607a38..060e30ea1c2 100644
--- a/src/mame/drivers/cvs.cpp
+++ b/src/mame/drivers/cvs.cpp
@@ -277,17 +277,12 @@ READ8_MEMBER(cvs_state::cvs_input_r)
*
*************************************/
#if 0
-READ8_MEMBER(cvs_state::cvs_393hz_clock_r)
+READ_LINE_MEMBER(cvs_state::cvs_393hz_clock_r)
{
- return m_cvs_393hz_clock ? 0x80 : 0;
+ return m_cvs_393hz_clock;
}
#endif
-READ8_MEMBER(cvs_state::tms_clock_r)
-{
- return m_tms5110->romclk_hack_r(space, 0) ? 0x80 : 0;
-}
-
TIMER_CALLBACK_MEMBER(cvs_state::cvs_393hz_timer_cb)
{
m_cvs_393hz_clock = !m_cvs_393hz_clock;
@@ -463,10 +458,12 @@ static ADDRESS_MAP_START( cvs_main_cpu_map, AS_PROGRAM, 8, cvs_state )
ADDRESS_MAP_END
static ADDRESS_MAP_START( cvs_main_cpu_io_map, AS_IO, 8, cvs_state )
- AM_RANGE(0x00, 0xff) AM_READ(cvs_input_r) AM_WRITE(cvs_scroll_w)
+ AM_RANGE(0x00, 0xff) AM_READWRITE(cvs_input_r, cvs_scroll_w)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( cvs_main_cpu_data_map, AS_DATA, 8, cvs_state )
+ AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(cvs_collision_r, audio_command_w)
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(cvs_collision_clear, cvs_video_fx_w)
- AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READ(cvs_collision_r) AM_WRITE(audio_command_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
/*************************************
@@ -486,12 +483,6 @@ static ADDRESS_MAP_START( cvs_dac_cpu_map, AS_PROGRAM, 8, cvs_state )
ADDRESS_MAP_END
-static ADDRESS_MAP_START( cvs_dac_cpu_io_map, AS_IO, 8, cvs_state )
- /* doesn't look like it is used at all */
- //AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(cvs_393hz_clock_r)
-ADDRESS_MAP_END
-
-
/*************************************
*
@@ -510,13 +501,6 @@ static ADDRESS_MAP_START( cvs_speech_cpu_map, AS_PROGRAM, 8, cvs_state )
ADDRESS_MAP_END
-static ADDRESS_MAP_START( cvs_speech_cpu_io_map, AS_IO, 8, cvs_state )
-/* romclk is much more probable, 393 Hz results in timing issues */
-// AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(cvs_393hz_clock_r)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(tms_clock_r)
-ADDRESS_MAP_END
-
-
/*************************************
*
* Standard CVS port definitions
@@ -583,9 +567,6 @@ static INPUT_PORTS_START( cvs )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x10, "5" )
PORT_DIPUNUSED( 0x20, IP_ACTIVE_HIGH ) /* can't tell if it's ACTIVE_HIGH or ACTIVE_LOW */
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
static INPUT_PORTS_START( cvs_registration )
@@ -980,16 +961,21 @@ static MACHINE_CONFIG_START( cvs )
MCFG_CPU_ADD("maincpu", S2650, XTAL_14_31818MHz/16)
MCFG_CPU_PROGRAM_MAP(cvs_main_cpu_map)
MCFG_CPU_IO_MAP(cvs_main_cpu_io_map)
+ MCFG_CPU_DATA_MAP(cvs_main_cpu_data_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cvs_state, cvs_main_cpu_interrupt)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(cvs_state, write_s2650_flag))
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(cvs_state, write_s2650_flag))
MCFG_CPU_ADD("audiocpu", S2650, XTAL_14_31818MHz/16)
MCFG_CPU_PROGRAM_MAP(cvs_dac_cpu_map)
- MCFG_CPU_IO_MAP(cvs_dac_cpu_io_map)
+ /* doesn't look like it is used at all */
+ //MCFG_S2650_SENSE_INPUT(READLINE(cvs_state, cvs_393hz_clock_r))
MCFG_CPU_ADD("speechcpu", S2650, XTAL_14_31818MHz/16)
MCFG_CPU_PROGRAM_MAP(cvs_speech_cpu_map)
- MCFG_CPU_IO_MAP(cvs_speech_cpu_io_map)
+ /* romclk is much more probable, 393 Hz results in timing issues */
+ //MCFG_S2650_SENSE_INPUT(READLINE(cvs_state, cvs_393hz_clock_r))
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("tms", tms5110_device, romclk_hack_r))
MCFG_MACHINE_START_OVERRIDE(cvs_state,cvs)
MCFG_MACHINE_RESET_OVERRIDE(cvs_state,cvs)
diff --git a/src/mame/drivers/dkong.cpp b/src/mame/drivers/dkong.cpp
index b8a96b4fa2a..83a4148b4e1 100644
--- a/src/mame/drivers/dkong.cpp
+++ b/src/mame/drivers/dkong.cpp
@@ -918,7 +918,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( s2650_io_map, AS_IO, 8, dkong_state )
AM_RANGE(0x00, 0x00) AM_READ(s2650_port0_r)
AM_RANGE(0x01, 0x01) AM_READ(s2650_port1_r)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( s2650_data_map, AS_DATA, 8, dkong_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_WRITE(s2650_data_w)
ADDRESS_MAP_END
@@ -1239,9 +1241,6 @@ static INPUT_PORTS_START( hunchbkd )
PORT_DIPSETTING( 0x08, "40000" )
PORT_DIPSETTING( 0x0c, "80000" )
- PORT_START("SENSE") /* Sense */
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_INCLUDE( dkong_config )
INPUT_PORTS_END
@@ -1283,9 +1282,6 @@ static INPUT_PORTS_START( shootgal )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_SERVICE( 0x80, IP_ACTIVE_HIGH )
- PORT_START("SENSE") /* Sense */
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_INCLUDE( dkong_config )
INPUT_PORTS_END
@@ -1316,9 +1312,6 @@ static INPUT_PORTS_START( sbdk )
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:!3" )
PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:!4" )
- PORT_START("SENSE") /* Sense */
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_INCLUDE( dkong_config )
INPUT_PORTS_END
@@ -1335,9 +1328,6 @@ static INPUT_PORTS_START( herbiedk )
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW1:!3" )
PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW1:!4" )
- PORT_START("SENSE") /* Sense */
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_INCLUDE( dkong_config )
INPUT_PORTS_END
@@ -1369,9 +1359,6 @@ static INPUT_PORTS_START( herodk )
PORT_DIPSETTING( 0x08, "2" )
PORT_DIPSETTING( 0x0c, "3" )
- PORT_START("SENSE") /* Sense */
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_INCLUDE( dkong_config )
INPUT_PORTS_END
@@ -1467,9 +1454,6 @@ static INPUT_PORTS_START( spclforc )
PORT_DIPSETTING( 0x80, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0xc0, DEF_STR( 1C_4C ) )
- PORT_START("SENSE") /* Sense */
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_INCLUDE( dkong_config )
INPUT_PORTS_END
@@ -1500,9 +1484,6 @@ static INPUT_PORTS_START( 8ballact )
PORT_DIPSETTING( 0x60, DEF_STR( 1C_4C ) )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:!8" )
- PORT_START("SENSE") /* Sense */
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_INCLUDE( dkong_config )
INPUT_PORTS_END
@@ -1846,7 +1827,9 @@ static MACHINE_CONFIG_DERIVED( s2650, dkong2b )
MCFG_CPU_REPLACE("maincpu", S2650, CLOCK_1H / 2) /* ??? */
MCFG_CPU_PROGRAM_MAP(s2650_map)
MCFG_CPU_IO_MAP(s2650_io_map)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(dkong_state, s2650_fo_w))
+ MCFG_CPU_DATA_MAP(s2650_data_map)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(dkong_state, s2650_fo_w))
MCFG_CPU_VBLANK_INT_DRIVER("screen", dkong_state, s2650_interrupt)
MCFG_DEVICE_MODIFY("dma8257")
@@ -1856,7 +1839,12 @@ static MACHINE_CONFIG_DERIVED( s2650, dkong2b )
MCFG_MACHINE_START_OVERRIDE(dkong_state,s2650)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( spclforc, s2650 )
+static MACHINE_CONFIG_DERIVED( herbiedk, s2650 )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT // ???
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( spclforc, herbiedk )
/* basic machine hardware */
MCFG_DEVICE_REMOVE("soundcpu")
@@ -3410,13 +3398,13 @@ GAME( 1984, dkong3b, dkong3, dkong3b, dkong3b, dkong_state, 0, ROT
GAME( 1983, pestplce, mario, pestplce, pestplce, dkong_state, 0, ROT180, "bootleg", "Pest Place", MACHINE_WRONG_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
/* 2650 based */
-GAME( 1984, herbiedk, huncholy, s2650, herbiedk, dkong_state, 0, ROT90, "Century Electronics / Seatongrove Ltd", "Herbie at the Olympics (DK conversion)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, herbiedk, huncholy, herbiedk, herbiedk, dkong_state, 0, ROT90, "Century Electronics / Seatongrove Ltd", "Herbie at the Olympics (DK conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, hunchbkd, hunchbak, s2650, hunchbkd, dkong_state, 0, ROT90, "Century Electronics", "Hunchback (DK conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, sbdk, superbik, s2650, sbdk, dkong_state, 0, ROT90, "Century Electronics", "Super Bike (DK conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, herodk, hero, s2650, herodk, dkong_state, herodk, ROT90, "Seatongrove Ltd (Crown license)", "Hero in the Castle of Doom (DK conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, herodku, hero, s2650, herodk, dkong_state, 0, ROT90, "Seatongrove Ltd (Crown license)", "Hero in the Castle of Doom (DK conversion not encrypted)", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, 8ballact, 0, s2650, 8ballact, dkong_state, 0, ROT90, "Seatongrove Ltd (Magic Electronics USA license)", "Eight Ball Action (DK conversion)", MACHINE_SUPPORTS_SAVE )
-GAME( 1984, 8ballact2, 8ballact, s2650, 8ballact, dkong_state, 0, ROT90, "Seatongrove Ltd (Magic Electronics USA license)", "Eight Ball Action (DKJr conversion)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, 8ballact, 0, herbiedk, 8ballact, dkong_state, 0, ROT90, "Seatongrove Ltd (Magic Electronics USA license)", "Eight Ball Action (DK conversion)", MACHINE_SUPPORTS_SAVE )
+GAME( 1984, 8ballact2, 8ballact, herbiedk, 8ballact, dkong_state, 0, ROT90, "Seatongrove Ltd (Magic Electronics USA license)", "Eight Ball Action (DKJr conversion)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, shootgal, 0, s2650, shootgal, dkong_state, 0, ROT180, "Seatongrove Ltd (Zaccaria license)", "Shooting Gallery", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1985, spclforc, 0, spclforc, spclforc, dkong_state, 0, ROT90, "Senko Industries (Magic Electronics Inc. license)", "Special Forces", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1985, spcfrcii, 0, spclforc, spclforc, dkong_state, 0, ROT90, "Senko Industries (Magic Electronics Inc. license)", "Special Forces II", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/dolphunk.cpp b/src/mame/drivers/dolphunk.cpp
index 9849a276b79..515291515c1 100644
--- a/src/mame/drivers/dolphunk.cpp
+++ b/src/mame/drivers/dolphunk.cpp
@@ -100,7 +100,7 @@ public:
, m_cass(*this, "cassette")
{ }
- DECLARE_READ8_MEMBER(cass_r);
+ DECLARE_READ_LINE_MEMBER(cass_r);
DECLARE_WRITE_LINE_MEMBER(cass_w);
DECLARE_READ8_MEMBER(port07_r);
DECLARE_WRITE8_MEMBER(port00_w);
@@ -117,7 +117,7 @@ private:
required_device<cassette_image_device> m_cass;
};
-READ8_MEMBER( dauphin_state::cass_r )
+READ_LINE_MEMBER( dauphin_state::cass_r )
{
return (m_cass->input() > 0.03) ? 1 : 0;
}
@@ -192,8 +192,6 @@ static ADDRESS_MAP_START( dauphin_io, AS_IO, 8, dauphin_state )
AM_RANGE(0x00, 0x03) AM_WRITE(port00_w) // 4-led display
AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // speaker (NOT a keyclick)
AM_RANGE(0x07, 0x07) AM_READ(port07_r) // pushbuttons
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(cass_r)
- AM_RANGE(0x102, 0x103) AM_NOP // stops error log filling up while using debug
ADDRESS_MAP_END
/* Input ports */
@@ -229,7 +227,8 @@ static MACHINE_CONFIG_START( dauphin )
MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz)
MCFG_CPU_PROGRAM_MAP(dauphin_mem)
MCFG_CPU_IO_MAP(dauphin_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(dauphin_state, cass_w))
+ MCFG_S2650_SENSE_INPUT(READLINE(dauphin_state, cass_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(dauphin_state, cass_w))
/* video hardware */
MCFG_DEFAULT_LAYOUT(layout_dolphunk)
diff --git a/src/mame/drivers/embargo.cpp b/src/mame/drivers/embargo.cpp
index 7252d429181..eb6583ed72f 100644
--- a/src/mame/drivers/embargo.cpp
+++ b/src/mame/drivers/embargo.cpp
@@ -176,6 +176,9 @@ static ADDRESS_MAP_START( main_io_map, AS_IO, 8, embargo_state )
AM_RANGE(0x01, 0x01) AM_READ_PORT("IN0") AM_WRITE(port_1_w)
AM_RANGE(0x02, 0x02) AM_READWRITE(dial_r, port_2_w)
AM_RANGE(0x03, 0x03) AM_WRITENOP /* always 0xFE */
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( main_data_map, AS_DATA, 8, embargo_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ_PORT("IN2")
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(input_port_bit_r, input_select_w)
ADDRESS_MAP_END
@@ -260,7 +263,7 @@ static MACHINE_CONFIG_START( embargo )
MCFG_CPU_ADD("maincpu", S2650, 625000)
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_IO_MAP(main_io_map)
-
+ MCFG_CPU_DATA_MAP(main_data_map)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/galaxia.cpp b/src/mame/drivers/galaxia.cpp
index f466b79b188..ae1ec98ffad 100644
--- a/src/mame/drivers/galaxia.cpp
+++ b/src/mame/drivers/galaxia.cpp
@@ -158,9 +158,11 @@ static ADDRESS_MAP_START( galaxia_io_map, AS_IO, 8, galaxia_state )
AM_RANGE(0x06, 0x06) AM_READ_PORT("DSW0")
AM_RANGE(0x07, 0x07) AM_READ_PORT("DSW1")
AM_RANGE(0xac, 0xac) AM_READNOP
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( galaxia_data_map, AS_DATA, 8, galaxia_state )
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(galaxia_collision_r, galaxia_ctrlport_w)
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(galaxia_collision_clear, galaxia_dataport_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
@@ -240,9 +242,6 @@ static INPUT_PORTS_START( galaxia )
PORT_DIPNAME( 0x80, 0x00, "UNK17" )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -289,8 +288,10 @@ static MACHINE_CONFIG_START( galaxia )
MCFG_CPU_ADD("maincpu", S2650, XTAL_14_31818MHz/8)
MCFG_CPU_PROGRAM_MAP(galaxia_mem_map)
MCFG_CPU_IO_MAP(galaxia_io_map)
+ MCFG_CPU_DATA_MAP(galaxia_data_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", galaxia_state, galaxia_interrupt)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(cvs_state, write_s2650_flag))
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(cvs_state, write_s2650_flag))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -331,8 +332,9 @@ static MACHINE_CONFIG_START( astrowar )
MCFG_CPU_ADD("maincpu", S2650, XTAL_14_31818MHz/8)
MCFG_CPU_PROGRAM_MAP(astrowar_mem_map)
MCFG_CPU_IO_MAP(galaxia_io_map)
+ MCFG_CPU_DATA_MAP(galaxia_data_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", galaxia_state, galaxia_interrupt)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(cvs_state, write_s2650_flag))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(cvs_state, write_s2650_flag))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/galaxold.cpp b/src/mame/drivers/galaxold.cpp
index e28080d5ac1..6f3c22eea61 100644
--- a/src/mame/drivers/galaxold.cpp
+++ b/src/mame/drivers/galaxold.cpp
@@ -669,7 +669,7 @@ static ADDRESS_MAP_START( spcwarp, AS_PROGRAM, 8, galaxold_state )
AM_RANGE(0x6000, 0x6fff) AM_ROM
ADDRESS_MAP_END
-static ADDRESS_MAP_START( hunchbkg_io, AS_IO, 8, galaxold_state )
+static ADDRESS_MAP_START( hunchbkg_data, AS_DATA, 8, galaxold_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READNOP // not used
ADDRESS_MAP_END
@@ -698,7 +698,6 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( drivfrcg_io, AS_IO, 8, galaxold_state )
AM_RANGE(0x00, 0x00) AM_READ(drivfrcg_port0_r)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE") AM_WRITENOP
ADDRESS_MAP_END
@@ -728,7 +727,6 @@ static ADDRESS_MAP_START( racknrol_io, AS_IO, 8, galaxold_state )
// AM_RANGE(0x1e, 0x1e) AM_WRITENOP
// AM_RANGE(0x1f, 0x1f) AM_WRITENOP
AM_RANGE(0x20, 0x3f) AM_WRITE(racknrol_tiles_bank_w) AM_SHARE("racknrol_tbank")
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
READ8_MEMBER(galaxold_state::hexpoola_data_port_r)
@@ -748,8 +746,10 @@ READ8_MEMBER(galaxold_state::hexpoola_data_port_r)
static ADDRESS_MAP_START( hexpoola_io, AS_IO, 8, galaxold_state )
AM_RANGE(0x00, 0x00) AM_READNOP
AM_RANGE(0x20, 0x3f) AM_WRITE(racknrol_tiles_bank_w) AM_SHARE("racknrol_tbank")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( hexpoola_data, AS_DATA, 8, galaxold_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(hexpoola_data_port_r) AM_DEVWRITE("snsnd", sn76496_device, write)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
READ8_MEMBER(galaxold_state::bullsdrtg_data_port_r)
@@ -773,11 +773,8 @@ READ8_MEMBER(galaxold_state::bullsdrtg_data_port_r)
return 0;
}
-static ADDRESS_MAP_START( bullsdrtg_io_map, AS_IO, 8, galaxold_state )
- AM_RANGE(0x00, 0x00) AM_READNOP
- AM_RANGE(0x20, 0x3f) AM_WRITE(racknrol_tiles_bank_w) AM_SHARE("racknrol_tbank")
+static ADDRESS_MAP_START( bullsdrtg_data_map, AS_IO, 8, galaxold_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(bullsdrtg_data_port_r) AM_DEVWRITE("snsnd", sn76496_device, write)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
/* Lives Dips are spread across two input ports */
@@ -1875,9 +1872,6 @@ static INPUT_PORTS_START( drivfrcg )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -1939,9 +1933,6 @@ static INPUT_PORTS_START( racknrol )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -2003,9 +1994,6 @@ static INPUT_PORTS_START( trvchlng )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -2392,6 +2380,7 @@ static MACHINE_CONFIG_START( drivfrcg )
MCFG_CPU_PROGRAM_MAP(drivfrcg)
MCFG_CPU_IO_MAP(drivfrcg_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", galaxold_state, hunchbks_vh_interrupt)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) // ???
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -2441,7 +2430,7 @@ static MACHINE_CONFIG_DERIVED( hunchbkg, galaxold_base )
MCFG_CPU_REPLACE("maincpu", S2650, PIXEL_CLOCK / 4)
MCFG_CPU_PROGRAM_MAP(hunchbkg)
- MCFG_CPU_IO_MAP(hunchbkg_io)
+ MCFG_CPU_DATA_MAP(hunchbkg_data)
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(galaxold_state,hunchbkg_irq_callback)
MCFG_DEVICE_MODIFY("7474_9m_1")
@@ -2477,6 +2466,7 @@ static MACHINE_CONFIG_START( racknrol )
MCFG_CPU_PROGRAM_MAP(racknrol)
MCFG_CPU_IO_MAP(racknrol_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", galaxold_state, hunchbks_vh_interrupt)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT // ???
/* video hardware */
MCFG_GFXDECODE_ADD("gfxdecode", "palette", galaxian)
@@ -2503,6 +2493,7 @@ static MACHINE_CONFIG_START( hexpoola )
MCFG_CPU_ADD("maincpu", S2650, PIXEL_CLOCK/2)
MCFG_CPU_PROGRAM_MAP(racknrol)
MCFG_CPU_IO_MAP(hexpoola_io)
+ MCFG_CPU_DATA_MAP(hexpoola_data)
MCFG_CPU_VBLANK_INT_DRIVER("screen", galaxold_state, hunchbks_vh_interrupt)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", galaxian)
@@ -2550,7 +2541,8 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( bullsdrtg, hexpoola )
MCFG_CPU_MODIFY("maincpu")
- MCFG_CPU_IO_MAP(bullsdrtg_io_map)
+ MCFG_CPU_DATA_MAP(bullsdrtg_data_map)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) // ???
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/instruct.cpp b/src/mame/drivers/instruct.cpp
index 1cbc607c521..b59b2faab31 100644
--- a/src/mame/drivers/instruct.cpp
+++ b/src/mame/drivers/instruct.cpp
@@ -69,7 +69,7 @@ public:
DECLARE_READ8_MEMBER(portfc_r);
DECLARE_READ8_MEMBER(portfd_r);
DECLARE_READ8_MEMBER(portfe_r);
- DECLARE_READ8_MEMBER(sense_r);
+ DECLARE_READ_LINE_MEMBER(sense_r);
DECLARE_WRITE_LINE_MEMBER(flag_w);
DECLARE_WRITE8_MEMBER(port_w);
DECLARE_WRITE8_MEMBER(portf8_w);
@@ -170,7 +170,7 @@ READ8_MEMBER( instruct_state::portfe_r )
// Read cassette and SENS key
-READ8_MEMBER( instruct_state::sense_r )
+READ_LINE_MEMBER( instruct_state::sense_r )
{
if (m_cassin)
return (m_cass->input() > 0.03) ? 1 : 0;
@@ -232,8 +232,11 @@ static ADDRESS_MAP_START( instruct_io, AS_IO, 8, instruct_state )
AM_RANGE(0xfc, 0xfc) AM_READ(portfc_r)
AM_RANGE(0xfd, 0xfd) AM_READ(portfd_r)
AM_RANGE(0xfe, 0xfe) AM_READ(portfe_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( instruct_data, AS_DATA, 8, instruct_state )
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(port_r,port_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(sense_r)
ADDRESS_MAP_END
/* Input ports */
@@ -410,8 +413,10 @@ static MACHINE_CONFIG_START( instruct )
MCFG_CPU_ADD("maincpu",S2650, XTAL_3_579545MHz / 4)
MCFG_CPU_PROGRAM_MAP(instruct_mem)
MCFG_CPU_IO_MAP(instruct_io)
+ MCFG_CPU_DATA_MAP(instruct_data)
MCFG_CPU_PERIODIC_INT_DRIVER(instruct_state, t2l_int, 120)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(instruct_state, flag_w))
+ MCFG_S2650_SENSE_INPUT(READLINE(instruct_state, sense_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(instruct_state, flag_w))
/* video hardware */
MCFG_DEFAULT_LAYOUT(layout_instruct)
diff --git a/src/mame/drivers/laserbat.cpp b/src/mame/drivers/laserbat.cpp
index 4bfe2148713..0911b7c4273 100644
--- a/src/mame/drivers/laserbat.cpp
+++ b/src/mame/drivers/laserbat.cpp
@@ -192,8 +192,6 @@ static ADDRESS_MAP_START( laserbat_io_map, AS_IO, 8, laserbat_state_base )
AM_RANGE(0x05, 0x05) AM_WRITE(wcov_w)
AM_RANGE(0x06, 0x06) AM_WRITE(ct_io_w)
AM_RANGE(0x07, 0x07) AM_WRITE(csound2_w)
-
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
@@ -278,9 +276,6 @@ static INPUT_PORTS_START( laserbat_base )
PORT_DIPNAME( 0x80, 0x80, "Coin C" ) PORT_DIPLOCATION("SW-2:8")
PORT_DIPSETTING( 0x00, DEF_STR(2C_1C) )
PORT_DIPSETTING( 0x80, DEF_STR(1C_1C) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -473,6 +468,7 @@ static MACHINE_CONFIG_START( laserbat_base )
MCFG_CPU_PROGRAM_MAP(laserbat_map)
MCFG_CPU_IO_MAP(laserbat_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", laserbat_state_base, laserbat_interrupt)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
// video hardware
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/lazercmd.cpp b/src/mame/drivers/lazercmd.cpp
index ee3cfc03341..8dd2c9f33f5 100644
--- a/src/mame/drivers/lazercmd.cpp
+++ b/src/mame/drivers/lazercmd.cpp
@@ -438,7 +438,7 @@ static ADDRESS_MAP_START( bbonk_map, AS_PROGRAM, 8, lazercmd_state )
ADDRESS_MAP_END
-static ADDRESS_MAP_START( lazercmd_portmap, AS_IO, 8, lazercmd_state )
+static ADDRESS_MAP_START( lazercmd_portmap, AS_DATA, 8, lazercmd_state )
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(lazercmd_ctrl_port_r, lazercmd_ctrl_port_w)
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(lazercmd_data_port_r, lazercmd_data_port_w)
ADDRESS_MAP_END
@@ -631,7 +631,7 @@ static MACHINE_CONFIG_START( lazercmd )
within the line and frame blanking period
thus requiring an extra loading of approx 3-5 */
MCFG_CPU_PROGRAM_MAP(lazercmd_map)
- MCFG_CPU_IO_MAP(lazercmd_portmap)
+ MCFG_CPU_DATA_MAP(lazercmd_portmap)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", lazercmd_state, lazercmd_timer, "screen", 0, 1)
/* video hardware */
@@ -670,7 +670,7 @@ static MACHINE_CONFIG_START( medlanes )
within the line and frame blanking period
thus requiring an extra loading of approx 3-5 */
MCFG_CPU_PROGRAM_MAP(medlanes_map)
- MCFG_CPU_IO_MAP(lazercmd_portmap)
+ MCFG_CPU_DATA_MAP(lazercmd_portmap)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", lazercmd_state, lazercmd_timer, "screen", 0, 1)
/* video hardware */
@@ -705,7 +705,7 @@ static MACHINE_CONFIG_START( bbonk )
within the line and frame blanking period
thus requiring an extra loading of approx 3-5 */
MCFG_CPU_PROGRAM_MAP(bbonk_map)
- MCFG_CPU_IO_MAP(lazercmd_portmap)
+ MCFG_CPU_DATA_MAP(lazercmd_portmap)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", lazercmd_state, bbonk_timer, "screen", 0, 1)
/* video hardware */
diff --git a/src/mame/drivers/malzak.cpp b/src/mame/drivers/malzak.cpp
index 1b83286f986..ce7ea3b9da2 100644
--- a/src/mame/drivers/malzak.cpp
+++ b/src/mame/drivers/malzak.cpp
@@ -187,8 +187,10 @@ static ADDRESS_MAP_START( malzak_io_map, AS_IO, 8, malzak_state )
AM_RANGE(0x80, 0x80) AM_READ_PORT("IN0") //controls
AM_RANGE(0xa0, 0xa0) AM_WRITENOP // echoes I/O port read from port 0x80
AM_RANGE(0xc0, 0xc0) AM_WRITE(portc0_w) // possibly playfield row selection for writing and/or collisions
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( malzak_data_map, AS_DATA, 8, malzak_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(s2650_data_r) // read upon death
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
@@ -210,9 +212,6 @@ static INPUT_PORTS_START( malzak )
PORT_START("POT")
/* No POT switch on Malzak as far as I know */
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
INPUT_PORTS_END
static INPUT_PORTS_START( malzak2 )
@@ -237,9 +236,6 @@ static INPUT_PORTS_START( malzak2 )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x03, "4" ) // Change settings
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
INPUT_PORTS_END
@@ -305,6 +301,8 @@ static MACHINE_CONFIG_START( malzak )
MCFG_CPU_ADD("maincpu", S2650, 3800000/4)
MCFG_CPU_PROGRAM_MAP(malzak_map)
MCFG_CPU_IO_MAP(malzak_io_map)
+ MCFG_CPU_DATA_MAP(malzak_data_map)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/meadows.cpp b/src/mame/drivers/meadows.cpp
index 32e492caa48..5ae137b4ac0 100644
--- a/src/mame/drivers/meadows.cpp
+++ b/src/mame/drivers/meadows.cpp
@@ -362,7 +362,7 @@ static ADDRESS_MAP_START( minferno_main_map, AS_PROGRAM, 8, meadows_state )
ADDRESS_MAP_END
-static ADDRESS_MAP_START( minferno_io_map, AS_IO, 8, meadows_state )
+static ADDRESS_MAP_START( minferno_data_map, AS_DATA, 8, meadows_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ_PORT("DSW2")
ADDRESS_MAP_END
@@ -652,7 +652,7 @@ static MACHINE_CONFIG_START( minferno )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", S2650, MASTER_CLOCK/24) /* 5MHz / 8 / 3 = 208.33 kHz */
MCFG_CPU_PROGRAM_MAP(minferno_main_map)
- MCFG_CPU_IO_MAP(minferno_io_map)
+ MCFG_CPU_DATA_MAP(minferno_data_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", meadows_state, minferno_interrupt)
/* video hardware */
diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp
index 0bb9ed34baa..4138b9d9c11 100644
--- a/src/mame/drivers/pacman.cpp
+++ b/src/mame/drivers/pacman.cpp
@@ -1443,29 +1443,23 @@ static ADDRESS_MAP_START( bigbucks_portmap, AS_IO, 8, pacman_state )
AM_RANGE(0x0000, 0xffff) AM_READ(bigbucks_question_r)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( s2650games_writeport, AS_IO, 8, pacman_state )
+static ADDRESS_MAP_START( s2650games_dataport, AS_DATA, 8, pacman_state )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_DEVWRITE("sn1", sn76496_device, write)
ADDRESS_MAP_END
static ADDRESS_MAP_START( drivfrcp_portmap, AS_IO, 8, pacman_state )
AM_RANGE(0x00, 0x00) AM_READNOP
AM_RANGE(0x01, 0x01) AM_READ(drivfrcp_port1_r)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
- AM_IMPORT_FROM(s2650games_writeport)
ADDRESS_MAP_END
static ADDRESS_MAP_START( _8bpm_portmap, AS_IO, 8, pacman_state )
AM_RANGE(0x00, 0x00) AM_READNOP
AM_RANGE(0x01, 0x01) AM_READ(_8bpm_port1_r)
AM_RANGE(0xe0, 0xe0) AM_READNOP
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
- AM_IMPORT_FROM(s2650games_writeport)
ADDRESS_MAP_END
static ADDRESS_MAP_START( porky_portmap, AS_IO, 8, pacman_state )
AM_RANGE(0x01, 0x01) AM_READ(porky_port1_r)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
- AM_IMPORT_FROM(s2650games_writeport)
ADDRESS_MAP_END
static ADDRESS_MAP_START( crushs_portmap, AS_IO, 8, pacman_state )
@@ -3172,9 +3166,6 @@ static INPUT_PORTS_START( drivfrcp )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -3224,9 +3215,6 @@ static INPUT_PORTS_START( 8bpm )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -3276,9 +3264,6 @@ static INPUT_PORTS_START( porky )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -3753,7 +3738,9 @@ static MACHINE_CONFIG_DERIVED( s2650games, pacman )
MCFG_DEVICE_REMOVE("maincpu")
MCFG_CPU_ADD("maincpu", S2650, MASTER_CLOCK/6/2) /* 2H */
MCFG_CPU_PROGRAM_MAP(s2650games_map)
+ MCFG_CPU_DATA_MAP(s2650games_dataport)
MCFG_CPU_VBLANK_INT_DRIVER("screen", pacman_state, s2650_interrupt)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT
MCFG_GFXDECODE_MODIFY("gfxdecode", s2650games)
diff --git a/src/mame/drivers/phunsy.cpp b/src/mame/drivers/phunsy.cpp
index 6bbd9db3656..aa2d7c662ad 100644
--- a/src/mame/drivers/phunsy.cpp
+++ b/src/mame/drivers/phunsy.cpp
@@ -57,7 +57,7 @@ public:
DECLARE_WRITE8_MEMBER(phunsy_ctrl_w);
DECLARE_WRITE8_MEMBER(phunsy_data_w);
void kbd_put(u8 data);
- DECLARE_READ8_MEMBER(cass_r);
+ DECLARE_READ_LINE_MEMBER(cass_r);
DECLARE_WRITE_LINE_MEMBER(cass_w);
DECLARE_QUICKLOAD_LOAD_MEMBER(phunsy);
DECLARE_PALETTE_INIT(phunsy);
@@ -80,7 +80,7 @@ WRITE_LINE_MEMBER( phunsy_state::cass_w )
m_cass->output(state ? -1.0 : +1.0);
}
-READ8_MEMBER( phunsy_state::cass_r )
+READ_LINE_MEMBER(phunsy_state::cass_r)
{
return (m_cass->input() > 0.03) ? 0 : 1;
}
@@ -96,9 +96,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( phunsy_io, AS_IO, 8, phunsy_state )
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE( S2650_CTRL_PORT, S2650_CTRL_PORT ) AM_WRITE( phunsy_ctrl_w )
- AM_RANGE( S2650_DATA_PORT,S2650_DATA_PORT) AM_READWRITE( phunsy_data_r, phunsy_data_w )
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(cass_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( phunsy_data, AS_DATA, 8, phunsy_state )
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_WRITE(phunsy_ctrl_w)
+ AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(phunsy_data_r, phunsy_data_w)
ADDRESS_MAP_END
@@ -332,7 +335,9 @@ static MACHINE_CONFIG_START( phunsy )
MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz)
MCFG_CPU_PROGRAM_MAP(phunsy_mem)
MCFG_CPU_IO_MAP(phunsy_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(phunsy_state, cass_w))
+ MCFG_CPU_DATA_MAP(phunsy_data)
+ MCFG_S2650_SENSE_INPUT(READLINE(phunsy_state, cass_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(phunsy_state, cass_w))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/pipbug.cpp b/src/mame/drivers/pipbug.cpp
index 8459ab89688..15d82290cb6 100644
--- a/src/mame/drivers/pipbug.cpp
+++ b/src/mame/drivers/pipbug.cpp
@@ -71,10 +71,9 @@ static ADDRESS_MAP_START(pipbug_mem, AS_PROGRAM, 8, pipbug_state)
AM_RANGE( 0x0400, 0x7fff) AM_RAM
ADDRESS_MAP_END
-static ADDRESS_MAP_START(pipbug_io, AS_IO, 8, pipbug_state)
+static ADDRESS_MAP_START(pipbug_data, AS_DATA, 8, pipbug_state)
// ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_WRITE(pipbug_ctrl_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READNOP // this has to return zero or the parameter to write_sense is ignored
ADDRESS_MAP_END
/* Input ports */
@@ -156,10 +155,10 @@ QUICKLOAD_LOAD_MEMBER( pipbug_state, pipbug )
static MACHINE_CONFIG_START( pipbug )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz)
+ MCFG_CPU_ADD("maincpu", S2650, XTAL_1MHz)
MCFG_CPU_PROGRAM_MAP(pipbug_mem)
- MCFG_CPU_IO_MAP(pipbug_io)
- MCFG_S2650_FLAG_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_CPU_DATA_MAP(pipbug_data)
+ MCFG_S2650_FLAG_OUTPUT(DEVWRITELINE("rs232", rs232_port_device, write_txd))
/* video hardware */
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
diff --git a/src/mame/drivers/quasar.cpp b/src/mame/drivers/quasar.cpp
index 3f431eae339..44c3da2218b 100644
--- a/src/mame/drivers/quasar.cpp
+++ b/src/mame/drivers/quasar.cpp
@@ -126,9 +126,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( quasar_io, AS_IO, 8, quasar_state )
AM_RANGE(0x00, 0x03) AM_READWRITE(quasar_IO_r, video_page_select_w)
AM_RANGE(0x08, 0x0b) AM_WRITE(io_page_select_w)
- AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(cvs_collision_clear) AM_WRITE(quasar_sh_command_w)
- AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READ(cvs_collision_r) AM_WRITENOP
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( quasar_data, AS_DATA, 8, quasar_state )
+ AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READ(cvs_collision_r) AM_WRITENOP
+ AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(cvs_collision_clear, quasar_sh_command_w)
ADDRESS_MAP_END
/*************************************
@@ -217,9 +219,6 @@ static INPUT_PORTS_START( quasar )
PORT_DIPSETTING( 0x80, "Stop at edge" )
PORT_DIPSETTING( 0x00, "Wrap Around" )
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_START("DSW2")
#if 0
PORT_DIPNAME( 0x0f, 0x00, "Noise to play" )
@@ -300,7 +299,9 @@ static MACHINE_CONFIG_START( quasar )
MCFG_CPU_ADD("maincpu", S2650, 14318000/4) /* 14 mhz crystal divide by 4 on board */
MCFG_CPU_PROGRAM_MAP(quasar)
MCFG_CPU_IO_MAP(quasar_io)
+ MCFG_CPU_DATA_MAP(quasar_data)
MCFG_CPU_VBLANK_INT_DRIVER("screen", quasar_state, quasar_interrupt)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
MCFG_CPU_ADD("soundcpu",I8035,6000000) /* 6MHz crystal divide by 15 in CPU */
MCFG_CPU_PROGRAM_MAP(sound_map)
diff --git a/src/mame/drivers/quizshow.cpp b/src/mame/drivers/quizshow.cpp
index 3bbbdc0e8a8..392b14db506 100644
--- a/src/mame/drivers/quizshow.cpp
+++ b/src/mame/drivers/quizshow.cpp
@@ -66,7 +66,7 @@ public:
DECLARE_WRITE8_MEMBER(quizshow_audio_w);
DECLARE_WRITE8_MEMBER(quizshow_video_disable_w);
DECLARE_READ8_MEMBER(quizshow_timing_r);
- DECLARE_READ8_MEMBER(quizshow_tape_signal_r);
+ DECLARE_READ_LINE_MEMBER(quizshow_tape_signal_r);
DECLARE_WRITE8_MEMBER(quizshow_main_ram_w);
DECLARE_CUSTOM_INPUT_MEMBER(quizshow_tape_headpos_r);
DECLARE_INPUT_CHANGED_MEMBER(quizshow_category_select);
@@ -206,10 +206,10 @@ READ8_MEMBER(quizshow_state::quizshow_timing_r)
return ret;
}
-READ8_MEMBER(quizshow_state::quizshow_tape_signal_r)
+READ_LINE_MEMBER(quizshow_state::quizshow_tape_signal_r)
{
// TODO (for now, hold INS to fastforward and it'll show garbage questions where D is always(?) the right answer)
- return machine().rand() & 0x80;
+ return machine().rand() & 1;
}
WRITE8_MEMBER(quizshow_state::quizshow_main_ram_w)
@@ -238,9 +238,6 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( quizshow_io_map, AS_IO, 8, quizshow_state )
ADDRESS_MAP_UNMAP_HIGH
-// AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_NOP // unused
-// AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_NOP // unused
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(quizshow_tape_signal_r)
ADDRESS_MAP_END
@@ -384,6 +381,7 @@ static MACHINE_CONFIG_START( quizshow )
MCFG_CPU_ADD("maincpu", S2650, MASTER_CLOCK / 16) // divider guessed
MCFG_CPU_PROGRAM_MAP(quizshow_mem_map)
MCFG_CPU_IO_MAP(quizshow_io_map)
+ MCFG_S2650_SENSE_INPUT(READLINE(quizshow_state, quizshow_tape_signal_r))
MCFG_TIMER_DRIVER_ADD_PERIODIC("clock_timer", quizshow_state, quizshow_clock_timer_cb, attotime::from_hz(PIXEL_CLOCK / (HTOTAL * 8))) // 8V
/* video hardware */
diff --git a/src/mame/drivers/ravens.cpp b/src/mame/drivers/ravens.cpp
index 51a5213bb08..ad15f31b212 100644
--- a/src/mame/drivers/ravens.cpp
+++ b/src/mame/drivers/ravens.cpp
@@ -102,7 +102,7 @@ public:
DECLARE_WRITE8_MEMBER(leds_w);
void kbd_put(u8 data);
DECLARE_MACHINE_RESET(ravens2);
- DECLARE_READ8_MEMBER(cass_r);
+ DECLARE_READ_LINE_MEMBER(cass_r);
DECLARE_WRITE_LINE_MEMBER(cass_w);
DECLARE_QUICKLOAD_LOAD_MEMBER( ravens );
uint8_t m_term_char;
@@ -117,7 +117,7 @@ WRITE_LINE_MEMBER( ravens_state::cass_w )
m_cass->output(state ? -1.0 : +1.0);
}
-READ8_MEMBER( ravens_state::cass_r )
+READ_LINE_MEMBER( ravens_state::cass_r )
{
return (m_cass->input() > 0.03) ? 1 : 0;
}
@@ -214,7 +214,6 @@ static ADDRESS_MAP_START( ravens_io, AS_IO, 8, ravens_state )
AM_RANGE(0x09, 0x09) AM_WRITE(leds_w) // LED output port
AM_RANGE(0x10, 0x15) AM_WRITE(display_w) // 6-led display
AM_RANGE(0x17, 0x17) AM_READ(port17_r) // pushbuttons
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(cass_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( ravens2_io, AS_IO, 8, ravens_state )
@@ -222,7 +221,6 @@ static ADDRESS_MAP_START( ravens2_io, AS_IO, 8, ravens_state )
AM_RANGE(0x07, 0x07) AM_READ(port07_r)
AM_RANGE(0x1b, 0x1b) AM_WRITE(port1b_w)
AM_RANGE(0x1c, 0x1c) AM_WRITE(port1c_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(cass_r)
ADDRESS_MAP_END
/* Input ports */
@@ -333,7 +331,8 @@ static MACHINE_CONFIG_START( ravens )
MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) // frequency is unknown
MCFG_CPU_PROGRAM_MAP(ravens_mem)
MCFG_CPU_IO_MAP(ravens_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(ravens_state, cass_w))
+ MCFG_S2650_SENSE_INPUT(READLINE(ravens_state, cass_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(ravens_state, cass_w))
/* video hardware */
MCFG_DEFAULT_LAYOUT(layout_ravens)
@@ -353,7 +352,8 @@ static MACHINE_CONFIG_START( ravens2 )
MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz) // frequency is unknown
MCFG_CPU_PROGRAM_MAP(ravens_mem)
MCFG_CPU_IO_MAP(ravens2_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(ravens_state, cass_w))
+ MCFG_S2650_SENSE_INPUT(READLINE(ravens_state, cass_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(ravens_state, cass_w))
MCFG_MACHINE_RESET_OVERRIDE(ravens_state, ravens2)
diff --git a/src/mame/drivers/scramble.cpp b/src/mame/drivers/scramble.cpp
index f076240bc59..c5da31e1ba4 100644
--- a/src/mame/drivers/scramble.cpp
+++ b/src/mame/drivers/scramble.cpp
@@ -338,7 +338,6 @@ READ8_MEMBER(scramble_state::hncholms_prot_r)
static ADDRESS_MAP_START( hunchbks_readport, AS_IO, 8, scramble_state )
AM_RANGE(0x00, 0x00) AM_READ(hncholms_prot_r)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
@@ -879,9 +878,6 @@ static INPUT_PORTS_START( hunchbks )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* protection check? */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* protection check? */
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
static INPUT_PORTS_START( hncholms )
@@ -923,9 +919,6 @@ static INPUT_PORTS_START( hncholms )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* protection check? */
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* protection check? */
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
static INPUT_PORTS_START( cavelon )
@@ -1548,6 +1541,7 @@ static MACHINE_CONFIG_DERIVED( hunchbks, scramble )
MCFG_CPU_REPLACE("maincpu", S2650, 18432000/6)
MCFG_CPU_PROGRAM_MAP(hunchbks_map)
MCFG_CPU_IO_MAP(hunchbks_readport)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
MCFG_CPU_VBLANK_INT_DRIVER("screen", scramble_state, hunchbks_vh_interrupt)
MCFG_SCREEN_MODIFY("screen")
diff --git a/src/mame/drivers/seabattl.cpp b/src/mame/drivers/seabattl.cpp
index 828b4d181db..963d41fbbed 100644
--- a/src/mame/drivers/seabattl.cpp
+++ b/src/mame/drivers/seabattl.cpp
@@ -267,10 +267,9 @@ static ADDRESS_MAP_START( seabattl_map, AS_PROGRAM, 8, seabattl_state )
AM_RANGE(0x1f00, 0x1fff) AM_MIRROR(0x2000) AM_DEVREADWRITE("s2636", s2636_device, read_data, write_data)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( seabattl_io_map, AS_IO, 8, seabattl_state )
+static ADDRESS_MAP_START( seabattl_data_map, AS_DATA, 8, seabattl_state )
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE( seabattl_collision_r, seabattl_control_w )
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE( seabattl_collision_clear_r, seabattl_collision_clear_w )
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
READ8_MEMBER(seabattl_state::seabattl_collision_r)
@@ -423,9 +422,6 @@ static INPUT_PORTS_START( seabattl )
PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_HIGH, "DS1:5")
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "DS1:8" )
PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -482,8 +478,9 @@ static MACHINE_CONFIG_START( seabattl )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", S2650, 14318180/4/2)
MCFG_CPU_PROGRAM_MAP(seabattl_map)
- MCFG_CPU_IO_MAP(seabattl_io_map)
+ MCFG_CPU_DATA_MAP(seabattl_data_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", seabattl_state, seabattl_interrupt)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
MCFG_DEVICE_ADD("s2636", S2636, 0)
MCFG_S2636_OFFSETS(-13, -29)
diff --git a/src/mame/drivers/subhuntr.cpp b/src/mame/drivers/subhuntr.cpp
index b9f6fc711b5..a905b3315aa 100644
--- a/src/mame/drivers/subhuntr.cpp
+++ b/src/mame/drivers/subhuntr.cpp
@@ -77,10 +77,12 @@ static ADDRESS_MAP_START( subhuntr_map, AS_PROGRAM, 8, subhuntr_state )
AM_RANGE(0x1c00, 0x1fff) AM_RAM
ADDRESS_MAP_END
-static ADDRESS_MAP_START( subhuntr_io_map, AS_IO, 8, subhuntr_state )
+static ADDRESS_MAP_START( subhuntr_io_map, AS_PROGRAM, 8, subhuntr_state )
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( subhuntr_data_map, AS_DATA, 8, subhuntr_state )
// AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE( , )
// AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE( , )
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
ADDRESS_MAP_END
/***************************************************************************
@@ -90,8 +92,6 @@ ADDRESS_MAP_END
***************************************************************************/
static INPUT_PORTS_START( subhuntr )
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen")
INPUT_PORTS_END
@@ -136,7 +136,9 @@ static MACHINE_CONFIG_START( subhuntr )
MCFG_CPU_ADD("maincpu", S2650, 14318180/4/2)
MCFG_CPU_PROGRAM_MAP(subhuntr_map)
MCFG_CPU_IO_MAP(subhuntr_io_map)
+ MCFG_CPU_DATA_MAP(subhuntr_data_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", subhuntr_state, subhuntr_interrupt)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank))
// MCFG_DEVICE_ADD("s2636", S2636, 0)
// MCFG_S2636_WORKRAM_SIZE(0x100)
diff --git a/src/mame/drivers/vc4000.cpp b/src/mame/drivers/vc4000.cpp
index bbdf29ea99c..d4004c5639b 100644
--- a/src/mame/drivers/vc4000.cpp
+++ b/src/mame/drivers/vc4000.cpp
@@ -192,10 +192,6 @@ static ADDRESS_MAP_START( vc4000_mem, AS_PROGRAM, 8, vc4000_state )
AM_RANGE(0x1700, 0x17ff) AM_READWRITE(vc4000_video_r, vc4000_video_w) AM_MIRROR(0x0800)
ADDRESS_MAP_END
-static ADDRESS_MAP_START( vc4000_io, AS_IO, 8, vc4000_state )
- AM_RANGE( S2650_SENSE_PORT,S2650_SENSE_PORT) AM_READ(vc4000_vsync_r)
-ADDRESS_MAP_END
-
static ADDRESS_MAP_START(elektor_mem, AS_PROGRAM, 8, vc4000_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x1fff)
@@ -532,7 +528,7 @@ static MACHINE_CONFIG_START( vc4000 )
// MCFG_CPU_ADD("maincpu", S2650, 865000) /* 3550000/4, 3580000/3, 4430000/3 */
MCFG_CPU_ADD("maincpu", S2650, 3546875/4)
MCFG_CPU_PROGRAM_MAP(vc4000_mem)
- MCFG_CPU_IO_MAP(vc4000_io)
+ MCFG_S2650_SENSE_INPUT(READLINE(vc4000_state, vc4000_vsync_r))
MCFG_CPU_PERIODIC_INT_DRIVER(vc4000_state, vc4000_video_line, 312*53) // GOLF needs this exact value
/* video hardware */
diff --git a/src/mame/drivers/zac2650.cpp b/src/mame/drivers/zac2650.cpp
index 8a401fe20cb..c4c3444f0f3 100644
--- a/src/mame/drivers/zac2650.cpp
+++ b/src/mame/drivers/zac2650.cpp
@@ -38,10 +38,6 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, zac2650_state )
AM_RANGE(0x1f00, 0x1fff) AM_READWRITE(zac_s2636_r, zac_s2636_w) AM_SHARE("s2636_0_ram")
ADDRESS_MAP_END
-static ADDRESS_MAP_START( port_map, AS_IO, 8, zac2650_state )
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ_PORT("SENSE")
-ADDRESS_MAP_END
-
static INPUT_PORTS_START( tinvader )
PORT_START("1E80")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
@@ -86,9 +82,6 @@ static INPUT_PORTS_START( tinvader )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_START("1E85")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
@@ -154,9 +147,6 @@ static INPUT_PORTS_START( dodgem )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("SENSE")
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
-
PORT_START("1E85")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) )
PORT_DIPSETTING( 0x00, DEF_STR( Very_Easy) )
@@ -244,7 +234,7 @@ static MACHINE_CONFIG_START( tinvader )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", S2650, 3800000/4)
MCFG_CPU_PROGRAM_MAP(main_map)
- MCFG_CPU_IO_MAP(port_map)
+ MCFG_S2650_SENSE_INPUT(DEVREADLINE("screen", screen_device, vblank)) MCFG_DEVCB_INVERT
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/zac_1.cpp b/src/mame/drivers/zac_1.cpp
index b8adb03a90f..940fa24dbae 100644
--- a/src/mame/drivers/zac_1.cpp
+++ b/src/mame/drivers/zac_1.cpp
@@ -46,7 +46,7 @@ public:
DECLARE_READ8_MEMBER(ctrl_r);
DECLARE_WRITE8_MEMBER(ctrl_w);
- DECLARE_READ8_MEMBER(serial_r);
+ DECLARE_READ_LINE_MEMBER(serial_r);
DECLARE_WRITE_LINE_MEMBER(serial_w);
DECLARE_READ8_MEMBER(reset_int_r);
DECLARE_WRITE8_MEMBER(reset_int_w);
@@ -77,8 +77,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( zac_1_io, AS_IO, 8, zac_1_state )
ADDRESS_MAP_UNMAP_HIGH
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( zac_1_data, AS_DATA, 8, zac_1_state )
+ ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(ctrl_r,ctrl_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(serial_r)
ADDRESS_MAP_END
static INPUT_PORTS_START( zac_1 )
@@ -177,7 +180,7 @@ WRITE8_MEMBER( zac_1_state::reset_int_w )
m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
}
-READ8_MEMBER( zac_1_state::serial_r )
+READ_LINE_MEMBER( zac_1_state::serial_r )
{
// from printer
return 0;
@@ -248,7 +251,9 @@ static MACHINE_CONFIG_START( zac_1 )
MCFG_CPU_ADD("maincpu", S2650, 6000000/2) // no xtal, just 2 chips forming a random oscillator
MCFG_CPU_PROGRAM_MAP(zac_1_map)
MCFG_CPU_IO_MAP(zac_1_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(zac_1_state, serial_w))
+ MCFG_CPU_DATA_MAP(zac_1_data)
+ MCFG_S2650_SENSE_INPUT(READLINE(zac_1_state, serial_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(zac_1_state, serial_w))
MCFG_NVRAM_ADD_0FILL("ram")
MCFG_TIMER_DRIVER_ADD_PERIODIC("zac_1_inttimer", zac_1_state, zac_1_inttimer, attotime::from_hz(200))
@@ -272,9 +277,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( locomotp_io, AS_IO, 8, zac_1_state)
ADDRESS_MAP_UNMAP_HIGH
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( locomotp_data, AS_DATA, 8, zac_1_state)
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(ctrl_r,ctrl_w)
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READ(reset_int_r)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(serial_r)
ADDRESS_MAP_END
READ8_MEMBER( zac_1_state::reset_int_r )
@@ -288,6 +295,7 @@ static MACHINE_CONFIG_DERIVED( locomotp, zac_1 )
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(locomotp_map)
MCFG_CPU_IO_MAP(locomotp_io)
+ MCFG_CPU_DATA_MAP(locomotp_data)
// also has sound cpu
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/zac_2.cpp b/src/mame/drivers/zac_2.cpp
index 6ebe78cf4d6..33b3333574e 100644
--- a/src/mame/drivers/zac_2.cpp
+++ b/src/mame/drivers/zac_2.cpp
@@ -27,7 +27,7 @@ public:
DECLARE_WRITE8_MEMBER(ctrl_w);
DECLARE_READ8_MEMBER(data_r);
DECLARE_WRITE8_MEMBER(data_w);
- DECLARE_READ8_MEMBER(serial_r);
+ DECLARE_READ_LINE_MEMBER(serial_r);
DECLARE_WRITE_LINE_MEMBER(serial_w);
uint8_t m_t_c;
uint8_t m_out_offs;
@@ -59,9 +59,11 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(zac_2_io, AS_IO, 8, zac_2_state)
ADDRESS_MAP_UNMAP_HIGH
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(zac_2_data, AS_DATA, 8, zac_2_state)
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(ctrl_r,ctrl_w)
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(data_r,data_w)
- AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(serial_r)
ADDRESS_MAP_END
static INPUT_PORTS_START( zac_2 )
@@ -162,7 +164,7 @@ WRITE8_MEMBER( zac_2_state::data_w )
// writes to lines HS0-7, no idea what they do
}
-READ8_MEMBER( zac_2_state::serial_r )
+READ_LINE_MEMBER( zac_2_state::serial_r )
{
// from printer
return 0;
@@ -206,7 +208,9 @@ static MACHINE_CONFIG_START( zac_2 )
MCFG_CPU_ADD("maincpu", S2650, 6000000/2)
MCFG_CPU_PROGRAM_MAP(zac_2_map)
MCFG_CPU_IO_MAP(zac_2_io)
- MCFG_S2650_FLAG_HANDLER(WRITELINE(zac_2_state, serial_w))
+ MCFG_CPU_DATA_MAP(zac_2_data)
+ MCFG_S2650_SENSE_INPUT(READLINE(zac_2_state, serial_r))
+ MCFG_S2650_FLAG_OUTPUT(WRITELINE(zac_2_state, serial_w))
MCFG_NVRAM_ADD_0FILL("ram")
MCFG_TIMER_DRIVER_ADD_PERIODIC("zac_2_inttimer", zac_2_state, zac_2_inttimer, attotime::from_hz(200))
diff --git a/src/mame/includes/arcadia.h b/src/mame/includes/arcadia.h
index f2171ce36b1..8b917835b25 100644
--- a/src/mame/includes/arcadia.h
+++ b/src/mame/includes/arcadia.h
@@ -49,7 +49,7 @@ public:
m_palette(*this, "palette"),
m_screen(*this, "screen") { }
- DECLARE_READ8_MEMBER(vsync_r);
+ DECLARE_READ_LINE_MEMBER(vsync_r);
DECLARE_READ8_MEMBER(video_r);
DECLARE_WRITE8_MEMBER(video_w);
int m_line;
diff --git a/src/mame/includes/cvs.h b/src/mame/includes/cvs.h
index 26910602969..9458591f536 100644
--- a/src/mame/includes/cvs.h
+++ b/src/mame/includes/cvs.h
@@ -115,7 +115,7 @@ public:
DECLARE_READ8_MEMBER(cvs_collision_r);
DECLARE_READ8_MEMBER(cvs_collision_clear);
DECLARE_WRITE8_MEMBER(cvs_scroll_w);
- DECLARE_READ8_MEMBER(tms_clock_r);
+ DECLARE_READ_LINE_MEMBER(tms_clock_r);
DECLARE_WRITE8_MEMBER(cvs_4_bit_dac_data_w);
DECLARE_WRITE8_MEMBER(cvs_unknown_w);
DECLARE_WRITE8_MEMBER(cvs_tms5110_ctl_w);
diff --git a/src/mame/includes/vc4000.h b/src/mame/includes/vc4000.h
index fd972d9da6f..99bf5156150 100644
--- a/src/mame/includes/vc4000.h
+++ b/src/mame/includes/vc4000.h
@@ -107,7 +107,7 @@ public:
DECLARE_READ8_MEMBER(vc4000_key_r);
DECLARE_READ8_MEMBER(vc4000_video_r);
DECLARE_WRITE8_MEMBER(vc4000_video_w);
- DECLARE_READ8_MEMBER(vc4000_vsync_r);
+ DECLARE_READ_LINE_MEMBER(vc4000_vsync_r);
DECLARE_READ8_MEMBER(elektor_cass_r);
DECLARE_WRITE8_MEMBER(elektor_cass_w);
vc4000_video_t m_video;
diff --git a/src/mame/video/arcadia.cpp b/src/mame/video/arcadia.cpp
index e124f8a04eb..7fe84a3a6c3 100644
--- a/src/mame/video/arcadia.cpp
+++ b/src/mame/video/arcadia.cpp
@@ -665,9 +665,9 @@ INTERRUPT_GEN_MEMBER(arcadia_state::video_line)
draw_sprites();
}
-READ8_MEMBER( arcadia_state::vsync_r )
+READ_LINE_MEMBER(arcadia_state::vsync_r)
{
- return m_line>=216 ? 0x80 : 0 ;
+ return m_line >= 216 ? ASSERT_LINE : CLEAR_LINE;
}
uint32_t arcadia_state::screen_update_arcadia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
diff --git a/src/mame/video/vc4000.cpp b/src/mame/video/vc4000.cpp
index 18af3fedbd3..c9db96a8b29 100644
--- a/src/mame/video/vc4000.cpp
+++ b/src/mame/video/vc4000.cpp
@@ -350,9 +350,9 @@ WRITE8_MEMBER( vc4000_state::vc4000_video_w )
}
-READ8_MEMBER( vc4000_state::vc4000_vsync_r )
+READ_LINE_MEMBER(vc4000_state::vc4000_vsync_r)
{
- return m_video.line >= VC4000_END_LINE ? 0x80 : 0;
+ return m_video.line >= VC4000_END_LINE ? ASSERT_LINE : CLEAR_LINE;
}
static const char led[20][12+1] =