devcb write8 was in fact enough for rev.31113 (thanks AWJ for noticing). nw.

This commit is contained in:
Fabio Priuli 2014-06-26 07:48:10 +00:00
parent fe28eca130
commit 1fbb700b08
25 changed files with 77 additions and 81 deletions

View File

@ -85,7 +85,8 @@ const device_type KONAMI = &device_creator<konami_cpu_device>;
//-------------------------------------------------
konami_cpu_device::konami_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: m6809_base_device(mconfig, "KONAMI CPU", tag, owner, clock, KONAMI, 1, "konami_cpu", __FILE__)
: m6809_base_device(mconfig, "KONAMI CPU", tag, owner, clock, KONAMI, 1, "konami_cpu", __FILE__),
m_set_lines(*this)
{
}
@ -98,8 +99,8 @@ void konami_cpu_device::device_start()
{
super::device_start();
// bind callbacks
m_set_lines.bind_relative_to(*owner());
// resolve callbacks
m_set_lines.resolve();
}
@ -347,7 +348,7 @@ ATTR_FORCE_INLINE void konami_cpu_device::divx()
void konami_cpu_device::set_lines(UINT8 data)
{
if (!m_set_lines.isnull())
m_set_lines(data);
m_set_lines((offs_t)0, data);
}

View File

@ -18,11 +18,8 @@
// TYPE DEFINITIONS
//**************************************************************************
typedef device_delegate<void (int lines)> konami_line_cb_delegate;
#define KONAMICPU_LINE_CB_MEMBER(_name) void _name(int lines)
#define MCFG_KONAMICPU_LINE_CB(_class, _method) \
konami_cpu_device::set_line_callback(*device, konami_line_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
#define MCFG_KONAMICPU_LINE_CB(_devcb) \
devcb = &konami_cpu_device::set_line_callback(*device, DEVCB_##_devcb);
// device type definition
@ -37,7 +34,7 @@ public:
konami_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// configuration
static void set_line_callback(device_t &device, konami_line_cb_delegate callback) { downcast<konami_cpu_device &>(device).m_set_lines = callback; }
template<class _Object> static devcb_base &set_line_callback(device_t &device, _Object object) { return downcast<konami_cpu_device &>(device).m_set_lines.set_callback(object); }
protected:
// device-level overrides
@ -53,7 +50,7 @@ private:
typedef m6809_base_device super;
// incidentals
konami_line_cb_delegate m_set_lines;
devcb_write8 m_set_lines;
// konami-specific addressing modes
UINT16 &ireg();

View File

@ -251,25 +251,25 @@ INPUT_PORTS_END
*
*************************************/
KONAMICPU_LINE_CB_MEMBER( _88games_state::banking_callback )
WRITE8_MEMBER( _88games_state::banking_callback )
{
logerror("%04x: bank select %02x\n", machine().device("maincpu")->safe_pc(), lines);
logerror("%04x: bank select %02x\n", machine().device("maincpu")->safe_pc(), data);
/* bits 0-2 select ROM bank for 0000-1fff */
/* bit 3: when 1, palette RAM at 1000-1fff */
/* bit 4: when 0, 051316 RAM at 3800-3fff; when 1, work RAM at 2000-3fff (NVRAM 3700-37ff) */
int rombank = lines & 0x07;
int rombank = data & 0x07;
m_bank0000->set_entry(rombank);
m_bank1000->set_entry((lines & 0x08) ? 8 : rombank);
m_videobank = lines & 0x10;
m_bank1000->set_entry((data & 0x08) ? 8 : rombank);
m_videobank = data & 0x10;
/* bit 5 = enable char ROM reading through the video RAM */
m_k052109->set_rmrd_line((lines & 0x20) ? ASSERT_LINE : CLEAR_LINE);
m_k052109->set_rmrd_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
/* bit 6 is unknown, 1 most of the time */
/* bit 7 controls layer priority */
m_k88games_priority = lines & 0x80;
m_k88games_priority = data & 0x80;
}
void _88games_state::machine_start()
@ -308,7 +308,7 @@ static MACHINE_CONFIG_START( 88games, _88games_state )
MCFG_CPU_ADD("maincpu", KONAMI, 3000000) /* ? */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", _88games_state, k88games_interrupt)
MCFG_KONAMICPU_LINE_CB(_88games_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(_88games_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(sound_map)

View File

@ -186,9 +186,9 @@ void aliens_state::machine_reset()
m_bank0000->set_bank(0);
}
KONAMICPU_LINE_CB_MEMBER( aliens_state::banking_callback )
WRITE8_MEMBER( aliens_state::banking_callback )
{
membank("bank1")->set_entry(lines & 0x1f);
membank("bank1")->set_entry(data & 0x1f);
}
static MACHINE_CONFIG_START( aliens, aliens_state )
@ -197,7 +197,7 @@ static MACHINE_CONFIG_START( aliens, aliens_state )
MCFG_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/8) /* 052001 (verified on pcb) */
MCFG_CPU_PROGRAM_MAP(aliens_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", aliens_state, aliens_interrupt)
MCFG_KONAMICPU_LINE_CB(aliens_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(aliens_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(aliens_sound_map)

View File

@ -181,28 +181,28 @@ void blockhl_state::machine_reset()
m_rombank = 0;
}
KONAMICPU_LINE_CB_MEMBER( blockhl_state::banking_callback )
WRITE8_MEMBER( blockhl_state::banking_callback )
{
/* bits 0-1 = ROM bank */
m_rombank = lines & 0x03;
m_rombank = data & 0x03;
membank("bank1")->set_entry(m_rombank);
/* bits 3/4 = coin counters */
coin_counter_w(machine(), 0, lines & 0x08);
coin_counter_w(machine(), 1, lines & 0x10);
coin_counter_w(machine(), 0, data & 0x08);
coin_counter_w(machine(), 1, data & 0x10);
/* bit 5 = select palette RAM or work RAM at 5800-5fff */
m_palette_selected = ~lines & 0x20;
m_palette_selected = ~data & 0x20;
/* bit 6 = enable char ROM reading through the video RAM */
m_k052109->set_rmrd_line((lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
/* bit 7 used but unknown */
/* other bits unknown */
if ((lines & 0x84) != 0x80)
logerror("%04x: setlines %02x\n", machine().device("maincpu")->safe_pc(), lines);
if ((data & 0x84) != 0x80)
logerror("%04x: setlines %02x\n", machine().device("maincpu")->safe_pc(), data);
}
static MACHINE_CONFIG_START( blockhl, blockhl_state )
@ -211,7 +211,7 @@ static MACHINE_CONFIG_START( blockhl, blockhl_state )
MCFG_CPU_ADD("maincpu", KONAMI,3000000) /* Konami custom 052526 */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", blockhl_state, blockhl_interrupt)
MCFG_KONAMICPU_LINE_CB(blockhl_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(blockhl_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(audio_map)

View File

@ -230,10 +230,10 @@ void crimfght_state::machine_start()
membank("bank2")->set_entry(0);
}
KONAMICPU_LINE_CB_MEMBER( crimfght_state::banking_callback )
WRITE8_MEMBER( crimfght_state::banking_callback )
{
/* bit 5 = select work RAM or palette */
if (lines & 0x20)
if (data & 0x20)
{
m_maincpu->space(AS_PROGRAM).install_read_bank(0x0000, 0x03ff, "bank3");
m_maincpu->space(AS_PROGRAM).install_write_handler(0x0000, 0x03ff, write8_delegate(FUNC(palette_device::write), m_palette.target()));
@ -243,9 +243,9 @@ KONAMICPU_LINE_CB_MEMBER( crimfght_state::banking_callback )
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1"); /* RAM */
/* bit 6 = enable char ROM reading through the video RAM */
m_k052109->set_rmrd_line((lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
membank("bank2")->set_entry(lines & 0x0f);
membank("bank2")->set_entry(data & 0x0f);
}
static MACHINE_CONFIG_START( crimfght, crimfght_state )
@ -254,7 +254,7 @@ static MACHINE_CONFIG_START( crimfght, crimfght_state )
MCFG_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/8) /* 052001 (verified on pcb) */
MCFG_CPU_PROGRAM_MAP(crimfght_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", crimfght_state, crimfght_interrupt)
MCFG_KONAMICPU_LINE_CB(crimfght_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(crimfght_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(crimfght_sound_map)

View File

@ -258,15 +258,15 @@ void gbusters_state::machine_reset()
m_priority = 0;
}
KONAMICPU_LINE_CB_MEMBER( gbusters_state::banking_callback )
WRITE8_MEMBER( gbusters_state::banking_callback )
{
/* bits 0-3 ROM bank */
membank("bank1")->set_entry(lines & 0x0f);
membank("bank1")->set_entry(data & 0x0f);
if (lines & 0xf0)
if (data & 0xf0)
{
//logerror("%04x: (lines) write %02x\n",device->safe_pc(), lines);
//popmessage("lines = %02x", lines);
//logerror("%04x: (lines) write %02x\n",device->safe_pc(), data);
//popmessage("lines = %02x", data);
}
/* other bits unknown */
@ -278,7 +278,7 @@ static MACHINE_CONFIG_START( gbusters, gbusters_state )
MCFG_CPU_ADD("maincpu", KONAMI, 3000000) /* Konami custom 052526 */
MCFG_CPU_PROGRAM_MAP(gbusters_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", gbusters_state, gbusters_interrupt)
MCFG_KONAMICPU_LINE_CB(gbusters_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(gbusters_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, 3579545) /* ? */
MCFG_CPU_PROGRAM_MAP(gbusters_sound_map)

View File

@ -217,12 +217,12 @@ void parodius_state::machine_reset()
m_bank2000->set_bank(0);
}
KONAMICPU_LINE_CB_MEMBER( parodius_state::banking_callback )
WRITE8_MEMBER( parodius_state::banking_callback )
{
if (lines & 0xf0)
logerror("%04x: setlines %02x\n", machine().device("maincpu")->safe_pc(), lines);
if (data & 0xf0)
logerror("%04x: setlines %02x\n", machine().device("maincpu")->safe_pc(), data);
membank("bank1")->set_entry((lines & 0x0f) ^ 0x0f);
membank("bank1")->set_entry((data & 0x0f) ^ 0x0f);
}
static MACHINE_CONFIG_START( parodius, parodius_state )
@ -231,11 +231,10 @@ static MACHINE_CONFIG_START( parodius, parodius_state )
MCFG_CPU_ADD("maincpu", KONAMI, 3000000) /* 053248 */
MCFG_CPU_PROGRAM_MAP(parodius_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", parodius_state, parodius_interrupt)
MCFG_KONAMICPU_LINE_CB(parodius_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(parodius_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(parodius_sound_map)
/* NMIs are triggered by the 053260 */
MCFG_CPU_PROGRAM_MAP(parodius_sound_map) /* NMIs are triggered by the 053260 */
MCFG_DEVICE_ADD("bank0000", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(bank0000_map)

View File

@ -235,9 +235,9 @@ void rollerg_state::machine_reset()
m_readzoomroms = 0;
}
KONAMICPU_LINE_CB_MEMBER( rollerg_state::banking_callback )
WRITE8_MEMBER( rollerg_state::banking_callback )
{
membank("bank1")->set_entry(lines & 0x07);
membank("bank1")->set_entry(data & 0x07);
}
@ -247,11 +247,10 @@ static MACHINE_CONFIG_START( rollerg, rollerg_state )
MCFG_CPU_ADD("maincpu", KONAMI, 3000000) /* ? */
MCFG_CPU_PROGRAM_MAP(rollerg_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", rollerg_state, irq0_line_assert)
MCFG_KONAMICPU_LINE_CB(rollerg_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(rollerg_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, 3579545)
MCFG_CPU_PROGRAM_MAP(rollerg_sound_map)
/* NMIs are generated by the 053260 */
MCFG_CPU_PROGRAM_MAP(rollerg_sound_map) /* NMIs are generated by the 053260 */
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)

View File

@ -327,7 +327,7 @@ static MACHINE_CONFIG_START( simpsons, simpsons_state )
MCFG_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/2/4) /* 053248, the clock input is 12MHz, and internal CPU divider of 4 */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", simpsons_state, simpsons_irq) /* IRQ triggered by the 052109, FIRQ by the sprite hardware */
MCFG_KONAMICPU_LINE_CB(simpsons_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(simpsons_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(z80_map)

View File

@ -154,10 +154,10 @@ void surpratk_state::machine_reset()
m_sprite_colorbase = 0;
}
KONAMICPU_LINE_CB_MEMBER( surpratk_state::banking_callback )
WRITE8_MEMBER( surpratk_state::banking_callback )
{
// logerror("%04x: setlines %02x\n", machine().device("maincpu")->safe_pc(), lines);
membank("bank1")->set_entry(lines & 0x1f);
// logerror("%04x: setlines %02x\n", machine().device("maincpu")->safe_pc(), data);
membank("bank1")->set_entry(data & 0x1f);
}
static MACHINE_CONFIG_START( surpratk, surpratk_state )
@ -166,7 +166,7 @@ static MACHINE_CONFIG_START( surpratk, surpratk_state )
MCFG_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/2/4) /* 053248, the clock input is 12MHz, and internal CPU divider of 4 */
MCFG_CPU_PROGRAM_MAP(surpratk_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", surpratk_state, surpratk_interrupt)
MCFG_KONAMICPU_LINE_CB(surpratk_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(surpratk_state, banking_callback))
MCFG_DEVICE_ADD("bank0000", ADDRESS_MAP_BANK, 0)
MCFG_DEVICE_PROGRAM_MAP(bank0000_map)

View File

@ -659,10 +659,10 @@ static MACHINE_CONFIG_START( scontra, thunderx_state )
MACHINE_CONFIG_END
KONAMICPU_LINE_CB_MEMBER( thunderx_state::thunderx_banking_callback )
WRITE8_MEMBER( thunderx_state::thunderx_banking_callback )
{
//logerror("thunderx %04x: bank select %02x\n", machine().device("maincpu")->safe_pc(), lines);
membank("bank1")->set_entry(((lines & 0x0f) ^ 0x08));
//logerror("thunderx %04x: bank select %02x\n", machine().device("maincpu")->safe_pc(), data);
membank("bank1")->set_entry(((data & 0x0f) ^ 0x08));
}
static MACHINE_CONFIG_START( thunderx, thunderx_state )
@ -671,7 +671,7 @@ static MACHINE_CONFIG_START( thunderx, thunderx_state )
MCFG_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/2/4) /* 052001 (verified on pcb) */
MCFG_CPU_PROGRAM_MAP(thunderx_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", thunderx_state, scontra_interrupt)
MCFG_KONAMICPU_LINE_CB(thunderx_state, thunderx_banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(thunderx_state, thunderx_banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified on pcb */
MCFG_CPU_PROGRAM_MAP(thunderx_sound_map)

View File

@ -445,12 +445,12 @@ void vendetta_state::machine_reset()
vendetta_video_banking(0);
}
KONAMICPU_LINE_CB_MEMBER( vendetta_state::banking_callback )
WRITE8_MEMBER( vendetta_state::banking_callback )
{
if (lines >= 0x1c)
logerror("PC = %04x : Unknown bank selected %02x\n", machine().device("maincpu")->safe_pc(), lines);
if (data >= 0x1c)
logerror("PC = %04x : Unknown bank selected %02x\n", machine().device("maincpu")->safe_pc(), data);
else
membank("bank1")->set_entry(lines);
membank("bank1")->set_entry(data);
}
static MACHINE_CONFIG_START( vendetta, vendetta_state )
@ -459,7 +459,7 @@ static MACHINE_CONFIG_START( vendetta, vendetta_state )
MCFG_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/8) /* 052001 (verified on pcb) */
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", vendetta_state, vendetta_irq)
MCFG_KONAMICPU_LINE_CB(vendetta_state, banking_callback)
MCFG_KONAMICPU_LINE_CB(WRITE8(vendetta_state, banking_callback))
MCFG_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) /* verified with PCB */
MCFG_CPU_PROGRAM_MAP(sound_map)

View File

@ -65,5 +65,5 @@ public:
K051316_CB_MEMBER(zoom_callback);
K052109_CB_MEMBER(tile_callback);
K051960_CB_MEMBER(sprite_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
};

View File

@ -46,5 +46,5 @@ public:
DECLARE_WRITE8_MEMBER(volume_callback);
K052109_CB_MEMBER(tile_callback);
K051960_CB_MEMBER(sprite_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
};

View File

@ -50,5 +50,5 @@ public:
INTERRUPT_GEN_MEMBER(blockhl_interrupt);
K052109_CB_MEMBER(tile_callback);
K051960_CB_MEMBER(sprite_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
};

View File

@ -48,5 +48,5 @@ public:
DECLARE_WRITE8_MEMBER(volume_callback);
K052109_CB_MEMBER(tile_callback);
K051960_CB_MEMBER(sprite_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
};

View File

@ -58,5 +58,5 @@ public:
DECLARE_WRITE8_MEMBER(volume_callback);
K052109_CB_MEMBER(tile_callback);
K051960_CB_MEMBER(sprite_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
};

View File

@ -58,7 +58,7 @@ public:
INTERRUPT_GEN_MEMBER(parodius_interrupt);
K05324X_CB_MEMBER(sprite_callback);
K052109_CB_MEMBER(tile_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);

View File

@ -57,7 +57,7 @@ public:
UINT32 screen_update_rollerg(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
K05324X_CB_MEMBER(sprite_callback);
K051316_CB_MEMBER(zoom_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);

View File

@ -66,7 +66,7 @@ public:
void sound_nmi_callback(int param);
void simpsons_objdma();
K052109_CB_MEMBER(tile_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);

View File

@ -44,5 +44,5 @@ public:
K05324X_CB_MEMBER(sprite_callback);
K052109_CB_MEMBER(tile_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
};

View File

@ -74,7 +74,7 @@ public:
DECLARE_WRITE8_MEMBER(volume_callback);
K052109_CB_MEMBER(tile_callback);
K051960_CB_MEMBER(sprite_callback);
KONAMICPU_LINE_CB_MEMBER(thunderx_banking_callback);
DECLARE_WRITE8_MEMBER(thunderx_banking_callback);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);

View File

@ -71,7 +71,7 @@ public:
void vendetta_video_banking( int select );
K052109_CB_MEMBER(vendetta_tile_callback);
K052109_CB_MEMBER(esckids_tile_callback);
KONAMICPU_LINE_CB_MEMBER(banking_callback);
DECLARE_WRITE8_MEMBER(banking_callback);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);

View File

@ -60,9 +60,9 @@ READ8_MEMBER(simpsons_state::simpsons_sound_r)
***************************************************************************/
KONAMICPU_LINE_CB_MEMBER( simpsons_state::banking_callback )
WRITE8_MEMBER( simpsons_state::banking_callback )
{
membank("bank1")->set_entry(lines & 0x3f);
membank("bank1")->set_entry(data & 0x3f);
}
void simpsons_state::machine_start()