From 23b782ac5c94d2c873ff0038517c2320c6cb9bf1 Mon Sep 17 00:00:00 2001 From: Fabio Priuli Date: Mon, 3 Jun 2013 18:26:37 +0000 Subject: [PATCH] (MESS) Modernized MC68328 (DragonBall) device. [Fabio Priuli] --- .gitattributes | 2 - src/mess/drivers/palm.c | 48 +- src/mess/includes/mc68328.h | 193 --- src/mess/machine/mc68328.c | 2824 ++++++++++++++++++----------------- src/mess/machine/mc68328.h | 647 +++++--- src/mess/mess.mak | 1 - src/mess/video/mc68328.c | 66 - 7 files changed, 1859 insertions(+), 1922 deletions(-) delete mode 100644 src/mess/includes/mc68328.h delete mode 100644 src/mess/video/mc68328.c diff --git a/.gitattributes b/.gitattributes index 3725ef56636..2ef9ed1bf1e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6599,7 +6599,6 @@ src/mess/includes/mbc55x.h svneol=native#text/plain src/mess/includes/mbee.h svneol=native#text/plain src/mess/includes/mboard.h svneol=native#text/plain src/mess/includes/mc1000.h svneol=native#text/plain -src/mess/includes/mc68328.h svneol=native#text/plain src/mess/includes/mc80.h svneol=native#text/plain src/mess/includes/micronic.h svneol=native#text/plain src/mess/includes/microtan.h svneol=native#text/plain @@ -8123,7 +8122,6 @@ src/mess/video/lviv.c svneol=native#text/plain src/mess/video/mac.c svneol=native#text/plain src/mess/video/mbc55x.c svneol=native#text/plain src/mess/video/mbee.c svneol=native#text/plain -src/mess/video/mc68328.c svneol=native#text/plain src/mess/video/mc80.c svneol=native#text/plain src/mess/video/microtan.c svneol=native#text/plain src/mess/video/mikro80.c svneol=native#text/plain diff --git a/src/mess/drivers/palm.c b/src/mess/drivers/palm.c index d2235d6f2af..2cc3d64e2b7 100644 --- a/src/mess/drivers/palm.c +++ b/src/mess/drivers/palm.c @@ -11,12 +11,14 @@ #include "emu.h" #include "cpu/m68000/m68000.h" -#include "includes/mc68328.h" +#include "machine/mc68328.h" +#include "machine/ram.h" #include "sound/dac.h" #include "debugger.h" -#include "machine/ram.h" #include "rendlay.h" +#define MC68328_TAG "dragonball" + class palm_state : public driver_device { public: @@ -35,7 +37,6 @@ public: required_device m_lsi; required_device m_dac; required_device m_ram; - // mc68328 needs modernising //DECLARE_WRITE8_MEMBER(palm_dac_transition); //DECLARE_WRITE8_MEMBER(palm_port_f_out); //DECLARE_READ8_MEMBER(palm_port_c_in); @@ -54,6 +55,7 @@ public: DECLARE_WRITE16_MEMBER(palm_spim_out); DECLARE_READ16_MEMBER(palm_spim_in); DECLARE_WRITE8_MEMBER(palm_dac_transition); + DECLARE_WRITE_LINE_MEMBER(palm_spim_exchange); required_ioport m_io_penx; required_ioport m_io_peny; @@ -73,16 +75,15 @@ INPUT_CHANGED_MEMBER(palm_state::pen_check) UINT8 button = m_io_penb->read(); if(button) - mc68328_set_penirq_line(m_lsi, 1); + m_lsi->set_penirq_line(1); else - mc68328_set_penirq_line(m_lsi, 0); + m_lsi->set_penirq_line(0); } INPUT_CHANGED_MEMBER(palm_state::button_check) { UINT8 button_state = m_io_portd->read(); - - mc68328_set_port_d_lines(m_lsi, button_state, (int)(FPTR)param); + m_lsi->set_port_d_lines(button_state, (int)(FPTR)param); } WRITE8_MEMBER(palm_state::palm_port_f_out) @@ -110,20 +111,19 @@ READ16_MEMBER(palm_state::palm_spim_in) return m_spim_data; } -static void palm_spim_exchange( device_t *device ) +WRITE_LINE_MEMBER(palm_state::palm_spim_exchange) { - palm_state *state = device->machine().driver_data(); - UINT8 x = state->m_io_penx->read(); - UINT8 y = state->m_io_peny->read(); + UINT8 x = m_io_penx->read(); + UINT8 y = m_io_peny->read(); - switch( state->m_port_f_latch & 0x0f ) + switch (m_port_f_latch & 0x0f) { case 0x06: - state->m_spim_data = (0xff - x) * 2; + m_spim_data = (0xff - x) * 2; break; case 0x09: - state->m_spim_data = (0xff - y) * 2; + m_spim_data = (0xff - y) * 2; break; } } @@ -159,7 +159,7 @@ void palm_state::machine_reset() static ADDRESS_MAP_START(palm_map, AS_PROGRAM, 16, palm_state) AM_RANGE(0xc00000, 0xe07fff) AM_ROM AM_REGION("bios", 0) - AM_RANGE(0xfff000, 0xffffff) AM_DEVREADWRITE_LEGACY(MC68328_TAG, mc68328_r, mc68328_w) + AM_RANGE(0xfff000, 0xffffff) AM_DEVREADWRITE(MC68328_TAG, mc68328_device, read, write) ADDRESS_MAP_END @@ -176,6 +176,14 @@ WRITE8_MEMBER(palm_state::palm_dac_transition) /*************************************************************************** MACHINE DRIVERS ***************************************************************************/ + +/* THIS IS PRETTY MUCH TOTALLY WRONG AND DOESN'T REFLECT THE MC68328'S INTERNAL FUNCTIONALITY AT ALL! */ +PALETTE_INIT( palm ) +{ + palette_set_color_rgb(machine, 0, 0x7b, 0x8c, 0x5a); + palette_set_color_rgb(machine, 1, 0x00, 0x00, 0x00); +} + static MC68328_INTERFACE(palm_dragonball_iface) { "maincpu", @@ -206,7 +214,7 @@ static MC68328_INTERFACE(palm_dragonball_iface) DEVCB_DRIVER_MEMBER16(palm_state,palm_spim_out), DEVCB_DRIVER_MEMBER16(palm_state,palm_spim_in), - palm_spim_exchange + DEVCB_DRIVER_LINE_MEMBER(palm_state, palm_spim_exchange) }; @@ -219,15 +227,13 @@ static MACHINE_CONFIG_START( palm, palm_state ) MCFG_SCREEN_VBLANK_TIME( ATTOSECONDS_IN_USEC(1260) ) MCFG_QUANTUM_TIME( attotime::from_hz(60) ) - /* video hardware */ MCFG_VIDEO_ATTRIBUTES( VIDEO_UPDATE_BEFORE_VBLANK ) MCFG_SCREEN_SIZE( 160, 220 ) MCFG_SCREEN_VISIBLE_AREA( 0, 159, 0, 219 ) - MCFG_VIDEO_START( mc68328 ) - MCFG_SCREEN_UPDATE_STATIC( mc68328 ) + MCFG_SCREEN_UPDATE_DEVICE(MC68328_TAG, mc68328_device, screen_update) MCFG_PALETTE_LENGTH( 2 ) - MCFG_PALETTE_INIT( mc68328 ) + MCFG_PALETTE_INIT( palm ) MCFG_DEFAULT_LAYOUT(layout_lcd) /* audio hardware */ @@ -235,7 +241,7 @@ static MACHINE_CONFIG_START( palm, palm_state ) MCFG_SOUND_ADD("dac", DAC, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) - MCFG_MC68328_ADD( palm_dragonball_iface ) // lsi device + MCFG_MC68328_ADD( MC68328_TAG, palm_dragonball_iface ) // lsi device MACHINE_CONFIG_END static INPUT_PORTS_START( palm ) diff --git a/src/mess/includes/mc68328.h b/src/mess/includes/mc68328.h deleted file mode 100644 index 390c23a73c7..00000000000 --- a/src/mess/includes/mc68328.h +++ /dev/null @@ -1,193 +0,0 @@ -/********************************************************************** - - Motorola 68328 ("DragonBall") System-on-a-Chip implementation - - By MooglyGuy - contact mooglyguy@gmail.com with licensing and usage questions. - -**********************************************************************/ - -/***************************************************************************************************************** - - P P P P P P P P P P P P P P - E E E E E E E J J J J J J J - 1 2 3 4 5 6 7 0 1 2 3 4 5 6 - D D D D D / / / / / / / / / / / / / / - 3 4 5 6 7 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! - / / / / / ! ! C C C C C C C C C C C C C C C - P V P P P P D D G D D D D T T L U V S S S S S S S S G S S S S S S S - B C B B B B D D 1 1 N 1 1 1 1 M C W W C A A A A B B B B N C C C C D D D - 3 C 4 5 6 7 8 9 0 1 D 2 3 4 5 S K E E C 0 1 2 3 0 1 2 3 D 0 1 2 3 0 1 2 - | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - +-------------------------------------------------------------------------------+ - | | - | | - | | - | | - | | - D2/PB2--| |--PJ7/!CSD3 - D1/PB1--| |--VCC - D0/PB0--| |--PD0/!KBD0/!INT0 - TDO--| |--PD1/!KBD1/!INT1 - TDI--| |--PD2/!KBD2/!INT2 - GND--| |--PD3/!KBD3/!INT3 - !OE--| |--PD4/!KBD4/!INT4 - !UDS/PC1--| |--PD5/!KBD5/!INT5 - !AS--| |--PD6/!KBD6/!INT6 - A0--| |--PD7/!KBD7/!INT7 - !LDS--| |--GND - R/!W--| |--LD0 - !DTACK/PC5--| |--LD1 - !RESET--| |--LD2 - VCC--| |--LD3 - !WE/PC6--| |--LFRM - !JTAGRST--| |--LLP - BBUSW--| MC68328PV |--LCLK - A1--| TOP VIEW |--LACD - A2--| |--VCC - A3--| |--PK0/SPMTXD0 - A4--| |--PK1/SPMRXD0 - A5--| |--PK2/SPMCLK0 - A6--| |--PK3/SPSEN - GND--| |--PK4/SPSRXD1 - A7--| |--PK5/SPSCLK1 - A8--| |--PK6/!CE2 - A9--| |--PK7/!CE1 - A10--| |--GND - A11--| |--PM0/!CTS - A12--| |--PM1/!RTS - A13--| |--PM2/!IRQ6 - A14--| |--PM3/!IRQ3 - VCC--| |--PM4/!IRQ2 - A15--| |--PM5/!IRQ1 - A16/PA0--| |--PM6/!PENIRQ - | | - | _ | - | (_) | - |\ | - | \ | - +-------------------------------------------------------------------------------+ - | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - P P P P P G P P P P P P P P V P P P P P P P P G P P P V C G P P P E X P - A A A A A N A A F F F F F F C F F G G G G G G N G G C C L N C M L X T L - 1 2 3 4 5 D 6 7 0 1 2 3 4 5 C 6 7 7 6 5 4 3 2 D 1 0 0 C K D 4 7 L T A L - / / / / / / / / / / / / / / / / / / / / / / / / O / / G A L V - A A A A A A A A A A A A A A A R T ! T ! P R T M ! U N L C - 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 T I T I T W X X O I A D C - 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 C N O N O M D D C R R - O 1 U 2 U O L Q T - T T K 7 G - 1 2 P - I - O - - Figure 12-1. MC68328 144-Lead Plastic Thin-Quad Flat Pack Pin Assignment - - Source: MC68328 (DragonBall)(tm) Integrated Processor User's Manual - -*****************************************************************************************************************/ - -#ifndef __MC68328_H_ -#define __MC68328_H_ - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -struct mc68328_interface -{ - const char *m68k_cpu_tag; - - devcb_write8 out_port_a_func; /* 8-bit output */ - devcb_write8 out_port_b_func; /* 8-bit output */ - devcb_write8 out_port_c_func; /* 8-bit output */ - devcb_write8 out_port_d_func; /* 8-bit output */ - devcb_write8 out_port_e_func; /* 8-bit output */ - devcb_write8 out_port_f_func; /* 8-bit output */ - devcb_write8 out_port_g_func; /* 8-bit output */ - devcb_write8 out_port_j_func; /* 8-bit output */ - devcb_write8 out_port_k_func; /* 8-bit output */ - devcb_write8 out_port_m_func; /* 8-bit output */ - - devcb_read8 in_port_a_func; /* 8-bit input */ - devcb_read8 in_port_b_func; /* 8-bit input */ - devcb_read8 in_port_c_func; /* 8-bit input */ - devcb_read8 in_port_d_func; /* 8-bit input */ - devcb_read8 in_port_e_func; /* 8-bit input */ - devcb_read8 in_port_f_func; /* 8-bit input */ - devcb_read8 in_port_g_func; /* 8-bit input */ - devcb_read8 in_port_j_func; /* 8-bit input */ - devcb_read8 in_port_k_func; /* 8-bit input */ - devcb_read8 in_port_m_func; /* 8-bit input */ - - devcb_write8 out_pwm_func; /* 1-bit output */ - - devcb_write16 out_spim_func; /* 16-bit output */ - devcb_read16 in_spim_func; /* 16-bit input */ - void (*spim_xch_trigger)( device_t *device ); /* SPIM exchange trigger */ -}; -#define MC68328_INTERFACE(name) const mc68328_interface (name)= - -#define MC68328_TAG "dragonball" - -/*************************************************************************** - DEVICE CONFIGURATION MACROS -***************************************************************************/ - -#define MCFG_MC68328_ADD(_intrf) \ - MCFG_DEVICE_ADD("dragonball", MC68328, 0) \ - MCFG_DEVICE_CONFIG(_intrf) - -/*----------- defined in machine/mc68328.c -----------*/ - -/*************************************************************************** - READ/WRITE HANDLERS -***************************************************************************/ - -DECLARE_WRITE16_DEVICE_HANDLER( mc68328_w ); -DECLARE_READ16_DEVICE_HANDLER( mc68328_r ); - - -/*************************************************************************** - EXTERNAL I/O LINES -***************************************************************************/ - -void mc68328_set_penirq_line(device_t *device, int state); -void mc68328_set_port_d_lines(device_t *device, UINT8 state, int bit); - -/*************************************************************************** - DEVICE INTERFACE -***************************************************************************/ - -class mc68328_device : public device_t -{ -public: - mc68328_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - ~mc68328_device() { global_free(m_token); } - - // access to legacy token - void *token() const { assert(m_token != NULL); return m_token; } -protected: - // device-level overrides - virtual void device_config_complete(); - virtual void device_start(); - virtual void device_reset(); -private: - // internal state - void *m_token; -}; - -extern const device_type MC68328; - - -/*----------- defined in video/mc68328.c -----------*/ - -/*************************************************************************** - VIDEO INTERFACE -***************************************************************************/ - -PALETTE_INIT( mc68328 ); -VIDEO_START( mc68328 ); -SCREEN_UPDATE_IND16( mc68328 ); - -#endif // __MC68328_H_ diff --git a/src/mess/machine/mc68328.c b/src/mess/machine/mc68328.c index fc9edc078a0..732f8839661 100644 --- a/src/mess/machine/mc68328.c +++ b/src/mess/machine/mc68328.c @@ -9,159 +9,387 @@ #include "emu.h" #include "cpu/m68000/m68000.h" -#include "includes/mc68328.h" -#include "mc68328.h" +#include "machine/mc68328.h" +#include "machine/ram.h" #define VERBOSE_LEVEL (0) INLINE void verboselog(running_machine &machine, int n_level, const char *s_fmt, ...) { - if( VERBOSE_LEVEL >= n_level ) + if (VERBOSE_LEVEL >= n_level) { va_list v; - char buf[ 32768 ]; - va_start( v, s_fmt ); - vsprintf( buf, s_fmt, v ); - va_end( v ); - logerror( "%s: %s", machine.describe_context(), buf ); + char buf[32768]; + va_start(v, s_fmt); + vsprintf(buf, s_fmt, v); + va_end(v); + logerror("%s: %s", machine.describe_context(), buf); } } -static void mc68328_set_interrupt_line(device_t *device, UINT32 line, UINT32 active) +const device_type MC68328 = &device_creator; + + +mc68328_device::mc68328_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MC68328, "Motorola MC68328 (DragonBall) Integrated Processor", tag, owner, clock) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - device_t *cpu = device->machine().device(mc68328->iface->m68k_cpu_tag); +} - if(active) +//------------------------------------------------- +// device_config_complete - perform any +// operations now that the configuration is +// complete +//------------------------------------------------- + +void mc68328_device::device_config_complete() +{ + // inherit a copy of the static data + const mc68328_interface *intf = reinterpret_cast(static_config()); + if (intf != NULL) + *static_cast(this) = *intf; + + // or initialize to defaults if none provided + else { - mc68328->regs.ipr |= line; + memset(&m_out_port_a_func, 0, sizeof(m_out_port_a_func)); + memset(&m_out_port_b_func, 0, sizeof(m_out_port_b_func)); + memset(&m_out_port_c_func, 0, sizeof(m_out_port_c_func)); + memset(&m_out_port_d_func, 0, sizeof(m_out_port_d_func)); + memset(&m_out_port_e_func, 0, sizeof(m_out_port_e_func)); + memset(&m_out_port_f_func, 0, sizeof(m_out_port_f_func)); + memset(&m_out_port_g_func, 0, sizeof(m_out_port_g_func)); + memset(&m_out_port_j_func, 0, sizeof(m_out_port_j_func)); + memset(&m_out_port_k_func, 0, sizeof(m_out_port_k_func)); + memset(&m_out_port_m_func, 0, sizeof(m_out_port_m_func)); + memset(&m_in_port_a_func, 0, sizeof(m_in_port_a_func)); + memset(&m_in_port_b_func, 0, sizeof(m_in_port_b_func)); + memset(&m_in_port_c_func, 0, sizeof(m_in_port_c_func)); + memset(&m_in_port_d_func, 0, sizeof(m_in_port_d_func)); + memset(&m_in_port_e_func, 0, sizeof(m_in_port_e_func)); + memset(&m_in_port_f_func, 0, sizeof(m_in_port_f_func)); + memset(&m_in_port_g_func, 0, sizeof(m_in_port_g_func)); + memset(&m_in_port_j_func, 0, sizeof(m_in_port_j_func)); + memset(&m_in_port_k_func, 0, sizeof(m_in_port_k_func)); + memset(&m_in_port_m_func, 0, sizeof(m_in_port_m_func)); + memset(&m_out_pwm_func, 0, sizeof(m_out_pwm_func)); + memset(&m_out_spim_func, 0, sizeof(m_out_spim_func)); + memset(&m_in_spim_func, 0, sizeof(m_in_spim_func)); + memset(&m_spim_xch_trigger_func, 0, sizeof(m_spim_xch_trigger_func)); + m68k_cpu_tag = ""; + } +} - if(!(mc68328->regs.imr & line) && !(mc68328->regs.isr & line)) +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mc68328_device::device_start() +{ + m_out_port_a.resolve(m_out_port_a_func, *this); + m_out_port_b.resolve(m_out_port_b_func, *this); + m_out_port_c.resolve(m_out_port_c_func, *this); + m_out_port_d.resolve(m_out_port_d_func, *this); + m_out_port_e.resolve(m_out_port_e_func, *this); + m_out_port_f.resolve(m_out_port_f_func, *this); + m_out_port_g.resolve(m_out_port_g_func, *this); + m_out_port_j.resolve(m_out_port_j_func, *this); + m_out_port_k.resolve(m_out_port_k_func, *this); + m_out_port_m.resolve(m_out_port_m_func, *this); + + m_in_port_a.resolve(m_in_port_a_func, *this); + m_in_port_b.resolve(m_in_port_b_func, *this); + m_in_port_c.resolve(m_in_port_c_func, *this); + m_in_port_d.resolve(m_in_port_d_func, *this); + m_in_port_e.resolve(m_in_port_e_func, *this); + m_in_port_f.resolve(m_in_port_f_func, *this); + m_in_port_g.resolve(m_in_port_g_func, *this); + m_in_port_j.resolve(m_in_port_j_func, *this); + m_in_port_k.resolve(m_in_port_k_func, *this); + m_in_port_m.resolve(m_in_port_m_func, *this); + + m_out_pwm.resolve(m_out_pwm_func, *this); + + m_out_spim.resolve(m_out_spim_func, *this); + m_in_spim.resolve(m_in_spim_func, *this); + + m_spim_xch_trigger.resolve(m_spim_xch_trigger_func, *this); + + m_cpu = machine().device(m68k_cpu_tag); + + m_gptimer[0] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::timer1_hit),this)); + m_gptimer[1] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::timer2_hit),this)); + m_rtc = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::rtc_tick),this)); + m_pwm = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68328_device::pwm_transition),this)); + + register_state_save(); +} + +//------------------------------------------------- +// device_reset - device-specific reset +//------------------------------------------------- + +void mc68328_device::device_reset() +{ + m_regs.scr = 0x0c; + m_regs.grpbasea = 0x0000; + m_regs.grpbaseb = 0x0000; + m_regs.grpbasec = 0x0000; + m_regs.grpbased = 0x0000; + m_regs.grpmaska = 0x0000; + m_regs.grpmaskb = 0x0000; + m_regs.grpmaskc = 0x0000; + m_regs.grpmaskd = 0x0000; + m_regs.csa0 = 0x00010006; + m_regs.csa1 = 0x00010006; + m_regs.csa2 = 0x00010006; + m_regs.csa3 = 0x00010006; + m_regs.csb0 = 0x00010006; + m_regs.csb1 = 0x00010006; + m_regs.csb2 = 0x00010006; + m_regs.csb3 = 0x00010006; + m_regs.csc0 = 0x00010006; + m_regs.csc1 = 0x00010006; + m_regs.csc2 = 0x00010006; + m_regs.csc3 = 0x00010006; + m_regs.csd0 = 0x00010006; + m_regs.csd1 = 0x00010006; + m_regs.csd2 = 0x00010006; + m_regs.csd3 = 0x00010006; + + m_regs.pllcr = 0x2400; + m_regs.pllfsr = 0x0123; + m_regs.pctlr = 0x1f; + + m_regs.ivr = 0x00; + m_regs.icr = 0x0000; + m_regs.imr = 0x00ffffff; + m_regs.iwr = 0x00ffffff; + m_regs.isr = 0x00000000; + m_regs.ipr = 0x00000000; + + m_regs.padir = 0x00; + m_regs.padata = 0x00; + m_regs.pasel = 0x00; + m_regs.pbdir = 0x00; + m_regs.pbdata = 0x00; + m_regs.pbsel = 0x00; + m_regs.pcdir = 0x00; + m_regs.pcdata = 0x00; + m_regs.pcsel = 0x00; + m_regs.pddir = 0x00; + m_regs.pddata = 0x00; + m_regs.pdpuen = 0xff; + m_regs.pdpol = 0x00; + m_regs.pdirqen = 0x00; + m_regs.pddataedge = 0x00; + m_regs.pdirqedge = 0x00; + m_regs.pedir = 0x00; + m_regs.pedata = 0x00; + m_regs.pepuen = 0x80; + m_regs.pesel = 0x80; + m_regs.pfdir = 0x00; + m_regs.pfdata = 0x00; + m_regs.pfpuen = 0xff; + m_regs.pfsel = 0xff; + m_regs.pgdir = 0x00; + m_regs.pgdata = 0x00; + m_regs.pgpuen = 0xff; + m_regs.pgsel = 0xff; + m_regs.pjdir = 0x00; + m_regs.pjdata = 0x00; + m_regs.pjsel = 0x00; + m_regs.pkdir = 0x00; + m_regs.pkdata = 0x00; + m_regs.pkpuen = 0xff; + m_regs.pksel = 0xff; + m_regs.pmdir = 0x00; + m_regs.pmdata = 0x00; + m_regs.pmpuen = 0xff; + m_regs.pmsel = 0xff; + + m_regs.pwmc = 0x0000; + m_regs.pwmp = 0x0000; + m_regs.pwmw = 0x0000; + m_regs.pwmcnt = 0x0000; + + m_regs.tctl[0] = m_regs.tctl[1] = 0x0000; + m_regs.tprer[0] = m_regs.tprer[1] = 0x0000; + m_regs.tcmp[0] = m_regs.tcmp[1] = 0xffff; + m_regs.tcr[0] = m_regs.tcr[1] = 0x0000; + m_regs.tcn[0] = m_regs.tcn[1] = 0x0000; + m_regs.tstat[0] = m_regs.tstat[1] = 0x0000; + m_regs.wctlr = 0x0000; + m_regs.wcmpr = 0xffff; + m_regs.wcn = 0x0000; + + m_regs.spisr = 0x0000; + + m_regs.spimdata = 0x0000; + m_regs.spimcont = 0x0000; + + m_regs.ustcnt = 0x0000; + m_regs.ubaud = 0x003f; + m_regs.urx = 0x0000; + m_regs.utx = 0x0000; + m_regs.umisc = 0x0000; + + m_regs.lssa = 0x00000000; + m_regs.lvpw = 0xff; + m_regs.lxmax = 0x03ff; + m_regs.lymax = 0x01ff; + m_regs.lcxp = 0x0000; + m_regs.lcyp = 0x0000; + m_regs.lcwch = 0x0101; + m_regs.lblkc = 0x7f; + m_regs.lpicf = 0x00; + m_regs.lpolcf = 0x00; + m_regs.lacdrc = 0x00; + m_regs.lpxcd = 0x00; + m_regs.lckcon = 0x40; + m_regs.llbar = 0x3e; + m_regs.lotcr = 0x3f; + m_regs.lposr = 0x00; + m_regs.lfrcm = 0xb9; + m_regs.lgpmr = 0x1073; + + m_regs.hmsr = 0x00000000; + m_regs.alarm = 0x00000000; + m_regs.rtcctl = 0x00; + m_regs.rtcisr = 0x00; + m_regs.rtcienr = 0x00; + m_regs.stpwtch = 0x00; + + m_rtc->adjust(attotime::from_hz(1), 0, attotime::from_hz(1)); +} + + +void mc68328_device::set_interrupt_line(UINT32 line, UINT32 active) +{ + if (active) + { + m_regs.ipr |= line; + + if (!(m_regs.imr & line) && !(m_regs.isr & line)) { - mc68328->regs.isr |= line; + m_regs.isr |= line; - if(mc68328->regs.isr & INT_M68K_LINE7) + if (m_regs.isr & INT_M68K_LINE7) { - cpu->execute().set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, mc68328->regs.ivr | 0x07); + m_cpu->set_input_line_and_vector(M68K_IRQ_7, ASSERT_LINE, m_regs.ivr | 0x07); } - else if(mc68328->regs.isr & INT_M68K_LINE6) + else if (m_regs.isr & INT_M68K_LINE6) { - cpu->execute().set_input_line_and_vector(M68K_IRQ_6, ASSERT_LINE, mc68328->regs.ivr | 0x06); + m_cpu->set_input_line_and_vector(M68K_IRQ_6, ASSERT_LINE, m_regs.ivr | 0x06); } - else if(mc68328->regs.isr & INT_M68K_LINE5) + else if (m_regs.isr & INT_M68K_LINE5) { - cpu->execute().set_input_line_and_vector(M68K_IRQ_5, ASSERT_LINE, mc68328->regs.ivr | 0x05); + m_cpu->set_input_line_and_vector(M68K_IRQ_5, ASSERT_LINE, m_regs.ivr | 0x05); } - else if(mc68328->regs.isr & INT_M68K_LINE4) + else if (m_regs.isr & INT_M68K_LINE4) { - cpu->execute().set_input_line_and_vector(M68K_IRQ_4, ASSERT_LINE, mc68328->regs.ivr | 0x04); + m_cpu->set_input_line_and_vector(M68K_IRQ_4, ASSERT_LINE, m_regs.ivr | 0x04); } - else if(mc68328->regs.isr & INT_M68K_LINE3) + else if (m_regs.isr & INT_M68K_LINE3) { - cpu->execute().set_input_line_and_vector(M68K_IRQ_3, ASSERT_LINE, mc68328->regs.ivr | 0x03); + m_cpu->set_input_line_and_vector(M68K_IRQ_3, ASSERT_LINE, m_regs.ivr | 0x03); } - else if(mc68328->regs.isr & INT_M68K_LINE2) + else if (m_regs.isr & INT_M68K_LINE2) { - cpu->execute().set_input_line_and_vector(M68K_IRQ_2, ASSERT_LINE, mc68328->regs.ivr | 0x02); + m_cpu->set_input_line_and_vector(M68K_IRQ_2, ASSERT_LINE, m_regs.ivr | 0x02); } - else if(mc68328->regs.isr & INT_M68K_LINE1) + else if (m_regs.isr & INT_M68K_LINE1) { - cpu->execute().set_input_line_and_vector(M68K_IRQ_1, ASSERT_LINE, mc68328->regs.ivr | 0x01); + m_cpu->set_input_line_and_vector(M68K_IRQ_1, ASSERT_LINE, m_regs.ivr | 0x01); } } } else { - mc68328->regs.isr &= ~line; + m_regs.isr &= ~line; - if((line & INT_M68K_LINE7) && !(mc68328->regs.isr & INT_M68K_LINE7)) + if ((line & INT_M68K_LINE7) && !(m_regs.isr & INT_M68K_LINE7)) { - cpu->execute().set_input_line(M68K_IRQ_7, CLEAR_LINE); + m_cpu->set_input_line(M68K_IRQ_7, CLEAR_LINE); } - if((line & INT_M68K_LINE6) && !(mc68328->regs.isr & INT_M68K_LINE6)) + if ((line & INT_M68K_LINE6) && !(m_regs.isr & INT_M68K_LINE6)) { - cpu->execute().set_input_line(M68K_IRQ_6, CLEAR_LINE); + m_cpu->set_input_line(M68K_IRQ_6, CLEAR_LINE); } - if((line & INT_M68K_LINE5) && !(mc68328->regs.isr & INT_M68K_LINE5)) + if ((line & INT_M68K_LINE5) && !(m_regs.isr & INT_M68K_LINE5)) { - cpu->execute().set_input_line(M68K_IRQ_5, CLEAR_LINE); + m_cpu->set_input_line(M68K_IRQ_5, CLEAR_LINE); } - if((line & INT_M68K_LINE4) && !(mc68328->regs.isr & INT_M68K_LINE4)) + if ((line & INT_M68K_LINE4) && !(m_regs.isr & INT_M68K_LINE4)) { - cpu->execute().set_input_line(M68K_IRQ_4, CLEAR_LINE); + m_cpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); } - if((line & INT_M68K_LINE3) && !(mc68328->regs.isr & INT_M68K_LINE3)) + if ((line & INT_M68K_LINE3) && !(m_regs.isr & INT_M68K_LINE3)) { - cpu->execute().set_input_line(M68K_IRQ_3, CLEAR_LINE); + m_cpu->set_input_line(M68K_IRQ_3, CLEAR_LINE); } - if((line & INT_M68K_LINE2) && !(mc68328->regs.isr & INT_M68K_LINE2)) + if ((line & INT_M68K_LINE2) && !(m_regs.isr & INT_M68K_LINE2)) { - cpu->execute().set_input_line(M68K_IRQ_2, CLEAR_LINE); + m_cpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); } - if((line & INT_M68K_LINE1) && !(mc68328->regs.isr & INT_M68K_LINE1)) + if ((line & INT_M68K_LINE1) && !(m_regs.isr & INT_M68K_LINE1)) { - cpu->execute().set_input_line(M68K_IRQ_1, CLEAR_LINE); + m_cpu->set_input_line(M68K_IRQ_1, CLEAR_LINE); } } } -static void mc68328_poll_port_d_interrupts(device_t *device) +void mc68328_device::poll_port_d_interrupts() { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - UINT8 line_transitions = mc68328->regs.pddataedge & mc68328->regs.pdirqedge; - UINT8 line_holds = mc68328->regs.pddata &~ mc68328->regs.pdirqedge; - UINT8 line_interrupts = (line_transitions | line_holds) & mc68328->regs.pdirqen; + UINT8 line_transitions = m_regs.pddataedge & m_regs.pdirqedge; + UINT8 line_holds = m_regs.pddata &~ m_regs.pdirqedge; + UINT8 line_interrupts = (line_transitions | line_holds) & m_regs.pdirqen; - if(line_interrupts) + if (line_interrupts) { - mc68328_set_interrupt_line(device, line_interrupts << 8, 1); + set_interrupt_line(line_interrupts << 8, 1); } else { - mc68328_set_interrupt_line(device, INT_KBDINTS, 0); + set_interrupt_line(INT_KBDINTS, 0); } } -void mc68328_set_penirq_line(device_t *device, int state) +WRITE_LINE_MEMBER( mc68328_device::set_penirq_line ) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - - if(state) + if (state) { - mc68328_set_interrupt_line(device, INT_PEN, 1); + set_interrupt_line(INT_PEN, 1); } else { - mc68328->regs.ipr &= ~INT_PEN; - mc68328_set_interrupt_line(device, INT_PEN, 0); + m_regs.ipr &= ~INT_PEN; + set_interrupt_line(INT_PEN, 0); } } -void mc68328_set_port_d_lines(device_t *device, UINT8 state, int bit) +void mc68328_device::set_port_d_lines(UINT8 state, int bit) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - UINT8 old_button_state = mc68328->regs.pddata; + UINT8 old_button_state = m_regs.pddata; - if(state & (1 << bit)) + if (state & (1 << bit)) { - mc68328->regs.pddata |= (1 << bit); + m_regs.pddata |= (1 << bit); } else { - mc68328->regs.pddata &= ~(1 << bit); + m_regs.pddata &= ~(1 << bit); } - mc68328->regs.pddataedge |= ~old_button_state & mc68328->regs.pddata; + m_regs.pddataedge |= ~old_button_state & m_regs.pddata; - mc68328_poll_port_d_interrupts(device); + poll_port_d_interrupts(); } -static UINT32 mc68328_get_timer_frequency(device_t *device, UINT32 index) +UINT32 mc68328_device::get_timer_frequency(UINT32 index) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); UINT32 frequency = 0; - switch(mc68328->regs.tctl[index] & TCTL_CLKSOURCE) + switch (m_regs.tctl[index] & TCTL_CLKSOURCE) { case TCTL_CLKSOURCE_SYSCLK: frequency = 32768 * 506; @@ -178,2695 +406,2503 @@ static UINT32 mc68328_get_timer_frequency(device_t *device, UINT32 index) frequency = 32768; break; } - frequency /= (mc68328->regs.tprer[index] + 1); + frequency /= (m_regs.tprer[index] + 1); return frequency; } -static void mc68328_maybe_start_timer(device_t *device, UINT32 index, UINT32 new_enable) +void mc68328_device::maybe_start_timer(UINT32 index, UINT32 new_enable) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - - if((mc68328->regs.tctl[index] & TCTL_TEN) == TCTL_TEN_ENABLE && (mc68328->regs.tctl[index] & TCTL_CLKSOURCE) > TCTL_CLKSOURCE_STOP) + if ((m_regs.tctl[index] & TCTL_TEN) == TCTL_TEN_ENABLE && (m_regs.tctl[index] & TCTL_CLKSOURCE) > TCTL_CLKSOURCE_STOP) { - if((mc68328->regs.tctl[index] & TCTL_CLKSOURCE) == TCTL_CLKSOURCE_TIN) + if ((m_regs.tctl[index] & TCTL_CLKSOURCE) == TCTL_CLKSOURCE_TIN) { - mc68328->gptimer[index]->adjust(attotime::never); + m_gptimer[index]->adjust(attotime::never); } - else if(mc68328->regs.tcmp[index] == 0) + else if (m_regs.tcmp[index] == 0) { - mc68328->gptimer[index]->adjust(attotime::never); + m_gptimer[index]->adjust(attotime::never); } else { - UINT32 frequency = mc68328_get_timer_frequency(device, index); - attotime period = (attotime::from_hz(frequency) * mc68328->regs.tcmp[index]); + UINT32 frequency = get_timer_frequency(index); + attotime period = (attotime::from_hz(frequency) * m_regs.tcmp[index]); - if(new_enable) + if (new_enable) { - mc68328->regs.tcn[index] = 0x0000; + m_regs.tcn[index] = 0x0000; } - mc68328->gptimer[index]->adjust(period); + m_gptimer[index]->adjust(period); } } else { - mc68328->gptimer[index]->adjust(attotime::never); + m_gptimer[index]->adjust(attotime::never); } } -static void mc68328_timer_compare_event(device_t *device, UINT32 index) +void mc68328_device::timer_compare_event(UINT32 index) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); + m_regs.tcn[index] = m_regs.tcmp[index]; + m_regs.tstat[index] |= TSTAT_COMP; - mc68328->regs.tcn[index] = mc68328->regs.tcmp[index]; - mc68328->regs.tstat[index] |= TSTAT_COMP; - - if((mc68328->regs.tctl[index] & TCTL_FRR) == TCTL_FRR_RESTART) + if ((m_regs.tctl[index] & TCTL_FRR) == TCTL_FRR_RESTART) { - UINT32 frequency = mc68328_get_timer_frequency(device, index); + UINT32 frequency = get_timer_frequency(index); - if(frequency > 0) + if (frequency > 0) { - attotime period = attotime::from_hz(frequency) * mc68328->regs.tcmp[index]; + attotime period = attotime::from_hz(frequency) * m_regs.tcmp[index]; - mc68328->regs.tcn[index] = 0x0000; + m_regs.tcn[index] = 0x0000; - mc68328->gptimer[index]->adjust(period); + m_gptimer[index]->adjust(period); } else { - mc68328->gptimer[index]->adjust(attotime::never); + m_gptimer[index]->adjust(attotime::never); } } else { - UINT32 frequency = mc68328_get_timer_frequency(device, index); + UINT32 frequency = get_timer_frequency(index); - if(frequency > 0) + if (frequency > 0) { attotime period = attotime::from_hz(frequency) * 0x10000; - mc68328->gptimer[index]->adjust(period); + m_gptimer[index]->adjust(period); } else { - mc68328->gptimer[index]->adjust(attotime::never); + m_gptimer[index]->adjust(attotime::never); } } - if((mc68328->regs.tctl[index] & TCTL_IRQEN) == TCTL_IRQEN_ENABLE) + if ((m_regs.tctl[index] & TCTL_IRQEN) == TCTL_IRQEN_ENABLE) { - mc68328_set_interrupt_line(device, (index == 0) ? INT_TIMER1 : INT_TIMER2, 1); + set_interrupt_line((index == 0) ? INT_TIMER1 : INT_TIMER2, 1); } } -static TIMER_CALLBACK( mc68328_timer1_hit ) +TIMER_CALLBACK_MEMBER( mc68328_device::timer1_hit ) { - device_t *device = machine.device(MC68328_TAG); - - mc68328_timer_compare_event(device, 0); + timer_compare_event(0); } -static TIMER_CALLBACK( mc68328_timer2_hit ) +TIMER_CALLBACK_MEMBER( mc68328_device::timer2_hit ) { - device_t *device = machine.device(MC68328_TAG); - - mc68328_timer_compare_event(device, 1); + timer_compare_event(1); } -static TIMER_CALLBACK( mc68328_pwm_transition ) +TIMER_CALLBACK_MEMBER( mc68328_device::pwm_transition ) { - device_t *device = machine.device(MC68328_TAG); - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - - if(mc68328->regs.pwmw >= mc68328->regs.pwmp || mc68328->regs.pwmw == 0 || mc68328->regs.pwmp == 0) + if (m_regs.pwmw >= m_regs.pwmp || m_regs.pwmw == 0 || m_regs.pwmp == 0) { - mc68328->pwm->adjust(attotime::never); + m_pwm->adjust(attotime::never); return; } - if(((mc68328->regs.pwmc & PWMC_POL) == 0 && (mc68328->regs.pwmc & PWMC_PIN) != 0) || - ((mc68328->regs.pwmc & PWMC_POL) != 0 && (mc68328->regs.pwmc & PWMC_PIN) == 0)) + if (((m_regs.pwmc & PWMC_POL) == 0 && (m_regs.pwmc & PWMC_PIN) != 0) || + ((m_regs.pwmc & PWMC_POL) != 0 && (m_regs.pwmc & PWMC_PIN) == 0)) { UINT32 frequency = 32768 * 506; - UINT32 divisor = 4 << (mc68328->regs.pwmc & PWMC_CLKSEL); // ?? Datasheet says 2 <<, but then we're an octave higher than CoPilot. + UINT32 divisor = 4 << (m_regs.pwmc & PWMC_CLKSEL); // ?? Datasheet says 2 <<, but then we're an octave higher than CoPilot. attotime period; frequency /= divisor; - period = attotime::from_hz(frequency) * (mc68328->regs.pwmp - mc68328->regs.pwmw); + period = attotime::from_hz(frequency) * (m_regs.pwmp - m_regs.pwmw); - mc68328->pwm->adjust(period); + m_pwm->adjust(period); - if(mc68328->regs.pwmc & PWMC_IRQEN) + if (m_regs.pwmc & PWMC_IRQEN) { - mc68328_set_interrupt_line(device, INT_PWM, 1); + set_interrupt_line(INT_PWM, 1); } } else { UINT32 frequency = 32768 * 506; - UINT32 divisor = 4 << (mc68328->regs.pwmc & PWMC_CLKSEL); // ?? Datasheet says 2 <<, but then we're an octave higher than CoPilot. + UINT32 divisor = 4 << (m_regs.pwmc & PWMC_CLKSEL); // ?? Datasheet says 2 <<, but then we're an octave higher than CoPilot. attotime period; frequency /= divisor; - period = attotime::from_hz(frequency) * mc68328->regs.pwmw; + period = attotime::from_hz(frequency) * m_regs.pwmw; - mc68328->pwm->adjust(period); + m_pwm->adjust(period); } - mc68328->regs.pwmc ^= PWMC_PIN; + m_regs.pwmc ^= PWMC_PIN; - if( !mc68328->out_pwm.isnull() ) + if (!m_out_pwm.isnull()) { - mc68328->out_pwm( 0, (mc68328->regs.pwmc & PWMC_PIN) ? 1 : 0 ); + m_out_pwm(0, (m_regs.pwmc & PWMC_PIN) ? 1 : 0); } } -static TIMER_CALLBACK( mc68328_rtc_tick ) +TIMER_CALLBACK_MEMBER( mc68328_device::rtc_tick ) { - device_t *device = machine.device(MC68328_TAG); - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - - if(mc68328->regs.rtcctl & RTCCTL_ENABLE) + if (m_regs.rtcctl & RTCCTL_ENABLE) { UINT32 set_int = 0; - mc68328->regs.hmsr++; + m_regs.hmsr++; - if(mc68328->regs.rtcienr & RTCINT_SECOND) + if (m_regs.rtcienr & RTCINT_SECOND) { set_int = 1; - mc68328->regs.rtcisr |= RTCINT_SECOND; + m_regs.rtcisr |= RTCINT_SECOND; } - if((mc68328->regs.hmsr & 0x0000003f) == 0x0000003c) + if ((m_regs.hmsr & 0x0000003f) == 0x0000003c) { - mc68328->regs.hmsr &= 0xffffffc0; - mc68328->regs.hmsr += 0x00010000; + m_regs.hmsr &= 0xffffffc0; + m_regs.hmsr += 0x00010000; - if(mc68328->regs.rtcienr & RTCINT_MINUTE) + if (m_regs.rtcienr & RTCINT_MINUTE) { set_int = 1; - mc68328->regs.rtcisr |= RTCINT_MINUTE; + m_regs.rtcisr |= RTCINT_MINUTE; } - if((mc68328->regs.hmsr & 0x003f0000) == 0x003c0000) + if ((m_regs.hmsr & 0x003f0000) == 0x003c0000) { - mc68328->regs.hmsr &= 0xffc0ffff; - mc68328->regs.hmsr += 0x0100000; + m_regs.hmsr &= 0xffc0ffff; + m_regs.hmsr += 0x0100000; - if((mc68328->regs.hmsr & 0x1f000000) == 0x18000000) + if ((m_regs.hmsr & 0x1f000000) == 0x18000000) { - mc68328->regs.hmsr &= 0xe0ffffff; + m_regs.hmsr &= 0xe0ffffff; - if(mc68328->regs.rtcienr & RTCINT_DAY) + if (m_regs.rtcienr & RTCINT_DAY) { set_int = 1; - mc68328->regs.rtcisr |= RTCINT_DAY; + m_regs.rtcisr |= RTCINT_DAY; } } } - if(mc68328->regs.stpwtch != 0x003f) + if (m_regs.stpwtch != 0x003f) { - mc68328->regs.stpwtch--; - mc68328->regs.stpwtch &= 0x003f; + m_regs.stpwtch--; + m_regs.stpwtch &= 0x003f; - if(mc68328->regs.stpwtch == 0x003f) + if (m_regs.stpwtch == 0x003f) { - if(mc68328->regs.rtcienr & RTCINT_STOPWATCH) + if (m_regs.rtcienr & RTCINT_STOPWATCH) { set_int = 1; - mc68328->regs.rtcisr |= RTCINT_STOPWATCH; + m_regs.rtcisr |= RTCINT_STOPWATCH; } } } } - if(mc68328->regs.hmsr == mc68328->regs.alarm) + if (m_regs.hmsr == m_regs.alarm) { - if(mc68328->regs.rtcienr & RTCINT_ALARM) + if (m_regs.rtcienr & RTCINT_ALARM) { set_int = 1; - mc68328->regs.rtcisr |= RTCINT_STOPWATCH; + m_regs.rtcisr |= RTCINT_STOPWATCH; } } - if(set_int) + if (set_int) { - mc68328_set_interrupt_line(device, INT_RTC, 1); + set_interrupt_line(INT_RTC, 1); } else { - mc68328_set_interrupt_line(device, INT_RTC, 0); + set_interrupt_line(INT_RTC, 0); } } } -WRITE16_DEVICE_HANDLER( mc68328_w ) +WRITE16_MEMBER( mc68328_device::write ) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); UINT32 address = offset << 1; UINT16 temp16[4] = { 0 }; - UINT32 imr_old = mc68328->regs.imr, imr_diff; + UINT32 imr_old = m_regs.imr, imr_diff; - switch(address) + switch (address) { case 0x000: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff001) = %02x\n", data & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff001) = %02x\n", data & 0x00ff); } else { - verboselog(space.machine(), 2, "mc68328_w: SCR = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: SCR = %02x\n", (data >> 8) & 0x00ff); } break; case 0x100: - verboselog(space.machine(), 2, "mc68328_w: GRPBASEA = %04x\n", data); - mc68328->regs.grpbasea = data; + verboselog(machine(), 2, "mc68328_w: GRPBASEA = %04x\n", data); + m_regs.grpbasea = data; break; case 0x102: - verboselog(space.machine(), 2, "mc68328_w: GRPBASEB = %04x\n", data); - mc68328->regs.grpbaseb = data; + verboselog(machine(), 2, "mc68328_w: GRPBASEB = %04x\n", data); + m_regs.grpbaseb = data; break; case 0x104: - verboselog(space.machine(), 2, "mc68328_w: GRPBASEC = %04x\n", data); - mc68328->regs.grpbasec = data; + verboselog(machine(), 2, "mc68328_w: GRPBASEC = %04x\n", data); + m_regs.grpbasec = data; break; case 0x106: - verboselog(space.machine(), 2, "mc68328_w: GRPBASED = %04x\n", data); - mc68328->regs.grpbased = data; + verboselog(machine(), 2, "mc68328_w: GRPBASED = %04x\n", data); + m_regs.grpbased = data; break; case 0x108: - verboselog(space.machine(), 2, "mc68328_w: GRPMASKA = %04x\n", data); - mc68328->regs.grpmaska = data; + verboselog(machine(), 2, "mc68328_w: GRPMASKA = %04x\n", data); + m_regs.grpmaska = data; break; case 0x10a: - verboselog(space.machine(), 2, "mc68328_w: GRPMASKB = %04x\n", data); - mc68328->regs.grpmaskb = data; + verboselog(machine(), 2, "mc68328_w: GRPMASKB = %04x\n", data); + m_regs.grpmaskb = data; break; case 0x10c: - verboselog(space.machine(), 2, "mc68328_w: GRPMASKC = %04x\n", data); - mc68328->regs.grpmaskc = data; + verboselog(machine(), 2, "mc68328_w: GRPMASKC = %04x\n", data); + m_regs.grpmaskc = data; break; case 0x10e: - verboselog(space.machine(), 2, "mc68328_w: GRPMASKD = %04x\n", data); - mc68328->regs.grpmaskd = data; + verboselog(machine(), 2, "mc68328_w: GRPMASKD = %04x\n", data); + m_regs.grpmaskd = data; break; case 0x110: - verboselog(space.machine(), 5, "mc68328_w: CSA0(0) = %04x\n", data); - mc68328->regs.csa0 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csa0 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSA0(0) = %04x\n", data); + m_regs.csa0 &= 0xffff0000 | (~mem_mask); + m_regs.csa0 |= data & mem_mask; break; case 0x112: - verboselog(space.machine(), 5, "mc68328_w: CSA0(16) = %04x\n", data); - mc68328->regs.csa0 &= ~(mem_mask << 16); - mc68328->regs.csa0 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSA0(16) = %04x\n", data); + m_regs.csa0 &= ~(mem_mask << 16); + m_regs.csa0 |= (data & mem_mask) << 16; break; case 0x114: - verboselog(space.machine(), 5, "mc68328_w: CSA1(0) = %04x\n", data); - mc68328->regs.csa1 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csa1 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSA1(0) = %04x\n", data); + m_regs.csa1 &= 0xffff0000 | (~mem_mask); + m_regs.csa1 |= data & mem_mask; break; case 0x116: - verboselog(space.machine(), 5, "mc68328_w: CSA1(16) = %04x\n", data); - mc68328->regs.csa1 &= ~(mem_mask << 16); - mc68328->regs.csa1 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSA1(16) = %04x\n", data); + m_regs.csa1 &= ~(mem_mask << 16); + m_regs.csa1 |= (data & mem_mask) << 16; break; case 0x118: - verboselog(space.machine(), 5, "mc68328_w: CSA2(0) = %04x\n", data); - mc68328->regs.csa2 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csa2 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSA2(0) = %04x\n", data); + m_regs.csa2 &= 0xffff0000 | (~mem_mask); + m_regs.csa2 |= data & mem_mask; break; case 0x11a: - verboselog(space.machine(), 5, "mc68328_w: CSA2(16) = %04x\n", data); - mc68328->regs.csa2 &= ~(mem_mask << 16); - mc68328->regs.csa2 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSA2(16) = %04x\n", data); + m_regs.csa2 &= ~(mem_mask << 16); + m_regs.csa2 |= (data & mem_mask) << 16; break; case 0x11c: - verboselog(space.machine(), 5, "mc68328_w: CSA3(0) = %04x\n", data); - mc68328->regs.csa3 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csa3 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSA3(0) = %04x\n", data); + m_regs.csa3 &= 0xffff0000 | (~mem_mask); + m_regs.csa3 |= data & mem_mask; break; case 0x11e: - verboselog(space.machine(), 5, "mc68328_w: CSA3(16) = %04x\n", data); - mc68328->regs.csa3 &= ~(mem_mask << 16); - mc68328->regs.csa3 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSA3(16) = %04x\n", data); + m_regs.csa3 &= ~(mem_mask << 16); + m_regs.csa3 |= (data & mem_mask) << 16; break; case 0x120: - verboselog(space.machine(), 5, "mc68328_w: CSB0(0) = %04x\n", data); - mc68328->regs.csb0 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csb0 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSB0(0) = %04x\n", data); + m_regs.csb0 &= 0xffff0000 | (~mem_mask); + m_regs.csb0 |= data & mem_mask; break; case 0x122: - verboselog(space.machine(), 5, "mc68328_w: CSB0(16) = %04x\n", data); - mc68328->regs.csb0 &= ~(mem_mask << 16); - mc68328->regs.csb0 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSB0(16) = %04x\n", data); + m_regs.csb0 &= ~(mem_mask << 16); + m_regs.csb0 |= (data & mem_mask) << 16; break; case 0x124: - verboselog(space.machine(), 5, "mc68328_w: CSB1(0) = %04x\n", data); - mc68328->regs.csb1 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csb1 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSB1(0) = %04x\n", data); + m_regs.csb1 &= 0xffff0000 | (~mem_mask); + m_regs.csb1 |= data & mem_mask; break; case 0x126: - verboselog(space.machine(), 5, "mc68328_w: CSB1(16) = %04x\n", data); - mc68328->regs.csb1 &= ~(mem_mask << 16); - mc68328->regs.csb1 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSB1(16) = %04x\n", data); + m_regs.csb1 &= ~(mem_mask << 16); + m_regs.csb1 |= (data & mem_mask) << 16; break; case 0x128: - verboselog(space.machine(), 5, "mc68328_w: CSB2(0) = %04x\n", data); - mc68328->regs.csb2 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csb2 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSB2(0) = %04x\n", data); + m_regs.csb2 &= 0xffff0000 | (~mem_mask); + m_regs.csb2 |= data & mem_mask; break; case 0x12a: - verboselog(space.machine(), 5, "mc68328_w: CSB2(16) = %04x\n", data); - mc68328->regs.csb2 &= ~(mem_mask << 16); - mc68328->regs.csb2 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSB2(16) = %04x\n", data); + m_regs.csb2 &= ~(mem_mask << 16); + m_regs.csb2 |= (data & mem_mask) << 16; break; case 0x12c: - verboselog(space.machine(), 5, "mc68328_w: CSB3(0) = %04x\n", data); - mc68328->regs.csb3 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csb3 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSB3(0) = %04x\n", data); + m_regs.csb3 &= 0xffff0000 | (~mem_mask); + m_regs.csb3 |= data & mem_mask; break; case 0x12e: - verboselog(space.machine(), 5, "mc68328_w: CSB3(16) = %04x\n", data); - mc68328->regs.csb3 &= ~(mem_mask << 16); - mc68328->regs.csb3 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSB3(16) = %04x\n", data); + m_regs.csb3 &= ~(mem_mask << 16); + m_regs.csb3 |= (data & mem_mask) << 16; break; case 0x130: - verboselog(space.machine(), 5, "mc68328_w: CSC0(0) = %04x\n", data); - mc68328->regs.csc0 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csc0 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSC0(0) = %04x\n", data); + m_regs.csc0 &= 0xffff0000 | (~mem_mask); + m_regs.csc0 |= data & mem_mask; break; case 0x132: - verboselog(space.machine(), 5, "mc68328_w: CSC0(16) = %04x\n", data); - mc68328->regs.csc0 &= ~(mem_mask << 16); - mc68328->regs.csc0 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSC0(16) = %04x\n", data); + m_regs.csc0 &= ~(mem_mask << 16); + m_regs.csc0 |= (data & mem_mask) << 16; break; case 0x134: - verboselog(space.machine(), 5, "mc68328_w: CSC1(0) = %04x\n", data); - mc68328->regs.csc1 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csc1 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSC1(0) = %04x\n", data); + m_regs.csc1 &= 0xffff0000 | (~mem_mask); + m_regs.csc1 |= data & mem_mask; break; case 0x136: - verboselog(space.machine(), 5, "mc68328_w: CSC1(16) = %04x\n", data); - mc68328->regs.csc1 &= ~(mem_mask << 16); - mc68328->regs.csc1 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSC1(16) = %04x\n", data); + m_regs.csc1 &= ~(mem_mask << 16); + m_regs.csc1 |= (data & mem_mask) << 16; break; case 0x138: - verboselog(space.machine(), 5, "mc68328_w: CSC2(0) = %04x\n", data); - mc68328->regs.csc2 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csc2 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSC2(0) = %04x\n", data); + m_regs.csc2 &= 0xffff0000 | (~mem_mask); + m_regs.csc2 |= data & mem_mask; break; case 0x13a: - verboselog(space.machine(), 5, "mc68328_w: CSC2(16) = %04x\n", data); - mc68328->regs.csc2 &= ~(mem_mask << 16); - mc68328->regs.csc2 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSC2(16) = %04x\n", data); + m_regs.csc2 &= ~(mem_mask << 16); + m_regs.csc2 |= (data & mem_mask) << 16; break; case 0x13c: - verboselog(space.machine(), 5, "mc68328_w: CSC3(0) = %04x\n", data); - mc68328->regs.csc3 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csc3 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSC3(0) = %04x\n", data); + m_regs.csc3 &= 0xffff0000 | (~mem_mask); + m_regs.csc3 |= data & mem_mask; break; case 0x13e: - verboselog(space.machine(), 5, "mc68328_w: CSC3(16) = %04x\n", data); - mc68328->regs.csc3 &= ~(mem_mask << 16); - mc68328->regs.csc3 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSC3(16) = %04x\n", data); + m_regs.csc3 &= ~(mem_mask << 16); + m_regs.csc3 |= (data & mem_mask) << 16; break; case 0x140: - verboselog(space.machine(), 5, "mc68328_w: CSD0(0) = %04x\n", data); - mc68328->regs.csd0 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csd0 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSD0(0) = %04x\n", data); + m_regs.csd0 &= 0xffff0000 | (~mem_mask); + m_regs.csd0 |= data & mem_mask; break; case 0x142: - verboselog(space.machine(), 5, "mc68328_w: CSD0(16) = %04x\n", data); - mc68328->regs.csd0 &= ~(mem_mask << 16); - mc68328->regs.csd0 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSD0(16) = %04x\n", data); + m_regs.csd0 &= ~(mem_mask << 16); + m_regs.csd0 |= (data & mem_mask) << 16; break; case 0x144: - verboselog(space.machine(), 5, "mc68328_w: CSD1(0) = %04x\n", data); - mc68328->regs.csd1 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csd1 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSD1(0) = %04x\n", data); + m_regs.csd1 &= 0xffff0000 | (~mem_mask); + m_regs.csd1 |= data & mem_mask; break; case 0x146: - verboselog(space.machine(), 5, "mc68328_w: CSD1(16) = %04x\n", data); - mc68328->regs.csd1 &= ~(mem_mask << 16); - mc68328->regs.csd1 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSD1(16) = %04x\n", data); + m_regs.csd1 &= ~(mem_mask << 16); + m_regs.csd1 |= (data & mem_mask) << 16; break; case 0x148: - verboselog(space.machine(), 5, "mc68328_w: CSD2(0) = %04x\n", data); - mc68328->regs.csd2 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csd2 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSD2(0) = %04x\n", data); + m_regs.csd2 &= 0xffff0000 | (~mem_mask); + m_regs.csd2 |= data & mem_mask; break; case 0x14a: - verboselog(space.machine(), 5, "mc68328_w: CSD2(16) = %04x\n", data); - mc68328->regs.csd2 &= ~(mem_mask << 16); - mc68328->regs.csd2 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSD2(16) = %04x\n", data); + m_regs.csd2 &= ~(mem_mask << 16); + m_regs.csd2 |= (data & mem_mask) << 16; break; case 0x14c: - verboselog(space.machine(), 5, "mc68328_w: CSD3(0) = %04x\n", data); - mc68328->regs.csd3 &= 0xffff0000 | (~mem_mask); - mc68328->regs.csd3 |= data & mem_mask; + verboselog(machine(), 5, "mc68328_w: CSD3(0) = %04x\n", data); + m_regs.csd3 &= 0xffff0000 | (~mem_mask); + m_regs.csd3 |= data & mem_mask; break; case 0x14e: - verboselog(space.machine(), 5, "mc68328_w: CSD3(16) = %04x\n", data); - mc68328->regs.csd3 &= ~(mem_mask << 16); - mc68328->regs.csd3 |= (data & mem_mask) << 16; + verboselog(machine(), 5, "mc68328_w: CSD3(16) = %04x\n", data); + m_regs.csd3 &= ~(mem_mask << 16); + m_regs.csd3 |= (data & mem_mask) << 16; break; case 0x200: - verboselog(space.machine(), 2, "mc68328_w: PLLCR = %04x\n", data); - mc68328->regs.pllcr = data; + verboselog(machine(), 2, "mc68328_w: PLLCR = %04x\n", data); + m_regs.pllcr = data; break; case 0x202: - verboselog(space.machine(), 2, "mc68328_w: PLLFSR = %04x\n", data); - mc68328->regs.pllfsr = data; + verboselog(machine(), 2, "mc68328_w: PLLFSR = %04x\n", data); + m_regs.pllfsr = data; break; case 0x206: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PCTLR = %02x\n", data & 0x00ff); - mc68328->regs.pctlr = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PCTLR = %02x\n", data & 0x00ff); + m_regs.pctlr = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff206) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff206) = %02x\n", (data >> 8) & 0x00ff); } break; case 0x300: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff301) = %02x\n", data & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff301) = %02x\n", data & 0x00ff); } else { - verboselog(space.machine(), 2, "mc68328_w: IVR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.ivr = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: IVR = %02x\n", (data >> 8) & 0x00ff); + m_regs.ivr = (data >> 8) & 0x00ff; } break; case 0x302: - verboselog(space.machine(), 2, "mc68328_w: ICR = %04x\n", data); - mc68328->regs.icr = data; + verboselog(machine(), 2, "mc68328_w: ICR = %04x\n", data); + m_regs.icr = data; break; case 0x304: - verboselog(space.machine(), 2, "mc68328_w: IMR(16) = %04x\n", data); - mc68328->regs.imr &= ~(mem_mask << 16); - mc68328->regs.imr |= (data & mem_mask) << 16; - mc68328->regs.isr &= ~((data & mem_mask) << 16); + verboselog(machine(), 2, "mc68328_w: IMR(16) = %04x\n", data); + m_regs.imr &= ~(mem_mask << 16); + m_regs.imr |= (data & mem_mask) << 16; + m_regs.isr &= ~((data & mem_mask) << 16); - imr_diff = imr_old ^ mc68328->regs.imr; - mc68328_set_interrupt_line(device, imr_diff, 0); + imr_diff = imr_old ^ m_regs.imr; + set_interrupt_line(imr_diff, 0); break; case 0x306: - verboselog(space.machine(), 2, "mc68328_w: IMR(0) = %04x\n", data); - mc68328->regs.imr &= 0xffff0000 | (~mem_mask); - mc68328->regs.imr |= data & mem_mask; - mc68328->regs.isr &= ~(data & mem_mask); + verboselog(machine(), 2, "mc68328_w: IMR(0) = %04x\n", data); + m_regs.imr &= 0xffff0000 | (~mem_mask); + m_regs.imr |= data & mem_mask; + m_regs.isr &= ~(data & mem_mask); - imr_diff = imr_old ^ mc68328->regs.imr; - mc68328_set_interrupt_line(device, imr_diff, 0); + imr_diff = imr_old ^ m_regs.imr; + set_interrupt_line(imr_diff, 0); break; case 0x308: - { - verboselog(space.machine(), 2, "mc68328_w: IWR(16) = %04x\n", data); - mc68328->regs.iwr &= ~(mem_mask << 16); - mc68328->regs.iwr |= (data & mem_mask) << 16; - } - break; + verboselog(machine(), 2, "mc68328_w: IWR(16) = %04x\n", data); + m_regs.iwr &= ~(mem_mask << 16); + m_regs.iwr |= (data & mem_mask) << 16; + break; case 0x30a: - verboselog(space.machine(), 2, "mc68328_w: IWR(0) = %04x\n", data); - mc68328->regs.iwr &= 0xffff0000 | (~mem_mask); - mc68328->regs.iwr |= data & mem_mask; + verboselog(machine(), 2, "mc68328_w: IWR(0) = %04x\n", data); + m_regs.iwr &= 0xffff0000 | (~mem_mask); + m_regs.iwr |= data & mem_mask; break; case 0x30c: - verboselog(space.machine(), 2, "mc68328_w: ISR(16) = %04x\n", data); + verboselog(machine(), 2, "mc68328_w: ISR(16) = %04x\n", data); // Clear edge-triggered IRQ1 - if((mc68328->regs.icr & ICR_ET1) == ICR_ET1 && (data & INT_IRQ1_SHIFT) == INT_IRQ1_SHIFT) + if ((m_regs.icr & ICR_ET1) == ICR_ET1 && (data & INT_IRQ1_SHIFT) == INT_IRQ1_SHIFT) { - mc68328->regs.isr &= ~INT_IRQ1; + m_regs.isr &= ~INT_IRQ1; } // Clear edge-triggered IRQ2 - if((mc68328->regs.icr & ICR_ET2) == ICR_ET2 && (data & INT_IRQ2_SHIFT) == INT_IRQ2_SHIFT) + if ((m_regs.icr & ICR_ET2) == ICR_ET2 && (data & INT_IRQ2_SHIFT) == INT_IRQ2_SHIFT) { - mc68328->regs.isr &= ~INT_IRQ2; + m_regs.isr &= ~INT_IRQ2; } // Clear edge-triggered IRQ3 - if((mc68328->regs.icr & ICR_ET3) == ICR_ET3 && (data & INT_IRQ3_SHIFT) == INT_IRQ3_SHIFT) + if ((m_regs.icr & ICR_ET3) == ICR_ET3 && (data & INT_IRQ3_SHIFT) == INT_IRQ3_SHIFT) { - mc68328->regs.isr &= ~INT_IRQ3; + m_regs.isr &= ~INT_IRQ3; } // Clear edge-triggered IRQ6 - if((mc68328->regs.icr & ICR_ET6) == ICR_ET6 && (data & INT_IRQ6_SHIFT) == INT_IRQ6_SHIFT) + if ((m_regs.icr & ICR_ET6) == ICR_ET6 && (data & INT_IRQ6_SHIFT) == INT_IRQ6_SHIFT) { - mc68328->regs.isr &= ~INT_IRQ6; + m_regs.isr &= ~INT_IRQ6; } // Clear edge-triggered IRQ7 - if((data & INT_IRQ7_SHIFT) == INT_IRQ7_SHIFT) + if ((data & INT_IRQ7_SHIFT) == INT_IRQ7_SHIFT) { - mc68328->regs.isr &= ~INT_IRQ7; + m_regs.isr &= ~INT_IRQ7; } break; case 0x30e: - verboselog(space.machine(), 2, "mc68328_w: ISR(0) = %04x (Ignored)\n", data); + verboselog(machine(), 2, "mc68328_w: ISR(0) = %04x (Ignored)\n", data); break; case 0x310: - verboselog(space.machine(), 2, "mc68328_w: IPR(16) = %04x (Ignored)\n"); + verboselog(machine(), 2, "mc68328_w: IPR(16) = %04x (Ignored)\n"); break; case 0x312: - verboselog(space.machine(), 2, "mc68328_w: IPR(0) = %04x (Ignored)\n"); + verboselog(machine(), 2, "mc68328_w: IPR(0) = %04x (Ignored)\n"); break; case 0x400: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PADATA = %02x\n", data & 0x00ff); - mc68328->regs.padata = data & 0x00ff; - if(!mc68328->out_port_a.isnull()) + verboselog(machine(), 2, "mc68328_w: PADATA = %02x\n", data & 0x00ff); + m_regs.padata = data & 0x00ff; + if (!m_out_port_a.isnull()) { - mc68328->out_port_a( 0, data & 0x00ff ); + m_out_port_a(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PADIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.padir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PADIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.padir = (data >> 8) & 0x00ff; } break; case 0x402: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PASEL = %02x\n", data & 0x00ff); - mc68328->regs.pasel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PASEL = %02x\n", data & 0x00ff); + m_regs.pasel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff402) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff402) = %02x\n", (data >> 8) & 0x00ff); } break; case 0x408: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PBDATA = %02x\n", data & 0x00ff); - mc68328->regs.pbdata = data & 0x00ff; - if(!mc68328->out_port_b.isnull()) + verboselog(machine(), 2, "mc68328_w: PBDATA = %02x\n", data & 0x00ff); + m_regs.pbdata = data & 0x00ff; + if (!m_out_port_b.isnull()) { - mc68328->out_port_b( 0, data & 0x00ff ); + m_out_port_b(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PBDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pbdir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PBDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pbdir = (data >> 8) & 0x00ff; } break; case 0x40a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PBSEL = %02x\n", data & 0x00ff); - mc68328->regs.pbsel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PBSEL = %02x\n", data & 0x00ff); + m_regs.pbsel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff40a) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff40a) = %02x\n", (data >> 8) & 0x00ff); } break; case 0x410: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PCDATA = %02x\n", data & 0x00ff); - mc68328->regs.pcdata = data & 0x00ff; - if(!mc68328->out_port_c.isnull()) + verboselog(machine(), 2, "mc68328_w: PCDATA = %02x\n", data & 0x00ff); + m_regs.pcdata = data & 0x00ff; + if (!m_out_port_c.isnull()) { - mc68328->out_port_c( 0, data & 0x00ff ); + m_out_port_c(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PCDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pcdir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PCDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pcdir = (data >> 8) & 0x00ff; } break; case 0x412: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PCSEL = %02x\n", data & 0x00ff); - mc68328->regs.pcsel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PCSEL = %02x\n", data & 0x00ff); + m_regs.pcsel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff412) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff412) = %02x\n", (data >> 8) & 0x00ff); } break; case 0x418: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PDDATA = %02x\n", data & 0x00ff); + verboselog(machine(), 2, "mc68328_w: PDDATA = %02x\n", data & 0x00ff); - mc68328->regs.pddataedge &= ~(data & 0x00ff); - mc68328_poll_port_d_interrupts(device); + m_regs.pddataedge &= ~(data & 0x00ff); + poll_port_d_interrupts(); } else { - verboselog(space.machine(), 2, "mc68328_w: PDDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pddir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PDDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pddir = (data >> 8) & 0x00ff; } break; case 0x41a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff41b) = %02x\n", data & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff41b) = %02x\n", data & 0x00ff); } else { - verboselog(space.machine(), 2, "mc68328_w: PDPUEN = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pdpuen = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PDPUEN = %02x\n", (data >> 8) & 0x00ff); + m_regs.pdpuen = (data >> 8) & 0x00ff; } break; case 0x41c: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PDIRQEN = %02x\n", data & 0x00ff); - mc68328->regs.pdirqen = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PDIRQEN = %02x\n", data & 0x00ff); + m_regs.pdirqen = data & 0x00ff; - mc68328_poll_port_d_interrupts(device); + poll_port_d_interrupts(); } else { - verboselog(space.machine(), 2, "mc68328_w: PDPOL = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pdpol = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PDPOL = %02x\n", (data >> 8) & 0x00ff); + m_regs.pdpol = (data >> 8) & 0x00ff; } break; case 0x41e: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PDIRQEDGE = %02x\n", data & 0x00ff); - mc68328->regs.pdirqedge = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PDIRQEDGE = %02x\n", data & 0x00ff); + m_regs.pdirqedge = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff41e) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff41e) = %02x\n", (data >> 8) & 0x00ff); } break; case 0x420: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PEDATA = %02x\n", data & 0x00ff); - mc68328->regs.pedata = data & 0x00ff; - if(!mc68328->out_port_e.isnull()) + verboselog(machine(), 2, "mc68328_w: PEDATA = %02x\n", data & 0x00ff); + m_regs.pedata = data & 0x00ff; + if (!m_out_port_e.isnull()) { - mc68328->out_port_e( 0, data & 0x00ff ); + m_out_port_e(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PEDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pedir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PEDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pedir = (data >> 8) & 0x00ff; } break; case 0x422: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PESEL = %02x\n", data & 0x00ff); - mc68328->regs.pesel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PESEL = %02x\n", data & 0x00ff); + m_regs.pesel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: PEPUEN = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pepuen = (data >> 8) & 0x00ff; - mc68328->regs.pedata |= mc68328->regs.pepuen; + verboselog(machine(), 2, "mc68328_w: PEPUEN = %02x\n", (data >> 8) & 0x00ff); + m_regs.pepuen = (data >> 8) & 0x00ff; + m_regs.pedata |= m_regs.pepuen; } break; case 0x428: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PFDATA = %02x\n", data & 0x00ff); - mc68328->regs.pfdata = data & 0x00ff; - if(!mc68328->out_port_f.isnull()) + verboselog(machine(), 2, "mc68328_w: PFDATA = %02x\n", data & 0x00ff); + m_regs.pfdata = data & 0x00ff; + if (!m_out_port_f.isnull()) { - mc68328->out_port_f( 0, data & 0x00ff ); + m_out_port_f(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PFDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pfdir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PFDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pfdir = (data >> 8) & 0x00ff; } break; case 0x42a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PFSEL = %02x\n", data & 0x00ff); - mc68328->regs.pfsel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PFSEL = %02x\n", data & 0x00ff); + m_regs.pfsel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: PFPUEN = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pfpuen = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PFPUEN = %02x\n", (data >> 8) & 0x00ff); + m_regs.pfpuen = (data >> 8) & 0x00ff; } break; case 0x430: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PGDATA = %02x\n", data & 0x00ff); - mc68328->regs.pgdata = data & 0x00ff; - if(!mc68328->out_port_g.isnull()) + verboselog(machine(), 2, "mc68328_w: PGDATA = %02x\n", data & 0x00ff); + m_regs.pgdata = data & 0x00ff; + if (!m_out_port_g.isnull()) { - mc68328->out_port_g( 0, data & 0x00ff ); + m_out_port_g(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PGDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pgdir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PGDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pgdir = (data >> 8) & 0x00ff; } break; case 0x432: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PGSEL = %02x\n", data & 0x00ff); - mc68328->regs.pgsel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PGSEL = %02x\n", data & 0x00ff); + m_regs.pgsel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: PGPUEN = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pgpuen = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PGPUEN = %02x\n", (data >> 8) & 0x00ff); + m_regs.pgpuen = (data >> 8) & 0x00ff; } break; case 0x438: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PJDATA = %02x\n", data & 0x00ff); - mc68328->regs.pjdata = data & 0x00ff; - if(!mc68328->out_port_j.isnull()) + verboselog(machine(), 2, "mc68328_w: PJDATA = %02x\n", data & 0x00ff); + m_regs.pjdata = data & 0x00ff; + if (!m_out_port_j.isnull()) { - mc68328->out_port_j( 0, data & 0x00ff ); + m_out_port_j(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PJDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pjdir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PJDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pjdir = (data >> 8) & 0x00ff; } break; case 0x43a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PJSEL = %02x\n", data & 0x00ff); - mc68328->regs.pjsel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PJSEL = %02x\n", data & 0x00ff); + m_regs.pjsel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfff43a) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfff43a) = %02x\n", (data >> 8) & 0x00ff); } break; case 0x440: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PKDATA = %02x\n", data & 0x00ff); - mc68328->regs.pkdata = data & 0x00ff; - if(!mc68328->out_port_k.isnull()) + verboselog(machine(), 2, "mc68328_w: PKDATA = %02x\n", data & 0x00ff); + m_regs.pkdata = data & 0x00ff; + if (!m_out_port_k.isnull()) { - mc68328->out_port_k( 0, data & 0x00ff ); + m_out_port_k(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PKDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pkdir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PKDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pkdir = (data >> 8) & 0x00ff; } break; case 0x442: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PKSEL = %02x\n", data & 0x00ff); - mc68328->regs.pksel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PKSEL = %02x\n", data & 0x00ff); + m_regs.pksel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: PKPUEN = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pgpuen = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PKPUEN = %02x\n", (data >> 8) & 0x00ff); + m_regs.pgpuen = (data >> 8) & 0x00ff; } break; case 0x448: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PMDATA = %02x\n", data & 0x00ff); - mc68328->regs.pmdata = data & 0x00ff; - if(!mc68328->out_port_m.isnull()) + verboselog(machine(), 2, "mc68328_w: PMDATA = %02x\n", data & 0x00ff); + m_regs.pmdata = data & 0x00ff; + if (!m_out_port_m.isnull()) { - mc68328->out_port_m( 0, data & 0x00ff ); + m_out_port_m(0, data & 0x00ff); } } else { - verboselog(space.machine(), 2, "mc68328_w: PMDIR = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pmdir = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PMDIR = %02x\n", (data >> 8) & 0x00ff); + m_regs.pmdir = (data >> 8) & 0x00ff; } break; case 0x44a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: PMSEL = %02x\n", data & 0x00ff); - mc68328->regs.pmsel = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PMSEL = %02x\n", data & 0x00ff); + m_regs.pmsel = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: PMPUEN = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.pmpuen = (data >> 8) & 0x00ff; + verboselog(machine(), 2, "mc68328_w: PMPUEN = %02x\n", (data >> 8) & 0x00ff); + m_regs.pmpuen = (data >> 8) & 0x00ff; } break; case 0x500: - verboselog(space.machine(), 2, "mc68328_w: PWMC = %04x\n", data); + verboselog(machine(), 2, "mc68328_w: PWMC = %04x\n", data); - mc68328->regs.pwmc = data; + m_regs.pwmc = data; - if(mc68328->regs.pwmc & PWMC_PWMIRQ) + if (m_regs.pwmc & PWMC_PWMIRQ) { - mc68328_set_interrupt_line(device, INT_PWM, 1); + set_interrupt_line(INT_PWM, 1); } - mc68328->regs.pwmc &= ~PWMC_LOAD; + m_regs.pwmc &= ~PWMC_LOAD; - if((mc68328->regs.pwmc & PWMC_PWMEN) != 0 && mc68328->regs.pwmw != 0 && mc68328->regs.pwmp != 0) + if ((m_regs.pwmc & PWMC_PWMEN) != 0 && m_regs.pwmw != 0 && m_regs.pwmp != 0) { UINT32 frequency = 32768 * 506; - UINT32 divisor = 4 << (mc68328->regs.pwmc & PWMC_CLKSEL); // ?? Datasheet says 2 <<, but then we're an octave higher than CoPilot. + UINT32 divisor = 4 << (m_regs.pwmc & PWMC_CLKSEL); // ?? Datasheet says 2 <<, but then we're an octave higher than CoPilot. attotime period; frequency /= divisor; - period = attotime::from_hz(frequency) * mc68328->regs.pwmw; - mc68328->pwm->adjust(period); - if(mc68328->regs.pwmc & PWMC_IRQEN) + period = attotime::from_hz(frequency) * m_regs.pwmw; + m_pwm->adjust(period); + if (m_regs.pwmc & PWMC_IRQEN) { - mc68328_set_interrupt_line(device, INT_PWM, 1); + set_interrupt_line(INT_PWM, 1); } - mc68328->regs.pwmc ^= PWMC_PIN; + m_regs.pwmc ^= PWMC_PIN; } else { - mc68328->pwm->adjust(attotime::never); + m_pwm->adjust(attotime::never); } break; case 0x502: - verboselog(space.machine(), 2, "mc68328_w: PWMP = %04x\n", data); - mc68328->regs.pwmp = data; + verboselog(machine(), 2, "mc68328_w: PWMP = %04x\n", data); + m_regs.pwmp = data; break; case 0x504: - verboselog(space.machine(), 2, "mc68328_w: PWMW = %04x\n", data); - mc68328->regs.pwmw = data; + verboselog(machine(), 2, "mc68328_w: PWMW = %04x\n", data); + m_regs.pwmw = data; break; case 0x506: - verboselog(space.machine(), 2, "mc68328_w: PWMCNT = %04x\n", data); - mc68328->regs.pwmcnt = 0; + verboselog(machine(), 2, "mc68328_w: PWMCNT = %04x\n", data); + m_regs.pwmcnt = 0; break; case 0x600: - verboselog(space.machine(), 2, "mc68328_w: TCTL1 = %04x\n", data); - temp16[0] = mc68328->regs.tctl[0]; - mc68328->regs.tctl[0] = data; - if((temp16[0] & TCTL_TEN) == (mc68328->regs.tctl[0] & TCTL_TEN)) + verboselog(machine(), 2, "mc68328_w: TCTL1 = %04x\n", data); + temp16[0] = m_regs.tctl[0]; + m_regs.tctl[0] = data; + if ((temp16[0] & TCTL_TEN) == (m_regs.tctl[0] & TCTL_TEN)) { - mc68328_maybe_start_timer(device, 0, 0); + maybe_start_timer(0, 0); } - else if((temp16[0] & TCTL_TEN) != TCTL_TEN_ENABLE && (mc68328->regs.tctl[0] & TCTL_TEN) == TCTL_TEN_ENABLE) + else if ((temp16[0] & TCTL_TEN) != TCTL_TEN_ENABLE && (m_regs.tctl[0] & TCTL_TEN) == TCTL_TEN_ENABLE) { - mc68328_maybe_start_timer(device, 0, 1); + maybe_start_timer(0, 1); } break; case 0x602: - verboselog(space.machine(), 2, "mc68328_w: TPRER1 = %04x\n", data); - mc68328->regs.tprer[0] = data; - mc68328_maybe_start_timer(device, 0, 0); + verboselog(machine(), 2, "mc68328_w: TPRER1 = %04x\n", data); + m_regs.tprer[0] = data; + maybe_start_timer(0, 0); break; case 0x604: - verboselog(space.machine(), 2, "mc68328_w: TCMP1 = %04x\n", data); - mc68328->regs.tcmp[0] = data; - mc68328_maybe_start_timer(device, 0, 0); + verboselog(machine(), 2, "mc68328_w: TCMP1 = %04x\n", data); + m_regs.tcmp[0] = data; + maybe_start_timer(0, 0); break; case 0x606: - verboselog(space.machine(), 2, "mc68328_w: TCR1 = %04x (Ignored)\n", data); + verboselog(machine(), 2, "mc68328_w: TCR1 = %04x (Ignored)\n", data); break; case 0x608: - verboselog(space.machine(), 2, "mc68328_w: TCN1 = %04x (Ignored)\n", data); + verboselog(machine(), 2, "mc68328_w: TCN1 = %04x (Ignored)\n", data); break; case 0x60a: - verboselog(space.machine(), 5, "mc68328_w: TSTAT1 = %04x\n", data); - mc68328->regs.tstat[0] &= ~mc68328->regs.tclear[0]; - if(!(mc68328->regs.tstat[0] & TSTAT_COMP)) + verboselog(machine(), 5, "mc68328_w: TSTAT1 = %04x\n", data); + m_regs.tstat[0] &= ~m_regs.tclear[0]; + if (!(m_regs.tstat[0] & TSTAT_COMP)) { - mc68328_set_interrupt_line(device, INT_TIMER1, 0); + set_interrupt_line(INT_TIMER1, 0); } break; case 0x60c: - verboselog(space.machine(), 2, "mc68328_w: TCTL2 = %04x\n", data); - temp16[0] = mc68328->regs.tctl[1]; - mc68328->regs.tctl[1] = data; - if((temp16[0] & TCTL_TEN) == (mc68328->regs.tctl[1] & TCTL_TEN)) + verboselog(machine(), 2, "mc68328_w: TCTL2 = %04x\n", data); + temp16[0] = m_regs.tctl[1]; + m_regs.tctl[1] = data; + if ((temp16[0] & TCTL_TEN) == (m_regs.tctl[1] & TCTL_TEN)) { - mc68328_maybe_start_timer(device, 1, 0); + maybe_start_timer(1, 0); } - else if((temp16[0] & TCTL_TEN) != TCTL_TEN_ENABLE && (mc68328->regs.tctl[1] & TCTL_TEN) == TCTL_TEN_ENABLE) + else if ((temp16[0] & TCTL_TEN) != TCTL_TEN_ENABLE && (m_regs.tctl[1] & TCTL_TEN) == TCTL_TEN_ENABLE) { - mc68328_maybe_start_timer(device, 1, 1); + maybe_start_timer(1, 1); } break; case 0x60e: - verboselog(space.machine(), 2, "mc68328_w: TPRER2 = %04x\n", data); - mc68328->regs.tprer[1] = data; - mc68328_maybe_start_timer(device, 1, 0); + verboselog(machine(), 2, "mc68328_w: TPRER2 = %04x\n", data); + m_regs.tprer[1] = data; + maybe_start_timer(1, 0); break; case 0x610: - verboselog(space.machine(), 2, "mc68328_w: TCMP2 = %04x\n", data); - mc68328->regs.tcmp[1] = data; - mc68328_maybe_start_timer(device, 1, 0); + verboselog(machine(), 2, "mc68328_w: TCMP2 = %04x\n", data); + m_regs.tcmp[1] = data; + maybe_start_timer(1, 0); break; case 0x612: - verboselog(space.machine(), 2, "mc68328_w: TCR2 = %04x (Ignored)\n", data); + verboselog(machine(), 2, "mc68328_w: TCR2 = %04x (Ignored)\n", data); break; case 0x614: - verboselog(space.machine(), 2, "mc68328_w: TCN2 = %04x (Ignored)\n", data); + verboselog(machine(), 2, "mc68328_w: TCN2 = %04x (Ignored)\n", data); break; case 0x616: - verboselog(space.machine(), 2, "mc68328_w: TSTAT2 = %04x\n", data); - mc68328->regs.tstat[1] &= ~mc68328->regs.tclear[1]; - if(!(mc68328->regs.tstat[1] & TSTAT_COMP)) + verboselog(machine(), 2, "mc68328_w: TSTAT2 = %04x\n", data); + m_regs.tstat[1] &= ~m_regs.tclear[1]; + if (!(m_regs.tstat[1] & TSTAT_COMP)) { - mc68328_set_interrupt_line(device, INT_TIMER2, 0); + set_interrupt_line(INT_TIMER2, 0); } break; case 0x618: - verboselog(space.machine(), 2, "mc68328_w: WCTLR = %04x\n", data); - mc68328->regs.wctlr = data; + verboselog(machine(), 2, "mc68328_w: WCTLR = %04x\n", data); + m_regs.wctlr = data; break; case 0x61a: - verboselog(space.machine(), 2, "mc68328_w: WCMPR = %04x\n", data); - mc68328->regs.wcmpr = data; + verboselog(machine(), 2, "mc68328_w: WCMPR = %04x\n", data); + m_regs.wcmpr = data; break; case 0x61c: - verboselog(space.machine(), 2, "mc68328_w: WCN = %04x (Ignored)\n", data); + verboselog(machine(), 2, "mc68328_w: WCN = %04x (Ignored)\n", data); break; case 0x700: - verboselog(space.machine(), 2, "mc68328_w: SPISR = %04x\n", data); - mc68328->regs.spisr = data; + verboselog(machine(), 2, "mc68328_w: SPISR = %04x\n", data); + m_regs.spisr = data; break; case 0x800: - verboselog(space.machine(), 2, "mc68328_w: SPIMDATA = %04x\n", data); - if(!mc68328->out_spim.isnull()) + verboselog(machine(), 2, "mc68328_w: SPIMDATA = %04x\n", data); + if (!m_out_spim.isnull()) { - mc68328->out_spim( 0, data, 0xffff ); + m_out_spim(0, data, 0xffff); } else { - mc68328->regs.spimdata = data; + m_regs.spimdata = data; } break; case 0x802: - verboselog(space.machine(), 2, "mc68328_w: SPIMCONT = %04x\n", data); - verboselog(space.machine(), 3, " Count = %d\n", data & SPIM_CLOCK_COUNT); - verboselog(space.machine(), 3, " Polarity = %s\n", (data & SPIM_POL) ? "Inverted" : "Active-high"); - verboselog(space.machine(), 3, " Phase = %s\n", (data & SPIM_PHA) ? "Opposite" : "Normal"); - verboselog(space.machine(), 3, " IRQ Enable = %s\n", (data & SPIM_IRQEN) ? "Enable" : "Disable"); - verboselog(space.machine(), 3, " IRQ Pending = %s\n", (data & SPIM_SPIMIRQ) ? "Yes" : "No"); - verboselog(space.machine(), 3, " Exchange = %s\n", (data & SPIM_XCH) ? "Initiate" : "Idle"); - verboselog(space.machine(), 3, " SPIM Enable = %s\n", (data & SPIM_SPMEN) ? "Enable" : "Disable"); - verboselog(space.machine(), 3, " Data Rate = Divide By %d\n", 1 << ((((data & SPIM_RATE) >> 13) & 0x0007) + 2) ); - mc68328->regs.spimcont = data; + verboselog(machine(), 2, "mc68328_w: SPIMCONT = %04x\n", data); + verboselog(machine(), 3, " Count = %d\n", data & SPIM_CLOCK_COUNT); + verboselog(machine(), 3, " Polarity = %s\n", (data & SPIM_POL) ? "Inverted" : "Active-high"); + verboselog(machine(), 3, " Phase = %s\n", (data & SPIM_PHA) ? "Opposite" : "Normal"); + verboselog(machine(), 3, " IRQ Enable = %s\n", (data & SPIM_IRQEN) ? "Enable" : "Disable"); + verboselog(machine(), 3, " IRQ Pending = %s\n", (data & SPIM_SPIMIRQ) ? "Yes" : "No"); + verboselog(machine(), 3, " Exchange = %s\n", (data & SPIM_XCH) ? "Initiate" : "Idle"); + verboselog(machine(), 3, " SPIM Enable = %s\n", (data & SPIM_SPMEN) ? "Enable" : "Disable"); + verboselog(machine(), 3, " Data Rate = Divide By %d\n", 1 << ((((data & SPIM_RATE) >> 13) & 0x0007) + 2) ); + m_regs.spimcont = data; // $$HACK$$ We should probably emulate the ADS7843 A/D device properly. - if(data & SPIM_XCH) + if (data & SPIM_XCH) { - mc68328->regs.spimcont &= ~SPIM_XCH; - if(mc68328->iface->spim_xch_trigger) + m_regs.spimcont &= ~SPIM_XCH; + if (!m_spim_xch_trigger.isnull()) { - (mc68328->iface->spim_xch_trigger)( device ); + m_spim_xch_trigger(0); } - if(data & SPIM_IRQEN) + if (data & SPIM_IRQEN) { - mc68328->regs.spimcont |= SPIM_SPIMIRQ; - verboselog(space.machine(), 3, "Triggering SPIM Interrupt\n" ); - mc68328_set_interrupt_line(device, INT_SPIM, 1); + m_regs.spimcont |= SPIM_SPIMIRQ; + verboselog(machine(), 3, "Triggering SPIM Interrupt\n" ); + set_interrupt_line(INT_SPIM, 1); } } - if(!(data & SPIM_IRQEN)) + if (!(data & SPIM_IRQEN)) { - mc68328_set_interrupt_line(device, INT_SPIM, 0); + set_interrupt_line(INT_SPIM, 0); } break; case 0x900: - verboselog(space.machine(), 2, "mc68328_w: USTCNT = %04x\n", data); - mc68328->regs.ustcnt = data; + verboselog(machine(), 2, "mc68328_w: USTCNT = %04x\n", data); + m_regs.ustcnt = data; break; case 0x902: - verboselog(space.machine(), 2, "mc68328_w: UBAUD = %04x\n", data); - mc68328->regs.ubaud = data; + verboselog(machine(), 2, "mc68328_w: UBAUD = %04x\n", data); + m_regs.ubaud = data; break; case 0x904: - verboselog(space.machine(), 2, "mc68328_w: URX = %04x\n", data); + verboselog(machine(), 2, "mc68328_w: URX = %04x\n", data); break; case 0x906: - verboselog(space.machine(), 2, "mc68328_w: UTX = %04x\n", data); + verboselog(machine(), 2, "mc68328_w: UTX = %04x\n", data); break; case 0x908: - verboselog(space.machine(), 2, "mc68328_w: UMISC = %04x\n", data); - mc68328->regs.umisc = data; + verboselog(machine(), 2, "mc68328_w: UMISC = %04x\n", data); + m_regs.umisc = data; break; case 0xa00: - verboselog(space.machine(), 2, "mc68328_w: LSSA(16) = %04x\n", data); - mc68328->regs.lssa &= ~(mem_mask << 16); - mc68328->regs.lssa |= (data & mem_mask) << 16; - verboselog(space.machine(), 3, " Address: %08x\n", mc68328->regs.lssa); + verboselog(machine(), 2, "mc68328_w: LSSA(16) = %04x\n", data); + m_regs.lssa &= ~(mem_mask << 16); + m_regs.lssa |= (data & mem_mask) << 16; + verboselog(machine(), 3, " Address: %08x\n", m_regs.lssa); break; case 0xa02: - verboselog(space.machine(), 2, "mc68328_w: LSSA(0) = %04x\n", data); - mc68328->regs.lssa &= 0xffff0000 | (~mem_mask); - mc68328->regs.lssa |= data & mem_mask; - verboselog(space.machine(), 3, " Address: %08x\n", mc68328->regs.lssa); + verboselog(machine(), 2, "mc68328_w: LSSA(0) = %04x\n", data); + m_regs.lssa &= 0xffff0000 | (~mem_mask); + m_regs.lssa |= data & mem_mask; + verboselog(machine(), 3, " Address: %08x\n", m_regs.lssa); break; case 0xa04: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LVPW = %02x\n", data & 0x00ff); - mc68328->regs.lvpw = data & 0x00ff; - verboselog(space.machine(), 3, " Page Width: %d or %d\n", (mc68328->regs.lvpw + 1) * ((mc68328->regs.lpicf & 0x01) ? 8 : 16)); + verboselog(machine(), 2, "mc68328_w: LVPW = %02x\n", data & 0x00ff); + m_regs.lvpw = data & 0x00ff; + verboselog(machine(), 3, " Page Width: %d or %d\n", (m_regs.lvpw + 1) * ((m_regs.lpicf & 0x01) ? 8 : 16)); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa04) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa04) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa08: - verboselog(space.machine(), 2, "mc68328_w: LXMAX = %04x\n", data); - mc68328->regs.lxmax = data; - verboselog(space.machine(), 3, " Width: %d\n", (data & 0x03ff) + 1); + verboselog(machine(), 2, "mc68328_w: LXMAX = %04x\n", data); + m_regs.lxmax = data; + verboselog(machine(), 3, " Width: %d\n", (data & 0x03ff) + 1); break; case 0xa0a: - verboselog(space.machine(), 2, "mc68328_w: LYMAX = %04x\n", data); - mc68328->regs.lymax = data; - verboselog(space.machine(), 3, " Height: %d\n", (data & 0x03ff) + 1); + verboselog(machine(), 2, "mc68328_w: LYMAX = %04x\n", data); + m_regs.lymax = data; + verboselog(machine(), 3, " Height: %d\n", (data & 0x03ff) + 1); break; case 0xa18: - verboselog(space.machine(), 2, "mc68328_w: LCXP = %04x\n", data); - mc68328->regs.lcxp = data; - verboselog(space.machine(), 3, " X Position: %d\n", data & 0x03ff); - switch(mc68328->regs.lcxp >> 14) + verboselog(machine(), 2, "mc68328_w: LCXP = %04x\n", data); + m_regs.lcxp = data; + verboselog(machine(), 3, " X Position: %d\n", data & 0x03ff); + switch (m_regs.lcxp >> 14) { case 0: - verboselog(space.machine(), 3, " Cursor Control: Transparent\n"); + verboselog(machine(), 3, " Cursor Control: Transparent\n"); break; case 1: - verboselog(space.machine(), 3, " Cursor Control: Black\n"); + verboselog(machine(), 3, " Cursor Control: Black\n"); break; case 2: - verboselog(space.machine(), 3, " Cursor Control: Reverse\n"); + verboselog(machine(), 3, " Cursor Control: Reverse\n"); break; case 3: - verboselog(space.machine(), 3, " Cursor Control: Invalid\n"); + verboselog(machine(), 3, " Cursor Control: Invalid\n"); break; } break; case 0xa1a: - verboselog(space.machine(), 2, "mc68328_w: LCYP = %04x\n", data); - mc68328->regs.lcyp = data; - verboselog(space.machine(), 3, " Y Position: %d\n", data & 0x01ff); + verboselog(machine(), 2, "mc68328_w: LCYP = %04x\n", data); + m_regs.lcyp = data; + verboselog(machine(), 3, " Y Position: %d\n", data & 0x01ff); break; case 0xa1c: - verboselog(space.machine(), 2, "mc68328_w: LCWCH = %04x\n", data); - mc68328->regs.lcwch = data; - verboselog(space.machine(), 3, " Width: %d\n", (data >> 8) & 0x1f); - verboselog(space.machine(), 3, " Height: %d\n", data & 0x1f); + verboselog(machine(), 2, "mc68328_w: LCWCH = %04x\n", data); + m_regs.lcwch = data; + verboselog(machine(), 3, " Width: %d\n", (data >> 8) & 0x1f); + verboselog(machine(), 3, " Height: %d\n", data & 0x1f); break; case 0xa1e: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LBLKC = %02x\n", data & 0x00ff); - mc68328->regs.lblkc = data & 0x00ff; - verboselog(space.machine(), 3, " Blink Enable: %d\n", mc68328->regs.lblkc >> 7); - verboselog(space.machine(), 3, " Blink Divisor: %d\n", mc68328->regs.lblkc & 0x7f); + verboselog(machine(), 2, "mc68328_w: LBLKC = %02x\n", data & 0x00ff); + m_regs.lblkc = data & 0x00ff; + verboselog(machine(), 3, " Blink Enable: %d\n", m_regs.lblkc >> 7); + verboselog(machine(), 3, " Blink Divisor: %d\n", m_regs.lblkc & 0x7f); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa1e) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa1e) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa20: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LPOLCF = %02x\n", data & 0x00ff); - mc68328->regs.lpolcf = data & 0x00ff; - verboselog(space.machine(), 3, " LCD Shift Clock Polarity: %s\n", (mc68328->regs.lpicf & 0x08) ? "Active positive edge of LCLK" : "Active negative edge of LCLK"); - verboselog(space.machine(), 3, " First-line marker polarity: %s\n", (mc68328->regs.lpicf & 0x04) ? "Active Low" : "Active High"); - verboselog(space.machine(), 3, " Line-pulse polarity: %s\n", (mc68328->regs.lpicf & 0x02) ? "Active Low" : "Active High"); - verboselog(space.machine(), 3, " Pixel polarity: %s\n", (mc68328->regs.lpicf & 0x01) ? "Active Low" : "Active High"); + verboselog(machine(), 2, "mc68328_w: LPOLCF = %02x\n", data & 0x00ff); + m_regs.lpolcf = data & 0x00ff; + verboselog(machine(), 3, " LCD Shift Clock Polarity: %s\n", (m_regs.lpicf & 0x08) ? "Active positive edge of LCLK" : "Active negative edge of LCLK"); + verboselog(machine(), 3, " First-line marker polarity: %s\n", (m_regs.lpicf & 0x04) ? "Active Low" : "Active High"); + verboselog(machine(), 3, " Line-pulse polarity: %s\n", (m_regs.lpicf & 0x02) ? "Active Low" : "Active High"); + verboselog(machine(), 3, " Pixel polarity: %s\n", (m_regs.lpicf & 0x01) ? "Active Low" : "Active High"); } else { - verboselog(space.machine(), 2, "mc68328_w: LPICF = %02x\n", (data >> 8) & 0x00ff); - mc68328->regs.lpicf = (data >> 8) & 0x00ff; - switch((mc68328->regs.lpicf >> 1) & 0x03) + verboselog(machine(), 2, "mc68328_w: LPICF = %02x\n", (data >> 8) & 0x00ff); + m_regs.lpicf = (data >> 8) & 0x00ff; + switch((m_regs.lpicf >> 1) & 0x03) { case 0: - verboselog(space.machine(), 3, " Bus Size: 1-bit\n"); + verboselog(machine(), 3, " Bus Size: 1-bit\n"); break; case 1: - verboselog(space.machine(), 3, " Bus Size: 2-bit\n"); + verboselog(machine(), 3, " Bus Size: 2-bit\n"); break; case 2: - verboselog(space.machine(), 3, " Bus Size: 4-bit\n"); + verboselog(machine(), 3, " Bus Size: 4-bit\n"); break; case 3: - verboselog(space.machine(), 3, " Bus Size: unused\n"); + verboselog(machine(), 3, " Bus Size: unused\n"); break; } - verboselog(space.machine(), 3, " Gray scale enable: %d\n", mc68328->regs.lpicf & 0x01); + verboselog(machine(), 3, " Gray scale enable: %d\n", m_regs.lpicf & 0x01); } break; case 0xa22: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LACDRC = %02x\n", data & 0x00ff); - mc68328->regs.lacdrc = data & 0x00ff; + verboselog(machine(), 2, "mc68328_w: LACDRC = %02x\n", data & 0x00ff); + m_regs.lacdrc = data & 0x00ff; } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa22) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa22) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa24: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LPXCD = %02x\n", data & 0x00ff); - mc68328->regs.lpxcd = data & 0x00ff; - verboselog(space.machine(), 3, " Clock Divisor: %d\n", mc68328->regs.lpxcd + 1); + verboselog(machine(), 2, "mc68328_w: LPXCD = %02x\n", data & 0x00ff); + m_regs.lpxcd = data & 0x00ff; + verboselog(machine(), 3, " Clock Divisor: %d\n", m_regs.lpxcd + 1); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa24) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa24) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa26: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LCKCON = %02x\n", data & 0x00ff); - mc68328->regs.lckcon = data & 0x00ff; - verboselog(space.machine(), 3, " LCDC Enable: %d\n", (mc68328->regs.lckcon >> 7) & 0x01); - verboselog(space.machine(), 3, " DMA Burst Length: %d\n", ((mc68328->regs.lckcon >> 6) & 0x01) ? 16 : 8); - verboselog(space.machine(), 3, " DMA Bursting Clock Control: %d\n", ((mc68328->regs.lckcon >> 4) & 0x03) + 1); - verboselog(space.machine(), 3, " Bus Width: %d\n", ((mc68328->regs.lckcon >> 1) & 0x01) ? 8 : 16); - verboselog(space.machine(), 3, " Pixel Clock Divider Source: %s\n", (mc68328->regs.lckcon & 0x01) ? "PIX" : "SYS"); + verboselog(machine(), 2, "mc68328_w: LCKCON = %02x\n", data & 0x00ff); + m_regs.lckcon = data & 0x00ff; + verboselog(machine(), 3, " LCDC Enable: %d\n", (m_regs.lckcon >> 7) & 0x01); + verboselog(machine(), 3, " DMA Burst Length: %d\n", ((m_regs.lckcon >> 6) & 0x01) ? 16 : 8); + verboselog(machine(), 3, " DMA Bursting Clock Control: %d\n", ((m_regs.lckcon >> 4) & 0x03) + 1); + verboselog(machine(), 3, " Bus Width: %d\n", ((m_regs.lckcon >> 1) & 0x01) ? 8 : 16); + verboselog(machine(), 3, " Pixel Clock Divider Source: %s\n", (m_regs.lckcon & 0x01) ? "PIX" : "SYS"); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa26) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa26) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa28: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LLBAR = %02x\n", data & 0x00ff); - mc68328->regs.llbar = data & 0x00ff; - verboselog(space.machine(), 3, " Address: %d\n", (mc68328->regs.llbar & 0x7f) * ((mc68328->regs.lpicf & 0x01) ? 8 : 16)); + verboselog(machine(), 2, "mc68328_w: LLBAR = %02x\n", data & 0x00ff); + m_regs.llbar = data & 0x00ff; + verboselog(machine(), 3, " Address: %d\n", (m_regs.llbar & 0x7f) * ((m_regs.lpicf & 0x01) ? 8 : 16)); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa28) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa28) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa2a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LOTCR = %02x\n", data & 0x00ff); + verboselog(machine(), 2, "mc68328_w: LOTCR = %02x\n", data & 0x00ff); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa2a) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa2a) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa2c: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LPOSR = %02x\n", data & 0x00ff); - mc68328->regs.lposr = data & 0x00ff; - verboselog(space.machine(), 3, " Byte Offset: %d\n", (mc68328->regs.lposr >> 3) & 0x01); - verboselog(space.machine(), 3, " Pixel Offset: %d\n", mc68328->regs.lposr & 0x07); + verboselog(machine(), 2, "mc68328_w: LPOSR = %02x\n", data & 0x00ff); + m_regs.lposr = data & 0x00ff; + verboselog(machine(), 3, " Byte Offset: %d\n", (m_regs.lposr >> 3) & 0x01); + verboselog(machine(), 3, " Pixel Offset: %d\n", m_regs.lposr & 0x07); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa2c) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa2c) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa30: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_w: LFRCM = %02x\n", data & 0x00ff); - mc68328->regs.lfrcm = data & 0x00ff; - verboselog(space.machine(), 3, " X Modulation: %d\n", (mc68328->regs.lfrcm >> 4) & 0x0f); - verboselog(space.machine(), 3, " Y Modulation: %d\n", mc68328->regs.lfrcm & 0x0f); + verboselog(machine(), 2, "mc68328_w: LFRCM = %02x\n", data & 0x00ff); + m_regs.lfrcm = data & 0x00ff; + verboselog(machine(), 3, " X Modulation: %d\n", (m_regs.lfrcm >> 4) & 0x0f); + verboselog(machine(), 3, " Y Modulation: %d\n", m_regs.lfrcm & 0x0f); } else { - verboselog(space.machine(), 2, "mc68328_w: Unknown address (0xfffa30) = %02x\n", (data >> 8) & 0x00ff); + verboselog(machine(), 2, "mc68328_w: Unknown address (0xfffa30) = %02x\n", (data >> 8) & 0x00ff); } break; case 0xa32: - verboselog(space.machine(), 2, "mc68328_w: LGPMR = %04x\n", data); - mc68328->regs.lgpmr = data; - verboselog(space.machine(), 3, " Palette 0: %d\n", (mc68328->regs.lgpmr >> 8) & 0x07); - verboselog(space.machine(), 3, " Palette 1: %d\n", (mc68328->regs.lgpmr >> 12) & 0x07); - verboselog(space.machine(), 3, " Palette 2: %d\n", (mc68328->regs.lgpmr >> 0) & 0x07); - verboselog(space.machine(), 3, " Palette 3: %d\n", (mc68328->regs.lgpmr >> 4) & 0x07); + verboselog(machine(), 2, "mc68328_w: LGPMR = %04x\n", data); + m_regs.lgpmr = data; + verboselog(machine(), 3, " Palette 0: %d\n", (m_regs.lgpmr >> 8) & 0x07); + verboselog(machine(), 3, " Palette 1: %d\n", (m_regs.lgpmr >> 12) & 0x07); + verboselog(machine(), 3, " Palette 2: %d\n", (m_regs.lgpmr >> 0) & 0x07); + verboselog(machine(), 3, " Palette 3: %d\n", (m_regs.lgpmr >> 4) & 0x07); break; case 0xb00: - verboselog(space.machine(), 2, "mc68328_w: HMSR(0) = %04x\n", data); - mc68328->regs.hmsr &= ~(mem_mask << 16); - mc68328->regs.hmsr |= (data & mem_mask) << 16; - mc68328->regs.hmsr &= 0x1f3f003f; + verboselog(machine(), 2, "mc68328_w: HMSR(0) = %04x\n", data); + m_regs.hmsr &= ~(mem_mask << 16); + m_regs.hmsr |= (data & mem_mask) << 16; + m_regs.hmsr &= 0x1f3f003f; break; case 0xb02: - verboselog(space.machine(), 2, "mc68328_w: HMSR(16) = %04x\n", data); - mc68328->regs.hmsr &= 0xffff0000 | (~mem_mask); - mc68328->regs.hmsr |= data & mem_mask; - mc68328->regs.hmsr &= 0x1f3f003f; + verboselog(machine(), 2, "mc68328_w: HMSR(16) = %04x\n", data); + m_regs.hmsr &= 0xffff0000 | (~mem_mask); + m_regs.hmsr |= data & mem_mask; + m_regs.hmsr &= 0x1f3f003f; break; case 0xb04: - verboselog(space.machine(), 2, "mc68328_w: ALARM(0) = %04x\n", data); - mc68328->regs.alarm &= ~(mem_mask << 16); - mc68328->regs.alarm |= (data & mem_mask) << 16; - mc68328->regs.alarm &= 0x1f3f003f; + verboselog(machine(), 2, "mc68328_w: ALARM(0) = %04x\n", data); + m_regs.alarm &= ~(mem_mask << 16); + m_regs.alarm |= (data & mem_mask) << 16; + m_regs.alarm &= 0x1f3f003f; break; case 0xb06: - verboselog(space.machine(), 2, "mc68328_w: ALARM(16) = %04x\n", data); - mc68328->regs.alarm &= 0xffff0000 | (~mem_mask); - mc68328->regs.alarm |= data & mem_mask; - mc68328->regs.alarm &= 0x1f3f003f; + verboselog(machine(), 2, "mc68328_w: ALARM(16) = %04x\n", data); + m_regs.alarm &= 0xffff0000 | (~mem_mask); + m_regs.alarm |= data & mem_mask; + m_regs.alarm &= 0x1f3f003f; break; case 0xb0c: - verboselog(space.machine(), 2, "mc68328_w: RTCCTL = %04x\n", data); - mc68328->regs.rtcctl = data & 0x00a0; + verboselog(machine(), 2, "mc68328_w: RTCCTL = %04x\n", data); + m_regs.rtcctl = data & 0x00a0; break; case 0xb0e: - verboselog(space.machine(), 2, "mc68328_w: RTCISR = %04x\n", data); - mc68328->regs.rtcisr &= ~data; - if(mc68328->regs.rtcisr == 0) + verboselog(machine(), 2, "mc68328_w: RTCISR = %04x\n", data); + m_regs.rtcisr &= ~data; + if (m_regs.rtcisr == 0) { - mc68328_set_interrupt_line(device, INT_RTC, 0); + set_interrupt_line(INT_RTC, 0); } break; case 0xb10: - verboselog(space.machine(), 2, "mc68328_w: RTCIENR = %04x\n", data); - mc68328->regs.rtcienr = data & 0x001f; + verboselog(machine(), 2, "mc68328_w: RTCIENR = %04x\n", data); + m_regs.rtcienr = data & 0x001f; break; case 0xb12: - verboselog(space.machine(), 2, "mc68328_w: STPWTCH = %04x\n", data); - mc68328->regs.stpwtch = data & 0x003f; + verboselog(machine(), 2, "mc68328_w: STPWTCH = %04x\n", data); + m_regs.stpwtch = data & 0x003f; break; default: - verboselog(space.machine(), 0, "mc68328_w: Unknown address (0x%06x) = %04x (%04x)\n", 0xfff000 + address, data, mem_mask); + verboselog(machine(), 0, "mc68328_w: Unknown address (0x%06x) = %04x (%04x)\n", 0xfff000 + address, data, mem_mask); break; } } -READ16_DEVICE_HANDLER( mc68328_r ) +READ16_MEMBER( mc68328_device::read ) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); UINT16 temp16 = 0; UINT32 address = offset << 1; - switch(address) + switch (address) { case 0x000: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff001)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff001)\n", mem_mask); } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): SCR = %02x\n", mem_mask, mc68328->regs.scr); - return mc68328->regs.scr << 8; + verboselog(machine(), 2, "mc68328_r (%04x): SCR = %02x\n", mem_mask, m_regs.scr); + return m_regs.scr << 8; } break; case 0x100: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPBASEA = %04x\n", mem_mask, mc68328->regs.grpbasea); - return mc68328->regs.grpbasea; + verboselog(machine(), 2, "mc68328_r (%04x): GRPBASEA = %04x\n", mem_mask, m_regs.grpbasea); + return m_regs.grpbasea; case 0x102: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPBASEB = %04x\n", mem_mask, mc68328->regs.grpbaseb); - return mc68328->regs.grpbaseb; + verboselog(machine(), 2, "mc68328_r (%04x): GRPBASEB = %04x\n", mem_mask, m_regs.grpbaseb); + return m_regs.grpbaseb; case 0x104: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPBASEC = %04x\n", mem_mask, mc68328->regs.grpbasec); - return mc68328->regs.grpbasec; + verboselog(machine(), 2, "mc68328_r (%04x): GRPBASEC = %04x\n", mem_mask, m_regs.grpbasec); + return m_regs.grpbasec; case 0x106: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPBASED = %04x\n", mem_mask, mc68328->regs.grpbased); - return mc68328->regs.grpbased; + verboselog(machine(), 2, "mc68328_r (%04x): GRPBASED = %04x\n", mem_mask, m_regs.grpbased); + return m_regs.grpbased; case 0x108: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPMASKA = %04x\n", mem_mask, mc68328->regs.grpmaska); - return mc68328->regs.grpmaska; + verboselog(machine(), 2, "mc68328_r (%04x): GRPMASKA = %04x\n", mem_mask, m_regs.grpmaska); + return m_regs.grpmaska; case 0x10a: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPMASKB = %04x\n", mem_mask, mc68328->regs.grpmaskb); - return mc68328->regs.grpmaskb; + verboselog(machine(), 2, "mc68328_r (%04x): GRPMASKB = %04x\n", mem_mask, m_regs.grpmaskb); + return m_regs.grpmaskb; case 0x10c: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPMASKC = %04x\n", mem_mask, mc68328->regs.grpmaskc); - return mc68328->regs.grpmaskc; + verboselog(machine(), 2, "mc68328_r (%04x): GRPMASKC = %04x\n", mem_mask, m_regs.grpmaskc); + return m_regs.grpmaskc; case 0x10e: - verboselog(space.machine(), 2, "mc68328_r (%04x): GRPMASKD = %04x\n", mem_mask, mc68328->regs.grpmaskd); - return mc68328->regs.grpmaskd; + verboselog(machine(), 2, "mc68328_r (%04x): GRPMASKD = %04x\n", mem_mask, m_regs.grpmaskd); + return m_regs.grpmaskd; case 0x110: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA0(0) = %04x\n", mem_mask, mc68328->regs.csa0 & 0x0000ffff); - return mc68328->regs.csa0 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSA0(0) = %04x\n", mem_mask, m_regs.csa0 & 0x0000ffff); + return m_regs.csa0 & 0x0000ffff; case 0x112: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA0(16) = %04x\n", mem_mask, mc68328->regs.csa0 >> 16); - return mc68328->regs.csa0 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSA0(16) = %04x\n", mem_mask, m_regs.csa0 >> 16); + return m_regs.csa0 >> 16; case 0x114: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA1(0) = %04x\n", mem_mask, mc68328->regs.csa1 & 0x0000ffff); - return mc68328->regs.csa1 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSA1(0) = %04x\n", mem_mask, m_regs.csa1 & 0x0000ffff); + return m_regs.csa1 & 0x0000ffff; case 0x116: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA1(16) = %04x\n", mem_mask, mc68328->regs.csa1 >> 16); - return mc68328->regs.csa1 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSA1(16) = %04x\n", mem_mask, m_regs.csa1 >> 16); + return m_regs.csa1 >> 16; case 0x118: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA2(0) = %04x\n", mem_mask, mc68328->regs.csa2 & 0x0000ffff); - return mc68328->regs.csa2 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSA2(0) = %04x\n", mem_mask, m_regs.csa2 & 0x0000ffff); + return m_regs.csa2 & 0x0000ffff; case 0x11a: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA2(16) = %04x\n", mem_mask, mc68328->regs.csa2 >> 16); - return mc68328->regs.csa2 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSA2(16) = %04x\n", mem_mask, m_regs.csa2 >> 16); + return m_regs.csa2 >> 16; case 0x11c: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA3(0) = %04x\n", mem_mask, mc68328->regs.csa3 & 0x0000ffff); - return mc68328->regs.csa3 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSA3(0) = %04x\n", mem_mask, m_regs.csa3 & 0x0000ffff); + return m_regs.csa3 & 0x0000ffff; case 0x11e: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSA3(16) = %04x\n", mem_mask, mc68328->regs.csa3 >> 16); - return mc68328->regs.csa3 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSA3(16) = %04x\n", mem_mask, m_regs.csa3 >> 16); + return m_regs.csa3 >> 16; case 0x120: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB0(0) = %04x\n", mem_mask, mc68328->regs.csb0 & 0x0000ffff); - return mc68328->regs.csb0 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSB0(0) = %04x\n", mem_mask, m_regs.csb0 & 0x0000ffff); + return m_regs.csb0 & 0x0000ffff; case 0x122: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB0(16) = %04x\n", mem_mask, mc68328->regs.csb0 >> 16); - return mc68328->regs.csb0 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSB0(16) = %04x\n", mem_mask, m_regs.csb0 >> 16); + return m_regs.csb0 >> 16; case 0x124: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB1(0) = %04x\n", mem_mask, mc68328->regs.csb1 & 0x0000ffff); - return mc68328->regs.csb1 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSB1(0) = %04x\n", mem_mask, m_regs.csb1 & 0x0000ffff); + return m_regs.csb1 & 0x0000ffff; case 0x126: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB1(16) = %04x\n", mem_mask, mc68328->regs.csb1 >> 16); - return mc68328->regs.csb1 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSB1(16) = %04x\n", mem_mask, m_regs.csb1 >> 16); + return m_regs.csb1 >> 16; case 0x128: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB2(0) = %04x\n", mem_mask, mc68328->regs.csb2 & 0x0000ffff); - return mc68328->regs.csb2 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSB2(0) = %04x\n", mem_mask, m_regs.csb2 & 0x0000ffff); + return m_regs.csb2 & 0x0000ffff; case 0x12a: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB2(16) = %04x\n", mem_mask, mc68328->regs.csb2 >> 16); - return mc68328->regs.csb2 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSB2(16) = %04x\n", mem_mask, m_regs.csb2 >> 16); + return m_regs.csb2 >> 16; case 0x12c: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB3(0) = %04x\n", mem_mask, mc68328->regs.csb3 & 0x0000ffff); - return mc68328->regs.csb3 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSB3(0) = %04x\n", mem_mask, m_regs.csb3 & 0x0000ffff); + return m_regs.csb3 & 0x0000ffff; case 0x12e: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSB3(16) = %04x\n", mem_mask, mc68328->regs.csb3 >> 16); - return mc68328->regs.csb3 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSB3(16) = %04x\n", mem_mask, m_regs.csb3 >> 16); + return m_regs.csb3 >> 16; case 0x130: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC0(0) = %04x\n", mem_mask, mc68328->regs.csc0 & 0x0000ffff); - return mc68328->regs.csc0 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSC0(0) = %04x\n", mem_mask, m_regs.csc0 & 0x0000ffff); + return m_regs.csc0 & 0x0000ffff; case 0x132: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC0(16) = %04x\n", mem_mask, mc68328->regs.csc0 >> 16); - return mc68328->regs.csc0 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSC0(16) = %04x\n", mem_mask, m_regs.csc0 >> 16); + return m_regs.csc0 >> 16; case 0x134: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC1(0) = %04x\n", mem_mask, mc68328->regs.csc1 & 0x0000ffff); - return mc68328->regs.csc1 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSC1(0) = %04x\n", mem_mask, m_regs.csc1 & 0x0000ffff); + return m_regs.csc1 & 0x0000ffff; case 0x136: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC1(16) = %04x\n", mem_mask, mc68328->regs.csc1 >> 16); - return mc68328->regs.csc1 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSC1(16) = %04x\n", mem_mask, m_regs.csc1 >> 16); + return m_regs.csc1 >> 16; case 0x138: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC2(0) = %04x\n", mem_mask, mc68328->regs.csc2 & 0x0000ffff); - return mc68328->regs.csc2 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSC2(0) = %04x\n", mem_mask, m_regs.csc2 & 0x0000ffff); + return m_regs.csc2 & 0x0000ffff; case 0x13a: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC2(16) = %04x\n", mem_mask, mc68328->regs.csc2 >> 16); - return mc68328->regs.csc2 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSC2(16) = %04x\n", mem_mask, m_regs.csc2 >> 16); + return m_regs.csc2 >> 16; case 0x13c: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC3(0) = %04x\n", mem_mask, mc68328->regs.csc3 & 0x0000ffff); - return mc68328->regs.csc3 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSC3(0) = %04x\n", mem_mask, m_regs.csc3 & 0x0000ffff); + return m_regs.csc3 & 0x0000ffff; case 0x13e: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSC3(16) = %04x\n", mem_mask, mc68328->regs.csc3 >> 16); - return mc68328->regs.csc3 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSC3(16) = %04x\n", mem_mask, m_regs.csc3 >> 16); + return m_regs.csc3 >> 16; case 0x140: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD0(0) = %04x\n", mem_mask, mc68328->regs.csd0 & 0x0000ffff); - return mc68328->regs.csd0 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSD0(0) = %04x\n", mem_mask, m_regs.csd0 & 0x0000ffff); + return m_regs.csd0 & 0x0000ffff; case 0x142: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD0(16) = %04x\n", mem_mask, mc68328->regs.csd0 >> 16); - return mc68328->regs.csd0 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSD0(16) = %04x\n", mem_mask, m_regs.csd0 >> 16); + return m_regs.csd0 >> 16; case 0x144: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD1(0) = %04x\n", mem_mask, mc68328->regs.csd1 & 0x0000ffff); - return mc68328->regs.csd1 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSD1(0) = %04x\n", mem_mask, m_regs.csd1 & 0x0000ffff); + return m_regs.csd1 & 0x0000ffff; case 0x146: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD1(16) = %04x\n", mem_mask, mc68328->regs.csd1 >> 16); - return mc68328->regs.csd1 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSD1(16) = %04x\n", mem_mask, m_regs.csd1 >> 16); + return m_regs.csd1 >> 16; case 0x148: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD2(0) = %04x\n", mem_mask, mc68328->regs.csd2 & 0x0000ffff); - return mc68328->regs.csd2 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSD2(0) = %04x\n", mem_mask, m_regs.csd2 & 0x0000ffff); + return m_regs.csd2 & 0x0000ffff; case 0x14a: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD2(16) = %04x\n", mem_mask, mc68328->regs.csd2 >> 16); - return mc68328->regs.csd2 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSD2(16) = %04x\n", mem_mask, m_regs.csd2 >> 16); + return m_regs.csd2 >> 16; case 0x14c: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD3(0) = %04x\n", mem_mask, mc68328->regs.csd3 & 0x0000ffff); - return mc68328->regs.csd3 & 0x0000ffff; + verboselog(machine(), 5, "mc68328_r (%04x): CSD3(0) = %04x\n", mem_mask, m_regs.csd3 & 0x0000ffff); + return m_regs.csd3 & 0x0000ffff; case 0x14e: - verboselog(space.machine(), 5, "mc68328_r (%04x): CSD3(16) = %04x\n", mem_mask, mc68328->regs.csd3 >> 16); - return mc68328->regs.csd3 >> 16; + verboselog(machine(), 5, "mc68328_r (%04x): CSD3(16) = %04x\n", mem_mask, m_regs.csd3 >> 16); + return m_regs.csd3 >> 16; case 0x200: - verboselog(space.machine(), 2, "mc68328_r (%04x): PLLCR = %04x\n", mem_mask, mc68328->regs.pllcr); - return mc68328->regs.pllcr; + verboselog(machine(), 2, "mc68328_r (%04x): PLLCR = %04x\n", mem_mask, m_regs.pllcr); + return m_regs.pllcr; case 0x202: - verboselog(space.machine(), 2, "mc68328_r (%04x): PLLFSR = %04x\n", mem_mask, mc68328->regs.pllfsr); - mc68328->regs.pllfsr ^= 0x8000; - return mc68328->regs.pllfsr; + verboselog(machine(), 2, "mc68328_r (%04x): PLLFSR = %04x\n", mem_mask, m_regs.pllfsr); + m_regs.pllfsr ^= 0x8000; + return m_regs.pllfsr; case 0x206: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff206)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff206)\n", mem_mask); } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PCTLR = %02x\n", mem_mask, mc68328->regs.pctlr); - return mc68328->regs.pctlr << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PCTLR = %02x\n", mem_mask, m_regs.pctlr); + return m_regs.pctlr << 8; } break; case 0x300: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff301)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff301)\n", mem_mask); } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): IVR = %02x\n", mem_mask, mc68328->regs.ivr); - return mc68328->regs.ivr << 8; + verboselog(machine(), 2, "mc68328_r (%04x): IVR = %02x\n", mem_mask, m_regs.ivr); + return m_regs.ivr << 8; } break; case 0x302: - verboselog(space.machine(), 2, "mc68328_r (%04x): ICR = %04x\n", mem_mask, mc68328->regs.icr); - return mc68328->regs.icr; + verboselog(machine(), 2, "mc68328_r (%04x): ICR = %04x\n", mem_mask, m_regs.icr); + return m_regs.icr; case 0x304: - verboselog(space.machine(), 2, "mc68328_r (%04x): IMR(16) = %04x\n", mem_mask, mc68328->regs.imr >> 16); - return mc68328->regs.imr >> 16; + verboselog(machine(), 2, "mc68328_r (%04x): IMR(16) = %04x\n", mem_mask, m_regs.imr >> 16); + return m_regs.imr >> 16; case 0x306: - verboselog(space.machine(), 2, "mc68328_r (%04x): IMR(0) = %04x\n", mem_mask, mc68328->regs.imr & 0x0000ffff); - return mc68328->regs.imr & 0x0000ffff; + verboselog(machine(), 2, "mc68328_r (%04x): IMR(0) = %04x\n", mem_mask, m_regs.imr & 0x0000ffff); + return m_regs.imr & 0x0000ffff; case 0x308: - verboselog(space.machine(), 2, "mc68328_r (%04x): IWR(16) = %04x\n", mem_mask, mc68328->regs.iwr >> 16); - return mc68328->regs.iwr >> 16; + verboselog(machine(), 2, "mc68328_r (%04x): IWR(16) = %04x\n", mem_mask, m_regs.iwr >> 16); + return m_regs.iwr >> 16; case 0x30a: - verboselog(space.machine(), 2, "mc68328_r (%04x): IWR(0) = %04x\n", mem_mask, mc68328->regs.iwr & 0x0000ffff); - return mc68328->regs.iwr & 0x0000ffff; + verboselog(machine(), 2, "mc68328_r (%04x): IWR(0) = %04x\n", mem_mask, m_regs.iwr & 0x0000ffff); + return m_regs.iwr & 0x0000ffff; case 0x30c: - verboselog(space.machine(), 2, "mc68328_r (%04x): ISR(16) = %04x\n", mem_mask, mc68328->regs.isr >> 16); - return mc68328->regs.isr >> 16; + verboselog(machine(), 2, "mc68328_r (%04x): ISR(16) = %04x\n", mem_mask, m_regs.isr >> 16); + return m_regs.isr >> 16; case 0x30e: - verboselog(space.machine(), 2, "mc68328_r (%04x): ISR(0) = %04x\n", mem_mask, mc68328->regs.isr & 0x0000ffff); - return mc68328->regs.isr & 0x0000ffff; + verboselog(machine(), 2, "mc68328_r (%04x): ISR(0) = %04x\n", mem_mask, m_regs.isr & 0x0000ffff); + return m_regs.isr & 0x0000ffff; case 0x310: - verboselog(space.machine(), 2, "mc68328_r (%04x): IPR(16) = %04x\n", mem_mask, mc68328->regs.ipr >> 16); - return mc68328->regs.ipr >> 16; + verboselog(machine(), 2, "mc68328_r (%04x): IPR(16) = %04x\n", mem_mask, m_regs.ipr >> 16); + return m_regs.ipr >> 16; case 0x312: - verboselog(space.machine(), 2, "mc68328_r (%04x): IPR(0) = %04x\n", mem_mask, mc68328->regs.ipr & 0x0000ffff); - return mc68328->regs.ipr & 0x0000ffff; + verboselog(machine(), 2, "mc68328_r (%04x): IPR(0) = %04x\n", mem_mask, m_regs.ipr & 0x0000ffff); + return m_regs.ipr & 0x0000ffff; case 0x400: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PADATA = %02x\n", mem_mask, mc68328->regs.padata); - if(!mc68328->in_port_a.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PADATA = %02x\n", mem_mask, m_regs.padata); + if (!m_in_port_a.isnull()) { - return mc68328->in_port_a( 0 ); + return m_in_port_a(0); } else { - return mc68328->regs.padata; + return m_regs.padata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PADIR = %02x\n", mem_mask, mc68328->regs.padir); - return mc68328->regs.padir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PADIR = %02x\n", mem_mask, m_regs.padir); + return m_regs.padir << 8; } break; case 0x402: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PASEL = %02x\n", mem_mask, mc68328->regs.pasel); - return mc68328->regs.pasel; + verboselog(machine(), 2, "mc68328_r (%04x): PASEL = %02x\n", mem_mask, m_regs.pasel); + return m_regs.pasel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff402)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff402)\n", mem_mask); } break; case 0x408: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PBDATA = %02x\n", mem_mask, mc68328->regs.pbdata); - if(!mc68328->in_port_b.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PBDATA = %02x\n", mem_mask, m_regs.pbdata); + if (!m_in_port_b.isnull()) { - return mc68328->in_port_b( 0 ); + return m_in_port_b(0); } else { - return mc68328->regs.pbdata; + return m_regs.pbdata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PBDIR = %02x\n", mem_mask, mc68328->regs.pbdir); - return mc68328->regs.pbdir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PBDIR = %02x\n", mem_mask, m_regs.pbdir); + return m_regs.pbdir << 8; } break; case 0x40a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PBSEL = %02x\n", mem_mask, mc68328->regs.pbsel); - return mc68328->regs.pbsel; + verboselog(machine(), 2, "mc68328_r (%04x): PBSEL = %02x\n", mem_mask, m_regs.pbsel); + return m_regs.pbsel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff40a)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff40a)\n", mem_mask); } break; case 0x410: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PCDATA = %02x\n", mem_mask, mc68328->regs.pcdata); - if(!mc68328->in_port_c.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PCDATA = %02x\n", mem_mask, m_regs.pcdata); + if (!m_in_port_c.isnull()) { - return mc68328->in_port_c( 0 ); + return m_in_port_c(0); } else { - return mc68328->regs.pcdata; + return m_regs.pcdata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PCDIR = %02x\n", mem_mask, mc68328->regs.pcdir); - return mc68328->regs.pcdir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PCDIR = %02x\n", mem_mask, m_regs.pcdir); + return m_regs.pcdir << 8; } break; case 0x412: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PCSEL = %02x\n", mem_mask, mc68328->regs.pcsel); - return mc68328->regs.pcsel; + verboselog(machine(), 2, "mc68328_r (%04x): PCSEL = %02x\n", mem_mask, m_regs.pcsel); + return m_regs.pcsel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff412)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff412)\n", mem_mask); } break; case 0x418: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PDDATA = %02x\n", mem_mask, mc68328->regs.pddata); - if(!mc68328->in_port_d.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PDDATA = %02x\n", mem_mask, m_regs.pddata); + if (!m_in_port_d.isnull()) { - return mc68328->in_port_d( 0 ); + return m_in_port_d(0); } else { - return mc68328->regs.pddata; + return m_regs.pddata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PDDIR = %02x\n", mem_mask, mc68328->regs.pddir); - return mc68328->regs.pddir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PDDIR = %02x\n", mem_mask, m_regs.pddir); + return m_regs.pddir << 8; } break; case 0x41a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff41b)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff41b)\n", mem_mask); } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PDPUEN = %02x\n", mem_mask, mc68328->regs.pdpuen); - return mc68328->regs.pdpuen << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PDPUEN = %02x\n", mem_mask, m_regs.pdpuen); + return m_regs.pdpuen << 8; } break; case 0x41c: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PDIRQEN = %02x\n", mem_mask, mc68328->regs.pdirqen); - return mc68328->regs.pdirqen; + verboselog(machine(), 2, "mc68328_r (%04x): PDIRQEN = %02x\n", mem_mask, m_regs.pdirqen); + return m_regs.pdirqen; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PDPOL = %02x\n", mem_mask, mc68328->regs.pdpol); - return mc68328->regs.pdpol << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PDPOL = %02x\n", mem_mask, m_regs.pdpol); + return m_regs.pdpol << 8; } break; case 0x41e: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PDIRQEDGE = %02x\n", mem_mask, mc68328->regs.pdirqedge); - return mc68328->regs.pdirqedge; + verboselog(machine(), 2, "mc68328_r (%04x): PDIRQEDGE = %02x\n", mem_mask, m_regs.pdirqedge); + return m_regs.pdirqedge; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff41e)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff41e)\n", mem_mask); } break; case 0x420: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PEDATA = %02x\n", mem_mask, mc68328->regs.pedata); - if(!mc68328->in_port_e.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PEDATA = %02x\n", mem_mask, m_regs.pedata); + if (!m_in_port_e.isnull()) { - return mc68328->in_port_e( 0 ); + return m_in_port_e(0); } else { - return mc68328->regs.pedata; + return m_regs.pedata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PEDIR = %02x\n", mem_mask, mc68328->regs.pedir); - return mc68328->regs.pedir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PEDIR = %02x\n", mem_mask, m_regs.pedir); + return m_regs.pedir << 8; } break; case 0x422: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PESEL = %02x\n", mem_mask, mc68328->regs.pesel); - return mc68328->regs.pesel; + verboselog(machine(), 2, "mc68328_r (%04x): PESEL = %02x\n", mem_mask, m_regs.pesel); + return m_regs.pesel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PEPUEN = %02x\n", mem_mask, mc68328->regs.pepuen); - return mc68328->regs.pepuen << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PEPUEN = %02x\n", mem_mask, m_regs.pepuen); + return m_regs.pepuen << 8; } break; case 0x428: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PFDATA = %02x\n", mem_mask, mc68328->regs.pfdata); - if(!mc68328->in_port_f.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PFDATA = %02x\n", mem_mask, m_regs.pfdata); + if (!m_in_port_f.isnull()) { - return mc68328->in_port_f( 0 ); + return m_in_port_f(0); } else { - return mc68328->regs.pfdata; + return m_regs.pfdata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PFDIR = %02x\n", mem_mask, mc68328->regs.pfdir); - return mc68328->regs.pfdir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PFDIR = %02x\n", mem_mask, m_regs.pfdir); + return m_regs.pfdir << 8; } break; case 0x42a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PFSEL = %02x\n", mem_mask, mc68328->regs.pfsel); - return mc68328->regs.pfsel; + verboselog(machine(), 2, "mc68328_r (%04x): PFSEL = %02x\n", mem_mask, m_regs.pfsel); + return m_regs.pfsel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PFPUEN = %02x\n", mem_mask, mc68328->regs.pfpuen); - return mc68328->regs.pfpuen << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PFPUEN = %02x\n", mem_mask, m_regs.pfpuen); + return m_regs.pfpuen << 8; } break; case 0x430: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PGDATA = %02x\n", mem_mask, mc68328->regs.pgdata); - if(!mc68328->in_port_g.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PGDATA = %02x\n", mem_mask, m_regs.pgdata); + if (!m_in_port_g.isnull()) { - return mc68328->in_port_g( 0 ); + return m_in_port_g(0); } else { - return mc68328->regs.pgdata; + return m_regs.pgdata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PGDIR = %02x\n", mem_mask, mc68328->regs.pgdir); - return mc68328->regs.pgdir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PGDIR = %02x\n", mem_mask, m_regs.pgdir); + return m_regs.pgdir << 8; } break; case 0x432: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PGSEL = %02x\n", mem_mask, mc68328->regs.pgsel); - return mc68328->regs.pgsel; + verboselog(machine(), 2, "mc68328_r (%04x): PGSEL = %02x\n", mem_mask, m_regs.pgsel); + return m_regs.pgsel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PGPUEN = %02x\n", mem_mask, mc68328->regs.pgpuen); - return mc68328->regs.pgpuen << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PGPUEN = %02x\n", mem_mask, m_regs.pgpuen); + return m_regs.pgpuen << 8; } break; case 0x438: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PJDATA = %02x\n", mem_mask, mc68328->regs.pjdata); - if(!mc68328->in_port_j.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PJDATA = %02x\n", mem_mask, m_regs.pjdata); + if (!m_in_port_j.isnull()) { - return mc68328->in_port_j( 0 ); + return m_in_port_j(0); } else { - return mc68328->regs.pjdata; + return m_regs.pjdata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PJDIR = %02x\n", mem_mask, mc68328->regs.pjdir); - return mc68328->regs.pjdir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PJDIR = %02x\n", mem_mask, m_regs.pjdir); + return m_regs.pjdir << 8; } break; case 0x43a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PJSEL = %02x\n", mem_mask, mc68328->regs.pjsel); - return mc68328->regs.pjsel; + verboselog(machine(), 2, "mc68328_r (%04x): PJSEL = %02x\n", mem_mask, m_regs.pjsel); + return m_regs.pjsel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfff43a)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfff43a)\n", mem_mask); } break; case 0x440: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PKDATA = %02x\n", mem_mask, mc68328->regs.pkdata); - if(!mc68328->in_port_k.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PKDATA = %02x\n", mem_mask, m_regs.pkdata); + if (!m_in_port_k.isnull()) { - return mc68328->in_port_k( 0 ); + return m_in_port_k(0); } else { - return mc68328->regs.pkdata; + return m_regs.pkdata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PKDIR = %02x\n", mem_mask, mc68328->regs.pkdir); - return mc68328->regs.pkdir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PKDIR = %02x\n", mem_mask, m_regs.pkdir); + return m_regs.pkdir << 8; } break; case 0x442: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PKSEL = %02x\n", mem_mask, mc68328->regs.pksel); - return mc68328->regs.pksel; + verboselog(machine(), 2, "mc68328_r (%04x): PKSEL = %02x\n", mem_mask, m_regs.pksel); + return m_regs.pksel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PKPUEN = %02x\n", mem_mask, mc68328->regs.pkpuen); - return mc68328->regs.pkpuen << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PKPUEN = %02x\n", mem_mask, m_regs.pkpuen); + return m_regs.pkpuen << 8; } break; case 0x448: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PMDATA = %02x\n", mem_mask, mc68328->regs.pmdata); - if(!mc68328->in_port_m.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): PMDATA = %02x\n", mem_mask, m_regs.pmdata); + if (!m_in_port_m.isnull()) { - return mc68328->in_port_m( 0 ); + return m_in_port_m(0); } else { - return mc68328->regs.pmdata; + return m_regs.pmdata; } } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PMDIR = %02x\n", mem_mask, mc68328->regs.pmdir); - return mc68328->regs.pmdir << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PMDIR = %02x\n", mem_mask, m_regs.pmdir); + return m_regs.pmdir << 8; } break; case 0x44a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): PMSEL = %02x\n", mem_mask, mc68328->regs.pmsel); - return mc68328->regs.pmsel; + verboselog(machine(), 2, "mc68328_r (%04x): PMSEL = %02x\n", mem_mask, m_regs.pmsel); + return m_regs.pmsel; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): PMPUEN = %02x\n", mem_mask, mc68328->regs.pmpuen); - return mc68328->regs.pmpuen << 8; + verboselog(machine(), 2, "mc68328_r (%04x): PMPUEN = %02x\n", mem_mask, m_regs.pmpuen); + return m_regs.pmpuen << 8; } break; case 0x500: - verboselog(space.machine(), 2, "mc68328_r (%04x): PWMC = %04x\n", mem_mask, mc68328->regs.pwmc); - temp16 = mc68328->regs.pwmc; - if(mc68328->regs.pwmc & PWMC_PWMIRQ) + verboselog(machine(), 2, "mc68328_r (%04x): PWMC = %04x\n", mem_mask, m_regs.pwmc); + temp16 = m_regs.pwmc; + if (m_regs.pwmc & PWMC_PWMIRQ) { - mc68328->regs.pwmc &= ~PWMC_PWMIRQ; - mc68328_set_interrupt_line(device, INT_PWM, 0); + m_regs.pwmc &= ~PWMC_PWMIRQ; + set_interrupt_line(INT_PWM, 0); } return temp16; case 0x502: - verboselog(space.machine(), 2, "mc68328_r (%04x): PWMP = %04x\n", mem_mask, mc68328->regs.pwmp); - return mc68328->regs.pwmp; + verboselog(machine(), 2, "mc68328_r (%04x): PWMP = %04x\n", mem_mask, m_regs.pwmp); + return m_regs.pwmp; case 0x504: - verboselog(space.machine(), 2, "mc68328_r (%04x): PWMW = %04x\n", mem_mask, mc68328->regs.pwmw); - return mc68328->regs.pwmw; + verboselog(machine(), 2, "mc68328_r (%04x): PWMW = %04x\n", mem_mask, m_regs.pwmw); + return m_regs.pwmw; case 0x506: - verboselog(space.machine(), 2, "mc68328_r (%04x): PWMCNT = %04x\n", mem_mask, mc68328->regs.pwmcnt); - return mc68328->regs.pwmcnt; + verboselog(machine(), 2, "mc68328_r (%04x): PWMCNT = %04x\n", mem_mask, m_regs.pwmcnt); + return m_regs.pwmcnt; case 0x600: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCTL1 = %04x\n", mem_mask, mc68328->regs.tctl[0]); - return mc68328->regs.tctl[0]; + verboselog(machine(), 2, "mc68328_r (%04x): TCTL1 = %04x\n", mem_mask, m_regs.tctl[0]); + return m_regs.tctl[0]; case 0x602: - verboselog(space.machine(), 2, "mc68328_r (%04x): TPRER1 = %04x\n", mem_mask, mc68328->regs.tprer[0]); - return mc68328->regs.tprer[0]; + verboselog(machine(), 2, "mc68328_r (%04x): TPRER1 = %04x\n", mem_mask, m_regs.tprer[0]); + return m_regs.tprer[0]; case 0x604: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCMP1 = %04x\n", mem_mask, mc68328->regs.tcmp[0]); - return mc68328->regs.tcmp[0]; + verboselog(machine(), 2, "mc68328_r (%04x): TCMP1 = %04x\n", mem_mask, m_regs.tcmp[0]); + return m_regs.tcmp[0]; case 0x606: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCR1 = %04x\n", mem_mask, mc68328->regs.tcr[0]); - return mc68328->regs.tcr[0]; + verboselog(machine(), 2, "mc68328_r (%04x): TCR1 = %04x\n", mem_mask, m_regs.tcr[0]); + return m_regs.tcr[0]; case 0x608: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCN1 = %04x\n", mem_mask, mc68328->regs.tcn[0]); - return mc68328->regs.tcn[0]; + verboselog(machine(), 2, "mc68328_r (%04x): TCN1 = %04x\n", mem_mask, m_regs.tcn[0]); + return m_regs.tcn[0]; case 0x60a: - verboselog(space.machine(), 5, "mc68328_r (%04x): TSTAT1 = %04x\n", mem_mask, mc68328->regs.tstat[0]); - mc68328->regs.tclear[0] |= mc68328->regs.tstat[0]; - return mc68328->regs.tstat[0]; + verboselog(machine(), 5, "mc68328_r (%04x): TSTAT1 = %04x\n", mem_mask, m_regs.tstat[0]); + m_regs.tclear[0] |= m_regs.tstat[0]; + return m_regs.tstat[0]; case 0x60c: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCTL2 = %04x\n", mem_mask, mc68328->regs.tctl[1]); - return mc68328->regs.tctl[1]; + verboselog(machine(), 2, "mc68328_r (%04x): TCTL2 = %04x\n", mem_mask, m_regs.tctl[1]); + return m_regs.tctl[1]; case 0x60e: - verboselog(space.machine(), 2, "mc68328_r (%04x): TPREP2 = %04x\n", mem_mask, mc68328->regs.tprer[1]); - return mc68328->regs.tprer[1]; + verboselog(machine(), 2, "mc68328_r (%04x): TPREP2 = %04x\n", mem_mask, m_regs.tprer[1]); + return m_regs.tprer[1]; case 0x610: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCMP2 = %04x\n", mem_mask, mc68328->regs.tcmp[1]); - return mc68328->regs.tcmp[1]; + verboselog(machine(), 2, "mc68328_r (%04x): TCMP2 = %04x\n", mem_mask, m_regs.tcmp[1]); + return m_regs.tcmp[1]; case 0x612: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCR2 = %04x\n", mem_mask, mc68328->regs.tcr[1]); - return mc68328->regs.tcr[1]; + verboselog(machine(), 2, "mc68328_r (%04x): TCR2 = %04x\n", mem_mask, m_regs.tcr[1]); + return m_regs.tcr[1]; case 0x614: - verboselog(space.machine(), 2, "mc68328_r (%04x): TCN2 = %04x\n", mem_mask, mc68328->regs.tcn[1]); - return mc68328->regs.tcn[1]; + verboselog(machine(), 2, "mc68328_r (%04x): TCN2 = %04x\n", mem_mask, m_regs.tcn[1]); + return m_regs.tcn[1]; case 0x616: - verboselog(space.machine(), 2, "mc68328_r (%04x): TSTAT2 = %04x\n", mem_mask, mc68328->regs.tstat[1]); - mc68328->regs.tclear[1] |= mc68328->regs.tstat[1]; - return mc68328->regs.tstat[1]; + verboselog(machine(), 2, "mc68328_r (%04x): TSTAT2 = %04x\n", mem_mask, m_regs.tstat[1]); + m_regs.tclear[1] |= m_regs.tstat[1]; + return m_regs.tstat[1]; case 0x618: - verboselog(space.machine(), 2, "mc68328_r (%04x): WCTLR = %04x\n", mem_mask, mc68328->regs.wctlr); - return mc68328->regs.wctlr; + verboselog(machine(), 2, "mc68328_r (%04x): WCTLR = %04x\n", mem_mask, m_regs.wctlr); + return m_regs.wctlr; case 0x61a: - verboselog(space.machine(), 2, "mc68328_r (%04x): WCMPR = %04x\n", mem_mask, mc68328->regs.wcmpr); - return mc68328->regs.wcmpr; + verboselog(machine(), 2, "mc68328_r (%04x): WCMPR = %04x\n", mem_mask, m_regs.wcmpr); + return m_regs.wcmpr; case 0x61c: - verboselog(space.machine(), 2, "mc68328_r (%04x): WCN = %04x\n", mem_mask, mc68328->regs.wcn); - return mc68328->regs.wcn; + verboselog(machine(), 2, "mc68328_r (%04x): WCN = %04x\n", mem_mask, m_regs.wcn); + return m_regs.wcn; case 0x700: - verboselog(space.machine(), 2, "mc68328_r (%04x): SPISR = %04x\n", mem_mask, mc68328->regs.spisr); - return mc68328->regs.spisr; + verboselog(machine(), 2, "mc68328_r (%04x): SPISR = %04x\n", mem_mask, m_regs.spisr); + return m_regs.spisr; case 0x800: - verboselog(space.machine(), 2, "mc68328_r (%04x): SPIMDATA = %04x\n", mem_mask, mc68328->regs.spimdata); - if(!mc68328->in_spim.isnull()) + verboselog(machine(), 2, "mc68328_r (%04x): SPIMDATA = %04x\n", mem_mask, m_regs.spimdata); + if (!m_in_spim.isnull()) { - return mc68328->in_spim( 0, 0xffff ); + return m_in_spim(0, 0xffff); } - return mc68328->regs.spimdata; + return m_regs.spimdata; case 0x802: - verboselog(space.machine(), 2, "mc68328_r (%04x): SPIMCONT = %04x\n", mem_mask, mc68328->regs.spimcont); - if(mc68328->regs.spimcont & SPIM_XCH) + verboselog(machine(), 2, "mc68328_r (%04x): SPIMCONT = %04x\n", mem_mask, m_regs.spimcont); + if (m_regs.spimcont & SPIM_XCH) { - mc68328->regs.spimcont &= ~SPIM_XCH; - mc68328->regs.spimcont |= SPIM_SPIMIRQ; - return ((mc68328->regs.spimcont | SPIM_XCH) &~ SPIM_SPIMIRQ); + m_regs.spimcont &= ~SPIM_XCH; + m_regs.spimcont |= SPIM_SPIMIRQ; + return ((m_regs.spimcont | SPIM_XCH) &~ SPIM_SPIMIRQ); } - return mc68328->regs.spimcont; + return m_regs.spimcont; case 0x900: - verboselog(space.machine(), 2, "mc68328_r (%04x): USTCNT = %04x\n", mem_mask, mc68328->regs.ustcnt); - return mc68328->regs.ustcnt; + verboselog(machine(), 2, "mc68328_r (%04x): USTCNT = %04x\n", mem_mask, m_regs.ustcnt); + return m_regs.ustcnt; case 0x902: - verboselog(space.machine(), 2, "mc68328_r (%04x): UBAUD = %04x\n", mem_mask, mc68328->regs.ubaud); - return mc68328->regs.ubaud; + verboselog(machine(), 2, "mc68328_r (%04x): UBAUD = %04x\n", mem_mask, m_regs.ubaud); + return m_regs.ubaud; case 0x904: - verboselog(space.machine(), 5, "mc68328_r (%04x): URX = %04x\n", mem_mask, mc68328->regs.urx); - return mc68328->regs.urx; + verboselog(machine(), 5, "mc68328_r (%04x): URX = %04x\n", mem_mask, m_regs.urx); + return m_regs.urx; case 0x906: - verboselog(space.machine(), 5, "mc68328_r (%04x): UTX = %04x\n", mem_mask, mc68328->regs.utx); - return mc68328->regs.utx | UTX_FIFO_EMPTY | UTX_FIFO_HALF | UTX_TX_AVAIL; + verboselog(machine(), 5, "mc68328_r (%04x): UTX = %04x\n", mem_mask, m_regs.utx); + return m_regs.utx | UTX_FIFO_EMPTY | UTX_FIFO_HALF | UTX_TX_AVAIL; case 0x908: - verboselog(space.machine(), 2, "mc68328_r (%04x): UMISC = %04x\n", mem_mask, mc68328->regs.umisc); - return mc68328->regs.umisc; + verboselog(machine(), 2, "mc68328_r (%04x): UMISC = %04x\n", mem_mask, m_regs.umisc); + return m_regs.umisc; case 0xa00: - verboselog(space.machine(), 2, "mc68328_r (%04x): LSSA(16) = %04x\n", mem_mask, mc68328->regs.lssa >> 16); - return mc68328->regs.lssa >> 16; + verboselog(machine(), 2, "mc68328_r (%04x): LSSA(16) = %04x\n", mem_mask, m_regs.lssa >> 16); + return m_regs.lssa >> 16; case 0xa02: - verboselog(space.machine(), 2, "mc68328_r (%04x): LSSA(0) = %04x\n", mem_mask, mc68328->regs.lssa & 0x0000ffff); - return mc68328->regs.lssa & 0x0000ffff; + verboselog(machine(), 2, "mc68328_r (%04x): LSSA(0) = %04x\n", mem_mask, m_regs.lssa & 0x0000ffff); + return m_regs.lssa & 0x0000ffff; case 0xa04: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LVPW = %02x\n", mem_mask, mc68328->regs.lvpw); - return mc68328->regs.lvpw; + verboselog(machine(), 2, "mc68328_r (%04x): LVPW = %02x\n", mem_mask, m_regs.lvpw); + return m_regs.lvpw; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa04)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa04)\n", mem_mask); } break; case 0xa08: - verboselog(space.machine(), 2, "mc68328_r (%04x): LXMAX = %04x\n", mem_mask, mc68328->regs.lxmax); - return mc68328->regs.lxmax; + verboselog(machine(), 2, "mc68328_r (%04x): LXMAX = %04x\n", mem_mask, m_regs.lxmax); + return m_regs.lxmax; case 0xa0a: - verboselog(space.machine(), 2, "mc68328_r (%04x): LYMAX = %04x\n", mem_mask, mc68328->regs.lymax); - return mc68328->regs.lymax; + verboselog(machine(), 2, "mc68328_r (%04x): LYMAX = %04x\n", mem_mask, m_regs.lymax); + return m_regs.lymax; case 0xa18: - verboselog(space.machine(), 2, "mc68328_r (%04x): LCXP = %04x\n", mem_mask, mc68328->regs.lcxp); - return mc68328->regs.lcxp; + verboselog(machine(), 2, "mc68328_r (%04x): LCXP = %04x\n", mem_mask, m_regs.lcxp); + return m_regs.lcxp; case 0xa1a: - verboselog(space.machine(), 2, "mc68328_r (%04x): LCYP = %04x\n", mem_mask, mc68328->regs.lcyp); - return mc68328->regs.lcyp; + verboselog(machine(), 2, "mc68328_r (%04x): LCYP = %04x\n", mem_mask, m_regs.lcyp); + return m_regs.lcyp; case 0xa1c: - verboselog(space.machine(), 2, "mc68328_r (%04x): LCWCH = %04x\n", mem_mask, mc68328->regs.lcwch); - return mc68328->regs.lcwch; + verboselog(machine(), 2, "mc68328_r (%04x): LCWCH = %04x\n", mem_mask, m_regs.lcwch); + return m_regs.lcwch; case 0xa1e: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LBLKC = %02x\n", mem_mask, mc68328->regs.lblkc); - return mc68328->regs.lblkc; + verboselog(machine(), 2, "mc68328_r (%04x): LBLKC = %02x\n", mem_mask, m_regs.lblkc); + return m_regs.lblkc; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa1e)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa1e)\n", mem_mask); } break; case 0xa20: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LPOLCF = %02x\n", mem_mask, mc68328->regs.lpolcf); - return mc68328->regs.lpolcf; + verboselog(machine(), 2, "mc68328_r (%04x): LPOLCF = %02x\n", mem_mask, m_regs.lpolcf); + return m_regs.lpolcf; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): LPICF = %02x\n", mem_mask, mc68328->regs.lpicf); - return mc68328->regs.lpicf << 8; + verboselog(machine(), 2, "mc68328_r (%04x): LPICF = %02x\n", mem_mask, m_regs.lpicf); + return m_regs.lpicf << 8; } break; case 0xa22: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LACDRC = %02x\n", mem_mask, mc68328->regs.lacdrc); - return mc68328->regs.lacdrc; + verboselog(machine(), 2, "mc68328_r (%04x): LACDRC = %02x\n", mem_mask, m_regs.lacdrc); + return m_regs.lacdrc; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa22)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa22)\n", mem_mask); } break; case 0xa24: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LPXCD = %02x\n", mem_mask, mc68328->regs.lpxcd); - return mc68328->regs.lpxcd; + verboselog(machine(), 2, "mc68328_r (%04x): LPXCD = %02x\n", mem_mask, m_regs.lpxcd); + return m_regs.lpxcd; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa24)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa24)\n", mem_mask); } break; case 0xa26: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LCKCON = %02x\n", mem_mask, mc68328->regs.lckcon); - return mc68328->regs.lckcon; + verboselog(machine(), 2, "mc68328_r (%04x): LCKCON = %02x\n", mem_mask, m_regs.lckcon); + return m_regs.lckcon; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa26)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa26)\n", mem_mask); } break; case 0xa28: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LLBAR = %02x\n", mem_mask, mc68328->regs.llbar); - return mc68328->regs.llbar; + verboselog(machine(), 2, "mc68328_r (%04x): LLBAR = %02x\n", mem_mask, m_regs.llbar); + return m_regs.llbar; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa28)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa28)\n", mem_mask); } break; case 0xa2a: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LOTCR = %02x\n", mem_mask, mc68328->regs.lotcr); - return mc68328->regs.lotcr; + verboselog(machine(), 2, "mc68328_r (%04x): LOTCR = %02x\n", mem_mask, m_regs.lotcr); + return m_regs.lotcr; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa2a)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa2a)\n", mem_mask); } break; case 0xa2c: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LPOSR = %02x\n", mem_mask, mc68328->regs.lposr); - return mc68328->regs.lposr; + verboselog(machine(), 2, "mc68328_r (%04x): LPOSR = %02x\n", mem_mask, m_regs.lposr); + return m_regs.lposr; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa2c)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa2c)\n", mem_mask); } break; case 0xa30: - if( mem_mask & 0x00ff ) + if (mem_mask & 0x00ff) { - verboselog(space.machine(), 2, "mc68328_r (%04x): LFRCM = %02x\n", mem_mask, mc68328->regs.lfrcm); - return mc68328->regs.lfrcm; + verboselog(machine(), 2, "mc68328_r (%04x): LFRCM = %02x\n", mem_mask, m_regs.lfrcm); + return m_regs.lfrcm; } else { - verboselog(space.machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa30)\n", mem_mask); + verboselog(machine(), 2, "mc68328_r (%04x): Unknown address (0xfffa30)\n", mem_mask); } break; case 0xa32: - verboselog(space.machine(), 2, "mc68328_r (%04x): LGPMR = %04x\n", mem_mask, mc68328->regs.lgpmr); - return mc68328->regs.lgpmr; + verboselog(machine(), 2, "mc68328_r (%04x): LGPMR = %04x\n", mem_mask, m_regs.lgpmr); + return m_regs.lgpmr; case 0xb00: - verboselog(space.machine(), 2, "mc68328_r (%04x): HMSR(0) = %04x\n", mem_mask, mc68328->regs.hmsr & 0x0000ffff); - return mc68328->regs.hmsr & 0x0000ffff; + verboselog(machine(), 2, "mc68328_r (%04x): HMSR(0) = %04x\n", mem_mask, m_regs.hmsr & 0x0000ffff); + return m_regs.hmsr & 0x0000ffff; case 0xb02: - verboselog(space.machine(), 2, "mc68328_r (%04x): HMSR(16) = %04x\n", mem_mask, mc68328->regs.hmsr >> 16); - return mc68328->regs.hmsr >> 16; + verboselog(machine(), 2, "mc68328_r (%04x): HMSR(16) = %04x\n", mem_mask, m_regs.hmsr >> 16); + return m_regs.hmsr >> 16; case 0xb04: - verboselog(space.machine(), 2, "mc68328_r (%04x): ALARM(0) = %04x\n", mem_mask, mc68328->regs.alarm & 0x0000ffff); - return mc68328->regs.alarm & 0x0000ffff; + verboselog(machine(), 2, "mc68328_r (%04x): ALARM(0) = %04x\n", mem_mask, m_regs.alarm & 0x0000ffff); + return m_regs.alarm & 0x0000ffff; case 0xb06: - verboselog(space.machine(), 2, "mc68328_r (%04x): ALARM(16) = %04x\n", mem_mask, mc68328->regs.alarm >> 16); - return mc68328->regs.alarm >> 16; + verboselog(machine(), 2, "mc68328_r (%04x): ALARM(16) = %04x\n", mem_mask, m_regs.alarm >> 16); + return m_regs.alarm >> 16; case 0xb0c: - verboselog(space.machine(), 2, "mc68328_r (%04x): RTCCTL = %04x\n", mem_mask, mc68328->regs.rtcctl); - return mc68328->regs.rtcctl; + verboselog(machine(), 2, "mc68328_r (%04x): RTCCTL = %04x\n", mem_mask, m_regs.rtcctl); + return m_regs.rtcctl; case 0xb0e: - verboselog(space.machine(), 2, "mc68328_r (%04x): RTCISR = %04x\n", mem_mask, mc68328->regs.rtcisr); - return mc68328->regs.rtcisr; + verboselog(machine(), 2, "mc68328_r (%04x): RTCISR = %04x\n", mem_mask, m_regs.rtcisr); + return m_regs.rtcisr; case 0xb10: - verboselog(space.machine(), 2, "mc68328_r (%04x): RTCIENR = %04x\n", mem_mask, mc68328->regs.rtcienr); - return mc68328->regs.rtcienr; + verboselog(machine(), 2, "mc68328_r (%04x): RTCIENR = %04x\n", mem_mask, m_regs.rtcienr); + return m_regs.rtcienr; case 0xb12: - verboselog(space.machine(), 2, "mc68328_r (%04x): STPWTCH = %04x\n", mem_mask, mc68328->regs.stpwtch); - return mc68328->regs.stpwtch; + verboselog(machine(), 2, "mc68328_r (%04x): STPWTCH = %04x\n", mem_mask, m_regs.stpwtch); + return m_regs.stpwtch; default: - verboselog(space.machine(), 0, "mc68328_r (%04x): Unknown address (0x%06x)\n", mem_mask, 0xfff000 + address); + verboselog(machine(), 0, "mc68328_r (%04x): Unknown address (0x%06x)\n", mem_mask, 0xfff000 + address); break; } return 0; } -static DEVICE_RESET( mc68328 ) +/* THIS IS PRETTY MUCH TOTALLY WRONG AND DOESN'T REFLECT THE MC68328'S INTERNAL FUNCTIONALITY AT ALL! */ +UINT32 mc68328_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - - mc68328->regs.scr = 0x0c; - mc68328->regs.grpbasea = 0x0000; - mc68328->regs.grpbaseb = 0x0000; - mc68328->regs.grpbasec = 0x0000; - mc68328->regs.grpbased = 0x0000; - mc68328->regs.grpmaska = 0x0000; - mc68328->regs.grpmaskb = 0x0000; - mc68328->regs.grpmaskc = 0x0000; - mc68328->regs.grpmaskd = 0x0000; - mc68328->regs.csa0 = 0x00010006; - mc68328->regs.csa1 = 0x00010006; - mc68328->regs.csa2 = 0x00010006; - mc68328->regs.csa3 = 0x00010006; - mc68328->regs.csb0 = 0x00010006; - mc68328->regs.csb1 = 0x00010006; - mc68328->regs.csb2 = 0x00010006; - mc68328->regs.csb3 = 0x00010006; - mc68328->regs.csc0 = 0x00010006; - mc68328->regs.csc1 = 0x00010006; - mc68328->regs.csc2 = 0x00010006; - mc68328->regs.csc3 = 0x00010006; - mc68328->regs.csd0 = 0x00010006; - mc68328->regs.csd1 = 0x00010006; - mc68328->regs.csd2 = 0x00010006; - mc68328->regs.csd3 = 0x00010006; - - mc68328->regs.pllcr = 0x2400; - mc68328->regs.pllfsr = 0x0123; - mc68328->regs.pctlr = 0x1f; - - mc68328->regs.ivr = 0x00; - mc68328->regs.icr = 0x0000; - mc68328->regs.imr = 0x00ffffff; - mc68328->regs.iwr = 0x00ffffff; - mc68328->regs.isr = 0x00000000; - mc68328->regs.ipr = 0x00000000; - - mc68328->regs.padir = 0x00; - mc68328->regs.padata = 0x00; - mc68328->regs.pasel = 0x00; - mc68328->regs.pbdir = 0x00; - mc68328->regs.pbdata = 0x00; - mc68328->regs.pbsel = 0x00; - mc68328->regs.pcdir = 0x00; - mc68328->regs.pcdata = 0x00; - mc68328->regs.pcsel = 0x00; - mc68328->regs.pddir = 0x00; - mc68328->regs.pddata = 0x00; - mc68328->regs.pdpuen = 0xff; - mc68328->regs.pdpol = 0x00; - mc68328->regs.pdirqen = 0x00; - mc68328->regs.pddataedge = 0x00; - mc68328->regs.pdirqedge = 0x00; - mc68328->regs.pedir = 0x00; - mc68328->regs.pedata = 0x00; - mc68328->regs.pepuen = 0x80; - mc68328->regs.pesel = 0x80; - mc68328->regs.pfdir = 0x00; - mc68328->regs.pfdata = 0x00; - mc68328->regs.pfpuen = 0xff; - mc68328->regs.pfsel = 0xff; - mc68328->regs.pgdir = 0x00; - mc68328->regs.pgdata = 0x00; - mc68328->regs.pgpuen = 0xff; - mc68328->regs.pgsel = 0xff; - mc68328->regs.pjdir = 0x00; - mc68328->regs.pjdata = 0x00; - mc68328->regs.pjsel = 0x00; - mc68328->regs.pkdir = 0x00; - mc68328->regs.pkdata = 0x00; - mc68328->regs.pkpuen = 0xff; - mc68328->regs.pksel = 0xff; - mc68328->regs.pmdir = 0x00; - mc68328->regs.pmdata = 0x00; - mc68328->regs.pmpuen = 0xff; - mc68328->regs.pmsel = 0xff; - - mc68328->regs.pwmc = 0x0000; - mc68328->regs.pwmp = 0x0000; - mc68328->regs.pwmw = 0x0000; - mc68328->regs.pwmcnt = 0x0000; - - mc68328->regs.tctl[0] = mc68328->regs.tctl[1] = 0x0000; - mc68328->regs.tprer[0] = mc68328->regs.tprer[1] = 0x0000; - mc68328->regs.tcmp[0] = mc68328->regs.tcmp[1] = 0xffff; - mc68328->regs.tcr[0] = mc68328->regs.tcr[1] = 0x0000; - mc68328->regs.tcn[0] = mc68328->regs.tcn[1] = 0x0000; - mc68328->regs.tstat[0] = mc68328->regs.tstat[1] = 0x0000; - mc68328->regs.wctlr = 0x0000; - mc68328->regs.wcmpr = 0xffff; - mc68328->regs.wcn = 0x0000; - - mc68328->regs.spisr = 0x0000; - - mc68328->regs.spimdata = 0x0000; - mc68328->regs.spimcont = 0x0000; - - mc68328->regs.ustcnt = 0x0000; - mc68328->regs.ubaud = 0x003f; - mc68328->regs.urx = 0x0000; - mc68328->regs.utx = 0x0000; - mc68328->regs.umisc = 0x0000; - - mc68328->regs.lssa = 0x00000000; - mc68328->regs.lvpw = 0xff; - mc68328->regs.lxmax = 0x03ff; - mc68328->regs.lymax = 0x01ff; - mc68328->regs.lcxp = 0x0000; - mc68328->regs.lcyp = 0x0000; - mc68328->regs.lcwch = 0x0101; - mc68328->regs.lblkc = 0x7f; - mc68328->regs.lpicf = 0x00; - mc68328->regs.lpolcf = 0x00; - mc68328->regs.lacdrc = 0x00; - mc68328->regs.lpxcd = 0x00; - mc68328->regs.lckcon = 0x40; - mc68328->regs.llbar = 0x3e; - mc68328->regs.lotcr = 0x3f; - mc68328->regs.lposr = 0x00; - mc68328->regs.lfrcm = 0xb9; - mc68328->regs.lgpmr = 0x1073; - - mc68328->regs.hmsr = 0x00000000; - mc68328->regs.alarm = 0x00000000; - mc68328->regs.rtcctl = 0x00; - mc68328->regs.rtcisr = 0x00; - mc68328->regs.rtcienr = 0x00; - mc68328->regs.stpwtch = 0x00; - - mc68328->rtc->adjust(attotime::from_hz(1), 0, attotime::from_hz(1)); + UINT16 *video_ram = (UINT16 *)(machine().device(RAM_TAG)->pointer() + (m_regs.lssa & 0x00ffffff)); + UINT16 word; + UINT16 *line; + int y, x, b; + + if (m_regs.lckcon & LCKCON_LCDC_EN) + { + for (y = 0; y < 160; y++) + { + line = &bitmap.pix16(y); + + for (x = 0; x < 160; x += 16) + { + word = *(video_ram++); + for (b = 0; b < 16; b++) + { + line[x + b] = (word >> (15 - b)) & 0x0001; + } + } + } + } + else + { + for (y = 0; y < 160; y++) + { + line = &bitmap.pix16(y); + + for (x = 0; x < 160; x++) + { + line[x] = 0; + } + } + } + return 0; } -static void mc68328_register_state_save(device_t *device) + +void mc68328_device::register_state_save() { - mc68328_t* mc68328 = mc68328_get_safe_token( device ); + save_item(NAME(m_regs.scr)); + save_item(NAME(m_regs.grpbasea)); + save_item(NAME(m_regs.grpbaseb)); + save_item(NAME(m_regs.grpbasec)); + save_item(NAME(m_regs.grpbased)); + save_item(NAME(m_regs.grpmaska)); + save_item(NAME(m_regs.grpmaskb)); + save_item(NAME(m_regs.grpmaskc)); + save_item(NAME(m_regs.grpmaskd)); + save_item(NAME(m_regs.csa0)); + save_item(NAME(m_regs.csa1)); + save_item(NAME(m_regs.csa2)); + save_item(NAME(m_regs.csa3)); + save_item(NAME(m_regs.csb0)); + save_item(NAME(m_regs.csb1)); + save_item(NAME(m_regs.csb2)); + save_item(NAME(m_regs.csb3)); + save_item(NAME(m_regs.csc0)); + save_item(NAME(m_regs.csc1)); + save_item(NAME(m_regs.csc2)); + save_item(NAME(m_regs.csc3)); + save_item(NAME(m_regs.csd0)); + save_item(NAME(m_regs.csd1)); + save_item(NAME(m_regs.csd2)); + save_item(NAME(m_regs.csd3)); - device->machine().save().save_item(NAME(mc68328->regs.scr)); - device->machine().save().save_item(NAME(mc68328->regs.grpbasea)); - device->machine().save().save_item(NAME(mc68328->regs.grpbaseb)); - device->machine().save().save_item(NAME(mc68328->regs.grpbasec)); - device->machine().save().save_item(NAME(mc68328->regs.grpbased)); - device->machine().save().save_item(NAME(mc68328->regs.grpmaska)); - device->machine().save().save_item(NAME(mc68328->regs.grpmaskb)); - device->machine().save().save_item(NAME(mc68328->regs.grpmaskc)); - device->machine().save().save_item(NAME(mc68328->regs.grpmaskd)); - device->machine().save().save_item(NAME(mc68328->regs.csa0)); - device->machine().save().save_item(NAME(mc68328->regs.csa1)); - device->machine().save().save_item(NAME(mc68328->regs.csa2)); - device->machine().save().save_item(NAME(mc68328->regs.csa3)); - device->machine().save().save_item(NAME(mc68328->regs.csb0)); - device->machine().save().save_item(NAME(mc68328->regs.csb1)); - device->machine().save().save_item(NAME(mc68328->regs.csb2)); - device->machine().save().save_item(NAME(mc68328->regs.csb3)); - device->machine().save().save_item(NAME(mc68328->regs.csc0)); - device->machine().save().save_item(NAME(mc68328->regs.csc1)); - device->machine().save().save_item(NAME(mc68328->regs.csc2)); - device->machine().save().save_item(NAME(mc68328->regs.csc3)); - device->machine().save().save_item(NAME(mc68328->regs.csd0)); - device->machine().save().save_item(NAME(mc68328->regs.csd1)); - device->machine().save().save_item(NAME(mc68328->regs.csd2)); - device->machine().save().save_item(NAME(mc68328->regs.csd3)); + save_item(NAME(m_regs.pllcr)); + save_item(NAME(m_regs.pllfsr)); + save_item(NAME(m_regs.pctlr)); - device->machine().save().save_item(NAME(mc68328->regs.pllcr)); - device->machine().save().save_item(NAME(mc68328->regs.pllfsr)); - device->machine().save().save_item(NAME(mc68328->regs.pctlr)); + save_item(NAME(m_regs.ivr)); + save_item(NAME(m_regs.icr)); + save_item(NAME(m_regs.imr)); + save_item(NAME(m_regs.iwr)); + save_item(NAME(m_regs.isr)); + save_item(NAME(m_regs.ipr)); - device->machine().save().save_item(NAME(mc68328->regs.ivr)); - device->machine().save().save_item(NAME(mc68328->regs.icr)); - device->machine().save().save_item(NAME(mc68328->regs.imr)); - device->machine().save().save_item(NAME(mc68328->regs.iwr)); - device->machine().save().save_item(NAME(mc68328->regs.isr)); - device->machine().save().save_item(NAME(mc68328->regs.ipr)); + save_item(NAME(m_regs.padir)); + save_item(NAME(m_regs.padata)); + save_item(NAME(m_regs.pasel)); + save_item(NAME(m_regs.pbdir)); + save_item(NAME(m_regs.pbdata)); + save_item(NAME(m_regs.pbsel)); + save_item(NAME(m_regs.pcdir)); + save_item(NAME(m_regs.pcdata)); + save_item(NAME(m_regs.pcsel)); + save_item(NAME(m_regs.pddir)); + save_item(NAME(m_regs.pddata)); + save_item(NAME(m_regs.pdpuen)); + save_item(NAME(m_regs.pdpol)); + save_item(NAME(m_regs.pdirqen)); + save_item(NAME(m_regs.pddataedge)); + save_item(NAME(m_regs.pdirqedge)); + save_item(NAME(m_regs.pedir)); + save_item(NAME(m_regs.pedata)); + save_item(NAME(m_regs.pepuen)); + save_item(NAME(m_regs.pesel)); + save_item(NAME(m_regs.pfdir)); + save_item(NAME(m_regs.pfdata)); + save_item(NAME(m_regs.pfpuen)); + save_item(NAME(m_regs.pfsel)); + save_item(NAME(m_regs.pgdir)); + save_item(NAME(m_regs.pgdata)); + save_item(NAME(m_regs.pgpuen)); + save_item(NAME(m_regs.pgsel)); + save_item(NAME(m_regs.pjdir)); + save_item(NAME(m_regs.pjdata)); + save_item(NAME(m_regs.pjsel)); + save_item(NAME(m_regs.pkdir)); + save_item(NAME(m_regs.pkdata)); + save_item(NAME(m_regs.pkpuen)); + save_item(NAME(m_regs.pksel)); + save_item(NAME(m_regs.pmdir)); + save_item(NAME(m_regs.pmdata)); + save_item(NAME(m_regs.pmpuen)); + save_item(NAME(m_regs.pmsel)); - device->machine().save().save_item(NAME(mc68328->regs.padir)); - device->machine().save().save_item(NAME(mc68328->regs.padata)); - device->machine().save().save_item(NAME(mc68328->regs.pasel)); - device->machine().save().save_item(NAME(mc68328->regs.pbdir)); - device->machine().save().save_item(NAME(mc68328->regs.pbdata)); - device->machine().save().save_item(NAME(mc68328->regs.pbsel)); - device->machine().save().save_item(NAME(mc68328->regs.pcdir)); - device->machine().save().save_item(NAME(mc68328->regs.pcdata)); - device->machine().save().save_item(NAME(mc68328->regs.pcsel)); - device->machine().save().save_item(NAME(mc68328->regs.pddir)); - device->machine().save().save_item(NAME(mc68328->regs.pddata)); - device->machine().save().save_item(NAME(mc68328->regs.pdpuen)); - device->machine().save().save_item(NAME(mc68328->regs.pdpol)); - device->machine().save().save_item(NAME(mc68328->regs.pdirqen)); - device->machine().save().save_item(NAME(mc68328->regs.pddataedge)); - device->machine().save().save_item(NAME(mc68328->regs.pdirqedge)); - device->machine().save().save_item(NAME(mc68328->regs.pedir)); - device->machine().save().save_item(NAME(mc68328->regs.pedata)); - device->machine().save().save_item(NAME(mc68328->regs.pepuen)); - device->machine().save().save_item(NAME(mc68328->regs.pesel)); - device->machine().save().save_item(NAME(mc68328->regs.pfdir)); - device->machine().save().save_item(NAME(mc68328->regs.pfdata)); - device->machine().save().save_item(NAME(mc68328->regs.pfpuen)); - device->machine().save().save_item(NAME(mc68328->regs.pfsel)); - device->machine().save().save_item(NAME(mc68328->regs.pgdir)); - device->machine().save().save_item(NAME(mc68328->regs.pgdata)); - device->machine().save().save_item(NAME(mc68328->regs.pgpuen)); - device->machine().save().save_item(NAME(mc68328->regs.pgsel)); - device->machine().save().save_item(NAME(mc68328->regs.pjdir)); - device->machine().save().save_item(NAME(mc68328->regs.pjdata)); - device->machine().save().save_item(NAME(mc68328->regs.pjsel)); - device->machine().save().save_item(NAME(mc68328->regs.pkdir)); - device->machine().save().save_item(NAME(mc68328->regs.pkdata)); - device->machine().save().save_item(NAME(mc68328->regs.pkpuen)); - device->machine().save().save_item(NAME(mc68328->regs.pksel)); - device->machine().save().save_item(NAME(mc68328->regs.pmdir)); - device->machine().save().save_item(NAME(mc68328->regs.pmdata)); - device->machine().save().save_item(NAME(mc68328->regs.pmpuen)); - device->machine().save().save_item(NAME(mc68328->regs.pmsel)); + save_item(NAME(m_regs.pwmc)); + save_item(NAME(m_regs.pwmp)); + save_item(NAME(m_regs.pwmw)); + save_item(NAME(m_regs.pwmcnt)); - device->machine().save().save_item(NAME(mc68328->regs.pwmc)); - device->machine().save().save_item(NAME(mc68328->regs.pwmp)); - device->machine().save().save_item(NAME(mc68328->regs.pwmw)); - device->machine().save().save_item(NAME(mc68328->regs.pwmcnt)); + save_item(NAME(m_regs.tctl[0])); + save_item(NAME(m_regs.tctl[1])); + save_item(NAME(m_regs.tprer[0])); + save_item(NAME(m_regs.tprer[1])); + save_item(NAME(m_regs.tcmp[0])); + save_item(NAME(m_regs.tcmp[1])); + save_item(NAME(m_regs.tcr[0])); + save_item(NAME(m_regs.tcr[1])); + save_item(NAME(m_regs.tcn[0])); + save_item(NAME(m_regs.tcn[1])); + save_item(NAME(m_regs.tstat[0])); + save_item(NAME(m_regs.tstat[1])); + save_item(NAME(m_regs.wctlr)); + save_item(NAME(m_regs.wcmpr)); + save_item(NAME(m_regs.wcn)); - device->machine().save().save_item(NAME(mc68328->regs.tctl[0])); - device->machine().save().save_item(NAME(mc68328->regs.tctl[1])); - device->machine().save().save_item(NAME(mc68328->regs.tprer[0])); - device->machine().save().save_item(NAME(mc68328->regs.tprer[1])); - device->machine().save().save_item(NAME(mc68328->regs.tcmp[0])); - device->machine().save().save_item(NAME(mc68328->regs.tcmp[1])); - device->machine().save().save_item(NAME(mc68328->regs.tcr[0])); - device->machine().save().save_item(NAME(mc68328->regs.tcr[1])); - device->machine().save().save_item(NAME(mc68328->regs.tcn[0])); - device->machine().save().save_item(NAME(mc68328->regs.tcn[1])); - device->machine().save().save_item(NAME(mc68328->regs.tstat[0])); - device->machine().save().save_item(NAME(mc68328->regs.tstat[1])); - device->machine().save().save_item(NAME(mc68328->regs.wctlr)); - device->machine().save().save_item(NAME(mc68328->regs.wcmpr)); - device->machine().save().save_item(NAME(mc68328->regs.wcn)); + save_item(NAME(m_regs.spisr)); - device->machine().save().save_item(NAME(mc68328->regs.spisr)); + save_item(NAME(m_regs.spimdata)); + save_item(NAME(m_regs.spimcont)); - device->machine().save().save_item(NAME(mc68328->regs.spimdata)); - device->machine().save().save_item(NAME(mc68328->regs.spimcont)); + save_item(NAME(m_regs.ustcnt)); + save_item(NAME(m_regs.ubaud)); + save_item(NAME(m_regs.urx)); + save_item(NAME(m_regs.utx)); + save_item(NAME(m_regs.umisc)); - device->machine().save().save_item(NAME(mc68328->regs.ustcnt)); - device->machine().save().save_item(NAME(mc68328->regs.ubaud)); - device->machine().save().save_item(NAME(mc68328->regs.urx)); - device->machine().save().save_item(NAME(mc68328->regs.utx)); - device->machine().save().save_item(NAME(mc68328->regs.umisc)); + save_item(NAME(m_regs.lssa)); + save_item(NAME(m_regs.lvpw)); + save_item(NAME(m_regs.lxmax)); + save_item(NAME(m_regs.lymax)); + save_item(NAME(m_regs.lcxp)); + save_item(NAME(m_regs.lcyp)); + save_item(NAME(m_regs.lcwch)); + save_item(NAME(m_regs.lblkc)); + save_item(NAME(m_regs.lpicf)); + save_item(NAME(m_regs.lpolcf)); + save_item(NAME(m_regs.lacdrc)); + save_item(NAME(m_regs.lpxcd)); + save_item(NAME(m_regs.lckcon)); + save_item(NAME(m_regs.llbar)); + save_item(NAME(m_regs.lotcr)); + save_item(NAME(m_regs.lposr)); + save_item(NAME(m_regs.lfrcm)); + save_item(NAME(m_regs.lgpmr)); - device->machine().save().save_item(NAME(mc68328->regs.lssa)); - device->machine().save().save_item(NAME(mc68328->regs.lvpw)); - device->machine().save().save_item(NAME(mc68328->regs.lxmax)); - device->machine().save().save_item(NAME(mc68328->regs.lymax)); - device->machine().save().save_item(NAME(mc68328->regs.lcxp)); - device->machine().save().save_item(NAME(mc68328->regs.lcyp)); - device->machine().save().save_item(NAME(mc68328->regs.lcwch)); - device->machine().save().save_item(NAME(mc68328->regs.lblkc)); - device->machine().save().save_item(NAME(mc68328->regs.lpicf)); - device->machine().save().save_item(NAME(mc68328->regs.lpolcf)); - device->machine().save().save_item(NAME(mc68328->regs.lacdrc)); - device->machine().save().save_item(NAME(mc68328->regs.lpxcd)); - device->machine().save().save_item(NAME(mc68328->regs.lckcon)); - device->machine().save().save_item(NAME(mc68328->regs.llbar)); - device->machine().save().save_item(NAME(mc68328->regs.lotcr)); - device->machine().save().save_item(NAME(mc68328->regs.lposr)); - device->machine().save().save_item(NAME(mc68328->regs.lfrcm)); - device->machine().save().save_item(NAME(mc68328->regs.lgpmr)); - - device->machine().save().save_item(NAME(mc68328->regs.hmsr)); - device->machine().save().save_item(NAME(mc68328->regs.alarm)); - device->machine().save().save_item(NAME(mc68328->regs.rtcctl)); - device->machine().save().save_item(NAME(mc68328->regs.rtcisr)); - device->machine().save().save_item(NAME(mc68328->regs.rtcienr)); - device->machine().save().save_item(NAME(mc68328->regs.stpwtch)); + save_item(NAME(m_regs.hmsr)); + save_item(NAME(m_regs.alarm)); + save_item(NAME(m_regs.rtcctl)); + save_item(NAME(m_regs.rtcisr)); + save_item(NAME(m_regs.rtcienr)); + save_item(NAME(m_regs.stpwtch)); } -static DEVICE_START( mc68328 ) -{ - mc68328_t* mc68328 = mc68328_get_safe_token( device ); - - mc68328->iface = (const mc68328_interface*)device->static_config(); - - mc68328->out_port_a.resolve(mc68328->iface->out_port_a_func, *device); - mc68328->out_port_b.resolve(mc68328->iface->out_port_b_func, *device); - mc68328->out_port_c.resolve(mc68328->iface->out_port_c_func, *device); - mc68328->out_port_d.resolve(mc68328->iface->out_port_d_func, *device); - mc68328->out_port_e.resolve(mc68328->iface->out_port_e_func, *device); - mc68328->out_port_f.resolve(mc68328->iface->out_port_f_func, *device); - mc68328->out_port_g.resolve(mc68328->iface->out_port_g_func, *device); - mc68328->out_port_j.resolve(mc68328->iface->out_port_j_func, *device); - mc68328->out_port_k.resolve(mc68328->iface->out_port_k_func, *device); - mc68328->out_port_m.resolve(mc68328->iface->out_port_m_func, *device); - - mc68328->in_port_a.resolve(mc68328->iface->in_port_a_func, *device); - mc68328->in_port_b.resolve(mc68328->iface->in_port_b_func, *device); - mc68328->in_port_c.resolve(mc68328->iface->in_port_c_func, *device); - mc68328->in_port_d.resolve(mc68328->iface->in_port_d_func, *device); - mc68328->in_port_e.resolve(mc68328->iface->in_port_e_func, *device); - mc68328->in_port_f.resolve(mc68328->iface->in_port_f_func, *device); - mc68328->in_port_g.resolve(mc68328->iface->in_port_g_func, *device); - mc68328->in_port_j.resolve(mc68328->iface->in_port_j_func, *device); - mc68328->in_port_k.resolve(mc68328->iface->in_port_k_func, *device); - mc68328->in_port_m.resolve(mc68328->iface->in_port_m_func, *device); - - mc68328->out_pwm.resolve(mc68328->iface->out_pwm_func, *device); - - mc68328->out_spim.resolve(mc68328->iface->out_spim_func, *device); - mc68328->in_spim.resolve(mc68328->iface->in_spim_func, *device); - - mc68328->gptimer[0] = device->machine().scheduler().timer_alloc(FUNC(mc68328_timer1_hit)); - mc68328->gptimer[1] = device->machine().scheduler().timer_alloc(FUNC(mc68328_timer2_hit)); - mc68328->rtc = device->machine().scheduler().timer_alloc(FUNC(mc68328_rtc_tick)); - mc68328->pwm = device->machine().scheduler().timer_alloc(FUNC(mc68328_pwm_transition)); - - mc68328_register_state_save(device); -} - -const device_type MC68328 = &device_creator; - -mc68328_device::mc68328_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, MC68328, "Motorola MC68328 (DragonBall) Integrated Processor", tag, owner, clock) -{ - m_token = global_alloc_clear(mc68328_t); -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void mc68328_device::device_config_complete() -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void mc68328_device::device_start() -{ - DEVICE_START_NAME( mc68328 )(this); -} - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void mc68328_device::device_reset() -{ - DEVICE_RESET_NAME( mc68328 )(this); -} diff --git a/src/mess/machine/mc68328.h b/src/mess/machine/mc68328.h index 1d3b9301c24..617c21e7f9a 100644 --- a/src/mess/machine/mc68328.h +++ b/src/mess/machine/mc68328.h @@ -1,245 +1,95 @@ /********************************************************************** + + Motorola 68328 ("DragonBall") System-on-a-Chip implementation + + By MooglyGuy + contact mooglyguy@gmail.com with licensing and usage questions. + + **********************************************************************/ - Motorola 68328 ("DragonBall") System-on-a-Chip private data +/***************************************************************************************************************** + + P P P P P P P P P P P P P P + E E E E E E E J J J J J J J + 1 2 3 4 5 6 7 0 1 2 3 4 5 6 + D D D D D / / / / / / / / / / / / / / + 3 4 5 6 7 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! + / / / / / ! ! C C C C C C C C C C C C C C C + P V P P P P D D G D D D D T T L U V S S S S S S S S G S S S S S S S + B C B B B B D D 1 1 N 1 1 1 1 M C W W C A A A A B B B B N C C C C D D D + 3 C 4 5 6 7 8 9 0 1 D 2 3 4 5 S K E E C 0 1 2 3 0 1 2 3 D 0 1 2 3 0 1 2 + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------------------------------------------------------------------------------+ + | | + | | + | | + | | + | | + D2/PB2--| |--PJ7/!CSD3 + D1/PB1--| |--VCC + D0/PB0--| |--PD0/!KBD0/!INT0 + TDO--| |--PD1/!KBD1/!INT1 + TDI--| |--PD2/!KBD2/!INT2 + GND--| |--PD3/!KBD3/!INT3 + !OE--| |--PD4/!KBD4/!INT4 + !UDS/PC1--| |--PD5/!KBD5/!INT5 + !AS--| |--PD6/!KBD6/!INT6 + A0--| |--PD7/!KBD7/!INT7 + !LDS--| |--GND + R/!W--| |--LD0 + !DTACK/PC5--| |--LD1 + !RESET--| |--LD2 + VCC--| |--LD3 + !WE/PC6--| |--LFRM + !JTAGRST--| |--LLP + BBUSW--| MC68328PV |--LCLK + A1--| TOP VIEW |--LACD + A2--| |--VCC + A3--| |--PK0/SPMTXD0 + A4--| |--PK1/SPMRXD0 + A5--| |--PK2/SPMCLK0 + A6--| |--PK3/SPSEN + GND--| |--PK4/SPSRXD1 + A7--| |--PK5/SPSCLK1 + A8--| |--PK6/!CE2 + A9--| |--PK7/!CE1 + A10--| |--GND + A11--| |--PM0/!CTS + A12--| |--PM1/!RTS + A13--| |--PM2/!IRQ6 + A14--| |--PM3/!IRQ3 + VCC--| |--PM4/!IRQ2 + A15--| |--PM5/!IRQ1 + A16/PA0--| |--PM6/!PENIRQ + | | + | _ | + | (_) | + |\ | + | \ | + +-------------------------------------------------------------------------------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + P P P P P G P P P P P P P P V P P P P P P P P G P P P V C G P P P E X P + A A A A A N A A F F F F F F C F F G G G G G G N G G C C L N C M L X T L + 1 2 3 4 5 D 6 7 0 1 2 3 4 5 C 6 7 7 6 5 4 3 2 D 1 0 0 C K D 4 7 L T A L + / / / / / / / / / / / / / / / / / / / / / / / / O / / G A L V + A A A A A A A A A A A A A A A R T ! T ! P R T M ! U N L C + 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 T I T I T W X X O I A D C + 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 C N O N O M D D C R R + O 1 U 2 U O L Q T + T T K 7 G + 1 2 P + I + O + + Figure 12-1. MC68328 144-Lead Plastic Thin-Quad Flat Pack Pin Assignment + + Source: MC68328 (DragonBall)(tm) Integrated Processor User's Manual + + *****************************************************************************************************************/ - By MooglyGuy - contact mooglyguy@gmail.com with licensing and usage questions. +#ifndef __MC68328_H__ +#define __MC68328_H__ -**********************************************************************/ - -#ifndef __MC68328_PRIVATE_H_ -#define __MC68328_PRIVATE_H_ - -struct mc68328_regs_t -{ - // $(FF)FFF000 - UINT8 scr; // System Control Register - UINT8 unused0[255]; - - // $(FF)FFF100 - UINT16 grpbasea; // Chip Select Group A Base Register - UINT16 grpbaseb; // Chip Select Group B Base Register - UINT16 grpbasec; // Chip Select Group C Base Register - UINT16 grpbased; // Chip Select Group D Base Register - UINT16 grpmaska; // Chip Select Group A Mask Register - UINT16 grpmaskb; // Chip Select Group B Mask Register - UINT16 grpmaskc; // Chip Select Group C Mask Register - UINT16 grpmaskd; // Chip Select Group D Mask Register - UINT32 csa0; // Group A Chip Select 0 Register - UINT32 csa1; // Group A Chip Select 1 Register - UINT32 csa2; // Group A Chip Select 2 Register - UINT32 csa3; // Group A Chip Select 3 Register - UINT32 csb0; // Group B Chip Select 0 Register - UINT32 csb1; // Group B Chip Select 1 Register - UINT32 csb2; // Group B Chip Select 2 Register - UINT32 csb3; // Group B Chip Select 3 Register - UINT32 csc0; // Group C Chip Select 0 Register - UINT32 csc1; // Group C Chip Select 1 Register - UINT32 csc2; // Group C Chip Select 2 Register - UINT32 csc3; // Group C Chip Select 3 Register - UINT32 csd0; // Group D Chip Select 0 Register - UINT32 csd1; // Group D Chip Select 1 Register - UINT32 csd2; // Group D Chip Select 2 Register - UINT32 csd3; // Group D Chip Select 3 Register - UINT8 unused1[176]; - - // $(FF)FFF200 - UINT16 pllcr; // PLL Control Register - UINT16 pllfsr; // PLL Frequency Select Register - UINT8 pad2[3]; - UINT8 pctlr; // Power Control Register - UINT8 unused3[248]; - - // $(FF)FFF300 - UINT8 ivr; // Interrupt Vector Register - UINT8 unused4[1]; - UINT16 icr; // Interrupt Control Register - UINT32 imr; // Interrupt Mask Register - UINT32 iwr; // Interrupt Wakeup Enable Register - UINT32 isr; // Interrupt Status Register - UINT32 ipr; // Interrupt Pending Register - UINT8 unused5[236]; - - // $(FF)FFF400 - UINT8 padir; // Port A Direction Register - UINT8 padata; // Port A Data Register - UINT8 unused6[1]; - UINT8 pasel; // Port A Select Register - UINT8 unused7[4]; - - UINT8 pbdir; // Port B Direction Register - UINT8 pbdata; // Port B Data Register - UINT8 unused8[1]; - UINT8 pbsel; // Port B Select Register - UINT8 unused9[4]; - - UINT8 pcdir; // Port C Direction Register - UINT8 pcdata; // Port C Data Register - UINT8 unused10[1]; - UINT8 pcsel; // Port C Select Register - UINT8 unused11[4]; - - UINT8 pddir; // Port D Direction Register - UINT8 pddata; // Port D Data Register - UINT8 pdpuen; // Port D Pullup Enable Register - UINT8 unused12[1]; - UINT8 pdpol; // Port D Polarity Register - UINT8 pdirqen; // Port D IRQ Enable Register - UINT8 pddataedge; // Port D Data Edge Level - UINT8 pdirqedge; // Port D IRQ Edge Register - - UINT8 pedir; // Port E Direction Register - UINT8 pedata; // Port E Data Register - UINT8 pepuen; // Port E Pullup Enable Register - UINT8 pesel; // Port E Select Register - UINT8 unused14[4]; - - UINT8 pfdir; // Port F Direction Register - UINT8 pfdata; // Port F Data Register - UINT8 pfpuen; // Port F Pullup Enable Register - UINT8 pfsel; // Port F Select Register - UINT8 unused15[4]; - - UINT8 pgdir; // Port G Direction Register - UINT8 pgdata; // Port G Data Register - UINT8 pgpuen; // Port G Pullup Enable Register - UINT8 pgsel; // Port G Select Register - UINT8 unused16[4]; - - UINT8 pjdir; // Port J Direction Register - UINT8 pjdata; // Port J Data Register - UINT8 unused17[1]; - UINT8 pjsel; // Port J Select Register - UINT8 unused18[4]; - UINT8 pkdir; // Port K Direction Register - UINT8 pkdata; // Port K Data Register - UINT8 pkpuen; // Port K Pullup Enable Register - UINT8 pksel; // Port K Select Register - UINT8 unused19[4]; - - UINT8 pmdir; // Port M Direction Register - UINT8 pmdata; // Port M Data Register - UINT8 pmpuen; // Port M Pullup Enable Register - UINT8 pmsel; // Port M Select Register - UINT8 unused20[180]; - - // $(FF)FFF500 - UINT16 pwmc; // PWM Control Register - UINT16 pwmp; // PWM Period Register - UINT16 pwmw; // PWM Width Register - UINT16 pwmcnt; // PWN Counter - UINT8 unused21[248]; - - // $(FF)FFF600 - UINT16 tctl[2]; // Timer Control Register - UINT16 tprer[2]; // Timer Prescaler Register - UINT16 tcmp[2]; // Timer Compare Register - UINT16 tcr[2]; // Timer Capture Register - UINT16 tcn[2]; // Timer Counter - UINT16 tstat[2]; // Timer Status - UINT16 wctlr; // Watchdog Control Register - UINT16 wcmpr; // Watchdog Compare Register - UINT16 wcn; // Watchdog Counter - UINT8 tclear[2]; // Timer Clearable Status - UINT8 unused22[224]; - - // $(FF)FFF700 - UINT16 spisr; // SPIS Register - UINT8 unused23[254]; - - // $(FF)FFF800 - UINT16 spimdata; // SPIM Data Register - UINT16 spimcont; // SPIM Control/Status Register - UINT8 unused24[252]; - - // $(FF)FFF900 - UINT16 ustcnt; // UART Status/Control Register - UINT16 ubaud; // UART Baud Control Register - UINT16 urx; // UART RX Register - UINT16 utx; // UART TX Register - UINT16 umisc; // UART Misc Register - UINT8 unused25[246]; - - // $(FF)FFFA00 - UINT32 lssa; // Screen Starting Address Register - UINT8 unused26[1]; - UINT8 lvpw; // Virtual Page Width Register - UINT8 unused27[2]; - UINT16 lxmax; // Screen Width Register - UINT16 lymax; // Screen Height Register - UINT8 unused28[12]; - UINT16 lcxp; // Cursor X Position - UINT16 lcyp; // Cursor Y Position - UINT16 lcwch; // Cursor Width & Height Register - UINT8 unused29[1]; - UINT8 lblkc; // Blink Control Register - UINT8 lpicf; // Panel Interface Config Register - UINT8 lpolcf; // Polarity Config Register - UINT8 unused30[1]; - UINT8 lacdrc; // ACD (M) Rate Control Register - UINT8 unused31[1]; - UINT8 lpxcd; // Pixel Clock Divider Register - UINT8 unused32[1]; - UINT8 lckcon; // Clocking Control Register - UINT8 unused33[1]; - UINT8 llbar; // Last Buffer Address Register - UINT8 unused34[1]; - UINT8 lotcr; // Octet Terminal Count Register - UINT8 unused35[1]; - UINT8 lposr; // Panning Offset Register - UINT8 unused36[3]; - UINT8 lfrcm; // Frame Rate Control Modulation Register - UINT16 lgpmr; // Gray Palette Mapping Register - UINT8 unused37[204]; - - // $(FF)FFFB00 - UINT32 hmsr; // RTC Hours Minutes Seconds Register - UINT32 alarm; // RTC Alarm Register - UINT8 unused38[4]; - UINT16 rtcctl; // RTC Control Register - UINT16 rtcisr; // RTC Interrupt Status Register - UINT16 rtcienr; // RTC Interrupt Enable Register - UINT16 stpwtch; // Stopwatch Minutes - UINT8 unused42[1260]; -}; - -struct mc68328_t -{ - const mc68328_interface* iface; - - mc68328_regs_t regs; - - emu_timer *gptimer[2]; - emu_timer *rtc; - emu_timer *pwm; - - devcb_resolved_write8 out_port_a; /* 8-bit output */ - devcb_resolved_write8 out_port_b; /* 8-bit output */ - devcb_resolved_write8 out_port_c; /* 8-bit output */ - devcb_resolved_write8 out_port_d; /* 8-bit output */ - devcb_resolved_write8 out_port_e; /* 8-bit output */ - devcb_resolved_write8 out_port_f; /* 8-bit output */ - devcb_resolved_write8 out_port_g; /* 8-bit output */ - devcb_resolved_write8 out_port_j; /* 8-bit output */ - devcb_resolved_write8 out_port_k; /* 8-bit output */ - devcb_resolved_write8 out_port_m; /* 8-bit output */ - - devcb_resolved_read8 in_port_a; /* 8-bit input */ - devcb_resolved_read8 in_port_b; /* 8-bit input */ - devcb_resolved_read8 in_port_c; /* 8-bit input */ - devcb_resolved_read8 in_port_d; /* 8-bit input */ - devcb_resolved_read8 in_port_e; /* 8-bit input */ - devcb_resolved_read8 in_port_f; /* 8-bit input */ - devcb_resolved_read8 in_port_g; /* 8-bit input */ - devcb_resolved_read8 in_port_j; /* 8-bit input */ - devcb_resolved_read8 in_port_k; /* 8-bit input */ - devcb_resolved_read8 in_port_m; /* 8-bit input */ - - devcb_resolved_write8 out_pwm; /* 1-bit output */ - - devcb_resolved_write16 out_spim; /* 16-bit output */ - devcb_resolved_read16 in_spim; /* 16-bit input */ -}; #define SCR_BETO 0x80 #define SCR_WPV 0x40 @@ -558,11 +408,318 @@ struct mc68328_t #define PWMC_PWMEN 0x0010 #define PWMC_CLKSEL 0x0007 -INLINE mc68328_t* mc68328_get_safe_token( device_t *device ) -{ - assert( device != NULL ); - assert( device->type() == MC68328 ); - return (mc68328_t*) downcast(device)->token(); -} -#endif // __MC68328_PRIVATE_H_ +struct mc68328_interface +{ + const char *m68k_cpu_tag; + + devcb_write8 m_out_port_a_func; /* 8-bit output */ + devcb_write8 m_out_port_b_func; /* 8-bit output */ + devcb_write8 m_out_port_c_func; /* 8-bit output */ + devcb_write8 m_out_port_d_func; /* 8-bit output */ + devcb_write8 m_out_port_e_func; /* 8-bit output */ + devcb_write8 m_out_port_f_func; /* 8-bit output */ + devcb_write8 m_out_port_g_func; /* 8-bit output */ + devcb_write8 m_out_port_j_func; /* 8-bit output */ + devcb_write8 m_out_port_k_func; /* 8-bit output */ + devcb_write8 m_out_port_m_func; /* 8-bit output */ + + devcb_read8 m_in_port_a_func; /* 8-bit input */ + devcb_read8 m_in_port_b_func; /* 8-bit input */ + devcb_read8 m_in_port_c_func; /* 8-bit input */ + devcb_read8 m_in_port_d_func; /* 8-bit input */ + devcb_read8 m_in_port_e_func; /* 8-bit input */ + devcb_read8 m_in_port_f_func; /* 8-bit input */ + devcb_read8 m_in_port_g_func; /* 8-bit input */ + devcb_read8 m_in_port_j_func; /* 8-bit input */ + devcb_read8 m_in_port_k_func; /* 8-bit input */ + devcb_read8 m_in_port_m_func; /* 8-bit input */ + + devcb_write8 m_out_pwm_func; /* 1-bit output */ + + devcb_write16 m_out_spim_func; /* 16-bit output */ + devcb_read16 m_in_spim_func; /* 16-bit input */ + + devcb_write_line m_spim_xch_trigger_func; /* SPIM exchange trigger */ +}; + + +struct mc68328_regs_t +{ + // $(FF)FFF000 + UINT8 scr; // System Control Register + UINT8 unused0[255]; + + // $(FF)FFF100 + UINT16 grpbasea; // Chip Select Group A Base Register + UINT16 grpbaseb; // Chip Select Group B Base Register + UINT16 grpbasec; // Chip Select Group C Base Register + UINT16 grpbased; // Chip Select Group D Base Register + UINT16 grpmaska; // Chip Select Group A Mask Register + UINT16 grpmaskb; // Chip Select Group B Mask Register + UINT16 grpmaskc; // Chip Select Group C Mask Register + UINT16 grpmaskd; // Chip Select Group D Mask Register + UINT32 csa0; // Group A Chip Select 0 Register + UINT32 csa1; // Group A Chip Select 1 Register + UINT32 csa2; // Group A Chip Select 2 Register + UINT32 csa3; // Group A Chip Select 3 Register + UINT32 csb0; // Group B Chip Select 0 Register + UINT32 csb1; // Group B Chip Select 1 Register + UINT32 csb2; // Group B Chip Select 2 Register + UINT32 csb3; // Group B Chip Select 3 Register + UINT32 csc0; // Group C Chip Select 0 Register + UINT32 csc1; // Group C Chip Select 1 Register + UINT32 csc2; // Group C Chip Select 2 Register + UINT32 csc3; // Group C Chip Select 3 Register + UINT32 csd0; // Group D Chip Select 0 Register + UINT32 csd1; // Group D Chip Select 1 Register + UINT32 csd2; // Group D Chip Select 2 Register + UINT32 csd3; // Group D Chip Select 3 Register + UINT8 unused1[176]; + + // $(FF)FFF200 + UINT16 pllcr; // PLL Control Register + UINT16 pllfsr; // PLL Frequency Select Register + UINT8 pad2[3]; + UINT8 pctlr; // Power Control Register + UINT8 unused3[248]; + + // $(FF)FFF300 + UINT8 ivr; // Interrupt Vector Register + UINT8 unused4[1]; + UINT16 icr; // Interrupt Control Register + UINT32 imr; // Interrupt Mask Register + UINT32 iwr; // Interrupt Wakeup Enable Register + UINT32 isr; // Interrupt Status Register + UINT32 ipr; // Interrupt Pending Register + UINT8 unused5[236]; + + // $(FF)FFF400 + UINT8 padir; // Port A Direction Register + UINT8 padata; // Port A Data Register + UINT8 unused6[1]; + UINT8 pasel; // Port A Select Register + UINT8 unused7[4]; + + UINT8 pbdir; // Port B Direction Register + UINT8 pbdata; // Port B Data Register + UINT8 unused8[1]; + UINT8 pbsel; // Port B Select Register + UINT8 unused9[4]; + + UINT8 pcdir; // Port C Direction Register + UINT8 pcdata; // Port C Data Register + UINT8 unused10[1]; + UINT8 pcsel; // Port C Select Register + UINT8 unused11[4]; + + UINT8 pddir; // Port D Direction Register + UINT8 pddata; // Port D Data Register + UINT8 pdpuen; // Port D Pullup Enable Register + UINT8 unused12[1]; + UINT8 pdpol; // Port D Polarity Register + UINT8 pdirqen; // Port D IRQ Enable Register + UINT8 pddataedge; // Port D Data Edge Level + UINT8 pdirqedge; // Port D IRQ Edge Register + + UINT8 pedir; // Port E Direction Register + UINT8 pedata; // Port E Data Register + UINT8 pepuen; // Port E Pullup Enable Register + UINT8 pesel; // Port E Select Register + UINT8 unused14[4]; + + UINT8 pfdir; // Port F Direction Register + UINT8 pfdata; // Port F Data Register + UINT8 pfpuen; // Port F Pullup Enable Register + UINT8 pfsel; // Port F Select Register + UINT8 unused15[4]; + + UINT8 pgdir; // Port G Direction Register + UINT8 pgdata; // Port G Data Register + UINT8 pgpuen; // Port G Pullup Enable Register + UINT8 pgsel; // Port G Select Register + UINT8 unused16[4]; + + UINT8 pjdir; // Port J Direction Register + UINT8 pjdata; // Port J Data Register + UINT8 unused17[1]; + UINT8 pjsel; // Port J Select Register + UINT8 unused18[4]; + UINT8 pkdir; // Port K Direction Register + UINT8 pkdata; // Port K Data Register + UINT8 pkpuen; // Port K Pullup Enable Register + UINT8 pksel; // Port K Select Register + UINT8 unused19[4]; + + UINT8 pmdir; // Port M Direction Register + UINT8 pmdata; // Port M Data Register + UINT8 pmpuen; // Port M Pullup Enable Register + UINT8 pmsel; // Port M Select Register + UINT8 unused20[180]; + + // $(FF)FFF500 + UINT16 pwmc; // PWM Control Register + UINT16 pwmp; // PWM Period Register + UINT16 pwmw; // PWM Width Register + UINT16 pwmcnt; // PWN Counter + UINT8 unused21[248]; + + // $(FF)FFF600 + UINT16 tctl[2]; // Timer Control Register + UINT16 tprer[2]; // Timer Prescaler Register + UINT16 tcmp[2]; // Timer Compare Register + UINT16 tcr[2]; // Timer Capture Register + UINT16 tcn[2]; // Timer Counter + UINT16 tstat[2]; // Timer Status + UINT16 wctlr; // Watchdog Control Register + UINT16 wcmpr; // Watchdog Compare Register + UINT16 wcn; // Watchdog Counter + UINT8 tclear[2]; // Timer Clearable Status + UINT8 unused22[224]; + + // $(FF)FFF700 + UINT16 spisr; // SPIS Register + UINT8 unused23[254]; + + // $(FF)FFF800 + UINT16 spimdata; // SPIM Data Register + UINT16 spimcont; // SPIM Control/Status Register + UINT8 unused24[252]; + + // $(FF)FFF900 + UINT16 ustcnt; // UART Status/Control Register + UINT16 ubaud; // UART Baud Control Register + UINT16 urx; // UART RX Register + UINT16 utx; // UART TX Register + UINT16 umisc; // UART Misc Register + UINT8 unused25[246]; + + // $(FF)FFFA00 + UINT32 lssa; // Screen Starting Address Register + UINT8 unused26[1]; + UINT8 lvpw; // Virtual Page Width Register + UINT8 unused27[2]; + UINT16 lxmax; // Screen Width Register + UINT16 lymax; // Screen Height Register + UINT8 unused28[12]; + UINT16 lcxp; // Cursor X Position + UINT16 lcyp; // Cursor Y Position + UINT16 lcwch; // Cursor Width & Height Register + UINT8 unused29[1]; + UINT8 lblkc; // Blink Control Register + UINT8 lpicf; // Panel Interface Config Register + UINT8 lpolcf; // Polarity Config Register + UINT8 unused30[1]; + UINT8 lacdrc; // ACD (M) Rate Control Register + UINT8 unused31[1]; + UINT8 lpxcd; // Pixel Clock Divider Register + UINT8 unused32[1]; + UINT8 lckcon; // Clocking Control Register + UINT8 unused33[1]; + UINT8 llbar; // Last Buffer Address Register + UINT8 unused34[1]; + UINT8 lotcr; // Octet Terminal Count Register + UINT8 unused35[1]; + UINT8 lposr; // Panning Offset Register + UINT8 unused36[3]; + UINT8 lfrcm; // Frame Rate Control Modulation Register + UINT16 lgpmr; // Gray Palette Mapping Register + UINT8 unused37[204]; + + // $(FF)FFFB00 + UINT32 hmsr; // RTC Hours Minutes Seconds Register + UINT32 alarm; // RTC Alarm Register + UINT8 unused38[4]; + UINT16 rtcctl; // RTC Control Register + UINT16 rtcisr; // RTC Interrupt Status Register + UINT16 rtcienr; // RTC Interrupt Enable Register + UINT16 stpwtch; // Stopwatch Minutes + UINT8 unused42[1260]; +}; + + +class mc68328_device : public device_t, + public mc68328_interface +{ +public: + mc68328_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + ~mc68328_device() {} + + DECLARE_WRITE16_MEMBER(write); + DECLARE_READ16_MEMBER(read); + DECLARE_WRITE_LINE_MEMBER(set_penirq_line); + void set_port_d_lines(UINT8 state, int bit); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + +protected: + // device-level overrides + virtual void device_config_complete(); + virtual void device_start(); + virtual void device_reset(); + +private: + // internal state + void set_interrupt_line(UINT32 line, UINT32 active); + void poll_port_d_interrupts(); + UINT32 get_timer_frequency(UINT32 index); + void maybe_start_timer(UINT32 index, UINT32 new_enable); + void timer_compare_event(UINT32 index); + + void register_state_save(); + + TIMER_CALLBACK_MEMBER(timer1_hit); + TIMER_CALLBACK_MEMBER(timer2_hit); + TIMER_CALLBACK_MEMBER(pwm_transition); + TIMER_CALLBACK_MEMBER(rtc_tick); + + mc68328_regs_t m_regs; + + emu_timer *m_gptimer[2]; + emu_timer *m_rtc; + emu_timer *m_pwm; + + devcb_resolved_write8 m_out_port_a; /* 8-bit output */ + devcb_resolved_write8 m_out_port_b; /* 8-bit output */ + devcb_resolved_write8 m_out_port_c; /* 8-bit output */ + devcb_resolved_write8 m_out_port_d; /* 8-bit output */ + devcb_resolved_write8 m_out_port_e; /* 8-bit output */ + devcb_resolved_write8 m_out_port_f; /* 8-bit output */ + devcb_resolved_write8 m_out_port_g; /* 8-bit output */ + devcb_resolved_write8 m_out_port_j; /* 8-bit output */ + devcb_resolved_write8 m_out_port_k; /* 8-bit output */ + devcb_resolved_write8 m_out_port_m; /* 8-bit output */ + + devcb_resolved_read8 m_in_port_a; /* 8-bit input */ + devcb_resolved_read8 m_in_port_b; /* 8-bit input */ + devcb_resolved_read8 m_in_port_c; /* 8-bit input */ + devcb_resolved_read8 m_in_port_d; /* 8-bit input */ + devcb_resolved_read8 m_in_port_e; /* 8-bit input */ + devcb_resolved_read8 m_in_port_f; /* 8-bit input */ + devcb_resolved_read8 m_in_port_g; /* 8-bit input */ + devcb_resolved_read8 m_in_port_j; /* 8-bit input */ + devcb_resolved_read8 m_in_port_k; /* 8-bit input */ + devcb_resolved_read8 m_in_port_m; /* 8-bit input */ + + devcb_resolved_write8 m_out_pwm; /* 1-bit output */ + + devcb_resolved_write16 m_out_spim; /* 16-bit output */ + devcb_resolved_read16 m_in_spim; /* 16-bit input */ + + devcb_resolved_write_line m_spim_xch_trigger; // not really a write_line, fix when converting to devcb2! + + cpu_device *m_cpu; +}; + + +#define MC68328_INTERFACE(name) const mc68328_interface (name)= + + +#define MCFG_MC68328_ADD(_tag, _intrf) \ + MCFG_DEVICE_ADD(_tag, MC68328, 0) \ + MCFG_DEVICE_CONFIG(_intrf) + +extern const device_type MC68328; + + +#endif diff --git a/src/mess/mess.mak b/src/mess/mess.mak index 636afdefd90..99a356e7e86 100644 --- a/src/mess/mess.mak +++ b/src/mess/mess.mak @@ -1525,7 +1525,6 @@ $(MESSOBJ)/osi.a: \ $(MESSOBJ)/palm.a: \ $(MESS_DRIVERS)/palm.o \ $(MESS_MACHINE)/mc68328.o \ - $(MESS_VIDEO)/mc68328.o \ $(MESS_DRIVERS)/palmz22.o \ $(MESSOBJ)/parker.a: \ diff --git a/src/mess/video/mc68328.c b/src/mess/video/mc68328.c deleted file mode 100644 index 16c05c59c7e..00000000000 --- a/src/mess/video/mc68328.c +++ /dev/null @@ -1,66 +0,0 @@ -/********************************************************************** - - Motorola 68328 ("DragonBall") System-on-a-Chip LCD implementation - - By MooglyGuy - contact mooglyguy@gmail.com with licensing and usage questions. - -**********************************************************************/ - -#include "emu.h" -#include "includes/mc68328.h" -#include "machine/mc68328.h" -#include "machine/ram.h" - -/* THIS IS PRETTY MUCH TOTALLY WRONG AND DOESN'T REFLECT THE MC68328'S INTERNAL FUNCTIONALITY AT ALL! */ -PALETTE_INIT( mc68328 ) -{ - palette_set_color_rgb(machine, 0, 0x7b, 0x8c, 0x5a); - palette_set_color_rgb(machine, 1, 0x00, 0x00, 0x00); -} - -VIDEO_START( mc68328 ) -{ -} - -/* THIS IS PRETTY MUCH TOTALLY WRONG AND DOESN'T REFLECT THE MC68328'S INTERNAL FUNCTIONALITY AT ALL! */ -SCREEN_UPDATE_IND16( mc68328 ) -{ - device_t *mc68328_device = screen.machine().device(MC68328_TAG); - mc68328_t* mc68328 = mc68328_get_safe_token( mc68328_device ); - - const UINT16 *video_ram = (const UINT16 *)(screen.machine().device(RAM_TAG)->pointer() + (mc68328->regs.lssa & 0x00ffffff)); - UINT16 word; - UINT16 *line; - int y, x, b; - - if(mc68328->regs.lckcon & LCKCON_LCDC_EN) - { - for (y = 0; y < 160; y++) - { - line = &bitmap.pix16(y); - - for (x = 0; x < 160; x += 16) - { - word = *(video_ram++); - for (b = 0; b < 16; b++) - { - line[x + b] = (word >> (15 - b)) & 0x0001; - } - } - } - } - else - { - for (y = 0; y < 160; y++) - { - line = &bitmap.pix16(y); - - for (x = 0; x < 160; x++) - { - line[x] = 0; - } - } - } - return 0; -}