mirror of
https://github.com/holub/mame
synced 2025-06-06 04:43:45 +03:00
and a few more. nw.
This commit is contained in:
parent
cc2592213b
commit
f4b085be08
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 )
|
||||
|
@ -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")
|
||||
|
@ -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")
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user