and a few more. nw.

This commit is contained in:
Fabio Priuli 2014-09-20 16:13:44 +00:00
parent cc2592213b
commit f4b085be08
7 changed files with 180 additions and 205 deletions

View File

@ -77,7 +77,8 @@
#include "video/hd44780.h"
#include "sound/dac.h"
#include "machine/nvram.h"
#include "imagedev/cartslot.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "cc40.lh"
@ -89,6 +90,8 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_dac(*this, "dac"),
m_cart(*this, "cartslot"),
m_key_matrix(*this, "IN"),
m_battery_inp(*this, "BATTERY")
{
m_sysram[0] = NULL;
@ -97,10 +100,13 @@ public:
required_device<tms70c20_device> m_maincpu;
required_device<dac_device> m_dac;
required_device<generic_slot_device> m_cart;
required_ioport_array<8> m_key_matrix;
required_ioport m_battery_inp;
nvram_device *m_nvram[2];
ioport_port *m_key_matrix[8];
memory_region *m_cart_rom;
UINT8 m_bus_control;
UINT8 m_power;
@ -150,13 +156,7 @@ public:
DEVICE_IMAGE_LOAD_MEMBER(cc40_state, cc40_cartridge)
{
UINT8* pos = memregion("user1")->base();
offs_t size;
if (image.software_entry() == NULL)
size = image.length();
else
size = image.get_software_region_length("rom");
UINT32 size = m_cart->common_get_size("rom");
// max size is 4*32KB
if (size > 0x20000)
@ -165,16 +165,8 @@ DEVICE_IMAGE_LOAD_MEMBER(cc40_state, cc40_cartridge)
return IMAGE_INIT_FAIL;
}
if (image.software_entry() == NULL)
{
if (image.fread(pos, size) != size)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Unable to fully read file");
return IMAGE_INIT_FAIL;
}
}
else
memcpy(pos, image.get_software_region("rom"), size);
m_cart->rom_alloc(size, 0x20000); // allocate a larger ROM region to have 4x32K banks
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
return IMAGE_INIT_PASS;
}
@ -319,7 +311,8 @@ WRITE8_MEMBER(cc40_state::bankswitch_w)
membank("sysbank")->set_entry(data & 3);
// d2-d3: cartridge 32KB page bankswitch
membank("cartbank")->set_entry(data >> 2 & 3);
if (m_cart_rom)
membank("cartbank")->set_entry(data >> 2 & 3);
m_banks = data & 0x0f;
}
@ -425,7 +418,7 @@ static INPUT_PORTS_START( cc40 )
// 8x8 keyboard matrix, RESET and ON buttons are not on it. Unused entries are not connected, but some might have a purpose for factory testing(?)
// The numpad number keys are shared with the ones on the main keyboard, also on the real machine.
// PORT_NAME lists functions under [SHIFT] as secondaries.
PORT_START("IN0")
PORT_START("IN.0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
@ -435,7 +428,7 @@ static INPUT_PORTS_START( cc40 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_START("IN1")
PORT_START("IN.1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
@ -445,7 +438,7 @@ static INPUT_PORTS_START( cc40 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
PORT_START("IN2")
PORT_START("IN.2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
@ -455,7 +448,7 @@ static INPUT_PORTS_START( cc40 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
PORT_START("IN3")
PORT_START("IN.3")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
@ -465,7 +458,7 @@ static INPUT_PORTS_START( cc40 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_START("IN4")
PORT_START("IN.4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ') PORT_NAME("SPACE")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
@ -475,7 +468,7 @@ static INPUT_PORTS_START( cc40 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
PORT_START("IN5")
PORT_START("IN.5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') PORT_CHAR('\'')
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_NAME("CLR UCL")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_NAME("LEFT DEL")
@ -485,7 +478,7 @@ static INPUT_PORTS_START( cc40 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_NAME("DOWN")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') PORT_CHAR(')')
PORT_START("IN6")
PORT_START("IN.6")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD)) PORT_NAME("+")
@ -495,7 +488,7 @@ static INPUT_PORTS_START( cc40 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_CHAR(UCHAR_MAMEKEY(ASTERISK)) PORT_NAME("*")
PORT_START("IN7")
PORT_START("IN.7")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_SHIFT_2) PORT_NAME("CTL")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) PORT_NAME("SHIFT")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(PAUSE)) PORT_NAME("BREAK")
@ -552,12 +545,14 @@ void cc40_state::postload()
void cc40_state::machine_start()
{
// init
static const char *const tags[] = { "IN0", "IN1", "IN2", "IN3", "IN4", "IN5", "IN6", "IN7" };
for (int i = 0; i < 8; i++)
m_key_matrix[i] = ioport(tags[i]);
astring region_tag;
m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
membank("sysbank")->configure_entries(0, 4, memregion("system")->base(), 0x2000);
membank("cartbank")->configure_entries(0, 4, memregion("user1")->base(), 0x8000);
if (m_cart_rom)
membank("cartbank")->configure_entries(0, 4, m_cart_rom->base(), 0x8000);
else
membank("cartbank")->set_base(memregion("maincpu")->base() + 0x5000);
m_nvram[0] = machine().device<nvram_device>("sysram.1");
m_nvram[1] = machine().device<nvram_device>("sysram.2");
@ -619,11 +614,10 @@ static MACHINE_CONFIG_START( cc40, cc40_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* cartridge */
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin,rom,256")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_LOAD(cc40_state, cc40_cartridge)
MCFG_CARTSLOT_INTERFACE("cc40_cart")
MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "cc40_cart")
MCFG_GENERIC_EXTENSIONS("bin,rom,256")
MCFG_GENERIC_LOAD(cc40_state, cc40_cartridge)
MCFG_SOFTWARE_LIST_ADD("cart_list", "cc40_cart")
MACHINE_CONFIG_END
@ -641,8 +635,6 @@ ROM_START( cc40 )
ROM_REGION( 0x8000, "system", 0 )
ROM_LOAD( "hn61256pc09.bin", 0x0000, 0x8000, CRC(f5322fab) SHA1(1b5c4052a53654363c458f75eac7a27f0752def6) ) // system rom, banked
ROM_REGION( 0x20000, "user1", ROMREGION_ERASEFF ) // cartridge area, max 4*32KB
ROM_END

View File

@ -101,12 +101,13 @@ TODO:
#include "emu.h"
#include "cpu/nec/nec.h"
#include "imagedev/cartslot.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
#include "machine/am9517a.h"
#include "sound/speaker.h"
#include "machine/i8255.h"
#include "sound/speaker.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
/*
@ -156,6 +157,7 @@ public:
, m_dma8237(*this, "dma8237")
, m_pit8253(*this, "pit8254")
, m_speaker(*this, "speaker")
, m_cart(*this, "cartslot")
{ }
required_device<cpu_device> m_maincpu;
@ -163,6 +165,7 @@ public:
required_device<am9517a_device> m_dma8237;
required_device<pit8254_device> m_pit8253;
required_device<speaker_sound_device> m_speaker;
required_device<generic_slot_device> m_cart;
DECLARE_READ8_MEMBER(ems_r);
DECLARE_WRITE8_MEMBER(ems_w);
@ -212,6 +215,9 @@ protected:
UINT8 m_pc_spkrdata;
UINT8 m_pit_out2;
memory_region *m_maincpu_rom;
memory_region *m_cart_rom;
int m_ppi_portc_switch_high;
int m_ppi_speaker;
int m_ppi_keyboard_clear;
@ -507,7 +513,7 @@ WRITE8_MEMBER( pasogo_state::ems_w )
case 0: /*external*/
case 1: /*ram*/
sprintf(bank, "bank%d", m_ems.index + 1);
membank( bank )->set_base( memregion("maincpu")->base() + (m_ems.mapper[m_ems.index].address & 0xfffff) );
membank(bank)->set_base(m_maincpu_rom->base() + (m_ems.mapper[m_ems.index].address & 0xfffff));
break;
case 3: /* rom 1 */
case 4: /* pc card a */
@ -516,7 +522,7 @@ WRITE8_MEMBER( pasogo_state::ems_w )
break;
case 2:
sprintf(bank, "bank%d", m_ems.index + 1);
membank( bank )->set_base( memregion("user1")->base() + (m_ems.mapper[m_ems.index].address & 0xfffff) );
membank(bank)->set_base(m_cart_rom->base() + (m_ems.mapper[m_ems.index].address & 0xfffff));
break;
}
break;
@ -564,10 +570,10 @@ static ADDRESS_MAP_START(pasogo_io, AS_IO, 16, pasogo_state)
// ADDRESS_MAP_GLOBAL_MASK(0xfFFF)
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237", am9517a_device, read, write, 0xffff)
AM_RANGE(0x0020, 0x0021) AM_DEVREADWRITE8("pic8259", pic8259_device, read, write, 0xffff)
AM_RANGE(0x26, 0x27) AM_READWRITE8(vg230_io_r, vg230_io_w, 0xffff )
AM_RANGE(0x26, 0x27) AM_READWRITE8(vg230_io_r, vg230_io_w, 0xffff)
AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffff)
AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0xffff)
AM_RANGE(0x6c, 0x6f) AM_READWRITE8(ems_r, ems_w, 0xffff )
AM_RANGE(0x6c, 0x6f) AM_READWRITE8(ems_r, ems_w, 0xffff)
ADDRESS_MAP_END
@ -610,7 +616,7 @@ PALETTE_INIT_MEMBER(pasogo_state, pasogo)
UINT32 pasogo_state::screen_update_pasogo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
//static int width = -1, height = -1;
UINT8 *rom = memregion("maincpu")->base()+0xb8000;
UINT8 *rom = m_maincpu_rom->base() + 0xb8000;
static const UINT16 c[] = { 3, 0 };
int x,y;
// plot_box(bitmap, 0, 0, 64/*bitmap.width*/, bitmap.height, 0);
@ -672,6 +678,13 @@ INTERRUPT_GEN_MEMBER(pasogo_state::pasogo_interrupt)
void pasogo_state::machine_reset()
{
astring region_tag;
m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
m_maincpu_rom = memregion("maincpu");
membank("bank27")->set_base(m_cart_rom->base());
membank("bank28")->set_base(m_maincpu_rom->base() + 0xb8000/*?*/);
m_u73_q2 = 0;
m_out1 = 2; // initial state of pit output is undefined
m_pc_spkrdata = 0;
@ -709,7 +722,7 @@ WRITE_LINE_MEMBER( pasogo_state::pit8253_out2_changed )
READ8_MEMBER( pasogo_state::page_r )
{
return 0xFF;
return 0xff;
}
@ -916,9 +929,9 @@ static MACHINE_CONFIG_START( pasogo, pasogo_state )
MCFG_PIT8253_CLK2(4772720/4) /* pio port c pin 4, and speaker polling enough */
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(pasogo_state, pit8253_out2_changed))
MCFG_PIC8259_ADD( "pic8259", INPUTLINE("maincpu", 0), VCC, NULL )
MCFG_PIC8259_ADD("pic8259", INPUTLINE("maincpu", 0), VCC, NULL)
MCFG_DEVICE_ADD( "dma8237", AM9517A, XTAL_14_31818MHz/3 )
MCFG_DEVICE_ADD("dma8237", AM9517A, XTAL_14_31818MHz/3)
MCFG_I8237_OUT_HREQ_CB(WRITELINE(pasogo_state, dma_hrq_changed))
MCFG_I8237_OUT_EOP_CB(WRITELINE(pasogo_state, dma8237_out_eop))
MCFG_I8237_IN_MEMR_CB(READ8(pasogo_state, dma_read_byte))
@ -954,10 +967,9 @@ static MACHINE_CONFIG_START( pasogo, pasogo_state )
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin")
MCFG_CARTSLOT_MANDATORY
MCFG_CARTSLOT_INTERFACE("pasogo_cart")
MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM16_WIDTH, generic_plain_slot, "pasogo_cart")
MCFG_GENERIC_MANDATORY
MCFG_SOFTWARE_LIST_ADD("cart_list","pasogo")
MCFG_TIMER_DRIVER_ADD_PERIODIC("vg230_timer", pasogo_state, vg230_timer, attotime::from_hz(1))
@ -966,8 +978,6 @@ MACHINE_CONFIG_END
ROM_START(pasogo)
ROM_REGION(0x100000,"maincpu", ROMREGION_ERASEFF) // 1 megabyte dram?
ROM_REGION(0x100000,"user1", ROMREGION_ERASEFF)
ROM_CART_LOAD("cart", 0, 0x100000, ROM_NOMIRROR)
ROM_END
@ -975,8 +985,6 @@ DRIVER_INIT_MEMBER(pasogo_state,pasogo)
{
vg230_init();
memset(&m_ems, 0, sizeof(m_ems));
membank( "bank27" )->set_base( memregion("user1")->base() + 0x00000 );
membank( "bank28" )->set_base( memregion("maincpu")->base() + 0xb8000/*?*/ );
}
// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS

View File

@ -11,7 +11,8 @@ The LCD is likely to be a SSD1828 LCD.
#include "sound/speaker.h"
#include "machine/i2cmem.h"
#include "cpu/minx/minx.h"
#include "imagedev/cartslot.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "rendlay.h"
@ -54,10 +55,10 @@ public:
m_p_ram(*this, "p_ram"),
m_speaker(*this, "speaker"),
m_i2cmem(*this, "i2cmem"),
m_inputs(*this, "INPUTS") { }
m_cart(*this, "cartslot"),
m_inputs(*this, "INPUTS")
{ }
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT8> m_p_ram;
UINT8 m_pm_reg[0x100];
PRC m_prc;
TIMERS m_timers;
@ -67,17 +68,9 @@ public:
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_PALETTE_INIT(pokemini);
TIMER_CALLBACK_MEMBER(pokemini_seconds_timer_callback);
TIMER_CALLBACK_MEMBER(pokemini_256hz_timer_callback);
TIMER_CALLBACK_MEMBER(pokemini_timer1_callback);
TIMER_CALLBACK_MEMBER(pokemini_timer1_hi_callback);
TIMER_CALLBACK_MEMBER(pokemini_timer2_callback);
TIMER_CALLBACK_MEMBER(pokemini_timer2_hi_callback);
TIMER_CALLBACK_MEMBER(pokemini_timer3_callback);
TIMER_CALLBACK_MEMBER(pokemini_timer3_hi_callback);
TIMER_CALLBACK_MEMBER(pokemini_prc_counter_callback);
DECLARE_WRITE8_MEMBER(pokemini_hwreg_w);
DECLARE_READ8_MEMBER(pokemini_hwreg_r);
DECLARE_WRITE8_MEMBER(hwreg_w);
DECLARE_READ8_MEMBER(hwreg_r);
DECLARE_READ8_MEMBER(rom_r);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pokemini_cart);
protected:
@ -96,30 +89,39 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT8> m_p_ram;
required_device<speaker_sound_device> m_speaker;
required_device<i2cmem_device> m_i2cmem;
required_device<generic_slot_device> m_cart;
required_ioport m_inputs;
void pokemini_check_irqs();
void pokemini_update_sound();
void pokemini_seconds_timer_callback();
void pokemini_256hz_timer_callback();
void pokemini_timer1_callback();
void pokemini_timer1_hi_callback();
void pokemini_timer2_callback();
void pokemini_timer2_hi_callback();
void pokemini_timer3_callback();
void pokemini_timer3_hi_callback();
void pokemini_prc_counter_callback();
void check_irqs();
void update_sound();
void seconds_timer_callback();
void timer_256hz_callback();
void timer1_callback();
void timer1_hi_callback();
void timer2_callback();
void timer2_hi_callback();
void timer3_callback();
void timer3_hi_callback();
void prc_counter_callback();
};
READ8_MEMBER( pokemini_state::rom_r )
{
offset += 0x2100;
return m_cart->read_rom(space, offset & 0x1fffff);
}
static ADDRESS_MAP_START( pokemini_mem_map, AS_PROGRAM, 8, pokemini_state )
AM_RANGE( 0x000000, 0x000FFF ) AM_ROM /* bios */
AM_RANGE( 0x001000, 0x001FFF ) AM_RAM AM_SHARE("p_ram") /* VRAM/RAM */
AM_RANGE( 0x002000, 0x0020FF ) AM_READWRITE(pokemini_hwreg_r, pokemini_hwreg_w ) /* hardware registers */
AM_RANGE( 0x002100, 0x1FFFFF ) AM_ROM /* cartridge area */
AM_RANGE( 0x000000, 0x000fff ) AM_ROM /* bios */
AM_RANGE( 0x001000, 0x001fff ) AM_RAM AM_SHARE("p_ram") /* VRAM/RAM */
AM_RANGE( 0x002000, 0x0020ff ) AM_READWRITE(hwreg_r, hwreg_w) /* hardware registers */
AM_RANGE( 0x002100, 0x1fffff ) AM_READ(rom_r) /* cartridge area */
ADDRESS_MAP_END
@ -145,7 +147,7 @@ PALETTE_INIT_MEMBER(pokemini_state, pokemini)
}
void pokemini_state::pokemini_check_irqs()
void pokemini_state::check_irqs()
{
int irq_set[4] = { 1, 0, 0, 0 };
int prio, vector;
@ -298,7 +300,7 @@ void pokemini_state::pokemini_check_irqs()
}
void pokemini_state::pokemini_update_sound()
void pokemini_state::update_sound()
{
/* Check if sound should be muted */
if ( m_pm_reg[0x70] & 0x03 )
@ -321,7 +323,7 @@ void pokemini_state::pokemini_update_sound()
}
void pokemini_state::pokemini_seconds_timer_callback()
void pokemini_state::seconds_timer_callback()
{
if ( m_pm_reg[0x08] & 0x01 )
{
@ -338,7 +340,7 @@ void pokemini_state::pokemini_seconds_timer_callback()
}
void pokemini_state::pokemini_256hz_timer_callback()
void pokemini_state::timer_256hz_callback()
{
if ( m_pm_reg[0x40] & 0x01 )
{
@ -366,13 +368,13 @@ void pokemini_state::pokemini_256hz_timer_callback()
}
}
pokemini_check_irqs();
check_irqs();
}
}
}
void pokemini_state::pokemini_timer1_callback()
void pokemini_state::timer1_callback()
{
m_pm_reg[0x36] -= 1;
/* Check for underflow of timer */
@ -385,7 +387,7 @@ void pokemini_state::pokemini_timer1_callback()
if ( m_pm_reg[0x37] == 0xFF )
{
m_pm_reg[0x27] |= 0x08;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x36] = m_pm_reg[0x32];
m_pm_reg[0x37] = m_pm_reg[0x33];
}
@ -393,27 +395,27 @@ void pokemini_state::pokemini_timer1_callback()
else
{
m_pm_reg[0x27] |= 0x04;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x36] = m_pm_reg[0x32];
}
}
}
void pokemini_state::pokemini_timer1_hi_callback()
void pokemini_state::timer1_hi_callback()
{
m_pm_reg[0x37] -= 1;
/* Check for underflow of timer */
if ( m_pm_reg[0x37] == 0xFF )
{
m_pm_reg[0x27] |= 0x08;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x37] = m_pm_reg[0x33];
}
}
void pokemini_state::pokemini_timer2_callback()
void pokemini_state::timer2_callback()
{
m_pm_reg[0x3E] -= 1;
/* Check for underflow of timer */
@ -426,7 +428,7 @@ void pokemini_state::pokemini_timer2_callback()
if ( m_pm_reg[0x3F] == 0xFF )
{
m_pm_reg[0x27] |= 0x20;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x3E] = m_pm_reg[0x3A];
m_pm_reg[0x3F] = m_pm_reg[0x3B];
}
@ -434,27 +436,27 @@ void pokemini_state::pokemini_timer2_callback()
else
{
m_pm_reg[0x27] |= 0x10;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x3E] = m_pm_reg[0x3A];
}
}
}
void pokemini_state::pokemini_timer2_hi_callback()
void pokemini_state::timer2_hi_callback()
{
m_pm_reg[0x3F] -= 1;
/* Check for underfow of timer */
if ( m_pm_reg[0x3F] == 0xFF )
{
m_pm_reg[0x27] |= 0x20;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x3F] = m_pm_reg[0x3B];
}
}
void pokemini_state::pokemini_timer3_callback()
void pokemini_state::timer3_callback()
{
m_pm_reg[0x4E] -= 1;
/* Check for underflow of timer */
@ -467,7 +469,7 @@ void pokemini_state::pokemini_timer3_callback()
if ( m_pm_reg[0x4F] == 0xFF )
{
m_pm_reg[0x27] |= 0x02;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x4E] = m_pm_reg[0x4A];
m_pm_reg[0x4F] = m_pm_reg[0x4B];
}
@ -483,21 +485,21 @@ void pokemini_state::pokemini_timer3_callback()
if ( ( m_pm_reg[0x4E] == m_pm_reg[0x4C] ) && ( m_pm_reg[0x4F] == m_pm_reg[0x4D] ) )
{
m_pm_reg[0x27] |= 0x01;
pokemini_check_irqs();
check_irqs();
}
pokemini_update_sound();
update_sound();
}
}
void pokemini_state::pokemini_timer3_hi_callback()
void pokemini_state::timer3_hi_callback()
{
m_pm_reg[0x4F] -= 1;
/* Check for underflow of timer */
if ( m_pm_reg[0x4F] == 0xFF )
{
m_pm_reg[0x27] |= 0x02;
pokemini_check_irqs();
check_irqs();
m_pm_reg[0x4F] = m_pm_reg[0x4B];
}
@ -506,14 +508,14 @@ void pokemini_state::pokemini_timer3_hi_callback()
if( m_pm_reg[0x4F] == m_pm_reg[0x4D] )
{
m_pm_reg[0x27] |= 0x01;
pokemini_check_irqs();
check_irqs();
}
pokemini_update_sound();
update_sound();
}
}
WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
WRITE8_MEMBER(pokemini_state::hwreg_w)
{
static const int timer_to_cycles_fast[8] = { 2, 8, 32, 64, 128, 256, 1024, 4096 };
static const int timer_to_cycles_slow[8] = { 128, 256, 512, 1024, 2048, 4096, 8192, 16384 };
@ -902,7 +904,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 6-7 R/W VDraw/VBlank trigger Interrupt #1-#2
*/
m_pm_reg[0x20] = data;
pokemini_check_irqs();
check_irqs();
break;
case 0x21: /* Event #15-#22 priority
Bit 0-1 R/W Unknown
@ -910,14 +912,14 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 4-7 R/W Unknown
*/
m_pm_reg[0x21] = data;
pokemini_check_irqs();
check_irqs();
break;
case 0x22: /* Event #9-#14 priority
Bit 0-1 R/W All #9 - #14 events - Interrupt #9-#14
Bit 2-7 Unused
*/
m_pm_reg[0x22] = data;
pokemini_check_irqs();
check_irqs();
break;
case 0x23: /* Event #1-#8 enable
Bit 0 R/W Timer 3 overflow (mirror) - Enable Interrupt #8
@ -930,14 +932,14 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 7 R/W V-Blank trigger - Enable Interrupt #1
*/
m_pm_reg[0x23] = data;
pokemini_check_irqs();
check_irqs();
break;
case 0x24: /* Event #9-#12 enable
Bit 0-5 R/W Unknown
Bit 6-7 Unused
*/
m_pm_reg[0x24] = data;
pokemini_check_irqs();
check_irqs();
break;
case 0x25: /* Event #15-#22 enable
Bit 0 R/W Press key "A" event - Enable interrupt #22
@ -950,7 +952,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 7 R/W Press power button event - Enable interrupt #15
*/
m_pm_reg[0x25] = data;
pokemini_check_irqs();
check_irqs();
break;
case 0x26: /* Event #13-#14 enable
Bit 0-2 R/W Unknown
@ -960,7 +962,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 7 R/W IR receiver - low to high trigger - Enable interrupt #13
*/
m_pm_reg[0x26] = data;
pokemini_check_irqs();
check_irqs();
break;
case 0x27: /* Interrupt active flag #1-#8
Bit 0 Timer 3 overflow (mirror) / Clear interrupt #8
@ -973,7 +975,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 7 VBlank trigger / Clear interrupt #1
*/
m_pm_reg[0x27] &= ~data;
pokemini_check_irqs();
check_irqs();
return;
case 0x28: /* Interrupt active flag #9-#12
Bit 0-1 Unknown
@ -984,7 +986,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 6-7 Unknown
*/
m_pm_reg[0x28] &= ~data;
pokemini_check_irqs();
check_irqs();
return;
case 0x29: /* Interrupt active flag #15-#22
Bit 0 Press key "A" event / Clear interrupt #22
@ -997,7 +999,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 7 Press power button event / Clear interrupt #15
*/
m_pm_reg[0x29] &= ~data;
pokemini_check_irqs();
check_irqs();
return;
case 0x2A: /* Interrupt active flag #13-#14
Bit 0-5 Unknown
@ -1005,7 +1007,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 7 Unknown / Clear interrupt #13
*/
m_pm_reg[0x2A] &= ~data;
pokemini_check_irqs();
check_irqs();
return;
case 0x30: /* Timer 1 control 1
Bit 0 R/W Unknown
@ -1218,7 +1220,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
m_timers.timer3_hi->enable( 0 );
}
m_pm_reg[0x48] = data;
pokemini_update_sound();
update_sound();
break;
case 0x49: /* Timer 3 control 2
Bit 0 R/W Unknown
@ -1244,25 +1246,25 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
m_timers.timer3_hi->enable( 0 );
}
m_pm_reg[0x49] = data;
pokemini_update_sound();
update_sound();
break;
case 0x4A: /* Timer 3 preset value (low)
Bit 0-7 R/W Timer 3 preset value bit 0-7
*/
m_pm_reg[0x4A] = data;
pokemini_update_sound();
update_sound();
break;
case 0x4B: /* Timer 3 preset value (high)
Bit 0-7 R/W Timer 3 preset value bit 8-15
*/
m_pm_reg[0x4B] = data;
pokemini_update_sound();
update_sound();
break;
case 0x4C: /* Timer 3 sound-pivot (low)
Bit 0-7 R/W Timer 3 sound-pivot value bit 0-7
*/
m_pm_reg[0x4C] = data;
pokemini_update_sound();
update_sound();
break;
case 0x4D: /* Timer 3 sound-pivot (high)
Bit 0-7 R/W Timer 3 sound-pivot value bit 8-15
@ -1273,7 +1275,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Pulse-Width of 100% = Same as preset-value
*/
m_pm_reg[0x4D] = data;
pokemini_update_sound();
update_sound();
break;
case 0x4E: /* Timer 3 counter (low), read only
Bit 0-7 R/W Timer 3 counter value bit 0-7
@ -1323,7 +1325,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
break;
case 0x70: /* Sound related */
m_pm_reg[0x70] = data;
pokemini_update_sound();
update_sound();
break;
case 0x71: /* Sound volume
Bit 0-1 R/W Sound volume
@ -1335,7 +1337,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
Bit 3-7 Unused
*/
m_pm_reg[0x71] = data;
pokemini_update_sound();
update_sound();
break;
case 0x80: /* LCD control
Bit 0 R/W Invert colors; 0 - normal, 1 - inverted
@ -1470,7 +1472,7 @@ WRITE8_MEMBER(pokemini_state::pokemini_hwreg_w)
m_pm_reg[offset] = data;
}
READ8_MEMBER(pokemini_state::pokemini_hwreg_r)
READ8_MEMBER(pokemini_state::hwreg_r)
{
UINT8 data = m_pm_reg[offset];
@ -1496,46 +1498,30 @@ READ8_MEMBER(pokemini_state::pokemini_hwreg_r)
DEVICE_IMAGE_LOAD_MEMBER( pokemini_state, pokemini_cart )
{
if (image.software_entry() == NULL)
UINT32 size = m_cart->common_get_size("rom");
/* Verify that the image is big enough */
if (size <= 0x2100)
{
int size = image.length();
/* Verify that the image is big enough */
if (size <= 0x2100)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid ROM image: ROM image is too small");
return IMAGE_INIT_FAIL;
}
/* Verify that the image is not too big */
if (size > 0x1FFFFF)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid ROM image: ROM image is too big");
return IMAGE_INIT_FAIL;
}
/* Skip the first 0x2100 bytes */
image.fseek(0x2100, SEEK_SET);
size -= 0x2100;
if (size != image.fread( memregion("maincpu")->base() + 0x2100, size))
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Error occurred while reading ROM image");
return IMAGE_INIT_FAIL;
}
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid ROM image: ROM image is too small");
return IMAGE_INIT_FAIL;
}
else
/* Verify that the image is not too big */
if (size > 0x1fffff)
{
UINT8 *cart_rom = image.get_software_region("rom");
UINT32 cart_rom_size = image.get_software_region_length("rom");
memcpy(memregion("maincpu")->base() + 0x2100, cart_rom + 0x2100, cart_rom_size - 0x2100);
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid ROM image: ROM image is too big");
return IMAGE_INIT_FAIL;
}
m_cart->rom_alloc(size, 1);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
return IMAGE_INIT_PASS;
}
void pokemini_state::pokemini_prc_counter_callback()
void pokemini_state::prc_counter_callback()
{
address_space &space = m_maincpu->space( AS_PROGRAM );
m_prc.count++;
@ -1643,7 +1629,7 @@ void pokemini_state::pokemini_prc_counter_callback()
/* Set PRC Render interrupt */
m_pm_reg[0x27] |= 0x40;
pokemini_check_irqs();
check_irqs();
/* Check if the rendered data should be copied to the LCD */
if ( m_prc.copy_enabled )
@ -1667,7 +1653,7 @@ void pokemini_state::pokemini_prc_counter_callback()
/* Set PRC Copy interrupt */
m_pm_reg[0x27] |= 0x80;
pokemini_check_irqs();
check_irqs();
}
}
@ -1686,10 +1672,10 @@ void pokemini_state::machine_start()
/* Set up timers */
m_timers.seconds_timer = timer_alloc(TIMER_SECONDS);
m_timers.seconds_timer->adjust( attotime::zero, 0, attotime::from_seconds( 1 ) );
m_timers.seconds_timer->adjust(attotime::zero, 0, attotime::from_seconds(1));
m_timers.hz256_timer = timer_alloc(TIMER_256HZ);
m_timers.hz256_timer->adjust( attotime::zero, 0, attotime::from_hz( 256 ) );
m_timers.hz256_timer->adjust(attotime::zero, 0, attotime::from_hz(256));
m_timers.timer1 = timer_alloc(TIMER_1);
m_timers.timer1_hi = timer_alloc(TIMER_1_HI);
@ -1707,42 +1693,42 @@ void pokemini_state::machine_start()
void pokemini_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch ( id )
switch (id)
{
case TIMER_SECONDS:
pokemini_seconds_timer_callback();
seconds_timer_callback();
break;
case TIMER_256HZ:
pokemini_256hz_timer_callback();
timer_256hz_callback();
break;
case TIMER_1:
pokemini_timer1_callback();
timer1_callback();
break;
case TIMER_1_HI:
pokemini_timer1_hi_callback();
timer1_hi_callback();
break;
case TIMER_2:
pokemini_timer2_callback();
timer2_callback();
break;
case TIMER_2_HI:
pokemini_timer2_hi_callback();
timer2_hi_callback();
break;
case TIMER_3:
pokemini_timer3_callback();
timer3_callback();
break;
case TIMER_3_HI:
pokemini_timer3_hi_callback();
timer3_hi_callback();
break;
case TIMER_PRC:
pokemini_prc_counter_callback();
prc_counter_callback();
break;
}
}
@ -1765,8 +1751,8 @@ UINT32 pokemini_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
static MACHINE_CONFIG_START( pokemini, pokemini_state )
/* basic machine hardware */
MCFG_CPU_ADD( "maincpu", MINX, 4000000 )
MCFG_CPU_PROGRAM_MAP( pokemini_mem_map)
MCFG_CPU_ADD("maincpu", MINX, 4000000)
MCFG_CPU_PROGRAM_MAP(pokemini_mem_map)
MCFG_QUANTUM_TIME(attotime::from_hz(60))
@ -1783,7 +1769,7 @@ static MACHINE_CONFIG_START( pokemini, pokemini_state )
MCFG_DEFAULT_LAYOUT(layout_lcd)
MCFG_PALETTE_ADD( "palette", 4 )
MCFG_PALETTE_ADD("palette", 4)
MCFG_PALETTE_INIT_OWNER(pokemini_state, pokemini)
/* sound hardware */
@ -1793,14 +1779,12 @@ static MACHINE_CONFIG_START( pokemini, pokemini_state )
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
/* cartridge */
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("min,bin")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_INTERFACE("pokemini_cart")
MCFG_CARTSLOT_LOAD(pokemini_state,pokemini_cart)
MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "pokemini_cart")
MCFG_GENERIC_EXTENSIONS("bin,min")
MCFG_GENERIC_LOAD(pokemini_state, pokemini_cart)
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","pokemini")
MCFG_SOFTWARE_LIST_ADD("cart_list", "pokemini")
MACHINE_CONFIG_END
ROM_START( pokemini )

View File

@ -873,10 +873,8 @@ static MACHINE_CONFIG_START( portfolio, portfolio_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("keyboard", portfolio_state, keyboard_tick, attotime::from_usec(2500))
/* cartridge */
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin")
MCFG_CARTSLOT_INTERFACE("portfolio_cart")
MCFG_CARTSLOT_LOAD(portfolio_state,portfolio_cart)
MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM8_WIDTH, generic_plain_slot, "portfolio_cart")
MCFG_GENERIC_LOAD(portfolio_state, portfolio_cart)
/* memory card */
/* MCFG_MEMCARD_ADD("memcard_a")

View File

@ -1091,13 +1091,8 @@ static MACHINE_CONFIG_START( tek4051, tek4051_state )
MCFG_RAM_EXTRA_OPTIONS("16K,24K,32K")
// cartridge
MCFG_CARTSLOT_ADD("cart1")
MCFG_CARTSLOT_EXTENSION_LIST("bin")
MCFG_CARTSLOT_INTERFACE("tek4050_cart")
MCFG_CARTSLOT_ADD("cart2")
MCFG_CARTSLOT_EXTENSION_LIST("bin")
MCFG_CARTSLOT_INTERFACE("tek4050_cart")
MCFG_GENERIC_CARTSLOT_ADD("cartslot1", GENERIC_ROM8_WIDTH, generic_plain_slot, "tek4050_cart")
MCFG_GENERIC_CARTSLOT_ADD("cartslot2", GENERIC_ROM8_WIDTH, generic_plain_slot, "tek4050_cart")
MACHINE_CONFIG_END
@ -1132,13 +1127,8 @@ static MACHINE_CONFIG_START( tek4052, tek4052_state )
MCFG_RAM_EXTRA_OPTIONS("64K")
// cartridge
MCFG_CARTSLOT_ADD("cart1")
MCFG_CARTSLOT_EXTENSION_LIST("bin")
MCFG_CARTSLOT_INTERFACE("tek4050_cart")
MCFG_CARTSLOT_ADD("cart2")
MCFG_CARTSLOT_EXTENSION_LIST("bin")
MCFG_CARTSLOT_INTERFACE("tek4050_cart")
MCFG_GENERIC_CARTSLOT_ADD("cartslot1", GENERIC_ROM8_WIDTH, generic_plain_slot, "tek4050_cart")
MCFG_GENERIC_CARTSLOT_ADD("cartslot2", GENERIC_ROM8_WIDTH, generic_plain_slot, "tek4050_cart")
// software lists
MCFG_SOFTWARE_LIST_ADD("cart_list", "tek4052_cart")

View File

@ -7,7 +7,6 @@
#include "emu.h"
#include "cpu/i86/i86.h"
#include "imagedev/cartslot.h"
#include "bus/centronics/ctronics.h"
#include "machine/i8255.h"
#include "machine/ins8250.h"
@ -16,6 +15,9 @@
#include "sound/speaker.h"
#include "video/hd61830.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#define M80C88A_TAG "u1"
#define M82C55A_TAG "hpc101_u1"
#define M82C50A_TAG "hpc102_u1"

View File

@ -7,7 +7,6 @@
#include "emu.h"
#include "cpu/m6800/m6800.h"
#include "imagedev/cartslot.h"
#include "machine/ram.h"
#include "machine/6821pia.h"
#include "machine/6850acia.h"
@ -16,6 +15,8 @@
#include "machine/ram.h"
#include "sound/speaker.h"
#include "video/vector.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#define MC6800_TAG "u61"
#define MC6820_Y_TAG "u561"